diff --git a/development/issues/open/274.html b/development/issues/open/274.html
index bfd57553c3b05c0769d3c09cf30a1b6c20f6962a..0adedea910b00f0420a7038b8ef63a5e39086897 100644
--- a/development/issues/open/274.html
+++ b/development/issues/open/274.html
@@ -13,15 +13,44 @@
     <li><a href="https://gitlab.schukai.com/oss/libraries/javascript/monster/-/issues/274">Issue #274</a></li>
     <li><a href="/">Back to overview</a></li>
 </ul>
+
+<monster-host>
+    <monster-config-manager>
+
+    </monster-config-manager>
+</monster-host>
+
 <main>
 
+
     <h2>Control with DOM datasource</h2>
+
     <monster-datasource-rest id="ds274-r"
                              data-monster-option-features-autoInit="true"
                              data-monster-option-write-url="/issue-274.json"
-                             data-monster-option-read-url="/issue-274.json?limit=1&page=${page}"
+                             data-monster-option-read-url="/issue-274.json?limit=1&page=${page}&q=${query}"
+                             data-monster-option-filter-id="ds274-filter"
+                             data-monster-option-features-filter="true"
     ></monster-datasource-rest>
 
+    <monster-tabs id="ds274-tabs">
+        <div data-monster-button-label="Filter">
+            <monster-datatable-filter id="ds274-filter"
+                                      data-monster-option-features-storedConfig="true"
+                                      data-monster-option-storedConfig-selector="#ds274-tabs"
+            >
+                <label data-monster-label="Input">Input Filter
+                    <monster-filter-input ></monster-filter-input>
+                </label>
+
+                <label slot="hidden" data-monster-label="Date Range">Date Range Filter
+                    <monster-filter-date-range></monster-filter-date-range>
+                </label>
+            </monster-datatable-filter>
+        </div>
+    </monster-tabs>
+
+
     <monster-pagination
             data-monster-option-datasource-selector="#ds274-r"
             data-monster-option-objectsperpage="1"
@@ -31,7 +60,8 @@
 
 
     <p> Datasource status
-        <monster-datasource-status data-monster-option-datasource-selector="#ds274-r"></monster-datasource-status></p>
+        <monster-datasource-status data-monster-option-datasource-selector="#ds274-r"></monster-datasource-status>
+    </p>
 
 
     <monster-datasource-save-button data-monster-option-datasource-selector="#ds274-r"></monster-datasource-save-button>
@@ -42,10 +72,14 @@
             data-monster-option-datasource-selector="#ds274-r">
         <monster-field-set>
 
-
-            <label>ID <monster-context-help>das ist eine hilfe</monster-context-help></label>
+            <label>ID
+                <monster-context-help>das ist eine hilfe</monster-context-help>
+            </label>
             <input data-monster-attributes="value path:data.id | tostring" data-monster-bind="path:data.id">
-            <label>Username <monster-context-help>das ist eine hilfe</monster-context-help> <monster-context-error>message</monster-context-error></label>
+            <label>Username
+                <monster-context-help>das ist eine hilfe</monster-context-help>
+                <monster-context-error>message</monster-context-error>
+            </label>
             <input data-monster-attributes="value path:data.username" data-monster-bind="path:data.username">
             <label>Full Name </label>
             <monster-input-group>
@@ -58,11 +92,13 @@
 
             <hr>
             <label for="mail">Email</label>
-            <input id="mail" type="email" data-monster-attributes="value path:data.email" data-monster-bind="path:data.email">
+            <input id="mail" type="email" data-monster-attributes="value path:data.email"
+                   data-monster-bind="path:data.email">
             <label for="age">Age</label>
             <!--input id="age" type="range" min="0" max="120" data-monster-attributes="value path:data.age" data-monster-bind="path:data.age"-->
 
-            <monster-select data-monster-attributes="value path:data.age" data-monster-bind="path:data.age" data-monster-bind-type="number">
+            <monster-select id="age"  data-monster-attributes="value path:data.age" data-monster-bind="path:data.age"
+                            data-monster-bind-type="number">
                 <div data-monster-value="1">1</div>
                 <div data-monster-value="28">28</div>
                 <div data-monster-value="37">37</div>
@@ -70,7 +106,6 @@
             </monster-select>
 
 
-
             <label>Registered Date</label>
             <input type="date" data-monster-attributes="value path:data.registered_date"
                    data-monster-bind="path:data.registered_date">
@@ -126,11 +161,16 @@
             <input data-monster-attributes="value path:data.status">
 
 
-
         </div>
 
     </monster-dataset>
-<hr><hr><hr><hr><hr><hr><hr>
+    <hr>
+    <hr>
+    <hr>
+    <hr>
+    <hr>
+    <hr>
+    <hr>
 
 </main>
 </body>
diff --git a/development/issues/open/274.mjs b/development/issues/open/274.mjs
index 30ce6d658585043a9fe7857915b679d162a540af..2d74cf8f6baee98acbeb8f24a094d003e9f765bc 100644
--- a/development/issues/open/274.mjs
+++ b/development/issues/open/274.mjs
@@ -19,6 +19,7 @@ import "../../../source/components/datatable/status.mjs";
 import "../../../source/components/datatable/change-button.mjs";
 import "../../../source/components/datatable/save-button.mjs";
 import "../../../source/components/datatable/pagination.mjs";
+import "../../../source/components/datatable/filter.mjs";
 import "../../../source/components/form/button.mjs";
 import "../../../source/components/form/form.mjs";
 import "../../../source/components/form/field-set.mjs";
@@ -27,6 +28,10 @@ import "../../../source/components/form/toggle-switch.mjs";
 import "../../../source/components/form/context-help.mjs";
 import "../../../source/components/form/context-error.mjs";
 import "../../../source/components/form/input-group.mjs";
+import "../../../source/components/datatable/filter/input.mjs";
+import "../../../source/components/datatable/filter/date-range.mjs";
+import "../../../source/components/layout/tabs.mjs";
+
 
 // DOM-Elemente für die Seiten-Datensätze
 const pageData1 = document.getElementById("ds274-d");
diff --git a/development/mock/issue-274.js b/development/mock/issue-274.js
index 4303a51677fe54baf793fb557683eb27bcd6110e..49aa9d431266d97f48f87ea34ceed6b2ae8a2b28 100644
--- a/development/mock/issue-274.js
+++ b/development/mock/issue-274.js
@@ -212,13 +212,23 @@ if (!Array.isArray(objects)) {
 const requestDelay = 40
 
 function wrapJsonWithPagination(data, page, limit) {
+
+    let pages= 0;
+
+    if (data.length===1) {
+        pages = 1
+    } else {
+        pages =  Math.ceil(data.length / limit);
+    }
+
+
     return JSON.stringify({
         dataset: data,
         sys: {
             pagination: {
                 objectsPerPage: limit,
-                pages: Math.ceil(objects.length / limit),
-                currentPage: page
+                pages:pages ,
+                currentPage: parseInt(page, 10),
             }
         }
     })
@@ -254,23 +264,28 @@ export default [
                     limit = parseInt(q.limit)
                 }
 
+                // if the string q containes "=*" or =all, return all objects
+                if(q.q.includes("=*") || q.q === "all" || q.q === "" || q.q === "*") {
+                    filtered = objects
+                } else if (q.q) {
+                    const query = q.q.toLowerCase()
+                    filtered = objects.filter(item => item.username.toLowerCase().includes(query))
+                } else {
+                    filtered = objects
+                }
+
                 if (q.page) {
                     const page = parseInt(q.page)
                     const start = (page - 1) * limit
                     const end = start + limit
-                    filtered = objects.slice(start, end)
+                    filtered = filtered.slice(start, end)
                 } else {
-                    filtered = objects.slice(0, limit)
+                    filtered = filtered.slice(0, limit)
                 }
 
-                if (q.q) {
-                    const query = q.q.toLowerCase()
-                    filtered = objects.filter(item => item.name.toLowerCase().includes(query))
-
-                }
 
                 setTimeout(function () {
-                    res.end(wrapJsonWithPagination(filtered, q.page || 1, limit))
+                    res.end(wrapJsonWithPagination(filtered, q.page || 1,limit))
                 }, requestDelay);
 
                 return
diff --git a/source/components/datatable/datasource/rest.mjs b/source/components/datatable/datasource/rest.mjs
index bddb4dbcdab45310b5685c04e77b8dfb7195c34b..c17b4752e2ba37187ec433b48d6e10d850a449cb 100644
--- a/source/components/datatable/datasource/rest.mjs
+++ b/source/components/datatable/datasource/rest.mjs
@@ -104,7 +104,7 @@ class Rest extends Datasource {
 	 * @property {string} templates.main Main template
 	 * @property {Object} features Feature definitions
 	 * @property {boolean} features.autoInit If true, the component is initialized automatically
-	 * @property {boolean} features.filter If true, the component is initialized automatically
+	 * @property {boolean} features.filter If true, the filter.id is used to attach a filter control
 	 * @property {Object} autoInit Auto init definitions
 	 * @property {boolean} autoInit.intersectionObserver If true, the intersection observer is initialized automatically
 	 * @property {boolean} autoInit.oneTime If true, the intersection observer is initialized only once
@@ -131,7 +131,7 @@ class Rest extends Datasource {
 
 		restOptions.read.parameters = {
 			filter: null,
-			oderBy: null,
+			orderBy: null,
 			page: "1",
 		};
 
@@ -199,7 +199,6 @@ class Rest extends Datasource {
 	[assembleMethodSymbol]() {
 		super[assembleMethodSymbol]();
 		initEventHandler.call(this);
-		initAutoInit.call(this);
 	}
 
 	/**
@@ -260,6 +259,12 @@ class Rest extends Datasource {
 		queueMicrotask(() => {
 			if (this.getOption("features.filter", false) === true) {
 				initFilter.call(this);
+
+				if (!this[filterObserverSymbol]) {
+					initAutoInit.call(this);
+				}
+			} else {
+				initAutoInit.call(this);
 			}
 		});
 	}
@@ -286,12 +291,26 @@ class Rest extends Datasource {
 		this[dataSourceSymbol].setOption("read", opt);
 
 		let url = this.getOption("read.url");
-		const formatter = new Formatter(this.getOption("read.parameters"));
-
 		if (!url) {
 			return Promise.reject(new Error("No url defined"));
 		}
 
+		const param = this.getOption("read.parameters", {});
+
+		if (param.query === null || param.query === undefined) {
+			param.query = "";
+		}
+
+		if (param.page === null || param.page === undefined) {
+			param.page = "1";
+		}
+
+		if (param.orderBy === null || param.orderBy === undefined) {
+			param.orderBy = "";
+		}
+
+		const formatter = new Formatter(param);
+
 		url = formatter.format(url);
 
 		this[dataSourceSymbol].setOption("read.url", url);
@@ -570,8 +589,7 @@ function initIntersectionObserver() {
  */
 function getTemplate() {
 	// language=HTML
-	return `
-        <slot></slot>`;
+	return `<slot></slot>`;
 }
 
 registerCustomElement(Rest);
diff --git a/source/components/datatable/filter.mjs b/source/components/datatable/filter.mjs
index 8cfea89d4680a01b7233af992ef4f03068dd8003..1ba029f682175a00d467f02ce0ff7d788beb476c 100644
--- a/source/components/datatable/filter.mjs
+++ b/source/components/datatable/filter.mjs
@@ -13,7 +13,10 @@
  */
 
 import { instanceSymbol } from "../../constants.mjs";
-import { findTargetElementFromEvent } from "../../dom/events.mjs";
+import {
+	findTargetElementFromEvent,
+	fireCustomEvent,
+} from "../../dom/events.mjs";
 import {
 	findElementWithIdUpwards,
 	findElementWithSelectorUpwards,
@@ -25,7 +28,6 @@ import {
 	registerCustomElement,
 } from "../../dom/customelement.mjs";
 import { ID } from "../../types/id.mjs";
-import { DeadMansSwitch } from "../../util/deadmansswitch.mjs";
 import { Settings } from "./filter/settings.mjs";
 import { FilterStyleSheet } from "./stylesheet/filter.mjs";
 import { getDocument, getWindow } from "../../dom/util.mjs";
@@ -54,6 +56,14 @@ import {
 
 import "./filter/select.mjs";
 
+import "../form/button.mjs";
+import "../form/select.mjs";
+import "../form/popper-button.mjs";
+import "../form/toggle-switch.mjs";
+import "../form/context-help.mjs";
+import "../form/context-error.mjs";
+import "../form/message-state-button.mjs";
+
 export { Filter };
 
 /**
@@ -130,9 +140,23 @@ const sizeDataSymbol = Symbol("sizeData");
  */
 const debounceSizeSymbol = Symbol("debounceSize");
 
+/**
+ * @private
+ * @type {symbol}
+ */
+const hashChangeSymbol = Symbol("hashChange");
+
 /**
  * The Filter component is used to show and handle the filter values.
  *
+ * @fragments /fragments/components/datatable/filter
+ *
+ * @example /examples/components/datatable/filter-simple First filter
+ * @example /examples/components/datatable/filter-advanced Advanced filter
+ * @example /examples/components/datatable/filter-store Store filter
+ *
+ * @issue https://localhost.alvine.dev:8443/development/issues/closed/272.html
+ *
  * @copyright schukai GmbH
  * @summary The Filter component is used to show and handle the filter values.
  */
@@ -143,6 +167,9 @@ class Filter extends CustomElement {
 	constructor() {
 		super();
 		this[settingsSymbol] = new Settings();
+
+		// debounce the hash change event if doSearch is called by click the search button
+		this[hashChangeSymbol] = 0;
 	}
 
 	/**
@@ -171,7 +198,7 @@ class Filter extends CustomElement {
 
 	/**
 	 *
-	 * @return {{Filter}}
+	 * @return {Filter}
 	 */
 	resetFailureMessage() {
 		this[searchButtonElementSymbol].hideMessage();
@@ -181,7 +208,7 @@ class Filter extends CustomElement {
 
 	/**
 	 *
-	 * @return {{Filter}}
+	 * @return {Filter}
 	 */
 	showSuccess() {
 		this[searchButtonElementSymbol].setState(
@@ -210,8 +237,10 @@ class Filter extends CustomElement {
 	 * @property {Object} formatter.marker Marker definitions
 	 * @property {Object} formatter.marker.open Marker open
 	 * @property {Object} formatter.marker.close Marker close
+	 * @property {Object} features Feature definitions
+	 * @property {boolean} features.storedConfig Stored configuration, this replaces the setting `storedConfig.enabled` @since 3.97.0
 	 * @property {Object} storedConfig Stored configuration
-	 * @property {boolean} storedConfig.enabled Enabled
+	 * @property {boolean} storedConfig.enabled The store has been enabled, this option will no longer have any effect. @deprecated 20250101
 	 * @property {string} storedConfig.selector Selector
 	 * @property {Object} timeouts Timeout definitions
 	 * @property {number} timeouts.message Message timeout
@@ -227,19 +256,23 @@ class Filter extends CustomElement {
 			templates: {
 				main: getTemplate(),
 			},
+
 			formatter: {
 				marker: {
 					open: null,
 					close: null,
 				},
 			},
+
 			labels: {
 				search: "Search",
 				reset: "Reset",
 				save: "Save",
 				"filter-name": "Filter name",
-				"empty-query-and-no-default": "Please select a filter",
-				"query-not-changed": "The query has not changed",
+				"empty-query-and-no-default":
+					"The query is empty and there is no default query.",
+				"query-not-changed":
+					"The search request has not changed, so no search is required.",
 			},
 
 			templateMapping: {
@@ -247,6 +280,10 @@ class Filter extends CustomElement {
 				"filter-name-label": name,
 			},
 
+			features: {
+				storedConfig: false,
+			},
+
 			storedConfig: {
 				enabled: true,
 				selector: "",
@@ -268,8 +305,8 @@ class Filter extends CustomElement {
 				},
 			},
 
-			query: undefined,
-			defaultQuery: "",
+			query: null,
+			defaultQuery: null,
 			eventProcessing: true,
 		});
 	}
@@ -284,12 +321,14 @@ class Filter extends CustomElement {
 
 	/**
 	 * @return {FilterButton}
+	 * @fires monster-filter-initialized
 	 */
 	[assembleMethodSymbol]() {
 		this.setOption(
 			"templateMapping.filter-save-label",
 			this.getOption("labels.save"),
 		);
+
 		this.setOption(
 			"templateMapping.filter-name-label",
 			this.getOption("labels.filter-name"),
@@ -302,12 +341,19 @@ class Filter extends CustomElement {
 
 		initFromConfig
 			.call(this)
-			.then(() => {
-				initFilter.call(this);
-				updateFilterTabs.call(this);
-			})
+			.then(() => {})
 			.catch((error) => {
 				addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, error?.message);
+			})
+			.finally(() => {
+				initFilter.call(this);
+				updateFilterTabs.call(this);
+				doSearch
+					.call(this, { showEffect: false })
+					.then(() => {
+						fireCustomEvent(this, "monster-filter-initialized");
+					})
+					.catch(() => {});
 			});
 	}
 
@@ -316,7 +362,6 @@ class Filter extends CustomElement {
 	 */
 	connectedCallback() {
 		super.connectedCallback();
-
 		getWindow().addEventListener(
 			"hashchange",
 			this[locationChangeHandlerSymbol],
@@ -385,10 +430,13 @@ function updateFilterSelections() {
 	queueMicrotask(() => {
 		const options = this[settingsSymbol].getOptions();
 		this[filterSelectElementSymbol].setOption("options", options);
-		queueMicrotask(() => {
-			this[filterSelectElementSymbol].value =
-				this[settingsSymbol].getSelected();
-		});
+
+		setTimeout(() => {
+			window.requestAnimationFrame(() => {
+				this[filterSelectElementSymbol].value =
+					this[settingsSymbol].getSelected();
+			});
+		}, 0);
 	});
 }
 
@@ -411,7 +459,12 @@ function initFilter() {
 		.forEach((element) => {
 			const label = element.getAttribute("data-monster-label");
 			if (!label) {
-				throw new Error("no filter label is defined");
+				addAttributeToken(
+					this,
+					ATTRIBUTE_ERRORMESSAGE,
+					"no filter label is defined",
+				);
+				return;
 			}
 
 			let value = element.id;
@@ -448,6 +501,7 @@ function initFilter() {
 
 			this[settingsSymbol].set({ value, label, visible });
 		});
+
 	updateFilterSelections.call(this);
 }
 
@@ -499,6 +553,33 @@ function setSlotAttribute(element, visible) {
  */
 function initEventHandler() {
 	const self = this;
+
+	let lastHash = getGlobal().location.hash;
+	self[locationChangeHandlerSymbol] = () => {
+		if (lastHash === getGlobal().location.hash) {
+			return;
+		}
+
+		/**
+		 * debounce the hash change event if doSearch
+		 * is called by click the search button
+		 */
+		if (self[hashChangeSymbol] > 0) {
+			self[hashChangeSymbol]--;
+			return;
+		}
+
+		initFilter.call(this);
+
+		doSearch
+			.call(self)
+			.then(() => {})
+			.catch((error) => {})
+			.finally(() => {
+				lastHash = getGlobal().location.hash;
+			});
+	};
+
 	/**
 	 * Monster.Components.Form.event:monster-selection-cleared
 	 */
@@ -542,6 +623,7 @@ function initEventHandler() {
 		);
 	}
 
+	/** save the current filter */
 	if (self[filterSaveActionButtonElementSymbol]) {
 		self[filterSaveActionButtonElementSymbol].setOption(
 			"actions.click",
@@ -641,6 +723,8 @@ function initEventHandler() {
 	}
 
 	self[searchButtonElementSymbol].setOption("actions.click", () => {
+		self[hashChangeSymbol] = 1;
+
 		doSearch
 			.call(self)
 			.then(() => {})
@@ -684,7 +768,10 @@ function initEventHandler() {
 		}
 
 		if (event.keyCode === 13) {
-			doSearch.call(self, { showEffect: false });
+			doSearch
+				.call(self, { showEffect: false })
+				.then(() => {})
+				.catch((error) => {});
 		}
 	});
 
@@ -696,6 +783,7 @@ function initEventHandler() {
 }
 
 function initTabEvents() {
+	const self = this;
 	this[filterTabElementSymbol].addEventListener(
 		"monster-tab-changed",
 		(event) => {
@@ -836,7 +924,18 @@ function doSearch({ showEffect } = { showEffect: true }) {
 		.call(this)
 		.then((query) => {
 			const buildQuery = buildSearchQuery.call(this, query);
-			if (buildQuery === "" && !this.getOption("defaultQuery")) {
+			if (buildQuery === null) {
+				const msg = this.getOption("labels.empty-query-and-no-default");
+				if (showEffect) {
+					this[searchButtonElementSymbol].removeState();
+					this[searchButtonElementSymbol]
+						.setMessage(msg)
+						.showMessage(this.getOption("timeouts.message", 4000));
+				}
+				return Promise.reject(new Error(msg));
+			}
+
+			if (buildQuery === "" && this.getOption("defaultQuery") === null) {
 				const msg = this.getOption("labels.empty-query-and-no-default");
 
 				if (showEffect) {
@@ -846,7 +945,7 @@ function doSearch({ showEffect } = { showEffect: true }) {
 						.showMessage(this.getOption("timeouts.message", 4000));
 				}
 
-				throw new Error(msg);
+				return Promise.reject(new Error(msg));
 			}
 
 			if (buildQuery === this.getOption("query")) {
@@ -859,7 +958,7 @@ function doSearch({ showEffect } = { showEffect: true }) {
 						.showMessage(this.getOption("timeouts.message", 4000));
 				}
 
-				throw new Error(msg);
+				return Promise.reject(new Error(msg));
 			}
 
 			if (showEffect) {
@@ -870,6 +969,8 @@ function doSearch({ showEffect } = { showEffect: true }) {
 			}
 
 			this.setOption("query", buildSearchQuery.call(this, query));
+
+			return Promise.resolve();
 		})
 		.catch((error) => {
 			if (error instanceof Error) {
@@ -945,7 +1046,6 @@ function collectSearchQueries() {
 					return;
 				}
 
-				//const visible = window.getComputedStyle(element).display !== "none";
 				const visible = getVisibilityFromSlotAttribute(element);
 				if (!visible) {
 					return;
@@ -1136,49 +1236,50 @@ function updateConfig() {
  */
 function getTemplate() {
 	// language=HTML
-	return `<div data-monster-role="control" part="control">
-    <div data-monster-role="container">
-        <div data-monster-role="layout">
-            <div data-monster-role="filter">
-                <slot></slot>
-                <slot name="hidden"></slot>
-            </div>
-            <div data-monster-role="select-and-search">
-                <monster-message-state-button data-monster-role="search-button" class="stretched-control"
-                                              data-monster-replace="path:labels.search">
-                </monster-message-state-button>
-                <monster-select class="stretched-control"
-                                data-monster-selected-template="summary"
-                                data-monster-option-type="checkbox"
-                                data-monster-option-filter-mode="options"
-                                data-monster-option-filter-position="popper"
-                                data-monster-role="filter-select"></monster-select>
-                <monster-popper-button data-monster-role="save-button" class="stretched-control"
-                                       data-monster-attributes="data-monster-visible path:storedConfig.enabled">
-                    <div slot="button">\${filter-save-label}</div>
-                    <div class="monster-form" data-monster-role="form">
-
-                        <label for="filter-name">\${filter-name-label}
-                            <input name="filter-name"
-                                   type="search"
-                                   class="monster-margin-bottom-5"></label>
-                        <monster-message-state-button
-                                data-monster-role="save-action-button"
-                                data-monster-option-labels-button="\${filter-save-label}">
+	return `
+        <div data-monster-role="control" part="control">
+            <div data-monster-role="container">
+                <div data-monster-role="layout">
+                    <div data-monster-role="filter">
+                        <slot></slot>
+                        <slot name="hidden"></slot>
+                    </div>
+                    <div data-monster-role="select-and-search">
+                        <monster-message-state-button data-monster-role="search-button" class="stretched-control"
+                                                      data-monster-replace="path:labels.search">
                         </monster-message-state-button>
-
+                        <monster-select class="stretched-control"
+                                        data-monster-selected-template="summary"
+                                        data-monster-option-type="checkbox"
+                                        data-monster-option-filter-mode="options"
+                                        data-monster-option-filter-position="popper"
+                                        data-monster-role="filter-select"></monster-select>
+                        <monster-popper-button data-monster-role="save-button" class="stretched-control"
+                                               data-monster-attributes="data-monster-visible path:features.storedConfig">
+                            <div slot="button">\${filter-save-label}</div>
+                            <div class="monster-form" data-monster-role="form">
+
+                                <label for="filter-name">\${filter-name-label}
+                                    <input name="filter-name"
+                                           type="search"
+                                           class="monster-margin-bottom-5"></label>
+                                <monster-message-state-button
+                                        data-monster-role="save-action-button"
+                                        data-monster-option-labels-button="\${filter-save-label}">
+                                </monster-message-state-button>
+
+                            </div>
+                        </monster-popper-button>
+                        <monster-button data-monster-role="reset-button" class="stretched-control"
+                                        data-monster-replace="path:labels.reset">
+                        </monster-button>
                     </div>
-                </monster-popper-button>
-                <monster-button data-monster-role="reset-button" class="stretched-control"
-                                data-monster-replace="path:labels.reset">
-                </monster-button>
-            </div>
 
+                </div>
+                <input class="hidden" name="query" data-monster-role="query"
+                       data-monster-attributes="value path:query">
+            </div>
         </div>
-        <input class="hidden" name="query" data-monster-role="query"
-               data-monster-attributes="value path:query">
-    </div>
-</div>
     `;
 }
 
diff --git a/source/data/extend.mjs b/source/data/extend.mjs
index cb82538ccd8bc404600dda238cc9a7a9845150e6..cd0dc94e37ece1a6f3d3f8bb875e8d4cf9b615b0 100644
--- a/source/data/extend.mjs
+++ b/source/data/extend.mjs
@@ -53,7 +53,8 @@ function extend(...args) {
 		for (const k in a) {
 			const v = a?.[k];
 
-			if ((k in o) && v === o?.[k]) {
+			if (k in o && v === o?.[k]) {
+				// k in o is for the case of undefined
 				continue;
 			}
 
diff --git a/source/data/transformer.mjs b/source/data/transformer.mjs
index 58adf1dec114a177dff8fd7b6ab420583866004b..f2caccab73da9a46bd9d2bb6585bb73c697d4468 100644
--- a/source/data/transformer.mjs
+++ b/source/data/transformer.mjs
@@ -265,9 +265,11 @@ function transform(value) {
 			validateString(value);
 			return value.toUpperCase();
 
+		case "to-string":
 		case "tostring":
 			return `${value}`;
 
+		case "to-integer":
 		case "tointeger":
 			const n = parseInt(value);
 			validateInteger(n);
diff --git a/source/text/formatter.mjs b/source/text/formatter.mjs
index 70b53a3f168e6a18a45586ee2f314ff63f4c7bb0..d521a2182517dddeeb436d4af7fb813d2bb2edb7 100644
--- a/source/text/formatter.mjs
+++ b/source/text/formatter.mjs
@@ -290,7 +290,6 @@ function tokenize(text, openMarker, closeMarker) {
 	const callbacks = this[internalSymbol]["callbacks"];
 
 	while (true) {
-
 		const startIndex = text.indexOf(openMarker);
 		// no marker
 		if (startIndex === -1) {
@@ -343,7 +342,7 @@ function tokenize(text, openMarker, closeMarker) {
 		const t1 = key.split("|").shift().trim(); // pipe symbol
 		const t2 = t1.split("::").shift().trim(); // key value delimiter
 		const t3 = t2.split(".").shift().trim(); // path delimiter
-		const prefix = (t3 in this[workingDataSymbol]) ? "path:" : "static:";
+		const prefix = t3 in this[workingDataSymbol] ? "path:" : "static:";
 
 		let command = "";
 		if (
diff --git a/source/types/proxyobserver.mjs b/source/types/proxyobserver.mjs
index 6bab2d64ac23906039518bb48778c5b376430f7a..cfcc8ba3e0ccee1bf6913c93907e9b40d16d9305 100644
--- a/source/types/proxyobserver.mjs
+++ b/source/types/proxyobserver.mjs
@@ -152,7 +152,7 @@ function getHandler() {
 	const handler = {
 		// https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver
 		get: function (target, key, receiver) {
-                        // this is an internal hack to identify proxy
+			// this is an internal hack to identify proxy
 			if (key === proxyInstanceMarker) {
 				return proxyInstanceMarker;
 			}
diff --git a/source/types/version.mjs b/source/types/version.mjs
index 9bddabf8e02793a5f427d55684ff62def624e758..1ea38f08efccb57d77d99b696c373e4935b4694a 100644
--- a/source/types/version.mjs
+++ b/source/types/version.mjs
@@ -156,7 +156,7 @@ function getMonsterVersion() {
 	}
 
 	/** don't touch, replaced by make with package.json version */
-	monsterVersion = new Version("3.96.1");
+	monsterVersion = new Version("3.96.2");
 
 	return monsterVersion;
 }
diff --git a/test/cases/monster.mjs b/test/cases/monster.mjs
index b9c9705c0a18837c86bb8c52cdf6d1702e6fbcb4..fa1ecef47f0bd437c55508aa76ea85282782dc00 100644
--- a/test/cases/monster.mjs
+++ b/test/cases/monster.mjs
@@ -7,7 +7,7 @@ describe('Monster', function () {
         let monsterVersion
 
         /** don´t touch, replaced by make with package.json version */
-        monsterVersion = new Version("3.96.1")
+        monsterVersion = new Version("3.96.2")
 
         let m = getMonsterVersion();
 
diff --git a/test/web/test.html b/test/web/test.html
index 3c478e4c8eef6508885427c85c12caccb8d3b831..d8047c7e2e2e2593711ad423c52f8352b519413f 100644
--- a/test/web/test.html
+++ b/test/web/test.html
@@ -9,8 +9,8 @@
 </head>
 <body>
 <div id="headline" style="display: flex;align-items: center;justify-content: center;flex-direction: column;">
-  <h1 style='margin-bottom: 0.1em;'>Monster 3.96.1</h1>
-  <div id="lastupdate" style='font-size:0.7em'>last update Di 31. Dez 23:30:20 CET 2024</div>
+  <h1 style='margin-bottom: 0.1em;'>Monster 3.96.2</h1>
+  <div id="lastupdate" style='font-size:0.7em'>last update Fr 3. Jan 15:17:06 CET 2025</div>
 </div>
 <div id="mocha-errors"
      style="color: red;font-weight: bold;display: flex;align-items: center;justify-content: center;flex-direction: column;margin:20px;"></div>
diff --git a/test/web/tests.js b/test/web/tests.js
index 3f9d7033d2053ab77f207cb3531bfa31a67377e7..bef9061b0882ee2f9571ce4939890982c087769f 100644
--- a/test/web/tests.js
+++ b/test/web/tests.js
@@ -39,7 +39,23 @@ try {
     mod
   ));
 
+  // source/constants.mjs
+  var internalSymbol, internalStateSymbol, instanceSymbol, proxyInstanceMarker;
+  var init_constants = __esm({
+    "source/constants.mjs"() {
+      internalSymbol = Symbol.for("@schukai/monster/internal");
+      internalStateSymbol = Symbol.for("@schukai/monster/state");
+      instanceSymbol = Symbol.for("@schukai/monster/instance");
+      proxyInstanceMarker = Symbol.for(
+        "@schukai/monster/proxy-instance-marker"
+      );
+    }
+  });
+
   // source/types/is.mjs
+  function isProxy(value) {
+    return value?.[proxyInstanceMarker] === proxyInstanceMarker;
+  }
   function isIterable(value) {
     if (value === void 0) return false;
     if (value === null) return false;
@@ -107,6 +123,7 @@ try {
   }
   var init_is = __esm({
     "source/types/is.mjs"() {
+      init_constants();
     }
   });
 
@@ -279,7 +296,7 @@ try {
       }
       for (const k in a2) {
         const v = a2?.[k];
-        if (v === o?.[k]) {
+        if (k in o && v === o?.[k]) {
           continue;
         }
         if (isObject(v) && typeOf(v) === "object" || isArray(v)) {
@@ -4753,10 +4770,10 @@ ${values.join("\n")}` : `${blockName} :`;
     }
   });
 
-  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/enums.js
+  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/enums.js
   var AsnTypeTypes, AsnPropTypes;
   var init_enums = __esm({
-    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/enums.js"() {
+    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/enums.js"() {
       (function(AsnTypeTypes2) {
         AsnTypeTypes2[AsnTypeTypes2["Sequence"] = 0] = "Sequence";
         AsnTypeTypes2[AsnTypeTypes2["Set"] = 1] = "Set";
@@ -4794,33 +4811,33 @@ ${values.join("\n")}` : `${blockName} :`;
     }
   });
 
-  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/types/bit_string.js
+  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/types/bit_string.js
   var import_pvtsutils;
   var init_bit_string = __esm({
-    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/types/bit_string.js"() {
+    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/types/bit_string.js"() {
       init_index_es();
       import_pvtsutils = __toESM(require_build());
     }
   });
 
-  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/types/octet_string.js
+  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/types/octet_string.js
   var import_pvtsutils2;
   var init_octet_string = __esm({
-    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/types/octet_string.js"() {
+    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/types/octet_string.js"() {
       init_index_es();
       import_pvtsutils2 = __toESM(require_build());
     }
   });
 
-  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/types/index.js
+  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/types/index.js
   var init_types = __esm({
-    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/types/index.js"() {
+    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/types/index.js"() {
       init_bit_string();
       init_octet_string();
     }
   });
 
-  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/converters.js
+  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/converters.js
   function createStringConverter(Asn1Type) {
     return {
       fromASN: (value) => value.valueBlock.value,
@@ -4879,7 +4896,7 @@ ${values.join("\n")}` : `${blockName} :`;
   }
   var AsnAnyConverter, AsnIntegerConverter, AsnEnumeratedConverter, AsnBitStringConverter, AsnObjectIdentifierConverter, AsnBooleanConverter, AsnOctetStringConverter, AsnUtf8StringConverter, AsnBmpStringConverter, AsnUniversalStringConverter, AsnNumericStringConverter, AsnPrintableStringConverter, AsnTeletexStringConverter, AsnVideotexStringConverter, AsnIA5StringConverter, AsnGraphicStringConverter, AsnVisibleStringConverter, AsnGeneralStringConverter, AsnCharacterStringConverter, AsnUTCTimeConverter, AsnGeneralizedTimeConverter, AsnNullConverter;
   var init_converters = __esm({
-    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/converters.js"() {
+    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/converters.js"() {
       init_index_es();
       init_enums();
       init_types();
@@ -4949,7 +4966,7 @@ ${values.join("\n")}` : `${blockName} :`;
     }
   });
 
-  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/helper.js
+  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/helper.js
   function isConvertible(target) {
     if (typeof target === "function" && target.prototype) {
       if (target.prototype.toASN && target.prototype.fromASN) {
@@ -4989,14 +5006,14 @@ ${values.join("\n")}` : `${blockName} :`;
     return true;
   }
   var init_helper = __esm({
-    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/helper.js"() {
+    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/helper.js"() {
     }
   });
 
-  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/schema.js
+  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/schema.js
   var AsnSchemaStorage;
   var init_schema = __esm({
-    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/schema.js"() {
+    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/schema.js"() {
       init_index_es();
       init_enums();
       init_helper();
@@ -5146,19 +5163,19 @@ ${values.join("\n")}` : `${blockName} :`;
     }
   });
 
-  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/storage.js
+  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/storage.js
   var schemaStorage;
   var init_storage = __esm({
-    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/storage.js"() {
+    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/storage.js"() {
       init_schema();
       schemaStorage = new AsnSchemaStorage();
     }
   });
 
-  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/decorators.js
+  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/decorators.js
   var AsnType, AsnProp;
   var init_decorators = __esm({
-    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/decorators.js"() {
+    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/decorators.js"() {
       init_converters();
       init_enums();
       init_storage();
@@ -5193,10 +5210,10 @@ ${values.join("\n")}` : `${blockName} :`;
     }
   });
 
-  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/errors/schema_validation.js
+  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/errors/schema_validation.js
   var AsnSchemaValidationError;
   var init_schema_validation = __esm({
-    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/errors/schema_validation.js"() {
+    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/errors/schema_validation.js"() {
       AsnSchemaValidationError = class extends Error {
         constructor() {
           super(...arguments);
@@ -5206,17 +5223,17 @@ ${values.join("\n")}` : `${blockName} :`;
     }
   });
 
-  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/errors/index.js
+  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/errors/index.js
   var init_errors = __esm({
-    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/errors/index.js"() {
+    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/errors/index.js"() {
       init_schema_validation();
     }
   });
 
-  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/parser.js
+  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/parser.js
   var AsnParser;
   var init_parser = __esm({
-    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/parser.js"() {
+    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/parser.js"() {
       init_index_es();
       init_enums();
       init_converters();
@@ -5345,10 +5362,10 @@ ${values.join("\n")}` : `${blockName} :`;
     }
   });
 
-  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/serializer.js
+  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/serializer.js
   var AsnSerializer;
   var init_serializer = __esm({
-    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/serializer.js"() {
+    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/serializer.js"() {
       init_index_es();
       init_converters();
       init_enums();
@@ -5489,16 +5506,16 @@ ${values.join("\n")}` : `${blockName} :`;
     }
   });
 
-  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/objects.js
+  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/objects.js
   var init_objects = __esm({
-    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/objects.js"() {
+    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/objects.js"() {
     }
   });
 
-  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/convert.js
+  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/convert.js
   var import_pvtsutils3, AsnConvert;
   var init_convert = __esm({
-    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/convert.js"() {
+    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/convert.js"() {
       init_index_es();
       import_pvtsutils3 = __toESM(require_build());
       init_parser();
@@ -5522,9 +5539,9 @@ ${values.join("\n")}` : `${blockName} :`;
     }
   });
 
-  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/index.js
+  // node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/index.js
   var init_es2015 = __esm({
-    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.13/node_modules/@peculiar/asn1-schema/build/es2015/index.js"() {
+    "node_modules/.pnpm/@peculiar+asn1-schema@2.3.15/node_modules/@peculiar/asn1-schema/build/es2015/index.js"() {
       init_converters();
       init_types();
       init_decorators();
@@ -11526,16 +11543,6 @@ ${key.data.toString("base64")}
     }
   });
 
-  // source/constants.mjs
-  var internalSymbol, internalStateSymbol, instanceSymbol;
-  var init_constants = __esm({
-    "source/constants.mjs"() {
-      internalSymbol = Symbol.for("@schukai/monster/internal");
-      internalStateSymbol = Symbol.for("@schukai/monster/state");
-      instanceSymbol = Symbol.for("@schukai/monster/instance");
-    }
-  });
-
   // node_modules/.pnpm/@popperjs+core@2.11.8/node_modules/@popperjs/core/lib/enums.js
   var top, bottom, right, left, auto, basePlacements, start, end, clippingParents, viewport, popper, reference, variationPlacements, placements, beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite, modifierPhases;
   var init_enums2 = __esm({
@@ -14353,23 +14360,15 @@ ${key.data.toString("base64")}
         return copy;
       }
       if (typeof Element !== "undefined" && obj instanceof Element) return obj;
-      if (typeof HTMLDocument !== "undefined" && obj instanceof HTMLDocument)
-        return obj;
+      if (typeof Document !== "undefined" && obj instanceof Document) return obj;
       if (typeof DocumentFragment !== "undefined" && obj instanceof DocumentFragment)
         return obj;
       if (obj === getGlobal()) return obj;
-      if (typeof globalContext !== "undefined" && obj === globalContext)
-        return obj;
       if (typeof window !== "undefined" && obj === window) return obj;
       if (typeof document !== "undefined" && obj === document) return obj;
       if (typeof navigator !== "undefined" && obj === navigator) return obj;
       if (typeof JSON !== "undefined" && obj === JSON) return obj;
-      try {
-        if (obj instanceof Proxy) {
-          return obj;
-        }
-      } catch (e) {
-      }
+      if (isProxy(obj)) return obj;
       return cloneObject(obj);
     }
     throw new Error("unable to clone obj! its type isn't supported.");
@@ -16414,8 +16413,10 @@ ${key.data.toString("base64")}
       case "touppercase":
         validateString(value);
         return value.toUpperCase();
+      case "to-string":
       case "tostring":
         return `${value}`;
+      case "to-integer":
       case "tointeger":
         const n = parseInt(value);
         validateInteger(n);
@@ -17053,7 +17054,7 @@ ${key.data.toString("base64")}
       const t1 = key.split("|").shift().trim();
       const t2 = t1.split("::").shift().trim();
       const t3 = t2.split(".").shift().trim();
-      const prefix = this[workingDataSymbol]?.[t3] ? "path:" : "static:";
+      const prefix = t3 in this[workingDataSymbol] ? "path:" : "static:";
       let command = "";
       if (prefix && key.indexOf(prefix) !== 0 && key.indexOf("path:") !== 0 && key.indexOf("static:") !== 0) {
         command = prefix;
@@ -17718,6 +17719,9 @@ ${key.data.toString("base64")}
     const handler = {
       // https://262.ecma-international.org/9.0/#sec-proxy-object-internal-methods-and-internal-slots-get-p-receiver
       get: function(target, key, receiver) {
+        if (key === proxyInstanceMarker) {
+          return proxyInstanceMarker;
+        }
         const value = Reflect.get(target, key, receiver);
         if (typeof key === "symbol") {
           return value;
@@ -17844,7 +17848,7 @@ ${key.data.toString("base64")}
         /**
          * @since 1.24.0
          * @param {Object} obj
-         * @return {Monster.Types.ProxyObserver}
+         * @return {ProxyObserver}
          */
         setSubject(obj) {
           let i;
@@ -18277,7 +18281,11 @@ ${key.data.toString("base64")}
         return;
       }
       queueMicrotask(() => {
-        retrieveAndSetValue.call(this, element);
+        try {
+          retrieveAndSetValue.call(this, element);
+        } catch (e) {
+          addAttributeToken(element, ATTRIBUTE_ERRORMESSAGE, e.message || `${e}`);
+        }
       });
     };
     return this[symbol];
@@ -19849,9 +19857,13 @@ ${key.data.toString("base64")}
           } catch (e) {
             nodeList = elements;
           }
-          this[updateCloneDataSymbol] = clone(
-            this[internalSymbol].getRealSubject()["options"]
-          );
+          try {
+            this[updateCloneDataSymbol] = clone(
+              this[internalSymbol].getRealSubject()["options"]
+            );
+          } catch (e) {
+            addAttributeToken(this, ATTRIBUTE_ERRORMESSAGE, e?.messages || `${e}`);
+          }
           const cfg = {};
           if (this.getOption("eventProcessing") === true) {
             cfg.eventProcessing = true;
@@ -37886,6 +37898,18 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
   // test/cases/text/formatter.mjs
   init_formatter();
   describe("Formatter", function() {
+    describe("change empty handling", function() {
+      it("modification 1", function() {
+        const formatter = new Formatter({
+          a: null,
+          b: void 0,
+          c: 0
+        });
+        expect(formatter.format("${a | tostring}")).to.be.equal("null");
+        expect(formatter.format("${b | tostring}")).to.be.equal("undefined");
+        expect(formatter.format("${c | tostring}")).to.be.equal("0");
+      });
+    });
     describe("examples", function() {
       it("rfc example should run", function() {
         expect(new Formatter({
@@ -40438,7 +40462,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     if (monsterVersion instanceof Version) {
       return monsterVersion;
     }
-    monsterVersion = new Version("3.96.1");
+    monsterVersion = new Version("3.96.2");
     return monsterVersion;
   }
 
@@ -40446,7 +40470,7 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
   describe("Monster", function() {
     describe(".getMonsterVersion()", function() {
       let monsterVersion2;
-      monsterVersion2 = new Version("3.96.1");
+      monsterVersion2 = new Version("3.96.2");
       let m = getMonsterVersion();
       it("should " + monsterVersion2 + " is " + m, function() {
         expect(m.compareTo(monsterVersion2)).is.equal(0);
@@ -45611,6 +45635,19 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
       }
       return r;
     };
+    describe("value is not an integer issue #274", function() {
+      it("should not be fail with", function() {
+        const pf = new Pathfinder({
+          data: {}
+        });
+        try {
+          pf.setVia("data.age", 10);
+        } catch (e) {
+          expect(e).to.be.null;
+        }
+        expect(pf.getVia("data.age")).to.be.equal(10);
+      });
+    });
     describe("with Wildcard and Iterations", function() {
       let pf, obj;
       beforeEach(function() {
@@ -49166,6 +49203,18 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
     });
   });
 })();
+/**
+ * @private
+ * @type {symbol}
+ * @license AGPLv3
+ * @since 1.24.0
+ */
+/**
+ * @private
+ * @type {symbol}
+ * @license AGPLv3
+ * @since 1.25.0
+ */
 /**
  * With this function you can check if a value is iterable.
  *
@@ -49575,18 +49624,6 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
  * @throws {Error} unsupported argument
  * @param args
  */
-/**
- * @private
- * @type {symbol}
- * @license AGPLv3
- * @since 1.24.0
- */
-/**
- * @private
- * @type {symbol}
- * @license AGPLv3
- * @since 1.25.0
- */
 /**
  * You can call the method via the monster namespace `new Queue()`.
  *
@@ -50340,7 +50377,10 @@ span.monster-fx-ripple{animation:monster-fx-ripple .6s linear;background-color:h
  * @private
  * @license AGPLv3
  * @since 1.12.0
- * @param text
+ *
+ * @param {string} text
+ * @param {string} openMarker
+ * @param {string} closeMarker
  * @return {string}
  */
 /**
@@ -51996,7 +52036,7 @@ chai/chai.js:
      *)
   *)
 */
-//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc291cmNlL3R5cGVzL2lzLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy90eXBlb2YubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2V4dGVuZC5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RvbS1zdG9yYWdlQDIuMS4wL25vZGVfbW9kdWxlcy9kb20tc3RvcmFnZS9saWIvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2VsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsQDEuMy4xMi9ub2RlX21vZHVsZXMvZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGwvZGlzdC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcHZ0c3V0aWxzQDEuMy42L25vZGVfbW9kdWxlcy9wdnRzdXRpbHMvYnVpbGQvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3B2dXRpbHNAMS4xLjMvbm9kZV9tb2R1bGVzL3B2dXRpbHMvYnVpbGQvdXRpbHMuZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FzbjFqc0AzLjAuNS9ub2RlX21vZHVsZXMvYXNuMWpzL2J1aWxkL2luZGV4LmVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2VudW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3R5cGVzL2JpdF9zdHJpbmcuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvdHlwZXMvb2N0ZXRfc3RyaW5nLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3R5cGVzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2NvbnZlcnRlcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvaGVscGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3NjaGVtYS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy4xMy9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9zdG9yYWdlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2RlY29yYXRvcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvZXJyb3JzL3NjaGVtYV92YWxpZGF0aW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2Vycm9ycy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy4xMy9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9wYXJzZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvc2VyaWFsaXplci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy4xMy9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9vYmplY3RzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjEzL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2NvbnZlcnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTMvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3RzbGliQDIuOC4xL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIranNvbi1zY2hlbWFAMS4xLjEyL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvanNvbi1zY2hlbWEvYnVpbGQvaW5kZXguZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3dlYmNyeXB0by1jb3JlQDEuOC4xL25vZGVfbW9kdWxlcy93ZWJjcnlwdG8tY29yZS9idWlsZC93ZWJjcnlwdG8tY29yZS5lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYmFzZTY0LWpzQDEuNS4xL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2llZWU3NTRAMS4yLjEvbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2J1ZmZlckA1LjcuMS9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrd2ViY3J5cHRvQDEuNS4wL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvd2ViY3J5cHRvL2J1aWxkL3dlYmNyeXB0by5lcy5qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RhbnRzLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZW51bXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvdy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2luc3RhbmNlT2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWF0aC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdXNlckFnZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNMYXlvdXRWaWV3cG9ydC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9jb250YWlucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFBhcmVudE5vZGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvd2l0aGluLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsQmFyWC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFZpZXdwb3J0UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzU2Nyb2xsUGFyZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0U2Nyb2xsUGFyZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZXRlY3RPdmVyZmxvdy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvaGlkZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL29mZnNldC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEFsdEF4aXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZVNjcm9sbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZWJvdW5jZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VCeU5hbWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2NyZWF0ZVBvcHBlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9pbmRleC5qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvYmFzZS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3N0YWNrLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9wYXRoZmluZGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdG9rZW5saXN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2NvbnN0YW50cy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9hdHRyaWJ1dGVzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL2Nsb25lLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi9sb2NhbGUubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vbG9jYWxlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL3RpbWUtYWdvLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS90cmFuc2Zvcm1lci5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvcGlwZS5tanMiLCAiLi4vLi4vc291cmNlL3RleHQvZm9ybWF0dGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvbWVkaWF0eXBlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvZGF0YXVybC5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3F1ZXVlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdW5pcXVlcXVldWUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlci5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVybGlzdC5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vdGhlbWUubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vdGVtcGxhdGUubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RpZmYubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL3RyaW1zcGFjZXMubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vZXZlbnRzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3VwZGF0ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vc2xvdHRlZC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS91dGlsL2V4dHJhY3Qta2V5cy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS91dGlsL2luaXQtb3B0aW9ucy1mcm9tLWF0dHJpYnV0ZXMubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vdXRpbC9zZXQtb3B0aW9uLWZyb20tYXR0cmlidXRlLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWVsZW1lbnQubWpzIiwgIi4uLy4uL3NvdXJjZS9tYXRoL3JhbmRvbS5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL3Byb2Nlc3NpbmcvY2FsbGJhY2subWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL3Byb2Nlc3NpbmcubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vY29uc3RhbnRzLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3R5bGVzaGVldC90YWJzLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3V0aWwvZmV0Y2gubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL3N0eWxlc2hlZXQvdGhlbWUubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdXRpbC9wb3BwZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC90YWJzLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvc3R5bGVzaGVldC9tZXNzYWdlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvbWVzc2FnZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbm90aWZ5L3N0eWxlc2hlZXQvbm90aWZ5Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvbm90aWZ5Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3R5bGVzaGVldC9zcGxpdC1wYW5lbC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbGF5b3V0L3NwbGl0LXBhbmVsLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3R5bGVzaGVldC9wYW5lbC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbGF5b3V0L3BhbmVsLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3JlbG9hZC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9jdXN0b21jb250cm9sLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvYnV0dG9uLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9zdHlsZXNoZWV0L3JpcHBsZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9zdGF0ZS1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdHlwZXMvc3RhdGUubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3RhdGUtYnV0dG9uLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9idWlsZG1hcC5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmbG9hdGluZy11aSt1dGlsc0AwLjIuOC9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL3V0aWxzL2Rpc3QvZmxvYXRpbmctdWkudXRpbHMubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmxvYXRpbmctdWkrY29yZUAxLjYuOC9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2NvcmUvZGlzdC9mbG9hdGluZy11aS5jb3JlLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGZsb2F0aW5nLXVpK3V0aWxzQDAuMi44L25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5kb20ubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmxvYXRpbmctdWkrZG9tQDEuNi4xMi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2RvbS9kaXN0L2Zsb2F0aW5nLXVpLmRvbS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS91dGlsL2Zsb2F0aW5nLXVpLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvc2VsZWN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3NlbGVjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbGF5b3V0L3N0eWxlc2hlZXQvcG9wcGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvcG9wcGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3BvcHBlci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L3BvcHBlci1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vcG9wcGVyLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L2NvbmZpcm0tYnV0dG9uLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvbWVzc2FnZS1zdGF0ZS1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vbWVzc2FnZS1zdGF0ZS1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vY29uZmlybS1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9ub2RlbGlzdC5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL25vZGUubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2J1aWxkdHJlZS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL25vZGVyZWN1cnNpdmVpdGVyYXRvci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L3RyZWUtc2VsZWN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3RyZWUtc2VsZWN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvdG9nZ2xlLXN3aXRjaC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90b2dnbGUtc3dpdGNoLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3RlbXBsYXRlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L3N0eWxlc2hlZXQvaG9zdC5tanMiLCAiLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3JlYWR5Lm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2ZvY3VzbWFuYWdlci5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL2ludGVybmFsLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL2RhdGEubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2UvbGluay5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS9saW5rL3N0eWxlc2hlZXQubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2Uvc2NyaXB0Lm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlbWFuYWdlci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9zdHlsZXNoZWV0L2NvbmZpZy1tYW5hZ2VyLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L2NvbmZpZy1tYW5hZ2VyLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L2hvc3QubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3Qvc3R5bGVzaGVldC9vdmVybGF5Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L292ZXJsYXkubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3QvdXRpbC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbGF5b3V0L3N0eWxlc2hlZXQvZGV0YWlscy5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9jb25zdGFudHMubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zdHlsZXNoZWV0L2NvbGxhcHNlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvY29sbGFwc2UubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9kZXRhaWxzLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L2RldGFpbHMubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9yYW5kb21pZC5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3V1aWQubWpzIiwgInByZXBhcmUuanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9sYXlvdXQvdGFicy5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANS4xLjIvbm9kZV9tb2R1bGVzL2NoYWkvY2hhaS5qcyIsICIuLi91dGlsL2NoYWktZG9tLm1qcyIsICIuLi91dGlsL2pzZG9tLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2xheW91dC9zbGl0LXBhbmVsLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2xheW91dC9wYW5lbC5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3JlbG9hZC5tanMiLCAiLi4vdXRpbC9pbnRlcnNlY3Rpb24tbW9jay5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3N0YXRlLWJ1dHRvbi5tanMiLCAiLi4vdXRpbC9yZXNpemUtb2JzZXJ2ZXIubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9jb25maXJtLWJ1dHRvbi5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL2Zvcm0ubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2UubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3RyZWUtc2VsZWN0Lm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2Zvcm0vYnV0dG9uLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2Zvcm0vdG9nZ2xlLXN3aXRjaC5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3RlbXBsYXRlLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL25vdGlmeS9tZXNzYWdlLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL25vdGlmeS9ub3RpZnkubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvaG9zdC9ob3N0Lm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2hvc3Qvb3ZlcmxheS5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9ob3N0L3V0aWwubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvaG9zdC9kZXRhaWxzLm1qcyIsICIuLi9jYXNlcy90ZXh0L2Zvcm1hdHRlci5tanMiLCAiLi4vLi4vc291cmNlL3RleHQvZ2VuZXJhdGUtcmFuZ2UtY29tcGFyaXNvbi1leHByZXNzaW9uLm1qcyIsICIuLi9jYXNlcy90ZXh0L3V0aWwubWpzIiwgIi4uLy4uL3NvdXJjZS90ZXh0L2JyYWNrZXRlZC1rZXktdmFsdWUtaGFzaC5tanMiLCAiLi4vY2FzZXMvdGV4dC9icmFja2V0ZWQta2V5LXZhbHVlLWhhc2gubWpzIiwgIi4uL2Nhc2VzL21hdGgvcmFuZG9tLm1qcyIsICIuLi9jYXNlcy91dGlsL3RyaW1zcGFjZXMubWpzIiwgIi4uL2Nhc2VzL3V0aWwvcHJvY2Vzc2luZy5tanMiLCAiLi4vY2FzZXMvdXRpbC9kZWFkbWFuc3N3aXRjaC5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvY29tcGFyYXRvci5tanMiLCAiLi4vY2FzZXMvdXRpbC9jb21wYXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvdXRpbC9mcmVlemUubWpzIiwgIi4uL2Nhc2VzL3V0aWwvZnJlZXplLm1qcyIsICIuLi9jYXNlcy91dGlsL2Nsb25lLm1qcyIsICIuLi8uLi9zb3VyY2UvbG9nZ2luZy9oYW5kbGVyL2NvbnNvbGUubWpzIiwgIi4uLy4uL3NvdXJjZS9sb2dnaW5nL2hhbmRsZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9sb2dnaW5nL2xvZ2VudHJ5Lm1qcyIsICIuLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dnZXIubWpzIiwgIi4uL2Nhc2VzL2xvZ2dpbmcvaGFuZGxlci9jb25zb2xlLm1qcyIsICIuLi9jYXNlcy9sb2dnaW5nL2xvZ2dlci5tanMiLCAiLi4vY2FzZXMvbG9nZ2luZy9oYW5kbGVyLm1qcyIsICIuLi9jYXNlcy9sb2dnaW5nL2xvZ2VudHJ5Lm1qcyIsICIuLi8uLi9zb3VyY2UvbmV0L3dlYmNvbm5lY3QubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZhYmxlcXVldWUubWpzIiwgIi4uLy4uL3NvdXJjZS9uZXQvd2ViY29ubmVjdC9tZXNzYWdlLm1qcyIsICIuLi9jYXNlcy9uZXQvd2ViY29ubmVjdC5tanMiLCAiLi4vdXRpbC93ZWJzb2NrZXQubWpzIiwgIi4uL2Nhc2VzL25ldC93ZWJjb25uZWN0L21lc3NhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy92ZXJzaW9uLm1qcyIsICIuLi9jYXNlcy9tb25zdGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2RpbWVuc2lvbi5tanMiLCAiLi4vY2FzZXMvZG9tL2RpbWVuc2lvbi5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvcnVudGltZS5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlL2xpbmsvc3R5bGVzaGVldC5tanMiLCAiLi4vdXRpbC9jbGVhbnVwZG9tLm1qcyIsICIuLi9jYXNlcy9kb20vcmVzb3VyY2UvbGluay5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlL3NjcmlwdC5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlL2RhdGEubWpzIiwgIi4uL2Nhc2VzL2RvbS91dGlsL2luaXQtb3B0aW9ucy1mcm9tLWF0dHJpYnV0ZXMubWpzIiwgIi4uL2Nhc2VzL2RvbS91dGlsL2V4dHJhY3Qta2V5cy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS93b3JrZXIvZmFjdG9yeS5tanMiLCAiLi4vY2FzZXMvZG9tL3dvcmtlci9mYWN0b3J5Lm1qcyIsICIuLi9jYXNlcy9kb20vdXBkYXRlci5tanMiLCAiLi4vY2FzZXMvZG9tL2xvY2FsZS5tanMiLCAiLi4vY2FzZXMvZG9tL3RoZW1lLm1qcyIsICIuLi9jYXNlcy9kb20vY3VzdG9tZWxlbWVudC5tanMiLCAiLi4vY2FzZXMvZG9tL2ZvY3VzbWFuYWdlci5tanMiLCAiLi4vY2FzZXMvZG9tL2ZpbmQubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZWFkeS5tanMiLCAiLi4vY2FzZXMvZG9tL3V0aWwubWpzIiwgIi4uL2Nhc2VzL2RvbS9jdXN0b21lbGVtZW50LWluaXRmcm9tc2NyaXB0aG9zdC5tanMiLCAiLi4vY2FzZXMvZG9tL3Nsb3R0ZWQtbm9kZXMubWpzIiwgIi4uL2Nhc2VzL2RvbS9hdHRyaWJ1dGVzLm1qcyIsICIuLi9jYXNlcy9kb20vcmVzb3VyY2UubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZXNvdXJjZW1hbmFnZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vYXNzZW1ibGVyLm1qcyIsICIuLi9jYXNlcy9kb20vYXNzZW1ibGVyLm1qcyIsICIuLi9jYXNlcy9kb20vY3VzdG9tY29udHJvbC5tanMiLCAiLi4vY2FzZXMvZG9tL3RlbXBsYXRlLm1qcyIsICIuLi9jYXNlcy9kb20vZXZlbnRzLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL2RvbS5tanMiLCAiLi4vY2FzZXMvZGF0YS9kYXRhc291cmNlL2RvbS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL2xvY2Fsc3RvcmFnZS5tanMiLCAiLi4vdXRpbC9sb2NhbHN0b3JhZ2UubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL2xvY2Fsc3RvcmFnZS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL3Nlc3Npb25zdG9yYWdlLm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3dlYmNvbm5lY3QubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvd2Vic29ja2V0Lm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL3dyaXRlZXJyb3IubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3Jlc3RhcGkvZGF0YS1mZXRjaC1lcnJvci5tanMiLCAiLi4vY2FzZXMvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpLm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2UubWpzIiwgIi4uL2Nhc2VzL2RhdGEvYnVpbGRtYXAubWpzIiwgIi4uL2Nhc2VzL2RhdGEvdHJhbnNmb3JtZXIubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGlmZi5tanMiLCAiLi4vY2FzZXMvZGF0YS9idWlsZHRyZWUubWpzIiwgIi4uL2Nhc2VzL2RhdGEvcGF0aGZpbmRlci5tanMiLCAiLi4vY2FzZXMvZGF0YS9waXBlLm1qcyIsICIuLi9jYXNlcy9kYXRhL2V4dGVuZC5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2Fic3RyYWN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaW52YWxpZC5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9pbnZhbGlkLm1qcyIsICIuLi9jYXNlcy9jb25zdHJhaW50L2Fic3RyYWN0b3BlcmF0b3IubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9hYnN0cmFjdG9wZXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvdmFsaWQubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9vcm9wZXJhdG9yLm1qcyIsICIuLi9jYXNlcy9jb25zdHJhaW50L29yb3BlcmF0b3IubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pc29iamVjdC5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9pc29iamVjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2FuZG9wZXJhdG9yLm1qcyIsICIuLi9jYXNlcy9jb25zdHJhaW50L2FuZG9wZXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaXNhcnJheS5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9pc2FycmF5Lm1qcyIsICIuLi9jYXNlcy9jb25zdHJhaW50L3ZhbGlkLm1qcyIsICIuLi9jYXNlcy90eXBlcy9ub2RlbGlzdC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvYmFzZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvbWVkaWF0eXBlLm1qcyIsICIuLi9jYXNlcy90eXBlcy90b2tlbmxpc3QubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3ZlcnNpb24ubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2dsb2JhbC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvb2JzZXJ2ZXJsaXN0Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9pbnRlcm5hbC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvb2JzZXJ2YWJsZXF1ZXVlLm1qcyIsICIuLi9jYXNlcy90eXBlcy9kYXRhdXJsLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvYmluYXJ5Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9iaW5hcnkubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL29ic2VydmVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcmVnZXgubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3JlZ2V4Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9yYW5kb21pZC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvaWQubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3V1aWQubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2lzLm1qcyIsICIuLi9jYXNlcy90eXBlcy92YWxpZGF0ZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvdHlwZW9mLm1qcyIsICIuLi9jYXNlcy90eXBlcy91bmlxdWVxdWV1ZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvc3RhY2subWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanMiLCAiLi4vY2FzZXMvdHlwZXMvbm9kZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvcXVldWUubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL25vZGVyZWN1cnNpdmVpdGVyYXRvci5tanMiLCAiLi4vY2FzZXMvaTE4bi90aW1lLWFnby5tanMiLCAiLi4vLi4vc291cmNlL2kxOG4vZm9ybWF0dGVyLm1qcyIsICIuLi9jYXNlcy9pMThuL2Zvcm1hdHRlci5tanMiLCAiLi4vY2FzZXMvaTE4bi9sb2NhbGUubWpzIiwgIi4uL2Nhc2VzL2kxOG4vcHJvdmlkZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVycy9mZXRjaC5tanMiLCAiLi4vY2FzZXMvaTE4bi9wcm92aWRlcnMvZmV0Y2gubWpzIiwgIi4uL2Nhc2VzL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qcyIsICIuLi9jYXNlcy9pMThuL3RyYW5zbGF0aW9ucy5tanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmV4cG9ydCB7XG5cdGlzSXRlcmFibGUsXG5cdGlzUHJpbWl0aXZlLFxuXHRpc1N5bWJvbCxcblx0aXNCb29sZWFuLFxuXHRpc1N0cmluZyxcblx0aXNPYmplY3QsXG5cdGlzSW5zdGFuY2UsXG5cdGlzQXJyYXksXG5cdGlzRnVuY3Rpb24sXG5cdGlzSW50ZWdlcixcbn07XG5cbi8qKlxuICogV2l0aCB0aGlzIGZ1bmN0aW9uIHlvdSBjYW4gY2hlY2sgaWYgYSB2YWx1ZSBpcyBpdGVyYWJsZS5cbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIG1ldGhvZCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLlR5cGVzLmlzUHJpbWl0aXZlKClgLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy0xLm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBpc0l0ZXJhYmxlKHZhbHVlKSB7XG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gdHlwZW9mIHZhbHVlPy5bU3ltYm9sLml0ZXJhdG9yXSA9PT0gXCJmdW5jdGlvblwiO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBwcmltaXRpdmUgKHN0cmluZywgbnVtYmVyLCBib29sZWFuLCBOYU4sIHVuZGVmaW5lZCwgbnVsbCBvciBzeW1ib2wpXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTIubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHZhciB0eXBlO1xuXG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHR0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG5cdGlmIChcblx0XHR0eXBlID09PSBcInN0cmluZ1wiIHx8XG5cdFx0dHlwZSA9PT0gXCJudW1iZXJcIiB8fFxuXHRcdHR5cGUgPT09IFwiYm9vbGVhblwiIHx8XG5cdFx0dHlwZSA9PT0gXCJzeW1ib2xcIlxuXHQpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgc3ltYm9sXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTMubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG5cdHJldHVybiBcInN5bWJvbFwiID09PSB0eXBlb2YgdmFsdWUgPyB0cnVlIDogZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhIGJvb2xlYW4uXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTQubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZSkge1xuXHRpZiAodmFsdWUgPT09IHRydWUgfHwgdmFsdWUgPT09IGZhbHNlKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhIHN0cmluZ1xuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy01Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhIG9iamVjdFxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy02Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuXHRpZiAoaXNBcnJheSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKGlzUHJpbWl0aXZlKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXG5cdGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgb2JqZWN0IGFuZCBpbnN0YW5jZSBvZiBpbnN0YW5jZS5cbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtNy5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7Kn0gaW5zdGFuY2VcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gaXNJbnN0YW5jZSh2YWx1ZSwgaW5zdGFuY2UpIHtcblx0aWYgKCFpc09iamVjdCh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKCFpc0Z1bmN0aW9uKGluc3RhbmNlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIWluc3RhbmNlLmhhc093blByb3BlcnR5KFwicHJvdG90eXBlXCIpKSByZXR1cm4gZmFsc2U7XG5cdGlmICh2YWx1ZSBpbnN0YW5jZW9mIGluc3RhbmNlKSByZXR1cm4gdHJ1ZTtcblxuXHRsZXQgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuXHR3aGlsZSAocHJvdG8gIT0gbnVsbCkge1xuXHRcdGlmIChwcm90byA9PT0gaW5zdGFuY2UucHJvdG90eXBlKSByZXR1cm4gdHJ1ZTtcblx0XHRwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90byk7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhIGFycmF5XG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTgubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RlL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2lzQXJyYXlcbiAqL1xuZnVuY3Rpb24gaXNBcnJheSh2YWx1ZSkge1xuXHRyZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhIGZ1bmN0aW9uXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTkubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcblx0aWYgKGlzQXJyYXkodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdGlmIChpc1ByaW1pdGl2ZSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblxuXHRpZiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGFuIGludGVnZXIuXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTEwLm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBpc0ludGVnZXIodmFsdWUpIHtcblx0cmV0dXJuIE51bWJlci5pc0ludGVnZXIodmFsdWUpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdGlzQXJyYXksXG5cdGlzQm9vbGVhbixcblx0aXNGdW5jdGlvbixcblx0aXNJbnN0YW5jZSxcblx0aXNJbnRlZ2VyLFxuXHRpc0l0ZXJhYmxlLFxuXHRpc09iamVjdCxcblx0aXNQcmltaXRpdmUsXG5cdGlzU3RyaW5nLFxuXHRpc1N5bWJvbCxcbn0gZnJvbSBcIi4vaXMubWpzXCI7XG5cbmV4cG9ydCB7XG5cdHZhbGlkYXRlSXRlcmFibGUsXG5cdHZhbGlkYXRlUHJpbWl0aXZlLFxuXHR2YWxpZGF0ZUJvb2xlYW4sXG5cdHZhbGlkYXRlU3RyaW5nLFxuXHR2YWxpZGF0ZU9iamVjdCxcblx0dmFsaWRhdGVJbnN0YW5jZSxcblx0dmFsaWRhdGVBcnJheSxcblx0dmFsaWRhdGVTeW1ib2wsXG5cdHZhbGlkYXRlRnVuY3Rpb24sXG5cdHZhbGlkYXRlSW50ZWdlcixcbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIHByaW1pdGl2ZSB0eXBlLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc1ByaW1pdGl2ZSgpIGV4Y2VwdCB0aGF0IGEgVHlwZUVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZUl0ZXJhYmxlfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVJdGVyYWJsZSgnMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVJdGVyYWJsZShbXSkpICAvLyBcdTIxQTYgdmFsdWVcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBwcmltaXRpdmVcbiAqIEBzZWUge0BsaW5rIGlzUHJpbWl0aXZlfVxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5UeXBlcy5pc1ByaW1pdGl2ZX1cbiAqIEBzZWUge0BsaW5rIE1vbnN0ZXIuVHlwZXMjaXNQcmltaXRpdmV9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlSXRlcmFibGUodmFsdWUpIHtcblx0aWYgKCFpc0l0ZXJhYmxlKHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgaXRlcmFibGVcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBwcmltaXRpdmUgdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNQcmltaXRpdmUoKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVQcmltaXRpdmV9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZVByaW1pdGl2ZSgnMicpKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZVByaW1pdGl2ZShbXSkpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgcHJpbWl0aXZlXG4gKiBAc2VlIHtAbGluayBpc1ByaW1pdGl2ZX1cbiAqIEBzZWUge0BsaW5rIE1vbnN0ZXIuVHlwZXMuaXNQcmltaXRpdmV9XG4gKiBAc2VlIHtAbGluayBNb25zdGVyLlR5cGVzI2lzUHJpbWl0aXZlfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVByaW1pdGl2ZSh2YWx1ZSkge1xuXHRpZiAoIWlzUHJpbWl0aXZlKHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBwcmltaXRpdmVcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBib29sZWFuIHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzQm9vbGVhbigpIGV4Y2VwdCB0aGF0IGEgVHlwZUVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZUJvb2xlYW59IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUJvb2xlYW4oZmFsc2UpKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUJvb2xlYW4oJzInKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQm9vbGVhbihbXSkpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcblxuICogQHRocm93cyB7VHlwZUVycm9yfSAgdmFsdWUgaXMgbm90IHByaW1pdGl2ZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUJvb2xlYW4odmFsdWUpIHtcblx0aWYgKCFpc0Jvb2xlYW4odmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhIGJvb2xlYW5cIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBzdHJpbmcgdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNTdHJpbmcoKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVTdHJpbmd9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZVN0cmluZygnMicpKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZVN0cmluZyhbXSkpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU3RyaW5nKHZhbHVlKSB7XG5cdGlmICghaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhIHN0cmluZ1wiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIG9iamVjdCB0eXBlLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc09iamVjdCgpIGV4Y2VwdCB0aGF0IGEgVHlwZUVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZU9iamVjdH0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlT2JqZWN0KHt9KSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogY29uc29sZS5sb2codmFsaWRhdGVPYmplY3QoJzInKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlT2JqZWN0KFtdKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVPYmplY3QodmFsdWUpIHtcblx0aWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGEgb2JqZWN0XCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgb2JqZWN0IGluc3RhbmNlLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlSW5zdGFuY2V9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUluc3RhbmNlKHt9LCBPYmplY3QpKSAvLyBcdTIxQTYgdmFsdWVcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW5zdGFuY2UoJzInLCBPYmplY3QpKSAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUluc3RhbmNlKFtdLCBPYmplY3QpKSAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnN0YW5jZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2ZcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVJbnN0YW5jZSh2YWx1ZSwgaW5zdGFuY2UpIHtcblx0aWYgKCFpc0luc3RhbmNlKHZhbHVlLCBpbnN0YW5jZSkpIHtcblx0XHRsZXQgbiA9IFwiXCI7XG5cdFx0aWYgKGlzT2JqZWN0KGluc3RhbmNlKSB8fCBpc0Z1bmN0aW9uKGluc3RhbmNlKSkge1xuXHRcdFx0biA9IGluc3RhbmNlPy5bXCJuYW1lXCJdO1xuXHRcdH1cblxuXHRcdGlmIChuKSB7XG5cdFx0XHRuID0gYCAke259YDtcblx0XHR9XG5cblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2Yke259YCk7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBhcnJheSB0eXBlLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc0FycmF5KCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlQXJyYXl9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUFycmF5KCcyJykpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUFycmF5KFtdKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBhcnJheVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUFycmF5KHZhbHVlKSB7XG5cdGlmICghaXNBcnJheSh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGFuIGFycmF5XCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgc3ltYm9sIHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzU3ltYm9sKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlU3ltYm9sfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVTeW1ib2woJzInKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlU3ltYm9sKCkpICAvLyBcdTIxQTYgdmFsdWVcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gc3ltYm9sXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU3ltYm9sKHZhbHVlKSB7XG5cdGlmICghaXNTeW1ib2wodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhbiBzeW1ib2xcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBmdW5jdGlvbiB0eXBlLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc0Z1bmN0aW9uKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlRnVuY3Rpb259IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUZ1bmN0aW9uKCgpPT57fSkpIC8vIFx1MjFBNiB2YWx1ZVxuICogY29uc29sZS5sb2codmFsaWRhdGVGdW5jdGlvbignMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVGdW5jdGlvbihbXSkpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbih2YWx1ZSkge1xuXHRpZiAoIWlzRnVuY3Rpb24odmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgaXMgYW4gaW50ZWdlci4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNJbnRlZ2VyKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlRnVuY3Rpb259IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUludGVnZXIodHJ1ZSkpIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW50ZWdlcignMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVJbnRlZ2VyKDIpKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVJbnRlZ2VyKHZhbHVlKSB7XG5cdGlmICghaXNJbnRlZ2VyKHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0dmFsaWRhdGVGdW5jdGlvbixcblx0dmFsaWRhdGVPYmplY3QsXG5cdHZhbGlkYXRlU3RyaW5nLFxufSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgZ2V0R2xvYmFsLCBnZXRHbG9iYWxPYmplY3QsIGdldEdsb2JhbEZ1bmN0aW9uIH07XG5cbi8qKlxuICogQHR5cGUge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cbmxldCBnbG9iYWxSZWZlcmVuY2U7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBlbnZpcm9ubWVudC5cbiAqL1xuKGZ1bmN0aW9uICgpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Z2xvYmFsUmVmZXJlbmNlID0gZ2xvYmFsVGhpcztcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRnbG9iYWxSZWZlcmVuY2UgPSBzZWxmO1xuXHRcdHJldHVybjtcblx0fSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0Z2xvYmFsUmVmZXJlbmNlID0gd2luZG93O1xuXHRcdHJldHVybjtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBlLCBcIl9fbW9uc3Rlcl9fXCIsIHtcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH0sXG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHR9KTtcblxuXHRpZiAodHlwZW9mIF9fbW9uc3Rlcl9fID09PSBcIm9iamVjdFwiKSB7XG5cdFx0X19tb25zdGVyX18uZ2xvYmFsVGhpcyA9IF9fbW9uc3Rlcl9fO1xuXHRcdGRlbGV0ZSBPYmplY3QucHJvdG90eXBlLl9fbW9uc3Rlcl9fO1xuXG5cdFx0Z2xvYmFsUmVmZXJlbmNlID0gZ2xvYmFsVGhpcztcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0cnkge1xuXHRcdGdsb2JhbFJlZmVyZW5jZSA9IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcblx0fSBjYXRjaCAoZSkge31cblxuXHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBlbnZpcm9ubWVudC5cIik7XG59KSgpO1xuXG4vKipcbiAqIFJldHVybiBnbG9iYWxUaGlzXG4gKlxuICogSWYgZ2xvYmFsVGhpcyBpcyBub3QgYXZhaWxhYmxlLCBpdCB3aWxsIGJlIHBvbHlmaWxsZWRcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQHJldHVybiB7b2JqZWN0fSBnbG9iYWxUaGlzXG4gKi9cbmZ1bmN0aW9uIGdldEdsb2JhbCgpIHtcblx0cmV0dXJuIGdsb2JhbFJlZmVyZW5jZTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gZ2xvYmFsIG9iamVjdCBvciB0aHJvdyBFcnJvclxuICpcbiAqIFlvdSBjYW4gY2FsbCB0aGUgbWV0aG9kIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYE1vbnN0ZXIuVHlwZXMuZ2V0R2xvYmFsT2JqZWN0KClgLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge01vbnN0ZXJ9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL21vbnN0ZXIubWpzJztcbiAqIE1vbnN0ZXIuVHlwZXMuZ2V0R2xvYmFsT2JqZWN0KCdkb2N1bWVudCcpXG4gKiAvLyBcdTIxQTYgeyB9XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWxzbyBpbnRlZ3JhdGUgdGhpcyBmdW5jdGlvbiBpbmRpdmlkdWFsbHkuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7Z2V0R2xvYmFsT2JqZWN0fSBmcm9tICdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BzY2h1a2FpL21vbnN0ZXJAMS4zMC4wL2Rpc3QvbW9kdWxlcy90eXBlcy9nbG9iYWwubWpzJztcbiAqIGdldEdsb2JhbE9iamVjdCgnZG9jdW1lbnQnKVxuICogLy8gXHUyMUE2IHsgfVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb2JqZWN0IGlzIG5vdCBkZWZpbmVkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0R2xvYmFsT2JqZWN0KG5hbWUpIHtcblx0dmFsaWRhdGVTdHJpbmcobmFtZSk7XG5cdGNvbnN0IG8gPSBnbG9iYWxSZWZlcmVuY2U/LltuYW1lXTtcblx0aWYgKHR5cGVvZiBvID09PSBcInVuZGVmaW5lZFwiKVxuXHRcdHRocm93IG5ldyBFcnJvcihgdGhlIG9iamVjdCAke25hbWV9IGlzIG5vdCBkZWZpbmVkYCk7XG5cdHZhbGlkYXRlT2JqZWN0KG8pO1xuXHRyZXR1cm4gbztcbn1cblxuLyoqXG4gKiBSZXR1cm4gZ2xvYmFsIGZ1bmN0aW9uIG9yIHRocm93IEVycm9yXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy5nZXRHbG9iYWxGdW5jdGlvbigpYC5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtNb25zdGVyfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9tb25zdGVyLm1qcyc7XG4gKiBjb25zb2xlLmxvZyhNb25zdGVyLlR5cGVzLmdldEdsb2JhbEZ1bmN0aW9uKCdwYXJzZUludCcpKSAvLyBcdTIxQTYgZiBwYXJzZUludCgpIHsgfVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFsc28gaW50ZWdyYXRlIHRoaXMgZnVuY3Rpb24gaW5kaXZpZHVhbGx5LlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge2dldEdsb2JhbEZ1bmN0aW9ufSBmcm9tICdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BzY2h1a2FpL21vbnN0ZXJAMS4zMC4wL2Rpc3QvbW9kdWxlcy90eXBlcy9nbG9iYWwubWpzJztcbiAqIGNvbnNvbGUubG9nKGdldEdsb2JhbEZ1bmN0aW9uKCdwYXJzZUludCcpKSAvLyBcdTIxQTYgZiBwYXJzZUludCgpIHsgfVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgZnVuY3Rpb24gaXMgbm90IGRlZmluZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldEdsb2JhbEZ1bmN0aW9uKG5hbWUpIHtcblx0dmFsaWRhdGVTdHJpbmcobmFtZSk7XG5cdGNvbnN0IGYgPSBnbG9iYWxSZWZlcmVuY2U/LltuYW1lXTtcblx0aWYgKHR5cGVvZiBmID09PSBcInVuZGVmaW5lZFwiKVxuXHRcdHRocm93IG5ldyBFcnJvcihgdGhlIGZ1bmN0aW9uICR7bmFtZX0gaXMgbm90IGRlZmluZWRgKTtcblx0dmFsaWRhdGVGdW5jdGlvbihmKTtcblx0cmV0dXJuIGY7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuZXhwb3J0IHsgdHlwZU9mIH07XG5cbi8qKlxuICogVGhlIGJ1aWx0LWluIHR5cGVvZiBtZXRob2QgaXMga25vd24gdG8gaGF2ZSBzb21lIGhpc3RvcmljYWwgd2Vha25lc3Nlcy4gVGhpcyBmdW5jdGlvbiB0cmllcyB0byBwcm92aWRlIGEgYmV0dGVyIGFuZCBtb3JlIGFjY3VyYXRlIHJlc3VsdC5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjcuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgcHJpbWl0aXZlXG4gKi9cbmZ1bmN0aW9uIHR5cGVPZih2YWx1ZSkge1xuXHRsZXQgdHlwZSA9IHt9LnRvU3RyaW5nLmNhbGwodmFsdWUpLm1hdGNoKC9cXHMoW2EtekEtWl0rKS8pWzFdO1xuXHRpZiAoXCJPYmplY3RcIiA9PT0gdHlwZSkge1xuXHRcdGNvbnN0IG5hbWUgPSB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuXHRcdGlmIChuYW1lKSB7XG5cdFx0XHRyZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHJlc3VsdHMgPSAvXihjbGFzc3xmdW5jdGlvbilcXHMrKFxcdyspLy5leGVjKFxuXHRcdFx0dmFsdWUuY29uc3RydWN0b3IudG9TdHJpbmcoKSxcblx0XHQpO1xuXHRcdHR5cGUgPSByZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gMiA/IHJlc3VsdHNbMl0gOiBcIlwiO1xuXHR9XG5cblx0cmV0dXJuIHR5cGUudG9Mb3dlckNhc2UoKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHR5cGVPZiB9IGZyb20gXCIuLi90eXBlcy90eXBlb2YubWpzXCI7XG5cbmV4cG9ydCB7IGV4dGVuZCB9O1xuXG4vKipcbiAqIEV4dGVuZCBjb3BpZXMgYWxsIGVudW1lcmFibGUgb3duIHByb3BlcnRpZXMgZnJvbSBvbmUgb3JcbiAqIG1vcmUgc291cmNlIG9iamVjdHMgdG8gYSB0YXJnZXQgb2JqZWN0LiBJdCByZXR1cm5zIHRoZSBtb2RpZmllZCB0YXJnZXQgb2JqZWN0LlxuICpcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhcmd1bWVudFxuICogQHRocm93cyB7RXJyb3J9IHR5cGUgbWlzbWF0Y2hcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhcmd1bWVudFxuICogQHBhcmFtIGFyZ3NcbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKC4uLmFyZ3MpIHtcblx0bGV0IG87XG5cdGxldCBpO1xuXG5cdGlmICh0eXBlb2YgYXJncyAhPT0gXCJvYmplY3RcIiB8fCBhcmdzWzBdID09PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBhcmd1bWVudCAke0pTT04uc3RyaW5naWZ5KGFyZ3NbMF0pfWApO1xuXHR9XG5cblx0Zm9yIChpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBhID0gYXJnc1tpXTtcblxuXHRcdGlmICghKGlzT2JqZWN0KGEpIHx8IGlzQXJyYXkoYSkpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGFyZ3VtZW50ICR7SlNPTi5zdHJpbmdpZnkoYSl9YCk7XG5cdFx0fVxuXG5cdFx0aWYgKG8gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0byA9IGE7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IGsgaW4gYSkge1xuXHRcdFx0Y29uc3QgdiA9IGE/LltrXTtcblxuXHRcdFx0aWYgKHYgPT09IG8/LltrXSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKChpc09iamVjdCh2KSAmJiB0eXBlT2YodikgPT09IFwib2JqZWN0XCIpIHx8IGlzQXJyYXkodikpIHtcblx0XHRcdFx0aWYgKG9ba10gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlmIChpc0FycmF5KHYpKSB7XG5cdFx0XHRcdFx0XHRvW2tdID0gW107XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9ba10gPSB7fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVPZihvW2tdKSAhPT0gdHlwZU9mKHYpKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0XHRcdGB0eXBlIG1pc21hdGNoOiAke0pTT04uc3RyaW5naWZ5KG9ba10pfSgke3R5cGVPZihcblx0XHRcdFx0XHRcdFx0XHRvW2tdLFxuXHRcdFx0XHRcdFx0XHQpfSkgIT0gJHtKU09OLnN0cmluZ2lmeSh2KX0oJHt0eXBlT2Yodil9KWAsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpc0FycmF5KG9ba10pKSB7XG5cdFx0XHRcdFx0b1trXSA9IFtdO1xuXHRcdFx0XHRcdG9ba10ucHVzaCguLi52KTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG9ba10gPSBleHRlbmQob1trXSwgdik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoaXNBcnJheShvKSkge1xuXHRcdFx0XHRcdG8ucHVzaCh2KTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvW2tdID0gdjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbztcbn1cbiIsICIvLyBodHRwOi8vd3d3LnJhamRlZXBkLmNvbS9hcnRpY2xlcy9jaHJvbWUvbG9jYWxzdHJnL0xvY2FsU3RvcmFnZVNhbXBsZS5odG1cblxuLy8gTk9URTpcbi8vIHRoaXMgdmFyaWVzIGZyb20gYWN0dWFsIGxvY2FsU3RvcmFnZSBpbiBzb21lIHN1YnRsZSB3YXlzXG5cbi8vIGFsc28sIHRoZXJlIGlzIG5vIHBlcnNpc3RlbmNlXG4vLyBUT0RPIHBlcnNpc3RcbihmdW5jdGlvbiAoKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5cbiAgZnVuY3Rpb24gU3RvcmFnZShwYXRoLCBvcHRzKSB7XG4gICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgdmFyIGRiO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfX19wcml2X2JrX19fJywge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgcGF0aDogcGF0aFxuICAgICAgfVxuICAgICwgd3JpdGFibGU6IGZhbHNlXG4gICAgLCBlbnVtZXJhYmxlOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfX19wcml2X3N0cmljdF9fXycsIHtcbiAgICAgIHZhbHVlOiAhIW9wdHMuc3RyaWN0XG4gICAgLCB3cml0YWJsZTogZmFsc2VcbiAgICAsIGVudW1lcmFibGU6IGZhbHNlXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19fX3ByaXZfd3NfX18nLCB7XG4gICAgICB2YWx1ZTogb3B0cy53cyB8fCAnICAnXG4gICAgLCB3cml0YWJsZTogZmFsc2VcbiAgICAsIGVudW1lcmFibGU6IGZhbHNlXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgZGIgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYXRoKSk7XG4gICAgfSBjYXRjaChlKSB7XG4gICAgICBkYiA9IHt9O1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKGRiKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHRoaXNba2V5XSA9IGRiW2tleV07XG4gICAgfSwgdGhpcyk7XG4gIH1cblxuICBTdG9yYWdlLnByb3RvdHlwZS5nZXRJdGVtID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIGlmICh0aGlzLl9fX3ByaXZfc3RyaWN0X19fKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcodGhpc1trZXldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIFN0b3JhZ2UucHJvdG90eXBlLnNldEl0ZW0gPSBmdW5jdGlvbiAoa2V5LCB2YWwpIHtcbiAgICBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXNba2V5XSA9IG51bGw7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9fX3ByaXZfc3RyaWN0X19fKSB7XG4gICAgICB0aGlzW2tleV0gPSBTdHJpbmcodmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trZXldID0gdmFsO1xuICAgIH1cbiAgICB0aGlzLl9fX3NhdmVfX18oKTtcbiAgfTtcblxuICBTdG9yYWdlLnByb3RvdHlwZS5yZW1vdmVJdGVtID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgdGhpcy5fX19zYXZlX19fKCk7XG4gIH07XG5cbiAgU3RvcmFnZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIC8vIGZpbHRlcnMgb3V0IHByb3RvdHlwZSBrZXlzXG4gICAgT2JqZWN0LmtleXMoc2VsZikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBzZWxmW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICBkZWxldGUgc2VsZltrZXldO1xuICAgIH0pO1xuICB9O1xuXG4gIFN0b3JhZ2UucHJvdG90eXBlLmtleSA9IGZ1bmN0aW9uIChpKSB7XG4gICAgaSA9IGkgfHwgMDtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcylbaV07XG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0b3JhZ2UucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcykubGVuZ3RoO1xuICAgIH1cbiAgfSk7XG5cbiAgU3RvcmFnZS5wcm90b3R5cGUuX19fc2F2ZV9fXyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBpZiAoIXRoaXMuX19fcHJpdl9ia19fXy5wYXRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX19fcHJpdl9ia19fXy5sb2NrKSB7XG4gICAgICB0aGlzLl9fX3ByaXZfYmtfX18ud2FpdCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fX19wcml2X2JrX19fLmxvY2sgPSB0cnVlO1xuICAgIGZzLndyaXRlRmlsZShcbiAgICAgIHRoaXMuX19fcHJpdl9ia19fXy5wYXRoXG4gICAgLCBKU09OLnN0cmluZ2lmeSh0aGlzLCBudWxsLCB0aGlzLl9fX3ByaXZfd3NfX18pXG4gICAgLCAndXRmOCdcbiAgICAsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBzZWxmLl9fX3ByaXZfYmtfX18ubG9jayA9IGZhbHNlO1xuICAgICAgaWYgKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHdyaXRlIHRvIGRhdGFiYXNlJywgc2VsZi5fX19wcml2X2JrX19fLnBhdGgpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc2VsZi5fX19wcml2X2JrX19fLndhaXQpIHtcbiAgICAgICAgc2VsZi5fX19wcml2X2JrX19fLndhaXQgPSBmYWxzZTtcbiAgICAgICAgc2VsZi5fX19zYXZlX19fKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0b3JhZ2UsICdjcmVhdGUnLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIChwYXRoLCBvcHRzKSB7XG4gICAgICByZXR1cm4gbmV3IFN0b3JhZ2UocGF0aCwgb3B0cyk7XG4gICAgfVxuICAsIHdyaXRhYmxlOiBmYWxzZVxuICAsIGVudW1lcmFibGU6IGZhbHNlXG4gIH0pO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gU3RvcmFnZTtcbn0oKSk7XG4iLCAiKGZ1bmN0aW9uIChleHBvcnRzKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgY29uc3QgcmVmTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCB2YWxpZGl0eU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgaGlkZGVuSW5wdXRNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IGludGVybmFsc01hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgdmFsaWRhdGlvbk1lc3NhZ2VNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IGZvcm1zTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBzaGFkb3dIb3N0c01hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgZm9ybUVsZW1lbnRzTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCByZWZWYWx1ZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgdXBncmFkZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3Qgc2hhZG93Um9vdE1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgdmFsaWRhdGlvbkFuY2hvck1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgZG9jdW1lbnRGcmFnbWVudE1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgY29ubmVjdGVkQ2FsbGJhY2tNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHZhbGlkaXR5VXBncmFkZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgICBjb25zdCBhb20gPSB7XG4gICAgICAgIGFyaWFBdG9taWM6ICdhcmlhLWF0b21pYycsXG4gICAgICAgIGFyaWFBdXRvQ29tcGxldGU6ICdhcmlhLWF1dG9jb21wbGV0ZScsXG4gICAgICAgIGFyaWFCdXN5OiAnYXJpYS1idXN5JyxcbiAgICAgICAgYXJpYUNoZWNrZWQ6ICdhcmlhLWNoZWNrZWQnLFxuICAgICAgICBhcmlhQ29sQ291bnQ6ICdhcmlhLWNvbGNvdW50JyxcbiAgICAgICAgYXJpYUNvbEluZGV4OiAnYXJpYS1jb2xpbmRleCcsXG4gICAgICAgIGFyaWFDb2xJbmRleFRleHQ6ICdhcmlhLWNvbGluZGV4dGV4dCcsXG4gICAgICAgIGFyaWFDb2xTcGFuOiAnYXJpYS1jb2xzcGFuJyxcbiAgICAgICAgYXJpYUN1cnJlbnQ6ICdhcmlhLWN1cnJlbnQnLFxuICAgICAgICBhcmlhRGVzY3JpcHRpb246ICdhcmlhLWRlc2NyaXB0aW9uJyxcbiAgICAgICAgYXJpYURpc2FibGVkOiAnYXJpYS1kaXNhYmxlZCcsXG4gICAgICAgIGFyaWFFeHBhbmRlZDogJ2FyaWEtZXhwYW5kZWQnLFxuICAgICAgICBhcmlhSGFzUG9wdXA6ICdhcmlhLWhhc3BvcHVwJyxcbiAgICAgICAgYXJpYUhpZGRlbjogJ2FyaWEtaGlkZGVuJyxcbiAgICAgICAgYXJpYUludmFsaWQ6ICdhcmlhLWludmFsaWQnLFxuICAgICAgICBhcmlhS2V5U2hvcnRjdXRzOiAnYXJpYS1rZXlzaG9ydGN1dHMnLFxuICAgICAgICBhcmlhTGFiZWw6ICdhcmlhLWxhYmVsJyxcbiAgICAgICAgYXJpYUxldmVsOiAnYXJpYS1sZXZlbCcsXG4gICAgICAgIGFyaWFMaXZlOiAnYXJpYS1saXZlJyxcbiAgICAgICAgYXJpYU1vZGFsOiAnYXJpYS1tb2RhbCcsXG4gICAgICAgIGFyaWFNdWx0aUxpbmU6ICdhcmlhLW11bHRpbGluZScsXG4gICAgICAgIGFyaWFNdWx0aVNlbGVjdGFibGU6ICdhcmlhLW11bHRpc2VsZWN0YWJsZScsXG4gICAgICAgIGFyaWFPcmllbnRhdGlvbjogJ2FyaWEtb3JpZW50YXRpb24nLFxuICAgICAgICBhcmlhUGxhY2Vob2xkZXI6ICdhcmlhLXBsYWNlaG9sZGVyJyxcbiAgICAgICAgYXJpYVBvc0luU2V0OiAnYXJpYS1wb3NpbnNldCcsXG4gICAgICAgIGFyaWFQcmVzc2VkOiAnYXJpYS1wcmVzc2VkJyxcbiAgICAgICAgYXJpYVJlYWRPbmx5OiAnYXJpYS1yZWFkb25seScsXG4gICAgICAgIGFyaWFSZWxldmFudDogJ2FyaWEtcmVsZXZhbnQnLFxuICAgICAgICBhcmlhUmVxdWlyZWQ6ICdhcmlhLXJlcXVpcmVkJyxcbiAgICAgICAgYXJpYVJvbGVEZXNjcmlwdGlvbjogJ2FyaWEtcm9sZWRlc2NyaXB0aW9uJyxcbiAgICAgICAgYXJpYVJvd0NvdW50OiAnYXJpYS1yb3djb3VudCcsXG4gICAgICAgIGFyaWFSb3dJbmRleDogJ2FyaWEtcm93aW5kZXgnLFxuICAgICAgICBhcmlhUm93SW5kZXhUZXh0OiAnYXJpYS1yb3dpbmRleHRleHQnLFxuICAgICAgICBhcmlhUm93U3BhbjogJ2FyaWEtcm93c3BhbicsXG4gICAgICAgIGFyaWFTZWxlY3RlZDogJ2FyaWEtc2VsZWN0ZWQnLFxuICAgICAgICBhcmlhU2V0U2l6ZTogJ2FyaWEtc2V0c2l6ZScsXG4gICAgICAgIGFyaWFTb3J0OiAnYXJpYS1zb3J0JyxcbiAgICAgICAgYXJpYVZhbHVlTWF4OiAnYXJpYS12YWx1ZW1heCcsXG4gICAgICAgIGFyaWFWYWx1ZU1pbjogJ2FyaWEtdmFsdWVtaW4nLFxuICAgICAgICBhcmlhVmFsdWVOb3c6ICdhcmlhLXZhbHVlbm93JyxcbiAgICAgICAgYXJpYVZhbHVlVGV4dDogJ2FyaWEtdmFsdWV0ZXh0JyxcbiAgICAgICAgcm9sZTogJ3JvbGUnXG4gICAgfTtcbiAgICBjb25zdCBpbml0QW9tID0gKHJlZiwgaW50ZXJuYWxzKSA9PiB7XG4gICAgICAgIGZvciAobGV0IGtleSBpbiBhb20pIHtcbiAgICAgICAgICAgIGludGVybmFsc1trZXldID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBjbG9zdXJlVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IGFvbVtrZXldO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGludGVybmFscywga2V5LCB7XG4gICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xvc3VyZVZhbHVlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsb3N1cmVWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVmLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVNYXAuc2V0KHJlZiwgaW50ZXJuYWxzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGluaXROb2RlKG5vZGUpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gaW50ZXJuYWxzTWFwLmdldChub2RlKTtcbiAgICAgICAgY29uc3QgeyBmb3JtIH0gPSBpbnRlcm5hbHM7XG4gICAgICAgIGluaXRGb3JtKG5vZGUsIGZvcm0sIGludGVybmFscyk7XG4gICAgICAgIGluaXRMYWJlbHMobm9kZSwgaW50ZXJuYWxzLmxhYmVscyk7XG4gICAgfVxuICAgIGNvbnN0IHdhbGtGaWVsZHNldCA9IChub2RlLCBmaXJzdFJlbmRlciA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIobm9kZSwgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQsIHtcbiAgICAgICAgICAgIGFjY2VwdE5vZGUobm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbHNNYXAuaGFzKG5vZGUpID9cbiAgICAgICAgICAgICAgICAgICAgTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUIDogTm9kZUZpbHRlci5GSUxURVJfU0tJUDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBjdXJyZW50ID0gd2Fsa2VyLm5leHROb2RlKCk7XG4gICAgICAgIGNvbnN0IGlzQ2FsbE5lY2Vzc2FyeSA9ICghZmlyc3RSZW5kZXIgfHwgbm9kZS5kaXNhYmxlZCk7XG4gICAgICAgIHdoaWxlIChjdXJyZW50KSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudC5mb3JtRGlzYWJsZWRDYWxsYmFjayAmJiBpc0NhbGxOZWNlc3NhcnkpIHtcbiAgICAgICAgICAgICAgICBzZXREaXNhYmxlZChjdXJyZW50LCBub2RlLmRpc2FibGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQgPSB3YWxrZXIubmV4dE5vZGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZGlzYWJsZWRPck5hbWVPYnNlcnZlckNvbmZpZyA9IHsgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbJ2Rpc2FibGVkJywgJ25hbWUnXSB9O1xuICAgIGNvbnN0IGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXIgPSBtdXRhdGlvbk9ic2VydmVyRXhpc3RzKCkgPyBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zTGlzdCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9uc0xpc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IG11dGF0aW9uLnRhcmdldDtcbiAgICAgICAgICAgIGlmIChtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09PSAnZGlzYWJsZWQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldC5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBzZXREaXNhYmxlZCh0YXJnZXQsIHRhcmdldC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXJnZXQubG9jYWxOYW1lID09PSAnZmllbGRzZXQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhbGtGaWVsZHNldCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09PSAnbmFtZScpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZWZWYWx1ZU1hcC5nZXQodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxzLnNldEZvcm1WYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSkgOiB7fTtcbiAgICBmdW5jdGlvbiBvYnNlcnZlckNhbGxiYWNrKG11dGF0aW9uTGlzdCkge1xuICAgICAgICBtdXRhdGlvbkxpc3QuZm9yRWFjaChtdXRhdGlvblJlY29yZCA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGFkZGVkTm9kZXMsIHJlbW92ZWROb2RlcyB9ID0gbXV0YXRpb25SZWNvcmQ7XG4gICAgICAgICAgICBjb25zdCBhZGRlZCA9IEFycmF5LmZyb20oYWRkZWROb2Rlcyk7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkID0gQXJyYXkuZnJvbShyZW1vdmVkTm9kZXMpO1xuICAgICAgICAgICAgYWRkZWQuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgaWYgKGludGVybmFsc01hcC5oYXMobm9kZSkgJiYgbm9kZS5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBpbml0Tm9kZShub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHVwZ3JhZGVNYXAuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IHVwZ3JhZGVNYXAuZ2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhb21LZXlzID0gT2JqZWN0LmtleXMoYW9tKTtcbiAgICAgICAgICAgICAgICAgICAgYW9tS2V5c1xuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihrZXkgPT4gaW50ZXJuYWxzW2tleV0gIT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYW9tW2tleV0sIGludGVybmFsc1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVNYXAuZGVsZXRlKG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodmFsaWRpdHlVcGdyYWRlTWFwLmhhcyhub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSB2YWxpZGl0eVVwZ3JhZGVNYXAuZ2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnaW50ZXJuYWxzLXZhbGlkJywgaW50ZXJuYWxzLnZhbGlkaXR5LnZhbGlkLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnaW50ZXJuYWxzLWludmFsaWQnLCAoIWludGVybmFscy52YWxpZGl0eS52YWxpZCkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdhcmlhLWludmFsaWQnLCAoIWludGVybmFscy52YWxpZGl0eS52YWxpZCkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkaXR5VXBncmFkZU1hcC5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChub2RlLmxvY2FsTmFtZSA9PT0gJ2Zvcm0nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1FbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIobm9kZSwgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdE5vZGUobm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaW50ZXJuYWxzTWFwLmhhcyhub2RlKSAmJiBub2RlLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddICYmICEoZm9ybUVsZW1lbnRzICYmIGZvcm1FbGVtZW50cy5oYXMobm9kZSkpKSA/IE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVCA6IE5vZGVGaWx0ZXIuRklMVEVSX1NLSVA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudCA9IHdhbGtlci5uZXh0Tm9kZSgpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdE5vZGUoY3VycmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gd2Fsa2VyLm5leHROb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWxOYW1lID09PSAnZmllbGRzZXQnKSB7XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXIub2JzZXJ2ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwoZGlzYWJsZWRPck5hbWVPYnNlcnZlciwgbm9kZSwgZGlzYWJsZWRPck5hbWVPYnNlcnZlckNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIHdhbGtGaWVsZHNldChub2RlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlbW92ZWQuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSBpbnRlcm5hbHNNYXAuZ2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHMgJiYgaGlkZGVuSW5wdXRNYXAuZ2V0KGludGVybmFscykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlSGlkZGVuSW5wdXRzKGludGVybmFscyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzaGFkb3dIb3N0c01hcC5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBzaGFkb3dIb3N0c01hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZyYWdtZW50T2JzZXJ2ZXJDYWxsYmFjayhtdXRhdGlvbkxpc3QpIHtcbiAgICAgICAgbXV0YXRpb25MaXN0LmZvckVhY2gobXV0YXRpb24gPT4ge1xuICAgICAgICAgICAgY29uc3QgeyByZW1vdmVkTm9kZXMgfSA9IG11dGF0aW9uO1xuICAgICAgICAgICAgcmVtb3ZlZE5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBkb2N1bWVudEZyYWdtZW50TWFwLmdldChtdXRhdGlvbi50YXJnZXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHNNYXAuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVJbnRlcm5hbHMobm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgZGVmZXJVcGdyYWRlID0gKGZyYWdtZW50KSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnJhZ21lbnRPYnNlcnZlckNhbGxiYWNrKTtcbiAgICAgICAgaWYgKCgoX2EgPSB3aW5kb3cgPT09IG51bGwgfHwgd2luZG93ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aW5kb3cuU2hhZHlET00pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pblVzZSkgJiZcbiAgICAgICAgICAgIGZyYWdtZW50Lm1vZGUgJiZcbiAgICAgICAgICAgIGZyYWdtZW50Lmhvc3QpIHtcbiAgICAgICAgICAgIGZyYWdtZW50ID0gZnJhZ21lbnQuaG9zdDtcbiAgICAgICAgfVxuICAgICAgICAoX2IgPSBvYnNlcnZlci5vYnNlcnZlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChvYnNlcnZlciwgZnJhZ21lbnQsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICAgICAgICBkb2N1bWVudEZyYWdtZW50TWFwLnNldChmcmFnbWVudCwgb2JzZXJ2ZXIpO1xuICAgIH07XG4gICAgbXV0YXRpb25PYnNlcnZlckV4aXN0cygpID8gbmV3IE11dGF0aW9uT2JzZXJ2ZXIob2JzZXJ2ZXJDYWxsYmFjaykgOiB7fTtcbiAgICBjb25zdCBvYnNlcnZlckNvbmZpZyA9IHtcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfTtcblxuICAgIGNvbnN0IHNldERpc2FibGVkID0gKHJlZiwgZGlzYWJsZWQpID0+IHtcbiAgICAgICAgcmVmLnRvZ2dsZUF0dHJpYnV0ZSgnaW50ZXJuYWxzLWRpc2FibGVkJywgZGlzYWJsZWQpO1xuICAgICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVmLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWYuZm9ybURpc2FibGVkQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJlZi5mb3JtRGlzYWJsZWRDYWxsYmFjay5hcHBseShyZWYsIFtkaXNhYmxlZF0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVIaWRkZW5JbnB1dHMgPSAoaW50ZXJuYWxzKSA9PiB7XG4gICAgICAgIGNvbnN0IGhpZGRlbklucHV0cyA9IGhpZGRlbklucHV0TWFwLmdldChpbnRlcm5hbHMpO1xuICAgICAgICBoaWRkZW5JbnB1dHMuZm9yRWFjaChoaWRkZW5JbnB1dCA9PiB7XG4gICAgICAgICAgICBoaWRkZW5JbnB1dC5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGhpZGRlbklucHV0TWFwLnNldChpbnRlcm5hbHMsIFtdKTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUhpZGRlbklucHV0ID0gKHJlZiwgaW50ZXJuYWxzKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgaW5wdXQudHlwZSA9ICdoaWRkZW4nO1xuICAgICAgICBpbnB1dC5uYW1lID0gcmVmLmdldEF0dHJpYnV0ZSgnbmFtZScpO1xuICAgICAgICByZWYuYWZ0ZXIoaW5wdXQpO1xuICAgICAgICBoaWRkZW5JbnB1dE1hcC5nZXQoaW50ZXJuYWxzKS5wdXNoKGlucHV0KTtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH07XG4gICAgY29uc3QgaW5pdFJlZiA9IChyZWYsIGludGVybmFscykgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGhpZGRlbklucHV0TWFwLnNldChpbnRlcm5hbHMsIFtdKTtcbiAgICAgICAgKF9hID0gZGlzYWJsZWRPck5hbWVPYnNlcnZlci5vYnNlcnZlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChkaXNhYmxlZE9yTmFtZU9ic2VydmVyLCByZWYsIGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXJDb25maWcpO1xuICAgIH07XG4gICAgY29uc3QgaW5pdExhYmVscyA9IChyZWYsIGxhYmVscykgPT4ge1xuICAgICAgICBpZiAobGFiZWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgQXJyYXkuZnJvbShsYWJlbHMpLmZvckVhY2gobGFiZWwgPT4gbGFiZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZWYuY2xpY2suYmluZChyZWYpKSk7XG4gICAgICAgICAgICBsZXQgZmlyc3RMYWJlbElkID0gbGFiZWxzWzBdLmlkO1xuICAgICAgICAgICAgaWYgKCFsYWJlbHNbMF0uaWQpIHtcbiAgICAgICAgICAgICAgICBmaXJzdExhYmVsSWQgPSBgJHtsYWJlbHNbMF0uaHRtbEZvcn1fTGFiZWxgO1xuICAgICAgICAgICAgICAgIGxhYmVsc1swXS5pZCA9IGZpcnN0TGFiZWxJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIGZpcnN0TGFiZWxJZCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldEZvcm1WYWxpZGl0eSA9IChmb3JtKSA9PiB7XG4gICAgICAgIGNvbnN0IG5hdGl2ZUNvbnRyb2xWYWxpZGl0eSA9IEFycmF5LmZyb20oZm9ybS5lbGVtZW50cylcbiAgICAgICAgICAgIC5maWx0ZXIoKGVsZW1lbnQpID0+ICFlbGVtZW50LnRhZ05hbWUuaW5jbHVkZXMoJy0nKSAmJiBlbGVtZW50LnZhbGlkaXR5KVxuICAgICAgICAgICAgLm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC52YWxpZGl0eS52YWxpZCk7XG4gICAgICAgIGNvbnN0IHBvbHlmaWxsZWRFbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQoZm9ybSkgfHwgW107XG4gICAgICAgIGNvbnN0IHBvbHlmaWxsZWRWYWxpZGl0eSA9IEFycmF5LmZyb20ocG9seWZpbGxlZEVsZW1lbnRzKVxuICAgICAgICAgICAgLmZpbHRlcihjb250cm9sID0+IGNvbnRyb2wuaXNDb25uZWN0ZWQpXG4gICAgICAgICAgICAubWFwKChjb250cm9sKSA9PiBpbnRlcm5hbHNNYXAuZ2V0KGNvbnRyb2wpLnZhbGlkaXR5LnZhbGlkKTtcbiAgICAgICAgY29uc3QgaGFzSW52YWxpZCA9IFsuLi5uYXRpdmVDb250cm9sVmFsaWRpdHksIC4uLnBvbHlmaWxsZWRWYWxpZGl0eV0uaW5jbHVkZXMoZmFsc2UpO1xuICAgICAgICBmb3JtLnRvZ2dsZUF0dHJpYnV0ZSgnaW50ZXJuYWxzLWludmFsaWQnLCBoYXNJbnZhbGlkKTtcbiAgICAgICAgZm9ybS50b2dnbGVBdHRyaWJ1dGUoJ2ludGVybmFscy12YWxpZCcsICFoYXNJbnZhbGlkKTtcbiAgICB9O1xuICAgIGNvbnN0IGZvcm1JbnB1dENhbGxiYWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHNldEZvcm1WYWxpZGl0eShmaW5kUGFyZW50Rm9ybShldmVudC50YXJnZXQpKTtcbiAgICB9O1xuICAgIGNvbnN0IGZvcm1DaGFuZ2VDYWxsYmFjayA9IChldmVudCkgPT4ge1xuICAgICAgICBzZXRGb3JtVmFsaWRpdHkoZmluZFBhcmVudEZvcm0oZXZlbnQudGFyZ2V0KSk7XG4gICAgfTtcbiAgICBjb25zdCB3aXJlU3VibWl0TG9naWMgPSAoZm9ybSkgPT4ge1xuICAgICAgICBjb25zdCBzdWJtaXRCdXR0b25TZWxlY3RvciA9IFsnYnV0dG9uW3R5cGU9c3VibWl0XScsICdpbnB1dFt0eXBlPXN1Ym1pdF0nLCAnYnV0dG9uOm5vdChbdHlwZV0pJ11cbiAgICAgICAgICAgIC5tYXAoc2VsID0+IGAke3NlbH06bm90KFtkaXNhYmxlZF0pYClcbiAgICAgICAgICAgIC5tYXAoc2VsID0+IGAke3NlbH06bm90KFtmb3JtXSkke2Zvcm0uaWQgPyBgLCR7c2VsfVtmb3JtPScke2Zvcm0uaWR9J11gIDogJyd9YClcbiAgICAgICAgICAgIC5qb2luKCcsJyk7XG4gICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgICAgICBpZiAodGFyZ2V0LmNsb3Nlc3Qoc3VibWl0QnV0dG9uU2VsZWN0b3IpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBmb3JtRWxlbWVudHNNYXAuZ2V0KGZvcm0pO1xuICAgICAgICAgICAgICAgIGlmIChmb3JtLm5vVmFsaWRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudHMuc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IEFycmF5LmZyb20oZWxlbWVudHMpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGl0eUxpc3QgPSBub2Rlc1xuICAgICAgICAgICAgICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChub2RlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxzLnJlcG9ydFZhbGlkaXR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRpdHlMaXN0LmluY2x1ZGVzKGZhbHNlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBmb3JtUmVzZXRDYWxsYmFjayA9IChldmVudCkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQoZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgaWYgKGVsZW1lbnRzICYmIGVsZW1lbnRzLnNpemUpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuY29uc3RydWN0b3IuZm9ybUFzc29jaWF0ZWQgJiYgZWxlbWVudC5mb3JtUmVzZXRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZvcm1SZXNldENhbGxiYWNrLmFwcGx5KGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbml0Rm9ybSA9IChyZWYsIGZvcm0sIGludGVybmFscykgPT4ge1xuICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgY29uc3QgZm9ybUVsZW1lbnRzID0gZm9ybUVsZW1lbnRzTWFwLmdldChmb3JtKTtcbiAgICAgICAgICAgIGlmIChmb3JtRWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBmb3JtRWxlbWVudHMuYWRkKHJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbml0U2V0ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgICAgIGluaXRTZXQuYWRkKHJlZik7XG4gICAgICAgICAgICAgICAgZm9ybUVsZW1lbnRzTWFwLnNldChmb3JtLCBpbml0U2V0KTtcbiAgICAgICAgICAgICAgICB3aXJlU3VibWl0TG9naWMoZm9ybSk7XG4gICAgICAgICAgICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdyZXNldCcsIGZvcm1SZXNldENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZm9ybUlucHV0Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZm9ybUNoYW5nZUNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvcm1zTWFwLnNldChmb3JtLCB7IHJlZiwgaW50ZXJuYWxzIH0pO1xuICAgICAgICAgICAgaWYgKHJlZi5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSAmJiByZWYuZm9ybUFzc29jaWF0ZWRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWYuZm9ybUFzc29jaWF0ZWRDYWxsYmFjay5hcHBseShyZWYsIFtmb3JtXSk7XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRGb3JtVmFsaWRpdHkoZm9ybSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRQYXJlbnRGb3JtID0gKGVsZW0pID0+IHtcbiAgICAgICAgbGV0IHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcbiAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQudGFnTmFtZSAhPT0gJ0ZPUk0nKSB7XG4gICAgICAgICAgICBwYXJlbnQgPSBmaW5kUGFyZW50Rm9ybShwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfTtcbiAgICBjb25zdCB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQgPSAocmVmLCBtZXNzYWdlLCBFcnJvclR5cGUgPSBET01FeGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKCFyZWYuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvclR5cGUobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG92ZXJyaWRlRm9ybU1ldGhvZCA9IChmb3JtLCByZXR1cm5WYWx1ZSwgbWV0aG9kKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZm9ybUVsZW1lbnRzTWFwLmdldChmb3JtKTtcbiAgICAgICAgaWYgKGVsZW1lbnRzICYmIGVsZW1lbnRzLnNpemUpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gaW50ZXJuYWxzTWFwLmdldChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZCA9IGludGVybmFsc1ttZXRob2RdKCk7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICB9O1xuICAgIGNvbnN0IHVwZ3JhZGVJbnRlcm5hbHMgPSAocmVmKSA9PiB7XG4gICAgICAgIGlmIChyZWYuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10pIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQocmVmKTtcbiAgICAgICAgICAgIGNvbnN0IHsgbGFiZWxzLCBmb3JtIH0gPSBpbnRlcm5hbHM7XG4gICAgICAgICAgICBpbml0TGFiZWxzKHJlZiwgbGFiZWxzKTtcbiAgICAgICAgICAgIGluaXRGb3JtKHJlZiwgZm9ybSwgaW50ZXJuYWxzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gbXV0YXRpb25PYnNlcnZlckV4aXN0cygpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJztcbiAgICB9XG5cbiAgICBjbGFzcyBWYWxpZGl0eVN0YXRlIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICB0aGlzLmJhZElucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUVycm9yID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnBhdHRlcm5NaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yYW5nZU92ZXJmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJhbmdlVW5kZXJmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnN0ZXBNaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50b29Mb25nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRvb1Nob3J0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnR5cGVNaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnZhbHVlTWlzc2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgT2JqZWN0LnNlYWwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc2V0VmFsaWQgPSAodmFsaWRpdHlPYmplY3QpID0+IHtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QuYmFkSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QuY3VzdG9tRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QucGF0dGVybk1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnJhbmdlT3ZlcmZsb3cgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QucmFuZ2VVbmRlcmZsb3cgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3Quc3RlcE1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnRvb0xvbmcgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudG9vU2hvcnQgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudHlwZU1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudmFsdWVNaXNzaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB2YWxpZGl0eU9iamVjdDtcbiAgICB9O1xuICAgIGNvbnN0IHJlY29uY2lsZVZhbGlkaXR5ID0gKHZhbGlkaXR5T2JqZWN0LCBuZXdTdGF0ZSwgZm9ybSkgPT4ge1xuICAgICAgICB2YWxpZGl0eU9iamVjdC52YWxpZCA9IGlzVmFsaWQobmV3U3RhdGUpO1xuICAgICAgICBPYmplY3Qua2V5cyhuZXdTdGF0ZSkuZm9yRWFjaChrZXkgPT4gdmFsaWRpdHlPYmplY3Rba2V5XSA9IG5ld1N0YXRlW2tleV0pO1xuICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgc2V0Rm9ybVZhbGlkaXR5KGZvcm0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZGl0eU9iamVjdDtcbiAgICB9O1xuICAgIGNvbnN0IGlzVmFsaWQgPSAodmFsaWRpdHlTdGF0ZSkgPT4ge1xuICAgICAgICBsZXQgdmFsaWQgPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdmFsaWRpdHlTdGF0ZSkge1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gJ3ZhbGlkJyAmJiB2YWxpZGl0eVN0YXRlW2tleV0gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgfTtcblxuICAgIGNvbnN0IGN1c3RvbVN0YXRlTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBmdW5jdGlvbiBhZGRTdGF0ZShyZWYsIHN0YXRlTmFtZSkge1xuICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKHN0YXRlTmFtZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChyZWYucGFydCkge1xuICAgICAgICAgICAgcmVmLnBhcnQuYWRkKHN0YXRlTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xhc3MgQ3VzdG9tU3RhdGVTZXQgZXh0ZW5kcyBTZXQge1xuICAgICAgICBzdGF0aWMgZ2V0IGlzUG9seWZpbGxlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdG9yKHJlZikge1xuICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgIGlmICghcmVmIHx8ICFyZWYudGFnTmFtZSB8fCByZWYudGFnTmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBjb25zdHJ1Y3RvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VzdG9tU3RhdGVNYXAuc2V0KHRoaXMsIHJlZik7XG4gICAgICAgIH1cbiAgICAgICAgYWRkKHN0YXRlKSB7XG4gICAgICAgICAgICBpZiAoIS9eLS0vLnRlc3Qoc3RhdGUpIHx8IHR5cGVvZiBzdGF0ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGBGYWlsZWQgdG8gZXhlY3V0ZSAnYWRkJyBvbiAnQ3VzdG9tU3RhdGVTZXQnOiBUaGUgc3BlY2lmaWVkIHZhbHVlICR7c3RhdGV9IG11c3Qgc3RhcnQgd2l0aCAnLS0nLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3VwZXIuYWRkKHN0YXRlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IGN1c3RvbVN0YXRlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlTmFtZSA9IGBzdGF0ZSR7c3RhdGV9YDtcbiAgICAgICAgICAgIGlmIChyZWYuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBhZGRTdGF0ZShyZWYsIHN0YXRlTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUocmVmLCBzdGF0ZU5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBjbGVhcigpIHtcbiAgICAgICAgICAgIGZvciAobGV0IFtlbnRyeV0gb2YgdGhpcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZShlbnRyeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdXBlci5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZShzdGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3VwZXIuZGVsZXRlKHN0YXRlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IGN1c3RvbVN0YXRlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGlmIChyZWYuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKGBzdGF0ZSR7c3RhdGV9YCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChyZWYucGFydCkge1xuICAgICAgICAgICAgICAgICAgICByZWYucGFydC5yZW1vdmUoYHN0YXRlJHtzdGF0ZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLnRvZ2dsZUF0dHJpYnV0ZShgc3RhdGUke3N0YXRlfWAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZi5wYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYucGFydC5yZW1vdmUoYHN0YXRlJHtzdGF0ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gICAgICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICAgICAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gICAgICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICAgICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cztcbiAgICBjbGFzcyBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbiB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRzKSB7XG4gICAgICAgICAgICBfSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25fZWxlbWVudHMuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cywgZWxlbWVudHMsIFwiZlwiKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGVsZW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgIHRoaXNbaV0gPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnbmFtZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ25hbWUnKV0gPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cywgXCJmXCIpLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBbKF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cyA9IG5ldyBXZWFrTWFwKCksIFN5bWJvbC5pdGVyYXRvcildKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uX2VsZW1lbnRzLCBcImZcIilbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW0oaSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbaV0gPT0gbnVsbCA/IG51bGwgOiB0aGlzW2ldO1xuICAgICAgICB9XG4gICAgICAgIG5hbWVkSXRlbShuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1tuYW1lXSA9PSBudWxsID8gbnVsbCA6IHRoaXNbbmFtZV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXRjaEZvcm1Qcm90b3R5cGUoKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrVmFsaWRpdHkgPSBIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLmNoZWNrVmFsaWRpdHk7XG4gICAgICAgIEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUuY2hlY2tWYWxpZGl0eSA9IGNoZWNrVmFsaWRpdHlPdmVycmlkZTtcbiAgICAgICAgY29uc3QgcmVwb3J0VmFsaWRpdHkgPSBIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnJlcG9ydFZhbGlkaXR5O1xuICAgICAgICBIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnJlcG9ydFZhbGlkaXR5ID0gcmVwb3J0VmFsaWRpdHlPdmVycmlkZTtcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tWYWxpZGl0eU92ZXJyaWRlKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IGNoZWNrVmFsaWRpdHkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVGb3JtTWV0aG9kKHRoaXMsIHJldHVyblZhbHVlLCAnY2hlY2tWYWxpZGl0eScpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlcG9ydFZhbGlkaXR5T3ZlcnJpZGUoLi4uYXJncykge1xuICAgICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gcmVwb3J0VmFsaWRpdHkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVGb3JtTWV0aG9kKHRoaXMsIHJldHVyblZhbHVlLCAncmVwb3J0VmFsaWRpdHknKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGdldCB9ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLCAnZWxlbWVudHMnKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUsICdlbGVtZW50cycsIHtcbiAgICAgICAgICAgIGdldCguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBnZXQuY2FsbCh0aGlzLCAuLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2x5ZmlsbGVkRWxlbWVudHMgPSBBcnJheS5mcm9tKGZvcm1FbGVtZW50c01hcC5nZXQodGhpcykgfHwgW10pO1xuICAgICAgICAgICAgICAgIGlmIChwb2x5ZmlsbGVkRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JkZXJlZEVsZW1lbnRzID0gQXJyYXkuZnJvbShlbGVtZW50cykuY29uY2F0KHBvbHlmaWxsZWRFbGVtZW50cykuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiAyID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24ob3JkZXJlZEVsZW1lbnRzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIEVsZW1lbnRJbnRlcm5hbHMge1xuICAgICAgICBzdGF0aWMgZ2V0IGlzUG9seWZpbGxlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdG9yKHJlZikge1xuICAgICAgICAgICAgaWYgKCFyZWYgfHwgIXJlZi50YWdOYW1lIHx8IHJlZi50YWdOYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIGNvbnN0cnVjdG9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByb290Tm9kZSA9IHJlZi5nZXRSb290Tm9kZSgpO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRpdHkgPSBuZXcgVmFsaWRpdHlTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZXMgPSBuZXcgQ3VzdG9tU3RhdGVTZXQocmVmKTtcbiAgICAgICAgICAgIHJlZk1hcC5zZXQodGhpcywgcmVmKTtcbiAgICAgICAgICAgIHZhbGlkaXR5TWFwLnNldCh0aGlzLCB2YWxpZGl0eSk7XG4gICAgICAgICAgICBpbnRlcm5hbHNNYXAuc2V0KHJlZiwgdGhpcyk7XG4gICAgICAgICAgICBpbml0QW9tKHJlZiwgdGhpcyk7XG4gICAgICAgICAgICBpbml0UmVmKHJlZiwgdGhpcyk7XG4gICAgICAgICAgICBPYmplY3Quc2VhbCh0aGlzKTtcbiAgICAgICAgICAgIGlmIChyb290Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgICAgICAgICAgICBkZWZlclVwZ3JhZGUocm9vdE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNoZWNrVmFsaWRpdHkoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byBleGVjdXRlICdjaGVja1ZhbGlkaXR5JyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMud2lsbFZhbGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWxpZGl0eSA9IHZhbGlkaXR5TWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGlmICghdmFsaWRpdHkudmFsaWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGl0eUV2ZW50ID0gbmV3IEV2ZW50KCdpbnZhbGlkJywge1xuICAgICAgICAgICAgICAgICAgICBidWJibGVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmVmLmRpc3BhdGNoRXZlbnQodmFsaWRpdHlFdmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRpdHkudmFsaWQ7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGZvcm0oKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byByZWFkIHRoZSAnZm9ybScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBsZXQgZm9ybTtcbiAgICAgICAgICAgIGlmIChyZWYuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBmb3JtID0gZmluZFBhcmVudEZvcm0ocmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgICB9XG4gICAgICAgIGdldCBsYWJlbHMoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byByZWFkIHRoZSAnbGFiZWxzJyBwcm9wZXJ0eSBmcm9tICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gcmVmLmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgICAgIGNvbnN0IGhvc3RSb290ID0gcmVmLmdldFJvb3ROb2RlKCk7XG4gICAgICAgICAgICBpZiAoaG9zdFJvb3QgJiYgaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG9zdFJvb3QucXVlcnlTZWxlY3RvckFsbChgW2Zvcj1cIiR7aWR9XCJdYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmVwb3J0VmFsaWRpdHkoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byBleGVjdXRlICdyZXBvcnRWYWxpZGl0eScgb24gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgaWYgKCF0aGlzLndpbGxWYWxpZGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSB0aGlzLmNoZWNrVmFsaWRpdHkoKTtcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IHZhbGlkYXRpb25BbmNob3JNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgaWYgKGFuY2hvciAmJiAhcmVmLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihgRmFpbGVkIHRvIGV4ZWN1dGUgJ3JlcG9ydFZhbGlkaXR5JyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXZhbGlkICYmIGFuY2hvcikge1xuICAgICAgICAgICAgICAgIHJlZi5mb2N1cygpO1xuICAgICAgICAgICAgICAgIGFuY2hvci5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIHNldEZvcm1WYWx1ZSh2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0Rm9ybVZhbHVlJyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICByZW1vdmVIaWRkZW5JbnB1dHModGhpcyk7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZi5nZXRBdHRyaWJ1dGUoJ25hbWUnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoaWRkZW5JbnB1dCA9IGNyZWF0ZUhpZGRlbklucHV0KHJlZiwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbklucHV0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh2YWx1ZSkucmV2ZXJzZSgpLmZvckVhY2goKFtmb3JtRGF0YUtleSwgZm9ybURhdGFWYWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmb3JtRGF0YVZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlkZGVuSW5wdXQgPSBjcmVhdGVIaWRkZW5JbnB1dChyZWYsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuSW5wdXQubmFtZSA9IGZvcm1EYXRhS2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuSW5wdXQudmFsdWUgPSBmb3JtRGF0YVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWZWYWx1ZU1hcC5zZXQocmVmLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VmFsaWRpdHkodmFsaWRpdHlDaGFuZ2VzLCB2YWxpZGF0aW9uTWVzc2FnZSwgYW5jaG9yKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byBleGVjdXRlICdzZXRWYWxpZGl0eScgb24gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgaWYgKCF2YWxpZGl0eUNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gZXhlY3V0ZSBcXCdzZXRWYWxpZGl0eVxcJyBvbiBcXCdFbGVtZW50SW50ZXJuYWxzXFwnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSAwIHByZXNlbnQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWxpZGF0aW9uQW5jaG9yTWFwLnNldCh0aGlzLCBhbmNob3IpO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRpdHkgPSB2YWxpZGl0eU1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGl0eUNoYW5nZXNPYmogPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHZhbGlkaXR5Q2hhbmdlcykge1xuICAgICAgICAgICAgICAgIHZhbGlkaXR5Q2hhbmdlc09ialtrZXldID0gdmFsaWRpdHlDaGFuZ2VzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXModmFsaWRpdHlDaGFuZ2VzT2JqKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBzZXRWYWxpZCh2YWxpZGl0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjaGVjayA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdmFsaWRpdHkpLCB2YWxpZGl0eUNoYW5nZXNPYmopO1xuICAgICAgICAgICAgZGVsZXRlIGNoZWNrLnZhbGlkO1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCB9ID0gcmVjb25jaWxlVmFsaWRpdHkodmFsaWRpdHksIGNoZWNrLCB0aGlzLmZvcm0pO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCAmJiAhdmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGBGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0VmFsaWRpdHknIG9uICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHNlY29uZCBhcmd1bWVudCBzaG91bGQgbm90IGJlIGVtcHR5IGlmIG9uZSBvciBtb3JlIGZsYWdzIGluIHRoZSBmaXJzdCBhcmd1bWVudCBhcmUgdHJ1ZS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbGlkYXRpb25NZXNzYWdlTWFwLnNldCh0aGlzLCB2YWxpZCA/ICcnIDogdmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgICAgICAgICAgaWYgKHJlZi5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgIHJlZi50b2dnbGVBdHRyaWJ1dGUoJ2ludGVybmFscy1pbnZhbGlkJywgIXZhbGlkKTtcbiAgICAgICAgICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKCdpbnRlcm5hbHMtdmFsaWQnLCB2YWxpZCk7XG4gICAgICAgICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJywgYCR7IXZhbGlkfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsaWRpdHlVcGdyYWRlTWFwLnNldChyZWYsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldCBzaGFkb3dSb290KCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBzaGFkb3dSb290TWFwLmdldChyZWYpO1xuICAgICAgICAgICAgaWYgKHNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIHJlYWQgdGhlICd2YWxpZGF0aW9uTWVzc2FnZScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VNYXAuZ2V0KHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGdldCB2YWxpZGl0eSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIHJlYWQgdGhlICd2YWxpZGl0eScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGl0eSA9IHZhbGlkaXR5TWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGl0eTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgd2lsbFZhbGlkYXRlKCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gcmVhZCB0aGUgJ3dpbGxWYWxpZGF0ZScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBpZiAoKHJlZi5kaXNhYmxlZCB8fCByZWYuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSB8fFxuICAgICAgICAgICAgICAgIHJlZi5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc0VsZW1lbnRJbnRlcm5hbHNTdXBwb3J0ZWQoKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhd2luZG93LkVsZW1lbnRJbnRlcm5hbHMgfHwgIUhUTUxFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hJbnRlcm5hbHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjbGFzcyBFbGVtZW50SW50ZXJuYWxzRmVhdHVyZURldGVjdGlvbiBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbHMgPSB0aGlzLmF0dGFjaEludGVybmFscygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhbmRvbU5hbWUgPSBgZWxlbWVudC1pbnRlcm5hbHMtZmVhdHVyZS1kZXRlY3Rpb24tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBsYWNlKC9bXmEtel0rL2csICcnKX1gO1xuICAgICAgICBjdXN0b21FbGVtZW50cy5kZWZpbmUocmFuZG9tTmFtZSwgRWxlbWVudEludGVybmFsc0ZlYXR1cmVEZXRlY3Rpb24pO1xuICAgICAgICBjb25zdCBmZWF0dXJlRGV0ZWN0aW9uRWxlbWVudCA9IG5ldyBFbGVtZW50SW50ZXJuYWxzRmVhdHVyZURldGVjdGlvbigpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ3NoYWRvd1Jvb3QnLFxuICAgICAgICAgICAgJ2Zvcm0nLFxuICAgICAgICAgICAgJ3dpbGxWYWxpZGF0ZScsXG4gICAgICAgICAgICAndmFsaWRpdHknLFxuICAgICAgICAgICAgJ3ZhbGlkYXRpb25NZXNzYWdlJyxcbiAgICAgICAgICAgICdsYWJlbHMnLFxuICAgICAgICAgICAgJ3NldEZvcm1WYWx1ZScsXG4gICAgICAgICAgICAnc2V0VmFsaWRpdHknLFxuICAgICAgICAgICAgJ2NoZWNrVmFsaWRpdHknLFxuICAgICAgICAgICAgJ3JlcG9ydFZhbGlkaXR5J1xuICAgICAgICBdLmV2ZXJ5KHByb3AgPT4gcHJvcCBpbiBmZWF0dXJlRGV0ZWN0aW9uRWxlbWVudC5pbnRlcm5hbHMpO1xuICAgIH1cbiAgICBsZXQgaGFzRWxlbWVudEludGVybmFsc1BvbHlmaWxsQmVlbkFwcGxpZWQgPSBmYWxzZTtcbiAgICBsZXQgaGFzQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbEJlZW5BcHBsaWVkID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gZm9yY2VDdXN0b21TdGF0ZVNldFBvbHlmaWxsKGF0dGFjaEludGVybmFscykge1xuICAgICAgICBpZiAoaGFzQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbEJlZW5BcHBsaWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaGFzQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbEJlZW5BcHBsaWVkID0gdHJ1ZTtcbiAgICAgICAgd2luZG93LkN1c3RvbVN0YXRlU2V0ID0gQ3VzdG9tU3RhdGVTZXQ7XG4gICAgICAgIGlmIChhdHRhY2hJbnRlcm5hbHMpIHtcbiAgICAgICAgICAgIEhUTUxFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hJbnRlcm5hbHMgPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGF0dGFjaEludGVybmFscy5jYWxsKHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIGludGVybmFscy5zdGF0ZXMgPSBuZXcgQ3VzdG9tU3RhdGVTZXQodGhpcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFscztcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZm9yY2VFbGVtZW50SW50ZXJuYWxzUG9seWZpbGwoZm9yY2VDdXN0b21TdGF0ZVNldCA9IHRydWUpIHtcbiAgICAgICAgaWYgKGhhc0VsZW1lbnRJbnRlcm5hbHNQb2x5ZmlsbEJlZW5BcHBsaWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaGFzRWxlbWVudEludGVybmFsc1BvbHlmaWxsQmVlbkFwcGxpZWQgPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHdpbmRvdy5FbGVtZW50SW50ZXJuYWxzID0gRWxlbWVudEludGVybmFscztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluZSA9IEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUuZGVmaW5lO1xuICAgICAgICAgICAgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LnByb3RvdHlwZS5kZWZpbmUgPSBmdW5jdGlvbiAobmFtZSwgY29uc3RydWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29uc3RydWN0b3IuZm9ybUFzc29jaWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29ubmVjdGVkQ2FsbGJhY2sgPSBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29ubmVjdGVkQ2FsbGJhY2tNYXAuaGFzKHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkQ2FsbGJhY2tNYXAuc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXREaXNhYmxlZCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdGVkQ2FsbGJhY2sgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RlZENhbGxiYWNrLmFwcGx5KHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdXBncmFkZUludGVybmFscyh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmaW5lLmNhbGwodGhpcywgbmFtZSwgY29uc3RydWN0b3IsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgSFRNTEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaEludGVybmFscyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGFnTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudGFnTmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGV4ZWN1dGUgJ2F0dGFjaEludGVybmFscycgb24gJ0hUTUxFbGVtZW50JzogVW5hYmxlIHRvIGF0dGFjaCBFbGVtZW50SW50ZXJuYWxzIHRvIG5vbi1jdXN0b20gZWxlbWVudHMuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHNNYXAuaGFzKHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oYERPTUV4Y2VwdGlvbjogRmFpbGVkIHRvIGV4ZWN1dGUgJ2F0dGFjaEludGVybmFscycgb24gJ0hUTUxFbGVtZW50JzogRWxlbWVudEludGVybmFscyBmb3IgdGhlIHNwZWNpZmllZCBlbGVtZW50IHdhcyBhbHJlYWR5IGF0dGFjaGVkLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVsZW1lbnRJbnRlcm5hbHModGhpcyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGF0dGFjaFNoYWRvd09ic2VydmVyKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaGFkb3dSb290ID0gYXR0YWNoU2hhZG93LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIHNoYWRvd1Jvb3RNYXAuc2V0KHRoaXMsIHNoYWRvd1Jvb3QpO1xuICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbk9ic2VydmVyRXhpc3RzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihvYnNlcnZlckNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5TaGFkeURPTSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCBvYnNlcnZlckNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHNoYWRvd1Jvb3QsIG9ic2VydmVyQ29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzaGFkb3dIb3N0c01hcC5zZXQodGhpcywgb2JzZXJ2ZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaFNoYWRvdyA9IEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvdztcbiAgICAgICAgICAgIEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvdyA9IGF0dGFjaFNoYWRvd09ic2VydmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtdXRhdGlvbk9ic2VydmVyRXhpc3RzKCkgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG9ic2VydmVyQ2FsbGJhY2spO1xuICAgICAgICAgICAgZG9jdW1lbnRPYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgb2JzZXJ2ZXJDb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgSFRNTEZvcm1FbGVtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcGF0Y2hGb3JtUHJvdG90eXBlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcmNlQ3VzdG9tU3RhdGVTZXQgfHxcbiAgICAgICAgICAgICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmICF3aW5kb3cuQ3VzdG9tU3RhdGVTZXQpKSB7XG4gICAgICAgICAgICBmb3JjZUN1c3RvbVN0YXRlU2V0UG9seWZpbGwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGlzQ2VQb2x5ZmlsbCA9ICEhY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjaztcbiAgICBpZiAoIWlzQ2VQb2x5ZmlsbCkge1xuICAgICAgICBpZiAoIWlzRWxlbWVudEludGVybmFsc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgICAgICBmb3JjZUVsZW1lbnRJbnRlcm5hbHNQb2x5ZmlsbChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhd2luZG93LkN1c3RvbVN0YXRlU2V0KSB7XG4gICAgICAgICAgICBmb3JjZUN1c3RvbVN0YXRlU2V0UG9seWZpbGwoSFRNTEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaEludGVybmFscyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnRzLmZvcmNlQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbCA9IGZvcmNlQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbDtcbiAgICBleHBvcnRzLmZvcmNlRWxlbWVudEludGVybmFsc1BvbHlmaWxsID0gZm9yY2VFbGVtZW50SW50ZXJuYWxzUG9seWZpbGw7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4gICAgcmV0dXJuIGV4cG9ydHM7XG5cbn0pKHt9KTtcbiIsICIvKiFcbiAqIE1JVCBMaWNlbnNlXG4gKiBcbiAqIENvcHlyaWdodCAoYykgMjAxNy0yMDI0IFBlY3VsaWFyIFZlbnR1cmVzLCBMTENcbiAqIFxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICogXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKiBcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBBUlJBWV9CVUZGRVJfTkFNRSA9IFwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIjtcbmNsYXNzIEJ1ZmZlclNvdXJjZUNvbnZlcnRlciB7XG4gICAgc3RhdGljIGlzQXJyYXlCdWZmZXIoZGF0YSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGEpID09PSBBUlJBWV9CVUZGRVJfTkFNRTtcbiAgICB9XG4gICAgc3RhdGljIHRvQXJyYXlCdWZmZXIoZGF0YSkge1xuICAgICAgICBpZiAodGhpcy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YS5ieXRlTGVuZ3RoID09PSBkYXRhLmJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEuYnl0ZU9mZnNldCA9PT0gMCAmJiBkYXRhLmJ5dGVMZW5ndGggPT09IGRhdGEuYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50b1VpbnQ4QXJyYXkoZGF0YS5idWZmZXIpXG4gICAgICAgICAgICAuc2xpY2UoZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVPZmZzZXQgKyBkYXRhLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICAuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgdG9VaW50OEFycmF5KGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9WaWV3KGRhdGEsIFVpbnQ4QXJyYXkpO1xuICAgIH1cbiAgICBzdGF0aWMgdG9WaWV3KGRhdGEsIHR5cGUpIHtcbiAgICAgICAgaWYgKGRhdGEuY29uc3RydWN0b3IgPT09IHR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzQXJyYXlCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgdHlwZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyB0eXBlKGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBwcm92aWRlZCB2YWx1ZSBpcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNCdWZmZXJTb3VyY2UoZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKVxuICAgICAgICAgICAgfHwgdGhpcy5pc0FycmF5QnVmZmVyKGRhdGEpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkge1xuICAgICAgICByZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpXG4gICAgICAgICAgICB8fCAoZGF0YSAmJiB0aGlzLmlzQXJyYXlCdWZmZXIoZGF0YS5idWZmZXIpKTtcbiAgICB9XG4gICAgc3RhdGljIGlzRXF1YWwoYSwgYikge1xuICAgICAgICBjb25zdCBhVmlldyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYSk7XG4gICAgICAgIGNvbnN0IGJWaWV3ID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShiKTtcbiAgICAgICAgaWYgKGFWaWV3Lmxlbmd0aCAhPT0gYlZpZXcuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYVZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhVmlld1tpXSAhPT0gYlZpZXdbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHN0YXRpYyBjb25jYXQoLi4uYXJncykge1xuICAgICAgICBsZXQgYnVmZmVycztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnc1swXSkgJiYgIShhcmdzWzFdIGluc3RhbmNlb2YgRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICBidWZmZXJzID0gYXJnc1swXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZ3NbMF0pICYmIGFyZ3NbMV0gaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgYnVmZmVycyA9IGFyZ3NbMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoYXJnc1thcmdzLmxlbmd0aCAtIDFdIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBidWZmZXJzID0gYXJncy5zbGljZSgwLCBhcmdzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnVmZmVycyA9IGFyZ3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNpemUgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiBidWZmZXJzKSB7XG4gICAgICAgICAgICBzaXplICs9IGJ1ZmZlci5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHNpemUpO1xuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xuICAgICAgICAgICAgY29uc3QgdmlldyA9IHRoaXMudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgICAgICByZXMuc2V0KHZpZXcsIG9mZnNldCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gdmlldy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3NbYXJncy5sZW5ndGggLSAxXSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b1ZpZXcocmVzLCBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXMuYnVmZmVyO1xuICAgIH1cbn1cblxuY29uc3QgU1RSSU5HX1RZUEUgPSBcInN0cmluZ1wiO1xuY29uc3QgSEVYX1JFR0VYID0gL15bMC05YS1mXFxzXSskL2k7XG5jb25zdCBCQVNFNjRfUkVHRVggPSAvXig/OltBLVphLXowLTkrL117NH0pKig/OltBLVphLXowLTkrL117Mn09PXxbQS1aYS16MC05Ky9dezN9PSk/JC87XG5jb25zdCBCQVNFNjRVUkxfUkVHRVggPSAvXlthLXpBLVowLTktX10rJC87XG5jbGFzcyBVdGY4Q29udmVydGVyIHtcbiAgICBzdGF0aWMgZnJvbVN0cmluZyh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IHMgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodGV4dCkpO1xuICAgICAgICBjb25zdCB1aW50QXJyYXkgPSBuZXcgVWludDhBcnJheShzLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdWludEFycmF5W2ldID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1aW50QXJyYXkuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgdG9TdHJpbmcoYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgbGV0IGVuY29kZWRTdHJpbmcgPSBcIlwiO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZW5jb2RlZFN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVjb2RlZFN0cmluZyA9IGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZW5jb2RlZFN0cmluZykpO1xuICAgICAgICByZXR1cm4gZGVjb2RlZFN0cmluZztcbiAgICB9XG59XG5jbGFzcyBVdGYxNkNvbnZlcnRlciB7XG4gICAgc3RhdGljIHRvU3RyaW5nKGJ1ZmZlciwgbGl0dGxlRW5kaWFuID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihidWZmZXIpO1xuICAgICAgICBjb25zdCBkYXRhVmlldyA9IG5ldyBEYXRhVmlldyhhcnJheUJ1ZmZlcik7XG4gICAgICAgIGxldCByZXMgPSBcIlwiO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5QnVmZmVyLmJ5dGVMZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgY29kZSA9IGRhdGFWaWV3LmdldFVpbnQxNihpLCBsaXR0bGVFbmRpYW4pO1xuICAgICAgICAgICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGZyb21TdHJpbmcodGV4dCwgbGl0dGxlRW5kaWFuID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IEFycmF5QnVmZmVyKHRleHQubGVuZ3RoICogMik7XG4gICAgICAgIGNvbnN0IGRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KHJlcyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZGF0YVZpZXcuc2V0VWludDE2KGkgKiAyLCB0ZXh0LmNoYXJDb2RlQXQoaSksIGxpdHRsZUVuZGlhbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59XG5jbGFzcyBDb252ZXJ0IHtcbiAgICBzdGF0aWMgaXNIZXgoZGF0YSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09IFNUUklOR19UWVBFXG4gICAgICAgICAgICAmJiBIRVhfUkVHRVgudGVzdChkYXRhKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQmFzZTY0KGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSBTVFJJTkdfVFlQRVxuICAgICAgICAgICAgJiYgQkFTRTY0X1JFR0VYLnRlc3QoZGF0YSk7XG4gICAgfVxuICAgIHN0YXRpYyBpc0Jhc2U2NFVybChkYXRhKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gU1RSSU5HX1RZUEVcbiAgICAgICAgICAgICYmIEJBU0U2NFVSTF9SRUdFWC50ZXN0KGRhdGEpO1xuICAgIH1cbiAgICBzdGF0aWMgVG9TdHJpbmcoYnVmZmVyLCBlbmMgPSBcInV0ZjhcIikge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIHN3aXRjaCAoZW5jLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGY4XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVG9VdGY4U3RyaW5nKGJ1Zik7XG4gICAgICAgICAgICBjYXNlIFwiYmluYXJ5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVG9CaW5hcnkoYnVmKTtcbiAgICAgICAgICAgIGNhc2UgXCJoZXhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Ub0hleChidWYpO1xuICAgICAgICAgICAgY2FzZSBcImJhc2U2NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRvQmFzZTY0KGJ1Zik7XG4gICAgICAgICAgICBjYXNlIFwiYmFzZTY0dXJsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVG9CYXNlNjRVcmwoYnVmKTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmxlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLnRvU3RyaW5nKGJ1ZiwgdHJ1ZSk7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmJlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLnRvU3RyaW5nKGJ1Zik7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlIG9mIGVuY29kaW5nICcke2VuY30nYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIEZyb21TdHJpbmcoc3RyLCBlbmMgPSBcInV0ZjhcIikge1xuICAgICAgICBpZiAoIXN0cikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGVuYy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwidXRmOFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21VdGY4U3RyaW5nKHN0cik7XG4gICAgICAgICAgICBjYXNlIFwiYmluYXJ5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUJpbmFyeShzdHIpO1xuICAgICAgICAgICAgY2FzZSBcImhleFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21IZXgoc3RyKTtcbiAgICAgICAgICAgIGNhc2UgXCJiYXNlNjRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tQmFzZTY0KHN0cik7XG4gICAgICAgICAgICBjYXNlIFwiYmFzZTY0dXJsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUJhc2U2NFVybChzdHIpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2bGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIuZnJvbVN0cmluZyhzdHIsIHRydWUpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2XCI6XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZiZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci5mcm9tU3RyaW5nKHN0cik7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlIG9mIGVuY29kaW5nICcke2VuY30nYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIFRvQmFzZTY0KGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGlmICh0eXBlb2YgYnRvYSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgY29uc3QgYmluYXJ5ID0gdGhpcy5Ub1N0cmluZyhidWYsIFwiYmluYXJ5XCIpO1xuICAgICAgICAgICAgcmV0dXJuIGJ0b2EoYmluYXJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShidWYpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tQmFzZTY0KGJhc2U2NCkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdFN0cmluZyhiYXNlNjQpO1xuICAgICAgICBpZiAoIWZvcm1hdHRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUNvbnZlcnQuaXNCYXNlNjQoZm9ybWF0dGVkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50ICdiYXNlNjRUZXh0JyBpcyBub3QgQmFzZTY0IGVuY29kZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhdG9iICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tQmluYXJ5KGF0b2IoZm9ybWF0dGVkKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20oZm9ybWF0dGVkLCBcImJhc2U2NFwiKSkuYnVmZmVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tQmFzZTY0VXJsKGJhc2U2NHVybCkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdFN0cmluZyhiYXNlNjR1cmwpO1xuICAgICAgICBpZiAoIWZvcm1hdHRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUNvbnZlcnQuaXNCYXNlNjRVcmwoZm9ybWF0dGVkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50ICdiYXNlNjR1cmwnIGlzIG5vdCBCYXNlNjRVcmwgZW5jb2RlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5Gcm9tQmFzZTY0KHRoaXMuQmFzZTY0UGFkZGluZyhmb3JtYXR0ZWQucmVwbGFjZSgvXFwtL2csIFwiK1wiKS5yZXBsYWNlKC9cXF8vZywgXCIvXCIpKSk7XG4gICAgfVxuICAgIHN0YXRpYyBUb0Jhc2U2NFVybChkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLlRvQmFzZTY0KGRhdGEpLnJlcGxhY2UoL1xcKy9nLCBcIi1cIikucmVwbGFjZSgvXFwvL2csIFwiX1wiKS5yZXBsYWNlKC9cXD0vZywgXCJcIik7XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tVXRmOFN0cmluZyh0ZXh0LCBlbmNvZGluZyA9IENvbnZlcnQuREVGQVVMVF9VVEY4X0VOQ09ESU5HKSB7XG4gICAgICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhc2NpaVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21CaW5hcnkodGV4dCk7XG4gICAgICAgICAgICBjYXNlIFwidXRmOFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGY4Q29udmVydGVyLmZyb21TdHJpbmcodGV4dCk7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmJlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLmZyb21TdHJpbmcodGV4dCk7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZsZVwiOlxuICAgICAgICAgICAgY2FzZSBcInVzYzJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIuZnJvbVN0cmluZyh0ZXh0LCB0cnVlKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHR5cGUgb2YgZW5jb2RpbmcgJyR7ZW5jb2Rpbmd9J2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBUb1V0ZjhTdHJpbmcoYnVmZmVyLCBlbmNvZGluZyA9IENvbnZlcnQuREVGQVVMVF9VVEY4X0VOQ09ESU5HKSB7XG4gICAgICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhc2NpaVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRvQmluYXJ5KGJ1ZmZlcik7XG4gICAgICAgICAgICBjYXNlIFwidXRmOFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGY4Q29udmVydGVyLnRvU3RyaW5nKGJ1ZmZlcik7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmJlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLnRvU3RyaW5nKGJ1ZmZlcik7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZsZVwiOlxuICAgICAgICAgICAgY2FzZSBcInVzYzJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIudG9TdHJpbmcoYnVmZmVyLCB0cnVlKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHR5cGUgb2YgZW5jb2RpbmcgJyR7ZW5jb2Rpbmd9J2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tQmluYXJ5KHRleHQpIHtcbiAgICAgICAgY29uc3Qgc3RyaW5nTGVuZ3RoID0gdGV4dC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJlc3VsdFZpZXcgPSBuZXcgVWludDhBcnJheShzdHJpbmdMZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZ0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHRWaWV3W2ldID0gdGV4dC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRWaWV3LmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIFRvQmluYXJ5KGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGxldCByZXMgPSBcIlwiO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgVG9IZXgoYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gICAgICAgIGNvbnN0IGxlbiA9IGJ1Zi5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGUgPSBidWZbaV07XG4gICAgICAgICAgICBpZiAoYnl0ZSA8IDE2KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IFwiMFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ICs9IGJ5dGUudG9TdHJpbmcoMTYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tSGV4KGhleFN0cmluZykge1xuICAgICAgICBsZXQgZm9ybWF0dGVkID0gdGhpcy5mb3JtYXRTdHJpbmcoaGV4U3RyaW5nKTtcbiAgICAgICAgaWYgKCFmb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFDb252ZXJ0LmlzSGV4KGZvcm1hdHRlZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCAnaGV4U3RyaW5nJyBpcyBub3QgSEVYIGVuY29kZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdHRlZC5sZW5ndGggJSAyKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWQgPSBgMCR7Zm9ybWF0dGVkfWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZm9ybWF0dGVkLmxlbmd0aCAvIDIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvcm1hdHRlZC5sZW5ndGg7IGkgPSBpICsgMikge1xuICAgICAgICAgICAgY29uc3QgYyA9IGZvcm1hdHRlZC5zbGljZShpLCBpICsgMik7XG4gICAgICAgICAgICByZXNbaSAvIDJdID0gcGFyc2VJbnQoYywgMTYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXMuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgVG9VdGYxNlN0cmluZyhidWZmZXIsIGxpdHRsZUVuZGlhbiA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci50b1N0cmluZyhidWZmZXIsIGxpdHRsZUVuZGlhbik7XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tVXRmMTZTdHJpbmcodGV4dCwgbGl0dGxlRW5kaWFuID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLmZyb21TdHJpbmcodGV4dCwgbGl0dGxlRW5kaWFuKTtcbiAgICB9XG4gICAgc3RhdGljIEJhc2U2NFBhZGRpbmcoYmFzZTY0KSB7XG4gICAgICAgIGNvbnN0IHBhZENvdW50ID0gNCAtIChiYXNlNjQubGVuZ3RoICUgNCk7XG4gICAgICAgIGlmIChwYWRDb3VudCA8IDQpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFkQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGJhc2U2NCArPSBcIj1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmFzZTY0O1xuICAgIH1cbiAgICBzdGF0aWMgZm9ybWF0U3RyaW5nKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIChkYXRhID09PSBudWxsIHx8IGRhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRhdGEucmVwbGFjZSgvW1xcblxcclxcdCBdL2csIFwiXCIpKSB8fCBcIlwiO1xuICAgIH1cbn1cbkNvbnZlcnQuREVGQVVMVF9VVEY4X0VOQ09ESU5HID0gXCJ1dGY4XCI7XG5cbmZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIC4uLnNvdXJjZXMpIHtcbiAgICBjb25zdCByZXMgPSBhcmd1bWVudHNbMF07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb2JqID0gYXJndW1lbnRzW2ldO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICByZXNbcHJvcF0gPSBvYmpbcHJvcF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIGNvbWJpbmUoLi4uYnVmKSB7XG4gICAgY29uc3QgdG90YWxCeXRlTGVuZ3RoID0gYnVmLm1hcCgoaXRlbSkgPT4gaXRlbS5ieXRlTGVuZ3RoKS5yZWR1Y2UoKHByZXYsIGN1cikgPT4gcHJldiArIGN1cik7XG4gICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkodG90YWxCeXRlTGVuZ3RoKTtcbiAgICBsZXQgY3VycmVudFBvcyA9IDA7XG4gICAgYnVmLm1hcCgoaXRlbSkgPT4gbmV3IFVpbnQ4QXJyYXkoaXRlbSkpLmZvckVhY2goKGFycikgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0yIG9mIGFycikge1xuICAgICAgICAgICAgcmVzW2N1cnJlbnRQb3MrK10gPSBpdGVtMjtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXMuYnVmZmVyO1xufVxuZnVuY3Rpb24gaXNFcXVhbChieXRlczEsIGJ5dGVzMikge1xuICAgIGlmICghKGJ5dGVzMSAmJiBieXRlczIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGJ5dGVzMS5ieXRlTGVuZ3RoICE9PSBieXRlczIuYnl0ZUxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGIxID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMxKTtcbiAgICBjb25zdCBiMiA9IG5ldyBVaW50OEFycmF5KGJ5dGVzMik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlczEuYnl0ZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChiMVtpXSAhPT0gYjJbaV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0cy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXI7XG5leHBvcnRzLkNvbnZlcnQgPSBDb252ZXJ0O1xuZXhwb3J0cy5hc3NpZ24gPSBhc3NpZ247XG5leHBvcnRzLmNvbWJpbmUgPSBjb21iaW5lO1xuZXhwb3J0cy5pc0VxdWFsID0gaXNFcXVhbDtcbiIsICIvKiFcbiBDb3B5cmlnaHQgKGMpIFBlY3VsaWFyIFZlbnR1cmVzLCBMTENcbiovXG5cbmZ1bmN0aW9uIGdldFVUQ0RhdGUoZGF0ZSkge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpICsgKGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKSk7XHJcbn1cclxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyc1ZhbHVlKHBhcmFtZXRlcnMsIG5hbWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgdmFyIF9hO1xyXG4gICAgaWYgKChwYXJhbWV0ZXJzIGluc3RhbmNlb2YgT2JqZWN0KSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChfYSA9IHBhcmFtZXRlcnNbbmFtZV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGRlZmF1bHRWYWx1ZTtcclxufVxyXG5mdW5jdGlvbiBidWZmZXJUb0hleENvZGVzKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCA9IDAsIGlucHV0TGVuZ3RoID0gKGlucHV0QnVmZmVyLmJ5dGVMZW5ndGggLSBpbnB1dE9mZnNldCksIGluc2VydFNwYWNlID0gZmFsc2UpIHtcclxuICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIChuZXcgVWludDhBcnJheShpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkpIHtcclxuICAgICAgICBjb25zdCBzdHIgPSBpdGVtLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgIGlmIChzdHIubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBcIjBcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0ICs9IHN0cjtcclxuICAgICAgICBpZiAoaW5zZXJ0U3BhY2UpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IFwiIFwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQudHJpbSgpO1xyXG59XHJcbmZ1bmN0aW9uIGNoZWNrQnVmZmVyUGFyYW1zKGJhc2VCbG9jaywgaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgaWYgKCEoaW5wdXRCdWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRCdWZmZXIgbXVzdCBiZSBcXFwiQXJyYXlCdWZmZXJcXFwiXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0QnVmZmVyIGhhcyB6ZXJvIGxlbmd0aFwiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dE9mZnNldCA8IDApIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRPZmZzZXQgbGVzcyB0aGFuIHplcm9cIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRMZW5ndGggPCAwKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0TGVuZ3RoIGxlc3MgdGhhbiB6ZXJvXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKChpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoIC0gaW5wdXRPZmZzZXQgLSBpbnB1dExlbmd0aCkgPCAwKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJFbmQgb2YgaW5wdXQgcmVhY2hlZCBiZWZvcmUgbWVzc2FnZSB3YXMgZnVsbHkgZGVjb2RlZCAoaW5jb25zaXN0ZW50IG9mZnNldCBhbmQgbGVuZ3RoIHZhbHVlcylcIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiB1dGlsRnJvbUJhc2UoaW5wdXRCdWZmZXIsIGlucHV0QmFzZSkge1xyXG4gICAgbGV0IHJlc3VsdCA9IDA7XHJcbiAgICBpZiAoaW5wdXRCdWZmZXIubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0QnVmZmVyWzBdO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IChpbnB1dEJ1ZmZlci5sZW5ndGggLSAxKTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICByZXN1bHQgKz0gaW5wdXRCdWZmZXJbKGlucHV0QnVmZmVyLmxlbmd0aCAtIDEpIC0gaV0gKiBNYXRoLnBvdygyLCBpbnB1dEJhc2UgKiBpKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuZnVuY3Rpb24gdXRpbFRvQmFzZSh2YWx1ZSwgYmFzZSwgcmVzZXJ2ZWQgPSAoLTEpKSB7XHJcbiAgICBjb25zdCBpbnRlcm5hbFJlc2VydmVkID0gcmVzZXJ2ZWQ7XHJcbiAgICBsZXQgaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xyXG4gICAgbGV0IHJlc3VsdCA9IDA7XHJcbiAgICBsZXQgYmlnZ2VzdCA9IE1hdGgucG93KDIsIGJhc2UpO1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICBpZiAodmFsdWUgPCBiaWdnZXN0KSB7XHJcbiAgICAgICAgICAgIGxldCByZXRCdWY7XHJcbiAgICAgICAgICAgIGlmIChpbnRlcm5hbFJlc2VydmVkIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKGkpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbFJlc2VydmVkIDwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAobmV3IEFycmF5QnVmZmVyKDApKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihpbnRlcm5hbFJlc2VydmVkKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGludGVybmFsUmVzZXJ2ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAoaSAtIDEpOyBqID49IDA7IGotLSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYmFzaXMgPSBNYXRoLnBvdygyLCBqICogYmFzZSk7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W3Jlc3VsdCAtIGogLSAxXSA9IE1hdGguZmxvb3IoaW50ZXJuYWxWYWx1ZSAvIGJhc2lzKTtcclxuICAgICAgICAgICAgICAgIGludGVybmFsVmFsdWUgLT0gKHJldFZpZXdbcmVzdWx0IC0gaiAtIDFdKSAqIGJhc2lzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXRCdWY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJpZ2dlc3QgKj0gTWF0aC5wb3coMiwgYmFzZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKDApO1xyXG59XHJcbmZ1bmN0aW9uIHV0aWxDb25jYXRCdWYoLi4uYnVmZmVycykge1xyXG4gICAgbGV0IG91dHB1dExlbmd0aCA9IDA7XHJcbiAgICBsZXQgcHJldkxlbmd0aCA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiBidWZmZXJzKSB7XHJcbiAgICAgICAgb3V0cHV0TGVuZ3RoICs9IGJ1ZmZlci5ieXRlTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKG91dHB1dExlbmd0aCk7XHJcbiAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHtcclxuICAgICAgICByZXRWaWV3LnNldChuZXcgVWludDhBcnJheShidWZmZXIpLCBwcmV2TGVuZ3RoKTtcclxuICAgICAgICBwcmV2TGVuZ3RoICs9IGJ1ZmZlci5ieXRlTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldEJ1ZjtcclxufVxyXG5mdW5jdGlvbiB1dGlsQ29uY2F0VmlldyguLi52aWV3cykge1xyXG4gICAgbGV0IG91dHB1dExlbmd0aCA9IDA7XHJcbiAgICBsZXQgcHJldkxlbmd0aCA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IHZpZXcgb2Ygdmlld3MpIHtcclxuICAgICAgICBvdXRwdXRMZW5ndGggKz0gdmlldy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIob3V0cHV0TGVuZ3RoKTtcclxuICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgZm9yIChjb25zdCB2aWV3IG9mIHZpZXdzKSB7XHJcbiAgICAgICAgcmV0Vmlldy5zZXQodmlldywgcHJldkxlbmd0aCk7XHJcbiAgICAgICAgcHJldkxlbmd0aCArPSB2aWV3Lmxlbmd0aDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXRWaWV3O1xyXG59XHJcbmZ1bmN0aW9uIHV0aWxEZWNvZGVUQygpIHtcclxuICAgIGNvbnN0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWVIZXgpO1xyXG4gICAgaWYgKHRoaXMudmFsdWVIZXguYnl0ZUxlbmd0aCA+PSAyKSB7XHJcbiAgICAgICAgY29uc3QgY29uZGl0aW9uMSA9IChidWZbMF0gPT09IDB4RkYpICYmIChidWZbMV0gJiAweDgwKTtcclxuICAgICAgICBjb25zdCBjb25kaXRpb24yID0gKGJ1ZlswXSA9PT0gMHgwMCkgJiYgKChidWZbMV0gJiAweDgwKSA9PT0gMHgwMCk7XHJcbiAgICAgICAgaWYgKGNvbmRpdGlvbjEgfHwgY29uZGl0aW9uMikge1xyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJOZWVkbGVzc2x5IGxvbmcgZm9ybWF0XCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGJpZ0ludEJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4LmJ5dGVMZW5ndGgpO1xyXG4gICAgY29uc3QgYmlnSW50VmlldyA9IG5ldyBVaW50OEFycmF5KGJpZ0ludEJ1ZmZlcik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWVIZXguYnl0ZUxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgYmlnSW50Vmlld1tpXSA9IDA7XHJcbiAgICB9XHJcbiAgICBiaWdJbnRWaWV3WzBdID0gKGJ1ZlswXSAmIDB4ODApO1xyXG4gICAgY29uc3QgYmlnSW50ID0gdXRpbEZyb21CYXNlKGJpZ0ludFZpZXcsIDgpO1xyXG4gICAgY29uc3Qgc21hbGxJbnRCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleC5ieXRlTGVuZ3RoKTtcclxuICAgIGNvbnN0IHNtYWxsSW50VmlldyA9IG5ldyBVaW50OEFycmF5KHNtYWxsSW50QnVmZmVyKTtcclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy52YWx1ZUhleC5ieXRlTGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBzbWFsbEludFZpZXdbal0gPSBidWZbal07XHJcbiAgICB9XHJcbiAgICBzbWFsbEludFZpZXdbMF0gJj0gMHg3RjtcclxuICAgIGNvbnN0IHNtYWxsSW50ID0gdXRpbEZyb21CYXNlKHNtYWxsSW50VmlldywgOCk7XHJcbiAgICByZXR1cm4gKHNtYWxsSW50IC0gYmlnSW50KTtcclxufVxyXG5mdW5jdGlvbiB1dGlsRW5jb2RlVEModmFsdWUpIHtcclxuICAgIGNvbnN0IG1vZFZhbHVlID0gKHZhbHVlIDwgMCkgPyAodmFsdWUgKiAoLTEpKSA6IHZhbHVlO1xyXG4gICAgbGV0IGJpZ0ludCA9IDEyODtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgaWYgKG1vZFZhbHVlIDw9IGJpZ0ludCkge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzbWFsbEludCA9IGJpZ0ludCAtIG1vZFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0QnVmID0gdXRpbFRvQmFzZShzbWFsbEludCwgOCwgaSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbMF0gfD0gMHg4MDtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXRCdWY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHJldEJ1ZiA9IHV0aWxUb0Jhc2UobW9kVmFsdWUsIDgsIGkpO1xyXG4gICAgICAgICAgICBsZXQgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgIGlmIChyZXRWaWV3WzBdICYgMHg4MCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcEJ1ZiA9IHJldEJ1Zi5zbGljZSgwKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGVtcEJ1Zik7XHJcbiAgICAgICAgICAgICAgICByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIocmV0QnVmLmJ5dGVMZW5ndGggKyAxKTtcclxuICAgICAgICAgICAgICAgIHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCB0ZW1wQnVmLmJ5dGVMZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldFZpZXdbayArIDFdID0gdGVtcFZpZXdba107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3WzBdID0gMHgwMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgIH1cclxuICAgICAgICBiaWdJbnQgKj0gTWF0aC5wb3coMiwgOCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKG5ldyBBcnJheUJ1ZmZlcigwKSk7XHJcbn1cclxuZnVuY3Rpb24gaXNFcXVhbEJ1ZmZlcihpbnB1dEJ1ZmZlcjEsIGlucHV0QnVmZmVyMikge1xyXG4gICAgaWYgKGlucHV0QnVmZmVyMS5ieXRlTGVuZ3RoICE9PSBpbnB1dEJ1ZmZlcjIuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZpZXcxID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXRCdWZmZXIxKTtcclxuICAgIGNvbnN0IHZpZXcyID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXRCdWZmZXIyKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmlldzEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAodmlldzFbaV0gIT09IHZpZXcyW2ldKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiBwYWROdW1iZXIoaW5wdXROdW1iZXIsIGZ1bGxMZW5ndGgpIHtcclxuICAgIGNvbnN0IHN0ciA9IGlucHV0TnVtYmVyLnRvU3RyaW5nKDEwKTtcclxuICAgIGlmIChmdWxsTGVuZ3RoIDwgc3RyLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGlmID0gZnVsbExlbmd0aCAtIHN0ci5sZW5ndGg7XHJcbiAgICBjb25zdCBwYWRkaW5nID0gbmV3IEFycmF5KGRpZik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpZjsgaSsrKSB7XHJcbiAgICAgICAgcGFkZGluZ1tpXSA9IFwiMFwiO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGFkZGluZ1N0cmluZyA9IHBhZGRpbmcuam9pbihcIlwiKTtcclxuICAgIHJldHVybiBwYWRkaW5nU3RyaW5nLmNvbmNhdChzdHIpO1xyXG59XHJcbmNvbnN0IGJhc2U2NFRlbXBsYXRlID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVwiO1xyXG5jb25zdCBiYXNlNjRVcmxUZW1wbGF0ZSA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXz1cIjtcclxuZnVuY3Rpb24gdG9CYXNlNjQoaW5wdXQsIHVzZVVybFRlbXBsYXRlID0gZmFsc2UsIHNraXBQYWRkaW5nID0gZmFsc2UsIHNraXBMZWFkaW5nWmVyb3MgPSBmYWxzZSkge1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgbGV0IGZsYWcxID0gMDtcclxuICAgIGxldCBmbGFnMiA9IDA7XHJcbiAgICBsZXQgb3V0cHV0ID0gXCJcIjtcclxuICAgIGNvbnN0IHRlbXBsYXRlID0gKHVzZVVybFRlbXBsYXRlKSA/IGJhc2U2NFVybFRlbXBsYXRlIDogYmFzZTY0VGVtcGxhdGU7XHJcbiAgICBpZiAoc2tpcExlYWRpbmdaZXJvcykge1xyXG4gICAgICAgIGxldCBub25aZXJvUG9zaXRpb24gPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQoaSkgIT09IDApIHtcclxuICAgICAgICAgICAgICAgIG5vblplcm9Qb3NpdGlvbiA9IGk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKG5vblplcm9Qb3NpdGlvbik7XHJcbiAgICB9XHJcbiAgICB3aGlsZSAoaSA8IGlucHV0Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGNocjEgPSBpbnB1dC5jaGFyQ29kZUF0KGkrKyk7XHJcbiAgICAgICAgaWYgKGkgPj0gaW5wdXQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZsYWcxID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2hyMiA9IGlucHV0LmNoYXJDb2RlQXQoaSsrKTtcclxuICAgICAgICBpZiAoaSA+PSBpbnB1dC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZmxhZzIgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjaHIzID0gaW5wdXQuY2hhckNvZGVBdChpKyspO1xyXG4gICAgICAgIGNvbnN0IGVuYzEgPSBjaHIxID4+IDI7XHJcbiAgICAgICAgY29uc3QgZW5jMiA9ICgoY2hyMSAmIDB4MDMpIDw8IDQpIHwgKGNocjIgPj4gNCk7XHJcbiAgICAgICAgbGV0IGVuYzMgPSAoKGNocjIgJiAweDBGKSA8PCAyKSB8IChjaHIzID4+IDYpO1xyXG4gICAgICAgIGxldCBlbmM0ID0gY2hyMyAmIDB4M0Y7XHJcbiAgICAgICAgaWYgKGZsYWcxID09PSAxKSB7XHJcbiAgICAgICAgICAgIGVuYzMgPSBlbmM0ID0gNjQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZmxhZzIgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIGVuYzQgPSA2NDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2tpcFBhZGRpbmcpIHtcclxuICAgICAgICAgICAgaWYgKGVuYzMgPT09IDY0KSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gYCR7dGVtcGxhdGUuY2hhckF0KGVuYzEpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzIpfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZW5jNCA9PT0gNjQpIHtcclxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gYCR7dGVtcGxhdGUuY2hhckF0KGVuYzEpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzIpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzMpfWA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gYCR7dGVtcGxhdGUuY2hhckF0KGVuYzEpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzIpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzMpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzQpfWA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG91dHB1dCArPSBgJHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMSl9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMil9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMyl9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jNCl9YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0cHV0O1xyXG59XHJcbmZ1bmN0aW9uIGZyb21CYXNlNjQoaW5wdXQsIHVzZVVybFRlbXBsYXRlID0gZmFsc2UsIGN1dFRhaWxaZXJvcyA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCB0ZW1wbGF0ZSA9ICh1c2VVcmxUZW1wbGF0ZSkgPyBiYXNlNjRVcmxUZW1wbGF0ZSA6IGJhc2U2NFRlbXBsYXRlO1xyXG4gICAgZnVuY3Rpb24gaW5kZXhPZih0b1NlYXJjaCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjQ7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGVtcGxhdGUuY2hhckF0KGkpID09PSB0b1NlYXJjaClcclxuICAgICAgICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gNjQ7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB0ZXN0KGluY29taW5nKSB7XHJcbiAgICAgICAgcmV0dXJuICgoaW5jb21pbmcgPT09IDY0KSA/IDB4MDAgOiBpbmNvbWluZyk7XHJcbiAgICB9XHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBsZXQgb3V0cHV0ID0gXCJcIjtcclxuICAgIHdoaWxlIChpIDwgaW5wdXQubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgZW5jMSA9IGluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpO1xyXG4gICAgICAgIGNvbnN0IGVuYzIgPSAoaSA+PSBpbnB1dC5sZW5ndGgpID8gMHgwMCA6IGluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpO1xyXG4gICAgICAgIGNvbnN0IGVuYzMgPSAoaSA+PSBpbnB1dC5sZW5ndGgpID8gMHgwMCA6IGluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpO1xyXG4gICAgICAgIGNvbnN0IGVuYzQgPSAoaSA+PSBpbnB1dC5sZW5ndGgpID8gMHgwMCA6IGluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpO1xyXG4gICAgICAgIGNvbnN0IGNocjEgPSAodGVzdChlbmMxKSA8PCAyKSB8ICh0ZXN0KGVuYzIpID4+IDQpO1xyXG4gICAgICAgIGNvbnN0IGNocjIgPSAoKHRlc3QoZW5jMikgJiAweDBGKSA8PCA0KSB8ICh0ZXN0KGVuYzMpID4+IDIpO1xyXG4gICAgICAgIGNvbnN0IGNocjMgPSAoKHRlc3QoZW5jMykgJiAweDAzKSA8PCA2KSB8IHRlc3QoZW5jNCk7XHJcbiAgICAgICAgb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyMSk7XHJcbiAgICAgICAgaWYgKGVuYzMgIT09IDY0KSB7XHJcbiAgICAgICAgICAgIG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW5jNCAhPT0gNjQpIHtcclxuICAgICAgICAgICAgb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyMyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGN1dFRhaWxaZXJvcykge1xyXG4gICAgICAgIGNvbnN0IG91dHB1dExlbmd0aCA9IG91dHB1dC5sZW5ndGg7XHJcbiAgICAgICAgbGV0IG5vblplcm9TdGFydCA9ICgtMSk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IChvdXRwdXRMZW5ndGggLSAxKTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgaWYgKG91dHB1dC5jaGFyQ29kZUF0KGkpICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBub25aZXJvU3RhcnQgPSBpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5vblplcm9TdGFydCAhPT0gKC0xKSkge1xyXG4gICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuc2xpY2UoMCwgbm9uWmVyb1N0YXJ0ICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvdXRwdXQgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvdXRwdXQ7XHJcbn1cclxuZnVuY3Rpb24gYXJyYXlCdWZmZXJUb1N0cmluZyhidWZmZXIpIHtcclxuICAgIGxldCByZXN1bHRTdHJpbmcgPSBcIlwiO1xyXG4gICAgY29uc3QgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XHJcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygdmlldykge1xyXG4gICAgICAgIHJlc3VsdFN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdFN0cmluZztcclxufVxyXG5mdW5jdGlvbiBzdHJpbmdUb0FycmF5QnVmZmVyKHN0cikge1xyXG4gICAgY29uc3Qgc3RyaW5nTGVuZ3RoID0gc3RyLmxlbmd0aDtcclxuICAgIGNvbnN0IHJlc3VsdEJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihzdHJpbmdMZW5ndGgpO1xyXG4gICAgY29uc3QgcmVzdWx0VmlldyA9IG5ldyBVaW50OEFycmF5KHJlc3VsdEJ1ZmZlcik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZ0xlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcmVzdWx0Vmlld1tpXSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdEJ1ZmZlcjtcclxufVxyXG5jb25zdCBsb2cyID0gTWF0aC5sb2coMik7XHJcbmZ1bmN0aW9uIG5lYXJlc3RQb3dlck9mMihsZW5ndGgpIHtcclxuICAgIGNvbnN0IGJhc2UgPSAoTWF0aC5sb2cobGVuZ3RoKSAvIGxvZzIpO1xyXG4gICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGJhc2UpO1xyXG4gICAgY29uc3Qgcm91bmQgPSBNYXRoLnJvdW5kKGJhc2UpO1xyXG4gICAgcmV0dXJuICgoZmxvb3IgPT09IHJvdW5kKSA/IGZsb29yIDogcm91bmQpO1xyXG59XHJcbmZ1bmN0aW9uIGNsZWFyUHJvcHMob2JqZWN0LCBwcm9wc0FycmF5KSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHNBcnJheSkge1xyXG4gICAgICAgIGRlbGV0ZSBvYmplY3RbcHJvcF07XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgYXJyYXlCdWZmZXJUb1N0cmluZywgYnVmZmVyVG9IZXhDb2RlcywgY2hlY2tCdWZmZXJQYXJhbXMsIGNsZWFyUHJvcHMsIGZyb21CYXNlNjQsIGdldFBhcmFtZXRlcnNWYWx1ZSwgZ2V0VVRDRGF0ZSwgaXNFcXVhbEJ1ZmZlciwgbmVhcmVzdFBvd2VyT2YyLCBwYWROdW1iZXIsIHN0cmluZ1RvQXJyYXlCdWZmZXIsIHRvQmFzZTY0LCB1dGlsQ29uY2F0QnVmLCB1dGlsQ29uY2F0VmlldywgdXRpbERlY29kZVRDLCB1dGlsRW5jb2RlVEMsIHV0aWxGcm9tQmFzZSwgdXRpbFRvQmFzZSB9O1xuIiwgIi8qIVxuICogQ29weXJpZ2h0IChjKSAyMDE0LCBHTU8gR2xvYmFsU2lnblxuICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMjIsIFBlY3VsaWFyIFZlbnR1cmVzXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogXG4gKiBBdXRob3IgMjAxNC0yMDE5LCBZdXJ5IFN0cm96aGV2c2t5XG4gKiBcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG4gKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKiBcbiAqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqIFxuICogKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gKiAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKiBcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG4gKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG4gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqIFxuICovXG5cbmltcG9ydCAqIGFzIHB2dHN1dGlscyBmcm9tICdwdnRzdXRpbHMnO1xuaW1wb3J0ICogYXMgcHZ1dGlscyBmcm9tICdwdnV0aWxzJztcblxuZnVuY3Rpb24gYXNzZXJ0QmlnSW50KCkge1xyXG4gICAgaWYgKHR5cGVvZiBCaWdJbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCaWdJbnQgaXMgbm90IGRlZmluZWQuIFlvdXIgZW52aXJvbm1lbnQgZG9lc24ndCBpbXBsZW1lbnQgQmlnSW50LlwiKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjb25jYXQoYnVmZmVycykge1xyXG4gICAgbGV0IG91dHB1dExlbmd0aCA9IDA7XHJcbiAgICBsZXQgcHJldkxlbmd0aCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1ZmZlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBidWZmZXIgPSBidWZmZXJzW2ldO1xyXG4gICAgICAgIG91dHB1dExlbmd0aCArPSBidWZmZXIuYnl0ZUxlbmd0aDtcclxuICAgIH1cclxuICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShvdXRwdXRMZW5ndGgpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyID0gYnVmZmVyc1tpXTtcclxuICAgICAgICByZXRWaWV3LnNldChuZXcgVWludDhBcnJheShidWZmZXIpLCBwcmV2TGVuZ3RoKTtcclxuICAgICAgICBwcmV2TGVuZ3RoICs9IGJ1ZmZlci5ieXRlTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG59XHJcbmZ1bmN0aW9uIGNoZWNrQnVmZmVyUGFyYW1zKGJhc2VCbG9jaywgaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgaWYgKCEoaW5wdXRCdWZmZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dEJ1ZmZlciBtdXN0IGJlICdVaW50OEFycmF5J1wiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICghaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dEJ1ZmZlciBoYXMgemVybyBsZW5ndGhcIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRPZmZzZXQgPCAwKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0T2Zmc2V0IGxlc3MgdGhhbiB6ZXJvXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0TGVuZ3RoIDwgMCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dExlbmd0aCBsZXNzIHRoYW4gemVyb1wiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICgoaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCAtIGlucHV0T2Zmc2V0IC0gaW5wdXRMZW5ndGgpIDwgMCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWQgKGluY29uc2lzdGVudCBvZmZzZXQgYW5kIGxlbmd0aCB2YWx1ZXMpXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cblxuY2xhc3MgVmlld1dyaXRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICB9XHJcbiAgICB3cml0ZShidWYpIHtcclxuICAgICAgICB0aGlzLml0ZW1zLnB1c2goYnVmKTtcclxuICAgIH1cclxuICAgIGZpbmFsKCkge1xyXG4gICAgICAgIHJldHVybiBjb25jYXQodGhpcy5pdGVtcyk7XHJcbiAgICB9XHJcbn1cblxuY29uc3QgcG93ZXJzMiA9IFtuZXcgVWludDhBcnJheShbMV0pXTtcclxuY29uc3QgZGlnaXRzU3RyaW5nID0gXCIwMTIzNDU2Nzg5XCI7XHJcbmNvbnN0IE5BTUUgPSBcIm5hbWVcIjtcclxuY29uc3QgVkFMVUVfSEVYX1ZJRVcgPSBcInZhbHVlSGV4Vmlld1wiO1xyXG5jb25zdCBJU19IRVhfT05MWSA9IFwiaXNIZXhPbmx5XCI7XHJcbmNvbnN0IElEX0JMT0NLID0gXCJpZEJsb2NrXCI7XHJcbmNvbnN0IFRBR19DTEFTUyA9IFwidGFnQ2xhc3NcIjtcclxuY29uc3QgVEFHX05VTUJFUiA9IFwidGFnTnVtYmVyXCI7XHJcbmNvbnN0IElTX0NPTlNUUlVDVEVEID0gXCJpc0NvbnN0cnVjdGVkXCI7XHJcbmNvbnN0IEZST01fQkVSID0gXCJmcm9tQkVSXCI7XHJcbmNvbnN0IFRPX0JFUiA9IFwidG9CRVJcIjtcclxuY29uc3QgTE9DQUwgPSBcImxvY2FsXCI7XHJcbmNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XHJcbmNvbnN0IEVNUFRZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcclxuY29uc3QgRU1QVFlfVklFVyA9IG5ldyBVaW50OEFycmF5KDApO1xyXG5jb25zdCBFTkRfT0ZfQ09OVEVOVF9OQU1FID0gXCJFbmRPZkNvbnRlbnRcIjtcclxuY29uc3QgT0NURVRfU1RSSU5HX05BTUUgPSBcIk9DVEVUIFNUUklOR1wiO1xyXG5jb25zdCBCSVRfU1RSSU5HX05BTUUgPSBcIkJJVCBTVFJJTkdcIjtcblxuZnVuY3Rpb24gSGV4QmxvY2soQmFzZUNsYXNzKSB7XHJcbiAgICB2YXIgX2E7XHJcbiAgICByZXR1cm4gX2EgPSBjbGFzcyBTb21lIGV4dGVuZHMgQmFzZUNsYXNzIHtcclxuICAgICAgICAgICAgY29uc3RydWN0b3IoLi4uYXJncykge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgICAgICAgICAgc3VwZXIoLi4uYXJncyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBhcmdzWzBdIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSAoX2EgPSBwYXJhbXMuaXNIZXhPbmx5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gcGFyYW1zLnZhbHVlSGV4ID8gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkocGFyYW1zLnZhbHVlSGV4KSA6IEVNUFRZX1ZJRVc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ2V0IHZhbHVlSGV4KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldCB2YWx1ZUhleCh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3ID0gaW5wdXRCdWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciA/IG5ldyBVaW50OEFycmF5KGlucHV0QnVmZmVyKSA6IGlucHV0QnVmZmVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCB2aWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kTGVuZ3RoID0gaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aDtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgZW5kTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiWmVybyBidWZmZXIgbGVuZ3RoXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBpbnB1dExlbmd0aDtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmRMZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdG9CRVIoc2l6ZU9ubHkgPSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzSGV4T25seSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkZsYWcgJ2lzSGV4T25seScgaXMgbm90IHNldCwgYWJvcnRcIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCA9PT0gdGhpcy52YWx1ZUhleFZpZXcuYnVmZmVyLmJ5dGVMZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnZhbHVlSGV4Vmlldy5idWZmZXJcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRvSlNPTigpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgICAgICAgICAgaXNIZXhPbmx5OiB0aGlzLmlzSGV4T25seSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUhleDogcHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy52YWx1ZUhleFZpZXcpLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgX2EuTkFNRSA9IFwiaGV4QmxvY2tcIixcclxuICAgICAgICBfYTtcclxufVxuXG5jbGFzcyBMb2NhbEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGJsb2NrTGVuZ3RoID0gMCwgZXJyb3IgPSBFTVBUWV9TVFJJTkcsIHdhcm5pbmdzID0gW10sIHZhbHVlQmVmb3JlRGVjb2RlID0gRU1QVFlfVklFVywgfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IGJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcclxuICAgICAgICB0aGlzLndhcm5pbmdzID0gd2FybmluZ3M7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJlZm9yZURlY29kZVZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheSh2YWx1ZUJlZm9yZURlY29kZSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgYmxvY2tOYW1lKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLk5BTUU7XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsdWVCZWZvcmVEZWNvZGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVCZWZvcmVEZWNvZGVWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgc2V0IHZhbHVlQmVmb3JlRGVjb2RlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJlZm9yZURlY29kZVZpZXcgPSBuZXcgVWludDhBcnJheSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYmxvY2tOYW1lOiB0aGlzLmNvbnN0cnVjdG9yLk5BTUUsXHJcbiAgICAgICAgICAgIGJsb2NrTGVuZ3RoOiB0aGlzLmJsb2NrTGVuZ3RoLFxyXG4gICAgICAgICAgICBlcnJvcjogdGhpcy5lcnJvcixcclxuICAgICAgICAgICAgd2FybmluZ3M6IHRoaXMud2FybmluZ3MsXHJcbiAgICAgICAgICAgIHZhbHVlQmVmb3JlRGVjb2RlOiBwdnRzdXRpbHMuQ29udmVydC5Ub0hleCh0aGlzLnZhbHVlQmVmb3JlRGVjb2RlVmlldyksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbEJhc2VCbG9jay5OQU1FID0gXCJiYXNlQmxvY2tcIjtcblxuY2xhc3MgVmFsdWVCbG9jayBleHRlbmRzIExvY2FsQmFzZUJsb2NrIHtcclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcIlVzZXIgbmVlZCB0byBtYWtlIGEgc3BlY2lmaWMgZnVuY3Rpb24gaW4gYSBjbGFzcyB3aGljaCBleHRlbmRzICdWYWx1ZUJsb2NrJ1wiKTtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5LCB3cml0ZXIpIHtcclxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJVc2VyIG5lZWQgdG8gbWFrZSBhIHNwZWNpZmljIGZ1bmN0aW9uIGluIGEgY2xhc3Mgd2hpY2ggZXh0ZW5kcyAnVmFsdWVCbG9jaydcIik7XHJcbiAgICB9XHJcbn1cclxuVmFsdWVCbG9jay5OQU1FID0gXCJ2YWx1ZUJsb2NrXCI7XG5cbmNsYXNzIExvY2FsSWRlbnRpZmljYXRpb25CbG9jayBleHRlbmRzIEhleEJsb2NrKExvY2FsQmFzZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGlkQmxvY2sgPSB7fSwgfSA9IHt9KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgaWYgKGlkQmxvY2spIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSAoX2EgPSBpZEJsb2NrLmlzSGV4T25seSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gaWRCbG9jay52YWx1ZUhleCA/IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlkQmxvY2sudmFsdWVIZXgpIDogRU1QVFlfVklFVztcclxuICAgICAgICAgICAgdGhpcy50YWdDbGFzcyA9IChfYiA9IGlkQmxvY2sudGFnQ2xhc3MpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IC0xO1xyXG4gICAgICAgICAgICB0aGlzLnRhZ051bWJlciA9IChfYyA9IGlkQmxvY2sudGFnTnVtYmVyKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAtMTtcclxuICAgICAgICAgICAgdGhpcy5pc0NvbnN0cnVjdGVkID0gKF9kID0gaWRCbG9jay5pc0NvbnN0cnVjdGVkKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFnQ2xhc3MgPSAtMTtcclxuICAgICAgICAgICAgdGhpcy50YWdOdW1iZXIgPSAtMTtcclxuICAgICAgICAgICAgdGhpcy5pc0NvbnN0cnVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkgPSBmYWxzZSkge1xyXG4gICAgICAgIGxldCBmaXJzdE9jdGV0ID0gMDtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMudGFnQ2xhc3MpIHtcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgZmlyc3RPY3RldCB8PSAweDAwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgIGZpcnN0T2N0ZXQgfD0gMHg0MDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICBmaXJzdE9jdGV0IHw9IDB4ODA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgICAgZmlyc3RPY3RldCB8PSAweEMwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJVbmtub3duIHRhZyBjbGFzc1wiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb25zdHJ1Y3RlZClcclxuICAgICAgICAgICAgZmlyc3RPY3RldCB8PSAweDIwO1xyXG4gICAgICAgIGlmICh0aGlzLnRhZ051bWJlciA8IDMxICYmICF0aGlzLmlzSGV4T25seSkge1xyXG4gICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoMSk7XHJcbiAgICAgICAgICAgIGlmICghc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBudW1iZXIgPSB0aGlzLnRhZ051bWJlcjtcclxuICAgICAgICAgICAgICAgIG51bWJlciAmPSAweDFGO1xyXG4gICAgICAgICAgICAgICAgZmlyc3RPY3RldCB8PSBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3WzBdID0gZmlyc3RPY3RldDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5pc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZEJ1ZiA9IHB2dXRpbHMudXRpbFRvQmFzZSh0aGlzLnRhZ051bWJlciwgNyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZW5jb2RlZEJ1Zik7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSBlbmNvZGVkQnVmLmJ5dGVMZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShzaXplICsgMSk7XHJcbiAgICAgICAgICAgIHJldFZpZXdbMF0gPSAoZmlyc3RPY3RldCB8IDB4MUYpO1xyXG4gICAgICAgICAgICBpZiAoIXNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IChzaXplIC0gMSk7IGkrKylcclxuICAgICAgICAgICAgICAgICAgICByZXRWaWV3W2kgKyAxXSA9IGVuY29kZWRWaWV3W2ldIHwgMHg4MDtcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbc2l6ZV0gPSBlbmNvZGVkVmlld1tzaXplIC0gMV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCArIDEpO1xyXG4gICAgICAgIHJldFZpZXdbMF0gPSAoZmlyc3RPY3RldCB8IDB4MUYpO1xyXG4gICAgICAgIGlmICghc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VyVmlldyA9IHRoaXMudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IChjdXJWaWV3Lmxlbmd0aCAtIDEpOyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W2kgKyAxXSA9IGN1clZpZXdbaV0gfCAweDgwO1xyXG4gICAgICAgICAgICByZXRWaWV3W3RoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGhdID0gY3VyVmlld1tjdXJWaWV3Lmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBpbnB1dFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCBpbnB1dFZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnRCdWZmZXIgPSBpbnB1dFZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGlmIChpbnRCdWZmZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlplcm8gYnVmZmVyIGxlbmd0aFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRhZ0NsYXNzTWFzayA9IGludEJ1ZmZlclswXSAmIDB4QzA7XHJcbiAgICAgICAgc3dpdGNoICh0YWdDbGFzc01hc2spIHtcclxuICAgICAgICAgICAgY2FzZSAweDAwOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50YWdDbGFzcyA9ICgxKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDB4NDA6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ0NsYXNzID0gKDIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMHg4MDpcclxuICAgICAgICAgICAgICAgIHRoaXMudGFnQ2xhc3MgPSAoMyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAweEMwOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50YWdDbGFzcyA9ICg0KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiVW5rbm93biB0YWcgY2xhc3NcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0NvbnN0cnVjdGVkID0gKGludEJ1ZmZlclswXSAmIDB4MjApID09PSAweDIwO1xyXG4gICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgdGFnTnVtYmVyTWFzayA9IGludEJ1ZmZlclswXSAmIDB4MUY7XHJcbiAgICAgICAgaWYgKHRhZ051bWJlck1hc2sgIT09IDB4MUYpIHtcclxuICAgICAgICAgICAgdGhpcy50YWdOdW1iZXIgPSAodGFnTnVtYmVyTWFzayk7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGNvdW50ID0gMTtcclxuICAgICAgICAgICAgbGV0IGludFRhZ051bWJlckJ1ZmZlciA9IHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoMjU1KTtcclxuICAgICAgICAgICAgbGV0IHRhZ051bWJlckJ1ZmZlck1heExlbmd0aCA9IDI1NTtcclxuICAgICAgICAgICAgd2hpbGUgKGludEJ1ZmZlcltjb3VudF0gJiAweDgwKSB7XHJcbiAgICAgICAgICAgICAgICBpbnRUYWdOdW1iZXJCdWZmZXJbY291bnQgLSAxXSA9IGludEJ1ZmZlcltjb3VudF0gJiAweDdGO1xyXG4gICAgICAgICAgICAgICAgY291bnQrKztcclxuICAgICAgICAgICAgICAgIGlmIChjb3VudCA+PSBpbnRCdWZmZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWRcIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPT09IHRhZ051bWJlckJ1ZmZlck1heExlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhZ051bWJlckJ1ZmZlck1heExlbmd0aCArPSAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVtcEJ1ZmZlclZpZXcgPSBuZXcgVWludDhBcnJheSh0YWdOdW1iZXJCdWZmZXJNYXhMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW50VGFnTnVtYmVyQnVmZmVyLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQnVmZmVyVmlld1tpXSA9IGludFRhZ051bWJlckJ1ZmZlcltpXTtcclxuICAgICAgICAgICAgICAgICAgICBpbnRUYWdOdW1iZXJCdWZmZXIgPSB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHRhZ051bWJlckJ1ZmZlck1heExlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IChjb3VudCArIDEpO1xyXG4gICAgICAgICAgICBpbnRUYWdOdW1iZXJCdWZmZXJbY291bnQgLSAxXSA9IGludEJ1ZmZlcltjb3VudF0gJiAweDdGO1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wQnVmZmVyVmlldyA9IG5ldyBVaW50OEFycmF5KGNvdW50KTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgdGVtcEJ1ZmZlclZpZXdbaV0gPSBpbnRUYWdOdW1iZXJCdWZmZXJbaV07XHJcbiAgICAgICAgICAgIGludFRhZ051bWJlckJ1ZmZlciA9IHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoY291bnQpO1xyXG4gICAgICAgICAgICBpbnRUYWdOdW1iZXJCdWZmZXIuc2V0KHRlbXBCdWZmZXJWaWV3KTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYmxvY2tMZW5ndGggPD0gOSlcclxuICAgICAgICAgICAgICAgIHRoaXMudGFnTnVtYmVyID0gcHZ1dGlscy51dGlsRnJvbUJhc2UoaW50VGFnTnVtYmVyQnVmZmVyLCA3KTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJUYWcgdG9vIGxvbmcsIHJlcHJlc2VudGVkIGFzIGhleC1jb2RlZFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKCh0aGlzLnRhZ0NsYXNzID09PSAxKSkgJiZcclxuICAgICAgICAgICAgKHRoaXMuaXNDb25zdHJ1Y3RlZCkpIHtcclxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLnRhZ051bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgY2FzZSA2OlxyXG4gICAgICAgICAgICAgICAgY2FzZSA5OlxyXG4gICAgICAgICAgICAgICAgY2FzZSAxMzpcclxuICAgICAgICAgICAgICAgIGNhc2UgMTQ6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDIzOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAyNDpcclxuICAgICAgICAgICAgICAgIGNhc2UgMzE6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMyOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAzMzpcclxuICAgICAgICAgICAgICAgIGNhc2UgMzQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiQ29uc3RydWN0ZWQgZW5jb2RpbmcgdXNlZCBmb3IgcHJpbWl0aXZlIHR5cGVcIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB0YWdDbGFzczogdGhpcy50YWdDbGFzcyxcclxuICAgICAgICAgICAgdGFnTnVtYmVyOiB0aGlzLnRhZ051bWJlcixcclxuICAgICAgICAgICAgaXNDb25zdHJ1Y3RlZDogdGhpcy5pc0NvbnN0cnVjdGVkLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxJZGVudGlmaWNhdGlvbkJsb2NrLk5BTUUgPSBcImlkZW50aWZpY2F0aW9uQmxvY2tcIjtcblxuY2xhc3MgTG9jYWxMZW5ndGhCbG9jayBleHRlbmRzIExvY2FsQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgbGVuQmxvY2sgPSB7fSwgfSA9IHt9KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmlzSW5kZWZpbml0ZUZvcm0gPSAoX2EgPSBsZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZTtcclxuICAgICAgICB0aGlzLmxvbmdGb3JtVXNlZCA9IChfYiA9IGxlbkJsb2NrLmxvbmdGb3JtVXNlZCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSAoX2MgPSBsZW5CbG9jay5sZW5ndGgpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IDA7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCB2aWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgdmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGludEJ1ZmZlciA9IHZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGlmIChpbnRCdWZmZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlplcm8gYnVmZmVyIGxlbmd0aFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbnRCdWZmZXJbMF0gPT09IDB4RkYpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiTGVuZ3RoIGJsb2NrIDB4RkYgaXMgcmVzZXJ2ZWQgYnkgc3RhbmRhcmRcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzSW5kZWZpbml0ZUZvcm0gPSBpbnRCdWZmZXJbMF0gPT09IDB4ODA7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbmRlZmluaXRlRm9ybSkge1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gMTtcclxuICAgICAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvbmdGb3JtVXNlZCA9ICEhKGludEJ1ZmZlclswXSAmIDB4ODApO1xyXG4gICAgICAgIGlmICh0aGlzLmxvbmdGb3JtVXNlZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5sZW5ndGggPSAoaW50QnVmZmVyWzBdKTtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IDE7XHJcbiAgICAgICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyB0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY291bnQgPSBpbnRCdWZmZXJbMF0gJiAweDdGO1xyXG4gICAgICAgIGlmIChjb3VudCA+IDgpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiVG9vIGJpZyBpbnRlZ2VyXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChjb3VudCArIDEpID4gaW50QnVmZmVyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFbmQgb2YgaW5wdXQgcmVhY2hlZCBiZWZvcmUgbWVzc2FnZSB3YXMgZnVsbHkgZGVjb2RlZFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGxlbk9mZnNldCA9IGlucHV0T2Zmc2V0ICsgMTtcclxuICAgICAgICBjb25zdCBsZW5ndGhCdWZmZXJWaWV3ID0gdmlldy5zdWJhcnJheShsZW5PZmZzZXQsIGxlbk9mZnNldCArIGNvdW50KTtcclxuICAgICAgICBpZiAobGVuZ3RoQnVmZmVyVmlld1tjb3VudCAtIDFdID09PSAweDAwKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJOZWVkbGVzc2x5IGxvbmcgZW5jb2RlZCBsZW5ndGhcIik7XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSBwdnV0aWxzLnV0aWxGcm9tQmFzZShsZW5ndGhCdWZmZXJWaWV3LCA4KTtcclxuICAgICAgICBpZiAodGhpcy5sb25nRm9ybVVzZWQgJiYgKHRoaXMubGVuZ3RoIDw9IDEyNykpXHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlVubmVjZXNzYXJ5IHVzYWdlIG9mIGxvbmcgbGVuZ3RoIGZvcm1cIik7XHJcbiAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IGNvdW50ICsgMTtcclxuICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgdGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSA9IGZhbHNlKSB7XHJcbiAgICAgICAgbGV0IHJldEJ1ZjtcclxuICAgICAgICBsZXQgcmV0VmlldztcclxuICAgICAgICBpZiAodGhpcy5sZW5ndGggPiAxMjcpXHJcbiAgICAgICAgICAgIHRoaXMubG9uZ0Zvcm1Vc2VkID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5pc0luZGVmaW5pdGVGb3JtKSB7XHJcbiAgICAgICAgICAgIHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcigxKTtcclxuICAgICAgICAgICAgaWYgKHNpemVPbmx5ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3WzBdID0gMHg4MDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5sb25nRm9ybVVzZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZEJ1ZiA9IHB2dXRpbHMudXRpbFRvQmFzZSh0aGlzLmxlbmd0aCwgOCk7XHJcbiAgICAgICAgICAgIGlmIChlbmNvZGVkQnVmLmJ5dGVMZW5ndGggPiAxMjcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlRvbyBiaWcgbGVuZ3RoXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKEVNUFRZX0JVRkZFUik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKGVuY29kZWRCdWYuYnl0ZUxlbmd0aCArIDEpO1xyXG4gICAgICAgICAgICBpZiAoc2l6ZU9ubHkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkVmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYpO1xyXG4gICAgICAgICAgICByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgcmV0Vmlld1swXSA9IGVuY29kZWRCdWYuYnl0ZUxlbmd0aCB8IDB4ODA7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W2kgKyAxXSA9IGVuY29kZWRWaWV3W2ldO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIoMSk7XHJcbiAgICAgICAgaWYgKHNpemVPbmx5ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgcmV0Vmlld1swXSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBpc0luZGVmaW5pdGVGb3JtOiB0aGlzLmlzSW5kZWZpbml0ZUZvcm0sXHJcbiAgICAgICAgICAgIGxvbmdGb3JtVXNlZDogdGhpcy5sb25nRm9ybVVzZWQsXHJcbiAgICAgICAgICAgIGxlbmd0aDogdGhpcy5sZW5ndGgsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbExlbmd0aEJsb2NrLk5BTUUgPSBcImxlbmd0aEJsb2NrXCI7XG5cbmNvbnN0IHR5cGVTdG9yZSA9IHt9O1xuXG5jbGFzcyBCYXNlQmxvY2sgZXh0ZW5kcyBMb2NhbEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IG5hbWUgPSBFTVBUWV9TVFJJTkcsIG9wdGlvbmFsID0gZmFsc2UsIHByaW1pdGl2ZVNjaGVtYSwgLi4ucGFyYW1ldGVycyB9ID0ge30sIHZhbHVlQmxvY2tUeXBlKSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLm9wdGlvbmFsID0gb3B0aW9uYWw7XHJcbiAgICAgICAgaWYgKHByaW1pdGl2ZVNjaGVtYSkge1xyXG4gICAgICAgICAgICB0aGlzLnByaW1pdGl2ZVNjaGVtYSA9IHByaW1pdGl2ZVNjaGVtYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrID0gbmV3IExvY2FsSWRlbnRpZmljYXRpb25CbG9jayhwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmxlbkJsb2NrID0gbmV3IExvY2FsTGVuZ3RoQmxvY2socGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrID0gdmFsdWVCbG9ja1R5cGUgPyBuZXcgdmFsdWVCbG9ja1R5cGUocGFyYW1ldGVycykgOiBuZXcgVmFsdWVCbG9jayhwYXJhbWV0ZXJzKTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdE9mZnNldCA9IHRoaXMudmFsdWVCbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgKHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkgPyBpbnB1dExlbmd0aCA6IHRoaXMubGVuQmxvY2subGVuZ3RoKTtcclxuICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gdGhpcy52YWx1ZUJsb2NrLmVycm9yO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuaWRCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5pZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy5sZW5CbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMudmFsdWVCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy52YWx1ZUJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgY29uc3QgX3dyaXRlciA9IHdyaXRlciB8fCBuZXcgVmlld1dyaXRlcigpO1xyXG4gICAgICAgIGlmICghd3JpdGVyKSB7XHJcbiAgICAgICAgICAgIHByZXBhcmVJbmRlZmluaXRlRm9ybSh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaWRCbG9ja0J1ZiA9IHRoaXMuaWRCbG9jay50b0JFUihzaXplT25seSk7XHJcbiAgICAgICAgX3dyaXRlci53cml0ZShpZEJsb2NrQnVmKTtcclxuICAgICAgICBpZiAodGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtKSB7XHJcbiAgICAgICAgICAgIF93cml0ZXIud3JpdGUobmV3IFVpbnQ4QXJyYXkoWzB4ODBdKS5idWZmZXIpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudG9CRVIoc2l6ZU9ubHksIF93cml0ZXIpO1xyXG4gICAgICAgICAgICBfd3JpdGVyLndyaXRlKG5ldyBBcnJheUJ1ZmZlcigyKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUJsb2NrQnVmID0gdGhpcy52YWx1ZUJsb2NrLnRvQkVSKHNpemVPbmx5KTtcclxuICAgICAgICAgICAgdGhpcy5sZW5CbG9jay5sZW5ndGggPSB2YWx1ZUJsb2NrQnVmLmJ5dGVMZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbkJsb2NrQnVmID0gdGhpcy5sZW5CbG9jay50b0JFUihzaXplT25seSk7XHJcbiAgICAgICAgICAgIF93cml0ZXIud3JpdGUobGVuQmxvY2tCdWYpO1xyXG4gICAgICAgICAgICBfd3JpdGVyLndyaXRlKHZhbHVlQmxvY2tCdWYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXdyaXRlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gX3dyaXRlci5maW5hbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIGlkQmxvY2s6IHRoaXMuaWRCbG9jay50b0pTT04oKSxcclxuICAgICAgICAgICAgbGVuQmxvY2s6IHRoaXMubGVuQmxvY2sudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlQmxvY2s6IHRoaXMudmFsdWVCbG9jay50b0pTT04oKSxcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgICBvcHRpb25hbDogdGhpcy5vcHRpb25hbCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICh0aGlzLnByaW1pdGl2ZVNjaGVtYSlcclxuICAgICAgICAgICAgb2JqZWN0LnByaW1pdGl2ZVNjaGVtYSA9IHRoaXMucHJpbWl0aXZlU2NoZW1hLnRvSlNPTigpO1xyXG4gICAgICAgIHJldHVybiBvYmplY3Q7XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZyhlbmNvZGluZyA9IFwiYXNjaWlcIikge1xyXG4gICAgICAgIGlmIChlbmNvZGluZyA9PT0gXCJhc2NpaVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9uQXNjaWlFbmNvZGluZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy50b0JFUigpKTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7cHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy52YWx1ZUJsb2NrLnZhbHVlQmVmb3JlRGVjb2RlVmlldyl9YDtcclxuICAgIH1cclxuICAgIGlzRXF1YWwob3RoZXIpIHtcclxuICAgICAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvcikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0aGlzUmF3ID0gdGhpcy50b0JFUigpO1xyXG4gICAgICAgIGNvbnN0IG90aGVyUmF3ID0gb3RoZXIudG9CRVIoKTtcclxuICAgICAgICByZXR1cm4gcHZ1dGlscy5pc0VxdWFsQnVmZmVyKHRoaXNSYXcsIG90aGVyUmF3KTtcclxuICAgIH1cclxufVxyXG5CYXNlQmxvY2suTkFNRSA9IFwiQmFzZUJsb2NrXCI7XHJcbmZ1bmN0aW9uIHByZXBhcmVJbmRlZmluaXRlRm9ybShiYXNlQmxvY2spIHtcclxuICAgIGlmIChiYXNlQmxvY2sgaW5zdGFuY2VvZiB0eXBlU3RvcmUuQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGJhc2VCbG9jay52YWx1ZUJsb2NrLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmIChwcmVwYXJlSW5kZWZpbml0ZUZvcm0odmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICBiYXNlQmxvY2subGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gISFiYXNlQmxvY2subGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybTtcclxufVxuXG5jbGFzcyBCYXNlU3RyaW5nQmxvY2sgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSA9IEVNUFRZX1NUUklORywgLi4ucGFyYW1ldGVycyB9ID0ge30sIHN0cmluZ1ZhbHVlQmxvY2tUeXBlKSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgc3RyaW5nVmFsdWVCbG9ja1R5cGUpO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldFZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlQmxvY2sudmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXRWYWx1ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0T2Zmc2V0ID0gdGhpcy52YWx1ZUJsb2NrLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCAodGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtKSA/IGlucHV0TGVuZ3RoIDogdGhpcy5sZW5CbG9jay5sZW5ndGgpO1xyXG4gICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnZhbHVlQmxvY2suZXJyb3I7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZnJvbUJ1ZmZlcih0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3KTtcclxuICAgICAgICBpZiAoIXRoaXMuaWRCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5pZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy5sZW5CbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMudmFsdWVCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy52YWx1ZUJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAnJHt0aGlzLnZhbHVlQmxvY2sudmFsdWV9J2A7XHJcbiAgICB9XHJcbn1cclxuQmFzZVN0cmluZ0Jsb2NrLk5BTUUgPSBcIkJhc2VTdHJpbmdCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbFByaW1pdGl2ZVZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGlzSGV4T25seSA9IHRydWUsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pc0hleE9ubHkgPSBpc0hleE9ubHk7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxQcmltaXRpdmVWYWx1ZUJsb2NrLk5BTUUgPSBcIlByaW1pdGl2ZVZhbHVlQmxvY2tcIjtcblxudmFyIF9hJHc7XHJcbmNsYXNzIFByaW1pdGl2ZSBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbFByaW1pdGl2ZVZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay5pc0NvbnN0cnVjdGVkID0gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuX2EkdyA9IFByaW1pdGl2ZTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5QcmltaXRpdmUgPSBfYSR3O1xyXG59KSgpO1xyXG5QcmltaXRpdmUuTkFNRSA9IFwiUFJJTUlUSVZFXCI7XG5cbmZ1bmN0aW9uIGxvY2FsQ2hhbmdlVHlwZShpbnB1dE9iamVjdCwgbmV3VHlwZSkge1xyXG4gICAgaWYgKGlucHV0T2JqZWN0IGluc3RhbmNlb2YgbmV3VHlwZSkge1xyXG4gICAgICAgIHJldHVybiBpbnB1dE9iamVjdDtcclxuICAgIH1cclxuICAgIGNvbnN0IG5ld09iamVjdCA9IG5ldyBuZXdUeXBlKCk7XHJcbiAgICBuZXdPYmplY3QuaWRCbG9jayA9IGlucHV0T2JqZWN0LmlkQmxvY2s7XHJcbiAgICBuZXdPYmplY3QubGVuQmxvY2sgPSBpbnB1dE9iamVjdC5sZW5CbG9jaztcclxuICAgIG5ld09iamVjdC53YXJuaW5ncyA9IGlucHV0T2JqZWN0Lndhcm5pbmdzO1xyXG4gICAgbmV3T2JqZWN0LnZhbHVlQmVmb3JlRGVjb2RlVmlldyA9IGlucHV0T2JqZWN0LnZhbHVlQmVmb3JlRGVjb2RlVmlldztcclxuICAgIHJldHVybiBuZXdPYmplY3Q7XHJcbn1cclxuZnVuY3Rpb24gbG9jYWxGcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCA9IDAsIGlucHV0TGVuZ3RoID0gaW5wdXRCdWZmZXIubGVuZ3RoKSB7XHJcbiAgICBjb25zdCBpbmNvbWluZ09mZnNldCA9IGlucHV0T2Zmc2V0O1xyXG4gICAgbGV0IHJldHVybk9iamVjdCA9IG5ldyBCYXNlQmxvY2soe30sIFZhbHVlQmxvY2spO1xyXG4gICAgY29uc3QgYmFzZUJsb2NrID0gbmV3IExvY2FsQmFzZUJsb2NrKCk7XHJcbiAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKGJhc2VCbG9jaywgaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSBiYXNlQmxvY2suZXJyb3I7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW50QnVmZmVyID0gaW5wdXRCdWZmZXIuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgaWYgKCFpbnRCdWZmZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gXCJaZXJvIGJ1ZmZlciBsZW5ndGhcIjtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBsZXQgcmVzdWx0T2Zmc2V0ID0gcmV0dXJuT2JqZWN0LmlkQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgIGlmIChyZXR1cm5PYmplY3QuaWRCbG9jay53YXJuaW5ncy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm5PYmplY3Qud2FybmluZ3MuY29uY2F0KHJldHVybk9iamVjdC5pZEJsb2NrLndhcm5pbmdzKTtcclxuICAgIH1cclxuICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gcmV0dXJuT2JqZWN0LmlkQmxvY2suZXJyb3I7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaW5wdXRPZmZzZXQgPSByZXN1bHRPZmZzZXQ7XHJcbiAgICBpbnB1dExlbmd0aCAtPSByZXR1cm5PYmplY3QuaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgIHJlc3VsdE9mZnNldCA9IHJldHVybk9iamVjdC5sZW5CbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgaWYgKHJldHVybk9iamVjdC5sZW5CbG9jay53YXJuaW5ncy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm5PYmplY3Qud2FybmluZ3MuY29uY2F0KHJldHVybk9iamVjdC5sZW5CbG9jay53YXJuaW5ncyk7XHJcbiAgICB9XHJcbiAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IHJldHVybk9iamVjdC5sZW5CbG9jay5lcnJvcjtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpbnB1dE9mZnNldCA9IHJlc3VsdE9mZnNldDtcclxuICAgIGlucHV0TGVuZ3RoIC09IHJldHVybk9iamVjdC5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgIGlmICghcmV0dXJuT2JqZWN0LmlkQmxvY2suaXNDb25zdHJ1Y3RlZCAmJlxyXG4gICAgICAgIHJldHVybk9iamVjdC5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gXCJJbmRlZmluaXRlIGxlbmd0aCBmb3JtIHVzZWQgZm9yIHByaW1pdGl2ZSBlbmNvZGluZyBmb3JtXCI7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgbGV0IG5ld0FTTjFUeXBlID0gQmFzZUJsb2NrO1xyXG4gICAgc3dpdGNoIChyZXR1cm5PYmplY3QuaWRCbG9jay50YWdDbGFzcykge1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgaWYgKChyZXR1cm5PYmplY3QuaWRCbG9jay50YWdOdW1iZXIgPj0gMzcpICYmXHJcbiAgICAgICAgICAgICAgICAocmV0dXJuT2JqZWN0LmlkQmxvY2suaXNIZXhPbmx5ID09PSBmYWxzZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IFwiVU5JVkVSU0FMIDM3IGFuZCB1cHBlciB0YWdzIGFyZSByZXNlcnZlZCBieSBBU04uMSBzdGFuZGFyZFwiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmV0dXJuT2JqZWN0LmlkQmxvY2sudGFnTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChyZXR1cm5PYmplY3QuaWRCbG9jay5pc0NvbnN0cnVjdGVkKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAocmV0dXJuT2JqZWN0LmxlbkJsb2NrLmxlbmd0aCA+IDApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IFwiVHlwZSBbVU5JVkVSU0FMIDBdIGlzIHJlc2VydmVkXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuRW5kT2ZDb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkJvb2xlYW47XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuSW50ZWdlcjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5CaXRTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuT2N0ZXRTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuTnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5PYmplY3RJZGVudGlmaWVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5FbnVtZXJhdGVkO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5VdGY4U3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5SZWxhdGl2ZU9iamVjdElkZW50aWZpZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE0OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlRJTUU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE1OlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IFwiW1VOSVZFUlNBTCAxNV0gaXMgcmVzZXJ2ZWQgYnkgQVNOLjEgc3RhbmRhcmRcIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE2OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlNlcXVlbmNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxNzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5TZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE4OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLk51bWVyaWNTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE5OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlByaW50YWJsZVN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjA6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVGVsZXRleFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjE6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVmlkZW90ZXhTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDIyOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLklBNVN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjM6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVVRDVGltZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjQ6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuR2VuZXJhbGl6ZWRUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyNTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5HcmFwaGljU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyNjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5WaXNpYmxlU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyNzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5HZW5lcmFsU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyODpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5Vbml2ZXJzYWxTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI5OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkNoYXJhY3RlclN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzA6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuQm1wU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzMTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5EQVRFO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzMjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5UaW1lT2ZEYXk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMzOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkRhdGVUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzNDpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5EdXJhdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdPYmplY3QgPSByZXR1cm5PYmplY3QuaWRCbG9jay5pc0NvbnN0cnVjdGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IHR5cGVTdG9yZS5Db25zdHJ1Y3RlZCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbmV3IHR5cGVTdG9yZS5QcmltaXRpdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICBuZXdPYmplY3QuaWRCbG9jayA9IHJldHVybk9iamVjdC5pZEJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld09iamVjdC5sZW5CbG9jayA9IHJldHVybk9iamVjdC5sZW5CbG9jaztcclxuICAgICAgICAgICAgICAgICAgICBuZXdPYmplY3Qud2FybmluZ3MgPSByZXR1cm5PYmplY3Qud2FybmluZ3M7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0ID0gbmV3T2JqZWN0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSByZXR1cm5PYmplY3QuaWRCbG9jay5pc0NvbnN0cnVjdGVkXHJcbiAgICAgICAgICAgICAgICA/IHR5cGVTdG9yZS5Db25zdHJ1Y3RlZFxyXG4gICAgICAgICAgICAgICAgOiB0eXBlU3RvcmUuUHJpbWl0aXZlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybk9iamVjdCA9IGxvY2FsQ2hhbmdlVHlwZShyZXR1cm5PYmplY3QsIG5ld0FTTjFUeXBlKTtcclxuICAgIHJlc3VsdE9mZnNldCA9IHJldHVybk9iamVjdC5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgcmV0dXJuT2JqZWN0LmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm0gPyBpbnB1dExlbmd0aCA6IHJldHVybk9iamVjdC5sZW5CbG9jay5sZW5ndGgpO1xyXG4gICAgcmV0dXJuT2JqZWN0LnZhbHVlQmVmb3JlRGVjb2RlVmlldyA9IGlucHV0QnVmZmVyLnN1YmFycmF5KGluY29taW5nT2Zmc2V0LCBpbmNvbWluZ09mZnNldCArIHJldHVybk9iamVjdC5ibG9ja0xlbmd0aCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG9mZnNldDogcmVzdWx0T2Zmc2V0LFxyXG4gICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGZyb21CRVIoaW5wdXRCdWZmZXIpIHtcclxuICAgIGlmICghaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBCYXNlQmxvY2soe30sIFZhbHVlQmxvY2spO1xyXG4gICAgICAgIHJlc3VsdC5lcnJvciA9IFwiSW5wdXQgYnVmZmVyIGhhcyB6ZXJvIGxlbmd0aFwiO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgIHJlc3VsdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbG9jYWxGcm9tQkVSKHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKS5zbGljZSgpLCAwLCBpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoKTtcclxufVxuXG5mdW5jdGlvbiBjaGVja0xlbihpbmRlZmluaXRlTGVuZ3RoLCBsZW5ndGgpIHtcclxuICAgIGlmIChpbmRlZmluaXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGVuZ3RoO1xyXG59XHJcbmNsYXNzIExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrIGV4dGVuZHMgVmFsdWVCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlID0gW10sIGlzSW5kZWZpbml0ZUZvcm0gPSBmYWxzZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5pc0luZGVmaW5pdGVGb3JtID0gaXNJbmRlZmluaXRlRm9ybTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCB2aWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUJlZm9yZURlY29kZVZpZXcgPSB2aWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZUJlZm9yZURlY29kZVZpZXcubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlplcm8gYnVmZmVyIGxlbmd0aFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgY3VycmVudE9mZnNldCA9IGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIHdoaWxlIChjaGVja0xlbih0aGlzLmlzSW5kZWZpbml0ZUZvcm0sIGlucHV0TGVuZ3RoKSA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgcmV0dXJuT2JqZWN0ID0gbG9jYWxGcm9tQkVSKHZpZXcsIGN1cnJlbnRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgaWYgKHJldHVybk9iamVjdC5vZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gcmV0dXJuT2JqZWN0LnJlc3VsdC5lcnJvcjtcclxuICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ3MuY29uY2F0KHJldHVybk9iamVjdC5yZXN1bHQud2FybmluZ3MpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQgPSByZXR1cm5PYmplY3Qub2Zmc2V0O1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHJldHVybk9iamVjdC5yZXN1bHQuYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIGlucHV0TGVuZ3RoIC09IHJldHVybk9iamVjdC5yZXN1bHQuYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChyZXR1cm5PYmplY3QucmVzdWx0KTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNJbmRlZmluaXRlRm9ybSAmJiByZXR1cm5PYmplY3QucmVzdWx0LmNvbnN0cnVjdG9yLk5BTUUgPT09IEVORF9PRl9DT05URU5UX05BTUUpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzSW5kZWZpbml0ZUZvcm0pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVbdGhpcy52YWx1ZS5sZW5ndGggLSAxXS5jb25zdHJ1Y3Rvci5OQU1FID09PSBFTkRfT0ZfQ09OVEVOVF9OQU1FKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlLnBvcCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiTm8gRW5kT2ZDb250ZW50IGJsb2NrIGVuY29kZWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgY29uc3QgX3dyaXRlciA9IHdyaXRlciB8fCBuZXcgVmlld1dyaXRlcigpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlW2ldLnRvQkVSKHNpemVPbmx5LCBfd3JpdGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF3cml0ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIF93cml0ZXIuZmluYWwoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICBjb25zdCBvYmplY3QgPSB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBpc0luZGVmaW5pdGVGb3JtOiB0aGlzLmlzSW5kZWZpbml0ZUZvcm0sXHJcbiAgICAgICAgICAgIHZhbHVlOiBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdGhpcy52YWx1ZSkge1xyXG4gICAgICAgICAgICBvYmplY3QudmFsdWUucHVzaCh2YWx1ZS50b0pTT04oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmplY3Q7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2suTkFNRSA9IFwiQ29uc3RydWN0ZWRWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSR2O1xyXG5jbGFzcyBDb25zdHJ1Y3RlZCBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLmlzQ29uc3RydWN0ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmlzSW5kZWZpbml0ZUZvcm0gPSB0aGlzLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm07XHJcbiAgICAgICAgY29uc3QgcmVzdWx0T2Zmc2V0ID0gdGhpcy52YWx1ZUJsb2NrLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCAodGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtKSA/IGlucHV0TGVuZ3RoIDogdGhpcy5sZW5CbG9jay5sZW5ndGgpO1xyXG4gICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnZhbHVlQmxvY2suZXJyb3I7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5pZEJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmlkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxlbkJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmxlbkJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy52YWx1ZUJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLnZhbHVlQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMudmFsdWVCbG9jay52YWx1ZSkge1xyXG4gICAgICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZS50b1N0cmluZyhcImFzY2lpXCIpLnNwbGl0KFwiXFxuXCIpLm1hcChvID0+IGAgICR7b31gKS5qb2luKFwiXFxuXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYmxvY2tOYW1lID0gdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID09PSAzXHJcbiAgICAgICAgICAgID8gYFske3RoaXMuaWRCbG9jay50YWdOdW1iZXJ9XWBcclxuICAgICAgICAgICAgOiB0aGlzLmNvbnN0cnVjdG9yLk5BTUU7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5sZW5ndGhcclxuICAgICAgICAgICAgPyBgJHtibG9ja05hbWV9IDpcXG4ke3ZhbHVlcy5qb2luKFwiXFxuXCIpfWBcclxuICAgICAgICAgICAgOiBgJHtibG9ja05hbWV9IDpgO1xyXG4gICAgfVxyXG59XHJcbl9hJHYgPSBDb25zdHJ1Y3RlZDtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5Db25zdHJ1Y3RlZCA9IF9hJHY7XHJcbn0pKCk7XHJcbkNvbnN0cnVjdGVkLk5BTUUgPSBcIkNPTlNUUlVDVEVEXCI7XG5cbmNsYXNzIExvY2FsRW5kT2ZDb250ZW50VmFsdWVCbG9jayBleHRlbmRzIFZhbHVlQmxvY2sge1xyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgfVxyXG59XHJcbkxvY2FsRW5kT2ZDb250ZW50VmFsdWVCbG9jay5vdmVycmlkZSA9IFwiRW5kT2ZDb250ZW50VmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkdTtcclxuY2xhc3MgRW5kT2ZDb250ZW50IGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsRW5kT2ZDb250ZW50VmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMDtcclxuICAgIH1cclxufVxyXG5fYSR1ID0gRW5kT2ZDb250ZW50O1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkVuZE9mQ29udGVudCA9IF9hJHU7XHJcbn0pKCk7XHJcbkVuZE9mQ29udGVudC5OQU1FID0gRU5EX09GX0NPTlRFTlRfTkFNRTtcblxudmFyIF9hJHQ7XHJcbmNsYXNzIE51bGwgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gNTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGlmICh0aGlzLmxlbkJsb2NrLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIk5vbi16ZXJvIGxlbmd0aCBvZiB2YWx1ZSBibG9jayBmb3IgTnVsbCB0eXBlXCIpO1xyXG4gICAgICAgIGlmICghdGhpcy5pZEJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmlkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxlbkJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmxlbkJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gaW5wdXRMZW5ndGg7XHJcbiAgICAgICAgaWYgKChpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKSA+IGlucHV0QnVmZmVyLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWQgKGluY29uc2lzdGVudCBvZmZzZXQgYW5kIGxlbmd0aCB2YWx1ZXMpXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5LCB3cml0ZXIpIHtcclxuICAgICAgICBjb25zdCByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIoMik7XHJcbiAgICAgICAgaWYgKCFzaXplT25seSkge1xyXG4gICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgcmV0Vmlld1swXSA9IDB4MDU7XHJcbiAgICAgICAgICAgIHJldFZpZXdbMV0gPSAweDAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod3JpdGVyKSB7XHJcbiAgICAgICAgICAgIHdyaXRlci53cml0ZShyZXRCdWYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9YDtcclxuICAgIH1cclxufVxyXG5fYSR0ID0gTnVsbDtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5OdWxsID0gX2EkdDtcclxufSkoKTtcclxuTnVsbC5OQU1FID0gXCJOVUxMXCI7XG5cbmNsYXNzIExvY2FsQm9vbGVhblZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIGlmIChwYXJhbWV0ZXJzLnZhbHVlSGV4KSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkocGFyYW1ldGVycy52YWx1ZUhleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCB2YWx1ZSgpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IG9jdGV0IG9mIHRoaXMudmFsdWVIZXhWaWV3KSB7XHJcbiAgICAgICAgICAgIGlmIChvY3RldCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHNldCB2YWx1ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3WzBdID0gdmFsdWUgPyAweEZGIDogMHgwMDtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGlucHV0VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIGlucHV0VmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gaW5wdXRWaWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBpZiAoaW5wdXRMZW5ndGggPiAxKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJCb29sZWFuIHZhbHVlIGVuY29kZWQgaW4gbW9yZSB0aGVuIDEgb2N0ZXRcIik7XHJcbiAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIHB2dXRpbHMudXRpbERlY29kZVRDLmNhbGwodGhpcyk7XHJcbiAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IGlucHV0TGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0JFUigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUhleFZpZXcuc2xpY2UoKTtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbEJvb2xlYW5WYWx1ZUJsb2NrLk5BTUUgPSBcIkJvb2xlYW5WYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRzO1xyXG5jbGFzcyBCb29sZWFuIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsQm9vbGVhblZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDE7XHJcbiAgICB9XHJcbiAgICBnZXRWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUJsb2NrLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0VmFsdWUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7dGhpcy5nZXRWYWx1ZX1gO1xyXG4gICAgfVxyXG59XHJcbl9hJHMgPSBCb29sZWFuO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkJvb2xlYW4gPSBfYSRzO1xyXG59KSgpO1xyXG5Cb29sZWFuLk5BTUUgPSBcIkJPT0xFQU5cIjtcblxuY2xhc3MgTG9jYWxPY3RldFN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyBpc0NvbnN0cnVjdGVkID0gZmFsc2UsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pc0NvbnN0cnVjdGVkID0gaXNDb25zdHJ1Y3RlZDtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGxldCByZXN1bHRPZmZzZXQgPSAwO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmVzdWx0T2Zmc2V0ID0gTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2sucHJvdG90eXBlLmZyb21CRVIuY2FsbCh0aGlzLCBpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRCbG9ja05hbWUgPSB0aGlzLnZhbHVlW2ldLmNvbnN0cnVjdG9yLk5BTUU7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJsb2NrTmFtZSA9PT0gRU5EX09GX0NPTlRFTlRfTkFNRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW5kZWZpbml0ZUZvcm0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFbmRPZkNvbnRlbnQgaXMgdW5leHBlY3RlZCwgT0NURVQgU1RSSU5HIG1heSBjb25zaXN0cyBvZiBPQ1RFVCBTVFJJTkdzIG9ubHlcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QmxvY2tOYW1lICE9PSBPQ1RFVF9TVFJJTkdfTkFNRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIk9DVEVUIFNUUklORyBtYXkgY29uc2lzdHMgb2YgT0NURVQgU1RSSU5HcyBvbmx5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgICAgIHJlc3VsdE9mZnNldCA9IHN1cGVyLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBpbnB1dExlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5LCB3cml0ZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0NvbnN0cnVjdGVkKVxyXG4gICAgICAgICAgICByZXR1cm4gTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2sucHJvdG90eXBlLnRvQkVSLmNhbGwodGhpcywgc2l6ZU9ubHksIHdyaXRlcik7XHJcbiAgICAgICAgcmV0dXJuIHNpemVPbmx5XHJcbiAgICAgICAgICAgID8gbmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGgpXHJcbiAgICAgICAgICAgIDogdGhpcy52YWx1ZUhleFZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIGlzQ29uc3RydWN0ZWQ6IHRoaXMuaXNDb25zdHJ1Y3RlZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsT2N0ZXRTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIk9jdGV0U3RyaW5nVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkcjtcclxuY2xhc3MgT2N0ZXRTdHJpbmcgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyBpZEJsb2NrID0ge30sIGxlbkJsb2NrID0ge30sIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYztcclxuICAgICAgICAoX2IgPSBwYXJhbWV0ZXJzLmlzQ29uc3RydWN0ZWQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IChwYXJhbWV0ZXJzLmlzQ29uc3RydWN0ZWQgPSAhISgoX2MgPSBwYXJhbWV0ZXJzLnZhbHVlKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSk7XHJcbiAgICAgICAgc3VwZXIoe1xyXG4gICAgICAgICAgICBpZEJsb2NrOiB7XHJcbiAgICAgICAgICAgICAgICBpc0NvbnN0cnVjdGVkOiBwYXJhbWV0ZXJzLmlzQ29uc3RydWN0ZWQsXHJcbiAgICAgICAgICAgICAgICAuLi5pZEJsb2NrLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBsZW5CbG9jazoge1xyXG4gICAgICAgICAgICAgICAgLi4ubGVuQmxvY2ssXHJcbiAgICAgICAgICAgICAgICBpc0luZGVmaW5pdGVGb3JtOiAhIXBhcmFtZXRlcnMuaXNJbmRlZmluaXRlRm9ybSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLi4ucGFyYW1ldGVycyxcclxuICAgICAgICB9LCBMb2NhbE9jdGV0U3RyaW5nVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gNDtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5pc0NvbnN0cnVjdGVkID0gdGhpcy5pZEJsb2NrLmlzQ29uc3RydWN0ZWQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmlzSW5kZWZpbml0ZUZvcm0gPSB0aGlzLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm07XHJcbiAgICAgICAgaWYgKGlucHV0TGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlkQmxvY2suZXJyb3IubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmlkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxlbkJsb2NrLmVycm9yLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICAgICAgcmV0dXJuIGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMudmFsdWVCbG9jay5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZpZXcgPSBpbnB1dEJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyID8gbmV3IFVpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpIDogaW5wdXRCdWZmZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1ZiA9IHZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGJ1Zi5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNuID0gbG9jYWxGcm9tQkVSKGJ1ZiwgMCwgYnVmLmJ5dGVMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhc24ub2Zmc2V0ICE9PSAtMSAmJiBhc24ub2Zmc2V0ID09PSBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBbYXNuLnJlc3VsdF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVCbG9jay5pc0NvbnN0cnVjdGVkIHx8ICh0aGlzLnZhbHVlQmxvY2sudmFsdWUgJiYgdGhpcy52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIENvbnN0cnVjdGVkLnByb3RvdHlwZS5vbkFzY2lpRW5jb2RpbmcuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke3B2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcpfWA7XHJcbiAgICB9XHJcbiAgICBnZXRWYWx1ZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaWRCbG9jay5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBhcnJheSA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgY29udGVudCBvZiB0aGlzLnZhbHVlQmxvY2sudmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBPY3RldFN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgYXJyYXkucHVzaChjb250ZW50LnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci5jb25jYXQoYXJyYXkpO1xyXG4gICAgfVxyXG59XHJcbl9hJHIgPSBPY3RldFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5PY3RldFN0cmluZyA9IF9hJHI7XHJcbn0pKCk7XHJcbk9jdGV0U3RyaW5nLk5BTUUgPSBPQ1RFVF9TVFJJTkdfTkFNRTtcblxuY2xhc3MgTG9jYWxCaXRTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdW51c2VkQml0cyA9IDAsIGlzQ29uc3RydWN0ZWQgPSBmYWxzZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnVudXNlZEJpdHMgPSB1bnVzZWRCaXRzO1xyXG4gICAgICAgIHRoaXMuaXNDb25zdHJ1Y3RlZCA9IGlzQ29uc3RydWN0ZWQ7XHJcbiAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGg7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBpZiAoIWlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHJlc3VsdE9mZnNldCA9IC0xO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICAgICAgcmVzdWx0T2Zmc2V0ID0gTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2sucHJvdG90eXBlLmZyb21CRVIuY2FsbCh0aGlzLCBpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRCbG9ja05hbWUgPSB2YWx1ZS5jb25zdHJ1Y3Rvci5OQU1FO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCbG9ja05hbWUgPT09IEVORF9PRl9DT05URU5UX05BTUUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0luZGVmaW5pdGVGb3JtKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kT2ZDb250ZW50IGlzIHVuZXhwZWN0ZWQsIEJJVCBTVFJJTkcgbWF5IGNvbnNpc3RzIG9mIEJJVCBTVFJJTkdzIG9ubHlcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QmxvY2tOYW1lICE9PSBCSVRfU1RSSU5HX05BTUUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJCSVQgU1RSSU5HIG1heSBjb25zaXN0cyBvZiBCSVQgU1RSSU5HcyBvbmx5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVCbG9jayA9IHZhbHVlLnZhbHVlQmxvY2s7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHRoaXMudW51c2VkQml0cyA+IDApICYmICh2YWx1ZUJsb2NrLnVudXNlZEJpdHMgPiAwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlVzaW5nIG9mIFxcXCJ1bnVzZWQgYml0c1xcXCIgaW5zaWRlIGNvbnN0cnVjdGl2ZSBCSVQgU1RSSU5HIGFsbG93ZWQgZm9yIGxlYXN0IG9uZSBvbmx5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy51bnVzZWRCaXRzID0gdmFsdWVCbG9jay51bnVzZWRCaXRzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlucHV0VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIGlucHV0VmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGludEJ1ZmZlciA9IGlucHV0Vmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgdGhpcy51bnVzZWRCaXRzID0gaW50QnVmZmVyWzBdO1xyXG4gICAgICAgIGlmICh0aGlzLnVudXNlZEJpdHMgPiA3KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlVudXNlZCBiaXRzIGZvciBCaXRTdHJpbmcgbXVzdCBiZSBpbiByYW5nZSAwLTdcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMudW51c2VkQml0cykge1xyXG4gICAgICAgICAgICBjb25zdCBidWYgPSBpbnRCdWZmZXIuc3ViYXJyYXkoMSk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYnVmLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc24gPSBsb2NhbEZyb21CRVIoYnVmLCAwLCBidWYuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFzbi5vZmZzZXQgIT09IC0xICYmIGFzbi5vZmZzZXQgPT09IChpbnB1dExlbmd0aCAtIDEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbYXNuLnJlc3VsdF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBpbnRCdWZmZXIuc3ViYXJyYXkoMSk7XHJcbiAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IGludEJ1ZmZlci5sZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5LCB3cml0ZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jay5wcm90b3R5cGUudG9CRVIuY2FsbCh0aGlzLCBzaXplT25seSwgd3JpdGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCArIDEpO1xyXG4gICAgICAgIHJldFZpZXdbMF0gPSB0aGlzLnVudXNlZEJpdHM7XHJcbiAgICAgICAgcmV0Vmlldy5zZXQodGhpcy52YWx1ZUhleFZpZXcsIDEpO1xyXG4gICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdW51c2VkQml0czogdGhpcy51bnVzZWRCaXRzLFxyXG4gICAgICAgICAgICBpc0NvbnN0cnVjdGVkOiB0aGlzLmlzQ29uc3RydWN0ZWQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbEJpdFN0cmluZ1ZhbHVlQmxvY2suTkFNRSA9IFwiQml0U3RyaW5nVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkcTtcclxuY2xhc3MgQml0U3RyaW5nIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgaWRCbG9jayA9IHt9LCBsZW5CbG9jayA9IHt9LCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHZhciBfYiwgX2M7XHJcbiAgICAgICAgKF9iID0gcGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAocGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkID0gISEoKF9jID0gcGFyYW1ldGVycy52YWx1ZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCkpO1xyXG4gICAgICAgIHN1cGVyKHtcclxuICAgICAgICAgICAgaWRCbG9jazoge1xyXG4gICAgICAgICAgICAgICAgaXNDb25zdHJ1Y3RlZDogcGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkLFxyXG4gICAgICAgICAgICAgICAgLi4uaWRCbG9jayxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbGVuQmxvY2s6IHtcclxuICAgICAgICAgICAgICAgIC4uLmxlbkJsb2NrLFxyXG4gICAgICAgICAgICAgICAgaXNJbmRlZmluaXRlRm9ybTogISFwYXJhbWV0ZXJzLmlzSW5kZWZpbml0ZUZvcm0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC4uLnBhcmFtZXRlcnMsXHJcbiAgICAgICAgfSwgTG9jYWxCaXRTdHJpbmdWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAzO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmlzQ29uc3RydWN0ZWQgPSB0aGlzLmlkQmxvY2suaXNDb25zdHJ1Y3RlZDtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2suaXNJbmRlZmluaXRlRm9ybSA9IHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybTtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZUJsb2NrLmlzQ29uc3RydWN0ZWQgfHwgKHRoaXMudmFsdWVCbG9jay52YWx1ZSAmJiB0aGlzLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gQ29uc3RydWN0ZWQucHJvdG90eXBlLm9uQXNjaWlFbmNvZGluZy5jYWxsKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgYml0cyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUhleCA9IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgYnl0ZSBvZiB2YWx1ZUhleCkge1xyXG4gICAgICAgICAgICAgICAgYml0cy5wdXNoKGJ5dGUudG9TdHJpbmcoMikucGFkU3RhcnQoOCwgXCIwXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBiaXRzU3RyID0gYml0cy5qb2luKFwiXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7Yml0c1N0ci5zdWJzdHJpbmcoMCwgYml0c1N0ci5sZW5ndGggLSB0aGlzLnZhbHVlQmxvY2sudW51c2VkQml0cyl9YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuX2EkcSA9IEJpdFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5CaXRTdHJpbmcgPSBfYSRxO1xyXG59KSgpO1xyXG5CaXRTdHJpbmcuTkFNRSA9IEJJVF9TVFJJTkdfTkFNRTtcblxudmFyIF9hJHA7XHJcbmZ1bmN0aW9uIHZpZXdBZGQoZmlyc3QsIHNlY29uZCkge1xyXG4gICAgY29uc3QgYyA9IG5ldyBVaW50OEFycmF5KFswXSk7XHJcbiAgICBjb25zdCBmaXJzdFZpZXcgPSBuZXcgVWludDhBcnJheShmaXJzdCk7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc2Vjb25kKTtcclxuICAgIGxldCBmaXJzdFZpZXdDb3B5ID0gZmlyc3RWaWV3LnNsaWNlKDApO1xyXG4gICAgY29uc3QgZmlyc3RWaWV3Q29weUxlbmd0aCA9IGZpcnN0Vmlld0NvcHkubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IHNlY29uZFZpZXdDb3B5ID0gc2Vjb25kVmlldy5zbGljZSgwKTtcclxuICAgIGNvbnN0IHNlY29uZFZpZXdDb3B5TGVuZ3RoID0gc2Vjb25kVmlld0NvcHkubGVuZ3RoIC0gMTtcclxuICAgIGxldCB2YWx1ZSA9IDA7XHJcbiAgICBjb25zdCBtYXggPSAoc2Vjb25kVmlld0NvcHlMZW5ndGggPCBmaXJzdFZpZXdDb3B5TGVuZ3RoKSA/IGZpcnN0Vmlld0NvcHlMZW5ndGggOiBzZWNvbmRWaWV3Q29weUxlbmd0aDtcclxuICAgIGxldCBjb3VudGVyID0gMDtcclxuICAgIGZvciAobGV0IGkgPSBtYXg7IGkgPj0gMDsgaS0tLCBjb3VudGVyKyspIHtcclxuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcclxuICAgICAgICAgICAgY2FzZSAoY291bnRlciA8IHNlY29uZFZpZXdDb3B5Lmxlbmd0aCk6XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdICsgc2Vjb25kVmlld0NvcHlbc2Vjb25kVmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSArIGNbMF07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gKyBjWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjWzBdID0gdmFsdWUgLyAxMDtcclxuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcclxuICAgICAgICAgICAgY2FzZSAoY291bnRlciA+PSBmaXJzdFZpZXdDb3B5Lmxlbmd0aCk6XHJcbiAgICAgICAgICAgICAgICBmaXJzdFZpZXdDb3B5ID0gcHZ1dGlscy51dGlsQ29uY2F0VmlldyhuZXcgVWludDhBcnJheShbdmFsdWUgJSAxMF0pLCBmaXJzdFZpZXdDb3B5KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gPSB2YWx1ZSAlIDEwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChjWzBdID4gMClcclxuICAgICAgICBmaXJzdFZpZXdDb3B5ID0gcHZ1dGlscy51dGlsQ29uY2F0VmlldyhjLCBmaXJzdFZpZXdDb3B5KTtcclxuICAgIHJldHVybiBmaXJzdFZpZXdDb3B5O1xyXG59XHJcbmZ1bmN0aW9uIHBvd2VyMihuKSB7XHJcbiAgICBpZiAobiA+PSBwb3dlcnMyLmxlbmd0aCkge1xyXG4gICAgICAgIGZvciAobGV0IHAgPSBwb3dlcnMyLmxlbmd0aDsgcCA8PSBuOyBwKyspIHtcclxuICAgICAgICAgICAgY29uc3QgYyA9IG5ldyBVaW50OEFycmF5KFswXSk7XHJcbiAgICAgICAgICAgIGxldCBkaWdpdHMgPSAocG93ZXJzMltwIC0gMV0pLnNsaWNlKDApO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gKGRpZ2l0cy5sZW5ndGggLSAxKTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gbmV3IFVpbnQ4QXJyYXkoWyhkaWdpdHNbaV0gPDwgMSkgKyBjWzBdXSk7XHJcbiAgICAgICAgICAgICAgICBjWzBdID0gbmV3VmFsdWVbMF0gLyAxMDtcclxuICAgICAgICAgICAgICAgIGRpZ2l0c1tpXSA9IG5ld1ZhbHVlWzBdICUgMTA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNbMF0gPiAwKVxyXG4gICAgICAgICAgICAgICAgZGlnaXRzID0gcHZ1dGlscy51dGlsQ29uY2F0VmlldyhjLCBkaWdpdHMpO1xyXG4gICAgICAgICAgICBwb3dlcnMyLnB1c2goZGlnaXRzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcG93ZXJzMltuXTtcclxufVxyXG5mdW5jdGlvbiB2aWV3U3ViKGZpcnN0LCBzZWNvbmQpIHtcclxuICAgIGxldCBiID0gMDtcclxuICAgIGNvbnN0IGZpcnN0VmlldyA9IG5ldyBVaW50OEFycmF5KGZpcnN0KTtcclxuICAgIGNvbnN0IHNlY29uZFZpZXcgPSBuZXcgVWludDhBcnJheShzZWNvbmQpO1xyXG4gICAgY29uc3QgZmlyc3RWaWV3Q29weSA9IGZpcnN0Vmlldy5zbGljZSgwKTtcclxuICAgIGNvbnN0IGZpcnN0Vmlld0NvcHlMZW5ndGggPSBmaXJzdFZpZXdDb3B5Lmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3Q29weSA9IHNlY29uZFZpZXcuc2xpY2UoMCk7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3Q29weUxlbmd0aCA9IHNlY29uZFZpZXdDb3B5Lmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgdmFsdWU7XHJcbiAgICBsZXQgY291bnRlciA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gc2Vjb25kVmlld0NvcHlMZW5ndGg7IGkgPj0gMDsgaS0tLCBjb3VudGVyKyspIHtcclxuICAgICAgICB2YWx1ZSA9IGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdIC0gc2Vjb25kVmlld0NvcHlbc2Vjb25kVmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSAtIGI7XHJcbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgKHZhbHVlIDwgMCk6XHJcbiAgICAgICAgICAgICAgICBiID0gMTtcclxuICAgICAgICAgICAgICAgIGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdID0gdmFsdWUgKyAxMDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYiA9IDA7XHJcbiAgICAgICAgICAgICAgICBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChiID4gMCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAoZmlyc3RWaWV3Q29weUxlbmd0aCAtIHNlY29uZFZpZXdDb3B5TGVuZ3RoICsgMSk7IGkgPj0gMDsgaS0tLCBjb3VudGVyKyspIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSAtIGI7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA8IDApIHtcclxuICAgICAgICAgICAgICAgIGIgPSAxO1xyXG4gICAgICAgICAgICAgICAgZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gPSB2YWx1ZSArIDEwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYiA9IDA7XHJcbiAgICAgICAgICAgICAgICBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmlyc3RWaWV3Q29weS5zbGljZSgpO1xyXG59XHJcbmNsYXNzIExvY2FsSW50ZWdlclZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlRGVjID0gMDtcclxuICAgICAgICBpZiAocGFyYW1ldGVycy52YWx1ZUhleCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlSGV4KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVEZWMgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzZXRWYWx1ZUhleCgpIHtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoID49IDQpIHtcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiVG9vIGJpZyBJbnRlZ2VyIGZvciBkZWNvZGluZywgaGV4IG9ubHlcIik7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fdmFsdWVEZWMgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlRGVjID0gcHZ1dGlscy51dGlsRGVjb2RlVEMuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHNldCB2YWx1ZURlYyh2KSB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWVEZWMgPSB2O1xyXG4gICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShwdnV0aWxzLnV0aWxFbmNvZGVUQyh2KSk7XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsdWVEZWMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlRGVjO1xyXG4gICAgfVxyXG4gICAgZnJvbURFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoLCBleHBlY3RlZExlbmd0aCA9IDApIHtcclxuICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gLTEpXHJcbiAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IHRoaXMudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgIGlmICgodmlld1swXSA9PT0gMHgwMCkgJiYgKCh2aWV3WzFdICYgMHg4MCkgIT09IDApKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdmlldy5zdWJhcnJheSgxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChleHBlY3RlZExlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZpZXcubGVuZ3RoIDwgZXhwZWN0ZWRMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGV4cGVjdGVkTGVuZ3RoIC0gdmlldy5sZW5ndGgpID4gMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRMZW5ndGggPSB2aWV3Lmxlbmd0aCArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSB2aWV3LnN1YmFycmF5KGV4cGVjdGVkTGVuZ3RoIC0gdmlldy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0RFUihzaXplT25seSA9IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IHRoaXMudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xyXG4gICAgICAgICAgICBjYXNlICgodmlld1swXSAmIDB4ODApICE9PSAwKTpcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkVmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRWaWV3WzBdID0gMHgwMDtcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkVmlldy5zZXQodmlldywgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSB1cGRhdGVkVmlldztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICgodmlld1swXSA9PT0gMHgwMCkgJiYgKCh2aWV3WzFdICYgMHg4MCkgPT09IDApKTpcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHRoaXMudmFsdWVIZXhWaWV3LnN1YmFycmF5KDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnRvQkVSKHNpemVPbmx5KTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdE9mZnNldCA9IHN1cGVyLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZUhleCgpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSkge1xyXG4gICAgICAgIHJldHVybiBzaXplT25seVxyXG4gICAgICAgICAgICA/IG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGgpXHJcbiAgICAgICAgICAgIDogdGhpcy52YWx1ZUhleFZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlRGVjOiB0aGlzLnZhbHVlRGVjLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZygpIHtcclxuICAgICAgICBjb25zdCBmaXJzdEJpdCA9ICh0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGggKiA4KSAtIDE7XHJcbiAgICAgICAgbGV0IGRpZ2l0cyA9IG5ldyBVaW50OEFycmF5KCh0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGggKiA4KSAvIDMpO1xyXG4gICAgICAgIGxldCBiaXROdW1iZXIgPSAwO1xyXG4gICAgICAgIGxldCBjdXJyZW50Qnl0ZTtcclxuICAgICAgICBjb25zdCBhc24xVmlldyA9IHRoaXMudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgICAgIGxldCBmbGFnID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgYnl0ZU51bWJlciA9IChhc24xVmlldy5ieXRlTGVuZ3RoIC0gMSk7IGJ5dGVOdW1iZXIgPj0gMDsgYnl0ZU51bWJlci0tKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRCeXRlID0gYXNuMVZpZXdbYnl0ZU51bWJlcl07XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGN1cnJlbnRCeXRlICYgMSkgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGJpdE51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGZpcnN0Qml0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRzID0gdmlld1N1Yihwb3dlcjIoYml0TnVtYmVyKSwgZGlnaXRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiLVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMgPSB2aWV3QWRkKGRpZ2l0cywgcG93ZXIyKGJpdE51bWJlcikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJpdE51bWJlcisrO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudEJ5dGUgPj49IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWdpdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGRpZ2l0c1tpXSlcclxuICAgICAgICAgICAgICAgIGZsYWcgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoZmxhZylcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBkaWdpdHNTdHJpbmcuY2hhckF0KGRpZ2l0c1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmbGFnID09PSBmYWxzZSlcclxuICAgICAgICAgICAgcmVzdWx0ICs9IGRpZ2l0c1N0cmluZy5jaGFyQXQoMCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG5fYSRwID0gTG9jYWxJbnRlZ2VyVmFsdWVCbG9jaztcclxuTG9jYWxJbnRlZ2VyVmFsdWVCbG9jay5OQU1FID0gXCJJbnRlZ2VyVmFsdWVCbG9ja1wiO1xyXG4oKCkgPT4ge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9hJHAucHJvdG90eXBlLCBcInZhbHVlSGV4XCIsIHtcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodik7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVIZXgoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUhleFZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICAgICAgfSxcclxuICAgIH0pO1xyXG59KSgpO1xuXG52YXIgX2EkbztcclxuY2xhc3MgSW50ZWdlciBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbEludGVnZXJWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyO1xyXG4gICAgfVxyXG4gICAgdG9CaWdJbnQoKSB7XHJcbiAgICAgICAgYXNzZXJ0QmlnSW50KCk7XHJcbiAgICAgICAgcmV0dXJuIEJpZ0ludCh0aGlzLnZhbHVlQmxvY2sudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZnJvbUJpZ0ludCh2YWx1ZSkge1xyXG4gICAgICAgIGFzc2VydEJpZ0ludCgpO1xyXG4gICAgICAgIGNvbnN0IGJpZ0ludFZhbHVlID0gQmlnSW50KHZhbHVlKTtcclxuICAgICAgICBjb25zdCB3cml0ZXIgPSBuZXcgVmlld1dyaXRlcigpO1xyXG4gICAgICAgIGNvbnN0IGhleCA9IGJpZ0ludFZhbHVlLnRvU3RyaW5nKDE2KS5yZXBsYWNlKC9eLS8sIFwiXCIpO1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgVWludDhBcnJheShwdnRzdXRpbHMuQ29udmVydC5Gcm9tSGV4KGhleCkpO1xyXG4gICAgICAgIGlmIChiaWdJbnRWYWx1ZSA8IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZmlyc3QgPSBuZXcgVWludDhBcnJheSh2aWV3Lmxlbmd0aCArICh2aWV3WzBdICYgMHg4MCA/IDEgOiAwKSk7XHJcbiAgICAgICAgICAgIGZpcnN0WzBdIHw9IDB4ODA7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SW50ID0gQmlnSW50KGAweCR7cHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgoZmlyc3QpfWApO1xyXG4gICAgICAgICAgICBjb25zdCBzZWNvbmRJbnQgPSBmaXJzdEludCArIGJpZ0ludFZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShwdnRzdXRpbHMuQ29udmVydC5Gcm9tSGV4KHNlY29uZEludC50b1N0cmluZygxNikpKTtcclxuICAgICAgICAgICAgc2Vjb25kWzBdIHw9IDB4ODA7XHJcbiAgICAgICAgICAgIHdyaXRlci53cml0ZShzZWNvbmQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHZpZXdbMF0gJiAweDgwKSB7XHJcbiAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGUobmV3IFVpbnQ4QXJyYXkoWzBdKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd3JpdGVyLndyaXRlKHZpZXcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXMgPSBuZXcgSW50ZWdlcih7XHJcbiAgICAgICAgICAgIHZhbHVlSGV4OiB3cml0ZXIuZmluYWwoKSxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgY29udmVydFRvREVSKCkge1xyXG4gICAgICAgIGNvbnN0IGludGVnZXIgPSBuZXcgSW50ZWdlcih7IHZhbHVlSGV4OiB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3IH0pO1xyXG4gICAgICAgIGludGVnZXIudmFsdWVCbG9jay50b0RFUigpO1xyXG4gICAgICAgIHJldHVybiBpbnRlZ2VyO1xyXG4gICAgfVxyXG4gICAgY29udmVydEZyb21ERVIoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKHtcclxuICAgICAgICAgICAgdmFsdWVIZXg6IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXdbMF0gPT09IDBcclxuICAgICAgICAgICAgICAgID8gdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldy5zdWJhcnJheSgxKVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHt0aGlzLnZhbHVlQmxvY2sudG9TdHJpbmcoKX1gO1xyXG4gICAgfVxyXG59XHJcbl9hJG8gPSBJbnRlZ2VyO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkludGVnZXIgPSBfYSRvO1xyXG59KSgpO1xyXG5JbnRlZ2VyLk5BTUUgPSBcIklOVEVHRVJcIjtcblxudmFyIF9hJG47XHJcbmNsYXNzIEVudW1lcmF0ZWQgZXh0ZW5kcyBJbnRlZ2VyIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDEwO1xyXG4gICAgfVxyXG59XHJcbl9hJG4gPSBFbnVtZXJhdGVkO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkVudW1lcmF0ZWQgPSBfYSRuO1xyXG59KSgpO1xyXG5FbnVtZXJhdGVkLk5BTUUgPSBcIkVOVU1FUkFURURcIjtcblxuY2xhc3MgTG9jYWxTaWRWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZURlYyA9IC0xLCBpc0ZpcnN0U2lkID0gZmFsc2UsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZURlYyA9IHZhbHVlRGVjO1xyXG4gICAgICAgIHRoaXMuaXNGaXJzdFNpZCA9IGlzRmlyc3RTaWQ7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBpZiAoIWlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW5wdXRWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgaW5wdXRWaWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW50QnVmZmVyID0gaW5wdXRWaWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXdbaV0gPSBpbnRCdWZmZXJbaV0gJiAweDdGO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoKys7XHJcbiAgICAgICAgICAgIGlmICgoaW50QnVmZmVyW2ldICYgMHg4MCkgPT09IDB4MDApXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGVtcFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYmxvY2tMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0ZW1wVmlld1tpXSA9IHRoaXMudmFsdWVIZXhWaWV3W2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHRlbXBWaWV3O1xyXG4gICAgICAgIGlmICgoaW50QnVmZmVyW3RoaXMuYmxvY2tMZW5ndGggLSAxXSAmIDB4ODApICE9PSAweDAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVIZXhWaWV3WzBdID09PSAweDAwKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJOZWVkbGVzc2x5IGxvbmcgZm9ybWF0IG9mIFNJRCBlbmNvZGluZ1wiKTtcclxuICAgICAgICBpZiAodGhpcy5ibG9ja0xlbmd0aCA8PSA4KVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlRGVjID0gcHZ1dGlscy51dGlsRnJvbUJhc2UodGhpcy52YWx1ZUhleFZpZXcsIDcpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlRvbyBiaWcgU0lEIGZvciBkZWNvZGluZywgaGV4IG9ubHlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyB0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHNldCB2YWx1ZUJpZ0ludCh2YWx1ZSkge1xyXG4gICAgICAgIGFzc2VydEJpZ0ludCgpO1xyXG4gICAgICAgIGxldCBiaXRzID0gQmlnSW50KHZhbHVlKS50b1N0cmluZygyKTtcclxuICAgICAgICB3aGlsZSAoYml0cy5sZW5ndGggJSA3KSB7XHJcbiAgICAgICAgICAgIGJpdHMgPSBcIjBcIiArIGJpdHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYml0cy5sZW5ndGggLyA3KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGJ5dGVzW2ldID0gcGFyc2VJbnQoYml0cy5zbGljZShpICogNywgaSAqIDcgKyA3KSwgMikgKyAoaSArIDEgPCBieXRlcy5sZW5ndGggPyAweDgwIDogMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZnJvbUJFUihieXRlcy5idWZmZXIsIDAsIGJ5dGVzLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzSGV4T25seSkge1xyXG4gICAgICAgICAgICBpZiAoc2l6ZU9ubHkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1clZpZXcgPSB0aGlzLnZhbHVlSGV4VmlldztcclxuICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICh0aGlzLmJsb2NrTGVuZ3RoIC0gMSk7IGkrKylcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbaV0gPSBjdXJWaWV3W2ldIHwgMHg4MDtcclxuICAgICAgICAgICAgcmV0Vmlld1t0aGlzLmJsb2NrTGVuZ3RoIC0gMV0gPSBjdXJWaWV3W3RoaXMuYmxvY2tMZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBlbmNvZGVkQnVmID0gcHZ1dGlscy51dGlsVG9CYXNlKHRoaXMudmFsdWVEZWMsIDcpO1xyXG4gICAgICAgIGlmIChlbmNvZGVkQnVmLmJ5dGVMZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRXJyb3IgZHVyaW5nIGVuY29kaW5nIFNJRCB2YWx1ZVwiO1xyXG4gICAgICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoKTtcclxuICAgICAgICBpZiAoIXNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZW5jb2RlZEJ1Zik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IGVuY29kZWRCdWYuYnl0ZUxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W2ldID0gZW5jb2RlZFZpZXdbaV0gfCAweDgwO1xyXG4gICAgICAgICAgICByZXRWaWV3W2xlbl0gPSBlbmNvZGVkVmlld1tsZW5dO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0VmlldztcclxuICAgIH1cclxuICAgIHRvU3RyaW5nKCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgICAgIGlmICh0aGlzLmlzSGV4T25seSlcclxuICAgICAgICAgICAgcmVzdWx0ID0gcHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy52YWx1ZUhleFZpZXcpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0ZpcnN0U2lkKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc2lkVmFsdWUgPSB0aGlzLnZhbHVlRGVjO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVEZWMgPD0gMzkpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gXCIwLlwiO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVEZWMgPD0gNzkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gXCIxLlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWRWYWx1ZSAtPSA0MDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiMi5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2lkVmFsdWUgLT0gODA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNpZFZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy52YWx1ZURlYy50b1N0cmluZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZURlYzogdGhpcy52YWx1ZURlYyxcclxuICAgICAgICAgICAgaXNGaXJzdFNpZDogdGhpcy5pc0ZpcnN0U2lkLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxTaWRWYWx1ZUJsb2NrLk5BTUUgPSBcInNpZEJsb2NrXCI7XG5cbmNsYXNzIExvY2FsT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2sgZXh0ZW5kcyBWYWx1ZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUgPSBFTVBUWV9TVFJJTkcsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGxldCByZXN1bHRPZmZzZXQgPSBpbnB1dE9mZnNldDtcclxuICAgICAgICB3aGlsZSAoaW5wdXRMZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpZEJsb2NrID0gbmV3IExvY2FsU2lkVmFsdWVCbG9jaygpO1xyXG4gICAgICAgICAgICByZXN1bHRPZmZzZXQgPSBzaWRCbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCByZXN1bHRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IHNpZEJsb2NrLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZS5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgICAgICBzaWRCbG9jay5pc0ZpcnN0U2lkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSBzaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICAgICAgaW5wdXRMZW5ndGggLT0gc2lkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChzaWRCbG9jayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSkge1xyXG4gICAgICAgIGNvbnN0IHJldEJ1ZmZlcnMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVCdWYgPSB0aGlzLnZhbHVlW2ldLnRvQkVSKHNpemVPbmx5KTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlQnVmLmJ5dGVMZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnZhbHVlW2ldLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXRCdWZmZXJzLnB1c2godmFsdWVCdWYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29uY2F0KHJldEJ1ZmZlcnMpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICAgICAgbGV0IHBvczEgPSAwO1xyXG4gICAgICAgIGxldCBwb3MyID0gMDtcclxuICAgICAgICBsZXQgc2lkID0gXCJcIjtcclxuICAgICAgICBsZXQgZmxhZyA9IGZhbHNlO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgcG9zMiA9IHN0cmluZy5pbmRleE9mKFwiLlwiLCBwb3MxKTtcclxuICAgICAgICAgICAgaWYgKHBvczIgPT09IC0xKVxyXG4gICAgICAgICAgICAgICAgc2lkID0gc3RyaW5nLnN1YnN0cmluZyhwb3MxKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgc2lkID0gc3RyaW5nLnN1YnN0cmluZyhwb3MxLCBwb3MyKTtcclxuICAgICAgICAgICAgcG9zMSA9IHBvczIgKyAxO1xyXG4gICAgICAgICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2lkQmxvY2sgPSB0aGlzLnZhbHVlWzBdO1xyXG4gICAgICAgICAgICAgICAgbGV0IHBsdXMgPSAwO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChzaWRCbG9jay52YWx1ZURlYykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVzID0gNDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGx1cyA9IDgwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFNJRCA9IHBhcnNlSW50KHNpZCwgMTApO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKHBhcnNlZFNJRCkpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgc2lkQmxvY2sudmFsdWVEZWMgPSBwYXJzZWRTSUQgKyBwbHVzO1xyXG4gICAgICAgICAgICAgICAgZmxhZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2lkQmxvY2sgPSBuZXcgTG9jYWxTaWRWYWx1ZUJsb2NrKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2lkID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHtcclxuICAgICAgICAgICAgICAgICAgICBhc3NlcnRCaWdJbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWRWYWx1ZSA9IEJpZ0ludChzaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNpZEJsb2NrLnZhbHVlQmlnSW50ID0gc2lkVmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzaWRCbG9jay52YWx1ZURlYyA9IHBhcnNlSW50KHNpZCwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihzaWRCbG9jay52YWx1ZURlYykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBzaWRCbG9jay5pc0ZpcnN0U2lkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBmbGFnID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChzaWRCbG9jayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IHdoaWxlIChwb3MyICE9PSAtMSk7XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZygpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICBsZXQgaXNIZXhPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlzSGV4T25seSA9IHRoaXMudmFsdWVbaV0uaXNIZXhPbmx5O1xyXG4gICAgICAgICAgICBsZXQgc2lkU3RyID0gdGhpcy52YWx1ZVtpXS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBpZiAoaSAhPT0gMClcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGAke3Jlc3VsdH0uYDtcclxuICAgICAgICAgICAgaWYgKGlzSGV4T25seSkge1xyXG4gICAgICAgICAgICAgICAgc2lkU3RyID0gYHske3NpZFN0cn19YDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlW2ldLmlzRmlyc3RTaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYDIueyR7c2lkU3RyfSAtIDgwfWA7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNpZFN0cjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2lkU3RyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIHNpZEFycmF5OiBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBvYmplY3Quc2lkQXJyYXkucHVzaCh0aGlzLnZhbHVlW2ldLnRvSlNPTigpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcclxuICAgIH1cclxufVxyXG5Mb2NhbE9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrLk5BTUUgPSBcIk9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRtO1xyXG5jbGFzcyBPYmplY3RJZGVudGlmaWVyIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDY7XHJcbiAgICB9XHJcbiAgICBnZXRWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBzZXRWYWx1ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5mcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7dGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCkgfHwgXCJlbXB0eVwifWA7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmdldFZhbHVlKCksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5fYSRtID0gT2JqZWN0SWRlbnRpZmllcjtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5PYmplY3RJZGVudGlmaWVyID0gX2EkbTtcclxufSkoKTtcclxuT2JqZWN0SWRlbnRpZmllci5OQU1FID0gXCJPQkpFQ1QgSURFTlRJRklFUlwiO1xuXG5jbGFzcyBMb2NhbFJlbGF0aXZlU2lkVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKExvY2FsQmFzZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlRGVjID0gMCwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlRGVjID0gdmFsdWVEZWM7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBpZiAoaW5wdXRMZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICBjb25zdCBpbnB1dFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCBpbnB1dFZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpXHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICBjb25zdCBpbnRCdWZmZXIgPSBpbnB1dFZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4Vmlld1tpXSA9IGludEJ1ZmZlcltpXSAmIDB4N0Y7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGgrKztcclxuICAgICAgICAgICAgaWYgKChpbnRCdWZmZXJbaV0gJiAweDgwKSA9PT0gMHgwMClcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0ZW1wVmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ibG9ja0xlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB0ZW1wVmlld1tpXSA9IHRoaXMudmFsdWVIZXhWaWV3W2ldO1xyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdGVtcFZpZXc7XHJcbiAgICAgICAgaWYgKChpbnRCdWZmZXJbdGhpcy5ibG9ja0xlbmd0aCAtIDFdICYgMHg4MCkgIT09IDB4MDApIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWRcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy52YWx1ZUhleFZpZXdbMF0gPT09IDB4MDApXHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIk5lZWRsZXNzbHkgbG9uZyBmb3JtYXQgb2YgU0lEIGVuY29kaW5nXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLmJsb2NrTGVuZ3RoIDw9IDgpXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVEZWMgPSBwdnV0aWxzLnV0aWxGcm9tQmFzZSh0aGlzLnZhbHVlSGV4VmlldywgNyk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiVG9vIGJpZyBTSUQgZm9yIGRlY29kaW5nLCBoZXggb25seVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgaWYgKHNpemVPbmx5KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCkpO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJWaWV3ID0gdGhpcy52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAodGhpcy5ibG9ja0xlbmd0aCAtIDEpOyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W2ldID0gY3VyVmlld1tpXSB8IDB4ODA7XHJcbiAgICAgICAgICAgIHJldFZpZXdbdGhpcy5ibG9ja0xlbmd0aCAtIDFdID0gY3VyVmlld1t0aGlzLmJsb2NrTGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZW5jb2RlZEJ1ZiA9IHB2dXRpbHMudXRpbFRvQmFzZSh0aGlzLnZhbHVlRGVjLCA3KTtcclxuICAgICAgICBpZiAoZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVycm9yIGR1cmluZyBlbmNvZGluZyBTSUQgdmFsdWVcIjtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgaWYgKCFzaXplT25seSkge1xyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkVmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYpO1xyXG4gICAgICAgICAgICBjb25zdCBsZW4gPSBlbmNvZGVkQnVmLmJ5dGVMZW5ndGggLSAxO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tpXSA9IGVuY29kZWRWaWV3W2ldIHwgMHg4MDtcclxuICAgICAgICAgICAgcmV0Vmlld1tsZW5dID0gZW5jb2RlZFZpZXdbbGVuXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNIZXhPbmx5KVxyXG4gICAgICAgICAgICByZXN1bHQgPSBwdnRzdXRpbHMuQ29udmVydC5Ub0hleCh0aGlzLnZhbHVlSGV4Vmlldyk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMudmFsdWVEZWMudG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWVEZWM6IHRoaXMudmFsdWVEZWMsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbFJlbGF0aXZlU2lkVmFsdWVCbG9jay5OQU1FID0gXCJyZWxhdGl2ZVNpZEJsb2NrXCI7XG5cbmNsYXNzIExvY2FsUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9jayBleHRlbmRzIFZhbHVlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSA9IEVNUFRZX1NUUklORywgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbVN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdE9mZnNldCA9IGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIHdoaWxlIChpbnB1dExlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3Qgc2lkQmxvY2sgPSBuZXcgTG9jYWxSZWxhdGl2ZVNpZFZhbHVlQmxvY2soKTtcclxuICAgICAgICAgICAgcmVzdWx0T2Zmc2V0ID0gc2lkQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgcmVzdWx0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBzaWRCbG9jay5lcnJvcjtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSBzaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICAgICAgaW5wdXRMZW5ndGggLT0gc2lkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChzaWRCbG9jayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgY29uc3QgcmV0QnVmZmVycyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUJ1ZiA9IHRoaXMudmFsdWVbaV0udG9CRVIoc2l6ZU9ubHkpO1xyXG4gICAgICAgICAgICBpZiAodmFsdWVCdWYuYnl0ZUxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRoaXMudmFsdWVbaV0uZXJyb3I7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldEJ1ZmZlcnMucHVzaCh2YWx1ZUJ1Zik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25jYXQocmV0QnVmZmVycyk7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKHN0cmluZykge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbXTtcclxuICAgICAgICBsZXQgcG9zMSA9IDA7XHJcbiAgICAgICAgbGV0IHBvczIgPSAwO1xyXG4gICAgICAgIGxldCBzaWQgPSBcIlwiO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgcG9zMiA9IHN0cmluZy5pbmRleE9mKFwiLlwiLCBwb3MxKTtcclxuICAgICAgICAgICAgaWYgKHBvczIgPT09IC0xKVxyXG4gICAgICAgICAgICAgICAgc2lkID0gc3RyaW5nLnN1YnN0cmluZyhwb3MxKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgc2lkID0gc3RyaW5nLnN1YnN0cmluZyhwb3MxLCBwb3MyKTtcclxuICAgICAgICAgICAgcG9zMSA9IHBvczIgKyAxO1xyXG4gICAgICAgICAgICBjb25zdCBzaWRCbG9jayA9IG5ldyBMb2NhbFJlbGF0aXZlU2lkVmFsdWVCbG9jaygpO1xyXG4gICAgICAgICAgICBzaWRCbG9jay52YWx1ZURlYyA9IHBhcnNlSW50KHNpZCwgMTApO1xyXG4gICAgICAgICAgICBpZiAoaXNOYU4oc2lkQmxvY2sudmFsdWVEZWMpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChzaWRCbG9jayk7XHJcbiAgICAgICAgfSB3aGlsZSAocG9zMiAhPT0gLTEpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGlzSGV4T25seSA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpc0hleE9ubHkgPSB0aGlzLnZhbHVlW2ldLmlzSGV4T25seTtcclxuICAgICAgICAgICAgbGV0IHNpZFN0ciA9IHRoaXMudmFsdWVbaV0udG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgaWYgKGkgIT09IDApXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBgJHtyZXN1bHR9LmA7XHJcbiAgICAgICAgICAgIGlmIChpc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgICAgIHNpZFN0ciA9IGB7JHtzaWRTdHJ9fWA7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2lkU3RyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzaWRTdHI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgc2lkQXJyYXk6IFtdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBvYmplY3Quc2lkQXJyYXkucHVzaCh0aGlzLnZhbHVlW2ldLnRvSlNPTigpKTtcclxuICAgICAgICByZXR1cm4gb2JqZWN0O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9jay5OQU1FID0gXCJSZWxhdGl2ZU9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRsO1xyXG5jbGFzcyBSZWxhdGl2ZU9iamVjdElkZW50aWZpZXIgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxSZWxhdGl2ZU9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxMztcclxuICAgIH1cclxuICAgIGdldFZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlQmxvY2sudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIHNldFZhbHVlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHt0aGlzLnZhbHVlQmxvY2sudG9TdHJpbmcoKSB8fCBcImVtcHR5XCJ9YDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0VmFsdWUoKSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbl9hJGwgPSBSZWxhdGl2ZU9iamVjdElkZW50aWZpZXI7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyID0gX2EkbDtcclxufSkoKTtcclxuUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyLk5BTUUgPSBcIlJlbGF0aXZlT2JqZWN0SWRlbnRpZmllclwiO1xuXG52YXIgX2EkaztcclxuY2xhc3MgU2VxdWVuY2UgZXh0ZW5kcyBDb25zdHJ1Y3RlZCB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxNjtcclxuICAgIH1cclxufVxyXG5fYSRrID0gU2VxdWVuY2U7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuU2VxdWVuY2UgPSBfYSRrO1xyXG59KSgpO1xyXG5TZXF1ZW5jZS5OQU1FID0gXCJTRVFVRU5DRVwiO1xuXG52YXIgX2EkajtcclxuY2xhc3MgU2V0IGV4dGVuZHMgQ29uc3RydWN0ZWQge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTc7XHJcbiAgICB9XHJcbn1cclxuX2EkaiA9IFNldDtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5TZXQgPSBfYSRqO1xyXG59KSgpO1xyXG5TZXQuTkFNRSA9IFwiU0VUXCI7XG5cbmNsYXNzIExvY2FsU3RyaW5nVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKFZhbHVlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IEVNUFRZX1NUUklORztcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbFN0cmluZ1ZhbHVlQmxvY2suTkFNRSA9IFwiU3RyaW5nVmFsdWVCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbFNpbXBsZVN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBMb2NhbFN0cmluZ1ZhbHVlQmxvY2sge1xyXG59XHJcbkxvY2FsU2ltcGxlU3RyaW5nVmFsdWVCbG9jay5OQU1FID0gXCJTaW1wbGVTdHJpbmdWYWx1ZUJsb2NrXCI7XG5cbmNsYXNzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sgZXh0ZW5kcyBCYXNlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsU2ltcGxlU3RyaW5nVmFsdWVCbG9jayk7XHJcbiAgICB9XHJcbiAgICBmcm9tQnVmZmVyKGlucHV0QnVmZmVyKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcikpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhpbnB1dFN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHN0ckxlbiA9IGlucHV0U3RyaW5nLmxlbmd0aDtcclxuICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHN0ckxlbik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJMZW47IGkrKylcclxuICAgICAgICAgICAgdmlld1tpXSA9IGlucHV0U3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gaW5wdXRTdHJpbmc7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxTaW1wbGVTdHJpbmdCbG9jay5OQU1FID0gXCJTSU1QTEUgU1RSSU5HXCI7XG5cbmNsYXNzIExvY2FsVXRmOFN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGZyb21CdWZmZXIoaW5wdXRCdWZmZXIpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IHB2dHN1dGlscy5Db252ZXJ0LlRvVXRmOFN0cmluZyhpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChleCkge1xyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goYEVycm9yIGR1cmluZyBcImRlY29kZVVSSUNvbXBvbmVudFwiOiAke2V4fSwgdXNpbmcgcmF3IHN0cmluZ2ApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBwdnRzdXRpbHMuQ29udmVydC5Ub0JpbmFyeShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhpbnB1dFN0cmluZykge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShwdnRzdXRpbHMuQ29udmVydC5Gcm9tVXRmOFN0cmluZyhpbnB1dFN0cmluZykpO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IGlucHV0U3RyaW5nO1xyXG4gICAgfVxyXG59XHJcbkxvY2FsVXRmOFN0cmluZ1ZhbHVlQmxvY2suTkFNRSA9IFwiVXRmOFN0cmluZ1ZhbHVlQmxvY2tcIjtcblxudmFyIF9hJGk7XHJcbmNsYXNzIFV0ZjhTdHJpbmcgZXh0ZW5kcyBMb2NhbFV0ZjhTdHJpbmdWYWx1ZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDEyO1xyXG4gICAgfVxyXG59XHJcbl9hJGkgPSBVdGY4U3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlV0ZjhTdHJpbmcgPSBfYSRpO1xyXG59KSgpO1xyXG5VdGY4U3RyaW5nLk5BTUUgPSBcIlVURjhTdHJpbmdcIjtcblxuY2xhc3MgTG9jYWxCbXBTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBmcm9tQnVmZmVyKGlucHV0QnVmZmVyKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gcHZ0c3V0aWxzLkNvbnZlcnQuVG9VdGYxNlN0cmluZyhpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoaW5wdXRTdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBpbnB1dFN0cmluZztcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocHZ0c3V0aWxzLkNvbnZlcnQuRnJvbVV0ZjE2U3RyaW5nKGlucHV0U3RyaW5nKSk7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxCbXBTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIkJtcFN0cmluZ1ZhbHVlQmxvY2tcIjtcblxudmFyIF9hJGg7XHJcbmNsYXNzIEJtcFN0cmluZyBleHRlbmRzIExvY2FsQm1wU3RyaW5nVmFsdWVCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMzA7XHJcbiAgICB9XHJcbn1cclxuX2EkaCA9IEJtcFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5CbXBTdHJpbmcgPSBfYSRoO1xyXG59KSgpO1xyXG5CbXBTdHJpbmcuTkFNRSA9IFwiQk1QU3RyaW5nXCI7XG5cbmNsYXNzIExvY2FsVW5pdmVyc2FsU3RyaW5nVmFsdWVCbG9jayBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgZnJvbUJ1ZmZlcihpbnB1dEJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IGNvcHlCdWZmZXIgPSBBcnJheUJ1ZmZlci5pc1ZpZXcoaW5wdXRCdWZmZXIpID8gaW5wdXRCdWZmZXIuc2xpY2UoKS5idWZmZXIgOiBpbnB1dEJ1ZmZlci5zbGljZSgwKTtcclxuICAgICAgICBjb25zdCB2YWx1ZVZpZXcgPSBuZXcgVWludDhBcnJheShjb3B5QnVmZmVyKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlVmlldy5sZW5ndGg7IGkgKz0gNCkge1xyXG4gICAgICAgICAgICB2YWx1ZVZpZXdbaV0gPSB2YWx1ZVZpZXdbaSArIDNdO1xyXG4gICAgICAgICAgICB2YWx1ZVZpZXdbaSArIDFdID0gdmFsdWVWaWV3W2kgKyAyXTtcclxuICAgICAgICAgICAgdmFsdWVWaWV3W2kgKyAyXSA9IDB4MDA7XHJcbiAgICAgICAgICAgIHZhbHVlVmlld1tpICsgM10gPSAweDAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIG5ldyBVaW50MzJBcnJheShjb3B5QnVmZmVyKSk7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKGlucHV0U3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyTGVuZ3RoID0gaW5wdXRTdHJpbmcubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlSGV4VmlldyA9IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShzdHJMZW5ndGggKiA0KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ckxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvZGVCdWYgPSBwdnV0aWxzLnV0aWxUb0Jhc2UoaW5wdXRTdHJpbmcuY2hhckNvZGVBdChpKSwgOCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvZGVWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoY29kZUJ1Zik7XHJcbiAgICAgICAgICAgIGlmIChjb2RlVmlldy5sZW5ndGggPiA0KVxyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpZiA9IDQgLSBjb2RlVmlldy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAoY29kZVZpZXcubGVuZ3RoIC0gMSk7IGogPj0gMDsgai0tKVxyXG4gICAgICAgICAgICAgICAgdmFsdWVIZXhWaWV3W2kgKiA0ICsgaiArIGRpZl0gPSBjb2RlVmlld1tqXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gaW5wdXRTdHJpbmc7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxVbml2ZXJzYWxTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIlVuaXZlcnNhbFN0cmluZ1ZhbHVlQmxvY2tcIjtcblxudmFyIF9hJGc7XHJcbmNsYXNzIFVuaXZlcnNhbFN0cmluZyBleHRlbmRzIExvY2FsVW5pdmVyc2FsU3RyaW5nVmFsdWVCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjg7XHJcbiAgICB9XHJcbn1cclxuX2EkZyA9IFVuaXZlcnNhbFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5Vbml2ZXJzYWxTdHJpbmcgPSBfYSRnO1xyXG59KSgpO1xyXG5Vbml2ZXJzYWxTdHJpbmcuTkFNRSA9IFwiVW5pdmVyc2FsU3RyaW5nXCI7XG5cbnZhciBfYSRmO1xyXG5jbGFzcyBOdW1lcmljU3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxODtcclxuICAgIH1cclxufVxyXG5fYSRmID0gTnVtZXJpY1N0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5OdW1lcmljU3RyaW5nID0gX2EkZjtcclxufSkoKTtcclxuTnVtZXJpY1N0cmluZy5OQU1FID0gXCJOdW1lcmljU3RyaW5nXCI7XG5cbnZhciBfYSRlO1xyXG5jbGFzcyBQcmludGFibGVTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDE5O1xyXG4gICAgfVxyXG59XHJcbl9hJGUgPSBQcmludGFibGVTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuUHJpbnRhYmxlU3RyaW5nID0gX2EkZTtcclxufSkoKTtcclxuUHJpbnRhYmxlU3RyaW5nLk5BTUUgPSBcIlByaW50YWJsZVN0cmluZ1wiO1xuXG52YXIgX2EkZDtcclxuY2xhc3MgVGVsZXRleFN0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjA7XHJcbiAgICB9XHJcbn1cclxuX2EkZCA9IFRlbGV0ZXhTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVGVsZXRleFN0cmluZyA9IF9hJGQ7XHJcbn0pKCk7XHJcblRlbGV0ZXhTdHJpbmcuTkFNRSA9IFwiVGVsZXRleFN0cmluZ1wiO1xuXG52YXIgX2EkYztcclxuY2xhc3MgVmlkZW90ZXhTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDIxO1xyXG4gICAgfVxyXG59XHJcbl9hJGMgPSBWaWRlb3RleFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5WaWRlb3RleFN0cmluZyA9IF9hJGM7XHJcbn0pKCk7XHJcblZpZGVvdGV4U3RyaW5nLk5BTUUgPSBcIlZpZGVvdGV4U3RyaW5nXCI7XG5cbnZhciBfYSRiO1xyXG5jbGFzcyBJQTVTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDIyO1xyXG4gICAgfVxyXG59XHJcbl9hJGIgPSBJQTVTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuSUE1U3RyaW5nID0gX2EkYjtcclxufSkoKTtcclxuSUE1U3RyaW5nLk5BTUUgPSBcIklBNVN0cmluZ1wiO1xuXG52YXIgX2EkYTtcclxuY2xhc3MgR3JhcGhpY1N0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjU7XHJcbiAgICB9XHJcbn1cclxuX2EkYSA9IEdyYXBoaWNTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuR3JhcGhpY1N0cmluZyA9IF9hJGE7XHJcbn0pKCk7XHJcbkdyYXBoaWNTdHJpbmcuTkFNRSA9IFwiR3JhcGhpY1N0cmluZ1wiO1xuXG52YXIgX2EkOTtcclxuY2xhc3MgVmlzaWJsZVN0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjY7XHJcbiAgICB9XHJcbn1cclxuX2EkOSA9IFZpc2libGVTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVmlzaWJsZVN0cmluZyA9IF9hJDk7XHJcbn0pKCk7XHJcblZpc2libGVTdHJpbmcuTkFNRSA9IFwiVmlzaWJsZVN0cmluZ1wiO1xuXG52YXIgX2EkODtcclxuY2xhc3MgR2VuZXJhbFN0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjc7XHJcbiAgICB9XHJcbn1cclxuX2EkOCA9IEdlbmVyYWxTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuR2VuZXJhbFN0cmluZyA9IF9hJDg7XHJcbn0pKCk7XHJcbkdlbmVyYWxTdHJpbmcuTkFNRSA9IFwiR2VuZXJhbFN0cmluZ1wiO1xuXG52YXIgX2EkNztcclxuY2xhc3MgQ2hhcmFjdGVyU3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyOTtcclxuICAgIH1cclxufVxyXG5fYSQ3ID0gQ2hhcmFjdGVyU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkNoYXJhY3RlclN0cmluZyA9IF9hJDc7XHJcbn0pKCk7XHJcbkNoYXJhY3RlclN0cmluZy5OQU1FID0gXCJDaGFyYWN0ZXJTdHJpbmdcIjtcblxudmFyIF9hJDY7XHJcbmNsYXNzIFVUQ1RpbWUgZXh0ZW5kcyBWaXNpYmxlU3RyaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUsIHZhbHVlRGF0ZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnllYXIgPSAwO1xyXG4gICAgICAgIHRoaXMubW9udGggPSAwO1xyXG4gICAgICAgIHRoaXMuZGF5ID0gMDtcclxuICAgICAgICB0aGlzLmhvdXIgPSAwO1xyXG4gICAgICAgIHRoaXMubWludXRlID0gMDtcclxuICAgICAgICB0aGlzLnNlY29uZCA9IDA7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbVN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheSh2YWx1ZS5sZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlld1tpXSA9IHZhbHVlLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZURhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSh2YWx1ZURhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy50b0J1ZmZlcigpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjM7XHJcbiAgICB9XHJcbiAgICBmcm9tQnVmZmVyKGlucHV0QnVmZmVyKSB7XHJcbiAgICAgICAgdGhpcy5mcm9tU3RyaW5nKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpKSk7XHJcbiAgICB9XHJcbiAgICB0b0J1ZmZlcigpIHtcclxuICAgICAgICBjb25zdCBzdHIgPSB0aGlzLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHN0ci5sZW5ndGgpO1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB2aWV3W2ldID0gc3RyLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcclxuICAgIH1cclxuICAgIGZyb21EYXRlKGlucHV0RGF0ZSkge1xyXG4gICAgICAgIHRoaXMueWVhciA9IGlucHV0RGF0ZS5nZXRVVENGdWxsWWVhcigpO1xyXG4gICAgICAgIHRoaXMubW9udGggPSBpbnB1dERhdGUuZ2V0VVRDTW9udGgoKSArIDE7XHJcbiAgICAgICAgdGhpcy5kYXkgPSBpbnB1dERhdGUuZ2V0VVRDRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuaG91ciA9IGlucHV0RGF0ZS5nZXRVVENIb3VycygpO1xyXG4gICAgICAgIHRoaXMubWludXRlID0gaW5wdXREYXRlLmdldFVUQ01pbnV0ZXMoKTtcclxuICAgICAgICB0aGlzLnNlY29uZCA9IGlucHV0RGF0ZS5nZXRVVENTZWNvbmRzKCk7XHJcbiAgICB9XHJcbiAgICB0b0RhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIChuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsIHRoaXMubW9udGggLSAxLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQpKSk7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKGlucHV0U3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgcGFyc2VyID0gLyhcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KVovaWc7XHJcbiAgICAgICAgY29uc3QgcGFyc2VyQXJyYXkgPSBwYXJzZXIuZXhlYyhpbnB1dFN0cmluZyk7XHJcbiAgICAgICAgaWYgKHBhcnNlckFycmF5ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZUludChwYXJzZXJBcnJheVsxXSwgMTApO1xyXG4gICAgICAgIGlmICh5ZWFyID49IDUwKVxyXG4gICAgICAgICAgICB0aGlzLnllYXIgPSAxOTAwICsgeWVhcjtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMueWVhciA9IDIwMDAgKyB5ZWFyO1xyXG4gICAgICAgIHRoaXMubW9udGggPSBwYXJzZUludChwYXJzZXJBcnJheVsyXSwgMTApO1xyXG4gICAgICAgIHRoaXMuZGF5ID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbM10sIDEwKTtcclxuICAgICAgICB0aGlzLmhvdXIgPSBwYXJzZUludChwYXJzZXJBcnJheVs0XSwgMTApO1xyXG4gICAgICAgIHRoaXMubWludXRlID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbNV0sIDEwKTtcclxuICAgICAgICB0aGlzLnNlY29uZCA9IHBhcnNlSW50KHBhcnNlckFycmF5WzZdLCAxMCk7XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZyhlbmNvZGluZyA9IFwiaXNvXCIpIHtcclxuICAgICAgICBpZiAoZW5jb2RpbmcgPT09IFwiaXNvXCIpIHtcclxuICAgICAgICAgICAgY29uc3Qgb3V0cHV0QXJyYXkgPSBuZXcgQXJyYXkoNyk7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5WzBdID0gcHZ1dGlscy5wYWROdW1iZXIoKCh0aGlzLnllYXIgPCAyMDAwKSA/ICh0aGlzLnllYXIgLSAxOTAwKSA6ICh0aGlzLnllYXIgLSAyMDAwKSksIDIpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVsxXSA9IHB2dXRpbHMucGFkTnVtYmVyKHRoaXMubW9udGgsIDIpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVsyXSA9IHB2dXRpbHMucGFkTnVtYmVyKHRoaXMuZGF5LCAyKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbM10gPSBwdnV0aWxzLnBhZE51bWJlcih0aGlzLmhvdXIsIDIpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVs0XSA9IHB2dXRpbHMucGFkTnVtYmVyKHRoaXMubWludXRlLCAyKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbNV0gPSBwdnV0aWxzLnBhZE51bWJlcih0aGlzLnNlY29uZCwgMik7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5WzZdID0gXCJaXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRBcnJheS5qb2luKFwiXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoZW5jb2RpbmcpO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHt0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCl9YDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgeWVhcjogdGhpcy55ZWFyLFxyXG4gICAgICAgICAgICBtb250aDogdGhpcy5tb250aCxcclxuICAgICAgICAgICAgZGF5OiB0aGlzLmRheSxcclxuICAgICAgICAgICAgaG91cjogdGhpcy5ob3VyLFxyXG4gICAgICAgICAgICBtaW51dGU6IHRoaXMubWludXRlLFxyXG4gICAgICAgICAgICBzZWNvbmQ6IHRoaXMuc2Vjb25kLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuX2EkNiA9IFVUQ1RpbWU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVVRDVGltZSA9IF9hJDY7XHJcbn0pKCk7XHJcblVUQ1RpbWUuTkFNRSA9IFwiVVRDVGltZVwiO1xuXG52YXIgX2EkNTtcclxuY2xhc3MgR2VuZXJhbGl6ZWRUaW1lIGV4dGVuZHMgVVRDVGltZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICB2YXIgX2I7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgKF9iID0gdGhpcy5taWxsaXNlY29uZCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogKHRoaXMubWlsbGlzZWNvbmQgPSAwKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyNDtcclxuICAgIH1cclxuICAgIGZyb21EYXRlKGlucHV0RGF0ZSkge1xyXG4gICAgICAgIHN1cGVyLmZyb21EYXRlKGlucHV0RGF0ZSk7XHJcbiAgICAgICAgdGhpcy5taWxsaXNlY29uZCA9IGlucHV0RGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtcclxuICAgIH1cclxuICAgIHRvRGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gKG5ldyBEYXRlKERhdGUuVVRDKHRoaXMueWVhciwgdGhpcy5tb250aCAtIDEsIHRoaXMuZGF5LCB0aGlzLmhvdXIsIHRoaXMubWludXRlLCB0aGlzLnNlY29uZCwgdGhpcy5taWxsaXNlY29uZCkpKTtcclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoaW5wdXRTdHJpbmcpIHtcclxuICAgICAgICBsZXQgaXNVVEMgPSBmYWxzZTtcclxuICAgICAgICBsZXQgdGltZVN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGRhdGVUaW1lU3RyaW5nID0gXCJcIjtcclxuICAgICAgICBsZXQgZnJhY3Rpb25QYXJ0ID0gMDtcclxuICAgICAgICBsZXQgcGFyc2VyO1xyXG4gICAgICAgIGxldCBob3VyRGlmZmVyZW5jZSA9IDA7XHJcbiAgICAgICAgbGV0IG1pbnV0ZURpZmZlcmVuY2UgPSAwO1xyXG4gICAgICAgIGlmIChpbnB1dFN0cmluZ1tpbnB1dFN0cmluZy5sZW5ndGggLSAxXSA9PT0gXCJaXCIpIHtcclxuICAgICAgICAgICAgdGltZVN0cmluZyA9IGlucHV0U3RyaW5nLnN1YnN0cmluZygwLCBpbnB1dFN0cmluZy5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgaXNVVEMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gbmV3IE51bWJlcihpbnB1dFN0cmluZ1tpbnB1dFN0cmluZy5sZW5ndGggLSAxXSk7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihudW1iZXIudmFsdWVPZigpKSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgdGltZVN0cmluZyA9IGlucHV0U3RyaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNVVEMpIHtcclxuICAgICAgICAgICAgaWYgKHRpbWVTdHJpbmcuaW5kZXhPZihcIitcIikgIT09IC0xKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICBpZiAodGltZVN0cmluZy5pbmRleE9mKFwiLVwiKSAhPT0gLTEpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgbXVsdGlwbGllciA9IDE7XHJcbiAgICAgICAgICAgIGxldCBkaWZmZXJlbmNlUG9zaXRpb24gPSB0aW1lU3RyaW5nLmluZGV4T2YoXCIrXCIpO1xyXG4gICAgICAgICAgICBsZXQgZGlmZmVyZW5jZVN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgICAgIGlmIChkaWZmZXJlbmNlUG9zaXRpb24gPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBkaWZmZXJlbmNlUG9zaXRpb24gPSB0aW1lU3RyaW5nLmluZGV4T2YoXCItXCIpO1xyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGllciA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkaWZmZXJlbmNlUG9zaXRpb24gIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBkaWZmZXJlbmNlU3RyaW5nID0gdGltZVN0cmluZy5zdWJzdHJpbmcoZGlmZmVyZW5jZVBvc2l0aW9uICsgMSk7XHJcbiAgICAgICAgICAgICAgICB0aW1lU3RyaW5nID0gdGltZVN0cmluZy5zdWJzdHJpbmcoMCwgZGlmZmVyZW5jZVBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgIGlmICgoZGlmZmVyZW5jZVN0cmluZy5sZW5ndGggIT09IDIpICYmIChkaWZmZXJlbmNlU3RyaW5nLmxlbmd0aCAhPT0gNCkpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgbGV0IG51bWJlciA9IHBhcnNlSW50KGRpZmZlcmVuY2VTdHJpbmcuc3Vic3RyaW5nKDAsIDIpLCAxMCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obnVtYmVyLnZhbHVlT2YoKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgaG91ckRpZmZlcmVuY2UgPSBtdWx0aXBsaWVyICogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRpZmZlcmVuY2VTdHJpbmcubGVuZ3RoID09PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyID0gcGFyc2VJbnQoZGlmZmVyZW5jZVN0cmluZy5zdWJzdHJpbmcoMiwgNCksIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4obnVtYmVyLnZhbHVlT2YoKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgICAgICAgICBtaW51dGVEaWZmZXJlbmNlID0gbXVsdGlwbGllciAqIG51bWJlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZnJhY3Rpb25Qb2ludFBvc2l0aW9uID0gdGltZVN0cmluZy5pbmRleE9mKFwiLlwiKTtcclxuICAgICAgICBpZiAoZnJhY3Rpb25Qb2ludFBvc2l0aW9uID09PSAtMSlcclxuICAgICAgICAgICAgZnJhY3Rpb25Qb2ludFBvc2l0aW9uID0gdGltZVN0cmluZy5pbmRleE9mKFwiLFwiKTtcclxuICAgICAgICBpZiAoZnJhY3Rpb25Qb2ludFBvc2l0aW9uICE9PSAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCBmcmFjdGlvblBhcnRDaGVjayA9IG5ldyBOdW1iZXIoYDAke3RpbWVTdHJpbmcuc3Vic3RyaW5nKGZyYWN0aW9uUG9pbnRQb3NpdGlvbil9YCk7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihmcmFjdGlvblBhcnRDaGVjay52YWx1ZU9mKCkpKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICBmcmFjdGlvblBhcnQgPSBmcmFjdGlvblBhcnRDaGVjay52YWx1ZU9mKCk7XHJcbiAgICAgICAgICAgIGRhdGVUaW1lU3RyaW5nID0gdGltZVN0cmluZy5zdWJzdHJpbmcoMCwgZnJhY3Rpb25Qb2ludFBvc2l0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBkYXRlVGltZVN0cmluZyA9IHRpbWVTdHJpbmc7XHJcbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgKGRhdGVUaW1lU3RyaW5nLmxlbmd0aCA9PT0gOCk6XHJcbiAgICAgICAgICAgICAgICBwYXJzZXIgPSAvKFxcZHs0fSkoXFxkezJ9KShcXGR7Mn0pL2lnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiAhPT0gLTEpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgKGRhdGVUaW1lU3RyaW5nLmxlbmd0aCA9PT0gMTApOlxyXG4gICAgICAgICAgICAgICAgcGFyc2VyID0gLyhcXGR7NH0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pL2lnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZnJhY3Rpb25SZXN1bHQgPSA2MCAqIGZyYWN0aW9uUGFydDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbnV0ZSA9IE1hdGguZmxvb3IoZnJhY3Rpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uUmVzdWx0ID0gNjAgKiAoZnJhY3Rpb25SZXN1bHQgLSB0aGlzLm1pbnV0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWNvbmQgPSBNYXRoLmZsb29yKGZyYWN0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICBmcmFjdGlvblJlc3VsdCA9IDEwMDAgKiAoZnJhY3Rpb25SZXN1bHQgLSB0aGlzLnNlY29uZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taWxsaXNlY29uZCA9IE1hdGguZmxvb3IoZnJhY3Rpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgKGRhdGVUaW1lU3RyaW5nLmxlbmd0aCA9PT0gMTIpOlxyXG4gICAgICAgICAgICAgICAgcGFyc2VyID0gLyhcXGR7NH0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkvaWc7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnJhY3Rpb25Qb2ludFBvc2l0aW9uICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmcmFjdGlvblJlc3VsdCA9IDYwICogZnJhY3Rpb25QYXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kID0gTWF0aC5mbG9vcihmcmFjdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb25SZXN1bHQgPSAxMDAwICogKGZyYWN0aW9uUmVzdWx0IC0gdGhpcy5zZWNvbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWlsbGlzZWNvbmQgPSBNYXRoLmZsb29yKGZyYWN0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIChkYXRlVGltZVN0cmluZy5sZW5ndGggPT09IDE0KTpcclxuICAgICAgICAgICAgICAgIHBhcnNlciA9IC8oXFxkezR9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkvaWc7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnJhY3Rpb25Qb2ludFBvc2l0aW9uICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZyYWN0aW9uUmVzdWx0ID0gMTAwMCAqIGZyYWN0aW9uUGFydDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbGxpc2Vjb25kID0gTWF0aC5mbG9vcihmcmFjdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcGFyc2VyQXJyYXkgPSBwYXJzZXIuZXhlYyhkYXRlVGltZVN0cmluZyk7XHJcbiAgICAgICAgaWYgKHBhcnNlckFycmF5ID09PSBudWxsKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPCBwYXJzZXJBcnJheS5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGopIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIgPSBwYXJzZUludChwYXJzZXJBcnJheVtqXSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGggPSBwYXJzZUludChwYXJzZXJBcnJheVtqXSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF5ID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbal0sIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhvdXIgPSBwYXJzZUludChwYXJzZXJBcnJheVtqXSwgMTApICsgaG91ckRpZmZlcmVuY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taW51dGUgPSBwYXJzZUludChwYXJzZXJBcnJheVtqXSwgMTApICsgbWludXRlRGlmZmVyZW5jZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY29uZCA9IHBhcnNlSW50KHBhcnNlckFycmF5W2pdLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNVVEMgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXBEYXRlID0gbmV3IERhdGUodGhpcy55ZWFyLCB0aGlzLm1vbnRoLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQsIHRoaXMubWlsbGlzZWNvbmQpO1xyXG4gICAgICAgICAgICB0aGlzLnllYXIgPSB0ZW1wRGF0ZS5nZXRVVENGdWxsWWVhcigpO1xyXG4gICAgICAgICAgICB0aGlzLm1vbnRoID0gdGVtcERhdGUuZ2V0VVRDTW9udGgoKTtcclxuICAgICAgICAgICAgdGhpcy5kYXkgPSB0ZW1wRGF0ZS5nZXRVVENEYXkoKTtcclxuICAgICAgICAgICAgdGhpcy5ob3VyID0gdGVtcERhdGUuZ2V0VVRDSG91cnMoKTtcclxuICAgICAgICAgICAgdGhpcy5taW51dGUgPSB0ZW1wRGF0ZS5nZXRVVENNaW51dGVzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2Vjb25kID0gdGVtcERhdGUuZ2V0VVRDU2Vjb25kcygpO1xyXG4gICAgICAgICAgICB0aGlzLm1pbGxpc2Vjb25kID0gdGVtcERhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoZW5jb2RpbmcgPSBcImlzb1wiKSB7XHJcbiAgICAgICAgaWYgKGVuY29kaW5nID09PSBcImlzb1wiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dEFycmF5ID0gW107XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy55ZWFyLCA0KSk7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy5tb250aCwgMikpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMuZGF5LCAyKSk7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy5ob3VyLCAyKSk7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy5taW51dGUsIDIpKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChwdnV0aWxzLnBhZE51bWJlcih0aGlzLnNlY29uZCwgMikpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5taWxsaXNlY29uZCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChcIi5cIik7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMubWlsbGlzZWNvbmQsIDMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKFwiWlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dEFycmF5LmpvaW4oXCJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdXBlci50b1N0cmluZyhlbmNvZGluZyk7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kOiB0aGlzLm1pbGxpc2Vjb25kLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuX2EkNSA9IEdlbmVyYWxpemVkVGltZTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5HZW5lcmFsaXplZFRpbWUgPSBfYSQ1O1xyXG59KSgpO1xyXG5HZW5lcmFsaXplZFRpbWUuTkFNRSA9IFwiR2VuZXJhbGl6ZWRUaW1lXCI7XG5cbnZhciBfYSQ0O1xyXG5jbGFzcyBEQVRFIGV4dGVuZHMgVXRmOFN0cmluZyB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAzMTtcclxuICAgIH1cclxufVxyXG5fYSQ0ID0gREFURTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5EQVRFID0gX2EkNDtcclxufSkoKTtcclxuREFURS5OQU1FID0gXCJEQVRFXCI7XG5cbnZhciBfYSQzO1xyXG5jbGFzcyBUaW1lT2ZEYXkgZXh0ZW5kcyBVdGY4U3RyaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDMyO1xyXG4gICAgfVxyXG59XHJcbl9hJDMgPSBUaW1lT2ZEYXk7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVGltZU9mRGF5ID0gX2EkMztcclxufSkoKTtcclxuVGltZU9mRGF5Lk5BTUUgPSBcIlRpbWVPZkRheVwiO1xuXG52YXIgX2EkMjtcclxuY2xhc3MgRGF0ZVRpbWUgZXh0ZW5kcyBVdGY4U3RyaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDMzO1xyXG4gICAgfVxyXG59XHJcbl9hJDIgPSBEYXRlVGltZTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5EYXRlVGltZSA9IF9hJDI7XHJcbn0pKCk7XHJcbkRhdGVUaW1lLk5BTUUgPSBcIkRhdGVUaW1lXCI7XG5cbnZhciBfYSQxO1xyXG5jbGFzcyBEdXJhdGlvbiBleHRlbmRzIFV0ZjhTdHJpbmcge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMzQ7XHJcbiAgICB9XHJcbn1cclxuX2EkMSA9IER1cmF0aW9uO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkR1cmF0aW9uID0gX2EkMTtcclxufSkoKTtcclxuRHVyYXRpb24uTkFNRSA9IFwiRHVyYXRpb25cIjtcblxudmFyIF9hO1xyXG5jbGFzcyBUSU1FIGV4dGVuZHMgVXRmOFN0cmluZyB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxNDtcclxuICAgIH1cclxufVxyXG5fYSA9IFRJTUU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVElNRSA9IF9hO1xyXG59KSgpO1xyXG5USU1FLk5BTUUgPSBcIlRJTUVcIjtcblxuY2xhc3MgQW55IHtcclxuICAgIGNvbnN0cnVjdG9yKHsgbmFtZSA9IEVNUFRZX1NUUklORywgb3B0aW9uYWwgPSBmYWxzZSwgfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLm9wdGlvbmFsID0gb3B0aW9uYWw7XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgQ2hvaWNlIGV4dGVuZHMgQW55IHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUgPSBbXSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgUmVwZWF0ZWQgZXh0ZW5kcyBBbnkge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSA9IG5ldyBBbnkoKSwgbG9jYWwgPSBmYWxzZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sb2NhbCA9IGxvY2FsO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFJhd0RhdGEge1xyXG4gICAgY29uc3RydWN0b3IoeyBkYXRhID0gRU1QVFlfVklFVyB9ID0ge30pIHtcclxuICAgICAgICB0aGlzLmRhdGFWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBnZXQgZGF0YSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhVmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHNldCBkYXRhKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhVmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHZhbHVlKTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGVuZExlbmd0aCA9IGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGg7XHJcbiAgICAgICAgdGhpcy5kYXRhVmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKS5zdWJhcnJheShpbnB1dE9mZnNldCwgZW5kTGVuZ3RoKTtcclxuICAgICAgICByZXR1cm4gZW5kTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhVmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgIH1cclxufVxuXG5mdW5jdGlvbiBjb21wYXJlU2NoZW1hKHJvb3QsIGlucHV0RGF0YSwgaW5wdXRTY2hlbWEpIHtcclxuICAgIGlmIChpbnB1dFNjaGVtYSBpbnN0YW5jZW9mIENob2ljZSkge1xyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5wdXRTY2hlbWEudmFsdWUubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29tcGFyZVNjaGVtYShyb290LCBpbnB1dERhdGEsIGlucHV0U2NoZW1hLnZhbHVlW2pdKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC52ZXJpZmllZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zdCBfcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IFwiV3JvbmcgdmFsdWVzIGZvciBDaG9pY2UgdHlwZVwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEuaGFzT3duUHJvcGVydHkoTkFNRSkpXHJcbiAgICAgICAgICAgICAgICBfcmVzdWx0Lm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lO1xyXG4gICAgICAgICAgICByZXR1cm4gX3Jlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEgaW5zdGFuY2VvZiBBbnkpIHtcclxuICAgICAgICBpZiAoaW5wdXRTY2hlbWEuaGFzT3duUHJvcGVydHkoTkFNRSkpXHJcbiAgICAgICAgICAgIHJvb3RbaW5wdXRTY2hlbWEubmFtZV0gPSBpbnB1dERhdGE7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoKHJvb3QgaW5zdGFuY2VvZiBPYmplY3QpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIHJvb3Qgb2JqZWN0XCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoKGlucHV0RGF0YSBpbnN0YW5jZW9mIE9iamVjdCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgZGF0YVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKChpbnB1dFNjaGVtYSBpbnN0YW5jZW9mIE9iamVjdCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoKElEX0JMT0NLIGluIGlucHV0U2NoZW1hKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICgoRlJPTV9CRVIgaW4gaW5wdXRTY2hlbWEuaWRCbG9jaykgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoKFRPX0JFUiBpbiBpbnB1dFNjaGVtYS5pZEJsb2NrKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IGVuY29kZWRJZCA9IGlucHV0U2NoZW1hLmlkQmxvY2sudG9CRVIoZmFsc2UpO1xyXG4gICAgaWYgKGVuY29kZWRJZC5ieXRlTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiRXJyb3IgZW5jb2RpbmcgaWRCbG9jayBmb3IgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZWNvZGVkT2Zmc2V0ID0gaW5wdXRTY2hlbWEuaWRCbG9jay5mcm9tQkVSKGVuY29kZWRJZCwgMCwgZW5jb2RlZElkLmJ5dGVMZW5ndGgpO1xyXG4gICAgaWYgKGRlY29kZWRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiRXJyb3IgZGVjb2RpbmcgaWRCbG9jayBmb3IgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay5oYXNPd25Qcm9wZXJ0eShUQUdfQ0xBU1MpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2sudGFnQ2xhc3MgIT09IGlucHV0RGF0YS5pZEJsb2NrLnRhZ0NsYXNzKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2suaGFzT3duUHJvcGVydHkoVEFHX05VTUJFUikgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay50YWdOdW1iZXIgIT09IGlucHV0RGF0YS5pZEJsb2NrLnRhZ051bWJlcikge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLmhhc093blByb3BlcnR5KElTX0NPTlNUUlVDVEVEKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLmlzQ29uc3RydWN0ZWQgIT09IGlucHV0RGF0YS5pZEJsb2NrLmlzQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoIShJU19IRVhfT05MWSBpbiBpbnB1dFNjaGVtYS5pZEJsb2NrKSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2suaXNIZXhPbmx5ICE9PSBpbnB1dERhdGEuaWRCbG9jay5pc0hleE9ubHkpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay5pc0hleE9ubHkpIHtcclxuICAgICAgICBpZiAoKFZBTFVFX0hFWF9WSUVXIGluIGlucHV0U2NoZW1hLmlkQmxvY2spID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hVmlldyA9IGlucHV0U2NoZW1hLmlkQmxvY2sudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgIGNvbnN0IGFzbjFWaWV3ID0gaW5wdXREYXRhLmlkQmxvY2sudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgIGlmIChzY2hlbWFWaWV3Lmxlbmd0aCAhPT0gYXNuMVZpZXcubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY2hlbWFWaWV3Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChzY2hlbWFWaWV3W2ldICE9PSBhc24xVmlld1sxXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICBpbnB1dFNjaGVtYS5uYW1lID0gaW5wdXRTY2hlbWEubmFtZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBFTVBUWV9TVFJJTkcpO1xyXG4gICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKVxyXG4gICAgICAgICAgICByb290W2lucHV0U2NoZW1hLm5hbWVdID0gaW5wdXREYXRhO1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hIGluc3RhbmNlb2YgdHlwZVN0b3JlLkNvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgbGV0IGFkbWlzc2lvbiA9IDA7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHtcclxuICAgICAgICAgICAgICAgIGVycm9yOiBcIlVua25vd24gZXJyb3JcIixcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGV0IG1heExlbmd0aCA9IGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoO1xyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdIGluc3RhbmNlb2YgUmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgIG1heExlbmd0aCA9IGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF4TGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aCA9PT0gMCkgJiZcclxuICAgICAgICAgICAgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoICE9PSAwKSkge1xyXG4gICAgICAgICAgICBsZXQgX29wdGlvbmFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgX29wdGlvbmFsID0gX29wdGlvbmFsICYmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlW2ldLm9wdGlvbmFsIHx8IGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKF9vcHRpb25hbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByb290LmVycm9yID0gXCJJbmNvbnNpc3RlbnQgb2JqZWN0IGxlbmd0aFwiO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4TGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKChpIC0gYWRtaXNzaW9uKSA+PSBpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlW2ldLm9wdGlvbmFsID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9yZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICByb290LmVycm9yID0gXCJJbmNvbnNpc3RlbnQgbGVuZ3RoIGJldHdlZW4gQVNOLjEgZGF0YSBhbmQgc2NoZW1hXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290W2lucHV0U2NoZW1hLm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc3VsdC5uYW1lID0gaW5wdXRTY2hlbWEubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Jlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdIGluc3RhbmNlb2YgUmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wYXJlU2NoZW1hKHJvb3QsIGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlW2ldLCBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnZlcmlmaWVkID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS5vcHRpb25hbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkbWlzc2lvbisrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RbaW5wdXRTY2hlbWEubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoTkFNRSBpbiBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdKSAmJiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS5uYW1lLmxlbmd0aCA+IDApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnJheVJvb3QgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChMT0NBTCBpbiBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdKSAmJiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS5sb2NhbCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVJvb3QgPSBpbnB1dERhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5Um9vdCA9IHJvb3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJyYXlSb290W2lucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ubmFtZV0gPT09IFwidW5kZWZpbmVkXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVJvb3RbaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS5uYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVJvb3RbaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS5uYW1lXS5wdXNoKGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wYXJlU2NoZW1hKHJvb3QsIGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlW2kgLSBhZG1pc3Npb25dLCBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnZlcmlmaWVkID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVtpXS5vcHRpb25hbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkbWlzc2lvbisrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RbaW5wdXRTY2hlbWEubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXN1bHQudmVyaWZpZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IF9yZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290W2lucHV0U2NoZW1hLm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIF9yZXN1bHQubmFtZSA9IGlucHV0U2NoZW1hLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIF9yZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiB0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLnByaW1pdGl2ZVNjaGVtYSAmJlxyXG4gICAgICAgIChWQUxVRV9IRVhfVklFVyBpbiBpbnB1dERhdGEudmFsdWVCbG9jaykpIHtcclxuICAgICAgICBjb25zdCBhc24xID0gbG9jYWxGcm9tQkVSKGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldyk7XHJcbiAgICAgICAgaWYgKGFzbjEub2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCBfcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiBhc24xLnJlc3VsdFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RbaW5wdXRTY2hlbWEubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgX3Jlc3VsdC5uYW1lID0gaW5wdXRTY2hlbWEubmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gX3Jlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVTY2hlbWEocm9vdCwgYXNuMS5yZXN1bHQsIGlucHV0U2NoZW1hLnByaW1pdGl2ZVNjaGVtYSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHZlcmlmaWVkOiB0cnVlLFxyXG4gICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiB2ZXJpZnlTY2hlbWEoaW5wdXRCdWZmZXIsIGlucHV0U2NoZW1hKSB7XHJcbiAgICBpZiAoKGlucHV0U2NoZW1hIGluc3RhbmNlb2YgT2JqZWN0KSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWEgdHlwZVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXNuMSA9IGxvY2FsRnJvbUJFUihwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcikpO1xyXG4gICAgaWYgKGFzbjEub2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiBhc24xLnJlc3VsdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29tcGFyZVNjaGVtYShhc24xLnJlc3VsdCwgYXNuMS5yZXN1bHQsIGlucHV0U2NoZW1hKTtcclxufVxuXG5leHBvcnQgeyBBbnksIEJhc2VCbG9jaywgQmFzZVN0cmluZ0Jsb2NrLCBCaXRTdHJpbmcsIEJtcFN0cmluZywgQm9vbGVhbiwgQ2hhcmFjdGVyU3RyaW5nLCBDaG9pY2UsIENvbnN0cnVjdGVkLCBEQVRFLCBEYXRlVGltZSwgRHVyYXRpb24sIEVuZE9mQ29udGVudCwgRW51bWVyYXRlZCwgR2VuZXJhbFN0cmluZywgR2VuZXJhbGl6ZWRUaW1lLCBHcmFwaGljU3RyaW5nLCBIZXhCbG9jaywgSUE1U3RyaW5nLCBJbnRlZ2VyLCBOdWxsLCBOdW1lcmljU3RyaW5nLCBPYmplY3RJZGVudGlmaWVyLCBPY3RldFN0cmluZywgUHJpbWl0aXZlLCBQcmludGFibGVTdHJpbmcsIFJhd0RhdGEsIFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllciwgUmVwZWF0ZWQsIFNlcXVlbmNlLCBTZXQsIFRJTUUsIFRlbGV0ZXhTdHJpbmcsIFRpbWVPZkRheSwgVVRDVGltZSwgVW5pdmVyc2FsU3RyaW5nLCBVdGY4U3RyaW5nLCBWYWx1ZUJsb2NrLCBWaWRlb3RleFN0cmluZywgVmlld1dyaXRlciwgVmlzaWJsZVN0cmluZywgY29tcGFyZVNjaGVtYSwgZnJvbUJFUiwgdmVyaWZ5U2NoZW1hIH07XG4iLCAiZXhwb3J0IHZhciBBc25UeXBlVHlwZXM7XG4oZnVuY3Rpb24gKEFzblR5cGVUeXBlcykge1xuICAgIEFzblR5cGVUeXBlc1tBc25UeXBlVHlwZXNbXCJTZXF1ZW5jZVwiXSA9IDBdID0gXCJTZXF1ZW5jZVwiO1xuICAgIEFzblR5cGVUeXBlc1tBc25UeXBlVHlwZXNbXCJTZXRcIl0gPSAxXSA9IFwiU2V0XCI7XG4gICAgQXNuVHlwZVR5cGVzW0FzblR5cGVUeXBlc1tcIkNob2ljZVwiXSA9IDJdID0gXCJDaG9pY2VcIjtcbn0pKEFzblR5cGVUeXBlcyB8fCAoQXNuVHlwZVR5cGVzID0ge30pKTtcbmV4cG9ydCB2YXIgQXNuUHJvcFR5cGVzO1xuKGZ1bmN0aW9uIChBc25Qcm9wVHlwZXMpIHtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiQW55XCJdID0gMV0gPSBcIkFueVwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJCb29sZWFuXCJdID0gMl0gPSBcIkJvb2xlYW5cIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiT2N0ZXRTdHJpbmdcIl0gPSAzXSA9IFwiT2N0ZXRTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiQml0U3RyaW5nXCJdID0gNF0gPSBcIkJpdFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJJbnRlZ2VyXCJdID0gNV0gPSBcIkludGVnZXJcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiRW51bWVyYXRlZFwiXSA9IDZdID0gXCJFbnVtZXJhdGVkXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIk9iamVjdElkZW50aWZpZXJcIl0gPSA3XSA9IFwiT2JqZWN0SWRlbnRpZmllclwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJVdGY4U3RyaW5nXCJdID0gOF0gPSBcIlV0ZjhTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiQm1wU3RyaW5nXCJdID0gOV0gPSBcIkJtcFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJVbml2ZXJzYWxTdHJpbmdcIl0gPSAxMF0gPSBcIlVuaXZlcnNhbFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJOdW1lcmljU3RyaW5nXCJdID0gMTFdID0gXCJOdW1lcmljU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlByaW50YWJsZVN0cmluZ1wiXSA9IDEyXSA9IFwiUHJpbnRhYmxlU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlRlbGV0ZXhTdHJpbmdcIl0gPSAxM10gPSBcIlRlbGV0ZXhTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVmlkZW90ZXhTdHJpbmdcIl0gPSAxNF0gPSBcIlZpZGVvdGV4U3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIklBNVN0cmluZ1wiXSA9IDE1XSA9IFwiSUE1U3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkdyYXBoaWNTdHJpbmdcIl0gPSAxNl0gPSBcIkdyYXBoaWNTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVmlzaWJsZVN0cmluZ1wiXSA9IDE3XSA9IFwiVmlzaWJsZVN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJHZW5lcmFsU3RyaW5nXCJdID0gMThdID0gXCJHZW5lcmFsU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkNoYXJhY3RlclN0cmluZ1wiXSA9IDE5XSA9IFwiQ2hhcmFjdGVyU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlVUQ1RpbWVcIl0gPSAyMF0gPSBcIlVUQ1RpbWVcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiR2VuZXJhbGl6ZWRUaW1lXCJdID0gMjFdID0gXCJHZW5lcmFsaXplZFRpbWVcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiREFURVwiXSA9IDIyXSA9IFwiREFURVwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJUaW1lT2ZEYXlcIl0gPSAyM10gPSBcIlRpbWVPZkRheVwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJEYXRlVGltZVwiXSA9IDI0XSA9IFwiRGF0ZVRpbWVcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiRHVyYXRpb25cIl0gPSAyNV0gPSBcIkR1cmF0aW9uXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlRJTUVcIl0gPSAyNl0gPSBcIlRJTUVcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiTnVsbFwiXSA9IDI3XSA9IFwiTnVsbFwiO1xufSkoQXNuUHJvcFR5cGVzIHx8IChBc25Qcm9wVHlwZXMgPSB7fSkpO1xuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgeyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgfSBmcm9tIFwicHZ0c3V0aWxzXCI7XG5leHBvcnQgY2xhc3MgQml0U3RyaW5nIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJhbXMsIHVudXNlZEJpdHMgPSAwKSB7XG4gICAgICAgIHRoaXMudW51c2VkQml0cyA9IDA7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1zID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mcm9tTnVtYmVyKHBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2UocGFyYW1zKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudW51c2VkQml0cyA9IHVudXNlZEJpdHM7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJVbnN1cHBvcnRlZCB0eXBlIG9mICdwYXJhbXMnIGFyZ3VtZW50IGZvciBCaXRTdHJpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnJvbUFTTihhc24pIHtcbiAgICAgICAgaWYgKCEoYXNuIGluc3RhbmNlb2YgYXNuMWpzLkJpdFN0cmluZykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCAnYXNuJyBpcyBub3QgaW5zdGFuY2Ugb2YgQVNOLjEgQml0U3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudW51c2VkQml0cyA9IGFzbi52YWx1ZUJsb2NrLnVudXNlZEJpdHM7XG4gICAgICAgIHRoaXMudmFsdWUgPSBhc24udmFsdWVCbG9jay52YWx1ZUhleDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRvQVNOKCkge1xuICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5CaXRTdHJpbmcoeyB1bnVzZWRCaXRzOiB0aGlzLnVudXNlZEJpdHMsIHZhbHVlSGV4OiB0aGlzLnZhbHVlIH0pO1xuICAgIH1cbiAgICB0b1NjaGVtYShuYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgYXNuMWpzLkJpdFN0cmluZyh7IG5hbWUgfSk7XG4gICAgfVxuICAgIHRvTnVtYmVyKCkge1xuICAgICAgICBsZXQgcmVzID0gXCJcIjtcbiAgICAgICAgY29uc3QgdWludEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy52YWx1ZSk7XG4gICAgICAgIGZvciAoY29uc3Qgb2N0ZXQgb2YgdWludEFycmF5KSB7XG4gICAgICAgICAgICByZXMgKz0gb2N0ZXQudG9TdHJpbmcoMikucGFkU3RhcnQoOCwgXCIwXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJlcyA9IHJlcy5zcGxpdChcIlwiKS5yZXZlcnNlKCkuam9pbihcIlwiKTtcbiAgICAgICAgaWYgKHRoaXMudW51c2VkQml0cykge1xuICAgICAgICAgICAgcmVzID0gcmVzLnNsaWNlKHRoaXMudW51c2VkQml0cykucGFkU3RhcnQodGhpcy51bnVzZWRCaXRzLCBcIjBcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHJlcywgMik7XG4gICAgfVxuICAgIGZyb21OdW1iZXIodmFsdWUpIHtcbiAgICAgICAgbGV0IGJpdHMgPSB2YWx1ZS50b1N0cmluZygyKTtcbiAgICAgICAgY29uc3Qgb2N0ZXRTaXplID0gKGJpdHMubGVuZ3RoICsgNykgPj4gMztcbiAgICAgICAgdGhpcy51bnVzZWRCaXRzID0gKG9jdGV0U2l6ZSA8PCAzKSAtIGJpdHMubGVuZ3RoO1xuICAgICAgICBjb25zdCBvY3RldHMgPSBuZXcgVWludDhBcnJheShvY3RldFNpemUpO1xuICAgICAgICBiaXRzID0gYml0cy5wYWRTdGFydChvY3RldFNpemUgPDwgMywgXCIwXCIpLnNwbGl0KFwiXCIpLnJldmVyc2UoKS5qb2luKFwiXCIpO1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBvY3RldFNpemUpIHtcbiAgICAgICAgICAgIG9jdGV0c1tpbmRleF0gPSBwYXJzZUludChiaXRzLnNsaWNlKGluZGV4IDw8IDMsIChpbmRleCA8PCAzKSArIDgpLCAyKTtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IG9jdGV0cy5idWZmZXI7XG4gICAgfVxufVxuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgeyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgfSBmcm9tIFwicHZ0c3V0aWxzXCI7XG5leHBvcnQgY2xhc3MgT2N0ZXRTdHJpbmcge1xuICAgIGdldCBieXRlTGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5idWZmZXIuYnl0ZUxlbmd0aDtcbiAgICB9XG4gICAgZ2V0IGJ5dGVPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihwYXJhbSkge1xuICAgICAgICBpZiAodHlwZW9mIHBhcmFtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihwYXJhbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKHBhcmFtKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIocGFyYW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwYXJhbSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHBhcmFtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZyb21BU04oYXNuKSB7XG4gICAgICAgIGlmICghKGFzbiBpbnN0YW5jZW9mIGFzbjFqcy5PY3RldFN0cmluZykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCAnYXNuJyBpcyBub3QgaW5zdGFuY2Ugb2YgQVNOLjEgT2N0ZXRTdHJpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWZmZXIgPSBhc24udmFsdWVCbG9jay52YWx1ZUhleDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRvQVNOKCkge1xuICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5PY3RldFN0cmluZyh7IHZhbHVlSGV4OiB0aGlzLmJ1ZmZlciB9KTtcbiAgICB9XG4gICAgdG9TY2hlbWEobmFtZSkge1xuICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5PY3RldFN0cmluZyh7IG5hbWUgfSk7XG4gICAgfVxufVxuIiwgImV4cG9ydCAqIGZyb20gXCIuL2JpdF9zdHJpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL29jdGV0X3N0cmluZ1wiO1xuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgeyBBc25Qcm9wVHlwZXMgfSBmcm9tIFwiLi9lbnVtc1wiO1xuaW1wb3J0IHsgT2N0ZXRTdHJpbmcgfSBmcm9tIFwiLi90eXBlcy9pbmRleFwiO1xuZXhwb3J0IGNvbnN0IEFzbkFueUNvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlIGluc3RhbmNlb2YgYXNuMWpzLk51bGwgPyBudWxsIDogdmFsdWUudmFsdWVCZWZvcmVEZWNvZGVWaWV3LFxuICAgIHRvQVNOOiAodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5OdWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NoZW1hID0gYXNuMWpzLmZyb21CRVIodmFsdWUpO1xuICAgICAgICBpZiAoc2NoZW1hLnJlc3VsdC5lcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHNjaGVtYS5yZXN1bHQuZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY2hlbWEucmVzdWx0O1xuICAgIH0sXG59O1xuZXhwb3J0IGNvbnN0IEFzbkludGVnZXJDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoID49IDRcbiAgICAgICAgPyB2YWx1ZS52YWx1ZUJsb2NrLnRvU3RyaW5nKClcbiAgICAgICAgOiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlRGVjLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuSW50ZWdlcih7IHZhbHVlOiArdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkVudW1lcmF0ZWRDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlRGVjLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuRW51bWVyYXRlZCh7IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLkludGVnZXIoeyB2YWx1ZUhleDogdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkludGVnZXJCaWdJbnRDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS50b0JpZ0ludCgpLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IGFzbjFqcy5JbnRlZ2VyLmZyb21CaWdJbnQodmFsdWUpLFxufTtcbmV4cG9ydCBjb25zdCBBc25CaXRTdHJpbmdDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLkJpdFN0cmluZyh7IHZhbHVlSGV4OiB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuT2JqZWN0SWRlbnRpZmllckNvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudG9TdHJpbmcoKSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLk9iamVjdElkZW50aWZpZXIoeyB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuQm9vbGVhbkNvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWUsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5Cb29sZWFuKHsgdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbk9jdGV0U3RyaW5nQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleFZpZXcsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5PY3RldFN0cmluZyh7IHZhbHVlSGV4OiB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuQ29uc3RydWN0ZWRPY3RldFN0cmluZ0NvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IG5ldyBPY3RldFN0cmluZyh2YWx1ZS5nZXRWYWx1ZSgpKSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiB2YWx1ZS50b0FTTigpLFxufTtcbmZ1bmN0aW9uIGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihBc24xVHlwZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZSxcbiAgICAgICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IEFzbjFUeXBlKHsgdmFsdWUgfSksXG4gICAgfTtcbn1cbmV4cG9ydCBjb25zdCBBc25VdGY4U3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5VdGY4U3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25CbXBTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLkJtcFN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuVW5pdmVyc2FsU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5Vbml2ZXJzYWxTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzbk51bWVyaWNTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLk51bWVyaWNTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzblByaW50YWJsZVN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuUHJpbnRhYmxlU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25UZWxldGV4U3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5UZWxldGV4U3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25WaWRlb3RleFN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuVmlkZW90ZXhTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzbklBNVN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuSUE1U3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25HcmFwaGljU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5HcmFwaGljU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25WaXNpYmxlU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5WaXNpYmxlU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25HZW5lcmFsU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5HZW5lcmFsU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25DaGFyYWN0ZXJTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLkNoYXJhY3RlclN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuVVRDVGltZUNvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnRvRGF0ZSgpLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuVVRDVGltZSh7IHZhbHVlRGF0ZTogdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkdlbmVyYWxpemVkVGltZUNvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnRvRGF0ZSgpLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuR2VuZXJhbGl6ZWRUaW1lKHsgdmFsdWVEYXRlOiB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuTnVsbENvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAoKSA9PiBudWxsLFxuICAgIHRvQVNOOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgYXNuMWpzLk51bGwoKTtcbiAgICB9LFxufTtcbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0Q29udmVydGVyKHR5cGUpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuQW55OlxuICAgICAgICAgICAgcmV0dXJuIEFzbkFueUNvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuQml0U3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkJpdFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuQm1wU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkJtcFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuQm9vbGVhbjpcbiAgICAgICAgICAgIHJldHVybiBBc25Cb29sZWFuQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5DaGFyYWN0ZXJTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuQ2hhcmFjdGVyU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5FbnVtZXJhdGVkOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkVudW1lcmF0ZWRDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkdlbmVyYWxTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuR2VuZXJhbFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuR2VuZXJhbGl6ZWRUaW1lOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkdlbmVyYWxpemVkVGltZUNvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuR3JhcGhpY1N0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25HcmFwaGljU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5JQTVTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuSUE1U3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5JbnRlZ2VyOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkludGVnZXJDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLk51bGw6XG4gICAgICAgICAgICByZXR1cm4gQXNuTnVsbENvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuTnVtZXJpY1N0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25OdW1lcmljU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5PYmplY3RJZGVudGlmaWVyOlxuICAgICAgICAgICAgcmV0dXJuIEFzbk9iamVjdElkZW50aWZpZXJDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbk9jdGV0U3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5QcmludGFibGVTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuUHJpbnRhYmxlU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5UZWxldGV4U3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzblRlbGV0ZXhTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlVUQ1RpbWU6XG4gICAgICAgICAgICByZXR1cm4gQXNuVVRDVGltZUNvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuVW5pdmVyc2FsU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzblVuaXZlcnNhbFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuVXRmOFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25VdGY4U3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5WaWRlb3RleFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25WaWRlb3RleFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuVmlzaWJsZVN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25WaXNpYmxlU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBpc0NvbnZlcnRpYmxlKHRhcmdldCkge1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSBcImZ1bmN0aW9uXCIgJiYgdGFyZ2V0LnByb3RvdHlwZSkge1xuICAgICAgICBpZiAodGFyZ2V0LnByb3RvdHlwZS50b0FTTiAmJiB0YXJnZXQucHJvdG90eXBlLmZyb21BU04pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzQ29udmVydGlibGUodGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAhISh0YXJnZXQgJiYgdHlwZW9mIHRhcmdldCA9PT0gXCJvYmplY3RcIiAmJiBcInRvQVNOXCIgaW4gdGFyZ2V0ICYmIFwiZnJvbUFTTlwiIGluIHRhcmdldCk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzVHlwZU9mQXJyYXkodGFyZ2V0KSB7XG4gICAgdmFyIF9hO1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KTtcbiAgICAgICAgaWYgKCgoX2EgPSBwcm90byA9PT0gbnVsbCB8fCBwcm90byA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJvdG8ucHJvdG90eXBlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29uc3RydWN0b3IpID09PSBBcnJheSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzVHlwZU9mQXJyYXkocHJvdG8pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheUVxdWFsKGJ5dGVzMSwgYnl0ZXMyKSB7XG4gICAgaWYgKCEoYnl0ZXMxICYmIGJ5dGVzMikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoYnl0ZXMxLmJ5dGVMZW5ndGggIT09IGJ5dGVzMi5ieXRlTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgYjEgPSBuZXcgVWludDhBcnJheShieXRlczEpO1xuICAgIGNvbnN0IGIyID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzMS5ieXRlTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGIxW2ldICE9PSBiMltpXSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgeyBBc25Qcm9wVHlwZXMsIEFzblR5cGVUeXBlcyB9IGZyb20gXCIuL2VudW1zXCI7XG5pbXBvcnQgeyBpc0NvbnZlcnRpYmxlIH0gZnJvbSBcIi4vaGVscGVyXCI7XG5leHBvcnQgY2xhc3MgQXNuU2NoZW1hU3RvcmFnZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBuZXcgV2Vha01hcCgpO1xuICAgIH1cbiAgICBoYXModGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zLmhhcyh0YXJnZXQpO1xuICAgIH1cbiAgICBnZXQodGFyZ2V0LCBjaGVja1NjaGVtYSA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuaXRlbXMuZ2V0KHRhcmdldCk7XG4gICAgICAgIGlmICghc2NoZW1hKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgc2NoZW1hIGZvciAnJHt0YXJnZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWV9JyB0YXJnZXRgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hlY2tTY2hlbWEgJiYgIXNjaGVtYS5zY2hlbWEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2NoZW1hICcke3RhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZX0nIGRvZXNuJ3QgY29udGFpbiBBU04uMSBzY2hlbWEuIENhbGwgJ0FzblNjaGVtYVN0b3JhZ2UuY2FjaGUnLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgfVxuICAgIGNhY2hlKHRhcmdldCkge1xuICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLmdldCh0YXJnZXQpO1xuICAgICAgICBpZiAoIXNjaGVtYS5zY2hlbWEpIHtcbiAgICAgICAgICAgIHNjaGVtYS5zY2hlbWEgPSB0aGlzLmNyZWF0ZSh0YXJnZXQsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNyZWF0ZURlZmF1bHQodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHtcbiAgICAgICAgICAgIHR5cGU6IEFzblR5cGVUeXBlcy5TZXF1ZW5jZSxcbiAgICAgICAgICAgIGl0ZW1zOiB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcGFyZW50U2NoZW1hID0gdGhpcy5maW5kUGFyZW50U2NoZW1hKHRhcmdldCk7XG4gICAgICAgIGlmIChwYXJlbnRTY2hlbWEpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2NoZW1hLCBwYXJlbnRTY2hlbWEpO1xuICAgICAgICAgICAgc2NoZW1hLml0ZW1zID0gT2JqZWN0LmFzc2lnbih7fSwgc2NoZW1hLml0ZW1zLCBwYXJlbnRTY2hlbWEuaXRlbXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgfVxuICAgIGNyZWF0ZSh0YXJnZXQsIHVzZU5hbWVzKSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuaXRlbXMuZ2V0KHRhcmdldCkgfHwgdGhpcy5jcmVhdGVEZWZhdWx0KHRhcmdldCk7XG4gICAgICAgIGNvbnN0IGFzbjFWYWx1ZSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEuaXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBzY2hlbWEuaXRlbXNba2V5XTtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB1c2VOYW1lcyA/IGtleSA6IFwiXCI7XG4gICAgICAgICAgICBsZXQgYXNuMUl0ZW07XG4gICAgICAgICAgICBpZiAodHlwZW9mIChpdGVtLnR5cGUpID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgQXNuMVR5cGVOYW1lID0gQXNuUHJvcFR5cGVzW2l0ZW0udHlwZV07XG4gICAgICAgICAgICAgICAgY29uc3QgQXNuMVR5cGUgPSBhc24xanNbQXNuMVR5cGVOYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAoIUFzbjFUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBBU04xIGNsYXNzIGJ5IG5hbWUgJyR7QXNuMVR5cGVOYW1lfSdgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBuZXcgQXNuMVR5cGUoeyBuYW1lIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNDb252ZXJ0aWJsZShpdGVtLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgaXRlbS50eXBlKCk7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBpbnN0YW5jZS50b1NjaGVtYShuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW0ub3B0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2NoZW1hID0gdGhpcy5nZXQoaXRlbS50eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbVNjaGVtYS50eXBlID09PSBBc25UeXBlVHlwZXMuQ2hvaWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gbmV3IGFzbjFqcy5BbnkoeyBuYW1lIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSB0aGlzLmNyZWF0ZShpdGVtLnR5cGUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgYXNuMUl0ZW0ubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBuZXcgYXNuMWpzLkFueSh7IG5hbWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvcHRpb25hbCA9ICEhaXRlbS5vcHRpb25hbCB8fCBpdGVtLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGl0ZW0ucmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICBhc24xSXRlbS5uYW1lID0gXCJcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBDb250YWluZXIgPSBpdGVtLnJlcGVhdGVkID09PSBcInNldFwiXG4gICAgICAgICAgICAgICAgICAgID8gYXNuMWpzLlNldFxuICAgICAgICAgICAgICAgICAgICA6IGFzbjFqcy5TZXF1ZW5jZTtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IG5ldyBDb250YWluZXIoe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGFzbjFqcy5SZXBlYXRlZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYXNuMUl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtLmNvbnRleHQgIT09IG51bGwgJiYgaXRlbS5jb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pbXBsaWNpdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0udHlwZSA9PT0gXCJudW1iZXJcIiB8fCBpc0NvbnZlcnRpYmxlKGl0ZW0udHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lciA9IGl0ZW0ucmVwZWF0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFzbjFqcy5Db25zdHJ1Y3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYXNuMWpzLlByaW1pdGl2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKG5ldyBDb250YWluZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRCbG9jazoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBpdGVtLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FjaGUoaXRlbS50eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzUmVwZWF0ZWQgPSAhIWl0ZW0ucmVwZWF0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSAhaXNSZXBlYXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5nZXQoaXRlbS50eXBlLCB0cnVlKS5zY2hlbWFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFzbjFJdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBcInZhbHVlQmxvY2tcIiBpbiB2YWx1ZSA/IHZhbHVlLnZhbHVlQmxvY2sudmFsdWUgOiB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKG5ldyBhc24xanMuQ29uc3RydWN0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICFpc1JlcGVhdGVkID8gbmFtZSA6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRCbG9jazoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBpdGVtLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKG5ldyBhc24xanMuQ29uc3RydWN0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBpdGVtLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFthc24xSXRlbV0sXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc24xSXRlbS5vcHRpb25hbCA9IG9wdGlvbmFsO1xuICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKGFzbjFJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHNjaGVtYS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEFzblR5cGVUeXBlcy5TZXF1ZW5jZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5TZXF1ZW5jZSh7IHZhbHVlOiBhc24xVmFsdWUsIG5hbWU6IFwiXCIgfSk7XG4gICAgICAgICAgICBjYXNlIEFzblR5cGVUeXBlcy5TZXQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuU2V0KHsgdmFsdWU6IGFzbjFWYWx1ZSwgbmFtZTogXCJcIiB9KTtcbiAgICAgICAgICAgIGNhc2UgQXNuVHlwZVR5cGVzLkNob2ljZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5DaG9pY2UoeyB2YWx1ZTogYXNuMVZhbHVlLCBuYW1lOiBcIlwiIH0pO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIEFTTjEgdHlwZSBpbiB1c2VgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXQodGFyZ2V0LCBzY2hlbWEpIHtcbiAgICAgICAgdGhpcy5pdGVtcy5zZXQodGFyZ2V0LCBzY2hlbWEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZmluZFBhcmVudFNjaGVtYSh0YXJnZXQpIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCk7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuaXRlbXMuZ2V0KHBhcmVudCk7XG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hIHx8IHRoaXMuZmluZFBhcmVudFNjaGVtYShwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBBc25TY2hlbWFTdG9yYWdlIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5leHBvcnQgY29uc3Qgc2NoZW1hU3RvcmFnZSA9IG5ldyBBc25TY2hlbWFTdG9yYWdlKCk7XG4iLCAiaW1wb3J0ICogYXMgY29udmVydGVycyBmcm9tIFwiLi9jb252ZXJ0ZXJzXCI7XG5pbXBvcnQgeyBBc25UeXBlVHlwZXMgfSBmcm9tIFwiLi9lbnVtc1wiO1xuaW1wb3J0IHsgc2NoZW1hU3RvcmFnZSB9IGZyb20gXCIuL3N0b3JhZ2VcIjtcbmV4cG9ydCBjb25zdCBBc25UeXBlID0gKG9wdGlvbnMpID0+ICh0YXJnZXQpID0+IHtcbiAgICBsZXQgc2NoZW1hO1xuICAgIGlmICghc2NoZW1hU3RvcmFnZS5oYXModGFyZ2V0KSkge1xuICAgICAgICBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmNyZWF0ZURlZmF1bHQodGFyZ2V0KTtcbiAgICAgICAgc2NoZW1hU3RvcmFnZS5zZXQodGFyZ2V0LCBzY2hlbWEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0KTtcbiAgICB9XG4gICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIG9wdGlvbnMpO1xufTtcbmV4cG9ydCBjb25zdCBBc25DaG9pY2VUeXBlID0gKCkgPT4gQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5DaG9pY2UgfSk7XG5leHBvcnQgY29uc3QgQXNuU2V0VHlwZSA9IChvcHRpb25zKSA9PiBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLlNldCwgLi4ub3B0aW9ucyB9KTtcbmV4cG9ydCBjb25zdCBBc25TZXF1ZW5jZVR5cGUgPSAob3B0aW9ucykgPT4gQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5TZXF1ZW5jZSwgLi4ub3B0aW9ucyB9KTtcbmV4cG9ydCBjb25zdCBBc25Qcm9wID0gKG9wdGlvbnMpID0+ICh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XG4gICAgbGV0IHNjaGVtYTtcbiAgICBpZiAoIXNjaGVtYVN0b3JhZ2UuaGFzKHRhcmdldC5jb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5jcmVhdGVEZWZhdWx0KHRhcmdldC5jb25zdHJ1Y3Rvcik7XG4gICAgICAgIHNjaGVtYVN0b3JhZ2Uuc2V0KHRhcmdldC5jb25zdHJ1Y3Rvciwgc2NoZW1hKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuZ2V0KHRhcmdldC5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICAgIGNvbnN0IGNvcHlPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyk7XG4gICAgaWYgKHR5cGVvZiBjb3B5T3B0aW9ucy50eXBlID09PSBcIm51bWJlclwiICYmICFjb3B5T3B0aW9ucy5jb252ZXJ0ZXIpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdENvbnZlcnRlciA9IGNvbnZlcnRlcnMuZGVmYXVsdENvbnZlcnRlcihvcHRpb25zLnR5cGUpO1xuICAgICAgICBpZiAoIWRlZmF1bHRDb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBkZWZhdWx0IGNvbnZlcnRlciBmb3IgcHJvcGVydHkgJyR7cHJvcGVydHlLZXl9JyBvZiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvcHlPcHRpb25zLmNvbnZlcnRlciA9IGRlZmF1bHRDb252ZXJ0ZXI7XG4gICAgfVxuICAgIHNjaGVtYS5pdGVtc1twcm9wZXJ0eUtleV0gPSBjb3B5T3B0aW9ucztcbn07XG4iLCAiZXhwb3J0IGNsYXNzIEFzblNjaGVtYVZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5zY2hlbWFzID0gW107XG4gICAgfVxufVxuIiwgImV4cG9ydCAqIGZyb20gXCIuL3NjaGVtYV92YWxpZGF0aW9uXCI7XG4iLCAiaW1wb3J0ICogYXMgYXNuMWpzIGZyb20gXCJhc24xanNcIjtcbmltcG9ydCB7IEFzblByb3BUeXBlcywgQXNuVHlwZVR5cGVzIH0gZnJvbSBcIi4vZW51bXNcIjtcbmltcG9ydCAqIGFzIGNvbnZlcnRlcnMgZnJvbSBcIi4vY29udmVydGVyc1wiO1xuaW1wb3J0IHsgQXNuU2NoZW1hVmFsaWRhdGlvbkVycm9yIH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5pbXBvcnQgeyBpc0NvbnZlcnRpYmxlLCBpc1R5cGVPZkFycmF5IH0gZnJvbSBcIi4vaGVscGVyXCI7XG5pbXBvcnQgeyBzY2hlbWFTdG9yYWdlIH0gZnJvbSBcIi4vc3RvcmFnZVwiO1xuZXhwb3J0IGNsYXNzIEFzblBhcnNlciB7XG4gICAgc3RhdGljIHBhcnNlKGRhdGEsIHRhcmdldCkge1xuICAgICAgICBjb25zdCBhc24xUGFyc2VkID0gYXNuMWpzLmZyb21CRVIoZGF0YSk7XG4gICAgICAgIGlmIChhc24xUGFyc2VkLnJlc3VsdC5lcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFzbjFQYXJzZWQucmVzdWx0LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSB0aGlzLmZyb21BU04oYXNuMVBhcnNlZC5yZXN1bHQsIHRhcmdldCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tQVNOKGFzbjFTY2hlbWEsIHRhcmdldCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoaXNDb252ZXJ0aWJsZSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBuZXcgdGFyZ2V0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmZyb21BU04oYXNuMVNjaGVtYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmdldCh0YXJnZXQpO1xuICAgICAgICAgICAgc2NoZW1hU3RvcmFnZS5jYWNoZSh0YXJnZXQpO1xuICAgICAgICAgICAgbGV0IHRhcmdldFNjaGVtYSA9IHNjaGVtYS5zY2hlbWE7XG4gICAgICAgICAgICBpZiAoYXNuMVNjaGVtYS5jb25zdHJ1Y3RvciA9PT0gYXNuMWpzLkNvbnN0cnVjdGVkICYmIHNjaGVtYS50eXBlICE9PSBBc25UeXBlVHlwZXMuQ2hvaWNlKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0U2NoZW1hID0gbmV3IGFzbjFqcy5Db25zdHJ1Y3RlZCh7XG4gICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBhc24xU2NoZW1hLmlkQmxvY2sudGFnTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc2NoZW1hLnNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYS5pdGVtcykge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgYXNuMVNjaGVtYVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFzbjFDb21wYXJlZFNjaGVtYSA9IGFzbjFqcy5jb21wYXJlU2NoZW1hKHt9LCBhc24xU2NoZW1hLCB0YXJnZXRTY2hlbWEpO1xuICAgICAgICAgICAgaWYgKCFhc24xQ29tcGFyZWRTY2hlbWEudmVyaWZpZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNuU2NoZW1hVmFsaWRhdGlvbkVycm9yKGBEYXRhIGRvZXMgbm90IG1hdGNoIHRvICR7dGFyZ2V0Lm5hbWV9IEFTTjEgc2NoZW1hLiAke2FzbjFDb21wYXJlZFNjaGVtYS5yZXN1bHQuZXJyb3J9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXMgPSBuZXcgdGFyZ2V0KCk7XG4gICAgICAgICAgICBpZiAoaXNUeXBlT2ZBcnJheSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoXCJ2YWx1ZVwiIGluIGFzbjFTY2hlbWEudmFsdWVCbG9jayAmJiBBcnJheS5pc0FycmF5KGFzbjFTY2hlbWEudmFsdWVCbG9jay52YWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBpdGVtcyBmcm9tIHRoZSBBU04uMSBwYXJzZWQgdmFsdWUuIEFTTi4xIG9iamVjdCBpcyBub3QgY29uc3RydWN0ZWQuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1UeXBlID0gc2NoZW1hLml0ZW1UeXBlO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbVR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udmVydGVyID0gY29udmVydGVycy5kZWZhdWx0Q29udmVydGVyKGl0ZW1UeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBkZWZhdWx0IGNvbnZlcnRlciBmb3IgYXJyYXkgaXRlbSBvZiAke3RhcmdldC5uYW1lfSBBU04xIHNjaGVtYWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuZnJvbShhc24xU2NoZW1hLnZhbHVlQmxvY2sudmFsdWUsIChlbGVtZW50KSA9PiBjb252ZXJ0ZXIuZnJvbUFTTihlbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmZyb20oYXNuMVNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLCAoZWxlbWVudCkgPT4gdGhpcy5mcm9tQVNOKGVsZW1lbnQsIGl0ZW1UeXBlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNuMVNjaGVtYVZhbHVlID0gYXNuMUNvbXBhcmVkU2NoZW1hLnJlc3VsdFtrZXldO1xuICAgICAgICAgICAgICAgIGlmICghYXNuMVNjaGVtYVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFJdGVtID0gc2NoZW1hLml0ZW1zW2tleV07XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hSXRlbVR5cGUgPSBzY2hlbWFJdGVtLnR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWFJdGVtVHlwZSA9PT0gXCJudW1iZXJcIiB8fCBpc0NvbnZlcnRpYmxlKHNjaGVtYUl0ZW1UeXBlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZXIgPSAoX2EgPSBzY2hlbWFJdGVtLmNvbnZlcnRlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKGlzQ29udmVydGlibGUoc2NoZW1hSXRlbVR5cGUpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBzY2hlbWFJdGVtVHlwZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnZlcnRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29udmVydGVyIGlzIGVtcHR5XCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLnJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5pbXBsaWNpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lciA9IHNjaGVtYUl0ZW0ucmVwZWF0ZWQgPT09IFwic2VxdWVuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFzbjFqcy5TZXF1ZW5jZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFzbjFqcy5TZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbSA9IG5ldyBDb250YWluZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtLnZhbHVlQmxvY2sgPSBhc24xU2NoZW1hVmFsdWUudmFsdWVCbG9jaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdJdGVtQXNuID0gYXNuMWpzLmZyb21CRVIobmV3SXRlbS50b0JFUihmYWxzZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdJdGVtQXNuLm9mZnNldCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgdGhlIGNoaWxkIGl0ZW0uICR7bmV3SXRlbUFzbi5yZXN1bHQuZXJyb3J9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKFwidmFsdWVcIiBpbiBuZXdJdGVtQXNuLnJlc3VsdC52YWx1ZUJsb2NrICYmIEFycmF5LmlzQXJyYXkobmV3SXRlbUFzbi5yZXN1bHQudmFsdWVCbG9jay52YWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgaXRlbXMgZnJvbSB0aGUgQVNOLjEgcGFyc2VkIHZhbHVlLiBBU04uMSBvYmplY3QgaXMgbm90IGNvbnN0cnVjdGVkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBuZXdJdGVtQXNuLnJlc3VsdC52YWx1ZUJsb2NrLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1trZXldID0gQXJyYXkuZnJvbSh2YWx1ZSwgKGVsZW1lbnQpID0+IGNvbnZlcnRlci5mcm9tQVNOKGVsZW1lbnQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1trZXldID0gQXJyYXkuZnJvbShhc24xU2NoZW1hVmFsdWUsIChlbGVtZW50KSA9PiBjb252ZXJ0ZXIuZnJvbUFTTihlbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBhc24xU2NoZW1hVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5pbXBsaWNpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdJdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0NvbnZlcnRpYmxlKHNjaGVtYUl0ZW1UeXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtID0gbmV3IHNjaGVtYUl0ZW1UeXBlKCkudG9TY2hlbWEoXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBc24xVHlwZU5hbWUgPSBBc25Qcm9wVHlwZXNbc2NoZW1hSXRlbVR5cGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBc24xVHlwZSA9IGFzbjFqc1tBc24xVHlwZU5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFzbjFUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgJyR7QXNuMVR5cGVOYW1lfScgY2xhc3MgZnJvbSBhc24xanMgbW9kdWxlYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SXRlbSA9IG5ldyBBc24xVHlwZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtLnZhbHVlQmxvY2sgPSB2YWx1ZS52YWx1ZUJsb2NrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXNuMWpzLmZyb21CRVIobmV3SXRlbS50b0JFUihmYWxzZSkpLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc1trZXldID0gY29udmVydGVyLmZyb21BU04odmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5yZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFzbjFTY2hlbWFWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IGxpc3Qgb2YgaXRlbXMgZnJvbSB0aGUgQVNOLjEgcGFyc2VkIHZhbHVlLiBBU04uMSB2YWx1ZSBzaG91bGQgYmUgaXRlcmFibGUuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzW2tleV0gPSBBcnJheS5mcm9tKGFzbjFTY2hlbWFWYWx1ZSwgKGVsZW1lbnQpID0+IHRoaXMuZnJvbUFTTihlbGVtZW50LCBzY2hlbWFJdGVtVHlwZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzW2tleV0gPSB0aGlzLmZyb21BU04oYXNuMVNjaGVtYVZhbHVlLCBzY2hlbWFJdGVtVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXNuU2NoZW1hVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgZXJyb3Iuc2NoZW1hcy5wdXNoKHRhcmdldC5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgKiBhcyBjb252ZXJ0ZXJzIGZyb20gXCIuL2NvbnZlcnRlcnNcIjtcbmltcG9ydCB7IEFzblByb3BUeXBlcywgQXNuVHlwZVR5cGVzIH0gZnJvbSBcIi4vZW51bXNcIjtcbmltcG9ydCB7IGlzQ29udmVydGlibGUsIGlzQXJyYXlFcXVhbCB9IGZyb20gXCIuL2hlbHBlclwiO1xuaW1wb3J0IHsgc2NoZW1hU3RvcmFnZSB9IGZyb20gXCIuL3N0b3JhZ2VcIjtcbmV4cG9ydCBjbGFzcyBBc25TZXJpYWxpemVyIHtcbiAgICBzdGF0aWMgc2VyaWFsaXplKG9iaikge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgYXNuMWpzLkJhc2VCbG9jaykge1xuICAgICAgICAgICAgcmV0dXJuIG9iai50b0JFUihmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudG9BU04ob2JqKS50b0JFUihmYWxzZSk7XG4gICAgfVxuICAgIHN0YXRpYyB0b0FTTihvYmopIHtcbiAgICAgICAgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiICYmIGlzQ29udmVydGlibGUob2JqKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9iai50b0FTTigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKG9iaiAmJiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAxIHNob3VsZCBiZSB0eXBlIG9mIE9iamVjdC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gb2JqLmNvbnN0cnVjdG9yO1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmdldCh0YXJnZXQpO1xuICAgICAgICBzY2hlbWFTdG9yYWdlLmNhY2hlKHRhcmdldCk7XG4gICAgICAgIGxldCBhc24xVmFsdWUgPSBbXTtcbiAgICAgICAgaWYgKHNjaGVtYS5pdGVtVHlwZSkge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGFyYW1ldGVyIDEgc2hvdWxkIGJlIHR5cGUgb2YgQXJyYXkuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEuaXRlbVR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZXIgPSBjb252ZXJ0ZXJzLmRlZmF1bHRDb252ZXJ0ZXIoc2NoZW1hLml0ZW1UeXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnZlcnRlcikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgZGVmYXVsdCBjb252ZXJ0ZXIgZm9yIGFycmF5IGl0ZW0gb2YgJHt0YXJnZXQubmFtZX0gQVNOMSBzY2hlbWFgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXNuMVZhbHVlID0gb2JqLm1hcCgobykgPT4gY29udmVydGVyLnRvQVNOKG8pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzbjFWYWx1ZSA9IG9iai5tYXAoKG8pID0+IHRoaXMudG9Bc25JdGVtKHsgdHlwZTogc2NoZW1hLml0ZW1UeXBlIH0sIFwiW11cIiwgdGFyZ2V0LCBvKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFJdGVtID0gc2NoZW1hLml0ZW1zW2tleV07XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqUHJvcCA9IG9ialtrZXldO1xuICAgICAgICAgICAgICAgIGlmIChvYmpQcm9wID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgfHwgc2NoZW1hSXRlbS5kZWZhdWx0VmFsdWUgPT09IG9ialByb3BcbiAgICAgICAgICAgICAgICAgICAgfHwgKHR5cGVvZiBzY2hlbWFJdGVtLmRlZmF1bHRWYWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygb2JqUHJvcCA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgaXNBcnJheUVxdWFsKHRoaXMuc2VyaWFsaXplKHNjaGVtYUl0ZW0uZGVmYXVsdFZhbHVlKSwgdGhpcy5zZXJpYWxpemUob2JqUHJvcCkpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYXNuMUl0ZW0gPSBBc25TZXJpYWxpemVyLnRvQXNuSXRlbShzY2hlbWFJdGVtLCBrZXksIHRhcmdldCwgb2JqUHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWFJdGVtLmNvbnRleHQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYUl0ZW0uaW1wbGljaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2NoZW1hSXRlbS5yZXBlYXRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICh0eXBlb2Ygc2NoZW1hSXRlbS50eXBlID09PSBcIm51bWJlclwiIHx8IGlzQ29udmVydGlibGUoc2NoZW1hSXRlbS50eXBlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnZhbHVlSGV4ID0gYXNuMUl0ZW0gaW5zdGFuY2VvZiBhc24xanMuTnVsbCA/IGFzbjFJdGVtLnZhbHVlQmVmb3JlRGVjb2RlVmlldyA6IGFzbjFJdGVtLnZhbHVlQmxvY2sudG9CRVIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgYXNuMWpzLlByaW1pdGl2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsOiBzY2hlbWFJdGVtLm9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogc2NoZW1hSXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgYXNuMWpzLkNvbnN0cnVjdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWw6IHNjaGVtYUl0ZW0ub3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBzY2hlbWFJdGVtLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhc24xSXRlbS52YWx1ZUJsb2NrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKG5ldyBhc24xanMuQ29uc3RydWN0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsOiBzY2hlbWFJdGVtLm9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogc2NoZW1hSXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFthc24xSXRlbV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hSXRlbS5yZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUgPSBhc24xVmFsdWUuY29uY2F0KGFzbjFJdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKGFzbjFJdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFzblNjaGVtYTtcbiAgICAgICAgc3dpdGNoIChzY2hlbWEudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBBc25UeXBlVHlwZXMuU2VxdWVuY2U6XG4gICAgICAgICAgICAgICAgYXNuU2NoZW1hID0gbmV3IGFzbjFqcy5TZXF1ZW5jZSh7IHZhbHVlOiBhc24xVmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFzblR5cGVUeXBlcy5TZXQ6XG4gICAgICAgICAgICAgICAgYXNuU2NoZW1hID0gbmV3IGFzbjFqcy5TZXQoeyB2YWx1ZTogYXNuMVZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBc25UeXBlVHlwZXMuQ2hvaWNlOlxuICAgICAgICAgICAgICAgIGlmICghYXNuMVZhbHVlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2NoZW1hICcke3RhcmdldC5uYW1lfScgaGFzIHdyb25nIGRhdGEuIENob2ljZSBjYW5ub3QgYmUgZW1wdHkuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzblNjaGVtYSA9IGFzbjFWYWx1ZVswXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXNuU2NoZW1hO1xuICAgIH1cbiAgICBzdGF0aWMgdG9Bc25JdGVtKHNjaGVtYUl0ZW0sIGtleSwgdGFyZ2V0LCBvYmpQcm9wKSB7XG4gICAgICAgIGxldCBhc24xSXRlbTtcbiAgICAgICAgaWYgKHR5cGVvZiAoc2NoZW1hSXRlbS50eXBlKSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgY29uc3QgY29udmVydGVyID0gc2NoZW1hSXRlbS5jb252ZXJ0ZXI7XG4gICAgICAgICAgICBpZiAoIWNvbnZlcnRlcikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvcGVydHkgJyR7a2V5fScgZG9lc24ndCBoYXZlIGNvbnZlcnRlciBmb3IgdHlwZSAke0FzblByb3BUeXBlc1tzY2hlbWFJdGVtLnR5cGVdfSBpbiBzY2hlbWEgJyR7dGFyZ2V0Lm5hbWV9J2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNjaGVtYUl0ZW0ucmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkob2JqUHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAnb2JqUHJvcCcgc2hvdWxkIGJlIHR5cGUgb2YgQXJyYXkuXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IEFycmF5LmZyb20ob2JqUHJvcCwgKGVsZW1lbnQpID0+IGNvbnZlcnRlci50b0FTTihlbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyID0gc2NoZW1hSXRlbS5yZXBlYXRlZCA9PT0gXCJzZXF1ZW5jZVwiXG4gICAgICAgICAgICAgICAgICAgID8gYXNuMWpzLlNlcXVlbmNlXG4gICAgICAgICAgICAgICAgICAgIDogYXNuMWpzLlNldDtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IG5ldyBDb250YWluZXIoe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IGNvbnZlcnRlci50b0FTTihvYmpQcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLnJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9ialByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ29ialByb3AnIHNob3VsZCBiZSB0eXBlIG9mIEFycmF5LlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBBcnJheS5mcm9tKG9ialByb3AsIChlbGVtZW50KSA9PiB0aGlzLnRvQVNOKGVsZW1lbnQpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBDb250YWluZXIgPSBzY2hlbWFJdGVtLnJlcGVhdGVkID09PSBcInNlcXVlbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgPyBhc24xanMuU2VxdWVuY2VcbiAgICAgICAgICAgICAgICAgICAgOiBhc24xanMuU2V0O1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gbmV3IENvbnRhaW5lcih7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gdGhpcy50b0FTTihvYmpQcm9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXNuMUl0ZW07XG4gICAgfVxufVxuIiwgImV4cG9ydCBjbGFzcyBBc25BcnJheSBleHRlbmRzIEFycmF5IHtcbiAgICBjb25zdHJ1Y3RvcihpdGVtcyA9IFtdKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbXMgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHN1cGVyKGl0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0ICogYXMgYXNuMWpzIGZyb20gXCJhc24xanNcIjtcbmltcG9ydCB7IEJ1ZmZlclNvdXJjZUNvbnZlcnRlciB9IGZyb20gXCJwdnRzdXRpbHNcIjtcbmltcG9ydCB7IEFzblBhcnNlciB9IGZyb20gXCIuL3BhcnNlclwiO1xuaW1wb3J0IHsgQXNuU2VyaWFsaXplciB9IGZyb20gXCIuL3NlcmlhbGl6ZXJcIjtcbmV4cG9ydCBjbGFzcyBBc25Db252ZXJ0IHtcbiAgICBzdGF0aWMgc2VyaWFsaXplKG9iaikge1xuICAgICAgICByZXR1cm4gQXNuU2VyaWFsaXplci5zZXJpYWxpemUob2JqKTtcbiAgICB9XG4gICAgc3RhdGljIHBhcnNlKGRhdGEsIHRhcmdldCkge1xuICAgICAgICByZXR1cm4gQXNuUGFyc2VyLnBhcnNlKGRhdGEsIHRhcmdldCk7XG4gICAgfVxuICAgIHN0YXRpYyB0b1N0cmluZyhkYXRhKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci5pc0J1ZmZlclNvdXJjZShkYXRhKVxuICAgICAgICAgICAgPyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKVxuICAgICAgICAgICAgOiBBc25Db252ZXJ0LnNlcmlhbGl6ZShkYXRhKTtcbiAgICAgICAgY29uc3QgYXNuID0gYXNuMWpzLmZyb21CRVIoYnVmKTtcbiAgICAgICAgaWYgKGFzbi5vZmZzZXQgPT09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBkZWNvZGUgQVNOLjEgZGF0YS4gJHthc24ucmVzdWx0LmVycm9yfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc24ucmVzdWx0LnRvU3RyaW5nKCk7XG4gICAgfVxufVxuIiwgImV4cG9ydCAqIGZyb20gXCIuL2NvbnZlcnRlcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzL2luZGV4XCI7XG5leHBvcnQgeyBBc25Qcm9wLCBBc25UeXBlLCBBc25DaG9pY2VUeXBlLCBBc25TZXF1ZW5jZVR5cGUsIEFzblNldFR5cGUgfSBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5leHBvcnQgeyBBc25UeXBlVHlwZXMsIEFzblByb3BUeXBlcyB9IGZyb20gXCIuL2VudW1zXCI7XG5leHBvcnQgeyBBc25QYXJzZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmV4cG9ydCB7IEFzblNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9zZXJpYWxpemVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lcnJvcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL29iamVjdHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbnZlcnRcIjtcbiIsICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cblxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXG5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wsIEl0ZXJhdG9yICovXG5cbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xuICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XG4gIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XG4gICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XG4gICAgICB9XG4gICAgICByZXR1cm4gdDtcbiAgfVxuICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XG4gIHZhciB0ID0ge307XG4gIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgdFtwXSA9IHNbcF07XG4gIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgfVxuICByZXR1cm4gdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19lc0RlY29yYXRlKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XG4gIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxuICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xuICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcbiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XG4gIHZhciBfLCBkb25lID0gZmFsc2U7XG4gIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgY29udGV4dCA9IHt9O1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XG4gICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcbiAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XG4gICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcbiAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xuICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xuICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcbiAgICAgIH1cbiAgfVxuICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XG4gIGRvbmUgPSB0cnVlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcbiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XG4gIH1cbiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19wcm9wS2V5KHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xuICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBnLm5leHQgPSB2ZXJiKDApLCBnW1widGhyb3dcIl0gPSB2ZXJiKDEpLCBnW1wicmV0dXJuXCJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICB9XG59XG5cbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICBvW2syXSA9IG1ba107XG59KTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XG4gIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcbiAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIW0pIHJldHVybiBvO1xuICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgdHJ5IHtcbiAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICB9XG4gIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICB9XG4gICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgfVxuICByZXR1cm4gYXI7XG59XG5cbi8qKiBAZGVwcmVjYXRlZCAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xuICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcbiAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcbiAgcmV0dXJuIGFyO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcbiAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XG4gIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxuICAgICAgICAgIHJba10gPSBhW2pdO1xuICByZXR1cm4gcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcbiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcbiAgICAgIH1cbiAgfVxuICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XG4gIHZhciBpLCBwO1xuICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XG4gIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcbiAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxuICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xuICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxuICByZXR1cm4gY29va2VkO1xufTtcblxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgb1tcImRlZmF1bHRcIl0gPSB2O1xufTtcblxudmFyIG93bktleXMgPSBmdW5jdGlvbihvKSB7XG4gIG93bktleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiAobykge1xuICAgIHZhciBhciA9IFtdO1xuICAgIGZvciAodmFyIGsgaW4gbykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBrKSkgYXJbYXIubGVuZ3RoXSA9IGs7XG4gICAgcmV0dXJuIGFyO1xuICB9O1xuICByZXR1cm4gb3duS2V5cyhvKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XG4gIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrID0gb3duS2V5cyhtb2QpLCBpID0gMDsgaSA8IGsubGVuZ3RoOyBpKyspIGlmIChrW2ldICE9PSBcImRlZmF1bHRcIikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrW2ldKTtcbiAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcbiAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcbiAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xuICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcbiAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlKGVudiwgdmFsdWUsIGFzeW5jKSB7XG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZC5cIik7XG4gICAgdmFyIGRpc3Bvc2UsIGlubmVyO1xuICAgIGlmIChhc3luYykge1xuICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jRGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XG4gICAgfVxuICAgIGlmIChkaXNwb3NlID09PSB2b2lkIDApIHtcbiAgICAgIGlmICghU3ltYm9sLmRpc3Bvc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuZGlzcG9zZSBpcyBub3QgZGVmaW5lZC5cIik7XG4gICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmRpc3Bvc2VdO1xuICAgICAgaWYgKGFzeW5jKSBpbm5lciA9IGRpc3Bvc2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGlzcG9zZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IG5vdCBkaXNwb3NhYmxlLlwiKTtcbiAgICBpZiAoaW5uZXIpIGRpc3Bvc2UgPSBmdW5jdGlvbigpIHsgdHJ5IHsgaW5uZXIuY2FsbCh0aGlzKTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7IH0gfTtcbiAgICBlbnYuc3RhY2sucHVzaCh7IHZhbHVlOiB2YWx1ZSwgZGlzcG9zZTogZGlzcG9zZSwgYXN5bmM6IGFzeW5jIH0pO1xuICB9XG4gIGVsc2UgaWYgKGFzeW5jKSB7XG4gICAgZW52LnN0YWNrLnB1c2goeyBhc3luYzogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbnZhciBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fZGlzcG9zZVJlc291cmNlcyhlbnYpIHtcbiAgZnVuY3Rpb24gZmFpbChlKSB7XG4gICAgZW52LmVycm9yID0gZW52Lmhhc0Vycm9yID8gbmV3IF9TdXBwcmVzc2VkRXJyb3IoZSwgZW52LmVycm9yLCBcIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC5cIikgOiBlO1xuICAgIGVudi5oYXNFcnJvciA9IHRydWU7XG4gIH1cbiAgdmFyIHIsIHMgPSAwO1xuICBmdW5jdGlvbiBuZXh0KCkge1xuICAgIHdoaWxlIChyID0gZW52LnN0YWNrLnBvcCgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIXIuYXN5bmMgJiYgcyA9PT0gMSkgcmV0dXJuIHMgPSAwLCBlbnYuc3RhY2sucHVzaChyKSwgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihuZXh0KTtcbiAgICAgICAgaWYgKHIuZGlzcG9zZSkge1xuICAgICAgICAgIHZhciByZXN1bHQgPSByLmRpc3Bvc2UuY2FsbChyLnZhbHVlKTtcbiAgICAgICAgICBpZiAoci5hc3luYykgcmV0dXJuIHMgfD0gMiwgUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbihuZXh0LCBmdW5jdGlvbihlKSB7IGZhaWwoZSk7IHJldHVybiBuZXh0KCk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgcyB8PSAxO1xuICAgICAgfVxuICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgZmFpbChlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMgPT09IDEpIHJldHVybiBlbnYuaGFzRXJyb3IgPyBQcm9taXNlLnJlamVjdChlbnYuZXJyb3IpIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgaWYgKGVudi5oYXNFcnJvcikgdGhyb3cgZW52LmVycm9yO1xuICB9XG4gIHJldHVybiBuZXh0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbihwYXRoLCBwcmVzZXJ2ZUpzeCkge1xuICBpZiAodHlwZW9mIHBhdGggPT09IFwic3RyaW5nXCIgJiYgL15cXC5cXC4/XFwvLy50ZXN0KHBhdGgpKSB7XG4gICAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXC4odHN4KSR8KCg/OlxcLmQpPykoKD86XFwuW14uL10rPyk/KVxcLihbY21dPyl0cyQvaSwgZnVuY3Rpb24gKG0sIHRzeCwgZCwgZXh0LCBjbSkge1xuICAgICAgICAgIHJldHVybiB0c3ggPyBwcmVzZXJ2ZUpzeCA/IFwiLmpzeFwiIDogXCIuanNcIiA6IGQgJiYgKCFleHQgfHwgIWNtKSA/IG0gOiAoZCArIGV4dCArIFwiLlwiICsgY20udG9Mb3dlckNhc2UoKSArIFwianNcIik7XG4gICAgICB9KTtcbiAgfVxuICByZXR1cm4gcGF0aDtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBfX2V4dGVuZHMsXG4gIF9fYXNzaWduLFxuICBfX3Jlc3QsXG4gIF9fZGVjb3JhdGUsXG4gIF9fcGFyYW0sXG4gIF9fZXNEZWNvcmF0ZSxcbiAgX19ydW5Jbml0aWFsaXplcnMsXG4gIF9fcHJvcEtleSxcbiAgX19zZXRGdW5jdGlvbk5hbWUsXG4gIF9fbWV0YWRhdGEsXG4gIF9fYXdhaXRlcixcbiAgX19nZW5lcmF0b3IsXG4gIF9fY3JlYXRlQmluZGluZyxcbiAgX19leHBvcnRTdGFyLFxuICBfX3ZhbHVlcyxcbiAgX19yZWFkLFxuICBfX3NwcmVhZCxcbiAgX19zcHJlYWRBcnJheXMsXG4gIF9fc3ByZWFkQXJyYXksXG4gIF9fYXdhaXQsXG4gIF9fYXN5bmNHZW5lcmF0b3IsXG4gIF9fYXN5bmNEZWxlZ2F0b3IsXG4gIF9fYXN5bmNWYWx1ZXMsXG4gIF9fbWFrZVRlbXBsYXRlT2JqZWN0LFxuICBfX2ltcG9ydFN0YXIsXG4gIF9faW1wb3J0RGVmYXVsdCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcbiAgX19jbGFzc1ByaXZhdGVGaWVsZEluLFxuICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSxcbiAgX19kaXNwb3NlUmVzb3VyY2VzLFxuICBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbixcbn07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjAsIFBlY3VsaWFyIFZlbnR1cmVzLCBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICovXG5cbmNsYXNzIEpzb25FcnJvciBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIGlubmVyRXJyb3IpIHtcclxuICAgICAgICBzdXBlcihpbm5lckVycm9yXHJcbiAgICAgICAgICAgID8gYCR7bWVzc2FnZX0uIFNlZSB0aGUgaW5uZXIgZXhjZXB0aW9uIGZvciBtb3JlIGRldGFpbHMuYFxyXG4gICAgICAgICAgICA6IG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgICAgICAgdGhpcy5pbm5lckVycm9yID0gaW5uZXJFcnJvcjtcclxuICAgIH1cclxufVxuXG5jbGFzcyBUcmFuc2Zvcm1FcnJvciBleHRlbmRzIEpzb25FcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihzY2hlbWEsIG1lc3NhZ2UsIGlubmVyRXJyb3IpIHtcclxuICAgICAgICBzdXBlcihtZXNzYWdlLCBpbm5lckVycm9yKTtcclxuICAgICAgICB0aGlzLnNjaGVtYSA9IHNjaGVtYTtcclxuICAgIH1cclxufVxuXG5jbGFzcyBQYXJzZXJFcnJvciBleHRlbmRzIFRyYW5zZm9ybUVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSwgbWVzc2FnZSwgaW5uZXJFcnJvcikge1xyXG4gICAgICAgIHN1cGVyKHNjaGVtYSwgYEpTT04gZG9lc24ndCBtYXRjaCB0byAnJHtzY2hlbWEudGFyZ2V0Lm5hbWV9JyBzY2hlbWEuICR7bWVzc2FnZX1gLCBpbm5lckVycm9yKTtcclxuICAgIH1cclxufVxuXG5jbGFzcyBWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBKc29uRXJyb3Ige1xyXG59XG5cbmNsYXNzIFNlcmlhbGl6ZXJFcnJvciBleHRlbmRzIEpzb25FcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihzY2hlbWFOYW1lLCBtZXNzYWdlLCBpbm5lckVycm9yKSB7XHJcbiAgICAgICAgc3VwZXIoYENhbm5vdCBzZXJpYWxpemUgYnkgJyR7c2NoZW1hTmFtZX0nIHNjaGVtYS4gJHttZXNzYWdlfWAsIGlubmVyRXJyb3IpO1xyXG4gICAgICAgIHRoaXMuc2NoZW1hTmFtZSA9IHNjaGVtYU5hbWU7XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgS2V5RXJyb3IgZXh0ZW5kcyBQYXJzZXJFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihzY2hlbWEsIGtleXMsIGVycm9ycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIoc2NoZW1hLCBcIlNvbWUga2V5cyBkb2Vzbid0IG1hdGNoIHRvIHNjaGVtYVwiKTtcclxuICAgICAgICB0aGlzLmtleXMgPSBrZXlzO1xyXG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xyXG4gICAgfVxyXG59XG5cbnZhciBKc29uUHJvcFR5cGVzO1xyXG4oZnVuY3Rpb24gKEpzb25Qcm9wVHlwZXMpIHtcclxuICAgIEpzb25Qcm9wVHlwZXNbSnNvblByb3BUeXBlc1tcIkFueVwiXSA9IDBdID0gXCJBbnlcIjtcclxuICAgIEpzb25Qcm9wVHlwZXNbSnNvblByb3BUeXBlc1tcIkJvb2xlYW5cIl0gPSAxXSA9IFwiQm9vbGVhblwiO1xyXG4gICAgSnNvblByb3BUeXBlc1tKc29uUHJvcFR5cGVzW1wiTnVtYmVyXCJdID0gMl0gPSBcIk51bWJlclwiO1xyXG4gICAgSnNvblByb3BUeXBlc1tKc29uUHJvcFR5cGVzW1wiU3RyaW5nXCJdID0gM10gPSBcIlN0cmluZ1wiO1xyXG59KShKc29uUHJvcFR5cGVzIHx8IChKc29uUHJvcFR5cGVzID0ge30pKTtcblxuZnVuY3Rpb24gY2hlY2tUeXBlKHZhbHVlLCB0eXBlKSB7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICBjYXNlIEpzb25Qcm9wVHlwZXMuQm9vbGVhbjpcclxuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCI7XHJcbiAgICAgICAgY2FzZSBKc29uUHJvcFR5cGVzLk51bWJlcjpcclxuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIjtcclxuICAgICAgICBjYXNlIEpzb25Qcm9wVHlwZXMuU3RyaW5nOlxyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuZnVuY3Rpb24gdGhyb3dJZlR5cGVJc1dyb25nKHZhbHVlLCB0eXBlKSB7XHJcbiAgICBpZiAoIWNoZWNrVHlwZSh2YWx1ZSwgdHlwZSkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBWYWx1ZSBtdXN0IGJlICR7SnNvblByb3BUeXBlc1t0eXBlXX1gKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBpc0NvbnZlcnRpYmxlKHRhcmdldCkge1xyXG4gICAgaWYgKHRhcmdldCAmJiB0YXJnZXQucHJvdG90eXBlKSB7XHJcbiAgICAgICAgaWYgKHRhcmdldC5wcm90b3R5cGUudG9KU09OICYmIHRhcmdldC5wcm90b3R5cGUuZnJvbUpTT04pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gaXNDb252ZXJ0aWJsZSh0YXJnZXQucHJvdG90eXBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICByZXR1cm4gISEodGFyZ2V0ICYmIHRhcmdldC50b0pTT04gJiYgdGFyZ2V0LmZyb21KU09OKTtcclxuICAgIH1cclxufVxuXG5jbGFzcyBKc29uU2NoZW1hU3RvcmFnZSB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLml0ZW1zID0gbmV3IE1hcCgpO1xyXG4gICAgfVxyXG4gICAgaGFzKHRhcmdldCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zLmhhcyh0YXJnZXQpIHx8ICEhdGhpcy5maW5kUGFyZW50U2NoZW1hKHRhcmdldCk7XHJcbiAgICB9XHJcbiAgICBnZXQodGFyZ2V0KSB7XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5pdGVtcy5nZXQodGFyZ2V0KSB8fCB0aGlzLmZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KTtcclxuICAgICAgICBpZiAoIXNjaGVtYSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IHNjaGVtYSBmb3IgY3VycmVudCB0YXJnZXRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzY2hlbWE7XHJcbiAgICB9XHJcbiAgICBjcmVhdGUodGFyZ2V0KSB7XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hID0geyBuYW1lczoge30gfTtcclxuICAgICAgICBjb25zdCBwYXJlbnRTY2hlbWEgPSB0aGlzLmZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KTtcclxuICAgICAgICBpZiAocGFyZW50U2NoZW1hKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2NoZW1hLCBwYXJlbnRTY2hlbWEpO1xyXG4gICAgICAgICAgICBzY2hlbWEubmFtZXMgPSB7fTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBuYW1lIGluIHBhcmVudFNjaGVtYS5uYW1lcykge1xyXG4gICAgICAgICAgICAgICAgc2NoZW1hLm5hbWVzW25hbWVdID0gT2JqZWN0LmFzc2lnbih7fSwgcGFyZW50U2NoZW1hLm5hbWVzW25hbWVdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBzY2hlbWEudGFyZ2V0ID0gdGFyZ2V0O1xyXG4gICAgICAgIHJldHVybiBzY2hlbWE7XHJcbiAgICB9XHJcbiAgICBzZXQodGFyZ2V0LCBzY2hlbWEpIHtcclxuICAgICAgICB0aGlzLml0ZW1zLnNldCh0YXJnZXQsIHNjaGVtYSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcbiAgICBmaW5kUGFyZW50U2NoZW1hKHRhcmdldCkge1xyXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHRhcmdldC5fX3Byb3RvX187XHJcbiAgICAgICAgaWYgKHBhcmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLml0ZW1zLmdldChwYXJlbnQpO1xyXG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hIHx8IHRoaXMuZmluZFBhcmVudFNjaGVtYShwYXJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxufVxuXG5jb25zdCBERUZBVUxUX1NDSEVNQSA9IFwiZGVmYXVsdFwiO1xyXG5jb25zdCBzY2hlbWFTdG9yYWdlID0gbmV3IEpzb25TY2hlbWFTdG9yYWdlKCk7XG5cbmNsYXNzIFBhdHRlcm5WYWxpZGF0aW9uIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhdHRlcm4pIHtcclxuICAgICAgICB0aGlzLnBhdHRlcm4gPSBuZXcgUmVnRXhwKHBhdHRlcm4pO1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgICAgICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCh0aGlzLnBhdHRlcm4uc291cmNlLCB0aGlzLnBhdHRlcm4uZmxhZ3MpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcIkluY29taW5nIHZhbHVlIG11c3QgYmUgc3RyaW5nXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXBhdHRlcm4uZXhlYyh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVmFsdWUgZG9lc24ndCBtYXRjaCB0byBwYXR0ZXJuICcke3BhdHRlcm4udG9TdHJpbmcoKX0nYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNsYXNzIEluY2x1c2l2ZVZhbGlkYXRpb24ge1xyXG4gICAgY29uc3RydWN0b3IobWluID0gTnVtYmVyLk1JTl9WQUxVRSwgbWF4ID0gTnVtYmVyLk1BWF9WQUxVRSkge1xyXG4gICAgICAgIHRoaXMubWluID0gbWluO1xyXG4gICAgICAgIHRoaXMubWF4ID0gbWF4O1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgICAgICB0aHJvd0lmVHlwZUlzV3JvbmcodmFsdWUsIEpzb25Qcm9wVHlwZXMuTnVtYmVyKTtcclxuICAgICAgICBpZiAoISh0aGlzLm1pbiA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSB0aGlzLm1heCkpIHtcclxuICAgICAgICAgICAgY29uc3QgbWluID0gdGhpcy5taW4gPT09IE51bWJlci5NSU5fVkFMVUUgPyBcIk1JTlwiIDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IHRoaXMubWF4ID09PSBOdW1iZXIuTUFYX1ZBTFVFID8gXCJNQVhcIiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBkb2Vzbid0IG1hdGNoIHRvIGRpYXBhc29uIFske21pbn0sJHttYXh9XWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5jbGFzcyBFeGNsdXNpdmVWYWxpZGF0aW9uIHtcclxuICAgIGNvbnN0cnVjdG9yKG1pbiA9IE51bWJlci5NSU5fVkFMVUUsIG1heCA9IE51bWJlci5NQVhfVkFMVUUpIHtcclxuICAgICAgICB0aGlzLm1pbiA9IG1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG1heDtcclxuICAgIH1cclxuICAgIHZhbGlkYXRlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhyb3dJZlR5cGVJc1dyb25nKHZhbHVlLCBKc29uUHJvcFR5cGVzLk51bWJlcik7XHJcbiAgICAgICAgaWYgKCEodGhpcy5taW4gPCB2YWx1ZSAmJiB2YWx1ZSA8IHRoaXMubWF4KSkge1xyXG4gICAgICAgICAgICBjb25zdCBtaW4gPSB0aGlzLm1pbiA9PT0gTnVtYmVyLk1JTl9WQUxVRSA/IFwiTUlOXCIgOiB0aGlzLm1pbjtcclxuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXggPT09IE51bWJlci5NQVhfVkFMVUUgPyBcIk1BWFwiIDogdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFZhbHVlIGRvZXNuJ3QgbWF0Y2ggdG8gZGlhcGFzb24gKCR7bWlufSwke21heH0pYCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNsYXNzIExlbmd0aFZhbGlkYXRpb24ge1xyXG4gICAgY29uc3RydWN0b3IobGVuZ3RoLCBtaW5MZW5ndGgsIG1heExlbmd0aCkge1xyXG4gICAgICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoO1xyXG4gICAgICAgIHRoaXMubWluTGVuZ3RoID0gbWluTGVuZ3RoO1xyXG4gICAgICAgIHRoaXMubWF4TGVuZ3RoID0gbWF4TGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgdmFsaWRhdGUodmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoICE9PSB0aGlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVmFsdWUgbGVuZ3RoIG11c3QgYmUgZXhhY3RseSAke3RoaXMubGVuZ3RofS5gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1pbkxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPCB0aGlzLm1pbkxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVmFsdWUgbGVuZ3RoIG11c3QgYmUgbW9yZSB0aGFuICR7dGhpcy5taW5MZW5ndGh9LmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiB0aGlzLm1heExlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVmFsdWUgbGVuZ3RoIG11c3QgYmUgbGVzcyB0aGFuICR7dGhpcy5tYXhMZW5ndGh9LmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmNsYXNzIEVudW1lcmF0aW9uVmFsaWRhdGlvbiB7XHJcbiAgICBjb25zdHJ1Y3RvcihlbnVtZXJhdGlvbikge1xyXG4gICAgICAgIHRoaXMuZW51bWVyYXRpb24gPSBlbnVtZXJhdGlvbjtcclxuICAgIH1cclxuICAgIHZhbGlkYXRlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhyb3dJZlR5cGVJc1dyb25nKHZhbHVlLCBKc29uUHJvcFR5cGVzLlN0cmluZyk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVudW1lcmF0aW9uLmluY2x1ZGVzKHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBtdXN0IGJlIG9uZSBvZiAke3RoaXMuZW51bWVyYXRpb24ubWFwKCh2KSA9PiBgJyR7dn0nYCkuam9pbihcIiwgXCIpfWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5jbGFzcyBKc29uVHJhbnNmb3JtIHtcclxuICAgIHN0YXRpYyBjaGVja1ZhbHVlcyhkYXRhLCBzY2hlbWFJdGVtKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbZGF0YV07XHJcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uIG9mIHNjaGVtYUl0ZW0udmFsaWRhdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uIGluc3RhbmNlb2YgTGVuZ3RoVmFsaWRhdGlvbiAmJiBzY2hlbWFJdGVtLnJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbi52YWxpZGF0ZShkYXRhKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb24udmFsaWRhdGUodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhdGljIGNoZWNrVHlwZXModmFsdWUsIHNjaGVtYUl0ZW0pIHtcclxuICAgICAgICBpZiAoc2NoZW1hSXRlbS5yZXBlYXRlZCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlZhbHVlIG11c3QgYmUgQXJyYXlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hSXRlbS50eXBlID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHYgb2YgdmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvd0lmVHlwZUlzV3Jvbmcodiwgc2NoZW1hSXRlbS50eXBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0YXRpYyBnZXRTY2hlbWFCeU5hbWUoc2NoZW1hLCBuYW1lID0gREVGQVVMVF9TQ0hFTUEpIHtcclxuICAgICAgICByZXR1cm4geyAuLi5zY2hlbWEubmFtZXNbREVGQVVMVF9TQ0hFTUFdLCAuLi5zY2hlbWEubmFtZXNbbmFtZV0gfTtcclxuICAgIH1cclxufVxuXG5jbGFzcyBKc29uU2VyaWFsaXplciBleHRlbmRzIEpzb25UcmFuc2Zvcm0ge1xyXG4gICAgc3RhdGljIHNlcmlhbGl6ZShvYmosIG9wdGlvbnMsIHJlcGxhY2VyLCBzcGFjZSkge1xyXG4gICAgICAgIGNvbnN0IGpzb24gPSB0aGlzLnRvSlNPTihvYmosIG9wdGlvbnMpO1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShqc29uLCByZXBsYWNlciwgc3BhY2UpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHRvSlNPTihvYmosIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGxldCByZXM7XHJcbiAgICAgICAgbGV0IHRhcmdldFNjaGVtYSA9IG9wdGlvbnMudGFyZ2V0U2NoZW1hO1xyXG4gICAgICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBvcHRpb25zLnNjaGVtYU5hbWUgfHwgREVGQVVMVF9TQ0hFTUE7XHJcbiAgICAgICAgaWYgKGlzQ29udmVydGlibGUob2JqKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqLnRvSlNPTigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XHJcbiAgICAgICAgICAgIHJlcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygb2JqKSB7XHJcbiAgICAgICAgICAgICAgICByZXMucHVzaCh0aGlzLnRvSlNPTihpdGVtLCBvcHRpb25zKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0U2NoZW1hICYmICFzY2hlbWFTdG9yYWdlLmhhcyh0YXJnZXRTY2hlbWEpKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSnNvbkVycm9yKFwiQ2Fubm90IGdldCBzY2hlbWEgZm9yIGB0YXJnZXRTY2hlbWFgIHBhcmFtXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRhcmdldFNjaGVtYSA9ICh0YXJnZXRTY2hlbWEgfHwgb2JqLmNvbnN0cnVjdG9yKTtcclxuICAgICAgICAgICAgaWYgKHNjaGVtYVN0b3JhZ2UuaGFzKHRhcmdldFNjaGVtYSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuZ2V0KHRhcmdldFNjaGVtYSk7XHJcbiAgICAgICAgICAgICAgICByZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVkU2NoZW1hID0gdGhpcy5nZXRTY2hlbWFCeU5hbWUoc2NoZW1hLCBzY2hlbWFOYW1lKTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG5hbWVkU2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IG5hbWVkU2NoZW1hW2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9iakl0ZW0gPSBvYmpba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGl0ZW0ub3B0aW9uYWwgJiYgb2JqSXRlbSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGl0ZW0uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgb2JqSXRlbSA9PT0gaXRlbS5kZWZhdWx0VmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZW0ub3B0aW9uYWwgJiYgb2JqSXRlbSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXplckVycm9yKHRhcmdldFNjaGVtYS5uYW1lLCBgUHJvcGVydHkgJyR7a2V5fScgaXMgcmVxdWlyZWQuYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtLnR5cGUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvbnZlcnRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gb2JqSXRlbS5tYXAoKGVsKSA9PiBpdGVtLmNvbnZlcnRlci50b0pTT04oZWwsIG9iaikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpdGVtLmNvbnZlcnRlci50b0pTT04ob2JqSXRlbSwgb2JqKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG9iakl0ZW07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5yZXBlYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gb2JqSXRlbS5tYXAoKGVsKSA9PiB0aGlzLnRvSlNPTihlbCwgeyBzY2hlbWFOYW1lIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy50b0pTT04ob2JqSXRlbSwgeyBzY2hlbWFOYW1lIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tUeXBlcyh2YWx1ZSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tWYWx1ZXModmFsdWUsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNbaXRlbS5uYW1lIHx8IGtleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBTZXJpYWxpemVyRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXplckVycm9yKHNjaGVtYS50YXJnZXQubmFtZSwgYFByb3BlcnR5ICcke2tleX0nIGlzIHdyb25nLiAke2UubWVzc2FnZX1gLCBlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzW2tleV0gPSB0aGlzLnRvSlNPTihvYmpba2V5XSwgeyBzY2hlbWFOYW1lIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICByZXMgPSBvYmo7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgSnNvblBhcnNlciBleHRlbmRzIEpzb25UcmFuc2Zvcm0ge1xyXG4gICAgc3RhdGljIHBhcnNlKGRhdGEsIG9wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBvYmogPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZyb21KU09OKG9iaiwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZnJvbUpTT04odGFyZ2V0LCBvcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0U2NoZW1hID0gb3B0aW9ucy50YXJnZXRTY2hlbWE7XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hTmFtZSA9IG9wdGlvbnMuc2NoZW1hTmFtZSB8fCBERUZBVUxUX1NDSEVNQTtcclxuICAgICAgICBjb25zdCBvYmogPSBuZXcgdGFyZ2V0U2NoZW1hKCk7XHJcbiAgICAgICAgaWYgKGlzQ29udmVydGlibGUob2JqKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gb2JqLmZyb21KU09OKHRhcmdldCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuZ2V0KHRhcmdldFNjaGVtYSk7XHJcbiAgICAgICAgY29uc3QgbmFtZWRTY2hlbWEgPSB0aGlzLmdldFNjaGVtYUJ5TmFtZShzY2hlbWEsIHNjaGVtYU5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGtleUVycm9ycyA9IHt9O1xyXG4gICAgICAgIGlmIChvcHRpb25zLnN0cmljdFByb3BlcnR5ICYmICFBcnJheS5pc0FycmF5KHRhcmdldCkpIHtcclxuICAgICAgICAgICAgSnNvblBhcnNlci5jaGVja1N0cmljdFByb3BlcnR5KHRhcmdldCwgbmFtZWRTY2hlbWEsIHNjaGVtYSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG5hbWVkU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmFtZWRTY2hlbWFba2V5XTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBpdGVtLm5hbWUgfHwga2V5O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0YXJnZXRbbmFtZV07XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAoaXRlbS5vcHRpb25hbCB8fCBpdGVtLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtLm9wdGlvbmFsICYmIHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUGFyc2VyRXJyb3Ioc2NoZW1hLCBgUHJvcGVydHkgJyR7bmFtZX0nIGlzIHJlcXVpcmVkLmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja1R5cGVzKHZhbHVlLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tWYWx1ZXModmFsdWUsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAoaXRlbS50eXBlKSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvbnZlcnRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5yZXBlYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZS5tYXAoKGVsKSA9PiBpdGVtLmNvbnZlcnRlci5mcm9tSlNPTihlbCwgb2JqKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IGl0ZW0uY29udmVydGVyLmZyb21KU09OKHZhbHVlLCBvYmopO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld09wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFNjaGVtYTogaXRlbS50eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0ucmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZS5tYXAoKGVsKSA9PiB0aGlzLmZyb21KU09OKGVsLCBuZXdPcHRpb25zKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHRoaXMuZnJvbUpTT04odmFsdWUsIG5ld09wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIFBhcnNlckVycm9yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgUGFyc2VyRXJyb3Ioc2NoZW1hLCBgUHJvcGVydHkgJyR7a2V5fScgaXMgd3JvbmcuICR7ZS5tZXNzYWdlfWAsIGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RyaWN0QWxsS2V5cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleUVycm9yc1trZXldID0gZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGtleUVycm9ycyk7XHJcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBLZXlFcnJvcihzY2hlbWEsIGtleXMsIGtleUVycm9ycyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgY2hlY2tTdHJpY3RQcm9wZXJ0eSh0YXJnZXQsIG5hbWVkU2NoZW1hLCBzY2hlbWEpIHtcclxuICAgICAgICBjb25zdCBqc29uUHJvcHMgPSBPYmplY3Qua2V5cyh0YXJnZXQpO1xyXG4gICAgICAgIGNvbnN0IHNjaGVtYVByb3BzID0gT2JqZWN0LmtleXMobmFtZWRTY2hlbWEpO1xyXG4gICAgICAgIGNvbnN0IGtleXMgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBqc29uUHJvcHMpIHtcclxuICAgICAgICAgICAgaWYgKHNjaGVtYVByb3BzLmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgS2V5RXJyb3Ioc2NoZW1hLCBrZXlzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuZnVuY3Rpb24gZ2V0VmFsaWRhdGlvbnMoaXRlbSkge1xyXG4gICAgY29uc3QgdmFsaWRhdGlvbnMgPSBbXTtcclxuICAgIGlmIChpdGVtLnBhdHRlcm4pIHtcclxuICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKG5ldyBQYXR0ZXJuVmFsaWRhdGlvbihpdGVtLnBhdHRlcm4pKTtcclxuICAgIH1cclxuICAgIGlmIChpdGVtLnR5cGUgPT09IEpzb25Qcm9wVHlwZXMuTnVtYmVyIHx8IGl0ZW0udHlwZSA9PT0gSnNvblByb3BUeXBlcy5BbnkpIHtcclxuICAgICAgICBpZiAoaXRlbS5taW5JbmNsdXNpdmUgIT09IHVuZGVmaW5lZCB8fCBpdGVtLm1heEluY2x1c2l2ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2gobmV3IEluY2x1c2l2ZVZhbGlkYXRpb24oaXRlbS5taW5JbmNsdXNpdmUsIGl0ZW0ubWF4SW5jbHVzaXZlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtLm1pbkV4Y2x1c2l2ZSAhPT0gdW5kZWZpbmVkIHx8IGl0ZW0ubWF4RXhjbHVzaXZlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbnMucHVzaChuZXcgRXhjbHVzaXZlVmFsaWRhdGlvbihpdGVtLm1pbkV4Y2x1c2l2ZSwgaXRlbS5tYXhFeGNsdXNpdmUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW0uZW51bWVyYXRpb24gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKG5ldyBFbnVtZXJhdGlvblZhbGlkYXRpb24oaXRlbS5lbnVtZXJhdGlvbikpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChpdGVtLnR5cGUgPT09IEpzb25Qcm9wVHlwZXMuU3RyaW5nIHx8IGl0ZW0ucmVwZWF0ZWQgfHwgaXRlbS50eXBlID09PSBKc29uUHJvcFR5cGVzLkFueSkge1xyXG4gICAgICAgIGlmIChpdGVtLmxlbmd0aCAhPT0gdW5kZWZpbmVkIHx8IGl0ZW0ubWluTGVuZ3RoICE9PSB1bmRlZmluZWQgfHwgaXRlbS5tYXhMZW5ndGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKG5ldyBMZW5ndGhWYWxpZGF0aW9uKGl0ZW0ubGVuZ3RoLCBpdGVtLm1pbkxlbmd0aCwgaXRlbS5tYXhMZW5ndGgpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsaWRhdGlvbnM7XHJcbn1cclxuY29uc3QgSnNvblByb3AgPSAob3B0aW9ucyA9IHt9KSA9PiAodGFyZ2V0LCBwcm9wZXJ0eUtleSkgPT4ge1xyXG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gYENhbm5vdCBzZXQgdHlwZSBmb3IgJHtwcm9wZXJ0eUtleX0gcHJvcGVydHkgb2YgJHt0YXJnZXQuY29uc3RydWN0b3IubmFtZX0gc2NoZW1hYDtcclxuICAgIGxldCBzY2hlbWE7XHJcbiAgICBpZiAoIXNjaGVtYVN0b3JhZ2UuaGFzKHRhcmdldC5jb25zdHJ1Y3RvcikpIHtcclxuICAgICAgICBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmNyZWF0ZSh0YXJnZXQuY29uc3RydWN0b3IpO1xyXG4gICAgICAgIHNjaGVtYVN0b3JhZ2Uuc2V0KHRhcmdldC5jb25zdHJ1Y3Rvciwgc2NoZW1hKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuZ2V0KHRhcmdldC5jb25zdHJ1Y3Rvcik7XHJcbiAgICAgICAgaWYgKHNjaGVtYS50YXJnZXQgIT09IHRhcmdldC5jb25zdHJ1Y3Rvcikge1xyXG4gICAgICAgICAgICBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmNyZWF0ZSh0YXJnZXQuY29uc3RydWN0b3IpO1xyXG4gICAgICAgICAgICBzY2hlbWFTdG9yYWdlLnNldCh0YXJnZXQuY29uc3RydWN0b3IsIHNjaGVtYSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgZGVmYXVsdFNjaGVtYSA9IHtcclxuICAgICAgICB0eXBlOiBKc29uUHJvcFR5cGVzLkFueSxcclxuICAgICAgICB2YWxpZGF0aW9uczogW10sXHJcbiAgICB9O1xyXG4gICAgY29uc3QgY29weU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKGRlZmF1bHRTY2hlbWEsIG9wdGlvbnMpO1xyXG4gICAgY29weU9wdGlvbnMudmFsaWRhdGlvbnMgPSBnZXRWYWxpZGF0aW9ucyhjb3B5T3B0aW9ucyk7XHJcbiAgICBpZiAodHlwZW9mIGNvcHlPcHRpb25zLnR5cGUgIT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICBpZiAoIXNjaGVtYVN0b3JhZ2UuaGFzKGNvcHlPcHRpb25zLnR5cGUpICYmICFpc0NvbnZlcnRpYmxlKGNvcHlPcHRpb25zLnR5cGUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlcnJvck1lc3NhZ2V9LiBBc3NpZ25pbmcgdHlwZSBkb2Vzbid0IGhhdmUgc2NoZW1hLmApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBzY2hlbWFOYW1lcztcclxuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuc2NoZW1hKSkge1xyXG4gICAgICAgIHNjaGVtYU5hbWVzID0gb3B0aW9ucy5zY2hlbWE7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBzY2hlbWFOYW1lcyA9IFtvcHRpb25zLnNjaGVtYSB8fCBERUZBVUxUX1NDSEVNQV07XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IHNjaGVtYU5hbWUgb2Ygc2NoZW1hTmFtZXMpIHtcclxuICAgICAgICBpZiAoIXNjaGVtYS5uYW1lc1tzY2hlbWFOYW1lXSkge1xyXG4gICAgICAgICAgICBzY2hlbWEubmFtZXNbc2NoZW1hTmFtZV0gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbmFtZWRTY2hlbWEgPSBzY2hlbWEubmFtZXNbc2NoZW1hTmFtZV07XHJcbiAgICAgICAgbmFtZWRTY2hlbWFbcHJvcGVydHlLZXldID0gY29weU9wdGlvbnM7XHJcbiAgICB9XHJcbn07XG5cbmV4cG9ydCB7IEpzb25FcnJvciwgSnNvblBhcnNlciwgSnNvblByb3AsIEpzb25Qcm9wVHlwZXMsIEpzb25TZXJpYWxpemVyLCBLZXlFcnJvciwgUGFyc2VyRXJyb3IsIFNlcmlhbGl6ZXJFcnJvciwgVHJhbnNmb3JtRXJyb3IsIFZhbGlkYXRpb25FcnJvciB9O1xuIiwgIi8qIVxuIENvcHlyaWdodCAoYykgUGVjdWxpYXIgVmVudHVyZXMsIExMQ1xuKi9cblxuaW1wb3J0IHsgQ29udmVydCwgQnVmZmVyU291cmNlQ29udmVydGVyLCBjb21iaW5lIH0gZnJvbSAncHZ0c3V0aWxzJztcbmV4cG9ydCB7IEJ1ZmZlclNvdXJjZUNvbnZlcnRlciB9IGZyb20gJ3B2dHN1dGlscyc7XG5pbXBvcnQgeyBBc25Qcm9wLCBBc25Qcm9wVHlwZXMsIEFzblR5cGUsIEFzblR5cGVUeXBlcywgQXNuSW50ZWdlckNvbnZlcnRlciwgQXNuU2VyaWFsaXplciwgQXNuQ29udmVydCB9IGZyb20gJ0BwZWN1bGlhci9hc24xLXNjaGVtYSc7XG5pbXBvcnQgeyBfX2RlY29yYXRlIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgSnNvblByb3AsIEpzb25Qcm9wVHlwZXMgfSBmcm9tICdAcGVjdWxpYXIvanNvbi1zY2hlbWEnO1xuaW1wb3J0ICogYXMgYXNuMSBmcm9tICdhc24xanMnO1xuXG5jbGFzcyBDcnlwdG9FcnJvciBleHRlbmRzIEVycm9yIHtcbn1cblxuY2xhc3MgQWxnb3JpdGhtRXJyb3IgZXh0ZW5kcyBDcnlwdG9FcnJvciB7XG59XG5cbmNsYXNzIFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IgZXh0ZW5kcyBDcnlwdG9FcnJvciB7XG4gICAgY29uc3RydWN0b3IobWV0aG9kTmFtZSkge1xuICAgICAgICBzdXBlcihgVW5zdXBwb3J0ZWQgb3BlcmF0aW9uOiAke21ldGhvZE5hbWUgPyBgJHttZXRob2ROYW1lfWAgOiBcIlwifWApO1xuICAgIH1cbn1cblxuY2xhc3MgT3BlcmF0aW9uRXJyb3IgZXh0ZW5kcyBDcnlwdG9FcnJvciB7XG59XG5cbmNsYXNzIFJlcXVpcmVkUHJvcGVydHlFcnJvciBleHRlbmRzIENyeXB0b0Vycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihwcm9wTmFtZSkge1xuICAgICAgICBzdXBlcihgJHtwcm9wTmFtZX06IE1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHlgKTtcbiAgICB9XG59XG5cbmNsYXNzIFBlbUNvbnZlcnRlciB7XG4gICAgc3RhdGljIHRvQXJyYXlCdWZmZXIocGVtKSB7XG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IHBlbVxuICAgICAgICAgICAgLnJlcGxhY2UoLy17NX0oQkVHSU58RU5EKSAuKi17NX0vZywgXCJcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKFwiXFxyXCIsIFwiXCIpXG4gICAgICAgICAgICAucmVwbGFjZShcIlxcblwiLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIENvbnZlcnQuRnJvbUJhc2U2NChiYXNlNjQpO1xuICAgIH1cbiAgICBzdGF0aWMgdG9VaW50OEFycmF5KHBlbSkge1xuICAgICAgICBjb25zdCBieXRlcyA9IHRoaXMudG9BcnJheUJ1ZmZlcihwZW0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpO1xuICAgIH1cbiAgICBzdGF0aWMgZnJvbUJ1ZmZlclNvdXJjZShidWZmZXIsIHRhZykge1xuICAgICAgICBjb25zdCBiYXNlNjQgPSBDb252ZXJ0LlRvQmFzZTY0KGJ1ZmZlcik7XG4gICAgICAgIGxldCBzbGljZWQ7XG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICBjb25zdCByb3dzID0gW107XG4gICAgICAgIHdoaWxlIChvZmZzZXQgPCBiYXNlNjQubGVuZ3RoKSB7XG4gICAgICAgICAgICBzbGljZWQgPSBiYXNlNjQuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyA2NCk7XG4gICAgICAgICAgICBpZiAoc2xpY2VkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJvd3MucHVzaChzbGljZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvZmZzZXQgKz0gNjQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBwZXJDYXNlVGFnID0gdGFnLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBgLS0tLS1CRUdJTiAke3VwcGVyQ2FzZVRhZ30tLS0tLVxcbiR7cm93cy5qb2luKFwiXFxuXCIpfVxcbi0tLS0tRU5EICR7dXBwZXJDYXNlVGFnfS0tLS0tYDtcbiAgICB9XG4gICAgc3RhdGljIGlzUEVNKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIC8tLS0tLUJFR0lOIC4rLS0tLS1bQS1aYS16MC05Ky8rPVxcc1xcbl0rLS0tLS1FTkQgListLS0tLS9pLnRlc3QoZGF0YSk7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRUYWdOYW1lKHBlbSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNQRU0ocGVtKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFkIHBhcmFtZXRlci4gSW5jb21pbmcgZGF0YSBpcyBub3QgcmlnaHQgUEVNXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IC8tLS0tLUJFR0lOICguKyktLS0tLS8uZXhlYyhwZW0pO1xuICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGdldCB0YWcgZnJvbSBQRU1cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1sxXTtcbiAgICB9XG4gICAgc3RhdGljIGhhc1RhZ05hbWUocGVtLCB0YWdOYW1lKSB7XG4gICAgICAgIGNvbnN0IHRhZyA9IHRoaXMuZ2V0VGFnTmFtZShwZW0pO1xuICAgICAgICByZXR1cm4gdGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSB0YWcudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQ2VydGlmaWNhdGUocGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc1RhZ05hbWUocGVtLCBcImNlcnRpZmljYXRlXCIpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNDZXJ0aWZpY2F0ZVJlcXVlc3QocGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc1RhZ05hbWUocGVtLCBcImNlcnRpZmljYXRlIHJlcXVlc3RcIik7XG4gICAgfVxuICAgIHN0YXRpYyBpc0NSTChwZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzVGFnTmFtZShwZW0sIFwieDUwOSBjcmxcIik7XG4gICAgfVxuICAgIHN0YXRpYyBpc1B1YmxpY0tleShwZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzVGFnTmFtZShwZW0sIFwicHVibGljIGtleVwiKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzSldLKGRhdGEpIHtcbiAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgXCJrdHlcIiBpbiBkYXRhO1xufVxuXG5jbGFzcyBQcm92aWRlckNyeXB0byB7XG4gICAgYXN5bmMgZGlnZXN0KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0RpZ2VzdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25EaWdlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrRGlnZXN0KGFsZ29yaXRobSwgX2RhdGEpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoX2FsZ29yaXRobSwgX2RhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJkaWdlc3RcIik7XG4gICAgfVxuICAgIGFzeW5jIGdlbmVyYXRlS2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0dlbmVyYXRlS2V5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkdlbmVyYXRlS2V5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja0dlbmVyYXRlS2V5KGFsZ29yaXRobSwgX2V4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICBpZiAoIShrZXlVc2FnZXMgJiYga2V5VXNhZ2VzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYFVzYWdlcyBjYW5ub3QgYmUgZW1wdHkgd2hlbiBjcmVhdGluZyBhIGtleS5gKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYWxsb3dlZFVzYWdlcztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy51c2FnZXMpKSB7XG4gICAgICAgICAgICBhbGxvd2VkVXNhZ2VzID0gdGhpcy51c2FnZXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhbGxvd2VkVXNhZ2VzID0gdGhpcy51c2FnZXMucHJpdmF0ZUtleS5jb25jYXQodGhpcy51c2FnZXMucHVibGljS2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrS2V5VXNhZ2VzKGtleVVzYWdlcywgYWxsb3dlZFVzYWdlcyk7XG4gICAgfVxuICAgIGNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoX2FsZ29yaXRobSkge1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KF9hbGdvcml0aG0sIF9leHRyYWN0YWJsZSwgX2tleVVzYWdlcywgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJnZW5lcmF0ZUtleVwiKTtcbiAgICB9XG4gICAgYXN5bmMgc2lnbiguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tTaWduLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vblNpZ24uYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrU2lnbihhbGdvcml0aG0sIGtleSwgX2RhdGEsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXksIFwic2lnblwiKTtcbiAgICB9XG4gICAgYXN5bmMgb25TaWduKF9hbGdvcml0aG0sIF9rZXksIF9kYXRhLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcInNpZ25cIik7XG4gICAgfVxuICAgIGFzeW5jIHZlcmlmeSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tWZXJpZnkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uVmVyaWZ5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja1ZlcmlmeShhbGdvcml0aG0sIGtleSwgX3NpZ25hdHVyZSwgX2RhdGEsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXksIFwidmVyaWZ5XCIpO1xuICAgIH1cbiAgICBhc3luYyBvblZlcmlmeShfYWxnb3JpdGhtLCBfa2V5LCBfc2lnbmF0dXJlLCBfZGF0YSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJ2ZXJpZnlcIik7XG4gICAgfVxuICAgIGFzeW5jIGVuY3J5cHQoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrRW5jcnlwdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25FbmNyeXB0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja0VuY3J5cHQoYWxnb3JpdGhtLCBrZXksIF9kYXRhLCBvcHRpb25zID0ge30sIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXksIG9wdGlvbnMua2V5VXNhZ2UgPyBcImVuY3J5cHRcIiA6IHZvaWQgMCk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChfYWxnb3JpdGhtLCBfa2V5LCBfZGF0YSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJlbmNyeXB0XCIpO1xuICAgIH1cbiAgICBhc3luYyBkZWNyeXB0KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0RlY3J5cHQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uRGVjcnlwdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tEZWNyeXB0KGFsZ29yaXRobSwga2V5LCBfZGF0YSwgb3B0aW9ucyA9IHt9LCAuLi5fYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5LCBvcHRpb25zLmtleVVzYWdlID8gXCJkZWNyeXB0XCIgOiB2b2lkIDApO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoX2FsZ29yaXRobSwgX2tleSwgX2RhdGEsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiZGVjcnlwdFwiKTtcbiAgICB9XG4gICAgYXN5bmMgZGVyaXZlQml0cyguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tEZXJpdmVCaXRzLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkRlcml2ZUJpdHMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrRGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCwgb3B0aW9ucyA9IHt9LCAuLi5fYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoYmFzZUtleSwgb3B0aW9ucy5rZXlVc2FnZSA/IFwiZGVyaXZlQml0c1wiIDogdm9pZCAwKTtcbiAgICAgICAgaWYgKGxlbmd0aCAlIDggIT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihcImxlbmd0aDogSXMgbm90IG11bHRpcGxlIG9mIDhcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgb25EZXJpdmVCaXRzKF9hbGdvcml0aG0sIF9iYXNlS2V5LCBfbGVuZ3RoLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImRlcml2ZUJpdHNcIik7XG4gICAgfVxuICAgIGFzeW5jIGV4cG9ydEtleSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tFeHBvcnRLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uRXhwb3J0S2V5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja0V4cG9ydEtleShmb3JtYXQsIGtleSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0tleUZvcm1hdChmb3JtYXQpO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICgha2V5LmV4dHJhY3RhYmxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ3J5cHRvRXJyb3IoXCJrZXk6IElzIG5vdCBleHRyYWN0YWJsZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShfZm9ybWF0LCBfa2V5LCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImV4cG9ydEtleVwiKTtcbiAgICB9XG4gICAgYXN5bmMgaW1wb3J0S2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0ltcG9ydEtleS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25JbXBvcnRLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBfZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0tleUZvcm1hdChmb3JtYXQpO1xuICAgICAgICB0aGlzLmNoZWNrS2V5RGF0YShmb3JtYXQsIGtleURhdGEpO1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrSW1wb3J0UGFyYW1zKGFsZ29yaXRobSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMudXNhZ2VzKSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0tleVVzYWdlcyhrZXlVc2FnZXMsIHRoaXMudXNhZ2VzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShfZm9ybWF0LCBfa2V5RGF0YSwgX2FsZ29yaXRobSwgX2V4dHJhY3RhYmxlLCBfa2V5VXNhZ2VzLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImltcG9ydEtleVwiKTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSkge1xuICAgICAgICBpZiAoYWxnb3JpdGhtLm5hbWUudG9Mb3dlckNhc2UoKSAhPT0gdGhpcy5uYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBbGdvcml0aG1FcnJvcihcIlVucmVjb2duaXplZCBuYW1lXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKF9hbGdvcml0aG0pIHtcbiAgICB9XG4gICAgY2hlY2tEZXJpdmVkS2V5UGFyYW1zKF9hbGdvcml0aG0pIHtcbiAgICB9XG4gICAgY2hlY2tLZXlVc2FnZXModXNhZ2VzLCBhbGxvd2VkKSB7XG4gICAgICAgIGZvciAoY29uc3QgdXNhZ2Ugb2YgdXNhZ2VzKSB7XG4gICAgICAgICAgICBpZiAoYWxsb3dlZC5pbmRleE9mKHVzYWdlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNyZWF0ZSBhIGtleSB1c2luZyB0aGUgc3BlY2lmaWVkIGtleSB1c2FnZXNcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShrZXkuYWxnb3JpdGhtKTtcbiAgICAgICAgaWYgKGtleVVzYWdlICYmIGtleS51c2FnZXMuaW5kZXhPZihrZXlVc2FnZSkgPT09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ3J5cHRvRXJyb3IoYGtleSBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIG9wZXJhdGlvbmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrUmVxdWlyZWRQcm9wZXJ0eShkYXRhLCBwcm9wTmFtZSkge1xuICAgICAgICBpZiAoIShwcm9wTmFtZSBpbiBkYXRhKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJlcXVpcmVkUHJvcGVydHlFcnJvcihwcm9wTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobSwgaGFzaEFsZ29yaXRobXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGhhc2hBbGdvcml0aG1zKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS50b0xvd2VyQ2FzZSgpID09PSBhbGdvcml0aG0ubmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihgaGFzaDogTXVzdCBiZSBvbmUgb2YgJHtoYXNoQWxnb3JpdGhtcy5qb2luKFwiLCBcIil9YCk7XG4gICAgfVxuICAgIGNoZWNrSW1wb3J0UGFyYW1zKF9hbGdvcml0aG0pIHtcbiAgICB9XG4gICAgY2hlY2tLZXlGb3JtYXQoZm9ybWF0KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJmb3JtYXQ6IElzIGludmFsaWQgdmFsdWUuIE11c3QgYmUgJ2p3aycsICdyYXcnLCAnc3BraScsIG9yICdwa2NzOCdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tLZXlEYXRhKGZvcm1hdCwga2V5RGF0YSkge1xuICAgICAgICBpZiAoIWtleURhdGEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXlEYXRhOiBDYW5ub3QgYmUgZW1wdHkgb24gZW1wdHkgb24ga2V5IGltcG9ydGluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImp3a1wiKSB7XG4gICAgICAgICAgICBpZiAoIWlzSldLKGtleURhdGEpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleURhdGE6IElzIG5vdCBKc29uV2ViVG9rZW5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIUJ1ZmZlclNvdXJjZUNvbnZlcnRlci5pc0J1ZmZlclNvdXJjZShrZXlEYXRhKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleURhdGE6IElzIG5vdCBBcnJheUJ1ZmZlclZpZXcgb3IgQXJyYXlCdWZmZXJcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJlcGFyZURhdGEoZGF0YSkge1xuICAgICAgICByZXR1cm4gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBBZXNQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibGVuZ3RoXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5sZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBvZiB0eXBlIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMTI4OlxuICAgICAgICAgICAgY2FzZSAxOTI6XG4gICAgICAgICAgICBjYXNlIDI1NjpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogTXVzdCBiZSAxMjgsIDE5Miwgb3IgMjU2XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrRGVyaXZlZEtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSk7XG4gICAgfVxufVxuXG5jbGFzcyBBZXNDYmNQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtQ0JDXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIiwgXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcIml2XCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0uaXYgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoYWxnb3JpdGhtLml2KSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpdjogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLml2LmJ5dGVMZW5ndGggIT09IDE2KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXY6IE11c3QgaGF2ZSBsZW5ndGggMTYgYnl0ZXNcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFlc0NtYWNQcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtQ01BQ1wiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcInNpZ25cIiwgXCJ2ZXJpZnlcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibGVuZ3RoXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5sZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihcImxlbmd0aDogTXVzdCBiZSBtb3JlIHRoYW4gMFwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzQ3RyUHJvdmlkZXIgZXh0ZW5kcyBBZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQUVTLUNUUlwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCIsIFwid3JhcEtleVwiLCBcInVud3JhcEtleVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJjb3VudGVyXCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0uY291bnRlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhhbGdvcml0aG0uY291bnRlcikpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiY291bnRlcjogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLmNvdW50ZXIuYnl0ZUxlbmd0aCAhPT0gMTYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpdjogTXVzdCBoYXZlIGxlbmd0aCAxNiBieXRlc1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibGVuZ3RoXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5sZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihcImxlbmd0aDogTXVzdCBiZSBtb3JlIHRoYW4gMFwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzRWNiUHJvdmlkZXIgZXh0ZW5kcyBBZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQUVTLUVDQlwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCIsIFwid3JhcEtleVwiLCBcInVud3JhcEtleVwiXTtcbiAgICB9XG59XG5cbmNsYXNzIEFlc0djbVByb3ZpZGVyIGV4dGVuZHMgQWVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkFFUy1HQ01cIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJlbmNyeXB0XCIsIFwiZGVjcnlwdFwiLCBcIndyYXBLZXlcIiwgXCJ1bndyYXBLZXlcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJpdlwiKTtcbiAgICAgICAgaWYgKCEoYWxnb3JpdGhtLml2IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGFsZ29yaXRobS5pdikpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXY6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5pdi5ieXRlTGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwiaXY6IE11c3QgaGF2ZSBsZW5ndGggbW9yZSB0aGFuIDAgYW5kIGxlc3MgdGhhbiAyXjY0IC0gMVwiKTtcbiAgICAgICAgfVxuICAgICAgICAoX2EgPSBhbGdvcml0aG0udGFnTGVuZ3RoKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoYWxnb3JpdGhtLnRhZ0xlbmd0aCA9IDEyOCk7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLnRhZ0xlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAzMjpcbiAgICAgICAgICAgIGNhc2UgNjQ6XG4gICAgICAgICAgICBjYXNlIDk2OlxuICAgICAgICAgICAgY2FzZSAxMDQ6XG4gICAgICAgICAgICBjYXNlIDExMjpcbiAgICAgICAgICAgIGNhc2UgMTIwOlxuICAgICAgICAgICAgY2FzZSAxMjg6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihcInRhZ0xlbmd0aDogTXVzdCBiZSBvbmUgb2YgMzIsIDY0LCA5NiwgMTA0LCAxMTIsIDEyMCBvciAxMjhcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFlc0t3UHJvdmlkZXIgZXh0ZW5kcyBBZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQUVTLUtXXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wid3JhcEtleVwiLCBcInVud3JhcEtleVwiXTtcbiAgICB9XG59XG5cbmNsYXNzIERlc1Byb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCIsIFwid3JhcEtleVwiLCBcInVud3JhcEtleVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIGlmICh0aGlzLml2U2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcIml2XCIpO1xuICAgICAgICAgICAgaWYgKCEoYWxnb3JpdGhtLml2IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGFsZ29yaXRobS5pdikpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIml2OiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsZ29yaXRobS5pdi5ieXRlTGVuZ3RoICE9PSB0aGlzLml2U2l6ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGl2OiBNdXN0IGhhdmUgbGVuZ3RoICR7dGhpcy5pdlNpemV9IGJ5dGVzYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImxlbmd0aFwiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhbGdvcml0aG0ubGVuZ3RoICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibGVuZ3RoOiBJcyBub3Qgb2YgdHlwZSBOdW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5sZW5ndGggIT09IHRoaXMua2V5U2l6ZUJpdHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihgYWxnb3JpdGhtLmxlbmd0aDogTXVzdCBiZSAke3RoaXMua2V5U2l6ZUJpdHN9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tEZXJpdmVkS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKTtcbiAgICB9XG59XG5cbmNsYXNzIFJzYVByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1wiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIl07XG4gICAgfVxuICAgIGNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJoYXNoXCIpO1xuICAgICAgICB0aGlzLmNoZWNrSGFzaEFsZ29yaXRobShhbGdvcml0aG0uaGFzaCwgdGhpcy5oYXNoQWxnb3JpdGhtcyk7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJwdWJsaWNFeHBvbmVudFwiKTtcbiAgICAgICAgaWYgKCEoYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50ICYmIGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicHVibGljRXhwb25lbnQ6IE1pc3Npbmcgb3Igbm90IGEgVWludDhBcnJheVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwdWJsaWNFeHBvbmVudCA9IENvbnZlcnQuVG9CYXNlNjQoYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50KTtcbiAgICAgICAgaWYgKCEocHVibGljRXhwb25lbnQgPT09IFwiQXc9PVwiIHx8IHB1YmxpY0V4cG9uZW50ID09PSBcIkFRQUJcIikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJwdWJsaWNFeHBvbmVudDogTXVzdCBiZSBbM10gb3IgWzEsMCwxXVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibW9kdWx1c0xlbmd0aFwiKTtcbiAgICAgICAgaWYgKGFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoICUgOFxuICAgICAgICAgICAgfHwgYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPCAyNTZcbiAgICAgICAgICAgIHx8IGFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoID4gMTYzODQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgbW9kdWx1cyBsZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDggYml0cyBhbmQgPj0gMjU2IGFuZCA8PSAxNjM4NFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0ltcG9ydFBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICB9XG59XG5cbmNsYXNzIFJzYVNzYVByb3ZpZGVyIGV4dGVuZHMgUnNhUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlJTQVNTQS1QS0NTMS12MV81XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wic2lnblwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1widmVyaWZ5XCJdLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuY2xhc3MgUnNhUHNzUHJvdmlkZXIgZXh0ZW5kcyBSc2FQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUlNBLVBTU1wiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcInNpZ25cIl0sXG4gICAgICAgICAgICBwdWJsaWNLZXk6IFtcInZlcmlmeVwiXSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJzYWx0TGVuZ3RoXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5zYWx0TGVuZ3RoICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwic2FsdExlbmd0aDogSXMgbm90IGEgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0uc2FsdExlbmd0aCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwic2FsdExlbmd0aDogTXVzdCBiZSBwb3NpdGl2ZSBudW1iZXJcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFJzYU9hZXBQcm92aWRlciBleHRlbmRzIFJzYVByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSU0EtT0FFUFwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcImRlY3J5cHRcIiwgXCJ1bndyYXBLZXlcIl0sXG4gICAgICAgICAgICBwdWJsaWNLZXk6IFtcImVuY3J5cHRcIiwgXCJ3cmFwS2V5XCJdLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgaWYgKGFsZ29yaXRobS5sYWJlbFxuICAgICAgICAgICAgJiYgIShhbGdvcml0aG0ubGFiZWwgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoYWxnb3JpdGhtLmxhYmVsKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsYWJlbDogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgRWxsaXB0aWNQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibmFtZWRDdXJ2ZVwiKTtcbiAgICAgICAgdGhpcy5jaGVja05hbWVkQ3VydmUoYWxnb3JpdGhtLm5hbWVkQ3VydmUpO1xuICAgIH1cbiAgICBjaGVja05hbWVkQ3VydmUobmFtZWRDdXJ2ZSkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5uYW1lZEN1cnZlcykge1xuICAgICAgICAgICAgaWYgKGl0ZW0udG9Mb3dlckNhc2UoKSA9PT0gbmFtZWRDdXJ2ZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihgbmFtZWRDdXJ2ZTogTXVzdCBiZSBvbmUgb2YgJHt0aGlzLm5hbWVkQ3VydmVzLmpvaW4oXCIsIFwiKX1gKTtcbiAgICB9XG59XG5cbmNsYXNzIEVjZHNhUHJvdmlkZXIgZXh0ZW5kcyBFbGxpcHRpY1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFQ0RTQVwiO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1wiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIl07XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wic2lnblwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1widmVyaWZ5XCJdLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm5hbWVkQ3VydmVzID0gW1wiUC0yNTZcIiwgXCJQLTM4NFwiLCBcIlAtNTIxXCIsIFwiSy0yNTZcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgIH1cbn1cblxuY29uc3QgS0VZX1RZUEVTID0gW1wic2VjcmV0XCIsIFwicHJpdmF0ZVwiLCBcInB1YmxpY1wiXTtcbmNsYXNzIENyeXB0b0tleSB7XG4gICAgc3RhdGljIGNyZWF0ZShhbGdvcml0aG0sIHR5cGUsIGV4dHJhY3RhYmxlLCB1c2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IHRoaXMoKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAga2V5LnR5cGUgPSB0eXBlO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IHVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGlzS2V5VHlwZShkYXRhKSB7XG4gICAgICAgIHJldHVybiBLRVlfVFlQRVMuaW5kZXhPZihkYXRhKSAhPT0gLTE7XG4gICAgfVxuICAgIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICAgICAgcmV0dXJuIFwiQ3J5cHRvS2V5XCI7XG4gICAgfVxufVxuXG5jbGFzcyBFY2RoUHJvdmlkZXIgZXh0ZW5kcyBFbGxpcHRpY1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFQ0RIXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wiZGVyaXZlQml0c1wiLCBcImRlcml2ZUtleVwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW10sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBbXCJQLTI1NlwiLCBcIlAtMzg0XCIsIFwiUC01MjFcIiwgXCJLLTI1NlwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJwdWJsaWNcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5wdWJsaWMgaW5zdGFuY2VvZiBDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicHVibGljOiBJcyBub3QgYSBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5wdWJsaWMudHlwZSAhPT0gXCJwdWJsaWNcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9wZXJhdGlvbkVycm9yKFwicHVibGljOiBJcyBub3QgYSBwdWJsaWMga2V5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0ucHVibGljLmFsZ29yaXRobS5uYW1lICE9PSB0aGlzLm5hbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihgcHVibGljOiBJcyBub3QgJHt0aGlzLm5hbWV9IGtleWApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBFY2RoRXNQcm92aWRlciBleHRlbmRzIEVjZGhQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiRUNESC1FU1wiO1xuICAgICAgICB0aGlzLm5hbWVkQ3VydmVzID0gW1wiWDI1NTE5XCIsIFwiWDQ0OFwiXTtcbiAgICB9XG59XG5cbmNsYXNzIEVkRHNhUHJvdmlkZXIgZXh0ZW5kcyBFbGxpcHRpY1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFZERTQVwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcInNpZ25cIl0sXG4gICAgICAgICAgICBwdWJsaWNLZXk6IFtcInZlcmlmeVwiXSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5uYW1lZEN1cnZlcyA9IFtcIkVkMjU1MTlcIiwgXCJFZDQ0OFwiXTtcbiAgICB9XG59XG5cbmxldCBPYmplY3RJZGVudGlmaWVyID0gY2xhc3MgT2JqZWN0SWRlbnRpZmllciB7XG4gICAgY29uc3RydWN0b3IodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG59O1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5PYmplY3RJZGVudGlmaWVyIH0pXG5dLCBPYmplY3RJZGVudGlmaWVyLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuT2JqZWN0SWRlbnRpZmllciA9IF9fZGVjb3JhdGUoW1xuICAgIEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuQ2hvaWNlIH0pXG5dLCBPYmplY3RJZGVudGlmaWVyKTtcblxuY2xhc3MgQWxnb3JpdGhtSWRlbnRpZmllciB7XG4gICAgY29uc3RydWN0b3IocGFyYW1zKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgcGFyYW1zKTtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHtcbiAgICAgICAgdHlwZTogQXNuUHJvcFR5cGVzLk9iamVjdElkZW50aWZpZXIsXG4gICAgfSlcbl0sIEFsZ29yaXRobUlkZW50aWZpZXIucHJvdG90eXBlLCBcImFsZ29yaXRobVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7XG4gICAgICAgIHR5cGU6IEFzblByb3BUeXBlcy5BbnksXG4gICAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgIH0pXG5dLCBBbGdvcml0aG1JZGVudGlmaWVyLnByb3RvdHlwZSwgXCJwYXJhbWV0ZXJzXCIsIHZvaWQgMCk7XG5cbmNsYXNzIFByaXZhdGVLZXlJbmZvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gMDtcbiAgICAgICAgdGhpcy5wcml2YXRlS2V5QWxnb3JpdGhtID0gbmV3IEFsZ29yaXRobUlkZW50aWZpZXIoKTtcbiAgICAgICAgdGhpcy5wcml2YXRlS2V5ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciB9KVxuXSwgUHJpdmF0ZUtleUluZm8ucHJvdG90eXBlLCBcInZlcnNpb25cIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBbGdvcml0aG1JZGVudGlmaWVyIH0pXG5dLCBQcml2YXRlS2V5SW5mby5wcm90b3R5cGUsIFwicHJpdmF0ZUtleUFsZ29yaXRobVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5PY3RldFN0cmluZyB9KVxuXSwgUHJpdmF0ZUtleUluZm8ucHJvdG90eXBlLCBcInByaXZhdGVLZXlcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuQW55LCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgUHJpdmF0ZUtleUluZm8ucHJvdG90eXBlLCBcImF0dHJpYnV0ZXNcIiwgdm9pZCAwKTtcblxuY2xhc3MgUHVibGljS2V5SW5mbyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucHVibGljS2V5QWxnb3JpdGhtID0gbmV3IEFsZ29yaXRobUlkZW50aWZpZXIoKTtcbiAgICAgICAgdGhpcy5wdWJsaWNLZXkgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFsZ29yaXRobUlkZW50aWZpZXIgfSlcbl0sIFB1YmxpY0tleUluZm8ucHJvdG90eXBlLCBcInB1YmxpY0tleUFsZ29yaXRobVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5CaXRTdHJpbmcgfSlcbl0sIFB1YmxpY0tleUluZm8ucHJvdG90eXBlLCBcInB1YmxpY0tleVwiLCB2b2lkIDApO1xuXG5jb25zdCBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUpTT046ICh2YWx1ZSkgPT4gQ29udmVydC5Gcm9tQmFzZTY0VXJsKHZhbHVlKSxcbiAgICB0b0pTT046ICh2YWx1ZSkgPT4gQ29udmVydC5Ub0Jhc2U2NFVybChuZXcgVWludDhBcnJheSh2YWx1ZSkpLFxufTtcblxuY29uc3QgQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZUhleCA9IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXg7XG4gICAgICAgIHJldHVybiAhKG5ldyBVaW50OEFycmF5KHZhbHVlSGV4KVswXSlcbiAgICAgICAgICAgID8gdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleC5zbGljZSgxKVxuICAgICAgICAgICAgOiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4O1xuICAgIH0sXG4gICAgdG9BU046ICh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZUhleCA9IG5ldyBVaW50OEFycmF5KHZhbHVlKVswXSA+IDEyN1xuICAgICAgICAgICAgPyBjb21iaW5lKG5ldyBVaW50OEFycmF5KFswXSkuYnVmZmVyLCB2YWx1ZSlcbiAgICAgICAgICAgIDogdmFsdWU7XG4gICAgICAgIHJldHVybiBuZXcgYXNuMS5JbnRlZ2VyKHsgdmFsdWVIZXggfSk7XG4gICAgfSxcbn07XG5cbnZhciBpbmRleCQzID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyLFxuICBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlclxufSk7XG5cbmNsYXNzIFJzYVByaXZhdGVLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZlcnNpb24gPSAwO1xuICAgICAgICB0aGlzLm1vZHVsdXMgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucHVibGljRXhwb25lbnQgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucHJpdmF0ZUV4cG9uZW50ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLnByaW1lMSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5wcmltZTIgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMuZXhwb25lbnQxID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLmV4cG9uZW50MiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5jb2VmZmljaWVudCA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwidmVyc2lvblwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiblwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwibW9kdWx1c1wiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZVwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicHVibGljRXhwb25lbnRcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImRcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcInByaXZhdGVFeHBvbmVudFwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwicFwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicHJpbWUxXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJxXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwcmltZTJcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImRwXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJleHBvbmVudDFcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImRxXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJleHBvbmVudDJcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcInFpXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJjb2VmZmljaWVudFwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5BbnksIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJvdGhlclByaW1lSW5mb3NcIiwgdm9pZCAwKTtcblxuY2xhc3MgUnNhUHVibGljS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5tb2R1bHVzID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLnB1YmxpY0V4cG9uZW50ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcIm5cIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVB1YmxpY0tleS5wcm90b3R5cGUsIFwibW9kdWx1c1wiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZVwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHVibGljS2V5LnByb3RvdHlwZSwgXCJwdWJsaWNFeHBvbmVudFwiLCB2b2lkIDApO1xuXG5sZXQgRWNQdWJsaWNLZXkgPSBjbGFzcyBFY1B1YmxpY0tleSB7XG4gICAgY29uc3RydWN0b3IodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBsZXQgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh0aGlzLnZhbHVlKTtcbiAgICAgICAgaWYgKGJ5dGVzWzBdICE9PSAweDA0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ3J5cHRvRXJyb3IoXCJXcm9uZyBFQ1BvaW50LiBDdXJyZW50IHZlcnNpb24gc3VwcG9ydHMgb25seSBVbmNvbXByZXNzZWQgKDB4MDQpIHBvaW50XCIpO1xuICAgICAgICB9XG4gICAgICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkodGhpcy52YWx1ZS5zbGljZSgxKSk7XG4gICAgICAgIGNvbnN0IHNpemUgPSBieXRlcy5sZW5ndGggLyAyO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSAwO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAgeDogQ29udmVydC5Ub0Jhc2U2NFVybChieXRlcy5idWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzaXplKSksXG4gICAgICAgICAgICB5OiBDb252ZXJ0LlRvQmFzZTY0VXJsKGJ5dGVzLmJ1ZmZlci5zbGljZShvZmZzZXQgKyBzaXplLCBvZmZzZXQgKyBzaXplICsgc2l6ZSkpLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIShcInhcIiBpbiBqc29uKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwieDogTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShcInlcIiBpbiBqc29uKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwieTogTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4ID0gQ29udmVydC5Gcm9tQmFzZTY0VXJsKGpzb24ueCk7XG4gICAgICAgIGNvbnN0IHkgPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi55KTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjb21iaW5lKG5ldyBVaW50OEFycmF5KFsweDA0XSkuYnVmZmVyLCB4LCB5KTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBVaW50OEFycmF5KHZhbHVlKS5idWZmZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn07XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nIH0pXG5dLCBFY1B1YmxpY0tleS5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbkVjUHVibGljS2V5ID0gX19kZWNvcmF0ZShbXG4gICAgQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5DaG9pY2UgfSlcbl0sIEVjUHVibGljS2V5KTtcblxuY2xhc3MgRWNQcml2YXRlS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gMTtcbiAgICAgICAgdGhpcy5wcml2YXRlS2V5ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghKFwiZFwiIGluIGpzb24pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkOiBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJpdmF0ZUtleSA9IENvbnZlcnQuRnJvbUJhc2U2NFVybChqc29uLmQpO1xuICAgICAgICBpZiAoXCJ4XCIgaW4ganNvbikge1xuICAgICAgICAgICAgY29uc3QgcHVibGljS2V5ID0gbmV3IEVjUHVibGljS2V5KCk7XG4gICAgICAgICAgICBwdWJsaWNLZXkuZnJvbUpTT04oanNvbik7XG4gICAgICAgICAgICBjb25zdCBhc24gPSBBc25TZXJpYWxpemVyLnRvQVNOKHB1YmxpY0tleSk7XG4gICAgICAgICAgICBpZiAoXCJ2YWx1ZUhleFwiIGluIGFzbi52YWx1ZUJsb2NrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wdWJsaWNLZXkgPSBhc24udmFsdWVCbG9jay52YWx1ZUhleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBqd2sgPSB7fTtcbiAgICAgICAgandrLmQgPSBDb252ZXJ0LlRvQmFzZTY0VXJsKHRoaXMucHJpdmF0ZUtleSk7XG4gICAgICAgIGlmICh0aGlzLnB1YmxpY0tleSkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihqd2ssIG5ldyBFY1B1YmxpY0tleSh0aGlzLnB1YmxpY0tleSkudG9KU09OKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBqd2s7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJDb252ZXJ0ZXIgfSlcbl0sIEVjUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwidmVyc2lvblwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5PY3RldFN0cmluZyB9KVxuXSwgRWNQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwcml2YXRlS2V5XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgY29udGV4dDogMCwgdHlwZTogQXNuUHJvcFR5cGVzLkFueSwgb3B0aW9uYWw6IHRydWUgfSlcbl0sIEVjUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicGFyYW1ldGVyc1wiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IGNvbnRleHQ6IDEsIHR5cGU6IEFzblByb3BUeXBlcy5CaXRTdHJpbmcsIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBFY1ByaXZhdGVLZXkucHJvdG90eXBlLCBcInB1YmxpY0tleVwiLCB2b2lkIDApO1xuXG5jb25zdCBBc25JbnRlZ2VyV2l0aG91dFBhZGRpbmdDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUudmFsdWVCbG9jay52YWx1ZUhleCk7XG4gICAgICAgIHJldHVybiAoYnl0ZXNbMF0gPT09IDApXG4gICAgICAgICAgICA/IGJ5dGVzLmJ1ZmZlci5zbGljZSgxKVxuICAgICAgICAgICAgOiBieXRlcy5idWZmZXI7XG4gICAgfSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpO1xuICAgICAgICBpZiAoYnl0ZXNbMF0gPiAxMjcpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMubGVuZ3RoICsgMSk7XG4gICAgICAgICAgICBuZXdWYWx1ZS5zZXQoYnl0ZXMsIDEpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBhc24xLkludGVnZXIoeyB2YWx1ZUhleDogbmV3VmFsdWUuYnVmZmVyIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgYXNuMS5JbnRlZ2VyKHsgdmFsdWVIZXg6IHZhbHVlIH0pO1xuICAgIH0sXG59O1xuXG52YXIgaW5kZXgkMiA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBBc25JbnRlZ2VyV2l0aG91dFBhZGRpbmdDb252ZXJ0ZXI6IEFzbkludGVnZXJXaXRob3V0UGFkZGluZ0NvbnZlcnRlclxufSk7XG5cbmNsYXNzIEVjVXRpbHMge1xuICAgIHN0YXRpYyBkZWNvZGVQb2ludChkYXRhLCBwb2ludFNpemUpIHtcbiAgICAgICAgY29uc3QgdmlldyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoZGF0YSk7XG4gICAgICAgIGlmICgodmlldy5sZW5ndGggPT09IDApIHx8ICh2aWV3WzBdICE9PSA0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT25seSB1bmNvbXByZXNzZWQgcG9pbnQgZm9ybWF0IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuID0gKHZpZXcubGVuZ3RoIC0gMSkgLyAyO1xuICAgICAgICBpZiAobiAhPT0gKE1hdGguY2VpbChwb2ludFNpemUgLyA4KSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBvaW50IGRvZXMgbm90IG1hdGNoIGZpZWxkIHNpemVcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeGIgPSB2aWV3LnNsaWNlKDEsIG4gKyAxKTtcbiAgICAgICAgY29uc3QgeWIgPSB2aWV3LnNsaWNlKG4gKyAxLCBuICsgMSArIG4pO1xuICAgICAgICByZXR1cm4geyB4OiB4YiwgeTogeWIgfTtcbiAgICB9XG4gICAgc3RhdGljIGVuY29kZVBvaW50KHBvaW50LCBwb2ludFNpemUpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IE1hdGguY2VpbChwb2ludFNpemUgLyA4KTtcbiAgICAgICAgaWYgKHBvaW50LnguYnl0ZUxlbmd0aCAhPT0gc2l6ZSB8fCBwb2ludC55LmJ5dGVMZW5ndGggIT09IHNpemUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlgsWSBjb29yZGluYXRlcyBkb24ndCBtYXRjaCBwb2ludCBzaXplIGNyaXRlcmlhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHggPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHBvaW50LngpO1xuICAgICAgICBjb25zdCB5ID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShwb2ludC55KTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSAqIDIgKyAxKTtcbiAgICAgICAgcmVzWzBdID0gNDtcbiAgICAgICAgcmVzLnNldCh4LCAxKTtcbiAgICAgICAgcmVzLnNldCh5LCBzaXplICsgMSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRTaXplKHBvaW50U2l6ZSkge1xuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHBvaW50U2l6ZSAvIDgpO1xuICAgIH1cbiAgICBzdGF0aWMgZW5jb2RlU2lnbmF0dXJlKHNpZ25hdHVyZSwgcG9pbnRTaXplKSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLmdldFNpemUocG9pbnRTaXplKTtcbiAgICAgICAgY29uc3QgciA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoc2lnbmF0dXJlLnIpO1xuICAgICAgICBjb25zdCBzID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShzaWduYXR1cmUucyk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHNpemUgKiAyKTtcbiAgICAgICAgcmVzLnNldCh0aGlzLnBhZFN0YXJ0KHIsIHNpemUpKTtcbiAgICAgICAgcmVzLnNldCh0aGlzLnBhZFN0YXJ0KHMsIHNpemUpLCBzaXplKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGRlY29kZVNpZ25hdHVyZShkYXRhLCBwb2ludFNpemUpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMuZ2V0U2l6ZShwb2ludFNpemUpO1xuICAgICAgICBjb25zdCB2aWV3ID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShkYXRhKTtcbiAgICAgICAgaWYgKHZpZXcubGVuZ3RoICE9PSAoc2l6ZSAqIDIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbmNvcnJlY3Qgc2l6ZSBvZiB0aGUgc2lnbmF0dXJlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHIgPSB2aWV3LnNsaWNlKDAsIHNpemUpO1xuICAgICAgICBjb25zdCBzID0gdmlldy5zbGljZShzaXplKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHI6IHRoaXMudHJpbVN0YXJ0KHIpLFxuICAgICAgICAgICAgczogdGhpcy50cmltU3RhcnQocyksXG4gICAgICAgIH07XG4gICAgfVxuICAgIHN0YXRpYyB0cmltU3RhcnQoZGF0YSkge1xuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIHdoaWxlICgoaSA8IGRhdGEubGVuZ3RoIC0gMSkgJiYgKGRhdGFbaV0gPT09IDApKSB7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhLnNsaWNlKGksIGRhdGEubGVuZ3RoKTtcbiAgICB9XG4gICAgc3RhdGljIHBhZFN0YXJ0KGRhdGEsIHNpemUpIHtcbiAgICAgICAgaWYgKHNpemUgPT09IGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShzaXplKTtcbiAgICAgICAgcmVzLnNldChkYXRhLCBzaXplIC0gZGF0YS5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cblxuY2xhc3MgRWNEc2FTaWduYXR1cmUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnIgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucyA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB9XG4gICAgc3RhdGljIGZyb21XZWJDcnlwdG9TaWduYXR1cmUodmFsdWUpIHtcbiAgICAgICAgY29uc3QgcG9pbnRTaXplID0gdmFsdWUuYnl0ZUxlbmd0aCAvIDI7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gRWNVdGlscy5kZWNvZGVTaWduYXR1cmUodmFsdWUsIHBvaW50U2l6ZSAqIDgpO1xuICAgICAgICBjb25zdCBlY1NpZ25hdHVyZSA9IG5ldyBFY0RzYVNpZ25hdHVyZSgpO1xuICAgICAgICBlY1NpZ25hdHVyZS5yID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIocG9pbnQucik7XG4gICAgICAgIGVjU2lnbmF0dXJlLnMgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihwb2ludC5zKTtcbiAgICAgICAgcmV0dXJuIGVjU2lnbmF0dXJlO1xuICAgIH1cbiAgICB0b1dlYkNyeXB0b1NpZ25hdHVyZShwb2ludFNpemUpIHtcbiAgICAgICAgaWYgKCFwb2ludFNpemUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heFBvaW50TGVuZ3RoID0gTWF0aC5tYXgodGhpcy5yLmJ5dGVMZW5ndGgsIHRoaXMucy5ieXRlTGVuZ3RoKTtcbiAgICAgICAgICAgIGlmIChtYXhQb2ludExlbmd0aCA8PSAzMikge1xuICAgICAgICAgICAgICAgIHBvaW50U2l6ZSA9IDI1NjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1heFBvaW50TGVuZ3RoIDw9IDQ4KSB7XG4gICAgICAgICAgICAgICAgcG9pbnRTaXplID0gMzg0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcG9pbnRTaXplID0gNTIxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IEVjVXRpbHMuZW5jb2RlU2lnbmF0dXJlKHRoaXMsIHBvaW50U2l6ZSk7XG4gICAgICAgIHJldHVybiBzaWduYXR1cmUuYnVmZmVyO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyV2l0aG91dFBhZGRpbmdDb252ZXJ0ZXIgfSlcbl0sIEVjRHNhU2lnbmF0dXJlLnByb3RvdHlwZSwgXCJyXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlcldpdGhvdXRQYWRkaW5nQ29udmVydGVyIH0pXG5dLCBFY0RzYVNpZ25hdHVyZS5wcm90b3R5cGUsIFwic1wiLCB2b2lkIDApO1xuXG5jbGFzcyBPbmVBc3ltbWV0cmljS2V5IGV4dGVuZHMgUHJpdmF0ZUtleUluZm8ge1xufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IGNvbnRleHQ6IDEsIGltcGxpY2l0OiB0cnVlLCB0eXBlOiBBc25Qcm9wVHlwZXMuQml0U3RyaW5nLCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgT25lQXN5bW1ldHJpY0tleS5wcm90b3R5cGUsIFwicHVibGljS2V5XCIsIHZvaWQgMCk7XG5cbmxldCBFZFByaXZhdGVLZXkgPSBjbGFzcyBFZFByaXZhdGVLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghanNvbi5kKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkOiBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWUgPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi5kKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3QgandrID0ge1xuICAgICAgICAgICAgZDogQ29udmVydC5Ub0Jhc2U2NFVybCh0aGlzLnZhbHVlKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGp3aztcbiAgICB9XG59O1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5PY3RldFN0cmluZyB9KVxuXSwgRWRQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuRWRQcml2YXRlS2V5ID0gX19kZWNvcmF0ZShbXG4gICAgQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5DaG9pY2UgfSlcbl0sIEVkUHJpdmF0ZUtleSk7XG5cbmxldCBFZFB1YmxpY0tleSA9IGNsYXNzIEVkUHVibGljS2V5IHtcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICB4OiBDb252ZXJ0LlRvQmFzZTY0VXJsKHRoaXMudmFsdWUpLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ganNvbjtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIShcInhcIiBpbiBqc29uKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwieDogTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gQ29udmVydC5Gcm9tQmFzZTY0VXJsKGpzb24ueCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn07XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkJpdFN0cmluZyB9KVxuXSwgRWRQdWJsaWNLZXkucHJvdG90eXBlLCBcInZhbHVlXCIsIHZvaWQgMCk7XG5FZFB1YmxpY0tleSA9IF9fZGVjb3JhdGUoW1xuICAgIEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuQ2hvaWNlIH0pXG5dLCBFZFB1YmxpY0tleSk7XG5cbmxldCBDdXJ2ZVByaXZhdGVLZXkgPSBjbGFzcyBDdXJ2ZVByaXZhdGVLZXkge1xufTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuT2N0ZXRTdHJpbmcgfSksXG4gICAgSnNvblByb3AoeyB0eXBlOiBKc29uUHJvcFR5cGVzLlN0cmluZywgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIEN1cnZlUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwiZFwiLCB2b2lkIDApO1xuQ3VydmVQcml2YXRlS2V5ID0gX19kZWNvcmF0ZShbXG4gICAgQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5DaG9pY2UgfSlcbl0sIEN1cnZlUHJpdmF0ZUtleSk7XG5cbmNvbnN0IGlkU2VjcDI1NnIxID0gXCIxLjIuODQwLjEwMDQ1LjMuMS43XCI7XG5jb25zdCBpZEVsbGlwdGljQ3VydmUgPSBcIjEuMy4xMzIuMFwiO1xuY29uc3QgaWRTZWNwMzg0cjEgPSBgJHtpZEVsbGlwdGljQ3VydmV9LjM0YDtcbmNvbnN0IGlkU2VjcDUyMXIxID0gYCR7aWRFbGxpcHRpY0N1cnZlfS4zNWA7XG5jb25zdCBpZFNlY3AyNTZrMSA9IGAke2lkRWxsaXB0aWNDdXJ2ZX0uMTBgO1xuY29uc3QgaWRWZXJzaW9uT25lID0gXCIxLjMuMzYuMy4zLjIuOC4xLjFcIjtcbmNvbnN0IGlkQnJhaW5wb29sUDE2MHIxID0gYCR7aWRWZXJzaW9uT25lfS4xYDtcbmNvbnN0IGlkQnJhaW5wb29sUDE2MHQxID0gYCR7aWRWZXJzaW9uT25lfS4yYDtcbmNvbnN0IGlkQnJhaW5wb29sUDE5MnIxID0gYCR7aWRWZXJzaW9uT25lfS4zYDtcbmNvbnN0IGlkQnJhaW5wb29sUDE5MnQxID0gYCR7aWRWZXJzaW9uT25lfS40YDtcbmNvbnN0IGlkQnJhaW5wb29sUDIyNHIxID0gYCR7aWRWZXJzaW9uT25lfS41YDtcbmNvbnN0IGlkQnJhaW5wb29sUDIyNHQxID0gYCR7aWRWZXJzaW9uT25lfS42YDtcbmNvbnN0IGlkQnJhaW5wb29sUDI1NnIxID0gYCR7aWRWZXJzaW9uT25lfS43YDtcbmNvbnN0IGlkQnJhaW5wb29sUDI1NnQxID0gYCR7aWRWZXJzaW9uT25lfS44YDtcbmNvbnN0IGlkQnJhaW5wb29sUDMyMHIxID0gYCR7aWRWZXJzaW9uT25lfS45YDtcbmNvbnN0IGlkQnJhaW5wb29sUDMyMHQxID0gYCR7aWRWZXJzaW9uT25lfS4xMGA7XG5jb25zdCBpZEJyYWlucG9vbFAzODRyMSA9IGAke2lkVmVyc2lvbk9uZX0uMTFgO1xuY29uc3QgaWRCcmFpbnBvb2xQMzg0dDEgPSBgJHtpZFZlcnNpb25PbmV9LjEyYDtcbmNvbnN0IGlkQnJhaW5wb29sUDUxMnIxID0gYCR7aWRWZXJzaW9uT25lfS4xM2A7XG5jb25zdCBpZEJyYWlucG9vbFA1MTJ0MSA9IGAke2lkVmVyc2lvbk9uZX0uMTRgO1xuY29uc3QgaWRYMjU1MTkgPSBcIjEuMy4xMDEuMTEwXCI7XG5jb25zdCBpZFg0NDggPSBcIjEuMy4xMDEuMTExXCI7XG5jb25zdCBpZEVkMjU1MTkgPSBcIjEuMy4xMDEuMTEyXCI7XG5jb25zdCBpZEVkNDQ4ID0gXCIxLjMuMTAxLjExM1wiO1xuXG52YXIgaW5kZXgkMSA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBBbGdvcml0aG1JZGVudGlmaWVyOiBBbGdvcml0aG1JZGVudGlmaWVyLFxuICBnZXQgQ3VydmVQcml2YXRlS2V5ICgpIHsgcmV0dXJuIEN1cnZlUHJpdmF0ZUtleTsgfSxcbiAgRWNEc2FTaWduYXR1cmU6IEVjRHNhU2lnbmF0dXJlLFxuICBFY1ByaXZhdGVLZXk6IEVjUHJpdmF0ZUtleSxcbiAgZ2V0IEVjUHVibGljS2V5ICgpIHsgcmV0dXJuIEVjUHVibGljS2V5OyB9LFxuICBnZXQgRWRQcml2YXRlS2V5ICgpIHsgcmV0dXJuIEVkUHJpdmF0ZUtleTsgfSxcbiAgZ2V0IEVkUHVibGljS2V5ICgpIHsgcmV0dXJuIEVkUHVibGljS2V5OyB9LFxuICBnZXQgT2JqZWN0SWRlbnRpZmllciAoKSB7IHJldHVybiBPYmplY3RJZGVudGlmaWVyOyB9LFxuICBPbmVBc3ltbWV0cmljS2V5OiBPbmVBc3ltbWV0cmljS2V5LFxuICBQcml2YXRlS2V5SW5mbzogUHJpdmF0ZUtleUluZm8sXG4gIFB1YmxpY0tleUluZm86IFB1YmxpY0tleUluZm8sXG4gIFJzYVByaXZhdGVLZXk6IFJzYVByaXZhdGVLZXksXG4gIFJzYVB1YmxpY0tleTogUnNhUHVibGljS2V5LFxuICBjb252ZXJ0ZXJzOiBpbmRleCQyLFxuICBpZEJyYWlucG9vbFAxNjByMTogaWRCcmFpbnBvb2xQMTYwcjEsXG4gIGlkQnJhaW5wb29sUDE2MHQxOiBpZEJyYWlucG9vbFAxNjB0MSxcbiAgaWRCcmFpbnBvb2xQMTkycjE6IGlkQnJhaW5wb29sUDE5MnIxLFxuICBpZEJyYWlucG9vbFAxOTJ0MTogaWRCcmFpbnBvb2xQMTkydDEsXG4gIGlkQnJhaW5wb29sUDIyNHIxOiBpZEJyYWlucG9vbFAyMjRyMSxcbiAgaWRCcmFpbnBvb2xQMjI0dDE6IGlkQnJhaW5wb29sUDIyNHQxLFxuICBpZEJyYWlucG9vbFAyNTZyMTogaWRCcmFpbnBvb2xQMjU2cjEsXG4gIGlkQnJhaW5wb29sUDI1NnQxOiBpZEJyYWlucG9vbFAyNTZ0MSxcbiAgaWRCcmFpbnBvb2xQMzIwcjE6IGlkQnJhaW5wb29sUDMyMHIxLFxuICBpZEJyYWlucG9vbFAzMjB0MTogaWRCcmFpbnBvb2xQMzIwdDEsXG4gIGlkQnJhaW5wb29sUDM4NHIxOiBpZEJyYWlucG9vbFAzODRyMSxcbiAgaWRCcmFpbnBvb2xQMzg0dDE6IGlkQnJhaW5wb29sUDM4NHQxLFxuICBpZEJyYWlucG9vbFA1MTJyMTogaWRCcmFpbnBvb2xQNTEycjEsXG4gIGlkQnJhaW5wb29sUDUxMnQxOiBpZEJyYWlucG9vbFA1MTJ0MSxcbiAgaWRFZDI1NTE5OiBpZEVkMjU1MTksXG4gIGlkRWQ0NDg6IGlkRWQ0NDgsXG4gIGlkRWxsaXB0aWNDdXJ2ZTogaWRFbGxpcHRpY0N1cnZlLFxuICBpZFNlY3AyNTZrMTogaWRTZWNwMjU2azEsXG4gIGlkU2VjcDI1NnIxOiBpZFNlY3AyNTZyMSxcbiAgaWRTZWNwMzg0cjE6IGlkU2VjcDM4NHIxLFxuICBpZFNlY3A1MjFyMTogaWRTZWNwNTIxcjEsXG4gIGlkVmVyc2lvbk9uZTogaWRWZXJzaW9uT25lLFxuICBpZFgyNTUxOTogaWRYMjU1MTksXG4gIGlkWDQ0ODogaWRYNDQ4XG59KTtcblxuY2xhc3MgRWNDdXJ2ZXMge1xuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG4gICAgc3RhdGljIHJlZ2lzdGVyKGl0ZW0pIHtcbiAgICAgICAgY29uc3Qgb2lkID0gbmV3IE9iamVjdElkZW50aWZpZXIoKTtcbiAgICAgICAgb2lkLnZhbHVlID0gaXRlbS5pZDtcbiAgICAgICAgY29uc3QgcmF3ID0gQXNuQ29udmVydC5zZXJpYWxpemUob2lkKTtcbiAgICAgICAgdGhpcy5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICByYXcsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWVzLnB1c2goaXRlbS5uYW1lKTtcbiAgICB9XG4gICAgc3RhdGljIGZpbmQobmFtZU9ySWQpIHtcbiAgICAgICAgbmFtZU9ySWQgPSBuYW1lT3JJZC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5pdGVtcykge1xuICAgICAgICAgICAgaWYgKGl0ZW0ubmFtZS50b1VwcGVyQ2FzZSgpID09PSBuYW1lT3JJZCB8fCBpdGVtLmlkLnRvVXBwZXJDYXNlKCkgPT09IG5hbWVPcklkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQobmFtZU9ySWQpIHtcbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy5maW5kKG5hbWVPcklkKTtcbiAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgRUMgbmFtZWQgY3VydmUgJyR7bmFtZU9ySWR9J2ApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxufVxuRWNDdXJ2ZXMuaXRlbXMgPSBbXTtcbkVjQ3VydmVzLm5hbWVzID0gW107XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiUC0yNTZcIiwgaWQ6IGlkU2VjcDI1NnIxLCBzaXplOiAyNTYgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiUC0zODRcIiwgaWQ6IGlkU2VjcDM4NHIxLCBzaXplOiAzODQgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiUC01MjFcIiwgaWQ6IGlkU2VjcDUyMXIxLCBzaXplOiA1MjEgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiSy0yNTZcIiwgaWQ6IGlkU2VjcDI1NmsxLCBzaXplOiAyNTYgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDE2MHIxXCIsIGlkOiBpZEJyYWlucG9vbFAxNjByMSwgc2l6ZTogMTYwIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAxNjB0MVwiLCBpZDogaWRCcmFpbnBvb2xQMTYwdDEsIHNpemU6IDE2MCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMTkycjFcIiwgaWQ6IGlkQnJhaW5wb29sUDE5MnIxLCBzaXplOiAxOTIgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDE5MnQxXCIsIGlkOiBpZEJyYWlucG9vbFAxOTJ0MSwgc2l6ZTogMTkyIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAyMjRyMVwiLCBpZDogaWRCcmFpbnBvb2xQMjI0cjEsIHNpemU6IDIyNCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMjI0dDFcIiwgaWQ6IGlkQnJhaW5wb29sUDIyNHQxLCBzaXplOiAyMjQgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDI1NnIxXCIsIGlkOiBpZEJyYWlucG9vbFAyNTZyMSwgc2l6ZTogMjU2IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAyNTZ0MVwiLCBpZDogaWRCcmFpbnBvb2xQMjU2dDEsIHNpemU6IDI1NiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMzIwcjFcIiwgaWQ6IGlkQnJhaW5wb29sUDMyMHIxLCBzaXplOiAzMjAgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDMyMHQxXCIsIGlkOiBpZEJyYWlucG9vbFAzMjB0MSwgc2l6ZTogMzIwIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAzODRyMVwiLCBpZDogaWRCcmFpbnBvb2xQMzg0cjEsIHNpemU6IDM4NCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMzg0dDFcIiwgaWQ6IGlkQnJhaW5wb29sUDM4NHQxLCBzaXplOiAzODQgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDUxMnIxXCIsIGlkOiBpZEJyYWlucG9vbFA1MTJyMSwgc2l6ZTogNTEyIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFA1MTJ0MVwiLCBpZDogaWRCcmFpbnBvb2xQNTEydDEsIHNpemU6IDUxMiB9KTtcblxuY2xhc3MgWDI1NTE5UHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiWDI1NTE5XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wiZGVyaXZlS2V5XCIsIFwiZGVyaXZlQml0c1wiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW10sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwicHVibGljXCIpO1xuICAgIH1cbn1cblxuY2xhc3MgRWQyNTUxOVByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkVkMjU1MTlcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJzaWduXCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXCJ2ZXJpZnlcIl0sXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5jbGFzcyBIbWFjUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiSE1BQ1wiO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1wiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIl07XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wic2lnblwiLCBcInZlcmlmeVwiXTtcbiAgICB9XG4gICAgZ2V0RGVmYXVsdExlbmd0aChhbGdOYW1lKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMjU2XCI6XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTM4NFwiOlxuICAgICAgICAgICAgY2FzZSBcIlNIQS01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gNTEyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYWxnb3JpdGhtIG5hbWUgJyR7YWxnTmFtZX0nYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICAgICAgaWYgKFwibGVuZ3RoXCIgaW4gYWxnb3JpdGhtKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobS5sZW5ndGggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibGVuZ3RoOiBJcyBub3QgYSBOdW1iZXJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxnb3JpdGhtLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcImxlbmd0aDogTnVtYmVyIGlzIG91dCBvZiByYW5nZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0ltcG9ydFBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICB9XG59XG5cbmNsYXNzIFBia2RmMlByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlBCS0RGMlwiO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1wiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIl07XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZGVyaXZlQml0c1wiLCBcImRlcml2ZUtleVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJoYXNoXCIpO1xuICAgICAgICB0aGlzLmNoZWNrSGFzaEFsZ29yaXRobShhbGdvcml0aG0uaGFzaCwgdGhpcy5oYXNoQWxnb3JpdGhtcyk7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJzYWx0XCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0uc2FsdCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhhbGdvcml0aG0uc2FsdCkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwic2FsdDogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaXRlcmF0aW9uc1wiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhbGdvcml0aG0uaXRlcmF0aW9ucyAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIml0ZXJhdGlvbnM6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLml0ZXJhdGlvbnMgPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXRlcmF0aW9uczogSXMgbGVzcyB0aGFuIDFcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tJbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tJbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpO1xuICAgICAgICBpZiAoZXh0cmFjdGFibGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcImV4dHJhY3RhYmxlOiBNdXN0IGJlICdmYWxzZSdcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEhrZGZQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJIS0RGXCI7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiXTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJkZXJpdmVLZXlcIiwgXCJkZXJpdmVCaXRzXCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInNhbHRcIik7XG4gICAgICAgIGlmICghQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKGFsZ29yaXRobS5zYWx0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInNhbHQ6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImluZm9cIik7XG4gICAgICAgIGlmICghQnVmZmVyU291cmNlQ29udmVydGVyLmlzQnVmZmVyU291cmNlKGFsZ29yaXRobS5pbmZvKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInNhbHQ6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tJbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tJbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpO1xuICAgICAgICBpZiAoZXh0cmFjdGFibGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcImV4dHJhY3RhYmxlOiBNdXN0IGJlICdmYWxzZSdcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgICAgIHRoaXMuZGVmYXVsdExlbmd0aCA9IDA7XG4gICAgfVxuICAgIGRpZ2VzdCguLi5hcmdzKSB7XG4gICAgICAgIGFyZ3NbMF0gPSB7IGxlbmd0aDogdGhpcy5kZWZhdWx0TGVuZ3RoLCAuLi5hcmdzWzBdIH07XG4gICAgICAgIHJldHVybiBzdXBlci5kaWdlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICBzdXBlci5jaGVja0RpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBhbGdvcml0aG0ubGVuZ3RoIHx8IDA7XG4gICAgICAgIGlmICh0eXBlb2YgbGVuZ3RoICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibGVuZ3RoOiBJcyBub3QgYSBOdW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxlbmd0aCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IElzIG5lZ2F0aXZlXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZTEyOFByb3ZpZGVyIGV4dGVuZHMgU2hha2VQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwic2hha2UxMjhcIjtcbiAgICAgICAgdGhpcy5kZWZhdWx0TGVuZ3RoID0gMTY7XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZTI1NlByb3ZpZGVyIGV4dGVuZHMgU2hha2VQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwic2hha2UyNTZcIjtcbiAgICAgICAgdGhpcy5kZWZhdWx0TGVuZ3RoID0gMzI7XG4gICAgfVxufVxuXG5jbGFzcyBDcnlwdG8ge1xuICAgIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICAgICAgcmV0dXJuIFwiQ3J5cHRvXCI7XG4gICAgfVxuICAgIHJhbmRvbVVVSUQoKSB7XG4gICAgICAgIGNvbnN0IGIgPSB0aGlzLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgxNikpO1xuICAgICAgICBiWzZdID0gKGJbNl0gJiAweDBmKSB8IDB4NDA7XG4gICAgICAgIGJbOF0gPSAoYls4XSAmIDB4M2YpIHwgMHg4MDtcbiAgICAgICAgY29uc3QgdXVpZCA9IENvbnZlcnQuVG9IZXgoYikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGAke3V1aWQuc3Vic3RyaW5nKDAsIDgpfS0ke3V1aWQuc3Vic3RyaW5nKDgsIDEyKX0tJHt1dWlkLnN1YnN0cmluZygxMiwgMTYpfS0ke3V1aWQuc3Vic3RyaW5nKDE2LCAyMCl9LSR7dXVpZC5zdWJzdHJpbmcoMjApfWA7XG4gICAgfVxufVxuXG5jbGFzcyBQcm92aWRlclN0b3JhZ2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLml0ZW1zID0ge307XG4gICAgfVxuICAgIGdldChhbGdvcml0aG1OYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zW2FsZ29yaXRobU5hbWUudG9Mb3dlckNhc2UoKV0gfHwgbnVsbDtcbiAgICB9XG4gICAgc2V0KHByb3ZpZGVyKSB7XG4gICAgICAgIHRoaXMuaXRlbXNbcHJvdmlkZXIubmFtZS50b0xvd2VyQ2FzZSgpXSA9IHByb3ZpZGVyO1xuICAgIH1cbiAgICByZW1vdmVBdChhbGdvcml0aG1OYW1lKSB7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXQoYWxnb3JpdGhtTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKHByb3ZpZGVyKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5pdGVtc1thbGdvcml0aG1OYW1lXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvdmlkZXI7XG4gICAgfVxuICAgIGhhcyhuYW1lKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZ2V0KG5hbWUpO1xuICAgIH1cbiAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5pdGVtcykubGVuZ3RoO1xuICAgIH1cbiAgICBnZXQgYWxnb3JpdGhtcygpIHtcbiAgICAgICAgY29uc3QgYWxnb3JpdGhtcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuaXRlbXNba2V5XTtcbiAgICAgICAgICAgIGFsZ29yaXRobXMucHVzaChwcm92aWRlci5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxnb3JpdGhtcy5zb3J0KCk7XG4gICAgfVxufVxuXG5jb25zdCBrZXlGb3JtYXRNYXAgPSB7XG4gICAgXCJqd2tcIjogW1wicHJpdmF0ZVwiLCBcInB1YmxpY1wiLCBcInNlY3JldFwiXSxcbiAgICBcInBrY3M4XCI6IFtcInByaXZhdGVcIl0sXG4gICAgXCJzcGtpXCI6IFtcInB1YmxpY1wiXSxcbiAgICBcInJhd1wiOiBbXCJzZWNyZXRcIiwgXCJwdWJsaWNcIl1cbn07XG5jb25zdCBzb3VyY2VCdWZmZXJLZXlGb3JtYXRzID0gW1wicGtjczhcIiwgXCJzcGtpXCIsIFwicmF3XCJdO1xuY2xhc3MgU3VidGxlQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMgPSBuZXcgUHJvdmlkZXJTdG9yYWdlKCk7XG4gICAgfVxuICAgIHN0YXRpYyBpc0hhc2hlZEFsZ29yaXRobShkYXRhKSB7XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICAgICAgICAmJiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIlxuICAgICAgICAgICAgJiYgXCJuYW1lXCIgaW4gZGF0YVxuICAgICAgICAgICAgJiYgXCJoYXNoXCIgaW4gZGF0YVxuICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICA6IGZhbHNlO1xuICAgIH1cbiAgICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgICAgIHJldHVybiBcIlN1YnRsZUNyeXB0b1wiO1xuICAgIH1cbiAgICBhc3luYyBkaWdlc3QoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgMiwgXCJkaWdlc3RcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGRhdGEsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERhdGEgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5kaWdlc3QocHJlcGFyZWRBbGdvcml0aG0sIHByZXBhcmVkRGF0YSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgZ2VuZXJhdGVLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgMywgXCJnZW5lcmF0ZUtleVwiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZ2VuZXJhdGVLZXkoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBzaWduKC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDMsIFwic2lnblwiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwga2V5LCBkYXRhLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXkpO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERhdGEgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5zaWduKHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwga2V5LCBwcmVwYXJlZERhdGEsIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIHZlcmlmeSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCA0LCBcInZlcmlmeVwiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGRhdGEpO1xuICAgICAgICBjb25zdCBwcmVwYXJlZFNpZ25hdHVyZSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHNpZ25hdHVyZSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIudmVyaWZ5KHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwga2V5LCBwcmVwYXJlZFNpZ25hdHVyZSwgcHJlcGFyZWREYXRhLCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBlbmNyeXB0KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDMsIFwiZW5jcnlwdFwiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwga2V5LCBkYXRhLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXkpO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERhdGEgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5lbmNyeXB0KHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwga2V5LCBwcmVwYXJlZERhdGEsIHsga2V5VXNhZ2U6IHRydWUgfSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgZGVjcnlwdCguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAzLCBcImRlY3J5cHRcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGtleSwgZGF0YSwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWREYXRhID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZGVjcnlwdCh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGtleSwgcHJlcGFyZWREYXRhLCB7IGtleVVzYWdlOiB0cnVlIH0sIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGRlcml2ZUJpdHMoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgMywgXCJkZXJpdmVCaXRzXCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBiYXNlS2V5LCBsZW5ndGgsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGJhc2VLZXkpO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmRlcml2ZUJpdHMoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBiYXNlS2V5LCBsZW5ndGgsIHsga2V5VXNhZ2U6IHRydWUgfSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgZGVyaXZlS2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDUsIFwiZGVyaXZlS2V5XCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBiYXNlS2V5LCBkZXJpdmVkS2V5VHlwZSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGVyaXZlZEtleVR5cGUgPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oZGVyaXZlZEtleVR5cGUpO1xuICAgICAgICBjb25zdCBpbXBvcnRQcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWREZXJpdmVkS2V5VHlwZS5uYW1lKTtcbiAgICAgICAgaW1wb3J0UHJvdmlkZXIuY2hlY2tEZXJpdmVkS2V5UGFyYW1zKHByZXBhcmVkRGVyaXZlZEtleVR5cGUpO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIHByb3ZpZGVyLmNoZWNrQ3J5cHRvS2V5KGJhc2VLZXksIFwiZGVyaXZlS2V5XCIpO1xuICAgICAgICBjb25zdCBkZXJpdmVkQml0cyA9IGF3YWl0IHByb3ZpZGVyLmRlcml2ZUJpdHMoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBiYXNlS2V5LCBkZXJpdmVkS2V5VHlwZS5sZW5ndGggfHwgNTEyLCB7IGtleVVzYWdlOiBmYWxzZSB9LCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRLZXkoXCJyYXdcIiwgZGVyaXZlZEJpdHMsIGRlcml2ZWRLZXlUeXBlLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXMpO1xuICAgIH1cbiAgICBhc3luYyBleHBvcnRLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgMiwgXCJleHBvcnRLZXlcIik7XG4gICAgICAgIGNvbnN0IFtmb3JtYXQsIGtleSwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCFrZXlGb3JtYXRNYXBbZm9ybWF0XSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQga2V5Rm9ybWF0IGFyZ3VtZW50XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgha2V5Rm9ybWF0TWFwW2Zvcm1hdF0uaW5jbHVkZXMoa2V5LnR5cGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKFwiVGhlIGtleSBpcyBub3Qgb2YgdGhlIGV4cGVjdGVkIHR5cGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKGtleS5hbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmV4cG9ydEtleShmb3JtYXQsIGtleSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgaW1wb3J0S2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDUsIFwiaW1wb3J0S2V5XCIpO1xuICAgICAgICBjb25zdCBbZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiandrXCIpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5RGF0YSAhPT0gXCJvYmplY3RcIiB8fCAha2V5RGF0YS5rdHkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiS2V5IGRhdGEgbXVzdCBiZSBhbiBvYmplY3QgZm9yIEpXSyBpbXBvcnRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc291cmNlQnVmZmVyS2V5Rm9ybWF0cy5pbmNsdWRlcyhmb3JtYXQpKSB7XG4gICAgICAgICAgICBpZiAoIUJ1ZmZlclNvdXJjZUNvbnZlcnRlci5pc0J1ZmZlclNvdXJjZShrZXlEYXRhKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJLZXkgZGF0YSBtdXN0IGJlIGEgQnVmZmVyU291cmNlIGZvciBub24tSldLIGZvcm1hdHNcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIHByb3ZpZGVkIHZhbHVlIGlzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3IG9yIEpzb25XZWJLZXkpJ1wiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvdmlkZXIuaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXMpO1xuICAgIH1cbiAgICBhc3luYyB3cmFwS2V5KGZvcm1hdCwga2V5LCB3cmFwcGluZ0tleSwgd3JhcEFsZ29yaXRobSwgLi4uYXJncykge1xuICAgICAgICBsZXQga2V5RGF0YSA9IGF3YWl0IHRoaXMuZXhwb3J0S2V5KGZvcm1hdCwga2V5LCAuLi5hcmdzKTtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJqd2tcIikge1xuICAgICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGtleURhdGEpO1xuICAgICAgICAgICAga2V5RGF0YSA9IENvbnZlcnQuRnJvbVV0ZjhTdHJpbmcoanNvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0od3JhcEFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGtleURhdGEpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIHJldHVybiBwcm92aWRlci5lbmNyeXB0KHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgd3JhcHBpbmdLZXksIHByZXBhcmVkRGF0YSwgeyBrZXlVc2FnZTogZmFsc2UgfSwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIHVud3JhcEtleShmb3JtYXQsIHdyYXBwZWRLZXksIHVud3JhcHBpbmdLZXksIHVud3JhcEFsZ29yaXRobSwgdW53cmFwcGVkS2V5QWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5hcmdzKSB7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKHVud3JhcEFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHdyYXBwZWRLZXkpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGxldCBrZXlEYXRhID0gYXdhaXQgcHJvdmlkZXIuZGVjcnlwdCh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIHVud3JhcHBpbmdLZXksIHByZXBhcmVkRGF0YSwgeyBrZXlVc2FnZTogZmFsc2UgfSwgLi4uYXJncyk7XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiandrXCIpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAga2V5RGF0YSA9IEpTT04ucGFyc2UoQ29udmVydC5Ub1V0ZjhTdHJpbmcoa2V5RGF0YSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoXCJ3cmFwcGVkS2V5OiBJcyBub3QgYSBKU09OXCIpO1xuICAgICAgICAgICAgICAgIGVycm9yLmludGVybmFsID0gZTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB1bndyYXBwZWRLZXlBbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBjaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIHNpemUsIG1ldGhvZE5hbWUpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgc2l6ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRmFpbGVkIHRvIGV4ZWN1dGUgJyR7bWV0aG9kTmFtZX0nIG9uICdTdWJ0bGVDcnlwdG8nOiAke3NpemV9IGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgJHthcmdzLmxlbmd0aH0gcHJlc2VudGApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGFsZ29yaXRobSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFN1YnRsZUNyeXB0by5pc0hhc2hlZEFsZ29yaXRobShhbGdvcml0aG0pKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHsgLi4uYWxnb3JpdGhtIH07XG4gICAgICAgICAgICBwcmVwYXJlZEFsZ29yaXRobS5oYXNoID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoKTtcbiAgICAgICAgICAgIHJldHVybiBwcmVwYXJlZEFsZ29yaXRobTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5hbGdvcml0aG0gfTtcbiAgICB9XG4gICAgZ2V0UHJvdmlkZXIobmFtZSkge1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMucHJvdmlkZXJzLmdldChuYW1lKTtcbiAgICAgICAgaWYgKCFwcm92aWRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEFsZ29yaXRobUVycm9yKFwiVW5yZWNvZ25pemVkIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3ZpZGVyO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluc3RhbmNlb2YgQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgS2V5IGlzIG5vdCBvZiB0eXBlICdDcnlwdG9LZXknYCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbnZhciBpbmRleCA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBjb252ZXJ0ZXJzOiBpbmRleCQzXG59KTtcblxuY29uc3QgUkVRVUlSRURfRklFTERTID0gW1wiY3J2XCIsIFwiZVwiLCBcImtcIiwgXCJrdHlcIiwgXCJuXCIsIFwieFwiLCBcInlcIl07XG5jbGFzcyBKd2tVdGlscyB7XG4gICAgc3RhdGljIGFzeW5jIHRodW1icHJpbnQoaGFzaCwgandrLCBjcnlwdG8pIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZm9ybWF0KGp3aywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBjcnlwdG8uc3VidGxlLmRpZ2VzdChoYXNoLCBDb252ZXJ0LkZyb21CaW5hcnkoSlNPTi5zdHJpbmdpZnkoZGF0YSkpKTtcbiAgICB9XG4gICAgc3RhdGljIGZvcm1hdChqd2ssIHJlbW92ZSA9IGZhbHNlKSB7XG4gICAgICAgIGxldCByZXMgPSBPYmplY3QuZW50cmllcyhqd2spO1xuICAgICAgICBpZiAocmVtb3ZlKSB7XG4gICAgICAgICAgICByZXMgPSByZXMuZmlsdGVyKG8gPT4gUkVRVUlSRURfRklFTERTLmluY2x1ZGVzKG9bMF0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXMgPSByZXMuc29ydCgoW2tleUFdLCBba2V5Ql0pID0+IGtleUEgPiBrZXlCID8gMSA6IGtleUEgPCBrZXlCID8gLTEgOiAwKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhyZXMpO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgQWVzQ2JjUHJvdmlkZXIsIEFlc0NtYWNQcm92aWRlciwgQWVzQ3RyUHJvdmlkZXIsIEFlc0VjYlByb3ZpZGVyLCBBZXNHY21Qcm92aWRlciwgQWVzS3dQcm92aWRlciwgQWVzUHJvdmlkZXIsIEFsZ29yaXRobUVycm9yLCBDcnlwdG8sIENyeXB0b0Vycm9yLCBDcnlwdG9LZXksIERlc1Byb3ZpZGVyLCBFY0N1cnZlcywgRWNVdGlscywgRWNkaEVzUHJvdmlkZXIsIEVjZGhQcm92aWRlciwgRWNkc2FQcm92aWRlciwgRWQyNTUxOVByb3ZpZGVyLCBFZERzYVByb3ZpZGVyLCBFbGxpcHRpY1Byb3ZpZGVyLCBIa2RmUHJvdmlkZXIsIEhtYWNQcm92aWRlciwgSndrVXRpbHMsIE9wZXJhdGlvbkVycm9yLCBQYmtkZjJQcm92aWRlciwgUGVtQ29udmVydGVyLCBQcm92aWRlckNyeXB0bywgUHJvdmlkZXJTdG9yYWdlLCBSZXF1aXJlZFByb3BlcnR5RXJyb3IsIFJzYU9hZXBQcm92aWRlciwgUnNhUHJvdmlkZXIsIFJzYVBzc1Byb3ZpZGVyLCBSc2FTc2FQcm92aWRlciwgU2hha2UxMjhQcm92aWRlciwgU2hha2UyNTZQcm92aWRlciwgU2hha2VQcm92aWRlciwgU3VidGxlQ3J5cHRvLCBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yLCBYMjU1MTlQcm92aWRlciwgaW5kZXgkMSBhcyBhc24xLCBpc0pXSywgaW5kZXggYXMganNvbiB9O1xuIiwgIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIHZhciBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwgIi8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovXG5leHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IChuQnl0ZXMgKiA4KSAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IChlICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIG0gPSBlICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIGUgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IG1MZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IChtICogMjU2KSArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKCh2YWx1ZSAqIGMpIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IGUgKyBlQmlhc1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBNYXRoLnBvdygyLCBlQmlhcyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSAwXG4gICAgfVxuICB9XG5cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW29mZnNldCArIGldID0gbSAmIDB4ZmYsIGkgKz0gZCwgbSAvPSAyNTYsIG1MZW4gLT0gOCkge31cblxuICBlID0gKGUgPDwgbUxlbikgfCBtXG4gIGVMZW4gKz0gbUxlblxuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IGUgJiAweGZmLCBpICs9IGQsIGUgLz0gMjU2LCBlTGVuIC09IDgpIHt9XG5cbiAgYnVmZmVyW29mZnNldCArIGkgLSBkXSB8PSBzICogMTI4XG59XG4iLCAiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxudmFyIGN1c3RvbUluc3BlY3RTeW1ib2wgPVxuICAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sWydmb3InXSA9PT0gJ2Z1bmN0aW9uJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICA/IFN5bWJvbFsnZm9yJ10oJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBkb3Qtbm90YXRpb25cbiAgICA6IG51bGxcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG52YXIgS19NQVhfTEVOR1RIID0gMHg3ZmZmZmZmZlxuZXhwb3J0cy5rTWF4TGVuZ3RoID0gS19NQVhfTEVOR1RIXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFByaW50IHdhcm5pbmcgYW5kIHJlY29tbWVuZCB1c2luZyBgYnVmZmVyYCB2NC54IHdoaWNoIGhhcyBhbiBPYmplY3RcbiAqICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIFdlIHJlcG9ydCB0aGF0IHRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGlmIHRoZSBhcmUgbm90IHN1YmNsYXNzYWJsZVxuICogdXNpbmcgX19wcm90b19fLiBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YFxuICogKFNlZTogaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk1NDM4KS4gSUUgMTAgbGFja3Mgc3VwcG9ydFxuICogZm9yIF9fcHJvdG9fXyBhbmQgaGFzIGEgYnVnZ3kgdHlwZWQgYXJyYXkgaW1wbGVtZW50YXRpb24uXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gdHlwZWRBcnJheVN1cHBvcnQoKVxuXG5pZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gIGNvbnNvbGUuZXJyb3IoXG4gICAgJ1RoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSAnICtcbiAgICAnYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4nXG4gIClcbn1cblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICAvLyBDYW4gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWQ/XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gICAgdmFyIHByb3RvID0geyBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH0gfVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm90bywgVWludDhBcnJheS5wcm90b3R5cGUpXG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGFyciwgcHJvdG8pXG4gICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDJcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAncGFyZW50Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLmJ1ZmZlclxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgJ29mZnNldCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcykpIHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4gdGhpcy5ieXRlT2Zmc2V0XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAobGVuZ3RoKSB7XG4gIGlmIChsZW5ndGggPiBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIFwiJyArIGxlbmd0aCArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihidWYsIEJ1ZmZlci5wcm90b3R5cGUpXG4gIHJldHVybiBidWZcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIC8vIENvbW1vbiBjYXNlLlxuICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nT3JPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZShhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20oYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG5mdW5jdGlvbiBmcm9tICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZyb21TdHJpbmcodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQpXG4gIH1cblxuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHZhbHVlKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlWaWV3KHZhbHVlKVxuICB9XG5cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksICcgK1xuICAgICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKVxuICAgIClcbiAgfVxuXG4gIGlmIChpc0luc3RhbmNlKHZhbHVlLCBBcnJheUJ1ZmZlcikgfHxcbiAgICAgICh2YWx1ZSAmJiBpc0luc3RhbmNlKHZhbHVlLmJ1ZmZlciwgQXJyYXlCdWZmZXIpKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAoaXNJbnN0YW5jZSh2YWx1ZSwgU2hhcmVkQXJyYXlCdWZmZXIpIHx8XG4gICAgICAodmFsdWUgJiYgaXNJbnN0YW5jZSh2YWx1ZS5idWZmZXIsIFNoYXJlZEFycmF5QnVmZmVyKSkpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJ1xuICAgIClcbiAgfVxuXG4gIHZhciB2YWx1ZU9mID0gdmFsdWUudmFsdWVPZiAmJiB2YWx1ZS52YWx1ZU9mKClcbiAgaWYgKHZhbHVlT2YgIT0gbnVsbCAmJiB2YWx1ZU9mICE9PSB2YWx1ZSkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZU9mLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICB2YXIgYiA9IGZyb21PYmplY3QodmFsdWUpXG4gIGlmIChiKSByZXR1cm4gYlxuXG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9QcmltaXRpdmUgIT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oXG4gICAgICB2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdKCdzdHJpbmcnKSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoXG4gICAgKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAnVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgJyArXG4gICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKVxuICApXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gTm90ZTogQ2hhbmdlIHByb3RvdHlwZSAqYWZ0ZXIqIEJ1ZmZlci5mcm9tIGlzIGRlZmluZWQgdG8gd29ya2Fyb3VuZCBDaHJvbWUgYnVnOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC8xNDhcbk9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIucHJvdG90eXBlLCBVaW50OEFycmF5LnByb3RvdHlwZSlcbk9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIsIFVpbnQ4QXJyYXkpXG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyBzaXplICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2MgKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbiAgfVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT25seSBwYXkgYXR0ZW50aW9uIHRvIGVuY29kaW5nIGlmIGl0J3MgYSBzdHJpbmcuIFRoaXNcbiAgICAvLyBwcmV2ZW50cyBhY2NpZGVudGFsbHkgc2VuZGluZyBpbiBhIG51bWJlciB0aGF0IHdvdWxkXG4gICAgLy8gYmUgaW50ZXJwcmV0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlIChzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcblxuICB2YXIgYWN0dWFsID0gYnVmLndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICBidWYgPSBidWYuc2xpY2UoMCwgYWN0dWFsKVxuICB9XG5cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlIChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgYnVmW2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheVZpZXcgKGFycmF5Vmlldykge1xuICBpZiAoaXNJbnN0YW5jZShhcnJheVZpZXcsIFVpbnQ4QXJyYXkpKSB7XG4gICAgdmFyIGNvcHkgPSBuZXcgVWludDhBcnJheShhcnJheVZpZXcpXG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcihjb3B5LmJ1ZmZlciwgY29weS5ieXRlT2Zmc2V0LCBjb3B5LmJ5dGVMZW5ndGgpXG4gIH1cbiAgcmV0dXJuIGZyb21BcnJheUxpa2UoYXJyYXlWaWV3KVxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wib2Zmc2V0XCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJsZW5ndGhcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgdmFyIGJ1ZlxuICBpZiAoYnl0ZU9mZnNldCA9PT0gdW5kZWZpbmVkICYmIGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGJ1ZiwgQnVmZmVyLnByb3RvdHlwZSlcblxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKG9iaikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iaikpIHtcbiAgICB2YXIgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbilcblxuICAgIGlmIChidWYubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYnVmXG4gICAgfVxuXG4gICAgb2JqLmNvcHkoYnVmLCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIGJ1ZlxuICB9XG5cbiAgaWYgKG9iai5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgbnVtYmVySXNOYU4ob2JqLmxlbmd0aCkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIoMClcbiAgICB9XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKVxuICB9XG5cbiAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iai5kYXRhKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBLX01BWF9MRU5HVEhgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIEtfTUFYX0xFTkdUSC50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlciA9PT0gdHJ1ZSAmJlxuICAgIGIgIT09IEJ1ZmZlci5wcm90b3R5cGUgLy8gc28gQnVmZmVyLmlzQnVmZmVyKEJ1ZmZlci5wcm90b3R5cGUpIHdpbGwgYmUgZmFsc2Vcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmIChpc0luc3RhbmNlKGEsIFVpbnQ4QXJyYXkpKSBhID0gQnVmZmVyLmZyb20oYSwgYS5vZmZzZXQsIGEuYnl0ZUxlbmd0aClcbiAgaWYgKGlzSW5zdGFuY2UoYiwgVWludDhBcnJheSkpIGIgPSBCdWZmZXIuZnJvbShiLCBiLm9mZnNldCwgYi5ieXRlTGVuZ3RoKVxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJidWYxXCIsIFwiYnVmMlwiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5J1xuICAgIClcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmIChpc0luc3RhbmNlKGJ1ZiwgVWludDhBcnJheSkpIHtcbiAgICAgIGlmIChwb3MgKyBidWYubGVuZ3RoID4gYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICBCdWZmZXIuZnJvbShidWYpLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgYnVmLFxuICAgICAgICAgIHBvc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIH1cbiAgICBwb3MgKz0gYnVmLmxlbmd0aFxuICB9XG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBpc0luc3RhbmNlKHN0cmluZywgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHN0cmluZ1xuICAgIClcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBtdXN0TWF0Y2ggPSAoYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdID09PSB0cnVlKVxuICBpZiAoIW11c3RNYXRjaCAmJiBsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHtcbiAgICAgICAgICByZXR1cm4gbXVzdE1hdGNoID8gLTEgOiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICB9XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcmNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIChhbmQgdGhlIGBpcy1idWZmZXJgIG5wbSBwYWNrYWdlKVxuLy8gdG8gZGV0ZWN0IGEgQnVmZmVyIGluc3RhbmNlLiBJdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgYGluc3RhbmNlb2YgQnVmZmVyYFxuLy8gcmVsaWFibHkgaW4gYSBicm93c2VyaWZ5IGNvbnRleHQgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBkaWZmZXJlbnRcbi8vIGNvcGllcyBvZiB0aGUgJ2J1ZmZlcicgcGFja2FnZSBpbiB1c2UuIFRoaXMgbWV0aG9kIHdvcmtzIGV2ZW4gZm9yIEJ1ZmZlclxuLy8gaW5zdGFuY2VzIHRoYXQgd2VyZSBjcmVhdGVkIGZyb20gYW5vdGhlciBjb3B5IG9mIHRoZSBgYnVmZmVyYCBwYWNrYWdlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTU0XG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW5ndGggPT09IDApIHJldHVybiAnJ1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCAwLCBsZW5ndGgpXG4gIHJldHVybiBzbG93VG9TdHJpbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nID0gQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZ1xuXG5CdWZmZXIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIGlmICh0aGlzID09PSBiKSByZXR1cm4gdHJ1ZVxuICByZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcywgYikgPT09IDBcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0ID0gZnVuY3Rpb24gaW5zcGVjdCAoKSB7XG4gIHZhciBzdHIgPSAnJ1xuICB2YXIgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLnJlcGxhY2UoLyguezJ9KS9nLCAnJDEgJykudHJpbSgpXG4gIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cbmlmIChjdXN0b21JbnNwZWN0U3ltYm9sKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGVbY3VzdG9tSW5zcGVjdFN5bWJvbF0gPSBCdWZmZXIucHJvdG90eXBlLmluc3BlY3Rcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAodGFyZ2V0LCBzdGFydCwgZW5kLCB0aGlzU3RhcnQsIHRoaXNFbmQpIHtcbiAgaWYgKGlzSW5zdGFuY2UodGFyZ2V0LCBVaW50OEFycmF5KSkge1xuICAgIHRhcmdldCA9IEJ1ZmZlci5mcm9tKHRhcmdldCwgdGFyZ2V0Lm9mZnNldCwgdGFyZ2V0LmJ5dGVMZW5ndGgpXG4gIH1cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwidGFyZ2V0XCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB0YXJnZXQpXG4gICAgKVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0YXJnZXQgPyB0YXJnZXQubGVuZ3RoIDogMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNTdGFydCA9IDBcbiAgfVxuICBpZiAodGhpc0VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMVxuICB9XG5cbiAgc3RhcnQgPj4+PSAwXG4gIGVuZCA+Pj49IDBcbiAgdGhpc1N0YXJ0ID4+Pj0gMFxuICB0aGlzRW5kID4+Pj0gMFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQpIHJldHVybiAwXG5cbiAgdmFyIHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0XG4gIHZhciB5ID0gZW5kIC0gc3RhcnRcbiAgdmFyIGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgdmFyIHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpXG4gIHZhciB0YXJnZXRDb3B5ID0gdGFyZ2V0LnNsaWNlKHN0YXJ0LCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzQ29weVtpXSAhPT0gdGFyZ2V0Q29weVtpXSkge1xuICAgICAgeCA9IHRoaXNDb3B5W2ldXG4gICAgICB5ID0gdGFyZ2V0Q29weVtpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbi8vIEZpbmRzIGVpdGhlciB0aGUgZmlyc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0ID49IGBieXRlT2Zmc2V0YCxcbi8vIE9SIHRoZSBsYXN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA8PSBgYnl0ZU9mZnNldGAuXG4vL1xuLy8gQXJndW1lbnRzOlxuLy8gLSBidWZmZXIgLSBhIEJ1ZmZlciB0byBzZWFyY2hcbi8vIC0gdmFsIC0gYSBzdHJpbmcsIEJ1ZmZlciwgb3IgbnVtYmVyXG4vLyAtIGJ5dGVPZmZzZXQgLSBhbiBpbmRleCBpbnRvIGBidWZmZXJgOyB3aWxsIGJlIGNsYW1wZWQgdG8gYW4gaW50MzJcbi8vIC0gZW5jb2RpbmcgLSBhbiBvcHRpb25hbCBlbmNvZGluZywgcmVsZXZhbnQgaXMgdmFsIGlzIGEgc3RyaW5nXG4vLyAtIGRpciAtIHRydWUgZm9yIGluZGV4T2YsIGZhbHNlIGZvciBsYXN0SW5kZXhPZlxuZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YgKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIC8vIEVtcHR5IGJ1ZmZlciBtZWFucyBubyBtYXRjaFxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXRcbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIHtcbiAgICBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMHg4MDAwMDAwMCkge1xuICAgIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICB9XG4gIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldCAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAobnVtYmVySXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmICh0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbdmFsXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbmZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgdmFyIGluZGV4U2l6ZSA9IDFcbiAgdmFyIGFyckxlbmd0aCA9IGFyci5sZW5ndGhcbiAgdmFyIHZhbExlbmd0aCA9IHZhbC5sZW5ndGhcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGVuY29kaW5nID09PSAndWNzMicgfHwgZW5jb2RpbmcgPT09ICd1Y3MtMicgfHxcbiAgICAgICAgZW5jb2RpbmcgPT09ICd1dGYxNmxlJyB8fCBlbmNvZGluZyA9PT0gJ3V0Zi0xNmxlJykge1xuICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfVxuICAgICAgaW5kZXhTaXplID0gMlxuICAgICAgYXJyTGVuZ3RoIC89IDJcbiAgICAgIHZhbExlbmd0aCAvPSAyXG4gICAgICBieXRlT2Zmc2V0IC89IDJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkIChidWYsIGkpIHtcbiAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gYnVmW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkgKiBpbmRleFNpemUpXG4gICAgfVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGRpcikge1xuICAgIHZhciBmb3VuZEluZGV4ID0gLTFcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIGkgLT0gaSAtIGZvdW5kSW5kZXhcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKSBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBmb3VuZCA9IHRydWVcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgdmFyIHJlbWFpbmluZyA9IGJ1Zi5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBOdW1iZXIobGVuZ3RoKVxuICAgIGlmIChsZW5ndGggPiByZW1haW5pbmcpIHtcbiAgICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdHJMZW4gPSBzdHJpbmcubGVuZ3RoXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKG51bWJlcklzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICAgIGlmIChpc0Zpbml0ZShsZW5ndGgpKSB7XG4gICAgICBsZW5ndGggPSBsZW5ndGggPj4+IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCdcbiAgICApXG4gIH1cblxuICB2YXIgcmVtYWluaW5nID0gdGhpcy5sZW5ndGggLSBvZmZzZXRcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IGxlbmd0aCA+IHJlbWFpbmluZykgbGVuZ3RoID0gcmVtYWluaW5nXG5cbiAgaWYgKChzdHJpbmcubGVuZ3RoID4gMCAmJiAobGVuZ3RoIDwgMCB8fCBvZmZzZXQgPCAwKSkgfHwgb2Zmc2V0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnKVxuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICAvLyBXYXJuaW5nOiBtYXhMZW5ndGggbm90IHRha2VuIGludG8gYWNjb3VudCBpbiBiYXNlNjRXcml0ZVxuICAgICAgICByZXR1cm4gYmFzZTY0V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHVjczJXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiB0b0pTT04gKCkge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCdWZmZXInLFxuICAgIGRhdGE6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2FyciB8fCB0aGlzLCAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKHN0YXJ0ID09PSAwICYmIGVuZCA9PT0gYnVmLmxlbmd0aCkge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1Zi5zbGljZShzdGFydCwgZW5kKSlcbiAgfVxufVxuXG5mdW5jdGlvbiB1dGY4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG4gIHZhciByZXMgPSBbXVxuXG4gIHZhciBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICB2YXIgZmlyc3RCeXRlID0gYnVmW2ldXG4gICAgdmFyIGNvZGVQb2ludCA9IG51bGxcbiAgICB2YXIgYnl0ZXNQZXJTZXF1ZW5jZSA9IChmaXJzdEJ5dGUgPiAweEVGKVxuICAgICAgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKVxuICAgICAgICAgID8gM1xuICAgICAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpXG4gICAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgICA6IDFcblxuICAgIGlmIChpICsgYnl0ZXNQZXJTZXF1ZW5jZSA8PSBlbmQpIHtcbiAgICAgIHZhciBzZWNvbmRCeXRlLCB0aGlyZEJ5dGUsIGZvdXJ0aEJ5dGUsIHRlbXBDb2RlUG9pbnRcblxuICAgICAgc3dpdGNoIChieXRlc1BlclNlcXVlbmNlKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpZiAoZmlyc3RCeXRlIDwgMHg4MCkge1xuICAgICAgICAgICAgY29kZVBvaW50ID0gZmlyc3RCeXRlXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4MUYpIDw8IDB4NiB8IChzZWNvbmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3Rikge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweEMgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4NiB8ICh0aGlyZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGRiAmJiAodGVtcENvZGVQb2ludCA8IDB4RDgwMCB8fCB0ZW1wQ29kZVBvaW50ID4gMHhERkZGKSkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICBzZWNvbmRCeXRlID0gYnVmW2kgKyAxXVxuICAgICAgICAgIHRoaXJkQnl0ZSA9IGJ1ZltpICsgMl1cbiAgICAgICAgICBmb3VydGhCeXRlID0gYnVmW2kgKyAzXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAoZm91cnRoQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHgxMiB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHhDIHwgKHRoaXJkQnl0ZSAmIDB4M0YpIDw8IDB4NiB8IChmb3VydGhCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHhGRkZGICYmIHRlbXBDb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgICAgICAgICBjb2RlUG9pbnQgPSB0ZW1wQ29kZVBvaW50XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb2RlUG9pbnQgPT09IG51bGwpIHtcbiAgICAgIC8vIHdlIGRpZCBub3QgZ2VuZXJhdGUgYSB2YWxpZCBjb2RlUG9pbnQgc28gaW5zZXJ0IGFcbiAgICAgIC8vIHJlcGxhY2VtZW50IGNoYXIgKFUrRkZGRCkgYW5kIGFkdmFuY2Ugb25seSAxIGJ5dGVcbiAgICAgIGNvZGVQb2ludCA9IDB4RkZGRFxuICAgICAgYnl0ZXNQZXJTZXF1ZW5jZSA9IDFcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA+IDB4RkZGRikge1xuICAgICAgLy8gZW5jb2RlIHRvIHV0ZjE2IChzdXJyb2dhdGUgcGFpciBkYW5jZSlcbiAgICAgIGNvZGVQb2ludCAtPSAweDEwMDAwXG4gICAgICByZXMucHVzaChjb2RlUG9pbnQgPj4+IDEwICYgMHgzRkYgfCAweEQ4MDApXG4gICAgICBjb2RlUG9pbnQgPSAweERDMDAgfCBjb2RlUG9pbnQgJiAweDNGRlxuICAgIH1cblxuICAgIHJlcy5wdXNoKGNvZGVQb2ludClcbiAgICBpICs9IGJ5dGVzUGVyU2VxdWVuY2VcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkocmVzKVxufVxuXG4vLyBCYXNlZCBvbiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMjc0NzI3Mi82ODA3NDIsIHRoZSBicm93c2VyIHdpdGhcbi8vIHRoZSBsb3dlc3QgbGltaXQgaXMgQ2hyb21lLCB3aXRoIDB4MTAwMDAgYXJncy5cbi8vIFdlIGdvIDEgbWFnbml0dWRlIGxlc3MsIGZvciBzYWZldHlcbnZhciBNQVhfQVJHVU1FTlRTX0xFTkdUSCA9IDB4MTAwMFxuXG5mdW5jdGlvbiBkZWNvZGVDb2RlUG9pbnRzQXJyYXkgKGNvZGVQb2ludHMpIHtcbiAgdmFyIGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgdmFyIHJlcyA9ICcnXG4gIHZhciBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGxhdGluMVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IGJ1Zi5sZW5ndGhcblxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIGlmICghZW5kIHx8IGVuZCA8IDAgfHwgZW5kID4gbGVuKSBlbmQgPSBsZW5cblxuICB2YXIgb3V0ID0gJydcbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICBvdXQgKz0gaGV4U2xpY2VMb29rdXBUYWJsZVtidWZbaV1dXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIC8vIElmIGJ5dGVzLmxlbmd0aCBpcyBvZGQsIHRoZSBsYXN0IDggYml0cyBtdXN0IGJlIGlnbm9yZWQgKHNhbWUgYXMgbm9kZS5qcylcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGggLSAxOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIChieXRlc1tpICsgMV0gKiAyNTYpKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWYgPSB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihuZXdCdWYsIEJ1ZmZlci5wcm90b3R5cGUpXG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludExFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRMRSA9IGZ1bmN0aW9uIHJlYWRVSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50QkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG4gIH1cblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdXG4gIHZhciBtdWwgPSAxXG4gIHdoaWxlIChieXRlTGVuZ3RoID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDggPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDggPSBmdW5jdGlvbiByZWFkVUludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDE2TEUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MTZCRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgOCkgfCB0aGlzW29mZnNldCArIDFdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQzMkxFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkxFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDMyQkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDI0KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludExFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludEJFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDggPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MTZMRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDE2QkUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MzJCRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50TEUgPSBmdW5jdGlvbiB3cml0ZUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsICg4ICogYnl0ZUxlbmd0aCkgLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyQkUgPSBmdW5jdGlvbiB3cml0ZUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvYXQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyJylcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgdHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBVc2UgYnVpbHQtaW4gd2hlbiBhdmFpbGFibGUsIG1pc3NpbmcgZnJvbSBJRTExXG4gICAgdGhpcy5jb3B5V2l0aGluKHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmICgoZW5jb2RpbmcgPT09ICd1dGY4JyAmJiBjb2RlIDwgMTI4KSB8fFxuICAgICAgICAgIGVuY29kaW5nID09PSAnbGF0aW4xJykge1xuICAgICAgICAvLyBGYXN0IHBhdGg6IElmIGB2YWxgIGZpdHMgaW50byBhIHNpbmdsZSBieXRlLCB1c2UgdGhhdCBudW1lcmljIHZhbHVlLlxuICAgICAgICB2YWwgPSBjb2RlXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMjU1XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgdmFsID0gTnVtYmVyKHZhbClcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgXCInICsgdmFsICtcbiAgICAgICAgJ1wiIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50IFwidmFsdWVcIicpXG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teKy8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgdGFrZXMgZXF1YWwgc2lnbnMgYXMgZW5kIG9mIHRoZSBCYXNlNjQgZW5jb2RpbmdcbiAgc3RyID0gc3RyLnNwbGl0KCc9JylbMF1cbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0ci50cmltKCkucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuLy8gQXJyYXlCdWZmZXIgb3IgVWludDhBcnJheSBvYmplY3RzIGZyb20gb3RoZXIgY29udGV4dHMgKGkuZS4gaWZyYW1lcykgZG8gbm90IHBhc3Ncbi8vIHRoZSBgaW5zdGFuY2VvZmAgY2hlY2sgYnV0IHRoZXkgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgb2YgdGhhdCB0eXBlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTY2XG5mdW5jdGlvbiBpc0luc3RhbmNlIChvYmosIHR5cGUpIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIHR5cGUgfHxcbiAgICAob2JqICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yICE9IG51bGwgJiYgb2JqLmNvbnN0cnVjdG9yLm5hbWUgIT0gbnVsbCAmJlxuICAgICAgb2JqLmNvbnN0cnVjdG9yLm5hbWUgPT09IHR5cGUubmFtZSlcbn1cbmZ1bmN0aW9uIG51bWJlcklzTmFOIChvYmopIHtcbiAgLy8gRm9yIElFMTEgc3VwcG9ydFxuICByZXR1cm4gb2JqICE9PSBvYmogLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cblxuLy8gQ3JlYXRlIGxvb2t1cCB0YWJsZSBmb3IgYHRvU3RyaW5nKCdoZXgnKWBcbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzIxOVxudmFyIGhleFNsaWNlTG9va3VwVGFibGUgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgYWxwaGFiZXQgPSAnMDEyMzQ1Njc4OWFiY2RlZidcbiAgdmFyIHRhYmxlID0gbmV3IEFycmF5KDI1NilcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgdmFyIGkxNiA9IGkgKiAxNlxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgdGFibGVbaTE2ICsgal0gPSBhbHBoYWJldFtpXSArIGFscGhhYmV0W2pdXG4gICAgfVxuICB9XG4gIHJldHVybiB0YWJsZVxufSkoKVxuIiwgIi8qIVxuIENvcHlyaWdodCAoYykgUGVjdWxpYXIgVmVudHVyZXMsIExMQ1xuKi9cblxuaW1wb3J0ICogYXMgY29yZSBmcm9tICd3ZWJjcnlwdG8tY29yZSc7XG5pbXBvcnQgeyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgYXMgQnVmZmVyU291cmNlQ29udmVydGVyJDEgfSBmcm9tICd3ZWJjcnlwdG8tY29yZSc7XG5leHBvcnQgeyBDcnlwdG9LZXkgfSBmcm9tICd3ZWJjcnlwdG8tY29yZSc7XG5pbXBvcnQgeyBCdWZmZXIgYXMgQnVmZmVyJDEgfSBmcm9tICdidWZmZXInO1xuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0ICogYXMgcHJvY2VzcyBmcm9tICdwcm9jZXNzJztcbmltcG9ydCB7IF9fZGVjb3JhdGUgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBKc29uUHJvcCwgSnNvblByb3BUeXBlcywgSnNvblNlcmlhbGl6ZXIsIEpzb25QYXJzZXIgfSBmcm9tICdAcGVjdWxpYXIvanNvbi1zY2hlbWEnO1xuaW1wb3J0IHsgQ29udmVydCwgQnVmZmVyU291cmNlQ29udmVydGVyIH0gZnJvbSAncHZ0c3V0aWxzJztcbmltcG9ydCB7IEFzblBhcnNlciwgQXNuU2VyaWFsaXplciwgQXNuQ29udmVydCB9IGZyb20gJ0BwZWN1bGlhci9hc24xLXNjaGVtYSc7XG5cbmNvbnN0IEpzb25CYXNlNjRVcmxDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUpTT046ICh2YWx1ZSkgPT4gQnVmZmVyJDEuZnJvbShDb252ZXJ0LkZyb21CYXNlNjRVcmwodmFsdWUpKSxcbiAgICB0b0pTT046ICh2YWx1ZSkgPT4gQ29udmVydC5Ub0Jhc2U2NFVybCh2YWx1ZSksXG59O1xuXG5jbGFzcyBDcnlwdG9LZXkgZXh0ZW5kcyBjb3JlLkNyeXB0b0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlciQxLmFsbG9jKDApO1xuICAgICAgICB0aGlzLmFsZ29yaXRobSA9IHsgbmFtZTogXCJcIiB9O1xuICAgICAgICB0aGlzLmV4dHJhY3RhYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudHlwZSA9IFwic2VjcmV0XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgICAgIHRoaXMua3R5ID0gXCJvY3RcIjtcbiAgICAgICAgdGhpcy5hbGcgPSBcIlwiO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJleHRcIiwgdHlwZTogSnNvblByb3BUeXBlcy5Cb29sZWFuLCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgQ3J5cHRvS2V5LnByb3RvdHlwZSwgXCJleHRyYWN0YWJsZVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImtleV9vcHNcIiwgdHlwZTogSnNvblByb3BUeXBlcy5TdHJpbmcsIHJlcGVhdGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgQ3J5cHRvS2V5LnByb3RvdHlwZSwgXCJ1c2FnZXNcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgdHlwZTogSnNvblByb3BUeXBlcy5TdHJpbmcgfSlcbl0sIENyeXB0b0tleS5wcm90b3R5cGUsIFwia3R5XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IHR5cGU6IEpzb25Qcm9wVHlwZXMuU3RyaW5nLCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgQ3J5cHRvS2V5LnByb3RvdHlwZSwgXCJhbGdcIiwgdm9pZCAwKTtcblxuY2xhc3MgU3ltbWV0cmljS2V5IGV4dGVuZHMgQ3J5cHRvS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5rdHkgPSBcIm9jdFwiO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInNlY3JldFwiO1xuICAgIH1cbn1cblxuY2xhc3MgQXN5bW1ldHJpY0tleSBleHRlbmRzIENyeXB0b0tleSB7XG59XG5cbmNsYXNzIEFlc0NyeXB0b0tleSBleHRlbmRzIFN5bW1ldHJpY0tleSB7XG4gICAgZ2V0IGFsZygpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBJHt0aGlzLmFsZ29yaXRobS5sZW5ndGh9Q0JDYDtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtQ1RSXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBJHt0aGlzLmFsZ29yaXRobS5sZW5ndGh9Q1RSYDtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtR0NNXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBJHt0aGlzLmFsZ29yaXRobS5sZW5ndGh9R0NNYDtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtS1dcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEEke3RoaXMuYWxnb3JpdGhtLmxlbmd0aH1LV2A7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNNQUNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYEEke3RoaXMuYWxnb3JpdGhtLmxlbmd0aH1DTUFDYDtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtRUNCXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBJHt0aGlzLmFsZ29yaXRobS5sZW5ndGh9RUNCYDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQWxnb3JpdGhtRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGdvcml0aG0gbmFtZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXQgYWxnKHZhbHVlKSB7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImtcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQ29udmVydGVyIH0pXG5dLCBBZXNDcnlwdG9LZXkucHJvdG90eXBlLCBcImRhdGFcIiwgdm9pZCAwKTtcblxuY2xhc3MgQWVzQ3J5cHRvIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBBZXNDcnlwdG9LZXkoKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIGtleS5kYXRhID0gY3J5cHRvLnJhbmRvbUJ5dGVzKGFsZ29yaXRobS5sZW5ndGggPj4gMyk7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBleHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwia2V5OiBJcyBub3QgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSk7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGtleS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snIG9yICdyYXcnXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBpbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgbGV0IGtleTtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IEFlc0NyeXB0b0tleSB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjpcbiAgICAgICAgICAgICAgICBrZXkgPSBuZXcgQWVzQ3J5cHRvS2V5KCk7XG4gICAgICAgICAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIkMS5mcm9tKGtleURhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJyBvciAncmF3J1wiKTtcbiAgICAgICAgfVxuICAgICAgICBrZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBrZXkuYWxnb3JpdGhtLmxlbmd0aCA9IGtleS5kYXRhLmxlbmd0aCA8PCAzO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgc3dpdGNoIChrZXkuYWxnb3JpdGhtLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAxMjg6XG4gICAgICAgICAgICBjYXNlIDE5MjpcbiAgICAgICAgICAgIGNhc2UgMjU2OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImtleURhdGE6IElzIHdyb25nIGtleSBsZW5ndGhcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHRBZXNDQkMoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DVFJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0QWVzQ1RSKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtR0NNXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdEFlc0dDTShhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUtXXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdEFlc0tXKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtRUNCXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdEFlc0VDQihhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBpZiAoIShrZXkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJrZXk6IElzIG5vdCBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHRBZXNDQkMoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DVFJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0QWVzQ1RSKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtR0NNXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdEFlc0dDTShhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUtXXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdEFlc0tXKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtRUNCXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdEFlc0VDQihhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdEFlc0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1jYmNgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGxldCBlbmMgPSBjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBlbmMgPSBCdWZmZXIkMS5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0QWVzQ0JDKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1jYmNgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlciQxLmNvbmNhdChbZGVjLCBkZWNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkZWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHRBZXNDVFIoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGBhZXMtJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0tY3RyYCwga2V5LmRhdGEsIEJ1ZmZlciQxLmZyb20oYWxnb3JpdGhtLmNvdW50ZXIpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlciQxLmNvbmNhdChbZW5jLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShlbmMpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHRBZXNDVFIoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihgYWVzLSR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LWN0cmAsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheShhbGdvcml0aG0uY291bnRlcikpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBkZWMgPSBCdWZmZXIkMS5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0QWVzR0NNKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihgYWVzLSR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LWdjbWAsIGtleS5kYXRhLCBCdWZmZXIkMS5mcm9tKGFsZ29yaXRobS5pdiksIHtcbiAgICAgICAgICAgIGF1dGhUYWdMZW5ndGg6IChhbGdvcml0aG0udGFnTGVuZ3RoIHx8IDEyOCkgPj4gMyxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChhbGdvcml0aG0uYWRkaXRpb25hbERhdGEpIHtcbiAgICAgICAgICAgIGNpcGhlci5zZXRBQUQoQnVmZmVyJDEuZnJvbShhbGdvcml0aG0uYWRkaXRpb25hbERhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZW5jID0gY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZW5jID0gQnVmZmVyJDEuY29uY2F0KFtlbmMsIGNpcGhlci5maW5hbCgpLCBjaXBoZXIuZ2V0QXV0aFRhZygpXSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdEFlc0dDTShhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCB0YWdMZW5ndGggPSAoYWxnb3JpdGhtLnRhZ0xlbmd0aCB8fCAxMjgpID4+IDM7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1nY21gLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSwge1xuICAgICAgICAgICAgYXV0aFRhZ0xlbmd0aDogdGFnTGVuZ3RoLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5jID0gZGF0YS5zbGljZSgwLCBkYXRhLmxlbmd0aCAtIHRhZ0xlbmd0aCk7XG4gICAgICAgIGNvbnN0IHRhZyA9IGRhdGEuc2xpY2UoZGF0YS5sZW5ndGggLSB0YWdMZW5ndGgpO1xuICAgICAgICBpZiAoYWxnb3JpdGhtLmFkZGl0aW9uYWxEYXRhKSB7XG4gICAgICAgICAgICBkZWNpcGhlci5zZXRBQUQoQnVmZmVyJDEuZnJvbShhbGdvcml0aG0uYWRkaXRpb25hbERhdGEpKTtcbiAgICAgICAgfVxuICAgICAgICBkZWNpcGhlci5zZXRBdXRoVGFnKHRhZyk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZW5jKTtcbiAgICAgICAgZGVjID0gQnVmZmVyJDEuY29uY2F0KFtkZWMsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdEFlc0tXKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihgaWQtYWVzJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0td3JhcGAsIGtleS5kYXRhLCB0aGlzLkFFU19LV19JVik7XG4gICAgICAgIGxldCBlbmMgPSBjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBlbmMgPSBCdWZmZXIkMS5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdEFlc0tXKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoYGlkLWFlcyR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LXdyYXBgLCBrZXkuZGF0YSwgdGhpcy5BRVNfS1dfSVYpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBkZWMgPSBCdWZmZXIkMS5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0QWVzRUNCKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihgYWVzLSR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LWVjYmAsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheSgwKSk7XG4gICAgICAgIGxldCBlbmMgPSBjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBlbmMgPSBCdWZmZXIkMS5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0QWVzRUNCKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1lY2JgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoMCkpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBkZWMgPSBCdWZmZXIkMS5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxufVxuQWVzQ3J5cHRvLkFFU19LV19JViA9IEJ1ZmZlciQxLmZyb20oXCJBNkE2QTZBNkE2QTZBNkE2XCIsIFwiaGV4XCIpO1xuXG5jb25zdCBrZXlTdG9yYWdlID0gbmV3IFdlYWtNYXAoKTtcbmZ1bmN0aW9uIGdldENyeXB0b0tleShrZXkpIHtcbiAgICBjb25zdCByZXMgPSBrZXlTdG9yYWdlLmdldChrZXkpO1xuICAgIGlmICghcmVzKSB7XG4gICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiQ2Fubm90IGdldCBDcnlwdG9LZXkgZnJvbSBzZWN1cmUgc3RvcmFnZVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIHNldENyeXB0b0tleSh2YWx1ZSkge1xuICAgIGNvbnN0IGtleSA9IGNvcmUuQ3J5cHRvS2V5LmNyZWF0ZSh2YWx1ZS5hbGdvcml0aG0sIHZhbHVlLnR5cGUsIHZhbHVlLmV4dHJhY3RhYmxlLCB2YWx1ZS51c2FnZXMpO1xuICAgIE9iamVjdC5mcmVlemUoa2V5KTtcbiAgICBrZXlTdG9yYWdlLnNldChrZXksIHZhbHVlKTtcbiAgICByZXR1cm4ga2V5O1xufVxuXG5jbGFzcyBBZXNDYmNQcm92aWRlciBleHRlbmRzIGNvcmUuQWVzQ2JjUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEFlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IGFsZ29yaXRobS5sZW5ndGgsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEFlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IGFsZ29yaXRobS5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jb25zdCB6ZXJvID0gQnVmZmVyJDEuZnJvbShbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF0pO1xuY29uc3QgcmIgPSBCdWZmZXIkMS5mcm9tKFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzVdKTtcbmNvbnN0IGJsb2NrU2l6ZSA9IDE2O1xuZnVuY3Rpb24gYml0U2hpZnRMZWZ0KGJ1ZmZlcikge1xuICAgIGNvbnN0IHNoaWZ0ZWQgPSBCdWZmZXIkMS5hbGxvYyhidWZmZXIubGVuZ3RoKTtcbiAgICBjb25zdCBsYXN0ID0gYnVmZmVyLmxlbmd0aCAtIDE7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxhc3Q7IGluZGV4KyspIHtcbiAgICAgICAgc2hpZnRlZFtpbmRleF0gPSBidWZmZXJbaW5kZXhdIDw8IDE7XG4gICAgICAgIGlmIChidWZmZXJbaW5kZXggKyAxXSAmIDB4ODApIHtcbiAgICAgICAgICAgIHNoaWZ0ZWRbaW5kZXhdICs9IDB4MDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2hpZnRlZFtsYXN0XSA9IGJ1ZmZlcltsYXN0XSA8PCAxO1xuICAgIHJldHVybiBzaGlmdGVkO1xufVxuZnVuY3Rpb24geG9yKGEsIGIpIHtcbiAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1pbihhLmxlbmd0aCwgYi5sZW5ndGgpO1xuICAgIGNvbnN0IG91dHB1dCA9IEJ1ZmZlciQxLmFsbG9jKGxlbmd0aCk7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBvdXRwdXRbaW5kZXhdID0gYVtpbmRleF0gXiBiW2luZGV4XTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbn1cbmZ1bmN0aW9uIGFlcyhrZXksIG1lc3NhZ2UpIHtcbiAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoYGFlcyR7a2V5Lmxlbmd0aCA8PCAzfWAsIGtleSwgemVybyk7XG4gICAgY29uc3QgcmVzdWx0ID0gY2lwaGVyLnVwZGF0ZShtZXNzYWdlKTtcbiAgICBjaXBoZXIuZmluYWwoKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gZ2V0TWVzc2FnZUJsb2NrKG1lc3NhZ2UsIGJsb2NrSW5kZXgpIHtcbiAgICBjb25zdCBibG9jayA9IEJ1ZmZlciQxLmFsbG9jKGJsb2NrU2l6ZSk7XG4gICAgY29uc3Qgc3RhcnQgPSBibG9ja0luZGV4ICogYmxvY2tTaXplO1xuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgYmxvY2tTaXplO1xuICAgIG1lc3NhZ2UuY29weShibG9jaywgMCwgc3RhcnQsIGVuZCk7XG4gICAgcmV0dXJuIGJsb2NrO1xufVxuZnVuY3Rpb24gZ2V0UGFkZGVkTWVzc2FnZUJsb2NrKG1lc3NhZ2UsIGJsb2NrSW5kZXgpIHtcbiAgICBjb25zdCBibG9jayA9IEJ1ZmZlciQxLmFsbG9jKGJsb2NrU2l6ZSk7XG4gICAgY29uc3Qgc3RhcnQgPSBibG9ja0luZGV4ICogYmxvY2tTaXplO1xuICAgIGNvbnN0IGVuZCA9IG1lc3NhZ2UubGVuZ3RoO1xuICAgIGJsb2NrLmZpbGwoMCk7XG4gICAgbWVzc2FnZS5jb3B5KGJsb2NrLCAwLCBzdGFydCwgZW5kKTtcbiAgICBibG9ja1tlbmQgLSBzdGFydF0gPSAweDgwO1xuICAgIHJldHVybiBibG9jaztcbn1cbmZ1bmN0aW9uIGdlbmVyYXRlU3Via2V5cyhrZXkpIHtcbiAgICBjb25zdCBsID0gYWVzKGtleSwgemVybyk7XG4gICAgbGV0IHN1YmtleTEgPSBiaXRTaGlmdExlZnQobCk7XG4gICAgaWYgKGxbMF0gJiAweDgwKSB7XG4gICAgICAgIHN1YmtleTEgPSB4b3Ioc3Via2V5MSwgcmIpO1xuICAgIH1cbiAgICBsZXQgc3Via2V5MiA9IGJpdFNoaWZ0TGVmdChzdWJrZXkxKTtcbiAgICBpZiAoc3Via2V5MVswXSAmIDB4ODApIHtcbiAgICAgICAgc3Via2V5MiA9IHhvcihzdWJrZXkyLCByYik7XG4gICAgfVxuICAgIHJldHVybiB7IHN1YmtleTEsIHN1YmtleTIgfTtcbn1cbmZ1bmN0aW9uIGFlc0NtYWMoa2V5LCBtZXNzYWdlKSB7XG4gICAgY29uc3Qgc3Via2V5cyA9IGdlbmVyYXRlU3Via2V5cyhrZXkpO1xuICAgIGxldCBibG9ja0NvdW50ID0gTWF0aC5jZWlsKG1lc3NhZ2UubGVuZ3RoIC8gYmxvY2tTaXplKTtcbiAgICBsZXQgbGFzdEJsb2NrQ29tcGxldGVGbGFnO1xuICAgIGxldCBsYXN0QmxvY2s7XG4gICAgaWYgKGJsb2NrQ291bnQgPT09IDApIHtcbiAgICAgICAgYmxvY2tDb3VudCA9IDE7XG4gICAgICAgIGxhc3RCbG9ja0NvbXBsZXRlRmxhZyA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGFzdEJsb2NrQ29tcGxldGVGbGFnID0gKG1lc3NhZ2UubGVuZ3RoICUgYmxvY2tTaXplID09PSAwKTtcbiAgICB9XG4gICAgY29uc3QgbGFzdEJsb2NrSW5kZXggPSBibG9ja0NvdW50IC0gMTtcbiAgICBpZiAobGFzdEJsb2NrQ29tcGxldGVGbGFnKSB7XG4gICAgICAgIGxhc3RCbG9jayA9IHhvcihnZXRNZXNzYWdlQmxvY2sobWVzc2FnZSwgbGFzdEJsb2NrSW5kZXgpLCBzdWJrZXlzLnN1YmtleTEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGFzdEJsb2NrID0geG9yKGdldFBhZGRlZE1lc3NhZ2VCbG9jayhtZXNzYWdlLCBsYXN0QmxvY2tJbmRleCksIHN1YmtleXMuc3Via2V5Mik7XG4gICAgfVxuICAgIGxldCB4ID0gemVybztcbiAgICBsZXQgeTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGFzdEJsb2NrSW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgeSA9IHhvcih4LCBnZXRNZXNzYWdlQmxvY2sobWVzc2FnZSwgaW5kZXgpKTtcbiAgICAgICAgeCA9IGFlcyhrZXksIHkpO1xuICAgIH1cbiAgICB5ID0geG9yKGxhc3RCbG9jaywgeCk7XG4gICAgcmV0dXJuIGFlcyhrZXksIHkpO1xufVxuY2xhc3MgQWVzQ21hY1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5BZXNDbWFjUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEFlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IGFsZ29yaXRobS5sZW5ndGgsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhZXNDbWFjKGdldENyeXB0b0tleShrZXkpLmRhdGEsIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocmVzdWx0KS5idWZmZXI7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlMiA9IGF3YWl0IHRoaXMuc2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSk7XG4gICAgICAgIHJldHVybiBCdWZmZXIkMS5mcm9tKHNpZ25hdHVyZSkuY29tcGFyZShCdWZmZXIkMS5mcm9tKHNpZ25hdHVyZTIpKSA9PT0gMDtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEFlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IGFsZ29yaXRobS5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KHJlcyk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNDdHJQcm92aWRlciBleHRlbmRzIGNvcmUuQWVzQ3RyUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEFlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IGFsZ29yaXRobS5sZW5ndGgsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEFlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IGFsZ29yaXRobS5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KHJlcyk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNHY21Qcm92aWRlciBleHRlbmRzIGNvcmUuQWVzR2NtUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEFlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IGFsZ29yaXRobS5sZW5ndGgsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEFlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IGFsZ29yaXRobS5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KHJlcyk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNLd1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5BZXNLd1Byb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgQWVzQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgbmFtZTogYWxnb3JpdGhtLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkocmVzKTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZW5jcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmRlY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzRWNiUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkFlc0VjYlByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgRGVzQ3J5cHRvS2V5IGV4dGVuZHMgU3ltbWV0cmljS2V5IHtcbiAgICBnZXQgYWxnKCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIkRFUy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYERFUy1DQkNgO1xuICAgICAgICAgICAgY2FzZSBcIkRFUy1FREUzLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgM0RFUy1DQkNgO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5BbGdvcml0aG1FcnJvcihcIlVuc3VwcG9ydGVkIGFsZ29yaXRobSBuYW1lXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldCBhbGcodmFsdWUpIHtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwia1wiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxDb252ZXJ0ZXIgfSlcbl0sIERlc0NyeXB0b0tleS5wcm90b3R5cGUsIFwiZGF0YVwiLCB2b2lkIDApO1xuXG5jbGFzcyBEZXNDcnlwdG8ge1xuICAgIHN0YXRpYyBhc3luYyBnZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IERlc0NyeXB0b0tleSgpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAga2V5LmRhdGEgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoYWxnb3JpdGhtLmxlbmd0aCA+PiAzKTtcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpzb25TZXJpYWxpemVyLnRvSlNPTihrZXkpO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShrZXkuZGF0YSkuYnVmZmVyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJyBvciAncmF3J1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGxldCBrZXk7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBEZXNDcnlwdG9LZXkgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgICAgICAgICAga2V5ID0gbmV3IERlc0NyeXB0b0tleSgpO1xuICAgICAgICAgICAgICAgIGtleS5kYXRhID0gQnVmZmVyJDEuZnJvbShrZXlEYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycgb3IgJ3JhdydcIik7XG4gICAgICAgIH1cbiAgICAgICAga2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIkRFUy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0RGVzQ0JDKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJERVMtRURFMy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0RGVzRURFM0NCQyhhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBpZiAoIShrZXkgaW5zdGFuY2VvZiBEZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJrZXk6IElzIG5vdCBEZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiREVTLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHREZXNDQkMoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkRFUy1FREUzLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHREZXNFREUzQ0JDKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0RGVzQ0JDKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihgZGVzLWNiY2AsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlciQxLmNvbmNhdChbZW5jLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShlbmMpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHREZXNDQkMoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgZGVjaXBoZXIgPSBjcnlwdG8uY3JlYXRlRGVjaXBoZXJpdihgZGVzLWNiY2AsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGRlYyA9IGRlY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZGVjID0gQnVmZmVyJDEuY29uY2F0KFtkZWMsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdERlc0VERTNDQkMoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGBkZXMtZWRlMy1jYmNgLCBrZXkuZGF0YSwgQnVmZmVyJDEuZnJvbShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlciQxLmNvbmNhdChbZW5jLCBjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShlbmMpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHREZXNFREUzQ0JDKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoYGRlcy1lZGUzLWNiY2AsIGtleS5kYXRhLCBuZXcgVWludDhBcnJheShhbGdvcml0aG0uaXYpKTtcbiAgICAgICAgbGV0IGRlYyA9IGRlY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZGVjID0gQnVmZmVyJDEuY29uY2F0KFtkZWMsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbn1cblxuY2xhc3MgRGVzQ2JjUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkRlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5rZXlTaXplQml0cyA9IDY0O1xuICAgICAgICB0aGlzLml2U2l6ZSA9IDg7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiREVTLUNCQ1wiO1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBEZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiB0aGlzLmtleVNpemVCaXRzLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBEZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBEZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBEZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiB0aGlzLm5hbWUsIGxlbmd0aDogdGhpcy5rZXlTaXplQml0cyB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgaWYgKGtleS5kYXRhLmxlbmd0aCAhPT0gKHRoaXMua2V5U2l6ZUJpdHMgPj4gMykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwia2V5RGF0YTogV3Jvbmcga2V5IHNpemVcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIERlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIERlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgRGVzRWRlM0NiY1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5EZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMua2V5U2l6ZUJpdHMgPSAxOTI7XG4gICAgICAgIHRoaXMuaXZTaXplID0gODtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJERVMtRURFMy1DQkNcIjtcbiAgICB9XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgRGVzQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDogdGhpcy5rZXlTaXplQml0cyxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBEZXNDcnlwdG8uZW5jcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRGVzQ3J5cHRvLmRlY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gRGVzQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgRGVzQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgbmFtZTogdGhpcy5uYW1lLCBsZW5ndGg6IHRoaXMua2V5U2l6ZUJpdHMgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIGlmIChrZXkuZGF0YS5sZW5ndGggIT09ICh0aGlzLmtleVNpemVCaXRzID4+IDMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImtleURhdGE6IFdyb25nIGtleSBzaXplXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBEZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBEZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldEp3a0FsZ29yaXRobShhbGdvcml0aG0pIHtcbiAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSBcIlJTQS1PQUVQXCI6IHtcbiAgICAgICAgICAgIGNvbnN0IG1kU2l6ZSA9IC8oXFxkKykkLy5leGVjKGFsZ29yaXRobS5oYXNoLm5hbWUpWzFdO1xuICAgICAgICAgICAgcmV0dXJuIGBSU0EtT0FFUCR7bWRTaXplICE9PSBcIjFcIiA/IGAtJHttZFNpemV9YCA6IFwiXCJ9YDtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwiUlNBU1NBLVBLQ1MxLVYxXzVcIjpcbiAgICAgICAgICAgIHJldHVybiBgUlMkey8oXFxkKykkLy5leGVjKGFsZ29yaXRobS5oYXNoLm5hbWUpWzFdfWA7XG4gICAgICAgIGNhc2UgXCJSU0EtUFNTXCI6XG4gICAgICAgICAgICByZXR1cm4gYFBTJHsvKFxcZCspJC8uZXhlYyhhbGdvcml0aG0uaGFzaC5uYW1lKVsxXX1gO1xuICAgICAgICBjYXNlIFwiUlNBLVBLQ1MxXCI6XG4gICAgICAgICAgICByZXR1cm4gYFJTMWA7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgfVxufVxuXG5jbGFzcyBSc2FQcml2YXRlS2V5IGV4dGVuZHMgQXN5bW1ldHJpY0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHJpdmF0ZVwiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICByZXR1cm4gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHJpdmF0ZUtleSwgY29yZS5hc24xLlJzYVByaXZhdGVLZXkpO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KCk7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICBrdHk6IFwiUlNBXCIsXG4gICAgICAgICAgICBhbGc6IGdldEp3a0FsZ29yaXRobSh0aGlzLmFsZ29yaXRobSksXG4gICAgICAgICAgICBrZXlfb3BzOiB0aGlzLnVzYWdlcyxcbiAgICAgICAgICAgIGV4dDogdGhpcy5leHRyYWN0YWJsZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oanNvbiwgSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSkpO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5Sc2FQcml2YXRlS2V5IH0pO1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjExMzU0OS4xLjEuMVwiO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IG51bGw7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhUHVibGljS2V5IGV4dGVuZHMgQXN5bW1ldHJpY0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHVibGljXCI7XG4gICAgfVxuICAgIGdldEtleSgpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZSh0aGlzLmRhdGEsIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgcmV0dXJuIEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnB1YmxpY0tleSwgY29yZS5hc24xLlJzYVB1YmxpY0tleSk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGt0eTogXCJSU0FcIixcbiAgICAgICAgICAgIGFsZzogZ2V0SndrQWxnb3JpdGhtKHRoaXMuYWxnb3JpdGhtKSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgY29uc3Qga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihqc29uLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLlJzYVB1YmxpY0tleSB9KTtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBudWxsO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleSk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhQ3J5cHRvIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBuZXcgUnNhUHJpdmF0ZUtleSgpO1xuICAgICAgICBwcml2YXRlS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHJpdmF0ZUtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBwcml2YXRlS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnByaXZhdGVLZXlVc2FnZXMuaW5kZXhPZih1c2FnZSkgIT09IC0xKTtcbiAgICAgICAgY29uc3QgcHVibGljS2V5ID0gbmV3IFJzYVB1YmxpY0tleSgpO1xuICAgICAgICBwdWJsaWNLZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBwdWJsaWNLZXkuZXh0cmFjdGFibGUgPSB0cnVlO1xuICAgICAgICBwdWJsaWNLZXkudXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHVibGljS2V5VXNhZ2VzLmluZGV4T2YodXNhZ2UpICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IHB1YmxpY0V4cG9uZW50ID0gQnVmZmVyJDEuY29uY2F0KFtcbiAgICAgICAgICAgIEJ1ZmZlciQxLmFsbG9jKDQgLSBhbGdvcml0aG0ucHVibGljRXhwb25lbnQuYnl0ZUxlbmd0aCwgMCksXG4gICAgICAgICAgICBCdWZmZXIkMS5mcm9tKGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCksXG4gICAgICAgIF0pLnJlYWRJbnQzMkJFKDApO1xuICAgICAgICBjb25zdCBrZXlzID0gY3J5cHRvLmdlbmVyYXRlS2V5UGFpclN5bmMoXCJyc2FcIiwge1xuICAgICAgICAgICAgbW9kdWx1c0xlbmd0aDogYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGgsXG4gICAgICAgICAgICBwdWJsaWNFeHBvbmVudCxcbiAgICAgICAgICAgIHB1YmxpY0tleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3BraVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByaXZhdGVLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInBrY3M4XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcHJpdmF0ZUtleS5kYXRhID0ga2V5cy5wcml2YXRlS2V5O1xuICAgICAgICBwdWJsaWNLZXkuZGF0YSA9IGtleXMucHVibGljS2V5O1xuICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5LFxuICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSk7XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGtleS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snLCAncGtjczgnIG9yICdzcGtpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGp3ayA9IGtleURhdGE7XG4gICAgICAgICAgICAgICAgaWYgKGp3ay5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5Sc2FQcml2YXRlS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5Sc2FQdWJsaWNLZXkgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UobmV3IFVpbnQ4QXJyYXkoa2V5RGF0YSksIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wdWJsaWNLZXksIGNvcmUuYXNuMS5Sc2FQdWJsaWNLZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UobmV3IFVpbnQ4QXJyYXkoa2V5RGF0YSksIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHJpdmF0ZUtleSwgY29yZS5hc24xLlJzYVByaXZhdGVLZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3BrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiUlNBLVBTU1wiOlxuICAgICAgICAgICAgY2FzZSBcIlJTQVNTQS1QS0NTMS1WMV81XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnblJzYShhbGdvcml0aG0sIGtleSwgZGF0YSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgdmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiUlNBLVBTU1wiOlxuICAgICAgICAgICAgY2FzZSBcIlJTQVNTQS1QS0NTMS1WMV81XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmVyaWZ5U1NBKGFsZ29yaXRobSwga2V5LCBkYXRhLCBzaWduYXR1cmUpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiUlNBLU9BRVBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0T0FFUChhbGdvcml0aG0sIGtleSwgZGF0YSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJSU0EtT0FFUFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHRPQUVQKGFsZ29yaXRobSwga2V5LCBkYXRhKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBpbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gbnVsbDtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5ID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUoYXNuS2V5KTtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IFJzYVByaXZhdGVLZXkoKTtcbiAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIkMS5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IE9iamVjdC5hc3NpZ24oe30sIGFsZ29yaXRobSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0ucHVibGljRXhwb25lbnQgPSBuZXcgVWludDhBcnJheShhc25LZXkucHVibGljRXhwb25lbnQpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPSBhc25LZXkubW9kdWx1cy5ieXRlTGVuZ3RoIDw8IDM7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlB1YmxpY0tleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjExMzU0OS4xLjEuMVwiO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gbnVsbDtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXkgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShhc25LZXkpO1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgUnNhUHVibGljS2V5KCk7XG4gICAgICAgIGtleS5kYXRhID0gQnVmZmVyJDEuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBPYmplY3QuYXNzaWduKHt9LCBhbGdvcml0aG0pO1xuICAgICAgICBrZXkuYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50ID0gbmV3IFVpbnQ4QXJyYXkoYXNuS2V5LnB1YmxpY0V4cG9uZW50KTtcbiAgICAgICAga2V5LmFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoID0gYXNuS2V5Lm1vZHVsdXMuYnl0ZUxlbmd0aCA8PCAzO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGdldENyeXB0b0FsZ29yaXRobShhbGcpIHtcbiAgICAgICAgc3dpdGNoIChhbGcuaGFzaC5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEExXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEEyNTZcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUlNBLVNIQTM4NFwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSU0EtU0hBNTEyXCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSU0EtU0hBMy0yNTZcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTM4NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEEzLTM4NFwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQTMtNTEyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUlNBLVNIQTMtNTEyXCI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtLmhhc2g6IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBzaWduUnNhKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IHRoaXMuZ2V0Q3J5cHRvQWxnb3JpdGhtKGtleS5hbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBzaWduZXIgPSBjcnlwdG8uY3JlYXRlU2lnbihjcnlwdG9BbGcpO1xuICAgICAgICBzaWduZXIudXBkYXRlKEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICBpZiAoIWtleS5wZW0pIHtcbiAgICAgICAgICAgIGtleS5wZW0gPSBgLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAga2V5OiBrZXkucGVtLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSA9PT0gXCJSU0EtUFNTXCIpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucGFkZGluZyA9IGNyeXB0by5jb25zdGFudHMuUlNBX1BLQ1MxX1BTU19QQURESU5HO1xuICAgICAgICAgICAgb3B0aW9ucy5zYWx0TGVuZ3RoID0gYWxnb3JpdGhtLnNhbHRMZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2lnbmVyLnNpZ24ob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIHZlcmlmeVNTQShhbGdvcml0aG0sIGtleSwgZGF0YSwgc2lnbmF0dXJlKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IHRoaXMuZ2V0Q3J5cHRvQWxnb3JpdGhtKGtleS5hbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBzaWduZXIgPSBjcnlwdG8uY3JlYXRlVmVyaWZ5KGNyeXB0b0FsZyk7XG4gICAgICAgIHNpZ25lci51cGRhdGUoQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgIGlmICgha2V5LnBlbSkge1xuICAgICAgICAgICAga2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAga2V5OiBrZXkucGVtLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSA9PT0gXCJSU0EtUFNTXCIpIHtcbiAgICAgICAgICAgIG9wdGlvbnMucGFkZGluZyA9IGNyeXB0by5jb25zdGFudHMuUlNBX1BLQ1MxX1BTU19QQURESU5HO1xuICAgICAgICAgICAgb3B0aW9ucy5zYWx0TGVuZ3RoID0gYWxnb3JpdGhtLnNhbHRMZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb2sgPSBzaWduZXIudmVyaWZ5KG9wdGlvbnMsIHNpZ25hdHVyZSk7XG4gICAgICAgIHJldHVybiBvaztcbiAgICB9XG4gICAgc3RhdGljIGVuY3J5cHRPQUVQKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGAtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYCxcbiAgICAgICAgICAgIHBhZGRpbmc6IGNyeXB0by5jb25zdGFudHMuUlNBX1BLQ1MxX09BRVBfUEFERElORyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGFsZ29yaXRobS5sYWJlbCkgO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvLnB1YmxpY0VuY3J5cHQob3B0aW9ucywgZGF0YSkpLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIGRlY3J5cHRPQUVQKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGAtLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cXG4ke2tleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS1gLFxuICAgICAgICAgICAgcGFkZGluZzogY3J5cHRvLmNvbnN0YW50cy5SU0FfUEtDUzFfT0FFUF9QQURESU5HLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoYWxnb3JpdGhtLmxhYmVsKSA7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShjcnlwdG8ucHJpdmF0ZURlY3J5cHQob3B0aW9ucywgZGF0YSkpLmJ1ZmZlcjtcbiAgICB9XG59XG5Sc2FDcnlwdG8ucHVibGljS2V5VXNhZ2VzID0gW1widmVyaWZ5XCIsIFwiZW5jcnlwdFwiLCBcIndyYXBLZXlcIl07XG5Sc2FDcnlwdG8ucHJpdmF0ZUtleVVzYWdlcyA9IFtcInNpZ25cIiwgXCJkZWNyeXB0XCIsIFwidW53cmFwS2V5XCJdO1xuXG5jbGFzcyBSc2FTc2FQcm92aWRlciBleHRlbmRzIGNvcmUuUnNhU3NhUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1xuICAgICAgICAgICAgXCJTSEEtMVwiLCBcIlNIQS0yNTZcIiwgXCJTSEEtMzg0XCIsIFwiU0hBLTUxMlwiLFxuICAgICAgICAgICAgXCJzaGFrZTEyOFwiLCBcInNoYWtlMjU2XCIsXG4gICAgICAgICAgICBcIlNIQTMtMjU2XCIsIFwiU0hBMy0zODRcIiwgXCJTSEEzLTUxMlwiXG4gICAgICAgIF07XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBSc2FDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5zaWduKGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBSc2FDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIShpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUlNBIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgUnNhUHNzUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlJzYVBzc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5oYXNoQWxnb3JpdGhtcyA9IFtcbiAgICAgICAgICAgIFwiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIixcbiAgICAgICAgICAgIFwic2hha2UxMjhcIiwgXCJzaGFrZTI1NlwiLFxuICAgICAgICAgICAgXCJTSEEzLTI1NlwiLCBcIlNIQTMtMzg0XCIsIFwiU0hBMy01MTJcIlxuICAgICAgICBdO1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgUnNhQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIC4uLmFsZ29yaXRobSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25TaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8uc2lnbihhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by52ZXJpZnkoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlKSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgUnNhQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCEoaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQcml2YXRlS2V5IHx8IGludGVybmFsS2V5IGluc3RhbmNlb2YgUnNhUHVibGljS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IFJTQSBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFNoYUNyeXB0byB7XG4gICAgc3RhdGljIHNpemUoYWxnb3JpdGhtKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0xXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDE2MDtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMjU2XCI6XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gMjU2O1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0zODRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTM4NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAzODQ7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTUxMlwiOlxuICAgICAgICAgICAgY2FzZSBcIlNIQTMtNTEyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDUxMjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGdldEFsZ29yaXRobU5hbWUoYWxnb3JpdGhtKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0xXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhMVwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGEyNTZcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhMzg0XCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTUxMlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNoYTUxMlwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQTMtMjU2XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhMy0yNTZcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTM4NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNoYTMtMzg0XCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGEzLTUxMlwiO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnJlY29nbml6ZWQgbmFtZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgZGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICBjb25zdCBoYXNoQWxnID0gdGhpcy5nZXRBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChoYXNoQWxnKVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXIkMS5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGhhc2gpLmJ1ZmZlcjtcbiAgICB9XG59XG5cbmNsYXNzIFJzYU9hZXBQcm92aWRlciBleHRlbmRzIGNvcmUuUnNhT2FlcFByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgUnNhQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIC4uLmFsZ29yaXRobSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IGRhdGFWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XG4gICAgICAgIGNvbnN0IGtleVNpemUgPSBNYXRoLmNlaWwoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPj4gMyk7XG4gICAgICAgIGNvbnN0IGhhc2hTaXplID0gU2hhQ3J5cHRvLnNpemUoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gpID4+IDM7XG4gICAgICAgIGNvbnN0IGRhdGFMZW5ndGggPSBkYXRhVmlldy5ieXRlTGVuZ3RoO1xuICAgICAgICBjb25zdCBwc0xlbmd0aCA9IGtleVNpemUgLSBkYXRhTGVuZ3RoIC0gMiAqIGhhc2hTaXplIC0gMjtcbiAgICAgICAgaWYgKGRhdGFMZW5ndGggPiBrZXlTaXplIC0gMiAqIGhhc2hTaXplIC0gMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGF0YSB0b28gbGFyZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IG5ldyBVaW50OEFycmF5KGtleVNpemUpO1xuICAgICAgICBjb25zdCBzZWVkID0gbWVzc2FnZS5zdWJhcnJheSgxLCBoYXNoU2l6ZSArIDEpO1xuICAgICAgICBjb25zdCBkYXRhQmxvY2sgPSBtZXNzYWdlLnN1YmFycmF5KGhhc2hTaXplICsgMSk7XG4gICAgICAgIGRhdGFCbG9jay5zZXQoZGF0YVZpZXcsIGhhc2hTaXplICsgcHNMZW5ndGggKyAxKTtcbiAgICAgICAgY29uc3QgbGFiZWxIYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gubmFtZS5yZXBsYWNlKFwiLVwiLCBcIlwiKSlcbiAgICAgICAgICAgIC51cGRhdGUoY29yZS5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGFsZ29yaXRobS5sYWJlbCB8fCBuZXcgVWludDhBcnJheSgwKSkpXG4gICAgICAgICAgICAuZGlnZXN0KCk7XG4gICAgICAgIGRhdGFCbG9jay5zZXQobGFiZWxIYXNoLCAwKTtcbiAgICAgICAgZGF0YUJsb2NrW2hhc2hTaXplICsgcHNMZW5ndGhdID0gMTtcbiAgICAgICAgY3J5cHRvLnJhbmRvbUZpbGxTeW5jKHNlZWQpO1xuICAgICAgICBjb25zdCBkYXRhQmxvY2tNYXNrID0gdGhpcy5tZ2YxKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLCBzZWVkLCBkYXRhQmxvY2subGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhQmxvY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGRhdGFCbG9ja1tpXSBePSBkYXRhQmxvY2tNYXNrW2ldO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlZWRNYXNrID0gdGhpcy5tZ2YxKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLCBkYXRhQmxvY2ssIHNlZWQubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzZWVkW2ldIF49IHNlZWRNYXNrW2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW50ZXJuYWxLZXkucGVtKSB7XG4gICAgICAgICAgICBpbnRlcm5hbEtleS5wZW0gPSBgLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cXG4ke2ludGVybmFsS2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwa2NzMCA9IGNyeXB0by5wdWJsaWNFbmNyeXB0KHtcbiAgICAgICAgICAgIGtleTogaW50ZXJuYWxLZXkucGVtLFxuICAgICAgICAgICAgcGFkZGluZzogY3J5cHRvLmNvbnN0YW50cy5SU0FfTk9fUEFERElORyxcbiAgICAgICAgfSwgQnVmZmVyJDEuZnJvbShtZXNzYWdlKSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShwa2NzMCkuYnVmZmVyO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgY29uc3Qga2V5U2l6ZSA9IE1hdGguY2VpbChpbnRlcm5hbEtleS5hbGdvcml0aG0ubW9kdWx1c0xlbmd0aCA+PiAzKTtcbiAgICAgICAgY29uc3QgaGFzaFNpemUgPSBTaGFDcnlwdG8uc2l6ZShpbnRlcm5hbEtleS5hbGdvcml0aG0uaGFzaCkgPj4gMztcbiAgICAgICAgY29uc3QgZGF0YUxlbmd0aCA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgaWYgKGRhdGFMZW5ndGggIT09IGtleVNpemUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJhZCBkYXRhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW50ZXJuYWxLZXkucGVtKSB7XG4gICAgICAgICAgICBpbnRlcm5hbEtleS5wZW0gPSBgLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tXFxuJHtpbnRlcm5hbEtleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwa2NzMCA9IGNyeXB0by5wcml2YXRlRGVjcnlwdCh7XG4gICAgICAgICAgICBrZXk6IGludGVybmFsS2V5LnBlbSxcbiAgICAgICAgICAgIHBhZGRpbmc6IGNyeXB0by5jb25zdGFudHMuUlNBX05PX1BBRERJTkcsXG4gICAgICAgIH0sIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICBjb25zdCB6ID0gcGtjczBbMF07XG4gICAgICAgIGNvbnN0IHNlZWQgPSBwa2NzMC5zdWJhcnJheSgxLCBoYXNoU2l6ZSArIDEpO1xuICAgICAgICBjb25zdCBkYXRhQmxvY2sgPSBwa2NzMC5zdWJhcnJheShoYXNoU2l6ZSArIDEpO1xuICAgICAgICBpZiAoeiAhPT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVjcnlwdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VlZE1hc2sgPSB0aGlzLm1nZjEoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gsIGRhdGFCbG9jaywgc2VlZC5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHNlZWRbaV0gXj0gc2VlZE1hc2tbaV07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YUJsb2NrTWFzayA9IHRoaXMubWdmMShpbnRlcm5hbEtleS5hbGdvcml0aG0uaGFzaCwgc2VlZCwgZGF0YUJsb2NrLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YUJsb2NrLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBkYXRhQmxvY2tbaV0gXj0gZGF0YUJsb2NrTWFza1tpXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsYWJlbEhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChpbnRlcm5hbEtleS5hbGdvcml0aG0uaGFzaC5uYW1lLnJlcGxhY2UoXCItXCIsIFwiXCIpKVxuICAgICAgICAgICAgLnVwZGF0ZShjb3JlLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYWxnb3JpdGhtLmxhYmVsIHx8IG5ldyBVaW50OEFycmF5KDApKSlcbiAgICAgICAgICAgIC5kaWdlc3QoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoYXNoU2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAobGFiZWxIYXNoW2ldICE9PSBkYXRhQmxvY2tbaV0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZWNyeXB0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcHNFbmQgPSBoYXNoU2l6ZTtcbiAgICAgICAgZm9yICg7IHBzRW5kIDwgZGF0YUJsb2NrLmxlbmd0aDsgcHNFbmQrKykge1xuICAgICAgICAgICAgY29uc3QgcHN6ID0gZGF0YUJsb2NrW3BzRW5kXTtcbiAgICAgICAgICAgIGlmIChwc3ogPT09IDEpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwc3ogIT09IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZWNyeXB0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHNFbmQgPT09IGRhdGFCbG9jay5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRlY3J5cHRpb24gZmFpbGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHBrY3MwID0gZGF0YUJsb2NrLnN1YmFycmF5KHBzRW5kICsgMSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShwa2NzMCkuYnVmZmVyO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgUnNhQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCEoaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQcml2YXRlS2V5IHx8IGludGVybmFsS2V5IGluc3RhbmNlb2YgUnNhUHVibGljS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IFJTQSBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbWdmMShhbGdvcml0aG0sIHNlZWQsIGxlbmd0aCA9IDApIHtcbiAgICAgICAgY29uc3QgaGFzaFNpemUgPSBTaGFDcnlwdG8uc2l6ZShhbGdvcml0aG0pID4+IDM7XG4gICAgICAgIGNvbnN0IG1hc2sgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICAgICAgICBjb25zdCBjb3VudGVyID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG4gICAgICAgIGNvbnN0IGNodW5rcyA9IE1hdGguY2VpbChsZW5ndGggLyBoYXNoU2l6ZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2h1bmtzOyBpKyspIHtcbiAgICAgICAgICAgIGNvdW50ZXJbMF0gPSBpID4+PiAyNDtcbiAgICAgICAgICAgIGNvdW50ZXJbMV0gPSAoaSA+Pj4gMTYpICYgMjU1O1xuICAgICAgICAgICAgY291bnRlclsyXSA9IChpID4+PiA4KSAmIDI1NTtcbiAgICAgICAgICAgIGNvdW50ZXJbM10gPSBpICYgMjU1O1xuICAgICAgICAgICAgY29uc3Qgc3VibWFzayA9IG1hc2suc3ViYXJyYXkoaSAqIGhhc2hTaXplKTtcbiAgICAgICAgICAgIGxldCBjaHVuayA9IGNyeXB0by5jcmVhdGVIYXNoKGFsZ29yaXRobS5uYW1lLnJlcGxhY2UoXCItXCIsIFwiXCIpKVxuICAgICAgICAgICAgICAgIC51cGRhdGUoc2VlZClcbiAgICAgICAgICAgICAgICAudXBkYXRlKGNvdW50ZXIpXG4gICAgICAgICAgICAgICAgLmRpZ2VzdCgpO1xuICAgICAgICAgICAgaWYgKGNodW5rLmxlbmd0aCA+IHN1Ym1hc2subGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY2h1bmsgPSBjaHVuay5zdWJhcnJheSgwLCBzdWJtYXNrLmxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJtYXNrLnNldChjaHVuayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hc2s7XG4gICAgfVxufVxuXG5jbGFzcyBSc2FFc1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUlNBRVMtUEtDUzEtdjFfNVwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHtcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1wiZW5jcnlwdFwiLCBcIndyYXBLZXlcIl0sXG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJkZWNyeXB0XCIsIFwidW53cmFwS2V5XCJdLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgUnNhQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIC4uLmFsZ29yaXRobSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInB1YmxpY0V4cG9uZW50XCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0ucHVibGljRXhwb25lbnQgJiYgYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50IGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJwdWJsaWNFeHBvbmVudDogTWlzc2luZyBvciBub3QgYSBVaW50OEFycmF5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHB1YmxpY0V4cG9uZW50ID0gQ29udmVydC5Ub0Jhc2U2NChhbGdvcml0aG0ucHVibGljRXhwb25lbnQpO1xuICAgICAgICBpZiAoIShwdWJsaWNFeHBvbmVudCA9PT0gXCJBdz09XCIgfHwgcHVibGljRXhwb25lbnQgPT09IFwiQVFBQlwiKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInB1YmxpY0V4cG9uZW50OiBNdXN0IGJlIFszXSBvciBbMSwwLDFdXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJtb2R1bHVzTGVuZ3RoXCIpO1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDEwMjQ6XG4gICAgICAgICAgICBjYXNlIDIwNDg6XG4gICAgICAgICAgICBjYXNlIDQwOTY6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJtb2R1bHVzTGVuZ3RoOiBNdXN0IGJlIDEwMjQsIDIwNDgsIG9yIDQwOTZcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnRvQ3J5cHRvT3B0aW9ucyhrZXkpO1xuICAgICAgICBjb25zdCBlbmMgPSBjcnlwdG8ucHVibGljRW5jcnlwdChvcHRpb25zLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShlbmMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnRvQ3J5cHRvT3B0aW9ucyhrZXkpO1xuICAgICAgICBjb25zdCBkZWMgPSBjcnlwdG8ucHJpdmF0ZURlY3J5cHQob3B0aW9ucywgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBSc2FDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIShpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVByaXZhdGVLZXkgfHwgaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgUlNBIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b0NyeXB0b09wdGlvbnMoa2V5KSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBrZXkudHlwZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAga2V5OiBgLS0tLS1CRUdJTiAke3R5cGV9IEtFWS0tLS0tXFxuJHtnZXRDcnlwdG9LZXkoa2V5KS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EICR7dHlwZX0gS0VZLS0tLS1gLFxuICAgICAgICAgICAgcGFkZGluZzogY3J5cHRvLmNvbnN0YW50cy5SU0FfUEtDUzFfUEFERElORyxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmNvbnN0IG5hbWVkT0lEcyA9IHtcbiAgICBcIjEuMi44NDAuMTAwNDUuMy4xLjdcIjogXCJQLTI1NlwiLFxuICAgIFwiUC0yNTZcIjogXCIxLjIuODQwLjEwMDQ1LjMuMS43XCIsXG4gICAgXCIxLjMuMTMyLjAuMzRcIjogXCJQLTM4NFwiLFxuICAgIFwiUC0zODRcIjogXCIxLjMuMTMyLjAuMzRcIixcbiAgICBcIjEuMy4xMzIuMC4zNVwiOiBcIlAtNTIxXCIsXG4gICAgXCJQLTUyMVwiOiBcIjEuMy4xMzIuMC4zNVwiLFxuICAgIFwiMS4zLjEzMi4wLjEwXCI6IFwiSy0yNTZcIixcbiAgICBcIkstMjU2XCI6IFwiMS4zLjEzMi4wLjEwXCIsXG4gICAgXCJicmFpbnBvb2xQMTYwcjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMVwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjFcIjogXCJicmFpbnBvb2xQMTYwcjFcIixcbiAgICBcImJyYWlucG9vbFAxNjB0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4yXCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMlwiOiBcImJyYWlucG9vbFAxNjB0MVwiLFxuICAgIFwiYnJhaW5wb29sUDE5MnIxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjNcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4zXCI6IFwiYnJhaW5wb29sUDE5MnIxXCIsXG4gICAgXCJicmFpbnBvb2xQMTkydDFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuNFwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjRcIjogXCJicmFpbnBvb2xQMTkydDFcIixcbiAgICBcImJyYWlucG9vbFAyMjRyMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS41XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuNVwiOiBcImJyYWlucG9vbFAyMjRyMVwiLFxuICAgIFwiYnJhaW5wb29sUDIyNHQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjZcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS42XCI6IFwiYnJhaW5wb29sUDIyNHQxXCIsXG4gICAgXCJicmFpbnBvb2xQMjU2cjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuN1wiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjdcIjogXCJicmFpbnBvb2xQMjU2cjFcIixcbiAgICBcImJyYWlucG9vbFAyNTZ0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS44XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuOFwiOiBcImJyYWlucG9vbFAyNTZ0MVwiLFxuICAgIFwiYnJhaW5wb29sUDMyMHIxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjlcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS45XCI6IFwiYnJhaW5wb29sUDMyMHIxXCIsXG4gICAgXCJicmFpbnBvb2xQMzIwdDFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTBcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4xMFwiOiBcImJyYWlucG9vbFAzMjB0MVwiLFxuICAgIFwiYnJhaW5wb29sUDM4NHIxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjExXCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTFcIjogXCJicmFpbnBvb2xQMzg0cjFcIixcbiAgICBcImJyYWlucG9vbFAzODR0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xMlwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjEyXCI6IFwiYnJhaW5wb29sUDM4NHQxXCIsXG4gICAgXCJicmFpbnBvb2xQNTEycjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTNcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4xM1wiOiBcImJyYWlucG9vbFA1MTJyMVwiLFxuICAgIFwiYnJhaW5wb29sUDUxMnQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjE0XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTRcIjogXCJicmFpbnBvb2xQNTEydDFcIixcbn07XG5mdW5jdGlvbiBnZXRPaWRCeU5hbWVkQ3VydmUkMShuYW1lZEN1cnZlKSB7XG4gICAgY29uc3Qgb2lkID0gbmFtZWRPSURzW25hbWVkQ3VydmVdO1xuICAgIGlmICghb2lkKSB7XG4gICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKGBDYW5ub3QgY29udmVydCBXZWJDcnlwdG8gbmFtZWQgY3VydmUgJyR7bmFtZWRDdXJ2ZX0nIHRvIE9JRGApO1xuICAgIH1cbiAgICByZXR1cm4gb2lkO1xufVxuXG5jbGFzcyBFY1ByaXZhdGVLZXkgZXh0ZW5kcyBBc3ltbWV0cmljS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJwcml2YXRlXCI7XG4gICAgfVxuICAgIGdldEtleSgpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZSh0aGlzLmRhdGEsIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wcml2YXRlS2V5LCBjb3JlLmFzbjEuRWNQcml2YXRlS2V5KTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSgpO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAga3R5OiBcIkVDXCIsXG4gICAgICAgICAgICBjcnY6IHRoaXMuYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICBrZXlfb3BzOiB0aGlzLnVzYWdlcyxcbiAgICAgICAgICAgIGV4dDogdGhpcy5leHRyYWN0YWJsZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oanNvbiwgSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSkpO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghanNvbi5jcnYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKGBDYW5ub3QgZ2V0IG5hbWVkIGN1cnZlIGZyb20gSldLLiBQcm9wZXJ0eSAnY3J2JyBpcyByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTAwNDUuMi4xXCI7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUobmV3IGNvcmUuYXNuMS5PYmplY3RJZGVudGlmaWVyKGdldE9pZEJ5TmFtZWRDdXJ2ZSQxKGpzb24uY3J2KSkpO1xuICAgICAgICBjb25zdCBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGpzb24sIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuRWNQcml2YXRlS2V5IH0pO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXkgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXkpO1xuICAgICAgICB0aGlzLmRhdGEgPSBCdWZmZXIkMS5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5jbGFzcyBFY1B1YmxpY0tleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInB1YmxpY1wiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBuZXcgY29yZS5hc24xLkVjUHVibGljS2V5KGtleUluZm8ucHVibGljS2V5KTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSgpO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAga3R5OiBcIkVDXCIsXG4gICAgICAgICAgICBjcnY6IHRoaXMuYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICBrZXlfb3BzOiB0aGlzLnVzYWdlcyxcbiAgICAgICAgICAgIGV4dDogdGhpcy5leHRyYWN0YWJsZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oanNvbiwgSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSkpO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghanNvbi5jcnYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKGBDYW5ub3QgZ2V0IG5hbWVkIGN1cnZlIGZyb20gSldLLiBQcm9wZXJ0eSAnY3J2JyBpcyByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5FY1B1YmxpY0tleSB9KTtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTAwNDUuMi4xXCI7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShuZXcgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIoZ2V0T2lkQnlOYW1lZEN1cnZlJDEoanNvbi5jcnYpKSk7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5ID0gQXNuU2VyaWFsaXplci50b0FTTihrZXkpLnZhbHVlSGV4O1xuICAgICAgICB0aGlzLmRhdGEgPSBCdWZmZXIkMS5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5jbGFzcyBTaGExUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJTSEEtMVwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIFNoYTI1NlByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBLTI1NlwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIFNoYTM4NFByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBLTM4NFwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIFNoYTUxMlByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBLTUxMlwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIFNoYTMyNTZQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQTMtMjU2XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgfVxuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hhQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU2hhMzM4NFByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBMy0zODRcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGEzNTEyUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJTSEEzLTUxMlwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIEVjQ3J5cHRvIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBuZXcgRWNQcml2YXRlS2V5KCk7XG4gICAgICAgIHByaXZhdGVLZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBwcml2YXRlS2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIHByaXZhdGVLZXkudXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHJpdmF0ZUtleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBuZXcgRWNQdWJsaWNLZXkoKTtcbiAgICAgICAgcHVibGljS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHVibGljS2V5LmV4dHJhY3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgcHVibGljS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnB1YmxpY0tleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBrZXlzID0gY3J5cHRvLmdlbmVyYXRlS2V5UGFpclN5bmMoXCJlY1wiLCB7XG4gICAgICAgICAgICBuYW1lZEN1cnZlOiB0aGlzLmdldE9wZW5TU0xOYW1lZEN1cnZlKGFsZ29yaXRobS5uYW1lZEN1cnZlKSxcbiAgICAgICAgICAgIHB1YmxpY0tleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3BraVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByaXZhdGVLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInBrY3M4XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcHJpdmF0ZUtleS5kYXRhID0ga2V5cy5wcml2YXRlS2V5O1xuICAgICAgICBwdWJsaWNLZXkuZGF0YSA9IGtleXMucHVibGljS2V5O1xuICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5LFxuICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgc2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSBTaGFDcnlwdG8uZ2V0QWxnb3JpdGhtTmFtZShhbGdvcml0aG0uaGFzaCk7XG4gICAgICAgIGNvbnN0IHNpZ25lciA9IGNyeXB0by5jcmVhdGVTaWduKGNyeXB0b0FsZyk7XG4gICAgICAgIHNpZ25lci51cGRhdGUoQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgIGlmICgha2V5LnBlbSkge1xuICAgICAgICAgICAga2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cXG4ke2tleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGtleS5wZW0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ25lci5zaWduKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBlY1NpZ25hdHVyZSA9IEFzblBhcnNlci5wYXJzZShzaWduYXR1cmUsIGNvcmUuYXNuMS5FY0RzYVNpZ25hdHVyZSk7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZVJhdyA9IGNvcmUuRWNVdGlscy5lbmNvZGVTaWduYXR1cmUoZWNTaWduYXR1cmUsIGNvcmUuRWNDdXJ2ZXMuZ2V0KGtleS5hbGdvcml0aG0ubmFtZWRDdXJ2ZSkuc2l6ZSk7XG4gICAgICAgIHJldHVybiBzaWduYXR1cmVSYXcuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgdmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY3J5cHRvQWxnID0gU2hhQ3J5cHRvLmdldEFsZ29yaXRobU5hbWUoYWxnb3JpdGhtLmhhc2gpO1xuICAgICAgICBjb25zdCBzaWduZXIgPSBjcnlwdG8uY3JlYXRlVmVyaWZ5KGNyeXB0b0FsZyk7XG4gICAgICAgIHNpZ25lci51cGRhdGUoQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgIGlmICgha2V5LnBlbSkge1xuICAgICAgICAgICAga2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAga2V5OiBrZXkucGVtLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBlY1NpZ25hdHVyZSA9IG5ldyBjb3JlLmFzbjEuRWNEc2FTaWduYXR1cmUoKTtcbiAgICAgICAgY29uc3QgbmFtZWRDdXJ2ZSA9IGNvcmUuRWNDdXJ2ZXMuZ2V0KGtleS5hbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZVBvaW50ID0gY29yZS5FY1V0aWxzLmRlY29kZVNpZ25hdHVyZShzaWduYXR1cmUsIG5hbWVkQ3VydmUuc2l6ZSk7XG4gICAgICAgIGVjU2lnbmF0dXJlLnIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihzaWduYXR1cmVQb2ludC5yKTtcbiAgICAgICAgZWNTaWduYXR1cmUucyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHNpZ25hdHVyZVBvaW50LnMpO1xuICAgICAgICBjb25zdCBlY1NpZ25hdHVyZVJhdyA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoZWNTaWduYXR1cmUpKTtcbiAgICAgICAgY29uc3Qgb2sgPSBzaWduZXIudmVyaWZ5KG9wdGlvbnMsIGVjU2lnbmF0dXJlUmF3KTtcbiAgICAgICAgcmV0dXJuIG9rO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSB0aGlzLmdldE9wZW5TU0xOYW1lZEN1cnZlKGJhc2VLZXkuYWxnb3JpdGhtLm5hbWVkQ3VydmUpO1xuICAgICAgICBjb25zdCBlY2RoID0gY3J5cHRvLmNyZWF0ZUVDREgoY3J5cHRvQWxnKTtcbiAgICAgICAgY29uc3QgYXNuUHJpdmF0ZUtleSA9IEFzblBhcnNlci5wYXJzZShiYXNlS2V5LmRhdGEsIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgIGNvbnN0IGFzbkVjUHJpdmF0ZUtleSA9IEFzblBhcnNlci5wYXJzZShhc25Qcml2YXRlS2V5LnByaXZhdGVLZXksIGNvcmUuYXNuMS5FY1ByaXZhdGVLZXkpO1xuICAgICAgICBlY2RoLnNldFByaXZhdGVLZXkoQnVmZmVyJDEuZnJvbShhc25FY1ByaXZhdGVLZXkucHJpdmF0ZUtleSkpO1xuICAgICAgICBjb25zdCBhc25QdWJsaWNLZXkgPSBBc25QYXJzZXIucGFyc2UoYWxnb3JpdGhtLnB1YmxpYy5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgIGNvbnN0IGJpdHMgPSBlY2RoLmNvbXB1dGVTZWNyZXQoQnVmZmVyJDEuZnJvbShhc25QdWJsaWNLZXkucHVibGljS2V5KSk7XG4gICAgICAgIGlmIChsZW5ndGggPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBiaXRzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShiaXRzKS5idWZmZXIuc2xpY2UoMCwgbGVuZ3RoID4+IDMpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSk7XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGtleS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwdWJsaWNLZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKGtleS5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1YmxpY0tleUluZm8ucHVibGljS2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3JhdycsIHBrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBqd2sgPSBrZXlEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChqd2suZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuRWNQcml2YXRlS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5FY1B1YmxpY0tleSB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBuZXcgY29yZS5hc24xLkVjUHVibGljS2V5KGtleURhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShuZXcgVWludDhBcnJheShrZXlEYXRhKSwgY29yZS5hc24xLlB1YmxpY0tleUluZm8pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IG5ldyBjb3JlLmFzbjEuRWNQdWJsaWNLZXkoa2V5SW5mby5wdWJsaWNLZXkpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0S2V5UGFyYW1ldGVycyhrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5wYXJhbWV0ZXJzLCBhbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShuZXcgVWludDhBcnJheShrZXlEYXRhKSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wcml2YXRlS2V5LCBjb3JlLmFzbjEuRWNQcml2YXRlS2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydEtleVBhcmFtZXRlcnMoa2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMsIGFsZ29yaXRobS5uYW1lZEN1cnZlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdyYXcnLCAncGtjczgnIG9yICdzcGtpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXNzZXJ0S2V5UGFyYW1ldGVycyhwYXJhbWV0ZXJzLCBuYW1lZEN1cnZlKSB7XG4gICAgICAgIGlmICghcGFyYW1ldGVycykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQ3J5cHRvRXJyb3IoXCJLZXkgaW5mbyBkb2Vzbid0IGhhdmUgcmVxdWlyZWQgcGFyYW1ldGVyc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmFtZWRDdXJ2ZUlkZW50aWZpZXIgPSBcIlwiO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmFtZWRDdXJ2ZUlkZW50aWZpZXIgPSBBc25QYXJzZXIucGFyc2UocGFyYW1ldGVycywgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIpLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5DcnlwdG9FcnJvcihcIkNhbm5vdCByZWFkIGtleSBpbmZvIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldE9pZEJ5TmFtZWRDdXJ2ZSQxKG5hbWVkQ3VydmUpICE9PSBuYW1lZEN1cnZlSWRlbnRpZmllcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQ3J5cHRvRXJyb3IoXCJLZXkgaW5mbyBwYXJhbWV0ZXIgZG9lc24ndCBtYXRjaCB0byBuYW1lZCBjdXJ2ZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjEwMDQ1LjIuMVwiO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKG5ldyBjb3JlLmFzbjEuT2JqZWN0SWRlbnRpZmllcihnZXRPaWRCeU5hbWVkQ3VydmUkMShhbGdvcml0aG0ubmFtZWRDdXJ2ZSkpKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5ID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUoYXNuS2V5KTtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEVjUHJpdmF0ZUtleSgpO1xuICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gT2JqZWN0LmFzc2lnbih7fSwgYWxnb3JpdGhtKTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBpbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHVibGljS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5hbGdvcml0aG0gPSBcIjEuMi44NDAuMTAwNDUuMi4xXCI7XG4gICAgICAgIGNvbnN0IG5hbWVkQ3VydmUgPSBnZXRPaWRCeU5hbWVkQ3VydmUkMShhbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShuZXcgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIobmFtZWRDdXJ2ZSkpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleSA9IGFzbktleS52YWx1ZTtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEVjUHVibGljS2V5KCk7XG4gICAgICAgIGtleS5kYXRhID0gQnVmZmVyJDEuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBPYmplY3QuYXNzaWduKHt9LCBhbGdvcml0aG0pO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGdldE9wZW5TU0xOYW1lZEN1cnZlKGN1cnZlKSB7XG4gICAgICAgIHN3aXRjaCAoY3VydmUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlAtMjU2XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwicHJpbWUyNTZ2MVwiO1xuICAgICAgICAgICAgY2FzZSBcIkstMjU2XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2VjcDI1NmsxXCI7XG4gICAgICAgICAgICBjYXNlIFwiUC0zODRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzZWNwMzg0cjFcIjtcbiAgICAgICAgICAgIGNhc2UgXCJQLTUyMVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNlY3A1MjFyMVwiO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VydmU7XG4gICAgICAgIH1cbiAgICB9XG59XG5FY0NyeXB0by5wdWJsaWNLZXlVc2FnZXMgPSBbXCJ2ZXJpZnlcIl07XG5FY0NyeXB0by5wcml2YXRlS2V5VXNhZ2VzID0gW1wic2lnblwiLCBcImRlcml2ZUtleVwiLCBcImRlcml2ZUJpdHNcIl07XG5cbmNsYXNzIEVjZHNhUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkVjZHNhUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWVkQ3VydmVzID0gY29yZS5FY0N1cnZlcy5uYW1lcztcbiAgICAgICAgdGhpcy5oYXNoQWxnb3JpdGhtcyA9IFtcbiAgICAgICAgICAgIFwiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIixcbiAgICAgICAgICAgIFwic2hha2UxMjhcIiwgXCJzaGFrZTI1NlwiLFxuICAgICAgICAgICAgXCJTSEEzLTI1NlwiLCBcIlNIQTMtMzg0XCIsIFwiU0hBMy01MTJcIlxuICAgICAgICBdO1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgRWNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEVjQ3J5cHRvLnNpZ24oYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvblZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBFY0NyeXB0by52ZXJpZnkoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlKSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gRWNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBFY0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICghKGludGVybmFsS2V5IGluc3RhbmNlb2YgRWNQcml2YXRlS2V5IHx8IGludGVybmFsS2V5IGluc3RhbmNlb2YgRWNQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgRUMgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBFY2RoUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkVjZGhQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBjb3JlLkVjQ3VydmVzLm5hbWVzO1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgRWNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gRWNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBFY0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICghKGludGVybmFsS2V5IGluc3RhbmNlb2YgRWNQcml2YXRlS2V5IHx8IGludGVybmFsS2V5IGluc3RhbmNlb2YgRWNQdWJsaWNLZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgRUMgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBiaXRzID0gYXdhaXQgRWNDcnlwdG8uZGVyaXZlQml0cyh7IC4uLmFsZ29yaXRobSwgcHVibGljOiBnZXRDcnlwdG9LZXkoYWxnb3JpdGhtLnB1YmxpYykgfSwgZ2V0Q3J5cHRvS2V5KGJhc2VLZXkpLCBsZW5ndGgpO1xuICAgICAgICByZXR1cm4gYml0cztcbiAgICB9XG59XG5cbmNvbnN0IGVkT0lEcyA9IHtcbiAgICBbY29yZS5hc24xLmlkRWQ0NDhdOiBcIkVkNDQ4XCIsXG4gICAgXCJlZDQ0OFwiOiBjb3JlLmFzbjEuaWRFZDQ0OCxcbiAgICBbY29yZS5hc24xLmlkWDQ0OF06IFwiWDQ0OFwiLFxuICAgIFwieDQ0OFwiOiBjb3JlLmFzbjEuaWRYNDQ4LFxuICAgIFtjb3JlLmFzbjEuaWRFZDI1NTE5XTogXCJFZDI1NTE5XCIsXG4gICAgXCJlZDI1NTE5XCI6IGNvcmUuYXNuMS5pZEVkMjU1MTksXG4gICAgW2NvcmUuYXNuMS5pZFgyNTUxOV06IFwiWDI1NTE5XCIsXG4gICAgXCJ4MjU1MTlcIjogY29yZS5hc24xLmlkWDI1NTE5LFxufTtcbmZ1bmN0aW9uIGdldE9pZEJ5TmFtZWRDdXJ2ZShuYW1lZEN1cnZlKSB7XG4gICAgY29uc3Qgb2lkID0gZWRPSURzW25hbWVkQ3VydmUudG9Mb3dlckNhc2UoKV07XG4gICAgaWYgKCFvaWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBjb252ZXJ0IFdlYkNyeXB0byBuYW1lZCBjdXJ2ZSAnJHtuYW1lZEN1cnZlfScgdG8gT0lEYCk7XG4gICAgfVxuICAgIHJldHVybiBvaWQ7XG59XG5cbmNsYXNzIEVkUHJpdmF0ZUtleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInByaXZhdGVcIjtcbiAgICB9XG4gICAgZ2V0S2V5KCkge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKHRoaXMuZGF0YSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgcmV0dXJuIEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnByaXZhdGVLZXksIGNvcmUuYXNuMS5DdXJ2ZVByaXZhdGVLZXkpO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KCk7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICBrdHk6IFwiT0tQXCIsXG4gICAgICAgICAgICBjcnY6IHRoaXMuYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICBrZXlfb3BzOiB0aGlzLnVzYWdlcyxcbiAgICAgICAgICAgIGV4dDogdGhpcy5leHRyYWN0YWJsZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oanNvbiwgSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSkpO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGlmICghanNvbi5jcnYpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKGBDYW5ub3QgZ2V0IG5hbWVkIGN1cnZlIGZyb20gSldLLiBQcm9wZXJ0eSAnY3J2JyBpcyByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5hbGdvcml0aG0gPSBnZXRPaWRCeU5hbWVkQ3VydmUoanNvbi5jcnYpO1xuICAgICAgICBjb25zdCBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGpzb24sIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuQ3VydmVQcml2YXRlS2V5IH0pO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXkgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXkpO1xuICAgICAgICB0aGlzLmRhdGEgPSBCdWZmZXIkMS5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5jbGFzcyBFZFB1YmxpY0tleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInB1YmxpY1wiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBrZXlJbmZvLnB1YmxpY0tleTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSgpO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAga3R5OiBcIk9LUFwiLFxuICAgICAgICAgICAgY3J2OiB0aGlzLmFsZ29yaXRobS5uYW1lZEN1cnZlLFxuICAgICAgICAgICAga2V5X29wczogdGhpcy51c2FnZXMsXG4gICAgICAgICAgICBleHQ6IHRoaXMuZXh0cmFjdGFibGUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGpzb24sIHtcbiAgICAgICAgICAgIHg6IENvbnZlcnQuVG9CYXNlNjRVcmwoa2V5KVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIWpzb24uY3J2KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihgQ2Fubm90IGdldCBuYW1lZCBjdXJ2ZSBmcm9tIEpXSy4gUHJvcGVydHkgJ2NydicgaXMgcmVxdWlyZWRgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWpzb24ueCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBnZXQgcHJvcGVydHkgZnJvbSBKV0suIFByb3BlcnR5ICd4JyBpcyByZXF1aXJlZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlB1YmxpY0tleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gZ2V0T2lkQnlOYW1lZEN1cnZlKGpzb24uY3J2KTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXkgPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi54KTtcbiAgICAgICAgdGhpcy5kYXRhID0gQnVmZmVyJDEuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuY2xhc3MgRWRDcnlwdG8ge1xuICAgIHN0YXRpYyBhc3luYyBnZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IG5ldyBFZFByaXZhdGVLZXkoKTtcbiAgICAgICAgcHJpdmF0ZUtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIHByaXZhdGVLZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAgcHJpdmF0ZUtleS51c2FnZXMgPSBrZXlVc2FnZXMuZmlsdGVyKCh1c2FnZSkgPT4gdGhpcy5wcml2YXRlS2V5VXNhZ2VzLmluZGV4T2YodXNhZ2UpICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBFZFB1YmxpY0tleSgpO1xuICAgICAgICBwdWJsaWNLZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBwdWJsaWNLZXkuZXh0cmFjdGFibGUgPSB0cnVlO1xuICAgICAgICBwdWJsaWNLZXkudXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHVibGljS2V5VXNhZ2VzLmluZGV4T2YodXNhZ2UpICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBhbGdvcml0aG0ubmFtZWRDdXJ2ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBrZXlzID0gY3J5cHRvLmdlbmVyYXRlS2V5UGFpclN5bmModHlwZSwge1xuICAgICAgICAgICAgcHVibGljS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzcGtpXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJpdmF0ZUtleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwicGtjczhcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBwcml2YXRlS2V5LmRhdGEgPSBrZXlzLnByaXZhdGVLZXk7XG4gICAgICAgIHB1YmxpY0tleS5kYXRhID0ga2V5cy5wdWJsaWNLZXk7XG4gICAgICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXksXG4gICAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBzaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGlmICgha2V5LnBlbSkge1xuICAgICAgICAgICAga2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cXG4ke2tleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGtleS5wZW0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5zaWduKG51bGwsIEJ1ZmZlciQxLmZyb20oZGF0YSksIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gY29yZS5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihzaWduYXR1cmUpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgdmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQVUJMSUMgS0VZLS0tLS1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBrZXk6IGtleS5wZW0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG9rID0gY3J5cHRvLnZlcmlmeShudWxsLCBCdWZmZXIkMS5mcm9tKGRhdGEpLCBvcHRpb25zLCBCdWZmZXIkMS5mcm9tKHNpZ25hdHVyZSkpO1xuICAgICAgICByZXR1cm4gb2s7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHB1YmxpY0tleSA9IGNyeXB0by5jcmVhdGVQdWJsaWNLZXkoe1xuICAgICAgICAgICAga2V5OiBhbGdvcml0aG0ucHVibGljLmRhdGEsXG4gICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICB0eXBlOiBcInNwa2lcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBjcnlwdG8uY3JlYXRlUHJpdmF0ZUtleSh7XG4gICAgICAgICAgICBrZXk6IGJhc2VLZXkuZGF0YSxcbiAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgIHR5cGU6IFwicGtjczhcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGJpdHMgPSBjcnlwdG8uZGlmZmllSGVsbG1hbih7XG4gICAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgICBwcml2YXRlS2V5LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJpdHMpLmJ1ZmZlci5zbGljZSgwLCBsZW5ndGggPj4gMyk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBleHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KTtcbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOlxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoa2V5LmRhdGEpLmJ1ZmZlcjtcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHB1YmxpY0tleUluZm8gPSBBc25QYXJzZXIucGFyc2Uoa2V5LmRhdGEsIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHVibGljS2V5SW5mby5wdWJsaWNLZXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snLCAncmF3JywgcGtjczgnIG9yICdzcGtpJ1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGp3ayA9IGtleURhdGE7XG4gICAgICAgICAgICAgICAgaWYgKGp3ay5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5DdXJ2ZVByaXZhdGVLZXkgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFqd2sueCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleURhdGE6IENhbm5vdCBnZXQgcmVxdWlyZWQgJ3gnIGZpbGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShDb252ZXJ0LkZyb21CYXNlNjRVcmwoandrLngpLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjoge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UobmV3IFVpbnQ4QXJyYXkoa2V5RGF0YSksIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoa2V5SW5mby5wdWJsaWNLZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UobmV3IFVpbnQ4QXJyYXkoa2V5RGF0YSksIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHJpdmF0ZUtleSwgY29yZS5hc24xLkN1cnZlUHJpdmF0ZUtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snLCAncmF3JywgJ3BrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEVkUHJpdmF0ZUtleSgpO1xuICAgICAgICBrZXkuZnJvbUpTT04oe1xuICAgICAgICAgICAgY3J2OiBhbGdvcml0aG0ubmFtZWRDdXJ2ZSxcbiAgICAgICAgICAgIGQ6IENvbnZlcnQuVG9CYXNlNjRVcmwoYXNuS2V5LmQpLFxuICAgICAgICB9KTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IE9iamVjdC5hc3NpZ24oe30sIGFsZ29yaXRobSk7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBFZFB1YmxpY0tleSgpO1xuICAgICAgICBrZXkuZnJvbUpTT04oe1xuICAgICAgICAgICAgY3J2OiBhbGdvcml0aG0ubmFtZWRDdXJ2ZSxcbiAgICAgICAgICAgIHg6IENvbnZlcnQuVG9CYXNlNjRVcmwoYXNuS2V5KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBPYmplY3QuYXNzaWduKHt9LCBhbGdvcml0aG0pO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG59XG5FZENyeXB0by5wdWJsaWNLZXlVc2FnZXMgPSBbXCJ2ZXJpZnlcIl07XG5FZENyeXB0by5wcml2YXRlS2V5VXNhZ2VzID0gW1wic2lnblwiLCBcImRlcml2ZUtleVwiLCBcImRlcml2ZUJpdHNcIl07XG5cbmNsYXNzIEVkRHNhUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkVkRHNhUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBhd2FpdCBFZENyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBuYW1lZEN1cnZlOiBhbGdvcml0aG0ubmFtZWRDdXJ2ZS5yZXBsYWNlKC9eZWQvaSwgXCJFZFwiKSxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25TaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBFZENyeXB0by5zaWduKGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRWRDcnlwdG8udmVyaWZ5KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEVkQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgRWRDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbn1cblxuY2xhc3MgRWNkaEVzUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkVjZGhFc1Byb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgRWRDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbmFtZWRDdXJ2ZTogYWxnb3JpdGhtLm5hbWVkQ3VydmUudG9VcHBlckNhc2UoKSxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25EZXJpdmVCaXRzKGFsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGJpdHMgPSBhd2FpdCBFZENyeXB0by5kZXJpdmVCaXRzKHsgLi4uYWxnb3JpdGhtLCBwdWJsaWM6IGdldENyeXB0b0tleShhbGdvcml0aG0ucHVibGljKSB9LCBnZXRDcnlwdG9LZXkoYmFzZUtleSksIGxlbmd0aCk7XG4gICAgICAgIHJldHVybiBiaXRzO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gRWRDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBFZENyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxufVxuXG5jbGFzcyBFZDI1NTE5Q3J5cHRvS2V5IGV4dGVuZHMgQ3J5cHRvS2V5IHtcbiAgICBjb25zdHJ1Y3RvcihhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCB1c2FnZXMsIGRhdGEpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIHRoaXMuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB1c2FnZXM7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEpO1xuICAgIH1cbiAgICB0b0pXSygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGt0eTogXCJPS1BcIixcbiAgICAgICAgICAgIGNydjogdGhpcy5hbGdvcml0aG0ubmFtZSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuY2xhc3MgRWQyNTUxOVByaXZhdGVLZXkgZXh0ZW5kcyBFZDI1NTE5Q3J5cHRvS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJwcml2YXRlXCI7XG4gICAgfVxuICAgIHRvSldLKCkge1xuICAgICAgICBjb25zdCBwdWJKd2sgPSBjcnlwdG8uY3JlYXRlUHVibGljS2V5KHtcbiAgICAgICAgICAgIGtleTogdGhpcy5kYXRhLFxuICAgICAgICAgICAgZm9ybWF0OiBcInBlbVwiLFxuICAgICAgICB9KS5leHBvcnQoeyBmb3JtYXQ6IFwiandrXCIgfSk7XG4gICAgICAgIGNvbnN0IHJhdyA9IGNvcmUuUGVtQ29udmVydGVyLnRvVWludDhBcnJheSh0aGlzLmRhdGEudG9TdHJpbmcoKSk7XG4gICAgICAgIGNvbnN0IHBrY3M4ID0gQXNuQ29udmVydC5wYXJzZShyYXcsIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgIGNvbnN0IGQgPSBBc25Db252ZXJ0LnBhcnNlKHBrY3M4LnByaXZhdGVLZXksIGNvcmUuYXNuMS5FZFByaXZhdGVLZXkpLnZhbHVlO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uc3VwZXIudG9KV0soKSxcbiAgICAgICAgICAgIC4uLnB1Ykp3ayxcbiAgICAgICAgICAgIGQ6IEJ1ZmZlci5mcm9tKG5ldyBVaW50OEFycmF5KGQpKS50b1N0cmluZyhcImJhc2U2NHVybFwiKSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmNsYXNzIEVkMjU1MTlQdWJsaWNLZXkgZXh0ZW5kcyBFZDI1NTE5Q3J5cHRvS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJwdWJsaWNcIjtcbiAgICB9XG4gICAgdG9KV0soKSB7XG4gICAgICAgIGNvbnN0IGp3ayA9IGNyeXB0by5jcmVhdGVQdWJsaWNLZXkoe1xuICAgICAgICAgICAga2V5OiB0aGlzLmRhdGEsXG4gICAgICAgICAgICBmb3JtYXQ6IFwicGVtXCIsXG4gICAgICAgIH0pLmV4cG9ydCh7IGZvcm1hdDogXCJqd2tcIiB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSldLKCksXG4gICAgICAgICAgICAuLi5qd2ssXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5jbGFzcyBFZDI1NTE5Q3J5cHRvIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBhbGdvcml0aG0ubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBrZXlzID0gY3J5cHRvLmdlbmVyYXRlS2V5UGFpclN5bmModHlwZSwge1xuICAgICAgICAgICAgcHVibGljS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwicGVtXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzcGtpXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJpdmF0ZUtleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcInBlbVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwicGtjczhcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBrZXlBbGcgPSB7XG4gICAgICAgICAgICBuYW1lOiB0eXBlID09PSBcImVkMjU1MTlcIiA/IFwiRWQyNTUxOVwiIDogXCJYMjU1MTlcIixcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcHJpdmF0ZUtleVVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnByaXZhdGVLZXlVc2FnZXMuaW5jbHVkZXModXNhZ2UpKTtcbiAgICAgICAgY29uc3QgcHVibGljS2V5VXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHVibGljS2V5VXNhZ2VzLmluY2x1ZGVzKHVzYWdlKSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBuZXcgRWQyNTUxOVByaXZhdGVLZXkoa2V5QWxnLCBleHRyYWN0YWJsZSwgcHJpdmF0ZUtleVVzYWdlcywga2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogbmV3IEVkMjU1MTlQdWJsaWNLZXkoa2V5QWxnLCB0cnVlLCBwdWJsaWNLZXlVc2FnZXMsIGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gY3J5cHRvLnNpZ24obnVsbCwgQnVmZmVyLmZyb20oZGF0YSksIGtleS5kYXRhKTtcbiAgICAgICAgcmV0dXJuIGNvcmUuQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoc2lnbmF0dXJlKTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBjcnlwdG8udmVyaWZ5KG51bGwsIEJ1ZmZlci5mcm9tKGRhdGEpLCBrZXkuZGF0YSwgc2lnbmF0dXJlKTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBrZXkudG9KV0soKTtcbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvcmUuUGVtQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoa2V5LmRhdGEudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvcmUuUGVtQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoa2V5LmRhdGEudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBqd2sgPSBrZXkudG9KV0soKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gQ29udmVydC5Gcm9tQmFzZTY0VXJsKGp3ay54KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snLCAncmF3JywgcGtjczgnIG9yICdzcGtpJ1wiKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgandrID0ga2V5RGF0YTtcbiAgICAgICAgICAgICAgICBpZiAoandrLmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJpdmF0ZURhdGEgPSBuZXcgY29yZS5hc24xLkVkUHJpdmF0ZUtleSgpO1xuICAgICAgICAgICAgICAgICAgICBwcml2YXRlRGF0YS52YWx1ZSA9IGNvcmUuQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoQnVmZmVyLmZyb20oandrLmQsIFwiYmFzZTY0dXJsXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGtjczggPSBuZXcgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKCk7XG4gICAgICAgICAgICAgICAgICAgIHBrY3M4LnByaXZhdGVLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gYWxnb3JpdGhtLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJlZDI1NTE5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29yZS5hc24xLmlkRWQyNTUxOVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBjb3JlLmFzbjEuaWRYMjU1MTk7XG4gICAgICAgICAgICAgICAgICAgIHBrY3M4LnByaXZhdGVLZXkgPSBBc25Db252ZXJ0LnNlcmlhbGl6ZShwcml2YXRlRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJhdyA9IEFzbkNvbnZlcnQuc2VyaWFsaXplKHBrY3M4KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGVtID0gY29yZS5QZW1Db252ZXJ0ZXIuZnJvbUJ1ZmZlclNvdXJjZShyYXcsIFwiUFJJVkFURSBLRVlcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRWQyNTUxOVByaXZhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBwZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChqd2sueCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwdWJLZXkgPSBjcnlwdG8uY3JlYXRlUHVibGljS2V5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogXCJqd2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogandrLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGVtID0gcHViS2V5LmV4cG9ydCh7IGZvcm1hdDogXCJwZW1cIiwgdHlwZTogXCJzcGtpXCIgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRWQyNTUxOVB1YmxpY0tleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIHBlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImtleURhdGE6IENhbm5vdCBpbXBvcnQgSldLLiAnZCcgb3IgJ3gnIG11c3QgYmUgcHJlc2VudGVkXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJwa2NzOFwiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGVtID0gY29yZS5QZW1Db252ZXJ0ZXIuZnJvbUJ1ZmZlclNvdXJjZShrZXlEYXRhLCBcIlBSSVZBVEUgS0VZXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRWQyNTUxOVByaXZhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBwZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBlbSA9IGNvcmUuUGVtQ29udmVydGVyLmZyb21CdWZmZXJTb3VyY2Uoa2V5RGF0YSwgXCJQVUJMSUMgS0VZXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRWQyNTUxOVB1YmxpY0tleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIHBlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCByYXcgPSBrZXlEYXRhO1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGNyeXB0by5jcmVhdGVQdWJsaWNLZXkoe1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiandrXCIsXG4gICAgICAgICAgICAgICAgICAgIGtleToge1xuICAgICAgICAgICAgICAgICAgICAgICAga3R5OiBcIk9LUFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3J2OiBhbGdvcml0aG0ubmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImVkMjU1MTlcIiA/IFwiRWQyNTUxOVwiIDogXCJYMjU1MTlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IENvbnZlcnQuVG9CYXNlNjRVcmwocmF3KSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwZW0gPSBrZXkuZXhwb3J0KHsgZm9ybWF0OiBcInBlbVwiLCB0eXBlOiBcInNwa2lcIiB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVkMjU1MTlQdWJsaWNLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBwZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdyYXcnLCBwa2NzOCcgb3IgJ3Nwa2knXCIpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkVkMjU1MTlDcnlwdG8ucHJpdmF0ZUtleVVzYWdlcyA9IFtcInNpZ25cIiwgXCJkZXJpdmVCaXRzXCIsIFwiZGVyaXZlS2V5XCJdO1xuRWQyNTUxOUNyeXB0by5wdWJsaWNLZXlVc2FnZXMgPSBbXCJ2ZXJpZnlcIl07XG5cbmNsYXNzIEVkMjU1MTlQcm92aWRlciBleHRlbmRzIGNvcmUuRWQyNTUxOVByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgRWQyNTUxOUNyeXB0by5nZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBFZDI1NTE5Q3J5cHRvLnNpZ24oYWxnb3JpdGhtLCBpbnRlcm5hbEtleSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgICAgICByZXR1cm4gc2lnbmF0dXJlO1xuICAgIH1cbiAgICBvblZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIHJldHVybiBFZDI1NTE5Q3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGludGVybmFsS2V5LCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIHJldHVybiBFZDI1NTE5Q3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGludGVybmFsS2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBhd2FpdCBFZDI1NTE5Q3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoaW50ZXJuYWxLZXkpO1xuICAgIH1cbn1cblxuY2xhc3MgWDI1NTE5UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlgyNTUxOVByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgRWQyNTUxOUNyeXB0by5nZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBpbnRlcm5hbEJhc2VLZXkgPSBnZXRDcnlwdG9LZXkoYmFzZUtleSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsUHVibGljS2V5ID0gZ2V0Q3J5cHRvS2V5KGFsZ29yaXRobS5wdWJsaWMpO1xuICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBjcnlwdG8uY3JlYXRlUHVibGljS2V5KHtcbiAgICAgICAgICAgIGtleTogaW50ZXJuYWxQdWJsaWNLZXkuZGF0YS50b1N0cmluZygpLFxuICAgICAgICAgICAgZm9ybWF0OiBcInBlbVwiLFxuICAgICAgICAgICAgdHlwZTogXCJzcGtpXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gY3J5cHRvLmNyZWF0ZVByaXZhdGVLZXkoe1xuICAgICAgICAgICAga2V5OiBpbnRlcm5hbEJhc2VLZXkuZGF0YS50b1N0cmluZygpLFxuICAgICAgICAgICAgZm9ybWF0OiBcInBlbVwiLFxuICAgICAgICAgICAgdHlwZTogXCJwa2NzOFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYml0cyA9IGNyeXB0by5kaWZmaWVIZWxsbWFuKHtcbiAgICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgICAgIHByaXZhdGVLZXksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYml0cykuYnVmZmVyLnNsaWNlKDAsIGxlbmd0aCA+PiAzKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgcmV0dXJuIEVkMjU1MTlDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgaW50ZXJuYWxLZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBFZDI1NTE5Q3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBFZDI1NTE5Q3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgRWQyNTUxOUNyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgUGJrZGZDcnlwdG9LZXkgZXh0ZW5kcyBDcnlwdG9LZXkge1xufVxuXG5jbGFzcyBQYmtkZjJQcm92aWRlciBleHRlbmRzIGNvcmUuUGJrZGYyUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2FsdCA9IGNvcmUuQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoYWxnb3JpdGhtLnNhbHQpO1xuICAgICAgICAgICAgY29uc3QgaGFzaCA9IGFsZ29yaXRobS5oYXNoLm5hbWUucmVwbGFjZShcIi1cIiwgXCJcIik7XG4gICAgICAgICAgICBjcnlwdG8ucGJrZGYyKGdldENyeXB0b0tleShiYXNlS2V5KS5kYXRhLCBCdWZmZXIkMS5mcm9tKHNhbHQpLCBhbGdvcml0aG0uaXRlcmF0aW9ucywgbGVuZ3RoID4+IDMsIGhhc2gsIChlcnIsIGRlcml2ZWRCaXRzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUobmV3IFVpbnQ4QXJyYXkoZGVyaXZlZEJpdHMpLmJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBpZiAoZm9ybWF0ID09PSBcInJhd1wiKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBuZXcgUGJrZGZDcnlwdG9LZXkoKTtcbiAgICAgICAgICAgIGtleS5kYXRhID0gQnVmZmVyJDEuZnJvbShrZXlEYXRhKTtcbiAgICAgICAgICAgIGtleS5hbGdvcml0aG0gPSB7IG5hbWU6IHRoaXMubmFtZSB9O1xuICAgICAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdyYXcnXCIpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIFBia2RmQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IFBCS0RGIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgSG1hY0NyeXB0b0tleSBleHRlbmRzIENyeXB0b0tleSB7XG4gICAgZ2V0IGFsZygpIHtcbiAgICAgICAgY29uc3QgaGFzaCA9IHRoaXMuYWxnb3JpdGhtLmhhc2gubmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gYEhTJHtoYXNoLnJlcGxhY2UoXCJTSEEtXCIsIFwiXCIpfWA7XG4gICAgfVxuICAgIHNldCBhbGcodmFsdWUpIHtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwia1wiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxDb252ZXJ0ZXIgfSlcbl0sIEhtYWNDcnlwdG9LZXkucHJvdG90eXBlLCBcImRhdGFcIiwgdm9pZCAwKTtcblxuY2xhc3MgSG1hY1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5IbWFjUHJvdmlkZXIge1xuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IChhbGdvcml0aG0ubGVuZ3RoIHx8IHRoaXMuZ2V0RGVmYXVsdExlbmd0aChhbGdvcml0aG0uaGFzaC5uYW1lKSkgPj4gMyA8PCAzO1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgSG1hY0NyeXB0b0tleSgpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0ge1xuICAgICAgICAgICAgLi4uYWxnb3JpdGhtLFxuICAgICAgICAgICAgbGVuZ3RoLFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB9O1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAga2V5LmRhdGEgPSBjcnlwdG8ucmFuZG9tQnl0ZXMobGVuZ3RoID4+IDMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSBTaGFDcnlwdG8uZ2V0QWxnb3JpdGhtTmFtZShrZXkuYWxnb3JpdGhtLmhhc2gpO1xuICAgICAgICBjb25zdCBobWFjID0gY3J5cHRvLmNyZWF0ZUhtYWMoY3J5cHRvQWxnLCBnZXRDcnlwdG9LZXkoa2V5KS5kYXRhKVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXIkMS5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGhtYWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSBTaGFDcnlwdG8uZ2V0QWxnb3JpdGhtTmFtZShrZXkuYWxnb3JpdGhtLmhhc2gpO1xuICAgICAgICBjb25zdCBobWFjID0gY3J5cHRvLmNyZWF0ZUhtYWMoY3J5cHRvQWxnLCBnZXRDcnlwdG9LZXkoa2V5KS5kYXRhKVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXIkMS5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIGhtYWMuY29tcGFyZShCdWZmZXIkMS5mcm9tKHNpZ25hdHVyZSkpID09PSAwO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBsZXQga2V5O1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihrZXlEYXRhLCB7IHRhcmdldFNjaGVtYTogSG1hY0NyeXB0b0tleSB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjpcbiAgICAgICAgICAgICAgICBrZXkgPSBuZXcgSG1hY0NyeXB0b0tleSgpO1xuICAgICAgICAgICAgICAgIGtleS5kYXRhID0gQnVmZmVyJDEuZnJvbShrZXlEYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycgb3IgJ3JhdydcIik7XG4gICAgICAgIH1cbiAgICAgICAga2V5LmFsZ29yaXRobSA9IHtcbiAgICAgICAgICAgIGhhc2g6IHsgbmFtZTogYWxnb3JpdGhtLmhhc2gubmFtZSB9LFxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBrZXkuZGF0YS5sZW5ndGggPDwgMyxcbiAgICAgICAgfTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBKc29uU2VyaWFsaXplci50b0pTT04oZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShnZXRDcnlwdG9LZXkoa2V5KS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snIG9yICdyYXcnXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgSG1hY0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBITUFDIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgSGtkZkNyeXB0b0tleSBleHRlbmRzIENyeXB0b0tleSB7XG59XG5cbmNsYXNzIEhrZGZQcm92aWRlciBleHRlbmRzIGNvcmUuSGtkZlByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBpZiAoZm9ybWF0LnRvTG93ZXJDYXNlKCkgIT09IFwicmF3XCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEhrZGZDcnlwdG9LZXkoKTtcbiAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIkMS5mcm9tKGtleURhdGEpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0geyBuYW1lOiB0aGlzLm5hbWUgfTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25EZXJpdmVCaXRzKHBhcmFtcywgYmFzZUtleSwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBwYXJhbXMuaGFzaC5uYW1lLnJlcGxhY2UoXCItXCIsIFwiXCIpO1xuICAgICAgICBjb25zdCBoYXNoTGVuZ3RoID0gY3J5cHRvLmNyZWF0ZUhhc2goaGFzaCkuZGlnZXN0KCkubGVuZ3RoO1xuICAgICAgICBjb25zdCBieXRlTGVuZ3RoID0gbGVuZ3RoIC8gODtcbiAgICAgICAgY29uc3QgaW5mbyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlciQxLnRvVWludDhBcnJheShwYXJhbXMuaW5mbyk7XG4gICAgICAgIGNvbnN0IFBSSyA9IGNyeXB0by5jcmVhdGVIbWFjKGhhc2gsIEJ1ZmZlclNvdXJjZUNvbnZlcnRlciQxLnRvVWludDhBcnJheShwYXJhbXMuc2FsdCkpXG4gICAgICAgICAgICAudXBkYXRlKEJ1ZmZlclNvdXJjZUNvbnZlcnRlciQxLnRvVWludDhBcnJheShnZXRDcnlwdG9LZXkoYmFzZUtleSkuZGF0YSkpXG4gICAgICAgICAgICAuZGlnZXN0KCk7XG4gICAgICAgIGNvbnN0IGJsb2NrcyA9IFtCdWZmZXIkMS5hbGxvYygwKV07XG4gICAgICAgIGNvbnN0IGJsb2NrQ291bnQgPSBNYXRoLmNlaWwoYnl0ZUxlbmd0aCAvIGhhc2hMZW5ndGgpICsgMTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBibG9ja0NvdW50OyArK2kpIHtcbiAgICAgICAgICAgIGJsb2Nrcy5wdXNoKGNyeXB0by5jcmVhdGVIbWFjKGhhc2gsIFBSSylcbiAgICAgICAgICAgICAgICAudXBkYXRlKEJ1ZmZlciQxLmNvbmNhdChbYmxvY2tzW2kgLSAxXSwgaW5mbywgQnVmZmVyJDEuZnJvbShbaV0pXSkpXG4gICAgICAgICAgICAgICAgLmRpZ2VzdCgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gQnVmZmVyJDEuY29uY2F0KGJsb2Nrcykuc2xpY2UoMCwgYnl0ZUxlbmd0aCk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgSGtkZkNyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBIS0RGIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgU2hha2VDcnlwdG8ge1xuICAgIHN0YXRpYyBkaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaChhbGdvcml0aG0ubmFtZS50b0xvd2VyQ2FzZSgpLCB7IG91dHB1dExlbmd0aDogYWxnb3JpdGhtLmxlbmd0aCB9KVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXIkMS5mcm9tKGRhdGEpKS5kaWdlc3QoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGhhc2gpLmJ1ZmZlcjtcbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlMTI4UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlNoYWtlMTI4UHJvdmlkZXIge1xuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hha2VDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZTI1NlByb3ZpZGVyIGV4dGVuZHMgY29yZS5TaGFrZTI1NlByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYWtlQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU3VidGxlQ3J5cHRvIGV4dGVuZHMgY29yZS5TdWJ0bGVDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzQ2JjUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzQ3RyUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzR2NtUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzQ21hY1Byb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEFlc0t3UHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgQWVzRWNiUHJvdmlkZXIoKSk7XG4gICAgICAgIGNvbnN0IGNpcGhlcnMgPSBjcnlwdG8uZ2V0Q2lwaGVycygpO1xuICAgICAgICBpZiAoY2lwaGVycy5pbmNsdWRlcyhcImRlcy1jYmNcIikpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgRGVzQ2JjUHJvdmlkZXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBEZXNFZGUzQ2JjUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhU3NhUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhUHNzUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgUnNhT2FlcFByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFJzYUVzUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgRWNkc2FQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFY2RoUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhMVByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTI1NlByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTM4NFByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTUxMlByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFBia2RmMlByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEhtYWNQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBIa2RmUHJvdmlkZXIoKSk7XG4gICAgICAgIGNvbnN0IG5vZGVNYWpvclZlcnNpb24gPSAoX2EgPSAvXnYoXFxkKykvLmV4ZWMocHJvY2Vzcy52ZXJzaW9uKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzFdO1xuICAgICAgICBpZiAobm9kZU1ham9yVmVyc2lvbiAmJiBwYXJzZUludChub2RlTWFqb3JWZXJzaW9uLCAxMCkgPj0gMTIpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hha2UxMjhQcm92aWRlcigpKTtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hha2UyNTZQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoYXNoZXMgPSBjcnlwdG8uZ2V0SGFzaGVzKCk7XG4gICAgICAgIGlmIChoYXNoZXMuaW5jbHVkZXMoXCJzaGEzLTI1NlwiKSkge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBTaGEzMjU2UHJvdmlkZXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc2hlcy5pbmNsdWRlcyhcInNoYTMtMzg0XCIpKSB7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTMzODRQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzaGVzLmluY2x1ZGVzKFwic2hhMy01MTJcIikpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhMzUxMlByb3ZpZGVyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlTWFqb3JWZXJzaW9uICYmIHBhcnNlSW50KG5vZGVNYWpvclZlcnNpb24sIDEwKSA+PSAxNCkge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFZERzYVByb3ZpZGVyKCkpO1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBFY2RoRXNQcm92aWRlcigpKTtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgRWQyNTUxOVByb3ZpZGVyKCkpO1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBYMjU1MTlQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQ3J5cHRvIGV4dGVuZHMgY29yZS5DcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnN1YnRsZSA9IG5ldyBTdWJ0bGVDcnlwdG8oKTtcbiAgICB9XG4gICAgZ2V0UmFuZG9tVmFsdWVzKGFycmF5KSB7XG4gICAgICAgIGlmICghQXJyYXlCdWZmZXIuaXNWaWV3KGFycmF5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdnZXRSYW5kb21WYWx1ZXMnIG9uICdDcnlwdG8nOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnQXJyYXlCdWZmZXJWaWV3J1wiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIkMS5mcm9tKGFycmF5LmJ1ZmZlciwgYXJyYXkuYnl0ZU9mZnNldCwgYXJyYXkuYnl0ZUxlbmd0aCk7XG4gICAgICAgIGNyeXB0by5yYW5kb21GaWxsU3luYyhidWZmZXIpO1xuICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgfVxufVxuXG5leHBvcnQgeyBDcnlwdG8gfTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5leHBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW50ZXJuYWxTdGF0ZVN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBpbnRlcm5hbFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2ludGVybmFsXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IGludGVybmFsU3RhdGVTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9zdGF0ZVwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW5zdGFuY2VTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pbnN0YW5jZVwiKTtcbiIsICJleHBvcnQgdmFyIHRvcCA9ICd0b3AnO1xuZXhwb3J0IHZhciBib3R0b20gPSAnYm90dG9tJztcbmV4cG9ydCB2YXIgcmlnaHQgPSAncmlnaHQnO1xuZXhwb3J0IHZhciBsZWZ0ID0gJ2xlZnQnO1xuZXhwb3J0IHZhciBhdXRvID0gJ2F1dG8nO1xuZXhwb3J0IHZhciBiYXNlUGxhY2VtZW50cyA9IFt0b3AsIGJvdHRvbSwgcmlnaHQsIGxlZnRdO1xuZXhwb3J0IHZhciBzdGFydCA9ICdzdGFydCc7XG5leHBvcnQgdmFyIGVuZCA9ICdlbmQnO1xuZXhwb3J0IHZhciBjbGlwcGluZ1BhcmVudHMgPSAnY2xpcHBpbmdQYXJlbnRzJztcbmV4cG9ydCB2YXIgdmlld3BvcnQgPSAndmlld3BvcnQnO1xuZXhwb3J0IHZhciBwb3BwZXIgPSAncG9wcGVyJztcbmV4cG9ydCB2YXIgcmVmZXJlbmNlID0gJ3JlZmVyZW5jZSc7XG5leHBvcnQgdmFyIHZhcmlhdGlvblBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovYmFzZVBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTtcbmV4cG9ydCB2YXIgcGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9bXS5jb25jYXQoYmFzZVBsYWNlbWVudHMsIFthdXRvXSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50LCBwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pOyAvLyBtb2RpZmllcnMgdGhhdCBuZWVkIHRvIHJlYWQgdGhlIERPTVxuXG5leHBvcnQgdmFyIGJlZm9yZVJlYWQgPSAnYmVmb3JlUmVhZCc7XG5leHBvcnQgdmFyIHJlYWQgPSAncmVhZCc7XG5leHBvcnQgdmFyIGFmdGVyUmVhZCA9ICdhZnRlclJlYWQnOyAvLyBwdXJlLWxvZ2ljIG1vZGlmaWVyc1xuXG5leHBvcnQgdmFyIGJlZm9yZU1haW4gPSAnYmVmb3JlTWFpbic7XG5leHBvcnQgdmFyIG1haW4gPSAnbWFpbic7XG5leHBvcnQgdmFyIGFmdGVyTWFpbiA9ICdhZnRlck1haW4nOyAvLyBtb2RpZmllciB3aXRoIHRoZSBwdXJwb3NlIHRvIHdyaXRlIHRvIHRoZSBET00gKG9yIHdyaXRlIGludG8gYSBmcmFtZXdvcmsgc3RhdGUpXG5cbmV4cG9ydCB2YXIgYmVmb3JlV3JpdGUgPSAnYmVmb3JlV3JpdGUnO1xuZXhwb3J0IHZhciB3cml0ZSA9ICd3cml0ZSc7XG5leHBvcnQgdmFyIGFmdGVyV3JpdGUgPSAnYWZ0ZXJXcml0ZSc7XG5leHBvcnQgdmFyIG1vZGlmaWVyUGhhc2VzID0gW2JlZm9yZVJlYWQsIHJlYWQsIGFmdGVyUmVhZCwgYmVmb3JlTWFpbiwgbWFpbiwgYWZ0ZXJNYWluLCBiZWZvcmVXcml0ZSwgd3JpdGUsIGFmdGVyV3JpdGVdOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlTmFtZShlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50ID8gKGVsZW1lbnQubm9kZU5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIGlmIChub2RlLnRvU3RyaW5nKCkgIT09ICdbb2JqZWN0IFdpbmRvd10nKSB7XG4gICAgdmFyIG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQ7XG4gICAgcmV0dXJuIG93bmVyRG9jdW1lbnQgPyBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdyA6IHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5FbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5IVE1MRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNTaGFkb3dSb290KG5vZGUpIHtcbiAgLy8gSUUgMTEgaGFzIG5vIFNoYWRvd1Jvb3RcbiAgaWYgKHR5cGVvZiBTaGFkb3dSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLlNoYWRvd1Jvb3Q7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdDtcbn1cblxuZXhwb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfTsiLCAiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjsgLy8gVGhpcyBtb2RpZmllciB0YWtlcyB0aGUgc3R5bGVzIHByZXBhcmVkIGJ5IHRoZSBgY29tcHV0ZVN0eWxlc2AgbW9kaWZpZXJcbi8vIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlIEhUTUxFbGVtZW50cyBzdWNoIGFzIHBvcHBlciBhbmQgYXJyb3dcblxuZnVuY3Rpb24gYXBwbHlTdHlsZXMoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlO1xuICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBzdHlsZSA9IHN0YXRlLnN0eWxlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBGbG93IGRvZXNuJ3Qgc3VwcG9ydCB0byBleHRlbmQgdGhpcyBwcm9wZXJ0eSwgYnV0IGl0J3MgdGhlIG1vc3RcbiAgICAvLyBlZmZlY3RpdmUgd2F5IHRvIGFwcGx5IHN0eWxlcyB0byBhbiBIVE1MRWxlbWVudFxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuXG5cbiAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhdHRyaWJ1dGVzW25hbWVdO1xuXG4gICAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUgPT09IHRydWUgPyAnJyA6IHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZTtcbiAgdmFyIGluaXRpYWxTdHlsZXMgPSB7XG4gICAgcG9wcGVyOiB7XG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGxlZnQ6ICcwJyxcbiAgICAgIHRvcDogJzAnLFxuICAgICAgbWFyZ2luOiAnMCdcbiAgICB9LFxuICAgIGFycm93OiB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICAgIH0sXG4gICAgcmVmZXJlbmNlOiB7fVxuICB9O1xuICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLnBvcHBlci5zdHlsZSwgaW5pdGlhbFN0eWxlcy5wb3BwZXIpO1xuICBzdGF0ZS5zdHlsZXMgPSBpbml0aWFsU3R5bGVzO1xuXG4gIGlmIChzdGF0ZS5lbGVtZW50cy5hcnJvdykge1xuICAgIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMuYXJyb3cuc3R5bGUsIGluaXRpYWxTdHlsZXMuYXJyb3cpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTtcbiAgICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICAgIHZhciBzdHlsZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhzdGF0ZS5zdHlsZXMuaGFzT3duUHJvcGVydHkobmFtZSkgPyBzdGF0ZS5zdHlsZXNbbmFtZV0gOiBpbml0aWFsU3R5bGVzW25hbWVdKTsgLy8gU2V0IGFsbCB2YWx1ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIHRvIHVuc2V0IHRoZW1cblxuICAgICAgdmFyIHN0eWxlID0gc3R5bGVQcm9wZXJ0aWVzLnJlZHVjZShmdW5jdGlvbiAoc3R5bGUsIHByb3BlcnR5KSB7XG4gICAgICAgIHN0eWxlW3Byb3BlcnR5XSA9ICcnO1xuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9LCB7fSk7IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXBwbHlTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3dyaXRlJyxcbiAgZm46IGFwcGx5U3R5bGVzLFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgcmVxdWlyZXM6IFsnY29tcHV0ZVN0eWxlcyddXG59OyIsICJpbXBvcnQgeyBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59IiwgImV4cG9ydCB2YXIgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgdmFyIG1pbiA9IE1hdGgubWluO1xuZXhwb3J0IHZhciByb3VuZCA9IE1hdGgucm91bmQ7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVBU3RyaW5nKCkge1xuICB2YXIgdWFEYXRhID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGE7XG5cbiAgaWYgKHVhRGF0YSAhPSBudWxsICYmIHVhRGF0YS5icmFuZHMgJiYgQXJyYXkuaXNBcnJheSh1YURhdGEuYnJhbmRzKSkge1xuICAgIHJldHVybiB1YURhdGEuYnJhbmRzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0uYnJhbmQgKyBcIi9cIiArIGl0ZW0udmVyc2lvbjtcbiAgICB9KS5qb2luKCcgJyk7XG4gIH1cblxuICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbn0iLCAiaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzTGF5b3V0Vmlld3BvcnQoKSB7XG4gIHJldHVybiAhL14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChnZXRVQVN0cmluZygpKTtcbn0iLCAiaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc0xheW91dFZpZXdwb3J0IGZyb20gXCIuL2lzTGF5b3V0Vmlld3BvcnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSkge1xuICBpZiAoaW5jbHVkZVNjYWxlID09PSB2b2lkIDApIHtcbiAgICBpbmNsdWRlU2NhbGUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgc2NhbGVYID0gMTtcbiAgdmFyIHNjYWxlWSA9IDE7XG5cbiAgaWYgKGluY2x1ZGVTY2FsZSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgc2NhbGVYID0gZWxlbWVudC5vZmZzZXRXaWR0aCA+IDAgPyByb3VuZChjbGllbnRSZWN0LndpZHRoKSAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMSA6IDE7XG4gICAgc2NhbGVZID0gZWxlbWVudC5vZmZzZXRIZWlnaHQgPiAwID8gcm91bmQoY2xpZW50UmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMSA6IDE7XG4gIH1cblxuICB2YXIgX3JlZiA9IGlzRWxlbWVudChlbGVtZW50KSA/IGdldFdpbmRvdyhlbGVtZW50KSA6IHdpbmRvdyxcbiAgICAgIHZpc3VhbFZpZXdwb3J0ID0gX3JlZi52aXN1YWxWaWV3cG9ydDtcblxuICB2YXIgYWRkVmlzdWFsT2Zmc2V0cyA9ICFpc0xheW91dFZpZXdwb3J0KCkgJiYgaXNGaXhlZFN0cmF0ZWd5O1xuICB2YXIgeCA9IChjbGllbnRSZWN0LmxlZnQgKyAoYWRkVmlzdWFsT2Zmc2V0cyAmJiB2aXN1YWxWaWV3cG9ydCA/IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQgOiAwKSkgLyBzY2FsZVg7XG4gIHZhciB5ID0gKGNsaWVudFJlY3QudG9wICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3AgOiAwKSkgLyBzY2FsZVk7XG4gIHZhciB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZVg7XG4gIHZhciBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodCAvIHNjYWxlWTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIHJpZ2h0OiB4ICsgd2lkdGgsXG4gICAgYm90dG9tOiB5ICsgaGVpZ2h0LFxuICAgIGxlZnQ6IHgsXG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG59IiwgImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7IC8vIFJldHVybnMgdGhlIGxheW91dCByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC4gTGF5b3V0XG4vLyBtZWFucyBpdCBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IHRyYW5zZm9ybXMuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldExheW91dFJlY3QoZWxlbWVudCkge1xuICB2YXIgY2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KTsgLy8gVXNlIHRoZSBjbGllbnRSZWN0IHNpemVzIGlmIGl0J3Mgbm90IGJlZW4gdHJhbnNmb3JtZWQuXG4gIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTIyM1xuXG4gIHZhciB3aWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC53aWR0aCAtIHdpZHRoKSA8PSAxKSB7XG4gICAgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoO1xuICB9XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3QuaGVpZ2h0IC0gaGVpZ2h0KSA8PSAxKSB7XG4gICAgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IGVsZW1lbnQub2Zmc2V0TGVmdCxcbiAgICB5OiBlbGVtZW50Lm9mZnNldFRvcCxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn0iLCAiaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGFpbnMocGFyZW50LCBjaGlsZCkge1xuICB2YXIgcm9vdE5vZGUgPSBjaGlsZC5nZXRSb290Tm9kZSAmJiBjaGlsZC5nZXRSb290Tm9kZSgpOyAvLyBGaXJzdCwgYXR0ZW1wdCB3aXRoIGZhc3RlciBuYXRpdmUgbWV0aG9kXG5cbiAgaWYgKHBhcmVudC5jb250YWlucyhjaGlsZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyB0aGVuIGZhbGxiYWNrIHRvIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiB3aXRoIFNoYWRvdyBET00gc3VwcG9ydFxuICBlbHNlIGlmIChyb290Tm9kZSAmJiBpc1NoYWRvd1Jvb3Qocm9vdE5vZGUpKSB7XG4gICAgICB2YXIgbmV4dCA9IGNoaWxkO1xuXG4gICAgICBkbyB7XG4gICAgICAgIGlmIChuZXh0ICYmIHBhcmVudC5pc1NhbWVOb2RlKG5leHQpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddOiBuZWVkIGEgYmV0dGVyIHdheSB0byBoYW5kbGUgdGhpcy4uLlxuXG5cbiAgICAgICAgbmV4dCA9IG5leHQucGFyZW50Tm9kZSB8fCBuZXh0Lmhvc3Q7XG4gICAgICB9IHdoaWxlIChuZXh0KTtcbiAgICB9IC8vIEdpdmUgdXAsIHRoZSByZXN1bHQgaXMgZmFsc2VcblxuXG4gIHJldHVybiBmYWxzZTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59IiwgImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNUYWJsZUVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gWyd0YWJsZScsICd0ZCcsICd0aCddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoZWxlbWVudCkpID49IDA7XG59IiwgImltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSB7XG4gIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgcmV0dXJuICgoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudC5vd25lckRvY3VtZW50IDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gIGVsZW1lbnQuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkuZG9jdW1lbnRFbGVtZW50O1xufSIsICJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGdldE5vZGVOYW1lKGVsZW1lbnQpID09PSAnaHRtbCcpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiAoLy8gdGhpcyBpcyBhIHF1aWNrZXIgKGJ1dCBsZXNzIHR5cGUgc2FmZSkgd2F5IHRvIHNhdmUgcXVpdGUgc29tZSBieXRlcyBmcm9tIHRoZSBidW5kbGVcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgZWxlbWVudC5hc3NpZ25lZFNsb3QgfHwgLy8gc3RlcCBpbnRvIHRoZSBzaGFkb3cgRE9NIG9mIHRoZSBwYXJlbnQgb2YgYSBzbG90dGVkIG5vZGVcbiAgICBlbGVtZW50LnBhcmVudE5vZGUgfHwgKCAvLyBET00gRWxlbWVudCBkZXRlY3RlZFxuICAgIGlzU2hhZG93Um9vdChlbGVtZW50KSA/IGVsZW1lbnQuaG9zdCA6IG51bGwpIHx8IC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWRcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogSFRNTEVsZW1lbnQgaXMgYSBOb2RlXG4gICAgZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIC8vIGZhbGxiYWNrXG5cbiAgKTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCwgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGlzVGFibGVFbGVtZW50IGZyb20gXCIuL2lzVGFibGVFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgZ2V0VUFTdHJpbmcgZnJvbSBcIi4uL3V0aWxzL3VzZXJBZ2VudC5qc1wiO1xuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvODM3XG4gIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudDtcbn0gLy8gYC5vZmZzZXRQYXJlbnRgIHJlcG9ydHMgYG51bGxgIGZvciBmaXhlZCBlbGVtZW50cywgd2hpbGUgYWJzb2x1dGUgZWxlbWVudHNcbi8vIHJldHVybiB0aGUgY29udGFpbmluZyBibG9ja1xuXG5cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIHZhciBpc0ZpcmVmb3ggPSAvZmlyZWZveC9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG4gIHZhciBpc0lFID0gL1RyaWRlbnQvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuXG4gIGlmIChpc0lFICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAvLyBJbiBJRSA5LCAxMCBhbmQgMTEgZml4ZWQgZWxlbWVudHMgY29udGFpbmluZyBibG9jayBpcyBhbHdheXMgZXN0YWJsaXNoZWQgYnkgdGhlIHZpZXdwb3J0XG4gICAgdmFyIGVsZW1lbnRDc3MgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuXG4gICAgaWYgKGVsZW1lbnRDc3MucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG5cbiAgaWYgKGlzU2hhZG93Um9vdChjdXJyZW50Tm9kZSkpIHtcbiAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLmhvc3Q7XG4gIH1cblxuICB3aGlsZSAoaXNIVE1MRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgWydodG1sJywgJ2JvZHknXS5pbmRleE9mKGdldE5vZGVOYW1lKGN1cnJlbnROb2RlKSkgPCAwKSB7XG4gICAgdmFyIGNzcyA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudE5vZGUpOyAvLyBUaGlzIGlzIG5vbi1leGhhdXN0aXZlIGJ1dCBjb3ZlcnMgdGhlIG1vc3QgY29tbW9uIENTUyBwcm9wZXJ0aWVzIHRoYXRcbiAgICAvLyBjcmVhdGUgYSBjb250YWluaW5nIGJsb2NrLlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG5cbiAgICBpZiAoY3NzLnRyYW5zZm9ybSAhPT0gJ25vbmUnIHx8IGNzcy5wZXJzcGVjdGl2ZSAhPT0gJ25vbmUnIHx8IGNzcy5jb250YWluID09PSAncGFpbnQnIHx8IFsndHJhbnNmb3JtJywgJ3BlcnNwZWN0aXZlJ10uaW5kZXhPZihjc3Mud2lsbENoYW5nZSkgIT09IC0xIHx8IGlzRmlyZWZveCAmJiBjc3Mud2lsbENoYW5nZSA9PT0gJ2ZpbHRlcicgfHwgaXNGaXJlZm94ICYmIGNzcy5maWx0ZXIgJiYgY3NzLmZpbHRlciAhPT0gJ25vbmUnKSB7XG4gICAgICByZXR1cm4gY3VycmVudE5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn0gLy8gR2V0cyB0aGUgY2xvc2VzdCBhbmNlc3RvciBwb3NpdGlvbmVkIGVsZW1lbnQuIEhhbmRsZXMgc29tZSBlZGdlIGNhc2VzLFxuLy8gc3VjaCBhcyB0YWJsZSBhbmNlc3RvcnMgYW5kIGNyb3NzIGJyb3dzZXIgYnVncy5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KTtcblxuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQob2Zmc2V0UGFyZW50KTtcbiAgfVxuXG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdodG1sJyB8fCBnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnYm9keScgJiYgZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJykpIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldFBhcmVudCB8fCBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkgfHwgd2luZG93O1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHBsYWNlbWVudCkgPj0gMCA/ICd4JyA6ICd5Jztcbn0iLCAiaW1wb3J0IHsgbWF4IGFzIG1hdGhNYXgsIG1pbiBhcyBtYXRoTWluIH0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpIHtcbiAgcmV0dXJuIG1hdGhNYXgobWluLCBtYXRoTWluKHZhbHVlLCBtYXgpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW5NYXhDbGFtcChtaW4sIHZhbHVlLCBtYXgpIHtcbiAgdmFyIHYgPSB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KTtcbiAgcmV0dXJuIHYgPiBtYXggPyBtYXggOiB2O1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRGcmVzaFNpZGVPYmplY3QoKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwXG4gIH07XG59IiwgImltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4vZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZVBhZGRpbmdPYmplY3QocGFkZGluZ09iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ2V0RnJlc2hTaWRlT2JqZWN0KCksIHBhZGRpbmdPYmplY3QpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHBhbmRUb0hhc2hNYXAodmFsdWUsIGtleXMpIHtcbiAgcmV0dXJuIGtleXMucmVkdWNlKGZ1bmN0aW9uIChoYXNoTWFwLCBrZXkpIHtcbiAgICBoYXNoTWFwW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gaGFzaE1hcDtcbiAgfSwge30pO1xufSIsICJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4uL2RvbS11dGlscy9jb250YWlucy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB3aXRoaW4gfSBmcm9tIFwiLi4vdXRpbHMvd2l0aGluLmpzXCI7XG5pbXBvcnQgbWVyZ2VQYWRkaW5nT2JqZWN0IGZyb20gXCIuLi91dGlscy9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4uL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qc1wiO1xuaW1wb3J0IHsgbGVmdCwgcmlnaHQsIGJhc2VQbGFjZW1lbnRzLCB0b3AsIGJvdHRvbSB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciB0b1BhZGRpbmdPYmplY3QgPSBmdW5jdGlvbiB0b1BhZGRpbmdPYmplY3QocGFkZGluZywgc3RhdGUpIHtcbiAgcGFkZGluZyA9IHR5cGVvZiBwYWRkaW5nID09PSAnZnVuY3Rpb24nID8gcGFkZGluZyhPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZWN0cywge1xuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pKSA6IHBhZGRpbmc7XG4gIHJldHVybiBtZXJnZVBhZGRpbmdPYmplY3QodHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gcGFkZGluZyA6IGV4cGFuZFRvSGFzaE1hcChwYWRkaW5nLCBiYXNlUGxhY2VtZW50cykpO1xufTtcblxuZnVuY3Rpb24gYXJyb3coX3JlZikge1xuICB2YXIgX3N0YXRlJG1vZGlmaWVyc0RhdGEkO1xuXG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucztcbiAgdmFyIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cztcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBheGlzID0gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpO1xuICB2YXIgaXNWZXJ0aWNhbCA9IFtsZWZ0LCByaWdodF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwO1xuICB2YXIgbGVuID0gaXNWZXJ0aWNhbCA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICBpZiAoIWFycm93RWxlbWVudCB8fCAhcG9wcGVyT2Zmc2V0cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gdG9QYWRkaW5nT2JqZWN0KG9wdGlvbnMucGFkZGluZywgc3RhdGUpO1xuICB2YXIgYXJyb3dSZWN0ID0gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpO1xuICB2YXIgbWluUHJvcCA9IGF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gIHZhciBtYXhQcm9wID0gYXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gIHZhciBlbmREaWZmID0gc3RhdGUucmVjdHMucmVmZXJlbmNlW2xlbl0gKyBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBwb3BwZXJPZmZzZXRzW2F4aXNdIC0gc3RhdGUucmVjdHMucG9wcGVyW2xlbl07XG4gIHZhciBzdGFydERpZmYgPSBwb3BwZXJPZmZzZXRzW2F4aXNdIC0gc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdO1xuICB2YXIgYXJyb3dPZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQoYXJyb3dFbGVtZW50KTtcbiAgdmFyIGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudEhlaWdodCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50V2lkdGggfHwgMCA6IDA7XG4gIHZhciBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjsgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBwb3BwZXIgaWYgdGhlIGNlbnRlciBwb2ludCBpc1xuICAvLyBvdXRzaWRlIG9mIHRoZSBwb3BwZXIgYm91bmRzXG5cbiAgdmFyIG1pbiA9IHBhZGRpbmdPYmplY3RbbWluUHJvcF07XG4gIHZhciBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dSZWN0W2xlbl0gLSBwYWRkaW5nT2JqZWN0W21heFByb3BdO1xuICB2YXIgY2VudGVyID0gY2xpZW50U2l6ZSAvIDIgLSBhcnJvd1JlY3RbbGVuXSAvIDIgKyBjZW50ZXJUb1JlZmVyZW5jZTtcbiAgdmFyIG9mZnNldCA9IHdpdGhpbihtaW4sIGNlbnRlciwgbWF4KTsgLy8gUHJldmVudHMgYnJlYWtpbmcgc3ludGF4IGhpZ2hsaWdodGluZy4uLlxuXG4gIHZhciBheGlzUHJvcCA9IGF4aXM7XG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSAoX3N0YXRlJG1vZGlmaWVyc0RhdGEkID0ge30sIF9zdGF0ZSRtb2RpZmllcnNEYXRhJFtheGlzUHJvcF0gPSBvZmZzZXQsIF9zdGF0ZSRtb2RpZmllcnNEYXRhJC5jZW50ZXJPZmZzZXQgPSBvZmZzZXQgLSBjZW50ZXIsIF9zdGF0ZSRtb2RpZmllcnNEYXRhJCk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZWxlbWVudCA9IG9wdGlvbnMuZWxlbWVudCxcbiAgICAgIGFycm93RWxlbWVudCA9IF9vcHRpb25zJGVsZW1lbnQgPT09IHZvaWQgMCA/ICdbZGF0YS1wb3BwZXItYXJyb3ddJyA6IF9vcHRpb25zJGVsZW1lbnQ7XG5cbiAgaWYgKGFycm93RWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIENTUyBzZWxlY3RvclxuXG5cbiAgaWYgKHR5cGVvZiBhcnJvd0VsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMucG9wcGVyLnF1ZXJ5U2VsZWN0b3IoYXJyb3dFbGVtZW50KTtcblxuICAgIGlmICghYXJyb3dFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKCFjb250YWlucyhzdGF0ZS5lbGVtZW50cy5wb3BwZXIsIGFycm93RWxlbWVudCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0ZS5lbGVtZW50cy5hcnJvdyA9IGFycm93RWxlbWVudDtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2Fycm93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IGFycm93LFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddXG59OyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn0iLCAiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciB1bnNldFNpZGVzID0ge1xuICB0b3A6ICdhdXRvJyxcbiAgcmlnaHQ6ICdhdXRvJyxcbiAgYm90dG9tOiAnYXV0bycsXG4gIGxlZnQ6ICdhdXRvJ1xufTsgLy8gUm91bmQgdGhlIG9mZnNldHMgdG8gdGhlIG5lYXJlc3Qgc3VpdGFibGUgc3VicGl4ZWwgYmFzZWQgb24gdGhlIERQUi5cbi8vIFpvb21pbmcgY2FuIGNoYW5nZSB0aGUgRFBSLCBidXQgaXQgc2VlbXMgdG8gcmVwb3J0IGEgdmFsdWUgdGhhdCB3aWxsXG4vLyBjbGVhbmx5IGRpdmlkZSB0aGUgdmFsdWVzIGludG8gdGhlIGFwcHJvcHJpYXRlIHN1YnBpeGVscy5cblxuZnVuY3Rpb24gcm91bmRPZmZzZXRzQnlEUFIoX3JlZiwgd2luKSB7XG4gIHZhciB4ID0gX3JlZi54LFxuICAgICAgeSA9IF9yZWYueTtcbiAgdmFyIGRwciA9IHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIHJldHVybiB7XG4gICAgeDogcm91bmQoeCAqIGRwcikgLyBkcHIgfHwgMCxcbiAgICB5OiByb3VuZCh5ICogZHByKSAvIGRwciB8fCAwXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb1N0eWxlcyhfcmVmMikge1xuICB2YXIgX09iamVjdCRhc3NpZ24yO1xuXG4gIHZhciBwb3BwZXIgPSBfcmVmMi5wb3BwZXIsXG4gICAgICBwb3BwZXJSZWN0ID0gX3JlZjIucG9wcGVyUmVjdCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYyLnBsYWNlbWVudCxcbiAgICAgIHZhcmlhdGlvbiA9IF9yZWYyLnZhcmlhdGlvbixcbiAgICAgIG9mZnNldHMgPSBfcmVmMi5vZmZzZXRzLFxuICAgICAgcG9zaXRpb24gPSBfcmVmMi5wb3NpdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9yZWYyLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGFkYXB0aXZlID0gX3JlZjIuYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHMgPSBfcmVmMi5yb3VuZE9mZnNldHMsXG4gICAgICBpc0ZpeGVkID0gX3JlZjIuaXNGaXhlZDtcbiAgdmFyIF9vZmZzZXRzJHggPSBvZmZzZXRzLngsXG4gICAgICB4ID0gX29mZnNldHMkeCA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHgsXG4gICAgICBfb2Zmc2V0cyR5ID0gb2Zmc2V0cy55LFxuICAgICAgeSA9IF9vZmZzZXRzJHkgPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR5O1xuXG4gIHZhciBfcmVmMyA9IHR5cGVvZiByb3VuZE9mZnNldHMgPT09ICdmdW5jdGlvbicgPyByb3VuZE9mZnNldHMoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9KSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjMueDtcbiAgeSA9IF9yZWYzLnk7XG4gIHZhciBoYXNYID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneCcpO1xuICB2YXIgaGFzWSA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3knKTtcbiAgdmFyIHNpZGVYID0gbGVmdDtcbiAgdmFyIHNpZGVZID0gdG9wO1xuICB2YXIgd2luID0gd2luZG93O1xuXG4gIGlmIChhZGFwdGl2ZSkge1xuICAgIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKTtcbiAgICB2YXIgaGVpZ2h0UHJvcCA9ICdjbGllbnRIZWlnaHQnO1xuICAgIHZhciB3aWR0aFByb3AgPSAnY2xpZW50V2lkdGgnO1xuXG4gICAgaWYgKG9mZnNldFBhcmVudCA9PT0gZ2V0V2luZG93KHBvcHBlcikpIHtcbiAgICAgIG9mZnNldFBhcmVudCA9IGdldERvY3VtZW50RWxlbWVudChwb3BwZXIpO1xuXG4gICAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uICE9PSAnc3RhdGljJyAmJiBwb3NpdGlvbiA9PT0gJ2Fic29sdXRlJykge1xuICAgICAgICBoZWlnaHRQcm9wID0gJ3Njcm9sbEhlaWdodCc7XG4gICAgICAgIHdpZHRoUHJvcCA9ICdzY3JvbGxXaWR0aCc7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYXN0XTogZm9yY2UgdHlwZSByZWZpbmVtZW50LCB3ZSBjb21wYXJlIG9mZnNldFBhcmVudCB3aXRoIHdpbmRvdyBhYm92ZSwgYnV0IEZsb3cgZG9lc24ndCBkZXRlY3QgaXRcblxuXG4gICAgb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50O1xuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gdG9wIHx8IChwbGFjZW1lbnQgPT09IGxlZnQgfHwgcGxhY2VtZW50ID09PSByaWdodCkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVZID0gYm90dG9tO1xuICAgICAgdmFyIG9mZnNldFkgPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC5oZWlnaHQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFtoZWlnaHRQcm9wXTtcbiAgICAgIHkgLT0gb2Zmc2V0WSAtIHBvcHBlclJlY3QuaGVpZ2h0O1xuICAgICAgeSAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCAocGxhY2VtZW50ID09PSB0b3AgfHwgcGxhY2VtZW50ID09PSBib3R0b20pICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWCA9IHJpZ2h0O1xuICAgICAgdmFyIG9mZnNldFggPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC53aWR0aCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W3dpZHRoUHJvcF07XG4gICAgICB4IC09IG9mZnNldFggLSBwb3BwZXJSZWN0LndpZHRoO1xuICAgICAgeCAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbW1vblN0eWxlcyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICB9LCBhZGFwdGl2ZSAmJiB1bnNldFNpZGVzKTtcblxuICB2YXIgX3JlZjQgPSByb3VuZE9mZnNldHMgPT09IHRydWUgPyByb3VuZE9mZnNldHNCeURQUih7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0sIGdldFdpbmRvdyhwb3BwZXIpKSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjQueDtcbiAgeSA9IF9yZWY0Lnk7XG5cbiAgaWYgKGdwdUFjY2VsZXJhdGlvbikge1xuICAgIHZhciBfT2JqZWN0JGFzc2lnbjtcblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbiA9IHt9LCBfT2JqZWN0JGFzc2lnbltzaWRlWV0gPSBoYXNZID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduW3NpZGVYXSA9IGhhc1ggPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ24udHJhbnNmb3JtID0gKHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIDw9IDEgPyBcInRyYW5zbGF0ZShcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4KVwiIDogXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4LCAwKVwiLCBfT2JqZWN0JGFzc2lnbikpO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduMiA9IHt9LCBfT2JqZWN0JGFzc2lnbjJbc2lkZVldID0gaGFzWSA/IHkgKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yW3NpZGVYXSA9IGhhc1ggPyB4ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMi50cmFuc2Zvcm0gPSAnJywgX09iamVjdCRhc3NpZ24yKSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTdHlsZXMoX3JlZjUpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjUuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjUub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9IG9wdGlvbnMuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkZ3B1QWNjZWxlcmF0LFxuICAgICAgX29wdGlvbnMkYWRhcHRpdmUgPSBvcHRpb25zLmFkYXB0aXZlLFxuICAgICAgYWRhcHRpdmUgPSBfb3B0aW9ucyRhZGFwdGl2ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFkYXB0aXZlLFxuICAgICAgX29wdGlvbnMkcm91bmRPZmZzZXRzID0gb3B0aW9ucy5yb3VuZE9mZnNldHMsXG4gICAgICByb3VuZE9mZnNldHMgPSBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyb3VuZE9mZnNldHM7XG4gIHZhciBjb21tb25TdHlsZXMgPSB7XG4gICAgcGxhY2VtZW50OiBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCksXG4gICAgdmFyaWF0aW9uOiBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KSxcbiAgICBwb3BwZXI6IHN0YXRlLmVsZW1lbnRzLnBvcHBlcixcbiAgICBwb3BwZXJSZWN0OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgZ3B1QWNjZWxlcmF0aW9uOiBncHVBY2NlbGVyYXRpb24sXG4gICAgaXNGaXhlZDogc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJ1xuICB9O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMucG9wcGVyLCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgYWRhcHRpdmU6IGFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3cgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5hcnJvdyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5hcnJvdywgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93LFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBhZGFwdGl2ZTogZmFsc2UsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXBsYWNlbWVudCc6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2NvbXB1dGVTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ2JlZm9yZVdyaXRlJyxcbiAgZm46IGNvbXB1dGVTdHlsZXMsXG4gIGRhdGE6IHt9XG59OyIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0V2luZG93LmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHBhc3NpdmUgPSB7XG4gIHBhc3NpdmU6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBpbnN0YW5jZSA9IF9yZWYuaW5zdGFuY2UsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkc2Nyb2xsID0gb3B0aW9ucy5zY3JvbGwsXG4gICAgICBzY3JvbGwgPSBfb3B0aW9ucyRzY3JvbGwgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRzY3JvbGwsXG4gICAgICBfb3B0aW9ucyRyZXNpemUgPSBvcHRpb25zLnJlc2l6ZSxcbiAgICAgIHJlc2l6ZSA9IF9vcHRpb25zJHJlc2l6ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJlc2l6ZTtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhzdGF0ZS5lbGVtZW50cy5wb3BwZXIpO1xuICB2YXIgc2Nyb2xsUGFyZW50cyA9IFtdLmNvbmNhdChzdGF0ZS5zY3JvbGxQYXJlbnRzLnJlZmVyZW5jZSwgc3RhdGUuc2Nyb2xsUGFyZW50cy5wb3BwZXIpO1xuXG4gIGlmIChzY3JvbGwpIHtcbiAgICBzY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHNjcm9sbFBhcmVudCkge1xuICAgICAgc2Nyb2xsUGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAocmVzaXplKSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChzY3JvbGwpIHtcbiAgICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICAgIHNjcm9sbFBhcmVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc2l6ZSkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgfVxuICB9O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZXZlbnRMaXN0ZW5lcnMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3dyaXRlJyxcbiAgZm46IGZ1bmN0aW9uIGZuKCkge30sXG4gIGVmZmVjdDogZWZmZWN0LFxuICBkYXRhOiB7fVxufTsiLCAidmFyIGhhc2ggPSB7XG4gIGxlZnQ6ICdyaWdodCcsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIHRvcDogJ2JvdHRvbSdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59IiwgInZhciBoYXNoID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbChub2RlKSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3cobm9kZSk7XG4gIHZhciBzY3JvbGxMZWZ0ID0gd2luLnBhZ2VYT2Zmc2V0O1xuICB2YXIgc2Nyb2xsVG9wID0gd2luLnBhZ2VZT2Zmc2V0O1xuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBzY3JvbGxUb3BcbiAgfTtcbn0iLCAiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSB7XG4gIC8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbiAgLy8gaW5jb3JyZWN0IGZvciBSVEwuXG4gIC8vIFBvcHBlciAxIGlzIGJyb2tlbiBpbiB0aGlzIGNhc2UgYW5kIG5ldmVyIGhhZCBhIGJ1ZyByZXBvcnQgc28gbGV0J3MgYXNzdW1lXG4gIC8vIGl0J3Mgbm90IGFuIGlzc3VlLiBJIGRvbid0IHRoaW5rIGFueW9uZSBldmVyIHNwZWNpZmllcyB3aWR0aCBvbiA8aHRtbD5cbiAgLy8gYW55d2F5LlxuICAvLyBCcm93c2VycyB3aGVyZSB0aGUgbGVmdCBzY3JvbGxiYXIgZG9lc24ndCBjYXVzZSBhbiBpc3N1ZSByZXBvcnQgYDBgIGZvclxuICAvLyB0aGlzIChlLmcuIEVkZ2UgMjAxOSwgSUUxMSwgU2FmYXJpKVxuICByZXR1cm4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkubGVmdCArIGdldFdpbmRvd1Njcm9sbChlbGVtZW50KS5zY3JvbGxMZWZ0O1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBpc0xheW91dFZpZXdwb3J0IGZyb20gXCIuL2lzTGF5b3V0Vmlld3BvcnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuICB2YXIgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwO1xuXG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIHZhciBsYXlvdXRWaWV3cG9ydCA9IGlzTGF5b3V0Vmlld3BvcnQoKTtcblxuICAgIGlmIChsYXlvdXRWaWV3cG9ydCB8fCAhbGF5b3V0Vmlld3BvcnQgJiYgc3RyYXRlZ3kgPT09ICdmaXhlZCcpIHtcbiAgICAgIHggPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0O1xuICAgICAgeSA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSxcbiAgICB5OiB5XG4gIH07XG59IiwgImltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IHsgbWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjsgLy8gR2V0cyB0aGUgZW50aXJlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgZG9jdW1lbnQgYXJlYSwgZXZlbiBleHRlbmRpbmcgb3V0c2lkZVxuLy8gb2YgdGhlIGA8aHRtbD5gIGFuZCBgPGJvZHk+YCByZWN0IGJvdW5kcyBpZiBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudFJlY3QoZWxlbWVudCkge1xuICB2YXIgX2VsZW1lbnQkb3duZXJEb2N1bWVuO1xuXG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgd2luU2Nyb2xsID0gZ2V0V2luZG93U2Nyb2xsKGVsZW1lbnQpO1xuICB2YXIgYm9keSA9IChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keTtcbiAgdmFyIHdpZHRoID0gbWF4KGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LnNjcm9sbFdpZHRoIDogMCwgYm9keSA/IGJvZHkuY2xpZW50V2lkdGggOiAwKTtcbiAgdmFyIGhlaWdodCA9IG1heChodG1sLnNjcm9sbEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGJvZHkgPyBib2R5LnNjcm9sbEhlaWdodCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudEhlaWdodCA6IDApO1xuICB2YXIgeCA9IC13aW5TY3JvbGwuc2Nyb2xsTGVmdCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCk7XG4gIHZhciB5ID0gLXdpblNjcm9sbC5zY3JvbGxUb3A7XG5cbiAgaWYgKGdldENvbXB1dGVkU3R5bGUoYm9keSB8fCBodG1sKS5kaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgeCArPSBtYXgoaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuY2xpZW50V2lkdGggOiAwKSAtIHdpZHRoO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG59IiwgImltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzU2Nyb2xsUGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gRmlyZWZveCB3YW50cyB1cyB0byBjaGVjayBgLXhgIGFuZCBgLXlgIHZhcmlhdGlvbnMgYXMgd2VsbFxuICB2YXIgX2dldENvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLFxuICAgICAgb3ZlcmZsb3cgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvdyxcbiAgICAgIG92ZXJmbG93WCA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93WCxcbiAgICAgIG92ZXJmbG93WSA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93WTtcblxuICByZXR1cm4gL2F1dG98c2Nyb2xsfG92ZXJsYXl8aGlkZGVuLy50ZXN0KG92ZXJmbG93ICsgb3ZlcmZsb3dZICsgb3ZlcmZsb3dYKTtcbn0iLCAiaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRTY3JvbGxQYXJlbnQobm9kZSkge1xuICBpZiAoWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5kZXhPZihnZXROb2RlTmFtZShub2RlKSkgPj0gMCkge1xuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgICByZXR1cm4gbm9kZS5vd25lckRvY3VtZW50LmJvZHk7XG4gIH1cblxuICBpZiAoaXNIVE1MRWxlbWVudChub2RlKSAmJiBpc1Njcm9sbFBhcmVudChub2RlKSkge1xuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIGdldFNjcm9sbFBhcmVudChnZXRQYXJlbnROb2RlKG5vZGUpKTtcbn0iLCAiaW1wb3J0IGdldFNjcm9sbFBhcmVudCBmcm9tIFwiLi9nZXRTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbi8qXG5naXZlbiBhIERPTSBlbGVtZW50LCByZXR1cm4gdGhlIGxpc3Qgb2YgYWxsIHNjcm9sbCBwYXJlbnRzLCB1cCB0aGUgbGlzdCBvZiBhbmNlc29yc1xudW50aWwgd2UgZ2V0IHRvIHRoZSB0b3Agd2luZG93IG9iamVjdC4gVGhpcyBsaXN0IGlzIHdoYXQgd2UgYXR0YWNoIHNjcm9sbCBsaXN0ZW5lcnNcbnRvLCBiZWNhdXNlIGlmIGFueSBvZiB0aGVzZSBwYXJlbnQgZWxlbWVudHMgc2Nyb2xsLCB3ZSdsbCBuZWVkIHRvIHJlLWNhbGN1bGF0ZSB0aGVcbnJlZmVyZW5jZSBlbGVtZW50J3MgcG9zaXRpb24uXG4qL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaXN0U2Nyb2xsUGFyZW50cyhlbGVtZW50LCBsaXN0KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuXG4gIHZhciBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQoZWxlbWVudCk7XG4gIHZhciBpc0JvZHkgPSBzY3JvbGxQYXJlbnQgPT09ICgoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHkpO1xuICB2YXIgd2luID0gZ2V0V2luZG93KHNjcm9sbFBhcmVudCk7XG4gIHZhciB0YXJnZXQgPSBpc0JvZHkgPyBbd2luXS5jb25jYXQod2luLnZpc3VhbFZpZXdwb3J0IHx8IFtdLCBpc1Njcm9sbFBhcmVudChzY3JvbGxQYXJlbnQpID8gc2Nyb2xsUGFyZW50IDogW10pIDogc2Nyb2xsUGFyZW50O1xuICB2YXIgdXBkYXRlZExpc3QgPSBsaXN0LmNvbmNhdCh0YXJnZXQpO1xuICByZXR1cm4gaXNCb2R5ID8gdXBkYXRlZExpc3QgOiAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogaXNCb2R5IHRlbGxzIHVzIHRhcmdldCB3aWxsIGJlIGFuIEhUTUxFbGVtZW50IGhlcmVcbiAgdXBkYXRlZExpc3QuY29uY2F0KGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUodGFyZ2V0KSkpO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWN0VG9DbGllbnRSZWN0KHJlY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHJlY3QsIHtcbiAgICBsZWZ0OiByZWN0LngsXG4gICAgdG9wOiByZWN0LnksXG4gICAgcmlnaHQ6IHJlY3QueCArIHJlY3Qud2lkdGgsXG4gICAgYm90dG9tOiByZWN0LnkgKyByZWN0LmhlaWdodFxuICB9KTtcbn0iLCAiaW1wb3J0IHsgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWaWV3cG9ydFJlY3QgZnJvbSBcIi4vZ2V0Vmlld3BvcnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRSZWN0IGZyb20gXCIuL2dldERvY3VtZW50UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4vY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4uL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IG1heCwgbWluIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgZmFsc2UsIHN0cmF0ZWd5ID09PSAnZml4ZWQnKTtcbiAgcmVjdC50b3AgPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICByZWN0LmxlZnQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudExlZnQ7XG4gIHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC5yaWdodCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3Qud2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LmhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnggPSByZWN0LmxlZnQ7XG4gIHJlY3QueSA9IHJlY3QudG9wO1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSB7XG4gIHJldHVybiBjbGlwcGluZ1BhcmVudCA9PT0gdmlld3BvcnQgPyByZWN0VG9DbGllbnRSZWN0KGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkpIDogaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSA/IGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkgOiByZWN0VG9DbGllbnRSZWN0KGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpKTtcbn0gLy8gQSBcImNsaXBwaW5nIHBhcmVudFwiIGlzIGFuIG92ZXJmbG93YWJsZSBjb250YWluZXIgd2l0aCB0aGUgY2hhcmFjdGVyaXN0aWMgb2Zcbi8vIGNsaXBwaW5nIChvciBoaWRpbmcpIG92ZXJmbG93aW5nIGVsZW1lbnRzIHdpdGggYSBwb3NpdGlvbiBkaWZmZXJlbnQgZnJvbVxuLy8gYGluaXRpYWxgXG5cblxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIHtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUoZWxlbWVudCkpO1xuICB2YXIgY2FuRXNjYXBlQ2xpcHBpbmcgPSBbJ2Fic29sdXRlJywgJ2ZpeGVkJ10uaW5kZXhPZihnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uKSA+PSAwO1xuICB2YXIgY2xpcHBlckVsZW1lbnQgPSBjYW5Fc2NhcGVDbGlwcGluZyAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIDogZWxlbWVudDtcblxuICBpZiAoIWlzRWxlbWVudChjbGlwcGVyRWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzE0MTRcblxuXG4gIHJldHVybiBjbGlwcGluZ1BhcmVudHMuZmlsdGVyKGZ1bmN0aW9uIChjbGlwcGluZ1BhcmVudCkge1xuICAgIHJldHVybiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpICYmIGNvbnRhaW5zKGNsaXBwaW5nUGFyZW50LCBjbGlwcGVyRWxlbWVudCkgJiYgZ2V0Tm9kZU5hbWUoY2xpcHBpbmdQYXJlbnQpICE9PSAnYm9keSc7XG4gIH0pO1xufSAvLyBHZXRzIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIGR1ZSB0byBhbnkgbnVtYmVyIG9mXG4vLyBjbGlwcGluZyBwYXJlbnRzXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KGVsZW1lbnQsIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KSB7XG4gIHZhciBtYWluQ2xpcHBpbmdQYXJlbnRzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ1BhcmVudHMnID8gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IFtdLmNvbmNhdChtYWluQ2xpcHBpbmdQYXJlbnRzLCBbcm9vdEJvdW5kYXJ5XSk7XG4gIHZhciBmaXJzdENsaXBwaW5nUGFyZW50ID0gY2xpcHBpbmdQYXJlbnRzWzBdO1xuICB2YXIgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdQYXJlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjUmVjdCwgY2xpcHBpbmdQYXJlbnQpIHtcbiAgICB2YXIgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgZmlyc3RDbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpKTtcbiAgY2xpcHBpbmdSZWN0LndpZHRoID0gY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC5oZWlnaHQgPSBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgY2xpcHBpbmdSZWN0LnggPSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LnkgPSBjbGlwcGluZ1JlY3QudG9wO1xuICByZXR1cm4gY2xpcHBpbmdSZWN0O1xufSIsICJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCwgc3RhcnQsIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZU9mZnNldHMoX3JlZikge1xuICB2YXIgcmVmZXJlbmNlID0gX3JlZi5yZWZlcmVuY2UsXG4gICAgICBlbGVtZW50ID0gX3JlZi5lbGVtZW50LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZi5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gcGxhY2VtZW50ID8gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIDogbnVsbDtcbiAgdmFyIHZhcmlhdGlvbiA9IHBsYWNlbWVudCA/IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpIDogbnVsbDtcbiAgdmFyIGNvbW1vblggPSByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCAvIDIgLSBlbGVtZW50LndpZHRoIC8gMjtcbiAgdmFyIGNvbW1vblkgPSByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHQgLyAyIC0gZWxlbWVudC5oZWlnaHQgLyAyO1xuICB2YXIgb2Zmc2V0cztcblxuICBzd2l0Y2ggKGJhc2VQbGFjZW1lbnQpIHtcbiAgICBjYXNlIHRvcDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55IC0gZWxlbWVudC5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgYm90dG9tOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIHJpZ2h0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgbGVmdDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54IC0gZWxlbWVudC53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54LFxuICAgICAgICB5OiByZWZlcmVuY2UueVxuICAgICAgfTtcbiAgfVxuXG4gIHZhciBtYWluQXhpcyA9IGJhc2VQbGFjZW1lbnQgPyBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCkgOiBudWxsO1xuXG4gIGlmIChtYWluQXhpcyAhPSBudWxsKSB7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgICBzd2l0Y2ggKHZhcmlhdGlvbikge1xuICAgICAgY2FzZSBzdGFydDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSAtIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgZW5kOlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdICsgKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0cztcbn0iLCAiaW1wb3J0IGdldENsaXBwaW5nUmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldENsaXBwaW5nUmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuL2NvbXB1dGVPZmZzZXRzLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi9yZWN0VG9DbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgeyBjbGlwcGluZ1BhcmVudHMsIHJlZmVyZW5jZSwgcG9wcGVyLCBib3R0b20sIHRvcCwgcmlnaHQsIGJhc2VQbGFjZW1lbnRzLCB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgbWVyZ2VQYWRkaW5nT2JqZWN0IGZyb20gXCIuL21lcmdlUGFkZGluZ09iamVjdC5qc1wiO1xuaW1wb3J0IGV4cGFuZFRvSGFzaE1hcCBmcm9tIFwiLi9leHBhbmRUb0hhc2hNYXAuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIF9vcHRpb25zJHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zJHBsYWNlbWVudCA9PT0gdm9pZCAwID8gc3RhdGUucGxhY2VtZW50IDogX29wdGlvbnMkcGxhY2VtZW50LFxuICAgICAgX29wdGlvbnMkc3RyYXRlZ3kgPSBfb3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIHN0cmF0ZWd5ID0gX29wdGlvbnMkc3RyYXRlZ3kgPT09IHZvaWQgMCA/IHN0YXRlLnN0cmF0ZWd5IDogX29wdGlvbnMkc3RyYXRlZ3ksXG4gICAgICBfb3B0aW9ucyRib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgYm91bmRhcnkgPSBfb3B0aW9ucyRib3VuZGFyeSA9PT0gdm9pZCAwID8gY2xpcHBpbmdQYXJlbnRzIDogX29wdGlvbnMkYm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRyb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucyRyb290Qm91bmRhcnkgPT09IHZvaWQgMCA/IHZpZXdwb3J0IDogX29wdGlvbnMkcm9vdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkZWxlbWVudENvbnRlID0gX29wdGlvbnMuZWxlbWVudENvbnRleHQsXG4gICAgICBlbGVtZW50Q29udGV4dCA9IF9vcHRpb25zJGVsZW1lbnRDb250ZSA9PT0gdm9pZCAwID8gcG9wcGVyIDogX29wdGlvbnMkZWxlbWVudENvbnRlLFxuICAgICAgX29wdGlvbnMkYWx0Qm91bmRhcnkgPSBfb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMkYWx0Qm91bmRhcnkgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIHBhZGRpbmcgPSBfb3B0aW9ucyRwYWRkaW5nID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkcGFkZGluZztcbiAgdmFyIHBhZGRpbmdPYmplY3QgPSBtZXJnZVBhZGRpbmdPYmplY3QodHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gcGFkZGluZyA6IGV4cGFuZFRvSGFzaE1hcChwYWRkaW5nLCBiYXNlUGxhY2VtZW50cykpO1xuICB2YXIgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyByZWZlcmVuY2UgOiBwb3BwZXI7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW2FsdEJvdW5kYXJ5ID8gYWx0Q29udGV4dCA6IGVsZW1lbnRDb250ZXh0XTtcbiAgdmFyIGNsaXBwaW5nQ2xpZW50UmVjdCA9IGdldENsaXBwaW5nUmVjdChpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50IDogZWxlbWVudC5jb250ZXh0RWxlbWVudCB8fCBnZXREb2N1bWVudEVsZW1lbnQoc3RhdGUuZWxlbWVudHMucG9wcGVyKSwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSwgc3RyYXRlZ3kpO1xuICB2YXIgcmVmZXJlbmNlQ2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChzdGF0ZS5lbGVtZW50cy5yZWZlcmVuY2UpO1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHJlZmVyZW5jZUNsaWVudFJlY3QsXG4gICAgZWxlbWVudDogcG9wcGVyUmVjdCxcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KTtcbiAgdmFyIHBvcHBlckNsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KE9iamVjdC5hc3NpZ24oe30sIHBvcHBlclJlY3QsIHBvcHBlck9mZnNldHMpKTtcbiAgdmFyIGVsZW1lbnRDbGllbnRSZWN0ID0gZWxlbWVudENvbnRleHQgPT09IHBvcHBlciA/IHBvcHBlckNsaWVudFJlY3QgOiByZWZlcmVuY2VDbGllbnRSZWN0OyAvLyBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyByZWN0XG4gIC8vIDAgb3IgbmVnYXRpdmUgPSB3aXRoaW4gdGhlIGNsaXBwaW5nIHJlY3RcblxuICB2YXIgb3ZlcmZsb3dPZmZzZXRzID0ge1xuICAgIHRvcDogY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wLFxuICAgIGJvdHRvbTogZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tLFxuICAgIGxlZnQ6IGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCxcbiAgICByaWdodDogZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0XG4gIH07XG4gIHZhciBvZmZzZXREYXRhID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQ7IC8vIE9mZnNldHMgY2FuIGJlIGFwcGxpZWQgb25seSB0byB0aGUgcG9wcGVyIGVsZW1lbnRcblxuICBpZiAoZWxlbWVudENvbnRleHQgPT09IHBvcHBlciAmJiBvZmZzZXREYXRhKSB7XG4gICAgdmFyIG9mZnNldCA9IG9mZnNldERhdGFbcGxhY2VtZW50XTtcbiAgICBPYmplY3Qua2V5cyhvdmVyZmxvd09mZnNldHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgdmFyIG11bHRpcGx5ID0gW3JpZ2h0LCBib3R0b21dLmluZGV4T2Yoa2V5KSA+PSAwID8gMSA6IC0xO1xuICAgICAgdmFyIGF4aXMgPSBbdG9wLCBib3R0b21dLmluZGV4T2Yoa2V5KSA+PSAwID8gJ3knIDogJ3gnO1xuICAgICAgb3ZlcmZsb3dPZmZzZXRzW2tleV0gKz0gb2Zmc2V0W2F4aXNdICogbXVsdGlwbHk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gb3ZlcmZsb3dPZmZzZXRzO1xufSIsICJpbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgdmFyaWF0aW9uUGxhY2VtZW50cywgYmFzZVBsYWNlbWVudHMsIHBsYWNlbWVudHMgYXMgYWxsUGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zID0gX29wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPSBfb3B0aW9ucy5hbGxvd2VkQXV0b1BsYWNlbWVudHMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPT09IHZvaWQgMCA/IGFsbFBsYWNlbWVudHMgOiBfb3B0aW9ucyRhbGxvd2VkQXV0b1A7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KTtcbiAgdmFyIHBsYWNlbWVudHMgPSB2YXJpYXRpb24gPyBmbGlwVmFyaWF0aW9ucyA/IHZhcmlhdGlvblBsYWNlbWVudHMgOiB2YXJpYXRpb25QbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSB2YXJpYXRpb247XG4gIH0pIDogYmFzZVBsYWNlbWVudHM7XG4gIHZhciBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWxsb3dlZEF1dG9QbGFjZW1lbnRzLmluZGV4T2YocGxhY2VtZW50KSA+PSAwO1xuICB9KTtcblxuICBpZiAoYWxsb3dlZFBsYWNlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzO1xuICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdOiBGbG93IHNlZW1zIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCB0d28gYXJyYXkgdW5pb25zLi4uXG5cblxuICB2YXIgb3ZlcmZsb3dzID0gYWxsb3dlZFBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSlbZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpXTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvdmVyZmxvd3MpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dzW2FdIC0gb3ZlcmZsb3dzW2JdO1xuICB9KTtcbn0iLCAiaW1wb3J0IGdldE9wcG9zaXRlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBjb21wdXRlQXV0b1BsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IGJvdHRvbSwgdG9wLCBzdGFydCwgcmlnaHQsIGxlZnQsIGF1dG8gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmZ1bmN0aW9uIGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHBsYWNlbWVudCkge1xuICBpZiAoZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpID09PSBhdXRvKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdmFyIG9wcG9zaXRlUGxhY2VtZW50ID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgcmV0dXJuIFtnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChwbGFjZW1lbnQpLCBvcHBvc2l0ZVBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQob3Bwb3NpdGVQbGFjZW1lbnQpXTtcbn1cblxuZnVuY3Rpb24gZmxpcChfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyRtYWluQXhpcyA9IG9wdGlvbnMubWFpbkF4aXMsXG4gICAgICBjaGVja01haW5BeGlzID0gX29wdGlvbnMkbWFpbkF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRtYWluQXhpcyxcbiAgICAgIF9vcHRpb25zJGFsdEF4aXMgPSBvcHRpb25zLmFsdEF4aXMsXG4gICAgICBjaGVja0FsdEF4aXMgPSBfb3B0aW9ucyRhbHRBeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWx0QXhpcyxcbiAgICAgIHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyA9IG9wdGlvbnMuZmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyxcbiAgICAgIGJvdW5kYXJ5ID0gb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IG9wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBvcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkZmxpcFZhcmlhdGlvID0gb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyxcbiAgICAgIGZsaXBWYXJpYXRpb25zID0gX29wdGlvbnMkZmxpcFZhcmlhdGlvID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkZmxpcFZhcmlhdGlvLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gb3B0aW9ucy5hbGxvd2VkQXV0b1BsYWNlbWVudHM7XG4gIHZhciBwcmVmZXJyZWRQbGFjZW1lbnQgPSBzdGF0ZS5vcHRpb25zLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHByZWZlcnJlZFBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSBiYXNlUGxhY2VtZW50ID09PSBwcmVmZXJyZWRQbGFjZW1lbnQ7XG4gIHZhciBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcFZhcmlhdGlvbnMgPyBbZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyhwcmVmZXJyZWRQbGFjZW1lbnQpKTtcbiAgdmFyIHBsYWNlbWVudHMgPSBbcHJlZmVycmVkUGxhY2VtZW50XS5jb25jYXQoZmFsbGJhY2tQbGFjZW1lbnRzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFjYy5jb25jYXQoZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpID09PSBhdXRvID8gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nLFxuICAgICAgZmxpcFZhcmlhdGlvbnM6IGZsaXBWYXJpYXRpb25zLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzOiBhbGxvd2VkQXV0b1BsYWNlbWVudHNcbiAgICB9KSA6IHBsYWNlbWVudCk7XG4gIH0sIFtdKTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgY2hlY2tzTWFwID0gbmV3IE1hcCgpO1xuICB2YXIgbWFrZUZhbGxiYWNrQ2hlY2tzID0gdHJ1ZTtcbiAgdmFyIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHNbMF07XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbGFjZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHBsYWNlbWVudCA9IHBsYWNlbWVudHNbaV07XG5cbiAgICB2YXIgX2Jhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG5cbiAgICB2YXIgaXNTdGFydFZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSBzdGFydDtcbiAgICB2YXIgaXNWZXJ0aWNhbCA9IFt0b3AsIGJvdHRvbV0uaW5kZXhPZihfYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgICB2YXIgbGVuID0gaXNWZXJ0aWNhbCA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICB2YXIgb3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5OiBhbHRCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmdcbiAgICB9KTtcbiAgICB2YXIgbWFpblZhcmlhdGlvblNpZGUgPSBpc1ZlcnRpY2FsID8gaXNTdGFydFZhcmlhdGlvbiA/IHJpZ2h0IDogbGVmdCA6IGlzU3RhcnRWYXJpYXRpb24gPyBib3R0b20gOiB0b3A7XG5cbiAgICBpZiAocmVmZXJlbmNlUmVjdFtsZW5dID4gcG9wcGVyUmVjdFtsZW5dKSB7XG4gICAgICBtYWluVmFyaWF0aW9uU2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5WYXJpYXRpb25TaWRlKTtcbiAgICB9XG5cbiAgICB2YXIgYWx0VmFyaWF0aW9uU2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5WYXJpYXRpb25TaWRlKTtcbiAgICB2YXIgY2hlY2tzID0gW107XG5cbiAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbX2Jhc2VQbGFjZW1lbnRdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKG92ZXJmbG93W21haW5WYXJpYXRpb25TaWRlXSA8PSAwLCBvdmVyZmxvd1thbHRWYXJpYXRpb25TaWRlXSA8PSAwKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tzLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgcmV0dXJuIGNoZWNrO1xuICAgIH0pKSB7XG4gICAgICBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICBtYWtlRmFsbGJhY2tDaGVja3MgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNoZWNrc01hcC5zZXQocGxhY2VtZW50LCBjaGVja3MpO1xuICB9XG5cbiAgaWYgKG1ha2VGYWxsYmFja0NoZWNrcykge1xuICAgIC8vIGAyYCBtYXkgYmUgZGVzaXJlZCBpbiBzb21lIGNhc2VzIFx1MjAxMyByZXNlYXJjaCBsYXRlclxuICAgIHZhciBudW1iZXJPZkNoZWNrcyA9IGZsaXBWYXJpYXRpb25zID8gMyA6IDE7XG5cbiAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChfaSkge1xuICAgICAgdmFyIGZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnRzLmZpbmQoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgICAgICB2YXIgY2hlY2tzID0gY2hlY2tzTWFwLmdldChwbGFjZW1lbnQpO1xuXG4gICAgICAgIGlmIChjaGVja3MpIHtcbiAgICAgICAgICByZXR1cm4gY2hlY2tzLnNsaWNlKDAsIF9pKS5ldmVyeShmdW5jdGlvbiAoY2hlY2spIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVjaztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChmaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IGZpdHRpbmdQbGFjZW1lbnQ7XG4gICAgICAgIHJldHVybiBcImJyZWFrXCI7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvciAodmFyIF9pID0gbnVtYmVyT2ZDaGVja3M7IF9pID4gMDsgX2ktLSkge1xuICAgICAgdmFyIF9yZXQgPSBfbG9vcChfaSk7XG5cbiAgICAgIGlmIChfcmV0ID09PSBcImJyZWFrXCIpIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0ZS5wbGFjZW1lbnQgIT09IGZpcnN0Rml0dGluZ1BsYWNlbWVudCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0uX3NraXAgPSB0cnVlO1xuICAgIHN0YXRlLnBsYWNlbWVudCA9IGZpcnN0Rml0dGluZ1BsYWNlbWVudDtcbiAgICBzdGF0ZS5yZXNldCA9IHRydWU7XG4gIH1cbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2ZsaXAnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogZmxpcCxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXSxcbiAgZGF0YToge1xuICAgIF9za2lwOiBmYWxzZVxuICB9XG59OyIsICJpbXBvcnQgeyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcblxuZnVuY3Rpb24gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3QsIHByZXZlbnRlZE9mZnNldHMpIHtcbiAgaWYgKHByZXZlbnRlZE9mZnNldHMgPT09IHZvaWQgMCkge1xuICAgIHByZXZlbnRlZE9mZnNldHMgPSB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQgLSBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCArIHByZXZlbnRlZE9mZnNldHMueCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0ICsgcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoIC0gcHJldmVudGVkT2Zmc2V0cy54XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xuICByZXR1cm4gW3RvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdF0uc29tZShmdW5jdGlvbiAoc2lkZSkge1xuICAgIHJldHVybiBvdmVyZmxvd1tzaWRlXSA+PSAwO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGlkZShfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBwcmV2ZW50ZWRPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wcmV2ZW50T3ZlcmZsb3c7XG4gIHZhciByZWZlcmVuY2VPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gIH0pO1xuICB2YXIgcG9wcGVyQWx0T3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGFsdEJvdW5kYXJ5OiB0cnVlXG4gIH0pO1xuICB2YXIgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocmVmZXJlbmNlT3ZlcmZsb3csIHJlZmVyZW5jZVJlY3QpO1xuICB2YXIgcG9wcGVyRXNjYXBlT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHBvcHBlckFsdE92ZXJmbG93LCBwb3BwZXJSZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKTtcbiAgdmFyIGlzUmVmZXJlbmNlSGlkZGVuID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyk7XG4gIHZhciBoYXNQb3BwZXJFc2NhcGVkID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHBvcHBlckVzY2FwZU9mZnNldHMpO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0ge1xuICAgIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0czogcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzLFxuICAgIHBvcHBlckVzY2FwZU9mZnNldHM6IHBvcHBlckVzY2FwZU9mZnNldHMsXG4gICAgaXNSZWZlcmVuY2VIaWRkZW46IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgIGhhc1BvcHBlckVzY2FwZWQ6IGhhc1BvcHBlckVzY2FwZWRcbiAgfTtcbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1yZWZlcmVuY2UtaGlkZGVuJzogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgJ2RhdGEtcG9wcGVyLWVzY2FwZWQnOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnaGlkZScsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J10sXG4gIGZuOiBoaWRlXG59OyIsICJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgcGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShwbGFjZW1lbnQsIHJlY3RzLCBvZmZzZXQpIHtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHZhciBpbnZlcnREaXN0YW5jZSA9IFtsZWZ0LCB0b3BdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IC0xIDogMTtcblxuICB2YXIgX3JlZiA9IHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicgPyBvZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgcmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KSkgOiBvZmZzZXQsXG4gICAgICBza2lkZGluZyA9IF9yZWZbMF0sXG4gICAgICBkaXN0YW5jZSA9IF9yZWZbMV07XG5cbiAgc2tpZGRpbmcgPSBza2lkZGluZyB8fCAwO1xuICBkaXN0YW5jZSA9IChkaXN0YW5jZSB8fCAwKSAqIGludmVydERpc3RhbmNlO1xuICByZXR1cm4gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyB7XG4gICAgeDogZGlzdGFuY2UsXG4gICAgeTogc2tpZGRpbmdcbiAgfSA6IHtcbiAgICB4OiBza2lkZGluZyxcbiAgICB5OiBkaXN0YW5jZVxuICB9O1xufVxuXG5mdW5jdGlvbiBvZmZzZXQoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmMi5uYW1lO1xuICB2YXIgX29wdGlvbnMkb2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQsXG4gICAgICBvZmZzZXQgPSBfb3B0aW9ucyRvZmZzZXQgPT09IHZvaWQgMCA/IFswLCAwXSA6IF9vcHRpb25zJG9mZnNldDtcbiAgdmFyIGRhdGEgPSBwbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgc3RhdGUucmVjdHMsIG9mZnNldCk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICB2YXIgX2RhdGEkc3RhdGUkcGxhY2VtZW50ID0gZGF0YVtzdGF0ZS5wbGFjZW1lbnRdLFxuICAgICAgeCA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC54LFxuICAgICAgeSA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC55O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy54ICs9IHg7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnkgKz0geTtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnb2Zmc2V0JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICBmbjogb2Zmc2V0XG59OyIsICJpbXBvcnQgY29tcHV0ZU9mZnNldHMgZnJvbSBcIi4uL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzXCI7XG5cbmZ1bmN0aW9uIHBvcHBlck9mZnNldHMoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgLy8gT2Zmc2V0cyBhcmUgdGhlIGFjdHVhbCBwb3NpdGlvbiB0aGUgcG9wcGVyIG5lZWRzIHRvIGhhdmUgdG8gYmVcbiAgLy8gcHJvcGVybHkgcG9zaXRpb25lZCBuZWFyIGl0cyByZWZlcmVuY2UgZWxlbWVudFxuICAvLyBUaGlzIGlzIHRoZSBtb3N0IGJhc2ljIHBsYWNlbWVudCwgYW5kIHdpbGwgYmUgYWRqdXN0ZWQgYnlcbiAgLy8gdGhlIG1vZGlmaWVycyBpbiB0aGUgbmV4dCBzdGVwXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiBzdGF0ZS5yZWN0cy5yZWZlcmVuY2UsXG4gICAgZWxlbWVudDogc3RhdGUucmVjdHMucG9wcGVyLFxuICAgIHN0cmF0ZWd5OiAnYWJzb2x1dGUnLFxuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncG9wcGVyT2Zmc2V0cycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAncmVhZCcsXG4gIGZuOiBwb3BwZXJPZmZzZXRzLFxuICBkYXRhOiB7fVxufTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QWx0QXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59IiwgImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgc3RhcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRBbHRBeGlzIGZyb20gXCIuLi91dGlscy9nZXRBbHRBeGlzLmpzXCI7XG5pbXBvcnQgeyB3aXRoaW4sIHdpdGhpbk1heENsYW1wIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4uL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuaW1wb3J0IHsgbWluIGFzIG1hdGhNaW4sIG1heCBhcyBtYXRoTWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgX29wdGlvbnMkdGV0aGVyID0gb3B0aW9ucy50ZXRoZXIsXG4gICAgICB0ZXRoZXIgPSBfb3B0aW9ucyR0ZXRoZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyR0ZXRoZXIsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPSBvcHRpb25zLnRldGhlck9mZnNldCxcbiAgICAgIHRldGhlck9mZnNldCA9IF9vcHRpb25zJHRldGhlck9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHRldGhlck9mZnNldDtcbiAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgcGFkZGluZzogcGFkZGluZyxcbiAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnlcbiAgfSk7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSAhdmFyaWF0aW9uO1xuICB2YXIgbWFpbkF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBhbHRBeGlzID0gZ2V0QWx0QXhpcyhtYWluQXhpcyk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciB0ZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXQgPT09ICdmdW5jdGlvbicgPyB0ZXRoZXJPZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiB0ZXRoZXJPZmZzZXQ7XG4gIHZhciBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZSxcbiAgICBhbHRBeGlzOiB0ZXRoZXJPZmZzZXRWYWx1ZVxuICB9IDogT2JqZWN0LmFzc2lnbih7XG4gICAgbWFpbkF4aXM6IDAsXG4gICAgYWx0QXhpczogMFxuICB9LCB0ZXRoZXJPZmZzZXRWYWx1ZSk7XG4gIHZhciBvZmZzZXRNb2RpZmllclN0YXRlID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQgPyBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldFtzdGF0ZS5wbGFjZW1lbnRdIDogbnVsbDtcbiAgdmFyIGRhdGEgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKCFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkO1xuXG4gICAgdmFyIG1haW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gICAgdmFyIGFsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gICAgdmFyIGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgdmFyIG9mZnNldCA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdO1xuICAgIHZhciBtaW4gPSBvZmZzZXQgKyBvdmVyZmxvd1ttYWluU2lkZV07XG4gICAgdmFyIG1heCA9IG9mZnNldCAtIG92ZXJmbG93W2FsdFNpZGVdO1xuICAgIHZhciBhZGRpdGl2ZSA9IHRldGhlciA/IC1wb3BwZXJSZWN0W2xlbl0gLyAyIDogMDtcbiAgICB2YXIgbWluTGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IHJlZmVyZW5jZVJlY3RbbGVuXSA6IHBvcHBlclJlY3RbbGVuXTtcbiAgICB2YXIgbWF4TGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IC1wb3BwZXJSZWN0W2xlbl0gOiAtcmVmZXJlbmNlUmVjdFtsZW5dOyAvLyBXZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGFycm93IGluIHRoZSBjYWxjdWxhdGlvbiBzbyB0aGUgYXJyb3cgZG9lc24ndCBnb1xuICAgIC8vIG91dHNpZGUgdGhlIHJlZmVyZW5jZSBib3VuZHNcblxuICAgIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgICB2YXIgYXJyb3dSZWN0ID0gdGV0aGVyICYmIGFycm93RWxlbWVudCA/IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nT2JqZWN0ID0gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddID8gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddLnBhZGRpbmcgOiBnZXRGcmVzaFNpZGVPYmplY3QoKTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWluID0gYXJyb3dQYWRkaW5nT2JqZWN0W21haW5TaWRlXTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWF4ID0gYXJyb3dQYWRkaW5nT2JqZWN0W2FsdFNpZGVdOyAvLyBJZiB0aGUgcmVmZXJlbmNlIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gdGhlIGFycm93IGxlbmd0aCwgd2UgZG9uJ3Qgd2FudFxuICAgIC8vIHRvIGluY2x1ZGUgaXRzIGZ1bGwgc2l6ZSBpbiB0aGUgY2FsY3VsYXRpb24uIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGxcbiAgICAvLyBhbmQgbmVhciB0aGUgZWRnZSBvZiBhIGJvdW5kYXJ5LCB0aGUgcG9wcGVyIGNhbiBvdmVyZmxvdyBldmVuIGlmIHRoZVxuICAgIC8vIHJlZmVyZW5jZSBpcyBub3Qgb3ZlcmZsb3dpbmcgYXMgd2VsbCAoZS5nLiB2aXJ0dWFsIGVsZW1lbnRzIHdpdGggbm9cbiAgICAvLyB3aWR0aCBvciBoZWlnaHQpXG5cbiAgICB2YXIgYXJyb3dMZW4gPSB3aXRoaW4oMCwgcmVmZXJlbmNlUmVjdFtsZW5dLCBhcnJvd1JlY3RbbGVuXSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IHJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgLSBhZGRpdGl2ZSAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWluTGVuIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIG1heE9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IC1yZWZlcmVuY2VSZWN0W2xlbl0gLyAyICsgYWRkaXRpdmUgKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1heExlbiArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBhcnJvd09mZnNldFBhcmVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93ICYmIGdldE9mZnNldFBhcmVudChzdGF0ZS5lbGVtZW50cy5hcnJvdyk7XG4gICAgdmFyIGNsaWVudE9mZnNldCA9IGFycm93T2Zmc2V0UGFyZW50ID8gbWFpbkF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFRvcCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50TGVmdCB8fCAwIDogMDtcbiAgICB2YXIgb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW21haW5BeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJCA6IDA7XG4gICAgdmFyIHRldGhlck1pbiA9IG9mZnNldCArIG1pbk9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWUgLSBjbGllbnRPZmZzZXQ7XG4gICAgdmFyIHRldGhlck1heCA9IG9mZnNldCArIG1heE9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWU7XG4gICAgdmFyIHByZXZlbnRlZE9mZnNldCA9IHdpdGhpbih0ZXRoZXIgPyBtYXRoTWluKG1pbiwgdGV0aGVyTWluKSA6IG1pbiwgb2Zmc2V0LCB0ZXRoZXIgPyBtYXRoTWF4KG1heCwgdGV0aGVyTWF4KSA6IG1heCk7XG4gICAgcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQgLSBvZmZzZXQ7XG4gIH1cblxuICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDI7XG5cbiAgICB2YXIgX21haW5TaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IHRvcCA6IGxlZnQ7XG5cbiAgICB2YXIgX2FsdFNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gYm90dG9tIDogcmlnaHQ7XG5cbiAgICB2YXIgX29mZnNldCA9IHBvcHBlck9mZnNldHNbYWx0QXhpc107XG5cbiAgICB2YXIgX2xlbiA9IGFsdEF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHZhciBfbWluID0gX29mZnNldCArIG92ZXJmbG93W19tYWluU2lkZV07XG5cbiAgICB2YXIgX21heCA9IF9vZmZzZXQgLSBvdmVyZmxvd1tfYWx0U2lkZV07XG5cbiAgICB2YXIgaXNPcmlnaW5TaWRlID0gW3RvcCwgbGVmdF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSAhPT0gLTE7XG5cbiAgICB2YXIgX29mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkMiA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbYWx0QXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyIDogMDtcblxuICAgIHZhciBfdGV0aGVyTWluID0gaXNPcmlnaW5TaWRlID8gX21pbiA6IF9vZmZzZXQgLSByZWZlcmVuY2VSZWN0W19sZW5dIC0gcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXM7XG5cbiAgICB2YXIgX3RldGhlck1heCA9IGlzT3JpZ2luU2lkZSA/IF9vZmZzZXQgKyByZWZlcmVuY2VSZWN0W19sZW5dICsgcG9wcGVyUmVjdFtfbGVuXSAtIF9vZmZzZXRNb2RpZmllclZhbHVlIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLmFsdEF4aXMgOiBfbWF4O1xuXG4gICAgdmFyIF9wcmV2ZW50ZWRPZmZzZXQgPSB0ZXRoZXIgJiYgaXNPcmlnaW5TaWRlID8gd2l0aGluTWF4Q2xhbXAoX3RldGhlck1pbiwgX29mZnNldCwgX3RldGhlck1heCkgOiB3aXRoaW4odGV0aGVyID8gX3RldGhlck1pbiA6IF9taW4sIF9vZmZzZXQsIHRldGhlciA/IF90ZXRoZXJNYXggOiBfbWF4KTtcblxuICAgIHBvcHBlck9mZnNldHNbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0IC0gX29mZnNldDtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IHByZXZlbnRPdmVyZmxvdyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXVxufTsiLCAiZXhwb3J0IHsgZGVmYXVsdCBhcyBhcHBseVN0eWxlcyB9IGZyb20gXCIuL2FwcGx5U3R5bGVzLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFycm93IH0gZnJvbSBcIi4vYXJyb3cuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY29tcHV0ZVN0eWxlcyB9IGZyb20gXCIuL2NvbXB1dGVTdHlsZXMuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZXZlbnRMaXN0ZW5lcnMgfSBmcm9tIFwiLi9ldmVudExpc3RlbmVycy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmbGlwIH0gZnJvbSBcIi4vZmxpcC5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBoaWRlIH0gZnJvbSBcIi4vaGlkZS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBvZmZzZXQgfSBmcm9tIFwiLi9vZmZzZXQuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcG9wcGVyT2Zmc2V0cyB9IGZyb20gXCIuL3BvcHBlck9mZnNldHMuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcHJldmVudE92ZXJmbG93IH0gZnJvbSBcIi4vcHJldmVudE92ZXJmbG93LmpzXCI7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEhUTUxFbGVtZW50U2Nyb2xsKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICB9O1xufSIsICJpbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0SFRNTEVsZW1lbnRTY3JvbGwgZnJvbSBcIi4vZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVTY3JvbGwobm9kZSkge1xuICBpZiAobm9kZSA9PT0gZ2V0V2luZG93KG5vZGUpIHx8ICFpc0hUTUxFbGVtZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIGdldFdpbmRvd1Njcm9sbChub2RlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2V0SFRNTEVsZW1lbnRTY3JvbGwobm9kZSk7XG4gIH1cbn0iLCAiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXROb2RlU2Nyb2xsIGZyb20gXCIuL2dldE5vZGVTY3JvbGwuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50U2NhbGVkKGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgc2NhbGVYID0gcm91bmQocmVjdC53aWR0aCkgLyBlbGVtZW50Lm9mZnNldFdpZHRoIHx8IDE7XG4gIHZhciBzY2FsZVkgPSByb3VuZChyZWN0LmhlaWdodCkgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxO1xuICByZXR1cm4gc2NhbGVYICE9PSAxIHx8IHNjYWxlWSAhPT0gMTtcbn0gLy8gUmV0dXJucyB0aGUgY29tcG9zaXRlIHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LlxuLy8gQ29tcG9zaXRlIG1lYW5zIGl0IHRha2VzIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zIGFzIHdlbGwgYXMgbGF5b3V0LlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXBvc2l0ZVJlY3QoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQsIG9mZnNldFBhcmVudCwgaXNGaXhlZCkge1xuICBpZiAoaXNGaXhlZCA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZCA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgb2Zmc2V0UGFyZW50SXNTY2FsZWQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNFbGVtZW50U2NhbGVkKG9mZnNldFBhcmVudCk7XG4gIHZhciBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQsIG9mZnNldFBhcmVudElzU2NhbGVkLCBpc0ZpeGVkKTtcbiAgdmFyIHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICB2YXIgb2Zmc2V0cyA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEwNzhcbiAgICBpc1Njcm9sbFBhcmVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgb2Zmc2V0cyA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQsIHRydWUpO1xuICAgICAgb2Zmc2V0cy54ICs9IG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ICs9IG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIG9mZnNldHMueCA9IGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54LFxuICAgIHk6IHJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcCAtIG9mZnNldHMueSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59IiwgImltcG9ydCB7IG1vZGlmaWVyUGhhc2VzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIHNvdXJjZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDk4NzUyNTVcblxuZnVuY3Rpb24gb3JkZXIobW9kaWZpZXJzKSB7XG4gIHZhciBtYXAgPSBuZXcgTWFwKCk7XG4gIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIG1hcC5zZXQobW9kaWZpZXIubmFtZSwgbW9kaWZpZXIpO1xuICB9KTsgLy8gT24gdmlzaXRpbmcgb2JqZWN0LCBjaGVjayBmb3IgaXRzIGRlcGVuZGVuY2llcyBhbmQgdmlzaXQgdGhlbSByZWN1cnNpdmVseVxuXG4gIGZ1bmN0aW9uIHNvcnQobW9kaWZpZXIpIHtcbiAgICB2aXNpdGVkLmFkZChtb2RpZmllci5uYW1lKTtcbiAgICB2YXIgcmVxdWlyZXMgPSBbXS5jb25jYXQobW9kaWZpZXIucmVxdWlyZXMgfHwgW10sIG1vZGlmaWVyLnJlcXVpcmVzSWZFeGlzdHMgfHwgW10pO1xuICAgIHJlcXVpcmVzLmZvckVhY2goZnVuY3Rpb24gKGRlcCkge1xuICAgICAgaWYgKCF2aXNpdGVkLmhhcyhkZXApKSB7XG4gICAgICAgIHZhciBkZXBNb2RpZmllciA9IG1hcC5nZXQoZGVwKTtcblxuICAgICAgICBpZiAoZGVwTW9kaWZpZXIpIHtcbiAgICAgICAgICBzb3J0KGRlcE1vZGlmaWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc3VsdC5wdXNoKG1vZGlmaWVyKTtcbiAgfVxuXG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIGlmICghdmlzaXRlZC5oYXMobW9kaWZpZXIubmFtZSkpIHtcbiAgICAgIC8vIGNoZWNrIGZvciB2aXNpdGVkIG9iamVjdFxuICAgICAgc29ydChtb2RpZmllcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkZXJNb2RpZmllcnMobW9kaWZpZXJzKSB7XG4gIC8vIG9yZGVyIGJhc2VkIG9uIGRlcGVuZGVuY2llc1xuICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyKG1vZGlmaWVycyk7IC8vIG9yZGVyIGJhc2VkIG9uIHBoYXNlXG5cbiAgcmV0dXJuIG1vZGlmaWVyUGhhc2VzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwaGFzZSkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgcmV0dXJuIG1vZGlmaWVyLnBoYXNlID09PSBwaGFzZTtcbiAgICB9KSk7XG4gIH0sIFtdKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVib3VuY2UoZm4pIHtcbiAgdmFyIHBlbmRpbmc7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFwZW5kaW5nKSB7XG4gICAgICBwZW5kaW5nID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcGVuZGluZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXNvbHZlKGZuKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwZW5kaW5nO1xuICB9O1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZUJ5TmFtZShtb2RpZmllcnMpIHtcbiAgdmFyIG1lcmdlZCA9IG1vZGlmaWVycy5yZWR1Y2UoZnVuY3Rpb24gKG1lcmdlZCwgY3VycmVudCkge1xuICAgIHZhciBleGlzdGluZyA9IG1lcmdlZFtjdXJyZW50Lm5hbWVdO1xuICAgIG1lcmdlZFtjdXJyZW50Lm5hbWVdID0gZXhpc3RpbmcgPyBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZywgY3VycmVudCwge1xuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3Rpbmcub3B0aW9ucywgY3VycmVudC5vcHRpb25zKSxcbiAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLmRhdGEsIGN1cnJlbnQuZGF0YSlcbiAgICB9KSA6IGN1cnJlbnQ7XG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfSwge30pOyAvLyBJRTExIGRvZXMgbm90IHN1cHBvcnQgT2JqZWN0LnZhbHVlc1xuXG4gIHJldHVybiBPYmplY3Qua2V5cyhtZXJnZWQpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIG1lcmdlZFtrZXldO1xuICB9KTtcbn0iLCAiaW1wb3J0IGdldENvbXBvc2l0ZVJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBvcmRlck1vZGlmaWVycyBmcm9tIFwiLi91dGlscy9vcmRlck1vZGlmaWVycy5qc1wiO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gXCIuL3V0aWxzL2RlYm91bmNlLmpzXCI7XG5pbXBvcnQgbWVyZ2VCeU5hbWUgZnJvbSBcIi4vdXRpbHMvbWVyZ2VCeU5hbWUuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gIG1vZGlmaWVyczogW10sXG4gIHN0cmF0ZWd5OiAnYWJzb2x1dGUnXG59O1xuXG5mdW5jdGlvbiBhcmVWYWxpZEVsZW1lbnRzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuICFhcmdzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gIShlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PT0gJ2Z1bmN0aW9uJyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wcGVyR2VuZXJhdG9yKGdlbmVyYXRvck9wdGlvbnMpIHtcbiAgaWYgKGdlbmVyYXRvck9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIGdlbmVyYXRvck9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfZ2VuZXJhdG9yT3B0aW9ucyA9IGdlbmVyYXRvck9wdGlvbnMsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0TW9kaWZpZXJzLFxuICAgICAgZGVmYXVsdE1vZGlmaWVycyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9PT0gdm9pZCAwID8gW10gOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG4gICAgICBkZWZhdWx0T3B0aW9ucyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPT09IHZvaWQgMCA/IERFRkFVTFRfT1BUSU9OUyA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZjI7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXRlID0ge1xuICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgIG9yZGVyZWRNb2RpZmllcnM6IFtdLFxuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBkZWZhdWx0T3B0aW9ucyksXG4gICAgICBtb2RpZmllcnNEYXRhOiB7fSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlLFxuICAgICAgICBwb3BwZXI6IHBvcHBlclxuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgc3R5bGVzOiB7fVxuICAgIH07XG4gICAgdmFyIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB2YXIgaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB2YXIgaW5zdGFuY2UgPSB7XG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBzZXRPcHRpb25zOiBmdW5jdGlvbiBzZXRPcHRpb25zKHNldE9wdGlvbnNBY3Rpb24pIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2V0T3B0aW9uc0FjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHNldE9wdGlvbnNBY3Rpb24oc3RhdGUub3B0aW9ucykgOiBzZXRPcHRpb25zQWN0aW9uO1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHN0YXRlLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgc3RhdGUub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHN0YXRlLnNjcm9sbFBhcmVudHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBpc0VsZW1lbnQocmVmZXJlbmNlKSA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZSkgOiByZWZlcmVuY2UuY29udGV4dEVsZW1lbnQgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UuY29udGV4dEVsZW1lbnQpIDogW10sXG4gICAgICAgICAgcG9wcGVyOiBsaXN0U2Nyb2xsUGFyZW50cyhwb3BwZXIpXG4gICAgICAgIH07IC8vIE9yZGVycyB0aGUgbW9kaWZpZXJzIGJhc2VkIG9uIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgYHBoYXNlYFxuICAgICAgICAvLyBwcm9wZXJ0aWVzXG5cbiAgICAgICAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlck1vZGlmaWVycyhtZXJnZUJ5TmFtZShbXS5jb25jYXQoZGVmYXVsdE1vZGlmaWVycywgc3RhdGUub3B0aW9ucy5tb2RpZmllcnMpKSk7IC8vIFN0cmlwIG91dCBkaXNhYmxlZCBtb2RpZmllcnNcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICByZXR1cm4gbS5lbmFibGVkO1xuICAgICAgICB9KTtcbiAgICAgICAgcnVuTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICAvLyBTeW5jIHVwZGF0ZSBcdTIwMTMgaXQgd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQsIGV2ZW4gaWYgbm90IG5lY2Vzc2FyeS4gVGhpc1xuICAgICAgLy8gaXMgdXNlZnVsIGZvciBsb3cgZnJlcXVlbmN5IHVwZGF0ZXMgd2hlcmUgc3luYyBiZWhhdmlvciBzaW1wbGlmaWVzIHRoZVxuICAgICAgLy8gbG9naWMuXG4gICAgICAvLyBGb3IgaGlnaCBmcmVxdWVuY3kgdXBkYXRlcyAoZS5nLiBgcmVzaXplYCBhbmQgYHNjcm9sbGAgZXZlbnRzKSwgYWx3YXlzXG4gICAgICAvLyBwcmVmZXIgdGhlIGFzeW5jIFBvcHBlciN1cGRhdGUgbWV0aG9kXG4gICAgICBmb3JjZVVwZGF0ZTogZnVuY3Rpb24gZm9yY2VVcGRhdGUoKSB7XG4gICAgICAgIGlmIChpc0Rlc3Ryb3llZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfc3RhdGUkZWxlbWVudHMgPSBzdGF0ZS5lbGVtZW50cyxcbiAgICAgICAgICAgIHJlZmVyZW5jZSA9IF9zdGF0ZSRlbGVtZW50cy5yZWZlcmVuY2UsXG4gICAgICAgICAgICBwb3BwZXIgPSBfc3RhdGUkZWxlbWVudHMucG9wcGVyOyAvLyBEb24ndCBwcm9jZWVkIGlmIGByZWZlcmVuY2VgIG9yIGBwb3BwZXJgIGFyZSBub3QgdmFsaWQgZWxlbWVudHNcbiAgICAgICAgLy8gYW55bW9yZVxuXG4gICAgICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU3RvcmUgdGhlIHJlZmVyZW5jZSBhbmQgcG9wcGVyIHJlY3RzIHRvIGJlIHJlYWQgYnkgbW9kaWZpZXJzXG5cblxuICAgICAgICBzdGF0ZS5yZWN0cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGdldENvbXBvc2l0ZVJlY3QocmVmZXJlbmNlLCBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKSwgc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJyksXG4gICAgICAgICAgcG9wcGVyOiBnZXRMYXlvdXRSZWN0KHBvcHBlcilcbiAgICAgICAgfTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gcmVzZXQgdGhlIGN1cnJlbnQgdXBkYXRlIGN5Y2xlLiBUaGVcbiAgICAgICAgLy8gbW9zdCBjb21tb24gdXNlIGNhc2UgZm9yIHRoaXMgaXMgdGhlIGBmbGlwYCBtb2RpZmllciBjaGFuZ2luZyB0aGVcbiAgICAgICAgLy8gcGxhY2VtZW50LCB3aGljaCB0aGVuIG5lZWRzIHRvIHJlLXJ1biBhbGwgdGhlIG1vZGlmaWVycywgYmVjYXVzZSB0aGVcbiAgICAgICAgLy8gbG9naWMgd2FzIHByZXZpb3VzbHkgcmFuIGZvciB0aGUgcHJldmlvdXMgcGxhY2VtZW50IGFuZCBpcyB0aGVyZWZvcmVcbiAgICAgICAgLy8gc3RhbGUvaW5jb3JyZWN0XG5cbiAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUucGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7IC8vIE9uIGVhY2ggdXBkYXRlIGN5Y2xlLCB0aGUgYG1vZGlmaWVyc0RhdGFgIHByb3BlcnR5IGZvciBlYWNoIG1vZGlmaWVyXG4gICAgICAgIC8vIGlzIGZpbGxlZCB3aXRoIHRoZSBpbml0aWFsIGRhdGEgc3BlY2lmaWVkIGJ5IHRoZSBtb2RpZmllci4gVGhpcyBtZWFuc1xuICAgICAgICAvLyBpdCBkb2Vzbid0IHBlcnNpc3QgYW5kIGlzIGZyZXNoIG9uIGVhY2ggdXBkYXRlLlxuICAgICAgICAvLyBUbyBlbnN1cmUgcGVyc2lzdGVudCBkYXRhLCB1c2UgYCR7bmFtZX0jcGVyc2lzdGVudGBcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLm1vZGlmaWVyc0RhdGFbbW9kaWZpZXIubmFtZV0gPSBPYmplY3QuYXNzaWduKHt9LCBtb2RpZmllci5kYXRhKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHN0YXRlLm9yZGVyZWRNb2RpZmllcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgaWYgKHN0YXRlLnJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfc3RhdGUkb3JkZXJlZE1vZGlmaWUgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzW2luZGV4XSxcbiAgICAgICAgICAgICAgZm4gPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUuZm4sXG4gICAgICAgICAgICAgIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUub3B0aW9ucyxcbiAgICAgICAgICAgICAgX29wdGlvbnMgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID09PSB2b2lkIDAgPyB7fSA6IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIsXG4gICAgICAgICAgICAgIG5hbWUgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUubmFtZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0YXRlID0gZm4oe1xuICAgICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IF9vcHRpb25zLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2VcbiAgICAgICAgICAgIH0pIHx8IHN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIEFzeW5jIGFuZCBvcHRpbWlzdGljYWxseSBvcHRpbWl6ZWQgdXBkYXRlIFx1MjAxMyBpdCB3aWxsIG5vdCBiZSBleGVjdXRlZCBpZlxuICAgICAgLy8gbm90IG5lY2Vzc2FyeSAoZGVib3VuY2VkIHRvIHJ1biBhdCBtb3N0IG9uY2UtcGVyLXRpY2spXG4gICAgICB1cGRhdGU6IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICByZXNvbHZlKHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgaW5zdGFuY2Uuc2V0T3B0aW9ucyhvcHRpb25zKS50aGVuKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgaWYgKCFpc0Rlc3Ryb3llZCAmJiBvcHRpb25zLm9uRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKHN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSBiZWZvcmUgdGhlIGZpcnN0XG4gICAgLy8gdXBkYXRlIGN5Y2xlIHJ1bnMuIFRoZXkgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgdXBkYXRlXG4gICAgLy8gY3ljbGUuIFRoaXMgaXMgdXNlZnVsIHdoZW4gYSBtb2RpZmllciBhZGRzIHNvbWUgcGVyc2lzdGVudCBkYXRhIHRoYXRcbiAgICAvLyBvdGhlciBtb2RpZmllcnMgbmVlZCB0byB1c2UsIGJ1dCB0aGUgbW9kaWZpZXIgaXMgcnVuIGFmdGVyIHRoZSBkZXBlbmRlbnRcbiAgICAvLyBvbmUuXG5cbiAgICBmdW5jdGlvbiBydW5Nb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICAgICAgICBfcmVmJG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zID0gX3JlZiRvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYkb3B0aW9ucyxcbiAgICAgICAgICAgIGVmZmVjdCA9IF9yZWYuZWZmZWN0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgZWZmZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIGNsZWFudXBGbiA9IGVmZmVjdCh7XG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdmFyIG5vb3BGbiA9IGZ1bmN0aW9uIG5vb3BGbigpIHt9O1xuXG4gICAgICAgICAgZWZmZWN0Q2xlYW51cEZucy5wdXNoKGNsZWFudXBGbiB8fCBub29wRm4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgZWZmZWN0Q2xlYW51cEZucy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgIH0pO1xuICAgICAgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcbn1cbmV4cG9ydCB2YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGRldGVjdE92ZXJmbG93IH07IiwgImltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjtcbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tIFwiLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gXCIuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzXCI7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qc1wiO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9hcHBseVN0eWxlcy5qc1wiO1xuaW1wb3J0IG9mZnNldCBmcm9tIFwiLi9tb2RpZmllcnMvb2Zmc2V0LmpzXCI7XG5pbXBvcnQgZmxpcCBmcm9tIFwiLi9tb2RpZmllcnMvZmxpcC5qc1wiO1xuaW1wb3J0IHByZXZlbnRPdmVyZmxvdyBmcm9tIFwiLi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgYXJyb3cgZnJvbSBcIi4vbW9kaWZpZXJzL2Fycm93LmpzXCI7XG5pbXBvcnQgaGlkZSBmcm9tIFwiLi9tb2RpZmllcnMvaGlkZS5qc1wiO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSBbZXZlbnRMaXN0ZW5lcnMsIHBvcHBlck9mZnNldHMsIGNvbXB1dGVTdHlsZXMsIGFwcGx5U3R5bGVzLCBvZmZzZXQsIGZsaXAsIHByZXZlbnRPdmVyZmxvdywgYXJyb3csIGhpZGVdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IiwgImV4cG9ydCAqIGZyb20gXCIuL2VudW1zLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tb2RpZmllcnMvaW5kZXguanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBwb3BwZXJHZW5lcmF0b3IsIGRldGVjdE92ZXJmbG93LCBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyQmFzZSB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciB9IGZyb20gXCIuL3BvcHBlci5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciBhcyBjcmVhdGVQb3BwZXJMaXRlIH0gZnJvbSBcIi4vcG9wcGVyLWxpdGUuanNcIjsiLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBCYXNlIH07XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyBmcm9tIHdoaWNoIHRoZSBtb3N0IGNsYXNzZXMgYXJlIGRlcml2ZWQuXG4gKlxuICogVGhpcyBjbGFzcyBoYXMgYmVzaWRlcyBhIGB0b1N0cmluZ2Agd2hpY2ggcmV0dXJucyB0aGUganNvbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0XG4gKiBhbHNvIGEgZnVuY3Rpb25hbGl0eSB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcy5cbiAqXG4gKiBUaGVyZWZvcmUsIHRoZSBjbGFzcyBoYXMgYSBzdGF0aWMgbWV0aG9kIGAgW1N5bWJvbC5oYXNJbnN0YW5jZV0odGhhdClgIHdoaWNoIHJldHVybnMgdHJ1ZSBpZiB0aGUgb2JqZWN0XG4gKiBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MuXG4gKlxuICogQHNlZSBbaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3ltYm9sL2hhc0luc3RhbmNlXShkZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3ltYm9sL2hhc0luc3RhbmNlKVxuICpcbiAqIERlcml2ZWQgY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50IGEgc3RhdGljIGdldHRlciBgaW5zdGFuY2VTeW1ib2xgIHdoaWNoIHJldHVybnMgYSB1bmlxdWUgc3ltYm9sLlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcbiAqICAgIHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9iYXNlXCIpO1xuICogfVxuICogYGBgXG4gKlxuICogVGhlIGNsYXNzIHdhcyBmb3JtZXJseSBjYWxsZWQgT2JqZWN0LlxuICpcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBiYXNlIGNsYXNzIGZvciB0aGUgbW9zdCBjbGFzc2VzIGluIHRoZSBtb25zdGVyIGxpYnJhcnlcbiAqL1xuY2xhc3MgQmFzZSBleHRlbmRzIE9iamVjdCB7XG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL2Jhc2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEBwYXJhbSB0aGF0XG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIFtTeW1ib2wuaGFzSW5zdGFuY2VdKHRoYXQpIHtcblx0XHRpZiAoXG5cdFx0XHR0aGF0ID09PSB1bmRlZmluZWQgfHxcblx0XHRcdHRoYXQgPT09IG51bGwgfHxcblx0XHRcdCh0eXBlb2YgdGhhdCAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdGhhdCAhPT0gXCJmdW5jdGlvblwiKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRoYXRDbGFzcyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGF0KTtcblx0XHRpZiAoXG5cdFx0XHR0aGF0Q2xhc3MgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0dGhhdENsYXNzID09PSBudWxsIHx8XG5cdFx0XHQodHlwZW9mIHRoYXRDbGFzcyAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdGhhdENsYXNzICE9PSBcImZ1bmN0aW9uXCIpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKGNoZWNrSW5zdGFuY2VTeW1ib2wuYXBwbHkodGhpcywgW3RoYXRDbGFzc10pID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyB0aGlzIGNhbGwgdGhlIHN0YXRpYyBtZXRob2Qgb2YgdGhlIHN1cGVyIGNsYXNzLCBpZiB0aGVyZSBpcyBvbmVcblx0XHRyZXR1cm4gc3VwZXJbU3ltYm9sLmhhc0luc3RhbmNlXSh0aGF0KTtcblx0fVxufVxuXG4vKipcbiAqIHRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBjbGFzcyBoYXMgYSBzdGF0aWMgZ2V0dGVyIGBpbnN0YW5jZVN5bWJvbGAgYW5kIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIGdldHRlciBpcyBlcXVhbCB0byB0aGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG9ialxuICogQHJldHVybiB7Ym9vbGVhbnxhbnl8Ym9vbGVhbn1cbiAqIEBzaW5jZSAyLjEuMFxuICovXG5mdW5jdGlvbiBjaGVja0luc3RhbmNlU3ltYm9sKG9iaikge1xuXHRpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShpbnN0YW5jZVN5bWJvbCkgPT09IGZhbHNlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Y29uc3QgcHJvdG8gPSBvYmo/LmNvbnN0cnVjdG9yO1xuXHRpZiAoXG5cdFx0cHJvdG8gPT09IHVuZGVmaW5lZCB8fFxuXHRcdHByb3RvID09PSBudWxsIHx8XG5cdFx0KHR5cGVvZiBwcm90byAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcHJvdG8gIT09IFwiZnVuY3Rpb25cIilcblx0KSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKHByb3RvLmhhc093blByb3BlcnR5KGluc3RhbmNlU3ltYm9sKSAhPT0gdHJ1ZSkge1xuXHRcdHJldHVybiBjaGVja0luc3RhbmNlU3ltYm9sLmFwcGx5KHRoaXMsIFtvYmouX19wcm90b19fXSk7XG5cdH1cblxuXHRjb25zdCBzeW1ib2wgPSBwcm90b1tpbnN0YW5jZVN5bWJvbF07XG5cdGlmIChzeW1ib2wgPT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChvYmouX19wcm90b19fKSB7XG5cdFx0XHRyZXR1cm4gY2hlY2tJbnN0YW5jZVN5bWJvbChvYmouX19wcm90b19fKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChzeW1ib2wgPT09IHRoaXNbaW5zdGFuY2VTeW1ib2xdKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRyZXR1cm4gY2hlY2tJbnN0YW5jZVN5bWJvbC5hcHBseSh0aGlzLCBbb2JqLl9fcHJvdG9fX10pO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgU3RhY2sgfTtcblxuLyoqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIG1ldGhvZCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgUXVldWUoKWAuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS40LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIFN0YWNrIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmRhdGEgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvc3RhY2tcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzRW1wdHkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGggPT09IDA7XG5cdH1cblxuXHQvKipcblx0ICogbG9va3MgYXQgdGhlIG9iamVjdCBhdCB0aGUgdG9wIG9mIHRoaXMgc3RhY2sgd2l0aG91dCByZW1vdmluZyBpdCBmcm9tIHRoZSBzdGFjay5cblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHBlZWsoKSB7XG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmRhdGE/Llt0aGlzLmRhdGEubGVuZ3RoIC0gMV07XG5cdH1cblxuXHQvKipcblx0ICogcHVzaGVzIGFuIGl0ZW0gb250byB0aGUgdG9wIG9mIHRoaXMgc3RhY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7UXVldWV9XG5cdCAqL1xuXHRwdXNoKHZhbHVlKSB7XG5cdFx0dGhpcy5kYXRhLnB1c2godmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJlbW92ZSBhbGwgZW50cmllc1xuXHQgKlxuXHQgKiBAcmV0dXJuIHtRdWV1ZX1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHRoaXMuZGF0YSA9IFtdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJlbW92ZXMgdGhlIG9iamVjdCBhdCB0aGUgdG9wIG9mIHRoaXMgc3RhY2sgYW5kIHJldHVybnNcblx0ICogdGhhdCBvYmplY3QgYXMgdGhlIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24uIGlzIHRoZSBzdGFjayBlbXB0eVxuXHQgKiB0aGUgcmV0dXJuIHZhbHVlIGlzIHVuZGVmaW5lZC5cblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHBvcCgpIHtcblx0XHRpZiAodGhpcy5pc0VtcHR5KCkpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmRhdGEucG9wKCk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQge1xuXHRpc0FycmF5LFxuXHRpc0ludGVnZXIsXG5cdGlzT2JqZWN0LFxuXHRpc1ByaW1pdGl2ZSxcblx0aXNTdHJpbmcsXG59IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IFN0YWNrIH0gZnJvbSBcIi4uL3R5cGVzL3N0YWNrLm1qc1wiO1xuaW1wb3J0IHtcblx0dmFsaWRhdGVJbnRlZ2VyLFxuXHR2YWxpZGF0ZUJvb2xlYW4sXG5cdHZhbGlkYXRlU3RyaW5nLFxufSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IFBhdGhmaW5kZXIsIERFTElNSVRFUiwgV0lMRENBUkQgfTtcblxuLyoqXG4gKiBwYXRoIHNlcGFyYXRvclxuICpcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBERUxJTUlURVIgPSBcIi5cIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgV0lMRENBUkQgPSBcIipcIjtcblxuLyoqXG4gKiBQYXRoZmluZGVyIGlzIGEgY2xhc3MgdG8gZmluZCBhIHBhdGggdG8gYW4gb2JqZWN0LlxuICpcbiAqIFdpdGggdGhlIGhlbHAgb2YgdGhlIHBhdGhmaW5kZXIsIHZhbHVlcyBjYW4gYmUgcmVhZCBhbmQgd3JpdHRlbiBmcm9tIGFuIG9iamVjdCBjb25zdHJ1Y3QuXG4gKlxuICogYGBgXG4gKiBuZXcgUGF0aGZpbmRlcih7XG4gKiBhOiB7XG4gKiAgICAgYjoge1xuICogICAgICAgICBmOiBbXG4gKiAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgZzogZmFsc2UsXG4gKiAgICAgICAgICAgICB9XG4gKiAgICAgICAgIF0sXG4gKiAgICAgfVxuICogfVxuICogfSkuZ2V0VmlhKFwiYS5iLmYuMC5nXCIpOyAvLyBcdTIxQTYgZmFsc2VcbiAqIGBgYFxuICpcbiAqIGlmIGEgdmFsdWUgaXMgbm90IHByZXNlbnQgb3IgaGFzIHRoZSB3cm9uZyB0eXBlLCBhIGNvcnJlc3BvbmRpbmcgZXhjZXB0aW9uIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIG5ldyBQYXRoZmluZGVyKHt9KS5nZXRWaWEoXCJhLmIuZi4wLmdcIik7IC8vIFx1MjFBNiBFcnJvclxuICogYGBgXG4gKlxuICogVGhlIGBQYXRoZmluZGVyLmV4aXN0cygpYCBtZXRob2QgY2FuIGJlIHVzZWQgdG8gY2hlY2sgd2hldGhlciBhY2Nlc3MgdG8gdGhlIHBhdGggaXMgcG9zc2libGUuXG4gKlxuICogYGBgXG4gKiBuZXcgUGF0aGZpbmRlcih7fSkuZXhpc3RzKFwiYS5iLmYuMC5nXCIpOyAvLyBcdTIxQTYgZmFsc2VcbiAqIGBgYFxuICpcbiAqIHBhdGhmaW5kZXIgY2FuIGFsc28gYmUgdXNlZCB0byBidWlsZCBvYmplY3Qgc3RydWN0dXJlcy4gdG8gZG8gdGhpcywgdGhlIGBQYXRoZmluZGVyLnNldFZpYSgpYCBtZXRob2QgbXVzdCBiZSB1c2VkLlxuICpcbiAqIGBgYFxuICogb2JqID0ge307XG4gKiBuZXcgUGF0aGZpbmRlcihvYmopLnNldFZpYSgnYS5iLjAuYycsIHRydWUpOyAvLyBcdTIxQTYge2E6e2I6W3tjOnRydWV9XX19XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvbGlicmFyaWVzL3BhdGhmaW5kZXIvZXhhbXBsZS0xLyBFeGFtcGxlIDFcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvcGF0aGZpbmRlci9leGFtcGxlLTIvIEV4YW1wbGUgMlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgUGF0aGZpbmRlciBpcyBhIGNsYXNzIHRvIGZpbmQgYSBwYXRoIHRvIGFuIG9iamVjdC5cbiAqL1xuY2xhc3MgUGF0aGZpbmRlciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY29uc3RydWN0b3IuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3QgLSBUaGUgb2JqZWN0IHBhcmFtZXRlciBmb3IgdGhlIGNvbnN0cnVjdG9yLlxuXHQgKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBwcm92aWRlZCBvYmplY3QgcGFyYW1ldGVyIGlzIGEgc2ltcGxlIHR5cGUuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvYmplY3QpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKGlzUHJpbWl0aXZlKG9iamVjdCkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBwYXJhbWV0ZXIgbXVzdCBub3QgYmUgYSBzaW1wbGUgdHlwZVwiKTtcblx0XHR9XG5cblx0XHR0aGlzLm9iamVjdCA9IG9iamVjdDtcblx0XHR0aGlzLndpbGRDYXJkID0gV0lMRENBUkQ7XG5cdH1cblxuXHQvKipcblx0ICogc2V0IHdpbGRjYXJkXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB3aWxkY2FyZFxuXHQgKiBAcmV0dXJuIHtQYXRoZmluZGVyfVxuXHQgKiBAc2luY2UgMS43LjBcblx0ICovXG5cdHNldFdpbGRDYXJkKHdpbGRjYXJkKSB7XG5cdFx0dmFsaWRhdGVTdHJpbmcod2lsZGNhcmQpO1xuXHRcdHRoaXMud2lsZENhcmQgPSB3aWxkY2FyZDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xhcnJheX0gcGF0aFxuXHQgKiBAc2luY2UgMS40LjBcblx0ICogQHJldHVybiB7Kn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgam91cm5leSBpcyBub3QgYXQgaXRzIGVuZFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXG5cdCAqL1xuXHRnZXRWaWEocGF0aCkge1xuXHRcdHJldHVybiBnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCB0aGlzLm9iamVjdCwgcGF0aCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8YXJyYXl9IHBhdGhcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtQYXRoZmluZGVyfVxuXHQgKiBAc2luY2UgMS40LjBcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcblx0ICovXG5cdHNldFZpYShwYXRoLCB2YWx1ZSkge1xuXHRcdHNldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHRoaXMub2JqZWN0LCBwYXRoLCB2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogRGVsZXRlIFZpYSBQYXRoXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGFycmF5fSBwYXRoXG5cdCAqIEByZXR1cm4ge1BhdGhmaW5kZXJ9XG5cdCAqIEBzaW5jZSAxLjYuMFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVxuXHQgKi9cblx0ZGVsZXRlVmlhKHBhdGgpIHtcblx0XHRkZWxldGVWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCB0aGlzLm9iamVjdCwgcGF0aCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8YXJyYXl9IHBhdGhcblx0ICogQHJldHVybiB7Ym9vbH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHNpbmNlIDEuNC4wXG5cdCAqL1xuXHRleGlzdHMocGF0aCkge1xuXHRcdHRyeSB7XG5cdFx0XHRnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCB0aGlzLm9iamVjdCwgcGF0aCwgdHJ1ZSk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdFxuICogQHBhcmFtIHtzdHJpbmd8YXJyYXl9IHBhdGhcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gY2hlY2tcbiAqIEByZXR1cm4ge01hcH1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IHRoZSBqb3VybmV5IGlzIG5vdCBhdCBpdHMgZW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaXRlcmF0ZShzdWJqZWN0LCBwYXRoLCBjaGVjaykge1xuXHRpZiAoY2hlY2sgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNoZWNrID0gZmFsc2U7XG5cdH1cblx0dmFsaWRhdGVCb29sZWFuKGNoZWNrKTtcblxuXHRjb25zdCByZXN1bHQgPSBuZXcgTWFwKCk7XG5cblx0aWYgKGlzQXJyYXkocGF0aCkpIHtcblx0XHRwYXRoID0gcGF0aC5qb2luKERFTElNSVRFUik7XG5cdH1cblxuXHRpZiAoaXNPYmplY3Qoc3ViamVjdCkgfHwgaXNBcnJheShzdWJqZWN0KSkge1xuXHRcdGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHN1YmplY3QpKSB7XG5cdFx0XHRyZXN1bHQuc2V0KGtleSwgZ2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgdmFsdWUsIHBhdGgsIGNoZWNrKSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGtleSA9IHBhdGguc3BsaXQoREVMSU1JVEVSKS5zaGlmdCgpO1xuXHRcdHJlc3VsdC5zZXQoa2V5LCBnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCBzdWJqZWN0LCBwYXRoLCBjaGVjaykpO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN1YmplY3RcbiAqIEBwYXJhbSBwYXRoXG4gKiBAcGFyYW0gY2hlY2tcbiAqIEByZXR1cm4ge1Z8KnxNYXB9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgam91cm5leSBpcyBub3QgYXQgaXRzIGVuZFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWVWaWFQYXRoKHN1YmplY3QsIHBhdGgsIGNoZWNrKSB7XG5cdGlmIChjaGVjayA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y2hlY2sgPSBmYWxzZTtcblx0fVxuXHR2YWxpZGF0ZUJvb2xlYW4oY2hlY2spO1xuXG5cdGlmICghKGlzQXJyYXkocGF0aCkgfHwgaXNTdHJpbmcocGF0aCkpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XCJ0eXBlIGVycm9yOiBhIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBpbiBnZXRWYWx1ZVZpYVBhdGhcIixcblx0XHQpO1xuXHR9XG5cblx0bGV0IHBhcnRzO1xuXHRpZiAoaXNTdHJpbmcocGF0aCkpIHtcblx0XHRpZiAocGF0aCA9PT0gXCJcIikge1xuXHRcdFx0cmV0dXJuIHN1YmplY3Q7XG5cdFx0fVxuXG5cdFx0cGFydHMgPSBwYXRoLnNwbGl0KERFTElNSVRFUik7XG5cdH1cblxuXHRsZXQgY3VycmVudCA9IHBhcnRzLnNoaWZ0KCk7XG5cblx0aWYgKGN1cnJlbnQgPT09IHRoaXMud2lsZENhcmQpIHtcblx0XHRyZXR1cm4gaXRlcmF0ZS5jYWxsKHRoaXMsIHN1YmplY3QsIHBhcnRzLmpvaW4oREVMSU1JVEVSKSwgY2hlY2spO1xuXHR9XG5cblx0aWYgKGlzT2JqZWN0KHN1YmplY3QpIHx8IGlzQXJyYXkoc3ViamVjdCkpIHtcblx0XHRsZXQgYW5jaG9yO1xuXHRcdGlmIChzdWJqZWN0IGluc3RhbmNlb2YgTWFwIHx8IHN1YmplY3QgaW5zdGFuY2VvZiBXZWFrTWFwKSB7XG5cdFx0XHRhbmNob3IgPSBzdWJqZWN0LmdldChjdXJyZW50KTtcblx0XHR9IGVsc2UgaWYgKHN1YmplY3QgaW5zdGFuY2VvZiBTZXQgfHwgc3ViamVjdCBpbnN0YW5jZW9mIFdlYWtTZXQpIHtcblx0XHRcdGN1cnJlbnQgPSBwYXJzZUludChjdXJyZW50KTtcblx0XHRcdHZhbGlkYXRlSW50ZWdlcihjdXJyZW50KTtcblx0XHRcdGFuY2hvciA9IFsuLi5zdWJqZWN0XT8uW2N1cnJlbnRdO1xuXHRcdH0gZWxzZSBpZiAodHlwZW9mIFdlYWtSZWYgPT09IFwiZnVuY3Rpb25cIiAmJiBzdWJqZWN0IGluc3RhbmNlb2YgV2Vha1JlZikge1xuXHRcdFx0dGhyb3cgRXJyb3IoXCJ1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlIChXZWFrUmVmKVwiKTtcblx0XHR9IGVsc2UgaWYgKGlzQXJyYXkoc3ViamVjdCkpIHtcblx0XHRcdGN1cnJlbnQgPSBwYXJzZUludChjdXJyZW50KTtcblx0XHRcdHZhbGlkYXRlSW50ZWdlcihjdXJyZW50KTtcblx0XHRcdGFuY2hvciA9IHN1YmplY3Q/LltjdXJyZW50XTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YW5jaG9yID0gc3ViamVjdD8uW2N1cnJlbnRdO1xuXHRcdH1cblxuXHRcdGlmIChpc09iamVjdChhbmNob3IpIHx8IGlzQXJyYXkoYW5jaG9yKSkge1xuXHRcdFx0cmV0dXJuIGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIGFuY2hvciwgcGFydHMuam9pbihERUxJTUlURVIpLCBjaGVjayk7XG5cdFx0fVxuXG5cdFx0aWYgKHBhcnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdHRocm93IEVycm9yKGB0aGUgam91cm5leSBpcyBub3QgYXQgaXRzIGVuZCAoJHtwYXJ0cy5qb2luKERFTElNSVRFUil9KWApO1xuXHRcdH1cblxuXHRcdGlmIChjaGVjayA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG5cdFx0XHRcdE9iamVjdC5nZXRQcm90b3R5cGVPZihzdWJqZWN0KSxcblx0XHRcdFx0Y3VycmVudCxcblx0XHRcdCk7XG5cblx0XHRcdGlmICghc3ViamVjdC5oYXNPd25Qcm9wZXJ0eShjdXJyZW50KSAmJiBkZXNjcmlwdG9yID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgRXJyb3IoXCJ1bmtub3duIHZhbHVlIFwiICsgY3VycmVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFuY2hvcjtcblx0fVxuXG5cdHRocm93IFR5cGVFcnJvcihgdW5zdXBwb3J0ZWQgdHlwZSAke3R5cGVvZiBzdWJqZWN0fSBmb3IgcGF0aCAke3BhdGh9YCk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdWJqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ3xhcnJheX0gcGF0aFxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7dm9pZH1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGpvdXJuZXkgaXMgbm90IGF0IGl0cyBlbmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzZXRWYWx1ZVZpYVBhdGgoc3ViamVjdCwgcGF0aCwgdmFsdWUpIHtcblx0aWYgKCEoaXNBcnJheShwYXRoKSB8fCBpc1N0cmluZyhwYXRoKSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIGVycm9yOiBhIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBhbiBhcnJheVwiKTtcblx0fVxuXG5cdGxldCBwYXJ0cztcblx0aWYgKGlzQXJyYXkocGF0aCkpIHtcblx0XHRpZiAocGF0aC5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRwYXJ0cyA9IHBhdGg7XG5cdH0gZWxzZSB7XG5cdFx0cGFydHMgPSBwYXRoLnNwbGl0KERFTElNSVRFUik7XG5cdH1cblxuXHRsZXQgbGFzdCA9IHBhcnRzLnBvcCgpO1xuXHRjb25zdCBzdWJwYXRoID0gcGFydHMuam9pbihERUxJTUlURVIpO1xuXG5cdGNvbnN0IHN0YWNrID0gbmV3IFN0YWNrKCk7XG5cdGxldCBjdXJyZW50ID0gc3VicGF0aDtcblx0d2hpbGUgKHRydWUpIHtcblx0XHR0cnkge1xuXHRcdFx0Z2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgc3ViamVjdCwgY3VycmVudCwgdHJ1ZSk7XG5cdFx0XHRicmVhaztcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0c3RhY2sucHVzaChjdXJyZW50KTtcblx0XHRwYXJ0cy5wb3AoKTtcblx0XHRjdXJyZW50ID0gcGFydHMuam9pbihERUxJTUlURVIpO1xuXG5cdFx0aWYgKGN1cnJlbnQgPT09IFwiXCIpIGJyZWFrO1xuXHR9XG5cblx0d2hpbGUgKCFzdGFjay5pc0VtcHR5KCkpIHtcblx0XHRjdXJyZW50ID0gc3RhY2sucG9wKCk7XG5cdFx0bGV0IG9iaiA9IHt9O1xuXG5cdFx0aWYgKCFzdGFjay5pc0VtcHR5KCkpIHtcblx0XHRcdGNvbnN0IG4gPSBzdGFjay5wZWVrKCkuc3BsaXQoREVMSU1JVEVSKS5wb3AoKTtcblx0XHRcdGlmIChpc0ludGVnZXIocGFyc2VJbnQobikpKSB7XG5cdFx0XHRcdG9iaiA9IFtdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHNldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHN1YmplY3QsIGN1cnJlbnQsIG9iaik7XG5cdH1cblxuXHRjb25zdCBhbmNob3IgPSBnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCBzdWJqZWN0LCBzdWJwYXRoKTtcblxuXHRpZiAoIShpc09iamVjdChzdWJqZWN0KSB8fCBpc0FycmF5KHN1YmplY3QpKSkge1xuXHRcdHRocm93IFR5cGVFcnJvcihgdW5zdXBwb3J0ZWQgdHlwZTogJHt0eXBlb2Ygc3ViamVjdH0gaW4gc2V0VmFsdWVWaWFQYXRoYCk7XG5cdH1cblxuXHRpZiAoYW5jaG9yIGluc3RhbmNlb2YgTWFwIHx8IGFuY2hvciBpbnN0YW5jZW9mIFdlYWtNYXApIHtcblx0XHRhbmNob3Iuc2V0KGxhc3QsIHZhbHVlKTtcblx0fSBlbHNlIGlmIChhbmNob3IgaW5zdGFuY2VvZiBTZXQgfHwgYW5jaG9yIGluc3RhbmNlb2YgV2Vha1NldCkge1xuXHRcdGFuY2hvci5hcHBlbmQodmFsdWUpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBXZWFrUmVmID09PSBcImZ1bmN0aW9uXCIgJiYgYW5jaG9yIGluc3RhbmNlb2YgV2Vha1JlZikge1xuXHRcdHRocm93IEVycm9yKFwidW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZSBpbiBzZXRWYWx1ZVZpYVBhdGhcIik7XG5cdH0gZWxzZSBpZiAoaXNBcnJheShhbmNob3IpKSB7XG5cdFx0bGFzdCA9IHBhcnNlSW50KGxhc3QpO1xuXHRcdHZhbGlkYXRlSW50ZWdlcihsYXN0KTtcblx0XHRhc3NpZ25Qcm9wZXJ0eShhbmNob3IsIFwiXCIgKyBsYXN0LCB2YWx1ZSk7XG5cdH0gZWxzZSB7XG5cdFx0YXNzaWduUHJvcGVydHkoYW5jaG9yLCBsYXN0LCB2YWx1ZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtvYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICovXG5mdW5jdGlvbiBhc3NpZ25Qcm9wZXJ0eShvYmplY3QsIGtleSwgdmFsdWUpIHtcblx0aWYgKCFvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdG9iamVjdFtrZXldID0gdmFsdWU7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRkZWxldGUgb2JqZWN0W2tleV07XG5cdH1cblxuXHRvYmplY3Rba2V5XSA9IHZhbHVlO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gc3ViamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IHRoZSBqb3VybmV5IGlzIG5vdCBhdCBpdHMgZW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZVZhbHVlVmlhUGF0aChzdWJqZWN0LCBwYXRoKSB7XG5cdGlmICghKGlzQXJyYXkocGF0aCkgfHwgaXNTdHJpbmcocGF0aCkpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XCJ0eXBlIGVycm9yOiBhIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBhbiBhcnJheSBpbiBkZWxldGVWYWx1ZVZpYVBhdGhcIixcblx0XHQpO1xuXHR9XG5cblx0bGV0IHBhcnRzO1xuXHRpZiAoaXNBcnJheShwYXRoKSkge1xuXHRcdGlmIChwYXRoLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHBhcnRzID0gcGF0aDtcblx0fSBlbHNlIHtcblx0XHRwYXJ0cyA9IHBhdGguc3BsaXQoREVMSU1JVEVSKTtcblx0fVxuXG5cdGxldCBsYXN0ID0gcGFydHMucG9wKCk7XG5cdGNvbnN0IHN1YlBhdGggPSBwYXJ0cy5qb2luKERFTElNSVRFUik7XG5cblx0Y29uc3QgYW5jaG9yID0gZ2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgc3ViamVjdCwgc3ViUGF0aCk7XG5cblx0aWYgKGFuY2hvciBpbnN0YW5jZW9mIE1hcCkge1xuXHRcdGFuY2hvci5kZWxldGUobGFzdCk7XG5cdH0gZWxzZSBpZiAoXG5cdFx0YW5jaG9yIGluc3RhbmNlb2YgU2V0IHx8XG5cdFx0YW5jaG9yIGluc3RhbmNlb2YgV2Vha01hcCB8fFxuXHRcdGFuY2hvciBpbnN0YW5jZW9mIFdlYWtTZXQgfHxcblx0XHQodHlwZW9mIFdlYWtSZWYgPT09IFwiZnVuY3Rpb25cIiAmJiBhbmNob3IgaW5zdGFuY2VvZiBXZWFrUmVmKVxuXHQpIHtcblx0XHR0aHJvdyBFcnJvcihcInVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGUgaW4gZGVsZXRlVmFsdWVWaWFQYXRoXCIpO1xuXHR9IGVsc2UgaWYgKGlzQXJyYXkoYW5jaG9yKSkge1xuXHRcdGxhc3QgPSBwYXJzZUludChsYXN0KTtcblx0XHR2YWxpZGF0ZUludGVnZXIobGFzdCk7XG5cdFx0ZGVsZXRlIGFuY2hvcltsYXN0XTtcblx0fSBlbHNlIHtcblx0XHRkZWxldGUgYW5jaG9yW2xhc3RdO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNJdGVyYWJsZSwgaXNTdHJpbmcgfSBmcm9tIFwiLi9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlRnVuY3Rpb24sIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcblxuZXhwb3J0IHsgVG9rZW5MaXN0IH07XG5cbi8qKlxuICogQSBgVG9rZW5MaXN0YCBhbGxvd3MgeW91IHRvIG1hbmFnZSB0b2tlbnMgKGluZGl2aWR1YWwgY2hhcmFjdGVyIHN0cmluZ3Mgc3VjaCBhcyBjc3MgY2xhc3NlcyBpbiBhbiBhdHRyaWJ1dGUgc3RyaW5nKS5cbiAqXG4gKiBUaGUgYFRva2VuTGlzdGAgb2ZmZXJzIHZhcmlvdXMgZnVuY3Rpb25zIHRvIG1hbmlwdWxhdGUgdmFsdWVzLiBGb3IgZXhhbXBsZSwgeW91IGNhbiBhZGQsIHJlbW92ZSBvciByZXBsYWNlIGEgY2xhc3MgaW4gYSBDU1MgbGlzdC5cbiAqXG4gKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIFtpdGVyYXRpb24gcHJvdG9jb2xdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0l0ZXJhdGlvbl9wcm90b2NvbHMpLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5jbGFzcyBUb2tlbkxpc3QgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfGl0ZXJhdGFibGV9IGluaXRcblx0ICovXG5cdGNvbnN0cnVjdG9yKGluaXQpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMudG9rZW5zID0gbmV3IFNldCgpO1xuXG5cdFx0aWYgKHR5cGVvZiBpbml0ICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR0aGlzLmFkZChpbml0KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSXRlcmF0b3IgcHJvdG9jb2xcblx0ICpcblx0ICogQHJldHVybiB7U3ltYm9sLml0ZXJhdG9yfVxuXHQgKi9cblx0Z2V0SXRlcmF0b3IoKSB7XG5cdFx0cmV0dXJuIHRoaXNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEl0ZXJhdG9yXG5cdCAqXG5cdCAqIEByZXR1cm4ge3tuZXh0OiAoKGZ1bmN0aW9uKCk6ICh7dmFsdWU6ICosIGRvbmU6IGJvb2xlYW59KSl8Kil9fVxuXHQgKi9cblx0W1N5bWJvbC5pdGVyYXRvcl0oKSB7XG5cdFx0Ly8gVXNlIGEgbmV3IGluZGV4IGZvciBlYWNoIGl0ZXJhdG9yLiBUaGlzIG1ha2VzIG11bHRpcGxlXG5cdFx0Ly8gaXRlcmF0aW9ucyBvdmVyIHRoZSBpdGVyYWJsZSBzYWZlIGZvciBub24tdHJpdmlhbCBjYXNlcyxcblx0XHQvLyBzdWNoIGFzIHVzZSBvZiBicmVhayBvciBuZXN0ZWQgbG9vcGluZyBvdmVyIHRoZSBzYW1lIGl0ZXJhYmxlLlxuXHRcdGxldCBpbmRleCA9IDA7XG5cdFx0Y29uc3QgZW50cmllcyA9IHRoaXMuZW50cmllcygpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG5leHQ6ICgpID0+IHtcblx0XHRcdFx0aWYgKGluZGV4IDwgZW50cmllcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRyZXR1cm4geyB2YWx1ZTogZW50cmllcz8uW2luZGV4KytdLCBkb25lOiBmYWxzZSB9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiB7IGRvbmU6IHRydWUgfTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdHJ1ZSBpZiBpdCBjb250YWlucyB0b2tlbiwgb3RoZXJ3aXNlIGZhbHNlXG5cdCAqXG5cdCAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy90b2tlbmxpc3QtMi5tanNcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gdmFsdWVcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGNvbnRhaW5zKHZhbHVlKSB7XG5cdFx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0dmFsdWUgPSB2YWx1ZS50cmltKCk7XG5cdFx0XHRsZXQgY291bnRlciA9IDA7XG5cdFx0XHR2YWx1ZS5zcGxpdChcIiBcIikuZm9yRWFjaCgodG9rZW4pID0+IHtcblx0XHRcdFx0aWYgKHRoaXMudG9rZW5zLmhhcyh0b2tlbi50cmltKCkpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRjb3VudGVyKys7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBjb3VudGVyID4gMCA/IHRydWUgOiBmYWxzZTtcblx0XHR9XG5cblx0XHRpZiAoaXNJdGVyYWJsZSh2YWx1ZSkpIHtcblx0XHRcdGxldCBjb3VudGVyID0gMDtcblx0XHRcdGZvciAoY29uc3QgdG9rZW4gb2YgdmFsdWUpIHtcblx0XHRcdFx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHRcdFx0XHRpZiAodGhpcy50b2tlbnMuaGFzKHRva2VuLnRyaW0oKSkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGNvdW50ZXIrKztcblx0XHRcdH1cblx0XHRcdHJldHVybiBjb3VudGVyID4gMCA/IHRydWUgOiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIHRva2Vuc1xuXHQgKlxuXHQgKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvdG9rZW5saXN0LTMubWpzXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfGl0ZXJhdGFibGV9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1Rva2VuTGlzdH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB2YWx1ZVxuXHQgKi9cblx0YWRkKHZhbHVlKSB7XG5cdFx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0dmFsdWUuc3BsaXQoXCIgXCIpLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRcdHRoaXMudG9rZW5zLmFkZCh0b2tlbi50cmltKCkpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuXHRcdFx0Zm9yIChjb25zdCB0b2tlbiBvZiB2YWx1ZSkge1xuXHRcdFx0XHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdFx0XHRcdHRoaXMudG9rZW5zLmFkZCh0b2tlbi50cmltKCkpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidW5zdXBwb3J0ZWQgdmFsdWVcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmVtb3ZlIGFsbCB0b2tlbnNcblx0ICpcblx0ICogQHJldHVybiB7VG9rZW5MaXN0fVxuXHQgKi9cblx0Y2xlYXIoKSB7XG5cdFx0dGhpcy50b2tlbnMuY2xlYXIoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRva2VuXG5cdCAqXG5cdCAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy90b2tlbmxpc3QtNC5tanNcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gdmFsdWVcblx0ICogQHJldHVybiB7VG9rZW5MaXN0fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHZhbHVlXG5cdCAqL1xuXHRyZW1vdmUodmFsdWUpIHtcblx0XHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0XHR2YWx1ZS5zcGxpdChcIiBcIikuZm9yRWFjaCgodG9rZW4pID0+IHtcblx0XHRcdFx0dGhpcy50b2tlbnMuZGVsZXRlKHRva2VuLnRyaW0oKSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKGlzSXRlcmFibGUodmFsdWUpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHRva2VuIG9mIHZhbHVlKSB7XG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0XHRcdFx0dGhpcy50b2tlbnMuZGVsZXRlKHRva2VuLnRyaW0oKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ1bnN1cHBvcnRlZCB2YWx1ZVwiLCBcInR5cGVzL3Rva2VubGlzdC5tanNcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogdGhpcyBtZXRob2QgcmVwbGFjZXMgYSB0b2tlbiB3aXRoIGEgbmV3IHRva2VuLlxuXHQgKlxuXHQgKiBpZiB0aGUgcGFzc2VkIHRva2VuIGV4aXN0cywgaXQgaXMgcmVwbGFjZWQgd2l0aCBuZXdUb2tlbiBhbmQgVG9rZW5MaXN0IGlzIHJldHVybmVkLlxuXHQgKiBpZiB0aGUgdG9rZW4gZG9lcyBub3QgZXhpc3QsIG5ld1Rva2VuIGlzIG5vdCBzZXQgYW5kIFRva2VuTGlzdCBpcyByZXR1cm5lZC5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuZXdUb2tlblxuXHQgKiBAcmV0dXJuIHtUb2tlbkxpc3R9XG5cdCAqL1xuXHRyZXBsYWNlKHRva2VuLCBuZXdUb2tlbikge1xuXHRcdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0XHR2YWxpZGF0ZVN0cmluZyhuZXdUb2tlbik7XG5cdFx0aWYgKCF0aGlzLmNvbnRhaW5zKHRva2VuKSkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYSA9IEFycmF5LmZyb20odGhpcy50b2tlbnMpO1xuXHRcdGNvbnN0IGkgPSBhLmluZGV4T2YodG9rZW4pO1xuXHRcdGlmIChpID09PSAtMSkgcmV0dXJuIHRoaXM7XG5cblx0XHRhLnNwbGljZShpLCAxLCBuZXdUb2tlbik7XG5cdFx0dGhpcy50b2tlbnMgPSBuZXcgU2V0KCk7XG5cdFx0dGhpcy5hZGQoYSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRva2VuIGZyb20gc3RyaW5nLiBJZiB0b2tlbiBkb2Vzbid0IGV4aXN0IGl0J3MgYWRkZWQuXG5cdCAqXG5cdCAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy90b2tlbmxpc3QtNS5tanNcblx0ICogQHBhcmFtIHthcnJheXxzdHJpbmd8aXRlcmF0YWJsZX0gdmFsdWVcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB2YWx1ZVxuXHQgKi9cblx0dG9nZ2xlKHZhbHVlKSB7XG5cdFx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0dmFsdWUuc3BsaXQoXCIgXCIpLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRcdHRvZ2dsZVZhbHVlLmNhbGwodGhpcywgdG9rZW4pO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuXHRcdFx0Zm9yIChjb25zdCB0b2tlbiBvZiB2YWx1ZSkge1xuXHRcdFx0XHR0b2dnbGVWYWx1ZS5jYWxsKHRoaXMsIHRva2VuKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInVuc3VwcG9ydGVkIHZhbHVlXCIsIFwidHlwZXMvdG9rZW5saXN0Lm1qc1wiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZXR1cm5zIGFuIGFycmF5IHdpdGggYWxsIHRva2Vuc1xuXHQgKlxuXHQgKiBAcmV0dXJuIHthcnJheX1cblx0ICovXG5cdGVudHJpZXMoKSB7XG5cdFx0cmV0dXJuIEFycmF5LmZyb20odGhpcy50b2tlbnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIGV4ZWN1dGVzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiB3aXRoIGVhY2ggdmFsdWUgb2YgdGhlIHNldFxuXHQgKlxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAcmV0dXJuIHtUb2tlbkxpc3R9XG5cdCAqL1xuXHRmb3JFYWNoKGNhbGxiYWNrKSB7XG5cdFx0dmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjayk7XG5cdFx0dGhpcy50b2tlbnMuZm9yRWFjaChjYWxsYmFjayk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmV0dXJucyB0aGUgaW5kaXZpZHVhbCB0b2tlbnMgc2VwYXJhdGVkIGJ5IGEgYmxhbmsgY2hhcmFjdGVyXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzLmVudHJpZXMoKS5qb2luKFwiIFwiKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdG9rZW5cbiAqIEByZXR1cm4ge3RvZ2dsZVZhbHVlfVxuICogQHRocm93cyB7RXJyb3J9IG11c3QgYmUgY2FsbGVkIHdpdGggVG9rZW5MaXN0LmNhbGxcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlVmFsdWUodG9rZW4pIHtcblx0aWYgKCEodGhpcyBpbnN0YW5jZW9mIFRva2VuTGlzdCkpXG5cdFx0dGhyb3cgRXJyb3IoXCJtdXN0IGJlIGNhbGxlZCB3aXRoIFRva2VuTGlzdC5jYWxsXCIpO1xuXHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdHRva2VuID0gdG9rZW4udHJpbSgpO1xuXHRpZiAodGhpcy5jb250YWlucyh0b2tlbikpIHtcblx0XHR0aGlzLnJlbW92ZSh0b2tlbik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0dGhpcy5hZGQodG9rZW4pO1xuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5leHBvcnQge1xuXHRERUZBVUxUX1RIRU1FLFxuXHRBVFRSSUJVVEVfUFJFRklYLFxuXHRBVFRSSUJVVEVfT1BUSU9OUyxcblx0QVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IsXG5cdEFUVFJJQlVURV9USEVNRV9QUkVGSVgsXG5cdEFUVFJJQlVURV9USEVNRV9OQU1FLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9TRUxFQ1RfVEhJUyxcblx0QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSxcblx0QVRUUklCVVRFX1VQREFURVJfSU5TRVJULFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9SRU1PVkUsXG5cdEFUVFJJQlVURV9VUERBVEVSX0JJTkQsXG5cdEFUVFJJQlVURV9VUERBVEVSX0JJTkRfVFlQRSxcblx0QVRUUklCVVRFX1RFTVBMQVRFX1BSRUZJWCxcblx0QVRUUklCVVRFX1JPTEUsXG5cdEFUVFJJQlVURV9ESVNBQkxFRCxcblx0QVRUUklCVVRFX1ZBTFVFLFxuXHRBVFRSSUJVVEVfT0JKRUNUTElOSyxcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0VEFHX1NDUklQVCxcblx0VEFHX1NUWUxFLFxuXHRUQUdfTElOSyxcblx0QVRUUklCVVRFX0lELFxuXHRBVFRSSUJVVEVfQ0xBU1MsXG5cdEFUVFJJQlVURV9USVRMRSxcblx0QVRUUklCVVRFX1NSQyxcblx0QVRUUklCVVRFX0hSRUYsXG5cdEFUVFJJQlVURV9UWVBFLFxuXHRBVFRSSUJVVEVfTk9OQ0UsXG5cdEFUVFJJQlVURV9UUkFOU0xBVEUsXG5cdEFUVFJJQlVURV9UQUJJTkRFWCxcblx0QVRUUklCVVRFX1NQRUxMQ0hFQ0ssXG5cdEFUVFJJQlVURV9TTE9ULFxuXHRBVFRSSUJVVEVfUEFSVCxcblx0QVRUUklCVVRFX0xBTkcsXG5cdEFUVFJJQlVURV9JVEVNVFlQRSxcblx0QVRUUklCVVRFX0lURU1TQ09QRSxcblx0QVRUUklCVVRFX0lURU1SRUYsXG5cdEFUVFJJQlVURV9JVEVNSUQsXG5cdEFUVFJJQlVURV9JVEVNUFJPUCxcblx0QVRUUklCVVRFX0lTLFxuXHRBVFRSSUJVVEVfSU5QVVRNT0RFLFxuXHRBVFRSSUJVVEVfQUNDRVNTS0VZLFxuXHRBVFRSSUJVVEVfQVVUT0NBUElUQUxJWkUsXG5cdEFUVFJJQlVURV9BVVRPRk9DVVMsXG5cdEFUVFJJQlVURV9DT05URU5URURJVEFCTEUsXG5cdEFUVFJJQlVURV9ESVIsXG5cdEFUVFJJQlVURV9EUkFHR0FCTEUsXG5cdEFUVFJJQlVURV9FTlRFUktFWUhJTlQsXG5cdEFUVFJJQlVURV9FWFBPUlRQQVJUUyxcblx0QVRUUklCVVRFX0hJRERFTixcblx0QVRUUklCVVRFX0ZPUk1fQklORCxcblx0QVRUUklCVVRFX0ZPUk1fQklORF9UWVBFLFxuXHRvYmplY3RVcGRhdGVyTGlua1N5bWJvbCxcblx0Y3VzdG9tRWxlbWVudFVwZGF0ZXJMaW5rU3ltYm9sLFxuXHRpbml0Q29udHJvbENhbGxiYWNrTmFtZSxcblx0QVRUUklCVVRFX1NDUklQVF9IT1NULFxuXHRBVFRSSUJVVEVfSU5JVF9DQUxMQkFDSyxcbn07XG5cbi8qKlxuICogZGVmYXVsdCB0aGVtZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgREVGQVVMVF9USEVNRSA9IFwibW9uc3RlclwiO1xuXG4vKipcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfUFJFRklYID0gXCJkYXRhLW1vbnN0ZXItXCI7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIHBhc3Mgb3B0aW9ucyB0byBhIGNvbnRyb2xcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX09QVElPTlMgPSBgJHtBVFRSSUJVVEVfUFJFRklYfW9wdGlvbnNgO1xuXG4vKipcbiAqIFRoaXMgaXMgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIHBhc3MgdGhlIHNjcmlwdCBob3N0IHRvIGEgY29udHJvbFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNDguMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX1NDUklQVF9IT1NUID0gYCR7QVRUUklCVVRFX1BSRUZJWH1zY3JpcHQtaG9zdGA7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIHBhc3Mgb3B0aW9ucyB0byBhIGNvbnRyb2xcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMwLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SID0gYCR7QVRUUklCVVRFX1BSRUZJWH1vcHRpb25zLXNlbGVjdG9yYDtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gcGFzcyB0aGUgY2FsbGJhY2sgdG8gYSBjb250cm9sXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy40OC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfSU5JVF9DQUxMQkFDSyA9IGAke0FUVFJJQlVURV9QUkVGSVh9aW5pdC1jYWxsYmFja2A7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgY2FsbGJhY2sgdG8gcGFzcyB0aGUgY2FsbGJhY2sgdG8gYSBjb250cm9sXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy40OC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBpbml0Q29udHJvbENhbGxiYWNrTmFtZSA9IGBpbml0Q3VzdG9tQ29udHJvbENhbGxiYWNrYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1RIRU1FX1BSRUZJWCA9IGAke0FUVFJJQlVURV9QUkVGSVh9dGhlbWUtYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfVEhFTUVfTkFNRSA9IGAke0FUVFJJQlVURV9USEVNRV9QUkVGSVh9bmFtZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWF0dHJpYnV0ZXNgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI3LjFcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfU0VMRUNUX1RISVMgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXNlbGVjdC10aGlzYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9cmVwbGFjZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVCA9IGAke0FUVFJJQlVURV9QUkVGSVh9aW5zZXJ0YDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9aW5zZXJ0LXJlZmVyZW5jZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX1JFTU9WRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9cmVtb3ZlYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1VQREFURVJfQklORCA9IGAke0FUVFJJQlVURV9QUkVGSVh9YmluZGA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX0JJTkRfVFlQRSA9IGAke0FUVFJJQlVURV9VUERBVEVSX0JJTkR9LXR5cGVgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBkZXByZWNhdGVkIHNpbmNlIDIwMjQtMTItMjlcbiAqIEBzaW5jZSAzLjczLjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0ZPUk1fQklORCA9IGAke0FUVFJJQlVURV9QUkVGSVh9Zm9ybS1iaW5kYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy43My4wXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSAyMDI0LTEyLTI5XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9GT1JNX0JJTkRfVFlQRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9Zm9ybS1iaW5kLXR5cGVgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI3LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1RFTVBMQVRFX1BSRUZJWCA9IGAke0FUVFJJQlVURV9QUkVGSVh9dGVtcGxhdGUtcHJlZml4YDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9ST0xFID0gYCR7QVRUUklCVVRFX1BSRUZJWH1yb2xlYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9ESVNBQkxFRCA9IFwiZGlzYWJsZWRcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9WQUxVRSA9IFwidmFsdWVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX09CSkVDVExJTksgPSBgJHtBVFRSSUJVVEVfUFJFRklYfW9iamVjdGxpbmtgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0VSUk9STUVTU0FHRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9ZXJyb3JgO1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3Qgb2JqZWN0VXBkYXRlckxpbmtTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAb2JqZWN0LXVwZGF0ZXItbGlua1wiLFxuKTtcblxuLyoqXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKi9cbmNvbnN0IGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vY3VzdG9tLWVsZW1lbnRAQG9wdGlvbnMtdXBkYXRlci1saW5rXCIsXG4pO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgVEFHX1NDUklQVCA9IFwic2NyaXB0XCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBUQUdfU1RZTEUgPSBcInN0eWxlXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBUQUdfTElOSyA9IFwibGlua1wiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuXG5jb25zdCBBVFRSSUJVVEVfSUQgPSBcImlkXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5cbmNvbnN0IEFUVFJJQlVURV9DTEFTUyA9IFwiY2xhc3NcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9USVRMRSA9IFwidGl0bGVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9TUkMgPSBcInNyY1wiO1xuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9IUkVGID0gXCJocmVmXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVFlQRSA9IFwidHlwZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX05PTkNFID0gXCJub25jZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1RSQU5TTEFURSA9IFwidHJhbnNsYXRlXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVEFCSU5ERVggPSBcInRhYmluZGV4XCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfU1BFTExDSEVDSyA9IFwic3BlbGxjaGVja1wiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1NMT1QgPSBcInNsb3RcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9QQVJUID0gXCJwYXJ0XCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfTEFORyA9IFwibGFuZ1wiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0lURU1UWVBFID0gXCJpdGVtdHlwZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0lURU1TQ09QRSA9IFwiaXRlbXNjb3BlXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVRFTVJFRiA9IFwiaXRlbXJlZlwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0lURU1JRCA9IFwiaXRlbWlkXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVRFTVBST1AgPSBcIml0ZW1wcm9wXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSVMgPSBcImlzXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSU5QVVRNT0RFID0gXCJpbnB1dG1vZGVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9BQ0NFU1NLRVkgPSBcImFjY2Vzc2tleVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0FVVE9DQVBJVEFMSVpFID0gXCJhdXRvY2FwaXRhbGl6ZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0FVVE9GT0NVUyA9IFwiYXV0b2ZvY3VzXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfQ09OVEVOVEVESVRBQkxFID0gXCJjb250ZW50ZWRpdGFibGVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9ESVIgPSBcImRpclwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0RSQUdHQUJMRSA9IFwiZHJhZ2dhYmxlXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRU5URVJLRVlISU5UID0gXCJlbnRlcmtleWhpbnRcIjtcbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRVhQT1JUUEFSVFMgPSBcImV4cG9ydHBhcnRzXCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0hJRERFTiA9IFwiaGlkZGVuXCI7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZ2V0R2xvYmFsRnVuY3Rpb24gfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgVG9rZW5MaXN0IH0gZnJvbSBcIi4uL3R5cGVzL3Rva2VubGlzdC5tanNcIjtcbmltcG9ydCB7XG5cdHZhbGlkYXRlSW5zdGFuY2UsXG5cdHZhbGlkYXRlU3RyaW5nLFxuXHR2YWxpZGF0ZVN5bWJvbCxcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX09CSkVDVExJTksgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7XG5cdGZpbmRDbG9zZXN0T2JqZWN0TGluayxcblx0YWRkVG9PYmplY3RMaW5rLFxuXHRyZW1vdmVPYmplY3RMaW5rLFxuXHRoYXNPYmplY3RMaW5rLFxuXHRnZXRMaW5rZWRPYmplY3RzLFxuXHR0b2dnbGVBdHRyaWJ1dGVUb2tlbixcblx0YWRkQXR0cmlidXRlVG9rZW4sXG5cdHJlbW92ZUF0dHJpYnV0ZVRva2VuLFxuXHRjb250YWluc0F0dHJpYnV0ZVRva2VuLFxuXHRyZXBsYWNlQXR0cmlidXRlVG9rZW4sXG5cdGNsZWFyQXR0cmlidXRlVG9rZW5zLFxuXHRmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlLFxuXHRmaW5kQ2xvc2VzdEJ5Q2xhc3MsXG59O1xuXG4vKipcbiAqIEdldCB0aGUgY2xvc2VzdCBvYmplY3QgbGluayBvZiBhIG5vZGVcbiAqXG4gKiBpZiBhIG5vZGUgaXMgc3BlY2lmaWVkIHdpdGhvdXQgYSBvYmplY3QgbGluaywgYSByZWN1cnNpdmUgc2VhcmNoIHVwd2FyZHMgaXMgcGVyZm9ybWVkIHVudGlsIHRoZSBjb3JyZXNwb25kaW5nXG4gKiBvYmplY3QgbGluayBpcyBmb3VuZCwgb3IgdW5kZWZpbmVkIGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fHVuZGVmaW5lZH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGZpbmRDbG9zZXN0T2JqZWN0TGluayhlbGVtZW50KSB7XG5cdHJldHVybiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGVsZW1lbnQsIEFUVFJJQlVURV9PQkpFQ1RMSU5LKTtcbn1cblxuLyoqXG4gKiBBZGRzIGEgY2xhc3MgYXR0cmlidXRlIHRvIGFuIGVsZW1lbnQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0gZWxlbWVudFxuICogQHBhcmFtIHN5bWJvbFxuICogQHBhcmFtIG9iamVjdFxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gYWRkVG9PYmplY3RMaW5rKGVsZW1lbnQsIHN5bWJvbCwgb2JqZWN0KSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN5bWJvbChzeW1ib2wpO1xuXG5cdGlmIChlbGVtZW50Py5bc3ltYm9sXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0ZWxlbWVudFtzeW1ib2xdID0gbmV3IFNldCgpO1xuXHR9XG5cblx0YWRkQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgQVRUUklCVVRFX09CSkVDVExJTkssIHN5bWJvbC50b1N0cmluZygpKTtcblx0ZWxlbWVudFtzeW1ib2xdLmFkZChvYmplY3QpO1xuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFuIG9iamVjdCBmcm9tIGFuIGVsZW1lbnRcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7U3ltYm9sfSBzeW1ib2xcbiAqIEByZXR1cm4geyp9XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZU9iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN5bWJvbChzeW1ib2wpO1xuXG5cdGlmIChlbGVtZW50Py5bc3ltYm9sXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBBVFRSSUJVVEVfT0JKRUNUTElOSywgc3ltYm9sLnRvU3RyaW5nKCkpO1xuXHRkZWxldGUgZWxlbWVudFtzeW1ib2xdO1xuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZWxlbWVudCBoYXMgYW4gb2JqZWN0IGxpbmtcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7U3ltYm9sfSBzeW1ib2xcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc09iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN5bWJvbChzeW1ib2wpO1xuXG5cdGlmIChlbGVtZW50Py5bc3ltYm9sXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIGNvbnRhaW5zQXR0cmlidXRlVG9rZW4oXG5cdFx0ZWxlbWVudCxcblx0XHRBVFRSSUJVVEVfT0JKRUNUTElOSyxcblx0XHRzeW1ib2wudG9TdHJpbmcoKSxcblx0KTtcbn1cblxuLyoqXG4gKiBUaGUgT2JqZWN0TGluayBjYW4gYmUgdXNlZCB0byBhdHRhY2ggb2JqZWN0cyB0byBIVE1MRWxlbWVudHMuIFRoZSBlbGVtZW50cyBhcmUga2VwdCBpbiBhIHNldCB1bmRlciBhIHVuaXF1ZVxuICogc3ltYm9sIGFuZCBjYW4gYmUgcmVhZCB2aWEgYW4gaXRlcmF0b3Ige0BzZWUge0BsaW5rIGdldExpbmtlZE9iamVjdHN9fS5cbiAqXG4gKiBJbiBhZGRpdGlvbiwgZWxlbWVudHMgd2l0aCBhbiBvYmplY3RMaW5rIHJlY2VpdmUgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9iamVjdGxpbmtgLlxuICpcbiAqIFdpdGggdGhlIG1ldGhvZCAge0BzZWUge0BsaW5rIGFkZFRvT2JqZWN0TGlua319IHRoZSBvYmplY3RzIGNhbiBiZSBhZGRlZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7U3ltYm9sfSBzeW1ib2xcbiAqIEByZXR1cm4ge0l0ZXJhdG9yfVxuICogQHRocm93cyB7RXJyb3J9IHRoZXJlIGlzIG5vIG9iamVjdCBsaW5rIGZvciBzeW1ib2xcbiAqL1xuZnVuY3Rpb24gZ2V0TGlua2VkT2JqZWN0cyhlbGVtZW50LCBzeW1ib2wpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3ltYm9sKHN5bWJvbCk7XG5cblx0aWYgKGVsZW1lbnQ/LltzeW1ib2xdID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYHRoZXJlIGlzIG5vIG9iamVjdCBsaW5rIGZvciAke3N5bWJvbC50b1N0cmluZygpfWApO1xuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnQ/LltzeW1ib2xdW1N5bWJvbC5pdGVyYXRvcl0oKTtcbn1cblxuLyoqXG4gKiBXaXRoIHRoaXMgbWV0aG9kIHRva2VucyBpbiBhbiBhdHRyaWJ1dGUgY2FuIGJlIHN3aXRjaGVkIG9uIG9yIG9mZi4gRm9yIGV4YW1wbGUsIGNsYXNzZXMgY2FuIGJlIHN3aXRjaGVkIG9uIGFuZCBvZmYgaW4gdGhlIGVsZW1lbnRzIGNsYXNzIGF0dHJpYnV0ZS5cbiAqXG4gKiBUb2tlbnMgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgdG9rZW4pIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0dmFsaWRhdGVTdHJpbmcoa2V5KTtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkpIHtcblx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIHRva2VuKTtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdGVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdGtleSxcblx0XHRuZXcgVG9rZW5MaXN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSkpLnRvZ2dsZSh0b2tlbikudG9TdHJpbmcoKSxcblx0KTtcblxuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBhZGQgYSB0b2tlbiB0byBhbiBhdHRyaWJ1dGUuIFRva2VucyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBhIHNwYWNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gYWRkQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB0b2tlbikge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgdG9rZW4pO1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXG5cdFx0a2V5LFxuXHRcdG5ldyBUb2tlbkxpc3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KSkuYWRkKHRva2VuKS50b1N0cmluZygpLFxuXHQpO1xuXG5cdHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gcmVtb3ZlIHRva2VucyBmcm9tIGFuIGF0dHJpYnV0ZS5cbiAqXG4gKiBUb2tlbnMgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgdG9rZW4pIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0dmFsaWRhdGVTdHJpbmcoa2V5KTtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkpIHtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdGVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdGtleSxcblx0XHRuZXcgVG9rZW5MaXN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSkpLnJlbW92ZSh0b2tlbikudG9TdHJpbmcoKSxcblx0KTtcblxuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhbiBhdHRyaWJ1dGUgaGFzIGEgdG9rZW4uXG4gKlxuICogVG9rZW5zIGFyZSBhbHdheXMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB0b2tlbikge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiBuZXcgVG9rZW5MaXN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSkpLmNvbnRhaW5zKHRva2VuKTtcbn1cblxuLyoqXG4gKiBUb2tlbnMgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBmcm9tXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9cbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fVxuICovXG5mdW5jdGlvbiByZXBsYWNlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCBmcm9tLCB0bykge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTdHJpbmcoZnJvbSk7XG5cdHZhbGlkYXRlU3RyaW5nKHRvKTtcblx0dmFsaWRhdGVTdHJpbmcoa2V5KTtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkpIHtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdGVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdGtleSxcblx0XHRuZXcgVG9rZW5MaXN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSkpLnJlcGxhY2UoZnJvbSwgdG8pLnRvU3RyaW5nKCksXG5cdCk7XG5cblx0cmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogVG9rZW5zIGFyZSBhbHdheXMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gY2xlYXJBdHRyaWJ1dGVUb2tlbnMoZWxlbWVudCwga2V5KSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCBcIlwiKTtcblxuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzLCBzdGFydGluZyBmcm9tIGFuIGBIVE1MRWxlbWVtZW50YCwgZm9yIHRoZSBuZXh0IGVsZW1lbnQgdGhhdCBoYXMgYSBjZXJ0YWluIGF0dHJpYnV0ZS5cbiAqXG4gKiBgYGBodG1sXG4gKiA8ZGl2IGRhdGEtbXktYXR0cmlidXRlPVwiMlwiIGlkPVwiMlwiPlxuICogICAgIDxkaXYgaWQ9XCIxXCI+PC9kaXY+XG4gKiA8L2Rpdj5cbiAqIGBgYFxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIC8vIGlmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCAodW5kZWZpbmVkKSwgdGhlbiBvbmx5IHRoZSBhdHRyaWJ1dGUgaXMgY2hlY2tlZC5cbiAqIGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzEnKSwnZGF0YS1teS1hdHRyaWJ1dGUnKTsgLy8gXHUyMUE2IG5vZGUgd2l0aCBpZCAyXG4gKiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcyJyksJ2RhdGEtbXktYXR0cmlidXRlJyk7IC8vIFx1MjFBNiBub2RlIHdpdGggaWQgMlxuICpcbiAqIC8vIGlmIGEgdmFsdWUgaXMgc3BlY2lmaWVkLCBmb3IgZXhhbXBsZSBhbiBlbXB0eSBzdHJpbmcsIHRoZW4gdGhlIG5hbWUgYW5kIHRoZSB2YWx1ZSBhcmUgY2hlY2tlZC5cbiAqIGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzEnKSwnZGF0YS1teS1hdHRyaWJ1dGUnLCAnJyk7ICAvLyBcdTIxQTYgdW5kZWZpbmVkXG4gKiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcxJyksJ2RhdGEtbXktYXR0cmlidXRlJywgJzInKTsgLy8gXHUyMUE2IG5vZGUgd2l0aCBpZCAyXG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHZhbHVlXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudHx1bmRlZmluZWR9XG4gKiBAc3VtbWFyeSBmaW5kIGNsb3Nlc3Qgbm9kZVxuICovXG5mdW5jdGlvbiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGVsZW1lbnQsIGtleSwgdmFsdWUpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBnZXRHbG9iYWxGdW5jdGlvbihcIkhUTUxFbGVtZW50XCIpKTtcblxuXHRpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoa2V5KSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHR9XG5cblx0XHRpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KSA9PT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0fVxuXG5cdGxldCBzZWxlY3RvciA9IHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cdGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSBzZWxlY3RvciArPSBgPSR7dmFsaWRhdGVTdHJpbmcodmFsdWUpfWA7XG5cdGNvbnN0IHJlc3VsdCA9IGVsZW1lbnQuY2xvc2VzdChgWyR7c2VsZWN0b3J9XWApO1xuXHRpZiAocmVzdWx0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBzZWFyY2hlcywgc3RhcnRpbmcgZnJvbSBhbiBgSFRNTEVsZW1lbnRgLCBmb3IgdGhlIG5leHQgZWxlbWVudCB0aGF0IGhhcyBhIGNlcnRhaW4gYXR0cmlidXRlLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxkaXYgY2xhc3M9XCJteWNsYXNzXCIgaWQ9XCIyXCI+XG4gKiAgICAgPGRpdiBpZD1cIjFcIj48L2Rpdj5cbiAqIDwvZGl2PlxuICogYGBgXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogLy8gaWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkICh1bmRlZmluZWQpLCB0aGVuIG9ubHkgdGhlIGF0dHJpYnV0ZSBpcyBjaGVja2VkLlxuICogZmluZENsb3Nlc3RCeUNsYXNzKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcxJyksJ215Y2xhc3MnKTsgLy8gXHUyMUE2IG5vZGUgd2l0aCBpZCAyXG4gKiBmaW5kQ2xvc2VzdEJ5Q2xhc3MoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJzInKSwnbXljbGFzcycpOyAvLyBcdTIxQTYgbm9kZSB3aXRoIGlkIDJcbiAqIGBgYFxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge2ZpbmRDbG9zZXN0QnlDbGFzc30gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvZG9tL2F0dHJpYnV0ZXMubWpzJztcbiAqIGZpbmRDbG9zZXN0QnlDbGFzcygpO1xuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI3LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NOYW1lXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudHx1bmRlZmluZWR9XG4gKiBAc3VtbWFyeSBmaW5kIGNsb3Nlc3Qgbm9kZVxuICovXG5mdW5jdGlvbiBmaW5kQ2xvc2VzdEJ5Q2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgZ2V0R2xvYmFsRnVuY3Rpb24oXCJIVE1MRWxlbWVudFwiKSk7XG5cblx0aWYgKGVsZW1lbnQ/LmNsYXNzTGlzdD8uY29udGFpbnModmFsaWRhdGVTdHJpbmcoY2xhc3NOYW1lKSkpIHtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdGNvbnN0IHJlc3VsdCA9IGVsZW1lbnQuY2xvc2VzdChgLiR7Y2xhc3NOYW1lfWApO1xuXHRpZiAocmVzdWx0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7XG5cdGdldERvY3VtZW50LFxuXHRnZXRXaW5kb3csXG5cdGdldERvY3VtZW50RnJhZ21lbnRGcm9tU3RyaW5nLFxuXHRmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMsXG5cdGdldENvbnRhaW5pbmdEb2N1bWVudCxcblx0Z2V0UmVnaXN0ZXJlZEN1c3RvbUVsZW1lbnRzLFxuXHRmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHMsXG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGZldGNoZXMgdGhlIGRvY3VtZW50IG9iamVjdFxuICpcbiAqIEluIG5vZGVqcyB0aGlzIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIHBlcmZvcm1lZCB3aXRoIFtqc2RvbV0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvanNkb20pLlxuICpcbiAqIGBgYFxuICogaW1wb3J0IHtKU0RPTX0gZnJvbSBcImpzZG9tXCJcbiAqIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcIm9iamVjdFwiKSB7XG4gKiAgICBjb25zdCB7d2luZG93fSA9IG5ldyBKU0RPTSgnJywge1xuICogICAgICAgIHVybDogJ2h0dHA6Ly9leGFtcGxlLmNvbS8nLFxuICogICAgICAgIHByZXRlbmRUb0JlVmlzdWFsOiB0cnVlXG4gKiAgICB9KTtcbiAqXG4gKiAgICBbXG4gKiAgICAgICAgJ3NlbGYnLFxuICogICAgICAgICdkb2N1bWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50JyxcbiAqICAgICAgICAnTm9kZScsXG4gKiAgICAgICAgJ0VsZW1lbnQnLFxuICogICAgICAgICdIVE1MRWxlbWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50RnJhZ21lbnQnLFxuICogICAgICAgICdET01QYXJzZXInLFxuICogICAgICAgICdYTUxTZXJpYWxpemVyJyxcbiAqICAgICAgICAnTm9kZUZpbHRlcicsXG4gKiAgICAgICAgJ0lucHV0RXZlbnQnLFxuICogICAgICAgICdDdXN0b21FdmVudCdcbiAqICAgIF0uZm9yRWFjaChrZXkgPT4gKGdldEdsb2JhbCgpW2tleV0gPSB3aW5kb3dba2V5XSkpO1xuICogfVxuICogYGBgXG4gKlxuICogQHJldHVybiB7b2JqZWN0fVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IHN1cHBvcnRlZCBlbnZpcm9ubWVudFxuICovXG5mdW5jdGlvbiBnZXREb2N1bWVudCgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXRHbG9iYWwoKT8uW1wiZG9jdW1lbnRcIl07XG5cdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwib2JqZWN0XCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub3Qgc3VwcG9ydGVkIGVudmlyb25tZW50XCIpO1xuXHR9XG5cblx0cmV0dXJuIGRvY3VtZW50O1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGZldGNoZXMgdGhlIHdpbmRvdyBvYmplY3RcbiAqXG4gKiBJbiBub2RlanMgdGhpcyBmdW5jdGlvbmFsaXR5IGNhbiBiZSBwZXJmb3JtZWQgd2l0aCBbanNkb21dKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2pzZG9tKS5cbiAqXG4gKiBgYGBcbiAqIGltcG9ydCB7SlNET019IGZyb20gXCJqc2RvbVwiXG4gKiBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJvYmplY3RcIikge1xuICogICAgY29uc3Qge3dpbmRvd30gPSBuZXcgSlNET00oJycsIHtcbiAqICAgICAgICB1cmw6ICdodHRwOi8vZXhhbXBsZS5jb20vJyxcbiAqICAgICAgICBwcmV0ZW5kVG9CZVZpc3VhbDogdHJ1ZVxuICogICAgfSk7XG4gKlxuICogICAgZ2V0R2xvYmFsKClbJ3dpbmRvdyddPXdpbmRvdztcbiAqXG4gKiAgICBbXG4gKiAgICAgICAgJ3NlbGYnLFxuICogICAgICAgICdkb2N1bWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50JyxcbiAqICAgICAgICAnTm9kZScsXG4gKiAgICAgICAgJ0VsZW1lbnQnLFxuICogICAgICAgICdIVE1MRWxlbWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50RnJhZ21lbnQnLFxuICogICAgICAgICdET01QYXJzZXInLFxuICogICAgICAgICdYTUxTZXJpYWxpemVyJyxcbiAqICAgICAgICAnTm9kZUZpbHRlcicsXG4gKiAgICAgICAgJ0lucHV0RXZlbnQnLFxuICogICAgICAgICdDdXN0b21FdmVudCdcbiAqICAgIF0uZm9yRWFjaChrZXkgPT4gKGdldEdsb2JhbCgpW2tleV0gPSB3aW5kb3dba2V5XSkpO1xuICogfVxuICogYGBgXG4gKlxuICogQHJldHVybiB7b2JqZWN0fVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IHN1cHBvcnRlZCBlbnZpcm9ubWVudFxuICovXG5mdW5jdGlvbiBnZXRXaW5kb3coKSB7XG5cdGNvbnN0IHdpbmRvdyA9IGdldEdsb2JhbCgpPy5bXCJ3aW5kb3dcIl07XG5cdGlmICh0eXBlb2Ygd2luZG93ICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm90IHN1cHBvcnRlZCBlbnZpcm9ubWVudFwiKTtcblx0fVxuXG5cdHJldHVybiB3aW5kb3c7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgZmV0Y2hlcyB0aGUgZG9jdW1lbnQgb2JqZWN0XG4gKlxuICogSW4gbm9kZWpzIHRoaXMgZnVuY3Rpb25hbGl0eSBjYW4gYmUgcGVyZm9ybWVkIHdpdGggW2pzZG9tXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9qc2RvbSkuXG4gKlxuICogYGBgXG4gKiBpbXBvcnQge0pTRE9NfSBmcm9tIFwianNkb21cIlxuICogaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwib2JqZWN0XCIpIHtcbiAqICAgIGNvbnN0IHt3aW5kb3d9ID0gbmV3IEpTRE9NKCcnLCB7XG4gKiAgICAgICAgdXJsOiAnaHR0cDovL2V4YW1wbGUuY29tLycsXG4gKiAgICAgICAgcHJldGVuZFRvQmVWaXN1YWw6IHRydWVcbiAqICAgIH0pO1xuICpcbiAqICAgIFtcbiAqICAgICAgICAnc2VsZicsXG4gKiAgICAgICAgJ2RvY3VtZW50JyxcbiAqICAgICAgICAnRG9jdW1lbnQnLFxuICogICAgICAgICdOb2RlJyxcbiAqICAgICAgICAnRWxlbWVudCcsXG4gKiAgICAgICAgJ0hUTUxFbGVtZW50JyxcbiAqICAgICAgICAnRG9jdW1lbnRGcmFnbWVudCcsXG4gKiAgICAgICAgJ0RPTVBhcnNlcicsXG4gKiAgICAgICAgJ1hNTFNlcmlhbGl6ZXInLFxuICogICAgICAgICdOb2RlRmlsdGVyJyxcbiAqICAgICAgICAnSW5wdXRFdmVudCcsXG4gKiAgICAgICAgJ0N1c3RvbUV2ZW50J1xuICogICAgXS5mb3JFYWNoKGtleSA9PiAoZ2V0R2xvYmFsKClba2V5XSA9IHdpbmRvd1trZXldKSk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJuIHtEb2N1bWVudEZyYWdtZW50fVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IHN1cHBvcnRlZCBlbnZpcm9ubWVudFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0RG9jdW1lbnRGcmFnbWVudEZyb21TdHJpbmcoaHRtbCkge1xuXHR2YWxpZGF0ZVN0cmluZyhodG1sKTtcblxuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cdGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuXHR0ZW1wbGF0ZS5pbm5lckhUTUwgPSBodG1sO1xuXG5cdHJldHVybiB0ZW1wbGF0ZS5jb250ZW50O1xufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHNlYXJjaGVzIHVwd2FyZHMgZnJvbSBhIGdpdmVuIGVsZW1lbnQgdG8gZmluZCBhbiBhbmNlc3RvciBlbGVtZW50XG4gKiB3aXRoIGEgc3BlY2lmaWVkIElELCBjb25zaWRlcmluZyBib3RoIG5vcm1hbCBET00gYW5kIHNoYWRvdyBET00uXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudHxTaGFkb3dSb290fSBlbGVtZW50IC0gVGhlIHN0YXJ0aW5nIGVsZW1lbnQgb3Igc2hhZG93IHJvb3QgdG8gc2VhcmNoIGZyb20uXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0SWQgLSBUaGUgSUQgb2YgdGhlIHRhcmdldCBlbGVtZW50IHRvIGZpbmQuXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudHxudWxsfSAtIFRoZSBhbmNlc3RvciBlbGVtZW50IHdpdGggdGhlIHNwZWNpZmllZCBJRCwgb3IgbnVsbCBpZiBub3QgZm91bmQuXG4gKiBAc2luY2UgMy4yOS4wXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhlbGVtZW50LCB0YXJnZXRJZCkge1xuXHRpZiAoIWVsZW1lbnQpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IGVsZW1lbnQgaGFzIHRoZSB0YXJnZXQgSURcblx0aWYgKGVsZW1lbnQuaWQgPT09IHRhcmdldElkKSB7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHQvLyBTZWFyY2ggd2l0aGluIHRoZSBjdXJyZW50IGVsZW1lbnQncyBzaGFkb3cgcm9vdCwgaWYgaXQgZXhpc3RzXG5cdGlmIChlbGVtZW50LnNoYWRvd1Jvb3QpIHtcblx0XHRjb25zdCB0YXJnZXQgPSBlbGVtZW50LnNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0SWQpO1xuXHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdHJldHVybiB0YXJnZXQ7XG5cdFx0fVxuXHR9XG5cblx0Ly8gSWYgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyB0aGUgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBzZWFyY2ggd2l0aGluIHRoZSBtYWluIGRvY3VtZW50XG5cdGlmIChlbGVtZW50ID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgZWxlbWVudCA9PT0gZG9jdW1lbnQpIHtcblx0XHRjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXRJZCk7XG5cdFx0aWYgKHRhcmdldCkge1xuXHRcdFx0cmV0dXJuIHRhcmdldDtcblx0XHR9XG5cdH1cblxuXHQvLyBJZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIGluc2lkZSBhIHNoYWRvdyByb290LCBzZWFyY2ggaXRzIGhvc3QncyBhbmNlc3RvcnNcblx0Y29uc3Qgcm9vdE5vZGUgPSBlbGVtZW50LmdldFJvb3ROb2RlKCk7XG5cdGlmIChyb290Tm9kZSAmJiByb290Tm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcblx0XHRyZXR1cm4gZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzKHJvb3ROb2RlLmhvc3QsIHRhcmdldElkKTtcblx0fVxuXG5cdC8vIE90aGVyd2lzZSwgc2VhcmNoIHRoZSBjdXJyZW50IGVsZW1lbnQncyBwYXJlbnRcblx0cmV0dXJuIGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhlbGVtZW50LnBhcmVudEVsZW1lbnQsIHRhcmdldElkKTtcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBzZWFyY2hlcyB1cHdhcmRzIGZyb20gYSBnaXZlbiBlbGVtZW50IHRvIGZpbmQgYW4gYW5jZXN0b3IgZWxlbWVudFxuICogd2l0aCBhIHNwZWNpZmllZCBzZWxlY3RvciwgY29uc2lkZXJpbmcgYm90aCBub3JtYWwgRE9NIGFuZCBzaGFkb3cgRE9NLlxuICogVGhpcyBtZXRob2QgaXMgdXNlZnVsIGZvciBmaW5kaW5nIGEgcGFyZW50IGVsZW1lbnQgd2l0aCBhIHNwZWNpZmljIGNsYXNzLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8U2hhZG93Um9vdH0gZWxlbWVudCAtIFRoZSBzdGFydGluZyBlbGVtZW50IG9yIHNoYWRvdyByb290IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yIC0gVGhlIHNlbGVjdG9yIG9mIHRoZSB0YXJnZXQgZWxlbWVudCB0byBmaW5kLlxuICogQHJldHVybiB7SFRNTEVsZW1lbnR8bnVsbH0gLSBUaGUgYW5jZXN0b3IgZWxlbWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgc2VsZWN0b3IsIG9yIG51bGwgaWYgbm90IGZvdW5kLlxuICogQHNpbmNlIDMuNTUuMFxuICovXG5mdW5jdGlvbiBmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHMoZWxlbWVudCwgc2VsZWN0b3IpIHtcblx0aWYgKCFlbGVtZW50IHx8ICFzZWxlY3Rvcikge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU2VhcmNoIHdpdGhpbiB0aGUgY3VycmVudCBlbGVtZW50J3Mgc2hhZG93IHJvb3QsIGlmIGl0IGV4aXN0c1xuXHRpZiAoZWxlbWVudC5zaGFkb3dSb290KSB7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZWxlbWVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuXHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdHJldHVybiB0YXJnZXQ7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGVsZW1lbnQgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuXHRcdGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuXHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdHJldHVybiB0YXJnZXQ7XG5cdFx0fVxuXHR9XG5cblx0Ly8gSWYgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyBpbnNpZGUgYSBzaGFkb3cgcm9vdCwgc2VhcmNoIGl0cyBob3N0J3MgYW5jZXN0b3JzXG5cdGNvbnN0IHJvb3ROb2RlID0gZWxlbWVudC5nZXRSb290Tm9kZSgpO1xuXHRpZiAocm9vdE5vZGUgJiYgcm9vdE5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG5cdFx0cmV0dXJuIGZpbmRFbGVtZW50V2l0aFNlbGVjdG9yVXB3YXJkcyhyb290Tm9kZS5ob3N0LCBzZWxlY3Rvcik7XG5cdH1cblxuXHQvLyBPdGhlcndpc2UsIHNlYXJjaCB0aGUgY3VycmVudCBlbGVtZW50J3MgcGFyZW50XG5cdHJldHVybiBmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHMoZWxlbWVudC5wYXJlbnRFbGVtZW50LCBzZWxlY3Rvcik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fG51bGx9XG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlU2hhZG93Um9vdHMoZWxlbWVudCkge1xuXHRsZXQgY3VycmVudFJvb3QgPSBlbGVtZW50LnNoYWRvd1Jvb3Q7XG5cdGxldCBjdXJyZW50UGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuXG5cdHdoaWxlIChcblx0XHRjdXJyZW50UGFyZW50ICYmXG5cdFx0Y3VycmVudFBhcmVudC5ub2RlVHlwZSAhPT0gTm9kZS5ET0NVTUVOVF9OT0RFICYmXG5cdFx0Y3VycmVudFBhcmVudC5ub2RlVHlwZSAhPT0gTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFXG5cdCkge1xuXHRcdGlmIChjdXJyZW50Um9vdCAmJiBjdXJyZW50Um9vdC5wYXJlbnROb2RlKSB7XG5cdFx0XHRjdXJyZW50UGFyZW50ID0gY3VycmVudFJvb3QucGFyZW50Tm9kZTtcblx0XHRcdGN1cnJlbnRSb290ID0gY3VycmVudFBhcmVudC5zaGFkb3dSb290O1xuXHRcdH0gZWxzZSBpZiAoY3VycmVudFBhcmVudC5wYXJlbnROb2RlKSB7XG5cdFx0XHRjdXJyZW50UGFyZW50ID0gY3VycmVudFBhcmVudC5wYXJlbnROb2RlO1xuXHRcdFx0Y3VycmVudFJvb3QgPSBudWxsO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRjdXJyZW50Um9vdCAmJlxuXHRcdFx0Y3VycmVudFJvb3QuaG9zdCAmJlxuXHRcdFx0Y3VycmVudFJvb3QuaG9zdC5ub2RlVHlwZSA9PT0gTm9kZS5ET0NVTUVOVF9OT0RFXG5cdFx0KSB7XG5cdFx0XHRjdXJyZW50UGFyZW50ID0gY3VycmVudFJvb3QuaG9zdDtcblx0XHRcdGN1cnJlbnRSb290ID0gbnVsbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VycmVudFBhcmVudCA9IG51bGw7XG5cdFx0XHRjdXJyZW50Um9vdCA9IG51bGw7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGN1cnJlbnRQYXJlbnQ7XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgc2VhcmNoZXMgdXB3YXJkcyBmcm9tIGEgZ2l2ZW4gZWxlbWVudCB0byBmaW5kIGFuIGFuY2VzdG9yIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHsqfVxuICogQHRocm93cyB7RXJyb3J9IEludmFsaWQgYXJndW1lbnQuIEV4cGVjdGVkIGFuIEhUTUxFbGVtZW50LlxuICogQHNpbmNlIDMuMzYuMFxuICovXG5mdW5jdGlvbiBnZXRDb250YWluaW5nRG9jdW1lbnQoZWxlbWVudCkge1xuXHRpZiAoXG5cdFx0IWVsZW1lbnQgfHxcblx0XHQhKFxuXHRcdFx0ZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8XG5cdFx0XHRlbGVtZW50IGluc3RhbmNlb2YgZWxlbWVudC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LkhUTUxFbGVtZW50XG5cdFx0KVxuXHQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGFyZ3VtZW50LiBFeHBlY3RlZCBhbiBIVE1MRWxlbWVudC5cIik7XG5cdH1cblxuXHRyZXR1cm4gdHJhdmVyc2VTaGFkb3dSb290cyhlbGVtZW50KSB8fCBudWxsO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBsaXN0IG9mIGFsbCByZWdpc3RlcmVkIGN1c3RvbSBlbGVtZW50cyBpbiB0aGUgY3VycmVudCBkb2N1bWVudC5cbiAqXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqIEBzaW5jZSA0LjAuMFxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRDdXN0b21FbGVtZW50cygpIHtcblx0Y29uc3QgY3VzdG9tRWxlbWVudFRhZ3MgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpKVxuXHRcdC5tYXAoKHRhZykgPT4gdGFnLnRhZ05hbWUudG9Mb3dlckNhc2UoKSlcblx0XHQuZmlsdGVyKCh0YWdOYW1lKSA9PiB0YWdOYW1lLmluY2x1ZGVzKFwiLVwiKSAmJiBjdXN0b21FbGVtZW50cy5nZXQodGFnTmFtZSkpO1xuXG5cdHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoY3VzdG9tRWxlbWVudFRhZ3MpKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNGdW5jdGlvbiwgaXNPYmplY3QsIGlzUHJpbWl0aXZlIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdHlwZU9mIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVvZi5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBjbG9uZSB9O1xuXG4vKipcbiAqIFdpdGggdGhpcyBmdW5jdGlvbiwgb2JqZWN0cyBjYW4gYmUgY2xvbmVkLlxuICogVGhlIGVudGlyZSBvYmplY3QgdHJlZSBpcyBydW4gdGhyb3VnaC5cbiAqXG4gKiBQcm94eSwgRWxlbWVudCwgSFRNTERvY3VtZW50IGFuZCBEb2N1bWVudEZyYWdtZW50IGluc3RhbmNlcyBhcmUgbm90IGNsb25lZC5cbiAqIEdsb2JhbCBvYmplY3RzIHN1Y2ggYXMgd2luZG93cyBhcmUgYWxzbyBub3QgY2xvbmVkLFxuICpcbiAqIElmIGFuIG9iamVjdCBoYXMgYSBtZXRob2QgYGdldENsb25lKClgLCB0aGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgY2xvbmUuXG4gKlxuICogQHBhcmFtIHsqfSBvYmogb2JqZWN0IHRvIGJlIGNsb25lZFxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IHVuYWJsZSB0byBjbG9uZSBvYmohIGl0cyB0eXBlIGlzbid0IHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gY2xvbmUob2JqKSB7XG5cdC8vIHR5cGVvZiBudWxsIHJlc3VsdHMgaW4gJ29iamVjdCcuICBodHRwczovLzJhbGl0eS5jb20vMjAxMy8xMC90eXBlb2YtbnVsbC5odG1sXG5cdGlmIChudWxsID09PSBvYmopIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Ly8gSGFuZGxlIHRoZSB0d28gc2ltcGxlIHR5cGVzLCBudWxsIGFuZCB1bmRlZmluZWRcblx0aWYgKGlzUHJpbWl0aXZlKG9iaikpIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Ly8gSGFuZGxlIHRoZSB0d28gc2ltcGxlIHR5cGVzLCBudWxsIGFuZCB1bmRlZmluZWRcblx0aWYgKGlzRnVuY3Rpb24ob2JqKSkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvLyBIYW5kbGUgQXJyYXlcblx0aWYgKGlzQXJyYXkob2JqKSkge1xuXHRcdGNvbnN0IGNvcHkgPSBbXTtcblx0XHRmb3IgKGxldCBpID0gMCwgbGVuID0gb2JqLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRjb3B5W2ldID0gY2xvbmUob2JqW2ldKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29weTtcblx0fVxuXG5cdGlmIChpc09iamVjdChvYmopKSB7XG5cdFx0Ly8gSGFuZGxlIERhdGVcblx0XHRpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0Y29uc3QgY29weSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRjb3B5LnNldFRpbWUob2JqLmdldFRpbWUoKSk7XG5cdFx0XHRyZXR1cm4gY29weTtcblx0XHR9XG5cblx0XHQvKiogRG8gbm90IGNsb25lIERPTSBub2RlcyAqL1xuXHRcdGlmICh0eXBlb2YgRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogaW5zdGFuY2VvZiBFbGVtZW50KSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgSFRNTERvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIG9iaiBpbnN0YW5jZW9mIEhUTUxEb2N1bWVudClcblx0XHRcdHJldHVybiBvYmo7XG5cdFx0aWYgKFxuXHRcdFx0dHlwZW9mIERvY3VtZW50RnJhZ21lbnQgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdG9iaiBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnRcblx0XHQpXG5cdFx0XHRyZXR1cm4gb2JqO1xuXG5cdFx0LyoqIERvIG5vdCBjbG9uZSBnbG9iYWwgb2JqZWN0cyAqL1xuXHRcdGlmIChvYmogPT09IGdldEdsb2JhbCgpKSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgZ2xvYmFsQ29udGV4dCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogPT09IGdsb2JhbENvbnRleHQpXG5cdFx0XHRyZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIG9iaiA9PT0gd2luZG93KSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqID09PSBkb2N1bWVudCkgcmV0dXJuIG9iajtcblx0XHRpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogPT09IG5hdmlnYXRvcikgcmV0dXJuIG9iajtcblx0XHRpZiAodHlwZW9mIEpTT04gIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqID09PSBKU09OKSByZXR1cm4gb2JqO1xuXG5cdFx0Ly8gSGFuZGxlIFByb3h5LU9iamVjdFxuXHRcdHRyeSB7XG5cdFx0XHQvLyB0cnkvY2F0Y2ggYmVjYXVzZSBwb3NzaWJsZTogVHlwZUVycm9yOiBGdW5jdGlvbiBoYXMgbm9uLW9iamVjdCBwcm90b3R5cGUgJ3VuZGVmaW5lZCcgaW4gaW5zdGFuY2VvZiBjaGVja1xuXHRcdFx0aWYgKG9iaiBpbnN0YW5jZW9mIFByb3h5KSB7XG5cdFx0XHRcdHJldHVybiBvYmo7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdHJldHVybiBjbG9uZU9iamVjdChvYmopO1xuXHR9XG5cblx0dGhyb3cgbmV3IEVycm9yKFwidW5hYmxlIHRvIGNsb25lIG9iaiEgaXRzIHR5cGUgaXNuJ3Qgc3VwcG9ydGVkLlwiKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9ialxuICogQHJldHVybiB7b2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2xvbmVPYmplY3Qob2JqKSB7XG5cdHZhbGlkYXRlT2JqZWN0KG9iaik7XG5cblx0Y29uc3QgZmt0ID0gb2JqPy5bXCJjb25zdHJ1Y3RvclwiXTtcblxuXHQvKiogT2JqZWN0IGhhcyBjbG9uZSBtZXRob2QgKi9cblx0aWYgKHR5cGVPZihma3QpID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRjb25zdCBwcm90b3R5cGUgPSBma3Q/LnByb3RvdHlwZTtcblx0XHRpZiAodHlwZW9mIHByb3RvdHlwZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRwcm90b3R5cGUuaGFzT3duUHJvcGVydHkoXCJnZXRDbG9uZVwiKSAmJlxuXHRcdFx0XHR0eXBlT2Yob2JqLmdldENsb25lKSA9PT0gXCJmdW5jdGlvblwiXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIG9iai5nZXRDbG9uZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGxldCBjb3B5ID0ge307XG5cdGlmIChcblx0XHR0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yLmNhbGwgPT09IFwiZnVuY3Rpb25cIlxuXHQpIHtcblx0XHRjb3B5ID0gbmV3IG9iai5jb25zdHJ1Y3RvcigpO1xuXHR9XG5cblx0Zm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG5cdFx0aWYgKCFvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGlzUHJpbWl0aXZlKG9ialtrZXldKSkge1xuXHRcdFx0Y29weVtrZXldID0gb2JqW2tleV07XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb3B5W2tleV0gPSBjbG9uZShvYmpba2V5XSk7XG5cdH1cblxuXHRyZXR1cm4gY29weTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGNsb25lIH0gZnJvbSBcIi4uL3V0aWwvY2xvbmUubWpzXCI7XG5cbmV4cG9ydCB7IExvY2FsZSwgcGFyc2VMb2NhbGUgfTtcblxuLyoqXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwcm9wZXJ0aWVzU3ltYm9sID0gU3ltYm9sKFwicHJvcGVydGllc1wiKTtcblxuLyoqXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBsb2NhbGVTdHJpbmdTeW1ib2wgPSBTeW1ib2woXCJsb2NhbGVTdHJpbmdcIik7XG5cbi8qKlxuICogVGhlIExvY2FsZSBjbGFzcyBpcyBhIGJhc2UgY2xhc3MgZm9yIHRoZSBsYW5ndWFnZSBjbGFzc2VzLlxuICpcbiAqIFJGQ1xuICpcbiAqIGBgYFxuICogQSBMYW5ndWFnZS1UYWcgY29uc2lzdHMgb2Y6XG4gKiBsYW5ndGFnICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBnZW5lcmF0ZWQgdGFnXG4gKiAgICAgICAgICAgLW9yLSBwcml2YXRlLXVzZSAgICAgICAgOyBhIHByaXZhdGUgdXNlIHRhZ1xuICpcbiAqIGxhbmd0YWcgICAgICAgPSAobGFuZ3VhZ2VcbiAqICAgICAgICAgICAgICAgICAgICBbXCItXCIgc2NyaXB0XVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiByZWdpb25dXG4gKiAgICAgICAgICAgICAgICAgICAgKihcIi1cIiB2YXJpYW50KVxuICogICAgICAgICAgICAgICAgICAgICooXCItXCIgZXh0ZW5zaW9uKVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiBwcml2YXRldXNlXSlcbiAqXG4gKiBsYW5ndWFnZSAgICAgID0gXCJlblwiLCBcImFsZVwiLCBvciBhIHJlZ2lzdGVyZWQgdmFsdWVcbiAqXG4gKiBzY3JpcHQgICAgICAgID0gXCJMYXRuXCIsIFwiQ3lybFwiLCBcIkhhbnRcIiBJU08gMTU5MjQgY29kZXNcbiAqXG4gKiByZWdpb24gICAgICAgID0gXCJVU1wiLCBcIkNTXCIsIFwiRlJcIiBJU08gMzE2NiBjb2Rlc1xuICogICAgICAgICAgICAgICAgIFwiNDE5XCIsIFwiMDE5XCIsICBvciBVTiBNLjQ5IGNvZGVzXG4gKlxuICogdmFyaWFudCAgICAgICA9IFwicm96YWpcIiwgXCJuZWRpc1wiLCBcIjE5OTZcIiwgbXVsdGlwbGUgc3VidGFncyBjYW4gYmUgdXNlZCBpbiBhIHRhZ1xuICpcbiAqIGV4dGVuc2lvbiAgICAgPSBzaW5nbGUgbGV0dGVyIGZvbGxvd2VkIGJ5IGFkZGl0aW9uYWwgc3VidGFnczsgbW9yZSB0aGFuIG9uZSBleHRlbnNpb25cbiAqICAgICAgICAgICAgICAgICBtYXkgYmUgdXNlZCBpbiBhIGxhbmd1YWdlIHRhZ1xuICpcbiAqIHByaXZhdGUtdXNlICAgPSBcIngtXCIgZm9sbG93ZWQgYnkgYWRkaXRpb25hbCBzdWJ0YWdzLCBhcyBtYW55IGFzIGFyZSByZXF1aXJlZFxuICogICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGVzZSBjYW4gc3RhcnQgYSB0YWcgb3IgYXBwZWFyIGF0IHRoZSBlbmQgKGJ1dCBub3RcbiAqICAgICAgICAgICAgICAgICBpbiB0aGUgbWlkZGxlKVxuICogYGBgXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzMwNjZcbiAqL1xuY2xhc3MgTG9jYWxlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2Vcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtyZWdpb25dXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbc2NyaXB0XVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW3ZhcmlhbnRzXVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW2V4dGxhbmddXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbcHJpdmF0ZVVzZV1cblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGxvY2FsZVxuXHQgKi9cblx0Y29uc3RydWN0b3IobGFuZ3VhZ2UsIHJlZ2lvbiwgc2NyaXB0LCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZSkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzW3Byb3BlcnRpZXNTeW1ib2xdID0ge1xuXHRcdFx0bGFuZ3VhZ2U6IGxhbmd1YWdlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyhsYW5ndWFnZSksXG5cdFx0XHRzY3JpcHQ6IHNjcmlwdCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdmFsaWRhdGVTdHJpbmcoc2NyaXB0KSxcblx0XHRcdHJlZ2lvbjogcmVnaW9uID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyhyZWdpb24pLFxuXHRcdFx0dmFyaWFudHM6IHZhcmlhbnRzID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyh2YXJpYW50cyksXG5cdFx0XHRleHRsYW5nOiBleHRsYW5nID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyhleHRsYW5nKSxcblx0XHRcdHByaXZhdGVVc2U6XG5cdFx0XHRcdHByaXZhdGVVc2UgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHZhbGlkYXRlU3RyaW5nKHByaXZhdGVVc2UpLFxuXHRcdH07XG5cblx0XHRjb25zdCBzID0gW107XG5cdFx0aWYgKGxhbmd1YWdlICE9PSB1bmRlZmluZWQpIHMucHVzaChsYW5ndWFnZSk7XG5cdFx0aWYgKHNjcmlwdCAhPT0gdW5kZWZpbmVkKSBzLnB1c2goc2NyaXB0KTtcblx0XHRpZiAocmVnaW9uICE9PSB1bmRlZmluZWQpIHMucHVzaChyZWdpb24pO1xuXHRcdGlmICh2YXJpYW50cyAhPT0gdW5kZWZpbmVkKSBzLnB1c2godmFyaWFudHMpO1xuXHRcdGlmIChleHRsYW5nICE9PSB1bmRlZmluZWQpIHMucHVzaChleHRsYW5nKTtcblx0XHRpZiAocHJpdmF0ZVVzZSAhPT0gdW5kZWZpbmVkKSBzLnB1c2gocHJpdmF0ZVVzZSk7XG5cblx0XHRpZiAocy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGxvY2FsZVwiKTtcblx0XHR9XG5cblx0XHR0aGlzW2xvY2FsZVN0cmluZ1N5bWJvbF0gPSBzLmpvaW4oXCItXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvaTE4bi9sb2NhbGVAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldCBsb2NhbGVTdHJpbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXNbbG9jYWxlU3RyaW5nU3ltYm9sXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0IGxhbmd1YWdlKCkge1xuXHRcdHJldHVybiB0aGlzW3Byb3BlcnRpZXNTeW1ib2xdLmxhbmd1YWdlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXQgcmVnaW9uKCkge1xuXHRcdHJldHVybiB0aGlzW3Byb3BlcnRpZXNTeW1ib2xdLnJlZ2lvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0IHNjcmlwdCgpIHtcblx0XHRyZXR1cm4gdGhpc1twcm9wZXJ0aWVzU3ltYm9sXS5zY3JpcHQ7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldCB2YXJpYW50cygpIHtcblx0XHRyZXR1cm4gdGhpc1twcm9wZXJ0aWVzU3ltYm9sXS52YXJpYW50cztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0IGV4dGxhbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcHJvcGVydGllc1N5bWJvbF0uZXh0bGFuZztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0IHByaXZhdGVVc2UoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcHJvcGVydGllc1N5bWJvbF0ucHJpdmF0ZVZhbHVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiBgJHt0aGlzLmxvY2FsZVN0cmluZ31gO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBzdHJ1Y3R1cmUgaGFzIHRoZSBmb2xsb3dpbmc6IGxhbmd1YWdlLCBzY3JpcHQsIHJlZ2lvbiwgdmFyaWFudHMsIGV4dGxhbmcsIHByaXZhdGVVc2Vcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5JMThuLkxvY2FsZU1hcH1cblx0ICovXG5cdGdldE1hcCgpIHtcblx0XHRyZXR1cm4gY2xvbmUodGhpc1twcm9wZXJ0aWVzU3ltYm9sXSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBMb2NhbGVNYXBcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYW5ndWFnZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNjcmlwdFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHJlZ2lvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZhcmlhbnRzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZXh0bGFuZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHByaXZhdGVVc2VcbiAqL1xuXG4vKipcbiAqIFBhcnNlIGxvY2FsIGFjY29yZGluZyB0byByZmM0NjQ2IHN0YW5kYXJkXG4gKlxuICogTGltaXRhdGlvbnM6IFRoZSByZWdleCBjYW5ub3QgaGFuZGxlIG11bHRpcGxlIHZhcmlhbnRzIG9yIHByaXZhdGUuXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoaXMgZnVuY3Rpb24gaW5kaXZpZHVhbGx5OlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGltcG9ydCB7Y3JlYXRlTG9jYWxlfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS9pMThuL2xvY2FsZS5tanMnO1xuICogY3JlYXRlTG9jYWxlKClcbiAqIGBgYFxuICpcbiAqIFJGQ1xuICpcbiAqIGBgYFxuICogICBUaGUgc3ludGF4IG9mIHRoZSBsYW5ndWFnZSB0YWcgaW4gQUJORiBbUkZDNDIzNF0gaXM6XG4gKlxuICogICBMYW5ndWFnZS1UYWcgID0gbGFuZ3RhZ1xuICogICAgICAgICAgICAgICAgIC8gcHJpdmF0ZXVzZSAgICAgICAgICAgICA7IHByaXZhdGUgdXNlIHRhZ1xuICogICAgICAgICAgICAgICAgIC8gZ3JhbmRmYXRoZXJlZCAgICAgICAgICA7IGdyYW5kZmF0aGVyZWQgcmVnaXN0cmF0aW9uc1xuICpcbiAqICAgbGFuZ3RhZyAgICAgICA9IChsYW5ndWFnZVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiBzY3JpcHRdXG4gKiAgICAgICAgICAgICAgICAgICAgW1wiLVwiIHJlZ2lvbl1cbiAqICAgICAgICAgICAgICAgICAgICAqKFwiLVwiIHZhcmlhbnQpXG4gKiAgICAgICAgICAgICAgICAgICAgKihcIi1cIiBleHRlbnNpb24pXG4gKiAgICAgICAgICAgICAgICAgICAgW1wiLVwiIHByaXZhdGV1c2VdKVxuICpcbiAqICAgbGFuZ3VhZ2UgICAgICA9ICgyKjNBTFBIQSBbIGV4dGxhbmcgXSkgOyBzaG9ydGVzdCBJU08gNjM5IGNvZGVcbiAqICAgICAgICAgICAgICAgICAvIDRBTFBIQSAgICAgICAgICAgICAgICAgOyByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZVxuICogICAgICAgICAgICAgICAgIC8gNSo4QUxQSEEgICAgICAgICAgICAgICA7IHJlZ2lzdGVyZWQgbGFuZ3VhZ2Ugc3VidGFnXG4gKlxuICogICBleHRsYW5nICAgICAgID0gKjMoXCItXCIgM0FMUEhBKSAgICAgICAgIDsgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2VcbiAqXG4gKiAgIHNjcmlwdCAgICAgICAgPSA0QUxQSEEgICAgICAgICAgICAgICAgIDsgSVNPIDE1OTI0IGNvZGVcbiAqXG4gKiAgIHJlZ2lvbiAgICAgICAgPSAyQUxQSEEgICAgICAgICAgICAgICAgIDsgSVNPIDMxNjYgY29kZVxuICogICAgICAgICAgICAgICAgIC8gM0RJR0lUICAgICAgICAgICAgICAgICA7IFVOIE0uNDkgY29kZVxuICpcbiAqICAgdmFyaWFudCAgICAgICA9IDUqOGFscGhhbnVtICAgICAgICAgICAgOyByZWdpc3RlcmVkIHZhcmlhbnRzXG4gKiAgICAgICAgICAgICAgICAgLyAoRElHSVQgM2FscGhhbnVtKVxuICpcbiAqICAgZXh0ZW5zaW9uICAgICA9IHNpbmdsZXRvbiAxKihcIi1cIiAoMio4YWxwaGFudW0pKVxuICpcbiAqICAgc2luZ2xldG9uICAgICA9ICV4NDEtNTcgLyAleDU5LTVBIC8gJXg2MS03NyAvICV4NzktN0EgLyBESUdJVFxuICogICAgICAgICAgICAgICAgIDsgXCJhXCItXCJ3XCIgLyBcInlcIi1cInpcIiAvIFwiQVwiLVwiV1wiIC8gXCJZXCItXCJaXCIgLyBcIjBcIi1cIjlcIlxuICogICAgICAgICAgICAgICAgIDsgU2luZ2xlIGxldHRlcnM6IHgvWCBpcyByZXNlcnZlZCBmb3IgcHJpdmF0ZSB1c2VcbiAqXG4gKiAgIHByaXZhdGV1c2UgICAgPSAoXCJ4XCIvXCJYXCIpIDEqKFwiLVwiICgxKjhhbHBoYW51bSkpXG4gKlxuICogICBncmFuZGZhdGhlcmVkID0gMSozQUxQSEEgMSoyKFwiLVwiICgyKjhhbHBoYW51bSkpXG4gKiAgICAgICAgICAgICAgICAgICA7IGdyYW5kZmF0aGVyZWQgcmVnaXN0cmF0aW9uXG4gKiAgICAgICAgICAgICAgICAgICA7IE5vdGU6IGkgaXMgdGhlIG9ubHkgc2luZ2xldG9uXG4gKiAgICAgICAgICAgICAgICAgICA7IHRoYXQgc3RhcnRzIGEgZ3JhbmRmYXRoZXJlZCB0YWdcbiAqXG4gKiAgIGFscGhhbnVtICAgICAgPSAoQUxQSEEgLyBESUdJVCkgICAgICAgOyBsZXR0ZXJzIGFuZCBudW1iZXJzXG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICBGaWd1cmUgMTogTGFuZ3VhZ2UgVGFnIEFCTkZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhbGVcbiAqIEByZXR1cm4ge0xvY2FsZX1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgbG9jYWxlXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTG9jYWxlKGxvY2FsZSkge1xuXHRsb2NhbGUgPSB2YWxpZGF0ZVN0cmluZyhsb2NhbGUpLnJlcGxhY2UoL18vZywgXCItXCIpO1xuXG5cdGxldCBsYW5ndWFnZTtcblx0bGV0IHJlZ2lvbjtcblx0bGV0IHZhcmlhbnRzO1xuXHRsZXQgcGFydHM7XG5cdGxldCBzY3JpcHQ7XG5cdGxldCBleHRsYW5nO1xuXHRjb25zdCByZWdleFJlZ3VsYXIgPVxuXHRcdFwiKGFydC1sb2piYW58Y2VsLWdhdWxpc2h8bm8tYm9rfG5vLW55bnx6aC1ndW95dXx6aC1oYWtrYXx6aC1taW58emgtbWluLW5hbnx6aC14aWFuZylcIjtcblx0Y29uc3QgcmVnZXhJcnJlZ3VsYXIgPVxuXHRcdFwiKGVuLUdCLW9lZHxpLWFtaXxpLWJubnxpLWRlZmF1bHR8aS1lbm9jaGlhbnxpLWhha3xpLWtsaW5nb258aS1sdXh8aS1taW5nb3xpLW5hdmFqb3xpLXB3bnxpLXRhb3xpLXRheXxpLXRzdXxzZ24tQkUtRlJ8c2duLUJFLU5MfHNnbi1DSC1ERSlcIjtcblx0Y29uc3QgcmVnZXhHcmFuZGZhdGhlcmVkID0gYCgke3JlZ2V4SXJyZWd1bGFyfXwke3JlZ2V4UmVndWxhcn0pYDtcblx0Y29uc3QgcmVnZXhQcml2YXRlVXNlID0gXCIoeCgtW0EtWmEtejAtOV17MSw4fSkrKVwiO1xuXHRjb25zdCByZWdleFNpbmdsZXRvbiA9IFwiWzAtOUEtV1ktWmEtd3ktel1cIjtcblx0Y29uc3QgcmVnZXhFeHRlbnNpb24gPSBgKCR7cmVnZXhTaW5nbGV0b259KC1bQS1aYS16MC05XXsyLDh9KSspYDtcblx0Y29uc3QgcmVnZXhWYXJpYW50ID0gXCIoW0EtWmEtejAtOV17NSw4fXxbMC05XVtBLVphLXowLTldezN9KVwiO1xuXHRjb25zdCByZWdleFJlZ2lvbiA9IFwiKFtBLVphLXpdezJ9fFswLTldezN9KVwiO1xuXHRjb25zdCByZWdleFNjcmlwdCA9IFwiKFtBLVphLXpdezR9KVwiO1xuXHRjb25zdCByZWdleEV4dGxhbmcgPSBcIihbQS1aYS16XXszfSgtW0EtWmEtel17M30pezAsMn0pXCI7XG5cdGNvbnN0IHJlZ2V4TGFuZ3VhZ2UgPSBgKChbQS1aYS16XXsyLDN9KC0ke3JlZ2V4RXh0bGFuZ30pPyl8W0EtWmEtel17NH18W0EtWmEtel17NSw4fSlgO1xuXHRjb25zdCByZWdleExhbmd0YWcgPSBgKCR7cmVnZXhMYW5ndWFnZX0oLSR7cmVnZXhTY3JpcHR9KT8oLSR7cmVnZXhSZWdpb259KT8oLSR7cmVnZXhWYXJpYW50fSkqKC0ke3JlZ2V4RXh0ZW5zaW9ufSkqKC0ke3JlZ2V4UHJpdmF0ZVVzZX0pPylgO1xuXHRjb25zdCByZWdleExhbmd1YWdlVGFnID0gYF4oJHtyZWdleEdyYW5kZmF0aGVyZWR9fCR7cmVnZXhMYW5ndGFnfXwke3JlZ2V4UHJpdmF0ZVVzZX0pJGA7XG5cdGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChyZWdleExhbmd1YWdlVGFnKTtcblx0bGV0IG1hdGNoO1xuXG5cdGlmICgobWF0Y2ggPSByZWdleC5leGVjKGxvY2FsZSkpICE9PSBudWxsKSB7XG5cdFx0aWYgKG1hdGNoLmluZGV4ID09PSByZWdleC5sYXN0SW5kZXgpIHtcblx0XHRcdHJlZ2V4Lmxhc3RJbmRleCsrO1xuXHRcdH1cblx0fVxuXG5cdGlmIChtYXRjaCA9PT0gdW5kZWZpbmVkIHx8IG1hdGNoID09PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgbG9jYWxlXCIpO1xuXHR9XG5cblx0aWYgKG1hdGNoWzZdICE9PSB1bmRlZmluZWQpIHtcblx0XHRsYW5ndWFnZSA9IG1hdGNoWzZdO1xuXG5cdFx0cGFydHMgPSBsYW5ndWFnZS5zcGxpdChcIi1cIik7XG5cdFx0aWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGxhbmd1YWdlID0gcGFydHNbMF07XG5cdFx0XHRleHRsYW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHR9XG5cblx0aWYgKG1hdGNoWzE0XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmVnaW9uID0gbWF0Y2hbMTRdO1xuXHR9XG5cblx0aWYgKG1hdGNoWzEyXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0c2NyaXB0ID0gbWF0Y2hbMTJdO1xuXHR9XG5cblx0aWYgKG1hdGNoWzE2XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dmFyaWFudHMgPSBtYXRjaFsxNl07XG5cdH1cblxuXHRyZXR1cm4gbmV3IExvY2FsZShsYW5ndWFnZSwgcmVnaW9uLCBzY3JpcHQsIHZhcmlhbnRzLCBleHRsYW5nKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBwYXJzZUxvY2FsZSB9IGZyb20gXCIuLi9pMThuL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4vdXRpbC5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5cbmV4cG9ydCB7IGdldExvY2FsZU9mRG9jdW1lbnQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgREVGQVVMVF9MQU5HVUFHRSA9IFwiZW5cIjtcblxuLyoqXG4gKiBXaXRoIHRoaXMgZnVuY3Rpb24geW91IGNhbiByZWFkIHRoZSBsYW5ndWFnZSB2ZXJzaW9uIHNldCBieSB0aGUgZG9jdW1lbnQuXG4gKiBGb3IgdGhpcyB0aGUgYXR0cmlidXRlIGBsYW5nYCBpbiB0aGUgaHRtbCB0YWcgaXMgcmVhZC4gSWYgbm8gYXR0cmlidXRlIGlzIHNldCwgYGVuYCBpcyB1c2VkIGFzIGRlZmF1bHQuXG4gKiBBbHRlcm5hdGl2ZWx5LCB0aGUgbGFuZ3VhZ2UgdmVyc2lvbiBvZiB0aGUgYnJvd3NlciBpcyB1c2VkLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxodG1sIGxhbmc9XCJlblwiPlxuICogYGBgXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgYGdldExvY2FsZU9mRG9jdW1lbnQoKWAuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBsb2NhbGVcbiAqIEBzdW1tYXJ5IFRyaWVzIHRvIGRldGVybWluZSB0aGUgbG9jYWxlIHVzZWRcbiAqL1xuZnVuY3Rpb24gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdGNvbnN0IGh0bWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKTtcblx0aWYgKGh0bWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBodG1sLmhhc0F0dHJpYnV0ZShcImxhbmdcIikpIHtcblx0XHRjb25zdCBsb2NhbGUgPSBodG1sLmdldEF0dHJpYnV0ZShcImxhbmdcIik7XG5cdFx0aWYgKGxvY2FsZSkge1xuXHRcdFx0cmV0dXJuIG5ldyBwYXJzZUxvY2FsZShsb2NhbGUpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG5hdmlnYXRvckxhbmd1YWdlID0gZ2V0TmF2aWdhdG9yTGFuZ3VhZ2UoKTtcblx0aWYgKG5hdmlnYXRvckxhbmd1YWdlKSB7XG5cdFx0cmV0dXJuIHBhcnNlTG9jYWxlKG5hdmlnYXRvckxhbmd1YWdlKTtcblx0fVxuXG5cdHJldHVybiBwYXJzZUxvY2FsZShERUZBVUxUX0xBTkdVQUdFKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZHwqfVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTmF2aWdhdG9yL2xhbmd1YWdlXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9OYXZpZ2F0b3IvbGFuZ3VhZ2VzXG4gKi9cbmNvbnN0IGdldE5hdmlnYXRvckxhbmd1YWdlID0gKCkgPT4ge1xuXHRjb25zdCBuYXZpZ2F0b3IgPSBnZXRHbG9iYWxPYmplY3QoXCJuYXZpZ2F0b3JcIik7XG5cdGlmIChuYXZpZ2F0b3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAobmF2aWdhdG9yLmhhc093blByb3BlcnR5KFwibGFuZ3VhZ2VcIikpIHtcblx0XHRjb25zdCBsYW5ndWFnZSA9IG5hdmlnYXRvci5sYW5ndWFnZTtcblx0XHRpZiAodHlwZW9mIGxhbmd1YWdlID09PSBcInN0cmluZ1wiICYmIGxhbmd1YWdlLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiBsYW5ndWFnZTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBsYW5ndWFnZXMgPSBuYXZpZ2F0b3I/Lmxhbmd1YWdlcztcblx0aWYgKEFycmF5LmlzQXJyYXkobGFuZ3VhZ2VzKSAmJiBsYW5ndWFnZXMubGVuZ3RoID4gMCkge1xuXHRcdHJldHVybiBsYW5ndWFnZXNbMF07XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IElEIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbnRlZ2VyPn1cbiAqL1xuY29uc3QgaW50ZXJuYWxDb3VudGVyID0gbmV3IE1hcCgpO1xuXG4vKipcbiAqIFdpdGggdGhlIGlkIGNsYXNzLCBzZXF1ZW5jZXMgb2YgaWRzIGNhbiBiZSBjcmVhdGVkLiBmb3IgdGhpcyBwdXJwb3NlLCBhbiBpbnRlcm5hbCBjb3VudGVyIGlzIGluY3JlbWVudGVkIGZvciBlYWNoIHByZWZpeC5cbiAqIHRodXMsIHRoZSBmaXJzdCBpZCB3aXRoIHRoZSBwcmVmaXggYG15aWRgIHdpbGwgYmUgYG15aWQxYCBhbmQgdGhlIHNlY29uZCBpZCBgbXlpZDJgLlxuICogVGhlIGlkcyBhcmUgdGhlIHNhbWUgZm9yIGV2ZXJ5IGNhbGwsIGZvciBleGFtcGxlIG9uIGEgd2ViIHBhZ2UuXG4gKlxuICogU28gdGhlIGlkcyBjYW4gYWxzbyBiZSB1c2VkIGZvciBuYXZpZ2F0aW9uLiB5b3UgaGF2ZSB0byB0YWtlIGNhcmUgdGhhdCB0aGUgb3JkZXIgc3RheXMgdGhlIHNhbWUuXG4gKlxuICogQXMgb2YgdmVyc2lvbiAxLjYuMCB0aGVyZSBpcyB0aGUgbmV3IFJhbmRvbUlELiB0aGlzIElEIGNsYXNzIGlzIGNvbnRpbnVvdXMgZnJvbSBub3cgb24uXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBdXRvbWF0aWMgZ2VuZXJhdGlvbiBvZiBpZHNcbiAqL1xuY2xhc3MgSUQgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIGNyZWF0ZSBuZXcgaWQgd2l0aCBwcmVmaXhcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuXHQgKi9cblx0Y29uc3RydWN0b3IocHJlZml4KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cHJlZml4ID0gXCJpZFwiO1xuXHRcdH1cblxuXHRcdHZhbGlkYXRlU3RyaW5nKHByZWZpeCk7XG5cblx0XHRpZiAoIWludGVybmFsQ291bnRlci5oYXMocHJlZml4KSkge1xuXHRcdFx0aW50ZXJuYWxDb3VudGVyLnNldChwcmVmaXgsIDEpO1xuXHRcdH1cblxuXHRcdGxldCBjb3VudCA9IGludGVybmFsQ291bnRlci5nZXQocHJlZml4KTtcblx0XHR0aGlzLmlkID0gcHJlZml4ICsgY291bnQ7XG5cblx0XHRpbnRlcm5hbENvdW50ZXIuc2V0KHByZWZpeCwgKytjb3VudCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIHRoaXMuaWQ7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgQmFzZVdpdGhPcHRpb25zIH07XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgYmFzZSBjbGFzcyB3aXRoIG9wdGlvbnMgZnJvbSB3aGljaCBzb21lIG1vbnN0ZXIgY2xhc3NlcyBhcmUgZGVyaXZlZC5cbiAqXG4gKiBUaGlzIGNsYXNzIGlzIGFjdHVhbGx5IG9ubHkgdXNlZCBhcyBhIGJhc2UgY2xhc3MuXG4gKlxuICogQ2xhc3NlcyB0aGF0IHJlcXVpcmUgdGhlIHBvc3NpYmlsaXR5IG9mIG9wdGlvbnMgY2FuIGJlIGRlcml2ZWQgZGlyZWN0bHkgZnJvbSB0aGlzIGNsYXNzLlxuICogRGVyaXZlZCBjbGFzc2VzIGFsbW9zdCBhbHdheXMgb3ZlcnJpZGUgdGhlIGBkZWZhdWx0YCBnZXR0ZXIgd2l0aCB0aGVpciBvd24gdmFsdWVzLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBkZXByZWNhdGVkIHNpbmNlIDMuMTUuMFxuICovXG5jbGFzcyBCYXNlV2l0aE9wdGlvbnMgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbnMgPSB7fTtcblx0XHR9XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IGV4dGVuZCh7fSwgdGhpcy5kZWZhdWx0cywgdmFsaWRhdGVPYmplY3Qob3B0aW9ucykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZ2V0dGVyIHByb3ZpZGVzIHRoZSBvcHRpb25zLiBEZXJpdmVkIGNsYXNzZXMgb3ZlcndyaXRlXG5cdCAqIHRoaXMgZ2V0dGVyIHdpdGggdGhlaXIgb3duIHZhbHVlcy4gSXQgaXMgYSBnb29kIGthcm1hIHRvIGFsd2F5cyBpbmNsdWRlXG5cdCAqIHRoZSB2YWx1ZXMgZnJvbSB0aGUgcGFyZW50IGNsYXNzLlxuXHQgKlxuXHQgKiBgYGBqYXZhc2NyaXB0XG5cdCAqIGdldCBkZWZhdWx0cygpIHtcblx0ICogICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHQgKiAgICAgICAgIG15a2V5OiB0cnVlXG5cdCAqICAgICB9KTtcblx0ICogfVxuXHQgKlxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7b2JqZWN0fVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBuZXN0ZWQgb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHBhdGggYGEuYi5jYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuXHQgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZVxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKiBAc2luY2UgMS4xMC4wXG5cdCAqL1xuXHRnZXRPcHRpb24ocGF0aCwgZGVmYXVsdFZhbHVlKSB7XG5cdFx0bGV0IHZhbHVlO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhbHVlID0gbmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0pLmdldFZpYShwYXRoKTtcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBkZWZhdWx0VmFsdWU7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0aGFzT2JqZWN0TGluayxcblx0Z2V0TGlua2VkT2JqZWN0cyxcblx0YWRkVG9PYmplY3RMaW5rLFxufSBmcm9tIFwiLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBnZXRMb2NhbGVPZkRvY3VtZW50IH0gZnJvbSBcIi4uL2RvbS9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyBCYXNlV2l0aE9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZXdpdGhvcHRpb25zLm1qc1wiO1xuaW1wb3J0IHsgTG9jYWxlIH0gZnJvbSBcIi4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25zIH0gZnJvbSBcIi4vdHJhbnNsYXRpb25zLm1qc1wiO1xuXG5leHBvcnQgeyBQcm92aWRlciwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCB9O1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjkuMFxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgdHJhbnNsYXRpb25zTGlua1N5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL3RyYW5zbGF0aW9uc0BAbGlua1wiLFxuKTtcblxuLyoqXG4gKiBBIHByb3ZpZGVyIG1ha2VzIGEgdHJhbnNsYXRpb24gb2JqZWN0IGF2YWlsYWJsZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEzLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzMwNjZ9XG4gKi9cbmNsYXNzIFByb3ZpZGVyIGV4dGVuZHMgQmFzZVdpdGhPcHRpb25zIHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvaTE4bi9wcm92aWRlckBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtMb2NhbGV8c3RyaW5nfSBsb2NhbGVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGdldFRyYW5zbGF0aW9ucyhsb2NhbGUpIHtcblx0XHRpZiAobG9jYWxlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cmVzb2x2ZShuZXcgVHJhbnNsYXRpb25zKGxvY2FsZSkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtMb2NhbGV8c3RyaW5nfSBsb2NhbGVcblx0ICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuXHQgKiBAcmV0dXJuIHtQcm92aWRlcn1cblx0ICovXG5cdGFzc2lnblRvRWxlbWVudChsb2NhbGUsIGVsZW1lbnQpIHtcblx0XHRpZiAobG9jYWxlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHR9XG5cblx0XHRpZiAoIShsb2NhbGUgaW5zdGFuY2VvZiBMb2NhbGUpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJMb2NhbGUgaXMgbm90IGFuIGluc3RhbmNlIG9mIExvY2FsZVwiKTtcblx0XHR9XG5cblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHRlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIik7XG5cdFx0fVxuXG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiRWxlbWVudCBpcyBub3QgYW4gSFRNTEVsZW1lbnRcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRpb25zKGxvY2FsZSkudGhlbigob2JqKSA9PiB7XG5cdFx0XHRsZXQgdHJhbnNsYXRpb25zID0gbnVsbDtcblx0XHRcdGlmIChoYXNPYmplY3RMaW5rKGVsZW1lbnQsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wpKSB7XG5cdFx0XHRcdGNvbnN0IG9iamVjdHMgPSBnZXRMaW5rZWRPYmplY3RzKGVsZW1lbnQsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IG8gb2Ygb2JqZWN0cykge1xuXHRcdFx0XHRcdGlmIChvIGluc3RhbmNlb2YgVHJhbnNsYXRpb25zKSB7XG5cdFx0XHRcdFx0XHR0cmFuc2xhdGlvbnMgPSBvO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCEodHJhbnNsYXRpb25zIGluc3RhbmNlb2YgVHJhbnNsYXRpb25zKSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIk9iamVjdCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgVHJhbnNsYXRpb25zXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJhbnNsYXRpb25zLmFzc2lnblRyYW5zbGF0aW9ucyhvYmopO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YWRkVG9PYmplY3RMaW5rKGVsZW1lbnQsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wsIG9iaik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvYmo7XG5cdFx0fSk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXRMaW5rZWRPYmplY3RzLCBoYXNPYmplY3RMaW5rIH0gZnJvbSBcIi4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX09CSkVDVExJTksgfSBmcm9tIFwiLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHtcblx0dmFsaWRhdGVJbnRlZ2VyLFxuXHR2YWxpZGF0ZU9iamVjdCxcblx0dmFsaWRhdGVTdHJpbmcsXG59IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IExvY2FsZSwgcGFyc2VMb2NhbGUgfSBmcm9tIFwiLi9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sIH0gZnJvbSBcIi4vcHJvdmlkZXIubWpzXCI7XG5cbmV4cG9ydCB7IFRyYW5zbGF0aW9ucywgZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMgfTtcblxuLyoqXG4gKiBXaXRoIHRoaXMgY2xhc3MgeW91IGNhbiBtYW5hZ2UgdHJhbnNsYXRpb25zIGFuZCBhY2Nlc3MgdGhlIGtleXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2kxOG4vdHJhbnNsYXRpb25zLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzMwNjZcbiAqL1xuY2xhc3MgVHJhbnNsYXRpb25zIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0xvY2FsZX0gbG9jYWxlXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihsb2NhbGUpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKGxvY2FsZSBpbnN0YW5jZW9mIExvY2FsZSkge1xuXHRcdFx0dGhpcy5sb2NhbGUgPSBsb2NhbGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubG9jYWxlID0gcGFyc2VMb2NhbGUodmFsaWRhdGVTdHJpbmcobG9jYWxlKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdG9yYWdlID0gbmV3IE1hcCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvaTE4bi90cmFuc2xhdGlvbnNAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZldGNoZXMgYSB0ZXh0IHVzaW5nIHRoZSBzcGVjaWZpZWQga2V5LlxuXHQgKiBJZiBubyBzdWl0YWJsZSBrZXkgaXMgZm91bmQsIGBkZWZhdWx0VGV4dGAgaXMgdGFrZW4uXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBkZWZhdWx0VGV4dFxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBrZXkgbm90IGZvdW5kXG5cdCAqL1xuXHRnZXRUZXh0KGtleSwgZGVmYXVsdFRleHQpIHtcblx0XHRpZiAoIXRoaXMuc3RvcmFnZS5oYXMoa2V5KSkge1xuXHRcdFx0aWYgKGRlZmF1bHRUZXh0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBrZXkgJHtrZXl9IG5vdCBmb3VuZGApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsaWRhdGVTdHJpbmcoZGVmYXVsdFRleHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHIgPSB0aGlzLnN0b3JhZ2UuZ2V0KGtleSk7XG5cdFx0aWYgKGlzT2JqZWN0KHIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRQbHVyYWxSdWxlVGV4dChrZXksIFwib3RoZXJcIiwgZGVmYXVsdFRleHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnN0b3JhZ2UuZ2V0KGtleSk7XG5cdH1cblxuXHQvKipcblx0ICogQSBudW1iZXIgYGNvdW50YCBjYW4gYmUgcGFzc2VkIHRvIHRoaXMgbWV0aG9kLiBJbiBhZGRpdGlvbiB0byBhIG51bWJlciwgb25lIG9mIHRoZSBrZXl3b3JkcyBjYW4gYWxzbyBiZSBwYXNzZWQgZGlyZWN0bHkuXG5cdCAqIFwiemVyb1wiLCBcIm9uZVwiLCBcInR3b1wiLCBcImZld1wiLCBcIm1hbnlcIiBhbmQgXCJvdGhlclwiLiBSZW1lbWJlcjogbm90IGV2ZXJ5IGxhbmd1YWdlIGhhcyBhbGwgcnVsZXMuXG5cdCAqXG5cdCAqIFRoZSBhcHByb3ByaWF0ZSB0ZXh0IGZvciB0aGlzIG51bWJlciBpcyB0aGVuIHNlbGVjdGVkLiBJZiBubyBzdWl0YWJsZSBrZXkgaXMgZm91bmQsIGBkZWZhdWx0VGV4dGAgaXMgdGFrZW4uXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcblx0ICogQHBhcmFtIHtpbnRlZ2VyfHN0cmluZ30gY291bnRcblx0ICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBkZWZhdWx0VGV4dFxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXRQbHVyYWxSdWxlVGV4dChrZXksIGNvdW50LCBkZWZhdWx0VGV4dCkge1xuXHRcdGlmICghdGhpcy5zdG9yYWdlLmhhcyhrZXkpKSB7XG5cdFx0XHRyZXR1cm4gdmFsaWRhdGVTdHJpbmcoZGVmYXVsdFRleHQpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHIgPSB2YWxpZGF0ZU9iamVjdCh0aGlzLnN0b3JhZ2UuZ2V0KGtleSkpO1xuXG5cdFx0bGV0IGtleXdvcmQ7XG5cdFx0aWYgKGlzU3RyaW5nKGNvdW50KSkge1xuXHRcdFx0a2V5d29yZCA9IGNvdW50LnRvTG9jYWxlU3RyaW5nKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvdW50ID0gdmFsaWRhdGVJbnRlZ2VyKGNvdW50KTtcblx0XHRcdGlmIChjb3VudCA9PT0gMCkge1xuXHRcdFx0XHQvLyBzcGVjaWFsIGhhbmRsaW5nIGZvciB6ZXJvIGNvdW50XG5cdFx0XHRcdGlmIChyLmhhc093blByb3BlcnR5KFwiemVyb1wiKSkge1xuXHRcdFx0XHRcdHJldHVybiB2YWxpZGF0ZVN0cmluZyhyPy56ZXJvKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRrZXl3b3JkID0gbmV3IEludGwuUGx1cmFsUnVsZXModGhpcy5sb2NhbGUudG9TdHJpbmcoKSkuc2VsZWN0KFxuXHRcdFx0XHR2YWxpZGF0ZUludGVnZXIoY291bnQpLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAoci5oYXNPd25Qcm9wZXJ0eShrZXl3b3JkKSkge1xuXHRcdFx0cmV0dXJuIHZhbGlkYXRlU3RyaW5nKHJba2V5d29yZF0pO1xuXHRcdH1cblxuXHRcdC8vIEBkZXByZWNhdGVkIHNpbmNlIDIwMjMtMDMtMTRcblx0XHQvLyBERUZBVUxUX0tFWSBpcyB1bmRlZmluZWRcblx0XHQvLyBpZiAoci5oYXNPd25Qcm9wZXJ0eShERUZBVUxUX0tFWSkpIHtcblx0XHQvLyAgICAgcmV0dXJuIHZhbGlkYXRlU3RyaW5nKHJbREVGQVVMVF9LRVldKTtcblx0XHQvLyB9XG5cblx0XHRyZXR1cm4gdmFsaWRhdGVTdHJpbmcoZGVmYXVsdFRleHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBhIHRleHQgZm9yIGEga2V5XG5cdCAqXG5cdCAqIGBgYFxuXHQgKiB0cmFuc2xhdGlvbnMuc2V0VGV4dChcInRleHQxXCIsIFwiTWFrZSBteSBkYXkhXCIpO1xuXHQgKiAvLyBwbHVyYWwgcnVsZXNcblx0ICogdHJhbnNsYXRpb25zLnNldFRleHQoXCJ0ZXh0NlwiLCB7XG5cdCAqICAgICBcInplcm9cIjogXCJUaGVyZSBhcmUgbm8gZmlsZXMgb24gRGlzay5cIixcblx0ICogICAgIFwib25lXCI6IFwiVGhlcmUgaXMgb25lIGZpbGUgb24gRGlzay5cIixcblx0ICogICAgIFwib3RoZXJcIjogXCJUaGVyZSBhcmUgZmlsZXMgb24gRGlzay5cIlxuXHQgKiAgICAgXCJkZWZhdWx0XCI6IFwiVGhlcmUgYXJlIGZpbGVzIG9uIERpc2suXCJcblx0ICogfSk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG5cdCAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gdGV4dFxuXHQgKiBAcmV0dXJuIHtUcmFuc2xhdGlvbnN9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nIG9yIG9iamVjdFxuXHQgKi9cblx0c2V0VGV4dChrZXksIHRleHQpIHtcblx0XHRpZiAoaXNTdHJpbmcodGV4dCkgfHwgaXNPYmplY3QodGV4dCkpIHtcblx0XHRcdHRoaXMuc3RvcmFnZS5zZXQodmFsaWRhdGVTdHJpbmcoa2V5KSwgdGV4dCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGEgc3RyaW5nIG9yIG9iamVjdFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byB0cmFuc2ZlciBvdmVybGF5cyBmcm9tIGFuIG9iamVjdC4gVGhlIGtleXMgYXJlIHRyYW5zZmVycmVkLCBhbmQgdGhlIHZhbHVlcyBhcmUgZW50ZXJlZFxuXHQgKiBhcyB0ZXh0LlxuXHQgKlxuXHQgKiBUaGUgdmFsdWVzIGNhbiBlaXRoZXIgYmUgY2hhcmFjdGVyIHN0cmluZ3Mgb3IsIGluIHRoZSBjYXNlIG9mIHRleHRzIHdpdGggcGx1cmFsIGZvcm1zLCBvYmplY3RzLiBUaGUgcGx1cmFsIGZvcm1zXG5cdCAqIG11c3QgYmUgc3RvcmVkIGFzIHRleHQgdmlhIGEgc3RhbmRhcmQga2V5IFwiemVyb1wiLCBcIm9uZVwiLCBcInR3b1wiLCBcImZld1wiLCBcIm1hbnlcIiBhbmQgXCJvdGhlclwiLlxuXHQgKlxuXHQgKiBBZGRpdGlvbmFsbHksIHRoZSBrZXkgZGVmYXVsdCBjYW4gYmUgc3BlY2lmaWVkLCB3aGljaCB3aWxsIGJlIHVzZWQgaWYgbm8gb3RoZXIga2V5IGZpdHMuXG5cdCAqXG5cdCAqIEluIHNvbWUgbGFuZ3VhZ2VzLCBsaWtlIGZvciBleGFtcGxlIGluIEdlcm1hbiwgdGhlcmUgaXMgbm8gb3duIG1vcmUgbnVtYmVyIGF0IHRoZSB2YWx1ZSAwLiBJbiB0aGVzZSBsYW5ndWFnZXMsXG5cdCAqIHRoZSBmdW5jdGlvbiBhcHBsaWVzIGFkZGl0aW9uYWxseSB6ZXJvLlxuXHQgKlxuXHQgKiBgYGBcblx0ICogdHJhbnNsYXRpb25zLmFzc2lnblRyYW5zbGF0aW9ucyh7XG5cdCAqICAgXCJ0ZXh0MVwiOiBcIk1ha2UgbXkgZGF5IVwiLFxuXHQgKiAgIFwidGV4dDJcIjogXCJJJ2xsIGJlIGJhY2shXCIsXG5cdCAqICAgXCJ0ZXh0NlwiOiB7XG5cdCAqICAgICBcInplcm9cIjogXCJUaGVyZSBhcmUgbm8gZmlsZXMgb24gRGlzay5cIixcblx0ICogICAgIFwib25lXCI6IFwiVGhlcmUgaXMgb25lIGZpbGUgb24gRGlzay5cIixcblx0ICogICAgIFwib3RoZXJcIjogXCJUaGVyZSBhcmUgZmlsZXMgb24gRGlzay5cIlxuXHQgKiAgICAgXCJkZWZhdWx0XCI6IFwiVGhlcmUgYXJlIGZpbGVzIG9uIERpc2suXCJcblx0ICogfSk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gdHJhbnNsYXRpb25zXG5cdCAqIEByZXR1cm4ge1RyYW5zbGF0aW9uc31cblx0ICovXG5cdGFzc2lnblRyYW5zbGF0aW9ucyh0cmFuc2xhdGlvbnMpIHtcblx0XHR2YWxpZGF0ZU9iamVjdCh0cmFuc2xhdGlvbnMpO1xuXG5cdFx0aWYgKHRyYW5zbGF0aW9ucyBpbnN0YW5jZW9mIFRyYW5zbGF0aW9ucykge1xuXHRcdFx0dHJhbnNsYXRpb25zLnN0b3JhZ2UuZm9yRWFjaCgodiwgaykgPT4ge1xuXHRcdFx0XHR0aGlzLnNldFRleHQoaywgdik7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHRyYW5zbGF0aW9ucykpIHtcblx0XHRcdHRoaXMuc2V0VGV4dChrLCB2KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIHRyYW5zbGF0aW9ucyBmb3IgdGhlIGN1cnJlbnQgZG9jdW1lbnQuXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudHx1bmRlZmluZWR9IFtlbGVtZW50XSAtIEVsZW1lbnQgdG8gc2VhcmNoIGZvciB0cmFuc2xhdGlvbnMuIERlZmF1bHQ6IGVsZW1lbnQgd2l0aCBvYmplY3RsaW5rIEBzY2h1a2FpL21vbnN0ZXIvaTE4bi90cmFuc2xhdGlvbnNAQGxpbmsuXG4gKiBAcmV0dXJuIHtUcmFuc2xhdGlvbnN9XG4gKiBAdGhyb3dzIHtFcnJvcn0gRWxlbWVudCBpcyBub3QgYW4gSFRNTEVsZW1lbnQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gQ2Fubm90IGZpbmQgdGhlIGVsZW1lbnQgd2l0aCB0cmFuc2xhdGlvbnMuIEFkZCB0aGUgdHJhbnNsYXRpb24gb2JqZWN0IHRvIHRoZSBkb2N1bWVudC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBUaGlzIGVsZW1lbnQgaGFzIG5vIHRyYW5zbGF0aW9ucy5cbiAqIEB0aHJvd3Mge0Vycm9yfSBNaXNzaW5nIHRyYW5zbGF0aW9ucy5cbiAqL1xuZnVuY3Rpb24gZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoZWxlbWVudCkge1xuXHRjb25zdCBkID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0ZWxlbWVudCA9IGQucXVlcnlTZWxlY3Rvcihcblx0XHRcdGBbJHtBVFRSSUJVVEVfT0JKRUNUTElOS31+PVwiJHt0cmFuc2xhdGlvbnNMaW5rU3ltYm9sLnRvU3RyaW5nKCl9XCJdYCxcblx0XHQpO1xuXHRcdGlmIChlbGVtZW50ID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFwiQ2Fubm90IGZpbmQgdGhlIGVsZW1lbnQgd2l0aCB0cmFuc2xhdGlvbnMuIEFkZCB0aGUgdHJhbnNsYXRpb24gb2JqZWN0IHRvIHRoZSBkb2N1bWVudC5cIixcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkVsZW1lbnQgaXMgbm90IGFuIEhUTUxFbGVtZW50LlwiKTtcblx0fVxuXG5cdGlmICghaGFzT2JqZWN0TGluayhlbGVtZW50LCB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoaXMgZWxlbWVudCBoYXMgbm8gdHJhbnNsYXRpb25zLlwiKTtcblx0fVxuXG5cdGNvbnN0IG9iaiA9IGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCk7XG5cblx0Zm9yIChjb25zdCB0IG9mIG9iaikge1xuXHRcdGlmICh0IGluc3RhbmNlb2YgVHJhbnNsYXRpb25zKSB7XG5cdFx0XHRyZXR1cm4gdDtcblx0XHR9XG5cdH1cblxuXHR0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHRyYW5zbGF0aW9ucy5cIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuZXhwb3J0IHsgZm9ybWF0VGltZUFnbyB9O1xuXG4vKipcbiAqIEZvcm1hdCBhIGRhdGUgYXMgYSByZWxhdGl2ZSB0aW1lIHN0cmluZyB3aXRoIG11bHRpcGxlIHVuaXRzLlxuICpcbiAqIEBwYXJhbSBkYXRlXG4gKiBAcGFyYW0gbG9jYWxlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBmb3JtYXRUaW1lQWdvKGRhdGUsIGxvY2FsZSkge1xuXHRjb25zdCBub3cgPSBuZXcgRGF0ZShNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkgKiAxMDAwKTtcblx0Y29uc3Qgcm91bmRlZERhdGUgPSBuZXcgRGF0ZShNYXRoLmZsb29yKGRhdGUuZ2V0VGltZSgpIC8gMTAwMCkgKiAxMDAwKTtcblx0Y29uc3QgZGlmZkluU2Vjb25kcyA9IE1hdGguZmxvb3IoKHJvdW5kZWREYXRlIC0gbm93KSAvIDEwMDApO1xuXHRjb25zdCBhYnNEaWZmID0gTWF0aC5hYnMoZGlmZkluU2Vjb25kcyk7XG5cblx0Y29uc3QgdHJhbnNsYXRpb24gPSB0cmFuc2xhdGlvbnNbbm9ybWFsaXplTG9jYWxlKGxvY2FsZSldO1xuXG5cdGlmIChhYnNEaWZmID09PSAwKSB7XG5cdFx0cmV0dXJuIHRyYW5zbGF0aW9uLnRlbXBsYXRlLmp1c3ROb3coKTtcblx0fVxuXG5cdGlmIChhYnNEaWZmID4gMzE1MzYwMDApIHtcblx0XHRyZXR1cm4gdHJhbnNsYXRpb24udGVtcGxhdGUub24oXG5cdFx0XHRuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIHtcblx0XHRcdFx0ZGF0ZVN0eWxlOiBcImZ1bGxcIixcblx0XHRcdFx0dGltZVN0eWxlOiBcInNob3J0XCIsXG5cdFx0XHR9KS5mb3JtYXQoZGF0ZSksXG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0IHVuaXRzID0gW1xuXHRcdHsgbmFtZTogXCJ5ZWFyXCIsIGxlbmd0aDogMzE1MzYwMDAgfSwgLy8gSGluenVnZWZcdTAwRkNndCBmXHUwMEZDciBLb25zaXN0ZW56LCBhdWNoIHdlbm4gbmljaHQgZ2VudXR6dCBpbiBkaWVzZXIgc3BlemlmaXNjaGVuIExvZ2lrXG5cdFx0eyBuYW1lOiBcImRheVwiLCBsZW5ndGg6IDg2NDAwIH0sXG5cdFx0eyBuYW1lOiBcImhvdXJcIiwgbGVuZ3RoOiAzNjAwIH0sXG5cdFx0eyBuYW1lOiBcIm1pbnV0ZVwiLCBsZW5ndGg6IDYwIH0sXG5cdFx0eyBuYW1lOiBcInNlY29uZFwiLCBsZW5ndGg6IDEgfSxcblx0XTtcblxuXHRsZXQgcmVtYWluZGVyID0gYWJzRGlmZjtcblx0Y29uc3QgcGFydHMgPSBbXTtcblxuXHRmb3IgKGNvbnN0IHVuaXQgb2YgdW5pdHMpIHtcblx0XHRpZiAocmVtYWluZGVyID49IHVuaXQubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBjb3VudCA9IE1hdGguZmxvb3IocmVtYWluZGVyIC8gdW5pdC5sZW5ndGgpO1xuXHRcdFx0cmVtYWluZGVyICU9IHVuaXQubGVuZ3RoO1xuXHRcdFx0Y29uc3QgZm9ybWF0dGVkID0gZm9ybWF0VW5pdENvdW50KGNvdW50LCB1bml0Lm5hbWUsIGxvY2FsZSk7XG5cdFx0XHRwYXJ0cy5wdXNoKGZvcm1hdHRlZCk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiB0cmFuc2xhdGlvbi50ZW1wbGF0ZS5qdXN0Tm93KCk7XG5cdH1cblxuXHRjb25zdCBqb2luZWQgPSBuZXcgSW50bC5MaXN0Rm9ybWF0KGxvY2FsZSwge1xuXHRcdHN0eWxlOiBcImxvbmdcIixcblx0XHR0eXBlOiBcImNvbmp1bmN0aW9uXCIsXG5cdH0pLmZvcm1hdChwYXJ0cyk7XG5cdGlmIChkaWZmSW5TZWNvbmRzID4gMCkge1xuXHRcdHJldHVybiB0cmFuc2xhdGlvbi50ZW1wbGF0ZS5mdXR1cmUoam9pbmVkKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdHJhbnNsYXRpb24udGVtcGxhdGUucGFzdChqb2luZWQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVuaXRDb3VudChjb3VudCwgdW5pdCwgbG9jYWxlKSB7XG5cdGNvbnN0IGxhbmcgPSBub3JtYWxpemVMb2NhbGUobG9jYWxlKTtcblx0Y29uc3QgZmFsbGJhY2sgPSB0cmFuc2xhdGlvbnNbbGFuZ10gfHwgdHJhbnNsYXRpb25zW1wiZW5cIl07XG5cdGNvbnN0IGRpY3RGb3JVbml0ID0gZmFsbGJhY2sudW5pdHNbdW5pdF07XG5cdGNvbnN0IHByID0gbmV3IEludGwuUGx1cmFsUnVsZXMobGFuZyk7XG5cdGNvbnN0IGNhdGVnb3J5ID0gcHIuc2VsZWN0KGNvdW50KTtcblx0Y29uc3QgcGhyYXNlID0gZGljdEZvclVuaXRbY2F0ZWdvcnldIHx8IGRpY3RGb3JVbml0Lm90aGVyO1xuXHRyZXR1cm4gYCR7Y291bnR9ICR7cGhyYXNlfWA7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZShsb2NhbGUpIHtcblx0cmV0dXJuIGxvY2FsZS5zcGxpdChcIi1cIilbMF0udG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCB0cmFuc2xhdGlvbnMgPSB7XG5cdGVuOiB7XG5cdFx0dGVtcGxhdGU6IHtcblx0XHRcdG9uOiAodmFsdWUpID0+IGBvbiAke3ZhbHVlfWAsXG5cdFx0XHRwYXN0OiAodmFsdWUpID0+IGAke3ZhbHVlfSBhZ29gLFxuXHRcdFx0ZnV0dXJlOiAodmFsdWUpID0+IGBpbiAke3ZhbHVlfWAsXG5cdFx0XHRqdXN0Tm93OiAoKSA9PiBganVzdCBub3dgLFxuXHRcdH0sXG5cdFx0dW5pdHM6IHtcblx0XHRcdGRheToge1xuXHRcdFx0XHR6ZXJvOiBcImRheXNcIixcblx0XHRcdFx0b25lOiBcImRheVwiLFxuXHRcdFx0XHR0d286IFwiZGF5c1wiLFxuXHRcdFx0XHRmZXc6IFwiZGF5c1wiLFxuXHRcdFx0XHRtYW55OiBcImRheXNcIixcblx0XHRcdFx0b3RoZXI6IFwiZGF5c1wiLFxuXHRcdFx0fSxcblx0XHRcdGhvdXI6IHtcblx0XHRcdFx0emVybzogXCJob3Vyc1wiLFxuXHRcdFx0XHRvbmU6IFwiaG91clwiLFxuXHRcdFx0XHR0d286IFwiaG91cnNcIixcblx0XHRcdFx0ZmV3OiBcImhvdXJzXCIsXG5cdFx0XHRcdG1hbnk6IFwiaG91cnNcIixcblx0XHRcdFx0b3RoZXI6IFwiaG91cnNcIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJtaW51dGVzXCIsXG5cdFx0XHRcdG9uZTogXCJtaW51dGVcIixcblx0XHRcdFx0dHdvOiBcIm1pbnV0ZXNcIixcblx0XHRcdFx0ZmV3OiBcIm1pbnV0ZXNcIixcblx0XHRcdFx0bWFueTogXCJtaW51dGVzXCIsXG5cdFx0XHRcdG90aGVyOiBcIm1pbnV0ZXNcIixcblx0XHRcdH0sXG5cdFx0XHRzZWNvbmQ6IHtcblx0XHRcdFx0emVybzogXCJzZWNvbmRzXCIsXG5cdFx0XHRcdG9uZTogXCJzZWNvbmRcIixcblx0XHRcdFx0dHdvOiBcInNlY29uZHNcIixcblx0XHRcdFx0ZmV3OiBcInNlY29uZHNcIixcblx0XHRcdFx0bWFueTogXCJzZWNvbmRzXCIsXG5cdFx0XHRcdG90aGVyOiBcInNlY29uZHNcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHR6aDoge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgXHU1NzI4JHt2YWx1ZX1gLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgJHt2YWx1ZX1cdTUyNERgLFxuXHRcdFx0ZnV0dXJlOiAodmFsdWUpID0+IGAke3ZhbHVlfVx1NTQwRWAsXG5cdFx0XHRqdXN0Tm93OiAoKSA9PiBgXHU1MjFBXHU1MjFBYCxcblx0XHR9LFxuXHRcdHVuaXRzOiB7XG5cdFx0XHRkYXk6IHtcblx0XHRcdFx0emVybzogXCJcdTU5MjlcIixcblx0XHRcdFx0b25lOiBcIlx1NTkyOVwiLFxuXHRcdFx0XHR0d286IFwiXHU1OTI5XCIsXG5cdFx0XHRcdGZldzogXCJcdTU5MjlcIixcblx0XHRcdFx0bWFueTogXCJcdTU5MjlcIixcblx0XHRcdFx0b3RoZXI6IFwiXHU1OTI5XCIsXG5cdFx0XHR9LFxuXHRcdFx0aG91cjoge1xuXHRcdFx0XHR6ZXJvOiBcIlx1NUMwRlx1NjVGNlwiLFxuXHRcdFx0XHRvbmU6IFwiXHU1QzBGXHU2NUY2XCIsXG5cdFx0XHRcdHR3bzogXCJcdTVDMEZcdTY1RjZcIixcblx0XHRcdFx0ZmV3OiBcIlx1NUMwRlx1NjVGNlwiLFxuXHRcdFx0XHRtYW55OiBcIlx1NUMwRlx1NjVGNlwiLFxuXHRcdFx0XHRvdGhlcjogXCJcdTVDMEZcdTY1RjZcIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJcdTUyMDZcdTk0OUZcIixcblx0XHRcdFx0b25lOiBcIlx1NTIwNlx1OTQ5RlwiLFxuXHRcdFx0XHR0d286IFwiXHU1MjA2XHU5NDlGXCIsXG5cdFx0XHRcdGZldzogXCJcdTUyMDZcdTk0OUZcIixcblx0XHRcdFx0bWFueTogXCJcdTUyMDZcdTk0OUZcIixcblx0XHRcdFx0b3RoZXI6IFwiXHU1MjA2XHU5NDlGXCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwiXHU3OUQyXCIsXG5cdFx0XHRcdG9uZTogXCJcdTc5RDJcIixcblx0XHRcdFx0dHdvOiBcIlx1NzlEMlwiLFxuXHRcdFx0XHRmZXc6IFwiXHU3OUQyXCIsXG5cdFx0XHRcdG1hbnk6IFwiXHU3OUQyXCIsXG5cdFx0XHRcdG90aGVyOiBcIlx1NzlEMlwiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXG5cdGVzOiB7XG5cdFx0dGVtcGxhdGU6IHtcblx0XHRcdG9uOiAodmFsdWUpID0+IGBlbCAke3ZhbHVlfWAsXG5cdFx0XHRwYXN0OiAodmFsdWUpID0+IGBoYWNlICR7dmFsdWV9YCxcblx0XHRcdGZ1dHVyZTogKHZhbHVlKSA9PiBgZW4gJHt2YWx1ZX1gLFxuXHRcdFx0anVzdE5vdzogKCkgPT4gYGp1c3RvIGFob3JhYCxcblx0XHR9LFxuXHRcdHVuaXRzOiB7XG5cdFx0XHRkYXk6IHtcblx0XHRcdFx0emVybzogXCJkXHUwMEVEYXNcIixcblx0XHRcdFx0b25lOiBcImRcdTAwRURhXCIsXG5cdFx0XHRcdHR3bzogXCJkXHUwMEVEYXNcIixcblx0XHRcdFx0ZmV3OiBcImRcdTAwRURhc1wiLFxuXHRcdFx0XHRtYW55OiBcImRcdTAwRURhc1wiLFxuXHRcdFx0XHRvdGhlcjogXCJkXHUwMEVEYXNcIixcblx0XHRcdH0sXG5cdFx0XHRob3VyOiB7XG5cdFx0XHRcdHplcm86IFwiaG9yYXNcIixcblx0XHRcdFx0b25lOiBcImhvcmFcIixcblx0XHRcdFx0dHdvOiBcImhvcmFzXCIsXG5cdFx0XHRcdGZldzogXCJob3Jhc1wiLFxuXHRcdFx0XHRtYW55OiBcImhvcmFzXCIsXG5cdFx0XHRcdG90aGVyOiBcImhvcmFzXCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwibWludXRvc1wiLFxuXHRcdFx0XHRvbmU6IFwibWludXRvXCIsXG5cdFx0XHRcdHR3bzogXCJtaW51dG9zXCIsXG5cdFx0XHRcdGZldzogXCJtaW51dG9zXCIsXG5cdFx0XHRcdG1hbnk6IFwibWludXRvc1wiLFxuXHRcdFx0XHRvdGhlcjogXCJtaW51dG9zXCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwic2VndW5kb3NcIixcblx0XHRcdFx0b25lOiBcInNlZ3VuZG9cIixcblx0XHRcdFx0dHdvOiBcInNlZ3VuZG9zXCIsXG5cdFx0XHRcdGZldzogXCJzZWd1bmRvc1wiLFxuXHRcdFx0XHRtYW55OiBcInNlZ3VuZG9zXCIsXG5cdFx0XHRcdG90aGVyOiBcInNlZ3VuZG9zXCIsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdH0sXG5cblx0ZGU6IHtcblx0XHR0ZW1wbGF0ZToge1xuXHRcdFx0b246ICh2YWx1ZSkgPT4gYGFtICR7dmFsdWV9YCxcblx0XHRcdHBhc3Q6ICh2YWx1ZSkgPT4gYHZvciAke3ZhbHVlfWAsXG5cdFx0XHRmdXR1cmU6ICh2YWx1ZSkgPT4gYGluICR7dmFsdWV9YCxcblx0XHRcdGp1c3ROb3c6ICgpID0+IGBnZXJhZGUgZWJlbmAsXG5cdFx0fSxcblx0XHR1bml0czoge1xuXHRcdFx0ZGF5OiB7XG5cdFx0XHRcdHplcm86IFwiVGFnZW5cIixcblx0XHRcdFx0b25lOiBcIlRhZ1wiLFxuXHRcdFx0XHR0d286IFwiVGFnZW5cIixcblx0XHRcdFx0ZmV3OiBcIlRhZ2VuXCIsXG5cdFx0XHRcdG1hbnk6IFwiVGFnZW5cIixcblx0XHRcdFx0b3RoZXI6IFwiVGFnZW5cIixcblx0XHRcdH0sXG5cdFx0XHRob3VyOiB7XG5cdFx0XHRcdHplcm86IFwiU3R1bmRlblwiLFxuXHRcdFx0XHRvbmU6IFwiU3R1bmRlXCIsXG5cdFx0XHRcdHR3bzogXCJTdHVuZGVuXCIsXG5cdFx0XHRcdGZldzogXCJTdHVuZGVuXCIsXG5cdFx0XHRcdG1hbnk6IFwiU3R1bmRlblwiLFxuXHRcdFx0XHRvdGhlcjogXCJTdHVuZGVuXCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwiTWludXRlblwiLFxuXHRcdFx0XHRvbmU6IFwiTWludXRlXCIsXG5cdFx0XHRcdHR3bzogXCJNaW51dGVuXCIsXG5cdFx0XHRcdGZldzogXCJNaW51dGVuXCIsXG5cdFx0XHRcdG1hbnk6IFwiTWludXRlblwiLFxuXHRcdFx0XHRvdGhlcjogXCJNaW51dGVuXCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwiU2VrdW5kZW5cIixcblx0XHRcdFx0b25lOiBcIlNla3VuZGVcIixcblx0XHRcdFx0dHdvOiBcIlNla3VuZGVuXCIsXG5cdFx0XHRcdGZldzogXCJTZWt1bmRlblwiLFxuXHRcdFx0XHRtYW55OiBcIlNla3VuZGVuXCIsXG5cdFx0XHRcdG90aGVyOiBcIlNla3VuZGVuXCIsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdH0sXG5cblx0ZnI6IHtcblx0XHR0ZW1wbGF0ZToge1xuXHRcdFx0b246ICh2YWx1ZSkgPT4gYGxlICR7dmFsdWV9YCxcblx0XHRcdHBhc3Q6ICh2YWx1ZSkgPT4gYGlsIHkgYSAke3ZhbHVlfWAsXG5cdFx0XHRmdXR1cmU6ICh2YWx1ZSkgPT4gYGRhbnMgJHt2YWx1ZX1gLFxuXHRcdFx0anVzdE5vdzogKCkgPT4gYFx1MDBFMCBsJ2luc3RhbnRgLFxuXHRcdH0sXG5cdFx0dW5pdHM6IHtcblx0XHRcdGRheToge1xuXHRcdFx0XHR6ZXJvOiBcImpvdXJzXCIsXG5cdFx0XHRcdG9uZTogXCJqb3VyXCIsXG5cdFx0XHRcdHR3bzogXCJqb3Vyc1wiLFxuXHRcdFx0XHRmZXc6IFwiam91cnNcIixcblx0XHRcdFx0bWFueTogXCJqb3Vyc1wiLFxuXHRcdFx0XHRvdGhlcjogXCJqb3Vyc1wiLFxuXHRcdFx0fSxcblx0XHRcdGhvdXI6IHtcblx0XHRcdFx0emVybzogXCJoZXVyZXNcIixcblx0XHRcdFx0b25lOiBcImhldXJlXCIsXG5cdFx0XHRcdHR3bzogXCJoZXVyZXNcIixcblx0XHRcdFx0ZmV3OiBcImhldXJlc1wiLFxuXHRcdFx0XHRtYW55OiBcImhldXJlc1wiLFxuXHRcdFx0XHRvdGhlcjogXCJoZXVyZXNcIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJtaW51dGVzXCIsXG5cdFx0XHRcdG9uZTogXCJtaW51dGVcIixcblx0XHRcdFx0dHdvOiBcIm1pbnV0ZXNcIixcblx0XHRcdFx0ZmV3OiBcIm1pbnV0ZXNcIixcblx0XHRcdFx0bWFueTogXCJtaW51dGVzXCIsXG5cdFx0XHRcdG90aGVyOiBcIm1pbnV0ZXNcIixcblx0XHRcdH0sXG5cdFx0XHRzZWNvbmQ6IHtcblx0XHRcdFx0emVybzogXCJzZWNvbmRlc1wiLFxuXHRcdFx0XHRvbmU6IFwic2Vjb25kZVwiLFxuXHRcdFx0XHR0d286IFwic2Vjb25kZXNcIixcblx0XHRcdFx0ZmV3OiBcInNlY29uZGVzXCIsXG5cdFx0XHRcdG1hbnk6IFwic2Vjb25kZXNcIixcblx0XHRcdFx0b3RoZXI6IFwic2Vjb25kZXNcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHRydToge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgXHUwNDNEXHUwNDMwICR7dmFsdWV9YCxcblx0XHRcdHBhc3Q6ICh2YWx1ZSkgPT4gYCR7dmFsdWV9IFx1MDQzRFx1MDQzMFx1MDQzN1x1MDQzMFx1MDQzNGAsXG5cdFx0XHRmdXR1cmU6ICh2YWx1ZSkgPT4gYFx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzNyAke3ZhbHVlfWAsXG5cdFx0XHRqdXN0Tm93OiAoKSA9PiBgXHUwNDQyXHUwNDNFXHUwNDNCXHUwNDRDXHUwNDNBXHUwNDNFIFx1MDQ0N1x1MDQ0Mlx1MDQzRWAsXG5cdFx0fSxcblx0XHR1bml0czoge1xuXHRcdFx0ZGF5OiB7XG5cdFx0XHRcdHplcm86IFwiXHUwNDM0XHUwNDNEXHUwNDM1XHUwNDM5XCIsXG5cdFx0XHRcdG9uZTogXCJcdTA0MzRcdTA0MzVcdTA0M0RcdTA0NENcIixcblx0XHRcdFx0dHdvOiBcIlx1MDQzNFx1MDQzRFx1MDQ0RlwiLFxuXHRcdFx0XHRmZXc6IFwiXHUwNDM0XHUwNDNEXHUwNDRGXCIsXG5cdFx0XHRcdG1hbnk6IFwiXHUwNDM0XHUwNDNEXHUwNDM1XHUwNDM5XCIsXG5cdFx0XHRcdG90aGVyOiBcIlx1MDQzNFx1MDQzRFx1MDQzNVx1MDQzOVwiLFxuXHRcdFx0fSxcblx0XHRcdGhvdXI6IHtcblx0XHRcdFx0emVybzogXCJcdTA0NDdcdTA0MzBcdTA0NDFcdTA0M0VcdTA0MzJcIixcblx0XHRcdFx0b25lOiBcIlx1MDQ0N1x1MDQzMFx1MDQ0MVwiLFxuXHRcdFx0XHR0d286IFwiXHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDMwXCIsXG5cdFx0XHRcdGZldzogXCJcdTA0NDdcdTA0MzBcdTA0NDFcdTA0MzBcIixcblx0XHRcdFx0bWFueTogXCJcdTA0NDdcdTA0MzBcdTA0NDFcdTA0M0VcdTA0MzJcIixcblx0XHRcdFx0b3RoZXI6IFwiXHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDNFXHUwNDMyXCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwiXHUwNDNDXHUwNDM4XHUwNDNEXHUwNDQzXHUwNDQyXCIsXG5cdFx0XHRcdG9uZTogXCJcdTA0M0NcdTA0MzhcdTA0M0RcdTA0NDNcdTA0NDJcdTA0MzBcIixcblx0XHRcdFx0dHdvOiBcIlx1MDQzQ1x1MDQzOFx1MDQzRFx1MDQ0M1x1MDQ0Mlx1MDQ0QlwiLFxuXHRcdFx0XHRmZXc6IFwiXHUwNDNDXHUwNDM4XHUwNDNEXHUwNDQzXHUwNDQyXHUwNDRCXCIsXG5cdFx0XHRcdG1hbnk6IFwiXHUwNDNDXHUwNDM4XHUwNDNEXHUwNDQzXHUwNDQyXCIsXG5cdFx0XHRcdG90aGVyOiBcIlx1MDQzQ1x1MDQzOFx1MDQzRFx1MDQ0M1x1MDQ0MlwiLFxuXHRcdFx0fSxcblx0XHRcdHNlY29uZDoge1xuXHRcdFx0XHR6ZXJvOiBcIlx1MDQ0MVx1MDQzNVx1MDQzQVx1MDQ0M1x1MDQzRFx1MDQzNFwiLFxuXHRcdFx0XHRvbmU6IFwiXHUwNDQxXHUwNDM1XHUwNDNBXHUwNDQzXHUwNDNEXHUwNDM0XHUwNDMwXCIsXG5cdFx0XHRcdHR3bzogXCJcdTA0NDFcdTA0MzVcdTA0M0FcdTA0NDNcdTA0M0RcdTA0MzRcdTA0NEJcIixcblx0XHRcdFx0ZmV3OiBcIlx1MDQ0MVx1MDQzNVx1MDQzQVx1MDQ0M1x1MDQzRFx1MDQzNFx1MDQ0QlwiLFxuXHRcdFx0XHRtYW55OiBcIlx1MDQ0MVx1MDQzNVx1MDQzQVx1MDQ0M1x1MDQzRFx1MDQzNFwiLFxuXHRcdFx0XHRvdGhlcjogXCJcdTA0NDFcdTA0MzVcdTA0M0FcdTA0NDNcdTA0M0RcdTA0MzRcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHRhcjoge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgXHUwNjQxXHUwNjRBICR7dmFsdWV9YCxcblx0XHRcdHBhc3Q6ICh2YWx1ZSkgPT4gYFx1MDY0NVx1MDY0Nlx1MDYzMCAke3ZhbHVlfWAsXG5cdFx0XHRmdXR1cmU6ICh2YWx1ZSkgPT4gYFx1MDYyOFx1MDYzOVx1MDYyRiAke3ZhbHVlfWAsXG5cdFx0XHRqdXN0Tm93OiAoKSA9PiBgXHUwNjI3XHUwNjQ0XHUwNjIyXHUwNjQ2YCxcblx0XHR9LFxuXHRcdHVuaXRzOiB7XG5cdFx0XHRkYXk6IHtcblx0XHRcdFx0emVybzogXCJcdTA2MjNcdTA2NEFcdTA2MjdcdTA2NDVcIixcblx0XHRcdFx0b25lOiBcIlx1MDY0QVx1MDY0OFx1MDY0NVwiLFxuXHRcdFx0XHR0d286IFwiXHUwNjRBXHUwNjQ4XHUwNjQ1XHUwNjRBXHUwNjQ2XCIsXG5cdFx0XHRcdGZldzogXCJcdTA2MjNcdTA2NEFcdTA2MjdcdTA2NDVcIixcblx0XHRcdFx0bWFueTogXCJcdTA2MjNcdTA2NEFcdTA2MjdcdTA2NDVcIixcblx0XHRcdFx0b3RoZXI6IFwiXHUwNjIzXHUwNjRBXHUwNjI3XHUwNjQ1XCIsXG5cdFx0XHR9LFxuXHRcdFx0aG91cjoge1xuXHRcdFx0XHR6ZXJvOiBcIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyQVwiLFxuXHRcdFx0XHRvbmU6IFwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XCIsXG5cdFx0XHRcdHR3bzogXCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MkFcdTA2NEFcdTA2NDZcIixcblx0XHRcdFx0ZmV3OiBcIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyQVwiLFxuXHRcdFx0XHRtYW55OiBcIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyQVwiLFxuXHRcdFx0XHRvdGhlcjogXCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MkFcIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJcdTA2MkZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDJcIixcblx0XHRcdFx0b25lOiBcIlx1MDYyRlx1MDY0Mlx1MDY0QVx1MDY0Mlx1MDYyOVwiLFxuXHRcdFx0XHR0d286IFwiXHUwNjJGXHUwNjQyXHUwNjRBXHUwNjQyXHUwNjJBXHUwNjRBXHUwNjQ2XCIsXG5cdFx0XHRcdGZldzogXCJcdTA2MkZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDJcIixcblx0XHRcdFx0bWFueTogXCJcdTA2MkZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDJcIixcblx0XHRcdFx0b3RoZXI6IFwiXHUwNjJGXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyXCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwiXHUwNjJCXHUwNjQ4XHUwNjI3XHUwNjQ2XHUwNjRBXCIsXG5cdFx0XHRcdG9uZTogXCJcdTA2MkJcdTA2MjdcdTA2NDZcdTA2NEFcdTA2MjlcIixcblx0XHRcdFx0dHdvOiBcIlx1MDYyQlx1MDYyN1x1MDY0Nlx1MDY0QVx1MDYyQVx1MDY0QVx1MDY0NlwiLFxuXHRcdFx0XHRmZXc6IFwiXHUwNjJCXHUwNjQ4XHUwNjI3XHUwNjQ2XHUwNjRBXCIsXG5cdFx0XHRcdG1hbnk6IFwiXHUwNjJCXHUwNjQ4XHUwNjI3XHUwNjQ2XHUwNjRBXCIsXG5cdFx0XHRcdG90aGVyOiBcIlx1MDYyQlx1MDY0OFx1MDYyN1x1MDY0Nlx1MDY0QVwiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXG5cdGhpOiB7XG5cdFx0dGVtcGxhdGU6IHtcblx0XHRcdG9uOiAodmFsdWUpID0+IGAke3ZhbHVlfSBcdTA5MTVcdTA5NEJgLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgJHt2YWx1ZX0gXHUwOTJBXHUwOTM5XHUwOTMyXHUwOTQ3YCxcblx0XHRcdGZ1dHVyZTogKHZhbHVlKSA9PiBgJHt2YWx1ZX0gXHUwOTJFXHUwOTQ3XHUwOTAyYCxcblx0XHRcdGp1c3ROb3c6ICgpID0+IGBcdTA5MDVcdTA5MkRcdTA5NDBgLFxuXHRcdH0sXG5cdFx0dW5pdHM6IHtcblx0XHRcdGRheToge1xuXHRcdFx0XHR6ZXJvOiBcIlx1MDkyNlx1MDkzRlx1MDkyOFwiLFxuXHRcdFx0XHRvbmU6IFwiXHUwOTI2XHUwOTNGXHUwOTI4XCIsXG5cdFx0XHRcdHR3bzogXCJcdTA5MjZcdTA5M0ZcdTA5MjhcIixcblx0XHRcdFx0ZmV3OiBcIlx1MDkyNlx1MDkzRlx1MDkyOFwiLFxuXHRcdFx0XHRtYW55OiBcIlx1MDkyNlx1MDkzRlx1MDkyOFwiLFxuXHRcdFx0XHRvdGhlcjogXCJcdTA5MjZcdTA5M0ZcdTA5MjhcIixcblx0XHRcdH0sXG5cdFx0XHRob3VyOiB7XG5cdFx0XHRcdHplcm86IFwiXHUwOTE4XHUwOTAyXHUwOTFGXHUwOTQ3XCIsXG5cdFx0XHRcdG9uZTogXCJcdTA5MThcdTA5MDJcdTA5MUZcdTA5M0VcIixcblx0XHRcdFx0dHdvOiBcIlx1MDkxOFx1MDkwMlx1MDkxRlx1MDk0N1wiLFxuXHRcdFx0XHRmZXc6IFwiXHUwOTE4XHUwOTAyXHUwOTFGXHUwOTQ3XCIsXG5cdFx0XHRcdG1hbnk6IFwiXHUwOTE4XHUwOTAyXHUwOTFGXHUwOTQ3XCIsXG5cdFx0XHRcdG90aGVyOiBcIlx1MDkxOFx1MDkwMlx1MDkxRlx1MDk0N1wiLFxuXHRcdFx0fSxcblx0XHRcdG1pbnV0ZToge1xuXHRcdFx0XHR6ZXJvOiBcIlx1MDkyRVx1MDkzRlx1MDkyOFx1MDkxRlwiLFxuXHRcdFx0XHRvbmU6IFwiXHUwOTJFXHUwOTNGXHUwOTI4XHUwOTFGXCIsXG5cdFx0XHRcdHR3bzogXCJcdTA5MkVcdTA5M0ZcdTA5MjhcdTA5MUZcIixcblx0XHRcdFx0ZmV3OiBcIlx1MDkyRVx1MDkzRlx1MDkyOFx1MDkxRlwiLFxuXHRcdFx0XHRtYW55OiBcIlx1MDkyRVx1MDkzRlx1MDkyOFx1MDkxRlwiLFxuXHRcdFx0XHRvdGhlcjogXCJcdTA5MkVcdTA5M0ZcdTA5MjhcdTA5MUZcIixcblx0XHRcdH0sXG5cdFx0XHRzZWNvbmQ6IHtcblx0XHRcdFx0emVybzogXCJcdTA5MzhcdTA5NDdcdTA5MTVcdTA5MDJcdTA5MjFcIixcblx0XHRcdFx0b25lOiBcIlx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1MDkyMVwiLFxuXHRcdFx0XHR0d286IFwiXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTIxXCIsXG5cdFx0XHRcdGZldzogXCJcdTA5MzhcdTA5NDdcdTA5MTVcdTA5MDJcdTA5MjFcIixcblx0XHRcdFx0bWFueTogXCJcdTA5MzhcdTA5NDdcdTA5MTVcdTA5MDJcdTA5MjFcIixcblx0XHRcdFx0b3RoZXI6IFwiXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTIxXCIsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdH0sXG5cblx0cHQ6IHtcblx0XHR0ZW1wbGF0ZToge1xuXHRcdFx0b246ICh2YWx1ZSkgPT4gYGVtICR7dmFsdWV9YCxcblx0XHRcdHBhc3Q6ICh2YWx1ZSkgPT4gYGhcdTAwRTEgJHt2YWx1ZX1gLFxuXHRcdFx0ZnV0dXJlOiAodmFsdWUpID0+IGBlbSAke3ZhbHVlfWAsXG5cdFx0XHRqdXN0Tm93OiAoKSA9PiBgYWdvcmEgbWVzbW9gLFxuXHRcdH0sXG5cdFx0dW5pdHM6IHtcblx0XHRcdGRheToge1xuXHRcdFx0XHR6ZXJvOiBcImRpYXNcIixcblx0XHRcdFx0b25lOiBcImRpYVwiLFxuXHRcdFx0XHR0d286IFwiZGlhc1wiLFxuXHRcdFx0XHRmZXc6IFwiZGlhc1wiLFxuXHRcdFx0XHRtYW55OiBcImRpYXNcIixcblx0XHRcdFx0b3RoZXI6IFwiZGlhc1wiLFxuXHRcdFx0fSxcblx0XHRcdGhvdXI6IHtcblx0XHRcdFx0emVybzogXCJob3Jhc1wiLFxuXHRcdFx0XHRvbmU6IFwiaG9yYVwiLFxuXHRcdFx0XHR0d286IFwiaG9yYXNcIixcblx0XHRcdFx0ZmV3OiBcImhvcmFzXCIsXG5cdFx0XHRcdG1hbnk6IFwiaG9yYXNcIixcblx0XHRcdFx0b3RoZXI6IFwiaG9yYXNcIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJtaW51dG9zXCIsXG5cdFx0XHRcdG9uZTogXCJtaW51dG9cIixcblx0XHRcdFx0dHdvOiBcIm1pbnV0b3NcIixcblx0XHRcdFx0ZmV3OiBcIm1pbnV0b3NcIixcblx0XHRcdFx0bWFueTogXCJtaW51dG9zXCIsXG5cdFx0XHRcdG90aGVyOiBcIm1pbnV0b3NcIixcblx0XHRcdH0sXG5cdFx0XHRzZWNvbmQ6IHtcblx0XHRcdFx0emVybzogXCJzZWd1bmRvc1wiLFxuXHRcdFx0XHRvbmU6IFwic2VndW5kb1wiLFxuXHRcdFx0XHR0d286IFwic2VndW5kb3NcIixcblx0XHRcdFx0ZmV3OiBcInNlZ3VuZG9zXCIsXG5cdFx0XHRcdG1hbnk6IFwic2VndW5kb3NcIixcblx0XHRcdFx0b3RoZXI6IFwic2VndW5kb3NcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHRqYToge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgJHt2YWx1ZX1cdTMwNkJgLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgJHt2YWx1ZX1cdTUyNERgLFxuXHRcdFx0ZnV0dXJlOiAodmFsdWUpID0+IGAke3ZhbHVlfVx1NUY4Q2AsXG5cdFx0XHRqdXN0Tm93OiAoKSA9PiBgXHUzMDVGXHUzMDYzXHUzMDVGXHU0RUNBYCxcblx0XHR9LFxuXHRcdHVuaXRzOiB7XG5cdFx0XHRkYXk6IHtcblx0XHRcdFx0emVybzogXCJcdTY1RTVcIixcblx0XHRcdFx0b25lOiBcIlx1NjVFNVwiLFxuXHRcdFx0XHR0d286IFwiXHU2NUU1XCIsXG5cdFx0XHRcdGZldzogXCJcdTY1RTVcIixcblx0XHRcdFx0bWFueTogXCJcdTY1RTVcIixcblx0XHRcdFx0b3RoZXI6IFwiXHU2NUU1XCIsXG5cdFx0XHR9LFxuXHRcdFx0aG91cjoge1xuXHRcdFx0XHR6ZXJvOiBcIlx1NjY0Mlx1OTU5M1wiLFxuXHRcdFx0XHRvbmU6IFwiXHU2NjQyXHU5NTkzXCIsXG5cdFx0XHRcdHR3bzogXCJcdTY2NDJcdTk1OTNcIixcblx0XHRcdFx0ZmV3OiBcIlx1NjY0Mlx1OTU5M1wiLFxuXHRcdFx0XHRtYW55OiBcIlx1NjY0Mlx1OTU5M1wiLFxuXHRcdFx0XHRvdGhlcjogXCJcdTY2NDJcdTk1OTNcIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJcdTUyMDZcIixcblx0XHRcdFx0b25lOiBcIlx1NTIwNlwiLFxuXHRcdFx0XHR0d286IFwiXHU1MjA2XCIsXG5cdFx0XHRcdGZldzogXCJcdTUyMDZcIixcblx0XHRcdFx0bWFueTogXCJcdTUyMDZcIixcblx0XHRcdFx0b3RoZXI6IFwiXHU1MjA2XCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwiXHU3OUQyXCIsXG5cdFx0XHRcdG9uZTogXCJcdTc5RDJcIixcblx0XHRcdFx0dHdvOiBcIlx1NzlEMlwiLFxuXHRcdFx0XHRmZXc6IFwiXHU3OUQyXCIsXG5cdFx0XHRcdG1hbnk6IFwiXHU3OUQyXCIsXG5cdFx0XHRcdG90aGVyOiBcIlx1NzlEMlwiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXG5cdGl0OiB7XG5cdFx0dGVtcGxhdGU6IHtcblx0XHRcdG9uOiAodmFsdWUpID0+IGBpbCAke3ZhbHVlfWAsXG5cdFx0XHRwYXN0OiAodmFsdWUpID0+IGAke3ZhbHVlfSBmYWAsXG5cdFx0XHRmdXR1cmU6ICh2YWx1ZSkgPT4gYGluICR7dmFsdWV9YCxcblx0XHRcdGp1c3ROb3c6ICgpID0+IGBwcm9wcmlvIG9yYWAsXG5cdFx0fSxcblx0XHR1bml0czoge1xuXHRcdFx0ZGF5OiB7XG5cdFx0XHRcdHplcm86IFwiZ2lvcm5pXCIsXG5cdFx0XHRcdG9uZTogXCJnaW9ybm9cIixcblx0XHRcdFx0dHdvOiBcImdpb3JuaVwiLFxuXHRcdFx0XHRmZXc6IFwiZ2lvcm5pXCIsXG5cdFx0XHRcdG1hbnk6IFwiZ2lvcm5pXCIsXG5cdFx0XHRcdG90aGVyOiBcImdpb3JuaVwiLFxuXHRcdFx0fSxcblx0XHRcdGhvdXI6IHtcblx0XHRcdFx0emVybzogXCJvcmVcIixcblx0XHRcdFx0b25lOiBcIm9yYVwiLFxuXHRcdFx0XHR0d286IFwib3JlXCIsXG5cdFx0XHRcdGZldzogXCJvcmVcIixcblx0XHRcdFx0bWFueTogXCJvcmVcIixcblx0XHRcdFx0b3RoZXI6IFwib3JlXCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwibWludXRpXCIsXG5cdFx0XHRcdG9uZTogXCJtaW51dG9cIixcblx0XHRcdFx0dHdvOiBcIm1pbnV0aVwiLFxuXHRcdFx0XHRmZXc6IFwibWludXRpXCIsXG5cdFx0XHRcdG1hbnk6IFwibWludXRpXCIsXG5cdFx0XHRcdG90aGVyOiBcIm1pbnV0aVwiLFxuXHRcdFx0fSxcblx0XHRcdHNlY29uZDoge1xuXHRcdFx0XHR6ZXJvOiBcInNlY29uZGlcIixcblx0XHRcdFx0b25lOiBcInNlY29uZG9cIixcblx0XHRcdFx0dHdvOiBcInNlY29uZGlcIixcblx0XHRcdFx0ZmV3OiBcInNlY29uZGlcIixcblx0XHRcdFx0bWFueTogXCJzZWNvbmRpXCIsXG5cdFx0XHRcdG90aGVyOiBcInNlY29uZGlcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHRrbzoge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgJHt2YWx1ZX1cdUM1RDBgLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgJHt2YWx1ZX0gXHVDODA0YCxcblx0XHRcdGZ1dHVyZTogKHZhbHVlKSA9PiBgJHt2YWx1ZX0gXHVENkM0YCxcblx0XHRcdGp1c3ROb3c6ICgpID0+IGBcdUJDMjlcdUFFMDhgLFxuXHRcdH0sXG5cdFx0dW5pdHM6IHtcblx0XHRcdGRheToge1xuXHRcdFx0XHR6ZXJvOiBcIlx1Qzc3Q1wiLFxuXHRcdFx0XHRvbmU6IFwiXHVDNzdDXCIsXG5cdFx0XHRcdHR3bzogXCJcdUM3N0NcIixcblx0XHRcdFx0ZmV3OiBcIlx1Qzc3Q1wiLFxuXHRcdFx0XHRtYW55OiBcIlx1Qzc3Q1wiLFxuXHRcdFx0XHRvdGhlcjogXCJcdUM3N0NcIixcblx0XHRcdH0sXG5cdFx0XHRob3VyOiB7XG5cdFx0XHRcdHplcm86IFwiXHVDMkRDXHVBQzA0XCIsXG5cdFx0XHRcdG9uZTogXCJcdUMyRENcdUFDMDRcIixcblx0XHRcdFx0dHdvOiBcIlx1QzJEQ1x1QUMwNFwiLFxuXHRcdFx0XHRmZXc6IFwiXHVDMkRDXHVBQzA0XCIsXG5cdFx0XHRcdG1hbnk6IFwiXHVDMkRDXHVBQzA0XCIsXG5cdFx0XHRcdG90aGVyOiBcIlx1QzJEQ1x1QUMwNFwiLFxuXHRcdFx0fSxcblx0XHRcdG1pbnV0ZToge1xuXHRcdFx0XHR6ZXJvOiBcIlx1QkQ4NFwiLFxuXHRcdFx0XHRvbmU6IFwiXHVCRDg0XCIsXG5cdFx0XHRcdHR3bzogXCJcdUJEODRcIixcblx0XHRcdFx0ZmV3OiBcIlx1QkQ4NFwiLFxuXHRcdFx0XHRtYW55OiBcIlx1QkQ4NFwiLFxuXHRcdFx0XHRvdGhlcjogXCJcdUJEODRcIixcblx0XHRcdH0sXG5cdFx0XHRzZWNvbmQ6IHtcblx0XHRcdFx0emVybzogXCJcdUNEMDhcIixcblx0XHRcdFx0b25lOiBcIlx1Q0QwOFwiLFxuXHRcdFx0XHR0d286IFwiXHVDRDA4XCIsXG5cdFx0XHRcdGZldzogXCJcdUNEMDhcIixcblx0XHRcdFx0bWFueTogXCJcdUNEMDhcIixcblx0XHRcdFx0b3RoZXI6IFwiXHVDRDA4XCIsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdH0sXG5cblx0c3c6IHtcblx0XHR0ZW1wbGF0ZToge1xuXHRcdFx0b246ICh2YWx1ZSkgPT4gYGt3YSAke3ZhbHVlfWAsXG5cdFx0XHRwYXN0OiAodmFsdWUpID0+IGAke3ZhbHVlfSBpbGl5b3BpdGFgLFxuXHRcdFx0ZnV0dXJlOiAodmFsdWUpID0+IGBrYXRpa2EgJHt2YWx1ZX1gLFxuXHRcdFx0anVzdE5vdzogKCkgPT4gYGhpdmkgcHVuZGVgLFxuXHRcdH0sXG5cdFx0dW5pdHM6IHtcblx0XHRcdGRheToge1xuXHRcdFx0XHR6ZXJvOiBcInNpa3VcIixcblx0XHRcdFx0b25lOiBcInNpa3VcIixcblx0XHRcdFx0dHdvOiBcInNpa3VcIixcblx0XHRcdFx0ZmV3OiBcInNpa3VcIixcblx0XHRcdFx0bWFueTogXCJzaWt1XCIsXG5cdFx0XHRcdG90aGVyOiBcInNpa3VcIixcblx0XHRcdH0sXG5cdFx0XHRob3VyOiB7XG5cdFx0XHRcdHplcm86IFwibWFzYWFcIixcblx0XHRcdFx0b25lOiBcInNhYVwiLFxuXHRcdFx0XHR0d286IFwibWFzYWFcIixcblx0XHRcdFx0ZmV3OiBcIm1hc2FhXCIsXG5cdFx0XHRcdG1hbnk6IFwibWFzYWFcIixcblx0XHRcdFx0b3RoZXI6IFwibWFzYWFcIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJkYWtpa2FcIixcblx0XHRcdFx0b25lOiBcImRha2lrYVwiLFxuXHRcdFx0XHR0d286IFwiZGFraWthXCIsXG5cdFx0XHRcdGZldzogXCJkYWtpa2FcIixcblx0XHRcdFx0bWFueTogXCJkYWtpa2FcIixcblx0XHRcdFx0b3RoZXI6IFwiZGFraWthXCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwic2VrdW5kZVwiLFxuXHRcdFx0XHRvbmU6IFwic2VrdW5kZVwiLFxuXHRcdFx0XHR0d286IFwic2VrdW5kZVwiLFxuXHRcdFx0XHRmZXc6IFwic2VrdW5kZVwiLFxuXHRcdFx0XHRtYW55OiBcInNla3VuZGVcIixcblx0XHRcdFx0b3RoZXI6IFwic2VrdW5kZVwiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXG5cdG5sOiB7XG5cdFx0dGVtcGxhdGU6IHtcblx0XHRcdG9uOiAodmFsdWUpID0+IGBvcCAke3ZhbHVlfWAsXG5cdFx0XHRwYXN0OiAodmFsdWUpID0+IGAke3ZhbHVlfSBnZWxlZGVuYCxcblx0XHRcdGZ1dHVyZTogKHZhbHVlKSA9PiBgb3ZlciAke3ZhbHVlfWAsXG5cdFx0XHRqdXN0Tm93OiAoKSA9PiBgbmV0YCxcblx0XHR9LFxuXHRcdHVuaXRzOiB7XG5cdFx0XHRkYXk6IHtcblx0XHRcdFx0emVybzogXCJkYWdlblwiLFxuXHRcdFx0XHRvbmU6IFwiZGFnXCIsXG5cdFx0XHRcdHR3bzogXCJkYWdlblwiLFxuXHRcdFx0XHRmZXc6IFwiZGFnZW5cIixcblx0XHRcdFx0bWFueTogXCJkYWdlblwiLFxuXHRcdFx0XHRvdGhlcjogXCJkYWdlblwiLFxuXHRcdFx0fSxcblx0XHRcdGhvdXI6IHtcblx0XHRcdFx0emVybzogXCJ1cmVuXCIsXG5cdFx0XHRcdG9uZTogXCJ1dXJcIixcblx0XHRcdFx0dHdvOiBcInVyZW5cIixcblx0XHRcdFx0ZmV3OiBcInVyZW5cIixcblx0XHRcdFx0bWFueTogXCJ1cmVuXCIsXG5cdFx0XHRcdG90aGVyOiBcInVyZW5cIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJtaW51dGVuXCIsXG5cdFx0XHRcdG9uZTogXCJtaW51dXRcIixcblx0XHRcdFx0dHdvOiBcIm1pbnV0ZW5cIixcblx0XHRcdFx0ZmV3OiBcIm1pbnV0ZW5cIixcblx0XHRcdFx0bWFueTogXCJtaW51dGVuXCIsXG5cdFx0XHRcdG90aGVyOiBcIm1pbnV0ZW5cIixcblx0XHRcdH0sXG5cdFx0XHRzZWNvbmQ6IHtcblx0XHRcdFx0emVybzogXCJzZWNvbmRlblwiLFxuXHRcdFx0XHRvbmU6IFwic2Vjb25kZVwiLFxuXHRcdFx0XHR0d286IFwic2Vjb25kZW5cIixcblx0XHRcdFx0ZmV3OiBcInNlY29uZGVuXCIsXG5cdFx0XHRcdG1hbnk6IFwic2Vjb25kZW5cIixcblx0XHRcdFx0b3RoZXI6IFwic2Vjb25kZW5cIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHRtczoge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgcGFkYSAke3ZhbHVlfWAsXG5cdFx0XHRwYXN0OiAodmFsdWUpID0+IGAke3ZhbHVlfSB5YW5nIGxhbHVgLFxuXHRcdFx0ZnV0dXJlOiAodmFsdWUpID0+IGAke3ZhbHVlfSBsYWdpYCxcblx0XHRcdGp1c3ROb3c6ICgpID0+IGB0YWRpYCxcblx0XHR9LFxuXHRcdHVuaXRzOiB7XG5cdFx0XHRkYXk6IHtcblx0XHRcdFx0emVybzogXCJoYXJpXCIsXG5cdFx0XHRcdG9uZTogXCJoYXJpXCIsXG5cdFx0XHRcdHR3bzogXCJoYXJpXCIsXG5cdFx0XHRcdGZldzogXCJoYXJpXCIsXG5cdFx0XHRcdG1hbnk6IFwiaGFyaVwiLFxuXHRcdFx0XHRvdGhlcjogXCJoYXJpXCIsXG5cdFx0XHR9LFxuXHRcdFx0aG91cjoge1xuXHRcdFx0XHR6ZXJvOiBcImphbVwiLFxuXHRcdFx0XHRvbmU6IFwiamFtXCIsXG5cdFx0XHRcdHR3bzogXCJqYW1cIixcblx0XHRcdFx0ZmV3OiBcImphbVwiLFxuXHRcdFx0XHRtYW55OiBcImphbVwiLFxuXHRcdFx0XHRvdGhlcjogXCJqYW1cIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJtaW5pdFwiLFxuXHRcdFx0XHRvbmU6IFwibWluaXRcIixcblx0XHRcdFx0dHdvOiBcIm1pbml0XCIsXG5cdFx0XHRcdGZldzogXCJtaW5pdFwiLFxuXHRcdFx0XHRtYW55OiBcIm1pbml0XCIsXG5cdFx0XHRcdG90aGVyOiBcIm1pbml0XCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwic2FhdFwiLFxuXHRcdFx0XHRvbmU6IFwic2FhdFwiLFxuXHRcdFx0XHR0d286IFwic2FhdFwiLFxuXHRcdFx0XHRmZXc6IFwic2FhdFwiLFxuXHRcdFx0XHRtYW55OiBcInNhYXRcIixcblx0XHRcdFx0b3RoZXI6IFwic2FhdFwiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXG5cdGlkOiB7XG5cdFx0dGVtcGxhdGU6IHtcblx0XHRcdG9uOiAodmFsdWUpID0+IGBwYWRhICR7dmFsdWV9YCxcblx0XHRcdHBhc3Q6ICh2YWx1ZSkgPT4gYCR7dmFsdWV9IHlhbmcgbGFsdWAsXG5cdFx0XHRmdXR1cmU6ICh2YWx1ZSkgPT4gYGRhbGFtICR7dmFsdWV9YCxcblx0XHRcdGp1c3ROb3c6ICgpID0+IGB0YWRpYCxcblx0XHR9LFxuXHRcdHVuaXRzOiB7XG5cdFx0XHRkYXk6IHtcblx0XHRcdFx0emVybzogXCJoYXJpXCIsXG5cdFx0XHRcdG9uZTogXCJoYXJpXCIsXG5cdFx0XHRcdHR3bzogXCJoYXJpXCIsXG5cdFx0XHRcdGZldzogXCJoYXJpXCIsXG5cdFx0XHRcdG1hbnk6IFwiaGFyaVwiLFxuXHRcdFx0XHRvdGhlcjogXCJoYXJpXCIsXG5cdFx0XHR9LFxuXHRcdFx0aG91cjoge1xuXHRcdFx0XHR6ZXJvOiBcImphbVwiLFxuXHRcdFx0XHRvbmU6IFwiamFtXCIsXG5cdFx0XHRcdHR3bzogXCJqYW1cIixcblx0XHRcdFx0ZmV3OiBcImphbVwiLFxuXHRcdFx0XHRtYW55OiBcImphbVwiLFxuXHRcdFx0XHRvdGhlcjogXCJqYW1cIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJtZW5pdFwiLFxuXHRcdFx0XHRvbmU6IFwibWVuaXRcIixcblx0XHRcdFx0dHdvOiBcIm1lbml0XCIsXG5cdFx0XHRcdGZldzogXCJtZW5pdFwiLFxuXHRcdFx0XHRtYW55OiBcIm1lbml0XCIsXG5cdFx0XHRcdG90aGVyOiBcIm1lbml0XCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwiZGV0aWtcIixcblx0XHRcdFx0b25lOiBcImRldGlrXCIsXG5cdFx0XHRcdHR3bzogXCJkZXRpa1wiLFxuXHRcdFx0XHRmZXc6IFwiZGV0aWtcIixcblx0XHRcdFx0bWFueTogXCJkZXRpa1wiLFxuXHRcdFx0XHRvdGhlcjogXCJkZXRpa1wiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXG5cdHRyOiB7XG5cdFx0dGVtcGxhdGU6IHtcblx0XHRcdG9uOiAodmFsdWUpID0+IGAke3ZhbHVlfSB0YXJpaGluZGVgLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgJHt2YWx1ZX0gXHUwMEY2bmNlYCxcblx0XHRcdGZ1dHVyZTogKHZhbHVlKSA9PiBgJHt2YWx1ZX0gc29ucmFgLFxuXHRcdFx0anVzdE5vdzogKCkgPT4gYGF6IFx1MDBGNm5jZWAsXG5cdFx0fSxcblx0XHR1bml0czoge1xuXHRcdFx0ZGF5OiB7XG5cdFx0XHRcdHplcm86IFwiZ1x1MDBGQ25sZXJcIixcblx0XHRcdFx0b25lOiBcImdcdTAwRkNuXCIsXG5cdFx0XHRcdHR3bzogXCJnXHUwMEZDblwiLFxuXHRcdFx0XHRmZXc6IFwiZ1x1MDBGQ25cIixcblx0XHRcdFx0bWFueTogXCJnXHUwMEZDblwiLFxuXHRcdFx0XHRvdGhlcjogXCJnXHUwMEZDblwiLFxuXHRcdFx0fSxcblx0XHRcdGhvdXI6IHtcblx0XHRcdFx0emVybzogXCJzYWF0bGVyXCIsXG5cdFx0XHRcdG9uZTogXCJzYWF0XCIsXG5cdFx0XHRcdHR3bzogXCJzYWF0XCIsXG5cdFx0XHRcdGZldzogXCJzYWF0XCIsXG5cdFx0XHRcdG1hbnk6IFwic2FhdFwiLFxuXHRcdFx0XHRvdGhlcjogXCJzYWF0XCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwiZGFraWthbGFyXCIsXG5cdFx0XHRcdG9uZTogXCJkYWtpa2FcIixcblx0XHRcdFx0dHdvOiBcImRha2lrYVwiLFxuXHRcdFx0XHRmZXc6IFwiZGFraWthXCIsXG5cdFx0XHRcdG1hbnk6IFwiZGFraWthXCIsXG5cdFx0XHRcdG90aGVyOiBcImRha2lrYVwiLFxuXHRcdFx0fSxcblx0XHRcdHNlY29uZDoge1xuXHRcdFx0XHR6ZXJvOiBcInNhbml5ZWxlclwiLFxuXHRcdFx0XHRvbmU6IFwic2FuaXllXCIsXG5cdFx0XHRcdHR3bzogXCJzYW5peWVcIixcblx0XHRcdFx0ZmV3OiBcInNhbml5ZVwiLFxuXHRcdFx0XHRtYW55OiBcInNhbml5ZVwiLFxuXHRcdFx0XHRvdGhlcjogXCJzYW5peWVcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHRwbDoge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgdyBkbml1ICR7dmFsdWV9YCxcblx0XHRcdHBhc3Q6ICh2YWx1ZSkgPT4gYCR7dmFsdWV9IHRlbXVgLFxuXHRcdFx0ZnV0dXJlOiAodmFsdWUpID0+IGB6YSAke3ZhbHVlfWAsXG5cdFx0XHRqdXN0Tm93OiAoKSA9PiBgcHJ6ZWQgY2h3aWxcdTAxMDVgLFxuXHRcdH0sXG5cdFx0dW5pdHM6IHtcblx0XHRcdGRheToge1xuXHRcdFx0XHR6ZXJvOiBcImRuaVwiLFxuXHRcdFx0XHRvbmU6IFwiZHppZVx1MDE0NFwiLFxuXHRcdFx0XHR0d286IFwiZG5pXCIsXG5cdFx0XHRcdGZldzogXCJkbmlcIixcblx0XHRcdFx0bWFueTogXCJkbmlcIixcblx0XHRcdFx0b3RoZXI6IFwiZG5pXCIsXG5cdFx0XHR9LFxuXHRcdFx0aG91cjoge1xuXHRcdFx0XHR6ZXJvOiBcImdvZHppblwiLFxuXHRcdFx0XHRvbmU6IFwiZ29kemluYVwiLFxuXHRcdFx0XHR0d286IFwiZ29kemlueVwiLFxuXHRcdFx0XHRmZXc6IFwiZ29kemlueVwiLFxuXHRcdFx0XHRtYW55OiBcImdvZHppblwiLFxuXHRcdFx0XHRvdGhlcjogXCJnb2R6aW5cIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJtaW51dFwiLFxuXHRcdFx0XHRvbmU6IFwibWludXRhXCIsXG5cdFx0XHRcdHR3bzogXCJtaW51dHlcIixcblx0XHRcdFx0ZmV3OiBcIm1pbnV0eVwiLFxuXHRcdFx0XHRtYW55OiBcIm1pbnV0XCIsXG5cdFx0XHRcdG90aGVyOiBcIm1pbnV0XCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwic2VrdW5kXCIsXG5cdFx0XHRcdG9uZTogXCJzZWt1bmRhXCIsXG5cdFx0XHRcdHR3bzogXCJzZWt1bmR5XCIsXG5cdFx0XHRcdGZldzogXCJzZWt1bmR5XCIsXG5cdFx0XHRcdG1hbnk6IFwic2VrdW5kXCIsXG5cdFx0XHRcdG90aGVyOiBcInNla3VuZFwiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXG5cdHN2OiB7XG5cdFx0dGVtcGxhdGU6IHtcblx0XHRcdG9uOiAodmFsdWUpID0+IGBkZW4gJHt2YWx1ZX1gLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgZlx1MDBGNnIgJHt2YWx1ZX0gc2VkYW5gLFxuXHRcdFx0ZnV0dXJlOiAodmFsdWUpID0+IGBvbSAke3ZhbHVlfWAsXG5cdFx0XHRqdXN0Tm93OiAoKSA9PiBgbnlzc2AsXG5cdFx0fSxcblx0XHR1bml0czoge1xuXHRcdFx0ZGF5OiB7XG5cdFx0XHRcdHplcm86IFwiZGFnYXJcIixcblx0XHRcdFx0b25lOiBcImRhZ1wiLFxuXHRcdFx0XHR0d286IFwiZGFnYXJcIixcblx0XHRcdFx0ZmV3OiBcImRhZ2FyXCIsXG5cdFx0XHRcdG1hbnk6IFwiZGFnYXJcIixcblx0XHRcdFx0b3RoZXI6IFwiZGFnYXJcIixcblx0XHRcdH0sXG5cdFx0XHRob3VyOiB7XG5cdFx0XHRcdHplcm86IFwidGltbWFyXCIsXG5cdFx0XHRcdG9uZTogXCJ0aW1tZVwiLFxuXHRcdFx0XHR0d286IFwidGltbWFyXCIsXG5cdFx0XHRcdGZldzogXCJ0aW1tYXJcIixcblx0XHRcdFx0bWFueTogXCJ0aW1tYXJcIixcblx0XHRcdFx0b3RoZXI6IFwidGltbWFyXCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwibWludXRlclwiLFxuXHRcdFx0XHRvbmU6IFwibWludXRcIixcblx0XHRcdFx0dHdvOiBcIm1pbnV0ZXJcIixcblx0XHRcdFx0ZmV3OiBcIm1pbnV0ZXJcIixcblx0XHRcdFx0bWFueTogXCJtaW51dGVyXCIsXG5cdFx0XHRcdG90aGVyOiBcIm1pbnV0ZXJcIixcblx0XHRcdH0sXG5cdFx0XHRzZWNvbmQ6IHtcblx0XHRcdFx0emVybzogXCJzZWt1bmRlclwiLFxuXHRcdFx0XHRvbmU6IFwic2VrdW5kXCIsXG5cdFx0XHRcdHR3bzogXCJzZWt1bmRlclwiLFxuXHRcdFx0XHRmZXc6IFwic2VrdW5kZXJcIixcblx0XHRcdFx0bWFueTogXCJzZWt1bmRlclwiLFxuXHRcdFx0XHRvdGhlcjogXCJzZWt1bmRlclwiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXG5cdHJvOiB7XG5cdFx0dGVtcGxhdGU6IHtcblx0XHRcdG9uOiAodmFsdWUpID0+IGBwZSAke3ZhbHVlfWAsXG5cdFx0XHRwYXN0OiAodmFsdWUpID0+IGBhY3VtICR7dmFsdWV9YCxcblx0XHRcdGZ1dHVyZTogKHZhbHVlKSA9PiBgcGVzdGUgJHt2YWx1ZX1gLFxuXHRcdFx0anVzdE5vdzogKCkgPT4gYGNoaWFyIGFjdW1gLFxuXHRcdH0sXG5cdFx0dW5pdHM6IHtcblx0XHRcdGRheToge1xuXHRcdFx0XHR6ZXJvOiBcInppbGVcIixcblx0XHRcdFx0b25lOiBcInppXCIsXG5cdFx0XHRcdHR3bzogXCJ6aWxlXCIsXG5cdFx0XHRcdGZldzogXCJ6aWxlXCIsXG5cdFx0XHRcdG1hbnk6IFwiemlsZVwiLFxuXHRcdFx0XHRvdGhlcjogXCJ6aWxlXCIsXG5cdFx0XHR9LFxuXHRcdFx0aG91cjoge1xuXHRcdFx0XHR6ZXJvOiBcIm9yZVwiLFxuXHRcdFx0XHRvbmU6IFwib3JcdTAxMDNcIixcblx0XHRcdFx0dHdvOiBcIm9yZVwiLFxuXHRcdFx0XHRmZXc6IFwib3JlXCIsXG5cdFx0XHRcdG1hbnk6IFwib3JlXCIsXG5cdFx0XHRcdG90aGVyOiBcIm9yZVwiLFxuXHRcdFx0fSxcblx0XHRcdG1pbnV0ZToge1xuXHRcdFx0XHR6ZXJvOiBcIm1pbnV0ZVwiLFxuXHRcdFx0XHRvbmU6IFwibWludXRcIixcblx0XHRcdFx0dHdvOiBcIm1pbnV0ZVwiLFxuXHRcdFx0XHRmZXc6IFwibWludXRlXCIsXG5cdFx0XHRcdG1hbnk6IFwibWludXRlXCIsXG5cdFx0XHRcdG90aGVyOiBcIm1pbnV0ZVwiLFxuXHRcdFx0fSxcblx0XHRcdHNlY29uZDoge1xuXHRcdFx0XHR6ZXJvOiBcInNlY3VuZGVcIixcblx0XHRcdFx0b25lOiBcInNlY3VuZFx1MDEwM1wiLFxuXHRcdFx0XHR0d286IFwic2VjdW5kZVwiLFxuXHRcdFx0XHRmZXc6IFwic2VjdW5kZVwiLFxuXHRcdFx0XHRtYW55OiBcInNlY3VuZGVcIixcblx0XHRcdFx0b3RoZXI6IFwic2VjdW5kZVwiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXG5cdGJnOiB7XG5cdFx0dGVtcGxhdGU6IHtcblx0XHRcdG9uOiAodmFsdWUpID0+IGBcdTA0M0RcdTA0MzAgJHt2YWx1ZX1gLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgXHUwNDNGXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDM4ICR7dmFsdWV9YCxcblx0XHRcdGZ1dHVyZTogKHZhbHVlKSA9PiBgXHUwNDQxXHUwNDNCXHUwNDM1XHUwNDM0ICR7dmFsdWV9YCxcblx0XHRcdGp1c3ROb3c6ICgpID0+IGBcdTA0NDJcdTA0M0VcdTA0M0FcdTA0NDMtXHUwNDQ5XHUwNDNFYCxcblx0XHR9LFxuXHRcdHVuaXRzOiB7XG5cdFx0XHRkYXk6IHtcblx0XHRcdFx0emVybzogXCJcdTA0MzRcdTA0M0RcdTA0MzhcIixcblx0XHRcdFx0b25lOiBcIlx1MDQzNFx1MDQzNVx1MDQzRFwiLFxuXHRcdFx0XHR0d286IFwiXHUwNDM0XHUwNDNEXHUwNDM4XCIsXG5cdFx0XHRcdGZldzogXCJcdTA0MzRcdTA0M0RcdTA0MzhcIixcblx0XHRcdFx0bWFueTogXCJcdTA0MzRcdTA0M0RcdTA0MzhcIixcblx0XHRcdFx0b3RoZXI6IFwiXHUwNDM0XHUwNDNEXHUwNDM4XCIsXG5cdFx0XHR9LFxuXHRcdFx0aG91cjoge1xuXHRcdFx0XHR6ZXJvOiBcIlx1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQzMFwiLFxuXHRcdFx0XHRvbmU6IFwiXHUwNDQ3XHUwNDMwXHUwNDQxXCIsXG5cdFx0XHRcdHR3bzogXCJcdTA0NDdcdTA0MzBcdTA0NDFcdTA0MzBcIixcblx0XHRcdFx0ZmV3OiBcIlx1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQzMFwiLFxuXHRcdFx0XHRtYW55OiBcIlx1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQzMFwiLFxuXHRcdFx0XHRvdGhlcjogXCJcdTA0NDdcdTA0MzBcdTA0NDFcdTA0MzBcIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJcdTA0M0NcdTA0MzhcdTA0M0RcdTA0NDNcdTA0NDJcdTA0MzhcIixcblx0XHRcdFx0b25lOiBcIlx1MDQzQ1x1MDQzOFx1MDQzRFx1MDQ0M1x1MDQ0Mlx1MDQzMFwiLFxuXHRcdFx0XHR0d286IFwiXHUwNDNDXHUwNDM4XHUwNDNEXHUwNDQzXHUwNDQyXHUwNDM4XCIsXG5cdFx0XHRcdGZldzogXCJcdTA0M0NcdTA0MzhcdTA0M0RcdTA0NDNcdTA0NDJcdTA0MzhcIixcblx0XHRcdFx0bWFueTogXCJcdTA0M0NcdTA0MzhcdTA0M0RcdTA0NDNcdTA0NDJcdTA0MzhcIixcblx0XHRcdFx0b3RoZXI6IFwiXHUwNDNDXHUwNDM4XHUwNDNEXHUwNDQzXHUwNDQyXHUwNDM4XCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwiXHUwNDQxXHUwNDM1XHUwNDNBXHUwNDQzXHUwNDNEXHUwNDM0XHUwNDM4XCIsXG5cdFx0XHRcdG9uZTogXCJcdTA0NDFcdTA0MzVcdTA0M0FcdTA0NDNcdTA0M0RcdTA0MzRcdTA0MzBcIixcblx0XHRcdFx0dHdvOiBcIlx1MDQ0MVx1MDQzNVx1MDQzQVx1MDQ0M1x1MDQzRFx1MDQzNFx1MDQzOFwiLFxuXHRcdFx0XHRmZXc6IFwiXHUwNDQxXHUwNDM1XHUwNDNBXHUwNDQzXHUwNDNEXHUwNDM0XHUwNDM4XCIsXG5cdFx0XHRcdG1hbnk6IFwiXHUwNDQxXHUwNDM1XHUwNDNBXHUwNDQzXHUwNDNEXHUwNDM0XHUwNDM4XCIsXG5cdFx0XHRcdG90aGVyOiBcIlx1MDQ0MVx1MDQzNVx1MDQzQVx1MDQ0M1x1MDQzRFx1MDQzNFx1MDQzOFwiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXG5cdGRhOiB7XG5cdFx0dGVtcGxhdGU6IHtcblx0XHRcdG9uOiAodmFsdWUpID0+IGBkZW4gJHt2YWx1ZX1gLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgZm9yICR7dmFsdWV9IHNpZGVuYCxcblx0XHRcdGZ1dHVyZTogKHZhbHVlKSA9PiBgb20gJHt2YWx1ZX1gLFxuXHRcdFx0anVzdE5vdzogKCkgPT4gYGxpZ2UgbnVgLFxuXHRcdH0sXG5cdFx0dW5pdHM6IHtcblx0XHRcdGRheToge1xuXHRcdFx0XHR6ZXJvOiBcImRhZ2VcIixcblx0XHRcdFx0b25lOiBcImRhZ1wiLFxuXHRcdFx0XHR0d286IFwiZGFnZVwiLFxuXHRcdFx0XHRmZXc6IFwiZGFnZVwiLFxuXHRcdFx0XHRtYW55OiBcImRhZ2VcIixcblx0XHRcdFx0b3RoZXI6IFwiZGFnZVwiLFxuXHRcdFx0fSxcblx0XHRcdGhvdXI6IHtcblx0XHRcdFx0emVybzogXCJ0aW1lclwiLFxuXHRcdFx0XHRvbmU6IFwidGltZVwiLFxuXHRcdFx0XHR0d286IFwidGltZXJcIixcblx0XHRcdFx0ZmV3OiBcInRpbWVyXCIsXG5cdFx0XHRcdG1hbnk6IFwidGltZXJcIixcblx0XHRcdFx0b3RoZXI6IFwidGltZXJcIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJtaW51dHRlclwiLFxuXHRcdFx0XHRvbmU6IFwibWludXRcIixcblx0XHRcdFx0dHdvOiBcIm1pbnV0dGVyXCIsXG5cdFx0XHRcdGZldzogXCJtaW51dHRlclwiLFxuXHRcdFx0XHRtYW55OiBcIm1pbnV0dGVyXCIsXG5cdFx0XHRcdG90aGVyOiBcIm1pbnV0dGVyXCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwic2VrdW5kZXJcIixcblx0XHRcdFx0b25lOiBcInNla3VuZFwiLFxuXHRcdFx0XHR0d286IFwic2VrdW5kZXJcIixcblx0XHRcdFx0ZmV3OiBcInNla3VuZGVyXCIsXG5cdFx0XHRcdG1hbnk6IFwic2VrdW5kZXJcIixcblx0XHRcdFx0b3RoZXI6IFwic2VrdW5kZXJcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHRmaToge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgcFx1MDBFNGl2XHUwMEU0blx1MDBFNCAke3ZhbHVlfWAsXG5cdFx0XHRwYXN0OiAodmFsdWUpID0+IGAke3ZhbHVlfSBzaXR0ZW5gLFxuXHRcdFx0ZnV0dXJlOiAodmFsdWUpID0+IGAke3ZhbHVlfSBrdWx1dHR1YWAsXG5cdFx0XHRqdXN0Tm93OiAoKSA9PiBganV1cmkgbnl0YCxcblx0XHR9LFxuXHRcdHVuaXRzOiB7XG5cdFx0XHRkYXk6IHtcblx0XHRcdFx0emVybzogXCJwXHUwMEU0aXZcdTAwRTRcdTAwRTRcIixcblx0XHRcdFx0b25lOiBcInBcdTAwRTRpdlx1MDBFNFwiLFxuXHRcdFx0XHR0d286IFwicFx1MDBFNGl2XHUwMEU0XHUwMEU0XCIsXG5cdFx0XHRcdGZldzogXCJwXHUwMEU0aXZcdTAwRTRcdTAwRTRcIixcblx0XHRcdFx0bWFueTogXCJwXHUwMEU0aXZcdTAwRTRcdTAwRTRcIixcblx0XHRcdFx0b3RoZXI6IFwicFx1MDBFNGl2XHUwMEU0XHUwMEU0XCIsXG5cdFx0XHR9LFxuXHRcdFx0aG91cjoge1xuXHRcdFx0XHR6ZXJvOiBcInR1bnRpYVwiLFxuXHRcdFx0XHRvbmU6IFwidHVudGlcIixcblx0XHRcdFx0dHdvOiBcInR1bnRpYVwiLFxuXHRcdFx0XHRmZXc6IFwidHVudGlhXCIsXG5cdFx0XHRcdG1hbnk6IFwidHVudGlhXCIsXG5cdFx0XHRcdG90aGVyOiBcInR1bnRpYVwiLFxuXHRcdFx0fSxcblx0XHRcdG1pbnV0ZToge1xuXHRcdFx0XHR6ZXJvOiBcIm1pbnV1dHRpYVwiLFxuXHRcdFx0XHRvbmU6IFwibWludXV0dGlcIixcblx0XHRcdFx0dHdvOiBcIm1pbnV1dHRpYVwiLFxuXHRcdFx0XHRmZXc6IFwibWludXV0dGlhXCIsXG5cdFx0XHRcdG1hbnk6IFwibWludXV0dGlhXCIsXG5cdFx0XHRcdG90aGVyOiBcIm1pbnV1dHRpYVwiLFxuXHRcdFx0fSxcblx0XHRcdHNlY29uZDoge1xuXHRcdFx0XHR6ZXJvOiBcInNla3VudGlhXCIsXG5cdFx0XHRcdG9uZTogXCJzZWt1bnRpXCIsXG5cdFx0XHRcdHR3bzogXCJzZWt1bnRpYVwiLFxuXHRcdFx0XHRmZXc6IFwic2VrdW50aWFcIixcblx0XHRcdFx0bWFueTogXCJzZWt1bnRpYVwiLFxuXHRcdFx0XHRvdGhlcjogXCJzZWt1bnRpYVwiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXG5cdGNzOiB7XG5cdFx0dGVtcGxhdGU6IHtcblx0XHRcdG9uOiAodmFsdWUpID0+IGBkbmUgJHt2YWx1ZX1gLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgcFx1MDE1OWVkICR7dmFsdWV9YCxcblx0XHRcdGZ1dHVyZTogKHZhbHVlKSA9PiBgemEgJHt2YWx1ZX1gLFxuXHRcdFx0anVzdE5vdzogKCkgPT4gYHByXHUwMEUxdlx1MDExQiB0ZVx1MDEwRmAsXG5cdFx0fSxcblx0XHR1bml0czoge1xuXHRcdFx0ZGF5OiB7XG5cdFx0XHRcdHplcm86IFwiZG55XCIsXG5cdFx0XHRcdG9uZTogXCJkZW5cIixcblx0XHRcdFx0dHdvOiBcImRueVwiLFxuXHRcdFx0XHRmZXc6IFwiZG55XCIsXG5cdFx0XHRcdG1hbnk6IFwiZG5cdTAxNkZcIixcblx0XHRcdFx0b3RoZXI6IFwiZG55XCIsXG5cdFx0XHR9LFxuXHRcdFx0aG91cjoge1xuXHRcdFx0XHR6ZXJvOiBcImhvZGluXCIsXG5cdFx0XHRcdG9uZTogXCJob2RpbmFcIixcblx0XHRcdFx0dHdvOiBcImhvZGlueVwiLFxuXHRcdFx0XHRmZXc6IFwiaG9kaW55XCIsXG5cdFx0XHRcdG1hbnk6IFwiaG9kaW5cIixcblx0XHRcdFx0b3RoZXI6IFwiaG9kaW5cIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJtaW51dFwiLFxuXHRcdFx0XHRvbmU6IFwibWludXRhXCIsXG5cdFx0XHRcdHR3bzogXCJtaW51dHlcIixcblx0XHRcdFx0ZmV3OiBcIm1pbnV0eVwiLFxuXHRcdFx0XHRtYW55OiBcIm1pbnV0XCIsXG5cdFx0XHRcdG90aGVyOiBcIm1pbnV0XCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwic2VrdW5kXCIsXG5cdFx0XHRcdG9uZTogXCJzZWt1bmRhXCIsXG5cdFx0XHRcdHR3bzogXCJzZWt1bmR5XCIsXG5cdFx0XHRcdGZldzogXCJzZWt1bmR5XCIsXG5cdFx0XHRcdG1hbnk6IFwic2VrdW5kXCIsXG5cdFx0XHRcdG90aGVyOiBcInNla3VuZFwiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXG5cdGVsOiB7XG5cdFx0dGVtcGxhdGU6IHtcblx0XHRcdG9uOiAodmFsdWUpID0+IGBcdTAzQzNcdTAzQzRcdTAzQjlcdTAzQzIgJHt2YWx1ZX1gLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgXHUwM0MwXHUwM0MxXHUwM0I5XHUwM0JEICR7dmFsdWV9YCxcblx0XHRcdGZ1dHVyZTogKHZhbHVlKSA9PiBgXHUwM0MzXHUwM0I1ICR7dmFsdWV9YCxcblx0XHRcdGp1c3ROb3c6ICgpID0+IGBcdTAzQkNcdTAzQ0NcdTAzQkJcdTAzQjlcdTAzQzIgXHUwM0M0XHUwM0NFXHUwM0MxXHUwM0IxYCxcblx0XHR9LFxuXHRcdHVuaXRzOiB7XG5cdFx0XHRkYXk6IHtcblx0XHRcdFx0emVybzogXCJcdTAzQjdcdTAzQkNcdTAzQURcdTAzQzFcdTAzQjVcdTAzQzJcIixcblx0XHRcdFx0b25lOiBcIlx1MDNCN1x1MDNCQ1x1MDNBRFx1MDNDMVx1MDNCMVwiLFxuXHRcdFx0XHR0d286IFwiXHUwM0I3XHUwM0JDXHUwM0FEXHUwM0MxXHUwM0I1XHUwM0MyXCIsXG5cdFx0XHRcdGZldzogXCJcdTAzQjdcdTAzQkNcdTAzQURcdTAzQzFcdTAzQjVcdTAzQzJcIixcblx0XHRcdFx0bWFueTogXCJcdTAzQjdcdTAzQkNcdTAzQURcdTAzQzFcdTAzQjVcdTAzQzJcIixcblx0XHRcdFx0b3RoZXI6IFwiXHUwM0I3XHUwM0JDXHUwM0FEXHUwM0MxXHUwM0I1XHUwM0MyXCIsXG5cdFx0XHR9LFxuXHRcdFx0aG91cjoge1xuXHRcdFx0XHR6ZXJvOiBcIlx1MDNDRVx1MDNDMVx1MDNCNVx1MDNDMlwiLFxuXHRcdFx0XHRvbmU6IFwiXHUwM0NFXHUwM0MxXHUwM0IxXCIsXG5cdFx0XHRcdHR3bzogXCJcdTAzQ0VcdTAzQzFcdTAzQjVcdTAzQzJcIixcblx0XHRcdFx0ZmV3OiBcIlx1MDNDRVx1MDNDMVx1MDNCNVx1MDNDMlwiLFxuXHRcdFx0XHRtYW55OiBcIlx1MDNDRVx1MDNDMVx1MDNCNVx1MDNDMlwiLFxuXHRcdFx0XHRvdGhlcjogXCJcdTAzQ0VcdTAzQzFcdTAzQjVcdTAzQzJcIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJcdTAzQkJcdTAzQjVcdTAzQzBcdTAzQzRcdTAzQUNcIixcblx0XHRcdFx0b25lOiBcIlx1MDNCQlx1MDNCNVx1MDNDMFx1MDNDNFx1MDNDQ1wiLFxuXHRcdFx0XHR0d286IFwiXHUwM0JCXHUwM0I1XHUwM0MwXHUwM0M0XHUwM0FDXCIsXG5cdFx0XHRcdGZldzogXCJcdTAzQkJcdTAzQjVcdTAzQzBcdTAzQzRcdTAzQUNcIixcblx0XHRcdFx0bWFueTogXCJcdTAzQkJcdTAzQjVcdTAzQzBcdTAzQzRcdTAzQUNcIixcblx0XHRcdFx0b3RoZXI6IFwiXHUwM0JCXHUwM0I1XHUwM0MwXHUwM0M0XHUwM0FDXCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwiXHUwM0I0XHUwM0I1XHUwM0M1XHUwM0M0XHUwM0I1XHUwM0MxXHUwM0NDXHUwM0JCXHUwM0I1XHUwM0MwXHUwM0M0XHUwM0IxXCIsXG5cdFx0XHRcdG9uZTogXCJcdTAzQjRcdTAzQjVcdTAzQzVcdTAzQzRcdTAzQjVcdTAzQzFcdTAzQ0NcdTAzQkJcdTAzQjVcdTAzQzBcdTAzQzRcdTAzQkZcIixcblx0XHRcdFx0dHdvOiBcIlx1MDNCNFx1MDNCNVx1MDNDNVx1MDNDNFx1MDNCNVx1MDNDMVx1MDNDQ1x1MDNCQlx1MDNCNVx1MDNDMFx1MDNDNFx1MDNCMVwiLFxuXHRcdFx0XHRmZXc6IFwiXHUwM0I0XHUwM0I1XHUwM0M1XHUwM0M0XHUwM0I1XHUwM0MxXHUwM0NDXHUwM0JCXHUwM0I1XHUwM0MwXHUwM0M0XHUwM0IxXCIsXG5cdFx0XHRcdG1hbnk6IFwiXHUwM0I0XHUwM0I1XHUwM0M1XHUwM0M0XHUwM0I1XHUwM0MxXHUwM0NDXHUwM0JCXHUwM0I1XHUwM0MwXHUwM0M0XHUwM0IxXCIsXG5cdFx0XHRcdG90aGVyOiBcIlx1MDNCNFx1MDNCNVx1MDNDNVx1MDNDNFx1MDNCNVx1MDNDMVx1MDNDQ1x1MDNCQlx1MDNCNVx1MDNDMFx1MDNDNFx1MDNCMVwiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXG5cdGhyOiB7XG5cdFx0dGVtcGxhdGU6IHtcblx0XHRcdG9uOiAodmFsdWUpID0+IGBuYSAke3ZhbHVlfWAsXG5cdFx0XHRwYXN0OiAodmFsdWUpID0+IGBwcmlqZSAke3ZhbHVlfWAsXG5cdFx0XHRmdXR1cmU6ICh2YWx1ZSkgPT4gYHphICR7dmFsdWV9YCxcblx0XHRcdGp1c3ROb3c6ICgpID0+IGBwcmlqZSB0cmVudXRrYWAsXG5cdFx0fSxcblx0XHR1bml0czoge1xuXHRcdFx0ZGF5OiB7XG5cdFx0XHRcdHplcm86IFwiZGFuYVwiLFxuXHRcdFx0XHRvbmU6IFwiZGFuXCIsXG5cdFx0XHRcdHR3bzogXCJkYW5hXCIsXG5cdFx0XHRcdGZldzogXCJkYW5hXCIsXG5cdFx0XHRcdG1hbnk6IFwiZGFuYVwiLFxuXHRcdFx0XHRvdGhlcjogXCJkYW5hXCIsXG5cdFx0XHR9LFxuXHRcdFx0aG91cjoge1xuXHRcdFx0XHR6ZXJvOiBcInNhdGlcIixcblx0XHRcdFx0b25lOiBcInNhdFwiLFxuXHRcdFx0XHR0d286IFwic2F0YVwiLFxuXHRcdFx0XHRmZXc6IFwic2F0YVwiLFxuXHRcdFx0XHRtYW55OiBcInNhdGlcIixcblx0XHRcdFx0b3RoZXI6IFwic2F0aVwiLFxuXHRcdFx0fSxcblx0XHRcdG1pbnV0ZToge1xuXHRcdFx0XHR6ZXJvOiBcIm1pbnV0YVwiLFxuXHRcdFx0XHRvbmU6IFwibWludXRhXCIsXG5cdFx0XHRcdHR3bzogXCJtaW51dGVcIixcblx0XHRcdFx0ZmV3OiBcIm1pbnV0ZVwiLFxuXHRcdFx0XHRtYW55OiBcIm1pbnV0YVwiLFxuXHRcdFx0XHRvdGhlcjogXCJtaW51dGFcIixcblx0XHRcdH0sXG5cdFx0XHRzZWNvbmQ6IHtcblx0XHRcdFx0emVybzogXCJzZWt1bmRpXCIsXG5cdFx0XHRcdG9uZTogXCJzZWt1bmRhXCIsXG5cdFx0XHRcdHR3bzogXCJzZWt1bmRlXCIsXG5cdFx0XHRcdGZldzogXCJzZWt1bmRlXCIsXG5cdFx0XHRcdG1hbnk6IFwic2VrdW5kaVwiLFxuXHRcdFx0XHRvdGhlcjogXCJzZWt1bmRpXCIsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdH0sXG5cblx0c2s6IHtcblx0XHR0ZW1wbGF0ZToge1xuXHRcdFx0b246ICh2YWx1ZSkgPT4gYHYgZGVcdTAxNDggJHt2YWx1ZX1gLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgcHJlZCAke3ZhbHVlfWAsXG5cdFx0XHRmdXR1cmU6ICh2YWx1ZSkgPT4gYHphICR7dmFsdWV9YCxcblx0XHRcdGp1c3ROb3c6ICgpID0+IGBwclx1MDBFMXZlIHRlcmF6YCxcblx0XHR9LFxuXHRcdHVuaXRzOiB7XG5cdFx0XHRkYXk6IHtcblx0XHRcdFx0emVybzogXCJkbmlcIixcblx0XHRcdFx0b25lOiBcImRlXHUwMTQ4XCIsXG5cdFx0XHRcdHR3bzogXCJkbmlcIixcblx0XHRcdFx0ZmV3OiBcImRuaVwiLFxuXHRcdFx0XHRtYW55OiBcImRuXHUwMEVEXCIsXG5cdFx0XHRcdG90aGVyOiBcImRuaVwiLFxuXHRcdFx0fSxcblx0XHRcdGhvdXI6IHtcblx0XHRcdFx0emVybzogXCJob2RpbnlcIixcblx0XHRcdFx0b25lOiBcImhvZGluYVwiLFxuXHRcdFx0XHR0d286IFwiaG9kaW55XCIsXG5cdFx0XHRcdGZldzogXCJob2RpbnlcIixcblx0XHRcdFx0bWFueTogXCJob2RcdTAwRURuXCIsXG5cdFx0XHRcdG90aGVyOiBcImhvZGlueVwiLFxuXHRcdFx0fSxcblx0XHRcdG1pbnV0ZToge1xuXHRcdFx0XHR6ZXJvOiBcIm1pblx1MDBGQXR5XCIsXG5cdFx0XHRcdG9uZTogXCJtaW5cdTAwRkF0YVwiLFxuXHRcdFx0XHR0d286IFwibWluXHUwMEZBdHlcIixcblx0XHRcdFx0ZmV3OiBcIm1pblx1MDBGQXR5XCIsXG5cdFx0XHRcdG1hbnk6IFwibWluXHUwMEZBdFwiLFxuXHRcdFx0XHRvdGhlcjogXCJtaW5cdTAwRkF0eVwiLFxuXHRcdFx0fSxcblx0XHRcdHNlY29uZDoge1xuXHRcdFx0XHR6ZXJvOiBcInNla3VuZHlcIixcblx0XHRcdFx0b25lOiBcInNla3VuZGFcIixcblx0XHRcdFx0dHdvOiBcInNla3VuZHlcIixcblx0XHRcdFx0ZmV3OiBcInNla3VuZHlcIixcblx0XHRcdFx0bWFueTogXCJzZWtcdTAwRkFuZFwiLFxuXHRcdFx0XHRvdGhlcjogXCJzZWt1bmR5XCIsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdH0sXG5cblx0bm86IHtcblx0XHR0ZW1wbGF0ZToge1xuXHRcdFx0b246ICh2YWx1ZSkgPT4gYHBcdTAwRTUgJHt2YWx1ZX1gLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgJHt2YWx1ZX0gc2lkZW5gLFxuXHRcdFx0ZnV0dXJlOiAodmFsdWUpID0+IGBvbSAke3ZhbHVlfWAsXG5cdFx0XHRqdXN0Tm93OiAoKSA9PiBgbmV0dG9wcGAsXG5cdFx0fSxcblx0XHR1bml0czoge1xuXHRcdFx0ZGF5OiB7XG5cdFx0XHRcdHplcm86IFwiZGFnZXJcIixcblx0XHRcdFx0b25lOiBcImRhZ1wiLFxuXHRcdFx0XHR0d286IFwiZGFnZXJcIixcblx0XHRcdFx0ZmV3OiBcImRhZ2VyXCIsXG5cdFx0XHRcdG1hbnk6IFwiZGFnZXJcIixcblx0XHRcdFx0b3RoZXI6IFwiZGFnZXJcIixcblx0XHRcdH0sXG5cdFx0XHRob3VyOiB7XG5cdFx0XHRcdHplcm86IFwidGltZXJcIixcblx0XHRcdFx0b25lOiBcInRpbWVcIixcblx0XHRcdFx0dHdvOiBcInRpbWVyXCIsXG5cdFx0XHRcdGZldzogXCJ0aW1lclwiLFxuXHRcdFx0XHRtYW55OiBcInRpbWVyXCIsXG5cdFx0XHRcdG90aGVyOiBcInRpbWVyXCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwibWludXR0ZXJcIixcblx0XHRcdFx0b25lOiBcIm1pbnV0dFwiLFxuXHRcdFx0XHR0d286IFwibWludXR0ZXJcIixcblx0XHRcdFx0ZmV3OiBcIm1pbnV0dGVyXCIsXG5cdFx0XHRcdG1hbnk6IFwibWludXR0ZXJcIixcblx0XHRcdFx0b3RoZXI6IFwibWludXR0ZXJcIixcblx0XHRcdH0sXG5cdFx0XHRzZWNvbmQ6IHtcblx0XHRcdFx0emVybzogXCJzZWt1bmRlclwiLFxuXHRcdFx0XHRvbmU6IFwic2VrdW5kXCIsXG5cdFx0XHRcdHR3bzogXCJzZWt1bmRlclwiLFxuXHRcdFx0XHRmZXc6IFwic2VrdW5kZXJcIixcblx0XHRcdFx0bWFueTogXCJzZWt1bmRlclwiLFxuXHRcdFx0XHRvdGhlcjogXCJzZWt1bmRlclwiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXG5cdHNsOiB7XG5cdFx0dGVtcGxhdGU6IHtcblx0XHRcdG9uOiAodmFsdWUpID0+IGBuYSAke3ZhbHVlfWAsXG5cdFx0XHRwYXN0OiAodmFsdWUpID0+IGBwcmVkICR7dmFsdWV9YCxcblx0XHRcdGZ1dHVyZTogKHZhbHVlKSA9PiBgXHUwMTBEZXogJHt2YWx1ZX1gLFxuXHRcdFx0anVzdE5vdzogKCkgPT4gYHJhdm5vIHpkYWpgLFxuXHRcdH0sXG5cdFx0dW5pdHM6IHtcblx0XHRcdGRheToge1xuXHRcdFx0XHR6ZXJvOiBcImRuaVwiLFxuXHRcdFx0XHRvbmU6IFwiZGFuXCIsXG5cdFx0XHRcdHR3bzogXCJkbmlcIixcblx0XHRcdFx0ZmV3OiBcImRuaVwiLFxuXHRcdFx0XHRtYW55OiBcImRuaVwiLFxuXHRcdFx0XHRvdGhlcjogXCJkbmlcIixcblx0XHRcdH0sXG5cdFx0XHRob3VyOiB7XG5cdFx0XHRcdHplcm86IFwidXJlXCIsXG5cdFx0XHRcdG9uZTogXCJ1cmFcIixcblx0XHRcdFx0dHdvOiBcInVyZVwiLFxuXHRcdFx0XHRmZXc6IFwidXJlXCIsXG5cdFx0XHRcdG1hbnk6IFwidXJlXCIsXG5cdFx0XHRcdG90aGVyOiBcInVyZVwiLFxuXHRcdFx0fSxcblx0XHRcdG1pbnV0ZToge1xuXHRcdFx0XHR6ZXJvOiBcIm1pbnV0ZVwiLFxuXHRcdFx0XHRvbmU6IFwibWludXRhXCIsXG5cdFx0XHRcdHR3bzogXCJtaW51dGVcIixcblx0XHRcdFx0ZmV3OiBcIm1pbnV0ZVwiLFxuXHRcdFx0XHRtYW55OiBcIm1pbnV0ZVwiLFxuXHRcdFx0XHRvdGhlcjogXCJtaW51dGVcIixcblx0XHRcdH0sXG5cdFx0XHRzZWNvbmQ6IHtcblx0XHRcdFx0emVybzogXCJzZWt1bmRlXCIsXG5cdFx0XHRcdG9uZTogXCJzZWt1bmRhXCIsXG5cdFx0XHRcdHR3bzogXCJzZWt1bmRlXCIsXG5cdFx0XHRcdGZldzogXCJzZWt1bmRlXCIsXG5cdFx0XHRcdG1hbnk6IFwic2VrdW5kXCIsXG5cdFx0XHRcdG90aGVyOiBcInNla3VuZFwiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXG5cdHZpOiB7XG5cdFx0dGVtcGxhdGU6IHtcblx0XHRcdG9uOiAodmFsdWUpID0+IGB2XHUwMEUwbyAke3ZhbHVlfWAsXG5cdFx0XHRwYXN0OiAodmFsdWUpID0+IGAke3ZhbHVlfSB0clx1MDFCMFx1MUVEQmNgLFxuXHRcdFx0ZnV0dXJlOiAodmFsdWUpID0+IGAke3ZhbHVlfSBzYXVgLFxuXHRcdFx0anVzdE5vdzogKCkgPT4gYHZcdTFFRUJhIG1cdTFFREJpYCxcblx0XHR9LFxuXHRcdHVuaXRzOiB7XG5cdFx0XHRkYXk6IHtcblx0XHRcdFx0emVybzogXCJuZ1x1MDBFMHlcIixcblx0XHRcdFx0b25lOiBcIm5nXHUwMEUweVwiLFxuXHRcdFx0XHR0d286IFwibmdcdTAwRTB5XCIsXG5cdFx0XHRcdGZldzogXCJuZ1x1MDBFMHlcIixcblx0XHRcdFx0bWFueTogXCJuZ1x1MDBFMHlcIixcblx0XHRcdFx0b3RoZXI6IFwibmdcdTAwRTB5XCIsXG5cdFx0XHR9LFxuXHRcdFx0aG91cjoge1xuXHRcdFx0XHR6ZXJvOiBcImdpXHUxRUREXCIsXG5cdFx0XHRcdG9uZTogXCJnaVx1MUVERFwiLFxuXHRcdFx0XHR0d286IFwiZ2lcdTFFRERcIixcblx0XHRcdFx0ZmV3OiBcImdpXHUxRUREXCIsXG5cdFx0XHRcdG1hbnk6IFwiZ2lcdTFFRERcIixcblx0XHRcdFx0b3RoZXI6IFwiZ2lcdTFFRERcIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJwaFx1MDBGQXRcIixcblx0XHRcdFx0b25lOiBcInBoXHUwMEZBdFwiLFxuXHRcdFx0XHR0d286IFwicGhcdTAwRkF0XCIsXG5cdFx0XHRcdGZldzogXCJwaFx1MDBGQXRcIixcblx0XHRcdFx0bWFueTogXCJwaFx1MDBGQXRcIixcblx0XHRcdFx0b3RoZXI6IFwicGhcdTAwRkF0XCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwiZ2lcdTAwRTJ5XCIsXG5cdFx0XHRcdG9uZTogXCJnaVx1MDBFMnlcIixcblx0XHRcdFx0dHdvOiBcImdpXHUwMEUyeVwiLFxuXHRcdFx0XHRmZXc6IFwiZ2lcdTAwRTJ5XCIsXG5cdFx0XHRcdG1hbnk6IFwiZ2lcdTAwRTJ5XCIsXG5cdFx0XHRcdG90aGVyOiBcImdpXHUwMEUyeVwiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxufTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBnZXRMb2NhbGVPZkRvY3VtZW50IH0gZnJvbSBcIi4uL2RvbS9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWwsIGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuLi90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0LCBpc1N0cmluZywgaXNQcmltaXRpdmUgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQge1xuXHRnZXREb2N1bWVudFRyYW5zbGF0aW9ucyxcblx0VHJhbnNsYXRpb25zLFxufSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUZ1bmN0aW9uLFxuXHR2YWxpZGF0ZUludGVnZXIsXG5cdHZhbGlkYXRlT2JqZWN0LFxuXHR2YWxpZGF0ZVByaW1pdGl2ZSxcblx0dmFsaWRhdGVTdHJpbmcsXG5cdHZhbGlkYXRlQm9vbGVhbixcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgZm9ybWF0VGltZUFnbyB9IGZyb20gXCIuLi9pMThuL3RpbWUtYWdvLm1qc1wiO1xuXG5leHBvcnQgeyBUcmFuc2Zvcm1lciB9O1xuXG4vKipcbiAqIFRoZSB0cmFuc2Zvcm1lciBjbGFzcyBpcyBhIHN3aXNzIGFybXkga25pZmUgZm9yIG1hbmlwdWxhdGluZyB2YWx1ZXMuXG4gKlxuICogQSBzaW1wbGUgZXhhbXBsZSBpcyB0aGUgY29udmVyc2lvbiBvZiBhbGwgY2hhcmFjdGVycyB0byBsb3dlcmNhc2UuIGZvciB0aGlzIHB1cnBvc2UgdGhlIGNvbW1hbmQgYHRvbG93ZXJgIG11c3QgYmUgdXNlZC5cbiAqXG4gKiBgYGBqc1xuICogbGV0IHQgPSBuZXcgVHJhbnNmb3JtZXIoJ3RvbG93ZXInKS5ydW4oJ0FCQycpOyAvLyBcdTIxQTYgYWJjXG4gKiBgYGBcbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvbGlicmFyaWVzL3RyYW5zZm9ybWVyXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy90cmFuc2Zvcm1lci9zaW1wbGVcbiAqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgdHJhbnNmb3JtZXIgY2xhc3MgaXMgYSBzd2lzcyBhcm15IGtuaWZlIGZvciBtYW5pcHVsYXRpbmcgdmFsdWVzLiBlc3BlY2lhbGx5IGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIHBpcGUsIHByb2Nlc3NpbmcgY2hhaW5zIGNhbiBiZSBidWlsdCB1cC5cbiAqL1xuY2xhc3MgVHJhbnNmb3JtZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBkZWZpbml0aW9uXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihkZWZpbml0aW9uKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmFyZ3MgPSBkaXNhc3NlbWJsZShkZWZpbml0aW9uKTtcblx0XHR0aGlzLmNvbW1hbmQgPSB0aGlzLmFyZ3Muc2hpZnQoKTtcblx0XHR0aGlzLmNhbGxiYWNrcyA9IG5ldyBNYXAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuXHQgKiBAcmV0dXJuIHtUcmFuc2Zvcm1lcn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuXHQgKi9cblx0c2V0Q2FsbGJhY2sobmFtZSwgY2FsbGJhY2ssIGNvbnRleHQpIHtcblx0XHR2YWxpZGF0ZVN0cmluZyhuYW1lKTtcblx0XHR2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKTtcblxuXHRcdGlmIChjb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhbGlkYXRlT2JqZWN0KGNvbnRleHQpO1xuXHRcdH1cblxuXHRcdHRoaXMuY2FsbGJhY2tzLnNldChuYW1lLCB7XG5cdFx0XHRjYWxsYmFjazogY2FsbGJhY2ssXG5cdFx0XHRjb250ZXh0OiBjb250ZXh0LFxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5rbm93biBjb21tYW5kXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdHlwZSBub3Qgc3VwcG9ydGVkXG5cdCAqL1xuXHRydW4odmFsdWUpIHtcblx0XHRyZXR1cm4gdHJhbnNmb3JtLmFwcGx5KHRoaXMsIFt2YWx1ZV0pO1xuXHR9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kXG4gKiBAcmV0dXJuIHthcnJheX1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGRpc2Fzc2VtYmxlKGNvbW1hbmQpIHtcblx0dmFsaWRhdGVTdHJpbmcoY29tbWFuZCk7XG5cblx0Y29uc3QgcGxhY2Vob2xkZXIgPSBuZXcgTWFwKCk7XG5cdGNvbnN0IHJlZ2V4ID0gLygoPzxwYXR0ZXJuPlxcXFwoPzxjaGFyPi4pKXsxfSkvZ2ltO1xuXG5cdC8vIFRoZSBzZXBhcmF0b3IgZm9yIGFyZ3MgbXVzdCBiZSBlc2NhcGVkXG5cdC8vIHVuZGVmaW5lZCBzdHJpbmcgd2hpY2ggc2hvdWxkIG5vdCBvY2N1ciBub3JtYWxseSBhbmQgaXMgYWxzbyBub3QgYSByZWdleFxuXHRjb25zdCByZXN1bHQgPSBjb21tYW5kLm1hdGNoQWxsKHJlZ2V4KTtcblxuXHRmb3IgKGNvbnN0IG0gb2YgcmVzdWx0KSB7XG5cdFx0Y29uc3QgZyA9IG0/LltcImdyb3Vwc1wiXTtcblx0XHRpZiAoIWlzT2JqZWN0KGcpKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRjb25zdCBwID0gZz8uW1wicGF0dGVyblwiXTtcblx0XHRjb25zdCBjID0gZz8uW1wiY2hhclwiXTtcblxuXHRcdGlmIChwICYmIGMpIHtcblx0XHRcdGNvbnN0IHIgPSBgX18ke25ldyBJRCgpLnRvU3RyaW5nKCl9X19gO1xuXHRcdFx0cGxhY2Vob2xkZXIuc2V0KHIsIGMpO1xuXHRcdFx0Y29tbWFuZCA9IGNvbW1hbmQucmVwbGFjZShwLCByKTtcblx0XHR9XG5cdH1cblx0bGV0IHBhcnRzID0gY29tbWFuZC5zcGxpdChcIjpcIik7XG5cblx0cGFydHMgPSBwYXJ0cy5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0bGV0IHYgPSB2YWx1ZS50cmltKCk7XG5cdFx0Zm9yIChjb25zdCBrIG9mIHBsYWNlaG9sZGVyKSB7XG5cdFx0XHR2ID0gdi5yZXBsYWNlKGtbMF0sIGtbMV0pO1xuXHRcdH1cblx0XHRyZXR1cm4gdjtcblx0fSk7XG5cblx0cmV0dXJuIHBhcnRzO1xufVxuXG4vKipcbiAqIHRyaWVzIHRvIG1ha2UgYSBzdHJpbmcgb3V0IG9mIHZhbHVlIGFuZCBpZiB0aGlzIHN1Y2NlZWRzIHRvIHJldHVybiBpdCBiYWNrXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY29udmVydFRvU3RyaW5nKHZhbHVlKSB7XG5cdGlmIChpc09iamVjdCh2YWx1ZSkgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoXCJ0b1N0cmluZ1wiKSkge1xuXHRcdHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcblx0fVxuXG5cdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmtub3duIGNvbW1hbmRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IHR5cGUgbm90IHN1cHBvcnRlZFxuICogQHRocm93cyB7RXJyb3J9IG1pc3Npbmcga2V5IHBhcmFtZXRlclxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm0odmFsdWUpIHtcblx0Y29uc3QgY29uc29sZSA9IGdldEdsb2JhbE9iamVjdChcImNvbnNvbGVcIik7XG5cblx0Y29uc3QgYXJncyA9IGNsb25lKHRoaXMuYXJncyk7XG5cdGxldCBrZXk7XG5cdGxldCBkZWZhdWx0VmFsdWU7XG5cblx0bGV0IHRyYW5zbGF0aW9ucztcblx0bGV0IGRhdGU7XG5cdGxldCBsb2NhbGU7XG5cdGxldCB0aW1lc3RhbXA7XG5cdGxldCBtYXA7XG5cdGxldCBrZXlWYWx1ZTtcblxuXHRzd2l0Y2ggKHRoaXMuY29tbWFuZCkge1xuXHRcdGNhc2UgXCJzdGF0aWNcIjpcblx0XHRcdHJldHVybiB0aGlzLmFyZ3Muam9pbihcIjpcIik7XG5cblx0XHRjYXNlIFwidG9sb3dlclwiOlxuXHRcdGNhc2UgXCJzdHJ0b2xvd2VyXCI6XG5cdFx0Y2FzZSBcInRvbG93ZXJjYXNlXCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdGNhc2UgXCJjb250YWluc1wiOlxuXHRcdFx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUuaW5jbHVkZXMoYXJnc1swXSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUuaW5jbHVkZXMoYXJnc1swXSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc09iamVjdCh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlLmhhc093blByb3BlcnR5KGFyZ3NbMF0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cblx0XHRjYXNlIFwiaGFzLWVudHJpZXNcIjpcblx0XHRjYXNlIFwiaGFzZW50cmllc1wiOlxuXHRcdFx0aWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA+IDA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUubGVuZ3RoID4gMDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Y2FzZSBcImlzdW5kZWZpbmVkXCI6XG5cdFx0Y2FzZSBcImlzLXVuZGVmaW5lZFwiOlxuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG5cblx0XHRjYXNlIFwiaXNudWxsXCI6XG5cdFx0Y2FzZSBcImlzLW51bGxcIjpcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcblxuXHRcdGNhc2UgXCJpc3NldFwiOlxuXHRcdGNhc2UgXCJpcy1zZXRcIjpcblx0XHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsO1xuXG5cdFx0Y2FzZSBcImlzbnVtYmVyXCI6XG5cdFx0Y2FzZSBcImlzLW51bWJlclwiOlxuXHRcdFx0cmV0dXJuIGlzUHJpbWl0aXZlKHZhbHVlKSAmJiAhaXNOYU4odmFsdWUpO1xuXG5cdFx0Y2FzZSBcImlzaW50ZWdlclwiOlxuXHRcdGNhc2UgXCJpcy1pbnRlZ2VyXCI6XG5cdFx0XHRyZXR1cm4gaXNQcmltaXRpdmUodmFsdWUpICYmICFpc05hTih2YWx1ZSkgJiYgdmFsdWUgJSAxID09PSAwO1xuXG5cdFx0Y2FzZSBcImlzZmxvYXRcIjpcblx0XHRjYXNlIFwiaXMtZmxvYXRcIjpcblx0XHRcdHJldHVybiBpc1ByaW1pdGl2ZSh2YWx1ZSkgJiYgIWlzTmFOKHZhbHVlKSAmJiB2YWx1ZSAlIDEgIT09IDA7XG5cblx0XHRjYXNlIFwiaXNvYmplY3RcIjpcblx0XHRjYXNlIFwiaXMtb2JqZWN0XCI6XG5cdFx0XHRyZXR1cm4gaXNPYmplY3QodmFsdWUpO1xuXG5cdFx0Y2FzZSBcImlzYXJyYXlcIjpcblx0XHRjYXNlIFwiaXMtYXJyYXlcIjpcblx0XHRcdHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcblxuXHRcdGNhc2UgXCJub3RcIjpcblx0XHRcdHZhbGlkYXRlQm9vbGVhbih2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gIXZhbHVlO1xuXG5cdFx0Y2FzZSBcInRvdXBwZXJcIjpcblx0XHRjYXNlIFwic3RydG91cHBlclwiOlxuXHRcdGNhc2UgXCJ0b3VwcGVyY2FzZVwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0cmV0dXJuIHZhbHVlLnRvVXBwZXJDYXNlKCk7XG5cblx0XHRjYXNlIFwidG9zdHJpbmdcIjpcblx0XHRcdHJldHVybiBgJHt2YWx1ZX1gO1xuXG5cdFx0Y2FzZSBcInRvaW50ZWdlclwiOlxuXHRcdFx0Y29uc3QgbiA9IHBhcnNlSW50KHZhbHVlKTtcblx0XHRcdHZhbGlkYXRlSW50ZWdlcihuKTtcblx0XHRcdHJldHVybiBuO1xuXG5cdFx0Y2FzZSBcInRvLWpzb25cIjpcblx0XHRjYXNlIFwidG9qc29uXCI6XG5cdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuXG5cdFx0Y2FzZSBcImZyb20tanNvblwiOlxuXHRcdGNhc2UgXCJmcm9tanNvblwiOlxuXHRcdFx0cmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xuXG5cdFx0Y2FzZSBcInRyaW1cIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblx0XHRcdHJldHVybiB2YWx1ZS50cmltKCk7XG5cblx0XHRjYXNlIFwicmF3dXJsZW5jb2RlXCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKVxuXHRcdFx0XHQucmVwbGFjZSgvIS9nLCBcIiUyMVwiKVxuXHRcdFx0XHQucmVwbGFjZSgvJy9nLCBcIiUyN1wiKVxuXHRcdFx0XHQucmVwbGFjZSgvXFwoL2csIFwiJTI4XCIpXG5cdFx0XHRcdC5yZXBsYWNlKC9cXCkvZywgXCIlMjlcIilcblx0XHRcdFx0LnJlcGxhY2UoL1xcKi9nLCBcIiUyQVwiKTtcblxuXHRcdGNhc2UgXCJjYWxsXCI6XG5cdFx0XHQvKipcblx0XHRcdCAqIGNhbGxiYWNrLWRlZmluaXRpb25cblx0XHRcdCAqIGZ1bmN0aW9uIGNhbGxiYWNrKHZhbHVlLCAuLi5hcmdzKSB7XG5cdFx0XHQgKiAgIHJldHVybiB2YWx1ZTtcblx0XHRcdCAqIH1cblx0XHRcdCAqL1xuXG5cdFx0XHRsZXQgY2FsbGJhY2s7XG5cdFx0XHRjb25zdCBjYWxsYmFja05hbWUgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRsZXQgY29udGV4dCA9IGdldEdsb2JhbCgpO1xuXG5cdFx0XHRpZiAoaXNPYmplY3QodmFsdWUpICYmIHZhbHVlLmhhc093blByb3BlcnR5KGNhbGxiYWNrTmFtZSkpIHtcblx0XHRcdFx0Y2FsbGJhY2sgPSB2YWx1ZVtjYWxsYmFja05hbWVdO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmNhbGxiYWNrcy5oYXMoY2FsbGJhY2tOYW1lKSkge1xuXHRcdFx0XHRjb25zdCBzID0gdGhpcy5jYWxsYmFja3MuZ2V0KGNhbGxiYWNrTmFtZSk7XG5cdFx0XHRcdGNhbGxiYWNrID0gcz8uW1wiY2FsbGJhY2tcIl07XG5cdFx0XHRcdGNvbnRleHQgPSBzPy5bXCJjb250ZXh0XCJdO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0dHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiAmJlxuXHRcdFx0XHR3aW5kb3cuaGFzT3duUHJvcGVydHkoY2FsbGJhY2tOYW1lKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNhbGxiYWNrID0gd2luZG93W2NhbGxiYWNrTmFtZV07XG5cdFx0XHR9XG5cdFx0XHR2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKTtcblxuXHRcdFx0YXJncy51bnNoaWZ0KHZhbHVlKTtcblx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKGNvbnRleHQsIC4uLmFyZ3MpO1xuXG5cdFx0Y2FzZSBcInBsYWluXCI6XG5cdFx0Y2FzZSBcInBsYWludGV4dFwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0Y29uc3QgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh2YWx1ZSwgXCJ0ZXh0L2h0bWxcIik7XG5cdFx0XHRyZXR1cm4gZG9jLmJvZHkudGV4dENvbnRlbnQgfHwgXCJcIjtcblxuXHRcdGNhc2UgXCJpZlwiOlxuXHRcdGNhc2UgXCI/XCI6XG5cdFx0XHR2YWxpZGF0ZVByaW1pdGl2ZSh2YWx1ZSk7XG5cblx0XHRcdGxldCB0cnVlU3RhdGVtZW50ID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblx0XHRcdGxldCBmYWxzZVN0YXRlbWVudCA9IGFyZ3Muc2hpZnQoKSB8fCB1bmRlZmluZWQ7XG5cblx0XHRcdHRydWVTdGF0ZW1lbnQgPSBjb252ZXJ0U3BlY2lhbFN0cmluZ3ModHJ1ZVN0YXRlbWVudCwgdmFsdWUpO1xuXHRcdFx0ZmFsc2VTdGF0ZW1lbnQgPSBjb252ZXJ0U3BlY2lhbFN0cmluZ3MoZmFsc2VTdGF0ZW1lbnQsIHZhbHVlKTtcblxuXHRcdFx0Y29uc3QgY29uZGl0aW9uID0gZXZhbHVhdGVDb25kaXRpb24odmFsdWUpO1xuXHRcdFx0cmV0dXJuIGNvbmRpdGlvbiA/IHRydWVTdGF0ZW1lbnQgOiBmYWxzZVN0YXRlbWVudDtcblxuXHRcdGNhc2UgXCJ1Y2ZpcnN0XCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cblx0XHRcdGNvbnN0IGZpcnN0Y2hhciA9IHZhbHVlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIGZpcnN0Y2hhciArIHZhbHVlLnN1YnN0cigxKTtcblx0XHRjYXNlIFwidWN3b3Jkc1wiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdFx0XHRyZXR1cm4gdmFsdWUucmVwbGFjZShcblx0XHRcdFx0L14oW2EtelxcdTAwRTAtXFx1MDBGQ10pfFxccysoW2EtelxcdTAwRTAtXFx1MDBGQ10pL2csXG5cdFx0XHRcdGZ1bmN0aW9uICh2KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHYudG9VcHBlckNhc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdCk7XG5cblx0XHRjYXNlIFwiY291bnRcIjpcblx0XHRjYXNlIFwibGVuZ3RoXCI6XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChpc1N0cmluZyh2YWx1ZSkgfHwgaXNPYmplY3QodmFsdWUpIHx8IGlzQXJyYXkodmFsdWUpKSAmJlxuXHRcdFx0XHR2YWx1ZS5oYXNPd25Qcm9wZXJ0eShcImxlbmd0aFwiKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZS5sZW5ndGg7XG5cdFx0XHR9XG5cblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYHVuc3VwcG9ydGVkIHR5cGUgJHt0eXBlb2YgdmFsdWV9YCk7XG5cblx0XHRjYXNlIFwidG8tYmFzZTY0XCI6XG5cdFx0Y2FzZSBcImJ0b2FcIjpcblx0XHRjYXNlIFwiYmFzZTY0XCI6XG5cdFx0XHRyZXR1cm4gYnRvYShjb252ZXJ0VG9TdHJpbmcodmFsdWUpKTtcblxuXHRcdGNhc2UgXCJhdG9iXCI6XG5cdFx0Y2FzZSBcImZyb20tYmFzZTY0XCI6XG5cdFx0XHRyZXR1cm4gYXRvYihjb252ZXJ0VG9TdHJpbmcodmFsdWUpKTtcblxuXHRcdGNhc2UgXCJlbXB0eVwiOlxuXHRcdFx0cmV0dXJuIFwiXCI7XG5cblx0XHRjYXNlIFwidW5kZWZpbmVkXCI6XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y2FzZSBcImRlYnVnXCI6XG5cdFx0XHRpZiAoaXNPYmplY3QoY29uc29sZSkpIHtcblx0XHRcdFx0Y29uc29sZS5sb2codmFsdWUpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cblx0XHRjYXNlIFwicHJlZml4XCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRjb25zdCBwcmVmaXggPSBhcmdzPy5bMF07XG5cdFx0XHRyZXR1cm4gcHJlZml4ICsgdmFsdWU7XG5cblx0XHRjYXNlIFwic3VmZml4XCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRjb25zdCBzdWZmaXggPSBhcmdzPy5bMF07XG5cdFx0XHRyZXR1cm4gdmFsdWUgKyBzdWZmaXg7XG5cblx0XHRjYXNlIFwidW5pcWlkXCI6XG5cdFx0XHRyZXR1cm4gbmV3IElEKCkudG9TdHJpbmcoKTtcblxuXHRcdGNhc2UgXCJmaXJzdC1rZXlcIjpcblx0XHRjYXNlIFwibGFzdC1rZXlcIjpcblx0XHRjYXNlIFwibnRoLWxhc3Qta2V5XCI6XG5cdFx0Y2FzZSBcIm50aC1rZXlcIjpcblx0XHRcdGlmICghaXNPYmplY3QodmFsdWUpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInR5cGUgbm90IHN1cHBvcnRlZFwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKS5zb3J0KCk7XG5cblx0XHRcdGlmICh0aGlzLmNvbW1hbmQgPT09IFwiZmlyc3Qta2V5XCIpIHtcblx0XHRcdFx0a2V5ID0gMDtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5jb21tYW5kID09PSBcImxhc3Qta2V5XCIpIHtcblx0XHRcdFx0a2V5ID0ga2V5cy5sZW5ndGggLSAxO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0a2V5ID0gdmFsaWRhdGVJbnRlZ2VyKHBhcnNlSW50KGFyZ3Muc2hpZnQoKSkpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmNvbW1hbmQgPT09IFwibnRoLWxhc3Qta2V5XCIpIHtcblx0XHRcdFx0XHRrZXkgPSBrZXlzLmxlbmd0aCAtIGtleSAtIDE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0ZGVmYXVsdFZhbHVlID0gYXJncy5zaGlmdCgpIHx8IFwiXCI7XG5cblx0XHRcdGNvbnN0IHVzZUtleSA9IGtleXM/LltrZXldO1xuXG5cdFx0XHRpZiAodmFsdWU/Llt1c2VLZXldKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZT8uW3VzZUtleV07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkZWZhdWx0VmFsdWU7XG5cblx0XHRjYXNlIFwia2V5XCI6XG5cdFx0Y2FzZSBcInByb3BlcnR5XCI6XG5cdFx0Y2FzZSBcImluZGV4XCI6XG5cdFx0XHRrZXkgPSBhcmdzLnNoaWZ0KCkgfHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBrZXkgcGFyYW1ldGVyXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZhdWx0VmFsdWUgPSBhcmdzLnNoaWZ0KCkgfHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXApIHtcblx0XHRcdFx0aWYgKCF2YWx1ZS5oYXMoa2V5KSkge1xuXHRcdFx0XHRcdHJldHVybiBkZWZhdWx0VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlLmdldChrZXkpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPYmplY3QodmFsdWUpIHx8IGlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRcdGlmICh2YWx1ZT8uW2tleV0pIHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU/LltrZXldO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBub3Qgc3VwcG9ydGVkXCIpO1xuXG5cdFx0Y2FzZSBcInBhdGgtZXhpc3RzXCI6XG5cdFx0XHRrZXkgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBrZXkgcGFyYW1ldGVyXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbmV3IFBhdGhmaW5kZXIodmFsdWUpLmV4aXN0cyhrZXkpO1xuXG5cdFx0Y2FzZSBcImNvbmNhdFwiOlxuXHRcdFx0Y29uc3QgcGYyID0gbmV3IFBhdGhmaW5kZXIodmFsdWUpO1xuXHRcdFx0bGV0IGNvbmNhdCA9IFwiXCI7XG5cdFx0XHR3aGlsZSAoYXJncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGtleSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBrZXkgcGFyYW1ldGVyXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gYWRkIGVtcHR5IHN0cmluZ3Ncblx0XHRcdFx0aWYgKGlzU3RyaW5nKGtleSkgJiYga2V5LnRyaW0oKSA9PT0gXCJcIikge1xuXHRcdFx0XHRcdGNvbmNhdCArPSBrZXk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIXBmMi5leGlzdHMoa2V5KSkge1xuXHRcdFx0XHRcdGNvbmNhdCArPSBrZXk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgdiA9IHBmMi5nZXRWaWEoa2V5KTtcblx0XHRcdFx0aWYgKCFpc1ByaW1pdGl2ZSh2KSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInZhbHVlIGlzIG5vdCBwcmltaXRpdmVcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25jYXQgKz0gdjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGNvbmNhdDtcblx0XHRjYXNlIFwicGF0aFwiOlxuXHRcdFx0a2V5ID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcga2V5IHBhcmFtZXRlclwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgcGYgPSBuZXcgUGF0aGZpbmRlcih2YWx1ZSk7XG5cblx0XHRcdGlmICghcGYuZXhpc3RzKGtleSkpIHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHBmLmdldFZpYShrZXkpO1xuXG5cdFx0Y2FzZSBcInN1YnN0cmluZ1wiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdFx0XHRjb25zdCBzdGFydCA9IHBhcnNlSW50KGFyZ3NbMF0pIHx8IDA7XG5cdFx0XHRjb25zdCBlbmQgPSAocGFyc2VJbnQoYXJnc1sxXSkgfHwgMCkgKyBzdGFydDtcblxuXHRcdFx0cmV0dXJuIHZhbHVlLnN1YnN0cmluZyhzdGFydCwgZW5kKTtcblxuXHRcdGNhc2UgXCJub3BcIjpcblx0XHRcdHJldHVybiB2YWx1ZTtcblxuXHRcdGNhc2UgXCI/P1wiOlxuXHRcdGNhc2UgXCJkZWZhdWx0XCI6XG5cdFx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmF1bHRWYWx1ZSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdGxldCBkZWZhdWx0VHlwZSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdGlmIChkZWZhdWx0VHlwZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRlZmF1bHRUeXBlID0gXCJzdHJpbmdcIjtcblx0XHRcdH1cblxuXHRcdFx0c3dpdGNoIChkZWZhdWx0VHlwZSkge1xuXHRcdFx0XHRjYXNlIFwiaW50XCI6XG5cdFx0XHRcdGNhc2UgXCJpbnRlZ2VyXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KGRlZmF1bHRWYWx1ZSk7XG5cdFx0XHRcdGNhc2UgXCJmbG9hdFwiOlxuXHRcdFx0XHRcdHJldHVybiBwYXJzZUZsb2F0KGRlZmF1bHRWYWx1ZSk7XG5cdFx0XHRcdGNhc2UgXCJ1bmRlZmluZWRcIjpcblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRjYXNlIFwiYm9vbFwiOlxuXHRcdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHQoZGVmYXVsdFZhbHVlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSAhPT0gXCJcIiAmJlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgIT09IFwib2ZmXCIgJiZcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlICE9PSBcImZhbHNlXCIgJiZcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlICE9PSBcImZhbHNlXCIpIHx8XG5cdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgPT09IFwib25cIiB8fFxuXHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlID09PSBcInRydWVcIiB8fFxuXHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlID09PSBcInRydWVcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdGNhc2UgXCJzdHJpbmdcIjpcblx0XHRcdFx0XHRyZXR1cm4gYCR7ZGVmYXVsdFZhbHVlfWA7XG5cdFx0XHRcdGNhc2UgXCJvYmplY3RcIjpcblx0XHRcdFx0XHRyZXR1cm4gSlNPTi5wYXJzZShhdG9iKGRlZmF1bHRWYWx1ZSkpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIG5vdCBzdXBwb3J0ZWRcIik7XG5cblx0XHRjYXNlIFwibWFwXCI6XG5cdFx0XHRtYXAgPSBuZXcgTWFwKCk7XG5cdFx0XHR3aGlsZSAoYXJncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGtleVZhbHVlID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0XHRpZiAoa2V5VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcga2V5IHBhcmFtZXRlclwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGtleVZhbHVlID0ga2V5VmFsdWUuc3BsaXQoXCI9XCIpO1xuXHRcdFx0XHRtYXAuc2V0KGtleVZhbHVlWzBdLCBrZXlWYWx1ZVsxXSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXAuZ2V0KHZhbHVlKTtcblxuXHRcdGNhc2UgXCJlcXVhbHNcIjpcblx0XHRcdGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHZhbHVlIHBhcmFtZXRlclwiKTtcblx0XHRcdH1cblxuXHRcdFx0dmFsaWRhdGVQcmltaXRpdmUodmFsdWUpO1xuXG5cdFx0XHRjb25zdCBlcXVhbHNWYWx1ZSA9IGFyZ3Muc2hpZnQoKTtcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBUaGUgaGlzdG9yeSBvZiBcdTIwMUN0eXBlb2YgbnVsbFx1MjAxRFxuXHRcdFx0ICogaHR0cHM6Ly8yYWxpdHkuY29tLzIwMTMvMTAvdHlwZW9mLW51bGwuaHRtbFxuXHRcdFx0ICogSW4gSmF2YVNjcmlwdCwgdHlwZW9mIG51bGwgaXMgJ29iamVjdCcsIHdoaWNoIGluY29ycmVjdGx5IHN1Z2dlc3RzXG5cdFx0XHQgKiB0aGF0IG51bGwgaXMgYW4gb2JqZWN0LlxuXHRcdFx0ICovXG5cdFx0XHRpZiAodmFsdWUgPT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIGVxdWFsc1ZhbHVlID09PSBcIm51bGxcIjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgdHlwZU9mVmFsdWUgPSB0eXBlb2YgdmFsdWU7XG5cblx0XHRcdHN3aXRjaCAodHlwZU9mVmFsdWUpIHtcblx0XHRcdFx0Y2FzZSBcInN0cmluZ1wiOlxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gZXF1YWxzVmFsdWU7XG5cdFx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHBhcnNlRmxvYXQoZXF1YWxzVmFsdWUpO1xuXHRcdFx0XHRjYXNlIFwiYm9vbGVhblwiOlxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gKGVxdWFsc1ZhbHVlID09PSBcInRydWVcIiB8fCBlcXVhbHNWYWx1ZSA9PT0gXCJvblwiKTtcblx0XHRcdFx0Y2FzZSBcInVuZGVmaW5lZFwiOlxuXHRcdFx0XHRcdHJldHVybiBlcXVhbHNWYWx1ZSA9PT0gXCJ1bmRlZmluZWRcIjtcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIG5vdCBzdXBwb3J0ZWRcIik7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwibW9uZXlcIjpcblx0XHRjYXNlIFwiY3VycmVuY3lcIjpcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBsb2NhbGUgb3IgbWlzc2luZyBmb3JtYXQgKCR7ZS5tZXNzYWdlfSlgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVmVyd2VuZGVuIHZvbiBSZWdFeHAsIHVtIFdcdTAwRTRocnVuZyB1bmQgQmV0cmFnIHp1IGV4dHJhaGllcmVuXG5cdFx0XHRjb25zdCBtYXRjaCA9IHZhbHVlLm1hdGNoKC9eKFtBLVpdezN9KVtcXHMtXSooXFxkKyhcXC5cXGQrKT8pJC8pO1xuXHRcdFx0aWYgKCFtYXRjaCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGN1cnJlbmN5IGZvcm1hdFwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY3VycmVuY3kgPSBtYXRjaFsxXTtcblx0XHRcdGNvbnN0IGFtb3VudCA9IG1hdGNoWzJdO1xuXG5cdFx0XHRjb25zdCBtYXhpbXVtRnJhY3Rpb25EaWdpdHMgPSBhcmdzPy5bMF0gfHwgMjtcblx0XHRcdGNvbnN0IHJvdW5kaW5nSW5jcmVtZW50ID0gYXJncz8uWzFdIHx8IDU7XG5cblx0XHRcdGNvbnN0IG5mID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxvY2FsZS50b1N0cmluZygpLCB7XG5cdFx0XHRcdHN0eWxlOiBcImN1cnJlbmN5XCIsXG5cdFx0XHRcdGN1cnJlbmN5OiBjdXJyZW5jeSxcblx0XHRcdFx0bWF4aW11bUZyYWN0aW9uRGlnaXRzOiBtYXhpbXVtRnJhY3Rpb25EaWdpdHMsXG5cdFx0XHRcdHJvdW5kaW5nSW5jcmVtZW50OiByb3VuZGluZ0luY3JlbWVudCxcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gbmYuZm9ybWF0KGFtb3VudCk7XG5cblx0XHRjYXNlIFwidGltZXN0YW1wXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0dGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG5cdFx0XHRpZiAoaXNOYU4odGltZXN0YW1wKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGltZXN0YW1wO1xuXG5cdFx0Y2FzZSBcInRpbWVcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdFx0XHRyZXR1cm4gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcobG9jYWxlLnRvU3RyaW5nKCksIHtcblx0XHRcdFx0XHRob3VyMTI6IGZhbHNlLFxuXHRcdFx0XHR9KTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBsb2NhbGUgb3IgbWlzc2luZyBmb3JtYXQgKCR7ZS5tZXNzYWdlfSlgKTtcblx0XHRcdH1cblxuXHRcdGNhc2UgXCJkYXRldGltZWZvcm1hdFwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBvcHRpb25zID0ge1xuXHRcdFx0XHRkYXRlU3R5bGU6IFwibWVkaXVtXCIsXG5cdFx0XHRcdHRpbWVTdHlsZTogXCJtZWRpdW1cIixcblx0XHRcdFx0aG91cjEyOiBmYWxzZSxcblx0XHRcdH07XG5cblx0XHRcdGlmIChhcmdzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b3B0aW9ucy5kYXRlU3R5bGUgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChhcmdzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0b3B0aW9ucy50aW1lU3R5bGUgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKS50b1N0cmluZygpO1xuXHRcdFx0XHRyZXR1cm4gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCBvcHRpb25zKS5mb3JtYXQoZGF0ZSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbG9jYWxlIG9yIG1pc3NpbmcgZm9ybWF0ICgke2UubWVzc2FnZX0pYCk7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwiZGF0ZXRpbWVcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdFx0XHRyZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUudG9TdHJpbmcoKSwge1xuXHRcdFx0XHRcdGhvdXIxMjogZmFsc2UsXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGxvY2FsZSBvciBtaXNzaW5nIGZvcm1hdCAoJHtlLm1lc3NhZ2V9KWApO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBcImRhdGVcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdFx0XHRyZXR1cm4gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcobG9jYWxlLnRvU3RyaW5nKCksIHtcblx0XHRcdFx0XHR5ZWFyOiBcIm51bWVyaWNcIixcblx0XHRcdFx0XHRtb250aDogXCIyLWRpZ2l0XCIsXG5cdFx0XHRcdFx0ZGF5OiBcIjItZGlnaXRcIixcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbG9jYWxlIG9yIG1pc3NpbmcgZm9ybWF0ICgke2UubWVzc2FnZX0pYCk7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwidGltZS1hZ29cIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bG9jYWxlID0gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHRcdFx0XHRyZXR1cm4gZm9ybWF0VGltZUFnbyhkYXRlLCBsb2NhbGUudG9TdHJpbmcoKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbG9jYWxlIG9yIG1pc3NpbmcgZm9ybWF0ICgke2UubWVzc2FnZX0pYCk7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwieWVhclwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xuXG5cdFx0Y2FzZSBcIm1vbnRoXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldE1vbnRoKCkgKyAxO1xuXG5cdFx0Y2FzZSBcImRheVwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXREYXRlKCk7XG5cblx0XHRjYXNlIFwid2Vla2RheVwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXREYXkoKTtcblxuXHRcdGNhc2UgXCJob3VyXCI6XG5cdFx0Y2FzZSBcImhvdXJzXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldEhvdXJzKCk7XG5cblx0XHRjYXNlIFwibWludXRlXCI6XG5cdFx0Y2FzZSBcIm1pbnV0ZXNcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGUuZ2V0TWludXRlcygpO1xuXG5cdFx0Y2FzZSBcInNlY29uZFwiOlxuXHRcdGNhc2UgXCJzZWNvbmRzXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldFNlY29uZHMoKTtcblxuXHRcdGNhc2UgXCJpMThuXCI6XG5cdFx0Y2FzZSBcInRyYW5zbGF0aW9uXCI6XG5cdFx0XHR0cmFuc2xhdGlvbnMgPSBnZXREb2N1bWVudFRyYW5zbGF0aW9ucygpO1xuXHRcdFx0aWYgKCEodHJhbnNsYXRpb25zIGluc3RhbmNlb2YgVHJhbnNsYXRpb25zKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHRyYW5zbGF0aW9uc1wiKTtcblx0XHRcdH1cblxuXHRcdFx0a2V5ID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRrZXkgPSB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmYXVsdFZhbHVlID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblxuXHRcdFx0ZGVmYXVsdFZhbHVlID0gY29udmVydFNwZWNpYWxTdHJpbmdzKGRlZmF1bHRWYWx1ZSwgdmFsdWUpO1xuXG5cdFx0XHRyZXR1cm4gdHJhbnNsYXRpb25zLmdldFRleHQoa2V5LCBkZWZhdWx0VmFsdWUpO1xuXG5cdFx0Y2FzZSBcInNldC10b2dnbGVcIjpcblx0XHRjYXNlIFwic2V0LXNldFwiOlxuXHRcdGNhc2UgXCJzZXQtcmVtb3ZlXCI6XG5cdFx0XHRjb25zdCBtb2RpZmllciA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdGxldCBkZWxpbWl0ZXIgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRpZiAoZGVsaW1pdGVyID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0ZGVsaW1pdGVyID0gXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHNldCA9IG5ldyBTZXQodmFsdWUuc3BsaXQoZGVsaW1pdGVyKSk7XG5cdFx0XHRjb25zdCB0b2dnbGUgPSBuZXcgU2V0KG1vZGlmaWVyLnNwbGl0KGRlbGltaXRlcikpO1xuXHRcdFx0aWYgKHRoaXMuY29tbWFuZCA9PT0gXCJzZXQtdG9nZ2xlXCIpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB0IG9mIHRvZ2dsZSkge1xuXHRcdFx0XHRcdGlmIChzZXQuaGFzKHQpKSB7XG5cdFx0XHRcdFx0XHRzZXQuZGVsZXRlKHQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZXQuYWRkKHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmNvbW1hbmQgPT09IFwic2V0LXNldFwiKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdCBvZiB0b2dnbGUpIHtcblx0XHRcdFx0XHRzZXQuYWRkKHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuY29tbWFuZCA9PT0gXCJzZXQtcmVtb3ZlXCIpIHtcblx0XHRcdFx0Zm9yIChjb25zdCB0IG9mIHRvZ2dsZSkge1xuXHRcdFx0XHRcdHNldC5kZWxldGUodCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBBcnJheS5mcm9tKHNldCkuam9pbihkZWxpbWl0ZXIpO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5rbm93biBjb21tYW5kICR7dGhpcy5jb21tYW5kfWApO1xuXHR9XG59XG5cbi8qKlxuICogY29udmVydHMgc3BlY2lhbCBzdHJpbmdzIHRvIHRoZWlyIHZhbHVlc1xuICogQHByaXZhdGVcbiAqIEBwYXJhbSBpbnB1dFxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuIHt1bmRlZmluZWR8KnxudWxsfHN0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29udmVydFNwZWNpYWxTdHJpbmdzKGlucHV0LCB2YWx1ZSkge1xuXHRzd2l0Y2ggKGlucHV0KSB7XG5cdFx0Y2FzZSBcInZhbHVlXCI6XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0Y2FzZSBcIlxcXFx2YWx1ZVwiOlxuXHRcdFx0cmV0dXJuIFwidmFsdWVcIjtcblx0XHRjYXNlIFwiXFxcXHVuZGVmaW5lZFwiOlxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRjYXNlIFwiXFxcXG51bGxcIjpcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cbn1cblxuLyoqXG4gKiBjaGVja3MgaWYgYSB2YWx1ZSBpcyB0cnVlIG9yIG5vdFxuICogQHBhcmFtIHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBldmFsdWF0ZUNvbmRpdGlvbih2YWx1ZSkge1xuXHRjb25zdCBsb3dlclZhbHVlID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6IHZhbHVlO1xuXG5cdHJldHVybiAoXG5cdFx0KHZhbHVlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdHZhbHVlICE9PSBudWxsICYmXG5cdFx0XHR2YWx1ZSAhPT0gXCJcIiAmJlxuXHRcdFx0bG93ZXJWYWx1ZSAhPT0gXCJvZmZcIiAmJlxuXHRcdFx0bG93ZXJWYWx1ZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0XHR2YWx1ZSAhPT0gZmFsc2UpIHx8XG5cdFx0bG93ZXJWYWx1ZSA9PT0gXCJvblwiIHx8XG5cdFx0bG93ZXJWYWx1ZSA9PT0gXCJ0cnVlXCIgfHxcblx0XHR2YWx1ZSA9PT0gdHJ1ZVxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgVHJhbnNmb3JtZXIgfSBmcm9tIFwiLi90cmFuc2Zvcm1lci5tanNcIjtcblxuZXhwb3J0IHsgUGlwZSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBERUxJTUlURVIgPSBcInxcIjtcblxuLyoqXG4gKiBUaGUgcGlwZSBjbGFzcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBjb21iaW5lIHNldmVyYWwgcHJvY2Vzc2luZyBzdGVwcy5cbiAqXG4gKiBBIHBpcGUgY29uc2lzdHMgb2YgY29tbWFuZHMgd2hvc2UgaW5wdXQgYW5kIG91dHB1dCBhcmUgY29ubmVjdGVkIHdpdGggdGhlIHBpcGUgc3ltYm9sIGB8YC5cbiAqXG4gKiBXaXRoIHRoZSBQaXBlLCBwcm9jZXNzaW5nIHN0ZXBzIGNhbiBiZSBjb21iaW5lZC4gSGVyZSwgdGhlIHZhbHVlIG9mIGFuIG9iamVjdCBpcyBhY2Nlc3NlZCB2aWEgdGhlIHBhdGhmaW5kZXIgKHBhdGggY29tbWFuZCkuXG4gKiB0aGUgd29yZCBpcyB0aGVuIGNvbnZlcnRlZCB0byB1cHBlcmNhc2UgbGV0dGVycyBhbmQgYSBwcmVmaXggSGVsbG8gaXMgYWRkZWQuIHRoZSB0d28gYmFja3NsYXNoIHNhZmUgdGhlIHNwYWNlIGNoYXIuXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy9waXBlL2V4YW1wbGUtMS9cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBwaXBlIGNsYXNzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGNvbWJpbmUgc2V2ZXJhbCBwcm9jZXNzaW5nIHN0ZXBzLlxuICovXG5jbGFzcyBQaXBlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGlwZSBhIHBpcGUgY29uc2lzdHMgb2YgY29tbWFuZHMgd2hvc2UgaW5wdXQgYW5kIG91dHB1dCBhcmUgY29ubmVjdGVkIHdpdGggdGhlIHBpcGUgc3ltYm9sIGB8YC5cblx0ICogQHRocm93cyB7VHlwZUVycm9yfVxuXHQgKi9cblx0Y29uc3RydWN0b3IocGlwZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dmFsaWRhdGVTdHJpbmcocGlwZSk7XG5cblx0XHR0aGlzLnBpcGUgPSBwaXBlLnNwbGl0KERFTElNSVRFUikubWFwKCh2KSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3IFRyYW5zZm9ybWVyKHYpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0XG5cdCAqIEByZXR1cm4ge1RyYW5zZm9ybWVyfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqL1xuXHRzZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjaywgY29udGV4dCkge1xuXHRcdGZvciAoY29uc3QgWywgdF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5waXBlKSkge1xuXHRcdFx0dC5zZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjaywgY29udGV4dCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcnVuIGEgcGlwZVxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRydW4odmFsdWUpIHtcblx0XHRyZXR1cm4gdGhpcy5waXBlLnJlZHVjZSgoYWNjdW11bGF0b3IsIHRyYW5zZm9ybWVyLCBjdXJyZW50SW5kZXgsIGFycmF5KSA9PiB7XG5cdFx0XHRyZXR1cm4gdHJhbnNmb3JtZXIucnVuKGFjY3VtdWxhdG9yKTtcblx0XHR9LCB2YWx1ZSk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQaXBlIH0gZnJvbSBcIi4uL2RhdGEvcGlwZS5tanNcIjtcblxuaW1wb3J0IHsgQmFzZVdpdGhPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlQXJyYXksIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBGb3JtYXR0ZXIgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWxPYmplY3RTeW1ib2wgPSBTeW1ib2woXCJpbnRlcm5hbE9iamVjdFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgd2F0Y2hkb2dTeW1ib2wgPSBTeW1ib2woXCJ3YXRjaGRvZ1wiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbWFya2VyT3BlbkluZGV4U3ltYm9sID0gU3ltYm9sKFwibWFya2VyT3BlbkluZGV4XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBtYXJrZXJDbG9zZUluZGV4U3ltYm9sID0gU3ltYm9sKFwibWFya2VyY2xvc2VJbmRleFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgd29ya2luZ0RhdGFTeW1ib2wgPSBTeW1ib2woXCJ3b3JraW5nRGF0YVwiKTtcblxuLyoqXG4gKiBNZXNzYWdlcyBjYW4gYmUgZm9ybWF0dGVkIHdpdGggdGhlIGZvcm1hdHRlci4gVG8gZG8gdGhpcywgYW4gb2JqZWN0IHdpdGggdGhlIHZhbHVlcyBtdXN0IGJlIHBhc3NlZCB0byB0aGUgZm9ybWF0dGVyLiBUaGUgbWVzc2FnZSBjYW4gdGhlbiBjb250YWluIHBsYWNlaG9sZGVycy5cbiAqXG4gKiBMb29rIGF0IHRoZSBleGFtcGxlIGJlbG93LiBUaGUgcGxhY2Vob2xkZXJzIHVzZSB0aGUgbG9naWMgb2YgUGlwZS5cbiAqXG4gKiAjIyBNYXJrZXIgaW4gbWFya2VyXG4gKlxuICogTWFya2VycyBjYW4gYmUgbmVzdGVkLiBIZXJlLCB0aGUgaW5uZXIgbWFya2VyIGlzIHJlc29sdmVkIGZpcnN0IGAke3N1YmtleX0gXHUyMUE2IDEgPSAke215a2V5Mn1gIGFuZCB0aGVuIHRoZSBvdXRlciBtYXJrZXIgYCR7bXlrZXkyfWAuXG4gKlxuICogYGBgXG4gKiBjb25zdCB0ZXh0ID0gJyR7bXlrZXkke3N1YmtleX19JztcbiAqIGxldCBvYmogPSB7XG4gKiAgbXlrZXkyOiBcIjFcIixcbiAqICBzdWJrZXk6IFwiMlwiXG4gKiB9O1xuICpcbiAqIG5ldyBGb3JtYXR0ZXIob2JqKS5mb3JtYXQodGV4dCk7XG4gKiAvLyBcdTIxQTYgMVxuICogYGBgXG4gKlxuICogIyMgQ2FsbGJhY2tzXG4gKlxuICogVGhlIHZhbHVlcyBpbiBhIGZvcm1hdHRlciBjYW4gYmUgYWRqdXN0ZWQgdmlhIHRoZSBjb21tYW5kcyBvZiB0aGUgYFRyYW5zZm9ybWVyYCBvciB0aGVgUGlwZWAuXG4gKiBUaGVyZSBpcyBhbHNvIHRoZSBwb3NzaWJpbGl0eSB0byB1c2UgY2FsbGJhY2tzLlxuICpcbiAqIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoe3g6ICcxJ30sIHtcbiAqICAgICAgICAgICAgICAgIGNhbGxiYWNrczoge1xuICogICAgICAgICAgICAgICAgICAgIHF1b3RlOiAodmFsdWUpID0+IHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcIicgKyB2YWx1ZSArICdcIidcbiAqICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgIH0pO1xuICpcbiAqIGZvcm1hdHRlci5mb3JtYXQoJyR7eCB8IGNhbGw6cXVvdGV9JykpXG4gKiAvLyBcdTIxQTYgXCIxXCJcbiAqXG4gKiAjIyBNYXJrZXIgd2l0aCBwYXJhbWV0ZXJcbiAqXG4gKiBBIHN0cmluZyBjYW4gYWxzbyBicmluZyBpdHMgb3duIHZhbHVlcy4gVGhlc2UgbXVzdCB0aGVuIGJlIHNlcGFyYXRlZCBmcm9tIHRoZSBrZXkgYnkgYSBzZXBhcmF0b3IgYDo6YC5cbiAqIFRoZSB2YWx1ZXMgdGhlbXNlbHZlcyBtdXN0IGJlIHNwZWNpZmllZCBpbiBrZXkvdmFsdWUgcGFpcnMuIFRoZSBrZXkgbXVzdCBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUgdmFsdWUgYnkgYSBzZXBhcmF0b3IgYD1gLlxuICpcbiAqIFdoZW4gdXNpbmcgYSBwaXBlLCB5b3UgbXVzdCBwYXkgYXR0ZW50aW9uIHRvIHRoZSBzZXBhcmF0b3JzLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IHtGb3JtYXR0ZXJ9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3RleHQvZm9ybWF0dGVyLm1qcyc7XG4gKlxuICogbmV3IEZvcm1hdHRlcih7XG4gKiAgICAgICBhOiB7XG4gKiAgICAgICAgICAgYjoge1xuICogICAgICAgICAgICAgICBjOiBcIkhlbGxvXCJcbiAqICAgICAgICAgICB9LFxuICogICAgICAgICAgIGQ6IFwid29ybGRcIixcbiAqICAgICAgIH1cbiAqICAgfSkuZm9ybWF0KFwiJHthLmIuY30gJHthLmQgfCB1Y2ZpcnN0fSFcIik7IC8vIHdpdGggcGlwZVxuICpcbiAqIC8vIFx1MjFBNiBIZWxsbyBXb3JsZCFcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEyLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIEZvcm1hdHRlciBleHRlbmRzIEJhc2VXaXRoT3B0aW9ucyB7XG5cdC8qKlxuXHQgKiBEZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG1hcmtlcnMgYXJlIGAke2AgYW5kIGB9YFxuXHQgKlxuXHQgKiBAcGFyYW0gb2JqZWN0XG5cdCAqIEBwYXJhbSBvcHRpb25zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvYmplY3QsIG9wdGlvbnMpIHtcblx0XHRzdXBlcihvcHRpb25zKTtcblx0XHR0aGlzW2ludGVybmFsT2JqZWN0U3ltYm9sXSA9IG9iamVjdCB8fCB7fTtcblx0XHR0aGlzW21hcmtlck9wZW5JbmRleFN5bWJvbF0gPSAwO1xuXHRcdHRoaXNbbWFya2VyQ2xvc2VJbmRleFN5bWJvbF0gPSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBtYXJrZXJcblx0ICogQHByb3BlcnR5IHthcnJheX0gbWFya2VyLm9wZW49W1wiJHtcIl1cblx0ICogQHByb3BlcnR5IHthcnJheX0gbWFya2VyLmNsb3NlPVtcIiR7XCJdXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBwYXJhbWV0ZXJcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHBhcmFtZXRlci5kZWxpbWl0ZXI9XCI6OlwiXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXJhbWV0ZXIuYXNzaWdubWVudD1cIj1cIlxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gY2FsbGJhY2tzPXt9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdG1hcmtlcjoge1xuXHRcdFx0XHRvcGVuOiBbXCIke1wiXSxcblx0XHRcdFx0Y2xvc2U6IFtcIn1cIl0sXG5cdFx0XHR9LFxuXHRcdFx0cGFyYW1ldGVyOiB7XG5cdFx0XHRcdGRlbGltaXRlcjogXCI6OlwiLFxuXHRcdFx0XHRhc3NpZ25tZW50OiBcIj1cIixcblx0XHRcdH0sXG5cdFx0XHRjYWxsYmFja3M6IHt9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBuZXcgUGFyYW1ldGVyIENoYXJhY3RlclxuXHQgKlxuXHQgKiBEZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGNoYXJzIGFyZSBgOjpgIGFuZCBgPWBcblx0ICpcblx0ICogYGBgXG5cdCAqIGZvcm1hdHRlci5zZXRQYXJhbWV0ZXJDaGFycygnIycpO1xuXHQgKiBmb3JtYXR0ZXIuc2V0UGFyYW1ldGVyQ2hhcnMoJ1snLCddJyk7XG5cdCAqIGZvcm1hdHRlci5zZXRQYXJhbWV0ZXJDaGFycygnaTE4bnsnLCd9Jyk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZGVsaW1pdGVyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBhc3NpZ25tZW50XG5cdCAqIEByZXR1cm4ge0Zvcm1hdHRlcn1cblx0ICogQHNpbmNlIDEuMjQuMFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0c2V0UGFyYW1ldGVyQ2hhcnMoZGVsaW1pdGVyLCBhc3NpZ25tZW50KSB7XG5cdFx0aWYgKGRlbGltaXRlciAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcInBhcmFtZXRlclwiXVtcImRlbGltaXRlclwiXSA9XG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKGRlbGltaXRlcik7XG5cdFx0fVxuXG5cdFx0aWYgKGFzc2lnbm1lbnQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJwYXJhbWV0ZXJcIl1bXCJhc3NpZ25tZW50XCJdID1cblx0XHRcdFx0dmFsaWRhdGVTdHJpbmcoYXNzaWdubWVudCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IG5ldyBNYXJrZXJcblx0ICpcblx0ICogRGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBtYXJrZXJzIGFyZSBgJHtgIGFuZCBgfWBcblx0ICpcblx0ICogYGBgXG5cdCAqIGZvcm1hdHRlci5zZXRNYXJrZXIoJyMnKTsgLy8gb3BlbiBhbmQgY2xvc2UgYXJlIGJvdGggI1xuXHQgKiBmb3JtYXR0ZXIuc2V0TWFya2VyKCdbJywnXScpO1xuXHQgKiBmb3JtYXR0ZXIuc2V0TWFya2VyKCdpMThueycsJ30nKTtcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfSBvcGVuXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfHVuZGVmaW5lZH0gY2xvc2Vcblx0ICogQHJldHVybiB7Rm9ybWF0dGVyfVxuXHQgKiBAc2luY2UgMS4xMi4wXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqL1xuXHRzZXRNYXJrZXIob3BlbiwgY2xvc2UpIHtcblx0XHRpZiAoY2xvc2UgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y2xvc2UgPSBvcGVuO1xuXHRcdH1cblxuXHRcdGlmIChpc1N0cmluZyhvcGVuKSkgb3BlbiA9IFtvcGVuXTtcblx0XHRpZiAoaXNTdHJpbmcoY2xvc2UpKSBjbG9zZSA9IFtjbG9zZV07XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcIm1hcmtlclwiXVtcIm9wZW5cIl0gPSB2YWxpZGF0ZUFycmF5KG9wZW4pO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wiY2xvc2VcIl0gPSB2YWxpZGF0ZUFycmF5KGNsb3NlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0b28gZGVlcCBuZXN0aW5nXG5cdCAqL1xuXHRmb3JtYXQodGV4dCkge1xuXHRcdHRoaXNbd2F0Y2hkb2dTeW1ib2xdID0gMDtcblx0XHR0aGlzW21hcmtlck9wZW5JbmRleFN5bWJvbF0gPSAwO1xuXHRcdHRoaXNbbWFya2VyQ2xvc2VJbmRleFN5bWJvbF0gPSAwO1xuXHRcdHRoaXNbd29ya2luZ0RhdGFTeW1ib2xdID0ge307XG5cdFx0cmV0dXJuIGZvcm1hdC5jYWxsKHRoaXMsIHRleHQpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZm9ybWF0KHRleHQpIHtcblx0dGhpc1t3YXRjaGRvZ1N5bWJvbF0rKztcblx0aWYgKHRoaXNbd2F0Y2hkb2dTeW1ib2xdID4gMjApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0b28gZGVlcCBuZXN0aW5nXCIpO1xuXHR9XG5cblx0Y29uc3Qgb3Blbk1hcmtlciA9XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJvcGVuXCJdPy5bdGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdXTtcblx0Y29uc3QgY2xvc2VNYXJrZXIgPVxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wiY2xvc2VcIl0/Llt0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdXTtcblxuXHQvLyBjb250YWlucyBubyBwbGFjZWhvbGRlcnNcblx0aWYgKHRleHQuaW5kZXhPZihvcGVuTWFya2VyKSA9PT0gLTEgfHwgdGV4dC5pbmRleE9mKGNsb3NlTWFya2VyKSA9PT0gLTEpIHtcblx0XHRyZXR1cm4gdGV4dDtcblx0fVxuXG5cdGxldCByZXN1bHQgPSB0b2tlbml6ZS5jYWxsKFxuXHRcdHRoaXMsXG5cdFx0dmFsaWRhdGVTdHJpbmcodGV4dCksXG5cdFx0b3Blbk1hcmtlcixcblx0XHRjbG9zZU1hcmtlcixcblx0KTtcblxuXHRpZiAoXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJvcGVuXCJdPy5bdGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdICsgMV1cblx0KSB7XG5cdFx0dGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdKys7XG5cdH1cblxuXHRpZiAoXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJjbG9zZVwiXT8uW3RoaXNbbWFya2VyQ2xvc2VJbmRleFN5bWJvbF0gKyAxXVxuXHQpIHtcblx0XHR0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdKys7XG5cdH1cblxuXHRyZXN1bHQgPSBmb3JtYXQuY2FsbCh0aGlzLCByZXN1bHQpO1xuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTIuMFxuICogQHBhcmFtIHRleHRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gdG9rZW5pemUodGV4dCwgb3Blbk1hcmtlciwgY2xvc2VNYXJrZXIpIHtcblx0Y29uc3QgZm9ybWF0dGVkID0gW107XG5cblx0Y29uc3QgcGFyYW1ldGVyQXNzaWdubWVudCA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wicGFyYW1ldGVyXCJdW1wiYXNzaWdubWVudFwiXTtcblx0Y29uc3QgcGFyYW1ldGVyRGVsaW1pdGVyID0gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJwYXJhbWV0ZXJcIl1bXCJkZWxpbWl0ZXJcIl07XG5cdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiY2FsbGJhY2tzXCJdO1xuXG5cdHdoaWxlICh0cnVlKSB7XG5cdFx0Y29uc3Qgc3RhcnRJbmRleCA9IHRleHQuaW5kZXhPZihvcGVuTWFya2VyKTtcblx0XHQvLyBubyBtYXJrZXJcblx0XHRpZiAoc3RhcnRJbmRleCA9PT0gLTEpIHtcblx0XHRcdGZvcm1hdHRlZC5wdXNoKHRleHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fSBlbHNlIGlmIChzdGFydEluZGV4ID4gMCkge1xuXHRcdFx0Zm9ybWF0dGVkLnB1c2godGV4dC5zdWJzdHJpbmcoMCwgc3RhcnRJbmRleCkpO1xuXHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKHN0YXJ0SW5kZXgpO1xuXHRcdH1cblxuXHRcdGxldCBlbmRJbmRleCA9IHRleHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoKS5pbmRleE9mKGNsb3NlTWFya2VyKTtcblx0XHRpZiAoZW5kSW5kZXggIT09IC0xKSBlbmRJbmRleCArPSBvcGVuTWFya2VyLmxlbmd0aDtcblx0XHRsZXQgaW5zaWRlU3RhcnRJbmRleCA9IHRleHRcblx0XHRcdC5zdWJzdHJpbmcob3Blbk1hcmtlci5sZW5ndGgpXG5cdFx0XHQuaW5kZXhPZihvcGVuTWFya2VyKTtcblx0XHRpZiAoaW5zaWRlU3RhcnRJbmRleCAhPT0gLTEpIHtcblx0XHRcdGluc2lkZVN0YXJ0SW5kZXggKz0gb3Blbk1hcmtlci5sZW5ndGg7XG5cdFx0XHRpZiAoaW5zaWRlU3RhcnRJbmRleCA8IGVuZEluZGV4KSB7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IHRva2VuaXplLmNhbGwoXG5cdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHR0ZXh0LnN1YnN0cmluZyhpbnNpZGVTdGFydEluZGV4KSxcblx0XHRcdFx0XHRvcGVuTWFya2VyLFxuXHRcdFx0XHRcdGNsb3NlTWFya2VyLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgaW5zaWRlU3RhcnRJbmRleCkgKyByZXN1bHQ7XG5cdFx0XHRcdGVuZEluZGV4ID0gdGV4dC5zdWJzdHJpbmcob3Blbk1hcmtlci5sZW5ndGgpLmluZGV4T2YoY2xvc2VNYXJrZXIpO1xuXHRcdFx0XHRpZiAoZW5kSW5kZXggIT09IC0xKSBlbmRJbmRleCArPSBvcGVuTWFya2VyLmxlbmd0aDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZW5kSW5kZXggPT09IC0xKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzeW50YXggZXJyb3IgaW4gZm9ybWF0dGVyIHRlbXBsYXRlXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGtleSA9IHRleHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoLCBlbmRJbmRleCk7XG5cdFx0Y29uc3QgcGFydHMgPSBrZXkuc3BsaXQocGFyYW1ldGVyRGVsaW1pdGVyKTtcblx0XHRjb25zdCBjdXJyZW50UGlwZSA9IHBhcnRzLnNoaWZ0KCk7XG5cblx0XHR0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXSA9IGV4dGVuZChcblx0XHRcdHt9LFxuXHRcdFx0dGhpc1tpbnRlcm5hbE9iamVjdFN5bWJvbF0sXG5cdFx0XHR0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXSxcblx0XHQpO1xuXG5cdFx0Zm9yIChjb25zdCBrdiBvZiBwYXJ0cykge1xuXHRcdFx0Y29uc3QgW2ssIHZdID0ga3Yuc3BsaXQocGFyYW1ldGVyQXNzaWdubWVudCk7XG5cdFx0XHR0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXVtrXSA9IHY7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdDEgPSBrZXkuc3BsaXQoXCJ8XCIpLnNoaWZ0KCkudHJpbSgpOyAvLyBwaXBlIHN5bWJvbFxuXHRcdGNvbnN0IHQyID0gdDEuc3BsaXQoXCI6OlwiKS5zaGlmdCgpLnRyaW0oKTsgLy8ga2V5IHZhbHVlIGRlbGltaXRlclxuXHRcdGNvbnN0IHQzID0gdDIuc3BsaXQoXCIuXCIpLnNoaWZ0KCkudHJpbSgpOyAvLyBwYXRoIGRlbGltaXRlclxuXHRcdGNvbnN0IHByZWZpeCA9IHRoaXNbd29ya2luZ0RhdGFTeW1ib2xdPy5bdDNdID8gXCJwYXRoOlwiIDogXCJzdGF0aWM6XCI7XG5cblx0XHRsZXQgY29tbWFuZCA9IFwiXCI7XG5cdFx0aWYgKFxuXHRcdFx0cHJlZml4ICYmXG5cdFx0XHRrZXkuaW5kZXhPZihwcmVmaXgpICE9PSAwICYmXG5cdFx0XHRrZXkuaW5kZXhPZihcInBhdGg6XCIpICE9PSAwICYmXG5cdFx0XHRrZXkuaW5kZXhPZihcInN0YXRpYzpcIikgIT09IDBcblx0XHQpIHtcblx0XHRcdGNvbW1hbmQgPSBwcmVmaXg7XG5cdFx0fVxuXG5cdFx0Y29tbWFuZCArPSBjdXJyZW50UGlwZTtcblxuXHRcdGNvbnN0IHBpcGUgPSBuZXcgUGlwZShjb21tYW5kKTtcblxuXHRcdGlmIChpc09iamVjdChjYWxsYmFja3MpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IFtuYW1lLCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoY2FsbGJhY2tzKSkge1xuXHRcdFx0XHRwaXBlLnNldENhbGxiYWNrKG5hbWUsIGNhbGxiYWNrKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3JtYXR0ZWQucHVzaCh2YWxpZGF0ZVN0cmluZyhwaXBlLnJ1bih0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXSkpKTtcblxuXHRcdHRleHQgPSB0ZXh0LnN1YnN0cmluZyhlbmRJbmRleCArIGNsb3NlTWFya2VyLmxlbmd0aCk7XG5cdH1cblxuXHRyZXR1cm4gZm9ybWF0dGVkLmpvaW4oXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVBcnJheSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IE1lZGlhVHlwZSwgcGFyc2VNZWRpYVR5cGUgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWwgPSBTeW1ib2woXCJpbnRlcm5hbFwiKTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQYXJhbWV0ZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBrZXlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICovXG5cbi8qKlxuICogWW91IGNhbiBjcmVhdGUgYW4gb2JqZWN0IHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYG5ldyBNb25zdGVyLlR5cGVzLk1lZGlhVHlwZSgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgTWVkaWFUeXBlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gc3VidHlwZVxuXHQgKiBAcGFyYW0ge01vbnN0ZXIuVHlwZXMuUGFyYW1ldGVyW119IHBhcmFtZXRlclxuXHQgKi9cblx0Y29uc3RydWN0b3IodHlwZSwgc3VidHlwZSwgcGFyYW1ldGVyKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxdID0ge1xuXHRcdFx0dHlwZTogdmFsaWRhdGVTdHJpbmcodHlwZSkudG9Mb3dlckNhc2UoKSxcblx0XHRcdHN1YnR5cGU6IHZhbGlkYXRlU3RyaW5nKHN1YnR5cGUpLnRvTG93ZXJDYXNlKCksXG5cdFx0XHRwYXJhbWV0ZXI6IFtdLFxuXHRcdH07XG5cblx0XHRpZiAocGFyYW1ldGVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXNbaW50ZXJuYWxdW1wicGFyYW1ldGVyXCJdID0gdmFsaWRhdGVBcnJheShwYXJhbWV0ZXIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvbWVkaWEtdHlwZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTdHJpbmd9XG5cdCAqL1xuXHRnZXQgdHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0udHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTdHJpbmd9XG5cdCAqL1xuXHRnZXQgc3VidHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0uc3VidHlwZTtcblx0fVxuXG5cdC8vIC8qKlxuXHQvLyAgKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLlBhcmFtZXRlcltdfVxuXHQvLyAgKi9cblx0Ly8gZ2V0IHBhcmFtZXRlcigpIHtcblx0Ly8gXHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0ucGFyYW1ldGVyO1xuXHQvLyB9XG5cblx0LyoqXG5cdCAqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01hcH1cblx0ICovXG5cdGdldCBwYXJhbWV0ZXIoKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuXG5cdFx0dGhpc1tpbnRlcm5hbF1bXCJwYXJhbWV0ZXJcIl0uZm9yRWFjaCgocCkgPT4ge1xuXHRcdFx0bGV0IHZhbHVlID0gcC52YWx1ZTtcblxuXHRcdFx0Ly8gaW50ZXJuYWxseSBzcGVjaWFsIHZhbHVlcyBhcmUgcGFydGx5IHN0b3JlZCB3aXRoIHF1b3RlcywgdGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZW0uXG5cdFx0XHRpZiAodmFsdWUuc3RhcnRzV2l0aCgnXCInKSAmJiB2YWx1ZS5lbmRzV2l0aCgnXCInKSkge1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygxLCB2YWx1ZS5sZW5ndGggLSAxKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzdWx0LnNldChwLmtleSwgdmFsdWUpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRjb25zdCBwYXJhbWV0ZXIgPSBbXTtcblx0XHRmb3IgKGNvbnN0IGEgb2YgdGhpc1tpbnRlcm5hbF0ucGFyYW1ldGVyKSB7XG5cdFx0XHRwYXJhbWV0ZXIucHVzaChgJHthLmtleX09JHthLnZhbHVlfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBgJHt0aGlzW2ludGVybmFsXS50eXBlfS8ke3RoaXNbaW50ZXJuYWxdLnN1YnR5cGV9JHtcblx0XHRcdHBhcmFtZXRlci5sZW5ndGggPiAwID8gYDske3BhcmFtZXRlci5qb2luKFwiO1wiKX1gIDogXCJcIlxuXHRcdH1gO1xuXHR9XG59XG5cbi8qKlxuICogWW91IGNhbiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLlR5cGVzLnBhcnNlTWVkaWFUeXBlKClgLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge01vbnN0ZXJ9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL21vbnN0ZXIubWpzJztcbiAqIGNvbnNvbGUubG9nKE1vbnN0ZXIuVHlwZXMucGFyc2VNZWRpYVR5cGUoKSlcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhbHNvIGludGVncmF0ZSB0aGlzIGZ1bmN0aW9uIGluZGl2aWR1YWxseS5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtwYXJzZU1lZGlhVHlwZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvZGF0YXVybC5tanMnO1xuICogY29uc29sZS5sb2cocGFyc2VNZWRpYVR5cGUoKSlcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogU3BlY2lmaWNhdGlvbjpcbiAqXG4gKiBgYGBcbiAqIGRhdGF1cmwgICAgOj0gXCJkYXRhOlwiIFsgbWVkaWF0eXBlIF0gWyBcIjtiYXNlNjRcIiBdIFwiLFwiIGRhdGFcbiAqIG1lZGlhdHlwZSAgOj0gWyB0eXBlIFwiL1wiIHN1YnR5cGUgXSAqKCBcIjtcIiBwYXJhbWV0ZXIgKVxuICogZGF0YSAgICAgICA6PSAqdXJsY2hhclxuICogcGFyYW1ldGVyICA6PSBhdHRyaWJ1dGUgXCI9XCIgdmFsdWVcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZWRpYXR5cGVcbiAqIEByZXR1cm4ge01vbnN0ZXIuVHlwZXMuTWVkaWFUeXBlfVxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIwNDUjc2VjdGlvbi01LjFcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdGhlIG1pbWV0eXBlIGNhbiBub3QgYmUgcGFyc2VkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IGJsYW5rIHZhbHVlIGlzIG5vdCBhbGxvd2VkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IG1hbGZvcm1lZCBkYXRhIHVybFxuICovXG5mdW5jdGlvbiBwYXJzZU1lZGlhVHlwZShtZWRpYXR5cGUpIHtcblx0Y29uc3QgcmVnZXggPVxuXHRcdC8oPzx0eXBlPltBLVphLXpdK3xcXCopXFwvKD88c3VidHlwZT4oW2EtekEtWjAtOS5cXCtfXFwtXSspfFxcKnwpKD88cGFyYW1ldGVyPlxccyo7XFxzKihbYS16QS1aMC05XSspXFxzKig9XFxzKihcIj9bQS1aYS16MC05X1xcLV0rXCI/KSk/KSovZztcblx0Y29uc3QgcmVzdWx0ID0gcmVnZXguZXhlYyh2YWxpZGF0ZVN0cmluZyhtZWRpYXR5cGUpKTtcblxuXHRjb25zdCBncm91cHMgPSByZXN1bHQ/LltcImdyb3Vwc1wiXTtcblx0aWYgKGdyb3VwcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInRoZSBtaW1ldHlwZSBjYW4gbm90IGJlIHBhcnNlZFwiKTtcblx0fVxuXG5cdGNvbnN0IHR5cGUgPSBncm91cHM/LltcInR5cGVcIl07XG5cdGNvbnN0IHN1YnR5cGUgPSBncm91cHM/LltcInN1YnR5cGVcIl07XG5cdGNvbnN0IHBhcmFtZXRlciA9IGdyb3Vwcz8uW1wicGFyYW1ldGVyXCJdO1xuXG5cdGlmIChzdWJ0eXBlID09PSBcIlwiIHx8IHR5cGUgPT09IFwiXCIpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiYmxhbmsgdmFsdWUgaXMgbm90IGFsbG93ZWRcIik7XG5cdH1cblxuXHRyZXR1cm4gbmV3IE1lZGlhVHlwZSh0eXBlLCBzdWJ0eXBlLCBwYXJzZVBhcmFtZXRlcihwYXJhbWV0ZXIpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xOC4wXG4gKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1ldGVyXG4gKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLlBhcmFtZXRlcltdfHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gcGFyc2VQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG5cdGlmICghaXNTdHJpbmcocGFyYW1ldGVyKSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRwYXJhbWV0ZXIuc3BsaXQoXCI7XCIpLmZvckVhY2goKGVudHJ5KSA9PiB7XG5cdFx0ZW50cnkgPSBlbnRyeS50cmltKCk7XG5cdFx0aWYgKGVudHJ5ID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qga3YgPSBlbnRyeS5zcGxpdChcIj1cIik7XG5cblx0XHRjb25zdCBrZXkgPSB2YWxpZGF0ZVN0cmluZyhrdj8uWzBdKS50cmltKCk7XG5cdFx0Y29uc3QgdmFsdWUgPSB2YWxpZGF0ZVN0cmluZyhrdj8uWzFdKS50cmltKCk7XG5cblx0XHQvLyBpZiB2YWx1ZXMgYXJlIHF1b3RlZCwgdGhleSByZW1haW4gc28gaW50ZXJuYWxseVxuXHRcdHJlc3VsdC5wdXNoKHtcblx0XHRcdGtleToga2V5LFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdH0pO1xuXHR9KTtcblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi9pcy5tanNcIjtcbmltcG9ydCB7IE1lZGlhVHlwZSwgcGFyc2VNZWRpYVR5cGUgfSBmcm9tIFwiLi9tZWRpYXR5cGUubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUJvb2xlYW4sXG5cdHZhbGlkYXRlSW5zdGFuY2UsXG5cdHZhbGlkYXRlU3RyaW5nLFxufSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IERhdGFVcmwsIHBhcnNlRGF0YVVSTCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbCA9IFN5bWJvbChcImludGVybmFsXCIpO1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIGFuIG9iamVjdCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgRGF0YVVybCgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9CYXNpY3Nfb2ZfSFRUUC9EYXRhX1VSSXNcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMyMzk3XG4gKi9cbmNsYXNzIERhdGFVcmwgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50XG5cdCAqIEBwYXJhbSB7U3RyaW5nfE1lZGlhVHlwZX0gbWVkaWF0eXBlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYmFzZTY0PXRydWVcblx0ICovXG5cdGNvbnN0cnVjdG9yKGNvbnRlbnQsIG1lZGlhdHlwZSwgYmFzZTY0KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChpc1N0cmluZyhtZWRpYXR5cGUpKSB7XG5cdFx0XHRtZWRpYXR5cGUgPSBwYXJzZU1lZGlhVHlwZShtZWRpYXR5cGUpO1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxdID0ge1xuXHRcdFx0Y29udGVudDogdmFsaWRhdGVTdHJpbmcoY29udGVudCksXG5cdFx0XHRtZWRpYXR5cGU6IHZhbGlkYXRlSW5zdGFuY2UobWVkaWF0eXBlLCBNZWRpYVR5cGUpLFxuXHRcdFx0YmFzZTY0OiB2YWxpZGF0ZUJvb2xlYW4oYmFzZTY0ID09PSB1bmRlZmluZWQgPyB0cnVlIDogYmFzZTY0KSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9kYXRhLXVybFwiKTtcblx0fVxuXG5cdGdldCBjb250ZW50KCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsXS5iYXNlNjRcblx0XHRcdD8gYXRvYih0aGlzW2ludGVybmFsXS5jb250ZW50KVxuXHRcdFx0OiB0aGlzW2ludGVybmFsXS5jb250ZW50O1xuXHR9XG5cblx0Z2V0IG1lZGlhdHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0ubWVkaWF0eXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIzOTdcblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdGxldCBjb250ZW50ID0gdGhpc1tpbnRlcm5hbF0uY29udGVudDtcblxuXHRcdGlmICh0aGlzW2ludGVybmFsXS5iYXNlNjQgPT09IHRydWUpIHtcblx0XHRcdGNvbnRlbnQgPSBgO2Jhc2U2NCwke2NvbnRlbnR9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGVudCA9IGAsJHtlbmNvZGVVUklDb21wb25lbnQoY29udGVudCl9YDtcblx0XHR9XG5cblx0XHRyZXR1cm4gYGRhdGE6JHt0aGlzW2ludGVybmFsXS5tZWRpYXR5cGUudG9TdHJpbmcoKX0ke2NvbnRlbnR9YDtcblx0fVxufVxuXG4vKipcbiAqIFlvdSBjYW4gY2FsbCB0aGUgZnVuY3Rpb24gdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgcGFyc2VEYXRhVVJMKClgLlxuICpcbiAqIFNwZWNpZmljYXRpb246XG4gKlxuICogYGBgXG4gKiBkYXRhdXJsICAgIDo9IFwiZGF0YTpcIiBbIG1lZGlhdHlwZSBdIFsgXCI7YmFzZTY0XCIgXSBcIixcIiBkYXRhXG4gKiBtZWRpYXR5cGUgIDo9IFsgdHlwZSBcIi9cIiBzdWJ0eXBlIF0gKiggXCI7XCIgcGFyYW1ldGVyIClcbiAqIGRhdGEgICAgICAgOj0gKnVybGNoYXJcbiAqIHBhcmFtZXRlciAgOj0gYXR0cmlidXRlIFwiPVwiIHZhbHVlXG4gKiBgYGBcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQmFzaWNzX29mX0hUVFAvRGF0YV9VUklzXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjM5N1xuICogQHRocm93cyB7VHlwZUVycm9yfSBpbmNvcnJlY3Qgb3IgbWlzc2luZyBkYXRhIHByb3RvY29sXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IG1hbGZvcm1lZCBkYXRhIHVybFxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGF1cmxcbiAqIEByZXR1cm4ge0RhdGFVcmx9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlRGF0YVVSTChkYXRhdXJsKSB7XG5cdHZhbGlkYXRlU3RyaW5nKGRhdGF1cmwpO1xuXG5cdGRhdGF1cmwgPSBkYXRhdXJsLnRyaW0oKTtcblxuXHRpZiAoZGF0YXVybC5zdWJzdHJpbmcoMCwgNSkgIT09IFwiZGF0YTpcIikge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJpbmNvcnJlY3Qgb3IgbWlzc2luZyBkYXRhIHByb3RvY29sXCIpO1xuXHR9XG5cblx0ZGF0YXVybCA9IGRhdGF1cmwuc3Vic3RyaW5nKDUpO1xuXG5cdGNvbnN0IHAgPSBkYXRhdXJsLmluZGV4T2YoXCIsXCIpO1xuXHRpZiAocCA9PT0gLTEpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwibWFsZm9ybWVkIGRhdGEgdXJsXCIpO1xuXHR9XG5cblx0bGV0IGNvbnRlbnQgPSBkYXRhdXJsLnN1YnN0cmluZyhwICsgMSk7XG5cdGNvbnN0IG1lZGlhdHlwZUFuZEJhc2U2NCA9IGRhdGF1cmwuc3Vic3RyaW5nKDAsIHApLnRyaW0oKTtcblx0bGV0IG1lZGlhdHlwZSA9IFwidGV4dC9wbGFpbjtjaGFyc2V0PVVTLUFTQ0lJXCI7XG5cdGxldCBiYXNlNjRGbGFnID0gZmFsc2U7XG5cblx0aWYgKG1lZGlhdHlwZUFuZEJhc2U2NCAhPT0gXCJcIikge1xuXHRcdG1lZGlhdHlwZSA9IG1lZGlhdHlwZUFuZEJhc2U2NDtcblx0XHRpZiAobWVkaWF0eXBlQW5kQmFzZTY0LmVuZHNXaXRoKFwiYmFzZTY0XCIpKSB7XG5cdFx0XHRjb25zdCBpID0gbWVkaWF0eXBlQW5kQmFzZTY0Lmxhc3RJbmRleE9mKFwiO1wiKTtcblx0XHRcdG1lZGlhdHlwZSA9IG1lZGlhdHlwZUFuZEJhc2U2NC5zdWJzdHJpbmcoMCwgaSk7XG5cdFx0XHRiYXNlNjRGbGFnID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGVudCA9IGRlY29kZVVSSUNvbXBvbmVudChjb250ZW50KTtcblx0XHR9XG5cblx0XHRtZWRpYXR5cGUgPSBwYXJzZU1lZGlhVHlwZShtZWRpYXR5cGUpO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnRlbnQgPSBkZWNvZGVVUklDb21wb25lbnQoY29udGVudCk7XG5cdH1cblxuXHRyZXR1cm4gbmV3IERhdGFVcmwoY29udGVudCwgbWVkaWF0eXBlLCBiYXNlNjRGbGFnKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgUXVldWUgfTtcblxuLyoqXG4gKiBBIHF1ZXVlIGlzIGEgbGlzdCBvZiBpdGVtcyB0aGF0IGFyZSBwcm9jZXNzZWQgb25lIGFmdGVyIGFub3RoZXIgKGZpcnN0IGluLCBmaXJzdCBvdXQpLlxuICpcbiAqIFdpdGggYSBxdWV1ZSB5b3UgY2FuIGFkZCBpdGVtcyB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IGBRdWV1ZS5hZGQoKWAgYW5kIHJlbW92ZSBpdGVtcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QgYFF1ZXVlLnBvcCgpYC5cbiAqXG4gKiBXaXRoIGBRdWV1ZS5wZWVrKClgIHlvdSBjYW4gZ2V0IHRoZSBmaXJzdCBpdGVtIHdpdGhvdXQgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgbGlzdC5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGUgaW5zdGFuY2UgdmlhIGBuZXcgUXVldWUoKWAuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS40LjBcbiAqIEBzdW1tYXJ5IEEgUXVldWUgKEZpZm8pXG4gKi9cbmNsYXNzIFF1ZXVlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmRhdGEgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvcXVldWVcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzRW1wdHkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGggPT09IDA7XG5cdH1cblxuXHQvKipcblx0ICogUmVhZCB0aGUgZWxlbWVudCBhdCB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlIHdpdGhvdXQgcmVtb3ZpbmcgaXQuXG5cdCAqXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRwZWVrKCkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5kYXRhWzBdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIG5ldyBlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1F1ZXVlfVxuXHQgKi9cblx0YWRkKHZhbHVlKSB7XG5cdFx0dGhpcy5kYXRhLnB1c2godmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJlbW92ZSBhbGwgZW50cmllc1xuXHQgKlxuXHQgKiBAcmV0dXJuIHtRdWV1ZX1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHRoaXMuZGF0YSA9IFtdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZSB0aGUgZWxlbWVudCBhdCB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlXG5cdCAqIElmIHRoZSBxdWV1ZSBpcyBlbXB0eSwgcmV0dXJuIHVuZGVmaW5lZC5cblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHBvbGwoKSB7XG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5kYXRhLnNoaWZ0KCk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gXCIuL3F1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgVW5pcXVlUXVldWUgfTtcblxuLyoqXG4gKiBBbiBVbmlxdWVRdWV1ZSBpcyBhIHF1ZXVlIHRoYXQgY29udGFpbnMgaXRlbXMgb25seSBvbmNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBxdWV1ZSBmb3IgdW5pcXVlIHZhbHVlc1xuICovXG5jbGFzcyBVbmlxdWVRdWV1ZSBleHRlbmRzIFF1ZXVlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0dW5pcXVlOiBuZXcgV2Vha1NldCgpLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgbmV3IGVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtRdWV1ZX1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3Rcblx0ICovXG5cdGFkZCh2YWx1ZSkge1xuXHRcdHZhbGlkYXRlT2JqZWN0KHZhbHVlKTtcblxuXHRcdGlmICghdGhpc1tpbnRlcm5hbFN5bWJvbF0udW5pcXVlLmhhcyh2YWx1ZSkpIHtcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnVuaXF1ZS5hZGQodmFsdWUpO1xuXHRcdFx0c3VwZXIuYWRkKHZhbHVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZW1vdmUgYWxsIGVudHJpZXNcblx0ICpcblx0ICogQHJldHVybiB7UXVldWV9XG5cdCAqL1xuXHRjbGVhcigpIHtcblx0XHRzdXBlci5jbGVhcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnVuaXF1ZSA9IG5ldyBXZWFrU2V0KCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlIHRoZSBlbGVtZW50IGF0IHRoZSBmcm9udCBvZiB0aGUgcXVldWVcblx0ICogSWYgdGhlIHF1ZXVlIGlzIGVtcHR5LCByZXR1cm4gdW5kZWZpbmVkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtvYmplY3R9XG5cdCAqL1xuXHRwb2xsKCkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmRhdGEuc2hpZnQoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS51bmlxdWUuZGVsZXRlKHZhbHVlKTtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBUb2tlbkxpc3QgfSBmcm9tIFwiLi90b2tlbmxpc3QubWpzXCI7XG5pbXBvcnQgeyBVbmlxdWVRdWV1ZSB9IGZyb20gXCIuL3VuaXF1ZXF1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgT2JzZXJ2ZXIgfTtcblxuLyoqXG4gKiBBbiBvYnNlcnZlciBtYW5hZ2VzIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAqXG4gKiBUaGUgdXBkYXRlIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCB0aGUgc3ViamVjdCBvYmplY3QgYXMgdGhpcyBwb2ludGVyLiBGb3IgdGhpcyByZWFzb25cbiAqIHRoZSBjYWxsYmFjayBzaG91bGQgbm90IGJlIGFuIGFycm93IGZ1bmN0aW9uLCBiZWNhdXNlIGl0IGdldHMgdGhpcyBwb2ludGVyIG9mIGl0cyBvd24gY29udGV4dC5cbiAqXG4gKiBJbmNsdWRlIHRoaXMgY2xhc3MgaW4geW91ciBwcm9qZWN0IHdpdGggdGhlIGZvbGxvd2luZyBjb2RlOlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCJAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy9vYnNlcnZlci5tanNcIjtcbiAqIGBgYFxuICpcbiAqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBgYGBqc1xuICogbmV3IE9ic2VydmVyKCgpPT57XG4gKiAgICAgLy8gdGhpcyBpcyBub3Qgc3ViamVjdFxuICogfSlcbiAqXG4gKiBuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24oKSB7XG4gKiAgICAgLy8gdGhpcyBpcyBzdWJqZWN0XG4gKiB9KVxuICogYGBgXG4gKlxuICogQWRkaXRpb25hbCBhcmd1bWVudHMgY2FuIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2suIFRvIGRvIHRoaXMsIHNpbXBseSBzcGVjaWZ5IHRoZW0uXG4gKlxuICogYGBganNcbiAqIE9ic2VydmVyKGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAqICAgICBjb25zb2xlLmxvZyhhLCBiLCBjKTsgLy8gXHUyMUE2IFwiYVwiLCAyLCB0cnVlXG4gKiB9LCBcImFcIiwgMiwgdHJ1ZSlcbiAqIGBgYFxuICpcbiAqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBtdXN0IGhhdmUgYXMgbWFueSBwYXJhbWV0ZXJzIGFzIGFyZ3VtZW50cyBhcmUgZ2l2ZW4uXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqL1xuY2xhc3MgT2JzZXJ2ZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7Kn0gYXJnc1xuXHQgKi9cblx0Y29uc3RydWN0b3IoY2FsbGJhY2ssIC4uLmFyZ3MpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJvYnNlcnZlciBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuXHRcdHRoaXMuYXJndW1lbnRzID0gYXJncztcblx0XHR0aGlzLnRhZ3MgPSBuZXcgVG9rZW5MaXN0KCk7XG5cdFx0dGhpcy5xdWV1ZSA9IG5ldyBVbmlxdWVRdWV1ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9vYnNlcnZlclwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGFnXG5cdCAqIEByZXR1cm4ge09ic2VydmVyfVxuXHQgKi9cblx0YWRkVGFnKHRhZykge1xuXHRcdHRoaXMudGFncy5hZGQodGFnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGFnXG5cdCAqIEByZXR1cm4ge09ic2VydmVyfVxuXHQgKi9cblx0cmVtb3ZlVGFnKHRhZykge1xuXHRcdHRoaXMudGFncy5yZW1vdmUodGFnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtBcnJheX1cblx0ICovXG5cdGdldFRhZ3MoKSB7XG5cdFx0cmV0dXJuIHRoaXMudGFncy5lbnRyaWVzKCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRhZ1xuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aGFzVGFnKHRhZykge1xuXHRcdHJldHVybiB0aGlzLnRhZ3MuY29udGFpbnModGFnKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gc3ViamVjdFxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0dXBkYXRlKHN1YmplY3QpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdGlmICghaXNPYmplY3Qoc3ViamVjdCkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcInN1YmplY3QgbXVzdCBiZSBhbiBvYmplY3RcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdHNlbGYucXVldWUuYWRkKHN1YmplY3QpO1xuXG5cdFx0XHRxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Ly8gdGhlIHF1ZXVlIGFuZCB0aGUgYHF1ZXVlTWljcm90YXNrYCBlbnN1cmUgdGhhdCBhbiBvYmplY3QgaXMgbm90XG5cdFx0XHRcdFx0Ly8gaW5mb3JtZWQgb2YgdGhlIHNhbWUgY2hhbmdlIG1vcmUgdGhhbiBvbmNlLlxuXHRcdFx0XHRcdGlmIChzZWxmLnF1ZXVlLmlzRW1wdHkoKSkge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IHMgPSBzZWxmLnF1ZXVlLnBvbGwoKTtcblx0XHRcdFx0XHRjb25zdCByZXN1bHQgPSBzZWxmLmNhbGxiYWNrLmFwcGx5KHMsIHNlbGYuYXJndW1lbnRzKTtcblxuXHRcdFx0XHRcdGlmIChpc09iamVjdChyZXN1bHQpICYmIHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmVzb2x2ZShyZXN1bHQpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgT2JzZXJ2ZXJMaXN0IH07XG5cbi8qKlxuICogV2l0aCB0aGUgaGVscCBvZiB0aGUgT2JzZXJ2ZXJMaXN0IGNsYXNzLCBvYnNlcnZlciBjYW4gYmUgbWFuYWdlZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICovXG5jbGFzcyBPYnNlcnZlckxpc3QgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMub2JzZXJ2ZXJzID0gW107XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7T2JzZXJ2ZXJMaXN0fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBPYnNlcnZlclxuXHQgKi9cblx0YXR0YWNoKG9ic2VydmVyKSB7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZShvYnNlcnZlciwgT2JzZXJ2ZXIpO1xuXG5cdFx0dGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7T2JzZXJ2ZXJMaXN0fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBPYnNlcnZlclxuXHQgKi9cblx0ZGV0YWNoKG9ic2VydmVyKSB7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZShvYnNlcnZlciwgT2JzZXJ2ZXIpO1xuXG5cdFx0dmFyIGkgPSAwO1xuXHRcdHZhciBsID0gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuXHRcdGZvciAoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy5vYnNlcnZlcnNbaV0gPT09IG9ic2VydmVyKSB7XG5cdFx0XHRcdHRoaXMub2JzZXJ2ZXJzLnNwbGljZShpLCAxKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBPYnNlcnZlclxuXHQgKi9cblx0Y29udGFpbnMob2JzZXJ2ZXIpIHtcblx0XHR2YWxpZGF0ZUluc3RhbmNlKG9ic2VydmVyLCBPYnNlcnZlcik7XG5cdFx0dmFyIGkgPSAwO1xuXHRcdHZhciBsID0gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuXHRcdGZvciAoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy5vYnNlcnZlcnNbaV0gPT09IG9ic2VydmVyKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHN1YmplY3Rcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdG5vdGlmeShzdWJqZWN0KSB7XG5cdFx0Y29uc3QgcG9taXNlcyA9IFtdO1xuXG5cdFx0bGV0IGkgPSAwO1xuXHRcdGNvbnN0IGwgPSB0aGlzLm9ic2VydmVycy5sZW5ndGg7XG5cdFx0Zm9yICg7IGkgPCBsOyBpKyspIHtcblx0XHRcdHBvbWlzZXMucHVzaCh0aGlzLm9ic2VydmVyc1tpXS51cGRhdGUoc3ViamVjdCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBQcm9taXNlLmFsbChwb21pc2VzKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QsIGlzUHJpbWl0aXZlIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXJMaXN0IH0gZnJvbSBcIi4vb2JzZXJ2ZXJsaXN0Lm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGNsb25lIH0gZnJvbSBcIi4uL3V0aWwvY2xvbmUubWpzXCI7XG5leHBvcnQgeyBQcm94eU9ic2VydmVyIH07XG5cbi8qKlxuICogQW4gb2JzZXJ2ZXIgbWFuYWdlcyBhIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKlxuICogV2l0aCB0aGUgUHJveHlPYnNlcnZlciB5b3UgY2FuIGF0dGFjaCBvYnNlcnZlciBmb3Igb2JzZXJ2YXRpb24uXG4gKiBXaXRoIGVhY2ggY2hhbmdlIGF0IHRoZSBvYmplY3QgdG8gYmUgb2JzZXJ2ZWQsIGFuIHVwZGF0ZSB0YWtlcyBwbGFjZS5cbiAqXG4gKiBUaGlzIGFsc28gYXBwbGllcyB0byBuZXN0ZWQgb2JqZWN0cy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgUHJveHlPYnNlcnZlciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG9iamVjdFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuXHQgKi9cblx0Y29uc3RydWN0b3Iob2JqZWN0KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMucmVhbFN1YmplY3QgPSB2YWxpZGF0ZU9iamVjdChvYmplY3QpO1xuXHRcdHRoaXMuc3ViamVjdCA9IG5ldyBQcm94eShvYmplY3QsIGdldEhhbmRsZXIuY2FsbCh0aGlzKSk7XG5cblx0XHR0aGlzLm9iamVjdE1hcCA9IG5ldyBXZWFrTWFwKCk7XG5cdFx0dGhpcy5vYmplY3RNYXAuc2V0KHRoaXMucmVhbFN1YmplY3QsIHRoaXMuc3ViamVjdCk7XG5cblx0XHR0aGlzLnByb3h5TWFwID0gbmV3IFdlYWtNYXAoKTtcblx0XHR0aGlzLnByb3h5TWFwLnNldCh0aGlzLnN1YmplY3QsIHRoaXMucmVhbFN1YmplY3QpO1xuXG5cdFx0dGhpcy5vYnNlcnZlcnMgPSBuZXcgT2JzZXJ2ZXJMaXN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL3Byb3h5LW9ic2VydmVyXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge29iamVjdH1cblx0ICovXG5cdGdldFN1YmplY3QoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc3ViamVjdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMS4yNC4wXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Qcm94eU9ic2VydmVyfVxuXHQgKi9cblx0c2V0U3ViamVjdChvYmopIHtcblx0XHRsZXQgaTtcblx0XHRjb25zdCBjbG9uZWRPYmplY3QgPSBjbG9uZShvYmopO1xuXHRcdGNvbnN0IGsgPSBPYmplY3Qua2V5cyh0aGlzLnN1YmplY3QpO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRkZWxldGUgdGhpcy5zdWJqZWN0W2tbaV1dO1xuXHRcdH1cblxuXHRcdHRoaXMuc3ViamVjdCA9IGV4dGVuZCh0aGlzLnN1YmplY3QsIGNsb25lZE9iamVjdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSByZWFsIG9iamVjdFxuXHQgKlxuXHQgKiBDaGFuZ2VzIHRvIHRoaXMgb2JqZWN0IGFyZSBub3Qgbm90aWNlZCBieSB0aGUgb2JzZXJ2ZXJzLCBzbyB5b3UgY2FuIG1ha2UgYSBsYXJnZSBudW1iZXIgb2YgY2hhbmdlcyBhbmQgaW5mb3JtIHRoZSBvYnNlcnZlcnMgbGF0ZXIuXG5cdCAqXG5cdCAqIEByZXR1cm4ge29iamVjdH1cblx0ICovXG5cdGdldFJlYWxTdWJqZWN0KCkge1xuXHRcdHJldHVybiB0aGlzLnJlYWxTdWJqZWN0O1xuXHR9XG5cblx0LyoqXG5cdCAqIGF0dGFjaCBhIG5ldyBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0YXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzLm9ic2VydmVycy5hdHRhY2gob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGRldGFjaCBhIG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHRkZXRhY2hPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHRoaXMub2JzZXJ2ZXJzLmRldGFjaChvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogbm90aWZ5IGFsbCBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0bm90aWZ5T2JzZXJ2ZXJzKCkge1xuXHRcdHJldHVybiB0aGlzLm9ic2VydmVycy5ub3RpZnkodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHRyZXR1cm4gdGhpcy5vYnNlcnZlcnMuY29udGFpbnMob2JzZXJ2ZXIpO1xuXHR9XG59XG5cbi8qKlxuICpcbiAqIEByZXR1cm4ge3tkZWZpbmVQcm9wZXJ0eTogKGZ1bmN0aW9uKCo9LCAqPSwgKj0pOiAqKSwgc2V0UHJvdG90eXBlT2Y6IChmdW5jdGlvbigqLCAqPSk6IGJvb2xlYW4pLCBzZXQ6IChmdW5jdGlvbigqLCAqLCAqLCAqKTogYm9vbGVhbiksIGdldDogKChmdW5jdGlvbigqPSwgKj0sICo9KTogKHVuZGVmaW5lZCkpfCopLCBkZWxldGVQcm9wZXJ0eTogKChmdW5jdGlvbigqLCAqKTogKGJvb2xlYW4pKXwqKX19XG4gKiBAcHJpdmF0ZVxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vLS9zbmlwcGV0cy80OX1cbiAqL1xuZnVuY3Rpb24gZ2V0SGFuZGxlcigpIHtcblx0Y29uc3QgcHJveHkgPSB0aGlzO1xuXG5cdC8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvOS4wLyNzZWMtcHJveHktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzXG5cdGNvbnN0IGhhbmRsZXIgPSB7XG5cdFx0Ly8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy85LjAvI3NlYy1wcm94eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHMtZ2V0LXAtcmVjZWl2ZXJcblx0XHRnZXQ6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSwgcmVjZWl2ZXIpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBrZXksIHJlY2VpdmVyKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBrZXkgPT09IFwic3ltYm9sXCIpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNQcmltaXRpdmUodmFsdWUpKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc2V0IHZhbHVlIGFzIHByb3h5IGlmIG9iamVjdCBvciBhcnJheVxuXHRcdFx0aWYgKGlzQXJyYXkodmFsdWUpIHx8IGlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdFx0XHRpZiAocHJveHkub2JqZWN0TWFwLmhhcyh2YWx1ZSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJveHkub2JqZWN0TWFwLmdldCh2YWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAocHJveHkucHJveHlNYXAuaGFzKHZhbHVlKSkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBwID0gbmV3IFByb3h5KHZhbHVlLCBoYW5kbGVyKTtcblx0XHRcdFx0XHRwcm94eS5vYmplY3RNYXAuc2V0KHZhbHVlLCBwKTtcblx0XHRcdFx0XHRwcm94eS5wcm94eU1hcC5zZXQocCwgdmFsdWUpO1xuXHRcdFx0XHRcdHJldHVybiBwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy85LjAvI3NlYy1wcm94eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHMtc2V0LXAtdi1yZWNlaXZlclxuXHRcdHNldDogZnVuY3Rpb24gKHRhcmdldCwga2V5LCB2YWx1ZSwgcmVjZWl2ZXIpIHtcblx0XHRcdGlmIChwcm94eS5wcm94eU1hcC5oYXModmFsdWUpKSB7XG5cdFx0XHRcdHZhbHVlID0gcHJveHkucHJveHlNYXAuZ2V0KHZhbHVlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHByb3h5LnByb3h5TWFwLmhhcyh0YXJnZXQpKSB7XG5cdFx0XHRcdHRhcmdldCA9IHByb3h5LnByb3h5TWFwLmdldCh0YXJnZXQpO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgY3VycmVudCA9IFJlZmxlY3QuZ2V0KHRhcmdldCwga2V5LCByZWNlaXZlcik7XG5cdFx0XHRpZiAocHJveHkucHJveHlNYXAuaGFzKGN1cnJlbnQpKSB7XG5cdFx0XHRcdGN1cnJlbnQgPSBwcm94eS5wcm94eU1hcC5nZXQoY3VycmVudCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjdXJyZW50ID09PSB2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IHJlc3VsdDtcblx0XHRcdGxldCBkZXNjcmlwdG9yID0gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuXG5cdFx0XHRpZiAoZGVzY3JpcHRvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRlc2NyaXB0b3IgPSB7XG5cdFx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGRlc2NyaXB0b3JbXCJ2YWx1ZVwiXSA9IHZhbHVlO1xuXHRcdFx0cmVzdWx0ID0gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzY3JpcHRvcik7XG5cblx0XHRcdGlmICh0eXBlb2Yga2V5ICE9PSBcInN5bWJvbFwiKSB7XG5cdFx0XHRcdHByb3h5Lm9ic2VydmVycy5ub3RpZnkocHJveHkpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0sXG5cblx0XHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzkuMC8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90cy1kZWxldGUtcFxuXHRcdGRlbGV0ZVByb3BlcnR5OiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcblx0XHRcdGlmIChrZXkgaW4gdGFyZ2V0KSB7XG5cdFx0XHRcdGRlbGV0ZSB0YXJnZXRba2V5XTtcblxuXHRcdFx0XHRpZiAodHlwZW9mIGtleSAhPT0gXCJzeW1ib2xcIikge1xuXHRcdFx0XHRcdHByb3h5Lm9ic2VydmVycy5ub3RpZnkocHJveHkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblxuXHRcdC8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvOS4wLyNzZWMtcHJveHktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzLWRlZmluZW93bnByb3BlcnR5LXAtZGVzY1xuXHRcdGRlZmluZVByb3BlcnR5OiBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpO1xuXHRcdFx0aWYgKHR5cGVvZiBrZXkgIT09IFwic3ltYm9sXCIpIHtcblx0XHRcdFx0cHJveHkub2JzZXJ2ZXJzLm5vdGlmeShwcm94eSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0sXG5cblx0XHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzkuMC8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90cy1zZXRwcm90b3R5cGVvZi12XG5cdFx0c2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gUmVmbGVjdC5zZXRQcm90b3R5cGVPZihvYmplY3QxLCBrZXkpO1xuXG5cdFx0XHRpZiAodHlwZW9mIGtleSAhPT0gXCJzeW1ib2xcIikge1xuXHRcdFx0XHRwcm94eS5vYnNlcnZlcnMubm90aWZ5KHByb3h5KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9LFxuXHR9O1xuXG5cdHJldHVybiBoYW5kbGVyO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9USEVNRV9OQU1FLCBERUZBVUxUX1RIRU1FIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgVGhlbWUsIGdldERvY3VtZW50VGhlbWUgfTtcblxuLyoqXG4gKiBUaGUgVGhlbWUgY2xhc3MgcHJvdmlkZXMgdGhlIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSB0aGVtZS5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvZG9tL3RoZW1lLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS43LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIHRoZW1lIGNsYXNzXG4gKi9cbmNsYXNzIFRoZW1lIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gbmFtZVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0Y29uc3RydWN0b3IobmFtZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dmFsaWRhdGVTdHJpbmcobmFtZSk7XG5cdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3RoZW1lXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldE5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMubmFtZTtcblx0fVxufVxuXG4vKipcbiAqIFRoZSB0aGVtaW5nIHVzZWQgaW4gdGhlIGRvY3VtZW50IGNhbiBiZSBkZWZpbmVkIHZpYSB0aGUgaHRtbC10YWcuXG4gKiBUaGUgdGhlbWluZyBpcyBzcGVjaWZpZWQgdmlhIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci10aGVtZS1uYW1lYC5cbiAqXG4gKiBBcyBuYW1lIGZvciBhIHRoZW1lIGFsbCBjaGFyYWN0ZXJzIGFyZSB2YWxpZCwgd2hpY2ggYXJlIGFsc28gYWxsb3dlZCBmb3IgYSBIVE1MRWxlbWVudC1JRC5cbiAqXG4gKiBgYGBcbiAqIDxodG1sIGRhdGEtbW9uc3Rlci10aGVtZS1uYW1lPVwibXktdGhlbWVcIj5cbiAqIGBgYFxuICpcbiAqIHRoZSBkZWZhdWx0IHRoZW1lIG5hbWUgaXMgYG1vbnN0ZXJgLlxuICpcbiAqIEByZXR1cm4ge1RoZW1lfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS43LjBcbiAqL1xuZnVuY3Rpb24gZ2V0RG9jdW1lbnRUaGVtZSgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXRHbG9iYWxPYmplY3QoXCJkb2N1bWVudFwiKTtcblx0bGV0IG5hbWUgPSBERUZBVUxUX1RIRU1FO1xuXG5cdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKTtcblx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGNvbnN0IHRoZW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1RIRU1FX05BTUUpO1xuXHRcdGlmICh0aGVtZSkge1xuXHRcdFx0bmFtZSA9IHRoZW1lO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXcgVGhlbWUobmFtZSk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsRnVuY3Rpb24sIGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9URU1QTEFURV9QUkVGSVggfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudFRoZW1lIH0gZnJvbSBcIi4vdGhlbWUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuXG5leHBvcnQgeyBUZW1wbGF0ZSB9O1xuXG4vKipcbiAqIFRoZSB0ZW1wbGF0ZSBjbGFzcyBwcm92aWRlcyBtZXRob2RzIGZvciBjcmVhdGluZyB0ZW1wbGF0ZXMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIHRlbXBsYXRlIGNsYXNzXG4gKi9cbmNsYXNzIFRlbXBsYXRlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBmdW5jdGlvbiBpcyBub3QgZGVmaW5lZFxuXHQgKi9cblx0Y29uc3RydWN0b3IodGVtcGxhdGUpIHtcblx0XHRzdXBlcigpO1xuXHRcdGNvbnN0IEhUTUxUZW1wbGF0ZUVsZW1lbnQgPSBnZXRHbG9iYWxGdW5jdGlvbihcIkhUTUxUZW1wbGF0ZUVsZW1lbnRcIik7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZSh0ZW1wbGF0ZSwgSFRNTFRlbXBsYXRlRWxlbWVudCk7XG5cdFx0dGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vcmVzb3VyY2UvdGVtcGxhdGVcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7SFRNTFRlbXBsYXRlRWxlbWVudH1cblx0ICovXG5cdGdldFRlbXBsYXRlRWxlbWVudCgpIHtcblx0XHRyZXR1cm4gdGhpcy50ZW1wbGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtEb2N1bWVudEZyYWdtZW50fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKi9cblx0Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpIHtcblx0XHRyZXR1cm4gdGhpcy50ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGxvYWRzIGEgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gSUQgYW5kIHJldHVybnMgaXQuXG4gKlxuICogVG8gZG8gdGhpcywgaXQgZmlyc3QgcmVhZHMgdGhlIHRoZW1lIG9mIHRoZSBkb2N1bWVudCBhbmQgbG9va3MgZm9yIHRoZSBgZGF0YS1tb25zdGVyLXRoZW1lLW5hbWVgIGF0dHJpYnV0ZSBpbiB0aGUgSFRNTCB0YWcuXG4gKlxuICogYGBgXG4gKiA8aHRtbCBkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZT1cIm15LXRoZW1lXCI+XG4gKiBgYGBcbiAqXG4gKiBJZiBubyB0aGVtZSB3YXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB0aGVtZSBpcyBgbW9uc3RlcmAuXG4gKlxuICogTm93IGl0IGlzIGxvb2tlZCBpZiB0aGVyZSBpcyBhIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIElEIGFuZCB0aGVtZSBgaWQtdGhlbWVgIGFuZCBpZiB5ZXMgaXQgaXMgcmV0dXJuZWQuXG4gKiBJZiB0aGVyZSBpcyBubyB0ZW1wbGF0ZSBhIHNlYXJjaCBmb3IgYSB0ZW1wbGF0ZSB3aXRoIHRoZSBnaXZlbiBJRCBgaWRgIGlzIGRvbmUuIElmIHRoaXMgaXMgYWxzbyBub3QgZm91bmQsIGFuIGVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIG1ldGhvZCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLkRPTS5maW5kRG9jdW1lbnRUZW1wbGF0ZSgpYC5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtmaW5kVGVtcGxhdGV9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL2RvbS90ZW1wbGF0ZS5tanMnO1xuICogZmluZERvY3VtZW50VGVtcGxhdGUoKVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCB7IGZpbmREb2N1bWVudFRlbXBsYXRlIH0gZnJvbSBcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQHNjaHVrYWkvbW9uc3RlckBsYXRlc3Qvc291cmNlL2RvbS90ZW1wbGF0ZS5tanNcIjtcbiAqXG4gKiBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAqIHRlbXBsYXRlLmlkID0gXCJteVRlbXBsYXRlXCI7XG4gKiB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBcIjxwPm15IGRlZmF1bHQgdGVtcGxhdGU8L3A+XCI7XG4gKiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlbXBsYXRlKTtcbiAqXG4gKiBjb25zdCB0aGVtZWRUZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAqIHRoZW1lZFRlbXBsYXRlLmlkID0gXCJteVRlbXBsYXRlLW15VGhlbWVcIjtcbiAqIHRoZW1lZFRlbXBsYXRlLmlubmVySFRNTCA9IFwiPHA+bXkgdGhlbWVkIHRlbXBsYXRlPC9wPlwiO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGVtZWRUZW1wbGF0ZSk7XG4gKlxuICogLy8gbG9hZHMgdGhlIHRlbXBsZSBhbmQgc2luY2Ugbm8gdGhlbWUgaXMgc2V0IHRoZSBkZWZhdWx0IHRlbXBsYXRlXG4gKiBjb25zdCB0ZW1wbGF0ZTEgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm15VGVtcGxhdGVcIik7XG4gKiBjb25zb2xlLmxvZyh0ZW1wbGF0ZTEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAqIC8vIFx1MjFBNiAnPHA+bXkgZGVmYXVsdCB0ZW1wbGF0ZTwvcD4nXG4gKlxuICogLy8gbm93IHdlIHNldCBvdXIgb3duIHRoZW1lXG4gKiBkb2N1bWVudFxuICogLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpXG4gKiAuc2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLXRoZW1lLW5hbWVcIiwgXCJteVRoZW1lXCIpO1xuICpcbiAqIC8vIG5vdyB3ZSBkb24ndCBnZXQgdGhlIGRlZmF1bHQgdGVtcGxhdGUsXG4gKiAvLyBidXQgdGhlIHRlbXBsYXRlIHdpdGggdGhlIHRoZW1lIGluIHRoZSBpZFxuICogY29uc3QgdGVtcGxhdGUyID0gZmluZERvY3VtZW50VGVtcGxhdGUoXCJteVRlbXBsYXRlXCIpO1xuICogY29uc29sZS5sb2codGVtcGxhdGUyLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG4gKiAvLyBcdTIxQTYgJzxwPm15IHRoZW1lZCB0ZW1wbGF0ZTwvcD4nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkXG4gKiBAcGFyYW0ge05vZGV9IGN1cnJlbnROb2RlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5UZW1wbGF0ZX1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IHRlbXBsYXRlIGlkIG5vdCBmb3VuZC5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRG9jdW1lbnRUZW1wbGF0ZShpZCwgY3VycmVudE5vZGUpIHtcblx0dmFsaWRhdGVTdHJpbmcoaWQpO1xuXG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0R2xvYmFsT2JqZWN0KFwiZG9jdW1lbnRcIik7XG5cdGNvbnN0IEhUTUxUZW1wbGF0ZUVsZW1lbnQgPSBnZXRHbG9iYWxGdW5jdGlvbihcIkhUTUxUZW1wbGF0ZUVsZW1lbnRcIik7XG5cdGNvbnN0IERvY3VtZW50RnJhZ21lbnQgPSBnZXRHbG9iYWxGdW5jdGlvbihcIkRvY3VtZW50RnJhZ21lbnRcIik7XG5cdGNvbnN0IERvY3VtZW50ID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJEb2N1bWVudFwiKTtcblxuXHRsZXQgcHJlZml4SUQ7XG5cblx0aWYgKFxuXHRcdCEoXG5cdFx0XHRjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50IHx8IGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudFxuXHRcdClcblx0KSB7XG5cdFx0aWYgKGN1cnJlbnROb2RlIGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0aWYgKGN1cnJlbnROb2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfVEVNUExBVEVfUFJFRklYKSkge1xuXHRcdFx0XHRwcmVmaXhJRCA9IGN1cnJlbnROb2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVEVNUExBVEVfUFJFRklYKTtcblx0XHRcdH1cblxuXHRcdFx0Y3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5nZXRSb290Tm9kZSgpO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCEoXG5cdFx0XHRcdFx0Y3VycmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudCB8fFxuXHRcdFx0XHRcdGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudFxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Y3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5vd25lckRvY3VtZW50O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdCEoXG5cdFx0XHRcdGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnQgfHxcblx0XHRcdFx0Y3VycmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50XG5cdFx0XHQpXG5cdFx0KSB7XG5cdFx0XHRjdXJyZW50Tm9kZSA9IGRvY3VtZW50O1xuXHRcdH1cblx0fVxuXG5cdGxldCB0ZW1wbGF0ZTtcblx0Y29uc3QgdGhlbWUgPSBnZXREb2N1bWVudFRoZW1lKCk7XG5cblx0aWYgKHByZWZpeElEKSB7XG5cdFx0Y29uc3QgdGhlbWVkUHJlZml4SUQgPSBgJHtwcmVmaXhJRH0tJHtpZH0tJHt0aGVtZS5nZXROYW1lKCl9YDtcblxuXHRcdHRlbXBsYXRlID0gZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzKGN1cnJlbnROb2RlLCB0aGVtZWRQcmVmaXhJRCk7XG5cdFx0aWYgKHRlbXBsYXRlIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgdGhlbWVkSUQgPSBgJHtpZH0tJHt0aGVtZS5nZXROYW1lKCl9YDtcblxuXHR0ZW1wbGF0ZSA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhjdXJyZW50Tm9kZSwgdGhlbWVkSUQpO1xuXHRpZiAodGVtcGxhdGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KSB7XG5cdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdH1cblxuXHR0ZW1wbGF0ZSA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhjdXJyZW50Tm9kZSwgaWQpO1xuXHRpZiAodGVtcGxhdGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KSB7XG5cdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdH1cblxuXHR0aHJvdyBuZXcgRXJyb3IoYHRlbXBsYXRlICR7aWR9IG5vdCBmb3VuZC5gKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHR5cGVPZiB9IGZyb20gXCIuLi90eXBlcy90eXBlb2YubWpzXCI7XG5cbmV4cG9ydCB7IGRpZmYgfTtcblxuLyoqXG4gKiBXaXRoIHRoZSBkaWZmIGZ1bmN0aW9uIHlvdSBjYW4gcGVyZm9ybSB0aGUgY2hhbmdlIG9mIG9uZSBvYmplY3QgdG8gYW5vdGhlci4gVGhlIHJlc3VsdCBzaG93cyB0aGUgY2hhbmdlcyBvZiB0aGUgc2Vjb25kIG9iamVjdCB0byB0aGUgZmlyc3Qgb2JqZWN0LlxuICpcbiAqIFRoZSBvcGVyYXRvciBgYWRkYCBtZWFucyB0aGF0IHNvbWV0aGluZyBoYXMgYmVlbiBhZGRlZCB0byB0aGUgc2Vjb25kIG9iamVjdC4gYGRlbGV0ZWAgbWVhbnMgdGhhdCBzb21ldGhpbmcgaGFzIGJlZW4gZGVsZXRlZCBmcm9tIHRoZSBzZWNvbmQgb2JqZWN0IGNvbXBhcmVkIHRvIHRoZSBmaXJzdCBvYmplY3QuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RhdGEvZGlmZi5tanNcbiAqIEBwYXJhbSB7Kn0gZmlyc3RcbiAqIEBwYXJhbSB7Kn0gc2Vjb25kXG4gKiBAcmV0dXJuIHthcnJheX1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBkaWZmKGZpcnN0LCBzZWNvbmQpIHtcblx0cmV0dXJuIGRvRGlmZihmaXJzdCwgc2Vjb25kKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGFcbiAqIEBwYXJhbSBiXG4gKiBAcGFyYW0gdHlwZVxuICogQHJldHVybiB7U2V0PHN0cmluZz58U2V0PG51bWJlcj59XG4gKi9cbmZ1bmN0aW9uIGdldEtleXMoYSwgYiwgdHlwZSkge1xuXHRpZiAoaXNBcnJheSh0eXBlKSkge1xuXHRcdGNvbnN0IGtleXMgPVxuXHRcdFx0YS5sZW5ndGggPiBiLmxlbmd0aCA/IG5ldyBBcnJheShhLmxlbmd0aCkgOiBuZXcgQXJyYXkoYi5sZW5ndGgpO1xuXHRcdGtleXMuZmlsbCgwKTtcblx0XHRyZXR1cm4gbmV3IFNldChrZXlzLm1hcCgoXywgaSkgPT4gaSkpO1xuXHR9XG5cblx0cmV0dXJuIG5ldyBTZXQoT2JqZWN0LmtleXMoYSkuY29uY2F0KE9iamVjdC5rZXlzKGIpKSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBhXG4gKiBAcGFyYW0gYlxuICogQHBhcmFtIHBhdGhcbiAqIEBwYXJhbSBkaWZmXG4gKiBAcmV0dXJuIHthcnJheX1cbiAqL1xuZnVuY3Rpb24gZG9EaWZmKGEsIGIsIHBhdGgsIGRpZmYpIHtcblx0Y29uc3QgdHlwZUEgPSB0eXBlT2YoYSk7XG5cdGNvbnN0IHR5cGVCID0gdHlwZU9mKGIpO1xuXG5cdGNvbnN0IGN1cnJQYXRoID0gcGF0aCB8fCBbXTtcblx0Y29uc3QgY3VyckRpZmYgPSBkaWZmIHx8IFtdO1xuXG5cdGlmICh0eXBlQSA9PT0gdHlwZUIgJiYgKHR5cGVBID09PSBcIm9iamVjdFwiIHx8IHR5cGVBID09PSBcImFycmF5XCIpKSB7XG5cdFx0Z2V0S2V5cyhhLCBiLCB0eXBlQSkuZm9yRWFjaCgodikgPT4ge1xuXHRcdFx0aWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgdikpIHtcblx0XHRcdFx0Y3VyckRpZmYucHVzaChidWlsZFJlc3VsdChhW3ZdLCBiW3ZdLCBcImFkZFwiLCBjdXJyUGF0aC5jb25jYXQodikpKTtcblx0XHRcdH0gZWxzZSBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCB2KSkge1xuXHRcdFx0XHRjdXJyRGlmZi5wdXNoKGJ1aWxkUmVzdWx0KGFbdl0sIGJbdl0sIFwiZGVsZXRlXCIsIGN1cnJQYXRoLmNvbmNhdCh2KSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZG9EaWZmKGFbdl0sIGJbdl0sIGN1cnJQYXRoLmNvbmNhdCh2KSwgY3VyckRpZmYpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IG8gPSBnZXRPcGVyYXRvcihhLCBiLCB0eXBlQSwgdHlwZUIpO1xuXHRcdGlmIChvICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGN1cnJEaWZmLnB1c2goYnVpbGRSZXN1bHQoYSwgYiwgbywgcGF0aCkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjdXJyRGlmZjtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSBhXG4gKiBAcGFyYW0geyp9IGJcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcGVyYXRvclxuICogQHBhcmFtIHthcnJheX0gcGF0aFxuICogQHJldHVybiB7e3BhdGg6IGFycmF5LCBvcGVyYXRvcjogc3RyaW5nfX1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkUmVzdWx0KGEsIGIsIG9wZXJhdG9yLCBwYXRoKSB7XG5cdGNvbnN0IHJlc3VsdCA9IHtcblx0XHRvcGVyYXRvcixcblx0XHRwYXRoLFxuXHR9O1xuXG5cdGlmIChvcGVyYXRvciAhPT0gXCJhZGRcIikge1xuXHRcdHJlc3VsdC5maXJzdCA9IHtcblx0XHRcdHZhbHVlOiBhLFxuXHRcdFx0dHlwZTogdHlwZW9mIGEsXG5cdFx0fTtcblxuXHRcdGlmIChpc09iamVjdChhKSkge1xuXHRcdFx0Y29uc3QgbmFtZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihhKT8uY29uc3RydWN0b3I/Lm5hbWU7XG5cdFx0XHRpZiAobmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJlc3VsdC5maXJzdC5pbnN0YW5jZSA9IG5hbWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9wZXJhdG9yID09PSBcImFkZFwiIHx8IG9wZXJhdG9yID09PSBcInVwZGF0ZVwiKSB7XG5cdFx0cmVzdWx0LnNlY29uZCA9IHtcblx0XHRcdHZhbHVlOiBiLFxuXHRcdFx0dHlwZTogdHlwZW9mIGIsXG5cdFx0fTtcblxuXHRcdGlmIChpc09iamVjdChiKSkge1xuXHRcdFx0Y29uc3QgbmFtZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihiKT8uY29uc3RydWN0b3I/Lm5hbWU7XG5cdFx0XHRpZiAobmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJlc3VsdC5zZWNvbmQuaW5zdGFuY2UgPSBuYW1lO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gYVxuICogQHBhcmFtIHsqfSBiXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc05vdEVxdWFsKGEsIGIpIHtcblx0aWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0cmV0dXJuIGEuZ2V0VGltZSgpICE9PSBiLmdldFRpbWUoKTtcblx0fVxuXG5cdHJldHVybiBhICE9PSBiO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IGFcbiAqIEBwYXJhbSB7Kn0gYlxuICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0b3IoYSwgYikge1xuXHQvKipcblx0ICogQHR5cGUge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRsZXQgb3BlcmF0b3I7XG5cblx0LyoqXG5cdCAqIEB0eXBlIHtzdHJpbmd9XG5cdCAqL1xuXHRjb25zdCB0eXBlQSA9IHR5cGVvZiBhO1xuXG5cdC8qKlxuXHQgKiBAdHlwZSB7c3RyaW5nfVxuXHQgKi9cblx0Y29uc3QgdHlwZUIgPSB0eXBlb2YgYjtcblxuXHRpZiAodHlwZUEgPT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZUIgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRvcGVyYXRvciA9IFwiYWRkXCI7XG5cdH0gZWxzZSBpZiAodHlwZUEgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZUIgPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRvcGVyYXRvciA9IFwiZGVsZXRlXCI7XG5cdH0gZWxzZSBpZiAoaXNOb3RFcXVhbChhLCBiKSkge1xuXHRcdG9wZXJhdG9yID0gXCJ1cGRhdGVcIjtcblx0fVxuXG5cdHJldHVybiBvcGVyYXRvcjtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuLi90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IHRyaW1TcGFjZXMgfTtcblxuLyoqXG4gKiBUaGlzIHNwZWNpYWwgdHJpbSBmdW5jdGlvbiBhbGxvd3MgdG8gdHJpbSBzcGFjZXMgdGhhdCBoYXZlIGJlZW4gcHJvdGVjdGVkIGJ5IGEgc3BlY2lhbCBlc2NhcGUgY2hhcmFjdGVyLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3RyaW1TcGFjZXN9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3V0aWwvdHJpbXNwYWNlcy5tanMnO1xuICogdHJpbVNwYWNlcygnIGhlbGxvIFxcXFwgJylcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogSGludDogT25lIHN0cm9rZSBpcyBlc2NhcGVkIGJ5IHRoZSBqYXZhc2NyaXB0IGludGVycHJldGVyLCB0aGUgc2Vjb25kIHN0cm9rZSBlc2NhcGVzIHRoZSBzdHJva2UuXG4gKlxuICogYGBgdGV4dFxuICogYVxcIGIgIFx1MjFBNiBhIGJcbiAqIGFcXFxcIGIgXHUyMUE2IGFcXCBiXG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHRyaW1TcGFjZXModmFsdWUpIHtcblx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdGNvbnN0IHBsYWNlaG9sZGVyID0gbmV3IE1hcCgpO1xuXHRjb25zdCByZWdleCA9IC8oKD88cGF0dGVybj5cXFxcKD88Y2hhcj4uKSl7MX0pL2dpbTtcblxuXHQvLyBUaGUgc2VwYXJhdG9yIGZvciBhcmdzIG11c3QgYmUgZXNjYXBlZFxuXHQvLyB1bmRlZmluZWQgc3RyaW5nIHdoaWNoIHNob3VsZCBub3Qgb2NjdXIgbm9ybWFsbHkgYW5kIGlzIGFsc28gbm90IGEgcmVnZXhcblx0Y29uc3QgcmVzdWx0ID0gdmFsdWUubWF0Y2hBbGwocmVnZXgpO1xuXG5cdGZvciAoY29uc3QgbSBvZiByZXN1bHQpIHtcblx0XHRjb25zdCBnID0gbT8uW1wiZ3JvdXBzXCJdO1xuXHRcdGlmICghaXNPYmplY3QoZykpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHAgPSBnPy5bXCJwYXR0ZXJuXCJdO1xuXHRcdGNvbnN0IGMgPSBnPy5bXCJjaGFyXCJdO1xuXG5cdFx0aWYgKHAgJiYgYykge1xuXHRcdFx0Y29uc3QgciA9IGBfXyR7bmV3IElEKCkudG9TdHJpbmcoKX1fX2A7XG5cdFx0XHRwbGFjZWhvbGRlci5zZXQociwgYyk7XG5cdFx0XHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocCwgcik7XG5cdFx0fVxuXHR9XG5cblx0dmFsdWUgPSB2YWx1ZS50cmltKCk7XG5cdHBsYWNlaG9sZGVyLmZvckVhY2goKHYsIGspID0+IHtcblx0XHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoaywgYFxcXFwke3Z9YCk7XG5cdH0pO1xuXG5cdHJldHVybiB2YWx1ZTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuXG5leHBvcnQgeyBmaXJlRXZlbnQsIGZpcmVDdXN0b21FdmVudCwgZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQgfTtcblxuLyoqXG4gKiBUaGUgZnVuY3Rpb24gc2VuZHMgYW4gZXZlbnRcbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnQgfCBOb2RlIHwgSFRNTENvbGxlY3Rpb24gfCBOb2RlTGlzdH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEwLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudCBvciBIVE1MQ29sbGVjdGlvblxuICogQHN1bW1hcnkgQ29uc3RydWN0IGFuZCBzZW5kIGFuZCBldmVudFxuICovXG5mdW5jdGlvbiBmaXJlRXZlbnQoZWxlbWVudCwgdHlwZSkge1xuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGlmICh0eXBlID09PSBcImNsaWNrXCIpIHtcblx0XHRcdGVsZW1lbnQuY2xpY2soKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnQvRXZlbnRcblx0XHRjb25zdCBldmVudCA9IG5ldyBFdmVudCh2YWxpZGF0ZVN0cmluZyh0eXBlKSwge1xuXHRcdFx0YnViYmxlczogdHJ1ZSxcblx0XHRcdGNhbmNlbGFibGU6IHRydWUsXG5cdFx0XHRjb21wb3NlZDogdHJ1ZSxcblx0XHR9KTtcblxuXHRcdGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxDb2xsZWN0aW9uIHx8IGVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlTGlzdCkge1xuXHRcdGZvciAoY29uc3QgZSBvZiBlbGVtZW50KSB7XG5cdFx0XHRmaXJlRXZlbnQoZSwgdHlwZSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRcInZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudCBvciBIVE1MQ29sbGVjdGlvblwiLFxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIGZ1bmN0aW9uIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYG5ldyBNb25zdGVyLkRPTS5maXJlQ3VzdG9tRXZlbnQoKWAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50IHwgTm9kZSB8IEhUTUxDb2xsZWN0aW9uIHwgTm9kZUxpc3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgb3IgSFRNTENvbGxlY3Rpb25cbiAqIEBzdW1tYXJ5IENvbnN0cnVjdCBhbmQgc2VuZCBhbmQgZXZlbnRcbiAqL1xuZnVuY3Rpb24gZmlyZUN1c3RvbUV2ZW50KGVsZW1lbnQsIHR5cGUsIGRldGFpbCkge1xuXHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0aWYgKCFpc09iamVjdChkZXRhaWwpKSB7XG5cdFx0XHRkZXRhaWwgPSB7IGRldGFpbCB9O1xuXHRcdH1cblxuXHRcdGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KHZhbGlkYXRlU3RyaW5nKHR5cGUpLCB7XG5cdFx0XHRidWJibGVzOiB0cnVlLFxuXHRcdFx0Y2FuY2VsYWJsZTogdHJ1ZSxcblx0XHRcdGNvbXBvc2VkOiB0cnVlLFxuXHRcdFx0ZGV0YWlsLFxuXHRcdH0pO1xuXG5cdFx0ZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcblx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTENvbGxlY3Rpb24gfHwgZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMaXN0KSB7XG5cdFx0Zm9yIChjb25zdCBlIG9mIGVsZW1lbnQpIHtcblx0XHRcdGZpcmVDdXN0b21FdmVudChlLCB0eXBlLCBkZXRhaWwpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XCJlbGVtZW50IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudCBvciBIVE1MQ29sbGVjdGlvblwiLFxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHBhdGggYEV2ZW50LmNvbXBvc2VkUGF0aCgpYCBmcm9tIGFuIGV2ZW50IGFuZCB0cmllcyB0byBmaW5kIHRoZSBuZXh0IGVsZW1lbnRcbiAqIHVwIHRoZSB0cmVlIGBlbGVtZW50LmNsb3Nlc3QoKWAgd2l0aCB0aGUgYXR0cmlidXRlIGFuZCB2YWx1ZS4gSWYgbm8gdmFsdWUsIG9yIGEgdmFsdWUgdGhhdCBpcyB1bmRlZmluZWQgb3IgbnVsbCxcbiAqIGlzIHNwZWNpZmllZCwgb25seSB0aGUgYXR0cmlidXRlIGlzIHNlYXJjaGVkLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTQuMFxuICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gYXR0cmlidXRlVmFsdWVcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBldmVudFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG4gKiBAc3VtbWFyeSBIZWxwIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGFwcHJvcHJpYXRlIGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoZXZlbnQsIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZXZlbnQsIEV2ZW50KTtcblxuXHRpZiAodHlwZW9mIGV2ZW50LmNvbXBvc2VkUGF0aCAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgZXZlbnRcIik7XG5cdH1cblxuXHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cblx0Ly8gY2xvc2VzdCBjYW5ub3QgYmUgdXNlZCBoZXJlLCBiZWNhdXNlIGNsb3Nlc3QgaXMgbm90IGNvcnJlY3QgZm9yIHNsb3R0ZWQgZWxlbWVudHNcblx0aWYgKGlzQXJyYXkocGF0aCkpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IG8gPSBwYXRoW2ldO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdG8gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcdFx0XHRvLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSAmJlxuXHRcdFx0XHQoYXR0cmlidXRlVmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRcdG8uZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpID09PSBhdHRyaWJ1dGVWYWx1ZSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gbztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGRpZmYgfSBmcm9tIFwiLi4vZGF0YS9kaWZmLm1qc1wiO1xuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQgeyBQaXBlIH0gZnJvbSBcIi4uL2RhdGEvcGlwZS5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMsXG5cdEFUVFJJQlVURV9VUERBVEVSX0JJTkQsXG5cdEFUVFJJQlVURV9VUERBVEVSX0JJTkRfVFlQRSxcblx0QVRUUklCVVRFX1VQREFURVJfSU5TRVJULFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9SRU1PVkUsXG5cdEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UsXG5cdEFUVFJJQlVURV9VUERBVEVSX1NFTEVDVF9USElTLFxufSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXksIGlzU3RyaW5nLCBpc0luc3RhbmNlLCBpc0l0ZXJhYmxlIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUFycmF5LCB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7IHRyaW1TcGFjZXMgfSBmcm9tIFwiLi4vdXRpbC90cmltc3BhY2VzLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4sIGFkZFRvT2JqZWN0TGluayB9IGZyb20gXCIuL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyB1cGRhdGVyVHJhbnNmb3JtZXJNZXRob2RzU3ltYm9sIH0gZnJvbSBcIi4vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50IH0gZnJvbSBcIi4vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgZmluZERvY3VtZW50VGVtcGxhdGUgfSBmcm9tIFwiLi90ZW1wbGF0ZS5tanNcIjtcbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5cbmV4cG9ydCB7IFVwZGF0ZXIsIGFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50IH07XG5cbi8qKlxuICogVGhlIHVwZGF0ZXIgY2xhc3MgY29ubmVjdHMgYW4gb2JqZWN0IHdpdGggdGhlIERPTS4gSW4gdGhpcyB3YXksIHN0cnVjdHVyZXMgYW5kIGNvbnRlbnRzIGluIHRoZSBET00gY2FuIGJlXG4gKiBwcm9ncmFtbWF0aWNhbGx5IGFkYXB0ZWQgdmlhIGF0dHJpYnV0ZXMuXG4gKlxuICogRm9yIGV4YW1wbGUsIHRvIGluY2x1ZGUgYSBzdHJpbmcgZnJvbSBhbiBvYmplY3QsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1yZXBsYWNlYCBjYW4gYmUgdXNlZC5cbiAqIGEgZnVydGhlciBleHBsYW5hdGlvbiBjYW4gYmUgZm91bmQgdW5kZXIgW21vbnN0ZXJqcy5vcmddKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pXG4gKlxuICogQ2hhbmdlcyB0byBhdHRyaWJ1dGVzIGFyZSBtYWRlIG9ubHkgd2hlbiB0aGUgZGlyZWN0IHZhbHVlcyBhcmUgY2hhbmdlZC4gSWYgeW91IHdhbnQgdG8gYXNzaWduIGNoYW5nZXNcbiAqIHRvIG90aGVyIHZhbHVlcyBhcyB3ZWxsLCB5b3UgaGF2ZSB0byBpbnNlcnQgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXNlbGVjdC10aGlzYC4gVGhpcyBzaG91bGQgYmVcbiAqIGRvbmUgd2l0aCBjYXJlLCBhcyBpdCBjYW4gcmVkdWNlIHBlcmZvcm1hbmNlLlxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvZG9tL3VwZGF0ZXIvc2ltcGxlLyBTaW1wbGUgZXhhbXBsZVxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBwaXBlcyBhcmUgbm90IGFsbG93ZWQgd2hlbiBjbG9uaW5nIGEgbm9kZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyB0ZW1wbGF0ZSB3YXMgZm91bmQgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS5cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgbWF4aW11bSBkZXB0aCBmb3IgdGhlIHJlY3Vyc2lvbiBpcyByZWFjaGVkLlxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3RcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG4gKiBAc3VtbWFyeSBUaGUgdXBkYXRlciBjbGFzcyBjb25uZWN0cyBhbiBvYmplY3Qgd2l0aCB0aGUgZG9tXG4gKi9cbmNsYXNzIFVwZGF0ZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIEBzaW5jZSAxLjguMFxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG5cdCAqIEBwYXJhbSB7b2JqZWN0fFByb3h5T2JzZXJ2ZXJ8dW5kZWZpbmVkfSBzdWJqZWN0XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG5cdCAqIEBzZWUge0BsaW5rIGZpbmREb2N1bWVudFRlbXBsYXRlfVxuXHQgKi9cblx0Y29uc3RydWN0b3IoZWxlbWVudCwgc3ViamVjdCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHQvKipcblx0XHQgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG5cdFx0ICovXG5cdFx0aWYgKHN1YmplY3QgPT09IHVuZGVmaW5lZCkgc3ViamVjdCA9IHt9O1xuXHRcdGlmICghaXNJbnN0YW5jZShzdWJqZWN0LCBQcm94eU9ic2VydmVyKSkge1xuXHRcdFx0c3ViamVjdCA9IG5ldyBQcm94eU9ic2VydmVyKHN1YmplY3QpO1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0ZWxlbWVudDogdmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCksXG5cdFx0XHRsYXN0OiB7fSxcblx0XHRcdGNhbGxiYWNrczogbmV3IE1hcCgpLFxuXHRcdFx0ZXZlbnRUeXBlczogW1wia2V5dXBcIiwgXCJjbGlja1wiLCBcImNoYW5nZVwiLCBcImRyb3BcIiwgXCJ0b3VjaGVuZFwiLCBcImlucHV0XCJdLFxuXHRcdFx0c3ViamVjdDogc3ViamVjdCxcblx0XHR9O1xuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uY2FsbGJhY2tzLnNldChcblx0XHRcdFwiY2hlY2tzdGF0ZVwiLFxuXHRcdFx0Z2V0Q2hlY2tTdGF0ZUNhbGxiYWNrLmNhbGwodGhpcyksXG5cdFx0KTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuYXR0YWNoT2JzZXJ2ZXIoXG5cdFx0XHRuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBzID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpO1xuXG5cdFx0XHRcdGNvbnN0IGRpZmZSZXN1bHQgPSBkaWZmKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmxhc3QsIHMpO1xuXHRcdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5sYXN0ID0gY2xvbmUocyk7XG5cblx0XHRcdFx0Y29uc3QgcHJvbWlzZXMgPSBbXTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IFssIGNoYW5nZV0gb2YgT2JqZWN0LmVudHJpZXMoZGlmZlJlc3VsdCkpIHtcblx0XHRcdFx0XHRwcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0bmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRnZXRXaW5kb3coKS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZW1vdmVFbGVtZW50LmNhbGwodGhpcywgY2hhbmdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdGluc2VydEVsZW1lbnQuY2FsbCh0aGlzLCBjaGFuZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlQ29udGVudC5jYWxsKHRoaXMsIGNoYW5nZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGVBdHRyaWJ1dGVzLmNhbGwodGhpcywgY2hhbmdlKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRGVmYXVsdHM6ICdrZXl1cCcsICdjbGljaycsICdjaGFuZ2UnLCAnZHJvcCcsICd0b3VjaGVuZCdcblx0ICpcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZGUvZG9jcy9XZWIvRXZlbnRzfVxuXHQgKiBAc2luY2UgMS45LjBcblx0ICogQHBhcmFtIHtBcnJheX0gdHlwZXNcblx0ICogQHJldHVybiB7VXBkYXRlcn1cblx0ICovXG5cdHNldEV2ZW50VHlwZXModHlwZXMpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5ldmVudFR5cGVzID0gdmFsaWRhdGVBcnJheSh0eXBlcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogV2l0aCB0aGlzIG1ldGhvZCwgdGhlIGV2ZW50bGlzdGVuZXJzIGFyZSBob29rZWQgaW4gYW5kIHRoZSBtYWdpYyBiZWdpbnMuXG5cdCAqXG5cdCAqIGBgYGpzXG5cdCAqIHVwZGF0ZXIucnVuKCkudGhlbigoKSA9PiB7XG5cdCAqICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblx0ICogfSk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAc2luY2UgMS45LjBcblx0ICogQHJldHVybiB7VXBkYXRlcn1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aFxuXHQgKi9cblx0ZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCkge1xuXHRcdHRoaXMuZGlzYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXG5cdFx0Zm9yIChjb25zdCB0eXBlIG9mIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmV2ZW50VHlwZXMpIHtcblx0XHRcdC8vIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50VGFyZ2V0L2FkZEV2ZW50TGlzdGVuZXJcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0dHlwZSxcblx0XHRcdFx0Z2V0Q29udHJvbEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2FwdHVyZTogdHJ1ZSxcblx0XHRcdFx0XHRwYXNzaXZlOiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCB0dXJucyBvZmYgdGhlIG1hZ2ljIG9yIHdobyBsb3ZlcyBpdCBtb3JlIHByb2ZhbmUgaXQgcmVtb3ZlcyB0aGUgZXZlbnRMaXN0ZW5lci5cblx0ICpcblx0ICogQHNpbmNlIDEuOS4wXG5cdCAqIEByZXR1cm4ge1VwZGF0ZXJ9XG5cdCAqL1xuXHRkaXNhYmxlRXZlbnRQcm9jZXNzaW5nKCkge1xuXHRcdGZvciAoY29uc3QgdHlwZSBvZiB0aGlzW2ludGVybmFsU3ltYm9sXS5ldmVudFR5cGVzKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdHR5cGUsXG5cdFx0XHRcdGdldENvbnRyb2xFdmVudEhhbmRsZXIuY2FsbCh0aGlzKSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHJ1biBtZXRob2QgbXVzdCBiZSBjYWxsZWQgZm9yIHRoZSB1cGRhdGUgdG8gc3RhcnQgd29ya2luZy5cblx0ICogVGhlIG1ldGhvZCBlbnN1cmVzIHRoYXQgY2hhbmdlcyBhcmUgZGV0ZWN0ZWQuXG5cdCAqXG5cdCAqIGBgYGpzXG5cdCAqIHVwZGF0ZXIucnVuKCkudGhlbigoKSA9PiB7XG5cdCAqICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblx0ICogfSk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAc3VtbWFyeSBMZXQgdGhlIG1hZ2ljIGJlZ2luXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRydW4oKSB7XG5cdFx0Ly8gdGhlIGtleSBfX2luaXRfX2hhcyBubyBmdXJ0aGVyIG1lYW5pbmcgYW5kIGlzIG9ubHlcblx0XHQvLyB1c2VkIHRvIGNyZWF0ZSB0aGUgZGlmZiBmb3IgZW1wdHkgb2JqZWN0cy5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5sYXN0ID0geyBfX2luaXRfXzogdHJ1ZSB9O1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0Lm5vdGlmeU9ic2VydmVycygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHZhbHVlcyBvZiBib3VuZCBlbGVtZW50cyBhbmQgY2hhbmdlcyB0aGVtIGluIHN1YmplY3Rcblx0ICpcblx0ICogQHNpbmNlIDEuMjcuMFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5VcGRhdGVyfVxuXHQgKi9cblx0cmV0cmlldmUoKSB7XG5cdFx0cmV0cmlldmVGcm9tQmluZGluZ3MuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBJZiB5b3UgaGF2ZSBwYXNzZWQgYSBQcm94eU9ic2VydmVyIGluIHRoZSBjb25zdHJ1Y3RvciwgeW91IHdpbGwgZ2V0IHRoZSBvYmplY3QgdGhhdCB0aGUgUHJveHlPYnNlcnZlciBtYW5hZ2VzIGhlcmUuXG5cdCAqIEhvd2V2ZXIsIGlmIHlvdSBwYXNzZWQgYSBzaW1wbGUgb2JqZWN0LCBoZXJlIHlvdSB3aWxsIGdldCBhIHByb3h5IGZvciB0aGF0IG9iamVjdC5cblx0ICpcblx0ICogRm9yIGNoYW5nZXMsIHRoZSBQcm94eU9ic2VydmVyIG11c3QgYmUgdXNlZC5cblx0ICpcblx0ICogQHNpbmNlIDEuOC4wXG5cdCAqIEByZXR1cm4ge1Byb3h5fVxuXHQgKi9cblx0Z2V0U3ViamVjdCgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRTdWJqZWN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gcmVnaXN0ZXIgY29tbWFuZHMgdGhhdCBjYW4gYmUgY2FsbGVkIHZpYSBjYWxsOiBpbnN0cnVjdGlvbi5cblx0ICogVGhpcyBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGEgcGlwZSB3aXRoIGl0cyBvd24gZnVuY3Rpb25hbGl0eS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHJldHVybiB7VHJhbnNmb3JtZXJ9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICovXG5cdHNldENhbGxiYWNrKG5hbWUsIGNhbGxiYWNrKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uY2FsbGJhY2tzLnNldChuYW1lLCBjYWxsYmFjayk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEByZXR1cm4ge2Z1bmN0aW9uXG4gKiBAdGhpcyBVcGRhdGVyXG4gKi9cbmZ1bmN0aW9uIGdldENoZWNrU3RhdGVDYWxsYmFjaygpIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjdXJyZW50KSB7XG5cdFx0Ly8gdGhpcyBpcyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBvYmplY3QgKHRoZXJlZm9yZSBubyBhcnJheSBmdW5jdGlvbiBoZXJlKVxuXHRcdGlmICh0aGlzIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdFx0aWYgKFtcInJhZGlvXCIsIFwiY2hlY2tib3hcIl0uaW5kZXhPZih0aGlzLnR5cGUpICE9PSAtMSkge1xuXHRcdFx0XHRyZXR1cm4gYCR7dGhpcy52YWx1ZX1gID09PSBgJHtjdXJyZW50fWAgPyBcInRydWVcIiA6IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRoaXMgaW5zdGFuY2VvZiBIVE1MT3B0aW9uRWxlbWVudCkge1xuXHRcdFx0aWYgKGlzQXJyYXkoY3VycmVudCkgJiYgY3VycmVudC5pbmRleE9mKHRoaXMudmFsdWUpICE9PSAtMSkge1xuXHRcdFx0XHRyZXR1cm4gXCJ0cnVlXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHN5bWJvbCA9IFN5bWJvbChcIkBzY2h1a2FpL21vbnN0ZXIvdXBkYXRlckBARXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqIEB0aGlzIFVwZGF0ZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgYmluZCBhcmd1bWVudCBtdXN0IHN0YXJ0IGFzIGEgdmFsdWUgd2l0aCBhIHBhdGhcbiAqL1xuZnVuY3Rpb24gZ2V0Q29udHJvbEV2ZW50SGFuZGxlcigpIHtcblx0aWYgKHRoaXNbc3ltYm9sXSkge1xuXHRcdHJldHVybiB0aGlzW3N5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aC5cblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIG9iamVjdFxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1tzeW1ib2xdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGV2ZW50LCBBVFRSSUJVVEVfVVBEQVRFUl9CSU5EKTtcblxuXHRcdGlmIChlbGVtZW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG5cdFx0XHRyZXRyaWV2ZUFuZFNldFZhbHVlLmNhbGwodGhpcywgZWxlbWVudCk7XG5cdFx0fSk7XG5cdH07XG5cblx0cmV0dXJuIHRoaXNbc3ltYm9sXTtcbn1cblxuLyoqXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGJpbmQgYXJndW1lbnQgbXVzdCBzdGFydCBhcyBhIHZhbHVlIHdpdGggYSBwYXRoXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHZvaWRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJldHJpZXZlQW5kU2V0VmFsdWUoZWxlbWVudCkge1xuXHRjb25zdCBwYXRoZmluZGVyID0gbmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRTdWJqZWN0KCkpO1xuXG5cdGxldCBwYXRoID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfQklORCk7XG5cdGlmIChwYXRoID09PSBudWxsKVxuXHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aFwiKTtcblxuXHRpZiAocGF0aC5pbmRleE9mKFwicGF0aDpcIikgIT09IDApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgYmluZCBhcmd1bWVudCBtdXN0IHN0YXJ0IGFzIGEgdmFsdWUgd2l0aCBhIHBhdGhcIik7XG5cdH1cblxuXHRwYXRoID0gcGF0aC5zdWJzdHJpbmcoNSk7IC8vIHJlbW92ZSBwYXRoOiBmcm9tIHRoZSBzdHJpbmdcblxuXHRsZXQgdmFsdWU7XG5cblx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG5cdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdGNhc2UgXCJjaGVja2JveFwiOlxuXHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQuY2hlY2tlZCA/IGVsZW1lbnQudmFsdWUgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcblx0XHR2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG5cdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50KSB7XG5cdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdGNhc2UgXCJzZWxlY3Qtb25lXCI6XG5cdFx0XHRcdHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwic2VsZWN0LW11bHRpcGxlXCI6XG5cdFx0XHRcdHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblxuXHRcdFx0XHRsZXQgb3B0aW9ucyA9IGVsZW1lbnQ/LnNlbGVjdGVkT3B0aW9ucztcblx0XHRcdFx0aWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZClcblx0XHRcdFx0XHRvcHRpb25zID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiOnNjb3BlIG9wdGlvbjpjaGVja2VkXCIpO1xuXHRcdFx0XHR2YWx1ZSA9IEFycmF5LmZyb20ob3B0aW9ucykubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKTtcblxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHQvLyB2YWx1ZXMgZnJvbSBjdXN0b20gZWxlbWVudHNcblx0fSBlbHNlIGlmIChcblx0XHQoZWxlbWVudD8uY29uc3RydWN0b3I/LnByb3RvdHlwZSAmJlxuXHRcdFx0ISFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuXHRcdFx0XHRlbGVtZW50LmNvbnN0cnVjdG9yLnByb3RvdHlwZSxcblx0XHRcdFx0XCJ2YWx1ZVwiLFxuXHRcdFx0KT8uW1wiZ2V0XCJdKSB8fFxuXHRcdGVsZW1lbnQuaGFzT3duUHJvcGVydHkoXCJ2YWx1ZVwiKVxuXHQpIHtcblx0XHR2YWx1ZSA9IGVsZW1lbnQ/LltcInZhbHVlXCJdO1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIG9iamVjdFwiKTtcblx0fVxuXG5cdGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHRjb25zdCB0eXBlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfQklORF9UWVBFKTtcblx0XHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRcdGNhc2UgXCJudW1iZXJcIjpcblx0XHRcdGNhc2UgXCJpbnRcIjpcblx0XHRcdGNhc2UgXCJmbG9hdFwiOlxuXHRcdFx0Y2FzZSBcImludGVnZXJcIjpcblx0XHRcdFx0dmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXHRcdFx0XHRpZiAoaXNOYU4odmFsdWUpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSAwO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImJvb2xlYW5cIjpcblx0XHRcdGNhc2UgXCJib29sXCI6XG5cdFx0XHRjYXNlIFwiY2hlY2tib3hcIjpcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZSA9PT0gXCJ0cnVlXCIgfHwgdmFsdWUgPT09IFwiMVwiIHx8IHZhbHVlID09PSBcIm9uXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImFycmF5XCI6XG5cdFx0XHRjYXNlIFwibGlzdFwiOlxuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnNwbGl0KFwiLFwiKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwib2JqZWN0XCI6XG5cdFx0XHRjYXNlIFwianNvblwiOlxuXHRcdFx0XHR2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IGNvcHkgPSBjbG9uZSh0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmdldFJlYWxTdWJqZWN0KCkpO1xuXG5cdGNvbnN0IHBmID0gbmV3IFBhdGhmaW5kZXIoY29weSk7XG5cdHBmLnNldFZpYShwYXRoLCB2YWx1ZSk7XG5cblx0Y29uc3QgZGlmZlJlc3VsdCA9IGRpZmYoY29weSwgdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpKTtcblxuXHRpZiAoZGlmZlJlc3VsdC5sZW5ndGggPiAwKSB7XG5cdFx0cGF0aGZpbmRlci5zZXRWaWEocGF0aCwgdmFsdWUpO1xuXHR9XG59XG5cbi8qKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNy4wXG4gKiBAcmV0dXJuIHZvaWRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHJldHJpZXZlRnJvbUJpbmRpbmdzKCkge1xuXHRpZiAodGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudC5tYXRjaGVzKGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9CSU5EfV1gKSkge1xuXHRcdHJldHJpZXZlQW5kU2V0VmFsdWUuY2FsbCh0aGlzLCB0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50KTtcblx0fVxuXG5cdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudFxuXHRcdC5xdWVyeVNlbGVjdG9yQWxsKGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9CSU5EfV1gKVxuXHRcdC5lbnRyaWVzKCkpIHtcblx0XHRyZXRyaWV2ZUFuZFNldFZhbHVlLmNhbGwodGhpcywgZWxlbWVudCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBwYXJhbSB7b2JqZWN0fSBjaGFuZ2VcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUVsZW1lbnQoY2hhbmdlKSB7XG5cdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudFxuXHRcdC5xdWVyeVNlbGVjdG9yQWxsKGA6c2NvcGUgWyR7QVRUUklCVVRFX1VQREFURVJfUkVNT1ZFfV1gKVxuXHRcdC5lbnRyaWVzKCkpIHtcblx0XHRlbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBwYXJhbSB7b2JqZWN0fSBjaGFuZ2VcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIHZhbHVlIGlzIG5vdCBpdGVyYWJsZVxuICogQHRocm93cyB7RXJyb3J9IHBpcGVzIGFyZSBub3QgYWxsb3dlZCB3aGVuIGNsb25pbmcgYSBub2RlLlxuICogQHRocm93cyB7RXJyb3J9IG5vIHRlbXBsYXRlIHdhcyBmb3VuZCB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LlxuICogQHRocm93cyB7RXJyb3J9IHRoZSBtYXhpbXVtIGRlcHRoIGZvciB0aGUgcmVjdXJzaW9uIGlzIHJlYWNoZWQuXG4gKiBAdGhpcyBVcGRhdGVyXG4gKi9cbmZ1bmN0aW9uIGluc2VydEVsZW1lbnQoY2hhbmdlKSB7XG5cdGNvbnN0IHN1YmplY3QgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmdldFJlYWxTdWJqZWN0KCk7XG5cblx0Y29uc3QgbWVtID0gbmV3IFdlYWtTZXQoKTtcblx0bGV0IHdkID0gMDtcblxuXHRjb25zdCBjb250YWluZXIgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50O1xuXG5cdHdoaWxlICh0cnVlKSB7XG5cdFx0bGV0IGZvdW5kID0gZmFsc2U7XG5cdFx0d2QrKztcblxuXHRcdGNvbnN0IHAgPSBjbG9uZShjaGFuZ2U/LltcInBhdGhcIl0pO1xuXHRcdGlmICghaXNBcnJheShwKSkgcmV0dXJuO1xuXG5cdFx0d2hpbGUgKHAubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgY3VycmVudCA9IHAuam9pbihcIi5cIik7XG5cblx0XHRcdGxldCBpdGVyYXRvciA9IG5ldyBTZXQoKTtcblx0XHRcdGNvbnN0IHF1ZXJ5ID0gYFske0FUVFJJQlVURV9VUERBVEVSX0lOU0VSVH0qPVwicGF0aDoke2N1cnJlbnR9XCJdYDtcblxuXHRcdFx0Y29uc3QgZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KTtcblxuXHRcdFx0aWYgKGUubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRpdGVyYXRvciA9IG5ldyBTZXQoWy4uLmVdKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGNvbnRhaW5lci5tYXRjaGVzKHF1ZXJ5KSkge1xuXHRcdFx0XHRpdGVyYXRvci5hZGQoY29udGFpbmVyKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBbLCBjb250YWluZXJFbGVtZW50XSBvZiBpdGVyYXRvci5lbnRyaWVzKCkpIHtcblx0XHRcdFx0aWYgKG1lbS5oYXMoY29udGFpbmVyRWxlbWVudCkpIGNvbnRpbnVlO1xuXHRcdFx0XHRtZW0uYWRkKGNvbnRhaW5lckVsZW1lbnQpO1xuXG5cdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblxuXHRcdFx0XHRjb25zdCBhdHRyaWJ1dGVzID0gY29udGFpbmVyRWxlbWVudC5nZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdFx0QVRUUklCVVRFX1VQREFURVJfSU5TRVJULFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoYXR0cmlidXRlcyA9PT0gbnVsbCkgY29udGludWU7XG5cblx0XHRcdFx0Y29uc3QgZGVmID0gdHJpbVNwYWNlcyhhdHRyaWJ1dGVzKTtcblx0XHRcdFx0Y29uc3QgaSA9IGRlZi5pbmRleE9mKFwiIFwiKTtcblx0XHRcdFx0Y29uc3Qga2V5ID0gdHJpbVNwYWNlcyhkZWYuc3Vic3RyKDAsIGkpKTtcblx0XHRcdFx0Y29uc3QgcmVmUHJlZml4ID0gYCR7a2V5fS1gO1xuXHRcdFx0XHRjb25zdCBjbWQgPSB0cmltU3BhY2VzKGRlZi5zdWJzdHIoaSkpO1xuXG5cdFx0XHRcdC8vIHRoaXMgY2FzZSBpcyBhY3R1YWxseSBleGNsdWRlZCBieSB0aGUgcXVlcnkgYnV0IGlzIG5ldmVydGhlbGVzcyBjaGVja2VkIGFnYWluIGhlcmVcblx0XHRcdFx0aWYgKGNtZC5pbmRleE9mKFwifFwiKSA+IDApIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJwaXBlcyBhcmUgbm90IGFsbG93ZWQgd2hlbiBjbG9uaW5nIGEgbm9kZS5cIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBwaXBlID0gbmV3IFBpcGUoY21kKTtcblx0XHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uY2FsbGJhY2tzLmZvckVhY2goKGYsIG4pID0+IHtcblx0XHRcdFx0XHRwaXBlLnNldENhbGxiYWNrKG4sIGYpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRsZXQgdmFsdWU7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29udGFpbmVyRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSk7XG5cdFx0XHRcdFx0dmFsdWUgPSBwaXBlLnJ1bihzdWJqZWN0KTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGNvbnRhaW5lckVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBkYXRhUGF0aCA9IGNtZC5zcGxpdChcIjpcIikucG9wKCk7XG5cblx0XHRcdFx0bGV0IGluc2VydFBvaW50O1xuXHRcdFx0XHRpZiAoY29udGFpbmVyRWxlbWVudC5oYXNDaGlsZE5vZGVzKCkpIHtcblx0XHRcdFx0XHRpbnNlcnRQb2ludCA9IGNvbnRhaW5lckVsZW1lbnQubGFzdENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFpc0l0ZXJhYmxlKHZhbHVlKSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGVcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBhdmFpbGFibGUgPSBuZXcgU2V0KCk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBbaV0gb2YgT2JqZWN0LmVudHJpZXModmFsdWUpKSB7XG5cdFx0XHRcdFx0Y29uc3QgcmVmID0gcmVmUHJlZml4ICsgaTtcblx0XHRcdFx0XHRjb25zdCBjdXJyZW50UGF0aCA9IGAke2RhdGFQYXRofS4ke2l9YDtcblxuXHRcdFx0XHRcdGF2YWlsYWJsZS5hZGQocmVmKTtcblx0XHRcdFx0XHRjb25zdCByZWZFbGVtZW50ID0gY29udGFpbmVyRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0XHRcdFx0YFske0FUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0V9PVwiJHtyZWZ9XCJdYCxcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKHJlZkVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0aW5zZXJ0UG9pbnQgPSByZWZFbGVtZW50O1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YXBwZW5kTmV3RG9jdW1lbnRGcmFnbWVudChjb250YWluZXJFbGVtZW50LCBrZXksIHJlZiwgY3VycmVudFBhdGgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3Qgbm9kZXMgPSBjb250YWluZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0XHRcdFx0YFske0FUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0V9Kj1cIiR7cmVmUHJlZml4fVwiXWAsXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBbLCBub2RlXSBvZiBPYmplY3QuZW50cmllcyhub2RlcykpIHtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHQhYXZhaWxhYmxlLmhhcyhcblx0XHRcdFx0XHRcdFx0bm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSksXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRjb250YWluZXJFbGVtZW50LnJlbW92ZUNoaWxkKG5vZGUpO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRjb250YWluZXJFbGVtZW50LnNldEF0dHJpYnV0ZShcblx0XHRcdFx0XHRcdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XHRcdFx0XHRcdGAke2NvbnRhaW5lckVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UpfSwgJHtcblx0XHRcdFx0XHRcdFx0XHRcdGUubWVzc2FnZVxuXHRcdFx0XHRcdFx0XHRcdH1gLnRyaW0oKSxcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cC5wb3AoKTtcblx0XHR9XG5cblx0XHRpZiAoZm91bmQgPT09IGZhbHNlKSBicmVhaztcblx0XHRpZiAod2QrKyA+IDIwMCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIG1heGltdW0gZGVwdGggZm9yIHRoZSByZWN1cnNpb24gaXMgcmVhY2hlZC5cIik7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY29udGFpbmVyXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcmVmXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHRocm93cyB7RXJyb3J9IG5vIHRlbXBsYXRlIHdhcyBmb3VuZCB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LlxuICovXG5mdW5jdGlvbiBhcHBlbmROZXdEb2N1bWVudEZyYWdtZW50KGNvbnRhaW5lciwga2V5LCByZWYsIHBhdGgpIHtcblx0Y29uc3QgdGVtcGxhdGUgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShrZXksIGNvbnRhaW5lcik7XG5cblx0Y29uc3Qgbm9kZXMgPSB0ZW1wbGF0ZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG5cdGZvciAoY29uc3QgWywgbm9kZV0gb2YgT2JqZWN0LmVudHJpZXMobm9kZXMuY2hpbGROb2RlcykpIHtcblx0XHRpZiAobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRhcHBseVJlY3Vyc2l2ZShub2RlLCBrZXksIHBhdGgpO1xuXHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSwgcmVmKTtcblx0XHR9XG5cblx0XHRjb250YWluZXIuYXBwZW5kQ2hpbGQobm9kZSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMC4wXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gYXBwbHlSZWN1cnNpdmUobm9kZSwga2V5LCBwYXRoKSB7XG5cdGlmIChub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSkpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSk7XG5cdFx0XHRub2RlLnNldEF0dHJpYnV0ZShcblx0XHRcdFx0QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSxcblx0XHRcdFx0dmFsdWUucmVwbGFjZUFsbChgcGF0aDoke2tleX1gLCBgcGF0aDoke3BhdGh9YCksXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTKSkge1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTKTtcblx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKFxuXHRcdFx0XHRBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTLFxuXHRcdFx0XHR2YWx1ZS5yZXBsYWNlQWxsKGBwYXRoOiR7a2V5fWAsIGBwYXRoOiR7cGF0aH1gKSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBbLCBjaGlsZF0gb2YgT2JqZWN0LmVudHJpZXMobm9kZS5jaGlsZE5vZGVzKSkge1xuXHRcdFx0YXBwbHlSZWN1cnNpdmUoY2hpbGQsIGtleSwgcGF0aCk7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge29iamVjdH0gY2hhbmdlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQHRoaXMgVXBkYXRlclxuICovXG5mdW5jdGlvbiB1cGRhdGVDb250ZW50KGNoYW5nZSkge1xuXHRjb25zdCBzdWJqZWN0ID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpO1xuXG5cdGNvbnN0IHAgPSBjbG9uZShjaGFuZ2U/LltcInBhdGhcIl0pO1xuXHRydW5VcGRhdGVDb250ZW50LmNhbGwodGhpcywgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudCwgcCwgc3ViamVjdCk7XG5cblx0Y29uc3Qgc2xvdHMgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzbG90XCIpO1xuXHRpZiAoc2xvdHMubGVuZ3RoID4gMCkge1xuXHRcdGZvciAoY29uc3QgWywgc2xvdF0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdHMpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHNsb3QuYXNzaWduZWROb2RlcygpKSkge1xuXHRcdFx0XHRydW5VcGRhdGVDb250ZW50LmNhbGwodGhpcywgZWxlbWVudCwgcCwgc3ViamVjdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBjb250YWluZXJcbiAqIEBwYXJhbSB7YXJyYXl9IHBhcnRzXG4gKiBAcGFyYW0ge29iamVjdH0gc3ViamVjdFxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcnVuVXBkYXRlQ29udGVudChjb250YWluZXIsIHBhcnRzLCBzdWJqZWN0KSB7XG5cdGlmICghaXNBcnJheShwYXJ0cykpIHJldHVybjtcblx0aWYgKCEoY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm47XG5cdHBhcnRzID0gY2xvbmUocGFydHMpO1xuXG5cdGNvbnN0IG1lbSA9IG5ldyBXZWFrU2V0KCk7XG5cblx0d2hpbGUgKHBhcnRzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBjdXJyZW50ID0gcGFydHMuam9pbihcIi5cIik7XG5cdFx0cGFydHMucG9wKCk7XG5cblx0XHQvLyBVbmZvcnR1bmF0ZWx5LCBzdGF0aWMgZGF0YSBpcyBhbHdheXMgY2hhbmdlZCBhcyB3ZWxsLCBzaW5jZSBpdCBpcyBub3QgcG9zc2libGUgdG8gcmVhY3QgdG8gY2hhbmdlcyBoZXJlLlxuXHRcdGNvbnN0IHF1ZXJ5ID0gYFske0FUVFJJQlVURV9VUERBVEVSX1JFUExBQ0V9Xj1cInBhdGg6JHtjdXJyZW50fVwiXSwgWyR7QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRX1ePVwic3RhdGljOlwiXSwgWyR7QVRUUklCVVRFX1VQREFURVJfUkVQTEFDRX1ePVwiaTE4bjpcIl1gO1xuXHRcdGNvbnN0IGUgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChgJHtxdWVyeX1gKTtcblxuXHRcdGNvbnN0IGl0ZXJhdG9yID0gbmV3IFNldChbLi4uZV0pO1xuXG5cdFx0aWYgKGNvbnRhaW5lci5tYXRjaGVzKHF1ZXJ5KSkge1xuXHRcdFx0aXRlcmF0b3IuYWRkKGNvbnRhaW5lcik7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHR5cGUge0hUTUxFbGVtZW50fVxuXHRcdCAqL1xuXHRcdGZvciAoY29uc3QgW2VsZW1lbnRdIG9mIGl0ZXJhdG9yLmVudHJpZXMoKSkge1xuXHRcdFx0aWYgKG1lbS5oYXMoZWxlbWVudCkpIHJldHVybjtcblx0XHRcdG1lbS5hZGQoZWxlbWVudCk7XG5cblx0XHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFKTtcblx0XHRcdGNvbnN0IGNtZCA9IHRyaW1TcGFjZXMoYXR0cmlidXRlcyk7XG5cblx0XHRcdGNvbnN0IHBpcGUgPSBuZXcgUGlwZShjbWQpO1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uY2FsbGJhY2tzLmZvckVhY2goKGYsIG4pID0+IHtcblx0XHRcdFx0cGlwZS5zZXRDYWxsYmFjayhuLCBmKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRsZXQgdmFsdWU7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFKTtcblx0XHRcdFx0dmFsdWUgPSBwaXBlLnJ1bihzdWJqZWN0KTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0d2hpbGUgKGVsZW1lbnQuZmlyc3RDaGlsZCkge1xuXHRcdFx0XHRcdGVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbWVudC5maXJzdENoaWxkKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5hcHBlbmRDaGlsZCh2YWx1ZSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShcblx0XHRcdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdFx0XHRgJHtlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFKX0sICR7XG5cdFx0XHRcdFx0XHRcdGUubWVzc2FnZVxuXHRcdFx0XHRcdFx0fWAudHJpbSgpLFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnQuaW5uZXJIVE1MID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBzaW5jZSAxLjguMFxuICogQHBhcmFtIHtvYmplY3R9IGNoYW5nZVxuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdXBkYXRlQXR0cmlidXRlcyhjaGFuZ2UpIHtcblx0Y29uc3Qgc3ViamVjdCA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0UmVhbFN1YmplY3QoKTtcblx0Y29uc3QgcCA9IGNsb25lKGNoYW5nZT8uW1wicGF0aFwiXSk7XG5cdHJ1blVwZGF0ZUF0dHJpYnV0ZXMuY2FsbCh0aGlzLCB0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50LCBwLCBzdWJqZWN0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY29udGFpbmVyXG4gKiBAcGFyYW0ge2FycmF5fSBwYXJ0c1xuICogQHBhcmFtIHtvYmplY3R9IHN1YmplY3RcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAdGhpcyBVcGRhdGVyXG4gKi9cbmZ1bmN0aW9uIHJ1blVwZGF0ZUF0dHJpYnV0ZXMoY29udGFpbmVyLCBwYXJ0cywgc3ViamVjdCkge1xuXHRpZiAoIWlzQXJyYXkocGFydHMpKSByZXR1cm47XG5cdHBhcnRzID0gY2xvbmUocGFydHMpO1xuXG5cdGNvbnN0IG1lbSA9IG5ldyBXZWFrU2V0KCk7XG5cblx0d2hpbGUgKHBhcnRzLmxlbmd0aCA+IDApIHtcblx0XHRjb25zdCBjdXJyZW50ID0gcGFydHMuam9pbihcIi5cIik7XG5cdFx0cGFydHMucG9wKCk7XG5cblx0XHRsZXQgaXRlcmF0b3IgPSBuZXcgU2V0KCk7XG5cblx0XHRjb25zdCBxdWVyeSA9IGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9TRUxFQ1RfVEhJU31dWyR7QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFU31dLCBbJHtBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTfSo9XCJwYXRoOiR7Y3VycmVudH1cIl0sIFske0FUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVN9Xj1cInN0YXRpYzpcIl0sIFske0FUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVN9Xj1cImkxOG46XCJdYDtcblxuXHRcdGNvbnN0IGUgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChxdWVyeSk7XG5cblx0XHRpZiAoZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRpdGVyYXRvciA9IG5ldyBTZXQoWy4uLmVdKTtcblx0XHR9XG5cblx0XHRpZiAoY29udGFpbmVyLm1hdGNoZXMocXVlcnkpKSB7XG5cdFx0XHRpdGVyYXRvci5hZGQoY29udGFpbmVyKTtcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFtlbGVtZW50XSBvZiBpdGVyYXRvci5lbnRyaWVzKCkpIHtcblx0XHRcdGlmIChtZW0uaGFzKGVsZW1lbnQpKSByZXR1cm47XG5cdFx0XHRtZW0uYWRkKGVsZW1lbnQpO1xuXG5cdFx0XHQvLyB0aGlzIGNhc2Ugb2NjdXJzIHdoZW4gdGhlIEFUVFJJQlVURV9VUERBVEVSX1NFTEVDVF9USElTIGF0dHJpYnV0ZSBpcyBzZXRcblx0XHRcdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUykpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGF0dHJpYnV0ZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTKTtcblxuXHRcdFx0Zm9yIChsZXQgWywgZGVmXSBvZiBPYmplY3QuZW50cmllcyhhdHRyaWJ1dGVzLnNwbGl0KFwiLFwiKSkpIHtcblx0XHRcdFx0ZGVmID0gdHJpbVNwYWNlcyhkZWYpO1xuXHRcdFx0XHRjb25zdCBpID0gZGVmLmluZGV4T2YoXCIgXCIpO1xuXHRcdFx0XHRjb25zdCBuYW1lID0gdHJpbVNwYWNlcyhkZWYuc3Vic3RyKDAsIGkpKTtcblx0XHRcdFx0Y29uc3QgY21kID0gdHJpbVNwYWNlcyhkZWYuc3Vic3RyKGkpKTtcblxuXHRcdFx0XHRjb25zdCBwaXBlID0gbmV3IFBpcGUoY21kKTtcblxuXHRcdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5jYWxsYmFja3MuZm9yRWFjaCgoZiwgbikgPT4ge1xuXHRcdFx0XHRcdHBpcGUuc2V0Q2FsbGJhY2sobiwgZiwgZWxlbWVudCk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGxldCB2YWx1ZTtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFKTtcblx0XHRcdFx0XHR2YWx1ZSA9IHBpcGUucnVuKHN1YmplY3QpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aGFuZGxlSW5wdXRDb250cm9sQXR0cmlidXRlVXBkYXRlLmNhbGwodGhpcywgZWxlbWVudCwgbmFtZSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fCp9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7dm9pZH1cbiAqIEB0aGlzIFVwZGF0ZXJcbiAqL1xuXG5mdW5jdGlvbiBoYW5kbGVJbnB1dENvbnRyb2xBdHRyaWJ1dGVVcGRhdGUoZWxlbWVudCwgbmFtZSwgdmFsdWUpIHtcblx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MU2VsZWN0RWxlbWVudCkge1xuXHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRjYXNlIFwic2VsZWN0LW11bHRpcGxlXCI6XG5cdFx0XHRcdGZvciAoY29uc3QgW2luZGV4LCBvcHRdIG9mIE9iamVjdC5lbnRyaWVzKGVsZW1lbnQub3B0aW9ucykpIHtcblx0XHRcdFx0XHRvcHQuc2VsZWN0ZWQgPSB2YWx1ZS5pbmRleE9mKG9wdC52YWx1ZSkgIT09IC0xO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwic2VsZWN0LW9uZVwiOlxuXHRcdFx0XHQvLyBPbmx5IG9uZSB2YWx1ZSBtYXkgYmUgc2VsZWN0ZWRcblxuXHRcdFx0XHRmb3IgKGNvbnN0IFtpbmRleCwgb3B0XSBvZiBPYmplY3QuZW50cmllcyhlbGVtZW50Lm9wdGlvbnMpKSB7XG5cdFx0XHRcdFx0aWYgKG9wdC52YWx1ZSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0XHRcdGVsZW1lbnQuc2VsZWN0ZWRJbmRleCA9IGluZGV4O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7XG5cdFx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRcdGNhc2UgXCJyYWRpb1wiOlxuXHRcdFx0XHRpZiAobmFtZSA9PT0gXCJjaGVja2VkXCIpIHtcblx0XHRcdFx0XHRlbGVtZW50LmNoZWNrZWQgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJjaGVja2JveFwiOlxuXHRcdFx0XHRpZiAobmFtZSA9PT0gXCJjaGVja2VkXCIpIHtcblx0XHRcdFx0XHRlbGVtZW50LmNoZWNrZWQgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwidGV4dFwiOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aWYgKG5hbWUgPT09IFwidmFsdWVcIikge1xuXHRcdFx0XHRcdGVsZW1lbnQudmFsdWUgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHZhbHVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG5cdFx0aWYgKG5hbWUgPT09IFwidmFsdWVcIikge1xuXHRcdFx0ZWxlbWVudC52YWx1ZSA9IHZhbHVlID09PSB1bmRlZmluZWQgPyBcIlwiIDogdmFsdWU7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtOb2RlTGlzdHxIVE1MRWxlbWVudHxTZXQ8SFRNTEVsZW1lbnQ+fSBlbGVtZW50c1xuICogQHBhcmFtIHtTeW1ib2x9IHN5bWJvbFxuICogQHBhcmFtIHtvYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ1xuICpcbiAqIENvbmZpZzogZW5hYmxlRXZlbnRQcm9jZXNzaW5nIHtib29sZWFufSAtIGRlZmF1bHQ6IGZhbHNlIC0gZW5hYmxlcyB0aGUgZXZlbnQgcHJvY2Vzc2luZ1xuICpcbiAqIEByZXR1cm4ge1Byb21pc2VbXX1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjMuMFxuICogQHRocm93cyB7VHlwZUVycm9yfSBlbGVtZW50cyBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgTm9kZUxpc3QsIEhUTUxFbGVtZW50IG9yIFNldFxuICogQHRocm93cyB7VHlwZUVycm9yfSB0aGUgY29udGV4dCBvZiB0aGUgZnVuY3Rpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHN5bWJvbCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFN5bWJvbFxuICovXG5mdW5jdGlvbiBhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudChlbGVtZW50cywgc3ltYm9sLCBvYmplY3QsIGNvbmZpZyA9IHt9KSB7XG5cdGlmICghKHRoaXMgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XCJ0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnRcIixcblx0XHQpO1xuXHR9XG5cblx0aWYgKCEodHlwZW9mIHN5bWJvbCA9PT0gXCJzeW1ib2xcIikpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwic3ltYm9sIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgU3ltYm9sXCIpO1xuXHR9XG5cblx0Y29uc3QgdXBkYXRlcnMgPSBuZXcgU2V0KCk7XG5cblx0aWYgKGVsZW1lbnRzIGluc3RhbmNlb2YgTm9kZUxpc3QpIHtcblx0XHRlbGVtZW50cyA9IG5ldyBTZXQoWy4uLmVsZW1lbnRzXSk7XG5cdH0gZWxzZSBpZiAoZWxlbWVudHMgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGVsZW1lbnRzID0gbmV3IFNldChbZWxlbWVudHNdKTtcblx0fSBlbHNlIGlmIChlbGVtZW50cyBpbnN0YW5jZW9mIFNldCkge1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRgZWxlbWVudHMgaXMgbm90IGEgdmFsaWQgdHlwZS4gKGFjdHVhbDogJHt0eXBlb2YgZWxlbWVudHN9KWAsXG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0IHJlc3VsdCA9IFtdO1xuXG5cdGNvbnN0IHVwZGF0ZXJDYWxsYmFja3MgPSBbXTtcblx0Y29uc3QgY2IgPSB0aGlzPy5bdXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbF07XG5cdGlmICh0aGlzIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgdHlwZW9mIGNiID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRjb25zdCBjYWxsYmFja3MgPSBjYi5jYWxsKHRoaXMpO1xuXHRcdGlmICh0eXBlb2YgY2FsbGJhY2tzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRmb3IgKGNvbnN0IFtuYW1lLCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoY2FsbGJhY2tzKSkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHR1cGRhdGVyQ2FsbGJhY2tzLnB1c2goW25hbWUsIGNhbGxiYWNrXSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0XHRcdGBvblVwZGF0ZXJQaXBlQ2FsbGJhY2tzOiAke25hbWV9IGlzIG5vdCBhIGZ1bmN0aW9uYCxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XHRgb25VcGRhdGVyUGlwZUNhbGxiYWNrcyBkbyBub3QgcmV0dXJuIGFuIG9iamVjdCB3aXRoIGZ1bmN0aW9uc2AsXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm47XG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KSByZXR1cm47XG5cblx0XHRjb25zdCB1ID0gbmV3IFVwZGF0ZXIoZWxlbWVudCwgb2JqZWN0KTtcblx0XHR1cGRhdGVycy5hZGQodSk7XG5cblx0XHRpZiAodXBkYXRlckNhbGxiYWNrcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKGNvbnN0IFtuYW1lLCBjYWxsYmFja10gb2YgdXBkYXRlckNhbGxiYWNrcykge1xuXHRcdFx0XHR1LnNldENhbGxiYWNrKG5hbWUsIGNhbGxiYWNrKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXN1bHQucHVzaChcblx0XHRcdHUucnVuKCkudGhlbigoKSA9PiB7XG5cdFx0XHRcdGlmIChjb25maWcuZXZlbnRQcm9jZXNzaW5nID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0dS5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB1O1xuXHRcdFx0fSksXG5cdFx0KTtcblx0fSk7XG5cblx0aWYgKHVwZGF0ZXJzLnNpemUgPiAwKSB7XG5cdFx0YWRkVG9PYmplY3RMaW5rKHRoaXMsIHN5bWJvbCwgdXBkYXRlcnMpO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBnZXRTbG90dGVkRWxlbWVudHMsIGdldFNsb3R0ZWROb2RlcyB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge1N0cmluZ3x1bmRlZmluZWR9IHF1ZXJ5XG4gKiBAcGFyYW0ge1N0cmluZ3x1bmRlZmluZWR8bnVsbH0gbmFtZSBuYW1lIG9mIHRoZSBzbG90IChpZiB0aGUgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCwgYWxsIHNsb3RzIGFyZSBzZWFyY2hlZCwgaWYgdGhlIHBhcmFtZXRlciBoYXMgdGhlIHZhbHVlIG51bGwsIGFsbCBzbG90cyB3aXRob3V0IGEgbmFtZSBhcmUgc2VhcmNoZWQuIGlmIGEgc3RyaW5nIGlzIHNwZWNpZmllZCwgdGhlIHNsb3RzIHdpdGggdGhpcyBuYW1lIGFyZSBzZWFyY2hlZC4pXG4gKiBAcmV0dXJuIHsqfVxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy4zMy4wXG4gKiBAdGhyb3dzIHtFcnJvcn0gcXVlcnkgbXVzdCBiZSBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRTbG90dGVkTm9kZXMocXVlcnksIG5hbWUpIHtcblx0Y29uc3QgcmVzdWx0ID0gbmV3IFNldCgpO1xuXG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGxldCBzZWxlY3RvciA9IFwic2xvdFwiO1xuXHRpZiAobmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0aWYgKG5hbWUgPT09IG51bGwpIHtcblx0XHRcdHNlbGVjdG9yICs9IFwiOm5vdChbbmFtZV0pXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGVjdG9yICs9IGBbbmFtZT0ke3ZhbGlkYXRlU3RyaW5nKG5hbWUpfV1gO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHNsb3RzID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuXG5cdGZvciAoY29uc3QgWywgc2xvdF0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdHMpKSB7XG5cdFx0c2xvdC5hc3NpZ25lZE5vZGVzKCkuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuXHRcdFx0aWYgKG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzU3RyaW5nKHF1ZXJ5KSkge1xuXHRcdFx0XHRub2RlLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpLmZvckVhY2goZnVuY3Rpb24gKG4pIHtcblx0XHRcdFx0XHRyZXN1bHQuYWRkKG4pO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZiAobm9kZS5tYXRjaGVzKHF1ZXJ5KSkge1xuXHRcdFx0XHRcdHJlc3VsdC5hZGQobm9kZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAocXVlcnkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJxdWVyeSBtdXN0IGJlIGEgc3RyaW5nXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmVzdWx0LmFkZChub2RlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfHVuZGVmaW5lZH0gcXVlcnlcbiAqIEBwYXJhbSB7U3RyaW5nfHVuZGVmaW5lZHxudWxsfSBuYW1lIG5hbWUgb2YgdGhlIHNsb3QgKGlmIHRoZSBwYXJhbWV0ZXIgaXMgdW5kZWZpbmVkLCBhbGwgc2xvdHMgYXJlIHNlYXJjaGVkLCBpZiB0aGUgcGFyYW1ldGVyIGhhcyB0aGUgdmFsdWUgbnVsbCwgYWxsIHNsb3RzIHdpdGhvdXQgYSBuYW1lIGFyZSBzZWFyY2hlZC4gaWYgYSBzdHJpbmcgaXMgc3BlY2lmaWVkLCB0aGUgc2xvdHMgd2l0aCB0aGlzIG5hbWUgYXJlIHNlYXJjaGVkLilcbiAqIEByZXR1cm4geyp9XG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIzLjBcbiAqIEB0aHJvd3Mge0Vycm9yfSBxdWVyeSBtdXN0IGJlIGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldFNsb3R0ZWRFbGVtZW50cyhxdWVyeSwgbmFtZSkge1xuXHRjb25zdCByZXN1bHQgPSBuZXcgU2V0KCk7XG5cblx0aWYgKCEodGhpcy5zaGFkb3dSb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCkpIHtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0bGV0IHNlbGVjdG9yID0gXCJzbG90XCI7XG5cdGlmIChuYW1lICE9PSB1bmRlZmluZWQpIHtcblx0XHRpZiAobmFtZSA9PT0gbnVsbCkge1xuXHRcdFx0c2VsZWN0b3IgKz0gXCI6bm90KFtuYW1lXSlcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c2VsZWN0b3IgKz0gYFtuYW1lPSR7dmFsaWRhdGVTdHJpbmcobmFtZSl9XWA7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc2xvdHMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cblx0Zm9yIChjb25zdCBbLCBzbG90XSBvZiBPYmplY3QuZW50cmllcyhzbG90cykpIHtcblx0XHRzbG90LmFzc2lnbmVkRWxlbWVudHMoKS5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdCEobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSAmJlxuXHRcdFx0XHQhKG5vZGUgaW5zdGFuY2VvZiBTVkdFbGVtZW50KSAmJlxuXHRcdFx0XHQhKG5vZGUgaW5zdGFuY2VvZiBNYXRoTUxFbGVtZW50KVxuXHRcdFx0KVxuXHRcdFx0XHRyZXR1cm47XG5cblx0XHRcdGlmIChpc1N0cmluZyhxdWVyeSkpIHtcblx0XHRcdFx0aWYgKHF1ZXJ5Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRub2RlLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpLmZvckVhY2goZnVuY3Rpb24gKG4pIHtcblx0XHRcdFx0XHRcdHJlc3VsdC5hZGQobik7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRpZiAobm9kZS5tYXRjaGVzKHF1ZXJ5KSkge1xuXHRcdFx0XHRcdFx0cmVzdWx0LmFkZChub2RlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVzdWx0LmFkZChub2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChxdWVyeSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInF1ZXJ5IG11c3QgYmUgYSBzdHJpbmcgYW5kIG5vdCBlbXB0eVwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdC5hZGQobm9kZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmV4cG9ydCB7IGV4dHJhY3RLZXlzIH07XG5cbi8qKlxuICogRXh0cmFjdHMgdGhlIGtleXMgZnJvbSB0aGUgZ2l2ZW4gb2JqZWN0IGFuZCByZXR1cm5zIGEgbWFwIHdpdGggdGhlIGtleXMgYW5kIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtvYmplY3R9IG9ialxuICogQHBhcmFtIHtzdHJpbmd9IGtleVByZWZpeFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVNlcGFyYXRvclxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlU2VwYXJhdG9yXG4gKiBAcmV0dXJuIHtNYXA8YW55LCBhbnk+fVxuICovXG5mdW5jdGlvbiBleHRyYWN0S2V5cyhcblx0b2JqLFxuXHRrZXlQcmVmaXggPSBcIlwiLFxuXHRrZXlTZXBhcmF0b3IgPSBcIi1cIixcblx0dmFsdWVTZXBhcmF0b3IgPSBcIi5cIixcbikge1xuXHRjb25zdCByZXN1bHRNYXAgPSBuZXcgTWFwKCk7XG5cblx0ZnVuY3Rpb24gaGVscGVyKGN1cnJlbnRPYmosIGN1cnJlbnRLZXlQcmVmaXgsIGN1cnJlbnRWYWx1ZVByZWZpeCkge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIGN1cnJlbnRPYmopIHtcblx0XHRcdGlmIChcblx0XHRcdFx0Y3VycmVudE9ialtrZXldICE9PSBudWxsICYmXG5cdFx0XHRcdHR5cGVvZiBjdXJyZW50T2JqW2tleV0gPT09IFwib2JqZWN0XCIgJiZcblx0XHRcdFx0IUFycmF5LmlzQXJyYXkoY3VycmVudE9ialtrZXldKVxuXHRcdFx0KSB7XG5cdFx0XHRcdGNvbnN0IG5ld0tleVByZWZpeCA9IGN1cnJlbnRLZXlQcmVmaXhcblx0XHRcdFx0XHQ/IGN1cnJlbnRLZXlQcmVmaXggKyBrZXlTZXBhcmF0b3IgKyBrZXkudG9Mb3dlckNhc2UoKVxuXHRcdFx0XHRcdDoga2V5LnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdGNvbnN0IG5ld1ZhbHVlUHJlZml4ID0gY3VycmVudFZhbHVlUHJlZml4XG5cdFx0XHRcdFx0PyBjdXJyZW50VmFsdWVQcmVmaXggKyB2YWx1ZVNlcGFyYXRvciArIGtleVxuXHRcdFx0XHRcdDoga2V5O1xuXHRcdFx0XHRoZWxwZXIoY3VycmVudE9ialtrZXldLCBuZXdLZXlQcmVmaXgsIG5ld1ZhbHVlUHJlZml4KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGZpbmFsS2V5ID0gY3VycmVudEtleVByZWZpeFxuXHRcdFx0XHRcdD8gY3VycmVudEtleVByZWZpeCArIGtleVNlcGFyYXRvciArIGtleS50b0xvd2VyQ2FzZSgpXG5cdFx0XHRcdFx0OiBrZXkudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0Y29uc3QgZmluYWxWYWx1ZSA9IGN1cnJlbnRWYWx1ZVByZWZpeFxuXHRcdFx0XHRcdD8gY3VycmVudFZhbHVlUHJlZml4ICsgdmFsdWVTZXBhcmF0b3IgKyBrZXlcblx0XHRcdFx0XHQ6IGtleTtcblx0XHRcdFx0cmVzdWx0TWFwLnNldChmaW5hbEtleSwgZmluYWxWYWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aGVscGVyKG9iaiwga2V5UHJlZml4LCBrZXlQcmVmaXgpO1xuXHRyZXR1cm4gcmVzdWx0TWFwO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHtcblx0aXNCb29sZWFuLFxuXHRpc1N0cmluZyxcblx0aXNPYmplY3QsXG5cdGlzQXJyYXksXG5cdGlzRnVuY3Rpb24sXG5cdGlzSW50ZWdlcixcbn0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgZXh0cmFjdEtleXMgfSBmcm9tIFwiLi9leHRyYWN0LWtleXMubWpzXCI7XG5cbmV4cG9ydCB7IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMgfTtcblxuLyoqXG4gKiBJbml0aWFsaXplcyB0aGUgZ2l2ZW4gb3B0aW9ucyBvYmplY3QgYmFzZWQgb24gdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGN1cnJlbnQgRE9NIGVsZW1lbnQuXG4gKiBUaGUgZnVuY3Rpb24gbG9va3MgZm9yIGF0dHJpYnV0ZXMgd2l0aCB0aGUgcHJlZml4ICdkYXRhLW1vbnN0ZXItb3B0aW9uLScsIGFuZCBtYXBzIHRoZW0gdG9cbiAqIHByb3BlcnRpZXMgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LiBJdCByZXBsYWNlcyB0aGUgZGFzaGVzIHdpdGggZG90cyB0byBmb3JtIHRoZSBwcm9wZXJ0eSBwYXRoLlxuICogRm9yIGV4YW1wbGUsIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJyBtYXBzIHRvIHRoZSAndXJsJyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKlxuICogV2l0aCB0aGUgbWFwcGluZyBwYXJhbWV0ZXIsIHRoZSBhdHRyaWJ1dGUgdmFsdWUgY2FuIGJlIG1hcHBlZCB0byBhIGRpZmZlcmVudCB2YWx1ZS5cbiAqIEZvciBleGFtcGxlLCB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLWZvbycgbWFwcyB0byB0aGUgJ2JhcicgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICpcbiAqIFRoZSBtYXBwaW5nIG9iamVjdCB3b3VsZCBsb29rIGxpa2UgdGhpczpcbiAqXG4gKiB7XG4gKiAgICAnZm9vJzogKHZhbHVlKSA9PiB2YWx1ZSArICdiYXInXG4gKiAgICAvLyB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi1mb28nIGlzIGFwcGVuZGVkIHdpdGggJ2JhcidcbiAqICAgIC8vIGFuZCBhc3NpZ25lZCB0byB0aGUgJ2JhcicgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICogICAgLy8gZS5nLiA8ZGl2IGRhdGEtbW9uc3Rlci1vcHRpb24tZm9vPVwiZm9vXCI+PC9kaXY+XG4gKiAgICAnYmFyLmJheic6ICh2YWx1ZSkgPT4gdmFsdWUgKyAnYmFyJ1xuICogICAgLy8gdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tYmFyLWJheicgaXMgYXBwZW5kZWQgd2l0aCAnYmFyJ1xuICogICAgLy8gYW5kIGFzc2lnbmVkIHRvIHRoZSAnYmFyLmJheicgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICogICAgLy8gZS5nLiA8ZGl2IGRhdGEtbW9uc3Rlci1vcHRpb24tYmFyLWJhej1cImZvb1wiPjwvZGl2PlxuICogfVxuICpcbiAqIEFycmF5IHZhbHVlcyBoYXZlIHRvIGJlIHNlcGFyYXRlZCBieSAnOjonLlxuICpcbiAqIEBzaW5jZSAzLjM4LjBcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBUaGUgRE9NIGVsZW1lbnQgdG8gYmUgdXNlZCBhcyB0aGUgc291cmNlIG9mIHRoZSBhdHRyaWJ1dGVzLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgdG8gYmUgaW5pdGlhbGl6ZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwcGluZyAtIEEgbWFwcGluZyBiZXR3ZWVuIHRoZSBhdHRyaWJ1dGUgdmFsdWUgYW5kIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXggLSBUaGUgcHJlZml4IG9mIHRoZSBhdHRyaWJ1dGVzIHRvIGJlIGNvbnNpZGVyZWQuXG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gVGhlIGluaXRpYWxpemVkIG9wdGlvbnMgb2JqZWN0LlxuICogQHRoaXMgSFRNTEVsZW1lbnQgLSBUaGUgY29udGV4dCBvZiB0aGUgRE9NIGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoXG5cdGVsZW1lbnQsXG5cdG9wdGlvbnMsXG5cdG1hcHBpbmcgPSB7fSxcblx0cHJlZml4ID0gXCJkYXRhLW1vbnN0ZXItb3B0aW9uLVwiLFxuKSB7XG5cdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHJldHVybiBvcHRpb25zO1xuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlcygpKSByZXR1cm4gb3B0aW9ucztcblxuXHRjb25zdCBrZXlNYXAgPSBleHRyYWN0S2V5cyhvcHRpb25zKTtcblx0Y29uc3QgZmluZGVyID0gbmV3IFBhdGhmaW5kZXIob3B0aW9ucyk7XG5cblx0ZWxlbWVudC5nZXRBdHRyaWJ1dGVOYW1lcygpLmZvckVhY2goKG5hbWUpID0+IHtcblx0XHRpZiAoIW5hbWUuc3RhcnRzV2l0aChwcmVmaXgpKSByZXR1cm47XG5cblx0XHQvLyBjaGVjayBpZiB0aGUgYXR0cmlidXRlIG5hbWUgaXMgYSB2YWxpZCBvcHRpb24uXG5cdFx0Ly8gdGhlIG1hcHBpbmcgYmV0d2VlbiB0aGUgYXR0cmlidXRlIGlzIHNpbXBsZS4gVGhlIGRhc2ggaXMgcmVwbGFjZWQgYnkgYSBkb3QuXG5cdFx0Ly8gZS5nLiBkYXRhLW1vbnN0ZXItdXJsID0+IHVybFxuXHRcdGNvbnN0IG9wdGlvbk5hbWUgPSBrZXlNYXAuZ2V0KG5hbWUuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkpO1xuXHRcdGlmICghZmluZGVyLmV4aXN0cyhvcHRpb25OYW1lKSkgcmV0dXJuO1xuXG5cdFx0aWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKG5hbWUpKSB7XG5cdFx0XHRsZXQgdmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKTtcblx0XHRcdGlmIChcblx0XHRcdFx0bWFwcGluZy5oYXNPd25Qcm9wZXJ0eShvcHRpb25OYW1lKSAmJlxuXHRcdFx0XHRpc0Z1bmN0aW9uKG1hcHBpbmdbb3B0aW9uTmFtZV0pXG5cdFx0XHQpIHtcblx0XHRcdFx0dmFsdWUgPSBtYXBwaW5nW29wdGlvbk5hbWVdKHZhbHVlKTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IG9wdGlvblZhbHVlID0gZmluZGVyLmdldFZpYShvcHRpb25OYW1lKTtcblx0XHRcdGlmIChvcHRpb25WYWx1ZSA9PT0gbnVsbCB8fCBvcHRpb25WYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdG9wdGlvblZhbHVlID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vY29uc3QgdHlwZU9mT3B0aW9uVmFsdWUgPSB0eXBlb2Ygb3B0aW9uVmFsdWU7XG5cdFx0XHRpZiAob3B0aW9uVmFsdWUgPT09IG51bGwgfHwgb3B0aW9uVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR2YWx1ZSA9IG51bGw7XG5cdFx0XHR9IGVsc2UgaWYgKGlzQm9vbGVhbihvcHRpb25WYWx1ZSkpIHtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZSA9PT0gXCJ0cnVlXCI7XG5cdFx0XHR9IGVsc2UgaWYgKGlzSW50ZWdlcihvcHRpb25WYWx1ZSkpIHtcblx0XHRcdFx0dmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXHRcdFx0fSBlbHNlIGlmIChpc1N0cmluZyhvcHRpb25WYWx1ZSkpIHtcblx0XHRcdFx0dmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuXHRcdFx0fSBlbHNlIGlmIChpc09iamVjdChvcHRpb25WYWx1ZSkpIHtcblx0XHRcdFx0dmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoaXNBcnJheShvcHRpb25WYWx1ZSkpIHtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZS5zcGxpdChcIjo6XCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsdWUgPSBvcHRpb25WYWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0ZmluZGVyLnNldFZpYShvcHRpb25OYW1lLCB2YWx1ZSk7XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uLy4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCB9IGZyb20gXCIuLi9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgZXh0cmFjdEtleXMgfSBmcm9tIFwiLi9leHRyYWN0LWtleXMubWpzXCI7XG5cbmV4cG9ydCB7IHNldE9wdGlvbkZyb21BdHRyaWJ1dGUgfTtcblxuLyoqXG4gKiBTZXQgdGhlIGdpdmVuIG9wdGlvbnMgb2JqZWN0IGJhc2VkIG9uIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBjdXJyZW50IERPTSBlbGVtZW50LlxuICogVGhlIGZ1bmN0aW9uIGxvb2tzIGZvciBhdHRyaWJ1dGVzIHdpdGggdGhlIHByZWZpeCAnZGF0YS1tb25zdGVyLW9wdGlvbi0nLCBhbmQgbWFwcyB0aGVtIHRvXG4gKiBwcm9wZXJ0aWVzIGluIHRoZSBvcHRpb25zIG9iamVjdC4gSXQgcmVwbGFjZXMgdGhlIGRhc2hlcyB3aXRoIGRvdHMgdG8gZm9ybSB0aGUgcHJvcGVydHkgcGF0aC5cbiAqIEZvciBleGFtcGxlLCB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLXVybCcgbWFwcyB0byB0aGUgJ3VybCcgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICpcbiAqIFdpdGggdGhlIG1hcHBpbmcgcGFyYW1ldGVyLCB0aGUgYXR0cmlidXRlIHZhbHVlIGNhbiBiZSBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgdmFsdWUuXG4gKiBGb3IgZXhhbXBsZSwgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi1mb28nIG1hcHMgdG8gdGhlICdiYXInIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqXG4gKiBUaGUgbWFwcGluZyBvYmplY3Qgd291bGQgbG9vayBsaWtlIHRoaXM6XG4gKiB7XG4gKiAgICAnZm9vJzogKHZhbHVlKSA9PiB2YWx1ZSArICdiYXInXG4gKiAgICAvLyB0aGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi1mb28nIGlzIGFwcGVuZGVkIHdpdGggJ2JhcidcbiAqICAgIC8vIGFuZCBhc3NpZ25lZCB0byB0aGUgJ2JhcicgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICogICAgLy8gZS5nLiA8ZGl2IGRhdGEtbW9uc3Rlci1vcHRpb24tZm9vPVwiZm9vXCI+PC9kaXY+XG4gKiAgICAnYmFyLmJheic6ICh2YWx1ZSkgPT4gdmFsdWUgKyAnYmFyJ1xuICogICAgLy8gdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tYmFyLWJheicgaXMgYXBwZW5kZWQgd2l0aCAnYmFyJ1xuICogICAgLy8gYW5kIGFzc2lnbmVkIHRvIHRoZSAnYmFyLmJheicgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICogICAgLy8gZS5nLiA8ZGl2IGRhdGEtbW9uc3Rlci1vcHRpb24tYmFyLWJhej1cImZvb1wiPjwvZGl2PlxuICogfVxuICpcbiAqIEBzaW5jZSAzLjQ1LjBcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgLSBUaGUgRE9NIGVsZW1lbnQgdG8gYmUgdXNlZCBhcyB0aGUgc291cmNlIG9mIHRoZSBhdHRyaWJ1dGVzLlxuICogQHBhcmFtIHtPYmplY3R9IG5hbWUgLSBUaGUgYXR0cmlidXRlIG9iamVjdCB0byBiZSB1c2VkIGFzIHRoZSBzb3VyY2Ugb2YgdGhlIGF0dHJpYnV0ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCB0byBiZSBpbml0aWFsaXplZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXBwaW5nIC0gQSBtYXBwaW5nIGJldHdlZW4gdGhlIGF0dHJpYnV0ZSB2YWx1ZSBhbmQgdGhlIHByb3BlcnR5IHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCAtIFRoZSBwcmVmaXggb2YgdGhlIGF0dHJpYnV0ZXMgdG8gYmUgY29uc2lkZXJlZC5cbiAqIEByZXR1cm4ge09iamVjdH0gLSBUaGUgaW5pdGlhbGl6ZWQgb3B0aW9ucyBvYmplY3QuXG4gKiBAdGhpcyBIVE1MRWxlbWVudCAtIFRoZSBjb250ZXh0IG9mIHRoZSBET00gZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gc2V0T3B0aW9uRnJvbUF0dHJpYnV0ZShcblx0ZWxlbWVudCxcblx0bmFtZSxcblx0b3B0aW9ucyxcblx0bWFwcGluZyA9IHt9LFxuXHRwcmVmaXggPSBcImRhdGEtbW9uc3Rlci1vcHRpb24tXCIsXG4pIHtcblx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuIG9wdGlvbnM7XG5cdGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkpIHJldHVybiBvcHRpb25zO1xuXG5cdGNvbnN0IGtleU1hcCA9IGV4dHJhY3RLZXlzKG9wdGlvbnMpO1xuXHRjb25zdCBmaW5kZXIgPSBuZXcgUGF0aGZpbmRlcihvcHRpb25zKTtcblxuXHQvLyBjaGVjayBpZiB0aGUgYXR0cmlidXRlIG5hbWUgaXMgYSB2YWxpZCBvcHRpb24uXG5cdC8vIHRoZSBtYXBwaW5nIGJldHdlZW4gdGhlIGF0dHJpYnV0ZSBpcyBzaW1wbGUuIFRoZSBkYXNoIGlzIHJlcGxhY2VkIGJ5IGEgZG90LlxuXHQvLyBlLmcuIGRhdGEtbW9uc3Rlci11cmwgPT4gdXJsXG5cdGNvbnN0IG9wdGlvbk5hbWUgPSBrZXlNYXAuZ2V0KG5hbWUuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkpO1xuXHRpZiAoIWZpbmRlci5leGlzdHMob3B0aW9uTmFtZSkpIHJldHVybjtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKG5hbWUpKSB7XG5cdFx0cmV0dXJuIG9wdGlvbnM7XG5cdH1cblxuXHRsZXQgdmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShuYW1lKTtcblx0aWYgKG1hcHBpbmcuaGFzT3duUHJvcGVydHkob3B0aW9uTmFtZSkgJiYgaXNGdW5jdGlvbihtYXBwaW5nW29wdGlvbk5hbWVdKSkge1xuXHRcdHZhbHVlID0gbWFwcGluZ1tvcHRpb25OYW1lXSh2YWx1ZSk7XG5cdH1cblxuXHRjb25zdCB0eXBlT2ZPcHRpb25WYWx1ZSA9IHR5cGVvZiBmaW5kZXIuZ2V0VmlhKG9wdGlvbk5hbWUpO1xuXHRpZiAodHlwZU9mT3B0aW9uVmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG5cdFx0dmFsdWUgPSB2YWx1ZSA9PT0gXCJ0cnVlXCI7XG5cdH0gZWxzZSBpZiAodHlwZU9mT3B0aW9uVmFsdWUgPT09IFwibnVtYmVyXCIpIHtcblx0XHR2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG5cdH0gZWxzZSBpZiAodHlwZU9mT3B0aW9uVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHR2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG5cdH0gZWxzZSBpZiAodHlwZU9mT3B0aW9uVmFsdWUgPT09IFwib2JqZWN0XCIpIHtcblx0XHR2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUpO1xuXHR9XG5cblx0ZmluZGVyLnNldFZpYShvcHRpb25OYW1lLCB2YWx1ZSk7XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzIH0gZnJvbSBcIi4vdXRpbC5tanNcIjtcbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgRm9ybWF0dGVyIH0gZnJvbSBcIi4uL3RleHQvZm9ybWF0dGVyLm1qc1wiO1xuXG5pbXBvcnQgeyBwYXJzZURhdGFVUkwgfSBmcm9tIFwiLi4vdHlwZXMvZGF0YXVybC5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQge1xuXHRpc0FycmF5LFxuXHRpc0Z1bmN0aW9uLFxuXHRpc0l0ZXJhYmxlLFxuXHRpc09iamVjdCxcblx0aXNTdHJpbmcsXG59IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtcblx0dmFsaWRhdGVGdW5jdGlvbixcblx0dmFsaWRhdGVJbnN0YW5jZSxcblx0dmFsaWRhdGVPYmplY3QsXG59IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGNsb25lIH0gZnJvbSBcIi4uL3V0aWwvY2xvbmUubWpzXCI7XG5pbXBvcnQge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbixcblx0Z2V0TGlua2VkT2JqZWN0cyxcblx0aGFzT2JqZWN0TGluayxcbn0gZnJvbSBcIi4vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9ESVNBQkxFRCxcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX09QVElPTlMsXG5cdEFUVFJJQlVURV9JTklUX0NBTExCQUNLLFxuXHRBVFRSSUJVVEVfT1BUSU9OU19TRUxFQ1RPUixcblx0QVRUUklCVVRFX1NDUklQVF9IT1NULFxuXHRjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wsXG5cdGluaXRDb250cm9sQ2FsbGJhY2tOYW1lLFxufSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBmaW5kRG9jdW1lbnRUZW1wbGF0ZSwgVGVtcGxhdGUgfSBmcm9tIFwiLi90ZW1wbGF0ZS5tanNcIjtcbmltcG9ydCB7IGFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50IH0gZnJvbSBcIi4vdXBkYXRlci5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50VHJhbnNsYXRpb25zIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRpb25zLm1qc1wiO1xuaW1wb3J0IHsgZ2V0U2xvdHRlZEVsZW1lbnRzIH0gZnJvbSBcIi4vc2xvdHRlZC5tanNcIjtcbmltcG9ydCB7IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMgfSBmcm9tIFwiLi91dGlsL2luaXQtb3B0aW9ucy1mcm9tLWF0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBzZXRPcHRpb25Gcm9tQXR0cmlidXRlIH0gZnJvbSBcIi4vdXRpbC9zZXQtb3B0aW9uLWZyb20tYXR0cmlidXRlLm1qc1wiO1xuXG5leHBvcnQge1xuXHRDdXN0b21FbGVtZW50LFxuXHRpbml0TWV0aG9kU3ltYm9sLFxuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0YXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcblx0Z2V0U2xvdHRlZEVsZW1lbnRzLFxuXHR1cGRhdGVyVHJhbnNmb3JtZXJNZXRob2RzU3ltYm9sLFxufTtcblxuLyoqXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbml0TWV0aG9kU3ltYm9sID0gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAaW5pdE1ldGhvZFN5bWJvbFwiKTtcblxuLyoqXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhc3NlbWJsZU1ldGhvZFN5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEBhc3NlbWJsZU1ldGhvZFN5bWJvbFwiLFxuKTtcblxuLyoqXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB1cGRhdGVyVHJhbnNmb3JtZXJNZXRob2RzU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2RvbS9AQHVwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2xcIixcbik7XG5cbi8qKlxuICogdGhpcyBzeW1ib2wgaG9sZHMgdGhlIGF0dHJpYnV0ZSBvYnNlcnZlciBjYWxsYmFja3MuIFRoZSBrZXkgaXMgdGhlIGF0dHJpYnV0ZSBuYW1lLlxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAYXR0cmlidXRlT2JzZXJ2ZXJcIixcbik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGF0dHJpYnV0ZU11dGF0aW9uT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEBtdXRhdGlvbk9ic2VydmVyXCIsXG4pO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB1cGRhdGVDbG9uZURhdGFTeW1ib2wgPSBTeW1ib2woXCJAc2NodWthaS9tb25zdGVyL2RvbS9AQHVwZGF0ZUNsb25lRGF0YVwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc2NyaXB0SG9zdEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJzY3JpcHRIb3N0RWxlbWVudFwiKTtcblxuLyoqXG4gKiBUaGUgYEN1c3RvbUVsZW1lbnRgIGNsYXNzIHByb3ZpZGVzIGEgd2F5IHRvIGRlZmluZSBhIG5ldyBIVE1MIGVsZW1lbnQgdXNpbmcgdGhlIHBvd2VyIG9mIEN1c3RvbSBFbGVtZW50cy5cbiAqXG4gKiAqKklNUE9SVEFOVDoqKiBBZnRlciBkZWZpbmluZyBhIGBDdXN0b21FbGVtZW50YCwgdGhlIGByZWdpc3RlckN1c3RvbUVsZW1lbnRgIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgY2xhc3MgbmFtZVxuICogdG8gbWFrZSB0aGUgdGFnIGRlZmluZWQgdmlhIHRoZSBgZ2V0VGFnYCBtZXRob2Qga25vd24gdG8gdGhlIERPTS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGUgb2JqZWN0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKWAgZnVuY3Rpb24uXG4gKlxuICogIyMgU3R5bGluZ1xuICpcbiAqIFRvIGRpc3BsYXkgY3VzdG9tIGVsZW1lbnRzIG9wdGltYWxseSwgdGhlIGA6ZGVmaW5lZGAgcHNldWRvLWNsYXNzIGNhbiBiZSB1c2VkLiBUbyBwcmV2ZW50IGN1c3RvbSBlbGVtZW50cyBmcm9tIGJlaW5nIGRpc3BsYXllZCBhbmQgZmxpY2tlcmluZyB1bnRpbCB0aGUgY29udHJvbCBpcyByZWdpc3RlcmVkLFxuICogaXQgaXMgcmVjb21tZW5kZWQgdG8gY3JlYXRlIGEgQ1NTIGRpcmVjdGl2ZS5cbiAqXG4gKiBJbiB0aGUgc2ltcGxlc3QgY2FzZSwgeW91IGNhbiBzaW1wbHkgaGlkZSB0aGUgY29udHJvbDpcbiAqXG4gKiBgYGBodG1sXG4gKiA8c3R5bGU+XG4gKiBteS1jdXN0b20tZWxlbWVudDpub3QoOmRlZmluZWQpIHtcbiAqICAgICBkaXNwbGF5OiBub25lO1xuICogfVxuICpcbiAqIG15LWN1c3RvbS1lbGVtZW50OmRlZmluZWQge1xuICogICAgIGRpc3BsYXk6IGZsZXg7XG4gKiB9XG4gKiA8L3N0eWxlPlxuICogYGBgXG4gKlxuICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBkaXNwbGF5IGEgbG9hZGVyOlxuICpcbiAqIGBgYGNzc1xuICogbXktY3VzdG9tLWVsZW1lbnQ6bm90KDpkZWZpbmVkKSB7XG4gKiAgICAgZGlzcGxheTogZmxleDtcbiAqICAgICBib3gtc2hhZG93OiAwIDRweCAxMHB4IDAgcmdiYSgzMywgMzMsIDMzLCAwLjE1KTtcbiAqICAgICBib3JkZXItcmFkaXVzOiA0cHg7XG4gKiAgICAgaGVpZ2h0OiAyMDBweDtcbiAqICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gKiAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAqIH1cbiAqXG4gKiBteS1jdXN0b20tZWxlbWVudDpub3QoOmRlZmluZWQpOjpiZWZvcmUge1xuICogICAgIGNvbnRlbnQ6ICcnO1xuICogICAgIGRpc3BsYXk6IGJsb2NrO1xuICogICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAqICAgICBsZWZ0OiAtMTUwcHg7XG4gKiAgICAgdG9wOiAwO1xuICogICAgIGhlaWdodDogMTAwJTtcbiAqICAgICB3aWR0aDogMTUwcHg7XG4gKiAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCB0cmFuc3BhcmVudCAwJSwgI0U4RThFOCA1MCUsIHRyYW5zcGFyZW50IDEwMCUpO1xuICogICAgIGFuaW1hdGlvbjogbG9hZCAxcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSkgaW5maW5pdGU7XG4gKiB9XG4gKlxuICogQGtleWZyYW1lcyBsb2FkIHtcbiAqICAgICBmcm9tIHtcbiAqICAgICAgICAgbGVmdDogLTE1MHB4O1xuICogICAgIH1cbiAqICAgICB0byB7XG4gKiAgICAgICAgIGxlZnQ6IDEwMCU7XG4gKiAgICAgfVxuICogfVxuICpcbiAqIG15LWN1c3RvbS1lbGVtZW50OmRlZmluZWQge1xuICogICAgIGRpc3BsYXk6IGZsZXg7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IEN1c3RvbSBFbGVtZW50cyBjYW4gYmUgZm91bmQgaW4gdGhlIFtNRE4gV2ViIERvY3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1dlYl9Db21wb25lbnRzL1VzaW5nX2N1c3RvbV9lbGVtZW50cykuXG4gKiBBbmQgaW4gdGhlIFtIVE1MIFN0YW5kYXJkXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jdXN0b20tZWxlbWVudHMuaHRtbCNjdXN0b20tZWxlbWVudHMpIG9yIGluIHRoZSBbV0hBVFdHIFdpa2ldKGh0dHBzOi8vd2lraS53aGF0d2cub3JnL3dpa2kvQ3VzdG9tX0VsZW1lbnRzKS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjcuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmFzZSBjbGFzcyBmb3IgSFRNTDUgY3VzdG9tIGNvbnRyb2xzLlxuICovXG5jbGFzcyBDdXN0b21FbGVtZW50IGV4dGVuZHMgSFRNTEVsZW1lbnQge1xuXHQvKipcblx0ICogQSBuZXcgb2JqZWN0IGlzIGNyZWF0ZWQuIEZpcnN0LCB0aGUgYGluaXRPcHRpb25zYCBtZXRob2QgaXMgY2FsbGVkLiBIZXJlIHRoZVxuXHQgKiBvcHRpb25zIGNhbiBiZSBkZWZpbmVkIGluIGRlcml2ZWQgY2xhc3Nlcy4gU3Vic2VxdWVudGx5LCB0aGUgc2hhZG93Um9vdCBpcyBpbml0aWFsaXplZC5cblx0ICpcblx0ICogSU1QT1JUQU5UOiBDdXN0b21Db250cm9scyBpbnN0YW5jZXMgYXJlIG5vdCBjcmVhdGVkIHZpYSB0aGUgY29uc3RydWN0b3IsIGJ1dCBlaXRoZXIgdmlhIGEgdGFnIGluIHRoZSBIVE1MIG9yIHZpYSA8Y29kZT5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCk8L2NvZGU+LlxuXHQgKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9wdGlvbiBhdHRyaWJ1dGUgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIEpTT04gZGVmaW5pdGlvbi5cblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHR0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXSA9IHt9O1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gbmV3IFByb3h5T2JzZXJ2ZXIoe1xuXHRcdFx0b3B0aW9uczogaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyh0aGlzLCBleHRlbmQoe30sIHRoaXMuZGVmYXVsdHMpKSxcblx0XHR9KTtcblx0XHR0aGlzW2luaXRNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdE9wdGlvbk9ic2VydmVyLmNhbGwodGhpcyk7XG5cdFx0dGhpc1tzY3JpcHRIb3N0RWxlbWVudFN5bWJvbF0gPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICpcblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL2N1c3RvbS1lbGVtZW50QEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHdoaWNoIGF0dHJpYnV0ZXMgYXJlIHRvIGJlXG5cdCAqIG1vbml0b3JlZCBieSBgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKClgLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIG1ldGhvZCBpcyBzdGF0aWMuXG5cdCAqIFRoZXJlZm9yZSwgdGhlIGBvYnNlcnZlZEF0dHJpYnV0ZXNgIHByb3BlcnR5IGNhbm5vdCBiZSBjaGFuZ2VkIGR1cmluZyBydW50aW1lLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmdbXX1cblx0ICogQHNpbmNlIDEuMTUuMFxuXHQgKi9cblx0c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBhdHRyaWJ1dGVcblx0ICogQHBhcmFtIGNhbGxiYWNrXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkN1c3RvbUVsZW1lbnR9XG5cdCAqL1xuXHRhZGRBdHRyaWJ1dGVPYnNlcnZlcihhdHRyaWJ1dGUsIGNhbGxiYWNrKSB7XG5cdFx0dmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjayk7XG5cdFx0dGhpc1thdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bYXR0cmlidXRlXSA9IGNhbGxiYWNrO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBhdHRyaWJ1dGVcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uQ3VzdG9tRWxlbWVudH1cblx0ICovXG5cdHJlbW92ZUF0dHJpYnV0ZU9ic2VydmVyKGF0dHJpYnV0ZSkge1xuXHRcdGRlbGV0ZSB0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVthdHRyaWJ1dGVdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgZGVmYXVsdHNgIHByb3BlcnR5IGRlZmluZXMgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBhIGNvbnRyb2wuIElmIHlvdSB3YW50IHRvIG92ZXJyaWRlIHRoZXNlLFxuXHQgKiB5b3UgY2FuIHVzZSB2YXJpb3VzIG1ldGhvZHMsIHdoaWNoIGFyZSBkZXNjcmliZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gYXZhaWxhYmxlIGF0XG5cdCAqIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmdlbmRvY2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfS5cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgYXJlIGxpc3RlZCBiZWxvdzpcblx0ICpcblx0ICogTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2hhZG93Um9vdCBjYW4gYmUgZm91bmQgaW4gdGhlIFtNRE4gV2ViIERvY3NdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L2F0dGFjaFNoYWRvdyksXG5cdCAqIGluIHRoZSBbSFRNTCBTdGFuZGFyZF0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnRzKSBvciBpbiB0aGUgW1dIQVRXRyBXaWtpXShodHRwczovL3dpa2kud2hhdHdnLm9yZy93aWtpL0N1c3RvbV9FbGVtZW50cykuXG5cdCAqXG5cdCAqIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRlbXBsYXRlIGVsZW1lbnQgY2FuIGJlIGZvdW5kIGluIHRoZSBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdGVtcGxhdGUpLlxuXHQgKlxuXHQgKiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzbG90IGVsZW1lbnQgY2FuIGJlIGZvdW5kIGluIHRoZSBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2xvdCkuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGlzYWJsZWQ9ZmFsc2UgU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGNvbnRyb2wgaXMgZGlzYWJsZWQuIFdoZW4gcHJlc2VudCwgaXQgbWFrZXMgdGhlIGVsZW1lbnQgbm9uLW11dGFibGUsIG5vbi1mb2N1c2FibGUsIGFuZCBub24tc3VibWl0dGFibGUgd2l0aCB0aGUgZm9ybS5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHNoYWRvd01vZGU9b3BlbiBTcGVjaWZpZXMgdGhlIG1vZGUgb2YgdGhlIHNoYWRvdyByb290LiBXaGVuIHNldCB0byBgb3BlbmAsIGVsZW1lbnRzIGluIHRoZSBzaGFkb3cgcm9vdCBhcmUgYWNjZXNzaWJsZSBmcm9tIEphdmFTY3JpcHQgb3V0c2lkZSB0aGUgcm9vdCwgd2hpbGUgc2V0dGluZyBpdCB0byBgY2xvc2VkYCBkZW5pZXMgYWNjZXNzIHRvIHRoZSByb290J3Mgbm9kZXMgZnJvbSBKYXZhU2NyaXB0IG91dHNpZGUgaXQuXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZGVsZWdhdGVzRm9jdXM9dHJ1ZSBTcGVjaWZpZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSBjb250cm9sIHdpdGggcmVzcGVjdCB0byBmb2N1c2FiaWxpdHkuIFdoZW4gc2V0IHRvIGB0cnVlYCwgaXQgbWl0aWdhdGVzIGN1c3RvbSBlbGVtZW50IGlzc3VlcyBhcm91bmQgZm9jdXNhYmlsaXR5LiBXaGVuIGEgbm9uLWZvY3VzYWJsZSBwYXJ0IG9mIHRoZSBzaGFkb3cgRE9NIGlzIGNsaWNrZWQsIHRoZSBmaXJzdCBmb2N1c2FibGUgcGFydCBpcyBnaXZlbiBmb2N1cywgYW5kIHRoZSBzaGFkb3cgaG9zdCBpcyBnaXZlbiBhbnkgYXZhaWxhYmxlIDpmb2N1cyBzdHlsaW5nLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFNwZWNpZmllcyB0aGUgdGVtcGxhdGVzIHVzZWQgYnkgdGhlIGNvbnRyb2wuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbj11bmRlZmluZWQgU3BlY2lmaWVzIHRoZSBtYWluIHRlbXBsYXRlIHVzZWQgYnkgdGhlIGNvbnRyb2wuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZU1hcHBpbmcgU3BlY2lmaWVzIHRoZSBtYXBwaW5nIG9mIHRlbXBsYXRlcy5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlRm9ybWF0dGVyIFNwZWNpZmllcyB0aGUgZm9ybWF0dGVyIGZvciB0aGUgdGVtcGxhdGVzLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVGb3JtYXR0ZXIubWFya2VyIFNwZWNpZmllcyB0aGUgbWFya2VyIGZvciB0aGUgdGVtcGxhdGVzLlxuXHQgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSB0ZW1wbGF0ZUZvcm1hdHRlci5tYXJrZXIub3Blbj1udWxsIFNwZWNpZmllcyB0aGUgb3BlbmluZyBtYXJrZXIgZm9yIHRoZSB0ZW1wbGF0ZXMuXG5cdCAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHRlbXBsYXRlRm9ybWF0dGVyLm1hcmtlci5jbG9zZT1udWxsIFNwZWNpZmllcyB0aGUgY2xvc2luZyBtYXJrZXIgZm9yIHRoZSB0ZW1wbGF0ZXMuXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZXZlbnRQcm9jZXNzaW5nPWZhbHNlIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBjb250cm9sIHByb2Nlc3NlcyBldmVudHMuXG5cdCAqIEBzaW5jZSAxLjguMFxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRkaXNhYmxlZDogZmFsc2UsXG5cdFx0XHRzaGFkb3dNb2RlOiBcIm9wZW5cIixcblx0XHRcdGRlbGVnYXRlc0ZvY3VzOiB0cnVlLFxuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IHVuZGVmaW5lZCxcblx0XHRcdH0sXG5cdFx0XHR0ZW1wbGF0ZU1hcHBpbmc6IHt9LFxuXHRcdFx0dGVtcGxhdGVGb3JtYXR0ZXI6IHtcblx0XHRcdFx0bWFya2VyOiB7XG5cdFx0XHRcdFx0b3BlbjogbnVsbCxcblx0XHRcdFx0XHRjbG9zZTogbnVsbCxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cblx0XHRcdGV2ZW50UHJvY2Vzc2luZzogZmFsc2UsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCB1cGRhdGVzIHRoZSBsYWJlbHMgb2YgdGhlIGVsZW1lbnQuXG5cdCAqIFRoZSBsYWJlbHMgYXJlIGRlZmluZWQgaW4gdGhlIG9wdGlvbiBvYmplY3QuXG5cdCAqIFRoZSBrZXkgb2YgdGhlIGxhYmVsIGlzIHVzZWQgdG8gcmV0cmlldmUgdGhlIHRyYW5zbGF0aW9uIGZyb20gdGhlIGRvY3VtZW50LlxuXHQgKiBJZiB0aGUgdHJhbnNsYXRpb24gaXMgZGlmZmVyZW50IGZyb20gdGhlIGxhYmVsLCB0aGUgbGFiZWwgaXMgdXBkYXRlZC5cblx0ICpcblx0ICogQmVmb3JlIHlvdSBjYW4gdXNlIHRoaXMgbWV0aG9kLCB5b3UgbXVzdCBoYXZlIGxvYWRlZCB0aGUgdHJhbnNsYXRpb25zLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5DdXN0b21FbGVtZW50fVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gIENhbm5vdCBmaW5kIGFuIGVsZW1lbnQgd2l0aCB0cmFuc2xhdGlvbnMuIEFkZCBhIHRyYW5zbGF0aW9uIG9iamVjdCB0byB0aGUgZG9jdW1lbnQuXG5cdCAqL1xuXHR1cGRhdGVJMThuKCkge1xuXHRcdGxldCB0cmFuc2xhdGlvbnM7XG5cblx0XHR0cnkge1xuXHRcdFx0dHJhbnNsYXRpb25zID0gZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKCF0cmFuc2xhdGlvbnMpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxhYmVscyA9IHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzXCIpO1xuXHRcdGlmICghKGlzT2JqZWN0KGxhYmVscykgfHwgaXNJdGVyYWJsZShsYWJlbHMpKSkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gbGFiZWxzKSB7XG5cdFx0XHRjb25zdCBkZWYgPSBsYWJlbHNba2V5XTtcblxuXHRcdFx0aWYgKGlzU3RyaW5nKGRlZikpIHtcblx0XHRcdFx0Y29uc3QgdGV4dCA9IHRyYW5zbGF0aW9ucy5nZXRUZXh0KGtleSwgZGVmKTtcblx0XHRcdFx0aWYgKHRleHQgIT09IGRlZikge1xuXHRcdFx0XHRcdHRoaXMuc2V0T3B0aW9uKGBsYWJlbHMuJHtrZXl9YCwgdGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9IGVsc2UgaWYgKGlzT2JqZWN0KGRlZikpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBrIGluIGRlZikge1xuXHRcdFx0XHRcdGNvbnN0IGQgPSBkZWZba107XG5cblx0XHRcdFx0XHRjb25zdCB0ZXh0ID0gdHJhbnNsYXRpb25zLmdldFBsdXJhbFJ1bGVUZXh0KGtleSwgaywgZCk7XG5cdFx0XHRcdFx0aWYgKCFpc1N0cmluZyh0ZXh0KSkge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsYWJlbHMgZGVmaW5pdGlvblwiKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHRleHQgIT09IGQpIHtcblx0XHRcdFx0XHRcdHRoaXMuc2V0T3B0aW9uKGBsYWJlbHMuJHtrZXl9LiR7a31gLCB0ZXh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbGFiZWxzIGRlZmluaXRpb25cIik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBgZ2V0VGFnKClgIG1ldGhvZCByZXR1cm5zIHRoZSB0YWcgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1c3RvbSBlbGVtZW50LiBUaGlzIG1ldGhvZCBzaG91bGQgYmUgb3ZlcndyaXR0ZW5cblx0ICogYnkgdGhlIGRlcml2ZWQgY2xhc3MuXG5cdCAqXG5cdCAqIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBjaGVjayBvbiB0aGUgbmFtZSBvZiB0aGUgdGFnIGluIHRoaXMgY2xhc3MuIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZlxuXHQgKiB0aGUgZGV2ZWxvcGVyIHRvIGFzc2lnbiBhbiBhcHByb3ByaWF0ZSB0YWcgbmFtZS4gSWYgdGhlIG5hbWUgaXMgbm90IHZhbGlkLCB0aGVcblx0ICogYHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCgpYCBtZXRob2Qgd2lsbCBpc3N1ZSBhbiBlcnJvci5cblx0ICpcblx0ICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jdXN0b20tZWxlbWVudHMuaHRtbCN2YWxpZC1jdXN0b20tZWxlbWVudC1uYW1lXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaGlzIG1ldGhvZCBtdXN0IGJlIG92ZXJyaWRkZW4gYnkgdGhlIGRlcml2ZWQgY2xhc3MuXG5cdCAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHRhZyBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3VzdG9tIGVsZW1lbnQuXG5cdCAqIEBzaW5jZSAxLjcuMFxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcIlRoZSBtZXRob2QgYGdldFRhZygpYCBtdXN0IGJlIG92ZXJyaWRkZW4gYnkgdGhlIGRlcml2ZWQgY2xhc3MuXCIsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYGdldENTU1N0eWxlU2hlZXQoKWAgbWV0aG9kIHJldHVybnMgYSBgQ1NTU3R5bGVTaGVldGAgb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgc3R5bGVzIGZvciB0aGUgY3VzdG9tIGVsZW1lbnQuXG5cdCAqIElmIHRoZSBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBgQ1NTU3R5bGVTaGVldGAgY29uc3RydWN0b3IsIHRoZW4gYW4gb2JqZWN0IGNhbiBiZSBidWlsdCB1c2luZyB0aGUgcHJvdmlkZWQgZGV0b3VyLlxuXHQgKlxuXHQgKiBJZiBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZCwgdGhlbiB0aGUgc2hhZG93IHJvb3QgZG9lcyBub3QgcmVjZWl2ZSBhIHN0eWxlc2hlZXQuXG5cdCAqXG5cdCAqIEV4YW1wbGUgdXNhZ2U6XG5cdCAqXG5cdCAqIGBgYGpzXG5cdCAqIGNsYXNzIE15RWxlbWVudCBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQgKiAgIHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHQgKiAgICAgICBjb25zdCBzaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cdCAqICAgICAgIHNoZWV0LnJlcGxhY2VTeW5jKFwicCB7IGNvbG9yOiByZWQ7IH1cIik7XG5cdCAqICAgICAgIHJldHVybiBzaGVldDtcblx0ICogICB9XG5cdCAqIH1cblx0ICogYGBgXG5cdCAqXG5cdCAqIElmIHRoZSBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBgQ1NTU3R5bGVTaGVldGAgY29uc3RydWN0b3IsXG5cdCAqIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgd29ya2Fyb3VuZCB0byBjcmVhdGUgdGhlIHN0eWxlc2hlZXQ6XG5cdCAqXG5cdCAqIGBgYGpzXG5cdCAqIGNvbnN0IGRvYyA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgndGl0bGUnKTtcblx0ICogbGV0IHN0eWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblx0ICogc3R5bGUuaW5uZXJIVE1MID0gXCJwIHsgY29sb3I6IHJlZDsgfVwiO1xuXHQgKiBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKSk7XG5cdCAqIGRvYy5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcblx0ICogcmV0dXJuIGRvYy5zdHlsZVNoZWV0c1swXTtcblx0ICogYGBgXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXR8Q1NTU3R5bGVTaGVldFtdfHN0cmluZ3x1bmRlZmluZWR9IEEgYENTU1N0eWxlU2hlZXRgIG9iamVjdCBvciBhbiBhcnJheSBvZiBzdWNoIG9iamVjdHMgdGhhdCBkZWZpbmUgdGhlIHN0eWxlcyBmb3IgdGhlIGN1c3RvbSBlbGVtZW50LCBvciBgdW5kZWZpbmVkYCBpZiBubyBzdHlsZXNoZWV0IHNob3VsZCBiZSBhcHBsaWVkLlxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBhdHRhY2ggYSBuZXcgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7Q3VzdG9tRWxlbWVudH1cblx0ICovXG5cdGF0dGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGRldGFjaCBhIG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG5cdCAqL1xuXHRkZXRhY2hPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmRldGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0Y29udGFpbnNPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5jb250YWluc09ic2VydmVyKG9ic2VydmVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBuZXN0ZWQgb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHBhdGggYGEuYi5jYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuXHQgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZVxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKiBAc2luY2UgMS4xMC4wXG5cdCAqL1xuXHRnZXRPcHRpb24ocGF0aCwgZGVmYXVsdFZhbHVlID0gdW5kZWZpbmVkKSB7XG5cdFx0bGV0IHZhbHVlO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhbHVlID0gbmV3IFBhdGhmaW5kZXIoXG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLFxuXHRcdFx0KS5nZXRWaWEocGF0aCk7XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgb3B0aW9uIGFuZCBpbmZvcm0gZWxlbWVudHNcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fVxuXHQgKiBAc2luY2UgMS4xNC4wXG5cdCAqL1xuXHRzZXRPcHRpb24ocGF0aCwgdmFsdWUpIHtcblx0XHRuZXcgUGF0aGZpbmRlcih0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJvcHRpb25zXCJdKS5zZXRWaWEoXG5cdFx0XHRwYXRoLFxuXHRcdFx0dmFsdWUsXG5cdFx0KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMS4xNS4wXG5cdCAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gb3B0aW9uc1xuXHQgKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fVxuXHQgKi9cblx0c2V0T3B0aW9ucyhvcHRpb25zKSB7XG5cdFx0aWYgKGlzU3RyaW5nKG9wdGlvbnMpKSB7XG5cdFx0XHRvcHRpb25zID0gcGFyc2VPcHRpb25zSlNPTi5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuXHRcdH1cblx0XHQvLyAyMDI0LTAxLTIxOiByZW1vdmUgdGhpcy5kZWZhdWx0cywgb3RoZXJ3aXNlIGl0IHdpbGwgb3ZlcndyaXRlXG5cdFx0Ly8gdGhlIGN1cnJlbnQgc2V0dGluZ3MgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBtYWRlLlxuXHRcdC8vIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzEzNlxuXHRcdGV4dGVuZCh0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJvcHRpb25zXCJdLCBvcHRpb25zKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIElzIGNhbGxlZCBvbmNlIHZpYSB0aGUgY29uc3RydWN0b3Jcblx0ICpcblx0ICogQHJldHVybiB7Q3VzdG9tRWxlbWVudH1cblx0ICogQHNpbmNlIDEuOC4wXG5cdCAqL1xuXHRbaW5pdE1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uY2Ugd2hlbiB0aGUgb2JqZWN0IGlzIGVxdWlwcGVkIHdpdGggdXBkYXRlIGZvciB0aGUgZHluYW1pYyBjaGFuZ2Ugb2YgdGhlIGRvbS5cblx0ICogVGhlIGZ1bmN0aW9ucyByZXR1cm5lZCBoZXJlIGNhbiBiZSB1c2VkIGFzIHBpcGUgZnVuY3Rpb25zIGluIHRoZSB0ZW1wbGF0ZS5cblx0ICpcblx0ICogSW4gdGhlIGV4YW1wbGUsIHRoZSBmdW5jdGlvbiBgbXktdHJhbnNmb3JtZXJgIGlzIGRlZmluZWQuIEluIHRoZSB0ZW1wbGF0ZSwgeW91IGNhbiB1c2UgaXQgYXMgZm9sbG93czpcblx0ICpcblx0ICogYGBgaHRtbFxuXHQgKiA8bXktZWxlbWVudFxuXHQgKiAgIGRhdGEtbW9uc3Rlci1vcHRpb24tdHJhbnNmb3JtZXI9XCJwYXRoOm15LXZhbHVlIHwgY2FsbDpteS10cmFuc2Zvcm1lclwiPlxuXHQgKiA8L215LWVsZW1lbnQ+XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBUaGUgZnVuY3Rpb24gYG15LXRyYW5zZm9ybWVyYCBpcyBjYWxsZWQgd2l0aCB0aGUgdmFsdWUgb2YgYG15LXZhbHVlYCBhcyBhIHBhcmFtZXRlci5cblx0ICpcblx0ICogYGBganNcblx0ICogY2xhc3MgTXlFbGVtZW50IGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdCAqIFt1cGRhdGVyVHJhbnNmb3JtZXJNZXRob2RzU3ltYm9sXSgpIHtcblx0ICogICAgcmV0dXJuIHtcblx0ICogICAgICAgXCJteS10cmFuc2Zvcm1lclwiOiAodmFsdWUpID0+IHtcblx0ICogICAgICAgICAgIHN3aXRjaCAodHlwZW9mIFdlcnQpIHtcblx0ICogICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcblx0ICogICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgKyBcIiFcIjtcblx0ICogICAgICAgICAgIGNhc2UgXCJaYWhsXCI6XG5cdCAqICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICsgMTtcblx0ICogICAgICAgICAgIGRlZmF1bHQ6XG5cdCAqICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuXHQgKiAgICAgICAgICAgfVxuXHQgKiAgICB9XG5cdCAqICAgIH07XG5cdCAqICB9O1xuXHQgKiAgfVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7b2JqZWN0fVxuXHQgKiBAc2luY2UgMi40My4wXG5cdCAqL1xuXHRbdXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmNlIHdoZW4gdGhlIG9iamVjdCBpcyBpbmNsdWRlZCBpbiB0aGUgRE9NIGZvciB0aGUgZmlyc3QgdGltZS4gSXQgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBhY3Rpb25zOlxuXHQgKlxuXHQgKiA8b2w+XG5cdCAqIDxsaT5FeHRyYWN0cyB0aGUgb3B0aW9ucyBmcm9tIHRoZSBhdHRyaWJ1dGVzIGFuZCB0aGUgc2NyaXB0IHRhZyBvZiB0aGUgZWxlbWVudCBhbmQgc2V0cyB0aGVtLjwvbGk+XG5cdCAqIDxsaT5Jbml0aWFsaXplcyB0aGUgc2hhZG93IHJvb3QgYW5kIGl0cyBDU1Mgc3R5bGVzaGVldCAoaWYgc3BlY2lmaWVkKS48L2xpPlxuXHQgKiA8bGk+SW5pdGlhbGl6ZXMgdGhlIEhUTUwgY29udGVudCBvZiB0aGUgZWxlbWVudC48L2xpPlxuXHQgKiA8bGk+SW5pdGlhbGl6ZXMgdGhlIGN1c3RvbSBlbGVtZW50cyBpbnNpZGUgdGhlIHNoYWRvdyByb290IGFuZCB0aGUgc2xvdHRlZCBlbGVtZW50cy48L2xpPlxuXHQgKiA8bGk+QXR0YWNoZXMgYSBtdXRhdGlvbiBvYnNlcnZlciB0byBvYnNlcnZlIGNoYW5nZXMgdG8gdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGVsZW1lbnQuPC9saT5cblx0ICpcblx0ICogQHJldHVybiB7Q3VzdG9tRWxlbWVudH0gLSBUaGUgdXBkYXRlZCBjdXN0b20gZWxlbWVudC5cblx0ICogQHNpbmNlIDEuOC4wXG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdGxldCBlbGVtZW50cztcblx0XHRsZXQgbm9kZUxpc3Q7XG5cblx0XHQvLyBFeHRyYWN0IG9wdGlvbnMgZnJvbSBhdHRyaWJ1dGVzIGFuZCBzZXQgdGhlbVxuXHRcdGNvbnN0IEF0dHJpYnV0ZU9wdGlvbnMgPSBnZXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMuY2FsbCh0aGlzKTtcblx0XHRpZiAoXG5cdFx0XHRpc09iamVjdChBdHRyaWJ1dGVPcHRpb25zKSAmJlxuXHRcdFx0T2JqZWN0LmtleXMoQXR0cmlidXRlT3B0aW9ucykubGVuZ3RoID4gMFxuXHRcdCkge1xuXHRcdFx0dGhpcy5zZXRPcHRpb25zKEF0dHJpYnV0ZU9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdC8vIEV4dHJhY3Qgb3B0aW9ucyBmcm9tIHNjcmlwdCB0YWcgYW5kIHNldCB0aGVtXG5cdFx0Y29uc3QgU2NyaXB0T3B0aW9ucyA9IGdldE9wdGlvbnNGcm9tU2NyaXB0VGFnLmNhbGwodGhpcyk7XG5cdFx0aWYgKGlzT2JqZWN0KFNjcmlwdE9wdGlvbnMpICYmIE9iamVjdC5rZXlzKFNjcmlwdE9wdGlvbnMpLmxlbmd0aCA+IDApIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9ucyhTY3JpcHRPcHRpb25zKTtcblx0XHR9XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzaGFkb3cgcm9vdCBhbmQgaXRzIENTUyBzdHlsZXNoZWV0XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwic2hhZG93TW9kZVwiLCBmYWxzZSkgIT09IGZhbHNlKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpbml0U2hhZG93Um9vdC5jYWxsKHRoaXMpO1xuXHRcdFx0XHRlbGVtZW50cyA9IHRoaXMuc2hhZG93Um9vdC5jaGlsZE5vZGVzO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpbml0Q1NTU3R5bGVzaGVldC5jYWxsKHRoaXMpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIHRoZSBlbGVtZW50cyBhcmUgbm90IGZvdW5kIGluc2lkZSB0aGUgc2hhZG93IHJvb3QsIGluaXRpYWxpemUgdGhlIEhUTUwgY29udGVudCBvZiB0aGUgZWxlbWVudFxuXHRcdGlmICghKGVsZW1lbnRzIGluc3RhbmNlb2YgTm9kZUxpc3QpKSB7XG5cdFx0XHRpbml0SHRtbENvbnRlbnQuY2FsbCh0aGlzKTtcblx0XHRcdGVsZW1lbnRzID0gdGhpcy5jaGlsZE5vZGVzO1xuXHRcdH1cblxuXHRcdC8vIEluaXRpYWxpemUgdGhlIGN1c3RvbSBlbGVtZW50cyBpbnNpZGUgdGhlIHNoYWRvdyByb290IGFuZCB0aGUgc2xvdHRlZCBlbGVtZW50c1xuXHRcdGluaXRGcm9tQ2FsbGJhY2tIb3N0LmNhbGwodGhpcyk7XG5cdFx0dHJ5IHtcblx0XHRcdG5vZGVMaXN0ID0gbmV3IFNldChbLi4uZWxlbWVudHMsIC4uLmdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMpXSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0bm9kZUxpc3QgPSBlbGVtZW50cztcblx0XHR9XG5cblx0XHR0aGlzW3VwZGF0ZUNsb25lRGF0YVN5bWJvbF0gPSBjbG9uZShcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLFxuXHRcdCk7XG5cblx0XHRjb25zdCBjZmcgPSB7fTtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJldmVudFByb2Nlc3NpbmdcIikgPT09IHRydWUpIHtcblx0XHRcdGNmZy5ldmVudFByb2Nlc3NpbmcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50LmNhbGwoXG5cdFx0XHR0aGlzLFxuXHRcdFx0bm9kZUxpc3QsXG5cdFx0XHRjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wsXG5cdFx0XHR0aGlzW3VwZGF0ZUNsb25lRGF0YVN5bWJvbF0sXG5cdFx0XHRjZmcsXG5cdFx0KTtcblxuXHRcdC8vIEF0dGFjaCBhIG11dGF0aW9uIG9ic2VydmVyIHRvIG9ic2VydmUgY2hhbmdlcyB0byB0aGUgYXR0cmlidXRlcyBvZiB0aGUgZWxlbWVudFxuXHRcdGF0dGFjaEF0dHJpYnV0ZUNoYW5nZU11dGF0aW9uT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZz8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGZvciBhZHZhbmNlZCB1c2Vycy5cblx0ICogVGhlIHJlc3VsdCBpcyBhIGNsb25lIG9mIHRoZSBpbnRlcm5hbCBkYXRhLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0Z2V0SW50ZXJuYWxVcGRhdGVDbG9uZURhdGEoKSB7XG5cdFx0cmV0dXJuIGNsb25lKHRoaXNbdXBkYXRlQ2xvbmVEYXRhU3ltYm9sXSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGVsZW1lbnQgaXMgaW5zZXJ0ZWQgaW50byB0aGUgRE9NLiBJdCBjaGVja3MgaWYgdGhlIGN1c3RvbSBlbGVtZW50XG5cdCAqIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQgYW5kIGlmIG5vdCwgY2FsbHMgdGhlIGFzc2VtYmxlTWV0aG9kIHRvIGluaXRpYWxpemUgaXQuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqIEBzaW5jZSAxLjcuMFxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L2Nvbm5lY3RlZENhbGxiYWNrXG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHQvLyBDaGVjayBpZiB0aGUgb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWRcblx0XHRpZiAoIWhhc09iamVjdExpbmsodGhpcywgY3VzdG9tRWxlbWVudFVwZGF0ZXJMaW5rU3ltYm9sKSkge1xuXHRcdFx0Ly8gSWYgbm90LCBjYWxsIHRoZSBhc3NlbWJsZU1ldGhvZCB0byBpbml0aWFsaXplIHRoZSBvYmplY3Rcblx0XHRcdHRoaXNbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxlZCBldmVyeSB0aW1lIHRoZSBlbGVtZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUgRE9NLiBVc2VmdWwgZm9yIHJ1bm5pbmcgY2xlYW4gdXAgY29kZS5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICogQHNpbmNlIDEuNy4wXG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHt9XG5cblx0LyoqXG5cdCAqIFRoZSBjdXN0b20gZWxlbWVudCBoYXMgYmVlbiBtb3ZlZCBpbnRvIGEgbmV3IGRvY3VtZW50IChlLmcuIHNvbWVvbmUgY2FsbGVkIGRvY3VtZW50LmFkb3B0Tm9kZShlbCkpLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKiBAc2luY2UgMS43LjBcblx0ICovXG5cdGFkb3B0ZWRDYWxsYmFjaygpIHt9XG5cblx0LyoqXG5cdCAqIENhbGxlZCB3aGVuIGFuIG9ic2VydmVkIGF0dHJpYnV0ZSBoYXMgYmVlbiBhZGRlZCwgcmVtb3ZlZCwgdXBkYXRlZCwgb3IgcmVwbGFjZWQuIEFsc28gY2FsbGVkIGZvciBpbml0aWFsXG5cdCAqIHZhbHVlcyB3aGVuIGFuIGVsZW1lbnQgaXMgY3JlYXRlZCBieSB0aGUgcGFyc2VyLCBvciB1cGdyYWRlZC4gTm90ZTogb25seSBhdHRyaWJ1dGVzIGxpc3RlZCBpbiB0aGUgb2JzZXJ2ZWRBdHRyaWJ1dGVzXG5cdCAqIHByb3BlcnR5IHdpbGwgcmVjZWl2ZSB0aGlzIGNhbGxiYWNrLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gYXR0ck5hbWVcblx0ICogQHBhcmFtIHtzdHJpbmd9IG9sZFZhbFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmV3VmFsXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqIEBzaW5jZSAxLjE1LjBcblx0ICovXG5cdGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhhdHRyTmFtZSwgb2xkVmFsLCBuZXdWYWwpIHtcblx0XHRpZiAoYXR0ck5hbWUuc3RhcnRzV2l0aChcImRhdGEtbW9uc3Rlci1vcHRpb24tXCIpKSB7XG5cdFx0XHRzZXRPcHRpb25Gcm9tQXR0cmlidXRlKFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRhdHRyTmFtZSxcblx0XHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpW1wib3B0aW9uc1wiXSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2FsbGJhY2sgPSB0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXT8uW2F0dHJOYW1lXTtcblx0XHRpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwodGhpcywgbmV3VmFsLCBvbGRWYWwpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2Zcblx0ICogQHNpbmNlIDEuMTkuMFxuXHQgKi9cblx0aGFzTm9kZShub2RlKSB7XG5cdFx0aWYgKGNvbnRhaW5DaGlsZE5vZGUuY2FsbCh0aGlzLCB2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCEodGhpcy5zaGFkb3dSb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29udGFpbkNoaWxkTm9kZS5jYWxsKHRoaXMuc2hhZG93Um9vdCwgbm9kZSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbHMgYSBjYWxsYmFjayBmdW5jdGlvbiBpZiBpdCBleGlzdHMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG5cdCAqIEBwYXJhbSB7Kn0gYXJnc1xuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0Y2FsbENhbGxiYWNrKG5hbWUsIGFyZ3MpIHtcblx0XHRyZXR1cm4gY2FsbENvbnRyb2xDYWxsYmFjay5jYWxsKHRoaXMsIG5hbWUsIC4uLmFyZ3MpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNhbGxCYWNrRnVuY3Rpb25OYW1lXG4gKiBAcGFyYW0geyp9ICBhcmdzXG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGNhbGxDb250cm9sQ2FsbGJhY2soY2FsbEJhY2tGdW5jdGlvbk5hbWUsIC4uLmFyZ3MpIHtcblx0aWYgKCFpc1N0cmluZyhjYWxsQmFja0Z1bmN0aW9uTmFtZSkgfHwgY2FsbEJhY2tGdW5jdGlvbk5hbWUgPT09IFwiXCIpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoY2FsbEJhY2tGdW5jdGlvbk5hbWUgaW4gdGhpcykge1xuXHRcdHJldHVybiB0aGlzW2NhbGxCYWNrRnVuY3Rpb25OYW1lXSh0aGlzLCAuLi5hcmdzKTtcblx0fVxuXG5cdGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1NDUklQVF9IT1NUKSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh0aGlzW3NjcmlwdEhvc3RFbGVtZW50U3ltYm9sXS5sZW5ndGggPT09IDApIHtcblx0XHRjb25zdCB0YXJnZXRJZCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9TQ1JJUFRfSE9TVCk7XG5cdFx0aWYgKCF0YXJnZXRJZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxpc3QgPSB0YXJnZXRJZC5zcGxpdChcIixcIik7XG5cdFx0Zm9yIChjb25zdCBpZCBvZiBsaXN0KSB7XG5cdFx0XHRjb25zdCBob3N0ID0gZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzKHRoaXMsIHRhcmdldElkKTtcblx0XHRcdGlmICghKGhvc3QgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXNbc2NyaXB0SG9zdEVsZW1lbnRTeW1ib2xdLnB1c2goaG9zdCk7XG5cdFx0fVxuXHR9XG5cblx0Zm9yIChjb25zdCBob3N0IG9mIHRoaXNbc2NyaXB0SG9zdEVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0aWYgKGNhbGxCYWNrRnVuY3Rpb25OYW1lIGluIGhvc3QpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiBob3N0W2NhbGxCYWNrRnVuY3Rpb25OYW1lXSh0aGlzLCAuLi5hcmdzKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHR0aGlzLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0YGNhbGxiYWNrICR7Y2FsbEJhY2tGdW5jdGlvbk5hbWV9IG5vdCBmb3VuZGAsXG5cdCk7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIGN1c3RvbSBlbGVtZW50IGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbi5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGF0dGFjaGVkIHRvIHRoZSBET00uIEl0IGNoZWNrcyBpZiB0aGVcbiAqIGBkYXRhLW1vbnN0ZXItb3B0aW9uLWNhbGxiYWNrYCBhdHRyaWJ1dGUgaXMgc2V0LCBhbmQgaWYgbm90LCB0aGUgZGVmYXVsdCBjYWxsYmFja1xuICogYGluaXRDdXN0b21Db250cm9sQ2FsbGJhY2tgIGlzIGNhbGxlZC4gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIHNlYXJjaGVkIGZvciBpbiB0aGlzXG4gKiBlbGVtZW50IGFuZCBpbiB0aGUgaG9zdCBlbGVtZW50LiBJZiB0aGUgY2FsbGJhY2sgaXMgZm91bmQsIGl0IGlzIGNhbGxlZCB3aXRoIHRoZSBlbGVtZW50XG4gKiBhcyBhIHBhcmFtZXRlci5cbiAqXG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9DdXN0b21FbGVtZW50UmVnaXN0cnkvZGVmaW5lI3Byb3ZpZGluZ19hX2NvbnN0cnVjdGlvbl9jYWxsYmFja1xuICogQHNpbmNlIDEuOC4wXG4gKi9cbmZ1bmN0aW9uIGluaXRGcm9tQ2FsbGJhY2tIb3N0KCkge1xuXHQvLyBTZXQgdGhlIGRlZmF1bHQgY2FsbGJhY2sgZnVuY3Rpb24gbmFtZVxuXHRsZXQgY2FsbEJhY2tGdW5jdGlvbk5hbWUgPSBpbml0Q29udHJvbENhbGxiYWNrTmFtZTtcblxuXHQvLyBJZiB0aGUgYGRhdGEtbW9uc3Rlci1vcHRpb24tY2FsbGJhY2tgIGF0dHJpYnV0ZSBpcyBzZXQsIHVzZSBpdHMgdmFsdWUgYXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG5hbWVcblx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9JTklUX0NBTExCQUNLKSkge1xuXHRcdGNhbGxCYWNrRnVuY3Rpb25OYW1lID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0lOSVRfQ0FMTEJBQ0spO1xuXHR9XG5cblx0Ly8gQ2FsbCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCB0aGUgZWxlbWVudCBhcyBhIHBhcmFtZXRlciBpZiBpdCBleGlzdHNcblx0Y2FsbENvbnRyb2xDYWxsYmFjay5jYWxsKHRoaXMsIGNhbGxCYWNrRnVuY3Rpb25OYW1lKTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBmaXJzdCBjcmVhdGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGF0dGFjaEF0dHJpYnV0ZUNoYW5nZU11dGF0aW9uT2JzZXJ2ZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGlmICh0eXBlb2Ygc2VsZlthdHRyaWJ1dGVNdXRhdGlvbk9ic2VydmVyU3ltYm9sXSAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHNlbGZbYXR0cmlidXRlTXV0YXRpb25PYnNlcnZlclN5bWJvbF0gPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcblx0XHRmdW5jdGlvbiAobXV0YXRpb25zLCBvYnNlcnZlcikge1xuXHRcdFx0Zm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnMpIHtcblx0XHRcdFx0aWYgKG11dGF0aW9uLnR5cGUgPT09IFwiYXR0cmlidXRlc1wiKSB7XG5cdFx0XHRcdFx0c2VsZi5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soXG5cdFx0XHRcdFx0XHRtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lLFxuXHRcdFx0XHRcdFx0bXV0YXRpb24ub2xkVmFsdWUsXG5cdFx0XHRcdFx0XHRtdXRhdGlvbi50YXJnZXQuZ2V0QXR0cmlidXRlKG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUpLFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHQpO1xuXG5cdHRyeSB7XG5cdFx0c2VsZlthdHRyaWJ1dGVNdXRhdGlvbk9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKHNlbGYsIHtcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRhdHRyaWJ1dGVPbGRWYWx1ZTogdHJ1ZSxcblx0XHR9KTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKHNlbGYsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb250YWluQ2hpbGROb2RlKG5vZGUpIHtcblx0aWYgKHRoaXMuY29udGFpbnMobm9kZSkpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGZvciAoY29uc3QgWywgZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5jaGlsZE5vZGVzKSkge1xuXHRcdGlmIChlLmNvbnRhaW5zKG5vZGUpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRjb250YWluQ2hpbGROb2RlLmNhbGwoZSwgbm9kZSk7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNS4wXG4gKiBAcHJpdmF0ZVxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICovXG5mdW5jdGlvbiBpbml0T3B0aW9uT2JzZXJ2ZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGxldCBsYXN0RGlzYWJsZWRWYWx1ZSA9IHVuZGVmaW5lZDtcblx0c2VsZi5hdHRhY2hPYnNlcnZlcihcblx0XHRuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc3QgZmxhZyA9IHNlbGYuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIik7XG5cblx0XHRcdGlmIChmbGFnID09PSBsYXN0RGlzYWJsZWRWYWx1ZSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGxhc3REaXNhYmxlZFZhbHVlID0gZmxhZztcblxuXHRcdFx0aWYgKCEoc2VsZi5zaGFkb3dSb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBxdWVyeSA9XG5cdFx0XHRcdFwiYnV0dG9uLCBjb21tYW5kLCBmaWVsZHNldCwga2V5Z2VuLCBvcHRncm91cCwgb3B0aW9uLCBzZWxlY3QsIHRleHRhcmVhLCBpbnB1dCwgW2RhdGEtbW9uc3Rlci1vYmplY3RsaW5rXVwiO1xuXHRcdFx0Y29uc3QgZWxlbWVudHMgPSBzZWxmLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChxdWVyeSk7XG5cblx0XHRcdGxldCBub2RlTGlzdDtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG5vZGVMaXN0ID0gbmV3IFNldChbXG5cdFx0XHRcdFx0Li4uZWxlbWVudHMsXG5cdFx0XHRcdFx0Li4uZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwoc2VsZiwgcXVlcnkpLFxuXHRcdFx0XHRdKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0bm9kZUxpc3QgPSBlbGVtZW50cztcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIFsuLi5ub2RlTGlzdF0pIHtcblx0XHRcdFx0aWYgKGZsYWcgPT09IHRydWUpIHtcblx0XHRcdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRElTQUJMRUQsIFwiXCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9ESVNBQkxFRCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KSxcblx0KTtcblxuXHRzZWxmLmF0dGFjaE9ic2VydmVyKFxuXHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBub3QgaW5pdGlhbGlzZWRcblx0XHRcdGlmICghaGFzT2JqZWN0TGluayhzZWxmLCBjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIGluZm9ybSBldmVyeSBlbGVtZW50XG5cdFx0XHRjb25zdCB1cGRhdGVycyA9IGdldExpbmtlZE9iamVjdHMoc2VsZiwgY3VzdG9tRWxlbWVudFVwZGF0ZXJMaW5rU3ltYm9sKTtcblxuXHRcdFx0Zm9yIChjb25zdCBsaXN0IG9mIHVwZGF0ZXJzKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdXBkYXRlciBvZiBsaXN0KSB7XG5cdFx0XHRcdFx0Y29uc3QgZCA9IGNsb25lKHNlbGZbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdKTtcblx0XHRcdFx0XHRPYmplY3QuYXNzaWduKHVwZGF0ZXIuZ2V0U3ViamVjdCgpLCBkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pLFxuXHQpO1xuXG5cdC8vIGRpc2FibGVkXG5cdHNlbGZbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW0FUVFJJQlVURV9ESVNBQkxFRF0gPSAoKSA9PiB7XG5cdFx0aWYgKHNlbGYuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ESVNBQkxFRCkpIHtcblx0XHRcdHNlbGYuc2V0T3B0aW9uKEFUVFJJQlVURV9ESVNBQkxFRCwgdHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGYuc2V0T3B0aW9uKEFUVFJJQlVURV9ESVNBQkxFRCwgdW5kZWZpbmVkKTtcblx0XHR9XG5cdH07XG5cblx0Ly8gZGF0YS1tb25zdGVyLW9wdGlvbnNcblx0c2VsZlthdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bQVRUUklCVVRFX09QVElPTlNdID0gKCkgPT4ge1xuXHRcdGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMuY2FsbChzZWxmKTtcblx0XHRpZiAoaXNPYmplY3Qob3B0aW9ucykgJiYgT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoID4gMCkge1xuXHRcdFx0c2VsZi5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdH1cblx0fTtcblxuXHQvLyBkYXRhLW1vbnN0ZXItb3B0aW9ucy1zZWxlY3RvclxuXHRzZWxmW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfT1BUSU9OU19TRUxFQ1RPUl0gPSAoKSA9PiB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbnNGcm9tU2NyaXB0VGFnLmNhbGwoc2VsZik7XG5cdFx0aWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmIE9iamVjdC5rZXlzKG9wdGlvbnMpLmxlbmd0aCA+IDApIHtcblx0XHRcdHNlbGYuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR9XG5cdH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGdldE9wdGlvbnNGcm9tU2NyaXB0VGFnKCkge1xuXHRpZiAoIXRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SKSkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdGNvbnN0IG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuXHRcdHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SKSxcblx0KTtcblx0aWYgKCEobm9kZSBpbnN0YW5jZW9mIEhUTUxTY3JpcHRFbGVtZW50KSkge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0dGhpcyxcblx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRgdGhlIHNlbGVjdG9yICR7QVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1J9IGZvciBvcHRpb25zIHdhcyBzcGVjaWZpZWQgKCR7dGhpcy5nZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdEFUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SLFxuXHRcdFx0KX0pIGJ1dCBub3QgZm91bmQuYCxcblx0XHQpO1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdGxldCBvYmogPSB7fTtcblxuXHR0cnkge1xuXHRcdG9iaiA9IHBhcnNlT3B0aW9uc0pTT04uY2FsbCh0aGlzLCBub2RlLnRleHRDb250ZW50LnRyaW0oKSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdHRoaXMsXG5cdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0YHdoZW4gYW5hbHl6aW5nIHRoZSBjb25maWd1cmF0aW9uIGZyb20gdGhlIHNjcmlwdCB0YWcgdGhlcmUgd2FzIGFuIGVycm9yLiAke2V9YCxcblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoKSB7XG5cdGlmICh0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfT1BUSU9OUykpIHtcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIHBhcnNlT3B0aW9uc0pTT04uY2FsbCh0aGlzLCB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfT1BUSU9OUykpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XHRgdGhlIG9wdGlvbnMgYXR0cmlidXRlICR7QVRUUklCVVRFX09QVElPTlN9IGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBqc29uIGRlZmluaXRpb24gKGFjdHVhbDogJHt0aGlzLmdldEF0dHJpYnV0ZShcblx0XHRcdFx0XHRBVFRSSUJVVEVfT1BUSU9OUyxcblx0XHRcdFx0KX0pLiR7ZX1gLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge307XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSBnaXZlbiBKU09OIGRhdGEgYW5kIHJldHVybnMgdGhlIHBhcnNlZCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhIFRoZSBKU09OIGRhdGEgdG8gYmUgcGFyc2VkLlxuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcGFyc2VkIG9iamVjdC5cbiAqIEB0aHJvd3Mge2Vycm9yfSBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIEpTT04gZGF0YSBpcyBub3QgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlT3B0aW9uc0pTT04oZGF0YSkge1xuXHRsZXQgb2JqID0ge307XG5cblx0aWYgKCFpc1N0cmluZyhkYXRhKSkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvLyB0aGUgY29uZmlndXJhdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgZGF0YSB1cmwuXG5cdHRyeSB7XG5cdFx0Y29uc3QgZGF0YVVybCA9IHBhcnNlRGF0YVVSTChkYXRhKTtcblx0XHRkYXRhID0gZGF0YVVybC5jb250ZW50O1xuXHR9IGNhdGNoIChlKSB7fVxuXG5cdHRyeSB7XG5cdFx0b2JqID0gSlNPTi5wYXJzZShkYXRhKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHRocm93IGU7XG5cdH1cblxuXHRyZXR1cm4gdmFsaWRhdGVPYmplY3Qob2JqKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7aW5pdEh0bWxDb250ZW50fVxuICovXG5mdW5jdGlvbiBpbml0SHRtbENvbnRlbnQoKSB7XG5cdHRyeSB7XG5cdFx0Y29uc3QgdGVtcGxhdGUgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZSh0aGlzLmNvbnN0cnVjdG9yLmdldFRhZygpKTtcblx0XHR0aGlzLmFwcGVuZENoaWxkKHRlbXBsYXRlLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRsZXQgaHRtbCA9IHRoaXMuZ2V0T3B0aW9uKFwidGVtcGxhdGVzLm1haW5cIiwgXCJcIik7XG5cdFx0aWYgKGlzU3RyaW5nKGh0bWwpICYmIGh0bWwubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgbWFwcGluZyA9IHRoaXMuZ2V0T3B0aW9uKFwidGVtcGxhdGVNYXBwaW5nXCIsIHt9KTtcblx0XHRcdGlmIChpc09iamVjdChtYXBwaW5nKSkge1xuXHRcdFx0XHRodG1sID0gbmV3IEZvcm1hdHRlcihtYXBwaW5nLCB7fSkuZm9ybWF0KGh0bWwpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5pbm5lckhUTUwgPSBodG1sO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fVxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNi4wXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuICovXG5mdW5jdGlvbiBpbml0Q1NTU3R5bGVzaGVldCgpIHtcblx0aWYgKCEodGhpcy5zaGFkb3dSb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCkpIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvbnN0IHN0eWxlU2hlZXQgPSB0aGlzLmNvbnN0cnVjdG9yLmdldENTU1N0eWxlU2hlZXQoKTtcblxuXHRpZiAoc3R5bGVTaGVldCBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQpIHtcblx0XHRpZiAoc3R5bGVTaGVldC5jc3NSdWxlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLnNoYWRvd1Jvb3QuYWRvcHRlZFN0eWxlU2hlZXRzID0gW3N0eWxlU2hlZXRdO1xuXHRcdH1cblx0fSBlbHNlIGlmIChpc0FycmF5KHN0eWxlU2hlZXQpKSB7XG5cdFx0Y29uc3QgYXNzaWduID0gW107XG5cdFx0Zm9yIChjb25zdCBzIG9mIHN0eWxlU2hlZXQpIHtcblx0XHRcdGlmIChpc1N0cmluZyhzKSkge1xuXHRcdFx0XHRjb25zdCB0cmltZWRTdHlsZVNoZWV0ID0gcy50cmltKCk7XG5cdFx0XHRcdGlmICh0cmltZWRTdHlsZVNoZWV0ICE9PSBcIlwiKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cdFx0XHRcdFx0c3R5bGUuaW5uZXJIVE1MID0gdHJpbWVkU3R5bGVTaGVldDtcblx0XHRcdFx0XHR0aGlzLnNoYWRvd1Jvb3QucHJlcGVuZChzdHlsZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHZhbGlkYXRlSW5zdGFuY2UocywgQ1NTU3R5bGVTaGVldCk7XG5cblx0XHRcdGlmIChzLmNzc1J1bGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0YXNzaWduLnB1c2gocyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGFzc2lnbi5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLnNoYWRvd1Jvb3QuYWRvcHRlZFN0eWxlU2hlZXRzID0gYXNzaWduO1xuXHRcdH1cblx0fSBlbHNlIGlmIChpc1N0cmluZyhzdHlsZVNoZWV0KSkge1xuXHRcdGNvbnN0IHRyaW1lZFN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0LnRyaW0oKTtcblx0XHRpZiAodHJpbWVkU3R5bGVTaGVldCAhPT0gXCJcIikge1xuXHRcdFx0Y29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cdFx0XHRzdHlsZS5pbm5lckhUTUwgPSBzdHlsZVNoZWV0O1xuXHRcdFx0dGhpcy5zaGFkb3dSb290LnByZXBlbmQoc3R5bGUpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fVxuICogQHRocm93cyB7RXJyb3J9IGh0bWwgaXMgbm90IHNldC5cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvYXR0YWNoU2hhZG93XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5mdW5jdGlvbiBpbml0U2hhZG93Um9vdCgpIHtcblx0bGV0IHRlbXBsYXRlO1xuXHRsZXQgaHRtbDtcblxuXHR0cnkge1xuXHRcdHRlbXBsYXRlID0gZmluZERvY3VtZW50VGVtcGxhdGUodGhpcy5jb25zdHJ1Y3Rvci5nZXRUYWcoKSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRodG1sID0gdGhpcy5nZXRPcHRpb24oXCJ0ZW1wbGF0ZXMubWFpblwiLCBcIlwiKTtcblx0XHRpZiAoIWlzU3RyaW5nKGh0bWwpIHx8IGh0bWwgPT09IHVuZGVmaW5lZCB8fCBodG1sID09PSBcIlwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJodG1sIGlzIG5vdCBzZXQuXCIpO1xuXHRcdH1cblx0fVxuXG5cdHRoaXMuYXR0YWNoU2hhZG93KHtcblx0XHRtb2RlOiB0aGlzLmdldE9wdGlvbihcInNoYWRvd01vZGVcIiwgXCJvcGVuXCIpLFxuXHRcdGRlbGVnYXRlc0ZvY3VzOiB0aGlzLmdldE9wdGlvbihcImRlbGVnYXRlc0ZvY3VzXCIsIHRydWUpLFxuXHR9KTtcblxuXHRpZiAodGVtcGxhdGUgaW5zdGFuY2VvZiBUZW1wbGF0ZSkge1xuXHRcdHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0ZW1wbGF0ZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29uc3QgbWFwcGluZyA9IHRoaXMuZ2V0T3B0aW9uKFwidGVtcGxhdGVNYXBwaW5nXCIsIHt9KTtcblx0aWYgKGlzT2JqZWN0KG1hcHBpbmcpKSB7XG5cdFx0Y29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcihtYXBwaW5nKTtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJ0ZW1wbGF0ZUZvcm1hdHRlci5tYXJrZXIub3BlblwiKSAhPT0gbnVsbCkge1xuXHRcdFx0Zm9ybWF0dGVyLnNldE1hcmtlcihcblx0XHRcdFx0dGhpcy5nZXRPcHRpb24oXCJ0ZW1wbGF0ZUZvcm1hdHRlci5tYXJrZXIub3BlblwiKSxcblx0XHRcdFx0dGhpcy5nZXRPcHRpb24oXCJ0ZW1wbGF0ZUZvcm1hdHRlci5tYXJrZXIuY2xvc2VcIiksXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRodG1sID0gZm9ybWF0dGVyLmZvcm1hdChodG1sKTtcblx0fVxuXG5cdHRoaXMuc2hhZG93Um9vdC5pbm5lckhUTUwgPSBodG1sO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCByZWdpc3RlcnMgYSBuZXcgZWxlbWVudC4gVGhlIHN0cmluZyByZXR1cm5lZCBieSBgQ3VzdG9tRWxlbWVudC5nZXRUYWcoKWAgaXMgdXNlZCBhcyB0aGUgdGFnLlxuICpcbiAqIEBwYXJhbSB7Q3VzdG9tRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB7dm9pZH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RE9NRXhjZXB0aW9ufSBGYWlsZWQgdG8gZXhlY3V0ZSAnZGVmaW5lJyBvbiAnQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5JzogaXMgbm90IGEgdmFsaWQgY3VzdG9tIGVsZW1lbnQgbmFtZVxuICovXG5mdW5jdGlvbiByZWdpc3RlckN1c3RvbUVsZW1lbnQoZWxlbWVudCkge1xuXHR2YWxpZGF0ZUZ1bmN0aW9uKGVsZW1lbnQpO1xuXHRjb25zdCBjdXN0b21FbGVtZW50cyA9IGdldEdsb2JhbE9iamVjdChcImN1c3RvbUVsZW1lbnRzXCIpO1xuXHRpZiAoY3VzdG9tRWxlbWVudHMgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcImN1c3RvbUVsZW1lbnRzIGlzIG5vdCBzdXBwb3J0ZWQuXCIpO1xuXHR9XG5cblx0Y29uc3QgdGFnID0gZWxlbWVudD8uZ2V0VGFnKCk7XG5cdGlmICghaXNTdHJpbmcodGFnKSB8fCB0YWcgPT09IFwiXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0YWcgaXMgbm90IHNldC5cIik7XG5cdH1cblxuXHRpZiAoY3VzdG9tRWxlbWVudHMuZ2V0KHRhZykgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGN1c3RvbUVsZW1lbnRzLmRlZmluZSh0YWcsIGVsZW1lbnQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5cbmV4cG9ydCB7IHJhbmRvbSB9O1xuXG4vKipcbiAqIHRoaXMgZnVuY3Rpb24gdXNlcyBjcnlwdCBhbmQgcmV0dXJucyBhIHJhbmRvbSBudW1iZXIuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IG1pbiBzdGFydGluZyB2YWx1ZSBvZiB0aGUgZGVmaW5pdGlvbiBzZXQgKGRlZmF1bHQgaXMgMClcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXggZW5kIHZhbHVlIG9mIHRoZSBkZWZpbml0aW9uIHNldCAoZGVmYXVsdCBpcyAxMDAwMDAwMDAwKVxuICogQHJldHVybiB7bnVtYmVyfVxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgY3J5cHRcbiAqIEB0aHJvd3Mge0Vycm9yfSB3ZSBjYW5ub3QgZ2VuZXJhdGUgbnVtYmVycyBsYXJnZXIgdGhhbiA1MyBiaXRzLlxuICogQHRocm93cyB7RXJyb3J9IHRoZSBkaXN0YW5jZSBpcyB0b28gc21hbGwgdG8gY3JlYXRlIGEgcmFuZG9tIG51bWJlci5cblxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbShtaW4sIG1heCkge1xuXHRpZiAobWluID09PSB1bmRlZmluZWQpIHtcblx0XHRtaW4gPSAwO1xuXHR9XG5cdGlmIChtYXggPT09IHVuZGVmaW5lZCkge1xuXHRcdG1heCA9IE1BWDtcblx0fVxuXG5cdGlmIChtYXggPCBtaW4pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtYXggbXVzdCBiZSBncmVhdGVyIHRoYW4gbWluXCIpO1xuXHR9XG5cblx0cmV0dXJuIE1hdGgucm91bmQoY3JlYXRlKG1pbiwgbWF4KSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IE1BWCA9IDEwMDAwMDAwMDA7XG5cbk1hdGgubG9nMiA9XG5cdE1hdGgubG9nMiB8fFxuXHRmdW5jdGlvbiAobikge1xuXHRcdHJldHVybiBNYXRoLmxvZyhuKSAvIE1hdGgubG9nKDIpO1xuXHR9O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbWluXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgY3J5cHRcbiAqIEB0aHJvd3Mge0Vycm9yfSB3ZSBjYW5ub3QgZ2VuZXJhdGUgbnVtYmVycyBsYXJnZXIgdGhhbiA1MyBiaXRzLlxuICogQHRocm93cyB7RXJyb3J9IHRoZSBkaXN0YW5jZSBpcyB0b28gc21hbGwgdG8gY3JlYXRlIGEgcmFuZG9tIG51bWJlci5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlKG1pbiwgbWF4KSB7XG5cdGNvbnN0IGdsb2JhbFJlZmVyZW5jZSA9IGdldEdsb2JhbCgpO1xuXG5cdGNvbnN0IGNyeXB0ID1cblx0XHRnbG9iYWxSZWZlcmVuY2U/LltcImNyeXB0b1wiXSB8fFxuXHRcdGdsb2JhbFJlZmVyZW5jZT8uW1wibXNDcnlwdG9cIl0gfHxcblx0XHRnbG9iYWxSZWZlcmVuY2U/LltcImNyeXB0b1wiXSB8fFxuXHRcdHVuZGVmaW5lZDtcblxuXHRpZiAodHlwZW9mIGNyeXB0ID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBjcnlwdFwiKTtcblx0fVxuXG5cdGxldCBydmFsID0gMDtcblx0Y29uc3QgcmFuZ2UgPSBtYXggLSBtaW47XG5cdGlmIChyYW5nZSA8IDIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgZGlzdGFuY2UgaXMgdG9vIHNtYWxsIHRvIGNyZWF0ZSBhIHJhbmRvbSBudW1iZXIuXCIpO1xuXHR9XG5cblx0Y29uc3QgYml0c05lZWRlZCA9IE1hdGguY2VpbChNYXRoLmxvZzIocmFuZ2UpKTtcblx0aWYgKGJpdHNOZWVkZWQgPiA1Mykge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIndlIGNhbm5vdCBnZW5lcmF0ZSBudW1iZXJzIGxhcmdlciB0aGFuIDUzIGJpdHMuXCIpO1xuXHR9XG5cdGNvbnN0IGJ5dGVzTmVlZGVkID0gTWF0aC5jZWlsKGJpdHNOZWVkZWQgLyA4KTtcblx0Y29uc3QgbWFzayA9IE1hdGgucG93KDIsIGJpdHNOZWVkZWQpIC0gMTtcblxuXHRjb25zdCBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlc05lZWRlZCk7XG5cdGNyeXB0LmdldFJhbmRvbVZhbHVlcyhieXRlQXJyYXkpO1xuXG5cdGxldCBwID0gKGJ5dGVzTmVlZGVkIC0gMSkgKiA4O1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzTmVlZGVkOyBpKyspIHtcblx0XHRydmFsICs9IGJ5dGVBcnJheVtpXSAqIE1hdGgucG93KDIsIHApO1xuXHRcdHAgLT0gODtcblx0fVxuXG5cdHJ2YWwgPSBydmFsICYgbWFzaztcblxuXHRpZiAocnZhbCA+PSByYW5nZSkge1xuXHRcdHJldHVybiBjcmVhdGUobWluLCBtYXgpO1xuXHR9XG5cblx0aWYgKHJ2YWwgPCBtaW4pIHtcblx0XHRydmFsICs9IG1pbjtcblx0fVxuXG5cdHJldHVybiBydmFsO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNJbnRlZ2VyIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVGdW5jdGlvbiwgdmFsaWRhdGVJbnRlZ2VyIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBEZWFkTWFuc1N3aXRjaCB9O1xuXG4vKipcbiAqIFRoZSBkZWFkIG1hbidzIHN3aXRjaCBhbGxvd3Mgc2V0dGluZyBhIHRpbWVyIHdoaWNoIGNhbiBiZSByZXNldCBhZ2FpblxuICogYW5kIGFnYWluIHdpdGhpbiBhIGRlZmluZWQgcGVyaW9kIG9mIHRpbWUuXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGUvdXRpbC9kZWFkbWFuc3N3aXRjaC9zaW1wbGUvIFNpbXBsZSBleGFtcGxlXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yOS4wXG4gKiBAc3VtbWFyeSBDbGFzcyB0byBiZSBhYmxlIHRvIGV4ZWN1dGUgZnVuY3Rpb24gY2hhaW5zXG4gKi9cbmNsYXNzIERlYWRNYW5zU3dpdGNoIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBDcmVhdGUgbmV3IGRlYWQgbWFuJ3Mgc3dpdGNoXG5cdCAqXG5cdCAqIEBwYXJhbSB7SW50ZWdlcn0gZGVsYXlcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHRocm93IHtUeXBlRXJyb3J9IHRoZSBhcmd1bWVudHMgbXVzdCBiZSBlaXRoZXIgaW50ZWdlciBvciBmdW5jdGlvbnNcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKi9cblx0Y29uc3RydWN0b3IoZGVsYXksIGNhbGxiYWNrKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGluaXQuY2FsbCh0aGlzLCB2YWxpZGF0ZUludGVnZXIoZGVsYXkpLCB2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIGRlbGF5XG5cdCAqIEByZXR1cm5zIHtEZWFkTWFuc1N3aXRjaH1cblx0ICogQHRocm93cyB7RXJyb3J9IGhhcyBhbHJlYWR5IHJ1blxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYXJndW1lbnRcblx0ICovXG5cdHRvdWNoKGRlbGF5KSB7XG5cdFx0aWYgKHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiaXNBbHJlYWR5UnVuXCJdID09PSB0cnVlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJoYXMgYWxyZWFkeSBydW5cIik7XG5cdFx0fVxuXG5cdFx0aWYgKGlzSW50ZWdlcihkZWxheSkpIHtcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiZGVsYXlcIl0gPSBkZWxheTtcblx0XHR9IGVsc2UgaWYgKGRlbGF5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGFyZ3VtZW50XCIpO1xuXHRcdH1cblxuXHRcdGNsZWFyVGltZW91dCh0aGlzW2ludGVybmFsU3ltYm9sXVtcInRpbWVyXCJdKTtcblx0XHRpbml0Q2FsbGJhY2suY2FsbCh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBoYXMgYWxyZWFkeSBydW5cblx0ICogQHJldHVybnMge0RlYWRNYW5zU3dpdGNofVxuXHQgKi9cblx0ZGVmdXNlKCkge1xuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXVtcImlzQWxyZWFkeVJ1blwiXSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaGFzIGFscmVhZHkgcnVuXCIpO1xuXHRcdH1cblxuXHRcdGNsZWFyVGltZW91dCh0aGlzW2ludGVybmFsU3ltYm9sXVtcInRpbWVyXCJdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRDYWxsYmFjaygpIHtcblx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ0aW1lclwiXSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiaXNBbHJlYWR5UnVuXCJdID0gdHJ1ZTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcImNhbGxiYWNrXCJdKCk7XG5cdH0sIHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiZGVsYXlcIl0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGRlbGF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG5mdW5jdGlvbiBpbml0KGRlbGF5LCBjYWxsYmFjaykge1xuXHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRjYWxsYmFjayxcblx0XHRkZWxheSxcblx0XHRpc0FscmVhZHlSdW46IGZhbHNlLFxuXHRcdHRpbWVyOiB1bmRlZmluZWQsXG5cdH07XG5cblx0aW5pdENhbGxiYWNrLmNhbGwodGhpcyk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVGdW5jdGlvbiwgdmFsaWRhdGVJbnRlZ2VyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBDYWxsYmFjayB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENhbGxiYWNrIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7aW50fHVuZGVmaW5lZH0gdGltZVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGNvbnN0cnVjdG9yKGNhbGxiYWNrLCB0aW1lKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHRjYWxsYmFjazogdmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjayksXG5cdFx0XHR0aW1lOiB2YWxpZGF0ZUludGVnZXIodGltZSA/PyAwKSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSAgeyp9IGRhdGFcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHJ1bihkYXRhKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGdldEdsb2JhbEZ1bmN0aW9uKFwic2V0VGltZW91dFwiKSgoKSA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSh0aGlzW2ludGVybmFsU3ltYm9sXS5jYWxsYmFjayhkYXRhKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIHRoaXNbaW50ZXJuYWxTeW1ib2xdLnRpbWUpO1xuXHRcdH0pO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNJbnRlZ2VyIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgUXVldWUgfSBmcm9tIFwiLi4vdHlwZXMvcXVldWUubWpzXCI7XG5pbXBvcnQgeyBDYWxsYmFjayB9IGZyb20gXCIuL3Byb2Nlc3NpbmcvY2FsbGJhY2subWpzXCI7XG5cbmV4cG9ydCB7IFByb2Nlc3NpbmcgfTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGFsbG93cyBleGVjdXRpbmcgc2V2ZXJhbCBmdW5jdGlvbnMgaW4gb3JkZXIuXG4gKlxuICogRnVuY3Rpb25zIGFuZCB0aW1lb3V0cyBjYW4gYmUgcGFzc2VkLiBJZiBhIHRpbWVvdXQgaXMgcGFzc2VkLCBpdCBhcHBsaWVzIHRvIGFsbCBmdXJ0aGVyIGZ1bmN0aW9ucy5cbiAqIEluIHRoZSBleGFtcGxlXG4gKlxuICogYHRpbWVvdXQxLCBmdW5jdGlvbjEsIGZ1bmN0aW9uMiwgZnVuY3Rpb24zLCB0aW1lb3V0MiwgZnVuY3Rpb240YFxuICpcbiAqIHRoZSB0aW1lb3V0MSBpcyB2YWxpZCBmb3IgdGhlIGZ1bmN0aW9ucyAxLCAyIGFuZCAzIGFuZCB0aGUgdGltZW91dDIgZm9yIHRoZSBmdW5jdGlvbjQuXG4gKlxuICogU28gdGhlIGV4ZWN1dGlvbiB0aW1lIGlzIHRpbWVvdXQxK3RpbWVvdXQxK3RpbWVvdXQxK3RpbWVvdXQyXG4gKlxuICogVGhlIHJlc3VsdCBvZiBgcnVuKClgIGlzIGEgcHJvbWlzZS5cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvbGlicmFyaWVzL3V0aWwvcHJvY2Vzc2luZy9zaW1wbGUvIEEgc2ltcGxlIGV4YW1wbGVcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMS4wXG4gKiBAc3VtbWFyeSBDbGFzcyB0byBiZSBhYmxlIHRvIGV4ZWN1dGUgZnVuY3Rpb24gY2hhaW5zXG4gKi9cbmNsYXNzIFByb2Nlc3NpbmcgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIENyZWF0ZSBuZXcgUHJvY2Vzc2luZ1xuXHQgKlxuXHQgKiBGdW5jdGlvbnMgYW5kIHRpbWVvdXRzIGNhbiBiZSBwYXNzZWQuIElmIGEgdGltZW91dCBpcyBwYXNzZWQsIGl0IGFwcGxpZXMgdG8gYWxsIGZ1cnRoZXIgZnVuY3Rpb25zLlxuXHQgKiBJbiB0aGUgZXhhbXBsZVxuXHQgKlxuXHQgKiBgdGltZW91dDEsIGZ1bmN0aW9uMSwgZnVuY3Rpb24yLCBmdW5jdGlvbjMsIHRpbWVvdXQyLCBmdW5jdGlvbjRgXG5cdCAqXG5cdCAqIHRoZSB0aW1lb3V0MSBpcyB2YWxpZCBmb3IgdGhlIGZ1bmN0aW9ucyAxLCAyIGFuZCAzIGFuZCB0aGUgdGltZW91dDIgZm9yIHRoZSBmdW5jdGlvbjQuXG5cdCAqXG5cdCAqIFNvIHRoZSBleGVjdXRpb24gdGltZSBpcyB0aW1lb3V0MSt0aW1lb3V0MSt0aW1lb3V0MSt0aW1lb3V0MlxuXHQgKlxuXHQgKiBAdGhyb3cge1R5cGVFcnJvcn0gdGhlIGFyZ3VtZW50cyBtdXN0IGJlIGVpdGhlciBpbnRlZ2VyIG9yIGZ1bmN0aW9uc1xuXHQgKiBAcGFyYW0gey4uLihpbnR8ZnVuY3Rpb24pfSBhcmdzXG5cdCAqL1xuXHRjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0cXVldWU6IG5ldyBRdWV1ZSgpLFxuXHRcdH07XG5cblx0XHRsZXQgdGltZSA9IDA7XG5cblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInRoZSBhcmd1bWVudHMgbXVzdCBiZSBlaXRoZXIgaW50ZWdlciBvciBmdW5jdGlvbnNcIik7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBbLCBhcmddIG9mIE9iamVjdC5lbnRyaWVzKGFyZ3MpKSB7XG5cdFx0XHRpZiAoaXNJbnRlZ2VyKGFyZykgJiYgYXJnID49IDApIHtcblx0XHRcdFx0dGltZSA9IGFyZztcblx0XHRcdH0gZWxzZSBpZiAoaXNGdW5jdGlvbihhcmcpKSB7XG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnF1ZXVlLmFkZChuZXcgQ2FsbGJhY2soYXJnLCB0aW1lKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XHRcdFwidGhlIGFyZ3VtZW50cyBtdXN0IGJlIGVpdGhlciBpbnRlZ2VyIG9yIGZ1bmN0aW9uc1wiLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgZnVuY3Rpb24gd2l0aCB0aGUgZGVzaXJlZCB0aW1lb3V0XG5cdCAqIElmIG5vIHRpbWVvdXQgaXMgc3BlY2lmaWVkLCB0aGUgdGltZW91dCBvZiB0aGUgcHJldmlvdXMgZnVuY3Rpb24gaXMgdXNlZC5cblx0ICpcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHBhcmFtIHtpbnR8dW5kZWZpbmVkfSB0aW1lXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKi9cblx0YWRkKGNhbGxiYWNrLCB0aW1lKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ucXVldWUuYWRkKG5ldyBDYWxsYmFjayhjYWxsYmFjaywgdGltZSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSBkZWZpbmVkIGZ1bmN0aW9ucyBpbiBvcmRlci5cblx0ICpcblx0ICogQHBhcmFtIHsqfSBkYXRhXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRydW4oZGF0YSkge1xuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXS5xdWV1ZS5pc0VtcHR5KCkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZGF0YSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2FsbGJhY2sgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5xdWV1ZS5wb2xsKCk7XG5cblx0XHRpZiAoY2FsbGJhY2sgPT09IG51bGwgfHwgY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkYXRhKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY2FsbGJhY2sucnVuKGRhdGEpLnRoZW4oKHJlc3VsdCkgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMucnVuKHJlc3VsdCk7XG5cdFx0fSk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBBVFRSSUJVVEVfUFJFRklYIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbi8qKlxuICogQHNpbmNlIDEuMC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0sgPSBcImJsb2NrXCI7XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci11cmxgIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBVUkwgdG8gdGhlIGNvbnRyb2wuXG4gKlxuICogQHNpbmNlIDEuMC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfRk9STV9VUkwgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXVybGA7XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1yZWxvYWRgIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHJlbG9hZC5cbiAqXG4gKiB2YWxpZCB2YWx1ZXM6IG9uc2hvd1xuICpcbiAqIEBzaW5jZSAxLjExLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9GT1JNX1JFTE9BRCA9IGAke0FUVFJJQlVURV9QUkVGSVh9cmVsb2FkYDtcblxuLyoqXG4gKiBgZGF0YS1tb25zdGVyLWludGVuZGBcbiAqXG4gKiBAc2luY2UgMS45LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9WSVNJQklMSVRZID0gYCR7QVRUUklCVVRFX1BSRUZJWH12aXNpYmlsaXR5YDtcbi8qKlxuICogYGRhdGEtbW9uc3Rlci1pbnRlbmRgXG4gKlxuICogQHNpbmNlIDEuOS4wXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSAzLjMyLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9CVVRUT05fQ0xBU1MgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWJ1dHRvbi1jbGFzc2A7XG5cbi8qKlxuICogYGRhdGEtbW9uc3Rlci1pbnRlbmRgXG4gKlxuICogQHNpbmNlIDEuOC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfSU5URU5EID0gYCR7QVRUUklCVVRFX1BSRUZJWH1pbnRlbmRgO1xuXG4vKipcbiAqIGBkYXRhLW1vbnN0ZXItaGFzLWNoaWxkcmVuYFxuICpcbiAqIEBzaW5jZSAxLjguMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0hBU19DSElMRFJFTiA9IGAke0FUVFJJQlVURV9QUkVGSVh9aGFzLWNoaWxkcmVuYDtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLWRhdGFzb3VyY2VgIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBkYXRhc291cmNlLlxuICpcbiAqIEBzaW5jZSAxLjYuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0ZPUk1fREFUQVNPVVJDRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9ZGF0YXNvdXJjZWA7XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1kYXRhc291cmNlLWFyZ3VtZW50c2AgY2FuIGJlIHVzZWQgdG8gcGFzcyBhcmd1bWVudHMuXG4gKlxuICogQHNpbmNlIDEuNi4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFX0FSR1VNRU5UUyA9IGAke0FUVFJJQlVURV9QUkVGSVh9ZGF0YXNvdXJjZS1hcmd1bWVudHNgO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItYnV0dG9uLWxhYmVsYCBjYW4gYmUgdXNlZCB0byBwYXNzIGxhYmVscy5cbiAqXG4gKiBAc2luY2UgMS42LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9CVVRUT05fTEFCRUwgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWJ1dHRvbi1sYWJlbGA7XG5cbmV4cG9ydCB7XG5cdEFUVFJJQlVURV9CVVRUT05fTEFCRUwsXG5cdFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyxcblx0QVRUUklCVVRFX0ZPUk1fVVJMLFxuXHRBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFLFxuXHRBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFX0FSR1VNRU5UUyxcblx0QVRUUklCVVRFX0lOVEVORCxcblx0QVRUUklCVVRFX1ZJU0lCSUxJVFksXG5cdEFUVFJJQlVURV9GT1JNX1JFTE9BRCxcblx0QVRUUklCVVRFX0hBU19DSElMRFJFTixcblx0QVRUUklCVVRFX0JVVFRPTl9DTEFTUyxcbn07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgVGFic1N0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFRhYnNTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0VGFic1N0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgdGFicyB7IFxuOmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFxcXCJRdWlja3NhbmRcXFwiLFxcXCJTZWdvZSBVSVxcXCIsXFxcIlJvYm90b1xcXCIsXFxcIk94eWdlblxcXCIsXFxcIlVidW50dVxcXCIsXFxcIkNhbnRhcmVsbFxcXCIsXFxcIkZpcmEgU2Fuc1xcXCIsXFxcIkRyb2lkIFNhbnNcXFwiLFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsQXJpYWwsc2Fucy1zZXJpZixcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCI7LS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZTpcXFwiQ29uc29sYXNcXFwiLFxcXCJDb3VyaWVyIE5ld1xcXCIsXFxcIlJvYm90byBNb25vXFxcIixcXFwiU291cmNlIENvZGUgUHJvXFxcIixcXFwiRmlyYSBNb25vXFxcIixtb25vc3BhY2U7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi02KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTYpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTIpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xOiM4MzNhYjQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTI6I2ZkMWQxZDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMzojZmNiMDQ1Oy0tbW9uc3Rlci1ib3gtc2hhZG93LTE6bm9uZTstLW1vbnN0ZXItYm94LXNoYWRvdy0yOi0xcHggMXB4IDEwcHggMXB4IGhzbGEoMCwwJSw3NiUsLjYxKTstLW1vbnN0ZXItdGV4dC1zaGFkb3c6bm9uZTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTIpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aDoycHg7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci1ib3JkZXItd2lkdGg6M3B4Oy0tbW9uc3Rlci1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlOi00cHg7LS1tb25zdGVyLXotaW5kZXgtZGVmYXVsdDowOy0tbW9uc3Rlci16LWluZGV4LW91dGxpbmU6MTA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd246MjAwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duLW92ZXJsYXk6MjEwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreTozMDA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5LW92ZXJsYXk6MzEwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkOjQwMDstLW1vbnN0ZXItei1pbmRleC1maXhlZC1vdmVybGF5OjQxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcDo1MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3Atb3ZlcmxheTo1MTA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzOjYwMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMtb3ZlcmxheTo2MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWw6NzAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXk6NzEwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXI6ODAwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXItb3ZlcmxheTo4MTA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcDo4MDA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcC1vdmVybGF5OjkxMDstLW1vbnN0ZXItc3BhY2UtMDowOy0tbW9uc3Rlci1zcGFjZS0xOjJweDstLW1vbnN0ZXItc3BhY2UtMjo0cHg7LS1tb25zdGVyLXNwYWNlLTM6NnB4Oy0tbW9uc3Rlci1zcGFjZS00OjEwcHg7LS1tb25zdGVyLXNwYWNlLTU6MTZweDstLW1vbnN0ZXItc3BhY2UtNjoyNnB4Oy0tbW9uc3Rlci1zcGFjZS03OjQycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC00OjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTc6NzY4cHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtOTo5OTJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0xMjoxMjAwcHg7LS1tb25zdGVyLWRyYWdnZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS13aWR0aDo0cHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLWhlaWdodDo1MHB4fS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLXRoZW1lLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMSl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0xe2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci1jb2xvci1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTIpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMntjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0zKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTN7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLWNvbG9yLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLXRoZW1lLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci1ib3JkZXItY29sb3ItNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItNCl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC00e2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci1jb2xvci1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1jb250YWluZXItMSwubW9uc3Rlci10aGVtZS1jb250cm9sLXJvdy0xe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1jb250YWluZXItMSwubW9uc3Rlci10aGVtZS1jb250cm9sLWVsZW1lbnQsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1yb3ctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3IpfS5tb25zdGVyLXRoZW1lLWJhY2tncm91bmQtaW5oZXJpdHtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQhaW1wb3J0YW50fS5tb25zdGVyLXRoZW1lLW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtb2Zme2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXXtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5Om5vbmU7cGFkZGluZzoxLjFlbTt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1tb2RhbCl9W2RhdGEtcG9wcGVyLWFycm93XSxbZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtiYWNrZ3JvdW5kOmluaGVyaXQ7aGVpZ2h0OmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSp2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xKnZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKX1bZGF0YS1wb3BwZXItYXJyb3dde3Zpc2liaWxpdHk6aGlkZGVufVtkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb250ZW50OlxcXCJcXFwiO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO3Zpc2liaWxpdHk6dmlzaWJsZX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj10b3BdPltkYXRhLXBvcHBlci1hcnJvd117Ym90dG9tOmNhbGModmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkvMil9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49dG9wXT5bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3JkZXItYm90dG9tOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1sZWZ0OnRyYW5zcGFyZW50O2JvcmRlci1yaWdodDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItdG9wOnRyYW5zcGFyZW50fWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePWJvdHRvbV0+W2RhdGEtcG9wcGVyLWFycm93XXt0b3A6Y2FsYyh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSl9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49Ym90dG9tXT5bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3JkZXItYm90dG9tOnRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yaWdodDp0cmFuc3BhcmVudDtib3JkZXItdG9wOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePWxlZnRdPltkYXRhLXBvcHBlci1hcnJvd117cmlnaHQ6Y2FsYyh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSl9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49bGVmdF0+W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp0cmFuc3BhcmVudDtib3JkZXItbGVmdDp0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXRvcDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1yaWdodF0+W2RhdGEtcG9wcGVyLWFycm93XXtsZWZ0OmNhbGModmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkvMil9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49cmlnaHRdPltkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JvcmRlci1ib3R0b206dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWxlZnQ6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJpZ2h0OnRyYW5zcGFyZW50O2JvcmRlci10b3A6dHJhbnNwYXJlbnR9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja30ubW9uc3Rlci1iYWRnZS1wcmltYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5LC5tb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LC5tb25zdGVyLWJhZGdlLXNlY29uZGFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LC5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUsLm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUtcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3N7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MsLm1vbnN0ZXItYmFkZ2Utc3VjY2Vzcy1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1zdWNjZXNzLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZ3twYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZywubW9uc3Rlci1iYWRnZS13YXJuaW5nLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXdhcm5pbmctcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1lcnJvcntwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZXJyb3IsLm1vbnN0ZXItYmFkZ2UtZXJyb3ItcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1lcnJvci1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbi5oaWRkZW57ZGlzcGxheTpub25lfW5hdltkYXRhLW1vbnN0ZXItcm9sZT1uYXZde2FsaWduLWl0ZW1zOmZsZXgtZW5kO2JvcmRlci1ib3R0b20tc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci1ib3R0b20td2lkdGg6dGhpbjtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO21hcmdpbi1ib3R0b206Ljc1cmVtO292ZXJmbG93OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b24gLnJlbW92ZS10YWJ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtaW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO2JhY2tncm91bmQtcG9zaXRpb246MTAwJSAxMDAlO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6MTZweDtmbGV4LXdyYXA6bm93cmFwO2hlaWdodDoxNnB4O21pbi1oZWlnaHQ6MTZweDtvcmRlcjoyO3dpZHRoOjE2cHh9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uIHNwYW57ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjQ7d2hpdGUtc3BhY2U6cHJlfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbnthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tc2VsZjpzdHJldGNoO2JvcmRlcjpub25lO2JvcmRlci1ib3R0b206dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7bWFyZ2luLXJpZ2h0Oi43NXJlbTtvdXRsaW5lOm5vbmU7cGFkZGluZzouMzc1cmVtIDA7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dHJhbnNpdGlvbjpjb2xvciAuOHM7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b246bm90KFtkaXNhYmxlZF0pOmhvdmVye2JvcmRlci1ib3R0b20tc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1zdGF0ZT1hY3RpdmVdLFtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXTpub3QoW2Rpc2FibGVkXSk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O2JvcmRlci1ib3R0b20tc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSkhaW1wb3J0YW50fUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1zdGF0ZT1hY3RpdmVdLFtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXTpub3QoW2Rpc2FibGVkXSk6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpIWltcG9ydGFudH19W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uW2Rpc2FibGVkXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSk7Y3Vyc29yOm5vdC1hbGxvd2VkfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItcm9sZT1zd2l0Y2hde2FsaWduLXNlbGY6Y2VudGVyO2JvcmRlcjowO29yZGVyOjI7dG91Y2gtYWN0aW9uOm5vbmV9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1yb2xlPXN3aXRjaF06bm90KFtkaXNhYmxlZF0pOmhvdmVye2JvcmRlci1ib3R0b20td2lkdGg6MH1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b24gaW1ne2hlaWdodDoxLjNyZW07bWFyZ2luLWxlZnQ6LjRyZW07d2lkdGg6MS4zcmVtfTo6c2xvdHRlZCg6bm90KFtzbG90XSk6bm90KC5hY3RpdmUpKXtkaXNwbGF5Om5vbmV9OjpzbG90dGVkKCope2FsaWduLXNlbGY6Y2VudGVyfTo6c2xvdHRlZChbc2xvdF0pe2JvcmRlci1ib3R0b20tc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci1ib3R0b20td2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpfTo6c2xvdHRlZChbc2xvdD1zdGFydF0pe21hcmdpbi1yaWdodDouNzVyZW07b3JkZXI6MH06OnNsb3R0ZWQoW3Nsb3Q9ZW5kXSl7bWFyZ2luLWxlZnQ6Ljc1cmVtO29yZGVyOjN9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gW2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlci1uYXZdIGJ1dHRvbjpub3QoW2Rpc2FibGVkXSl7Ym9yZGVyOjA7anVzdGlmeS1jb250ZW50OmxlZnQ7cGFkZGluZy1sZWZ0OjE1cHg7cGFkZGluZy1yaWdodDoxNXB4O3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gW2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlci1uYXZdIGJ1dHRvbjpob3ZlcixbZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyLW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1zdGF0ZT1hY3RpdmVdLFtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItbmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV06bm90KFtkaXNhYmxlZF0pOmhvdmVye2JvcmRlcjowfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gW2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlci1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXSxbZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyLW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1zdGF0ZT1hY3RpdmVdOm5vdChbZGlzYWJsZWRdKTpob3Zlcntjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KSFpbXBvcnRhbnR9fSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IGZpcmVDdXN0b21FdmVudCB9IGZyb20gXCIuLi8uLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmZ1bmN0aW9uIGZpbmRTaGFkb3dSb290KGVsZW1lbnQpIHtcblx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTaGFkb3dSb290KSByZXR1cm4gZWxlbWVudDtcblx0aWYgKCFlbGVtZW50LnBhcmVudE5vZGUpIHJldHVybiBudWxsO1xuXHRyZXR1cm4gZmluZFNoYWRvd1Jvb3QoZWxlbWVudC5wYXJlbnROb2RlKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIGZldGNoIG9wdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBmaWx0ZXIgZmV0Y2ggb3B0aW9uc1xuICogQHJldHVybiB7UHJvbWlzZTxPYmplY3Q+fVxuICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuICogQHRocm93cyB7RXJyb3J9IGNsaWVudCBlcnJvclxuICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2ZcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGxvYWRBbmRBc3NpZ25Db250ZW50KGVsZW1lbnQsIHVybCwgb3B0aW9ucywgZmlsdGVyKSB7XG5cdHJldHVybiBsb2FkQ29udGVudCh1cmwsIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG5cdFx0bGV0IGNvbnRlbnQgPSByZXNwb25zZS5jb250ZW50O1xuXG5cdFx0aWYgKGlzU3RyaW5nKGZpbHRlcikgJiYgZmlsdGVyICE9PSBcIlwiKSB7XG5cdFx0XHRjb25zdCB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdGNvbnN0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0Yy5pbm5lckhUTUwgPSBjb250ZW50O1xuXHRcdFx0Zm9yIChjb25zdCBbLCBub2RlXSBvZiBjLnF1ZXJ5U2VsZWN0b3JBbGwoZmlsdGVyKS5lbnRyaWVzKCkpIHtcblx0XHRcdFx0dC5hcHBlbmRDaGlsZChub2RlKTtcblx0XHRcdH1cblxuXHRcdFx0Y29udGVudCA9IHQuaW5uZXJIVE1MO1xuXHRcdH1cblxuXHRcdGNvbnN0IHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdHQuaW5uZXJIVE1MID0gY29udGVudDtcblxuXHRcdGNvbnN0IHNjcmlwdHMgPSB0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzY3JpcHRcIik7XG5cdFx0Zm9yIChjb25zdCBbLCBzY3JpcHRdIG9mIHNjcmlwdHMuZW50cmllcygpKSB7XG5cdFx0XHRjb25zdCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcblx0XHRcdHMuaW5uZXJIVE1MID0gc2NyaXB0LmlubmVySFRNTDtcblx0XHRcdGlmIChzY3JpcHQuc3JjKSBzLnNyYyA9IHNjcmlwdC5zcmM7XG5cdFx0XHRpZiAoc2NyaXB0LnR5cGUpIHMudHlwZSA9IHNjcmlwdC50eXBlO1xuXHRcdFx0aWYgKHNjcmlwdC5hc3luYykgcy5hc3luYyA9IHNjcmlwdC5hc3luYztcblx0XHRcdGlmIChzY3JpcHQuZGVmZXIpIHMuZGVmZXIgPSBzY3JpcHQuZGVmZXI7XG5cdFx0XHRpZiAoc2NyaXB0LmNyb3NzT3JpZ2luKSBzLmNyb3NzT3JpZ2luID0gc2NyaXB0LmNyb3NzT3JpZ2luO1xuXHRcdFx0aWYgKHNjcmlwdC5pbnRlZ3JpdHkpIHMuaW50ZWdyaXR5ID0gc2NyaXB0LmludGVncml0eTtcblx0XHRcdGlmIChzY3JpcHQucmVmZXJyZXJQb2xpY3kpIHMucmVmZXJyZXJQb2xpY3kgPSBzY3JpcHQucmVmZXJyZXJQb2xpY3k7XG5cdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHMpO1xuXHRcdFx0dC5yZW1vdmVDaGlsZChzY3JpcHQpO1xuXHRcdH1cblxuXHRcdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpLmlubmVySFRNTCA9IHQuaW5uZXJIVE1MO1xuXG5cdFx0Y29uc3Qgcm9vdCA9IGZpbmRTaGFkb3dSb290KGVsZW1lbnQpO1xuXHRcdGlmIChyb290ICE9PSBudWxsKSB7XG5cdFx0XHRlbGVtZW50ID0gcm9vdC5ob3N0O1xuXHRcdH1cblxuXHRcdGZpcmVDdXN0b21FdmVudChlbGVtZW50LCBcIm1vbnN0ZXItZmV0Y2hlZFwiLCB7XG5cdFx0XHR1cmwsXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcmVzcG9uc2U7XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgZmV0Y2ggb3B0aW9uc1xuICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fVxuICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuICogQHRocm93cyB7RXJyb3J9IGNsaWVudCBlcnJvclxuICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gbG9hZENvbnRlbnQodXJsLCBvcHRpb25zKSB7XG5cdGlmICh1cmwgaW5zdGFuY2VvZiBVUkwpIHtcblx0XHR1cmwgPSB1cmwudG9TdHJpbmcoKTtcblx0fVxuXG5cdHJldHVybiBmZXRjaCh2YWxpZGF0ZVN0cmluZyh1cmwpLCBvcHRpb25zKS50aGVuKChyZXNwb25zZSkgPT4ge1xuXHRcdC8vIFRoZSBvayByZWFkLW9ubHkgcHJvcGVydHkgb2YgdGhlIFJlc3BvbnNlIGludGVyZmFjZSBjb250YWlucyBhXG5cdFx0Ly8gQm9vbGVhbiBzdGF0aW5nIHdoZXRoZXIgdGhlIHJlc3BvbnNlIHdhcyBzdWNjZXNzZnVsIChzdGF0dXMgaW4gdGhlIHJhbmdlIDIwMC0yOTkpIG9yIG5vdC5cblx0XHRpZiAocmVzcG9uc2U/Lm9rICE9PSB0cnVlKSB7XG5cdFx0XHQvLyBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9SZXNwb25zZS90eXBlXG5cdFx0XHRpZiAoXG5cdFx0XHRcdFtcImVycm9yXCIsIFwib3BhcXVlXCIsIFwib3BhcXVlcmVkaXJlY3RcIl0uaW5kZXhPZihyZXNwb25zZT8udHlwZSkgIT09IC0xXG5cdFx0XHQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdGB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGEgKCR7cmVzcG9uc2U/LnR5cGV9KWAsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHN0YXR1c0NsYXNzID0gYCR7cmVzcG9uc2U/LnN0YXR1c31gLnN1YnN0cmluZygwLCAxKTtcblx0XHRcdHN3aXRjaCAoc3RhdHVzQ2xhc3MpIHtcblx0XHRcdFx0Y2FzZSBcIjRcIjpcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGNsaWVudCBlcnJvciAke3Jlc3BvbnNlPy5zdGF0dXNUZXh0fWApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRcdGB1bmRlZmluZWQgc3RhdHVzICgke3Jlc3BvbnNlPy5zdGF0dXN9IC8gJHtyZXNwb25zZT8uc3RhdHVzVGV4dH0pIG9yIHR5cGUgKCR7cmVzcG9uc2U/LnR5cGV9KWAsXG5cdFx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0cmVzcG9uc2Vcblx0XHRcdFx0LnRleHQoKVxuXHRcdFx0XHQudGhlbigoY29udGVudCkgPT4ge1xuXHRcdFx0XHRcdHJlc29sdmUoe1xuXHRcdFx0XHRcdFx0Y29udGVudCxcblx0XHRcdFx0XHRcdHR5cGU6IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2gocmVqZWN0KTtcblx0XHR9KTtcblx0fSk7XG59XG5cbmV4cG9ydCB7IGxvYWRBbmRBc3NpZ25Db250ZW50LCBsb2FkQ29udGVudCB9O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFRoZW1lU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgVGhlbWVTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0VGhlbWVTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHRoZW1lIHsgXG4ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLXRoZW1lLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMSl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0xe2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci1jb2xvci1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTIpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMntjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0zKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTN7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLWNvbG9yLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLXRoZW1lLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci1ib3JkZXItY29sb3ItNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItNCl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC00e2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci1jb2xvci1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1jb250YWluZXItMSwubW9uc3Rlci10aGVtZS1jb250cm9sLXJvdy0xe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1jb250YWluZXItMSwubW9uc3Rlci10aGVtZS1jb250cm9sLWVsZW1lbnQsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1yb3ctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3IpfS5tb25zdGVyLXRoZW1lLWJhY2tncm91bmQtaW5oZXJpdHtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQhaW1wb3J0YW50fS5tb25zdGVyLXRoZW1lLW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtb2Zme2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yKX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uLy4uLy4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlQm9vbGVhbiB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgc2V0RXZlbnRMaXN0ZW5lcnNNb2RpZmllcnMsIHBvcHBlckluc3RhbmNlU3ltYm9sIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckluc3RhbmNlU3ltYm9sID0gU3ltYm9sKFwicG9wcGVySW5zdGFuY2VcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aGlzIHtDdXN0b21FbGVtZW50fVxuICogQHBhcmFtIHtCb29sZWFufSBtb2RlXG4gKi9cbmZ1bmN0aW9uIHNldEV2ZW50TGlzdGVuZXJzTW9kaWZpZXJzKG1vZGUpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IGV4dGVuZCh7fSwgdGhpcy5nZXRPcHRpb24oXCJwb3BwZXJcIikpO1xuXHRjb25zdCBtb2RpZmllcnMgPSBvcHRpb25zPy5bXCJtb2RpZmllcnNcIl07XG5cblx0aWYgKCFpc0FycmF5KG1vZGlmaWVycykpIHtcblx0XHRvcHRpb25zW1wibW9kaWZpZXJzXCJdID0gW107XG5cdH1cblxuXHRpZiAoXG5cdFx0b3B0aW9uc1tcIm1vZGlmaWVyc1wiXS5maWx0ZXIoKGVudHJ5KSA9PiB7XG5cdFx0XHRpZiAoZW50cnk/LltcIm5hbWVcIl0gPT09IFwiZXZlbnRMaXN0ZW5lcnNcIikge1xuXHRcdFx0XHQvLyBwZXJmb3JtYW5jZSBodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi90dXRvcmlhbC8jcGVyZm9ybWFuY2Vcblx0XHRcdFx0ZW50cnlbXCJlbmFibGVkXCJdID0gdmFsaWRhdGVCb29sZWFuKG1vZGUpO1xuXHRcdFx0fVxuXHRcdH0pLmxlbmd0aCA9PT0gMFxuXHQpIHtcblx0XHRvcHRpb25zW1wibW9kaWZpZXJzXCJdLnB1c2goe1xuXHRcdFx0bmFtZTogXCJldmVudExpc3RlbmVyc1wiLFxuXHRcdFx0ZW5hYmxlZDogdmFsaWRhdGVCb29sZWFuKG1vZGUpLFxuXHRcdH0pO1xuXHR9XG5cblx0dGhpc1twb3BwZXJJbnN0YW5jZVN5bWJvbF0uc2V0T3B0aW9ucyhvcHRpb25zKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQb3BwZXIgfSBmcm9tIFwiQHBvcHBlcmpzL2NvcmVcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHtcblx0YWRkQXR0cmlidXRlVG9rZW4sXG5cdGFkZFRvT2JqZWN0TGluayxcblx0aGFzT2JqZWN0TGluayxcbn0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1BSRUZJWCxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdGdldFNsb3R0ZWRFbGVtZW50cyxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQge1xuXHRmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCxcblx0ZmlyZUN1c3RvbUV2ZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50LCBnZXRXaW5kb3cgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyByYW5kb20gfSBmcm9tIFwiLi4vLi4vbWF0aC9yYW5kb20ubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgSUQgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IFRva2VuTGlzdCB9IGZyb20gXCIuLi8uLi90eXBlcy90b2tlbmxpc3QubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi8uLi91dGlsL2Nsb25lLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IFByb2Nlc3NpbmcgfSBmcm9tIFwiLi4vLi4vdXRpbC9wcm9jZXNzaW5nLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0JVVFRPTl9MQUJFTCxcblx0QVRUUklCVVRFX0ZPUk1fUkVMT0FELFxuXHRBVFRSSUJVVEVfRk9STV9VUkwsXG5cdFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyxcbn0gZnJvbSBcIi4uL2Zvcm0vY29uc3RhbnRzLm1qc1wiO1xuXG5pbXBvcnQgeyBUYWJzU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvdGFicy5tanNcIjtcbmltcG9ydCB7IGxvYWRBbmRBc3NpZ25Db250ZW50IH0gZnJvbSBcIi4uL2Zvcm0vdXRpbC9mZXRjaC5tanNcIjtcbmltcG9ydCB7IFRoZW1lU3R5bGVTaGVldCB9IGZyb20gXCIuLi9zdHlsZXNoZWV0L3RoZW1lLm1qc1wiO1xuaW1wb3J0IHtcblx0cG9wcGVySW5zdGFuY2VTeW1ib2wsXG5cdHNldEV2ZW50TGlzdGVuZXJzTW9kaWZpZXJzLFxufSBmcm9tIFwiLi4vZm9ybS91dGlsL3BvcHBlci5tanNcIjtcblxuZXhwb3J0IHsgVGFicyB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyTmF2RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInBvcHBlck5hdkVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG5hdkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJuYXZFbGVtZW50XCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3dpdGNoRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInN3aXRjaEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNoYW5nZVRhYkV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNoYW5nZVRhYkV2ZW50SGFuZGxlclwiKTtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlbW92ZVRhYkV2ZW50SGFuZGxlciA9IFN5bWJvbChcInJlbW92ZVRhYkV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyU3dpdGNoRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwicG9wcGVyU3dpdGNoRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNsb3NlRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2xvc2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG11dGF0aW9uT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJtdXRhdGlvbk9ic2VydmVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkaW1lbnNpb25zU3ltYm9sID0gU3ltYm9sKFwiZGltZW5zaW9uc1wiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJDYWxsYmFja1N5bWJvbCA9IFN5bWJvbChcInRpbWVyQ2FsbGJhY2tcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVzaXplT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJyZXNpemVPYnNlcnZlclwiKTtcblxuLyoqXG4gKiBBIFRhYnMgQ29udHJvbFxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2xheW91dC90YWJzL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2xheW91dC90YWJzLXNpbXBsZSBTaW1wbGUgVGFic1xuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbGF5b3V0L3RhYnMtYWN0aXZlIEFjdGl2ZSBUYWJzXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9sYXlvdXQvdGFicy1yZW1vdmFibGUgUmVtb3ZhYmxlIFRhYnNcbiAqXG4gKiBAaXNzdWUgaHR0cHM6Ly9sb2NhbGhvc3QuYWx2aW5lLmRldjo4NDQzL2RldmVsb3BtZW50L2lzc3Vlcy9jbG9zZWQvMjY4Lmh0bWxcbiAqIEBpc3N1ZSBodHRwczovL2xvY2FsaG9zdC5hbHZpbmUuZGV2Ojg0NDMvZGV2ZWxvcG1lbnQvaXNzdWVzL2Nsb3NlZC8yNzEuaHRtbFxuICogQGlzc3VlIGh0dHBzOi8vbG9jYWxob3N0LmFsdmluZS5kZXY6ODQ0My9kZXZlbG9wbWVudC9pc3N1ZXMvY2xvc2VkLzI3My5odG1sXG4gKlxuICogQHNpbmNlIDMuNzQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoaXMgQ3VzdG9tQ29udHJvbCBjcmVhdGVzIGEgdGFiIGVsZW1lbnQgd2l0aCBhIHZhcmlldHkgb2Ygb3B0aW9ucy5cbiAqL1xuY2xhc3MgVGFicyBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9sYXlvdXQvdGFic1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGxhYmVsc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLm5ldy10YWItbGFiZWw9XCJOZXcgVGFiXCJcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzXG5cdCAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBmZWF0dXJlcy5vcGVuRGVsYXk9NTAwIE9wZW4gZGVsYXkgaW4gbWlsbGlzZWNvbmRzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmZWF0dXJlcy5yZW1vdmVCZWhhdmlvcj1cImF1dG9cIiBSZW1vdmUgYmVoYXZpb3IsIGF1dG8gKGRlZmF1bHQpLCBuZXh0LCBwcmV2aW91cyBhbmQgbm9uZVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLm9wZW5GaXJzdD10cnVlIE9wZW4gdGhlIGZpcnN0IHRhYlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2ggRmV0Y2ggW3NlZSBVc2luZyBGZXRjaCBtb3ppbGxhLm9yZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZldGNoX0FQSS9Vc2luZ19GZXRjaClcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLnJlZGlyZWN0PWVycm9yXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tb2RlPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jcmVkZW50aWFscz1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2guaGVhZGVycz17XCJhY2NlcHRcIjpcInRleHQvaHRtbFwifX1cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHBvcHBlciBbUG9wcGVySlMgT3B0aW9uc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcG9wcGVyLnBsYWNlbWVudD1ib3R0b20gUG9wcGVySlMgcGxhY2VtZW50XG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0W119IG1vZGlmaWVycz17bmFtZTpvZmZzZXR9IFBvcHBlckpTIHBsYWNlbWVudFxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0bGFiZWxzOiB7XG5cdFx0XHRcdFwibmV3LXRhYi1sYWJlbFwiOiBcIk5ldyBUYWJcIixcblx0XHRcdH0sXG5cdFx0XHRidXR0b25zOiB7XG5cdFx0XHRcdHN0YW5kYXJkOiBbXSxcblx0XHRcdFx0cG9wcGVyOiBbXSxcblx0XHRcdH0sXG5cdFx0XHRmZXRjaDoge1xuXHRcdFx0XHRyZWRpcmVjdDogXCJlcnJvclwiLFxuXHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdG1vZGU6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0Y3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRcdGFjY2VwdDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cblx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdG9wZW5EZWxheTogbnVsbCxcblx0XHRcdFx0cmVtb3ZlQmVoYXZpb3I6IFwiYXV0b1wiLFxuXHRcdFx0XHRvcGVuRmlyc3Q6IHRydWUsXG5cdFx0XHR9LFxuXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGJ1dHRvbjogXCJtb25zdGVyLXRoZW1lLXByaW1hcnktMVwiLFxuXHRcdFx0XHRwb3BwZXI6IFwibW9uc3Rlci10aGVtZS1wcmltYXJ5LTFcIixcblx0XHRcdFx0bmF2aWdhdGlvbjogXCJtb25zdGVyLXRoZW1lLXByaW1hcnktMVwiLFxuXHRcdFx0fSxcblxuXHRcdFx0cG9wcGVyOiB7XG5cdFx0XHRcdHBsYWNlbWVudDogXCJib3R0b21cIixcblx0XHRcdFx0bW9kaWZpZXJzOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bmFtZTogXCJvZmZzZXRcIixcblx0XHRcdFx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0XHRcdFx0b2Zmc2V0OiBbMCwgMl0sXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImV2ZW50TGlzdGVuZXJzXCIsXG5cdFx0XHRcdFx0XHRlbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblxuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXG5cdFx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXSA9IG5ldyBQYXRoZmluZGVyKHsgZGF0YToge30gfSk7XG5cblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cblx0XHQvLyBzZXR1cCBzdHJ1Y3R1cmVcblx0XHRpbml0VGFiQnV0dG9ucy5jYWxsKHRoaXMpLnRoZW4oKCkgPT4ge1xuXHRcdFx0aW5pdFBvcHBlclN3aXRjaC5jYWxsKHRoaXMpO1xuXHRcdFx0aW5pdFBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdFx0YXR0YWNoUmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0XHRcdGF0dGFjaFRhYkNoYW5nZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtUYWJzU3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLXRhYnNcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGZ1bmN0aW9uIHRoYXQgYWN0aXZhdGVzIGEgdGFiIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBuYW1lLlxuXHQgKlxuXHQgKiBUaGUgdGFicyBoYXZlIHRvIGJlIG5hbWVkIHdpdGggdGhlIGBkYXRhLW1vbnN0ZXItbmFtZWAgYXR0cmlidXRlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3R5cGV9IGlkT3JOYW1lIC0gdGhlIG5hbWUgb3IgaWQgb2YgdGhlIHRhYiB0byBhY3RpdmF0ZVxuXHQgKiBAcmV0dXJuIHtUYWJzfSAtIFRoZSBjdXJyZW50IGluc3RhbmNlXG5cdCAqL1xuXHRhY3RpdmVUYWIoaWRPck5hbWUpIHtcblx0XHRsZXQgZm91bmQgPSBmYWxzZTtcblxuXHRcdGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMpLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRcdGlmIChmb3VuZCA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1uYW1lXCIpID09PSBpZE9yTmFtZSkge1xuXHRcdFx0XHR0aGlzLnNoYWRvd1Jvb3Rcblx0XHRcdFx0XHQucXVlcnlTZWxlY3Rvcihcblx0XHRcdFx0XHRcdGBbZGF0YS1tb25zdGVyLXRhYi1yZWZlcmVuY2U9XCIke25vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIil9XCJdYCxcblx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0LmNsaWNrKCk7XG5cdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIikgPT09IGlkT3JOYW1lKSB7XG5cdFx0XHRcdHRoaXMuc2hhZG93Um9vdFxuXHRcdFx0XHRcdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0XHRcdFx0YFtkYXRhLW1vbnN0ZXItdGFiLXJlZmVyZW5jZT1cIiR7bm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKX1cIl1gLFxuXHRcdFx0XHRcdClcblx0XHRcdFx0XHQuY2xpY2soKTtcblx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG5hbWUgb3IgaWQgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgdGFiLlxuXHQgKlxuXHQgKiBUaGUgdGFicyBoYXZlIHRvIGJlIG5hbWVkIHdpdGggdGhlIGBkYXRhLW1vbnN0ZXItbmFtZWAgYXR0cmlidXRlLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH1cblx0ICovXG5cdGdldEFjdGl2ZVRhYigpIHtcblx0XHRjb25zdCBub2RlcyA9IGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMpO1xuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdFx0aWYgKG5vZGUubWF0Y2hlcyhcIi5hY3RpdmVcIikgPT09IHRydWUpIHtcblx0XHRcdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLW5hbWVcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItbmFtZVwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGRvbSBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGRvbSBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0UG9wcGVyU3dpdGNoKCkge1xuXHRjb25zdCBub2RlcyA9IGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIGBbJHtBVFRSSUJVVEVfUk9MRX09XCJzd2l0Y2hcIl1gKTsgLy8gbnVsbCBcdTIxQTYgb25seSB1bm5hbWVkIHNsb3RzXG5cdGxldCBzd2l0Y2hCdXR0b247XG5cdGlmIChub2Rlcy5zaXplID09PSAwKSB7XG5cdFx0c3dpdGNoQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcblx0XHRzd2l0Y2hCdXR0b24uc2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFLCBcInN3aXRjaFwiKTtcblx0XHRzd2l0Y2hCdXR0b24uc2V0QXR0cmlidXRlKFwicGFydFwiLCBcInN3aXRjaFwiKTtcblx0XHRzd2l0Y2hCdXR0b24uY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcblx0XHRjb25zdCBjbGFzc0xpc3QgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuYnV0dG9uXCIpO1xuXHRcdGlmIChjbGFzc0xpc3QpIHtcblx0XHRcdHN3aXRjaEJ1dHRvbi5jbGFzc0xpc3QuYWRkKGNsYXNzTGlzdCk7XG5cdFx0fVxuXHRcdHN3aXRjaEJ1dHRvbi5pbm5lckhUTUwgPVxuXHRcdFx0JzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+PHBhdGggZD1cIk05LjUgMTNhMS41IDEuNSAwIDEgMS0zIDAgMS41IDEuNSAwIDAgMSAzIDB6bTAtNWExLjUgMS41IDAgMSAxLTMgMCAxLjUgMS41IDAgMCAxIDMgMHptMC01YTEuNSAxLjUgMCAxIDEtMyAwIDEuNSAxLjUgMCAwIDEgMyAwelwiLz48L3N2Zz4nO1xuXHRcdHRoaXNbbmF2RWxlbWVudFN5bWJvbF0ucHJlcGVuZChzd2l0Y2hCdXR0b24pO1xuXHR9IGVsc2Uge1xuXHRcdHN3aXRjaEJ1dHRvbiA9IG5vZGVzLm5leHQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1twb3BwZXJTd2l0Y2hFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGV2ZW50LCBBVFRSSUJVVEVfUk9MRSwgXCJzd2l0Y2hcIik7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSB7XG5cdFx0XHR0b2dnbGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0XHR9XG5cdH07XG5cblx0Zm9yIChjb25zdCB0eXBlIG9mIFtcImNsaWNrXCIsIFwidG91Y2hcIl0pIHtcblx0XHRzd2l0Y2hCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW3BvcHBlclN3aXRjaEV2ZW50SGFuZGxlcl0pO1xuXHR9XG5cblx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXSA9IHN3aXRjaEJ1dHRvbjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBoaWRlUG9wcGVyKCkge1xuXHRpZiAoIXRoaXNbcG9wcGVySW5zdGFuY2VTeW1ib2xdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdC8vIHBlcmZvcm1hbmNlIGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL3R1dG9yaWFsLyNwZXJmb3JtYW5jZVxuXHRzZXRFdmVudExpc3RlbmVyc01vZGlmaWVycy5jYWxsKHRoaXMsIGZhbHNlKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzaG93UG9wcGVyKCkge1xuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0s7XG5cdC8vIHBlcmZvcm1hbmNlIGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL3R1dG9yaWFsLyNwZXJmb3JtYW5jZVxuXHRzZXRFdmVudExpc3RlbmVyc01vZGlmaWVycy5jYWxsKHRoaXMsIHRydWUpO1xuXG5cdHRoaXNbcG9wcGVySW5zdGFuY2VTeW1ib2xdLnVwZGF0ZSgpO1xuXG5cdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwidmlzaWJpbGl0eVwiKTtcblx0fSlcblx0XHQucnVuKHVuZGVmaW5lZClcblx0XHQudGhlbigoKSA9PiB7fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlUG9wcGVyKCkge1xuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRoaWRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdH0gZWxzZSB7XG5cdFx0c2hvd1BvcHBlci5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoUmVzaXplT2JzZXJ2ZXIoKSB7XG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuXHRcdGlmICh0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuXHRcdFx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXCJkYXRhLmNhbGN1bGF0ZWRcIiwgZmFsc2UpO1xuXHRcdFx0Y2hlY2tBbmRSZWFycmFuZ2VCdXR0b25zLmNhbGwodGhpcyk7XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUodGhpc1tuYXZFbGVtZW50U3ltYm9sXSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoVGFiQ2hhbmdlT2JzZXJ2ZXIoKSB7XG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHRuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XG5cdFx0bGV0IHJ1blVwZGF0ZSA9IGZhbHNlO1xuXG5cdFx0Zm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnMpIHtcblx0XHRcdGlmIChtdXRhdGlvbi50eXBlID09PSBcImNoaWxkTGlzdFwiKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRtdXRhdGlvbi5hZGRlZE5vZGVzLmxlbmd0aCA+IDAgfHxcblx0XHRcdFx0XHRtdXRhdGlvbi5yZW1vdmVkTm9kZXMubGVuZ3RoID4gMFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRydW5VcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJ1blVwZGF0ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXCJkYXRhLmNhbGN1bGF0ZWRcIiwgZmFsc2UpO1xuXHRcdFx0aW5pdFRhYkJ1dHRvbnMuY2FsbCh0aGlzKTtcblx0XHR9XG5cdH0pLm9ic2VydmUodGhpcywge1xuXHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEBleHRlcm5hbCBcImV4dGVybmFsOmNyZWF0ZVBvcHBlclwiXG4gKi9cbmZ1bmN0aW9uIGluaXRQb3BwZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGNvbnN0IG9wdGlvbnMgPSBleHRlbmQoe30sIHNlbGYuZ2V0T3B0aW9uKFwicG9wcGVyXCIpKTtcblxuXHRzZWxmW3BvcHBlckluc3RhbmNlU3ltYm9sXSA9IGNyZWF0ZVBvcHBlcihcblx0XHRzZWxmW3N3aXRjaEVsZW1lbnRTeW1ib2xdLFxuXHRcdHNlbGZbcG9wcGVyRWxlbWVudFN5bWJvbF0sXG5cdFx0b3B0aW9ucyxcblx0KTtcblxuXHRjb25zdCBvYnNlcnZlcjEgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zKSB7XG5cdFx0bGV0IHJ1blVwZGF0ZSA9IGZhbHNlO1xuXHRcdGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB7XG5cdFx0XHRpZiAobXV0YXRpb24udHlwZSA9PT0gXCJjaGlsZExpc3RcIikge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGggPiAwIHx8XG5cdFx0XHRcdFx0bXV0YXRpb24ucmVtb3ZlZE5vZGVzLmxlbmd0aCA+IDBcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cnVuVXBkYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChydW5VcGRhdGUgPT09IHRydWUpIHtcblx0XHRcdHNlbGZbcG9wcGVySW5zdGFuY2VTeW1ib2xdLnVwZGF0ZSgpO1xuXHRcdH1cblx0fSk7XG5cblx0b2JzZXJ2ZXIxLm9ic2VydmUoc2VsZltwb3BwZXJOYXZFbGVtZW50U3ltYm9sXSwge1xuXHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRzdWJ0cmVlOiB0cnVlLFxuXHR9KTtcblxuXHRyZXR1cm4gc2VsZjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICovXG5mdW5jdGlvbiBzaG93KGVsZW1lbnQpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0Y29uc3QgcmVmZXJlbmNlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoYCR7QVRUUklCVVRFX1BSRUZJWH10YWItcmVmZXJlbmNlYCk7XG5cblx0Y29uc3Qgbm9kZXMgPSBnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzKTtcblx0Zm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG5cdFx0Y29uc3QgaWQgPSBub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuXG5cdFx0aWYgKGlkID09PSByZWZlcmVuY2UpIHtcblx0XHRcdG5vZGUuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcblxuXHRcdFx0Y29uc3Qgb3BlbkRlbGF5ID0gcGFyc2VJbnQodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5vcGVuRGVsYXlcIiksIDEwKTtcblxuXHRcdFx0aWYgKCFpc05hTihvcGVuRGVsYXkpICYmIG9wZW5EZWxheSA+IDApIHtcblx0XHRcdFx0bm9kZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcblxuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRub2RlLnN0eWxlLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcblx0XHRcdFx0fSwgb3BlbkRlbGF5KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gZ2V0IGFsbCBkYXRhLSBmcm9tIGJ1dHRvbiBhbmQgZmlsdGVyIG91dCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcyBhbmQgZGF0YS1tb25zdGVyLWluc2VydFxuXHRcdFx0Y29uc3QgZGF0YSA9IHt9O1xuXHRcdFx0Y29uc3QgbWFzayA9IFtcblx0XHRcdFx0XCJkYXRhLW1vbnN0ZXItYXR0cmlidXRlc1wiLFxuXHRcdFx0XHRcImRhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlXCIsXG5cdFx0XHRcdFwiZGF0YS1tb25zdGVyLXN0YXRlXCIsXG5cdFx0XHRcdFwiZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbFwiLFxuXHRcdFx0XHRcImRhdGEtbW9uc3Rlci1vYmplY3RsaW5rXCIsXG5cdFx0XHRcdFwiZGF0YS1tb25zdGVyLXJvbGVcIixcblx0XHRcdF07XG5cblx0XHRcdGZvciAoY29uc3QgWywgYXR0cl0gb2YgT2JqZWN0LmVudHJpZXMobm9kZS5hdHRyaWJ1dGVzKSkge1xuXHRcdFx0XHRpZiAoYXR0ci5uYW1lLnN0YXJ0c1dpdGgoXCJkYXRhLVwiKSAmJiBtYXNrLmluZGV4T2YoYXR0ci5uYW1lKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRkYXRhW2F0dHIubmFtZV0gPSBhdHRyLnZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwpKSB7XG5cdFx0XHRcdGNvbnN0IHVybCA9IG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCFub2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9SRUxPQUQpIHx8XG5cdFx0XHRcdFx0bm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKS50b0xvd2VyQ2FzZSgpID09PSBcIm9uc2hvd1wiXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdG5vZGUucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJmZXRjaFwiLCB7fSk7XG5cdFx0XHRcdGNvbnN0IGZpbHRlciA9IHVuZGVmaW5lZDtcblx0XHRcdFx0bG9hZEFuZEFzc2lnbkNvbnRlbnQobm9kZSwgdXJsLCBvcHRpb25zLCBmaWx0ZXIpXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci10YWItY2hhbmdlZFwiLCB7XG5cdFx0XHRcdFx0XHRcdHJlZmVyZW5jZSxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci10YWItY2hhbmdlZFwiLCB7XG5cdFx0XHRcdFx0cmVmZXJlbmNlLFxuXHRcdFx0XHRcdGRhdGEsXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRub2RlLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc3RhbmRhcmRCdXR0b25zID0gdGhpcy5nZXRPcHRpb24oXCJidXR0b25zLnN0YW5kYXJkXCIpO1xuXHRmb3IgKGNvbnN0IGluZGV4IGluIHN0YW5kYXJkQnV0dG9ucykge1xuXHRcdGNvbnN0IGJ1dHRvbiA9IHN0YW5kYXJkQnV0dG9uc1tpbmRleF07XG5cdFx0Y29uc3Qgc3RhdGUgPSBidXR0b25bXCJyZWZlcmVuY2VcIl0gPT09IHJlZmVyZW5jZSA/IFwiYWN0aXZlXCIgOiBcImluYWN0aXZlXCI7XG5cdFx0dGhpcy5zZXRPcHRpb24oYGJ1dHRvbnMuc3RhbmRhcmQuJHtpbmRleH0uc3RhdGVgLCBzdGF0ZSk7XG5cdH1cblxuXHRjb25zdCBwb3BwZXJCdXR0b24gPSB0aGlzLmdldE9wdGlvbihcImJ1dHRvbnMucG9wcGVyXCIpO1xuXHRmb3IgKGNvbnN0IGluZGV4IGluIHBvcHBlckJ1dHRvbikge1xuXHRcdGNvbnN0IGJ1dHRvbiA9IHBvcHBlckJ1dHRvbltpbmRleF07XG5cdFx0Y29uc3Qgc3RhdGUgPSBidXR0b25bXCJyZWZlcmVuY2VcIl0gPT09IHJlZmVyZW5jZSA/IFwiYWN0aXZlXCIgOiBcImluYWN0aXZlXCI7XG5cdFx0dGhpcy5zZXRPcHRpb24oYGJ1dHRvbnMucG9wcGVyLiR7aW5kZXh9LnN0YXRlYCwgc3RhdGUpO1xuXHR9XG5cblx0aGlkZVBvcHBlci5jYWxsKHRoaXMpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKiBAZmlyZXMgbW9uc3Rlci10YWItcmVtb3ZlXG5cdCAqL1xuXHR0aGlzW3JlbW92ZVRhYkV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XCJyZW1vdmUtdGFiXCIsXG5cdFx0KTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGNvbnN0IGJ1dHRvbiA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0XHRldmVudCxcblx0XHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcdFwiYnV0dG9uXCIsXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoYnV0dG9uIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQgJiYgYnV0dG9uLmRpc2FibGVkICE9PSB0cnVlKSB7XG5cdFx0XHRcdGNvbnN0IHJlZmVyZW5jZSA9IGJ1dHRvbi5nZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdFx0YCR7QVRUUklCVVRFX1BSRUZJWH10YWItcmVmZXJlbmNlYCxcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRsZXQgZG9DaGFuZ2UgPSBmYWxzZTtcblx0XHRcdFx0bGV0IG5leHROYW1lID0gbnVsbDtcblx0XHRcdFx0bGV0IHByZXZpb3VzTmFtZSA9IG51bGw7XG5cblx0XHRcdFx0Y29uc3QgYnRuID0gdGhpcy5nZXRPcHRpb24oXCJidXR0b25zXCIpO1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGJ0bi5zdGFuZGFyZC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGlmIChidG4uc3RhbmRhcmRbaV0ucmVmZXJlbmNlID09PSByZWZlcmVuY2UpIHtcblx0XHRcdFx0XHRcdGlmIChidG4uc3RhbmRhcmRbaV0uc3RhdGUgPT09IFwiYWN0aXZlXCIpIHtcblx0XHRcdFx0XHRcdFx0ZG9DaGFuZ2UgPSBpO1xuXHRcdFx0XHRcdFx0XHRpZiAoaSA8IGJ0bi5zdGFuZGFyZC5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0bmV4dE5hbWUgPSBidG4uc3RhbmRhcmRbaSArIDFdPy5yZWZlcmVuY2U7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKGkgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJldmlvdXNOYW1lID0gYnRuLnN0YW5kYXJkW2kgLSAxXT8ucmVmZXJlbmNlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocmVmZXJlbmNlKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29udGFpbmVyID0gdGhpcy5xdWVyeVNlbGVjdG9yKGBbaWQ9JHtyZWZlcmVuY2V9XWApO1xuXHRcdFx0XHRcdGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0aWYgKGRvQ2hhbmdlKSB7XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5yZW1vdmVCZWhhdmlvclwiKSkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJhdXRvXCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAobmV4dE5hbWUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2VsZi5hY3RpdmVUYWIobmV4dE5hbWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHByZXZpb3VzTmFtZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNlbGYuYWN0aXZlVGFiKHByZXZpb3VzTmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJuZXh0XCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAobmV4dE5hbWUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2VsZi5hY3RpdmVUYWIobmV4dE5hbWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcInByZXZpb3VzXCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocHJldmlvdXNOYW1lICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNlbGYuYWN0aXZlVGFiKHByZXZpb3VzTmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6IC8vIGFuZCBcIm5vbmVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29udGFpbmVyLnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0aW5pdFRhYkJ1dHRvbnMuY2FsbCh0aGlzKTtcblx0XHRcdFx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItdGFiLXJlbW92ZVwiLCB7XG5cdFx0XHRcdFx0XHRcdHJlZmVyZW5jZSxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbY2hhbmdlVGFiRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChldmVudCwgQVRUUklCVVRFX1JPTEUsIFwiYnV0dG9uXCIpO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiBlbGVtZW50LmRpc2FibGVkICE9PSB0cnVlKSB7XG5cdFx0XHRzaG93LmNhbGwodGhpcywgZWxlbWVudCk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHBhdGgpKSB7XG5cdFx0XHRpZiAoZWxlbWVudCA9PT0gdGhpcykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGlkZVBvcHBlci5jYWxsKHRoaXMpO1xuXHR9O1xuXG5cdC8vIHRoZSBvcmRlciBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlIHJlbW92ZSBtdXN0IGJlIGJlZm9yZSB0aGUgY2hhbmdlXG5cdHRoaXNbbmF2RWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoXCIsIHRoaXNbcmVtb3ZlVGFiRXZlbnRIYW5kbGVyXSk7XG5cdHRoaXNbbmF2RWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXNbcmVtb3ZlVGFiRXZlbnRIYW5kbGVyXSk7XG5cblx0dGhpc1tuYXZFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hcIiwgdGhpc1tjaGFuZ2VUYWJFdmVudEhhbmRsZXJdKTtcblx0dGhpc1tuYXZFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpc1tjaGFuZ2VUYWJFdmVudEhhbmRsZXJdKTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG9ic2VydmVkTm9kZVxuICovXG5mdW5jdGlvbiBhdHRhY2hUYWJNdXRhdGlvbk9ic2VydmVyKG9ic2VydmVkTm9kZSkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRpZiAoaGFzT2JqZWN0TGluayhvYnNlcnZlZE5vZGUsIG11dGF0aW9uT2JzZXJ2ZXJTeW1ib2wpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0LyoqXG5cdCAqIHRoaXMgY29uc3RydWN0IG1vbml0b3JzIGEgbm9kZSB3aGV0aGVyIGl0IGlzIGRpc2FibGVkIG9yIG1vZGlmaWVkXG5cdCAqIEB0eXBlIHtNdXRhdGlvbk9ic2VydmVyfVxuXHQgKi9cblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zKSB7XG5cdFx0aWYgKGlzQXJyYXkobXV0YXRpb25zKSkge1xuXHRcdFx0Y29uc3QgbXV0YXRpb24gPSBtdXRhdGlvbnMucG9wKCk7XG5cdFx0XHRpZiAobXV0YXRpb24gaW5zdGFuY2VvZiBNdXRhdGlvblJlY29yZCkge1xuXHRcdFx0XHRpbml0VGFiQnV0dG9ucy5jYWxsKHNlbGYpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0b2JzZXJ2ZXIub2JzZXJ2ZShvYnNlcnZlZE5vZGUsIHtcblx0XHRjaGlsZExpc3Q6IGZhbHNlLFxuXHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0c3VidHJlZTogZmFsc2UsXG5cdFx0YXR0cmlidXRlRmlsdGVyOiBbXG5cdFx0XHRcImRpc2FibGVkXCIsXG5cdFx0XHRBVFRSSUJVVEVfQlVUVE9OX0xBQkVMLFxuXHRcdFx0YCR7QVRUUklCVVRFX1BSRUZJWH1idXR0b24taWNvbmAsXG5cdFx0XSxcblx0fSk7XG5cblx0YWRkVG9PYmplY3RMaW5rKG9ic2VydmVkTm9kZSwgbXV0YXRpb25PYnNlcnZlclN5bWJvbCwgb2JzZXJ2ZXIpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb250cm9sXWAsXG5cdCk7XG5cdHRoaXNbbmF2RWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgbmF2WyR7QVRUUklCVVRFX1JPTEV9PW5hdl1gLFxuXHQpO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1wb3BwZXJdYCxcblx0KTtcblx0dGhpc1twb3BwZXJOYXZFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09cG9wcGVyLW5hdl1gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtQcm9taXNlPHVua25vd24+fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqXG4gKi9cbmZ1bmN0aW9uIGluaXRUYWJCdXR0b25zKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRsZXQgYWN0aXZlUmVmZXJlbmNlO1xuXG5cdGNvbnN0IGRpbWVuc2lvbnNDYWxjdWxhdGVkID0gdGhpc1tkaW1lbnNpb25zU3ltYm9sXS5nZXRWaWEoXG5cdFx0XCJkYXRhLmNhbGN1bGF0ZWRcIixcblx0XHRmYWxzZSxcblx0KTtcblxuXHRjb25zdCBidXR0b25zID0gW107XG5cdGNvbnN0IG5vZGVzID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcywgdW5kZWZpbmVkLCBudWxsKTsgLy8gbnVsbCBcdTIxQTYgb25seSB1bm5hbWVkIHNsb3RzXG5cblx0Zm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG5cdFx0aWYgKCEobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgY29udGludWU7XG5cdFx0bGV0IGxhYmVsID0gZ2V0QnV0dG9uTGFiZWwuY2FsbCh0aGlzLCBub2RlKTtcblxuXHRcdGxldCByZWZlcmVuY2U7XG5cdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKFwiaWRcIikpIHtcblx0XHRcdHJlZmVyZW5jZSA9IG5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIik7XG5cdFx0fVxuXG5cdFx0bGV0IGRpc2FibGVkO1xuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShcImRpc2FibGVkXCIpIHx8IG5vZGUuZGlzYWJsZWQgPT09IHRydWUpIHtcblx0XHRcdGRpc2FibGVkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoIXJlZmVyZW5jZSkge1xuXHRcdFx0cmVmZXJlbmNlID0gbmV3IElEKFwidGFiXCIpLnRvU3RyaW5nKCk7XG5cdFx0XHRub2RlLnNldEF0dHJpYnV0ZShcImlkXCIsIHJlZmVyZW5jZSk7XG5cdFx0fVxuXG5cdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKGAke0FUVFJJQlVURV9QUkVGSVh9YnV0dG9uLWljb25gKSkge1xuXHRcdFx0bGFiZWwgPSBgPHNwYW4gcGFydD1cImxhYmVsXCI+JHtsYWJlbH08L3NwYW4+PGltZyBwYXJ0PVwiaWNvblwiIGFsdD1cInRoaXMgaXMgYW4gaWNvblwiIHNyYz1cIiR7bm9kZS5nZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdGAke0FUVFJJQlVURV9QUkVGSVh9YnV0dG9uLWljb25gLFxuXHRcdFx0KX1cIj5gO1xuXHRcdH1cblxuXHRcdGxldCByZW1vdmUgPSBmYWxzZTtcblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoYCR7QVRUUklCVVRFX1BSRUZJWH1yZW1vdmFibGVgKSkge1xuXHRcdFx0cmVtb3ZlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAobm9kZS5tYXRjaGVzKFwiLmFjdGl2ZVwiKSA9PT0gdHJ1ZSAmJiBkaXNhYmxlZCAhPT0gdHJ1ZSkge1xuXHRcdFx0bm9kZS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuXHRcdFx0YWN0aXZlUmVmZXJlbmNlID0gcmVmZXJlbmNlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHN0YXRlID0gXCJcIjtcblx0XHRjb25zdCBjbGFzc2VzID0gZGltZW5zaW9uc0NhbGN1bGF0ZWQgPyBcIlwiIDogXCJpbnZpc2libGVcIjtcblxuXHRcdGJ1dHRvbnMucHVzaCh7XG5cdFx0XHRyZWZlcmVuY2UsXG5cdFx0XHRsYWJlbCxcblx0XHRcdHN0YXRlLFxuXHRcdFx0Y2xhc3M6IGNsYXNzZXMsXG5cdFx0XHRkaXNhYmxlZCxcblx0XHRcdHJlbW92ZSxcblx0XHR9KTtcblxuXHRcdGF0dGFjaFRhYk11dGF0aW9uT2JzZXJ2ZXIuY2FsbCh0aGlzLCBub2RlKTtcblx0fVxuXG5cdHRoaXMuc2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiLCBjbG9uZShidXR0b25zKSk7XG5cdHRoaXMuc2V0T3B0aW9uKFwiYnV0dG9ucy5wb3BwZXJcIiwgW10pO1xuXHR0aGlzLnNldE9wdGlvbihcIm1hcmtlclwiLCByYW5kb20oKSk7XG5cblx0cmV0dXJuIGFkanVzdEJ1dHRvblZpc2liaWxpdHkuY2FsbCh0aGlzKS50aGVuKCgpID0+IHtcblx0XHRpZiAoIWFjdGl2ZVJlZmVyZW5jZSAmJiB0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLm9wZW5GaXJzdFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgZmlyc3RCdXR0b24gPSB0aGlzLmdldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIikuZmluZChcblx0XHRcdFx0KGJ1dHRvbikgPT4gYnV0dG9uLmRpc2FibGVkICE9PSB0cnVlLFxuXHRcdFx0KTtcblx0XHRcdGlmIChmaXJzdEJ1dHRvbikge1xuXHRcdFx0XHRhY3RpdmVSZWZlcmVuY2UgPSBmaXJzdEJ1dHRvbi5yZWZlcmVuY2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGFjdGl2ZVJlZmVyZW5jZSkge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRcdFx0Y29uc3QgYnV0dG9uID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRcdFx0YFske0FUVFJJQlVURV9QUkVGSVh9dGFiLXJlZmVyZW5jZT1cIiR7YWN0aXZlUmVmZXJlbmNlfVwiXWAsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChidXR0b24gaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiBidXR0b24uZGlzYWJsZWQgIT09IHRydWUpIHtcblx0XHRcdFx0XHRzaG93LmNhbGwodGhpcywgYnV0dG9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdFx0LnJ1bih1bmRlZmluZWQpXG5cdFx0XHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBjaGVja0FuZFJlYXJyYW5nZUJ1dHRvbnMoKSB7XG5cdGlmICh0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLmdldFZpYShcImRhdGEuY2FsY3VsYXRlZFwiLCBmYWxzZSkgIT09IHRydWUpIHtcblx0XHRjYWxjdWxhdGVOYXZpZ2F0aW9uQnV0dG9uc0RpbWVuc2lvbnMuY2FsbCh0aGlzKTtcblx0fVxuXG5cdHJlYXJyYW5nZUJ1dHRvbnMuY2FsbCh0aGlzKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZnVuY3Rpb24gYWRqdXN0QnV0dG9uVmlzaWJpbGl0eSgpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zKSB7XG5cdFx0XHRjb25zdCBkZWZDb3VudCA9IHNlbGYuZ2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiKS5sZW5ndGg7XG5cdFx0XHRjb25zdCBkb21Db3VudCA9IHNlbGZbbmF2RWxlbWVudFN5bWJvbF0ucXVlcnlTZWxlY3RvckFsbChcblx0XHRcdFx0J2J1dHRvbltkYXRhLW1vbnN0ZXItcm9sZT1cImJ1dHRvblwiXScsXG5cdFx0XHQpLmxlbmd0aDtcblxuXHRcdFx0Ly8gaW4gZHJhd2luZ1xuXHRcdFx0aWYgKGRlZkNvdW50ICE9PSBkb21Db3VudCkgcmV0dXJuO1xuXG5cdFx0XHRvYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cblx0XHRcdGNoZWNrQW5kUmVhcnJhbmdlQnV0dG9ucy5jYWxsKHNlbGYpO1xuXG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cblx0XHRvYnNlcnZlci5vYnNlcnZlKHNlbGZbbmF2RWxlbWVudFN5bWJvbF0sIHtcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0fSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0RGltVmFsdWUodmFsdWUpIHtcblx0aWYgKFt1bmRlZmluZWQsIG51bGxdLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y29uc3QgdmFsdWVBc0ludCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG5cblx0aWYgKGlzTmFOKHZhbHVlQXNJbnQpKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRyZXR1cm4gdmFsdWVBc0ludDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBjYWxjQm94V2lkdGgobm9kZSkge1xuXHRjb25zdCBkaW0gPSBnZXRHbG9iYWwoXCJ3aW5kb3dcIikuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTtcblx0Y29uc3QgYm91bmRpbmcgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdHJldHVybiAoXG5cdFx0Z2V0RGltVmFsdWUoZGltW1wiYm9yZGVyLWxlZnQtd2lkdGhcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJwYWRkaW5nLWxlZnRcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJtYXJnaW4tbGVmdFwiXSkgK1xuXHRcdGdldERpbVZhbHVlKGJvdW5kaW5nW1wid2lkdGhcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJib3JkZXItcmlnaHQtd2lkdGhcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJtYXJnaW4tcmlnaHRcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJwYWRkaW5nLWxlZnRcIl0pXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gcmVhcnJhbmdlQnV0dG9ucygpIHtcblx0Z2V0V2luZG93KCkucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRjb25zdCBzdGFuZGFyZEJ1dHRvbnMgPSBbXTtcblx0XHRjb25zdCBwb3BwZXJCdXR0b25zID0gW107XG5cdFx0bGV0IHN1bSA9IDA7XG5cdFx0Y29uc3Qgc3BhY2UgPSB0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLmdldFZpYShcImRhdGEuc3BhY2VcIik7XG5cblx0XHRpZiAoc3BhY2UgPD0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGJ1dHRvbnMgPSB0aGlzLmdldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIik7XG5cdFx0Zm9yIChjb25zdCBbLCBidXR0b25dIG9mIGJ1dHRvbnMuZW50cmllcygpKSB7XG5cdFx0XHRjb25zdCByZWYgPSBidXR0b24/LnJlZmVyZW5jZTtcblxuXHRcdFx0c3VtICs9IHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uZ2V0VmlhKGBkYXRhLmJ1dHRvbi4ke3JlZn1gKTtcblxuXHRcdFx0aWYgKHN1bSA+IHNwYWNlKSB7XG5cdFx0XHRcdHBvcHBlckJ1dHRvbnMucHVzaChjbG9uZShidXR0b24pKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN0YW5kYXJkQnV0dG9ucy5wdXNoKGNsb25lKGJ1dHRvbikpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuc2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiLCBzdGFuZGFyZEJ1dHRvbnMpO1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwiYnV0dG9ucy5wb3BwZXJcIiwgcG9wcGVyQnV0dG9ucyk7XG5cblx0XHRpZiAodGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXSkge1xuXHRcdFx0aWYgKHBvcHBlckJ1dHRvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBjYWxjdWxhdGVOYXZpZ2F0aW9uQnV0dG9uc0RpbWVuc2lvbnMoKSB7XG5cdGNvbnN0IHdpZHRoID0gdGhpc1tuYXZFbGVtZW50U3ltYm9sXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblxuXHRsZXQgc3RhcnRFbmRXaWR0aCA9IDA7XG5cblx0Z2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcywgdW5kZWZpbmVkLCBcInN0YXJ0XCIpLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRzdGFydEVuZFdpZHRoICs9IGNhbGNCb3hXaWR0aC5jYWxsKHRoaXMsIG5vZGUpO1xuXHR9KTtcblxuXHRnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzLCB1bmRlZmluZWQsIFwiZW5kXCIpLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRzdGFydEVuZFdpZHRoICs9IGNhbGNCb3hXaWR0aC5jYWxsKHRoaXMsIG5vZGUpO1xuXHR9KTtcblxuXHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLnNldFZpYShcImRhdGEuc3BhY2VcIiwgd2lkdGggLSBzdGFydEVuZFdpZHRoIC0gMik7XG5cdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFwiZGF0YS52aXNpYmxlXCIsICEod2lkdGggPT09IDApKTtcblxuXHRjb25zdCBidXR0b25zID0gdGhpcy5nZXRPcHRpb24oXCJidXR0b25zLnN0YW5kYXJkXCIpLmNvbmNhdChcblx0XHR0aGlzLmdldE9wdGlvbihcImJ1dHRvbnMucG9wcGVyXCIpLFxuXHQpO1xuXG5cdGZvciAoY29uc3QgW2ksIGJ1dHRvbl0gb2YgYnV0dG9ucy5lbnRyaWVzKCkpIHtcblx0XHRjb25zdCByZWYgPSBidXR0b24/LnJlZmVyZW5jZTtcblx0XHRjb25zdCBlbGVtZW50ID0gdGhpc1tuYXZFbGVtZW50U3ltYm9sXS5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0YDpzY29wZSA+IFske0FUVFJJQlVURV9QUkVGSVh9dGFiLXJlZmVyZW5jZT1cIiR7cmVmfVwiXWAsXG5cdFx0KTtcblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpKSBjb250aW51ZTtcblxuXHRcdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFxuXHRcdFx0YGRhdGEuYnV0dG9uLiR7cmVmfWAsXG5cdFx0XHRjYWxjQm94V2lkdGguY2FsbCh0aGlzLCBlbGVtZW50KSxcblx0XHQpO1xuXHRcdGJ1dHRvbltcImNsYXNzXCJdID0gbmV3IFRva2VuTGlzdChidXR0b25bXCJjbGFzc1wiXSlcblx0XHRcdC5yZW1vdmUoXCJpbnZpc2libGVcIilcblx0XHRcdC50b1N0cmluZygpO1xuXHR9XG5cblx0Y29uc3Qgc2xvdHMgPSB0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXS5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdGBuYXZbJHtBVFRSSUJVVEVfUFJFRklYfXJvbGU9bmF2XSA+IHNsb3QuaW52aXNpYmxlLCBzbG90WyR7QVRUUklCVVRFX1BSRUZJWH1yb2xlPXNsb3RdLmludmlzaWJsZWAsXG5cdCk7XG5cdGZvciAoY29uc3QgWywgc2xvdF0gb2Ygc2xvdHMuZW50cmllcygpKSB7XG5cdFx0c2xvdC5jbGFzc0xpc3QucmVtb3ZlKFwiaW52aXNpYmxlXCIpO1xuXHR9XG5cblx0dGhpcy5zZXRPcHRpb24oXCJidXR0b25zLnN0YW5kYXJkXCIsIGNsb25lKGJ1dHRvbnMpKTtcblxuXHRnZXRXaW5kb3coKS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFwiZGF0YS5jYWxjdWxhdGVkXCIsIHRydWUpO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRCdXR0b25MYWJlbChub2RlKSB7XG5cdGxldCBsYWJlbDtcblx0bGV0IHNldExhYmVsID0gZmFsc2U7XG5cdGlmIChub2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMKSkge1xuXHRcdGxhYmVsID0gbm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0JVVFRPTl9MQUJFTCk7XG5cdH0gZWxzZSB7XG5cdFx0bGFiZWwgPSBub2RlLmlubmVyVGV4dDtcblx0XHRzZXRMYWJlbCA9IHRydWU7XG5cdH1cblxuXHRpZiAoIWlzU3RyaW5nKGxhYmVsKSkge1xuXHRcdGxhYmVsID0gXCJcIjtcblx0fVxuXG5cdGxhYmVsID0gbGFiZWwudHJpbSgpO1xuXG5cdGlmIChsYWJlbCA9PT0gXCJcIikge1xuXHRcdGxhYmVsID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMubmV3LXRhYi1sYWJlbFwiLCBcIk5ldyBUYWJcIik7XG5cdH1cblxuXHRpZiAobGFiZWwubGVuZ3RoID4gMTAwKSB7XG5cdFx0bGFiZWwgPSBgJHtsYWJlbC5zdWJzdHJpbmcoMCwgOTkpfVx1MjAyNmA7XG5cdH1cblxuXHRpZiAoc2V0TGFiZWwgPT09IHRydWUpIHtcblx0XHRub2RlLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMLCBsYWJlbCk7XG5cdH1cblxuXHRyZXR1cm4gbGFiZWw7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwiYnV0dG9uc1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiBwYXJ0PVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uLFxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItc3RhdGUgcGF0aDpidXR0b25zLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCBwYXRoOmJ1dHRvbnMuZGlzYWJsZWQgfCBpZjp0cnVlLCAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci10YWItcmVmZXJlbmNlIHBhdGg6YnV0dG9ucy5yZWZlcmVuY2VcIj48c3BhblxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6YnV0dG9ucy5sYWJlbFwiPjwvc3Bhbj48c3BhbiBwYXJ0PVwicmVtb3ZlLXRhYlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6YnV0dG9ucy5yZW1vdmUgfCA/OnJlbW92ZS10YWI6aGlkZGVuIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cInJlbW92ZS10YWJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPjwvc3Bhbj48L2J1dHRvbj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPG5hdiBkYXRhLW1vbnN0ZXItcm9sZT1cIm5hdlwiIHBhcnQ9XCJuYXZcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1tYXJrZXIgcGF0aDptYXJrZXIsIGNsYXNzIHBhdGg6Y2xhc3Nlcy5uYXZpZ2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWluc2VydD1cImJ1dHRvbnMgcGF0aDpidXR0b25zLnN0YW5kYXJkXCI+XG4gICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cInN0YXJ0XCIgY2xhc3M9XCJpbnZpc2libGVcIj48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjbGFzc2VzLnBvcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtcG9wcGVyLWFycm93PjwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwicG9wcGVyLW5hdlwiIGRhdGEtbW9uc3Rlci1yb2xlPVwicG9wcGVyLW5hdlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWluc2VydD1cImJ1dHRvbnMgcGF0aDpidXR0b25zLnBvcHBlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJwb3BwZXJcIiBjbGFzcz1cImludmlzaWJsZVwiPjwvc2xvdD5cbiAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwiZW5kXCIgY2xhc3M9XCJpbnZpc2libGVcIj48L3Nsb3Q+XG4gICAgICAgICAgICA8L25hdj5cbiAgICAgICAgICAgIDxzbG90IGRhdGEtbW9uc3Rlci1yb2xlPVwic2xvdFwiIGNsYXNzPVwiaW52aXNpYmxlXCI+PC9zbG90PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoVGFicyk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgTWVzc2FnZVN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IE1lc3NhZ2VTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0TWVzc2FnZVN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgbWVzc2FnZSB7IFxuOndoZXJlKGh0bWwpe2xpbmUtaGVpZ2h0OjEuMTU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LW1vei10ZXh0LXNpemUtYWRqdXN0OjEwMCU7dGV4dC1zaXplLWFkanVzdDoxMDAlfTp3aGVyZShoMSl7Zm9udC1zaXplOjJlbTttYXJnaW4tYmxvY2stZW5kOi42N2VtO21hcmdpbi1ibG9jay1zdGFydDouNjdlbX06d2hlcmUoZGwsb2wsdWwpIDp3aGVyZShkbCxvbCx1bCl7bWFyZ2luLWJsb2NrLWVuZDowO21hcmdpbi1ibG9jay1zdGFydDowfTp3aGVyZShocil7Ym94LXNpemluZzpjb250ZW50LWJveDtjb2xvcjppbmhlcml0O2hlaWdodDowfTp3aGVyZShhYmJyW3RpdGxlXSl7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfTp3aGVyZShiLHN0cm9uZyl7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShjb2RlLGtiZCxwcmUsc2FtcCl7Zm9udC1mYW1pbHk6bW9ub3NwYWNlLG1vbm9zcGFjZTtmb250LXNpemU6MWVtfTp3aGVyZShzbWFsbCl7Zm9udC1zaXplOjgwJX06d2hlcmUodGFibGUpe2JvcmRlci1jb2xvcjpjdXJyZW50Q29sb3I7dGV4dC1pbmRlbnQ6MH06d2hlcmUoYnV0dG9uLGlucHV0LHNlbGVjdCl7bWFyZ2luOjB9OndoZXJlKGJ1dHRvbil7dGV4dC10cmFuc2Zvcm06bm9uZX06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9ufTp3aGVyZShwcm9ncmVzcyl7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9OndoZXJlKHNlbGVjdCl7dGV4dC10cmFuc2Zvcm06bm9uZX06d2hlcmUodGV4dGFyZWEpe21hcmdpbjowfTp3aGVyZShpbnB1dFt0eXBlPXNlYXJjaCBpXSl7LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDtvdXRsaW5lLW9mZnNldDotMnB4fTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiw6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOmluaGVyaXQ7b3BhY2l0eTouNTR9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyLXN0eWxlOm5vbmU7cGFkZGluZzowfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzcmluZ3tvdXRsaW5lOjFweCBkb3R0ZWQgQnV0dG9uVGV4dH06d2hlcmUoOi1tb3otdWktaW52YWxpZCl7Ym94LXNoYWRvdzpub25lfTp3aGVyZShkaWFsb2cpe2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6c29saWQ7Y29sb3I6IzAwMDtoZWlnaHQ6LW1vei1maXQtY29udGVudDtoZWlnaHQ6Zml0LWNvbnRlbnQ7bGVmdDowO21hcmdpbjphdXRvO3BhZGRpbmc6MWVtO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7d2lkdGg6LW1vei1maXQtY29udGVudDt3aWR0aDpmaXQtY29udGVudH06d2hlcmUoZGlhbG9nOm5vdChbb3Blbl0pKXtkaXNwbGF5Om5vbmV9OndoZXJlKHN1bW1hcnkpe2Rpc3BsYXk6bGlzdC1pdGVtfWh0bWx7aGVpZ2h0OjEwMCV9Ym9keSxodG1se21pbi1oZWlnaHQ6Y2FsYygxMDB2aCAtIDQwcHgpfWJvZHl7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO3BhZGRpbmc6MDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmF5LTE6I2Y2ZjZmNjstLW1vbnN0ZXItY29sb3ItZ3JheS0yOiNlMmUyZTI7LS1tb25zdGVyLWNvbG9yLWdyYXktMzojOGI4YjhiOy0tbW9uc3Rlci1jb2xvci1ncmF5LTQ6IzZmNmY2ZjstLW1vbnN0ZXItY29sb3ItZ3JheS01OiMzZTNlM2U7LS1tb25zdGVyLWNvbG9yLWdyYXktNjojMjIyOy0tbW9uc3Rlci1jb2xvci1yb3NlLTE6I2ZmZjdmOTstLW1vbnN0ZXItY29sb3Itcm9zZS0yOiNmZmRjZTU7LS1tb25zdGVyLWNvbG9yLXJvc2UtMzojZmYzYjhkOy0tbW9uc3Rlci1jb2xvci1yb3NlLTQ6I2RiMDA3MjstLW1vbnN0ZXItY29sb3Itcm9zZS01OiM4MDAwNDA7LS1tb25zdGVyLWNvbG9yLXJvc2UtNjojNGMwMDIzOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMTojZmZmOGY4Oy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMjojZmZkZGRmOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMzojZmY0MjZjOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNDojZGUwMDUxOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNTojODIwMDJjOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNjojNTEwMDE4Oy0tbW9uc3Rlci1jb2xvci1yZWQtMTojZmZmOGY2Oy0tbW9uc3Rlci1jb2xvci1yZWQtMjojZmZkZGQ4Oy0tbW9uc3Rlci1jb2xvci1yZWQtMzojZmY0NjQ3Oy0tbW9uc3Rlci1jb2xvci1yZWQtNDojZTAwMDJiOy0tbW9uc3Rlci1jb2xvci1yZWQtNTojODMwMDE0Oy0tbW9uc3Rlci1jb2xvci1yZWQtNjojNTMwMDAzOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMTojZmZmOGY1Oy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMjojZmZkZWQxOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMzojZmQ0ZDAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNDojY2QzYzAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNTojNzUyMTAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNjojNDAxNjAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xOiNmZmY4ZjM7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTI6I2ZmZGZjNjstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMzojZDU3MzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi00OiNhYzVjMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTU6IzYzMzMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNjojMzcxZDAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci0xOiNmZmY4ZWY7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTI6I2ZmZTBiMjstLW1vbnN0ZXItY29sb3ItYW1iZXItMzojYjk4MzAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci00OiM5MjY3MDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTU6IzUyMzgwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNjojMzAyMTAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMTojZmZmOWU1Oy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMjojZmZlNTNlOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMzojOWM4YjAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNDojN2Q2ZjAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNTojNDYzZDAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNjojMjkyMzAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTE6I2Y3ZmZhYzstLW1vbnN0ZXItY29sb3ItbGltZS0yOiNkNWYyMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtMzojODE5MzAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTQ6IzY3NzYwMDstLW1vbnN0ZXItY29sb3ItbGltZS01OiMzOTQxMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNjojMjIyNjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTE6I2U1ZmZjMzstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0yOiM5OGZiMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMzojNWM5YjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTQ6IzQ5N2MwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS01OiMyNjQ1MDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNjojMTgyNjAwOy0tbW9uc3Rlci1jb2xvci1ncmVlbi0xOiNlMGZmZDk7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTI6IzcyZmY2YzstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMzojMDBhMjFmOy0tbW9uc3Rlci1jb2xvci1ncmVlbi00OiMwMDgyMTc7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTU6IzAwNDkwODstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNjojMDYyODAwOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTE6I2RjZmZlNjstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0yOiM1ZGZmYTI7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMzojMDBhMDVhOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTQ6IzAwODE0NzstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC01OiMwMDQ4MjU7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNjojMDAyODEyOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTE6I2RhZmZlZjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0yOiM0MmZmYzY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMzojMDA5Zjc4Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTQ6IzAwN2Y1ZjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS01OiMwMDQ3MzQ7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNjojMDAyODFiOy0tbW9uc3Rlci1jb2xvci10ZWFsLTE6I2Q3ZmZmNzstLW1vbnN0ZXItY29sb3ItdGVhbC0yOiMwMGZmZTQ7LS1tb25zdGVyLWNvbG9yLXRlYWwtMzojMDA5ZThjOy0tbW9uc3Rlci1jb2xvci10ZWFsLTQ6IzAwN2M2ZTstLW1vbnN0ZXItY29sb3ItdGVhbC01OiMwMDQ0M2M7LS1tb25zdGVyLWNvbG9yLXRlYWwtNjojMDAyNzIyOy0tbW9uc3Rlci1jb2xvci1jeWFuLTE6I2M0ZmZmZTstLW1vbnN0ZXItY29sb3ItY3lhbi0yOiMwMGZhZmI7LS1tb25zdGVyLWNvbG9yLWN5YW4tMzojMDA5OTlhOy0tbW9uc3Rlci1jb2xvci1jeWFuLTQ6IzAwN2E3YjstLW1vbnN0ZXItY29sb3ItY3lhbi01OiMwMDQzNDQ7LS1tb25zdGVyLWNvbG9yLWN5YW4tNjojMDAyNTI1Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMTojZGFmYWZmOy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMjojOGRmMGZmOy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMzojMDA5OGE5Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNDojMDA3OTg3Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNTojMDA0MDQ4Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNjojMDAyMjI3Oy0tbW9uc3Rlci1jb2xvci1za3ktMTojZTNmN2ZmOy0tbW9uc3Rlci1jb2xvci1za3ktMjojYWVlOWZmOy0tbW9uc3Rlci1jb2xvci1za3ktMzojMDA5NGI0Oy0tbW9uc3Rlci1jb2xvci1za3ktNDojMDA3NTkwOy0tbW9uc3Rlci1jb2xvci1za3ktNTojMDA0MDRmOy0tbW9uc3Rlci1jb2xvci1za3ktNjojMDAxZjI4Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0xOiNlOGY2ZmY7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTI6I2I5ZTNmZjstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMzojMDA5MmM1Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi00OiMwMDc0OWQ7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTU6IzAwM2M1NDstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNjojMDAxZDJhOy0tbW9uc3Rlci1jb2xvci1henVyZS0xOiNlOGYyZmY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTI6I2M2ZTBmZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtMzojMDA4ZmRiOy0tbW9uc3Rlci1jb2xvci1henVyZS00OiMwMDcxYWY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTU6IzAwM2I1ZTstLW1vbnN0ZXItY29sb3ItYXp1cmUtNjojMDAxYzMwOy0tbW9uc3Rlci1jb2xvci1ibHVlLTE6I2YwZjRmZjstLW1vbnN0ZXItY29sb3ItYmx1ZS0yOiNkNGUwZmY7LS1tb25zdGVyLWNvbG9yLWJsdWUtMzojMDA4OWZjOy0tbW9uc3Rlci1jb2xvci1ibHVlLTQ6IzAwNmRjYTstLW1vbnN0ZXItY29sb3ItYmx1ZS01OiMwMDM4NmQ7LS1tb25zdGVyLWNvbG9yLWJsdWUtNjojMDAxYTM5Oy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMTojZjNmM2ZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMjojZGVkZGZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMzojNjU3ZWZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNDojMDA2MWZjOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNTojMDAzMjhhOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNjojMDAxNjQ5Oy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMTojZjdmMWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMjojZThkYWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMzojOWI3MGZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNDojNzk0YWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNTojMmQwZmJmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNjojMGIwMDc0Oy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMTojZmRmNGZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMjojZjdkOWZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMzojZDE1MGZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNDojYjAxZmUzOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNTojNjYwMDg3Oy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNjojM2EwMDRmOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTE6I2ZmZjNmYzstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yOiNmZmQ3ZjY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMzojZjkxMWUwOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQ6I2NhMDBiNjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS01OiM3NDAwNjg7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNjojNDQwMDNjOy0tbW9uc3Rlci1jb2xvci1waW5rLTE6I2ZmZjdmYjstLW1vbnN0ZXItY29sb3ItcGluay0yOiNmZmRjZWM7LS1tb25zdGVyLWNvbG9yLXBpbmstMzojZmYyZmIyOy0tbW9uc3Rlci1jb2xvci1waW5rLTQ6I2QyMDA4ZjstLW1vbnN0ZXItY29sb3ItcGluay01OiM3OTAwNTE7LS1tb25zdGVyLWNvbG9yLXBpbmstNjojNGIwMDMwOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMTojZTViODc1Oy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMjojZDlhMzYyOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMzojYzA4YTRlOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNDojYTc3MTNiOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNTojOGY1YTI4Oy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNjojMzYwNTA1Oy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xOiNmN2Y1ZWY7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTI6I2U1ZTJkOTstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMzojY2JjNmIzOy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC00OiNhMTlkOGE7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTU6IzdhNzU2NjstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNjojNTE0ZDNmfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLWJvcmRlci1jb2xvci0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0xKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTF7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLWNvbG9yLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMil9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLXRoZW1lLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMil9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ye2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTMpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtM3tjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLWJvcmRlci1jb2xvci00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci00KX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTR7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLWNvbG9yLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtcm93LTF7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtZWxlbWVudCwubW9uc3Rlci10aGVtZS1jb250cm9sLXJvdy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3IpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtYmFja2dyb3VuZC1pbmhlcml0e2JhY2tncm91bmQtY29sb3I6aW5oZXJpdCFpbXBvcnRhbnR9Lm1vbnN0ZXItdGhlbWUtb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1vZmZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3IpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfVtkYXRhLW1vbnN0ZXItcm9sZT1tZXNzYWdlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtwYWRkaW5nOjhweDt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250ZW50XXtmbGV4LWdyb3c6MjtAbWl4aW5zIHBhcmFncmFwaH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWNsb3NlXXtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6MTZweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotMTBweDt0b3A6LTVweDt3aWR0aDoxNnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXkpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9Y2xvc2VdOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MTAwJX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1BSRUZJWCxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdGluaXRNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZVN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L21lc3NhZ2UubWpzXCI7XG5cbmV4cG9ydCB7IE1lc3NhZ2UgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVtb3ZlRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInJlbW92ZUVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRpbWVyU3ltYm9sID0gU3ltYm9sKFwidGltZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG1vdXNlZW50ZXJFdmVudEhhbmRsZXJTeW1ib2wgPSBTeW1ib2woXCJtb3VzZWVudGVyRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBtb3VzZWxlYXZlRXZlbnRIYW5kbGVyU3ltYm9sID0gU3ltYm9sKFwibW91c2VsZWF2ZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVtb3ZlRXZlbnRIYW5kbGVyU3ltYm9sID0gU3ltYm9sKFwicmVtb3ZlRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEEgTWVzc2FnZSBpcyBhIG5vdGlmaWNhdGlvbiBlbGVtZW50IHRoYXQgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSBtZXNzYWdlcyB0byB0aGUgdXNlci5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9ub3RpZnkvbWVzc2FnZVxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL25vdGlmeS9tZXNzYWdlLXNpbXBsZSBNZXNzYWdlXG4gKlxuICogQGlzc3VlIGh0dHBzOi8vbG9jYWxob3N0LmFsdmluZS5kZXY6ODQ0My9kZXZlbG9wbWVudC9pc3N1ZXMvY2xvc2VkLzI2OS5odG1sXG4gKlxuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIG1lc3NhZ2UgaXMgYSBub3RpZmljYXRpb24gZWxlbWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgbWVzc2FnZXMgdG8gdGhlIHVzZXIuIFR5cGljYWxseSwgaXQgaXMgb25seSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIG5vdGlmeSBjb250YWluZXIuXG4gKi9cbmNsYXNzIE1lc3NhZ2UgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoZSBkZWZhdWx0cyBjYW4gYmUgc2V0IGVpdGhlciBkaXJlY3RseSBpbiB0aGUgb2JqZWN0IG9yIHZpYSBhbiBhdHRyaWJ1dGUgaW4gdGhlIEhUTUwgdGFnLlxuXHQgKiBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIGluIHRoZSBIVE1MIHRhZyBtdXN0IGJlIGEgSlNPTiBzdHJpbmcuXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiA8bW9uc3Rlci1tZXNzYWdlIGRhdGEtbW9uc3Rlci1vcHRpb25zPVwie31cIj48L21vbnN0ZXItbWVzc2FnZT5cblx0ICogYGBgXG5cdCAqXG5cdCAqIFNpbmNlIDEuMTguMCB0aGUgSlNPTiBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgRGF0YVVSSS5cblx0ICpcblx0ICogYGBgXG5cdCAqIG5ldyBNb25zdGVyLlR5cGVzLkRhdGFVcmwoYnRvYShKU09OLnN0cmluZ2lmeSh7XG5cdCAqICAgICAgICB0aW1lb3V0OiAzMDAwLFxuXHQgKiAgICAgICAgZmVhdHVyZXM6IHtcblx0ICogICAgICAgICAgY2xvc2U6IHRydWUsXG5cdCAqICAgICAgICAgIGRpc2FwcGVhcjogdHJ1ZVxuXHQgKiAgICAgICAgfVxuXHQgKiAgICB9KSksJ2FwcGxpY2F0aW9uL2pzb24nLHRydWUpLnRvU3RyaW5nKClcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVvdXQgVGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGFmdGVyIHdoaWNoIHRoZSBtZXNzYWdlIGRpc2FwcGVhcnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzIFRoZSBmZWF0dXJlcyBvZiB0aGUgbWVzc2FnZVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLmNsb3NlIFdoZXRoZXIgdGhlIG1lc3NhZ2UgY2FuIGJlIGNsb3NlZFxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLmRpc2FwcGVhciBXaGV0aGVyIHRoZSBtZXNzYWdlIGRpc2FwcGVhcnMgYWZ0ZXIgYSBjZXJ0YWluIHRpbWVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbnRlbnQgVGhlIGNvbnRlbnQgb2YgdGhlIG1lc3NhZ2Vcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRpbWVvdXQ6IDYwMDAsXG5cdFx0XHRmZWF0dXJlczoge1xuXHRcdFx0XHRjbG9zZTogdHJ1ZSxcblx0XHRcdFx0ZGlzYXBwZWFyOiB0cnVlLFxuXHRcdFx0fSxcblx0XHRcdGNvbnRlbnQ6IFwiPHNsb3Q+PC9zbG90PlwiLFxuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ob3RpZnkuTWVzc2FnZX1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1ub3RpZnktbWVzc2FnZVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbTWVzc2FnZVN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRbaW5pdE1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbaW5pdE1ldGhvZFN5bWJvbF0oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmRpc2FwcGVhclwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0c3RhcnRGYWRlb3V0LmNhbGwodGhpcyk7XG5cdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIHRoaXNbbW91c2VlbnRlckV2ZW50SGFuZGxlclN5bWJvbF0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHRzdG9wRmFkZW91dC5jYWxsKHRoaXMpO1xuXG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuZGlzYXBwZWFyXCIpID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFwibW91c2VlbnRlclwiLFxuXHRcdFx0XHR0aGlzW21vdXNlZW50ZXJFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdFx0KTtcblx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XCJtb3VzZWVudGVyXCIsXG5cdFx0XHRcdHRoaXNbbW91c2VsZWF2ZUV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0RmFkZW91dCgpIHtcblx0aWYgKCF0aGlzPy5bdGltZXJTeW1ib2xdKSB7XG5cdFx0dGhpc1t0aW1lclN5bWJvbF0gPSBzZXRUaW1lb3V0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZW1vdmVTZWxmLmNhbGwodGhpcyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJ0aW1lb3V0XCIsIDEwMDApLFxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlU2VsZigpIHtcblx0c3RvcEZhZGVvdXQoKTtcblx0dGhpcy5jbGFzc0xpc3QuYWRkKFwiZmFkZW91dFwiKTtcblxuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHR0aGlzLnJlbW92ZSgpO1xuXHR9LCAyMDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHN0b3BGYWRlb3V0KCkge1xuXHRpZiAodGhpcz8uW3RpbWVyU3ltYm9sXSkge1xuXHRcdGNsZWFyVGltZW91dCh0aGlzW3RpbWVyU3ltYm9sXSk7XG5cdFx0dGhpc1t0aW1lclN5bWJvbF0gPSB1bmRlZmluZWQ7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7TWVzc2FnZX1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltcIiArIEFUVFJJQlVURV9ST0xFICsgXCI9Y29udHJvbF1cIixcblx0KTtcblx0dGhpc1tyZW1vdmVFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW1wiICsgQVRUUklCVVRFX1JPTEUgKyBcIj1jbG9zZV1cIixcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbbW91c2VlbnRlckV2ZW50SGFuZGxlclN5bWJvbF0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XCJjb250cm9sXCIsXG5cdFx0KTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XCJtb3VzZWVudGVyXCIsXG5cdFx0XHRcdHRoaXNbbW91c2VlbnRlckV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLCB0aGlzW21vdXNlbGVhdmVFdmVudEhhbmRsZXJTeW1ib2xdKTtcblx0XHRcdHN0b3BGYWRlb3V0LmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1ttb3VzZWxlYXZlRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcImNvbnRyb2xcIixcblx0XHQpO1xuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XCJtb3VzZWxlYXZlXCIsXG5cdFx0XHRcdHRoaXNbbW91c2VsZWF2ZUV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCB0aGlzW21vdXNlZW50ZXJFdmVudEhhbmRsZXJTeW1ib2xdKTtcblx0XHRcdHN0YXJ0RmFkZW91dC5jYWxsKHRoaXMpO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbcmVtb3ZlRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChldmVudCwgQVRUUklCVVRFX1JPTEUsIFwiY2xvc2VcIik7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRyZW1vdmVTZWxmLmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmNsb3NlXCIpID09PSB0cnVlKSB7XG5cdFx0dGhpc1tyZW1vdmVFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XCJjbGlja1wiLFxuXHRcdFx0dGhpc1tyZW1vdmVFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdCk7XG5cdFx0dGhpc1tyZW1vdmVFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XCJ0b3VjaFwiLFxuXHRcdFx0dGhpc1tyZW1vdmVFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCIgY2xhc3M9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJtZXNzYWdlXCIgcGFydD1cIm1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1vcmllbnRhdGlvbiBwYXRoOm9yaWVudGF0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y29udGVudFwiIHBhcnQ9XCJjb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGVudFwiPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwicmVtb3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpmZWF0dXJlcy5jbG9zZSB8ID86OmhpZGRlbiBcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjbG9zZVwiIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoTWVzc2FnZSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgTm90aWZ5U3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgTm90aWZ5U3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdE5vdGlmeVN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgbm90aWZ5IHsgXG4uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja31kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17YWxpZ24taXRlbXM6ZmxleC1zdGFydDtib3JkZXI6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW46MDttYXgtaGVpZ2h0OjEwMHZIO3BvaW50ZXItZXZlbnRzOm5vbmU7cmlnaHQ6MDt0b3A6MDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7d2lkdGg6MjVyZW07ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheSl9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdOm5vdCguaW5saW5lKXtwb3NpdGlvbjphYnNvbHV0ZX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uaW5saW5ley0tbW9uc3Rlci1tZXNzYWdlLWJvcmRlci1zaGFkb3c6bm9uZX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1bZGF0YS1tb25zdGVyLW9yaWVudGF0aW9uKj1sZWZ0XXtsZWZ0OjA7cmlnaHQ6YXV0b31bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1bZGF0YS1tb25zdGVyLW9yaWVudGF0aW9uKj1yaWdodF17bGVmdDphdXRvO3JpZ2h0OjB9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdW2RhdGEtbW9uc3Rlci1vcmllbnRhdGlvbio9Y2VudGVyXXtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVtkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24qPWJvdHRvbV17YWxpZ24taXRlbXM6ZmxleC1lbmQ7Ym90dG9tOjB9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdW2RhdGEtbW9uc3Rlci1vcmllbnRhdGlvbio9dG9wXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O3RvcDowfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250YWluZXJde3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPW1lc3NhZ2Vde2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1tZXNzYWdlLWJvcmRlci1jb2xvcixyZ2JhKDAsMCwwLC4xKSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLW1lc3NhZ2UtYm9yZGVyLXJhZGl1cywuMjVyZW0pO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLW1lc3NhZ2UtYm9yZGVyLXN0eWxlLHNvbGlkKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1tZXNzYWdlLWJvcmRlci13aWR0aCwxcHgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1tZXNzYWdlLWJvcmRlci1zaGFkb3csMCAuNXJlbSAxcmVtIHJnYmEoMCwwLDAsLjE1KSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6ZmxleDtmb250LXNpemU6Ljg3NXJlbTttYXJnaW46dmFyKC0tbW9uc3Rlci1tZXNzYWdlLW1hcmdpbi10b3AsMTVweCkgdmFyKC0tbW9uc3Rlci1tZXNzYWdlLW1hcmdpbi1yaWdodCw1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1tYXJnaW4tYm90dG9tLDApIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1tYXJnaW4tbGVmdCwwKTttYXgtaGVpZ2h0OjIwMHB4O21heC13aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1wYWRkaW5nLXRvcCw1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1wYWRkaW5nLXJpZ2h0LDVweCkgdmFyKC0tbW9uc3Rlci1tZXNzYWdlLXBhZGRpbmctYm90dG9tLDVweCkgdmFyKC0tbW9uc3Rlci1tZXNzYWdlLXBhZGRpbmctbGVmdCw1cHgpO3BvaW50ZXItZXZlbnRzOmF1dG87cG9zaXRpb246cmVsYXRpdmU7dGV4dC1vdmVyZmxvdzplbGxpcHNpczstd2Via2l0LXVzZXItc2VsZWN0OnRleHQ7LW1vei11c2VyLXNlbGVjdDp0ZXh0O3VzZXItc2VsZWN0OnRleHQ7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9bWVzc2FnZV06Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfVtkYXRhLW1vbnN0ZXItcm9sZT1tZXNzYWdlXS5mYWRlb3V0e2JvcmRlcjowO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWF4LWhlaWdodDowO3BhZGRpbmctYm90dG9tOjA7cGFkZGluZy10b3A6MDt0cmFuc2l0aW9uOmFsbCAuMnMgY3ViaWMtYmV6aWVyKDEsLS4wNCwwLDEuMDMpfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBBVFRSSUJVVEVfUk9MRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSBcIi4vbWVzc2FnZS5tanNcIjtcbmltcG9ydCB7IE5vdGlmeVN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L25vdGlmeS5tanNcIjtcbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3F1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5cbmV4cG9ydCB7IE5vdGlmeSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250YWluZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udGFpbmVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcXVldWVTeW1ib2wgPSBTeW1ib2woXCJxdWV1ZVwiKTtcblxuLyoqXG4gKiBUaGUgTm90aWZ5IGNvbnRyb2xcbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9ub3RpZnkvbm90aWZ5XG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbm90aWZ5L25vdGlmeS1zaW1wbGUgTm90aWZ5XG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9ub3RpZnkvbm90aWZ5LWlubGluZSBJbmxpbmUgTm90aWZ5XG4gKlxuICogQGlzc3VlIGh0dHBzOi8vbG9jYWxob3N0LmFsdmluZS5kZXY6ODQ0My9kZXZlbG9wbWVudC9pc3N1ZXMvY2xvc2VkLzI2OS5odG1sXG4gKlxuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIE5vdGlmeSBjb250cm9sIGlzIGEgbm90aWZpY2F0aW9uIGNvbnRhaW5lciB0aGF0IGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgbWVzc2FnZXMgdG8gdGhlIHVzZXIuXG4gKi9cbmNsYXNzIE5vdGlmeSBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbcXVldWVTeW1ib2xdID0gbmV3IFF1ZXVlKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG9yaWVudGF0aW9uIFRoZSBvcmllbnRhdGlvbiBvZiB0aGUgbm90aWZ5IGVsZW1lbnQuIEFsbG93ZWQgdmFsdWVzIGZvciBob3Jpem9udGFsIG9yaWVudGF0aW9uIGFyZSBcImxlZnRcIiwgXCJjZW50ZXJcIiwgXCJyaWdodFwiLiBBbGxvd2VkIHZhbHVlcyBmb3IgdmVydGljYWwgb3JpZW50YXRpb24gYXJlIFwidG9wXCIgYW5kIFwiYm90dG9tXCIuXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSB0ZW1wbGF0ZXMgVGhlIHRlbXBsYXRlcyBvZiB0aGUgbm90aWZ5IGVsZW1lbnQuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBUaGUgbWFpbiB0ZW1wbGF0ZSBvZiB0aGUgbm90aWZ5IGVsZW1lbnQuXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBjbGFzc2VzIFRoZSBjbGFzc2VzIG9mIHRoZSBub3RpZnkgZWxlbWVudC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMuY29udGFpbmVyIFRoZSBjb250YWluZXIgY2xhc3Mgb2YgdGhlIG5vdGlmeSBlbGVtZW50LlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2xhc3Nlcy5jb250cm9sIFRoZSBjb250cm9sIGNsYXNzIG9mIHRoZSBub3RpZnkgZWxlbWVudC5cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdG9yaWVudGF0aW9uOiBcImxlZnQgdG9wXCIsXG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGNvbnRhaW5lcjogXCJcIixcblx0XHRcdFx0Y29udHJvbDogXCJjZW50ZXJcIixcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Tm90aWZ5fVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblxuXHRcdGlmICh0aGlzW2NvbnRhaW5lckVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0XHR3aGlsZSAodGhpc1txdWV1ZVN5bWJvbF0uaXNFbXB0eSgpID09PSBmYWxzZSkge1xuXHRcdFx0XHR0aGlzLnB1c2godGhpc1txdWV1ZVN5bWJvbF0ucG9sbCgpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItbm90aWZ5XCI7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtOb3RpZnlTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge01hc3NhZ2V8U3RyaW5nfSBtZXNzYWdlXG5cdCAqIEByZXR1cm4ge05vdGlmeX1cblx0ICovXG5cdHB1c2gobWVzc2FnZSkge1xuXHRcdGxldCBtZXNzYWdlRWxlbWVudCA9IG1lc3NhZ2U7XG5cdFx0aWYgKCEobWVzc2FnZSBpbnN0YW5jZW9mIE1lc3NhZ2UpKSB7XG5cdFx0XHRjb25zdCB0ZXh0ID0gdmFsaWRhdGVTdHJpbmcobWVzc2FnZSk7XG5cdFx0XHRtZXNzYWdlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJtb25zdGVyLW5vdGlmeS1tZXNzYWdlXCIpO1xuXHRcdFx0bWVzc2FnZUVsZW1lbnQuc2V0T3B0aW9uKFwiY29udGVudFwiLCB0ZXh0KTtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZUluc3RhbmNlKG1lc3NhZ2VFbGVtZW50LCBNZXNzYWdlKTtcblx0XHRtZXNzYWdlRWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUsIFwibWVzc2FnZVwiKTtcblxuXHRcdC8vIGlmIG5vdCBjb25uZWN0ZWQsIGFkZCB0byBxdWV1ZVxuXHRcdGlmICghdGhpc1tjb250YWluZXJFbGVtZW50U3ltYm9sXSkge1xuXHRcdFx0dGhpc1txdWV1ZVN5bWJvbF0uYWRkKG1lc3NhZ2VFbGVtZW50KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItbm90aWZ5LW1lc3NhZ2VcIiwge1xuXHRcdFx0bWVzc2FnZUVsZW1lbnQsXG5cdFx0fSk7XG5cblx0XHR0aGlzW2NvbnRhaW5lckVsZW1lbnRTeW1ib2xdLmFwcGVuZENoaWxkKG1lc3NhZ2VFbGVtZW50KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbXCIgKyBBVFRSSUJVVEVfUk9MRSArIFwiPWNvbnRyb2xdXCIsXG5cdCk7XG5cdHRoaXNbY29udGFpbmVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltcIiArIEFUVFJJQlVURV9ST0xFICsgXCI9Y29udGFpbmVyXVwiLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIlxuICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGF0YS1tb25zdGVyLW9yaWVudGF0aW9uIHBhdGg6b3JpZW50YXRpb24sIGNsYXNzIHBhdGg6Y2xhc3Nlcy5jb250cm9sXCI+XG5cdFx0XHQ8ZGl2IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjbGFzc2VzLmNvbnRhaW5lclwiIHBhcnQ9XCJjb250YWluZXJcIlxuXHRcdFx0XHQgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KE5vdGlmeSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgU3BsaXRQYW5lbFN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFNwbGl0UGFuZWxTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0U3BsaXRQYW5lbFN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgc3BsaXRwYW5lbCB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPXNwbGl0LXBhbmVsXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztoZWlnaHQ6YXV0bzttYXJnaW46MDtwYWRkaW5nOjA7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtcGFuZWxdIC5wYW5lbHtmbGV4LWdyb3c6MTtvdmVyZmxvdzphdXRvfVtkYXRhLW1vbnN0ZXItcm9sZT1zcGxpdC1wYW5lbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWRyYWdnZXJde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtoZWlnaHQ6YXV0bztwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDp2YXIoLS1tb25zdGVyLWRyYWdnZXItd2lkdGgpfTppcyhbZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtcGFuZWxdIFtkYXRhLW1vbnN0ZXItcm9sZT1kcmFnZ2VyXSkgW2RhdGEtbW9uc3Rlci1yb2xlPWhhbmRsZV17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpO2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLWhlaWdodCk7bGVmdDo1MCU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7d2lkdGg6dmFyKC0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS13aWR0aCk7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9Lmhvcml6b250YWxbZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtcGFuZWxde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uaG9yaXpvbnRhbFtkYXRhLW1vbnN0ZXItcm9sZT1zcGxpdC1wYW5lbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWRyYWdnZXJde2hlaWdodDp2YXIoLS1tb25zdGVyLWRyYWdnZXItd2lkdGgpO3dpZHRoOjEwMCV9OmlzKC5ob3Jpem9udGFsW2RhdGEtbW9uc3Rlci1yb2xlPXNwbGl0LXBhbmVsXSBbZGF0YS1tb25zdGVyLXJvbGU9ZHJhZ2dlcl0pIFtkYXRhLW1vbnN0ZXItcm9sZT1oYW5kbGVde2hlaWdodDp2YXIoLS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLXdpZHRoKTt3aWR0aDp2YXIoLS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLWhlaWdodCl9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCBcIi4uL25vdGlmeS9ub3RpZnkubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgU3BsaXRQYW5lbFN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3NwbGl0LXBhbmVsLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBTcGxpdFBhbmVsLCBUWVBFX1ZFUlRJQ0FMLCBUWVBFX0hPUklaT05UQUwgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic3BsaXRTY3JlZW5FbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkcmFnZ2VyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImRyYWdnZXJFbGVtZW50XCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3RhcnRQYW5lbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJzdGFydFBhbmVsRWxlbWVudFwiKTtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGVuZFBhbmVsRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImVuZFBhbmVsRWxlbWVudFwiKTtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGhhbmRsZUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJoYW5kbGVFbGVtZW50XCIpO1xuXG4vKipcbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBUWVBFX1ZFUlRJQ0FMID0gXCJ2ZXJ0aWNhbFwiO1xuLyoqXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgVFlQRV9IT1JJWk9OVEFMID0gXCJob3Jpem9udGFsXCI7XG5cbi8qKlxuICogQSBTcGxpdFBhbmVsIENvbnRyb2xcbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9sYXlvdXQvc3BsaXQtcGFuZWwvXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbGF5b3V0L3NwbGl0LXBhbmVsLXNpbXBsZVxuICpcbiAqIEBzaW5jZSAzLjU0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgU3BsaXRQYW5lbCBjb250cm9sIGlzIGEgc2ltcGxlIGxheW91dCBjb250cm9sIHRoYXQgYWxsb3dzIHlvdSB0byBzcGxpdCB0aGUgc2NyZWVuXG4gKiBpbnRvIHR3byBwYXJ0cy4gVGhlIHNwbGl0IGNhbiBiZSBlaXRoZXIgdmVydGljYWwgb3IgaG9yaXpvbnRhbC4gVGhlIGNvbnRyb2wgcHJvdmlkZXMgYVxuICogZHJhZ2dhYmxlIGhhbmRsZSB0aGF0IGFsbG93cyB5b3UgdG8gYWRqdXN0IHRoZSBzaXplIG9mIHRoZSB0d28gcGFuZWxzLlxuICovXG5jbGFzcyBTcGxpdFBhbmVsIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2xheW91dC9zcGxpdC1wYW5lbFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHNwbGl0VHlwZSBTcGxpdCB0eXBlICh2ZXJ0aWNhbCBvciBob3Jpem9udGFsKVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gZGltZW5zaW9uIERpbWVuc2lvblxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gZGltZW5zaW9uLmluaXRpYWwgSW5pdGlhbCBkaW1lbnNpb24gb2YgdGhlIHN0YXJ0IHBhbmVsXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkaW1lbnNpb24ubWF4IE1heGltdW0gZGltZW5zaW9uIG9mIHRoZSBzdGFydCBwYW5lbCAoaW4gcGVyY2VudGFnZSlcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGRpbWVuc2lvbi5taW4gTWluaW11bSBkaW1lbnNpb24gb2YgdGhlIHN0YXJ0IHBhbmVsIChpbiBwZXJjZW50YWdlKVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0c3BsaXRUeXBlOiBUWVBFX1ZFUlRJQ0FMLFxuXHRcdFx0ZGltZW5zaW9uOiB7XG5cdFx0XHRcdGluaXRpYWw6IFwiNjAlXCIsXG5cdFx0XHRcdG1heDogXCI4MCVcIixcblx0XHRcdFx0bWluOiBcIjIwJVwiLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdGZ1bGxTdGFydFNjcmVlbigpIHtcblx0XHR0aGlzLnNldERpbWVuc2lvbihcIjEwMCVcIik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRmdWxsRW5kU2NyZWVuKCkge1xuXHRcdHRoaXMuc2V0RGltZW5zaW9uKFwiMCVcIik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpc0Z1bGxTdGFydFNjcmVlbigpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmN1cnJlbnREaW1lbnNpb24gPT09IFwiMTAwJVwiO1xuXHR9XG5cblx0aXNGdWxsRW5kU2NyZWVuKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuY3VycmVudERpbWVuc2lvbiA9PT0gXCIwJVwiO1xuXHR9XG5cblx0aXNJbml0aWFsU2NyZWVuKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuY3VycmVudERpbWVuc2lvbiA9PT1cblx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLmluaXRpYWxcblx0XHQpO1xuXHR9XG5cblx0cmVzZXRTY3JlZW4oKSB7XG5cdFx0dGhpcy5zZXREaW1lbnNpb24odGhpcy5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikuaW5pdGlhbCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRDb250ZW50KGh0bWwpIHtcblx0XHR0aGlzLnNldE9wdGlvbihcImNvbnRlbnRcIiwgaHRtbCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuVmlld2VyfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblxuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblx0XHQvL2FwcGx5UGFuZWxEaW1lbnNpb25zLmNhbGwodGhpcyk7XG5cdFx0dGhpcy5zZXREaW1lbnNpb24odGhpcy5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikuaW5pdGlhbCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgdGhlIGRpbWVuc2lvbiBpcyBhIHBlcmNlbnRhZ2UgYW5kIHdpdGhpbiBhIHZhbGlkIHJhbmdlLCB0aGVuIHNldCB0aGUgZGltZW5zaW9uIG9wdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGRpbWVuc2lvbiAtIFRoZSBkaW1lbnNpb24gdG8gYmUgc2V0LCBjYW4gYmUgaW4gcGVyY2VudGFnZSBvciBhYnNvbHV0ZSB2YWx1ZS5cblx0ICogQHJldHVybiB7T2JqZWN0fSAtIFJldHVybnMgdGhlIGN1cnJlbnQgb2JqZWN0IGluc3RhbmNlIGZvciBjaGFpbmluZy5cblx0ICovXG5cdHNldERpbWVuc2lvbihkaW1lbnNpb24pIHtcblx0XHQvLyBjaGVjayBpZiBwZXJjZW50IGFuZCBncmVhdGVyIHRoYW4xMDBcblx0XHRpZiAoZGltZW5zaW9uLmluY2x1ZGVzKFwiJVwiKSkge1xuXHRcdFx0aWYgKHBhcnNlSW50KGRpbWVuc2lvbikgPiAxMDApIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZGltZW5zaW9uIG11c3QgYmUgbGVzcyB0aGFuIDEwMCVcIik7XG5cdFx0XHR9IGVsc2UgaWYgKHBhcnNlSW50KGRpbWVuc2lvbikgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImRpbWVuc2lvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJVwiKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuY3VycmVudERpbWVuc2lvbiA9IGRpbWVuc2lvbjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItc3BsaXQtcGFuZWxcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1NwbGl0UGFuZWxTdHlsZVNoZWV0XTtcblx0fVxufVxuXG4vKipcbiAqIFNldCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgcGFuZWwgYmFzZWQgb24gdGhlIHNwbGl0IHR5cGUuXG4gKiBAZmlyZXMgbW9uc3Rlci1kaW1lbnNpb24tY2hhbmdlZFxuICovXG5mdW5jdGlvbiBhcHBseVBhbmVsRGltZW5zaW9ucygpIHtcblx0Y29uc3Qgc3BsaXRUeXBlID0gdGhpcy5nZXRPcHRpb24oXCJzcGxpdFR5cGVcIik7XG5cdGNvbnN0IGRpbWVuc2lvbiA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uO1xuXG5cdGlmIChzcGxpdFR5cGUgPT09IFRZUEVfVkVSVElDQUwpIHtcblx0XHR0aGlzW3N0YXJ0UGFuZWxFbGVtZW50U3ltYm9sXS5zdHlsZS53aWR0aCA9IGRpbWVuc2lvbjtcblx0XHR0aGlzW2VuZFBhbmVsRWxlbWVudFN5bWJvbF0uc3R5bGUud2lkdGggPSBgY2FsYygxMDAlIC0gJHtkaW1lbnNpb259IC0gNXB4KWA7XG5cdFx0dGhpc1tkcmFnZ2VyRWxlbWVudFN5bWJvbF0uc3R5bGUuY3Vyc29yID0gXCJldy1yZXNpemVcIjtcblx0XHR0aGlzW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcInZlcnRpY2FsXCIpO1xuXHRcdHRoaXNbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiaG9yaXpvbnRhbFwiKTtcblx0fSBlbHNlIHtcblx0XHR0aGlzW3N0YXJ0UGFuZWxFbGVtZW50U3ltYm9sXS5zdHlsZS5oZWlnaHQgPSBkaW1lbnNpb247XG5cdFx0dGhpc1tlbmRQYW5lbEVsZW1lbnRTeW1ib2xdLnN0eWxlLmhlaWdodCA9XG5cdFx0XHRgY2FsYygxMDAlIC0gJHtkaW1lbnNpb259IC0gNXB4KWA7XG5cdFx0dGhpc1tkcmFnZ2VyRWxlbWVudFN5bWJvbF0uc3R5bGUuY3Vyc29yID0gXCJucy1yZXNpemVcIjtcblx0XHR0aGlzW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImhvcml6b250YWxcIik7XG5cdFx0dGhpc1tzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJ2ZXJ0aWNhbFwiKTtcblx0fVxuXG5cdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItZGltZW5zaW9uLWNoYW5nZWRcIiwge1xuXHRcdGNvbnRyb2xsZXI6IHRoaXMsXG5cdFx0ZGltZW5zaW9uOiBkaW1lbnNpb24sXG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPXNwbGl0LXBhbmVsXVwiLFxuXHQpO1xuXHR0aGlzW2RyYWdnZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWRyYWdnZXJdXCIsXG5cdCk7XG5cdHRoaXNbaGFuZGxlRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1oYW5kbGVdXCIsXG5cdCk7XG5cblx0dGhpc1tzdGFydFBhbmVsRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1zdGFydFBhbmVsXVwiLFxuXHQpO1xuXHR0aGlzW2VuZFBhbmVsRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1lbmRQYW5lbF1cIixcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRsZXQgbGFzdERpbWVuc2lvbiA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uO1xuXHRsZXQgbGFzdFR5cGUgPSB0aGlzLmdldE9wdGlvbihcInNwbGl0VHlwZVwiKTtcblxuXHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuaXNEcmFnZ2luZyA9IGZhbHNlO1xuXG5cdC8vIEB0b2RvOiBhZGQgYmV0dGVyIHRvdWNoIHN1cHBvcnRcblx0Y29uc3QgZXZlbnRUeXBlcyA9IFtcImRibGNsaWNrXCIsIFwidG91Y2hzdGFydFwiXTtcblx0Zm9yIChjb25zdCBldmVudFR5cGUgb2YgZXZlbnRUeXBlcykge1xuXHRcdHRoaXNbZHJhZ2dlckVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCAoKSA9PiB7XG5cdFx0XHRzZWxmW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuaXNEcmFnZ2luZyA9IGZhbHNlO1xuXHRcdFx0bGFzdERpbWVuc2lvbiA9IHVuZGVmaW5lZDtcblxuXHRcdFx0bGV0IGN1cnJlbnREaW1lbnNpb247XG5cdFx0XHRpZiAoc2VsZi5nZXRPcHRpb24oXCJzcGxpdFR5cGVcIikgPT09IFRZUEVfVkVSVElDQUwpIHtcblx0XHRcdFx0Y29uc3QgdG9wUGFuZWwgPSBzZWxmW3N0YXJ0UGFuZWxFbGVtZW50U3ltYm9sXTtcblx0XHRcdFx0Y3VycmVudERpbWVuc2lvbiA9IHRvcFBhbmVsLnN0eWxlLndpZHRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgdG9wUGFuZWwgPSBzZWxmW3N0YXJ0UGFuZWxFbGVtZW50U3ltYm9sXTtcblx0XHRcdFx0Y3VycmVudERpbWVuc2lvbiA9IHRvcFBhbmVsLnN0eWxlLmhlaWdodDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGN1cnJlbnREaW1lbnNpb24gPT09IHNlbGYuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLmluaXRpYWwpIHtcblx0XHRcdFx0c2VsZi5zZXREaW1lbnNpb24oc2VsZi5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikubWF4KTtcblx0XHRcdH0gZWxzZSBpZiAoY3VycmVudERpbWVuc2lvbiA9PT0gc2VsZi5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikubWF4KSB7XG5cdFx0XHRcdHNlbGYuc2V0RGltZW5zaW9uKHNlbGYuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLm1pbik7XG5cdFx0XHR9IGVsc2UgaWYgKGN1cnJlbnREaW1lbnNpb24gPT09IHNlbGYuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLm1pbikge1xuXHRcdFx0XHRzZWxmLnNldERpbWVuc2lvbihzZWxmLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5pbml0aWFsKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYuc2V0RGltZW5zaW9uKHNlbGYuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLmluaXRpYWwpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0dGhpc1tkcmFnZ2VyRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCAoKSA9PiB7XG5cdFx0c2VsZltpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmlzRHJhZ2dpbmcgPSB0cnVlO1xuXG5cdFx0Y29uc3QgZXZlbnRMaXN0ZW5lciA9IChlKSA9PiB7XG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdC8vIHRoZSA1cHggYXJlIHdyb25nIGFuZCBtdXN0IGJlIGNhbGMgZnJvbSBjc3MgcHJvcGVydHkgLS1tb25zdGVyLWRyYWdnZXItd2lkdGhcblxuXHRcdFx0bGV0IGRyYWdnZXJXaWR0aCA9IGdldENvbXB1dGVkU3R5bGUoXG5cdFx0XHRcdHNlbGZbZHJhZ2dlckVsZW1lbnRTeW1ib2xdLFxuXHRcdFx0KS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1tb25zdGVyLWRyYWdnZXItd2lkdGhcIik7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGRyYWdnZXJXaWR0aCA9PT0gXCJcIiB8fFxuXHRcdFx0XHRkcmFnZ2VyV2lkdGggPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRkcmFnZ2VyV2lkdGggPT09IG51bGxcblx0XHRcdCkge1xuXHRcdFx0XHRkcmFnZ2VyV2lkdGggPSBcIjBcIjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFzZWxmW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuaXNEcmFnZ2luZykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZWxmLmdldE9wdGlvbihcInNwbGl0VHlwZVwiKSA9PT0gVFlQRV9IT1JJWk9OVEFMKSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRhaW5lck9mZnNldFRvcCA9IHNlbGZbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5vZmZzZXRUb3A7XG5cdFx0XHRcdGNvbnN0IHRvcFBhbmVsID0gc2VsZltzdGFydFBhbmVsRWxlbWVudFN5bWJvbF07XG5cdFx0XHRcdGNvbnN0IGJvdHRvbVBhbmVsID0gc2VsZltlbmRQYW5lbEVsZW1lbnRTeW1ib2xdO1xuXHRcdFx0XHRsZXQgbmV3VG9wSGVpZ2h0ID0gZS5jbGllbnRZIC0gY29udGFpbmVyT2Zmc2V0VG9wO1xuXG5cdFx0XHRcdGNvbnN0IG1pbiA9IHRoaXMuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLm1pbjtcblx0XHRcdFx0Y29uc3QgbWF4ID0gdGhpcy5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikubWF4O1xuXG5cdFx0XHRcdGNvbnN0IHRvcEFzUGVyY2VudCA9XG5cdFx0XHRcdFx0KG5ld1RvcEhlaWdodCAvIHRoaXNbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5vZmZzZXRIZWlnaHQpICogMTAwO1xuXHRcdFx0XHRpZiAocGFyc2VJbnQobWluKSA+IHRvcEFzUGVyY2VudCkge1xuXHRcdFx0XHRcdG5ld1RvcEhlaWdodCA9IG1pbjtcblx0XHRcdFx0fSBlbHNlIGlmIChwYXJzZUludChtYXgpIDwgdG9wQXNQZXJjZW50KSB7XG5cdFx0XHRcdFx0bmV3VG9wSGVpZ2h0ID0gbWF4O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5ld1RvcEhlaWdodCA9IHRvcEFzUGVyY2VudCArIFwiJVwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gY2FsYyBuZXcgdG9wIGhlaWdodCB0byBwaXhlbFxuXHRcdFx0XHRjb25zdCBuZXdUb3BIZWlnaHRQeCA9XG5cdFx0XHRcdFx0KHBhcnNlSW50KG5ld1RvcEhlaWdodCkgLyAxMDApICpcblx0XHRcdFx0XHR0aGlzW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0ub2Zmc2V0SGVpZ2h0O1xuXG5cdFx0XHRcdHRvcFBhbmVsLnN0eWxlLmhlaWdodCA9IGAke25ld1RvcEhlaWdodFB4fXB4YDtcblx0XHRcdFx0Ym90dG9tUGFuZWwuc3R5bGUuaGVpZ2h0ID0gYGNhbGMoMTAwJSAtICR7bmV3VG9wSGVpZ2h0UHh9cHggLSAke2RyYWdnZXJXaWR0aH0pYDsgLy8gNXB4IGlzIGRyYWdnZXIgaGVpZ2h0XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBjb250YWluZXJPZmZzZXRMZWZ0ID0gc2VsZltzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLm9mZnNldExlZnQ7XG5cdFx0XHRcdGNvbnN0IGxlZnRQYW5lbCA9IHNlbGZbc3RhcnRQYW5lbEVsZW1lbnRTeW1ib2xdO1xuXHRcdFx0XHRjb25zdCByaWdodFBhbmVsID0gc2VsZltlbmRQYW5lbEVsZW1lbnRTeW1ib2xdO1xuXHRcdFx0XHRsZXQgbmV3TGVmdFdpZHRoID0gZS5jbGllbnRYIC0gY29udGFpbmVyT2Zmc2V0TGVmdDtcblxuXHRcdFx0XHRjb25zdCBtaW4gPSB0aGlzLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5taW47XG5cdFx0XHRcdGNvbnN0IG1heCA9IHRoaXMuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLm1heDtcblxuXHRcdFx0XHRjb25zdCBsZWZ0QXNQZXJjZW50ID1cblx0XHRcdFx0XHQobmV3TGVmdFdpZHRoIC8gdGhpc1tzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLm9mZnNldFdpZHRoKSAqIDEwMDtcblxuXHRcdFx0XHRpZiAocGFyc2VJbnQobWluKSA+IGxlZnRBc1BlcmNlbnQpIHtcblx0XHRcdFx0XHRuZXdMZWZ0V2lkdGggPSBtaW47XG5cdFx0XHRcdH0gZWxzZSBpZiAocGFyc2VJbnQobWF4KSA8IGxlZnRBc1BlcmNlbnQpIHtcblx0XHRcdFx0XHRuZXdMZWZ0V2lkdGggPSBtYXg7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bmV3TGVmdFdpZHRoID0gbGVmdEFzUGVyY2VudCArIFwiJVwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGVmdFBhbmVsLnN0eWxlLndpZHRoID0gYCR7bmV3TGVmdFdpZHRofWA7XG5cdFx0XHRcdHJpZ2h0UGFuZWwuc3R5bGUud2lkdGggPSBgY2FsYygxMDAlIC0gJHtuZXdMZWZ0V2lkdGh9IC0gJHtkcmFnZ2VyV2lkdGh9KWA7IC8vIDVweCBpcyBkcmFnZ2VyIHdpZHRoXG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGNvbnN0IGRyYWdFdmVudEhhbmRsZXIgPSAoZSkgPT4ge1xuXHRcdFx0c2VsZltpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmlzRHJhZ2dpbmcgPSBmYWxzZTtcblx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgZXZlbnRMaXN0ZW5lcik7XG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBldmVudExpc3RlbmVyKTtcblx0XHR9O1xuXG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCBldmVudExpc3RlbmVyKTtcblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBkcmFnRXZlbnRIYW5kbGVyKTtcblx0fSk7XG5cblx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIoXG5cdFx0bmV3IE9ic2VydmVyKCgpID0+IHtcblx0XHRcdGxldCBhcHBseSA9IGZhbHNlO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGxhc3REaW1lbnNpb24gIT09IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uXG5cdFx0XHQpIHtcblx0XHRcdFx0bGFzdERpbWVuc2lvbiA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uO1xuXHRcdFx0XHRhcHBseSA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChsYXN0VHlwZSAhPT0gdGhpcy5nZXRPcHRpb24oXCJzcGxpdFR5cGVcIikpIHtcblx0XHRcdFx0bGFzdFR5cGUgPSB0aGlzLmdldE9wdGlvbihcInNwbGl0VHlwZVwiKTtcblx0XHRcdFx0YXBwbHkgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYXBwbHkpIHtcblx0XHRcdFx0YXBwbHlQYW5lbERpbWVuc2lvbnMuY2FsbCh0aGlzKTtcblx0XHRcdH1cblx0XHR9KSxcblx0KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3BsaXQtcGFuZWxcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInN0YXJ0UGFuZWxcIiBjbGFzcz1cInBhbmVsXCIgcGFydD1cInN0YXJ0UGFuZWxcIj5cbiAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwic3RhcnRcIj48L3Nsb3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJkcmFnZ2VyXCIgcGFydD1cImRyYWdnZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiaGFuZGxlXCIgcGFydD1cImhhbmRsZVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiZW5kUGFuZWxcIiBjbGFzcz1cInBhbmVsXCIgcGFydD1cImVuZFBhbmVsXCI+XG4gICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cImVuZFwiPjwvc2xvdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoU3BsaXRQYW5lbCk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgUGFuZWxTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBQYW5lbFN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRQYW5lbFN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgcGFuZWwgeyBcbjphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1mb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxcXFwiUXVpY2tzYW5kXFxcIixcXFwiU2Vnb2UgVUlcXFwiLFxcXCJSb2JvdG9cXFwiLFxcXCJPeHlnZW5cXFwiLFxcXCJVYnVudHVcXFwiLFxcXCJDYW50YXJlbGxcXFwiLFxcXCJGaXJhIFNhbnNcXFwiLFxcXCJEcm9pZCBTYW5zXFxcIixcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLEFyaWFsLHNhbnMtc2VyaWYsXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiOy0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2U6XFxcIkNvbnNvbGFzXFxcIixcXFwiQ291cmllciBOZXdcXFwiLFxcXCJSb2JvdG8gTW9ub1xcXCIsXFxcIlNvdXJjZSBDb2RlIFByb1xcXCIsXFxcIkZpcmEgTW9ub1xcXCIsbW9ub3NwYWNlOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS02KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMTojODMzYWI0Oy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yOiNmZDFkMWQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTM6I2ZjYjA0NTstLW1vbnN0ZXItYm94LXNoYWRvdy0xOm5vbmU7LS1tb25zdGVyLWJveC1zaGFkb3ctMjotMXB4IDFweCAxMHB4IDFweCBoc2xhKDAsMCUsNzYlLC42MSk7LS1tb25zdGVyLXRleHQtc2hhZG93Om5vbmU7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0yKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItYm9yZGVyLXdpZHRoOjNweDstLW1vbnN0ZXItYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZTotNHB4Oy0tbW9uc3Rlci16LWluZGV4LWRlZmF1bHQ6MDstLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lOjEwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duOjIwMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bi1vdmVybGF5OjIxMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3k6MzAwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreS1vdmVybGF5OjMxMDstLW1vbnN0ZXItei1pbmRleC1maXhlZDo0MDA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQtb3ZlcmxheTo0MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3A6NTAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wLW92ZXJsYXk6NTEwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhczo2MDA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzLW92ZXJsYXk6NjEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsOjcwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1vdmVybGF5OjcxMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyOjgwMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyLW92ZXJsYXk6ODEwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXA6ODAwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXAtb3ZlcmxheTo5MTA7LS1tb25zdGVyLXNwYWNlLTA6MDstLW1vbnN0ZXItc3BhY2UtMToycHg7LS1tb25zdGVyLXNwYWNlLTI6NHB4Oy0tbW9uc3Rlci1zcGFjZS0zOjZweDstLW1vbnN0ZXItc3BhY2UtNDoxMHB4Oy0tbW9uc3Rlci1zcGFjZS01OjE2cHg7LS1tb25zdGVyLXNwYWNlLTY6MjZweDstLW1vbnN0ZXItc3BhY2UtNzo0MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTA6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC03Ojc2OHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTk6OTkycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMTI6MTIwMHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoOjJweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGg6NHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQ6NTBweH0uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci10aGVtZS1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTEpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMXtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0yKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTJ7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLWNvbG9yLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLXRoZW1lLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMyl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ze2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci10aGVtZS1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTQpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtNHtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1yb3ctMXtib3JkZXI6MXB4IHNvbGlkIHZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1lbGVtZW50LC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtcm93LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1iYWNrZ3JvdW5kLWluaGVyaXR7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0IWltcG9ydGFudH0ubW9uc3Rlci10aGVtZS1vbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb24tY29sb3IpfS5tb25zdGVyLXRoZW1lLW9mZntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcil9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl17YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpub25lO3BhZGRpbmc6MS4xZW07ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwpfVtkYXRhLXBvcHBlci1hcnJvd10sW2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7YmFja2dyb3VuZDppbmhlcml0O2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEqdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSp2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMil9W2RhdGEtcG9wcGVyLWFycm93XXt2aXNpYmlsaXR5OmhpZGRlbn1bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29udGVudDpcXFwiXFxcIjt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTt2aXNpYmlsaXR5OnZpc2libGV9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49dG9wXT5bZGF0YS1wb3BwZXItYXJyb3dde2JvdHRvbTpjYWxjKHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpLzIpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePXRvcF0+W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItbGVmdDp0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXRvcDp0cmFuc3BhcmVudH1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1ib3R0b21dPltkYXRhLXBvcHBlci1hcnJvd117dG9wOmNhbGModmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePWJvdHRvbV0+W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmlnaHQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1sZWZ0XT5bZGF0YS1wb3BwZXItYXJyb3dde3JpZ2h0OmNhbGModmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePWxlZnRdPltkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JvcmRlci1ib3R0b206dHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci10b3A6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49cmlnaHRdPltkYXRhLXBvcHBlci1hcnJvd117bGVmdDpjYWxjKHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpLzIpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePXJpZ2h0XT5bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3JkZXItYm90dG9tOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1sZWZ0OnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yaWdodDp0cmFuc3BhcmVudDtib3JkZXItdG9wOnRyYW5zcGFyZW50fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5tb25zdGVyLWJhZGdlLXByaW1hcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXByaW1hcnksLm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnksLm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnksLm1vbnN0ZXItYmFkZ2UtdGVydGlhcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZle3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZSwubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utc3VjY2Vzc3twYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utc3VjY2VzcywubW9uc3Rlci1iYWRnZS1zdWNjZXNzLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MtcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS13YXJuaW5ne3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS13YXJuaW5nLC5tb25zdGVyLWJhZGdlLXdhcm5pbmctcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utd2FybmluZy1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLWVycm9ye3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1lcnJvciwubW9uc3Rlci1iYWRnZS1lcnJvci1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLWVycm9yLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7aGVpZ2h0Oi13ZWJraXQtZmlsbC1hdmFpbGFibGU7aGVpZ2h0OmZpbGwtYXZhaWxhYmxlO2hlaWdodDotbW96LWF2YWlsYWJsZTtoZWlnaHQ6c3RyZXRjaDtvdmVyZmxvdzphdXRvO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JvcmRlcjowO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTtoZWlnaHQ6ZmlsbC1hdmFpbGFibGU7aGVpZ2h0Oi1tb3otYXZhaWxhYmxlO2hlaWdodDpzdHJldGNoO21hcmdpbjowO291dGxpbmU6bm9uZTtvdmVyZmxvdzphdXRvO3BhZGRpbmc6MDtzY3JvbGxiYXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtzY3JvbGxiYXItd2lkdGg6dGhpbjsvL3Bvc2l0aW9uOmZpeGVkOy8vdG9wOjA7Ly9sZWZ0OjA7Ly9yaWdodDowOy8vYm90dG9tOjA7Ly9vdmVyZmxvdzphdXRvOy8vYm94LXNpemluZzpib3JkZXItYm94fSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBEZWFkTWFuc1N3aXRjaCB9IGZyb20gXCIuLi8uLi91dGlsL2RlYWRtYW5zc3dpdGNoLm1qc1wiO1xuXG5pbXBvcnQgeyBQYW5lbFN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3BhbmVsLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBQYW5lbCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBQYW5lbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJQYW5lbEVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVzaXplT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJyZXNpemVPYnNlcnZlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJDYWxsYmFja1N5bWJvbCA9IFN5bWJvbChcInRpbWVyQ2FsbGJhY2tcIik7XG5cbi8qKlxuICogQSBTbGlkZXJcbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9sYXlvdXQvcGFuZWwvXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbGF5b3V0L3BhbmVsLXNpbXBsZVxuICpcbiAqIEBzaW5jZSAzLjU0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgUGFuZWwgY29tcG9uZW50IGlzIHVzZWQgdG8gZGlzcGxheSBhIHBhbmVsLCBpc24ndCB0aGF0IGNvb2w/XG4gKi9cbmNsYXNzIFBhbmVsIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2xheW91dC9wYW5lbFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGhlaWdodEFkanVzdG1lbnQgSGVpZ2h0IGFkanVzdG1lbnRcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGhlaWdodEFkanVzdG1lbnQ6IDQsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuVmlld2VyfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblxuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblxuXHRcdGNhbGNIZWlnaHQuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGRvbSBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXHRcdGF0dGFjaFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cblx0XHQvLyBkaXNhYmxlIHNjcm9sbGluZyBpbiBwYXJlbnQgbm9kZVxuXHRcdGlmICh0aGlzLnBhcmVudE5vZGUgJiYgdGhpcy5wYXJlbnROb2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHRoaXMucGFyZW50Tm9kZS5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgZG9tIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cdFx0ZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLXBhbmVsXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtQYW5lbFN0eWxlU2hlZXRdO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2FsY0hlaWdodCgpIHtcblx0dGhpcy5zdHlsZS5ib3hTaXppbmcgPSBcImJvcmRlci1ib3hcIjtcblxuXHRjb25zdCBoZWlnaHQgPSBjYWxjdWxhdGVNYXhpbXVtSGVpZ2h0LmNhbGwodGhpcywgdGhpcyk7XG5cdGlmIChoZWlnaHQgPCAwKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgbWF4aW11bSBoZWlnaHQgb2YgYW4gZWxlbWVudCBiYXNlZCBvbiB0aGUgd2luZG93J3MgaW5uZXIgaGVpZ2h0XG4gKiBAcGFyYW0gZWxlbWVudFxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gY2FsY3VsYXRlTWF4aW11bUhlaWdodChlbGVtZW50KSB7XG5cdGxldCB0b3RhbEJvdHRvbUJvcmRlciA9IDA7XG5cdGxldCB0b3RhbEJvdHRvbVBhZGRpbmcgPSAwO1xuXHRsZXQgdG90YWxCb3R0b21NYXJnaW4gPSAwO1xuXHRsZXQgdG90YWxPdXRsaW5lSGVpZ2h0ID0gMDtcblx0bGV0IHRvdGFsQm94U2hhZG93SGVpZ2h0ID0gMDtcblx0bGV0IGN1cnJlbnRFbGVtZW50ID0gZWxlbWVudDtcblxuXHQvLyBHZXQgdGhlIGRpc3RhbmNlIGZyb20gdGhlIHRvcCBvZiB0aGUgZWxlbWVudCB0byB0aGUgdG9wIG9mIHRoZSB2aWV3cG9ydFxuXHRjb25zdCBkaXN0YW5jZUZyb21Ub3AgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcblxuXHQvLyBMb29wIHRocm91Z2ggdGhlIGVsZW1lbnRzIHVwIHRvIHRoZSBib2R5IHRvIHN1bSB1cCB0aGUgYm90dG9tIGJvcmRlcnMsIHBhZGRpbmcsIGFuZCBtYXJnaW5cblx0d2hpbGUgKGN1cnJlbnRFbGVtZW50ICYmIGN1cnJlbnRFbGVtZW50ICE9PSBkb2N1bWVudC5ib2R5KSB7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50RWxlbWVudCk7XG5cblx0XHQvLyBCb3ggc2l6aW5nXG5cdFx0Y29uc3QgYm94U2l6aW5nID0gc3R5bGUuYm94U2l6aW5nO1xuXG5cdFx0Ly8gQm9yZGVycywgcGFkZGluZywgYW5kIG1hcmdpblxuXHRcdGNvbnN0IGJvcmRlckJvdHRvbVdpZHRoID0gcGFyc2VGbG9hdChzdHlsZS5ib3JkZXJCb3R0b21XaWR0aCk7XG5cdFx0Y29uc3QgcGFkZGluZ0JvdHRvbSA9IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ0JvdHRvbSk7XG5cdFx0Y29uc3QgbWFyZ2luQm90dG9tID0gcGFyc2VGbG9hdChzdHlsZS5tYXJnaW5Cb3R0b20pO1xuXG5cdFx0Ly8gT3V0bGluZSBhbmQgYm94LXNoYWRvd1xuXHRcdGNvbnN0IG91dGxpbmVIZWlnaHQgPSBwYXJzZUZsb2F0KHN0eWxlLm91dGxpbmVXaWR0aCk7XG5cdFx0Ly8gVGhpcyBpcyBhIHNpbXBsaWZpY2F0aW9uOyBib3gtc2hhZG93IGlzIG1vcmUgY29tcGxleCB0byBwYXJzZVxuXHRcdGNvbnN0IGJveFNoYWRvd1ZlcnRpY2FsID0gcGFyc2VGbG9hdChzdHlsZS5ib3hTaGFkb3cuc3BsaXQoXCIgXCIpWzNdIHx8IDApO1xuXG5cdFx0Ly8gQWNjdW11bGF0ZSB2YWx1ZXNcblx0XHR0b3RhbEJvdHRvbUJvcmRlciArPSBpc05hTihib3JkZXJCb3R0b21XaWR0aCkgPyAwIDogYm9yZGVyQm90dG9tV2lkdGg7XG5cdFx0dG90YWxCb3R0b21QYWRkaW5nICs9XG5cdFx0XHRpc05hTihwYWRkaW5nQm90dG9tKSB8fCBib3hTaXppbmcgPT09IFwiYm9yZGVyLWJveFwiID8gMCA6IHBhZGRpbmdCb3R0b207XG5cdFx0dG90YWxCb3R0b21NYXJnaW4gKz0gaXNOYU4obWFyZ2luQm90dG9tKSA/IDAgOiBtYXJnaW5Cb3R0b207XG5cdFx0dG90YWxPdXRsaW5lSGVpZ2h0ICs9IGlzTmFOKG91dGxpbmVIZWlnaHQpID8gMCA6IG91dGxpbmVIZWlnaHQ7XG5cdFx0dG90YWxCb3hTaGFkb3dIZWlnaHQgKz0gaXNOYU4oYm94U2hhZG93VmVydGljYWwpID8gMCA6IGJveFNoYWRvd1ZlcnRpY2FsO1xuXG5cdFx0Y3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlIHx8IGN1cnJlbnRFbGVtZW50Lmhvc3Q7XG5cdH1cblxuXHQvLyBDYWxjdWxhdGUgdGhlIG1heGltdW0gaGVpZ2h0IGJ5IHN1YnRyYWN0aW5nIHRoZSBkaXN0YW5jZSwgYm9yZGVycywgcGFkZGluZywgbWFyZ2luLCBvdXRsaW5lLCBhbmQgYm94LXNoYWRvdyBmcm9tIHRoZSB3aW5kb3cncyBpbm5lciBoZWlnaHRcblx0Y29uc3QgbWF4aW11bUhlaWdodCA9XG5cdFx0d2luZG93LmlubmVySGVpZ2h0IC1cblx0XHRkaXN0YW5jZUZyb21Ub3AgLVxuXHRcdHRvdGFsQm90dG9tQm9yZGVyIC1cblx0XHR0b3RhbEJvdHRvbVBhZGRpbmcgLVxuXHRcdHRvdGFsQm90dG9tTWFyZ2luIC1cblx0XHR0b3RhbE91dGxpbmVIZWlnaHQgLVxuXHRcdHRvdGFsQm94U2hhZG93SGVpZ2h0O1xuXHRyZXR1cm4gbWF4aW11bUhlaWdodCArIHRoaXMuZ2V0T3B0aW9uKFwiaGVpZ2h0QWRqdXN0bWVudFwiKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhdHRhY2hSZXNpemVPYnNlcnZlcigpIHtcblx0Ly8gYWdhaW5zdCBmbGlja2VyaW5nXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcblx0XHRpZiAodGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdLnRvdWNoKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRcdGNhbGNIZWlnaHQuY2FsbCh0aGlzKTtcblx0XHR9KTtcblx0fSk7XG5cblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZSh0aGlzLm93bmVyRG9jdW1lbnQuYm9keSk7XG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUoZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpIHtcblx0aWYgKHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdIGluc3RhbmNlb2YgUmVzaXplT2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5kaXNjb25uZWN0KCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW1BhbmVsRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVwiLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFBhbmVsKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0aW5pdE1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9GT1JNX1JFTE9BRCwgQVRUUklCVVRFX0ZPUk1fVVJMIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgbG9hZEFuZEFzc2lnbkNvbnRlbnQgfSBmcm9tIFwiLi91dGlsL2ZldGNoLm1qc1wiO1xuXG5leHBvcnQgeyBSZWxvYWQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZCA9IFN5bWJvbChcIndhc0luaXRpYWxpemVkXCIpO1xuXG4vKipcbiAqIFRoaXMgQ3VzdG9tQ29udHJvbCByZWxvYWRzIHRoZSBjb250ZW50IG9mIGEgdXJsIGFuZCBlbWJlZHMgaXQgaW50byB0aGUgZG9tLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvcmVsb2FkLnBuZ1wiPlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgYDxtb25zdGVyLXJlbG9hZCAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1yZWxvYWQnKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1yZWxvYWQ+PC9tb25zdGVyLXJlbG9hZD5cbiAqXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7UmVsb2FkfSBmcm9tICdAc2NodWthaS9jb21wb25lbnQtZm9ybS9zb3VyY2UvcmVsb2FkLmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItcmVsb2FkJyk7XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEEgc2ltcGxlIGNvbmZpZ3VyYXRpb24gY2FuIGxvb2sgbGlrZSB0aGlzXG4gKlxuICogYGBgaHRtbFxuICogPHNjcmlwdCBpZD1cImNvbmZpZ1wiXG4gKiAgICAgICAgIHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCI+XG4gKiAgICAge1xuICogICAgICAgICBcInVybFwiOiBcIi4vY29udGVudC5odG1sXCIsXG4gKiAgICAgfVxuICogPC9zY3JpcHQ+XG4gKlxuICogPG1vbnN0ZXItcmVsb2FkIGRhdGEtbW9uc3Rlci1vcHRpb25zLXNlbGVjdG9yPVwiI2NvbmZpZ1wiPlxuICogPC9tb25zdGVyLXJlbG9hZD5cbiAqIGBgYFxuICpcbiAqIElmIHlvdSB3YW50IHRvIGRpc3BsYXkgYSBsb2FkZXIsIHlvdSBjYW4gaW5zZXJ0IGEgZGl2IHdpdGggdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcImAuXG4gKiBUaGUgY29udGVudCBvZiB0aGlzIGRpdiB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBsb2FkZWQgY29kZS5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1yZWxvYWQgZGF0YS1tb25zdGVyLW9wdGlvbnMtc2VsZWN0b3I9XCIjY29uZmlnXCI+XG4gKiA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGFpbmVyXCI+XG4gKiBMT0FERVIgLi4uXG4gKiA8L2Rpdj5cbiAqIDwvbW9uc3Rlci1yZWxvYWQ+XG4gKiBgYGBcbiAqXG4gKiBJZiB5b3UgbmVlZCBhZGRpdGlvbmFsIHN0cnVjdHVyZSwgeW91IGNhbiBzaW1wbHkgc3BlY2lmeSBpdC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1yZWxvYWQgZGF0YS1tb25zdGVyLW9wdGlvbnMtc2VsZWN0b3I9XCIjY29uZmlnXCI+XG4gKiA8ZGl2IGNsYXNzPVwicm93XCI+XG4gKiAgIDxkaXYgY2xhc3M9XCJjb2xcIiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICogICAgICAgTE9BREVSIC4uLlxuICogICA8L2Rpdj5cbiAqIDwvZGl2PlxuICogPC9tb25zdGVyLXJlbG9hZD5cbiAqIGBgYFxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2Zvcm0vcmVsb2FkL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vcmVsb2FkLXNpbXBsZVxuICpcbiAqIEBzaW5jZSAxLjEzLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGJlYXV0aWZ1bCByZWxvYWQgY29udHJvbFxuICogQGZpcmVzIG1vbnN0ZXItZmV0Y2hlZFxuICovXG5jbGFzcyBSZWxvYWQgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vcmVsb2FkXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdXJsPXVuZGVmaW5lZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVsb2FkPXVuZGVmaW5lZCBjdXJyZW50bHkgdGhlIHZhbHVlcyBkZWZpbmVkIGFyZSBgb25zaG93YCBhbmQgYGFsd2F5c2AuIFRoZSBkZWZhdWx0IGBvbnNob3dgIHJlbW92ZXMgdGhlIEludGVyc2VjdGlvbk9ic2VydmVyLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbnRlbnQgaXMgb25seSBsb2FkZWQgb25jZS4gcmVsb2FkaW5nIG9mIHRoZSBjb250ZW50IGRvZXMgbm90IG9jY3VyLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gZmlsdGVyPXVuZGVmaW5lZCBkb20gc2VsZWN0b3JzIHRvIHNlYXJjaCBmb3IgZWxlbWVudHMsIGlmIHVuZGVmaW5lZCB0aGVuIGV2ZXJ5dGhpbmcgaXMgdGFrZW5cblx0ICogQHByb3BlcnR5IHtPYmplY3RbXX0gcHJvY2Vzc29yc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2ggRmV0Y2ggW3NlZSBVc2luZyBGZXRjaCBtb3ppbGxhLm9yZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZldGNoX0FQSS9Vc2luZ19GZXRjaClcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLnJlZGlyZWN0PWVycm9yXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tb2RlPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jcmVkZW50aWFscz1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2guaGVhZGVycz17XCJhY2NlcHRcIjpcInRleHQvaHRtbFwifX1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0XHR7XG5cdFx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRcdG1haW46IGdldFRlbXBsYXRlLmNhbGwodGhpcyksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNoYWRvd01vZGU6IG51bGwsXG5cdFx0XHRcdHVybDogbnVsbCxcblx0XHRcdFx0cmVsb2FkOiBcIm9uc2hvd1wiLFxuXHRcdFx0XHRmaWx0ZXI6IG51bGwsXG5cdFx0XHRcdGZldGNoOiB7XG5cdFx0XHRcdFx0cmVkaXJlY3Q6IFwiZXJyb3JcIixcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0bW9kZTogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRcdGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRcdFx0YWNjZXB0OiBcInRleHQvaHRtbFwiLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHdoaWNoIGF0dHJpYnV0ZXMgYXJlIHRvIGJlIG1vbml0b3JlZCBieSBgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKClgLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmdbXX1cblx0ICovXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuXHRcdGNvbnN0IGxpc3QgPSBzdXBlci5vYnNlcnZlZEF0dHJpYnV0ZXM7XG5cdFx0bGlzdC5wdXNoKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cdFx0cmV0dXJuIGxpc3Q7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdFtpbml0TWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlcltpbml0TWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0Ly8gZGF0YS1tb25zdGVyLW9wdGlvbnNcblx0XHR0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfRk9STV9VUkxdID0gKHVybCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCkpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJ1cmxcIiwgbmV3IFVSTCh1cmwsIGRvY3VtZW50LmxvY2F0aW9uKS50b1N0cmluZygpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwidXJsXCIsIHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBkZWZhdWx0IHNsb3Rcblx0ICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcblx0ICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGFcblx0ICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcblx0ICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuXHQgKiBAZmlyZXMgbW9uc3Rlci1mZXRjaGVkXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLkZvcm19XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1yZWxvYWRcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2FkIGNvbnRlbnQgZnJvbSB1cmxcblx0ICpcblx0ICogSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgdGhhdCB3aXRoIHRoaXMgZnVuY3Rpb24gdGhlIGxvYWRpbmcgaXMgZXhlY3V0ZWRcblx0ICogZGlyZWN0bHkuIGl0IGlzIGxvYWRlZCBhcyB3ZWxsIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IHZpc2libGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gdXJsXG5cdCAqL1xuXHRmZXRjaCh1cmwpIHtcblx0XHRpZiAoaXNTdHJpbmcodXJsKSB8fCB1cmwgaW5zdGFuY2VvZiBVUkwpIHtcblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCwgYCR7dXJsfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsb2FkQ29udGVudC5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBgYGBcbiAqIDxtb25zdGVyLXNlbGVjdCBkYXRhLW1vbnN0ZXItdXJsPVwiaHR0cHM6Ly9leGFtcGxlLmNvbS9cIj48L21vbnN0ZXItc2VsZWN0PlxuICogYGBgXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkge1xuXHRjb25zdCBvcHRpb25zID0ge307XG5cblx0Y29uc3QgdXJsID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKTtcblxuXHRpZiAoaXNTdHJpbmcodXJsKSkge1xuXHRcdG9wdGlvbnNbXCJ1cmxcIl0gPSBuZXcgVVJMKHVybCwgZG9jdW1lbnQubG9jYXRpb24pLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKSkge1xuXHRcdG9wdGlvbnNbXCJyZWxvYWRcIl0gPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9SRUxPQUQpLnRvTG93ZXJDYXNlKCk7XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgZGVmYXVsdCBzbG90XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gcmVxdWVzdCBmYWlsZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEBmaXJlcyBtb25zdGVyLWZldGNoZWRcbiAqL1xuZnVuY3Rpb24gaW5pdEludGVyc2VjdGlvbk9ic2VydmVyKCkge1xuXHRpZiAodGhpc1tpbnRlcnNlY3Rpb25PYnNlcnZlcldhc0luaXRpYWxpemVkXSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZF0gPSB0cnVlO1xuXG5cdGNvbnN0IG9wdGlvbnMgPSB7XG5cdFx0dGhyZXNob2xkOiBbMC41XSxcblx0fTtcblxuXHRjb25zdCBjYWxsYmFjayA9IChlbnRyaWVzLCBvYnNlcnZlcikgPT4ge1xuXHRcdGZvciAoY29uc3QgWywgZW50cnldIG9mIGVudHJpZXMuZW50cmllcygpKSB7XG5cdFx0XHRpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcgPT09IHRydWUpIHtcblx0XHRcdFx0Ly8gdW5kZWZpbmVkIG9yIGFsd2F5cyBkbyB0aGUgc2FtZVxuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJyZWxvYWRcIikgPT09IFwib25zaG93XCIpIHtcblx0XHRcdFx0XHRvYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGxvYWRDb250ZW50LmNhbGwodGhpcykuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGNhbGxiYWNrLCBvcHRpb25zKTtcblx0b2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgZGVmYXVsdCBzbG90XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gcmVxdWVzdCBmYWlsZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBjbGllbnQgZXJyb3JcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICogQGZpcmVzIG1vbnN0ZXItZmV0Y2hlZFxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqL1xuZnVuY3Rpb24gbG9hZENvbnRlbnQoKSB7XG5cdGNvbnN0IHVybCA9IHRoaXMuZ2V0T3B0aW9uKFwidXJsXCIsIHVuZGVmaW5lZCk7XG5cdGlmICghaXNTdHJpbmcodXJsKSB8fCB1cmwgPT09IFwiXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHVybFwiKTtcblx0fVxuXG5cdGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcImZldGNoXCIsIHt9KTtcblxuXHRsZXQgcGFyZW50Tm9kZSA9IHRoaXM7XG5cdGlmICh0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHRwYXJlbnROb2RlID0gdGhpcy5zaGFkb3dSb290O1xuXHR9XG5cblx0bGV0IGNvbnRhaW5lciA9IHBhcmVudE5vZGUucXVlcnlTZWxlY3RvcihgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRhaW5lcl1gKTtcblx0bGV0IGN1cnJlbnREaXNwbGF5TW9kZSA9IGNvbnRhaW5lcj8uc3R5bGU/LmRpc3BsYXk7XG5cblx0aWYgKGN1cnJlbnREaXNwbGF5TW9kZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y3VycmVudERpc3BsYXlNb2RlID0gXCJpbmhlcml0XCI7XG5cdH1cblxuXHRpZiAoIShjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdGNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdFx0Y29udGFpbmVyLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSwgXCJjb250YWluZXJcIik7XG5cdFx0cGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuXHR9XG5cblx0cmV0dXJuIGxvYWRBbmRBc3NpZ25Db250ZW50KGNvbnRhaW5lciwgdXJsLCBvcHRpb25zLCB0aGlzLmdldE9wdGlvbihcImZpbHRlclwiKSlcblx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRpZiAoY3VycmVudERpc3BsYXlNb2RlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBjdXJyZW50RGlzcGxheU1vZGU7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdHRocm93IGU7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdHJldHVybiB0aGlzLmlubmVySFRNTDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFJlbG9hZCk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEN1c3RvbUVsZW1lbnQsIGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sIH0gZnJvbSBcIi4vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgQ3VzdG9tQ29udHJvbCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhdHRhY2hlZEludGVybmFsU3ltYm9sID0gU3ltYm9sKFwiYXR0YWNoZWRJbnRlcm5hbFwiKTtcblxuLyoqXG4gKiBUaGlzIGlzIGEgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgY3VzdG9tIGNvbnRyb2xzIHVzaW5nIHRoZSBwb3dlciBvZiBDdXN0b21FbGVtZW50LlxuICpcbiAqIEFmdGVyIGRlZmluaW5nIGEgYEN1c3RvbUVsZW1lbnRgLCB0aGUgYHJlZ2lzdGVyQ3VzdG9tRWxlbWVudGAgbWV0aG9kIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBjbGFzcyBuYW1lLiBPbmx5IHRoZW5cbiAqIHdpbGwgdGhlIHRhZyBkZWZpbmVkIHZpYSB0aGUgYGdldFRhZ2AgbWV0aG9kIGJlIG1hZGUga25vd24gdG8gdGhlIERPTS5cbiAqXG4gKiBUaGlzIGNvbnRyb2wgdXNlcyBgYXR0YWNoSW50ZXJuYWxzKClgIHRvIGludGVncmF0ZSB0aGUgY29udHJvbCBpbnRvIGEgZm9ybS4gSWYgdGhlIHRhcmdldCBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0XG4gKiB0aGlzIG1ldGhvZCwgdGhlIFtwb2x5ZmlsbF0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGwpIGNhbiBiZSB1c2VkLlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoZSBvYmplY3QgdXNpbmcgdGhlIGZ1bmN0aW9uIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KClgLlxuICpcbiAqIFRoaXMgY29udHJvbCB1c2VzIGBhdHRhY2hJbnRlcm5hbHMoKWAgdG8gaW50ZWdyYXRlIHRoZSBjb250cm9sIGludG8gYSBmb3JtLiBJZiB0aGUgdGFyZ2V0IGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnRcbiAqIHRoaXMgbWV0aG9kLCB0aGUgUG9seWZpbGwgZm9yIGF0dGFjaEludGVybmFscygpIGNhbiBiZSB1c2VkOiB7QGxpbmsgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGx8ZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGx9LlxuICpcbiAqIExlYXJuIG1vcmUgYWJvdXQgV0lDRyBXZWIgQ29tcG9uZW50czoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL3dlYmNvbXBvbmVudHN8V0lDRyBXZWIgQ29tcG9uZW50c30uXG4gKlxuICogUmVhZCB0aGUgSFRNTCBzcGVjaWZpY2F0aW9uIGZvciBDdXN0b20gRWxlbWVudHM6IHtAbGluayBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jdXN0b20tZWxlbWVudHMuaHRtbCNjdXN0b20tZWxlbWVudHN8Q3VzdG9tIEVsZW1lbnRzfS5cbiAqXG4gKiBSZWFkIHRoZSBIVE1MIHNwZWNpZmljYXRpb24gZm9yIEN1c3RvbSBFbGVtZW50IFJlYWN0aW9uczoge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvZGV2L2N1c3RvbS1lbGVtZW50cy5odG1sI2N1c3RvbS1lbGVtZW50LXJlYWN0aW9uc3xDdXN0b20gRWxlbWVudCBSZWFjdGlvbnN9LlxuICpcbiAqIEBzdW1tYXJ5IEEgYmFzZSBjbGFzcyBmb3IgY3VzdG9tIGNvbnRyb2xzIGJhc2VkIG9uIEN1c3RvbUVsZW1lbnQuXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE0LjBcbiAqL1xuY2xhc3MgQ3VzdG9tQ29udHJvbCBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhlIGNvbnN0cnVjdG9yIG1ldGhvZCBvZiBDdXN0b21Db250cm9sLCB3aGljaCBpcyBjYWxsZWQgd2hlbiBjcmVhdGluZyBhIG5ldyBpbnN0YW5jZS5cblx0ICogSXQgY2hlY2tzIHdoZXRoZXIgdGhlIGVsZW1lbnQgc3VwcG9ydHMgYGF0dGFjaEludGVybmFscygpYCBhbmQgaW5pdGlhbGl6ZXMgYW4gaW50ZXJuYWwgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnRcblx0ICogaWYgc3VwcG9ydGVkLiBBZGRpdGlvbmFsbHksIGl0IGluaXRpYWxpemVzIGEgTXV0YXRpb25PYnNlcnZlciB0byB3YXRjaCBmb3IgYXR0cmlidXRlIGNoYW5nZXMuXG5cdCAqXG5cdCAqIFNlZSB0aGUgbGlua3MgYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb246XG5cdCAqIHtAbGluayBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jdXN0b20tZWxlbWVudHMuaHRtbCNkb20tY3VzdG9tZWxlbWVudHJlZ2lzdHJ5LWRlZmluZXxDdXN0b21FbGVtZW50UmVnaXN0cnkuZGVmaW5lKCl9XG5cdCAqIHtAbGluayBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jdXN0b20tZWxlbWVudHMuaHRtbCNkb20tY3VzdG9tZWxlbWVudHJlZ2lzdHJ5LWdldHxDdXN0b21FbGVtZW50UmVnaXN0cnkuZ2V0KCl9XG5cdCAqIGFuZCB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHN8RWxlbWVudEludGVybmFsc31cblx0ICpcblx0ICogQGluaGVyaXRkb2Ncblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0Ly8gY2hlY2sgaWYgZWxlbWVudCBzdXBwb3J0cyBgYXR0YWNoSW50ZXJuYWxzKClgXG5cdFx0aWYgKHR5cGVvZiB0aGlzW1wiYXR0YWNoSW50ZXJuYWxzXCJdID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHRoaXNbYXR0YWNoZWRJbnRlcm5hbFN5bWJvbF0gPSB0aGlzLmF0dGFjaEludGVybmFscygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBgYXR0YWNoSW50ZXJuYWxzKClgIGlzIG5vdCBzdXBwb3J0ZWQsIHNvIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdFx0XHR0aHJvdyBFcnJvcihcblx0XHRcdFx0XCJ0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVwiLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHQvLyBpbml0aWFsaXplIGEgTXV0YXRpb25PYnNlcnZlciB0byB3YXRjaCBmb3IgYXR0cmlidXRlIGNoYW5nZXNcblx0XHRpbml0T2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL2N1c3RvbS1jb250cm9sQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHdoaWNoIGF0dHJpYnV0ZXMgYXJlIHRvIGJlIG1vbml0b3JlZCBieSBgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKClgLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmdbXX1cblx0ICogQHNpbmNlIDEuMTUuMFxuXHQgKi9cblx0c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG5cdFx0cmV0dXJuIHN1cGVyLm9ic2VydmVkQXR0cmlidXRlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRpbmcgYSBzdGF0aWMgYGZvcm1Bc3NvY2lhdGVkYCBwcm9wZXJ0eSwgd2l0aCBhIHRydWUgdmFsdWUsIG1ha2VzIGFuIGF1dG9ub21vdXMgY3VzdG9tIGVsZW1lbnQgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBzZWUgW2F0dGFjaEludGVybmFscygpXXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvYXR0YWNoSW50ZXJuYWxzfVxuXHQgKiBAc2VlIFtDdXN0b20gRWxlbWVudHMgRmFjZSBFeGFtcGxlXXtAbGluayBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jdXN0b20tZWxlbWVudHMuaHRtbCNjdXN0b20tZWxlbWVudHMtZmFjZS1leGFtcGxlfVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0c3RhdGljIGZvcm1Bc3NvY2lhdGVkID0gdHJ1ZTtcblxuXHQvKipcblx0ICogQGluaGVyaXRkb2Ncblx0ICoqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE11c3QgYmUgb3ZlcnJpZGRlbiBieSBhIGRlcml2ZWQgY2xhc3MgYW5kIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wuXG5cdCAqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpLCB3aGljaCBpcyBhIHBhcnQgb2YgdGhlIHdlYiBzdGFuZGFyZCBmb3IgY3VzdG9tIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIHZhbHVlIGdldHRlciBtdXN0IGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBkZXJpdmVkIGNsYXNzXG5cdCAqL1xuXHRnZXQgdmFsdWUoKSB7XG5cdFx0dGhyb3cgRXJyb3IoXCJ0aGUgdmFsdWUgZ2V0dGVyIG11c3QgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGRlcml2ZWQgY2xhc3NcIik7XG5cdH1cblxuXHQvKipcblx0ICogTXVzdCBiZSBvdmVycmlkZGVuIGJ5IGEgZGVyaXZlZCBjbGFzcyBhbmQgc2V0IHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbC5cblx0ICpcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgQVBJXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscyksIHdoaWNoIGlzIGEgcGFydCBvZiB0aGUgd2ViIHN0YW5kYXJkIGZvciBjdXN0b20gZWxlbWVudHMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBzZXR0ZXIgbXVzdCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgZGVyaXZlZCBjbGFzc1xuXHQgKi9cblx0c2V0IHZhbHVlKHZhbHVlKSB7XG5cdFx0dGhyb3cgRXJyb3IoXCJ0aGUgdmFsdWUgc2V0dGVyIG11c3QgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGRlcml2ZWQgY2xhc3NcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7Tm9kZUxpc3R9XG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL2xhYmVsc31cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqL1xuXHRnZXQgbGFiZWxzKCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy5sYWJlbHM7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfG51bGx9XG5cdCAqL1xuXHRnZXQgbmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldCB0eXBlKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmdldFRhZygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEByZXR1cm4ge1ZhbGlkaXR5U3RhdGV9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKiBAc2VlIFtWYWxpZGl0eVN0YXRlXXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVmFsaWRpdHlTdGF0ZX1cblx0ICogQHNlZSBbdmFsaWRpdHlde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS92YWxpZGl0eX1cblx0ICovXG5cdGdldCB2YWxpZGl0eSgpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8udmFsaWRpdHk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3ZhbGlkYXRpb25NZXNzYWdlXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0Z2V0IHZhbGlkYXRpb25NZXNzYWdlKCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy52YWxpZGF0aW9uTWVzc2FnZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3dpbGxWYWxpZGF0ZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCB3aWxsVmFsaWRhdGUoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LndpbGxWYWxpZGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3N0YXRlc1xuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCBzdGF0ZXMoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LnN0YXRlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtIVE1MRm9udEVsZW1lbnR8bnVsbH1cblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy9mb3JtXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0Z2V0IGZvcm0oKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LmZvcm07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogYGBgXG5cdCAqIC8vIFVzZSB0aGUgY29udHJvbCdzIG5hbWUgYXMgdGhlIGJhc2UgbmFtZSBmb3Igc3VibWl0dGVkIGRhdGFcblx0ICogY29uc3QgbiA9IHRoaXMuZ2V0QXR0cmlidXRlKCduYW1lJyk7XG5cdCAqIGNvbnN0IGVudHJpZXMgPSBuZXcgRm9ybURhdGEoKTtcblx0ICogZW50cmllcy5hcHBlbmQobiArICctZmlyc3QtbmFtZScsIHRoaXMuZmlyc3ROYW1lXyk7XG5cdCAqIGVudHJpZXMuYXBwZW5kKG4gKyAnLWxhc3QtbmFtZScsIHRoaXMubGFzdE5hbWVfKTtcblx0ICogdGhpcy5zZXRGb3JtVmFsdWUoZW50cmllcyk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge0ZpbGV8c3RyaW5nfEZvcm1EYXRhfSB2YWx1ZVxuXHQgKiBAcGFyYW0ge0ZpbGV8c3RyaW5nfEZvcm1EYXRhfSBzdGF0ZVxuXHQgKiBAcmV0dXJuIHt1bmRlZmluZWR9XG5cdCAqIEB0aHJvd3Mge0RPTUV4Y2VwdGlvbn0gTm90U3VwcG9ydGVkRXJyb3Jcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvc2V0Rm9ybVZhbHVlXG5cdCAqL1xuXHRzZXRGb3JtVmFsdWUodmFsdWUsIHN0YXRlKSB7XG5cdFx0Z2V0SW50ZXJuYWwuY2FsbCh0aGlzKS5zZXRGb3JtVmFsdWUodmFsdWUsIHN0YXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gZmxhZ3Ncblx0ICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBtZXNzYWdlXG5cdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGFuY2hvclxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3NldFZhbGlkaXR5XG5cdCAqIEByZXR1cm4ge3VuZGVmaW5lZH1cblx0ICogQHRocm93cyB7RE9NRXhjZXB0aW9ufSBOb3RTdXBwb3J0ZWRFcnJvclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdHNldFZhbGlkaXR5KGZsYWdzLCBtZXNzYWdlLCBhbmNob3IpIHtcblx0XHRnZXRJbnRlcm5hbC5jYWxsKHRoaXMpLnNldFZhbGlkaXR5KGZsYWdzLCBtZXNzYWdlLCBhbmNob3IpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvY2hlY2tWYWxpZGl0eVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAdGhyb3dzIHtET01FeGNlcHRpb259IE5vdFN1cHBvcnRlZEVycm9yXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0Y2hlY2tWYWxpZGl0eSgpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8uY2hlY2tWYWxpZGl0eSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvcmVwb3J0VmFsaWRpdHlcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqIEB0aHJvd3Mge0RPTUV4Y2VwdGlvbn0gTm90U3VwcG9ydGVkRXJyb3Jcblx0ICovXG5cdHJlcG9ydFZhbGlkaXR5KCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy5yZXBvcnRWYWxpZGl0eSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGBmb3JtYCBhdHRyaWJ1dGUgb2YgdGhlIGN1c3RvbSBjb250cm9sIHRvIHRoZSBgaWRgIG9mIHRoZSBwYXNzZWQgZm9ybSBlbGVtZW50LlxuXHQgKiBJZiBubyBmb3JtIGVsZW1lbnQgaXMgcGFzc2VkLCByZW1vdmVzIHRoZSBgZm9ybWAgYXR0cmlidXRlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxGb3JtRWxlbWVudH0gZm9ybSAtIFRoZSBmb3JtIGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGNvbnRyb2xcblx0ICovXG5cdGZvcm1Bc3NvY2lhdGVkQ2FsbGJhY2soZm9ybSkge1xuXHRcdGlmIChmb3JtKSB7XG5cdFx0XHRpZiAoZm9ybS5pZCkge1xuXHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShcImZvcm1cIiwgZm9ybS5pZCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiZm9ybVwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBvciByZW1vdmVzIHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZSBvZiB0aGUgY3VzdG9tIGNvbnRyb2wgYmFzZWQgb24gdGhlIHBhc3NlZCB2YWx1ZS5cblx0ICpcblx0ICogQHBhcmFtIHtib29sZWFufSBkaXNhYmxlZCAtIFdoZXRoZXIgb3Igbm90IHRoZSBjb250cm9sIHNob3VsZCBiZSBkaXNhYmxlZFxuXHQgKi9cblx0Zm9ybURpc2FibGVkQ2FsbGJhY2soZGlzYWJsZWQpIHtcblx0XHRpZiAoZGlzYWJsZWQpIHtcblx0XHRcdGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSkge1xuXHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIFwiXCIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1vZGVcblx0ICovXG5cdGZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhzdGF0ZSwgbW9kZSkge31cblxuXHQvKipcblx0ICpcblx0ICovXG5cdGZvcm1SZXNldENhbGxiYWNrKCkge1xuXHRcdHRoaXMudmFsdWUgPSBcIlwiO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuICogQHRoaXMgQ3VzdG9tQ29udHJvbFxuICovXG5mdW5jdGlvbiBnZXRJbnRlcm5hbCgpIHtcblx0aWYgKCEoYXR0YWNoZWRJbnRlcm5hbFN5bWJvbCBpbiB0aGlzKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFwiRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVwiLFxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gdGhpc1thdHRhY2hlZEludGVybmFsU3ltYm9sXTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICogQHRoaXMgQ3VzdG9tQ29udHJvbFxuICovXG5mdW5jdGlvbiBpbml0T2JzZXJ2ZXIoKSB7XG5cdC8vIHZhbHVlXG5cdHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW1widmFsdWVcIl0gPSAoKSA9PiB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJ2YWx1ZVwiLCB0aGlzLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpKTtcblx0fTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBCdXR0b25TdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBCdXR0b25TdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0QnV0dG9uU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBidXR0b24geyBcbltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnksYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5LC5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnksLm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9YnV0dG9uOmFjdGl2ZSxidXR0b246aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31idXR0b246YWN0aXZle3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfS5tb25zdGVyLWJ1dHRvbi1iYXIsLm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2FsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOnN0cmV0Y2g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5tb25zdGVyLWJ1dHRvbi1ncm91cHtib3gtc2l6aW5nOmJvcmRlci1ib3g7Z2FwOjA7bWFyZ2luOjFyZW0gMH0ubW9uc3Rlci1idXR0b24tZ3JvdXA+Om5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLXJpZ2h0OmNhbGModmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKi0xKX0ubW9uc3Rlci1idXR0b24tZ3JvdXAgOmhvdmVye2JveC1zaGFkb3c6bm9uZX1idXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmxpZ2h0KXtidXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX19Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UmFsZXdheTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBRko0QUJJQUFBQUF0M0FBQUZJUUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR29FOEcrNDZISVU4Qm1BL1UxUkJWRVFBaFFnSWdRb0pueFFSQ0FxQnVneUJtbkFMaENJQUFUWUNKQU9JUUFRZ0JZVVVCeUFNZ3h3YmZhUVhhSmVmbU56MFpvbDN2NjBjUGVaTXBHNEhKU2prNXFJSU5nNkNHTWdsWmYvL24zRjBqT0dHRFJBMXJYZUluY0pJVWtOSEduNjlxTVJEVThaYWpqczlVYnNtdG5xbkUzdjN2cWlRbWZSUXBMa0tXNlFad2FsNnM1SVVpSk5VU1VHL093b0RZNkI2NzVPalNqa0RTU011MnBlZHB1OXZKSUxVbEpkNzA3RCtlTEhwallESTRlMXVEbkxqSEh2eHBEWEdNeWR1TExuMXF0MEZDUU95RnNKWkUxK2tKcTNUK0llN0JKRklOT0FOYmk5dlRVemhJN1c0R21VTDBsV2pUL0ZRUWkvbSsreHVQUDAyb21SSGU1cG40RGdmTlpmbitSOXo5Nzl0bUVlTmFxMVJ4UnFIVGpUUE5BMkpGRWdySGRvL250L1cvNXpiZ0dDeGlhNkVrVmlBMkZoWUdJdFJtRTFadlZVdnF0U3RiN012cmQzVzcrdDIrMFhkb1RuenpqWWJwN21TSExBQ2toTVdnQ1RMNnMwV3YwQVVvaEpmRXFFM29wUGQ1OGlrSm5LbG8rM3VhZVNIWUo2ZmNJY1hqZCtyS1VFc2FFbFRxbFVsVlJtL04rZS84aVAwTDVBS296TmxKMy85aUJ3c2hNNnY1SklVSnlrZ1QzZmRyT21xNkxjcytaK3EvWHNBWEZ4RUVpUUlVYUtvc0ZuN2N0VCs3QkJTNWRxRG9sSlh1bmJsN3J0dHpEL3YzODRMZnRKYWdGRkFMWVBFNUE3Z25NclpCaHQ0bFhxc2JaS21iZHEwVHRPbXBtZ05pdWdNMlBZQmM3M01yanE3R0xzb1hIY1RwdDl1UHZGRHo4ZU4zZytzeHJQUUF3NkRURk5wL09aSTlpaW5OaXRaaFJtcFFPQ2tkb0JkQU5qVldsYXZNaXR3RE5KWC9wWUlBa1Z3bk9QL3ZXNXh6b013N1NBRkFLVStaei9rblAvWjlqK09kZnJMOEtlMnZkS2JtcGh1eEpTdUw4RVVBZ2dISWlCSFArNDQ0RUR6djFQVFEzWWtPY09TbFRIbWo2VXNkZm8yTCsvanBZZTdJSFdjUVVnY2drcExGUjFZVFc4Q0dLUVg5YjhHRkFBQUg5dG80UkhRNkdMdkZScmk0RGl3VHpBQURETUtEUHIvZlozVi9xZGdQbWtHektURW1XRVhiN1EzdHRnVFlxbzJuUDYvKzk3WGYrRi85SkhBVnNJSWNBQ0Jad1J5a0dUN2dDUjhWb2hKY1VPT1NEamlTYkFwaE1vem0ySlJwdEJ0VVc2OVhiTkZHM0lWeTJLTG9rNDgvTGZzbTUyN0lhcUJMTXVCYk9GSXdlRlVkMDF2ZUwrWTh4V2h0emNxVG0yQ0lUYzVlTEp3U0k0ZllsTFlGSVZIQXMvL1Q1M040L1l4MWhLR1UrSFNxRXJkcFBQbnM2ZnFxV0pzTmJaYUNsUXRqbE9MVU1zaGNkb0E1VFFzczRKTGM5MFN4Q09NTVVLNEtQOU5zaHB6cFg0dnd4S0NoQ0FTUkVSRS9MS3NXUmxKd05LQWNUblhBaEV5M3IxS0hjWmEvWWRYNTg0MjAvaWFYbXRHaG9DQWlJaUFSMjN2L1A5K0tUQUNBTjVoZGtDM3hVQzRFTHNnZ3ZrUjJrckVqWVNFdjBCS1NtSENoSXZZT0NBSmtLUWd5WU1NMlFvVU16Q28xNkJKODVxQVdDQ2RIZWszQUIwT0RMMUxxMFBnVGUzaFN3MmZoaTRYaFB1ZXVRV0VINnh0SUVRQWJHMk5tNW9WNTRRRlAreUtnTzJENFQ1dC93ejJYVzkyL3JwcXBMVFNJUDhxVjl2THZPZHMwTkxXeVg1MUs2b2ZidlBaRTFwYWY3dzMxOEM5WnRocTdmMzJiZnVMNjRWWkh3NTE0WXNtNWxnZk5iZkc3Vzlsc1VBNEVHejcyM3Z4d0d6cDRmUlIrbVA4THM1QjdLQjJlREpYYzZ4d2xHNjkwMnVnN0F6TEE4TlkyMUIyZEIvUDVxZk9WOHQxb255TDVqWkREZlFJNVJnOEQ5OEZ2SHN2Y2xIdUpzcmR2c0pycGMvVHIvZ3UvRWZaSnpYVXpwV2FEajdNNytVUDgvOEVrQUFWYUFTL0NSK1hzL0pONFlhSWNPMXhIWmNVYU1NYmtscnBLeTdOZlFKS1FjVVJhZ29HbUNXK0hBNkVOdmJnMzNzbDJwSVlSbUU5YklIYjBtQTZrazZsTjVHZHlNTjVFYm1RaHhIS2x3TWdUNThjZ3c3cGRVUno3bmZNY1FmY1UzdkljelZrZHJoWDhYSHE0MDEydEZPZDdrVC9hN3A3bTgzV0E3MUY3YU85TStkanZkZDZqN2Z4bStEMVB1M3ozdWlydm11eXphNTN0cnY5M2xUYjgyUlQyS2FGVlVLTU5QMzZCdlFNQ28wR3NFZGtMOHMrekxnMUV4Yk0wTmdDV0F4Z3pmODJERzFLWE1mYzRyak5jUWZIS3hTQ3VSdUJJNUFvZERERGtHZFY4Q25WVkVtRU1haW40U2EwQVhUSTBSQk5wT1lBTFZxMWFWOXZ4SmlVekhLV0NpczZtcDBCdWt4MDY5R3I3NHNuVk5ic29DbWtWTW9wNStwREdhV3oyc0xEcjJpTnQrb1pPMGIzNllTSWpXY3h2bmxOMHgwVmhsWW9XNFVSalhYS3lMRzNZM3FvTGRFYXpIQUVFb1Z1TWwzRERlRVJWcEcvamVURVIwQ1VaRVUxbW90cUZvaXdKRktVYURGaWFjU2xCSnJFalNRS0ovQ1NGU21TS2sxNjFRbGtkS2V5U1hZenNkWEtpNkk5aWtOSk10Q1VLbE91UXFVcTFWSFQxenE2K2x6ZlFOQUlhNUpwUm92V2FFUDdaeHVObVRqTUxCWXVxM1hVVGdOZFJEZDZVcTlBMzNjYnhBenhERE9OMEl4YU5WYXhkLy9zL2FqeEFFNkpuUGJGR1prdUMzdWFOVThFc0RTTFpWbXhPajFQZDhIUXhYU3BlZGtYYXdiVzZ3Wm84KzZEcml1UUZGdzVJcHZuSmg2L1pnRkpLOTMwYUVNMlhKM3lKQjBESG9waGJxZzB1cmt2TUlnWWx0YkdSUGNka2Q3VmovTlY0cGJBYmErL0U0QmpDZzlwNVplcmkvcGRNMENHLzd0WFpOeFZFKzZiWWF2UW42dW1Xd3kzRlhmNmdnK1huQXRIRGdqa1BOaVVicXBvd3ZEVXZiUmxjajVYWkhZelY4Smk0TmwxdmpzT2hyTWF4T0h4ZUR3ZWp6L1ZJSEpYbjZIMHdoZzZxRk9FVXFRbzBXTEUwb2hMQ1RLSjB5UTVMVTl5UlFwU3BVbGZabkFTQmtXcGxDbFhvVktWNnFpYlRCdE1tUUtZWVdIVlVVZnRHSXQ2Mmxkbk1IM0VwaVUwcVZRcUhiQ0x4T1UrRTQvMVhMZkJFaHpLaGdVY2dVU2hmeHdtRHo5RzVFUkFBSEw3RkhSS1F5cm53dXhRZjVyaEhCRUJSSW9TTFVZc3pVYmM0cnRNZHBsMjZGZ2Q1NXRnUUc4eC9mQVoySnpJdkdibWxyY1hBbTN3WEthN0VsZlBjUzJ0eGZxK2VnZmlIR29ETXh5QlJLSHZ5M1NKMzBRNlY4KzZtZGZac2FGVjNlT1VLc1dNeW5raHlMMXU0VkkwTDFTSkxJeFh5WXpwTHlOcWlXejBYVHBrYVR5bjFaRHRpOTBtWTAydjB0VXF0elNDbCtxcks3ckl1djF2OVJEMHNneHFHYkpvR0dmRWtsRTFZenIyOE8xbDJLZXdYOU40QURhTjFiN0wwSWFSVFhPdXk5eWl1ODJwT3dIUUJDK3BsZENyT21LME1nL3IxdlJZRW0zREJFY2dVZWdtVXgwM0c0K3dpdFFnT2ZFUkVDVlpVWTNtNHRtRUl2d1VLVXEwR0xFMDRsSUNUdUkweVRxdEZjbEVDbEtsU2E4NldFWjNKSnZzRldpN0l4S0pPQndPaDhQaGNFVHJSTjN0RHBsTUpwTmhSSWFpcUFpR1lSZ21jYmtzeTROb3ovcm9mUUw3S2NhbE5EMEZPVzNSR1p1T0JSMnhtVk14a1Vna0RsMFg3dUppdXRTOGJOR2FFK3YvWlFPd3FlODZHSUllRXNDdW92V1lmQ3EydHZwTU9CTjdNek82OEdXWExodG1nVzJmZmVIcDFNdTdxd1g1TkR3VGtwQ1NjZWZCa3hkdmZpbkFSSVJJVWFMRmlLVVJseElBaVpFMHJWcTY1SW9VU1pVbXZlcVVNcnBzL3oxWldFWjVZQmdHQUFBQUFBQ0EwV1pzZDFDcCtIdytuMi9jT2xrNHJEcFNsMUszSHIzNmpnMUNUdHd6T2NOdUNYWU5naURZaG90SDFvZ09MUlN1eDhuaWw0cjJpWWF2MG5vcnpYdloyblpqWkxmYUtEK1ZSZ0gvZmdObXBrRmJoZ2lHaVVhY0dmWE5tSzQ5RlB2WTl0dmJjVG03NSszZmRhbVc2WVN0d2tkemFDSFpjdnEwQ1M0aVU1Wm1OeExYR0JlL3JRb0hqTVAxL1FFR1ZNWkZKZ2JEREovNVQzZXlCY3ZHUFNxVGltSmNDK1lRVWpxR3YybkM3cTNuQjBET3F2MkczVnZsSWhLSVc4TVJTQlM2eVpUaU5HRlgrUkdDREhzOFBZSWRUamRBVUF5dlFrd1NDcHBoTmQyMG1wdU1qUVhLQlFrV0lqUXBtSlJVS1l4S1hjTERjNmtJZkhhVEthT01TYzRNc1ZSWVEwZXpVNkZMcFZ1UDN0TEh1d3ByWWZ0aGl3aUhGQVdrU3BtV1J0KzZuSjZVMThDdXlKODVqMngwYjBkN045cGlicTBsYjROblUrcE83dEVVTGloZFVPMmhycHRnWVhDc3hCRkEzbFEybm1GYzNGYlJqR0JnQ2Q2QlVIN3FuWEJiYWNqc0s5OVJmSURNQUZrQnNvTytuWmc4UDBCQmdNSUF0UUVhbjlXUUVzOU1BSE5HODU1NHdhK0FybnF2VFRqcEdTN2UvaWxQbWpBUlBtbnN4V2tkQUFSeU9MOXlBaHlteDdTR0tsazdHaDQ4dkR2TmZkZytJVEJacEQ5Z3pnTUlCd3dCazV0bWtFWElxcU1NYUVUZy9IVWUyNm9MVFRwNHc0ZzlVa1o1YmdieEVIdEN5VExZUEhtSlVxM3VKcHF6dlNOY3VtYkJkWFlRc2t1MUM5Mk44alR2REZFVTBydjgxN2dtcXNHalBmUnVOanZlclREbUhDRTRxK3Fiek9qdUlJdlJhRGh6WjEvVkpVcGhoaU9RS0hRd3NaNVRqZ3VBQjhDdUtyK1lJTUtld0lvTU81eHg5ZTRBRUJURFNZcG0yT1R5OG9Jb3lZb2FqZWpVUWI4SndEL1hCNWlTc3dVaWdoQXNSR2hTMENnekp6WE1DVFUxWEVaSGFUQVhUQ1FTaWNYYlk0VkNvUmdMRXhzdGxkQ3R4WjFhVW5sdXRHaHRPUXQxOC9SVWRWcGtEQnZiUzRuRW9ORm9OQnFORmlkWG4wV0pMSkNyVThDVWJxcU1oWkdwbStGOEViQklVYUxGaUtVUmx4S0VFaVZWTFZOeVJncFNwVW12dWdBWmhBR2x5cFNyVUtsS3RicG1BNndyUUxjZXZmcWFFN0RUV3M2WUhtMEUyZGNsaVdXc1dFM25tUzdHNWI2dUdWblBuTnV5eVdiSHd4RGpwV2s2TStqMjBlWU1MUS8wM1ZNbUttNFpuZ2xKU01tNDgrREppemUvS3JkQ2tWTWxLc3lJbW1lWmYwR1F5d0pCRUZ4Qy9yZ2dDSUlnQ0lJejkwYkRFd01UajhmakFVQXhkUzZWc0RjczFnOHdmWUNYck5kOThTSDhnYWprNXZ1VVBxZzRYRFA5Sm03b0dXdkdYeFNkRUxMZnJzRVNFc21XWFRjTTNjTHRIRlNHYlNIQkFqY0NpVUlYSnFIbk1sT0xSQkxhc25VSzJTdXgxenFuTUIvWk1HT3gvelB1OG9oREFEQUFPQUFDQUFtQUFrQURZSGdsQ2tDdUxWQWlTSUtGQ1Awa2hXTktQRlV3YmR5TCtzREJ5ZWdrYUoyV0VNdFdyRTYvNHZwVzdHNmU0bUR3MEJmeFpoRnQ5R3ZmaFBFQW15ZDRjTXRVcXNQbDRheTdHdWFrNXQwTjUyT093SmFCZ1NOSHNrMk5oN3FFV1pZVnE4ZStrc3hqajNFS1NYZzhMTmlsUXFGUXpFMWZ2NXR2cFFRRnRGSW15THRpdlRlV2tRQ2s1WlJlMlFpSjJackxZRFY4Nk1CWVdYNXhBUHVuazF5bnRaMng2YWJOcmlYQXNoV3JjZmtVNjN5L2ovbStnbnpOOEkzWXR4emZDZU9pQVBpN1loMXdCQktGenM3MldybGlmV2IzbitzT21rU2l6WEhUWHBtdkFuT2dlYSs3UzhGMUVIUDhuVTRJbkZZNFE1bVdwM0JBTGxlc2E3Qno0RnVPYkU0RVhSbml5azhodENPaWs4dmxjc1dZSUtyNC9jSE0zWFhJY2N5T0RzQlhIOVIzTklCalVzZDFmaWRqMGlpbkg1cmlaZlVPRFRpRlF1bHplYXg3K2pIWlZ5eGYzOFUzeExkcitVN3U0M0g1OUtlZ0s5NUp2d3Z5cW4zSWd4THlVRzJZNFFna0N2MUJURCtJdkNNUE1nMGxWWVJCblNJUWthSkVpeEZMSXk0bENDVDJobTBzRUFnRUpURHJxYjRnSjJKWW96U1VLVmVoVXBYcWJOclorWmhlamIrNXJIckd6Y2NMUWhKU011NDhlUExpemEvS3pRbk1DRUt3RUtGSllZR3lOeUsxbHRKVS9KNldtRnhVcUxzSW5YU3MzNHM0QUpuVE5QOUpWODFaVzA4YndveHdqTW9HZysxZ1BQeHdBTWVaa0JFRStWc3Vwc3hvOWNXUzVpdm5hU1VwRkpRMVRFYnRleUtqTUFMbFNRaDZSSzNnQ0NRSzNlUVU0amJFQzd1cS9BeUNESHVDQlFUc2NNYlZ1d01VQkJURFE5eVFGTTJ3eVJueUVTeEtzcUpHVTNSaUVEUFhMOURaNUY0SXBBdVNZQ0ZDazhJR1pWTUZDZE9rTHVFMUlLVkZsR2d4WW1uRU5lTkJDVlNKa25KRWorU01GRW1WSnIzcW1ES0l6R2xrU2JiZDlITGsxZngrM2UrVkNwbUtvaGdseVVCVnFreTVDcFdxVktjYVVHM1VsZnBva01iYXhOQXNMVnExYVU5R0lsT2Z2SmxNcHBqSlpESmJSanRhTldrL3J6V29NSUlhTldlc2F1dDAzeU1PMlB4SUk2TUJFOTFxZm9EeXhDU3dnQ09RS0hTVDZRVnVEaDVoRlhscHRyZ01qeUJLc3FJYUwxN0djZGtBNThBOGdDWS8zMlBMYndrbkNRQkFObXRDdzZOb0JyVklxemJ0T1VzV1U0MDVsQ3daMXREeDVwMW83VEVkSkJnU0dMNzc3QkVqbzk0YW85b2p0SzlidjUvaEFNOFJhNDZTamdtZGVMek5ETWhpVUhudTdRbUREQlorSVVGaVRjSm9IY2xJa1NwTittWkdjVGNINUljQnBjcVVSMFdvVktVNjZxWjN1c2VnRjNtbitiRmxyaXE5Qm1tblY3UGI3RzBSdENhc093S1FaRWdoNDg2REp5L2UvSjZKcnoycnZ6MTE4UGs4UHAvUDV5LzlOUEppcjlnSnd5bEtyVXk1Q3BXcVZFZmRWRk50aHJXZ1ZadjJaSVNZZXJlQm9KZEhLZWFlZzBKN1VCZXFSOFNPMWFuM3BGQU1LTHdJdFZTSisrRm1uaUhFc0ZFUVcrcGVrb001SHFmNTBseEJMTHY5ekNNQVpUUFExN245WDVrSEZYN2M2UTJKdmIrS1NJc1NMVVlzamJobXZKRUVXeExISkRYTVNLNUlrVlJwMHF1T0lLT0x6R2xrU2JiZDlITGt5VmVnTUJXNVVLd2tHV3dwVmFaY2hVcFZxcU9tajlwNXFsTlQzLy8xeHNpQVJDS1JTQUJBQlFEQWdFQWdFRjRrY0hQQTR5L2YybTdZR281QW90Q1ZTU0lhVGVWR0ZBQWx4MVJJWlJ2R2M1ajBKSWVvY3h6enBLdGNheWN4STFoU3lWKzYxL0dDd3V6QU1mUU13NkxUS2Q4b3NGQWNyTlZEUEllRnM2TEhGeGxOeXRpZURqYjhHT1FRYmhTSXRqMDJnSWc4T1ZiVWZnRi9HdGthQ3NNTVJ5QlI2RDU1bWNQakxiWWtJOEowd0p3WGYvTTFubzlkalRWZFdocGlENE1qa0NqMEdZWTZrWTFONVE0RUtnVWhXSWpRcE5DamJLb1NDTk9pWG9aYlZGOS96c0xkR1lHZ1ZiTXp3Snd6OCttcVUyc2pZMUJyY2psM2ZHL3NmejZxN29nMlkzNHZmcGRVaGUvQ1oySEg4eUFBL3hROEQzbXlBSUROQVZzQ0FKYlpueGkyY0g1czJjUkp3VmFPbTJXV3N0UEdaeFlaQTFLSVI3bXQzQXpBbXRrRlVJNWlsRGNBbTJRd29qRlhCNnIzSXNCeVZxNWwrdE5hYmN0ckYrUXJBUStsa2lVV3ppSEdLV2M1dTFGVWRNS01obnhpeG5BVTRsa2FBbm8vbmh1U2NFbkhyUTZRRWRvUjJGSVE0R0ZuWUhrZkJnSlR3Tmw0MnJRSDdkVjZJQkt4NEdESVBUU1BBdFlIY3VhL1V6ZVAxZXBaSk5hdE9BU3FGRVFrWUNXU2pLb21jdko0US9sWW1SNmJXaUVXV1ZJRkFOYUlUT1Z3MlpWSHpyNU16Qy8waS9EMWt3RVdWRC96VDliNkRHNjMyaUs0VXFDN1RQMlVOYm5rRVk4NjRYWWlLbFcrQlMzRlVLeEhEUVlvKzhCOXl6MXc0aDA3QmE0UWtrekwwTEdKR0lyclorY05YdUIzUHc2Y2VkcEFNVTZHelJRcURXN250QitjV2lzRnlvM1dDbVFqTDBNbVhvQnFOV1JGSVpJN2dEWGh0U2N0OExwQmZrSHNSUTZYcFZmSVJ2WkJVOHA4NUY0aEg4RUtueG1FWW11K0s2Y1lZM2dRZTErL1R6SkFJUkYxY0t2Tm1uMlEwTThhT1dzWGpUOWp2QkNyNTIxeHF0V1ZJNmFwTHBlaEtjeFp1VzlCV0xKM1FHcWY5SlRpdXZ2VTB3ZGdody84SUJSSVgxVnVOUXlzQnFTdFZOUFhaRHRMK05pdmN3aTFQZ0QvNU8wb3ltMkorNzhvbjByeGdBOU9DbGEwZ04wSkVQSFkvWVA0bmhJYXdiRUoySGxVblI5RGJ6ZldNUEF2eGtydEExNHg2anJBbVlVY2dSZlJsWm5uWXhzMnkrb3dMRHdrUzJWazNkZmpBQVVWSUpld0QwNnR6K0F1dzZwSXF4VGw0ZG1qb0dsWVFYRE1iMzFGSlBzKzY3ajlSTmdzSFlnd3dPY1l0dWZLNlZoQ0xNdWM0TkZUYnY5cEVRakZOak5yMExXQUpCM1hHSG00eDduQlJmWG1IUWhRMGJ6cW1PdFZUbnllUzZ4MUhiQy9hcmovWGUvN3FNT2w3TTBlVW5EUGdoeWlzRjhxSW9GYmhmRWdxeUQ0bzNvMks1UkxyTUpZQ2FDNWdySHd1cEROc1ZvWEZJMys5V1lQYTFsd3ZPcDkxZnZhbkdob21KaXA5N3VwTkhtT0greWIxK2hMSXBkZHIyMVJpQTEzSmliNzlrNnBUQjNkRkFvNzE0cFExeVJaYlRYTXlkQTdtUUU5UkZHaEwvT3hySGpkUm5vMFhkZjl5RWUwblhGZk9lcnpZK0RPM2ZpQldCRk1BbXFGYk9lZ2tBcVhUVm81ZlM2NnlPSVZsTENTZGNwNjh1ZTR5SmVsaFVQdFU2Vm0yam5OQVBxd1dhTm5udjF3N0pQNnhRWmF3U0lQbE9GTUVVR3V6UENCYjJkSlV5Z1k2UTl3cjZKVWpKcjZOWmNiRVl3TC9jeFpmZWM4MkxPc01LNDl4WDYyOFA4TnEzVERFY0lBUFp3d2hMdzU4aFBLazVKU29EQkpnaVRMRVN0UEE1MG03U3FZbU5TeDZGTnYwaVNqVTA0em1UYk5ZczRDcXpmSmZsbUMvWVpKZ05Cd0RBYUJpOGVCSFQ1SEFrNElRa0t1UkVSMmNlSENqU3RYWWhKZU1ONjhFZno0d2Zqekp4RWdnSlNjbkV5Z1VBd2xKWGRoMUp5RUMrY2hnZ1lwVGh4S3ZIaDJFaVJ5bGlTSnAyVHBLRG82VzJUSXNGV21URjZ5NUVEeTVFTUtGUEJXcUJCZmtSSUNCbFZvMWFwUmF0U3lVNmZPVnZYcStXalF3RmVUSm42YXRlTXdNZkZuMGNGZXAwNEJ1blRab2xzM3BFY1B2bDY5a0Q1OStDWk4ydWFVVTRST080MXIyalN1T2ZOMldyQkE2RTB5Wk1rTTRidzVod3NXbkM1YWNyaGt4ZW15Tlpzck50eXUydks0WnNkdHpaN0hPc3dHRXd1aGtSaU03VGc0RUM0ZW5CMW5pSkFRYm91ZEVCR1JIVnlJSVJMZWNENThJWDc4NFB6NVF3SUUyRWxPVHFRUlhIQVExNlU0aEM3Z2dDRUFnMFlBQndvS0RydUVsNitHcWJGTlBMV0dBeERBMisybVVTTk9pQmc3dDBTa1MzMW94ZU1ranJGbjJJSWpKempNU1VoT3Vra29FSlNpanlHZ3gySWEvOVpjMDNiK244K2dxa2dTMjhzNzU2Y2pVcDN6d1RyK1JQZTZTZXJsVWRUNWFldWdlL0FIZ0J6OUY0aW53RThxK0g0T3ZJVzM5RmJlV3J5L0JxTXZ2L0tTdXBpOUhrclZlZkc1WjRJYXZmanlXeStwNHNWWHloZVZUNW54SXEvemJ2YmpvcVhYMVplMGhqMEFZRk1RWnMyQmtBZ0ZJR0Z3eEhZTkI5WGRhbXdyM3M3L0NJZmdZWmlmaFQ5Z2ExMHl3dHpkWlkvaGNuZVRZYS9raXo4S0NCb3JoRlo0ZzFsWEJHR1dLQTc1MkVsSWQ5YUxLNFNGTmRWMzI5Ykc3UklJS1U0R0V2aGpyOExVMXdqQTIzczlCbWdiR2pROTdvVUt3cWlPdnlQWkVSSUNLSXpBNldUcFdRd1Y2b0psZTNWVGxqNVR5UEtPam00TmJ2T2cvVDlHVmZ4TkE5aEZoUURTdy9mUmpwQ0YyVzhPQTY4aUN5VCtmMkgvREc4QzZlK20xeC9JSTg3OU5BMzVyd0FBNjhRV0FZZ2xUVEFzWUFDRXFlTis2bXkzd1lvQTRGK2pOb1djTlM4T2lhalFRUDd5TUZhd0lqUVJnU1VNTEkwUTduMVJBWDZSRjhZS0lJSlVvWjN5Z0MrUTJRb3NDa3RPNWx1TUhHVWFFM2VMZThWajBocXBXQXBJRWFsT2FwRzZyZFcrN3FSQUZjQ2VZaWtBNEJQVHNMaC93VVdmT2J4OVI2VThxZkE0U0tuNWc3WUNYQVNRQ1FCWU4za0EvLzFOMWYvazZTLzBZLzFvQnI3NEdYeHgrMk5mMHUrLzdndnFDL0x6ejBFZjlPUkJxam4xUGdMb1pROGIrMVowYzhnTi9sLzJEV2ZObWZLcFgxMDM3ejJMeG4zbHRCWFRiRTVaOElQdmZHL0dKb1NEeTQ2QU14WTJEZ0VoRVRFSkdTVU1Ub1dncGtjeE1ESjcyNFIzL2VIMThTQ0NTNElreVhReVpNcVNyMENoSXNVTWF0U3AxNkJKTXlNVE00dE9iL25OVzM3eXZ2LzUyT2MrOFlYZi9Uc3UzTExNZVQ5YmRYdDJjTmV2WHZMeWFQakZEVStOZ1JjTnVPQjFyM25ETEJJR1J5TlFHRHhPeWptb1ZJT0xoNitVR0F3QWtvUDh3Sk9PaGhiSkJOVXZocFVOTFpxRFU2SjBLVktseWJPYlhnNnRFaFZLbGFsUzdsdVYyclZvMWNhcVZnZHZuYU1RQ2N1V1hISFY1Y2k0V1VRbVVtVTBNTUFtdGdRc0JTenRGM1JiQkJld0ZJQXc1bDQxaWpjYkJtUXA2eTNBRU50ODJkQWt3anhuejdQNzhWVVVEQi9WbXVBZCt4NTZjUCsrdlh2R1JrZUdoMVlzWDdaMHllakk4T0tiRnkxY01EUTRNSC9lM0RteisvdDZlN3E3T2p2YTIzS3RMZGxNT3BWc2JtcmNnV0EwN1BjZWZlVGhoN3FkZHF2WnVQK3VkRzIxbHNUQVArZno2ZHIxbW9wKzBMSjFURWdnUzZDdXZDNW95QWl1YjAxM1lQTUxiWXpUYk9EQVRYNVlFaVl5Y3BVNUlWY1BmSkRsSitvT3Vkc3ZMT1V5Q0hBMGVwU2hSZDRkdUg0S2dFcE1FT1daR2I1RUZjTWpWSmtCVUJVQlJaa0EyWktOUnNBTjErMTB4Szh0aTVMdnU5Q1FPY1p3eG9idFZKWVNOWVNGSTMvZXp3aUxKZFFFbFZBVnFiRmZWajdHRllLVXdpTDJNOWNTZGdObThMSGNzQUlsdjN0K3BUemlrZ2pTOExobnBSQTR5RHBiTzdCY2VraExJUnR5cnNvM2hPRmJpVTI5RmdtS1k1SjgyeFJkOHF5bHNGV2tFSC9iYW44bG5EdjNaeTVlNERWR2laM09RUkRCRDQ2NFhuV1Rtb0ZEUjUydVhKa3psZnlDUk4wakZVTGVxWlZMTlFFWG1WRWxEb3RaTk9maXpRNFJMYmkwSzNWZlFpdU9LT0VTTUZUdjEzVHZpNkNWeVU3V3hNbUtXM1VidERtbkkxN3lYM0hjbndqZ29mb1U0bWFTVWxMbklQb2Qwdzh5djY2b1dJTWRTaUdQVXYydGdtQTRFZGExMEZybnRRbS9lbHRoZnd1aEFIV0tzK0pzLzN6cXRUeFNmY1pkV3ZNQmtFa28yT1dkNWg4VnhrbDF3UTB0V3FmWHhqbmJYVHdEdzVvbVdaNXFkdkhJRGJLWXh5Zzk3MHBKdnpBejhuMzVPTFJrZlNiZERUcFpnTk05bFFKbTJpVTMvSDBuZ3h2SDI5ZEFlWTJRRFF2eFo0elNocFFiaEFqQm13VmJJN0Y3SXZKN2tpTjFGSkdXTnVBbjB6TUV5UmwwaDJOMTdKQ0tpZ0NQS2Z5OW5ITk90enduSXp3bWd1dlpaL1RNQmNRbEhBZnc1RXhIRHNYR3VGdVNlbzN5Q0puWlJiM1c3VWYzYU5aNzNFWUs3a09TbFZKc3dZWXlKQ3RjR00xR3JqOThjbkhoa0ZtdTdQZE93bjFXelIwaHhUblJVOGFCSm14cUg5d1FJSWMvZlVXQkhqOHFySVNqYk8yaFBXN2xSSWFvREpwS3A2V3JWSGIwb2w1TG5LTHlGajJUSGdteTk2QXBaNi9scTFpTlBZOHZ3REt6NWdzK0UvQ1pJQ1B3Y2FjcWNuUmlyMVJ6UHNuQ2dRVmFnNVVNcktHSjZ5NCt5UFlaSTd5aktUSktTVU40b1VUN0dUZGl4TzBEa2ZjVFVkbWthQnpxUGJpNVNpS2ZKYUpEREtZMVpsMTJ1MVJBT2t3U3A3ekhuNlFrYWlwTkxyNkUwcEhnbUlRME8zeEJuV1N5WTIwY3VIMnpXWXhOUTN3Mm1Gd1A4eGs1Y0tlRHNkVWFrS2xMSE5KRzhzNXh6eWhOdHRFQmlSRE5Rc2NDbDJ2MlpBbjFDaXR4TUVqTE13RzlwMWREdGRxaXdKVE5DZkxTcVJTMEF0VnVxUVBJc1FDUlpJbTh4NjZJTndwVENNSkMydllIck5NV013NVR4SjRWaTRIZ1JSb2tpZ0ZLUFRwbjQ1SllneHFoMGJvcWd1SFA2SWdrUVRLVlBwOUJtQ3R5U09KZDZieUUwbFExZG5rdGxjaUdVbXBRTzl0Qm42QUJSQnZZYmgvb1hhcG5DQzc1R0dJeGw4VytaWk9qb0hVaHU3TkMyNVVKb0xkb3ZDMVZvQWkyRkFYcCtNNE4xRHlBelVVamVTdjV3RzdaYmY5RWNUNmpNYnNKMUJwWS9KdG9sN04wanBRaGdMaGNZZlllVVoyQlhxR1VIODVROFJSdHoyZlFkbnpubGxCMThkQ0RNM0JNMFJWbUxYR1BGVlJqRWRRaExQOURpSnZwTnpvVUF2ZWc5WkFMZklqVFZiNGV0NXZQTTlBVVZDMTFKWUJNeUVwSm9MYXdIVnMzQTBDTkQwY2cyL3huWEpOK0lKVzRBS2YxR1NVYTNWQmN1TXJYbFVZVHVnWm9PelBmV0tSdWM4cVlNbWxPTUt3bDd4MGtLdHN3bGYyWlJzcmoxaGcyeXpxQmFQbEFhTWxrUkM3ekc0V2FIYzhBQnJseTBtRFZnUGhLZzYwS0lHc2xuMUZGUUdvQkhZMVRHdjlLZ0pwM1ZvbzNPQkl1QTQ4NW9yaDBjME5HMkxYNnlTQTlzR2NCYW4yUWhvYmduaUo2RmV0dUtTSFhMcDVlY04xRmkxbzNNZ01tS2R3MElyRmhqODFLaVVMRHZSSkRJNUtTVWxLQUZJS3hWekN1Z1V4WHBHZ1pmQWdQRUU5ME5lekt6cHh2SGJQVFZxMmRPYXE4NDJFTjl1eVR6SzJGWXQrV2RRWkRlNFViZUIxOHN3dmxRVUNpRnJiTCt5QzdXcWx6Wk9VYjJWcFlRWnUxbVBVa1QyWHk3MjZOajBncFVtb0VXSWVyL0ZKa2drZ2JBQUw0RGgvMGxvNUpEQk1DN2tnMER0elBvZ0YwSzdMV0xYUjA2UEVOMG9vSEgxbHVlSmtRRFBJV1U2TVpPNkxhMnNndW5GNTA4QzJsWUdaUGxjeDJYSjF0dVhGYnJlNTFDSVVXU2hiNGZvajZMZ0djbWxnK1VDaVNpeGNIOXJKNlRUSmRBQzI0QXBHYnNhNWhhL05JcitoOUllYVhJQ2ladThDNEpMeldUN2dLWVQ3NjM5K0FBakxscHBkWEFMYm10L3pjZFo4bmZJL3N3WE5iWmR3OW1SMVNPN0lmZ1pLQy80TUN3cEN3NXNEMWo0MHdJdWJkdHBCTmNzVkhtdVVQdmhha3N4TTlGOEJMa3NRMzZNL0JPSkFRdDhUQkJTVWJTb2p3SzMyRVliZVFyenVZR2E5bldGaE9LVGxRQnc5Q0ZqOWpURzRKM05nRHZldUFnMVVPaGI0S0FwOXBIZ2FNSktiMFNsb0w3RG9kSHNManB0WGhrdk9hYW9lMENIakRVNnRrS0NCNDJnWkp6UkRjUG8yeE5lSnJaRHhjWGVWM1YyOEp3azBISmhVMDhMdEdEUU1xS09QM1RHb0FJNlluYkVrUndEUmszTzRraTYxSW5xVDgxMnhLYmlpb0JNR0U1RExwTUtyaU9wb3ZGTHRiSWU5eHFNcS9TVFlzeTBaUUY1eWFaYXZwL2ErSDd1YkRucFNzaUJ3SkZhZ0JNaTd3VldjN1VIcWxtdzNmY0x2dm1uVlJTRllSUUVuZ3huSHZ1eDhRMUNWN0FJQXVBSURkQUgxQStMd2crZ0hnUDRDOVFMZ0JBTmFldk9Ud29xTUhVb05nbVZtRXlESTdMcnhMSERYWEVrN1pBTUk5ek9iR3lDR0RiazZHNVVnblRwUGMzK2paUU1qWUdVeXVOWGcrTS9UaWJJMmNCeGdKd2tiMGJnaTRmWmY1QUJDV1Q3QkRTTThZZVMvSjhubzRJc3hRWWs1MXdaS200NENqdzZwVGZRalhqVUx2OWVqUE9WS0ozUGhTMmlJZnVsQUs2c01MdXpZNU9uL2JIemhaRE4yR2FQaDQ2NlpMVVVaRW1XSjNYUkcrOEErdjVZT09sRklNUkZCNCtMald5dVN1U09lcDNxclBXck5Cb1J2R0RXYmdxY3U5NzE1a1h6MkJFTUZVWlhmaHZMOVVEL091bTY0d3o4MUlrc1NYdlp1SU9xY1lSQ3B0K0RVaWdzdUUzUTdidmc4ejlxRXpmOG1mZUhGbjU1c0pSVXVMWXhRM2ZNSFp1Tzd2aGs4TTA5MVF4TEJaMVNlMmlRTlYwZGpFdUNGVGJueWplYXFOV3REVU9icUplSnNCdW5JUTdQS1dxdkhQUEZ4RVhUTUtSamZBRGMrTTliNzVXaXRLZU4yVFR3UE1iMFBBOXEyRlVVR1NhTGhzbGpEQVVBTU1MZEtZUUhWamN3cGdZS293YVVRQzE2cnJoeEJEUlUvYVpnYkVvVXMrQTEwVHhrc25rU0xqWmF5eVJhK1BoS0tOakJUOExvU3FycUJHaXFHU1JpRjVUQkM3aDUzQ2lvZUY0V0ZNVjF6SzVqRFBvYmpIZ1A1YTlzQkREMWlPODRXY0w5NENvNUVkY0lrSGxOZkp0Zm1tQUV0K0FwMUphdHc3djVMeGJTVTNtZUtDV3MxM2NvZFFVWWxKVnYrOHRtdXJBR29FMW5wTWhaZXhUTG9QTDBrZzdVZXkyTUxFdXZNMHk0NUtsd0dsV3hBaG5IZk5qWmFXTmNNNnJKYk1pbWkwK3N6djlCQnFPdXRmUFZFakhqSWJOZDVwYWFObWJIM0ZMSnZpMXRsT3hOc290ZGlPd1Q5bmVQTzcrZVNHRkZUejBUYWQ5WWRtQS9wSjhxRmE1Z3NmYW9pc3c2MUFudDhPdmorMjQyV0szUlZyK2N5T0NHVFhUWjdacTN5SEpRTFIrcWZ1U2JnUGw0VW9Vbm5GTXFsdUg5QVA4UmlPMWthbHN4ZWVIWG5rdU5JZTkrNjA2emloMXM4T0s4NmVrTXI2cXNCczhydVVxNnhGSDBnVWZWc09ZYW4zV1N0QVJmN0Y1MHY2d2R1S2IwWXYyYnNwMnZDd1NxRmFNQXJySUx2WVYwcXgvVHM2Y0Q5L1Iwdm1iN3ErVWo0UUpESGZMd3FhMUwyWVNhS2U2b2NXWFQ2RWgrVnd1YVJ5SHNwTHRpVU1lZnBKUlVZSXZkT3A1WUYrL01oZ0JCMnBmd0dqa0tjY2Yrd1NJK0JWek9YTEdnMWN4VzREVmY5SE9hYUhpU3MwL1IzZGZTaThoZEZ4WWg3TXdsRi9qeWh3RGFnRi9DZTJ6MGh3d0Y0WDVKYkRzRkp1QXdNME5xdGpzR01EQ1Y2R0sxOWhqVUFEYlJON3lHZGhPaDh1d0hMMzBHenF5bG1jdjdhSWc3UW9selBuTHdyYmpjTnYzNlhLYUZaejRpOFBWSGhlUTNvUXBhcUxKREkzU0RrRVhMSE1DSlRaYVBLeWZRVFVXcjg2cUhjVzZaVGU1b003dmF0TkRYa0ZsY2tVUDZHU1VRaFZXaXRGMlc3MTlmUE9aSGU3ZzhXcjdGbTI0eThoSGtUbVJnVjd2alBSWFBxNGREODBhMGFaZzQzZkJWNXRXdnZJNkFCWU9nZkd1dGk4aS9rcXhRdUxFR29HMW81ZlRtbTZuc1dacmRsdUUyYnIwTGdrZFNoN0YxTVM1cEQwRFpEdzhVaXRXS0ZtdXN4MkgyMXhEL2JtN3h4czhPSDFsaVlKU1Z3NFl1andoeFMzMEJ3MjVCN2FDYkd0Z0haVUxJbTZ1ZWF0eGV5cHJWa3ErbEZuQm1SVkFkMm9VVDVDVjZQTGtYWDRrYUtiZGdUbUZoamVzby9LakM4SW1sZ2JMeXJHSzM4UzdKanF0MUU1YUNNaVhvd2ErVVBneTNiSjU2ZG9ISWd4UFBnYndKcmRXdGxPR0o3TUNOKzA1aTZWN1VtamlqaFNtSS9lb2RYakkyV3hRSGphbWZWT1NQeW5XRHQ1OGJveTh5dkxONHE5M0pocEw1cFdCblJHNmxhYTFwRVY1bS91SUFwUk43UlhuVGpJcm1uQTJzSGtacEdjRzZ5czZaZVdYejZkOG5UVGZ0WmhRT2JhQlhtTFZNVnFaa2dOREZnRGk2WGxUWW05Y1UyV1lqcHpTU0ZBU0J0cXFzU29saVVQS1VmYkFEMStwaWJXWjV5YVl6aS9mbVdzSFJYaWNqLzlOcDBaemZpWnRKMzExMWVkZ2ZBdFg4VyttbXYyNTFkZkV3RkF0cUc4dHoyeUR6TGlEdHZhYmVyVytKcU5iaEN4dFNnck02cTRzbFRKUzQxeGFDcEJHaHBwRHJyaVFRV1Y3TmdkajRGNmhTVWptb0xTQnN0WlRkdmRmaEFZbnJCalVpem0rZ3dWdTh6cWhzV2IzeC9GKzVYRVVEVVRRWFFDeHdkSHh5NXZpNllIbnMyOFVpSmgwbjd4SVdDMzVsMnNHVlFxU0xIZjFDTjdnQ1FLa2VHZ1I4YVRXcVcvQmxmNUtDQVFnVG11TEN4TXpSampMSXNSNFFnM1ZqbzYrYXZYdG1zQ0pvWk1Pa2NiekYxS09IR0Q3Wkd5a2xjV014c2VpRHNTbVV3Q1NSYnhNK09NVllneEtnd3ZSNVpOTUNSNDFPUXVIc3p1UTErYTcrdWYzZ01lUDNHUkdYSE0wR09kYkdoZmY3eklhUkVCK094dlRoMDk4QnMzZi9EQVkzcG9EeXJRVXU2VEVIeVVoNWR0Y2ljK09DaFFGamVGK1JEejR0dnFkRDlGdE9DaUEya2ZJSHZlazJQTFJmdEFPOGR4WXU0ZTBMaXo3V0J5eSt3RHhYNlpHdXJaYWJydXpHeldvTyttQytaRmtuR3NLVHVMek5IQ0pDNUg4Z1V6RnM1M1dyQlZNZ0szSWxPQkZML0JFUVdtOWpUbWNSOFVFazBMSi9RRU1EZmdQSFRaQ3FxV0Yvb0tlZXY0VVI0cUdWVVM1enhCME5meXJRZG5UOHdmZEVhTHRwY2ozSmg0RmEvR1Q2WWM1WnVBaTJEanV3YytJYituT0k3dzZNYXFPK0N2S2EwanphZWY0RHFRb2VVSUFrZGttNXU1blBPN1ptd1R6QUE1VlVmeG91UzJHRkFJTUFoQTFTK2ZZWVZJcFBjWGlGTEZDam1nZU9Fd0FVZERJSHc2MFBncEpORDJPRlJGYndJTUVheGhwS1dXNzJYN2xtdzhPWVdPRncyZFpzbjJkTnY4SnArZkZJNFpobVQ5d1pjWmE5Z1N1QUJUcnU4aHc1azBtZUNqN1NzZTlkS2dnSlBSUmdVc2VVVkhhayt4eDhNUTFGR0RoTXFhdWxtblBMbkF0RFlBQ1M5T1c2SmV4ZTFGKzR3OXZKa3o1VXgrcWdXODVqa3h3enc1d1dBVzVtSFp5ZnpPUmJOTXpDT2M1amRWcGhac1Vwc2UrcEdnUnB4bVo0K1o4OWk5cE8zeHhoZzVSaCsvNGJVQ2pFcGg2ME9QMS9HV1pyV29yaTdhWld1UWkrTFpKd1lwMGJOTWVmWmh3eDQ5OWluNkZKY0FLNERtQUdUSWlGV0p4RFR6d2xIZnpmemF2UVlkNHlZTXlEU1lQQ0xObUpDenVGRmJwbzVFdWlpUVpKbVFsckl6a0V4QkdtS3AyTFRqaWtpUHNLZlB2RjJKZEQ0djFFL3MyZTI2c3hnQ3J1Q0I2TXlaTGJzSVAyVGQ5dW5NN3Jzc3RQMkg2RkJnVWxPQjYwQy96WTRxM1F5MHBybmNBUzdKWk04MTJ5WWRKWkw0NGdJRE51NDYyWVJhVHp5NUhLcTdManhqRk9jYnhhWFpwQjByYlpiVVBUT2IvN3F4a2ZUUE9nWi9kS0tSZ0d6N2JmSXNvUTBEeHYzejk4M0xONFlvdm9hYm1OWjJuak9LSG5aOXNSZFRHakpxeElPWU1pZG5Kd1JaRHBrVDIycHBrZElVTlhGU0JoWEtIR3VCaCtobDMrajViU3IyWE1PN1NCM1ZLYVgyQmpyT01tMTRxK1JzT0dCSHN3WUZOcitrWUx6cUFNMDNuakI5OUdqcWprYUR4TWZPYU5yVzZFOVZNbEJpbFRWeGNXUmlBSmV2L1ArVDRhNE5iWXFFc2tkc1M0YTRyVktMS1FKTkJKUUZiU3JmanRCbU1vRVVLU3ZqZkFsQWxZVGpTMFJoMU5IVXRNV0hXNEZuMzBZVTBJNEk5QVBVOXJ3dHVOK2JlbmxTY3RpRVRSWW00ZzRqN3Q0QUpKR29jZW9rT1JnUU04ejBmSDlOTExhU1FSRThXY0M0RmZrYXNDYlpoWDZrNHNTYkdYTk5MZEl2bVFIT0JHb0dWNHRnTkswczkzeGZBdnJpN2VtTUFoYVVnY0dJeXlmZmVYU3BiSGc5L2Q4bTk1dTgvdCtUdTcvdCs3YTRUeC9zby9lNU5Qd3pzcHZLUnJOVGoxenAvay9iL3pYMm9FLy8vMlNXZStOcXZnbVJkVTBhS2p3Ukl2MTZwRTVGVWVuemIzbzc1QWpnSEVPa0lGOStHWEk5ZkVOWUtIOWNSa1B5cVExR2hQWFMrTExHbm1YMmVHNTlrNVRadXlyRlhNOURtVDdLbDRMbW1SellZTGk1UjJmRGtzS0liZkM1cmt4Z0FEYjZSMnVUZmVvMS9KYUpQNFoydFFidjc1aWJ1Rzl2UWErb00rWGF1aUthSFpzOTFySXlRVytyQm1Jb2d2NFlFemgzMTlmZHQ2ZWdyODY1ZFdWNTY0ckorSlNLK0c3aVUrSWViai9lTHhmSTloRlhPdkV4Y1ZkTkM5NVN4eDBwOUkvYVV6MmFWWXhYdmFxNWE5amltNzJtU2Nic0F6MkxhME9PYnIwdkNROVlIZGhBcExsWGEvV011b3crYy8rcVZ2MER5cU1wWExKbWZFTFg4RWFEYnUxeHYrRVd0SkJ2b29UMGEra1cyT2xtNDJZM0FrUm1EUVlYNlByalpXdjkycEprVUJOaVg2Z28yZExoZThZakVRTzF3eXFjdi9QMmoydWk1SDJQeXl0T2QzSk9BTTd1MUUyMi9GcW5mVVJyZHZiMDRpN29YNE5EcnlmSkxSb3VESTdhbXJ2VnE5dys3YXAwMTRqRkZ4cXhOL2VxVjdyODJhbWFjNzEyNVVDd3VVZFg2K2lsQWlsa3ZzV3VHQWhWcW8yTytWT0srZFdDZlFjWjdTcUMrT3E5L3JyTVBJTXp1TVNhN0tHMkZqTmdpTGNrMy8rbzVWdEROMUZ4RGpScHNpeE0zalp3eXdTa0NzSXJ4QkdsbWV4S091eVhTcXdYMUl3V2pLblVhTlNyeHY3bXpxTnVUbFVVVlpxMDNjbGErdy9MZEJPNlc4NXNVYnRJS0lZVktMNkg3SGhXVXJPcjRDRnFaUER4bSsvV2g1UlBIcVg0TFJOeUlnalBGMGVVbERJVHRIT2VxcmJ1bi9WVGlmVUt3V2lobUlwQW8xNE4vcC9nU3F6ZzdsdWowcjdXS0tONk9DUHhsNFhMQjFCYndLRUd2WXdxeXpVYk83bk5xdnJIbTd0b2ZxQk0wZExuZHF1dmRFTEI4bUI1bjF6UFdPamE1SkFxU0VRclhkQ0gzUERld24yaCt3b0phL1dTd3NZaEs5TWpXc2wwNjdvdDNBRkRzbFhuODdkU2hpUm52dm1hNkJPdjhuUU9tSFVRVFJ3dlhXOS9ENnJRY1MwMlhqMzNEYkkvdnorZlhJYnVTcFZ2VnF2SDFYZk52WHV1bWhnM1ZteStyUWh5alY5eVhuUmEyYjJsTGRhL2pIOGJiYVV0N042YTRQaWxUWmMzbWJsakpib3l6b3Zjb3U4dXovdVBJTkR6ODg0Uk9qNndXMjEwdHlPMG9yRlVvUFhYTlFiazlaSlhHVmtyb0c2Wk15OVhVUExhMHo2clNncWxnWEtsYlZCYnE0MHFjWDkzL3QwUGNadnNrVkpsdE0xT3liaHZLa3l0S09ZTS91VjBzVmdUVWVJQkZXRmcydVVPMERmekY5YldCWHRqRGp2U0lIbFYyODJrbkJsTC9iLzlOanE0d00rTUJndG5FUmVENWx6V1lEUzJHcTB2LzBDYm02UmExM3dINUEvcmt0eWZMZTNZMnM4cTlyeGIvS3VyR0lqbUhIcFEvc2E5RiszRzFqUmxObVlvUXc1WDA4WDJmdnJUUG1LU1pEeGRqTXZVcExKSHBEa2RCYmN4d1JUNkJ4R0NCc1F4MUtydFNUbXNlQUNaQngyd2tWM2pmTFRZMElKNmdraTdLZVFjWHVnTCt1YlFqNVhQYnREb3pCbXpvY3RSYSt6TjJreVF1d1liS1gzbmNvTzBXbGtRc0kvT0NYcmNmYjdQR0hKZnlmNFRQdjhPVmkydHNKeWJZemNiTXJnckJPWEdKUHUvT2htQkVKVWZqZ25pR0M2Sjd3Z0N1R0M4eHlWUkZOa1VuZDVBVnFIM0xIQXk4MXdrMHVSeUpXR2RiOGo3MklDMGxjN05iMnNnZk0yNmVVTzJZZmJ3KzFtS1NtWDBKbFBXWkd3MVVZYjZER2t5WlNsRGVzTnQxYlVYbDBaNW82RWZlNTBBV214c1FkMUJwTU1ZZEE0djlQdURRd0hYaUg5NkNiNXNNZWZTQm9NaFo4U2FNL3EvOUM2YkxDNU5HWTBwS2doWk8vMzJxVDBWVUFZcUhXREdxVmFKaDhUVkg5N04wUm5pa2FwZHlsMm5CSklaVkJxancxQ3JqZ0xhNldBelpuQjNlWUVob3NyTDVBWUlaMmEyY3hybmJML1dSaVVSZmRpMDRNeHMyNlRzRzFPbFl2L1BINGNBaFRvZ0orbWF1RUlsaWUwSUFySkxKTkRtYkhNb0UwcXIvNmlMbkNTajE0ZDhOSDVxYVZXOVFSQXRJb3UweTdOa3R1eEVYT0xVR2M2azIyRDkvVGMycy9qZm5SQWhKSVNoakF1KzZXMjE0RDFRTWZFQmU4bmdJK1FrZWNPbU5ILzcrU21kTVBHZGJpRTB5YXRndjdOdkdyOEtCYkN5SUFsMDJsb2NkRWU2MnV2Y2E3dXMyZGN1eWZLNXlDTDFzdkplZDYyekxyd1M4blI3bmRpaDJSV05CdmhTdDdvcFc0czNLR3Y5SjRJNG44ZlNLQ1B1WHFOQWVhTlJVQ1F2Tm1hVlRCQnVOeGpoTm5jd2l4b01HZFJ6cm04ekd1RDJ6U256WjBZYnVqSldreWxyTS9UWWQ5WWRFb3ltak4zWWJiM3JWcmJ3WEJ6cG9QV0p2QjNVZWM4NzE1KzVzYlhDS1pOcGtDSzQyRGZrYzQyRXdxN1JSWDZmUG8yNW91ZjVpZEdXZXQ4OHAydGtXcUt3aEZnSldITXRSck01WjV5MS82N1QzQ1JSNjFzeFg0elV1Nk1wRkRkbnJJYnVXZ2ZWemFuZjJGdEpLY3NuLzZyTXJTbkthRXphMCtjK0hDcG0rcnovZWNnVFJOKy8vYlZXWXdwM2hhR2MzbTlkTWp0UWh4TisyQ0dJb1NwSmZIc1F3Z1hqdmFSbFAzdEhDQUswK2RPODJwaFFHamVZYzlaOXVPNHVuYXcwVSt1d3BOU09xTFJOYmRYME5EdXNtQThPVlQwbmtEVjlKVkFGNEFGUm5NOHROalRodFNGWlRtOUEybDJCTkthMzVxbjJFeWRJVDJKMExvNzdvVG5Ra3phZC8yc3hFVVNLL3hwQXJicnVsQjFnSmozNWZWR1cyME1XYVZZOVd1Um0zVkl4cmViZjR0cCs1WktPeDVzaFBWTm5KSUV1UDhjVzhZc2NTaDNwYXBKUzlyUjg4UERPTExFR09qY1hFYis1YS8rbFpzbC9oRzlPZ3Z1YnZDZC9jWDJkVGhWS0tBMlY2Z3I1Snh3SThaeEFDRm9wOVd1dWF2TnQybFF6YWFMcUZHcXZHaFRTZ2t1UjhvYitzQllPZS9WZG91OUZGTTk1NnJoUThNT1llRk5BR1hpR2ZHWlVPYnBNbU9WTHZpVDUvbU00Q2JmVHJTNDhqdGk5Zi9uSkNkY3g2UzJ6TlBuSi9MeEh0TmpycWF0ZktES1M1TTF2WjFDdmZmNzY1MlNJVnArZVFib0F2cUFNR1Y2UHI1MzRkUGFOcHM5VTNpYzlUeEtWdG4rOFNBTXpIdGxZdnZ6aHJ5M3ZGNzVYWUhub3EyWExIdjdLL0c3QmU0VTFnNGYvV1ZXL1JpSHhDNzAvejZDT2Z2N2E1enJoL3B6L0pMMUs4d2FyYU9idDFsZjY1QTlDYzErWkkzK1U3d0dtVllUSm9oNlNrajFnMTVjYzJTNTVkOC9Md3VMWVBPQWVFSUFJQk00Z0w3b1dxMkwveVRjT3JQTGU1WUxVOE03Tzd0cytmQnNtVnZKOWNOVlVFWG5xNkNuU2dEc3JFUFdSUnNEWk1Kc24rK2FGVzZLWWhyR1U1Mm9TNVJnYTV2bVZGUXVWQzhzaGVZVlpGakFaMUZ2ajlRbkhIOUxYZUt5KzlpY1RFeXk2aTVXemVodWgrK3E3MXh4N0ZsSHRYTVNFSjZaaGhlU1E1RDV6L1VVVmk1U0xYSWxkdU95K3hFZk1DNUQwc1F6cHJpWFU5UmFuL1RPSnFrRXRXSGUyektOeWVpSis1bzdpMFZWWTI2enBYd0NseGNmU1pEOUM3NTEvcGN5WU12QzE0ekxKVmV4VVJoL1g0blZxVXBVSVhMZHJzQXVwVnRWdGZ1d1pyOWdMTVBJaVJNc1ZqcTlnYUp6R3JWSkNTY2Vtd1lqZlB4QUJubFRxUUZRZGpJNUhOb2UxQzVPMDFaS2lnWVdCTFlCZExOWWsvWmRleFJvVjRTQjJmTHcxYzBYQ0l2bXpxMHFyeUZLQlNqaVRrZm9ZWnZUbzd3c3JBTUhaZnpSQTU5WWpCWlc2UDEwK3ZzcGVqK0VlQlpyWjh1ZWQwODU2eXNDNUJEZncrMWN1RW9wb3JhWlVsOVlWR25Mc2pSQlpFeFBOSmdLQjFzWm1IbDZUYUF6WThHMWVHV0ZORzZLQ2MrUDFJbzB0cTlMSEtZWFVmWncvZjhXUk5ONzNCZmg1a2tnZXFmOFpXUzJZdmtzM0VqN3BmcWk3MW01b0pNZ0dJNlZOMU9GNk1vMi9yNGx1YmxBVFJ0NnBCa0JOOTVudFhZekgyVC9Qek1WK1llaTU4NXh1VFQxWVMvODJWN2VuTlZacmEzVlM2T0dCZ0MreXNJVitZM2VLWHIzQUUvQU8wczc1bDlZWTBwU0xHcWxVQmtpb0RSL3hWRHF0NTcvQTNhaysxVGR1THVHOWFXZlNBeHFYYjQ3UmxqV3E4WUNiREFtM1lCQUdPNitIT1FwNW1ITWRwakVZdTFONEQ2TlhCUGdJdG9saEErb21oY21uUmRCUk53c2dtdVVtZis4eUZJMklFSGxZYkcxWk1RekIwTERrTndIa0U3VFc0Znp1M0MweGh6VjNiMmw2MVpBbjZCbVNLZUZhS1NNSUdLbGtlQTl4NjRxOStYTmR2bjVvbVkyV3J3ejE5ZGN5L3RtTWZ3NjAzT0tVcndqMXpxNVY5M0FrODZ5WlJxUEZsclJZY3FJNXBQRzhqejNUYkRUVldDMnR2KzhxRnFzSUk3R2haeXMrK1QxTFhUUDN5NC96eUxjYWJUN043ZEFFM2RUdGliak1venlrVm9LZUFHWTJ4cUc2czJLSWU3UkphZzNrVE9vTVpjRDhiblZFSnFZRjRWckhhNkw3aVRKcGtiTVhjMFRxT0d6S25WR2FEVTJJMW9XcHpVd2Y1QU5WWU0rZ215RTA3Z1JNTWgwV0lzWnlVVW1oaHVuWFdaTW01ZisvSGJ2czA4bURLck9yY2E1YXNHNWlEajdhSmJZNDBYbk9zRVpjVXF3YkR2L2xmckRiVWRXcHlYcUhhdGN4YlhUVFRnYmVKNzhlWEY1bjN6eUxaUEZ2ck9EZ25oT0JwL3ZIVGFXTFdoSDZUZG44M2ZSN3N0RXkvWDV2N3NyUUsxWFh2RjJOYVlQUk5xUnFEQmk0MGYvbjZ4UWwrTDVRN1laKzQzcGtFTjlUekFDWW1vR3VjVHhTaU9jdFlvQTNKaEJaeUtYVndqdWN2Qm81R0hScTFjaUtPTC9zdWdUNENHaG0rZ3c3SzhFS3h6dlN2UDR4QjlZSm1XVTdKeTgrSXBVNkRFQTEvNjRSUGMwSU5UNjNTeU1aR3dQdjM4ZVBzNjRDN0ZjTGF4dTBxYzZxNnQwUTZWRUNjRUxKY0tWYzJndUNJSTJxbFo5K3Uvbloxd2NsR0NOb2t3REh4cjRlUnFTSHZYenUxT3lmcEgvL3o3OWhCc3l6VDI5OWJWVTRkaGwxaVljUjVFbXZCTk5FbE5JMUFsb3ExekVVSmxGNlJOTE4wd0Q4OExmdjdwMCtDYjRPYkplcTJYTld3MXU5b0FvTklwL21KWHdwSy96bWg5MzVQZ1FQWlJhTlJOSk5QcFVmdk9mZU9ObGRoRkFvMmdxQVc4VkNRZGxXRjI3M0RaRDZhWk55Vm02TzdGbGZEYXJ5aXJ2RThtZlEzeTVMcEhmUkhBQzRlSmRFOHV2TXJUWGFHcVpESk9yVTgyc2FGd2pFWGZEcGp6Z2xVNGcvZFFNNEo2YTA0anovMVVMY2orVGYvTkZUaU5XWHl1djlIVUF3M0F2ZUJTTUgvQ0R1eXpTSFI5TUxmUStCVzhzRVF0RTJFRmdtRkFxSnBkWGZoL1N5ODNXT2V5ZTVMRmlIZ0tFcEozaGwvN1dCYjRGMXJsNU9Xd1hJUGpLWkJ4MXhvWEMxODl3ZHZ4L2l6dUZkWGpxQ1BJMVBWRjhDT0s5Nmo0ZE1kamtCZEtyaXRTSFU3bmdKM2QvM2Y3ei9KMWs4RXpUM3p4U05CYXBoK2I2eTFUVzByRnFNS29kYysxUzFGSDB5THFEQ0F2RHB2TGcvYlVFcXRmRmZwNnB4cHRsTCtLQ0RUc0IxMXgySmw0bzRMMXl2S2NtOVV1TVZZTWN2NlpRY2t1OVdPdXVPc2t1cmIrNGNQcFZQbnQvMTRac2JTQ2RPQmVVWTVnTzNBVWU2MFNMdncrQlNzYXBheXJlRUowcHNaZi8zV2hPZkZIem83b04renp6di8zbDhqTVZwcnN5OHdFbFdaU3FPNklSTWR1WGtUNDlJcFdvS3FDNitxMEd2Y1FrMUhzYWxrVHd4ZHNONzZ2aEhySXZBUDJZUlhaTGlOTDhySHNYZkxKbFMzTVd3dHpIY3ZEY2czK2ZtYm05VDl2NWJIMzljM0RqK3pMamwyZkVTMTZWdXZMdW9vSkRYMDhQajlDem1jVy91NWZCNnU0dGNoeHV4UnZSenl4VnQ4YkpvVmJPdW1SVXRZeHJ4eG5ETXcyRXp2TngzNTNUbnlPOTZkRDNzVy84bCs1eldiSjNzS1YzODJYTHl5dzNLVzNSZjRQb3ZQazIzTXFSY292dHl2WHluNWlOYys5R25pOERDeVdzQzlpa2pITlRlU3pNZmZGTmY3Y3djQ3ZFZWZOWkxlOGdsaG1GRzRQaWI0anROQ1JFS3VibnpKVjQxdW1tRC84Rk1XeitGdnRHQmQzQzBwdkpkMDRjelJUV2ErNWh4RVpkQTh4ZkZjNXJqSXV4ZEEreDR6N0xjeTgvMkNBNnBEZ0dIOEVQbG5wckRxc096dkljYjhVWkZYcTVtTjF3ZDVTTGpuNCtiUHhzdmNhcUlOVVJSby96VzJUYTlwWGpkdjlmM0ZrdU5XS3pvendxZ3FyeFNVWGFtZVFhWHBTeU1ZV1c2bDdCWW9aTEZuZUg3cjB3aG02b0NLbTdNaUdGR2FmSDZmMjdzS1dhWHBlVWwzUmoxQW9XVk5HT0dGd3hZZDBsSlFMSW4vcnF4dFRPbVNzSmQzQjUxaEJtenBSb1AyVmJJVmhSOW1yUkxWOWhYM050b1RURmpFVFduQituQ2s3bE9VMnZzOVNMWFplSWlrVHFmYUphZXZ3SkZ4YmxEcXZkM3ZyOURkVzcvKzZKRkFQci92MDdyMlE2alFmVFFlNkx6V1BQQmpnK3VkLzRRaEh3ZE52VWZkS1BzdG14WnRpcXJ5N0t5Z2E4WXh5c29iVjlHcXR0ajRDdGd0Yk9Hdml2cnFNN29NNnlPc2x0NVpaaC9rc3FxaHdmQUJyVTlKRXRyM0tiRmZSRlA0YzJTbTRQNTdmU3VxV1ZSN04vWFJTNXVjR25wcng1VHZRQ2UvOFVvUmVUcUhNakxEOFlyL3VhRzVIc251eDZSQVk5MmVieFBlTDNUelJLSldlNzNEdnM5SFk4Q3dPNE9yM3ZZNjJtbnBlYnBiczhkbXM4VXNYRVlub0NjY2dWRWo4UFFWNUNyQktyVUxJSUtsdTQ2ZTJjQnlJT1c2eVpiQ3JaaC9UOTFRNzY2UWRUcWNKV2JPaW82WDBKKzFGOWQzSUdvTzNRa0IxVWhJckxOdEpUMS9kZi82dGQ5UC9uOTA2K1hGY2twQndQbU9vVE82SFUrWEdjSWpId095TFJESHFXbkVDMHcrdWZKMUpLZ2dwRXdjalVSanVFYWZkYjB5ZjlMSWxvVVhNQ0R3TDhWTG5GWUM4VFU3cVZWK2lyUnJ5L3hXUytOTGQwMVJ5QkNVVEd2OTJiNVhWMUpaUDUvTlR2Z0hVZDFSN2ZEMjRXZkRpQ3BNMjNtMTNOeEptS3g5dWtycmxoRjd6QzZacnQ4KzFyZnRlMjRWZTRpOUhhMGFOVUoreFhMQi9XZlpmRXJ5cGN0WDdIaUh6OWw1TkxtQko3QVRIRThmdkl3ZGp2R2QzK0NZQWphVGtrbDMvejN3QlZqOHZNbXp2REFWYmFzQWdLRzFPZkFqSW1KMldFUFpzRk0ySVpiNUxkc1NMKzdCTXo1d3J2TjZScXhTRlRELytXN0FpRC9Udk9JV0pyOWs4dDU1WGgrMWFYMlU2cW5seE16RzJhUWNMdnpHWGFmdDBvT2NGV3ZFVjJacVFyQnREVU80RExLdkQ4ZkppVXZQK2Z0aEFma2lnR1FpbE5BanRCVVlxWDQvNmVGa3MrdUMwWEh6cWRLVzA3eU5rSlR6bnUyKy9SRzZESGdlbGFibTN6OWJVZDVYenE0MnRqWlk5cFNYeGtzZC83bWxzdG1IdkcrTzZYVWUySUJNemxTejhWeFQ4VUZraDJlUXlKKzN0Zi9HMkpDbGVIc2J6UDkwQmJSbkNhdTlBbXVjNlpQR0NSWHBIUERsTmM5U21ZejFQS1FuMXllYmgyaHZNcFF0ZmJJd3JwcU5MVEcxTmxsMmh4dnNHM3FhVjlMYmF3NStkYkdhdlFwTjFzSE95dTJ3SkxmNVZLK1VPbnBIVDJvb3h2NHFNb2RWV2dKSDdCTmdaSGVPdnRmZC9zdEtJTnJjblZTek54Q3VwUFFrQVAzNHlzVG5RTm10N1ZiWmErM1VOcFlnajVaSGpCc2tLSzBRUXR0enhkWFhweDhkY09EcnRKdkIzWXRYMzlHNmYxVFpZL2JWZlpFL29pSjdzVURMbHQ5dC9LWkRjMTVyL2RrZXVNYjR1Q3VWNDlaRVF5a24yUllNdG05UlFOL2wzV0dBQlhrRkw2SW9IZjhuNmR2QWtoR0x5aDdiZWd2aGM0VVNDb0ljUG5lcWFlWFh2Z2d3QWVkd3Qyd0k2NDVEWG5LMTIxSGhZQnlqVkswNk5LNC80OGFMdm9YVXkydDRTcGUva1Yyei9UWVdxcWozYkEyR2pHczdXamJvN0hZT21yV29DVVNQYk4ydUNWUnNXK0VTRFhyUnZ4K2NpU1pHdFg0ZmI1UktxVWQ5bm50VkJwKzlJeDBZbkVKYlVVYUtXVk5IY1hVSzh5MW5aUjdpbzlETFB5ZlBTeVhUQ1Z4MTc0bnFsbDQ5b2tiM2F3SUxLaHVQYUxXUFhYTnV6dTkydUhFT2FKNCtlajV2YStOcUY1RHhtUTBLSHR5eGpuajA2cDVCOWE5NGYzYXA2by9NVlVhdmYweldQSkE3aEo4S1llYzVlV1RBdmhNNmtWSjhzVXppSURNdktYVWI1QitKSlc1dDlKUm1mUW9UaCt0Wm4xNG9vcDF0TEd0ZUdaN1U5TzBtYzVseWRXYkF6WVhiZHgycCtwTy9DOHpTUVZHak8vQjN0bEQ3Tzg4M0ZrMk5xVldIcHBwV3BuRWsxbi9tcFpvVjZhSmRKSG1PN085UVZKU3YwaHRhN0NVNEp0eWNiZ3QvbWxEcmY0VVo4RVBnS1VnL0NjSS9nR0RKZldON0VrZSt3U2I5VHVYTjFrbTNDQmVDN0k1bnQ0Q29EQWxtaTRRMUROOFFYZHZBVmc0MjA3eDlmZkJJcmlvL3JzL0sxeGFWNlJzOXhzN1h6a29TQzNqUXltQm9BbmMwZk1HcEJoaHByUGV0dng5cnJkWHN6bWU0UUtnc0o4WVByMGFhYnVucWdBeE1RVFFEditOUGN3eGoyT3lNNmR1LzNmbm1qL0d2MTFrUFFJQmZOQmNDd0tUdzNVZ1M1d0ZyQUFkUnhWd1JnVzhxUUl1aDF0SEtsT2tyOXJZeTE4ZmFvd2lXMnNnNjdZR0wxakpaTUpVd29jcTRUdVZ5QjIvN1FLSzdYUWJvUEd3QnFMV1FEN1dRTDdYUUg2ellRMElJMzdvNisyZ2FBSDcxMjNkMzdjL1BEZGNLMElBaC91YkVYSzNDV3dIcDJFeVBPeWJIOXJZbWYwQjJQc2hBUE1zU0habWNldjRGc2Z1eGYzOXhmMnpWLy83RDRzWGtiZ1podGw4cXdZT3FJRUgxR0NmKzhFZkw5TnFNNStHelZmMm4yLytNRWUwbVVldFpjQmUvU0hvY2tZY2NKNzRCcng2ZFJnQW9EMDRCMDcwcWNob3pZTGtXb2I2NWE1djhtZVdKbW9tQUdwd21QSWZRQmdXNU84V2FqQUh2bzFkdi95aTQ4YjdiZndUUFozc3hBR3YvYWVvWVFBZ3ZsOUtFd0RzNlI2NDBmdjF3Ykh4UzlIK1Q5ODlyU3JOYnEzbk5MMWZIbHdBK0VSRE9JQWZoMXprd1JWSFdndVBUbUVmV0svLzNYdE43MGNlenFYYlJILy9zNkQzYjMrUXN6enNsTkprNzdkOUd4bHNUQ0hweHpJOHUrL1Q3Nzg0UXRXOHNvSDNRK2pKQkhDUjhrcjRSeUErZjZ1RE16NE1jallQOTdTaHY5SENucDhLZjNpR1VndmJnL2REdU5EeFNhSUFLTVQvMjFjWjhLRDhETDN4dVRoRmNXMmk0cDlWN2hYTFcwQlZIMXlIbDR0N1BMMi9sUXVvdXpoWDc0cndodjBha2JLbnA4OTdQTk83Rkh6am9pdVdsRk5lcytQL3NCYlAvMktuSGR6OHVtdnJQWlN4RmJMaXdWeHlEVW94cFJrM2wrLzh6TWVQaDVSMUdBY0E3c3JWKzQvcEFtSlgyNVZzaTRndkF3cXhXRFRhRUZKdXlEUTJFY25XWHFsS29wS3B1YW5SQURUQWhaTzA3WFpiS2prYmxuV3A3UjNZYUFOVFBiNHBHVGR6dVVPcWRZMVdpZThtRDNqb2NUMDZVeXdRQVVsQTIwWUJvS0psWFJBSkRNbE5rTVo3eVNvdFpFUWpRSS9FVWNsV2xkV09YVlJtQ2xlT2dyWVdWSTFCTDdtYis3MmUwZE5yc0wwQzRkWnMzb0VLaGF4dU5zbkJFYkZ4TWtTRVIrK1pqTFpIWWhKVlYzbXhveVZSYVVUMHFqb3ZyZWdjVmRSc1hqa21hRkZ0RWVKbGplUUZWUXBtVTA0UWNiQ0hqQXoxaVVJYXd2bE9Ya082TFI2a1hlb21YTW9qWlJOVjNmcXF4MzdIaDdmVWVnRFZDMStacUV3bHE2NjN6Y3k5M3E1NzQrcXVBcjB0dEJVcWYrSnRqRmlwYzBCYSt5bDVhOGNtN1l6TnJLTkErSVFGTzNwZjFmclZiZTFEU3BoTldSdG9IZUpOaGZzWFJlZXhxdnNGcVNmVTc1NkUxaXlyc25CWld4cFlhR1ltSVJLdldTN3o3T2cvN2k0Z2RtNEpEYVJjbWhqcksxTTZOL1JhY21PSmhHaGw5WTA0SEt4a2paL2NHdktDbkFydGR1d0lkSzFJUmloV3Rzdm9iNUhZV1ZhaENMNTdpWlpTOVNVcStEVEg4OTF1QUlqeWxWZW5OYTF0U2lHYkhTbjJ6WGxucDh1cWQ3bnFtUG1uQ3dYbXgyMVg4dVBIeHpnZkVJdEV5NTl0dDkrdXY3TFhkbFBveTVsNjcxbDRNQUoxbzVXb0tJRjJGKzZYWjFUdDYyTE41Z3V4V1dXbEV0TWt4UGZkdk54RnJZZ1IxMjFSbDJ2YXNvRDhlZzYzc0Y0dFE3bFFlR3hiUGVMTUNUaXFyMXdETCt2U0pmVjIrNk1YZlc5Y0VNUEswTC84N2tFaThZMnJiOVZEdCtQOUd5THY1Y0JXSjFvdTdjS2RFeFdlcjhqUDR3dkRTcyt6NkJ1UGFHS09ML0NtbGlTYTRieWlMdWcrbVJCUlJmQkFON0dTWjAyQzRYSDhlcGRXci9DQjhnYlVaVXBlU3M1eE5RRElPWVZBMUVtSWVpS1hXS1pSQTFWR1RDVHhvbU9vZ09qUURjZlgrejFybE95aG5Vd3RFUFppUURTbFNRMFhIT1Y1c2k5ZTZaM3E2OUJudEMyKzZ2UG9QdkMrNCswVmJUdDQvMS84d1hJeEc0Nm1FNHduMEhpMy9YQVFwaUxnQUZaZzBMajVLSCsxWEJySFFucGhUWjB2KzNPaklwKzZiMGdzNnVvU0U3cVZ3anUzdGVoOUo5Qk9YYy9Dd0R5Ly9hVW1GcWxGTE1tSDVsVTFSOWhSVXc0U2FJMzBxRkhXQW5tbVNscW8rYXR1RzRYc3NTMTV6ZjFTc3lsNWJaM2I0cEZYODdheUFjZG1jWit6b2VoenpvWEVkYVFTWmtvb0x2bVY0TG16dXg2dkV3VzdSVkNFdFd0M2RBVUszZkZpWjFhZGk2Vk9RWGNoNm16R3p6Mmh6amZNS1FxVGppajJ1MmFwamlUUHJhUkdKNzdhTmpUcGNkNmdQSkJXQVA5WHRhcGNXUDl4K2pMOGpkUFB6YS93cWlOdWZEQXc2M2JYS2tscm1zQWUrUVU4SmZ5ZkEydnFGK1JQM1luMTNlaGg1K3U1SHJiTVJJWXc5UEx0b1g4d09ZRzFrWGVDNGVhOVowMk0zYU1hdW56OWNueWF2WHI3TEVRUEhxK3FwaGlKSHkwSmdKZ0F5c3pvbXozVGxsWUJDZGJJdlJPY1VlTGdOWkx0TE9wRnByWDA0V0tPZ1Y1QWxpdzlleDJiTTJ3Zm5ZK25Odk1WL2l2dS9oT3p4RkhWYmxKRFdhTko2U1JsdVZHOXNWcTB4clZFWFRmVUtCdU1xNmdQUVhkVXMxSXlWdFN3Sld4dmhkK2luWFE5SUM1S2h4SExNdDRmbkpvc3V0WU10cVhBTEJ2blFGUUJtSE9XZGxWcitEVFB4bElnZDJHTXE4bGhQNDhSRFhPdUVRTVppODkrWWljU2t0Z0pJTG5tTGg0T2gwTzBlTXF6ZG85YnlvZndtTzM3dWhQckpJZGNMNzJzRTV4OHpxaW9WWW1reFZGRmE1L2JsYW8zQUtnaC9rRU9BbVB1eDViRE5PUXExYklLd1VtSmhpWUhDM0NjbVpMdmtXRlZrUTVaZWpuRTljQi9zQ0lpNGxVMGtZNmV0UlVOYVh1b1FMeXRKME5veTJvTUNnckxpSkNkUVIzREJPZit5eFVDanZMZlFGYkVlYS9UbDcyU3VOT3VwbFQrbkJ0YVdncmx5ek5jUk94c2JYL1RGZEp5LzJneFBhM29VMkdwWWJDaEwydjVIMmF5SU5XTlFML3ptS3pZcVVDc3JWMmFzcmVYUkw3L2NsNGFUNjdTTVRBeEVmSkx3aE9oTmhYT0p1L3Awd04vdkNWTXFDenhPamZONWVMUkxPQ0tJYytNcjF4ZTZmQXdiRnNXNEw0YzI3bSthdG9BZEFUYnBsL04zUkpnYkIwbmZNMjZMZnVLa1BSc0RTRUEwVk1UamREWFk3SjRmNzgrWUYvUDQrc2hWK2hjbFpUR2Z5UFRtOTB1VktQUmNCaHV0SzVDS1dZZTlwZ2E4Y3VDcVJqaGNNbzV4Tmg0UWNZNkpSM2FrNVk0MW01U1JCNFdGRlV0c2lxQVVqVVNNQlo2N1BjTUlkQk1hMmljRko3VTdqMVdzZjFPYXlHY3F6RXpDM2lBV1VhNUNqV2FjM2l2MDdDU0pSSW1HRlBiaWQzT3I1V0N3TGYyKzRKMkxzYlUyVUZoVlN3VHJGcUR6SWM0Q21CTmpKRFdsVmJUYURRYTRtWWtYcGRza3lKM2RUVWVUMXhHdGxUSUp1Rk1PR25oT2xIS2toTkVHaEp6OUJsK2pBbERNQ29EUW1xWnpCV3lVVlNJUEhWYzYyUURaZzlQSE53RlpUREVrSWtsbWdRaVlMQlFrRDRIWTlWb3JLdGFBb1NMS0FGcE5jWlVTaG13SU8yc2xSV1ROaldtVmxCOGY0UlJ2dUZleHdvcVExWmtCYXZqaHVKaTNnb2R5ZkRKS3dMekFGRHZvaGFXaERSaUo5MmpUb3duOTM2dHV3VGkzSmxZbE10d09DeXQxNXZGMWFCbEFtWkE4Mm90T2RJR0N4MFdRSm9PeDYvM1kxblpvZmZubERsbzNiL0g5cjBTSURMbXdZT3VKYzlkYWYydFdSS0FMYTNEVjlwQkdMdG1idmEzcEM0YUo2MFI2WHFiR2E3UisvZVQvZDVRcW4rbzhvZFk5V0MrcHV5VjAxaGlDSHdjbzI0VXBWRjFIUjBTbXYxNEljcVVzTkJqcFlyYVhvcEJGNUphaDZjcU9rL0phRlhtcDhsazBKYU1naENrRkJ2UURQenJGcFF1QU9Jc2FZMnY5Mll3cDEwZ05GRXBjcmRoN3RhZU1MUnRUTWt4R3lVeFNWVmdGU21YWmFOUHN4c1krSVpwOEpHa3hwT2JBRjlOZDBhVzBQUHducnI4SGpDYkJDdDdwY3JkTnkrSDI4bTZRK3BYajQ4K1VNSEtDMkZOajJRM2VmKzNhUnFIdVJEK21iLzVTZWZ3OTRNYU1MQ2ZHVlpaQ1NmNlM0K0plL1BoQitTbUsxSmZPRFU2RTFaVXE1TXQ2dldjOXphT1U5VmxrZ3ZxNUl6aGVYcUxoWTNwOWRNUDc1by8vY1hoTEdlZkhlemFLODh6SlYxZjgvNTVpNnI2OWVRZlpYRDMxbDc0cE9iamVyUFpmUmszYzRmeC9MVXhlWWd0Yk03dXcvMXFvZTl6YllucCtUeU1CN2RXMDkvQmR5ekticXRlS0hrc0dseVFVRmJLeGQ3Tk5keGRFa1pBQUJBOGlsTVBHenZSU2dHQkVEellNWG5uVUZ6UlRIVVNnTlo3VlVUNmtlQWUyNXBxZjlRWDFmODRzV0RpSTlQSEViVTRaV3RMWUxQRVQ2VjBRTm05ZWw5aTBMUTlIZTk0UXZDbHVuSUVHaVJjUm1wUG1aUXBEUW5tRjZraEFBUHh2eDkvMzMvLzk4TEgvMXRTTktJZkFNQmErdzhaNUFGOFBHLzlzNkluK2U1c0RnR2dZQUFBRU1DL0g4Z2p0NnZyLzBhOVU3N1hYMEJvS0JWQ2VvN2czWVNOdDZ2VlE2V2Q0bi93bGVxOVFsWk5abTFJenkvMnl1Y0wvQW9JUnk0RHBmdU1RMzJ3Sk1yUDZDTFBVRGZoNnVlQmxscmhSZkFiOElONVc1ZVNWY2FwTytyYVBpK3hienJmWGF6bzdPZDgvN0xZMVE2Zy81NmwwcGVaQkFxby9yNHQ0Rjh5MytoaUNHZTRua0FqMCtYV1Vna3UvbXljZlYydnhFMFpEdnE3VCthVXRoT1V6VmY5T0pBVldBbUFyeTV2d0Q0bnpTT2ZlWTJkcFV0dDIrYUFmWjZxZDBObExzYzQrNGs0SldGdmY5UVRxdnRHTGVSalpoT0M5eFo1MWNMM3NJRDlRNVVqWmR1eDJ3V3FrS3B0RkdVSUxabEhMd3JaSVQ3RlVKY2lwQkQ4ZktFOXUrOC80aTBYOHR2YnZPWUUzQkNQamJIbEhqdG1JdGt4dmlzaTJvRXVmSnkwSVFZTnpEMjZvOCtLMGJGc2w0dlkvdUlKUUhZb2VOOCtXUVE2ZHdKUFMxaUp3ayt6MkZTMnB5ZTZyYzB0YlQzQjgxTGZoMlM3aGhmVW1yRnlMcTBFb21pSWI1MytZS1ZlNzVMTWRBd0RrSnNDYy8wU0NzVHN4VStZV20vS2V1ZksrV2pjc0Y3WlpGemJoVEVqM3BuNXl4VXRENVZXRHNzdWVDdGljL0MyTWRmSTU3ekk5cjJRSHVOU2ZMMjhKeWx6NWRrN0VuSVJQMHZ0WHd4dk8yRHJNdmFyeEdKRXE1WFhMTCtMRjlSeHdlbElkaE54MGJUSHRKb1JQUktVVGlueWxaSUU0RTlYbmFVVFFEZ294QjJNQXBBblNrTks1Sjd1NFN2QnRuTy9zbWUvM3QwMEF1YkovTUhmUitrOFpFY0Z5Z01BQk5DUWZyUTJGSXdEdFRzQitoOGNnOE1CQ0l6RG9TWUhBSmJCdHdiRTNYc2M2OTIvTk9EVXJqWWxHa2c3RjlKQWtVN1hJS0JZVzRNRDNwN2R6OUhNTXJzQ0FyQXI3MEkrZm9hYzNWZVE4TFg1UklKMlJqM01HdFZyWUNWRzB0QTZLTld3b2RyZU9wVmEvbmpYVTZ5SFdKeFp1eWJKNnU2Z1U0ZDR3MTdhekVKTW9WOHI0d0QreWtya29FWjkxRlpxNUhMeDlpWG9BdzgrSERBSU0ycHFXWER3em9mWFBOd2JzZzJmUis5azZ5S0ZnTHNISmtYOFFwZm1qVmNkWW1GU2dOeGVyMk9aWWdvRURaS0I5WDFtc21SS0VubHJJRFFOUVBsQVVEWXVsU2ZHV01jeGVJZWZlcU1JNnZCQzFheHc0OTV2SWJmd0JXSHd4VlV2VUl5V2p0VHdXMVRnK2NaVERiMTlqYXJwK2ZWVkVncDVmWDdzNDBLOE5qbnFyam4wdFkyMUZkTWI3WW9waVUxeFZXS1ZQeWF4eUtjazVsUk5pRzJFYlJ2Z1Vpa29UZzkxU1hTZ2JCSmNiUzB3YTZRQnBpUnFtVTFJcGFva0tpNVdNWkdOaXJwR1N1R1VSQ1pRcFRXcWhLK0tlYXFJcXdvNThRS2FQNVhoMGRGV2thbHhjRnZZL1BXM1FycjZ3OWRjMTNhbEptMjdyaXZ0Mmx3VmhWNUZJbHBrcGFvQkVWWjVZVmF4RUZYYUJOYS90cGpmeGRaZXp1dHcrRGMrSVAvSi80eXk0TnpncmdiSXdYMEVHYlZDWmFXd2xyU1NjajZPL0UwK0lCRmgwZDBpKzQ1djM3ZG1OWlhLOVRYd0d2OE1mUGJldEN4NlhMK0FwQ2xEVy9Iak5pSys3dnJxMVNzNDIxMjhiYkcvTXZpTWM1R281SmMzS21kZFoyOG83RVU3VnJDR0JQWjROdEw4OS90bFhGMGJJWW1OSXdCQkFRPT0pIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpRdWlja3NhbmQ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQURJMEFCQUFBQUFBZFhBQUFESFRBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdsd2JuRlljaHpBR1lEOVRWRUZVSEFDRkFCRUlDb0dxSUlHR1ZndUVLQUFCTmdJa0E0aE1CQ0FGaFVJSElBd0hHMnBnUlFkaTJEZ0FhUEFaRmtXd2NRQUZtKzhUUmRrbW5VajIveWxCbXpHaGRlaGJaU0YwUjd1bzdoa1pDWkdUNmhucG9iWlRXeHk2Y09EaDBFZy85bzBGUitIQThzM0oxYjN0dzU5WG96Z2NDTndqWm10dHdDVnhYNGhMb3BFa1RhUlh0MFpJWTJJdDRqZjkyWHNDdk1STFV3ajJRbzBJa2hjeEtrWXE1aVF0Y2ZuaW1ycFowanFIdEduZ0pibC90RHF6aWlxZHF3QXpvUTBUTHg4Nk16cFg1dEk1VC96djk2OTc1cjRBb29zUkJESmZCYm1rV2dzSXRvcU5iRzJYSjlDa2VvYkhiZjN6QkJtb0dBMUk1YWd4R08xR1Rhb05FRlRNNjdJdW9uOUZYdnpmK2l1aXdRRUsvVy9haG1pYnorVmRFYlZWUjRZTitQZC9qY3pDVE83TG53V2dJcUZsNVFBbDIxWUIycDVLSkZsTDZKZjdaZUJ6ZnU0Y0ZKM3ErQU9DOFFWNjZ6b2JXd1loV3dEL1Y1c212RVhvekVtRVRXdnRLRzJUUEczaFdjcFFtOW5RT3ZSOEpGSVZnWkJkMm1iRmMrSTFmWVh2d05Ra1ppdnF5UDBlOTM4NnkxYmE5ZDN6QnFHTHF3QVgzWHB6YlRINit0Ylh6R2drQTJ1SmZReWVsZldlSlN2Z0MwSkZVRjFheE5kVFUySFRwU2o3bEpsL25lbXE3Kzl2U01rLzZKYWRHc3NxcmdHZWV0bmFOVlBMNHorZDdxeC9zZ3huRjJUNWVnSFNVV3lYN0FERFZNS3hveHowQmNodVh4aTJBc0NhdFRQeXZnT09OVE9ick9TY2NHdUNRbHpoRWJLQi92cnR6MWlySDhoc1puYTc5bkluaHkweVJFTENKeUxnV2Y4Ni8zQWdUREFBQUxwak5FZzNKTk5RWkxoc1pMb3lwRncxcGs0ZGN0aGg1S2lqeUFrbkVNSUJRcCt1Si9pbGtoaXB1Q1BIZWcrRzlscEZvUS9hK3hPS2M2SEZBeEIyenJwM296QVhhaUJ1eFZNOFZtQ2tXbVY3dHQ4M1VxbDZpNnh3eWFzd0NwVjkrY3pVNU9manJNckgvQjFiZHNTWks3bVNXL2EvdENtdktvSkVpaFlqVmlLUFByeW1LVkRrUC85ck1NTXNjeTJ3MEZMTHJMUFJEbnRkY3gwekt6TS9FNmlBcENqNkwvay9hS0EzQTI4T3lWeGFDNE9sVDVhZHVQTVBXZlpCMHZCa1J0bmNZQUdkaFN1V2JsbzI1MXJUOWVDT0NLTGdmYllHa3FCSjZWUXlhNEtUR0lIVWc1ZmhxUlNZRWpNSFJ4SUhJK2xKM0ZUenROMHBXaDdERERGUHB0b3B1TjQ0Si9BSWtnMVNlT3BjaTloUDBSVFFFaVdPd3p4TjAwWkhVK1VwUzFHRjhCWVBFRDNBQkxGMW5xTEZmQXRTSWRzNHRaUXJFSkN6OVRLdFoyVE1VVmhheEhPTFczaVlTdDBwb0VjWWdvU3g0N1ZEcWN5aGtna0ZQWUhkdk1TeDlWOSt0NzZOTFpxREIybTlZWWhtdG12NHowbDcxYURYL2hjek93UXV4cTZrMWxVQzdubW50Ry9QM1N6ektHUS9md1JVRC9jT01RaURJcFRnanh2dmIvUGJ3RTlzbEE2aWpMSVR4YmtHbHAybVhoZlUxTzVBL3lIZWFiUldJeklkV2pXWjJXMDk4UzNOSm14SVV4RDBKUzJJUXFoNy9ETE9WRlVZOUkvMDcxZHFKRnk0Z045U055UHNBcWtsSkdYUGFmZU0reGJGNXFJWWMvSUFCeG1sbTRCY0Irb1BPUnoxOUNNMm91aDJvR3RFTk4yQUpGckNWek80Tm9EM2V4V1NFS0c0c2pNRHRPVkpTZ1lMVjNvU2FMWWVlNk9yRTU5Sld0STdYcTZGTU5CNnBCYUR6bVNHN3g5UC9uY29BUUMwWU82NUFWLzhWcVI1cEM3TzBLSlJTVGlYTUhlYWp6dnE4ZkQ2VEVhdGRTZUVkQ3lKeU9QN0hTMEhOc2NqbjRFVUg3SVZ2NUI5TmNIdDZRK1F4cjVOZ0psRVlwQmJsN2lXRlRnMlN2c3ROTHBrMXdkMEVPQi9IS09QNTFvQWtLSGJrMGN4Z2FVU21FZHp2dlJFWGZYblVFcXhxR2dkeC8xcFVCbjZ5U1ViaUw4YmtJbENwT0MySEYvWTB4NXFweFRMNkxtbFVQYkZPSk1qWVFEZVlKSWNZQWh0S1ZxZnJGS0luZ21qT0k1ZXgrV2JTVUFyQ0dOd2hJRGlhS1BRVjEyZXphZEEwNENIRzg1TFltaDJnaU1Fb2hndUZDRTdXdDJSbnBaT1AwTEFtempKTkpNbDFGcVEyd2ZiVUJKYjgrZ2RmaVNHU1cxZ0MxdFowejdRVlFkZG9UU3lzalNlYnpvbGZ5b2hTdGdnQmVlTENIT0RmTXlvMkJPUzhhMTJoaWRyM1lVaFJEVlhUQUl4RTZ4d21zMERFZzFNUkZIQUd0R1pKTEU2Q3RCWmw1SjJBN3VsVFAyME1qUVh1K0ZHY1JoakNvVlh0b3daaXRoZUFpZ2Jsbk9aSVJnRENnWUtlampCUW9RNmhSaDJMSWFyR1dCN3orWWl0S0F1cUVNQWw5UURJZ0hjOVJzWWlVekFOZ01zWkdMTG9VYXhha2tWcmZEb3pLMjEwWmJLMDRacGk2Q0VCVm9zTU9BQVVWZ1Fpd1YySE1qQkR1S1VnSk9JZ3lYaEVNbnNVQ2xTYWFTeHc2VHJpT21NUlYyNFdTRy9BcjFvYjhMTjlNRmFmYkZvcU5yY2NDTnk0a2lqcUl3QkpsTndCQzhtV1ZnbEcrdE1aK3Y1NU9NVjRFaUYyS0NJYlZTc2xGb1pOcG1GdzgyWFdzd29DNTZLRCtxVXJvSXpLbW51NEdBWmVKWi9FQUJNNFFXUVJwRnFob1ZZQ1FmUGRwT2hIR2FXdXg0ZXVGaUhudTQwMHBvMU43Q1hWTW5mS2pSMllkRmlzY1dxRnF1QmROdkFhOWR5OHRFVFArNzEzTHdjRFB4dkRkMGF3KzluZXlmZ2QvWTM4Q0VMNXNKaVdBbnIrMzMvd1pLY1Fud0tqclhpTUFCcER1Q29hVWlrR0lTaENBRUZ5RUVWNUplbEZjSEJwOUxuZS9lL2E3Yk1FdzhLcFA2WlpWbVZSOFM1b2JBbVZaSldPTTV5MGo4QkFCUVlRVFVtUXlhWkdFVDF4OUhEQ1VrTUcyTTJIRU9odVg1SGpUdUJwU3BBS3dpWE9tc3FCcURBWHpRVUl3WitmT0JIdmdaaFloUEczL2pWeUl2Sk9EZEJJQzBqSzVzS25ONzZxVXhzSTVSanRBcGl2d2NtZUFRSzlGWUtHc0VTdENRUW9nNzZHNFplbXFUSlRBUlcxRDh5QlZJUUJWTUloYVp1L1ZIN2hTT0JSRktSbWpRa1Nia2dRSG9pcll6aEtGWFg3TElKb0xDNWFhbmkweGdXTGdSZ1RnbGtyT2ExV01Kd25ROVh6bGNmbUFEc2hRNEg5RW9lbnk1U29ySHJXZzl0czBwSTd2LzNzRWV3QWF6cnVDK0dDUENmeHJrVDlDWUE5QzliQTVCeFNLSzNkeDBBWUkvZXlpcW10QnVBbzB0Y051YnI4MHdsNCttNE1QajltS2FXUC9GSjF0bHRQZFV6TzRHL2hMOVdqcFROc2xWdUl5Zkk2WEpYdVZpZUV3cXQ0ZGJtZmo4QUNDSnpTZmRuNHBNbzQzS3NrWFd5c1FWcGpEOVN3bTBGOUFQQXZ3T0FOeDJ1dmNiMkM5dUFDOStFQzg5NHp6cWZHYVA3S09iaHJuTTd6MjBCQVlCRVFIOG5nTjdLOTNaMWV1VnpOUHFuN1RQSEl2TWNkZFYxaTYyejNuOU9tV1dUK1phYWFZa0x6amx2Z1d1SWhpUlFzR2EwbW90Z1lHUmlaaEVsV3F3NGRnNU9pWklrUzVGbWpmK3Q5UUFIb2tKNmIvM2diakwxMWtkZk9iUTNnQmg2Nm11OXN2NjNUdWRUb0ZDUlltVld1V2UxUy9hYjY3RGpqampodnBzUmNVdU5MUzdiN0hiVXVPdWkzLzBSRGxmYzBCQWV2Nm0xMVQvKzlxK0ZCQXhIaFNkU0N4QXVSS2d3a1ZyUTBRc2lhODJxcGJaYU9hT05CQzd4RktsaVROTmVCcmVPMnVtZ2s2NTY2YTZIbm9ZWVlLQkJQRWFiWUt4eEpobnZySW55NWNpVnA4UlVwV3dtUjAyRWpUYllhWmNkQ0EyL0VBQm9EUUJzUDlCeVFMOEZNUDhBOEo4RE53Y0FBRFoyRmJ5RWhPTVVMQ1dxb3BoSWlGRkdQNi9KU2Jibm5KZ1V4VjFEekxRQWhDSkl1RWJCbzNneWFTVUpSU05kRUxIU0h0SU0zSEhHc1NOeGZld0VuY2ZyNmNDZ01XbDdqYWFKMDBleFF0UVI5aWlHNENVdzhnU2lKbm53U2IycnNBaXBSRWxueENZTXM2Y1N5SStlMlJ4NkVxYitDckdFSG1Pb05BT0ZwSlN5TmxBVGhIVE5Qb0I5SFFPcng0ajVYa3pPZzRRT0NXbWNQalJ4VEMzVThZUG91VVU3WDd6TXZya2lXbzdkSnNablFRQUU3bm4xL3Q1ZloyUkVRbW8wd2VpdXZKa0xsZyt3Uk9rczV4UzhNOFdMbFRvRXhLUkp1TjVabHVjOVZ4bUdwM1hvaFNGWmc2MDJoMFBwZlFqZ0hITGRVOWRZR1pHVWpGOHhHUGFmcENpTkJxOVY2aTA2VDA0WVlwNG9LMTRvYzNlbHJDaVZFWURjL2oveVFTblBPdGFKbnpIQmFhaGNBMENmQUNxOFM3NVp0QWswcFRuS05BdXVNUVdRYkZpdnRuUFV4bk1MUU91MmZFbU5iMVpxNTVJTWM1UVp0bXA4VnlsUitGQllveWxYcFg3VkJEQW1kbUl0SFYyRlJ3eHEzZjR6Sm94NHQzS1pmcHNqeTh1L1ZXYlVnN1oxUjlNZ3Biako0dG00V0FETVFrNDV3RFNrVVJndHlFbXcyTUtSVFdERlpkTi9GR2FSZlpIYmE3T0xZTy91VDRpSEI0cU1jcXRIN0tWdjBicXdPWkYvdGVZK0RRNG9IVVFZaFE0T1ZRb2JUV04xUzdEQjhQWGMrenV4Nk9RM3hPMUZkbUVxQS92eWlLM3R1YUhTUmFXNDBPWTA4WlZBUFRXTVh3SzRaRU94QmhDOGZUd2FzR2h4S1N0N3lRbEJvVDUwb3J4K2tOcW9tRytxSU0xNFR5WFZoU0lEMTB1RUkyQ2N1Rk9xNTRDY1F2Tnp4L3BjZjhHb2ROWS9TM3htYVYrekpac3c3OWlsZTlGL1U4cmhQVkM0bVFsY01EcmJvRFlTNkNOYjRBS3d4cCtSRUZWUzFUSTZVTVp3NHdZV1FOUFFXNXROVG5GUGROZ3cwRk0rZHFnSGc4MjZKOHNpVmkzdW5RNFRsc2k5Z2I3RzQ1bVdMbmQvRHorL1JuYThSTEVlNTltcXByN1Nob3F0VndTSXZmbUdkVjJ2OHlwcWpVN3Y1ajZuclAxMTFwZ3NpTHhOamUxV0hCOGJNanBXSjgxZHRTMnBhbndUZ3duTjIzM1dxdzRiREpTWkdsQkpUU0RsSGVNWVpYWnRPOWZ1bFdNL2UwRE4zWnpORmJ6Zi9kczJ1WElMS2d4ZGt3TjlXRVRadTdsczVya3d3Ukt3eVZ1VjJGTTJlYWxmR1ZhaDNMVTByNTF0V2ZNNVdGSENKL1dNWVlVamhXeStjRW84ZXlXQk1YRXpXQ1ZMa3liWWpqMXZyVkpkbk9SWGV4c3JnVURMcWJhaDJvaUQ4NTdFU0dMYXZ0a1RMSlJmbU5XRThlYUcyOTBXbTVJc1hpNVRoN1d3bE84YzNMU24zZXVpN1dSNUg4eERZMTJMQ2JDeUV4Vis2eDRmM3RRd1VER3IzaHRsT2ZBRzYzMTh4a3J6bXNqYnF3WXRFVlNXOHZSOUtMZWhaN29KM29rYTVqV0xWbjlwV3Fjcm1EMlZ2R09hSjhlbitLaU9kVWJrUFhKUWZXNXhaYjdXMlJlRHRPSlRhME5iTnp3dFJKUEFaOVJ0cVNheDBxR2xMazkyZ3YxRFg1T1VRKyszWTZ1MFVLM1BQeURSYzhlSWxta1NjRVpwMHdTMnc2d2NLMytLcW5KMzR5ZU5hYnZGNS9SeURSMGo3OEh3ODVIbXpHVk9TMFdJZzlKQWVsZ080OXdOa3RJN2hBMFc5a3dKdWo5Q0VsMkdhQkw1cWtKWEptZ3NzUzZhZ05Wdjdvb0dpQWd4YWwrM3F3VFhmVGlsckNtbFZsbzhZMExNMkQvQU5oZnVpU0pyTlhWc0J4MFd0UGJrVmt2TmFIbGt3Z0ExY09RdEl5eUVVZzBPSEhsemQ5MVFXM3JsM1cwL3MzZHduZllLMGdDT1d6d1B0SUNIVm5OWDdlQmdSblJjR1FTcmppdWMxd253cVdVbDE2dlJaOVZoWFNlTUlTMGtmSkM3MjhrUGsvcjJERWRUUEk5MEdLQUptdHVSZzBwakhhRTVTL2xteTdIUUNZM2dCcWtiYmtwRGl0N0tNUHA5TGtRUVNaL1A1SXFEd1JDZVBSejdkMzYwT2dhRlRqc2VONS9ETzhtYTRsQ3hsNTFXY3BPOFRueWR1RmxtZmhmelZtdDZlY2g4TGVtOG4rZ1FLS0toZ3cyRVgrcC9EZXNpOUdBUlZnSzlrVGxPTFRrUUlhclhNYkpadGFFRDA2YjViZEk0YUorRVRYK0FpUTVKZHR1Y1ExWGFEenZERnExc0xhSmMzdHhLUTN0UUxleVVxeUtXVlEzRi9xMGRGajhZRDhrNnlkZFZGYTUrVnMrRFNHNnVDL25OOWNlbnVFTnFsakovNGNvdC9uN2YrcGlZZVlVcG8rRlpPbEZHeFJ2VjFXeTRWRVBHS0xKcFg3QUIzdUN0TEYyYm1XYUlCaU5GNmhCOTIzRy9UMm11ZHRJRTFmejY2VFV3M0FiclFyYWx3RUZoTzNaTExaSkd6V3p3endMakRzK3o4b1prODRnT3dvSFVBSEFnTHc4WGgyYUZNcjY2anM1U294a3RKWUJlVHJSalg1em5Ca2RtSTlNKy8xaHJjWWpZdGRacmdiclZUUjZjMDZvM211YUNrTlpjanJmUHNYbGlwYWpOTHdhdWZMNUVWU0tFQUhnem83RU14WUpXMC9vaUp4dU50a28wV21VL080NE5kVVd6SXVzTmtkWmZqZGZTVm8yeDhPREhINkx6VEh1ejJwd09UL09jQkVqSjFSVWpSOGI4NzVOSUVCQnVtM0J0dDZ6RW9kYjFoTWRvTWhyR0dxWFU0MkIwbTcza3lMdVJvYTU4UnhuR2lLeG1JSHd0Z05TdXZrQXF1dlIwS05Kd3YzNFllNFk5K3B2VzM1RTB0c0ZGMWd1dWpUTFUzNWZwVThEd2xBZlBuRzdIMDN6VzhYMGRKbm12Snp5WTQ1eDhsaEQ2ZzJKQVRFUjVteC9yRXQzbU56cTNPa2FVd0p2SWZHdStmcTVYZkJPSGphZnZRRDZJb3doaGI5blFheFQ2SkRmU2I4Vmt4cm1WVm5xdTVyWEk1UnE3Ukh5TUpSaU5Kbk9IdDhrbXZiZ2d6WWpnblRuNGR5ZXhjU3pPM3ZReURvSjlsV0lqdUlzUktSOGZiQUFYbXp2c2x2TXViYm92VGFtYzdLMmJSVWYySDB5UmpMdEpxZVR1eUFqZThZUWNKSkExZGNkdHp1VkNlMC9FcmhZTkl3dTBZT3pFdGViK1NsTUtPVVFzRTl1dVp1dnVRWFdiWHBYbENidXZKQVJYUHlBbXpGR2hJK3VPR01CSDdEUE8wb0RVdzFNNzhBTjNoSjZFQitxbzBZUmhJNThiQlhDSVVMSW15Z2hXVnNheXNJU1FCNTZocUIySElwWHpPek85RWxGc2R4dUJPWDBpUGhTeE5QOWVWaHlTU0lwMkV6WGthYlI3ZmZReGtlaVRENEwwRllDR0dpTnpNRGRJalhoaGR6WFB6ZVE2c0hVd0R5Z2RVc3d4K3VtS2lxNDlvNVFyeTRFSlBjaHZYMzJtSjFFWlB2THJKNnBjYVZ1bUMzcFFxWHpqMmV2WDRvcFU3dk51MmErT1YrZXJ4dklqMlVibDZBM25Sc2t4a1d3OWZOQWVqVndNSUU1UkhFU281eHIxeE5LczdjY044TnczMU1mLzl0UkFLTkRMSEQ3Y0w2NW1tZXBhb2hrblBlTFluY2IrWkdBVnMzUW1lczV5Qkd2NHhiSlI3UnVXaktJV3dRNmxmQ3RGdEhBZTBXQ29vMURDK1NCNkpzZG5wRW1QZ0IyZ1NRNkpVaThWRm9JQmhWM2toQ2hmMDJZeGo5SnZlZy9US3FUd2czZUhQTzVzVmtXRFl2R0NTYUJ1cUk3bmFBOW9OQjg3Mk5nb3VJUWJrRXJIYjg4SjJkTmpTNkpwRHJUZlY3cmg4V3J4a3I4Y0IzWmgxMktuTW1LcUhvMXBPZW5odEY0NmF6RTlMYTg3dWNSdjNKUjJ5eVE3bUlObGZkbkdqblVKZXQvRjF1amUrcU82U3c2dllTcDZEUnNpR2dKNUJjeFhWbzNSNUxWK1lWMXV1emh2aVhEK2FiMVpHTkR4MlB4NG5yYW1hY2J0cUhLb2N5djMwZXpCMjhHcmtqWGUwK3hBa0J3YVRNekxkWW1GTzlPL2cyR0llSEFTVk5yVHo0VXhySThUeEtqalZKcXJ0MVhyZEk3RE0rM0RlK0NRMWZXNS9WM1RYSGRmeG9yRXdNUFRieHJzUmFZcG5sS0hNeHhaSHMrSmNmTWI3WEdwUEJXbUxmdUNRL2ZTemV2MlBSYXVDejZBbGwvQjRFQ0V2dEZvOUJyR0VkWnBuSU9JK0xnZ241QmJxT3dTYmppLzFocUJhMzRuOWZKOUFEM1U4aWJ1YW1HR2QzVzFMdVJsTm9oem5Ma3VpUGVEMWozQ0REcDVUVk5HQStGaGRYb2FZRXlNVDBxVHgyUm53cHM4SXRCOWZISjN5YTVGZWdDbGZQMHJSbGw5ZDdDWjMzM2ovaGczRzJNdGF2TTFmQlVOQnJOMVRlRldGMG9jN2l3Q29RdkttZVNwaEJSZUh0eXcweWl3OTBuNnhwZ0NZeWttb05LR2htaDBJVlpZOEtCa08wVzFwcVlJaTlNaVRWRzk0SjJqaCtjdk9TMFJzZVFLNWdVRDhFQXFQMkNhcjlJalZodFYzc3dQVk56VEIzdndZQ2tpV0JVN3I3M040MkJBbjZOMUc5Zmw5TlgvRDVBK0ozazlSNk5VVy9OeWJxVHJWc3p3NXpmT0Q4Tm8xb3RZdlgyU2dZTlgxMERjNVlvUHVKTFVqNjZkVHRjT2wvUEViWVpQaHJpMytPKy9FOStOOWpiZWFRck9RNWdKMTd4MENKMm1Eb1lZb05CbFROV05IdXp4YS9EdWZqcnd2ckcwb2crWVliRkNiMFRCRC8zbzdpdHpON2R6WEdvZHo3ZkozNnhzRE9reU9TQTQ0TjhySFB2LytUTWFERnBKbjQzNE44NU0vbWNxK0NLb2lnaHl3ZGprbFZ6Uzk4SGc2UUdCR1Yra1NhYTFLMGx5UjVUa0RjRE4vWUpUcFIvemZielNrazVldkY3UnVkRllLSnFtSWhFaVJFaXIwN0ZFQk5hejRFS3o3ODBCTjNxSzlyT2IrNFlvMTh6NzU4bmNrZ1M2TytQZ0xIWmsrdlhlcjdJYnU4QnF0cmJzMWYzM214NTJIZXlaSngzb2lHODBYemRiQTVTLytFSjdMeEVmczJkUHo0WWdhc2Vod1JSYUxLTFRrWWdRSlhrUFJiQWgxanFYbVNyZHp2Z21mRSsyVFovZm00anR5K2RqKy9mRzgwaVIyNm4vNjUxaitiT2RFZVYzZVpMNzRRVWlzSWJScjNTSkY1VG9uV3hqZmlJR2VkM3hhY3VYWUkvWEM5WHRoWUFZa0RVWTN0MUVnVE5PUmtnRThRNFVEU2dVUWNPSEVBdWdQSjZGOXZVWlFKNG5MZFFyLys5VitHZ2E0dnNReENETlg3NTk1eU5YcE0vZld4QW5wOXcrQzZqTkluMjVVNW9zcVFHckdIWHBCTzROamJjdTZ5NWZjdkpvZHJId25wV2FGWFdEVkdGcVhmM1pXdU56N0Y5ZXZ0cnlqRzVoYVRvSFA3WHZ4Yld6YTJpRmdObFhwdUtjSHlLNnRITDVKa2l4UysxanV1bnV3bHFEMzcvVzBGM1FUY2RJTFVXMEdOZzNGYzJrcDZOS2k1bEFUbWVtb0FrSVQ1clp4WHozZmRtcCtRTm1HNlJGeHgzRzZ5ZVhpb3Baa1Z6ZmxkWXJUZlRaenhZOWdvMitnWVhtWUloUzNja3Q2RUVQZXpZMjNaSGhqRzB3UHVIdDF6c3o3WXNkR2VQdVpZbGVNTUlzS2EwbWJURnJ1bE1HeTNzbUplUkNzcGY4UHV6UTRISVJxZGFJWExoRTg2N1lnWUJkbnRYa2MzNmJVL1A0dy9rcFpUOFU5RjBNMEIwaG9Gbm9OYTB1Y1d3eEZpNTBzN1QxNXdOMHdxVFpmQjdyTFY4eW1oYnFiY09GL2phZGF2VWZOMnNoWjBHUTFwYjRONDJrZEduMGNWVEQ5MS9XTXljbjVlcUlSVC8xK2RGa2IwdlQxZ09KdVZ2ckNJZjIyVXVLcHA5MzZTRlcwcWxzcUZ1bUpQV09UQ3p3VTc0WHNLQStXQnhucUROVmtBZkFxSTNqV3FzaHluOUhNYTk5U3ZaQm1Hdy9LY0IxZWpReW9QRlk1c3UvT0VQRDcwVHlXb1EvaWZWUjNsOHFUU0F1dlRVWDRGNFNlWTBhTkZ6UUFpVlFGZzNaRDdHLzMwRUtOL3BjRXNBQlNqQlhZOWRpNzRybFhwSmM0ZFY0OGphSUJyQXk0d3pMd0lEVlp1KzNXZ2ZzdTBOcE9jWXd3M3ZYSFpRY3JSQzNOdFFzTFBHbUVNWDFBOHNIMzBZWnVnQll1anhDTHc3ZSs1TkRUZGRROGViR0IrWWc1YVgwS3Bxd0l1cFNMcjN5RDVKbkZ4VHZmYW5wNk9HMCsxK2RtRjM2SWdHc3c5QkJjUDUzbmZIUDdObjNRWlhwc3hNK0tweERObjErQXFXQjRrZGpiaWFZdnZQcVA3V1E0Sy9EakRVWjcxMy9EYkY3QkdLU0tKMDhYK0wxVFJSeXgrVlc3Mm9PdkExM0FRdXJYdTA0OXQzTjlGS1lFNFczYzZFOTZhMDF5WWR2aTc3K0RCUlh3OW1SQy83TFBHSmxrQSs3UjcyMjFjR1FmY1dveTZVS2NyZnhBdkFmQnlENmNOYWN0ZXFIQ2FlK3BDbG1MR3RHQmdtQ1NQN2pCSFIxdGQwWDk0dTM2MWJEK1lsMmdZczk5dGtvQTF1Yzg2NFBmQlRpY2FwcWV2aHFYQmZlMmJQbGkrUDFIak1aRmF1NEJHdVZNR2wyNklhS0RsSjR6NjlYUjlHeHhYSHM1MFdiTGJpOEExOFJUZUVyaDUxV1paVDFoVFRGZ3B4OFdqN1NQaXFUNnNrMk9LSDg1cjRDNjRVc0RLenFuQkdYZlVVb2FGODk2blVKbmtTdittSHZSSWlLTUJoVVFPbnp6R3ZIMHE5K2FzbVk5YXBxWnF3V2M4YUdET01FTWxnZVFxQlNoMFVhUUQyMkk3c2VmVGFya0ZnTE5uT3BBMGVIK3F3ZDZnL29kWCtWeVd3MEIxYTFtL3lMUGM1VlFaOXoxWkpPOExYYjRZb3JiZDEvV0xtZTdVRUI3QnIxMkZjRmcvWlZvMjZYSXNBOUp0aUJLZGF6bG94RlAwUVF3T0pwUVVvRWpndzkzVnNRM3B0MHJDS05vaDZuSnlYVkdjT3d3Zk1hZGNYUStVUnZILzUzNSswMGVZNEVnNS9aTCt3ZlV5MXBHSlVrblpPam5iakVtSEVZaHV3WTBwK3htNHhaTTFLMDJ3MURXY2M4YnNpbk10bWlaV055dUNCWi90bmhIWWp6L2daT3FMdXNnd0J6UVZkdFBGUVhlWUR2SGxSeGN3dHNSMkkxalI5U0tpZHZPYjJwazdEMC9raUt1T1h4M3BtRHc1RkFIUmJtWFZsWithbFN4ZSs0SFN1ZGl4ZmEvUEpZWTZFZW1vMGt0SnI2OGg1MlljR0t2c0g5RDd4OUZWN0w5Uzd3ZEt3S0J1WG1CVzdmYk10WjBCSVJ6RmxQY2IxbVk4bnRwc1gyWWdBdXMwY00wcXhSTFBXdDExS3h2ZmNqcXJnQzlhckUzbThKN2ZlSlJjUVZKQWVzODRyNnUvbWdiVW5xZHovZzBDMnVKb1Y3a2s5L0tXQ1ZMb3dXNU9SUzdsdloyai82cUNPa2V3K2Y1Mkkycnlxang0K3EyNS8vMXlUOXREby9teStTbFpsejlscjhPZGRqdUNIR2xkckRCbkVHRXduSlhCWG1kSjdYcStKS3RCUG1QUmVwZXdtVzk0Uk9HVkVZOUs0OCtyOGlFaEF6blR4Z1ZHZEU5T0swRVhuU0NGZHh2RjhhNEtUQzFOeThacTI3N0JOTGlGY0NITUQ1SGVoWXRjaEQraFo3OEZXQm9CQU4ra2hMeW15eUFJR1djbGE3TFc4MWxnaWNDUWR0ZGlhOE1QQUhka0h5SHFHM3BJdWh1ZXZNL2JpeGdQeXNaZTRSd3I0czRMY3ZIM1c1QkU4Z1YvNncxK1J3ZWpNekNSK0p2OC9HOUVXOFF6K1F3ZUl4WktDakErblg0YzZ0bjlZYWZVTmZsOFUrYzFXTWR3dlhBOGRhNlozUlJ1RHNYYWdBVnZUMFp4OVE2cGsvcXNDS1NBejgxelh0ZnRGZkVETlR3L25NYmg2UVdSWlRZNEtuNS9PRlhmZlNBai83NmJCQWRpWW9SRnA3YzJNcndYQlRadDVwRDFzbTJHSVZjRWZ3dHAyMGFkZjJpWlVYSTN3RFdsQ0FWWkk1VkxmNjZtTXdHWUF4ekN2bGlHbys3dmlMMTlZajRJS3owN1pvc01QVy9QcWYwL3JJenArbVAvTzdKeHhIMEx6VFo4ekd0R3NPM0VJVDV4NlZUclhXK0w5bGdlOVVNTFA1WmJmQ3ZPWWxHbk9pZUJwRW5SU0J4TisvZUJOZjBqYnR3RUU2QmFvelZ4VjRxV09MUTcrNmlrZmRHK0JLd3V4Q3lJK3IyYitnMk5NdGtYN1I3Y2ZWREtXaS9nQ0VrRDFjMUt5OHNMWGh2Z2VPUHZoNHFKWjZFOEdyN05UYkVGUGMydkRzVzJXOG1sanRGcDZjQ1pXb3NyeVJISzNROUR2Ujg4bTI5TmtWblh1cmlRSU9pU3NhRHArdjIxTTRmbFVjTHpZZXZCQUM5citNVnFOdm9EUkNnVkZqY3lnTlhLN0N4WUZqYi9sbzA3VnZaUXRsMG16bi9PdHYrZEoxMWR0cndIazFVQTZ0ZEN3ZXMzazBuVTJMU3hzeDdOTVNQWmV0c21hTXVrSkhvUFhkQ1I5SDZvem94R21yMldZeUpaTE9aRkFkZ3cyazlCQ3ozWDY5M09MeUdUc3kzcStlZUpKc2U5MnlhSWc2NzEvZjhlZ240UEFNeFFLMlh3MEx2ZmRKOUI3YytRZFNUUFN2bENyWjRMaC8yaHFtN3RiYVhEYnpBbGh1ZFNFbzdBZXVXbXFwenkxWEtWMXkxVkJycEtSTHFWUzVsWnFlTjlxOUJzVG1OVW9RTVdSTklJR0dJMFhreXNFU2NnVlpvN0hoWXJBMGFBbFNvd284RlZmdXkrWEZtb3JoT0VFb244dTV4c0Y1WUl3NWNpb25vTUlGaDIxWFIwc0hpdXVtRHRKZncrbm41aFNWRldMK1Y5UlUzRll5SUZKdlNHdzJwTlV5aWdYOEt1Y0RtamFPTzNCdm4wNlhzUWhiZk9hVWRQYm51U0RXbWpJa2s1MlRZVjFhTkkzaGxraFdyS0VaUGl3REdyeVBjUGI3L0l4bHo3YXBIa1RoL1lXdmZtc3NGNlM0a2hidkQzcUprUVVXWEJYbmZpQ1VVa2lKalFKbDhMWHRFOHFkSTZqRmJkRjJKN211Mjd5WGw0M3o5N0M5ZzFTTjJXd0VvK0REa09iUGVscEVIWGtkMG0zRE5Ja3VqVk5LTkY5VEllemYxcXhwcGRDSW1oZjhOd25hcnY0UC9WT01NLzN3UWN3NjRESUp1M0JuanhEd0lEVWpOM25hTW1vamV6bTZQRERjRngrT2w4TzVRdXcxOEdRbTRDOGE1aC9SU3o2UGNGVzZnQlRGMlRHVnhWUXFPbkdaSWFLR1l5YWRPQlV3V2h3cEZNNFkxTXBZQWdIWHEvQnRlTythS2JjR0lVV2dNS0t5TlNSNk5oOXV1Z1lzN0NDcUhDejB3cWdwM1lmWWJIbkVsRVpoZ1dmSlA1NDNmZCtPUzQxSU1xc3pHak02SkdtVXZ2Zzl0SHlFZ3ZDSVpUSzNXRUhBUkNMbWNpZGlSOFRCM2lRQnF6MUJxUnFXSi9EQVJFOFMxSi9VNEl4TDBFV0JnYjZJK1FMeDV4ZVB4cmRWNVNmclorRjJHRWpzVVpYVk5IZ2FETWROV2tzUU5aL0hBS2NOR21VMG52RUVCSSt6T21FMWl4eFhQbTRtMWJCSkhUK2tWSGt3bzhwWEVBa2FzWndUV0MyQUZmUlZZdzAvVVk0dExxMVlxTFNqWnl1YVI2ajV3SmI0QW0reVQzR1dWWHVjM1lnTlU4M2diYmxjOEpLc2ZValEwTDVqM3BVRmNYSUdjb0FWMEM3dytiNXFSaUpXeEJFcmtuOFp1WGV5V0FvV2ZlbWxBeGRwdkxkdy9yaHFYYnZhc0VYWThzQzFoZnlLY3BCOGI3bGJ5UDFYQWU0V3NjTHp4VU5iZDNYMjFOWTNQRUZ6d1h1THR0NVJmNWlLUFNXUUlqc0l2ci9Wcllidy9PQzdDTDh2TS9CVEhIWjU1WWFKTXBET3Q3UnRhdHBaT2R3Mm4xNURoK3RMalM4QWZ1WGpQUnpldWI5UUJ6VnZkcllKaFFFVUgybWt2MHk0OThCR3duZnZpanRvRmJVM1NkcTJYL2QwUzN0THl6U0w5MU56ODJPZ0JQZ3NhdSt5Z1QrdE9BZzUxSENmWGRHZnluR3FFUlR2YThBMnFQTDdQYTJOM0xzL25aZEFLOTl5NkNrMjU2NURMVzNVeExKUlkrMnQ5L3h1dnJQWjB0cFNXYjZ0MHJmVjByU1AwOUhXdXE2MWRieTFUUXVpRXJ4TXBKZmNwcmRERlRVUFZiTkZOenRZYWoxbCtkVzhuNXBiWHVRMHExdWFENE1ub0ZDaTM5MG51aGpmOXlEWXZ4eXlJM1NhRjEwWHgwcmxKaXc2M2Eza1U2cDFLMmR3a3Z5eFd4eXIxYzhUT2tGT1hXS0txajNiaXZJRVgySEdiYnBBWXVYRGpxcEQxc0UrbjFadG5jUkpybW1nY25pVkRPdXd2UFdTQ3V5d25uOWFZN1V2MDFETjZ4RFR0MXFsUTllN2hVdGJoTUtXcGNKRUJTRmI5ZVVZWEFKSDVucTBrdnNoRG0xRnJXVzM4bzdCMjlCbHo4NTlXeVBQQTErYmp3YXArUHhraHRkMUlLSXc5ZnpseWs3VjJrNU1ubXVWWHNtdHRVTnpySDN4dHRZSDZKcWpPS0syUStlbXYxNzVQcVEzOFQrOW02Uzd5ZlU4cThEK0J4aFRSZUhDdmpUbldrQU05MUpZMlFrYjVBR1BRcVdKcUE3Nm5sdyt3L2U5T1lCaXBpNGQya3RJZU9ST3YxQkZjVythZ0NoQTNlc2xFWFVHYmNJR0FSVGM0bmhUMTFCWjY2WFh6VEZMRk55WklUNU1MVytyeUJtb2RXMlZyRVhEUk1acVJELzJxeU1MNzJYZ1FwR0VMZk5vejcwZ3ZvN0JrQnp4V3A2ZWhBVmFjbnBldFhrTjZ4SkdkZ2lKeWhwSmg3YUNNSWdETWNwUlQ4cWlhTHZMN0dhTlUrWm40dWlscmdhM1lvTStpS3NISHFqOUd1NG5ncnBGSG9XcnZsRlFQc1BjcHhsanFPTHN2ZG1tamJyZW1zSHJhOSt1U3NHRCtvVnVwYnNPYjdGeFpZVTZzcXhSYmR4MG5XT3hra2tpdXM0dm53L0swV0NKUjV1STc1WFhUMzE0QnMrOURUbkJ4YnlSbU5HNXd3NUJnV1BVSmhuWnNsMldXM041KzNVcmRpVTBMaXF4SUM5ZkpodWZObCtXVEpxdTBMY1Nra3hYNHpGQWU1UldSTFZjUGo1VE0xTkZSdFA1YmJma2MvWWJOTlVJaUxucFRCTFRzcnNwZ0NNWngybkZha012SnVjb2lqd2FVTWFLZUw3UVF1ZWo2S08yM0pGbFFJdFV1all6Ty9TWXVFMDdmYnZJUk5HOE1uY3BvNWQzbDVsSzBqSWptZHU0OVk5Ylg2bzI2WWxaYzdQZkhmOTB2TWRtSGx3WlFUeUhETlgxR2w1azFqN2NQNC81TU5FcDQwUUp6VE0zR0xpdjBKcmZCUjR1QWZmMHFCQk1XMEtVNFZtcTJPTXFjTE1kVERldmFQaUNtYlk0d1l5VkwxZ1pOblZSc2o0SExwYUF1ZWFucTRMY0NwbFhwUktpa3ltVTZZYWM0ZXUrRUlvKzEvTjUrczlGd2k5MFFQMk5yZ0NLR3BURExES1dMYVJXNmtiUGFtTjNFWm1LUklRUXlkVWViRVMwK1hHcWRxaGJnTVNtNHVIOWhiN3dBYXFPSVYyQzRLUFV2bUlFTDFBUGZBMzRLNWxtaXhWMzZHODBLTHNiVW8xQ251ckN5QlJGN2tjRlMrOUVzWVgvelFmZjhCL2JmZFBreXpzcE1JNHFqcG5zWHJyQW83LzFxZGZuUzBUTTNBYVMyVVR2UjhlTFZ1TGVqdXdMbEhkYnduVVdYWkZWbW94aG5hTExqakNiTmZpWjJRSkpMZ2lLMjhxT3VreWx5eFp5ZXVKUDNDL3BJYlE2VEYydWhYZ2FjS1pXRmJ2Z3ozR3Z3aDVnYUdkdElDSFpkQVB3UGFDekl1amFlMWZNZE9GOTJkNFF3V0h2T1gyTEtESmxqMmk2Tmpmb2hxc2doRnV1RzloS3JhWE4wb2hWMEVPa0dhTExMek9NdnVoWEU4dlU1ZGJvY3Nab0RNbE1JVE55K1RXaTBKS0lMNURVKzAvcGQwZjBRNG02Q1hXcDhNSFFJK1Y5bmhuY3dTREtNY29RL2NoelY3OWJLYysvdnZnNS9TRndPNzkwN1BENXUvZFV5dmV2OUQyalgwWlpkQWVTUmkvdmY2cTgzV096SnhpWVdoaktIOXA2RG1LVWR0dzM1ZjRTeHF0Ykg3b2pTY1dIRnJuVytEN2xZbTFOaytIbWF5cndkUFJDdmZZbThNc2xqeG9mRWMyTXVEWDMydy9NTStpbHV2enJEWndUY2VsdHVwOXVodDBHbDQ4ZCtRbkhXMDVVc2p6WGEvbm4yYk5zODNUOUVIWm91OG50NDhzRk9QczE3ODkzQ2JYYjJzTkxXVEdOanBVNEFNT1RyTGhXeTQ1UFhxdVZScXhPVlFUV1NHTldoeXI4eUI1NDhvSldZQVBaWGNEaHpjS085Mys4QitPNVI4eEtxTjVjbW95a0ZDbzFyaFlGWUsyb2hHZXpSdFFWakc2cDhqbkFPbFVwaitQcWJjUy9ubElDTldRNEM3QkVjUDFPYjkvWW5jNnRhNEkzTG5KSVZrYjdObUhkV0tqMndyOVp6S1RpNzVzWEsxTkRlNXhkWTRvcHo4ckUvUWVuSC9jc1dYWXFGZG1iY1FqWDJBZml0cEJFR3BHN2ZQSXV2ZkNyS3hWYXY5WVFZbVdramc0M3FBTFRmSmR0ektvVXhueEUvM2ZST20vUmpLaTd1ekFuT2FnZ1NGblhucGJySUhDMkxOZVdvdkZsMnBacXJnbi81S0xrc2pFaUlNTmkvSWhFby9SRlpaZy9heFlES1MvWUpVenJVN3RnaDl1RG03anRwQ0ZJV2I4OTJ4MkkyeXF5TVNyZWJyOUlxMlBXc0oyTVhyd3JOU0loM1FBNUEyL1pVSUswMWZid3ZtWUVGOHFHcXBCaUxHWHFYUzhldXdaaUxJN1Y5cWFQTGhqMjBVSlA5MnFWRjZWNHZVUWRZczM4bDlCVmdTbmNZT0c3WlZrdGl0cmZmdnRCMmI3UUorS0dtbk5ldkpValdldmhpQkN2VWlHTlBkeUdlQVhMdDBKNGZwQ2MyR2tGOTlYVFVrRzRWL3RxcEtYSDllbXBCeFZudjJ1RFhYcGZFOG1zbW1OV2xPTVkyRit3eVZETUdTZENZZVBtWW02VG9kT3lDem5UNW5ESU5GSFFJaVg0WW5VNm9WM3E5VWd3bmN5bE9HYVNabytYU2FRbVZqdXpCazNHYUtRWFJ4Wnh1ZzFKdnMvMHcyRDRmMXZ4eVVRZUdCWjV2VElEKzRkYzhzZDRUKzNRdmxmQVhCK2FJNytVemM3ekZBK0xPWnhmNUtDOFFtMXZmOHhJQWRCb1V6bDFOS1ArUkhkRjRmaXA1bGNhbW5ZM2QxUzF2MWIvdFdQSVlpOFJoTDJrNVE1bmFVR2c4VG9hMTJpVG1GbWJVQTBVVFdoMENUT21TK3BpZ0hjbHBEaHg4R2FvdlNXakxYUXIwVklFb2gvejFLVVR0bjNYZU9nNzlEQys1Q1NVNlJyZFBlbVRYLzFzaWR2NkQ1Z1ZhVlpzSlRQblV6c2xWNnZGVXZYVkV1blZISWxFYzdWWFpwTkxiYkt2TWJCc2I2L2tzMytMb2VYVFY5SVFzZ01OOWwwYjJnSlpuUE5wT003dXZaNHVXYllkNTlSVE9UdzNKR1hwbnZxcWhiWCtHMERLVkN0Z0VsMVVMUlBmM2VyZ2tOOVBGNjRFRUhXWlJ0M0UyNjIxZlBTSGFqK3hTTDJIaGx6d2RUMnpxdmgvd1pkc0NFak5vNG91SUxkN0ljZTFiUkh3ZnBWV0JaaGpmWmlaVEF0Rk5WTUxnNmdXTWhocW1XaEswUjNFcG9LdHh5dVd6UzFxNW1ycE93cThlVnkzQy9GUmVSTUlIS2VaS0VJK2VZaXVvbWwyQ1BvTUZqWDZxOEJsdjBjRTNWdW9RazhLNXllTXBkTkhJSWtzM3hoTENTWGxmRThxdjN4K2p3OVFZcGhTNHpMSE5mM3p0ckVtTUowNEcwMTJVc1BYNSt0cXVrWGJWMmhLYlVrUlRJNmMrRHhEZmxNaHhvc0NJYy96Z0poSEZVdGRqeWx2V0NrcHVMNDJkV0RmcE9sdWFxbFoxaE5CdE5zTGZCR1JxVUptSVN2OVo0RkVla3Znald0c2JHcjhRZTUySTdpOUpmZ1JYZ09RdlY3YkpOYXQrT3R0WS9Rd3lrdU53SDRqQzFiNVpVdlpwNyt1cTJGa3VyczRtZ09oZHJXL2Q5amdUUTY3cGdLRHI4aG0vazdvOW83czUwNnkyQ2VlWTNQdU84Rm1uYnp2YnRZUExhMy9XL3JaRkpaN0dnSU0zNjdYd1BZamdNcHIvRU1nNFhvRG01R3VsMWdIczcvQ0lTYWIzenVnazA0TWFBMElWRVV2cm0zdXBXRFI4RGNLaGx0UU1GeU5naUVUSS9nbmU2MmtUZDZjMmRiazVXSERyeDdaSklzcWNLWXZTdUpSbElhaW9CdEZ3VHNvQ3Y2VW9nVEFkY2dKTGNnSnp5SW5QSUtjOEtHVW9pOTB3ZlNhUnV3QW9vK29xYnFSMnVjUnBnNC9jajNCVEpqOUtlWng0R2ZqbW1BWDVUbVdZQ2xUTU55bXp3UWx4V21EUjlWKy9pT2NKUFpmbUI2SGwrQUdqWTBvNHRSdDF2Y0h1NGJGYW4yeXorQWJSak5iOG8xU1RqZEdHcU5PeFg0U0lUVnB5Q1BYSTh5aGlUM0JBaVllM3pJVitLaGs1aVJDUG1qVCszU2xlcCt1QnZuZzVER0xRZkVYQThFQTluYnJuWG9Bc1h3eGU3K3VJdEFJZm8zNjhVZzNRbUJxK3dqb2JmUXgrZ1I5aWo1RG42TXZ3SmZnUGVrclV2d2FxU0srVmQ3RDcrRDN6QThlMnZoMkl6RDl0ZW54VkQ2SkM0NTEyeHQ4bGo1SGZUOVBmeHArb3M0SHRBVmR3WXpLbktxK1FzenhleG8zckd3TGNyZDJWZFFRTjFtWHgxUGN3QzF1NHNQYnpCTkVMdjJMYUxEZFV0UDJvYlF4SzhhekhvTzRXM2lEM1Q0OWZXZVUyZWZSM2Y3L3lMRllabURRWHZjOUs5bGFnVVVBTWVMZWZ4YXNBakNIZlZnQVpCNklkWXM1MFh1MTNicUxGOWIyNEk5WkQyc0RiaTE0L3o4Z3kxaXhsdGpndk9VQjVMb0FnQlhZemFsSmdzYU1yUjF0WFlkUlJsR0g5UlFkc0UrNnhtUmc4eUllbzhveFJ1TVFCU29QdU1PTVlNTGRzNHhHQ0orSDJTTWk1YWJ1cy93Q1ZZNXROQTBYbTB5OXhHTTBKdEFPcTFwZ0swQmRLQWY3REtHdjBNZm95OUYvWkdsYWxOdmx3bmxDY2hndFJMOWxXNkFyNEtOK29TZGdJeFhwSUp5RjI3Z08yTy9OQWxoMVZYZU5PeVBkOS8zU0lLQS9WQ2szOVk0RVBZaXVIZU1CSEpwV2ttM1FlSkVMUEVZTDBXOWdnWkthOXpHSHp2OGJJN0RIZS80WWJoZmUyRTlpb085Sk0zMjNidWJzU2tRdmlNdytuM1FOSlVlOHRPdHJ6eTV2MkVhNjdBMnhWWlRzNHU4eTFqam51NTNOQzNrRWJpRS9aanNpdWxPajIwUTY4VTZZRWltdHhrdXVDM3ZMOFlaTG8yc0ZFYWRReHV2RzlsRTBldDYrbGsrN01RSG9OMFBZbHNhWGIrdmFOM3RyMXk0MmRWbWtmU2JWNXhpM0JiVjF1MTFNOXdEMGxPekxYbllDUjkwdDR3dCtyaXVvS0ExOXl1d0QycExBSndRN1ozeStjSW5pOGtnNjE4blVTQVQyTzZWSy8zV0JJYTFoVDJldzdFb0ZTcmFNSWorVFdFMCs5NHJhSEFKd0VUOStaN3BsWEVqcTN4REgzUURnNUlHTys1TDhMMitKLytpd3p4UE14Z0VpQmdBSS9peVpvSEFtTVAwL2VFNWs5eTZpTmUxazZ3N1d6NHVjcnFUcHh5WjNCZVVKdjJSeXAzWEZUUFlkeUw3Skl3UjRSa2p6TjdhelhpMkNJTUUwcFRYb2RaYzdJU2pkK3JMNEZIeEdFeTNBUkhVQXgxVi9MWnZpamw4d1dWMm0xZlNDZitzd2MwVzA2T3FhNW02U0t6eXRSbmhRVmFnTTZNY2hSZ2tKTVhZRThZaEI5dW1Lb29UcEdScU5rSzRmeDRPVyt1KzRDcmNHWXJnVFo1dm1HOVRVanRmbmlxWVpVV1Q2VWcwZUUzaGtpVUc1bkJwZ2pGMTREWGJvK0RRUmJmcFYxM3pNcGxJSkN1YytWTEp4R2dhenhGd1dJM1pMbmo2NVg1MDB4QjAzb1owTUw0YVNQNkd2UVhLYnVQTXJVcXZtYVFoM1VHWnJSVVpOaVlvOXRYVFJVN3hHbGRTeXBZNDViQXJMVUxNenRBYjY1aW1kSU9hUkRZcElVRjVCc0lvN0tRNi9VelN3dEkyU2VkUzFrN1FvSVhQU2MwR1RGNHV6V2h4THh2d054RjdoOXIxMkxMWVhJZDlGRDVzck8vUzMyYktlV3paUEpxWC9BTTNRaDFwdWZTdDc2amlRdllFbDFtTTBlTTdUTWt3QUEzdDlTRG03NlphWEtMWjU2NXZwTzBpeHZmUXlDSTJqNUJPaFYvazJQaVYzc1J0NEtxRmwvbUR1RG5VejZtN1Z2NzhSUGIzSTFqUE1YVkNxVllpZitFVEZIblczcmNoTWI1MWUxdXVWcHpMMGxnR1RJQVVNYVJVRmNLQURzSUVFMFFJWm1LZnlEVWxGWlljbzJhNi80M1FEQ2FYc2tjTUdPSzJzNUtGenFQeWk3c2pmSjlTOE5Wb2pqOG9YMU1qdXlmRUVRSUNQY1dpbUFXZ2pMQndrSnEwT0pqaWRIWnoyaVkzT1p6c0VrZG5yRU5seW5TTllZbDV5aERLWFlnOGoxYnFUQ0Foc25DN3k1S3RRS0p0WGxtSXloVXU4TkxMQkJaaXl1UU9VeURiSmRFVW15RFdackw5Q2VhYVpZaElIN1VTMHVKWG1lYlRJaWpaQmNyRjgwMjg2SnlldjdFeTF4RVFPcXNtVHc3bkt0ZEFVWmV6eVRlRGxreTNYQkdVWjQzTEtwaDdRSEs3eHFlQVFldnRvY1dSbEV0SmxBMDFSWk1wUktUVkZYZXJweFZ4RnhiNjhuRjdqc3E3R2JkVTIwQnVlSVZKT3dzZkZxNFRQQklVU09MaTRKTXJRVno5OWRaTWhhUEM0V1RzWXlnRW5acXM0bXJ3WUtkeGV1UGxZS1RMSnFEUy9WNG80aENvK0R2TlFiL1FJK3ZIb3JlZmdNVFBNbTRZNXUwNzVQNkpJWGhIL2UxL3lud0VBKSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfWJvZHksaHRtbHtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fWh0bWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXBhcmFncmFwaCxwe2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpqdXN0aWZ5fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjE1O21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgyLGgye2ZvbnQtc2l6ZToyLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMyxoM3tmb250LXNpemU6MnJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yNTttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDQsaDR7Zm9udC1zaXplOjEuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNSxoNXtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OmJvbGRlcjtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg2LGg2e2ZvbnQtc2l6ZToxLjNyZW07Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19cCtoMXttYXJnaW4tdG9wOjMuNzVyZW19cCtoMnttYXJnaW4tdG9wOjNyZW19cCtoM3ttYXJnaW4tdG9wOjIuMjVyZW19cCtoNHttYXJnaW4tdG9wOjEuNXJlbX1wK2g1e21hcmdpbi10b3A6Ljc1cmVtfWRpditoMSxkaXYraDIsZGl2K2gzLGRpditoNCxkaXYraDUsZGl2K2g2LHAraDZ7bWFyZ2luLXRvcDowfS5kZWNve2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMSkgMCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTIpIDUwJSx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTMpIDEwMCUpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1zaXplOmNvdmVyO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO3RleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudH06Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9OjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX1rYmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Ym9yZGVyLXJhZGl1czoxMHJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtwYWRkaW5nOi4yNWVtIC42ZW07dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfWRldGFpbHN7bWFyZ2luLWJvdHRvbToxcmVtfXN1bW1hcnl7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mZWF0dXJlLXNldHRpbmdzOlxcXCJ0bnVtXFxcIjtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjFlbTtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0ubW9ub3NwYWNle2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlKX06aG9zdChtb25zdGVyLWJ1dHRvbil7ZGlzcGxheTpmbGV4fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleH1idXR0b257bWluLXdpZHRoOi1tb3otbWF4LWNvbnRlbnQ7bWluLXdpZHRoOm1heC1jb250ZW50O3dpZHRoOjEwMCV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFJpcHBsZVN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFJpcHBsZVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRSaXBwbGVTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHJpcHBsZSB7IFxuc3Bhbi5tb25zdGVyLWZ4LXJpcHBsZXthbmltYXRpb246bW9uc3Rlci1meC1yaXBwbGUgLjZzIGxpbmVhcjtiYWNrZ3JvdW5kLWNvbG9yOmhzbGEoMCwwJSwxMDAlLC43KTtib3JkZXItcmFkaXVzOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm06c2NhbGUoMCl9QGtleWZyYW1lcyBtb25zdGVyLWZ4LXJpcHBsZXt0b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKDQpfX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBDdXN0b21Db250cm9sIH0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21jb250cm9sLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0JVVFRPTl9DTEFTUyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2J1dHRvbi5tanNcIjtcbmltcG9ydCB7IFJpcHBsZVN0eWxlU2hlZXQgfSBmcm9tIFwiLi4vc3R5bGVzaGVldC9yaXBwbGUubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcblxuZXhwb3J0IHsgQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmV4cG9ydCBjb25zdCBidXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYnV0dG9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBBIGJ1dHRvblxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2Zvcm0vYnV0dG9uL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vYnV0dG9uLXNpbXBsZSBTaW1wbGUgQnV0dG9uXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL2J1dHRvbi13aXRoLWNsaWNrLWV2ZW50IEJ1dHRvbiB3aXRoIGV2ZW50XG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIGJ1dHRvbiB0aGF0IGNhbiBtYWtlIHlvdXIgbGlmZSBlYXNpZXIgYW5kIGFsc28gbG9va3MgZ29vZC5cbiAqIEBmaXJlcyBtb25zdGVyLWJ1dHRvbi1jbGlja2VkIHRoaXMgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkLiBJdCBjb250YWlucyB0aGUgZmllbGQge2J1dHRvbn0gd2l0aCB0aGUgYnV0dG9uIGluc3RhbmNlLlxuICovXG5jbGFzcyBCdXR0b24gZXh0ZW5kcyBDdXN0b21Db250cm9sIHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+aW5zdGFuY2VvZjwvY29kZT4gb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvZm9ybS9idXR0b25AQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0J1dHRvbn1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSA8Y29kZT5CdXR0b24uY2xpY2soKTwvY29kZT4gbWV0aG9kIHNpbXVsYXRlcyBhIGNsaWNrIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvY2xpY2t9XG5cdCAqL1xuXHRjbGljaygpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uY2xpY2soKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5mb2N1cygpIG1ldGhvZCBzZXRzIGZvY3VzIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvZm9jdXN9XG5cdCAqL1xuXHRmb2N1cyhvcHRpb25zKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmZvY3VzKG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmJsdXIoKSBtZXRob2QgcmVtb3ZlcyBmb2N1cyBmcm9tIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICovXG5cdGJsdXIoKSB7XG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZSBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcblx0XHRjb25zdCBhdHRyaWJ1dGVzID0gc3VwZXIub2JzZXJ2ZWRBdHRyaWJ1dGVzO1xuXHRcdGF0dHJpYnV0ZXMucHVzaChBVFRSSUJVVEVfQlVUVE9OX0NMQVNTKTtcblx0XHRyZXR1cm4gYXR0cmlidXRlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvYXR0YWNoSW50ZXJuYWxzfVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0c3RhdGljIGdldCBmb3JtQXNzb2NpYXRlZCgpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgYnV0dG9uLlxuXHQgKlxuXHQgKiBgYGBqYXZhc2NyaXB0XG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLWJ1dHRvbicpO1xuXHQgKiBjb25zb2xlLmxvZyhlLnZhbHVlKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfSBUaGUgdmFsdWUgb2YgdGhlIGJ1dHRvblxuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgdmFsdWUgb2YgdGhlIGJ1dHRvbi5cblx0ICpcblx0ICogYGBgamF2YXNjcmlwdFxuXHQgKiBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci1idXR0b24nKTtcblx0ICogZS52YWx1ZT0xXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwidmFsdWVcIiwgdmFsdWUpO1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzPy5zZXRGb3JtVmFsdWUodGhpcy52YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsYWJlbHMgTGFiZWxzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuYnV0dG9uPVwiPHNsb3Q+PC9zbG90PlwiIEJ1dHRvbiBsYWJlbFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gYWN0aW9ucyBDYWxsYmFja3Ncblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGFjdGlvbnMuY2xpY2s9XCJ0aHJvdyBFcnJvclwiIENhbGxiYWNrIHdoZW4gY2xpY2tlZFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY2xhc3NlcyBDU1MgY2xhc3Nlc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2xhc3Nlcy5idXR0b249XCJtb25zdGVyLWJ1dHRvbi1wcmltYXJ5XCIgQ1NTIGNsYXNzIGZvciB0aGUgYnV0dG9uXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGlzYWJsZWQ9ZmFsc2UgRGlzYWJsZWQgc3RhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGVmZmVjdHMgRWZmZWN0c1xuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGVmZmVjdHMucmlwcGxlPXRydWUgUmlwcGxlIGVmZmVjdFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZT1cImJ1dHRvblwiIFRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSBidXR0b24uIFBvc3NpYmxlIHZhbHVlcyBhcmU6IHN1Ym1pdCwgcmVzZXQsIGJ1dHRvblxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0bGFiZWxzOiB7XG5cdFx0XHRcdGJ1dHRvbjogXCI8c2xvdD48L3Nsb3Q+XCIsXG5cdFx0XHR9LFxuXHRcdFx0Y2xhc3Nlczoge1xuXHRcdFx0XHRidXR0b246IFwibW9uc3Rlci1idXR0b24tcHJpbWFyeVwiLFxuXHRcdFx0fSxcblx0XHRcdGRpc2FibGVkOiBmYWxzZSxcblx0XHRcdGFjdGlvbnM6IHtcblx0XHRcdFx0Y2xpY2s6ICgpID0+IHt9LFxuXHRcdFx0fSxcblx0XHRcdGVmZmVjdHM6IHtcblx0XHRcdFx0cmlwcGxlOiB0cnVlLFxuXHRcdFx0fSxcblx0XHRcdHZhbHVlOiBudWxsLFxuXHRcdFx0dHlwZTogXCJidXR0b25cIixcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItYnV0dG9uXCI7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtSaXBwbGVTdHlsZVNoZWV0LCBCdXR0b25TdHlsZVNoZWV0XTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtpbml0RXZlbnRIYW5kbGVyfVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblx0Y29uc3QgYnV0dG9uID0gdGhpc1tidXR0b25FbGVtZW50U3ltYm9sXTtcblxuXHRjb25zdCB0eXBlID0gXCJjbGlja1wiO1xuXG5cdGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmN0aW9uIChldmVudCkge1xuXHRcdGNvbnN0IGNhbGxiYWNrID0gc2VsZi5nZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIpO1xuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1idXR0b24tY2xpY2tlZFwiLCB7XG5cdFx0XHRidXR0b246IHNlbGYsXG5cdFx0fSk7XG5cblx0XHRpZiAoIWlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFwiY29udHJvbFwiLFxuXHRcdCk7XG5cblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgTm9kZSAmJiBzZWxmLmhhc05vZGUoZWxlbWVudCkpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y2FsbGJhY2suY2FsbChzZWxmLCBldmVudCk7XG5cdH0pO1xuXG5cdGlmIChzZWxmLmdldE9wdGlvbihcImVmZmVjdHMucmlwcGxlXCIpKSB7XG5cdFx0YnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBjcmVhdGVSaXBwbGUuYmluZChzZWxmKSk7XG5cdH1cblxuXHQvLyBkYXRhLW1vbnN0ZXItb3B0aW9uc1xuXHRzZWxmW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfQlVUVE9OX0NMQVNTXSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdHNlbGYuc2V0T3B0aW9uKFwiY2xhc3Nlcy5idXR0b25cIiwgdmFsdWUpO1xuXHR9O1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09YnV0dG9uXWAsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRpc2FibGVkIHBhdGg6ZGlzYWJsZWQgfCBpZjp0cnVlLCBjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlIHBhdGg6dHlwZVwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgcGFydD1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuYnV0dG9uXCI+PC9idXR0b24+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJpcHBsZShldmVudCkge1xuXHRjb25zdCBidXR0b24gPSB0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdO1xuXG5cdGNvbnN0IGNpcmNsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuXHRjb25zdCBkaWFtZXRlciA9IE1hdGgubWF4KGJ1dHRvbi5jbGllbnRXaWR0aCwgYnV0dG9uLmNsaWVudEhlaWdodCk7XG5cdGNvbnN0IHJhZGl1cyA9IGRpYW1ldGVyIC8gMjtcblxuXHRjaXJjbGUuc3R5bGUud2lkdGggPSBjaXJjbGUuc3R5bGUuaGVpZ2h0ID0gYCR7ZGlhbWV0ZXJ9cHhgO1xuXHRjaXJjbGUuc3R5bGUubGVmdCA9IGAke2V2ZW50LmNsaWVudFggLSBidXR0b24ub2Zmc2V0TGVmdCAtIHJhZGl1c31weGA7XG5cdGNpcmNsZS5zdHlsZS50b3AgPSBgJHtldmVudC5jbGllbnRZIC0gYnV0dG9uLm9mZnNldFRvcCAtIHJhZGl1c31weGA7XG5cdGNpcmNsZS5jbGFzc0xpc3QuYWRkKFwibW9uc3Rlci1meC1yaXBwbGVcIik7XG5cblx0Y29uc3QgcmlwcGxlcyA9IGJ1dHRvbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibW9uc3Rlci1meC1yaXBwbGVcIik7XG5cdGZvciAoY29uc3QgcmlwcGxlIG9mIHJpcHBsZXMpIHtcblx0XHRyaXBwbGUucmVtb3ZlKCk7XG5cdH1cblxuXHRidXR0b24uYXBwZW5kQ2hpbGQoY2lyY2xlKTtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KEJ1dHRvbik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgU3RhdGVCdXR0b25TdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRTdGF0ZUJ1dHRvblN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgc3RhdGVidXR0b24geyBcbltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmF5LTE6I2Y2ZjZmNjstLW1vbnN0ZXItY29sb3ItZ3JheS0yOiNlMmUyZTI7LS1tb25zdGVyLWNvbG9yLWdyYXktMzojOGI4YjhiOy0tbW9uc3Rlci1jb2xvci1ncmF5LTQ6IzZmNmY2ZjstLW1vbnN0ZXItY29sb3ItZ3JheS01OiMzZTNlM2U7LS1tb25zdGVyLWNvbG9yLWdyYXktNjojMjIyOy0tbW9uc3Rlci1jb2xvci1yb3NlLTE6I2ZmZjdmOTstLW1vbnN0ZXItY29sb3Itcm9zZS0yOiNmZmRjZTU7LS1tb25zdGVyLWNvbG9yLXJvc2UtMzojZmYzYjhkOy0tbW9uc3Rlci1jb2xvci1yb3NlLTQ6I2RiMDA3MjstLW1vbnN0ZXItY29sb3Itcm9zZS01OiM4MDAwNDA7LS1tb25zdGVyLWNvbG9yLXJvc2UtNjojNGMwMDIzOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMTojZmZmOGY4Oy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMjojZmZkZGRmOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMzojZmY0MjZjOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNDojZGUwMDUxOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNTojODIwMDJjOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNjojNTEwMDE4Oy0tbW9uc3Rlci1jb2xvci1yZWQtMTojZmZmOGY2Oy0tbW9uc3Rlci1jb2xvci1yZWQtMjojZmZkZGQ4Oy0tbW9uc3Rlci1jb2xvci1yZWQtMzojZmY0NjQ3Oy0tbW9uc3Rlci1jb2xvci1yZWQtNDojZTAwMDJiOy0tbW9uc3Rlci1jb2xvci1yZWQtNTojODMwMDE0Oy0tbW9uc3Rlci1jb2xvci1yZWQtNjojNTMwMDAzOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMTojZmZmOGY1Oy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMjojZmZkZWQxOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMzojZmQ0ZDAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNDojY2QzYzAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNTojNzUyMTAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNjojNDAxNjAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xOiNmZmY4ZjM7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTI6I2ZmZGZjNjstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMzojZDU3MzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi00OiNhYzVjMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTU6IzYzMzMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNjojMzcxZDAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci0xOiNmZmY4ZWY7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTI6I2ZmZTBiMjstLW1vbnN0ZXItY29sb3ItYW1iZXItMzojYjk4MzAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci00OiM5MjY3MDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTU6IzUyMzgwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNjojMzAyMTAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMTojZmZmOWU1Oy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMjojZmZlNTNlOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMzojOWM4YjAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNDojN2Q2ZjAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNTojNDYzZDAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNjojMjkyMzAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTE6I2Y3ZmZhYzstLW1vbnN0ZXItY29sb3ItbGltZS0yOiNkNWYyMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtMzojODE5MzAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTQ6IzY3NzYwMDstLW1vbnN0ZXItY29sb3ItbGltZS01OiMzOTQxMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNjojMjIyNjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTE6I2U1ZmZjMzstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0yOiM5OGZiMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMzojNWM5YjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTQ6IzQ5N2MwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS01OiMyNjQ1MDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNjojMTgyNjAwOy0tbW9uc3Rlci1jb2xvci1ncmVlbi0xOiNlMGZmZDk7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTI6IzcyZmY2YzstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMzojMDBhMjFmOy0tbW9uc3Rlci1jb2xvci1ncmVlbi00OiMwMDgyMTc7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTU6IzAwNDkwODstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNjojMDYyODAwOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTE6I2RjZmZlNjstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0yOiM1ZGZmYTI7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMzojMDBhMDVhOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTQ6IzAwODE0NzstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC01OiMwMDQ4MjU7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNjojMDAyODEyOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTE6I2RhZmZlZjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0yOiM0MmZmYzY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMzojMDA5Zjc4Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTQ6IzAwN2Y1ZjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS01OiMwMDQ3MzQ7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNjojMDAyODFiOy0tbW9uc3Rlci1jb2xvci10ZWFsLTE6I2Q3ZmZmNzstLW1vbnN0ZXItY29sb3ItdGVhbC0yOiMwMGZmZTQ7LS1tb25zdGVyLWNvbG9yLXRlYWwtMzojMDA5ZThjOy0tbW9uc3Rlci1jb2xvci10ZWFsLTQ6IzAwN2M2ZTstLW1vbnN0ZXItY29sb3ItdGVhbC01OiMwMDQ0M2M7LS1tb25zdGVyLWNvbG9yLXRlYWwtNjojMDAyNzIyOy0tbW9uc3Rlci1jb2xvci1jeWFuLTE6I2M0ZmZmZTstLW1vbnN0ZXItY29sb3ItY3lhbi0yOiMwMGZhZmI7LS1tb25zdGVyLWNvbG9yLWN5YW4tMzojMDA5OTlhOy0tbW9uc3Rlci1jb2xvci1jeWFuLTQ6IzAwN2E3YjstLW1vbnN0ZXItY29sb3ItY3lhbi01OiMwMDQzNDQ7LS1tb25zdGVyLWNvbG9yLWN5YW4tNjojMDAyNTI1Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMTojZGFmYWZmOy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMjojOGRmMGZmOy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMzojMDA5OGE5Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNDojMDA3OTg3Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNTojMDA0MDQ4Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNjojMDAyMjI3Oy0tbW9uc3Rlci1jb2xvci1za3ktMTojZTNmN2ZmOy0tbW9uc3Rlci1jb2xvci1za3ktMjojYWVlOWZmOy0tbW9uc3Rlci1jb2xvci1za3ktMzojMDA5NGI0Oy0tbW9uc3Rlci1jb2xvci1za3ktNDojMDA3NTkwOy0tbW9uc3Rlci1jb2xvci1za3ktNTojMDA0MDRmOy0tbW9uc3Rlci1jb2xvci1za3ktNjojMDAxZjI4Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0xOiNlOGY2ZmY7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTI6I2I5ZTNmZjstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMzojMDA5MmM1Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi00OiMwMDc0OWQ7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTU6IzAwM2M1NDstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNjojMDAxZDJhOy0tbW9uc3Rlci1jb2xvci1henVyZS0xOiNlOGYyZmY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTI6I2M2ZTBmZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtMzojMDA4ZmRiOy0tbW9uc3Rlci1jb2xvci1henVyZS00OiMwMDcxYWY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTU6IzAwM2I1ZTstLW1vbnN0ZXItY29sb3ItYXp1cmUtNjojMDAxYzMwOy0tbW9uc3Rlci1jb2xvci1ibHVlLTE6I2YwZjRmZjstLW1vbnN0ZXItY29sb3ItYmx1ZS0yOiNkNGUwZmY7LS1tb25zdGVyLWNvbG9yLWJsdWUtMzojMDA4OWZjOy0tbW9uc3Rlci1jb2xvci1ibHVlLTQ6IzAwNmRjYTstLW1vbnN0ZXItY29sb3ItYmx1ZS01OiMwMDM4NmQ7LS1tb25zdGVyLWNvbG9yLWJsdWUtNjojMDAxYTM5Oy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMTojZjNmM2ZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMjojZGVkZGZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMzojNjU3ZWZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNDojMDA2MWZjOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNTojMDAzMjhhOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNjojMDAxNjQ5Oy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMTojZjdmMWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMjojZThkYWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMzojOWI3MGZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNDojNzk0YWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNTojMmQwZmJmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNjojMGIwMDc0Oy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMTojZmRmNGZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMjojZjdkOWZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMzojZDE1MGZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNDojYjAxZmUzOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNTojNjYwMDg3Oy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNjojM2EwMDRmOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTE6I2ZmZjNmYzstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yOiNmZmQ3ZjY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMzojZjkxMWUwOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQ6I2NhMDBiNjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS01OiM3NDAwNjg7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNjojNDQwMDNjOy0tbW9uc3Rlci1jb2xvci1waW5rLTE6I2ZmZjdmYjstLW1vbnN0ZXItY29sb3ItcGluay0yOiNmZmRjZWM7LS1tb25zdGVyLWNvbG9yLXBpbmstMzojZmYyZmIyOy0tbW9uc3Rlci1jb2xvci1waW5rLTQ6I2QyMDA4ZjstLW1vbnN0ZXItY29sb3ItcGluay01OiM3OTAwNTE7LS1tb25zdGVyLWNvbG9yLXBpbmstNjojNGIwMDMwOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMTojZTViODc1Oy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMjojZDlhMzYyOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMzojYzA4YTRlOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNDojYTc3MTNiOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNTojOGY1YTI4Oy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNjojMzYwNTA1Oy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xOiNmN2Y1ZWY7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTI6I2U1ZTJkOTstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMzojY2JjNmIzOy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC00OiNhMTlkOGE7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTU6IzdhNzU2NjstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNjojNTE0ZDNmfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UmFsZXdheTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBRko0QUJJQUFBQUF0M0FBQUZJUUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR29FOEcrNDZISVU4Qm1BL1UxUkJWRVFBaFFnSWdRb0pueFFSQ0FxQnVneUJtbkFMaENJQUFUWUNKQU9JUUFRZ0JZVVVCeUFNZ3h3YmZhUVhhSmVmbU56MFpvbDN2NjBjUGVaTXBHNEhKU2prNXFJSU5nNkNHTWdsWmYvL24zRjBqT0dHRFJBMXJYZUluY0pJVWtOSEduNjlxTVJEVThaYWpqczlVYnNtdG5xbkUzdjN2cWlRbWZSUXBMa0tXNlFad2FsNnM1SVVpSk5VU1VHL093b0RZNkI2NzVPalNqa0RTU011MnBlZHB1OXZKSUxVbEpkNzA3RCtlTEhwallESTRlMXVEbkxqSEh2eHBEWEdNeWR1TExuMXF0MEZDUU95RnNKWkUxK2tKcTNUK0llN0JKRklOT0FOYmk5dlRVemhJN1c0R21VTDBsV2pUL0ZRUWkvbSsreHVQUDAyb21SSGU1cG40RGdmTlpmbitSOXo5Nzl0bUVlTmFxMVJ4UnFIVGpUUE5BMkpGRWdySGRvL250L1cvNXpiZ0dDeGlhNkVrVmlBMkZoWUdJdFJtRTFadlZVdnF0U3RiN012cmQzVzcrdDIrMFhkb1RuenpqWWJwN21TSExBQ2toTVdnQ1RMNnMwV3YwQVVvaEpmRXFFM29wUGQ1OGlrSm5LbG8rM3VhZVNIWUo2ZmNJY1hqZCtyS1VFc2FFbFRxbFVsVlJtL04rZS84aVAwTDVBS296TmxKMy85aUJ3c2hNNnY1SklVSnlrZ1QzZmRyT21xNkxjcytaK3EvWHNBWEZ4RUVpUUlVYUtvc0ZuN2N0VCs3QkJTNWRxRG9sSlh1bmJsN3J0dHpEL3YzODRMZnRKYWdGRkFMWVBFNUE3Z25NclpCaHQ0bFhxc2JaS21iZHEwVHRPbXBtZ05pdWdNMlBZQmM3M01yanE3R0xzb1hIY1RwdDl1UHZGRHo4ZU4zZytzeHJQUUF3NkRURk5wL09aSTlpaW5OaXRaaFJtcFFPQ2tkb0JkQU5qVldsYXZNaXR3RE5KWC9wWUlBa1Z3bk9QL3ZXNXh6b013N1NBRkFLVStaei9rblAvWjlqK09kZnJMOEtlMnZkS2JtcGh1eEpTdUw4RVVBZ2dISWlCSFArNDQ0RUR6djFQVFEzWWtPY09TbFRIbWo2VXNkZm8yTCsvanBZZTdJSFdjUVVnY2drcExGUjFZVFc4Q0dLUVg5YjhHRkFBQUg5dG80UkhRNkdMdkZScmk0RGl3VHpBQURETUtEUHIvZlozVi9xZGdQbWtHektURW1XRVhiN1EzdHRnVFlxbzJuUDYvKzk3WGYrRi85SkhBVnNJSWNBQ0Jad1J5a0dUN2dDUjhWb2hKY1VPT1NEamlTYkFwaE1vem0ySlJwdEJ0VVc2OVhiTkZHM0lWeTJLTG9rNDgvTGZzbTUyN0lhcUJMTXVCYk9GSXdlRlVkMDF2ZUwrWTh4V2h0emNxVG0yQ0lUYzVlTEp3U0k0ZllsTFlGSVZIQXMvL1Q1M040L1l4MWhLR1UrSFNxRXJkcFBQbnM2ZnFxV0pzTmJaYUNsUXRqbE9MVU1zaGNkb0E1VFFzczRKTGM5MFN4Q09NTVVLNEtQOU5zaHB6cFg0dnd4S0NoQ0FTUkVSRS9MS3NXUmxKd05LQWNUblhBaEV5M3IxS0hjWmEvWWRYNTg0MjAvaWFYbXRHaG9DQWlJaUFSMjN2L1A5K0tUQUNBTjVoZGtDM3hVQzRFTHNnZ3ZrUjJrckVqWVNFdjBCS1NtSENoSXZZT0NBSmtLUWd5WU1NMlFvVU16Q28xNkJKODVxQVdDQ2RIZWszQUIwT0RMMUxxMFBnVGUzaFN3MmZoaTRYaFB1ZXVRV0VINnh0SUVRQWJHMk5tNW9WNTRRRlAreUtnTzJENFQ1dC93ejJYVzkyL3JwcXBMVFNJUDhxVjl2THZPZHMwTkxXeVg1MUs2b2ZidlBaRTFwYWY3dzMxOEM5WnRocTdmMzJiZnVMNjRWWkh3NTE0WXNtNWxnZk5iZkc3Vzlsc1VBNEVHejcyM3Z4d0d6cDRmUlIrbVA4THM1QjdLQjJlREpYYzZ4d2xHNjkwMnVnN0F6TEE4TlkyMUIyZEIvUDVxZk9WOHQxb255TDVqWkREZlFJNVJnOEQ5OEZ2SHN2Y2xIdUpzcmR2c0pycGMvVHIvZ3UvRWZaSnpYVXpwV2FEajdNNytVUDgvOEVrQUFWYUFTL0NSK1hzL0pONFlhSWNPMXhIWmNVYU1NYmtscnBLeTdOZlFKS1FjVVJhZ29HbUNXK0hBNkVOdmJnMzNzbDJwSVlSbUU5YklIYjBtQTZrazZsTjVHZHlNTjVFYm1RaHhIS2x3TWdUNThjZ3c3cGRVUno3bmZNY1FmY1UzdkljelZrZHJoWDhYSHE0MDEydEZPZDdrVC9hN3A3bTgzV0E3MUY3YU85TStkanZkZDZqN2Z4bStEMVB1M3ozdWlydm11eXphNTN0cnY5M2xUYjgyUlQyS2FGVlVLTU5QMzZCdlFNQ28wR3NFZGtMOHMrekxnMUV4Yk0wTmdDV0F4Z3pmODJERzFLWE1mYzRyak5jUWZIS3hTQ3VSdUJJNUFvZERERGtHZFY4Q25WVkVtRU1haW40U2EwQVhUSTBSQk5wT1lBTFZxMWFWOXZ4SmlVekhLV0NpczZtcDBCdWt4MDY5R3I3NHNuVk5ic29DbWtWTW9wNStwREdhV3oyc0xEcjJpTnQrb1pPMGIzNllTSWpXY3h2bmxOMHgwVmhsWW9XNFVSalhYS3lMRzNZM3FvTGRFYXpIQUVFb1Z1TWwzRERlRVJWcEcvamVURVIwQ1VaRVUxbW90cUZvaXdKRktVYURGaWFjU2xCSnJFalNRS0ovQ1NGU21TS2sxNjFRbGtkS2V5U1hZenNkWEtpNkk5aWtOSk10Q1VLbE91UXFVcTFWSFQxenE2K2x6ZlFOQUlhNUpwUm92V2FFUDdaeHVObVRqTUxCWXVxM1hVVGdOZFJEZDZVcTlBMzNjYnhBenhERE9OMEl4YU5WYXhkLy9zL2FqeEFFNkpuUGJGR1prdUMzdWFOVThFc0RTTFpWbXhPajFQZDhIUXhYU3BlZGtYYXdiVzZ3Wm84KzZEcml1UUZGdzVJcHZuSmg2L1pnRkpLOTMwYUVNMlhKM3lKQjBESG9waGJxZzB1cmt2TUlnWWx0YkdSUGNka2Q3VmovTlY0cGJBYmErL0U0QmpDZzlwNVplcmkvcGRNMENHLzd0WFpOeFZFKzZiWWF2UW42dW1Xd3kzRlhmNmdnK1huQXRIRGdqa1BOaVVicXBvd3ZEVXZiUmxjajVYWkhZelY4Smk0TmwxdmpzT2hyTWF4T0h4ZUR3ZWp6L1ZJSEpYbjZIMHdoZzZxRk9FVXFRbzBXTEUwb2hMQ1RLSjB5UTVMVTl5UlFwU3BVbGZabkFTQmtXcGxDbFhvVktWNnFpYlRCdE1tUUtZWVdIVlVVZnRHSXQ2Mmxkbk1IM0VwaVUwcVZRcUhiQ0x4T1UrRTQvMVhMZkJFaHpLaGdVY2dVU2hmeHdtRHo5RzVFUkFBSEw3RkhSS1F5cm53dXhRZjVyaEhCRUJSSW9TTFVZc3pVYmM0cnRNZHBsMjZGZ2Q1NXRnUUc4eC9mQVoySnpJdkdibWxyY1hBbTN3WEthN0VsZlBjUzJ0eGZxK2VnZmlIR29ETXh5QlJLSHZ5M1NKMzBRNlY4KzZtZGZac2FGVjNlT1VLc1dNeW5raHlMMXU0VkkwTDFTSkxJeFh5WXpwTHlOcWlXejBYVHBrYVR5bjFaRHRpOTBtWTAydjB0VXF0elNDbCtxcks3ckl1djF2OVJEMHNneHFHYkpvR0dmRWtsRTFZenIyOE8xbDJLZXdYOU40QURhTjFiN0wwSWFSVFhPdXk5eWl1ODJwT3dIUUJDK3BsZENyT21LME1nL3IxdlJZRW0zREJFY2dVZWdtVXgwM0c0K3dpdFFnT2ZFUkVDVlpVWTNtNHRtRUl2d1VLVXEwR0xFMDRsSUNUdUkweVRxdEZjbEVDbEtsU2E4NldFWjNKSnZzRldpN0l4S0pPQndPaDhQaGNFVHJSTjN0RHBsTUpwTmhSSWFpcUFpR1lSZ21jYmtzeTROb3ovcm9mUUw3S2NhbE5EMEZPVzNSR1p1T0JSMnhtVk14a1Vna0RsMFg3dUppdXRTOGJOR2FFK3YvWlFPd3FlODZHSUllRXNDdW92V1lmQ3EydHZwTU9CTjdNek82OEdXWExodG1nVzJmZmVIcDFNdTdxd1g1TkR3VGtwQ1NjZWZCa3hkdmZpbkFSSVJJVWFMRmlLVVJseElBaVpFMHJWcTY1SW9VU1pVbXZlcVVNcnBzL3oxWldFWjVZQmdHQUFBQUFBQ0EwV1pzZDFDcCtIdytuMi9jT2xrNHJEcFNsMUszSHIzNmpnMUNUdHd6T2NOdUNYWU5naURZaG90SDFvZ09MUlN1eDhuaWw0cjJpWWF2MG5vcnpYdloyblpqWkxmYUtEK1ZSZ0gvZmdObXBrRmJoZ2lHaVVhY0dmWE5tSzQ5RlB2WTl0dmJjVG03NSszZmRhbVc2WVN0d2tkemFDSFpjdnEwQ1M0aVU1Wm1OeExYR0JlL3JRb0hqTVAxL1FFR1ZNWkZKZ2JEREovNVQzZXlCY3ZHUFNxVGltSmNDK1lRVWpxR3YybkM3cTNuQjBET3F2MkczVnZsSWhLSVc4TVJTQlM2eVpUaU5HRlgrUkdDREhzOFBZSWRUamRBVUF5dlFrd1NDcHBoTmQyMG1wdU1qUVhLQlFrV0lqUXBtSlJVS1l4S1hjTERjNmtJZkhhVEthT01TYzRNc1ZSWVEwZXpVNkZMcFZ1UDN0TEh1d3ByWWZ0aGl3aUhGQVdrU3BtV1J0KzZuSjZVMThDdXlKODVqMngwYjBkN045cGlicTBsYjROblUrcE83dEVVTGloZFVPMmhycHRnWVhDc3hCRkEzbFEybm1GYzNGYlJqR0JnQ2Q2QlVIN3FuWEJiYWNqc0s5OVJmSURNQUZrQnNvTytuWmc4UDBCQmdNSUF0UUVhbjlXUUVzOU1BSE5HODU1NHdhK0FybnF2VFRqcEdTN2UvaWxQbWpBUlBtbnN4V2tkQUFSeU9MOXlBaHlteDdTR0tsazdHaDQ4dkR2TmZkZytJVEJacEQ5Z3pnTUlCd3dCazV0bWtFWElxcU1NYUVUZy9IVWUyNm9MVFRwNHc0ZzlVa1o1YmdieEVIdEN5VExZUEhtSlVxM3VKcHF6dlNOY3VtYkJkWFlRc2t1MUM5Mk44alR2REZFVTBydjgxN2dtcXNHalBmUnVOanZlclREbUhDRTRxK3Fiek9qdUlJdlJhRGh6WjEvVkpVcGhoaU9RS0hRd3NaNVRqZ3VBQjhDdUtyK1lJTUtld0lvTU81eHg5ZTRBRUJURFNZcG0yT1R5OG9Jb3lZb2FqZWpVUWI4SndEL1hCNWlTc3dVaWdoQXNSR2hTMENnekp6WE1DVFUxWEVaSGFUQVhUQ1FTaWNYYlk0VkNvUmdMRXhzdGxkQ3R4WjFhVW5sdXRHaHRPUXQxOC9SVWRWcGtEQnZiUzRuRW9ORm9OQnFORmlkWG4wV0pMSkNyVThDVWJxcU1oWkdwbStGOEViQklVYUxGaUtVUmx4S0VFaVZWTFZOeVJncFNwVW12dWdBWmhBR2x5cFNyVUtsS3RicG1BNndyUUxjZXZmcWFFN0RUV3M2WUhtMEUyZGNsaVdXc1dFM25tUzdHNWI2dUdWblBuTnV5eVdiSHd4RGpwV2s2TStqMjBlWU1MUS8wM1ZNbUttNFpuZ2xKU01tNDgrREppemUvS3JkQ2tWTWxLc3lJbW1lWmYwR1F5d0pCRUZ4Qy9yZ2dDSUlnQ0lJejkwYkRFd01UajhmakFVQXhkUzZWc0RjczFnOHdmWUNYck5kOThTSDhnYWprNXZ1VVBxZzRYRFA5Sm03b0dXdkdYeFNkRUxMZnJzRVNFc21XWFRjTTNjTHRIRlNHYlNIQkFqY0NpVUlYSnFIbk1sT0xSQkxhc25VSzJTdXgxenFuTUIvWk1HT3gvelB1OG9oREFEQUFPQUFDQUFtQUFrQURZSGdsQ2tDdUxWQWlTSUtGQ1Awa2hXTktQRlV3YmR5TCtzREJ5ZWdrYUoyV0VNdFdyRTYvNHZwVzdHNmU0bUR3MEJmeFpoRnQ5R3ZmaFBFQW15ZDRjTXRVcXNQbDRheTdHdWFrNXQwTjUyT093SmFCZ1NOSHNrMk5oN3FFV1pZVnE4ZStrc3hqajNFS1NYZzhMTmlsUXFGUXpFMWZ2NXR2cFFRRnRGSW15THRpdlRlV2tRQ2s1WlJlMlFpSjJackxZRFY4Nk1CWVdYNXhBUHVuazF5bnRaMng2YWJOcmlYQXNoV3JjZmtVNjN5L2ovbStnbnpOOEkzWXR4emZDZU9pQVBpN1loMXdCQktGenM3MldybGlmV2IzbitzT21rU2l6WEhUWHBtdkFuT2dlYSs3UzhGMUVIUDhuVTRJbkZZNFE1bVdwM0JBTGxlc2E3Qno0RnVPYkU0RVhSbml5azhodENPaWs4dmxjc1dZSUtyNC9jSE0zWFhJY2N5T0RzQlhIOVIzTklCalVzZDFmaWRqMGlpbkg1cmlaZlVPRFRpRlF1bHplYXg3K2pIWlZ5eGYzOFUzeExkcitVN3U0M0g1OUtlZ0s5NUp2d3Z5cW4zSWd4THlVRzJZNFFna0N2MUJURCtJdkNNUE1nMGxWWVJCblNJUWthSkVpeEZMSXk0bENDVDJobTBzRUFnRUpURHJxYjRnSjJKWW96U1VLVmVoVXBYcWJOclorWmhlamIrNXJIckd6Y2NMUWhKU011NDhlUExpemEvS3pRbk1DRUt3RUtGSllZR3lOeUsxbHRKVS9KNldtRnhVcUxzSW5YU3MzNHM0QUpuVE5QOUpWODFaVzA4YndveHdqTW9HZysxZ1BQeHdBTWVaa0JFRStWc3Vwc3hvOWNXUzVpdm5hU1VwRkpRMVRFYnRleUtqTUFMbFNRaDZSSzNnQ0NRSzNlUVU0amJFQzd1cS9BeUNESHVDQlFUc2NNYlZ1d01VQkJURFE5eVFGTTJ3eVJueUVTeEtzcUpHVTNSaUVEUFhMOURaNUY0SXBBdVNZQ0ZDazhJR1pWTUZDZE9rTHVFMUlLVkZsR2d4WW1uRU5lTkJDVlNKa25KRWorU01GRW1WSnIzcW1ES0l6R2xrU2JiZDlITGsxZngrM2UrVkNwbUtvaGdseVVCVnFreTVDcFdxVktjYVVHM1VsZnBva01iYXhOQXNMVnExYVU5R0lsT2Z2SmxNcHBqSlpESmJSanRhTldrL3J6V29NSUlhTldlc2F1dDAzeU1PMlB4SUk2TUJFOTFxZm9EeXhDU3dnQ09RS0hTVDZRVnVEaDVoRlhscHRyZ01qeUJLc3FJYUwxN0djZGtBNThBOGdDWS8zMlBMYndrbkNRQkFObXRDdzZOb0JyVklxemJ0T1VzV1U0MDVsQ3daMXREeDVwMW83VEVkSkJnU0dMNzc3QkVqbzk0YW85b2p0SzlidjUvaEFNOFJhNDZTamdtZGVMek5ETWhpVUhudTdRbUREQlorSVVGaVRjSm9IY2xJa1NwTittWkdjVGNINUljQnBjcVVSMFdvVktVNjZxWjN1c2VnRjNtbitiRmxyaXE5Qm1tblY3UGI3RzBSdENhc093S1FaRWdoNDg2REp5L2UvSjZKcnoycnZ6MTE4UGs4UHAvUDV5LzlOUEppcjlnSnd5bEtyVXk1Q3BXcVZFZmRWRk50aHJXZ1ZadjJaSVNZZXJlQm9KZEhLZWFlZzBKN1VCZXFSOFNPMWFuM3BGQU1LTHdJdFZTSisrRm1uaUhFc0ZFUVcrcGVrb001SHFmNTBseEJMTHY5ekNNQVpUUFExN245WDVrSEZYN2M2UTJKdmIrS1NJc1NMVVlzamJobXZKRUVXeExISkRYTVNLNUlrVlJwMHF1T0lLT0x6R2xrU2JiZDlITGt5VmVnTUJXNVVLd2tHV3dwVmFaY2hVcFZxcU9tajlwNXFsTlQzLy8xeHNpQVJDS1JTQUJBQlFEQWdFQWdFRjRrY0hQQTR5L2YybTdZR281QW90Q1ZTU0lhVGVWR0ZBQWx4MVJJWlJ2R2M1ajBKSWVvY3h6enBLdGNheWN4STFoU3lWKzYxL0dDd3V6QU1mUU13NkxUS2Q4b3NGQWNyTlZEUEllRnM2TEhGeGxOeXRpZURqYjhHT1FRYmhTSXRqMDJnSWc4T1ZiVWZnRi9HdGthQ3NNTVJ5QlI2RDU1bWNQakxiWWtJOEowd0p3WGYvTTFubzlkalRWZFdocGlENE1qa0NqMEdZWTZrWTFONVE0RUtnVWhXSWpRcE5DamJLb1NDTk9pWG9aYlZGOS96c0xkR1lHZ1ZiTXp3Snd6OCttcVUyc2pZMUJyY2psM2ZHL3NmejZxN29nMlkzNHZmcGRVaGUvQ1oySEg4eUFBL3hROEQzbXlBSUROQVZzQ0FKYlpueGkyY0g1czJjUkp3VmFPbTJXV3N0UEdaeFlaQTFLSVI3bXQzQXpBbXRrRlVJNWlsRGNBbTJRd29qRlhCNnIzSXNCeVZxNWwrdE5hYmN0ckYrUXJBUStsa2lVV3ppSEdLV2M1dTFGVWRNS01obnhpeG5BVTRsa2FBbm8vbmh1U2NFbkhyUTZRRWRvUjJGSVE0R0ZuWUhrZkJnSlR3Tmw0MnJRSDdkVjZJQkt4NEdESVBUU1BBdFlIY3VhL1V6ZVAxZXBaSk5hdE9BU3FGRVFrWUNXU2pLb21jdko0US9sWW1SNmJXaUVXV1ZJRkFOYUlUT1Z3MlpWSHpyNU16Qy8waS9EMWt3RVdWRC96VDliNkRHNjMyaUs0VXFDN1RQMlVOYm5rRVk4NjRYWWlLbFcrQlMzRlVLeEhEUVlvKzhCOXl6MXc0aDA3QmE0UWtrekwwTEdKR0lyclorY05YdUIzUHc2Y2VkcEFNVTZHelJRcURXN250QitjV2lzRnlvM1dDbVFqTDBNbVhvQnFOV1JGSVpJN2dEWGh0U2N0OExwQmZrSHNSUTZYcFZmSVJ2WkJVOHA4NUY0aEg4RUtueG1FWW11K0s2Y1lZM2dRZTErL1R6SkFJUkYxY0t2Tm1uMlEwTThhT1dzWGpUOWp2QkNyNTIxeHF0V1ZJNmFwTHBlaEtjeFp1VzlCV0xKM1FHcWY5SlRpdXZ2VTB3ZGdody84SUJSSVgxVnVOUXlzQnFTdFZOUFhaRHRMK05pdmN3aTFQZ0QvNU8wb3ltMkorNzhvbjByeGdBOU9DbGEwZ04wSkVQSFkvWVA0bmhJYXdiRUoySGxVblI5RGJ6ZldNUEF2eGtydEExNHg2anJBbVlVY2dSZlJsWm5uWXhzMnkrb3dMRHdrUzJWazNkZmpBQVVWSUpld0QwNnR6K0F1dzZwSXF4VGw0ZG1qb0dsWVFYRE1iMzFGSlBzKzY3ajlSTmdzSFlnd3dPY1l0dWZLNlZoQ0xNdWM0TkZUYnY5cEVRakZOak5yMExXQUpCM1hHSG00eDduQlJmWG1IUWhRMGJ6cW1PdFZUbnllUzZ4MUhiQy9hcmovWGUvN3FNT2w3TTBlVW5EUGdoeWlzRjhxSW9GYmhmRWdxeUQ0bzNvMks1UkxyTUpZQ2FDNWdySHd1cEROc1ZvWEZJMys5V1lQYTFsd3ZPcDkxZnZhbkdob21KaXA5N3VwTkhtT0greWIxK2hMSXBkZHIyMVJpQTEzSmliNzlrNnBUQjNkRkFvNzE0cFExeVJaYlRYTXlkQTdtUUU5UkZHaEwvT3hySGpkUm5vMFhkZjl5RWUwblhGZk9lcnpZK0RPM2ZpQldCRk1BbXFGYk9lZ2tBcVhUVm81ZlM2NnlPSVZsTENTZGNwNjh1ZTR5SmVsaFVQdFU2Vm0yam5OQVBxd1dhTm5udjF3N0pQNnhRWmF3U0lQbE9GTUVVR3V6UENCYjJkSlV5Z1k2UTl3cjZKVWpKcjZOWmNiRVl3TC9jeFpmZWM4MkxPc01LNDl4WDYyOFA4TnEzVERFY0lBUFp3d2hMdzU4aFBLazVKU29EQkpnaVRMRVN0UEE1MG03U3FZbU5TeDZGTnYwaVNqVTA0em1UYk5ZczRDcXpmSmZsbUMvWVpKZ05Cd0RBYUJpOGVCSFQ1SEFrNElRa0t1UkVSMmNlSENqU3RYWWhKZU1ONjhFZno0d2Zqekp4RWdnSlNjbkV5Z1VBd2xKWGRoMUp5RUMrY2hnZ1lwVGh4S3ZIaDJFaVJ5bGlTSnAyVHBLRG82VzJUSXNGV21URjZ5NUVEeTVFTUtGUEJXcUJCZmtSSUNCbFZvMWFwUmF0U3lVNmZPVnZYcStXalF3RmVUSm42YXRlTXdNZkZuMGNGZXAwNEJ1blRab2xzM3BFY1B2bDY5a0Q1OStDWk4ydWFVVTRST080MXIyalN1T2ZOMldyQkE2RTB5Wk1rTTRidzVod3NXbkM1YWNyaGt4ZW15Tlpzck50eXUydks0WnNkdHpaN0hPc3dHRXd1aGtSaU03VGc0RUM0ZW5CMW5pSkFRYm91ZEVCR1JIVnlJSVJMZWNENThJWDc4NFB6NVF3SUUyRWxPVHFRUlhIQVExNlU0aEM3Z2dDRUFnMFlBQndvS0RydUVsNitHcWJGTlBMV0dBeERBMisybVVTTk9pQmc3dDBTa1MzMW94ZU1ranJGbjJJSWpKempNU1VoT3Vra29FSlNpanlHZ3gySWEvOVpjMDNiK244K2dxa2dTMjhzNzU2Y2pVcDN6d1RyK1JQZTZTZXJsVWRUNWFldWdlL0FIZ0J6OUY0aW53RThxK0g0T3ZJVzM5RmJlV3J5L0JxTXZ2L0tTdXBpOUhrclZlZkc1WjRJYXZmanlXeStwNHNWWHloZVZUNW54SXEvemJ2YmpvcVhYMVplMGhqMEFZRk1RWnMyQmtBZ0ZJR0Z3eEhZTkI5WGRhbXdyM3M3L0NJZmdZWmlmaFQ5Z2ExMHl3dHpkWlkvaGNuZVRZYS9raXo4S0NCb3JoRlo0ZzFsWEJHR1dLQTc1MkVsSWQ5YUxLNFNGTmRWMzI5Ykc3UklJS1U0R0V2aGpyOExVMXdqQTIzczlCbWdiR2pROTdvVUt3cWlPdnlQWkVSSUNLSXpBNldUcFdRd1Y2b0psZTNWVGxqNVR5UEtPam00TmJ2T2cvVDlHVmZ4TkE5aEZoUURTdy9mUmpwQ0YyVzhPQTY4aUN5VCtmMkgvREc4QzZlK20xeC9JSTg3OU5BMzVyd0FBNjhRV0FZZ2xUVEFzWUFDRXFlTis2bXkzd1lvQTRGK2pOb1djTlM4T2lhalFRUDd5TUZhd0lqUVJnU1VNTEkwUTduMVJBWDZSRjhZS0lJSlVvWjN5Z0MrUTJRb3NDa3RPNWx1TUhHVWFFM2VMZThWajBocXBXQXBJRWFsT2FwRzZyZFcrN3FSQUZjQ2VZaWtBNEJQVHNMaC93VVdmT2J4OVI2VThxZkE0U0tuNWc3WUNYQVNRQ1FCWU4za0EvLzFOMWYvazZTLzBZLzFvQnI3NEdYeHgrMk5mMHUrLzdndnFDL0x6ejBFZjlPUkJxam4xUGdMb1pROGIrMVowYzhnTi9sLzJEV2ZObWZLcFgxMDM3ejJMeG4zbHRCWFRiRTVaOElQdmZHL0dKb1NEeTQ2QU14WTJEZ0VoRVRFSkdTVU1Ub1dncGtjeE1ESjcyNFIzL2VIMThTQ0NTNElreVhReVpNcVNyMENoSXNVTWF0U3AxNkJKTXlNVE00dE9iL25OVzM3eXZ2LzUyT2MrOFlYZi9Uc3UzTExNZVQ5YmRYdDJjTmV2WHZMeWFQakZEVStOZ1JjTnVPQjFyM25ETEJJR1J5TlFHRHhPeWptb1ZJT0xoNitVR0F3QWtvUDh3Sk9PaGhiSkJOVXZocFVOTFpxRFU2SjBLVktseWJPYlhnNnRFaFZLbGFsUzdsdVYyclZvMWNhcVZnZHZuYU1RQ2N1V1hISFY1Y2k0V1VRbVVtVTBNTUFtdGdRc0JTenRGM1JiQkJld0ZJQXc1bDQxaWpjYkJtUXA2eTNBRU50ODJkQWt3anhuejdQNzhWVVVEQi9WbXVBZCt4NTZjUCsrdlh2R1JrZUdoMVlzWDdaMHllakk4T0tiRnkxY01EUTRNSC9lM0RteisvdDZlN3E3T2p2YTIzS3RMZGxNT3BWc2JtcmNnV0EwN1BjZWZlVGhoN3FkZHF2WnVQK3VkRzIxbHNUQVArZno2ZHIxbW9wKzBMSjFURWdnUzZDdXZDNW95QWl1YjAxM1lQTUxiWXpUYk9EQVRYNVlFaVl5Y3BVNUlWY1BmSkRsSitvT3Vkc3ZMT1V5Q0hBMGVwU2hSZDRkdUg0S2dFcE1FT1daR2I1RUZjTWpWSmtCVUJVQlJaa0EyWktOUnNBTjErMTB4Szh0aTVMdnU5Q1FPY1p3eG9idFZKWVNOWVNGSTMvZXp3aUxKZFFFbFZBVnFiRmZWajdHRllLVXdpTDJNOWNTZGdObThMSGNzQUlsdjN0K3BUemlrZ2pTOExobnBSQTR5RHBiTzdCY2VraExJUnR5cnNvM2hPRmJpVTI5RmdtS1k1SjgyeFJkOHF5bHNGV2tFSC9iYW44bG5EdjNaeTVlNERWR2laM09RUkRCRDQ2NFhuV1Rtb0ZEUjUydVhKa3psZnlDUk4wakZVTGVxWlZMTlFFWG1WRWxEb3RaTk9maXpRNFJMYmkwSzNWZlFpdU9LT0VTTUZUdjEzVHZpNkNWeVU3V3hNbUtXM1VidERtbkkxN3lYM0hjbndqZ29mb1U0bWFTVWxMbklQb2Qwdzh5djY2b1dJTWRTaUdQVXYydGdtQTRFZGExMEZybnRRbS9lbHRoZnd1aEFIV0tzK0pzLzN6cXRUeFNmY1pkV3ZNQmtFa28yT1dkNWg4VnhrbDF3UTB0V3FmWHhqbmJYVHdEdzVvbVdaNXFkdkhJRGJLWXh5Zzk3MHBKdnpBejhuMzVPTFJrZlNiZERUcFpnTk05bFFKbTJpVTMvSDBuZ3h2SDI5ZEFlWTJRRFF2eFo0elNocFFiaEFqQm13VmJJN0Y3SXZKN2tpTjFGSkdXTnVBbjB6TUV5UmwwaDJOMTdKQ0tpZ0NQS2Z5OW5ITk90enduSXp3bWd1dlpaL1RNQmNRbEhBZnc1RXhIRHNYR3VGdVNlbzN5Q0puWlJiM1c3VWYzYU5aNzNFWUs3a09TbFZKc3dZWXlKQ3RjR00xR3JqOThjbkhoa0ZtdTdQZE93bjFXelIwaHhUblJVOGFCSm14cUg5d1FJSWMvZlVXQkhqOHFySVNqYk8yaFBXN2xSSWFvREpwS3A2V3JWSGIwb2w1TG5LTHlGajJUSGdteTk2QXBaNi9scTFpTlBZOHZ3REt6NWdzK0UvQ1pJQ1B3Y2FjcWNuUmlyMVJ6UHNuQ2dRVmFnNVVNcktHSjZ5NCt5UFlaSTd5aktUSktTVU40b1VUN0dUZGl4TzBEa2ZjVFVkbWthQnpxUGJpNVNpS2ZKYUpEREtZMVpsMTJ1MVJBT2t3U3A3ekhuNlFrYWlwTkxyNkUwcEhnbUlRME8zeEJuV1N5WTIwY3VIMnpXWXhOUTN3Mm1Gd1A4eGs1Y0tlRHNkVWFrS2xMSE5KRzhzNXh6eWhOdHRFQmlSRE5Rc2NDbDJ2MlpBbjFDaXR4TUVqTE13RzlwMWREdGRxaXdKVE5DZkxTcVJTMEF0VnVxUVBJc1FDUlpJbTh4NjZJTndwVENNSkMydllIck5NV013NVR4SjRWaTRIZ1JSb2tpZ0ZLUFRwbjQ1SllneHFoMGJvcWd1SFA2SWdrUVRLVlBwOUJtQ3R5U09KZDZieUUwbFExZG5rdGxjaUdVbXBRTzl0Qm42QUJSQnZZYmgvb1hhcG5DQzc1R0dJeGw4VytaWk9qb0hVaHU3TkMyNVVKb0xkb3ZDMVZvQWkyRkFYcCtNNE4xRHlBelVVamVTdjV3RzdaYmY5RWNUNmpNYnNKMUJwWS9KdG9sN04wanBRaGdMaGNZZlllVVoyQlhxR1VIODVROFJSdHoyZlFkbnpubGxCMThkQ0RNM0JNMFJWbUxYR1BGVlJqRWRRaExQOURpSnZwTnpvVUF2ZWc5WkFMZklqVFZiNGV0NXZQTTlBVVZDMTFKWUJNeUVwSm9MYXdIVnMzQTBDTkQwY2cyL3huWEpOK0lKVzRBS2YxR1NVYTNWQmN1TXJYbFVZVHVnWm9PelBmV0tSdWM4cVlNbWxPTUt3bDd4MGtLdHN3bGYyWlJzcmoxaGcyeXpxQmFQbEFhTWxrUkM3ekc0V2FIYzhBQnJseTBtRFZnUGhLZzYwS0lHc2xuMUZGUUdvQkhZMVRHdjlLZ0pwM1ZvbzNPQkl1QTQ4NW9yaDBjME5HMkxYNnlTQTlzR2NCYW4yUWhvYmduaUo2RmV0dUtTSFhMcDVlY04xRmkxbzNNZ01tS2R3MElyRmhqODFLaVVMRHZSSkRJNUtTVWxLQUZJS3hWekN1Z1V4WHBHZ1pmQWdQRUU5ME5lekt6cHh2SGJQVFZxMmRPYXE4NDJFTjl1eVR6SzJGWXQrV2RRWkRlNFViZUIxOHN3dmxRVUNpRnJiTCt5QzdXcWx6Wk9VYjJWcFlRWnUxbVBVa1QyWHk3MjZOajBncFVtb0VXSWVyL0ZKa2drZ2JBQUw0RGgvMGxvNUpEQk1DN2tnMER0elBvZ0YwSzdMV0xYUjA2UEVOMG9vSEgxbHVlSmtRRFBJV1U2TVpPNkxhMnNndW5GNTA4QzJsWUdaUGxjeDJYSjF0dVhGYnJlNTFDSVVXU2hiNGZvajZMZ0djbWxnK1VDaVNpeGNIOXJKNlRUSmRBQzI0QXBHYnNhNWhhL05JcitoOUllYVhJQ2ladThDNEpMeldUN2dLWVQ3NjM5K0FBakxscHBkWEFMYm10L3pjZFo4bmZJL3N3WE5iWmR3OW1SMVNPN0lmZ1pLQy80TUN3cEN3NXNEMWo0MHdJdWJkdHBCTmNzVkhtdVVQdmhha3N4TTlGOEJMa3NRMzZNL0JPSkFRdDhUQkJTVWJTb2p3SzMyRVliZVFyenVZR2E5bldGaE9LVGxRQnc5Q0ZqOWpURzRKM05nRHZldUFnMVVPaGI0S0FwOXBIZ2FNSktiMFNsb0w3RG9kSHNManB0WGhrdk9hYW9lMENIakRVNnRrS0NCNDJnWkp6UkRjUG8yeE5lSnJaRHhjWGVWM1YyOEp3azBISmhVMDhMdEdEUU1xS09QM1RHb0FJNlluYkVrUndEUmszTzRraTYxSW5xVDgxMnhLYmlpb0JNR0U1RExwTUtyaU9wb3ZGTHRiSWU5eHFNcS9TVFlzeTBaUUY1eWFaYXZwL2ErSDd1YkRucFNzaUJ3SkZhZ0JNaTd3VldjN1VIcWxtdzNmY0x2dm1uVlJTRllSUUVuZ3huSHZ1eDhRMUNWN0FJQXVBSURkQUgxQStMd2crZ0hnUDRDOVFMZ0JBTmFldk9Ud29xTUhVb05nbVZtRXlESTdMcnhMSERYWEVrN1pBTUk5ek9iR3lDR0RiazZHNVVnblRwUGMzK2paUU1qWUdVeXVOWGcrTS9UaWJJMmNCeGdKd2tiMGJnaTRmWmY1QUJDV1Q3QkRTTThZZVMvSjhubzRJc3hRWWs1MXdaS200NENqdzZwVGZRalhqVUx2OWVqUE9WS0ozUGhTMmlJZnVsQUs2c01MdXpZNU9uL2JIemhaRE4yR2FQaDQ2NlpMVVVaRW1XSjNYUkcrOEErdjVZT09sRklNUkZCNCtMald5dVN1U09lcDNxclBXck5Cb1J2R0RXYmdxY3U5NzE1a1h6MkJFTUZVWlhmaHZMOVVEL091bTY0d3o4MUlrc1NYdlp1SU9xY1lSQ3B0K0RVaWdzdUUzUTdidmc4ejlxRXpmOG1mZUhGbjU1c0pSVXVMWXhRM2ZNSFp1Tzd2aGs4TTA5MVF4TEJaMVNlMmlRTlYwZGpFdUNGVGJueWplYXFOV3REVU9icUplSnNCdW5JUTdQS1dxdkhQUEZ4RVhUTUtSamZBRGMrTTliNzVXaXRLZU4yVFR3UE1iMFBBOXEyRlVVR1NhTGhzbGpEQVVBTU1MZEtZUUhWamN3cGdZS293YVVRQzE2cnJoeEJEUlUvYVpnYkVvVXMrQTEwVHhrc25rU0xqWmF5eVJhK1BoS0tOakJUOExvU3FycUJHaXFHU1JpRjVUQkM3aDUzQ2lvZUY0V0ZNVjF6SzVqRFBvYmpIZ1A1YTlzQkREMWlPODRXY0w5NENvNUVkY0lrSGxOZkp0Zm1tQUV0K0FwMUphdHc3djVMeGJTVTNtZUtDV3MxM2NvZFFVWWxKVnYrOHRtdXJBR29FMW5wTWhaZXhUTG9QTDBrZzdVZXkyTUxFdXZNMHk0NUtsd0dsV3hBaG5IZk5qWmFXTmNNNnJKYk1pbWkwK3N6djlCQnFPdXRmUFZFakhqSWJOZDVwYWFObWJIM0ZMSnZpMXRsT3hOc290ZGlPd1Q5bmVQTzcrZVNHRkZUejBUYWQ5WWRtQS9wSjhxRmE1Z3NmYW9pc3c2MUFudDhPdmorMjQyV0szUlZyK2N5T0NHVFhUWjdacTN5SEpRTFIrcWZ1U2JnUGw0VW9Vbm5GTXFsdUg5QVA4UmlPMWthbHN4ZWVIWG5rdU5JZTkrNjA2emloMXM4T0s4NmVrTXI2cXNCczhydVVxNnhGSDBnVWZWc09ZYW4zV1N0QVJmN0Y1MHY2d2R1S2IwWXYyYnNwMnZDd1NxRmFNQXJySUx2WVYwcXgvVHM2Y0Q5L1Iwdm1iN3ErVWo0UUpESGZMd3FhMUwyWVNhS2U2b2NXWFQ2RWgrVnd1YVJ5SHNwTHRpVU1lZnBKUlVZSXZkT3A1WUYrL01oZ0JCMnBmd0dqa0tjY2Yrd1NJK0JWek9YTEdnMWN4VzREVmY5SE9hYUhpU3MwL1IzZGZTaThoZEZ4WWg3TXdsRi9qeWh3RGFnRi9DZTJ6MGh3d0Y0WDVKYkRzRkp1QXdNME5xdGpzR01EQ1Y2R0sxOWhqVUFEYlJON3lHZGhPaDh1d0hMMzBHenF5bG1jdjdhSWc3UW9selBuTHdyYmpjTnYzNlhLYUZaejRpOFBWSGhlUTNvUXBhcUxKREkzU0RrRVhMSE1DSlRaYVBLeWZRVFVXcjg2cUhjVzZaVGU1b003dmF0TkRYa0ZsY2tVUDZHU1VRaFZXaXRGMlc3MTlmUE9aSGU3ZzhXcjdGbTI0eThoSGtUbVJnVjd2alBSWFBxNGREODBhMGFaZzQzZkJWNXRXdnZJNkFCWU9nZkd1dGk4aS9rcXhRdUxFR29HMW81ZlRtbTZuc1dacmRsdUUyYnIwTGdrZFNoN0YxTVM1cEQwRFpEdzhVaXRXS0ZtdXN4MkgyMXhEL2JtN3h4czhPSDFsaVlKU1Z3NFl1andoeFMzMEJ3MjVCN2FDYkd0Z0haVUxJbTZ1ZWF0eGV5cHJWa3ErbEZuQm1SVkFkMm9VVDVDVjZQTGtYWDRrYUtiZGdUbUZoamVzby9LakM4SW1sZ2JMeXJHSzM4UzdKanF0MUU1YUNNaVhvd2ErVVBneTNiSjU2ZG9ISWd4UFBnYndKcmRXdGxPR0o3TUNOKzA1aTZWN1VtamlqaFNtSS9lb2RYakkyV3hRSGphbWZWT1NQeW5XRHQ1OGJveTh5dkxONHE5M0pocEw1cFdCblJHNmxhYTFwRVY1bS91SUFwUk43UlhuVGpJcm1uQTJzSGtacEdjRzZ5czZaZVdYejZkOG5UVGZ0WmhRT2JhQlhtTFZNVnFaa2dOREZnRGk2WGxUWW05Y1UyV1lqcHpTU0ZBU0J0cXFzU29saVVQS1VmYkFEMStwaWJXWjV5YVl6aS9mbVdzSFJYaWNqLzlOcDBaemZpWnRKMzExMWVkZ2ZBdFg4VyttbXYyNTFkZkV3RkF0cUc4dHoyeUR6TGlEdHZhYmVyVytKcU5iaEN4dFNnck02cTRzbFRKUzQxeGFDcEJHaHBwRHJyaVFRV1Y3TmdkajRGNmhTVWptb0xTQnN0WlRkdmRmaEFZbnJCalVpem0rZ3dWdTh6cWhzV2IzeC9GKzVYRVVEVVRRWFFDeHdkSHh5NXZpNllIbnMyOFVpSmgwbjd4SVdDMzVsMnNHVlFxU0xIZjFDTjdnQ1FLa2VHZ1I4YVRXcVcvQmxmNUtDQVFnVG11TEN4TXpSampMSXNSNFFnM1ZqbzYrYXZYdG1zQ0pvWk1Pa2NiekYxS09IR0Q3Wkd5a2xjV014c2VpRHNTbVV3Q1NSYnhNK09NVllneEtnd3ZSNVpOTUNSNDFPUXVIc3p1UTErYTcrdWYzZ01lUDNHUkdYSE0wR09kYkdoZmY3eklhUkVCK094dlRoMDk4QnMzZi9EQVkzcG9EeXJRVXU2VEVIeVVoNWR0Y2ljK09DaFFGamVGK1JEejR0dnFkRDlGdE9DaUEya2ZJSHZlazJQTFJmdEFPOGR4WXU0ZTBMaXo3V0J5eSt3RHhYNlpHdXJaYWJydXpHeldvTyttQytaRmtuR3NLVHVMek5IQ0pDNUg4Z1V6RnM1M1dyQlZNZ0szSWxPQkZML0JFUVdtOWpUbWNSOFVFazBMSi9RRU1EZmdQSFRaQ3FxV0Yvb0tlZXY0VVI0cUdWVVM1enhCME5meXJRZG5UOHdmZEVhTHRwY2ozSmg0RmEvR1Q2WWM1WnVBaTJEanV3YytJYituT0k3dzZNYXFPK0N2S2EwanphZWY0RHFRb2VVSUFrZGttNXU1blBPN1ptd1R6QUE1VlVmeG91UzJHRkFJTUFoQTFTK2ZZWVZJcFBjWGlGTEZDam1nZU9Fd0FVZERJSHc2MFBncEpORDJPRlJGYndJTUVheGhwS1dXNzJYN2xtdzhPWVdPRncyZFpzbjJkTnY4SnArZkZJNFpobVQ5d1pjWmE5Z1N1QUJUcnU4aHc1azBtZUNqN1NzZTlkS2dnSlBSUmdVc2VVVkhhayt4eDhNUTFGR0RoTXFhdWxtblBMbkF0RFlBQ1M5T1c2SmV4ZTFGKzR3OXZKa3o1VXgrcWdXODVqa3h3enc1d1dBVzVtSFp5ZnpPUmJOTXpDT2M1amRWcGhac1Vwc2UrcEdnUnB4bVo0K1o4OWk5cE8zeHhoZzVSaCsvNGJVQ2pFcGg2ME9QMS9HV1pyV29yaTdhWld1UWkrTFpKd1lwMGJOTWVmWmh3eDQ5OWluNkZKY0FLNERtQUdUSWlGV0p4RFR6d2xIZnpmemF2UVlkNHlZTXlEU1lQQ0xObUpDenVGRmJwbzVFdWlpUVpKbVFsckl6a0V4QkdtS3AyTFRqaWtpUHNLZlB2RjJKZEQ0djFFL3MyZTI2c3hnQ3J1Q0I2TXlaTGJzSVAyVGQ5dW5NN3Jzc3RQMkg2RkJnVWxPQjYwQy96WTRxM1F5MHBybmNBUzdKWk04MTJ5WWRKWkw0NGdJRE51NDYyWVJhVHp5NUhLcTdManhqRk9jYnhhWFpwQjByYlpiVVBUT2IvN3F4a2ZUUE9nWi9kS0tSZ0d6N2JmSXNvUTBEeHYzejk4M0xONFlvdm9hYm1OWjJuak9LSG5aOXNSZFRHakpxeElPWU1pZG5Kd1JaRHBrVDIycHBrZElVTlhGU0JoWEtIR3VCaCtobDMrajViU3IyWE1PN1NCM1ZLYVgyQmpyT01tMTRxK1JzT0dCSHN3WUZOcitrWUx6cUFNMDNuakI5OUdqcWprYUR4TWZPYU5yVzZFOVZNbEJpbFRWeGNXUmlBSmV2L1ArVDRhNE5iWXFFc2tkc1M0YTRyVktMS1FKTkJKUUZiU3JmanRCbU1vRVVLU3ZqZkFsQWxZVGpTMFJoMU5IVXRNV0hXNEZuMzBZVTBJNEk5QVBVOXJ3dHVOK2JlbmxTY3RpRVRSWW00ZzRqN3Q0QUpKR29jZW9rT1JnUU04ejBmSDlOTExhU1FSRThXY0M0RmZrYXNDYlpoWDZrNHNTYkdYTk5MZEl2bVFIT0JHb0dWNHRnTkswczkzeGZBdnJpN2VtTUFoYVVnY0dJeXlmZmVYU3BiSGc5L2Q4bTk1dTgvdCtUdTcvdCs3YTRUeC9zby9lNU5Qd3pzcHZLUnJOVGoxenAvay9iL3pYMm9FLy8vMlNXZStOcXZnbVJkVTBhS2p3Ukl2MTZwRTVGVWVuemIzbzc1QWpnSEVPa0lGOStHWEk5ZkVOWUtIOWNSa1B5cVExR2hQWFMrTExHbm1YMmVHNTlrNVRadXlyRlhNOURtVDdLbDRMbW1SellZTGk1UjJmRGtzS0liZkM1cmt4Z0FEYjZSMnVUZmVvMS9KYUpQNFoydFFidjc1aWJ1Rzl2UWErb00rWGF1aUthSFpzOTFySXlRVytyQm1Jb2d2NFlFemgzMTlmZHQ2ZWdyODY1ZFdWNTY0ckorSlNLK0c3aVUrSWViai9lTHhmSTloRlhPdkV4Y1ZkTkM5NVN4eDBwOUkvYVV6MmFWWXhYdmFxNWE5amltNzJtU2Nic0F6MkxhME9PYnIwdkNROVlIZGhBcExsWGEvV011b3crYy8rcVZ2MER5cU1wWExKbWZFTFg4RWFEYnUxeHYrRVd0SkJ2b29UMGEra1cyT2xtNDJZM0FrUm1EUVlYNlByalpXdjkycEprVUJOaVg2Z28yZExoZThZakVRTzF3eXFjdi9QMmoydWk1SDJQeXl0T2QzSk9BTTd1MUUyMi9GcW5mVVJyZHZiMDRpN29YNE5EcnlmSkxSb3VESTdhbXJ2VnE5dys3YXAwMTRqRkZ4cXhOL2VxVjdyODJhbWFjNzEyNVVDd3VVZFg2K2lsQWlsa3ZzV3VHQWhWcW8yTytWT0srZFdDZlFjWjdTcUMrT3E5L3JyTVBJTXp1TVNhN0tHMkZqTmdpTGNrMy8rbzVWdEROMUZ4RGpScHNpeE0zalp3eXdTa0NzSXJ4QkdsbWV4S091eVhTcXdYMUl3V2pLblVhTlNyeHY3bXpxTnVUbFVVVlpxMDNjbGErdy9MZEJPNlc4NXNVYnRJS0lZVktMNkg3SGhXVXJPcjRDRnFaUER4bSsvV2g1UlBIcVg0TFJOeUlnalBGMGVVbERJVHRIT2VxcmJ1bi9WVGlmVUt3V2lobUlwQW8xNE4vcC9nU3F6ZzdsdWowcjdXS0tONk9DUHhsNFhMQjFCYndLRUd2WXdxeXpVYk83bk5xdnJIbTd0b2ZxQk0wZExuZHF1dmRFTEI4bUI1bjF6UFdPamE1SkFxU0VRclhkQ0gzUERld24yaCt3b0phL1dTd3NZaEs5TWpXc2wwNjdvdDNBRkRzbFhuODdkU2hpUm52dm1hNkJPdjhuUU9tSFVRVFJ3dlhXOS9ENnJRY1MwMlhqMzNEYkkvdnorZlhJYnVTcFZ2VnF2SDFYZk52WHV1bWhnM1ZteStyUWh5alY5eVhuUmEyYjJsTGRhL2pIOGJiYVV0N042YTRQaWxUWmMzbWJsakpib3l6b3Zjb3U4dXovdVBJTkR6ODg0Uk9qNndXMjEwdHlPMG9yRlVvUFhYTlFiazlaSlhHVmtyb0c2Wk15OVhVUExhMHo2clNncWxnWEtsYlZCYnE0MHFjWDkzL3QwUGNadnNrVkpsdE0xT3liaHZLa3l0S09ZTS91VjBzVmdUVWVJQkZXRmcydVVPMERmekY5YldCWHRqRGp2U0lIbFYyODJrbkJsTC9iLzlOanE0d00rTUJndG5FUmVENWx6V1lEUzJHcTB2LzBDYm02UmExM3dINUEvcmt0eWZMZTNZMnM4cTlyeGIvS3VyR0lqbUhIcFEvc2E5RiszRzFqUmxObVlvUXc1WDA4WDJmdnJUUG1LU1pEeGRqTXZVcExKSHBEa2RCYmN4d1JUNkJ4R0NCc1F4MUtydFNUbXNlQUNaQngyd2tWM2pmTFRZMElKNmdraTdLZVFjWHVnTCt1YlFqNVhQYnREb3pCbXpvY3RSYSt6TjJreVF1d1liS1gzbmNvTzBXbGtRc0kvT0NYcmNmYjdQR0hKZnlmNFRQdjhPVmkydHNKeWJZemNiTXJnckJPWEdKUHUvT2htQkVKVWZqZ25pR0M2Sjd3Z0N1R0M4eHlWUkZOa1VuZDVBVnFIM0xIQXk4MXdrMHVSeUpXR2RiOGo3MklDMGxjN05iMnNnZk0yNmVVTzJZZmJ3KzFtS1NtWDBKbFBXWkd3MVVZYjZER2t5WlNsRGVzTnQxYlVYbDBaNW82RWZlNTBBV214c1FkMUJwTU1ZZEE0djlQdURRd0hYaUg5NkNiNXNNZWZTQm9NaFo4U2FNL3EvOUM2YkxDNU5HWTBwS2doWk8vMzJxVDBWVUFZcUhXREdxVmFKaDhUVkg5N04wUm5pa2FwZHlsMm5CSklaVkJxancxQ3JqZ0xhNldBelpuQjNlWUVob3NyTDVBWUlaMmEyY3hybmJML1dSaVVSZmRpMDRNeHMyNlRzRzFPbFl2L1BINGNBaFRvZ0orbWF1RUlsaWUwSUFySkxKTkRtYkhNb0UwcXIvNmlMbkNTajE0ZDhOSDVxYVZXOVFSQXRJb3UweTdOa3R1eEVYT0xVR2M2azIyRDkvVGMycy9qZm5SQWhKSVNoakF1KzZXMjE0RDFRTWZFQmU4bmdJK1FrZWNPbU5ILzcrU21kTVBHZGJpRTB5YXRndjdOdkdyOEtCYkN5SUFsMDJsb2NkRWU2MnV2Y2E3dXMyZGN1eWZLNXlDTDFzdkplZDYyekxyd1M4blI3bmRpaDJSV05CdmhTdDdvcFc0czNLR3Y5SjRJNG44ZlNLQ1B1WHFOQWVhTlJVQ1F2Tm1hVlRCQnVOeGpoTm5jd2l4b01HZFJ6cm04ekd1RDJ6U256WjBZYnVqSldreWxyTS9UWWQ5WWRFb3ltak4zWWJiM3JWcmJ3WEJ6cG9QV0p2QjNVZWM4NzE1KzVzYlhDS1pOcGtDSzQyRGZrYzQyRXdxN1JSWDZmUG8yNW91ZjVpZEdXZXQ4OHAydGtXcUt3aEZnSldITXRSck01WjV5MS82N1QzQ1JSNjFzeFg0elV1Nk1wRkRkbnJJYnVXZ2ZWemFuZjJGdEpLY3NuLzZyTXJTbkthRXphMCtjK0hDcG0rcnovZWNnVFJOKy8vYlZXWXdwM2hhR2MzbTlkTWp0UWh4TisyQ0dJb1NwSmZIc1F3Z1hqdmFSbFAzdEhDQUswK2RPODJwaFFHamVZYzlaOXVPNHVuYXcwVSt1d3BOU09xTFJOYmRYME5EdXNtQThPVlQwbmtEVjlKVkFGNEFGUm5NOHROalRodFNGWlRtOUEybDJCTkthMzVxbjJFeWRJVDJKMExvNzdvVG5Ra3phZC8yc3hFVVNLL3hwQXJicnVsQjFnSmozNWZWR1cyME1XYVZZOVd1Um0zVkl4cmViZjR0cCs1WktPeDVzaFBWTm5KSUV1UDhjVzhZc2NTaDNwYXBKUzlyUjg4UERPTExFR09qY1hFYis1YS8rbFpzbC9oRzlPZ3Z1YnZDZC9jWDJkVGhWS0tBMlY2Z3I1Snh3SThaeEFDRm9wOVd1dWF2TnQybFF6YWFMcUZHcXZHaFRTZ2t1UjhvYitzQllPZS9WZG91OUZGTTk1NnJoUThNT1llRk5BR1hpR2ZHWlVPYnBNbU9WTHZpVDUvbU00Q2JmVHJTNDhqdGk5Zi9uSkNkY3g2UzJ6TlBuSi9MeEh0TmpycWF0ZktES1M1TTF2WjFDdmZmNzY1MlNJVnArZVFib0F2cUFNR1Y2UHI1MzRkUGFOcHM5VTNpYzlUeEtWdG4rOFNBTXpIdGxZdnZ6aHJ5M3ZGNzVYWUhub3EyWExIdjdLL0c3QmU0VTFnNGYvV1ZXL1JpSHhDNzAvejZDT2Z2N2E1enJoL3B6L0pMMUs4d2FyYU9idDFsZjY1QTlDYzErWkkzK1U3d0dtVllUSm9oNlNrajFnMTVjYzJTNTVkOC9Md3VMWVBPQWVFSUFJQk00Z0w3b1dxMkwveVRjT3JQTGU1WUxVOE03Tzd0cytmQnNtVnZKOWNOVlVFWG5xNkNuU2dEc3JFUFdSUnNEWk1Kc24rK2FGVzZLWWhyR1U1Mm9TNVJnYTV2bVZGUXVWQzhzaGVZVlpGakFaMUZ2ajlRbkhIOUxYZUt5KzlpY1RFeXk2aTVXemVodWgrK3E3MXh4N0ZsSHRYTVNFSjZaaGhlU1E1RDV6L1VVVmk1U0xYSWxkdU95K3hFZk1DNUQwc1F6cHJpWFU5UmFuL1RPSnFrRXRXSGUyektOeWVpSis1bzdpMFZWWTI2enBYd0NseGNmU1pEOUM3NTEvcGN5WU12QzE0ekxKVmV4VVJoL1g0blZxVXBVSVhMZHJzQXVwVnRWdGZ1d1pyOWdMTVBJaVJNc1ZqcTlnYUp6R3JWSkNTY2Vtd1lqZlB4QUJubFRxUUZRZGpJNUhOb2UxQzVPMDFaS2lnWVdCTFlCZExOWWsvWmRleFJvVjRTQjJmTHcxYzBYQ0l2bXpxMHFyeUZLQlNqaVRrZm9ZWnZUbzd3c3JBTUhaZnpSQTU5WWpCWlc2UDEwK3ZzcGVqK0VlQlpyWjh1ZWQwODU2eXNDNUJEZncrMWN1RW9wb3JhWlVsOVlWR25Mc2pSQlpFeFBOSmdLQjFzWm1IbDZUYUF6WThHMWVHV0ZORzZLQ2MrUDFJbzB0cTlMSEtZWFVmWncvZjhXUk5ONzNCZmg1a2tnZXFmOFpXUzJZdmtzM0VqN3BmcWk3MW01b0pNZ0dJNlZOMU9GNk1vMi9yNGx1YmxBVFJ0NnBCa0JOOTVudFhZekgyVC9Qek1WK1llaTU4NXh1VFQxWVMvODJWN2VuTlZacmEzVlM2T0dCZ0MreXNJVitZM2VLWHIzQUUvQU8wczc1bDlZWTBwU0xHcWxVQmtpb0RSL3hWRHF0NTcvQTNhaysxVGR1THVHOWFXZlNBeHFYYjQ3UmxqV3E4WUNiREFtM1lCQUdPNitIT1FwNW1ITWRwakVZdTFONEQ2TlhCUGdJdG9saEErb21oY21uUmRCUk53c2dtdVVtZis4eUZJMklFSGxZYkcxWk1RekIwTERrTndIa0U3VFc0Znp1M0MweGh6VjNiMmw2MVpBbjZCbVNLZUZhS1NNSUdLbGtlQTl4NjRxOStYTmR2bjVvbVkyV3J3ejE5ZGN5L3RtTWZ3NjAzT0tVcndqMXpxNVY5M0FrODZ5WlJxUEZsclJZY3FJNXBQRzhqejNUYkRUVldDMnR2KzhxRnFzSUk3R2haeXMrK1QxTFhUUDN5NC96eUxjYWJUN043ZEFFM2RUdGliak1venlrVm9LZUFHWTJ4cUc2czJLSWU3UkphZzNrVE9vTVpjRDhiblZFSnFZRjRWckhhNkw3aVRKcGtiTVhjMFRxT0d6S25WR2FEVTJJMW9XcHpVd2Y1QU5WWU0rZ215RTA3Z1JNTWgwV0lzWnlVVW1oaHVuWFdaTW01ZisvSGJ2czA4bURLck9yY2E1YXNHNWlEajdhSmJZNDBYbk9zRVpjVXF3YkR2L2xmckRiVWRXcHlYcUhhdGN4YlhUVFRnYmVKNzhlWEY1bjN6eUxaUEZ2ck9EZ25oT0JwL3ZIVGFXTFdoSDZUZG44M2ZSN3N0RXkvWDV2N3NyUUsxWFh2RjJOYVlQUk5xUnFEQmk0MGYvbjZ4UWwrTDVRN1laKzQzcGtFTjlUekFDWW1vR3VjVHhTaU9jdFlvQTNKaEJaeUtYVndqdWN2Qm81R0hScTFjaUtPTC9zdWdUNENHaG0rZ3c3SzhFS3h6dlN2UDR4QjlZSm1XVTdKeTgrSXBVNkRFQTEvNjRSUGMwSU5UNjNTeU1aR3dQdjM4ZVBzNjRDN0ZjTGF4dTBxYzZxNnQwUTZWRUNjRUxKY0tWYzJndUNJSTJxbFo5K3Uvbloxd2NsR0NOb2t3REh4cjRlUnFTSHZYenUxT3lmcEgvL3o3OWhCc3l6VDI5OWJWVTRkaGwxaVljUjVFbXZCTk5FbE5JMUFsb3ExekVVSmxGNlJOTE4wd0Q4OExmdjdwMCtDYjRPYkplcTJYTld3MXU5b0FvTklwL21KWHdwSy96bWg5MzVQZ1FQWlJhTlJOSk5QcFVmdk9mZU9ObGRoRkFvMmdxQVc4VkNRZGxXRjI3M0RaRDZhWk55Vm02TzdGbGZEYXJ5aXJ2RThtZlEzeTVMcEhmUkhBQzRlSmRFOHV2TXJUWGFHcVpESk9yVTgyc2FGd2pFWGZEcGp6Z2xVNGcvZFFNNEo2YTA0anovMVVMY2orVGYvTkZUaU5XWHl1djlIVUF3M0F2ZUJTTUgvQ0R1eXpTSFI5TUxmUStCVzhzRVF0RTJFRmdtRkFxSnBkWGZoL1N5ODNXT2V5ZTVMRmlIZ0tFcEozaGwvN1dCYjRGMXJsNU9Xd1hJUGpLWkJ4MXhvWEMxODl3ZHZ4L2l6dUZkWGpxQ1BJMVBWRjhDT0s5Nmo0ZE1kamtCZEtyaXRTSFU3bmdKM2QvM2Y3ei9KMWs4RXpUM3p4U05CYXBoK2I2eTFUVzByRnFNS29kYysxUzFGSDB5THFEQ0F2RHB2TGcvYlVFcXRmRmZwNnB4cHRsTCtLQ0RUc0IxMXgySmw0bzRMMXl2S2NtOVV1TVZZTWN2NlpRY2t1OVdPdXVPc2t1cmIrNGNQcFZQbnQvMTRac2JTQ2RPQmVVWTVnTzNBVWU2MFNMdncrQlNzYXBheXJlRUowcHNaZi8zV2hPZkZIem83b04renp6di8zbDhqTVZwcnN5OHdFbFdaU3FPNklSTWR1WGtUNDlJcFdvS3FDNitxMEd2Y1FrMUhzYWxrVHd4ZHNONzZ2aEhySXZBUDJZUlhaTGlOTDhySHNYZkxKbFMzTVd3dHpIY3ZEY2czK2ZtYm05VDl2NWJIMzljM0RqK3pMamwyZkVTMTZWdXZMdW9vSkRYMDhQajlDem1jVy91NWZCNnU0dGNoeHV4UnZSenl4VnQ4YkpvVmJPdW1SVXRZeHJ4eG5ETXcyRXp2TngzNTNUbnlPOTZkRDNzVy84bCs1eldiSjNzS1YzODJYTHl5dzNLVzNSZjRQb3ZQazIzTXFSY292dHl2WHluNWlOYys5R25pOERDeVdzQzlpa2pITlRlU3pNZmZGTmY3Y3djQ3ZFZWZOWkxlOGdsaG1GRzRQaWI0anROQ1JFS3VibnpKVjQxdW1tRC84Rk1XeitGdnRHQmQzQzBwdkpkMDRjelJUV2ErNWh4RVpkQTh4ZkZjNXJqSXV4ZEEreDR6N0xjeTgvMkNBNnBEZ0dIOEVQbG5wckRxc096dkljYjhVWkZYcTVtTjF3ZDVTTGpuNCtiUHhzdmNhcUlOVVJSby96VzJUYTlwWGpkdjlmM0ZrdU5XS3pvendxZ3FyeFNVWGFtZVFhWHBTeU1ZV1c2bDdCWW9aTEZuZUg3cjB3aG02b0NLbTdNaUdGR2FmSDZmMjdzS1dhWHBlVWwzUmoxQW9XVk5HT0dGd3hZZDBsSlFMSW4vcnF4dFRPbVNzSmQzQjUxaEJtenBSb1AyVmJJVmhSOW1yUkxWOWhYM050b1RURmpFVFduQituQ2s3bE9VMnZzOVNMWFplSWlrVHFmYUphZXZ3SkZ4YmxEcXZkM3ZyOURkVzcvKzZKRkFQci92MDdyMlE2alFmVFFlNkx6V1BQQmpnK3VkLzRRaEh3ZE52VWZkS1BzdG14WnRpcXJ5N0t5Z2E4WXh5c29iVjlHcXR0ajRDdGd0Yk9Hdml2cnFNN29NNnlPc2x0NVpaaC9rc3FxaHdmQUJyVTlKRXRyM0tiRmZSRlA0YzJTbTRQNTdmU3VxV1ZSN04vWFJTNXVjR25wcng1VHZRQ2UvOFVvUmVUcUhNakxEOFlyL3VhRzVIc251eDZSQVk5MmVieFBlTDNUelJLSldlNzNEdnM5SFk4Q3dPNE9yM3ZZNjJtbnBlYnBiczhkbXM4VXNYRVlub0NjY2dWRWo4UFFWNUNyQktyVUxJSUtsdTQ2ZTJjQnlJT1c2eVpiQ3JaaC9UOTFRNzY2UWRUcWNKV2JPaW82WDBKKzFGOWQzSUdvTzNRa0IxVWhJckxOdEpUMS9kZi82dGQ5UC9uOTA2K1hGY2twQndQbU9vVE82SFUrWEdjSWpId095TFJESHFXbkVDMHcrdWZKMUpLZ2dwRXdjalVSanVFYWZkYjB5ZjlMSWxvVVhNQ0R3TDhWTG5GWUM4VFU3cVZWK2lyUnJ5L3hXUytOTGQwMVJ5QkNVVEd2OTJiNVhWMUpaUDUvTlR2Z0hVZDFSN2ZEMjRXZkRpQ3BNMjNtMTNOeEptS3g5dWtycmxoRjd6QzZacnQ4KzFyZnRlMjRWZTRpOUhhMGFOVUoreFhMQi9XZlpmRXJ5cGN0WDdIaUh6OWw1TkxtQko3QVRIRThmdkl3ZGp2R2QzK0NZQWphVGtrbDMvejN3QlZqOHZNbXp2REFWYmFzQWdLRzFPZkFqSW1KMldFUFpzRk0ySVpiNUxkc1NMKzdCTXo1d3J2TjZScXhTRlRELytXN0FpRC9Udk9JV0pyOWs4dDU1WGgrMWFYMlU2cW5seE16RzJhUWNMdnpHWGFmdDBvT2NGV3ZFVjJacVFyQnREVU80RExLdkQ4ZkppVXZQK2Z0aEFma2lnR1FpbE5BanRCVVlxWDQvNmVGa3MrdUMwWEh6cWRLVzA3eU5rSlR6bnUyKy9SRzZESGdlbGFibTN6OWJVZDVYenE0MnRqWlk5cFNYeGtzZC83bWxzdG1IdkcrTzZYVWUySUJNemxTejhWeFQ4VUZraDJlUXlKKzN0Zi9HMkpDbGVIc2J6UDkwQmJSbkNhdTlBbXVjNlpQR0NSWHBIUERsTmM5U21ZejFQS1FuMXllYmgyaHZNcFF0ZmJJd3JwcU5MVEcxTmxsMmh4dnNHM3FhVjlMYmF3NStkYkdhdlFwTjFzSE95dTJ3SkxmNVZLK1VPbnBIVDJvb3h2NHFNb2RWV2dKSDdCTmdaSGVPdnRmZC9zdEtJTnJjblZTek54Q3VwUFFrQVAzNHlzVG5RTm10N1ZiWmErM1VOcFlnajVaSGpCc2tLSzBRUXR0enhkWFhweDhkY09EcnRKdkIzWXRYMzlHNmYxVFpZL2JWZlpFL29pSjdzVURMbHQ5dC9LWkRjMTVyL2RrZXVNYjR1Q3VWNDlaRVF5a24yUllNdG05UlFOL2wzV0dBQlhrRkw2SW9IZjhuNmR2QWtoR0x5aDdiZWd2aGM0VVNDb0ljUG5lcWFlWFh2Z2d3QWVkd3Qyd0k2NDVEWG5LMTIxSGhZQnlqVkswNk5LNC80OGFMdm9YVXkydDRTcGUva1Yyei9UWVdxcWozYkEyR2pHczdXamJvN0hZT21yV29DVVNQYk4ydUNWUnNXK0VTRFhyUnZ4K2NpU1pHdFg0ZmI1UktxVWQ5bm50VkJwKzlJeDBZbkVKYlVVYUtXVk5IY1hVSzh5MW5aUjdpbzlETFB5ZlBTeVhUQ1Z4MTc0bnFsbDQ5b2tiM2F3SUxLaHVQYUxXUFhYTnV6dTkydUhFT2FKNCtlajV2YStOcUY1RHhtUTBLSHR5eGpuajA2cDVCOWE5NGYzYXA2by9NVlVhdmYweldQSkE3aEo4S1llYzVlV1RBdmhNNmtWSjhzVXppSURNdktYVWI1QitKSlc1dDlKUm1mUW9UaCt0Wm4xNG9vcDF0TEd0ZUdaN1U5TzBtYzVseWRXYkF6WVhiZHgycCtwTy9DOHpTUVZHak8vQjN0bEQ3Tzg4M0ZrMk5xVldIcHBwV3BuRWsxbi9tcFpvVjZhSmRKSG1PN085UVZKU3YwaHRhN0NVNEp0eWNiZ3QvbWxEcmY0VVo4RVBnS1VnL0NjSS9nR0RKZldON0VrZSt3U2I5VHVYTjFrbTNDQmVDN0k1bnQ0Q29EQWxtaTRRMUROOFFYZHZBVmc0MjA3eDlmZkJJcmlvL3JzL0sxeGFWNlJzOXhzN1h6a29TQzNqUXltQm9BbmMwZk1HcEJoaHByUGV0dng5cnJkWHN6bWU0UUtnc0o4WVByMGFhYnVucWdBeE1RVFFEditOUGN3eGoyT3lNNmR1LzNmbm1qL0d2MTFrUFFJQmZOQmNDd0tUdzNVZ1M1d0ZyQUFkUnhWd1JnVzhxUUl1aDF0SEtsT2tyOXJZeTE4ZmFvd2lXMnNnNjdZR0wxakpaTUpVd29jcTRUdVZ5QjIvN1FLSzdYUWJvUEd3QnFMV1FEN1dRTDdYUUg2ellRMElJMzdvNisyZ2FBSDcxMjNkMzdjL1BEZGNLMElBaC91YkVYSzNDV3dIcDJFeVBPeWJIOXJZbWYwQjJQc2hBUE1zU0habWNldjRGc2Z1eGYzOXhmMnpWLy83RDRzWGtiZ1podGw4cXdZT3FJRUgxR0NmKzhFZkw5TnFNNStHelZmMm4yLytNRWUwbVVldFpjQmUvU0hvY2tZY2NKNzRCcng2ZFJnQW9EMDRCMDcwcWNob3pZTGtXb2I2NWE1djhtZVdKbW9tQUdwd21QSWZRQmdXNU84V2FqQUh2bzFkdi95aTQ4YjdiZndUUFozc3hBR3YvYWVvWVFBZ3ZsOUtFd0RzNlI2NDBmdjF3Ykh4UzlIK1Q5ODlyU3JOYnEzbk5MMWZIbHdBK0VSRE9JQWZoMXprd1JWSFdndVBUbUVmV0svLzNYdE43MGNlenFYYlJILy9zNkQzYjMrUXN6enNsTkprNzdkOUd4bHNUQ0hweHpJOHUrL1Q3Nzg0UXRXOHNvSDNRK2pKQkhDUjhrcjRSeUErZjZ1RE16NE1jallQOTdTaHY5SENucDhLZjNpR1VndmJnL2REdU5EeFNhSUFLTVQvMjFjWjhLRDhETDN4dVRoRmNXMmk0cDlWN2hYTFcwQlZIMXlIbDR0N1BMMi9sUXVvdXpoWDc0cndodjBha2JLbnA4OTdQTk83Rkh6am9pdVdsRk5lcytQL3NCYlAvMktuSGR6OHVtdnJQWlN4RmJMaXdWeHlEVW94cFJrM2wrLzh6TWVQaDVSMUdBY0E3c3JWKzQvcEFtSlgyNVZzaTRndkF3cXhXRFRhRUZKdXlEUTJFY25XWHFsS29wS3B1YW5SQURUQWhaTzA3WFpiS2prYmxuV3A3UjNZYUFOVFBiNHBHVGR6dVVPcWRZMVdpZThtRDNqb2NUMDZVeXdRQVVsQTIwWUJvS0psWFJBSkRNbE5rTVo3eVNvdFpFUWpRSS9FVWNsV2xkV09YVlJtQ2xlT2dyWVdWSTFCTDdtYis3MmUwZE5yc0wwQzRkWnMzb0VLaGF4dU5zbkJFYkZ4TWtTRVIrK1pqTFpIWWhKVlYzbXhveVZSYVVUMHFqb3ZyZWdjVmRSc1hqa21hRkZ0RWVKbGplUUZWUXBtVTA0UWNiQ0hqQXoxaVVJYXd2bE9Ya082TFI2a1hlb21YTW9qWlJOVjNmcXF4MzdIaDdmVWVnRFZDMStacUV3bHE2NjN6Y3k5M3E1NzQrcXVBcjB0dEJVcWYrSnRqRmlwYzBCYSt5bDVhOGNtN1l6TnJLTkErSVFGTzNwZjFmclZiZTFEU3BoTldSdG9IZUpOaGZzWFJlZXhxdnNGcVNmVTc1NkUxaXlyc25CWld4cFlhR1ltSVJLdldTN3o3T2cvN2k0Z2RtNEpEYVJjbWhqcksxTTZOL1JhY21PSmhHaGw5WTA0SEt4a2paL2NHdktDbkFydGR1d0lkSzFJUmloV3Rzdm9iNUhZV1ZhaENMNTdpWlpTOVNVcStEVEg4OTF1QUlqeWxWZW5OYTF0U2lHYkhTbjJ6WGxucDh1cWQ3bnFtUG1uQ3dYbXgyMVg4dVBIeHpnZkVJdEV5NTl0dDkrdXY3TFhkbFBveTVsNjcxbDRNQUoxbzVXb0tJRjJGKzZYWjFUdDYyTE41Z3V4V1dXbEV0TWt4UGZkdk54RnJZZ1IxMjFSbDJ2YXNvRDhlZzYzc0Y0dFE3bFFlR3hiUGVMTUNUaXFyMXdETCt2U0pmVjIrNk1YZlc5Y0VNUEswTC84N2tFaThZMnJiOVZEdCtQOUd5THY1Y0JXSjFvdTdjS2RFeFdlcjhqUDR3dkRTcyt6NkJ1UGFHS09ML0NtbGlTYTRieWlMdWcrbVJCUlJmQkFON0dTWjAyQzRYSDhlcGRXci9DQjhnYlVaVXBlU3M1eE5RRElPWVZBMUVtSWVpS1hXS1pSQTFWR1RDVHhvbU9vZ09qUURjZlgrejFybE95aG5Vd3RFUFppUURTbFNRMFhIT1Y1c2k5ZTZaM3E2OUJudEMyKzZ2UG9QdkMrNCswVmJUdDQvMS84d1hJeEc0Nm1FNHduMEhpMy9YQVFwaUxnQUZaZzBMajVLSCsxWEJySFFucGhUWjB2KzNPaklwKzZiMGdzNnVvU0U3cVZ3anUzdGVoOUo5Qk9YYy9Dd0R5Ly9hVW1GcWxGTE1tSDVsVTFSOWhSVXc0U2FJMzBxRkhXQW5tbVNscW8rYXR1RzRYc3NTMTV6ZjFTc3lsNWJaM2I0cEZYODdheUFjZG1jWit6b2VoenpvWEVkYVFTWmtvb0x2bVY0TG16dXg2dkV3VzdSVkNFdFd0M2RBVUszZkZpWjFhZGk2Vk9RWGNoNm16R3p6Mmh6amZNS1FxVGppajJ1MmFwamlUUHJhUkdKNzdhTmpUcGNkNmdQSkJXQVA5WHRhcGNXUDl4K2pMOGpkUFB6YS93cWlOdWZEQXc2M2JYS2tscm1zQWUrUVU4SmZ5ZkEydnFGK1JQM1luMTNlaGg1K3U1SHJiTVJJWXc5UEx0b1g4d09ZRzFrWGVDNGVhOVowMk0zYU1hdW56OWNueWF2WHI3TEVRUEhxK3FwaGlKSHkwSmdKZ0F5c3pvbXozVGxsWUJDZGJJdlJPY1VlTGdOWkx0TE9wRnByWDA0V0tPZ1Y1QWxpdzlleDJiTTJ3Zm5ZK25Odk1WL2l2dS9oT3p4RkhWYmxKRFdhTko2U1JsdVZHOXNWcTB4clZFWFRmVUtCdU1xNmdQUVhkVXMxSXlWdFN3Sld4dmhkK2luWFE5SUM1S2h4SExNdDRmbkpvc3V0WU10cVhBTEJ2blFGUUJtSE9XZGxWcitEVFB4bElnZDJHTXE4bGhQNDhSRFhPdUVRTVppODkrWWljU2t0Z0pJTG5tTGg0T2gwTzBlTXF6ZG85YnlvZndtTzM3dWhQckpJZGNMNzJzRTV4OHpxaW9WWW1reFZGRmE1L2JsYW8zQUtnaC9rRU9BbVB1eDViRE5PUXExYklLd1VtSmhpWUhDM0NjbVpMdmtXRlZrUTVaZWpuRTljQi9zQ0lpNGxVMGtZNmV0UlVOYVh1b1FMeXRKME5veTJvTUNnckxpSkNkUVIzREJPZit5eFVDanZMZlFGYkVlYS9UbDcyU3VOT3VwbFQrbkJ0YVdncmx5ek5jUk94c2JYL1RGZEp5LzJneFBhM29VMkdwWWJDaEwydjVIMmF5SU5XTlFML3ptS3pZcVVDc3JWMmFzcmVYUkw3L2NsNGFUNjdTTVRBeEVmSkx3aE9oTmhYT0p1L3Awd04vdkNWTXFDenhPamZONWVMUkxPQ0tJYytNcjF4ZTZmQXdiRnNXNEw0YzI3bSthdG9BZEFUYnBsL04zUkpnYkIwbmZNMjZMZnVLa1BSc0RTRUEwVk1UamREWFk3SjRmNzgrWUYvUDQrc2hWK2hjbFpUR2Z5UFRtOTB1VktQUmNCaHV0SzVDS1dZZTlwZ2E4Y3VDcVJqaGNNbzV4Tmg0UWNZNkpSM2FrNVk0MW01U1JCNFdGRlV0c2lxQVVqVVNNQlo2N1BjTUlkQk1hMmljRko3VTdqMVdzZjFPYXlHY3F6RXpDM2lBV1VhNUNqV2FjM2l2MDdDU0pSSW1HRlBiaWQzT3I1V0N3TGYyKzRKMkxzYlUyVUZoVlN3VHJGcUR6SWM0Q21CTmpKRFdsVmJUYURRYTRtWWtYcGRza3lKM2RUVWVUMXhHdGxUSUp1Rk1PR25oT2xIS2toTkVHaEp6OUJsK2pBbERNQ29EUW1xWnpCV3lVVlNJUEhWYzYyUURaZzlQSE53RlpUREVrSWtsbWdRaVlMQlFrRDRIWTlWb3JLdGFBb1NMS0FGcE5jWlVTaG13SU8yc2xSV1ROaldtVmxCOGY0UlJ2dUZleHdvcVExWmtCYXZqaHVKaTNnb2R5ZkRKS3dMekFGRHZvaGFXaERSaUo5MmpUb3duOTM2dHV3VGkzSmxZbE10d09DeXQxNXZGMWFCbEFtWkE4Mm90T2RJR0N4MFdRSm9PeDYvM1kxblpvZmZubERsbzNiL0g5cjBTSURMbXdZT3VKYzlkYWYydFdSS0FMYTNEVjlwQkdMdG1idmEzcEM0YUo2MFI2WHFiR2E3UisvZVQvZDVRcW4rbzhvZFk5V0MrcHV5VjAxaGlDSHdjbzI0VXBWRjFIUjBTbXYxNEljcVVzTkJqcFlyYVhvcEJGNUphaDZjcU9rL0phRlhtcDhsazBKYU1naENrRkJ2UURQenJGcFF1QU9Jc2FZMnY5Mll3cDEwZ05GRXBjcmRoN3RhZU1MUnRUTWt4R3lVeFNWVmdGU21YWmFOUHN4c1krSVpwOEpHa3hwT2JBRjlOZDBhVzBQUHducnI4SGpDYkJDdDdwY3JkTnkrSDI4bTZRK3BYajQ4K1VNSEtDMkZOajJRM2VmKzNhUnFIdVJEK21iLzVTZWZ3OTRNYU1MQ2ZHVlpaQ1NmNlM0K0plL1BoQitTbUsxSmZPRFU2RTFaVXE1TXQ2dldjOXphT1U5VmxrZ3ZxNUl6aGVYcUxoWTNwOWRNUDc1by8vY1hoTEdlZkhlemFLODh6SlYxZjgvNTVpNnI2OWVRZlpYRDMxbDc0cE9iamVyUFpmUmszYzRmeC9MVXhlWWd0Yk03dXcvMXFvZTl6YllucCtUeU1CN2RXMDkvQmR5ekticXRlS0hrc0dseVFVRmJLeGQ3Tk5keGRFa1pBQUJBOGlsTVBHenZSU2dHQkVEellNWG5uVUZ6UlRIVVNnTlo3VlVUNmtlQWUyNXBxZjlRWDFmODRzV0RpSTlQSEViVTRaV3RMWUxQRVQ2VjBRTm05ZWw5aTBMUTlIZTk0UXZDbHVuSUVHaVJjUm1wUG1aUXBEUW5tRjZraEFBUHh2eDkvMzMvLzk4TEgvMXRTTktJZkFNQmErdzhaNUFGOFBHLzlzNkluK2U1c0RnR2dZQUFBRU1DL0g4Z2p0NnZyLzBhOVU3N1hYMEJvS0JWQ2VvN2czWVNOdDZ2VlE2V2Q0bi93bGVxOVFsWk5abTFJenkvMnl1Y0wvQW9JUnk0RHBmdU1RMzJ3Sk1yUDZDTFBVRGZoNnVlQmxscmhSZkFiOElONVc1ZVNWY2FwTytyYVBpK3hienJmWGF6bzdPZDgvN0xZMVE2Zy81NmwwcGVaQkFxby9yNHQ0Rjh5MytoaUNHZTRua0FqMCtYV1Vna3UvbXljZlYydnhFMFpEdnE3VCthVXRoT1V6VmY5T0pBVldBbUFyeTV2d0Q0bnpTT2ZlWTJkcFV0dDIrYUFmWjZxZDBObExzYzQrNGs0SldGdmY5UVRxdnRHTGVSalpoT0M5eFo1MWNMM3NJRDlRNVVqWmR1eDJ3V3FrS3B0RkdVSUxabEhMd3JaSVQ3RlVKY2lwQkQ4ZktFOXUrOC80aTBYOHR2YnZPWUUzQkNQamJIbEhqdG1JdGt4dmlzaTJvRXVmSnkwSVFZTnpEMjZvOCtLMGJGc2w0dlkvdUlKUUhZb2VOOCtXUVE2ZHdKUFMxaUp3ayt6MkZTMnB5ZTZyYzB0YlQzQjgxTGZoMlM3aGhmVW1yRnlMcTBFb21pSWI1MytZS1ZlNzVMTWRBd0RrSnNDYy8wU0NzVHN4VStZV20vS2V1ZksrV2pjc0Y3WlpGemJoVEVqM3BuNXl4VXRENVZXRHNzdWVDdGljL0MyTWRmSTU3ekk5cjJRSHVOU2ZMMjhKeWx6NWRrN0VuSVJQMHZ0WHd4dk8yRHJNdmFyeEdKRXE1WFhMTCtMRjlSeHdlbElkaE54MGJUSHRKb1JQUktVVGlueWxaSUU0RTlYbmFVVFFEZ294QjJNQXBBblNrTks1Sjd1NFN2QnRuTy9zbWUvM3QwMEF1YkovTUhmUitrOFpFY0Z5Z01BQk5DUWZyUTJGSXdEdFRzQitoOGNnOE1CQ0l6RG9TWUhBSmJCdHdiRTNYc2M2OTIvTk9EVXJqWWxHa2c3RjlKQWtVN1hJS0JZVzRNRDNwN2R6OUhNTXJzQ0FyQXI3MEkrZm9hYzNWZVE4TFg1UklKMlJqM01HdFZyWUNWRzB0QTZLTld3b2RyZU9wVmEvbmpYVTZ5SFdKeFp1eWJKNnU2Z1U0ZDR3MTdhekVKTW9WOHI0d0QreWtya29FWjkxRlpxNUhMeDlpWG9BdzgrSERBSU0ycHFXWER3em9mWFBOd2JzZzJmUis5azZ5S0ZnTHNISmtYOFFwZm1qVmNkWW1GU2dOeGVyMk9aWWdvRURaS0I5WDFtc21SS0VubHJJRFFOUVBsQVVEWXVsU2ZHV01jeGVJZWZlcU1JNnZCQzFheHc0OTV2SWJmd0JXSHd4VlV2VUl5V2p0VHdXMVRnK2NaVERiMTlqYXJwK2ZWVkVncDVmWDdzNDBLOE5qbnFyam4wdFkyMUZkTWI3WW9waVUxeFZXS1ZQeWF4eUtjazVsUk5pRzJFYlJ2Z1Vpa29UZzkxU1hTZ2JCSmNiUzB3YTZRQnBpUnFtVTFJcGFva0tpNVdNWkdOaXJwR1N1R1VSQ1pRcFRXcWhLK0tlYXFJcXdvNThRS2FQNVhoMGRGV2thbHhjRnZZL1BXM1FycjZ3OWRjMTNhbEptMjdyaXZ0Mmx3VmhWNUZJbHBrcGFvQkVWWjVZVmF4RUZYYUJOYS90cGpmeGRaZXp1dHcrRGMrSVAvSi80eXk0TnpncmdiSXdYMEVHYlZDWmFXd2xyU1NjajZPL0UwK0lCRmgwZDBpKzQ1djM3ZG1OWlhLOVRYd0d2OE1mUGJldEN4NlhMK0FwQ2xEVy9Iak5pSys3dnJxMVNzNDIxMjhiYkcvTXZpTWM1R281SmMzS21kZFoyOG83RVU3VnJDR0JQWjROdEw4OS90bFhGMGJJWW1OSXdCQkFRPT0pIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpRdWlja3NhbmQ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQURJMEFCQUFBQUFBZFhBQUFESFRBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdsd2JuRlljaHpBR1lEOVRWRUZVSEFDRkFCRUlDb0dxSUlHR1ZndUVLQUFCTmdJa0E0aE1CQ0FGaFVJSElBd0hHMnBnUlFkaTJEZ0FhUEFaRmtXd2NRQUZtKzhUUmRrbW5VajIveWxCbXpHaGRlaGJaU0YwUjd1bzdoa1pDWkdUNmhucG9iWlRXeHk2Y09EaDBFZy85bzBGUitIQThzM0oxYjN0dzU5WG96Z2NDTndqWm10dHdDVnhYNGhMb3BFa1RhUlh0MFpJWTJJdDRqZjkyWHNDdk1STFV3ajJRbzBJa2hjeEtrWXE1aVF0Y2ZuaW1ycFowanFIdEduZ0pibC90RHF6aWlxZHF3QXpvUTBUTHg4Nk16cFg1dEk1VC96djk2OTc1cjRBb29zUkJESmZCYm1rV2dzSXRvcU5iRzJYSjlDa2VvYkhiZjN6QkJtb0dBMUk1YWd4R08xR1Rhb05FRlRNNjdJdW9uOUZYdnpmK2l1aXdRRUsvVy9haG1pYnorVmRFYlZWUjRZTitQZC9qY3pDVE83TG53V2dJcUZsNVFBbDIxWUIycDVLSkZsTDZKZjdaZUJ6ZnU0Y0ZKM3ErQU9DOFFWNjZ6b2JXd1loV3dEL1Y1c212RVhvekVtRVRXdnRLRzJUUEczaFdjcFFtOW5RT3ZSOEpGSVZnWkJkMm1iRmMrSTFmWVh2d05Ra1ppdnF5UDBlOTM4NnkxYmE5ZDN6QnFHTHF3QVgzWHB6YlRINit0Ylh6R2drQTJ1SmZReWVsZldlSlN2Z0MwSkZVRjFheE5kVFUySFRwU2o3bEpsL25lbXE3Kzl2U01rLzZKYWRHc3NxcmdHZWV0bmFOVlBMNHorZDdxeC9zZ3huRjJUNWVnSFNVV3lYN0FERFZNS3hveHowQmNodVh4aTJBc0NhdFRQeXZnT09OVE9ick9TY2NHdUNRbHpoRWJLQi92cnR6MWlySDhoc1puYTc5bkluaHkweVJFTENKeUxnV2Y4Ni8zQWdUREFBQUxwak5FZzNKTk5RWkxoc1pMb3lwRncxcGs0ZGN0aGg1S2lqeUFrbkVNSUJRcCt1Si9pbGtoaXB1Q1BIZWcrRzlscEZvUS9hK3hPS2M2SEZBeEIyenJwM296QVhhaUJ1eFZNOFZtQ2tXbVY3dHQ4M1VxbDZpNnh3eWFzd0NwVjkrY3pVNU9manJNckgvQjFiZHNTWks3bVNXL2EvdENtdktvSkVpaFlqVmlLUFByeW1LVkRrUC85ck1NTXNjeTJ3MEZMTHJMUFJEbnRkY3gwekt6TS9FNmlBcENqNkwvay9hS0EzQTI4T3lWeGFDNE9sVDVhZHVQTVBXZlpCMHZCa1J0bmNZQUdkaFN1V2JsbzI1MXJUOWVDT0NLTGdmYllHa3FCSjZWUXlhNEtUR0lIVWc1ZmhxUlNZRWpNSFJ4SUhJK2xKM0ZUenROMHBXaDdERERGUHB0b3B1TjQ0Si9BSWtnMVNlT3BjaTloUDBSVFFFaVdPd3p4TjAwWkhVK1VwUzFHRjhCWVBFRDNBQkxGMW5xTEZmQXRTSWRzNHRaUXJFSkN6OVRLdFoyVE1VVmhheEhPTFczaVlTdDBwb0VjWWdvU3g0N1ZEcWN5aGtna0ZQWUhkdk1TeDlWOSt0NzZOTFpxREIybTlZWWhtdG12NHowbDcxYURYL2hjek93UXV4cTZrMWxVQzdubW50Ry9QM1N6ektHUS9md1JVRC9jT01RaURJcFRnanh2dmIvUGJ3RTlzbEE2aWpMSVR4YmtHbHAybVhoZlUxTzVBL3lIZWFiUldJeklkV2pXWjJXMDk4UzNOSm14SVV4RDBKUzJJUXFoNy9ETE9WRlVZOUkvMDcxZHFKRnk0Z045U055UHNBcWtsSkdYUGFmZU0reGJGNXFJWWMvSUFCeG1sbTRCY0Irb1BPUnoxOUNNMm91aDJvR3RFTk4yQUpGckNWek80Tm9EM2V4V1NFS0c0c2pNRHRPVkpTZ1lMVjNvU2FMWWVlNk9yRTU5Sld0STdYcTZGTU5CNnBCYUR6bVNHN3g5UC9uY29BUUMwWU82NUFWLzhWcVI1cEM3TzBLSlJTVGlYTUhlYWp6dnE4ZkQ2VEVhdGRTZUVkQ3lKeU9QN0hTMEhOc2NqbjRFVUg3SVZ2NUI5TmNIdDZRK1F4cjVOZ0psRVlwQmJsN2lXRlRnMlN2c3ROTHBrMXdkMEVPQi9IS09QNTFvQWtLSGJrMGN4Z2FVU21FZHp2dlJFWGZYblVFcXhxR2dkeC8xcFVCbjZ5U1ViaUw4YmtJbENwT0MySEYvWTB4NXFweFRMNkxtbFVQYkZPSk1qWVFEZVlKSWNZQWh0S1ZxZnJGS0luZ21qT0k1ZXgrV2JTVUFyQ0dOd2hJRGlhS1BRVjEyZXphZEEwNENIRzg1TFltaDJnaU1Fb2hndUZDRTdXdDJSbnBaT1AwTEFtempKTkpNbDFGcVEyd2ZiVUJKYjgrZ2RmaVNHU1cxZ0MxdFowejdRVlFkZG9UU3lzalNlYnpvbGZ5b2hTdGdnQmVlTENIT0RmTXlvMkJPUzhhMTJoaWRyM1lVaFJEVlhUQUl4RTZ4d21zMERFZzFNUkZIQUd0R1pKTEU2Q3RCWmw1SjJBN3VsVFAyME1qUVh1K0ZHY1JoakNvVlh0b3daaXRoZUFpZ2Jsbk9aSVJnRENnWUtlampCUW9RNmhSaDJMSWFyR1dCN3orWWl0S0F1cUVNQWw5UURJZ0hjOVJzWWlVekFOZ01zWkdMTG9VYXhha2tWcmZEb3pLMjEwWmJLMDRacGk2Q0VCVm9zTU9BQVVWZ1Fpd1YySE1qQkR1S1VnSk9JZ3lYaEVNbnNVQ2xTYWFTeHc2VHJpT21NUlYyNFdTRy9BcjFvYjhMTjlNRmFmYkZvcU5yY2NDTnk0a2lqcUl3QkpsTndCQzhtV1ZnbEcrdE1aK3Y1NU9NVjRFaUYyS0NJYlZTc2xGb1pOcG1GdzgyWFdzd29DNTZLRCtxVXJvSXpLbW51NEdBWmVKWi9FQUJNNFFXUVJwRnFob1ZZQ1FmUGRwT2hIR2FXdXg0ZXVGaUhudTQwMHBvMU43Q1hWTW5mS2pSMllkRmlzY1dxRnF1QmROdkFhOWR5OHRFVFArNzEzTHdjRFB4dkRkMGF3KzluZXlmZ2QvWTM4Q0VMNXNKaVdBbnIrMzMvd1pLY1Fud0tqclhpTUFCcER1Q29hVWlrR0lTaENBRUZ5RUVWNUplbEZjSEJwOUxuZS9lL2E3Yk1FdzhLcFA2WlpWbVZSOFM1b2JBbVZaSldPTTV5MGo4QkFCUVlRVFVtUXlhWkdFVDF4OUhEQ1VrTUcyTTJIRU9odVg1SGpUdUJwU3BBS3dpWE9tc3FCcURBWHpRVUl3WitmT0JIdmdaaFloUEczL2pWeUl2Sk9EZEJJQzBqSzVzS25ONzZxVXhzSTVSanRBcGl2d2NtZUFRSzlGWUtHc0VTdENRUW9nNzZHNFplbXFUSlRBUlcxRDh5QlZJUUJWTUloYVp1L1ZIN2hTT0JSRktSbWpRa1Nia2dRSG9pcll6aEtGWFg3TElKb0xDNWFhbmkweGdXTGdSZ1RnbGtyT2ExV01Kd25ROVh6bGNmbUFEc2hRNEg5RW9lbnk1U29ySHJXZzl0czBwSTd2LzNzRWV3QWF6cnVDK0dDUENmeHJrVDlDWUE5QzliQTVCeFNLSzNkeDBBWUkvZXlpcW10QnVBbzB0Y051YnI4MHdsNCttNE1QajltS2FXUC9GSjF0bHRQZFV6TzRHL2hMOVdqcFROc2xWdUl5Zkk2WEpYdVZpZUV3cXQ0ZGJtZmo4QUNDSnpTZmRuNHBNbzQzS3NrWFd5c1FWcGpEOVN3bTBGOUFQQXZ3T0FOeDJ1dmNiMkM5dUFDOStFQzg5NHp6cWZHYVA3S09iaHJuTTd6MjBCQVlCRVFIOG5nTjdLOTNaMWV1VnpOUHFuN1RQSEl2TWNkZFYxaTYyejNuOU9tV1dUK1phYWFZa0x6amx2Z1d1SWhpUlFzR2EwbW90Z1lHUmlaaEVsV3F3NGRnNU9pWklrUzVGbWpmK3Q5UUFIb2tKNmIvM2diakwxMWtkZk9iUTNnQmg2Nm11OXN2NjNUdWRUb0ZDUlltVld1V2UxUy9hYjY3RGpqampodnBzUmNVdU5MUzdiN0hiVXVPdWkzLzBSRGxmYzBCQWV2Nm0xMVQvKzlxK0ZCQXhIaFNkU0N4QXVSS2d3a1ZyUTBRc2lhODJxcGJaYU9hT05CQzd4RktsaVROTmVCcmVPMnVtZ2s2NTY2YTZIbm9ZWVlLQkJQRWFiWUt4eEpobnZySW55NWNpVnA4UlVwV3dtUjAyRWpUYllhWmNkQ0EyL0VBQm9EUUJzUDlCeVFMOEZNUDhBOEo4RE53Y0FBRFoyRmJ5RWhPTVVMQ1dxb3BoSWlGRkdQNi9KU2Jibm5KZ1V4VjFEekxRQWhDSkl1RWJCbzNneWFTVUpSU05kRUxIU0h0SU0zSEhHc1NOeGZld0VuY2ZyNmNDZ01XbDdqYWFKMDBleFF0UVI5aWlHNENVdzhnU2lKbm53U2IycnNBaXBSRWxueENZTXM2Y1N5SStlMlJ4NkVxYitDckdFSG1Pb05BT0ZwSlN5TmxBVGhIVE5Qb0I5SFFPcng0ajVYa3pPZzRRT0NXbWNQalJ4VEMzVThZUG91VVU3WDd6TXZya2lXbzdkSnNablFRQUU3bm4xL3Q1ZloyUkVRbW8wd2VpdXZKa0xsZyt3Uk9rczV4UzhNOFdMbFRvRXhLUkp1TjVabHVjOVZ4bUdwM1hvaFNGWmc2MDJoMFBwZlFqZ0hITGRVOWRZR1pHVWpGOHhHUGFmcENpTkJxOVY2aTA2VDA0WVlwNG9LMTRvYzNlbHJDaVZFWURjL2oveVFTblBPdGFKbnpIQmFhaGNBMENmQUNxOFM3NVp0QWswcFRuS05BdXVNUVdRYkZpdnRuUFV4bk1MUU91MmZFbU5iMVpxNTVJTWM1UVp0bXA4VnlsUitGQllveWxYcFg3VkJEQW1kbUl0SFYyRlJ3eHEzZjR6Sm94NHQzS1pmcHNqeTh1L1ZXYlVnN1oxUjlNZ3Biako0dG00V0FETVFrNDV3RFNrVVJndHlFbXcyTUtSVFdERlpkTi9GR2FSZlpIYmE3T0xZTy91VDRpSEI0cU1jcXRIN0tWdjBicXdPWkYvdGVZK0RRNG9IVVFZaFE0T1ZRb2JUV04xUzdEQjhQWGMrenV4Nk9RM3hPMUZkbUVxQS92eWlLM3R1YUhTUmFXNDBPWTA4WlZBUFRXTVh3SzRaRU94QmhDOGZUd2FzR2h4S1N0N3lRbEJvVDUwb3J4K2tOcW9tRytxSU0xNFR5WFZoU0lEMTB1RUkyQ2N1Rk9xNTRDY1F2Tnp4L3BjZjhHb2ROWS9TM3htYVYrekpac3c3OWlsZTlGL1U4cmhQVkM0bVFsY01EcmJvRFlTNkNOYjRBS3d4cCtSRUZWUzFUSTZVTVp3NHdZV1FOUFFXNXROVG5GUGROZ3cwRk0rZHFnSGc4MjZKOHNpVmkzdW5RNFRsc2k5Z2I3RzQ1bVdMbmQvRHorL1JuYThSTEVlNTltcXByN1Nob3F0VndTSXZmbUdkVjJ2OHlwcWpVN3Y1ajZuclAxMTFwZ3NpTHhOamUxV0hCOGJNanBXSjgxZHRTMnBhbndUZ3duTjIzM1dxdzRiREpTWkdsQkpUU0RsSGVNWVpYWnRPOWZ1bFdNL2UwRE4zWnpORmJ6Zi9kczJ1WElMS2d4ZGt3TjlXRVRadTdsczVya3d3Ukt3eVZ1VjJGTTJlYWxmR1ZhaDNMVTByNTF0V2ZNNVdGSENKL1dNWVlVamhXeStjRW84ZXlXQk1YRXpXQ1ZMa3liWWpqMXZyVkpkbk9SWGV4c3JnVURMcWJhaDJvaUQ4NTdFU0dMYXZ0a1RMSlJmbU5XRThlYUcyOTBXbTVJc1hpNVRoN1d3bE84YzNMU24zZXVpN1dSNUg4eERZMTJMQ2JDeUV4Vis2eDRmM3RRd1VER3IzaHRsT2ZBRzYzMTh4a3J6bXNqYnF3WXRFVlNXOHZSOUtMZWhaN29KM29rYTVqV0xWbjlwV3Fjcm1EMlZ2R09hSjhlbitLaU9kVWJrUFhKUWZXNXhaYjdXMlJlRHRPSlRhME5iTnp3dFJKUEFaOVJ0cVNheDBxR2xMazkyZ3YxRFg1T1VRKyszWTZ1MFVLM1BQeURSYzhlSWxta1NjRVpwMHdTMnc2d2NLMytLcW5KMzR5ZU5hYnZGNS9SeURSMGo3OEh3ODVIbXpHVk9TMFdJZzlKQWVsZ080OXdOa3RJN2hBMFc5a3dKdWo5Q0VsMkdhQkw1cWtKWEptZ3NzUzZhZ05Wdjdvb0dpQWd4YWwrM3F3VFhmVGlsckNtbFZsbzhZMExNMkQvQU5oZnVpU0pyTlhWc0J4MFd0UGJrVmt2TmFIbGt3Z0ExY09RdEl5eUVVZzBPSEhsemQ5MVFXM3JsM1cwL3MzZHduZllLMGdDT1d6d1B0SUNIVm5OWDdlQmdSblJjR1FTcmppdWMxd253cVdVbDE2dlJaOVZoWFNlTUlTMGtmSkM3MjhrUGsvcjJERWRUUEk5MEdLQUptdHVSZzBwakhhRTVTL2xteTdIUUNZM2dCcWtiYmtwRGl0N0tNUHA5TGtRUVNaL1A1SXFEd1JDZVBSejdkMzYwT2dhRlRqc2VONS9ETzhtYTRsQ3hsNTFXY3BPOFRueWR1RmxtZmhmelZtdDZlY2g4TGVtOG4rZ1FLS0toZ3cyRVgrcC9EZXNpOUdBUlZnSzlrVGxPTFRrUUlhclhNYkpadGFFRDA2YjViZEk0YUorRVRYK0FpUTVKZHR1Y1ExWGFEenZERnExc0xhSmMzdHhLUTN0UUxleVVxeUtXVlEzRi9xMGRGajhZRDhrNnlkZFZGYTUrVnMrRFNHNnVDL25OOWNlbnVFTnFsakovNGNvdC9uN2YrcGlZZVlVcG8rRlpPbEZHeFJ2VjFXeTRWRVBHS0xKcFg3QUIzdUN0TEYyYm1XYUlCaU5GNmhCOTIzRy9UMm11ZHRJRTFmejY2VFV3M0FiclFyYWx3RUZoTzNaTExaSkd6V3p3endMakRzK3o4b1prODRnT3dvSFVBSEFnTHc4WGgyYUZNcjY2anM1U294a3RKWUJlVHJSalg1em5Ca2RtSTlNKy8xaHJjWWpZdGRacmdiclZUUjZjMDZvM211YUNrTlpjanJmUHNYbGlwYWpOTHdhdWZMNUVWU0tFQUhnem83RU14WUpXMC9vaUp4dU50a28wV21VL080NE5kVVd6SXVzTmtkWmZqZGZTVm8yeDhPREhINkx6VEh1ejJwd09UL09jQkVqSjFSVWpSOGI4NzVOSUVCQnVtM0J0dDZ6RW9kYjFoTWRvTWhyR0dxWFU0MkIwbTcza3lMdVJvYTU4UnhuR2lLeG1JSHd0Z05TdXZrQXF1dlIwS05Kd3YzNFllNFk5K3B2VzM1RTB0c0ZGMWd1dWpUTFUzNWZwVThEd2xBZlBuRzdIMDN6VzhYMGRKbm12Snp5WTQ1eDhsaEQ2ZzJKQVRFUjVteC9yRXQzbU56cTNPa2FVd0p2SWZHdStmcTVYZkJPSGphZnZRRDZJb3doaGI5blFheFQ2SkRmU2I4Vmt4cm1WVm5xdTVyWEk1UnE3Ukh5TUpSaU5Kbk9IdDhrbXZiZ2d6WWpnblRuNGR5ZXhjU3pPM3ZReURvSjlsV0lqdUlzUktSOGZiQUFYbXp2c2x2TXViYm92VGFtYzdLMmJSVWYySDB5UmpMdEpxZVR1eUFqZThZUWNKSkExZGNkdHp1VkNlMC9FcmhZTkl3dTBZT3pFdGViK1NsTUtPVVFzRTl1dVp1dnVRWFdiWHBYbENidXZKQVJYUHlBbXpGR2hJK3VPR01CSDdEUE8wb0RVdzFNNzhBTjNoSjZFQitxbzBZUmhJNThiQlhDSVVMSW15Z2hXVnNheXNJU1FCNTZocUIySElwWHpPek85RWxGc2R4dUJPWDBpUGhTeE5QOWVWaHlTU0lwMkV6WGthYlI3ZmZReGtlaVRENEwwRllDR0dpTnpNRGRJalhoaGR6WFB6ZVE2c0hVd0R5Z2RVc3d4K3VtS2lxNDlvNVFyeTRFSlBjaHZYMzJtSjFFWlB2THJKNnBjYVZ1bUMzcFFxWHpqMmV2WDRvcFU3dk51MmErT1YrZXJ4dklqMlVibDZBM25Sc2t4a1d3OWZOQWVqVndNSUU1UkhFU281eHIxeE5LczdjY044TnczMU1mLzl0UkFLTkRMSEQ3Y0w2NW1tZXBhb2hrblBlTFluY2IrWkdBVnMzUW1lczV5Qkd2NHhiSlI3UnVXaktJV3dRNmxmQ3RGdEhBZTBXQ29vMURDK1NCNkpzZG5wRW1QZ0IyZ1NRNkpVaThWRm9JQmhWM2toQ2hmMDJZeGo5SnZlZy9US3FUd2czZUhQTzVzVmtXRFl2R0NTYUJ1cUk3bmFBOW9OQjg3Mk5nb3VJUWJrRXJIYjg4SjJkTmpTNkpwRHJUZlY3cmg4V3J4a3I4Y0IzWmgxMktuTW1LcUhvMXBPZW5odEY0NmF6RTlMYTg3dWNSdjNKUjJ5eVE3bUlObGZkbkdqblVKZXQvRjF1amUrcU82U3c2dllTcDZEUnNpR2dKNUJjeFhWbzNSNUxWK1lWMXV1emh2aVhEK2FiMVpHTkR4MlB4NG5yYW1hY2J0cUhLb2N5djMwZXpCMjhHcmtqWGUwK3hBa0J3YVRNekxkWW1GTzlPL2cyR0llSEFTVk5yVHo0VXhySThUeEtqalZKcXJ0MVhyZEk3RE0rM0RlK0NRMWZXNS9WM1RYSGRmeG9yRXdNUFRieHJzUmFZcG5sS0hNeHhaSHMrSmNmTWI3WEdwUEJXbUxmdUNRL2ZTemV2MlBSYXVDejZBbGwvQjRFQ0V2dEZvOUJyR0VkWnBuSU9JK0xnZ241QmJxT3dTYmppLzFocUJhMzRuOWZKOUFEM1U4aWJ1YW1HR2QzVzFMdVJsTm9oem5Ma3VpUGVEMWozQ0REcDVUVk5HQStGaGRYb2FZRXlNVDBxVHgyUm53cHM4SXRCOWZISjN5YTVGZWdDbGZQMHJSbGw5ZDdDWjMzM2ovaGczRzJNdGF2TTFmQlVOQnJOMVRlRldGMG9jN2l3Q29RdkttZVNwaEJSZUh0eXcweWl3OTBuNnhwZ0NZeWttb05LR2htaDBJVlpZOEtCa08wVzFwcVlJaTlNaVRWRzk0SjJqaCtjdk9TMFJzZVFLNWdVRDhFQXFQMkNhcjlJalZodFYzc3dQVk56VEIzdndZQ2tpV0JVN3I3M040MkJBbjZOMUc5Zmw5TlgvRDVBK0ozazlSNk5VVy9OeWJxVHJWc3p3NXpmT0Q4Tm8xb3RZdlgyU2dZTlgxMERjNVlvUHVKTFVqNjZkVHRjT2wvUEViWVpQaHJpMytPKy9FOStOOWpiZWFRck9RNWdKMTd4MENKMm1Eb1lZb05CbFROV05IdXp4YS9EdWZqcnd2ckcwb2crWVliRkNiMFRCRC8zbzdpdHpON2R6WEdvZHo3ZkozNnhzRE9reU9TQTQ0TjhySFB2LytUTWFERnBKbjQzNE44NU0vbWNxK0NLb2lnaHl3ZGprbFZ6Uzk4SGc2UUdCR1Yra1NhYTFLMGx5UjVUa0RjRE4vWUpUcFIvemZielNrazVldkY3UnVkRllLSnFtSWhFaVJFaXIwN0ZFQk5hejRFS3o3ODBCTjNxSzlyT2IrNFlvMTh6NzU4bmNrZ1M2TytQZ0xIWmsrdlhlcjdJYnU4QnF0cmJzMWYzM214NTJIZXlaSngzb2lHODBYemRiQTVTLytFSjdMeEVmczJkUHo0WWdhc2Vod1JSYUxLTFRrWWdRSlhrUFJiQWgxanFYbVNyZHp2Z21mRSsyVFovZm00anR5K2RqKy9mRzgwaVIyNm4vNjUxaitiT2RFZVYzZVpMNzRRVWlzSWJScjNTSkY1VG9uV3hqZmlJR2VkM3hhY3VYWUkvWEM5WHRoWUFZa0RVWTN0MUVnVE5PUmtnRThRNFVEU2dVUWNPSEVBdWdQSjZGOXZVWlFKNG5MZFFyLys5VitHZ2E0dnNReENETlg3NTk1eU5YcE0vZld4QW5wOXcrQzZqTkluMjVVNW9zcVFHckdIWHBCTzROamJjdTZ5NWZjdkpvZHJId25wV2FGWFdEVkdGcVhmM1pXdU56N0Y5ZXZ0cnlqRzVoYVRvSFA3WHZ4Yld6YTJpRmdObFhwdUtjSHlLNnRITDVKa2l4UysxanV1bnV3bHFEMzcvVzBGM1FUY2RJTFVXMEdOZzNGYzJrcDZOS2k1bEFUbWVtb0FrSVQ1clp4WHozZmRtcCtRTm1HNlJGeHgzRzZ5ZVhpb3Baa1Z6ZmxkWXJUZlRaenhZOWdvMitnWVhtWUloUzNja3Q2RUVQZXpZMjNaSGhqRzB3UHVIdDF6c3o3WXNkR2VQdVpZbGVNTUlzS2EwbWJURnJ1bE1HeTNzbUplUkNzcGY4UHV6UTRISVJxZGFJWExoRTg2N1lnWUJkbnRYa2MzNmJVL1A0dy9rcFpUOFU5RjBNMEIwaG9Gbm9OYTB1Y1d3eEZpNTBzN1QxNXdOMHdxVFpmQjdyTFY4eW1oYnFiY09GL2phZGF2VWZOMnNoWjBHUTFwYjRONDJrZEduMGNWVEQ5MS9XTXljbjVlcUlSVC8xK2RGa2IwdlQxZ09KdVZ2ckNJZjIyVXVLcHA5MzZTRlcwcWxzcUZ1bUpQV09UQ3p3VTc0WHNLQStXQnhucUROVmtBZkFxSTNqV3FzaHluOUhNYTk5U3ZaQm1Hdy9LY0IxZWpReW9QRlk1c3UvT0VQRDcwVHlXb1EvaWZWUjNsOHFUU0F1dlRVWDRGNFNlWTBhTkZ6UUFpVlFGZzNaRDdHLzMwRUtOL3BjRXNBQlNqQlhZOWRpNzRybFhwSmM0ZFY0OGphSUJyQXk0d3pMd0lEVlp1KzNXZ2ZzdTBOcE9jWXd3M3ZYSFpRY3JSQzNOdFFzTFBHbUVNWDFBOHNIMzBZWnVnQll1anhDTHc3ZSs1TkRUZGRROGViR0IrWWc1YVgwS3Bxd0l1cFNMcjN5RDVKbkZ4VHZmYW5wNk9HMCsxK2RtRjM2SWdHc3c5QkJjUDUzbmZIUDdObjNRWlhwc3hNK0tweERObjErQXFXQjRrZGpiaWFZdnZQcVA3V1E0Sy9EakRVWjcxMy9EYkY3QkdLU0tKMDhYK0wxVFJSeXgrVlc3Mm9PdkExM0FRdXJYdTA0OXQzTjlGS1lFNFczYzZFOTZhMDF5WWR2aTc3K0RCUlh3OW1SQy83TFBHSmxrQSs3UjcyMjFjR1FmY1dveTZVS2NyZnhBdkFmQnlENmNOYWN0ZXFIQ2FlK3BDbG1MR3RHQmdtQ1NQN2pCSFIxdGQwWDk0dTM2MWJEK1lsMmdZczk5dGtvQTF1Yzg2NFBmQlRpY2FwcWV2aHFYQmZlMmJQbGkrUDFIak1aRmF1NEJHdVZNR2wyNklhS0RsSjR6NjlYUjlHeHhYSHM1MFdiTGJpOEExOFJUZUVyaDUxV1paVDFoVFRGZ3B4OFdqN1NQaXFUNnNrMk9LSDg1cjRDNjRVc0RLenFuQkdYZlVVb2FGODk2blVKbmtTdittSHZSSWlLTUJoVVFPbnp6R3ZIMHE5K2FzbVk5YXBxWnF3V2M4YUdET01FTWxnZVFxQlNoMFVhUUQyMkk3c2VmVGFya0ZnTE5uT3BBMGVIK3F3ZDZnL29kWCtWeVd3MEIxYTFtL3lMUGM1VlFaOXoxWkpPOExYYjRZb3JiZDEvV0xtZTdVRUI3QnIxMkZjRmcvWlZvMjZYSXNBOUp0aUJLZGF6bG94RlAwUVF3T0pwUVVvRWpndzkzVnNRM3B0MHJDS05vaDZuSnlYVkdjT3d3Zk1hZGNYUStVUnZILzUzNSswMGVZNEVnNS9aTCt3ZlV5MXBHSlVrblpPam5iakVtSEVZaHV3WTBwK3htNHhaTTFLMDJ3MURXY2M4YnNpbk10bWlaV055dUNCWi90bmhIWWp6L2daT3FMdXNnd0J6UVZkdFBGUVhlWUR2SGxSeGN3dHNSMkkxalI5U0tpZHZPYjJwazdEMC9raUt1T1h4M3BtRHc1RkFIUmJtWFZsWithbFN4ZSs0SFN1ZGl4ZmEvUEpZWTZFZW1vMGt0SnI2OGg1MlljR0t2c0g5RDd4OUZWN0w5Uzd3ZEt3S0J1WG1CVzdmYk10WjBCSVJ6RmxQY2IxbVk4bnRwc1gyWWdBdXMwY00wcXhSTFBXdDExS3h2ZmNqcXJnQzlhckUzbThKN2ZlSlJjUVZKQWVzODRyNnUvbWdiVW5xZHovZzBDMnVKb1Y3a2s5L0tXQ1ZMb3dXNU9SUzdsdloyai82cUNPa2V3K2Y1Mkkycnlxang0K3EyNS8vMXlUOXREby9teStTbFpsejlscjhPZGRqdUNIR2xkckRCbkVHRXduSlhCWG1kSjdYcStKS3RCUG1QUmVwZXdtVzk0Uk9HVkVZOUs0OCtyOGlFaEF6blR4Z1ZHZEU5T0swRVhuU0NGZHh2RjhhNEtUQzFOeThacTI3N0JOTGlGY0NITUQ1SGVoWXRjaEQraFo3OEZXQm9CQU4ra2hMeW15eUFJR1djbGE3TFc4MWxnaWNDUWR0ZGlhOE1QQUhka0h5SHFHM3BJdWh1ZXZNL2JpeGdQeXNaZTRSd3I0czRMY3ZIM1c1QkU4Z1YvNncxK1J3ZWpNekNSK0p2OC9HOUVXOFF6K1F3ZUl4WktDakErblg0YzZ0bjlZYWZVTmZsOFUrYzFXTWR3dlhBOGRhNlozUlJ1RHNYYWdBVnZUMFp4OVE2cGsvcXNDS1NBejgxelh0ZnRGZkVETlR3L25NYmg2UVdSWlRZNEtuNS9PRlhmZlNBai83NmJCQWRpWW9SRnA3YzJNcndYQlRadDVwRDFzbTJHSVZjRWZ3dHAyMGFkZjJpWlVYSTN3RFdsQ0FWWkk1VkxmNjZtTXdHWUF4ekN2bGlHbys3dmlMMTlZajRJS3owN1pvc01QVy9QcWYwL3JJenArbVAvTzdKeHhIMEx6VFo4ekd0R3NPM0VJVDV4NlZUclhXK0w5bGdlOVVNTFA1WmJmQ3ZPWWxHbk9pZUJwRW5SU0J4TisvZUJOZjBqYnR3RUU2QmFvelZ4VjRxV09MUTcrNmlrZmRHK0JLd3V4Q3lJK3IyYitnMk5NdGtYN1I3Y2ZWREtXaS9nQ0VrRDFjMUt5OHNMWGh2Z2VPUHZoNHFKWjZFOEdyN05UYkVGUGMydkRzVzJXOG1sanRGcDZjQ1pXb3NyeVJISzNROUR2Ujg4bTI5TmtWblh1cmlRSU9pU3NhRHArdjIxTTRmbFVjTHpZZXZCQUM5citNVnFOdm9EUkNnVkZqY3lnTlhLN0N4WUZqYi9sbzA3VnZaUXRsMG16bi9PdHYrZEoxMWR0cndIazFVQTZ0ZEN3ZXMzazBuVTJMU3hzeDdOTVNQWmV0c21hTXVrSkhvUFhkQ1I5SDZvem94R21yMldZeUpaTE9aRkFkZ3cyazlCQ3ozWDY5M09MeUdUc3kzcStlZUpKc2U5MnlhSWc2NzEvZjhlZ240UEFNeFFLMlh3MEx2ZmRKOUI3YytRZFNUUFN2bENyWjRMaC8yaHFtN3RiYVhEYnpBbGh1ZFNFbzdBZXVXbXFwenkxWEtWMXkxVkJycEtSTHFWUzVsWnFlTjlxOUJzVG1OVW9RTVdSTklJR0dJMFhreXNFU2NnVlpvN0hoWXJBMGFBbFNvd284RlZmdXkrWEZtb3JoT0VFb244dTV4c0Y1WUl3NWNpb25vTUlGaDIxWFIwc0hpdXVtRHRKZncrbm41aFNWRldMK1Y5UlUzRll5SUZKdlNHdzJwTlV5aWdYOEt1Y0RtamFPTzNCdm4wNlhzUWhiZk9hVWRQYm51U0RXbWpJa2s1MlRZVjFhTkkzaGxraFdyS0VaUGl3REdyeVBjUGI3L0l4bHo3YXBIa1RoL1lXdmZtc3NGNlM0a2hidkQzcUprUVVXWEJYbmZpQ1VVa2lKalFKbDhMWHRFOHFkSTZqRmJkRjJKN211Mjd5WGw0M3o5N0M5ZzFTTjJXd0VvK0REa09iUGVscEVIWGtkMG0zRE5Ja3VqVk5LTkY5VEllemYxcXhwcGRDSW1oZjhOd25hcnY0UC9WT01NLzN3UWN3NjRESUp1M0JuanhEd0lEVWpOM25hTW1vamV6bTZQRERjRngrT2w4TzVRdXcxOEdRbTRDOGE1aC9SU3o2UGNGVzZnQlRGMlRHVnhWUXFPbkdaSWFLR1l5YWRPQlV3V2h3cEZNNFkxTXBZQWdIWHEvQnRlTythS2JjR0lVV2dNS0t5TlNSNk5oOXV1Z1lzN0NDcUhDejB3cWdwM1lmWWJIbkVsRVpoZ1dmSlA1NDNmZCtPUzQxSU1xc3pHak02SkdtVXZ2Zzl0SHlFZ3ZDSVpUSzNXRUhBUkNMbWNpZGlSOFRCM2lRQnF6MUJxUnFXSi9EQVJFOFMxSi9VNEl4TDBFV0JnYjZJK1FMeDV4ZVB4cmRWNVNmclorRjJHRWpzVVpYVk5IZ2FETWROV2tzUU5aL0hBS2NOR21VMG52RUVCSSt6T21FMWl4eFhQbTRtMWJCSkhUK2tWSGt3bzhwWEVBa2FzWndUV0MyQUZmUlZZdzAvVVk0dExxMVlxTFNqWnl1YVI2ajV3SmI0QW0reVQzR1dWWHVjM1lnTlU4M2diYmxjOEpLc2ZValEwTDVqM3BVRmNYSUdjb0FWMEM3dytiNXFSaUpXeEJFcmtuOFp1WGV5V0FvV2ZlbWxBeGRwdkxkdy9yaHFYYnZhc0VYWThzQzFoZnlLY3BCOGI3bGJ5UDFYQWU0V3NjTHp4VU5iZDNYMjFOWTNQRUZ6d1h1THR0NVJmNWlLUFNXUUlqc0l2ci9Wcllidy9PQzdDTDh2TS9CVEhIWjU1WWFKTXBET3Q3UnRhdHBaT2R3Mm4xNURoK3RMalM4QWZ1WGpQUnpldWI5UUJ6VnZkcllKaFFFVUgybWt2MHk0OThCR3duZnZpanRvRmJVM1NkcTJYL2QwUzN0THl6U0w5MU56ODJPZ0JQZ3NhdSt5Z1QrdE9BZzUxSENmWGRHZnluR3FFUlR2YThBMnFQTDdQYTJOM0xzL25aZEFLOTl5NkNrMjU2NURMVzNVeExKUlkrMnQ5L3h1dnJQWjB0cFNXYjZ0MHJmVjByU1AwOUhXdXE2MWRieTFUUXVpRXJ4TXBKZmNwcmRERlRVUFZiTkZOenRZYWoxbCtkVzhuNXBiWHVRMHExdWFENE1ub0ZDaTM5MG51aGpmOXlEWXZ4eXlJM1NhRjEwWHgwcmxKaXc2M2Eza1U2cDFLMmR3a3Z5eFd4eXIxYzhUT2tGT1hXS0txajNiaXZJRVgySEdiYnBBWXVYRGpxcEQxc0UrbjFadG5jUkpybW1nY25pVkRPdXd2UFdTQ3V5d25uOWFZN1V2MDFETjZ4RFR0MXFsUTllN2hVdGJoTUtXcGNKRUJTRmI5ZVVZWEFKSDVucTBrdnNoRG0xRnJXVzM4bzdCMjlCbHo4NTlXeVBQQTErYmp3YXArUHhraHRkMUlLSXc5ZnpseWs3VjJrNU1ubXVWWHNtdHRVTnpySDN4dHRZSDZKcWpPS0syUStlbXYxNzVQcVEzOFQrOW02Uzd5ZlU4cThEK0J4aFRSZUhDdmpUbldrQU05MUpZMlFrYjVBR1BRcVdKcUE3Nm5sdyt3L2U5T1lCaXBpNGQya3RJZU9ST3YxQkZjVythZ0NoQTNlc2xFWFVHYmNJR0FSVGM0bmhUMTFCWjY2WFh6VEZMRk55WklUNU1MVytyeUJtb2RXMlZyRVhEUk1acVJELzJxeU1MNzJYZ1FwR0VMZk5vejcwZ3ZvN0JrQnp4V3A2ZWhBVmFjbnBldFhrTjZ4SkdkZ2lKeWhwSmg3YUNNSWdETWNwUlQ4cWlhTHZMN0dhTlUrWm40dWlscmdhM1lvTStpS3NISHFqOUd1NG5ncnBGSG9XcnZsRlFQc1BjcHhsanFPTHN2ZG1tamJyZW1zSHJhOSt1U3NHRCtvVnVwYnNPYjdGeFpZVTZzcXhSYmR4MG5XT3hra2tpdXM0dm53L0swV0NKUjV1STc1WFhUMzE0QnMrOURUbkJ4YnlSbU5HNXd3NUJnV1BVSmhuWnNsMldXM041KzNVcmRpVTBMaXF4SUM5ZkpodWZObCtXVEpxdTBMY1Nra3hYNHpGQWU1UldSTFZjUGo1VE0xTkZSdFA1YmJma2MvWWJOTlVJaUxucFRCTFRzcnNwZ0NNWngybkZha012SnVjb2lqd2FVTWFLZUw3UVF1ZWo2S08yM0pGbFFJdFV1all6Ty9TWXVFMDdmYnZJUk5HOE1uY3BvNWQzbDVsSzBqSWptZHU0OVk5Ylg2bzI2WWxaYzdQZkhmOTB2TWRtSGx3WlFUeUhETlgxR2w1azFqN2NQNC81TU5FcDQwUUp6VE0zR0xpdjBKcmZCUjR1QWZmMHFCQk1XMEtVNFZtcTJPTXFjTE1kVERldmFQaUNtYlk0d1l5VkwxZ1pOblZSc2o0SExwYUF1ZWFucTRMY0NwbFhwUktpa3ltVTZZYWM0ZXUrRUlvKzEvTjUrczlGd2k5MFFQMk5yZ0NLR3BURExES1dMYVJXNmtiUGFtTjNFWm1LUklRUXlkVWViRVMwK1hHcWRxaGJnTVNtNHVIOWhiN3dBYXFPSVYyQzRLUFV2bUlFTDFBUGZBMzRLNWxtaXhWMzZHODBLTHNiVW8xQ251ckN5QlJGN2tjRlMrOUVzWVgvelFmZjhCL2JmZFBreXpzcE1JNHFqcG5zWHJyQW83LzFxZGZuUzBUTTNBYVMyVVR2UjhlTFZ1TGVqdXdMbEhkYnduVVdYWkZWbW94aG5hTExqakNiTmZpWjJRSkpMZ2lLMjhxT3VreWx5eFp5ZXVKUDNDL3BJYlE2VEYydWhYZ2FjS1pXRmJ2Z3ozR3Z3aDVnYUdkdElDSFpkQVB3UGFDekl1amFlMWZNZE9GOTJkNFF3V0h2T1gyTEtESmxqMmk2Tmpmb2hxc2doRnV1RzloS3JhWE4wb2hWMEVPa0dhTExMek9NdnVoWEU4dlU1ZGJvY3Nab0RNbE1JVE55K1RXaTBKS0lMNURVKzAvcGQwZjBRNG02Q1hXcDhNSFFJK1Y5bmhuY3dTREtNY29RL2NoelY3OWJLYysvdnZnNS9TRndPNzkwN1BENXUvZFV5dmV2OUQyalgwWlpkQWVTUmkvdmY2cTgzV096SnhpWVdoaktIOXA2RG1LVWR0dzM1ZjRTeHF0Ykg3b2pTY1dIRnJuVytEN2xZbTFOaytIbWF5cndkUFJDdmZZbThNc2xqeG9mRWMyTXVEWDMydy9NTStpbHV2enJEWndUY2VsdHVwOXVodDBHbDQ4ZCtRbkhXMDVVc2p6WGEvbm4yYk5zODNUOUVIWm91OG50NDhzRk9QczE3ODkzQ2JYYjJzTkxXVEdOanBVNEFNT1RyTGhXeTQ1UFhxdVZScXhPVlFUV1NHTldoeXI4eUI1NDhvSldZQVBaWGNEaHpjS085Mys4QitPNVI4eEtxTjVjbW95a0ZDbzFyaFlGWUsyb2hHZXpSdFFWakc2cDhqbkFPbFVwaitQcWJjUy9ubElDTldRNEM3QkVjUDFPYjkvWW5jNnRhNEkzTG5KSVZrYjdObUhkV0tqMndyOVp6S1RpNzVzWEsxTkRlNXhkWTRvcHo4ckUvUWVuSC9jc1dYWXFGZG1iY1FqWDJBZml0cEJFR3BHN2ZQSXV2ZkNyS3hWYXY5WVFZbVdramc0M3FBTFRmSmR0ektvVXhueEUvM2ZST20vUmpLaTd1ekFuT2FnZ1NGblhucGJySUhDMkxOZVdvdkZsMnBacXJnbi81S0xrc2pFaUlNTmkvSWhFby9SRlpaZy9heFlES1MvWUpVenJVN3RnaDl1RG03anRwQ0ZJV2I4OTJ4MkkyeXF5TVNyZWJyOUlxMlBXc0oyTVhyd3JOU0loM1FBNUEyL1pVSUswMWZid3ZtWUVGOHFHcXBCaUxHWHFYUzhldXdaaUxJN1Y5cWFQTGhqMjBVSlA5MnFWRjZWNHZVUWRZczM4bDlCVmdTbmNZT0c3WlZrdGl0cmZmdnRCMmI3UUorS0dtbk5ldkpValdldmhpQkN2VWlHTlBkeUdlQVhMdDBKNGZwQ2MyR2tGOTlYVFVrRzRWL3RxcEtYSDllbXBCeFZudjJ1RFhYcGZFOG1zbW1OV2xPTVkyRit3eVZETUdTZENZZVBtWW02VG9kT3lDem5UNW5ESU5GSFFJaVg0WW5VNm9WM3E5VWd3bmN5bE9HYVNabytYU2FRbVZqdXpCazNHYUtRWFJ4Wnh1ZzFKdnMvMHcyRDRmMXZ4eVVRZUdCWjV2VElEKzRkYzhzZDRUKzNRdmxmQVhCK2FJNytVemM3ekZBK0xPWnhmNUtDOFFtMXZmOHhJQWRCb1V6bDFOS1ArUkhkRjRmaXA1bGNhbW5ZM2QxUzF2MWIvdFdQSVlpOFJoTDJrNVE1bmFVR2c4VG9hMTJpVG1GbWJVQTBVVFdoMENUT21TK3BpZ0hjbHBEaHg4R2FvdlNXakxYUXIwVklFb2gvejFLVVR0bjNYZU9nNzlEQys1Q1NVNlJyZFBlbVRYLzFzaWR2NkQ1Z1ZhVlpzSlRQblV6c2xWNnZGVXZYVkV1blZISWxFYzdWWFpwTkxiYkt2TWJCc2I2L2tzMytMb2VYVFY5SVFzZ01OOWwwYjJnSlpuUE5wT003dXZaNHVXYllkNTlSVE9UdzNKR1hwbnZxcWhiWCtHMERLVkN0Z0VsMVVMUlBmM2VyZ2tOOVBGNjRFRUhXWlJ0M0UyNjIxZlBTSGFqK3hTTDJIaGx6d2RUMnpxdmgvd1pkc0NFak5vNG91SUxkN0ljZTFiUkh3ZnBWV0JaaGpmWmlaVEF0Rk5WTUxnNmdXTWhocW1XaEswUjNFcG9LdHh5dVd6UzFxNW1ycE93cThlVnkzQy9GUmVSTUlIS2VaS0VJK2VZaXVvbWwyQ1BvTUZqWDZxOEJsdjBjRTNWdW9RazhLNXllTXBkTkhJSWtzM3hoTENTWGxmRThxdjN4K2p3OVFZcGhTNHpMSE5mM3p0ckVtTUowNEcwMTJVc1BYNSt0cXVrWGJWMmhLYlVrUlRJNmMrRHhEZmxNaHhvc0NJYy96Z0poSEZVdGRqeWx2V0NrcHVMNDJkV0RmcE9sdWFxbFoxaE5CdE5zTGZCR1JxVUptSVN2OVo0RkVla3Znald0c2JHcjhRZTUySTdpOUpmZ1JYZ09RdlY3YkpOYXQrT3R0WS9Rd3lrdU53SDRqQzFiNVpVdlpwNyt1cTJGa3VyczRtZ09oZHJXL2Q5amdUUTY3cGdLRHI4aG0vazdvOW83czUwNnkyQ2VlWTNQdU84Rm1uYnp2YnRZUExhMy9XL3JaRkpaN0dnSU0zNjdYd1BZamdNcHIvRU1nNFhvRG01R3VsMWdIczcvQ0lTYWIzenVnazA0TWFBMElWRVV2cm0zdXBXRFI4RGNLaGx0UU1GeU5naUVUSS9nbmU2MmtUZDZjMmRiazVXSERyeDdaSklzcWNLWXZTdUpSbElhaW9CdEZ3VHNvQ3Y2VW9nVEFkY2dKTGNnSnp5SW5QSUtjOEtHVW9pOTB3ZlNhUnV3QW9vK29xYnFSMnVjUnBnNC9jajNCVEpqOUtlWng0R2ZqbW1BWDVUbVdZQ2xUTU55bXp3UWx4V21EUjlWKy9pT2NKUFpmbUI2SGwrQUdqWTBvNHRSdDF2Y0h1NGJGYW4yeXorQWJSak5iOG8xU1RqZEdHcU5PeFg0U0lUVnB5Q1BYSTh5aGlUM0JBaVllM3pJVitLaGs1aVJDUG1qVCszU2xlcCt1QnZuZzVER0xRZkVYQThFQTluYnJuWG9Bc1h3eGU3K3VJdEFJZm8zNjhVZzNRbUJxK3dqb2JmUXgrZ1I5aWo1RG42TXZ3SmZnUGVrclV2d2FxU0srVmQ3RDcrRDN6QThlMnZoMkl6RDl0ZW54VkQ2SkM0NTEyeHQ4bGo1SGZUOVBmeHArb3M0SHRBVmR3WXpLbktxK1FzenhleG8zckd3TGNyZDJWZFFRTjFtWHgxUGN3QzF1NHNQYnpCTkVMdjJMYUxEZFV0UDJvYlF4SzhhekhvTzRXM2lEM1Q0OWZXZVUyZWZSM2Y3L3lMRllabURRWHZjOUs5bGFnVVVBTWVMZWZ4YXNBakNIZlZnQVpCNklkWXM1MFh1MTNicUxGOWIyNEk5WkQyc0RiaTE0L3o4Z3kxaXhsdGpndk9VQjVMb0FnQlhZemFsSmdzYU1yUjF0WFlkUlJsR0g5UlFkc0UrNnhtUmc4eUllbzhveFJ1TVFCU29QdU1PTVlNTGRzNHhHQ0orSDJTTWk1YWJ1cy93Q1ZZNXROQTBYbTB5OXhHTTBKdEFPcTFwZ0swQmRLQWY3REtHdjBNZm95OUYvWkdsYWxOdmx3bmxDY2hndFJMOWxXNkFyNEtOK29TZGdJeFhwSUp5RjI3Z08yTy9OQWxoMVZYZU5PeVBkOS8zU0lLQS9WQ2szOVk0RVBZaXVIZU1CSEpwV2ttM1FlSkVMUEVZTDBXOWdnWkthOXpHSHp2OGJJN0RIZS80WWJoZmUyRTlpb085Sk0zMjNidWJzU2tRdmlNdytuM1FOSlVlOHRPdHJ6eTV2MkVhNjdBMnhWWlRzNHU4eTFqam51NTNOQzNrRWJpRS9aanNpdWxPajIwUTY4VTZZRWltdHhrdXVDM3ZMOFlaTG8yc0ZFYWRReHV2RzlsRTBldDYrbGsrN01RSG9OMFBZbHNhWGIrdmFOM3RyMXk0MmRWbWtmU2JWNXhpM0JiVjF1MTFNOXdEMGxPekxYbllDUjkwdDR3dCtyaXVvS0ExOXl1d0QycExBSndRN1ozeStjSW5pOGtnNjE4blVTQVQyTzZWSy8zV0JJYTFoVDJldzdFb0ZTcmFNSWorVFdFMCs5NHJhSEFKd0VUOStaN3BsWEVqcTN4REgzUURnNUlHTys1TDhMMitKLytpd3p4UE14Z0VpQmdBSS9peVpvSEFtTVAwL2VFNWs5eTZpTmUxazZ3N1d6NHVjcnFUcHh5WjNCZVVKdjJSeXAzWEZUUFlkeUw3Skl3UjRSa2p6TjdhelhpMkNJTUUwcFRYb2RaYzdJU2pkK3JMNEZIeEdFeTNBUkhVQXgxVi9MWnZpamw4d1dWMm0xZlNDZitzd2MwVzA2T3FhNW02U0t6eXRSbmhRVmFnTTZNY2hSZ2tKTVhZRThZaEI5dW1Lb29UcEdScU5rSzRmeDRPVyt1KzRDcmNHWXJnVFo1dm1HOVRVanRmbmlxWVpVV1Q2VWcwZUUzaGtpVUc1bkJwZ2pGMTREWGJvK0RRUmJmcFYxM3pNcGxJSkN1YytWTEp4R2dhenhGd1dJM1pMbmo2NVg1MDB4QjAzb1owTUw0YVNQNkd2UVhLYnVQTXJVcXZtYVFoM1VHWnJSVVpOaVlvOXRYVFJVN3hHbGRTeXBZNDViQXJMVUxNenRBYjY1aW1kSU9hUkRZcElVRjVCc0lvN0tRNi9VelN3dEkyU2VkUzFrN1FvSVhQU2MwR1RGNHV6V2h4THh2d054RjdoOXIxMkxMWVhJZDlGRDVzck8vUzMyYktlV3paUEpxWC9BTTNRaDFwdWZTdDc2amlRdllFbDFtTTBlTTdUTWt3QUEzdDlTRG03NlphWEtMWjU2NXZwTzBpeHZmUXlDSTJqNUJPaFYvazJQaVYzc1J0NEtxRmwvbUR1RG5VejZtN1Z2NzhSUGIzSTFqUE1YVkNxVllpZitFVEZIblczcmNoTWI1MWUxdXVWcHpMMGxnR1RJQVVNYVJVRmNLQURzSUVFMFFJWm1LZnlEVWxGWlljbzJhNi80M1FEQ2FYc2tjTUdPSzJzNUtGenFQeWk3c2pmSjlTOE5Wb2pqOG9YMU1qdXlmRUVRSUNQY1dpbUFXZ2pMQndrSnEwT0pqaWRIWnoyaVkzT1p6c0VrZG5yRU5seW5TTllZbDV5aERLWFlnOGoxYnFUQ0Foc25DN3k1S3RRS0p0WGxtSXloVXU4TkxMQkJaaXl1UU9VeURiSmRFVW15RFdackw5Q2VhYVpZaElIN1VTMHVKWG1lYlRJaWpaQmNyRjgwMjg2SnlldjdFeTF4RVFPcXNtVHc3bkt0ZEFVWmV6eVRlRGxreTNYQkdVWjQzTEtwaDdRSEs3eHFlQVFldnRvY1dSbEV0SmxBMDFSWk1wUktUVkZYZXJweFZ4RnhiNjhuRjdqc3E3R2JkVTIwQnVlSVZKT3dzZkZxNFRQQklVU09MaTRKTXJRVno5OWRaTWhhUEM0V1RzWXlnRW5acXM0bXJ3WUtkeGV1UGxZS1RMSnFEUy9WNG80aENvK0R2TlFiL1FJK3ZIb3JlZmdNVFBNbTRZNXUwNzVQNkpJWGhIL2UxL3lud0VBKSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfWJvZHksaHRtbHtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fWh0bWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXBhcmFncmFwaCxwe2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpqdXN0aWZ5fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjE1O21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgyLGgye2ZvbnQtc2l6ZToyLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMyxoM3tmb250LXNpemU6MnJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yNTttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDQsaDR7Zm9udC1zaXplOjEuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNSxoNXtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OmJvbGRlcjtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg2LGg2e2ZvbnQtc2l6ZToxLjNyZW07Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19cCtoMXttYXJnaW4tdG9wOjMuNzVyZW19cCtoMnttYXJnaW4tdG9wOjNyZW19cCtoM3ttYXJnaW4tdG9wOjIuMjVyZW19cCtoNHttYXJnaW4tdG9wOjEuNXJlbX1wK2g1e21hcmdpbi10b3A6Ljc1cmVtfWRpditoMSxkaXYraDIsZGl2K2gzLGRpditoNCxkaXYraDUsZGl2K2g2LHAraDZ7bWFyZ2luLXRvcDowfS5kZWNve2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMSkgMCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTIpIDUwJSx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTMpIDEwMCUpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1zaXplOmNvdmVyO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO3RleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudH06Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9OjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX1rYmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Ym9yZGVyLXJhZGl1czoxMHJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtwYWRkaW5nOi4yNWVtIC42ZW07dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfWRldGFpbHN7bWFyZ2luLWJvdHRvbToxcmVtfXN1bW1hcnl7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mZWF0dXJlLXNldHRpbmdzOlxcXCJ0bnVtXFxcIjtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjFlbTtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0ubW9ub3NwYWNle2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17aGVpZ2h0OjEwMCV9YnV0dG9ue21pbi13aWR0aDotbW96LW1heC1jb250ZW50O21pbi13aWR0aDptYXgtY29udGVudDt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1idXR0b25de2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjt0cmFuc2l0aW9uOndpZHRoIDEwcyBlYXNlLWluLW91dH1kaXZbZGF0YS1tb25zdGVyLXJvbGU9bGFiZWxde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1zZWxmOnN0cmV0Y2g7ZGlzcGxheTpmbGV4O3RyYW5zaXRpb246d2lkdGggMTJzIGVhc2UtaW4tb3V0fVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0+aW1nLFtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0+c3Zne21hcmdpbi1sZWZ0Oi4zZW19W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXT5zdmcuc3VjY2Vzc2Z1bHthbmltYXRpb246Ym91bmN5IC41cyBsaW5lYXIgZm9yd2FyZHM7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzZnVsKX1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVdPnN2Zy5hY3Rpdml0eXthbmltYXRpb246Ym91bmN5IC41cyBsaW5lYXIgZm9yd2FyZHM7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1hY3Rpdml0eSl9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXT5zdmcuZmFpbGVke2FuaW1hdGlvbjpib3VuY3kgLjVzIGxpbmVhciBmb3J3YXJkcztjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWZhaWxlZCl9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXT5zdmcuYWN0aXZpdHl7YW5pbWF0aW9uLWR1cmF0aW9uOjFzO2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6aW5maW5pdGU7YW5pbWF0aW9uLW5hbWU6YWN0aXZpdHk7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwwLC4yLDEpfVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0uc3RhdGVsZXNze2Rpc3BsYXk6bm9uZX1Aa2V5ZnJhbWVzIGFjdGl2aXR5ezAle3RyYW5zZm9ybTpzY2FsZSgxKX01MCV7dHJhbnNmb3JtOnNjYWxlKC4xKX10b3t0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgYm91bmN5ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjEpfTgwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEuMTUpfTkwJXt0cmFuc2Zvcm06c2NhbGUoLjkpfXRve3RyYW5zZm9ybTpzY2FsZSgxKX19IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBTdGF0ZSwgZ2V0U3RhdGVJbnN0YW5jZUZvciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbFN5bWJvbCA9IFN5bWJvbChcImludGVybmFsU3ltYm9sXCIpO1xuXG4vKipcbiAqIFRoaXMgU3RhdGUgY2xhc3MgcmVwcmVzZW50IGEgU3RhdGUgd2l0aCBwcmVzZW50YXRpb25cbiAqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIFN0YXRlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IHByZXNlbnRhdGlvblxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0Y29uc3RydWN0b3Ioc3RhdGUsIHByZXNlbnRhdGlvbikge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7fTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5zdGF0ZSA9IHZhbGlkYXRlU3RyaW5nKHN0YXRlKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5wcmVzZW50YXRpb24gPSB2YWxpZGF0ZVN0cmluZyhwcmVzZW50YXRpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBzdGF0ZVxuXHQgKi9cblx0Z2V0IHN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5zdGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gcHJlc2VudGF0aW9uXG5cdCAqL1xuXHRnZXQgcHJlc2VudGF0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5wcmVzZW50YXRpb247XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFN0YXRlKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uc3RhdGUsXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5wcmVzZW50YXRpb24sXG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEBzaW5jZSAxLjUuMFxuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZX1cbiAqL1xuZnVuY3Rpb24gZ2V0U3RhdGVJbnN0YW5jZUZvcihzdGF0ZSkge1xuXHRzd2l0Y2ggKHN0YXRlKSB7XG5cdFx0Y2FzZSBcInN0YXRlbGVzc1wiOlxuXHRcdFx0cmV0dXJuIG5ldyBTdGF0ZShcInN0YXRlbGVzc1wiLCBcIlwiKTtcblx0XHRjYXNlIFwic3VjY2Vzc2Z1bFwiOlxuXHRcdFx0cmV0dXJuIG5ldyBTdGF0ZShcblx0XHRcdFx0XCJzdWNjZXNzZnVsXCIsXG5cdFx0XHRcdCc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgY2xhc3M9XCJzdWNjZXNzZnVsXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPjxwYXRoIGQ9XCJNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0em0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNnpcIi8+PHBhdGggZD1cIk0xMC45NyA0Ljk3YS4yMzUuMjM1IDAgMCAwLS4wMi4wMjJMNy40NzcgOS40MTcgNS4zODQgNy4zMjNhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNXpcIi8+PC9zdmc+Jyxcblx0XHRcdCk7XG5cdFx0Y2FzZSBcImFjdGl2aXR5XCI6XG5cdFx0XHRyZXR1cm4gbmV3IFN0YXRlKFxuXHRcdFx0XHRcImFjdGl2aXR5XCIsXG5cdFx0XHRcdCc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgY2xhc3M9XCJhY3Rpdml0eVwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj48Y2lyY2xlIGN4PVwiOFwiIGN5PVwiOFwiIHI9XCI4XCIvPjwvc3ZnPicsXG5cdFx0XHQpO1xuXHRcdGNhc2UgXCJmYWlsZWRcIjogLy8gaHR0cHM6Ly9pY29ucy5nZXRib290c3RyYXAuY29tL2ljb25zL2V4Y2xhbWF0aW9uLWNpcmNsZS9cblx0XHRcdHJldHVybiBuZXcgU3RhdGUoXG5cdFx0XHRcdFwiZmFpbGVkXCIsXG5cdFx0XHRcdCc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgY2xhc3M9XCJmYWlsZWRcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+PHBhdGggZD1cIk04IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTR6bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2elwiLz48cGF0aCBkPVwiTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgMHpNNy4xIDQuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwbC0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDBMNy4xIDQuOTk1elwiLz48L3N2Zz4nLFxuXHRcdFx0KTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIG5ldyBTdGF0ZShzdGF0ZSwgXCJcIik7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyByZWdpc3RlckN1c3RvbUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpc0ludGVnZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuL2J1dHRvbi5tanNcIjtcbmltcG9ydCB7IFN0YXRlQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc3RhdGUtYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgZ2V0U3RhdGVJbnN0YW5jZUZvciwgU3RhdGUgfSBmcm9tIFwiLi90eXBlcy9zdGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgU3RhdGVCdXR0b24gfTtcblxuLyoqXG4gKiBBIHN0YXRlIGJ1dHRvbiB3aXRoIGljb25zXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvZm9ybS9zdGF0ZS1idXR0b24vXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9zdGF0ZS1idXR0b24tc2ltcGxlXG4gKlxuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBiZWF1dGlmdWwgYnV0dG9uIHdpdGggaWNvbnNcbiAqL1xuY2xhc3MgU3RhdGVCdXR0b24gZXh0ZW5kcyBCdXR0b24ge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3N0YXRlLWJ1dHRvbkBAaW5zdGFuY2VcIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gc3RhdGVzIEF2YWlsYWJsZSBzdGF0dXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZX0gc3RhdGVzLnN1Y2Nlc3NmdWw9IHN1Y2Nlc3NmdWxcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZX0gc3RhdGVzLmFjdGl2aXR5PSBhY3Rpdml0eVxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlR5cGVzLlN0YXRlfSBzdGF0ZXMuZmFpbGVkPSBmYWlsZWRcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZX0gY3VycmVudCBjdXJyZW50IHN0YXR1c1xuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVBY3Rpb25DYWxsYmFja30gYWN0aW9ucy5jbGlja1xuXHQgKiBAZXh0ZW5kcyB7QnV0dG9ufVxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vdHdicy9pY29ucy9ibG9iL21haW4vTElDRU5TRS5tZHxCb290c3RyYXAgaWNvbnMgbGljZW5zZX1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdHN0YXRlczoge1xuXHRcdFx0XHRzdWNjZXNzZnVsOiBnZXRTdGF0ZUluc3RhbmNlRm9yKFwic3VjY2Vzc2Z1bFwiKSxcblx0XHRcdFx0YWN0aXZpdHk6IGdldFN0YXRlSW5zdGFuY2VGb3IoXCJhY3Rpdml0eVwiKSxcblx0XHRcdFx0ZmFpbGVkOiBnZXRTdGF0ZUluc3RhbmNlRm9yKFwiZmFpbGVkXCIpLFxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnQ6IGdldFN0YXRlSW5zdGFuY2VGb3IoXCJzdGF0ZWxlc3NcIiksXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYnV0dG9uLlxuXHQgKiBJZiBhIHRpbWVvdXQgaXMgc2V0LCB0aGUgc3RhdGUgaXMgYXV0b21hdGljYWxseSByZW1vdmVkIGFmdGVyIHRoZVxuXHQgKiBzcGVjaWZpZWQgdGltZS5cblx0ICpcblx0ICogQHNpbmNlIDMuMTguMCBhIHByZXZpb3VzbHkgc2V0IHRpbWVvdXQgaXMgY2xlYXJlZFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uU3RhdGVCdXR0b259XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlXG5cdCAqL1xuXHRzZXRTdGF0ZShzdGF0ZSwgdGltZW91dCkge1xuXHRcdGNvbnN0IHRpbWVvdXRTeW1ib2wgPSBTeW1ib2wuZm9yKFwidGltZW91dFwiKTtcblx0XHRpZiAodGhpc1t0aW1lb3V0U3ltYm9sXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpc1t0aW1lb3V0U3ltYm9sXSk7XG5cdFx0XHRkZWxldGUgdGhpc1t0aW1lb3V0U3ltYm9sXTtcblx0XHR9XG5cblx0XHRjb25zdCBvYmogPSB0aGlzLmdldE9wdGlvbihgc3RhdGVzLiR7dmFsaWRhdGVTdHJpbmcoc3RhdGUpfWApO1xuXHRcdGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibm90IGZvdW5kXCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuc2V0T3B0aW9uKFwiY3VycmVudFwiLCB2YWxpZGF0ZUluc3RhbmNlKG9iaiwgU3RhdGUpKTtcblxuXHRcdGlmIChpc0ludGVnZXIodGltZW91dCkgJiYgdGltZW91dCA+IDApIHtcblx0XHRcdHRoaXNbdGltZW91dFN5bWJvbF0gPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5yZW1vdmVTdGF0ZSgpO1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lb3V0U3ltYm9sXTtcblx0XHRcdH0sIHRpbWVvdXQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlN0YXRlQnV0dG9ufVxuXHQgKi9cblx0cmVtb3ZlU3RhdGUoKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJjdXJyZW50XCIsIGdldFN0YXRlSW5zdGFuY2VGb3IoXCJzdGF0ZWxlc3NcIikpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlR5cGVzLlN0YXRlfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldFN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcImN1cnJlbnRcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLXN0YXRlLWJ1dHRvblwiO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0FycmF5PENTU1N0eWxlU2hlZXQ+fVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0Y29uc3Qgc3R5bGVzID0gQnV0dG9uLmdldENTU1N0eWxlU2hlZXQoKTtcblx0XHRzdHlsZXMucHVzaChTdGF0ZUJ1dHRvblN0eWxlU2hlZXQpO1xuXHRcdHJldHVybiBzdHlsZXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICA8YnV0dG9uIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGlzYWJsZWQgcGF0aDpkaXNhYmxlZCB8IGlmOnRydWUsIGNsYXNzIHBhdGg6Y2xhc3Nlcy5idXR0b25cIlxuICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgcGFydD1cImJ1dHRvblwiPlxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwibGFiZWxcIiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmJ1dHRvblwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3RhdGVcIlxuXHRcdFx0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjdXJyZW50LnN0YXRlXCJcblx0XHRcdCBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y3VycmVudC5wcmVzZW50YXRpb25cIj48L2Rpdj5cbiAgICA8L2J1dHRvbj5cbjwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChTdGF0ZUJ1dHRvbik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi91dGlsL2Nsb25lLm1qc1wiO1xuaW1wb3J0IHsgREVMSU1JVEVSLCBQYXRoZmluZGVyLCBXSUxEQ0FSRCB9IGZyb20gXCIuL3BhdGhmaW5kZXIubWpzXCI7XG5cbmV4cG9ydCB7IGJ1aWxkTWFwLCBQQVJFTlQsIGFzc2VtYmxlUGFydHMgfTtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBQQVJFTlQgPSBcIl5cIjtcblxuLyoqXG4gKiBNYXBzIGNhbiBiZSBlYXNpbHkgY3JlYXRlZCBmcm9tIGRhdGEgb2JqZWN0cyB3aXRoIHRoZSBoZWxwIG9mIHRoZSBmdW5jdGlvbiBgYnVpbGRNYXAoKWAuXG4gKlxuICogVGhlIHBhdGggY2FuIGJlIHNwZWNpZmllZCBhcyBlaXRoZXIgYSBzaW1wbGUgZGVmaW5pdGlvbiBhLmIuYyBvciBhIHRlbXBsYXRlICR7YS5iLmN9LlxuICogS2V5IGFuZCB2YWx1ZSBjYW4gYmUgZWl0aGVyIGEgZGVmaW5pdGlvbiBvciBhIHRlbXBsYXRlLiBUaGUga2V5IGRvZXMgbm90IGhhdmUgdG8gYmUgZGVmaW5lZC5cbiAqIFRoZSB0ZW1wbGF0ZXMgZGV0ZXJtaW5lIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBrZXlzIGFuZCB0aGUgdmFsdWUgb2YgdGhlIG1hcC4gRWl0aGVyIGEgc2luZ2xlIHZhbHVlXG4gKiBpZCBjYW4gYmUgdGFrZW4gb3IgYSBjb21wb3NpdGUga2V5ICR7aWR9ICR7bmFtZX0gY2FuIGJlIHVzZWQuXG4gKlxuICogSWYgeW91IHdhbnQgdG8gYWNjZXNzIHRoZSB2YWx1ZXMgb2YgdGhlIHBhcmVudCBkYXRhIHNldCwgeW91IGhhdmUgdG8gdXNlIHRoZSBeIGNoYXJhY3RlciwgZm9yIGV4YW1wbGUsICR7aWR9ICR7Xi5uYW1lfS5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvZGF0YS9idWlsZG1hcC5tanNcbiAqXG4gKiBAcGFyYW0geyp9IHN1YmplY3QgLSBUaGUgZGF0YSBvYmplY3QgZnJvbSB3aGljaCB0aGUgbWFwIHdpbGwgYmUgY3JlYXRlZFxuICogQHBhcmFtIHtzdHJpbmd8TW9uc3Rlci5EYXRhfmV4YW1wbGVTZWxlY3RvckNhbGxiYWNrfSBzZWxlY3RvciAtIFRoZSBwYXRoIHRvIHRoZSBkYXRhIG9iamVjdCwgb3IgYSBjYWxsYmFjayB0aGF0IHJldHVybnMgYSBtYXAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlVGVtcGxhdGVdIC0gQSB0ZW1wbGF0ZSBmb3IgdGhlIHZhbHVlIG9mIHRoZSBtYXAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2tleVRlbXBsYXRlXSAtIEEgdGVtcGxhdGUgZm9yIHRoZSBrZXkgb2YgdGhlIG1hcC5cbiAqIEBwYXJhbSB7TW9uc3Rlci5EYXRhfmV4YW1wbGVGaWx0ZXJDYWxsYmFja30gW2ZpbHRlcl0gLSBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGZpbHRlciBvdXQgdmFsdWVzLlxuICogQHJldHVybiB7Kn0gLSBUaGUgY3JlYXRlZCBtYXAuXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IC0gSWYgdGhlIHZhbHVlIGlzIG5laXRoZXIgYSBzdHJpbmcgbm9yIGEgZnVuY3Rpb24uXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IC0gSWYgdGhlIHNlbGVjdG9yIGNhbGxiYWNrIGRvZXMgbm90IHJldHVybiBhIG1hcC5cbiAqKi9cbmZ1bmN0aW9uIGJ1aWxkTWFwKHN1YmplY3QsIHNlbGVjdG9yLCB2YWx1ZVRlbXBsYXRlLCBrZXlUZW1wbGF0ZSwgZmlsdGVyKSB7XG5cdHJldHVybiBhc3NlbWJsZVBhcnRzKHN1YmplY3QsIHNlbGVjdG9yLCBmaWx0ZXIsIGZ1bmN0aW9uICh2LCBrLCBtKSB7XG5cdFx0ayA9IGJ1aWxkKHYsIGtleVRlbXBsYXRlLCBrKTtcblx0XHR2ID0gYnVpbGQodiwgdmFsdWVUZW1wbGF0ZSk7XG5cdFx0dGhpcy5zZXQoaywgdik7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRoZSBhc3NlbWJsZVBhcnRzIGZ1bmN0aW9uIGlzIGEgcHJpdmF0ZSBmdW5jdGlvbiB0aGF0IGhlbHBzIGluIGJ1aWxkaW5nIGEgbWFwIGZyb20gYSBzdWJqZWN0IG9iamVjdCBiYXNlZCBvbiBhIHByb3ZpZGVkXG4gKiBzZWxlY3Rvci4gVGhlIHNlbGVjdG9yIGNhbiBlaXRoZXIgYmUgYSBzdHJpbmcgb3IgYSBjYWxsYmFjayBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSB1c2VkIGFzIGFcbiAqIGhlbHBlciBmdW5jdGlvbiBieSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIG1vZHVsZS5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gdGFrZXMgZm91ciBwYXJhbWV0ZXJzOlxuICpcbiAqIHN1YmplY3Q6IFRoZSBzdWJqZWN0IG9iamVjdCBmcm9tIHdoaWNoIHRoZSBtYXAgaXMgdG8gYmUgYnVpbHRcbiAqIHNlbGVjdG9yOiBUaGUgc2VsZWN0b3IgdG8gZGV0ZXJtaW5lIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG1hcC4gSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGEgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBmaWx0ZXIgKG9wdGlvbmFsKTogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGZpbHRlciB2YWx1ZXMgYmFzZWQgb24gc29tZSBjcml0ZXJpYS5cbiAqIGNhbGxiYWNrOiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgZWFjaCBlbGVtZW50IGluIHRoZSBtYXAuXG4gKiBJZiB0aGUgc2VsZWN0b3IgcGFyYW1ldGVyIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24sIGl0IGlzIGV4ZWN1dGVkIHBhc3NpbmcgdGhlIHN1YmplY3QgYXMgaXRzIGFyZ3VtZW50LFxuICogYW5kIHRoZSByZXN1bHRpbmcgdmFsdWUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBNYXAuIE90aGVyd2lzZSwgaWYgdGhlIHNlbGVjdG9yIHBhcmFtZXRlciBpcyBhIHN0cmluZyxcbiAqIGJ1aWxkRmxhdE1hcCBpcyBjYWxsZWQgdG8gYnVpbGQgYSBmbGF0IG1hcCB3aXRoIGtleXMgYW5kIHZhbHVlcyBleHRyYWN0ZWQgZnJvbSB0aGUgc3ViamVjdCBvYmplY3QgYmFzZWQgb24gdGhlIHNlbGVjdG9yLlxuICpcbiAqIElmIHRoZSBmaWx0ZXIgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCBpdCB3aWxsIGJlIHVzZWQgdG8gZmlsdGVyIG91dCBjZXJ0YWluIGVsZW1lbnRzIGZyb20gdGhlIG1hcCwgYmFzZWQgb24gc29tZVxuICogY3JpdGVyaWEuIFRoZSBjYWxsYmFjayB3aWxsIGJlIHBhc3NlZCB0aGUgdmFsdWUsIGtleSwgYW5kIG1hcCBvYmplY3QsIGFuZCBpZiBpdCByZXR1cm5zIGZhbHNlLCB0aGUgZWxlbWVudCB3aWxsIGJlIHNraXBwZWQuXG4gKlxuICogRm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgbWFwLCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqIHY6IFRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudFxuICogazogVGhlIGtleSBvZiB0aGUgZWxlbWVudFxuICogbTogVGhlIG1hcCBvYmplY3RcbiAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IG1hcCB3aXRoIHRoZSBwcm9jZXNzZWQgdmFsdWVzLiBJZiBtYXAgaXMgbm90IGFuIGluc3RhbmNlIG9mIE1hcCwgYW4gZW1wdHkgbWFwIHdpbGwgYmUgcmV0dXJuZWQuXG4gKlxuICogRXhhbXBsZSBVc2FnZTpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBjb25zdCBvYmogPSB7XG4gKiAgIG5hbWU6IFwiSm9oblwiLFxuICogICBhZ2U6IDMwLFxuICogICBhZGRyZXNzOiB7XG4gKiAgICAgY2l0eTogXCJOZXcgWW9ya1wiLFxuICogICAgIHN0YXRlOiBcIk5ZXCIsXG4gKiAgICAgY291bnRyeTogXCJVU0FcIixcbiAqICAgfSxcbiAqIH07XG4gKlxuICogY29uc3Qgc2VsZWN0b3IgPSBcImFkZHJlc3NcIjtcbiAqXG4gKiBjb25zdCBtYXAgPSBhc3NlbWJsZVBhcnRzKG9iaiwgc2VsZWN0b3IsIG51bGwsIGZ1bmN0aW9uICh2LCBrLCBtKSB7XG4gKiAgIHRoaXMuc2V0KGssIHYpO1xuICogfSk7XG4gKlxuICogY29uc29sZS5sb2cobWFwKTtcbiAqIC8vIE91dHB1dDogTWFwKDMpIHtcbiAqIC8vICAgXCJhZGRyZXNzLmNpdHlcIiA9PiBcIk5ldyBZb3JrXCIsXG4gKiAvLyAgIFwiYWRkcmVzcy5zdGF0ZVwiID0+IFwiTllcIixcbiAqIC8vICAgXCJhZGRyZXNzLmNvdW50cnlcIiA9PiBcIlVTQVwiXG4gKiAvLyB9XG4gKiBgYGBcbiAqXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdCAtIFRoZSBzdWJqZWN0IG9iamVjdCBmcm9tIHdoaWNoIHRoZSBtYXAgaXMgdG8gYmUgYnVpbHQuXG4gKiBAcGFyYW0ge3N0cmluZ3xNb25zdGVyLkRhdGF+ZXhhbXBsZVNlbGVjdG9yQ2FsbGJhY2t9IHNlbGVjdG9yIC0gVGhlIHNlbGVjdG9yIHRvIGRldGVybWluZSB0aGUgc3RydWN0dXJlIG9mIHRoZSBtYXAuIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNb25zdGVyLkRhdGF+ZXhhbXBsZUZpbHRlckNhbGxiYWNrfSBbZmlsdGVyXSAtIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBmaWx0ZXIgdmFsdWVzIGJhc2VkIG9uIHNvbWUgY3JpdGVyaWEuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIG1hcC5cbiAqIEByZXR1cm4ge01hcH0gLSBBIG5ldyBtYXAgd2l0aCB0aGUgcHJvY2Vzc2VkIHZhbHVlcy5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gLSBXaGVuIHNlbGVjdG9yIGlzIG5laXRoZXIgYSBzdHJpbmcgbm9yIGEgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGFzc2VtYmxlUGFydHMoc3ViamVjdCwgc2VsZWN0b3IsIGZpbHRlciwgY2FsbGJhY2spIHtcblx0Y29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuXG5cdGxldCBtYXA7XG5cdGlmIChpc0Z1bmN0aW9uKHNlbGVjdG9yKSkge1xuXHRcdG1hcCA9IHNlbGVjdG9yKHN1YmplY3QpO1xuXHRcdGlmICghKG1hcCBpbnN0YW5jZW9mIE1hcCkpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aGUgc2VsZWN0b3IgY2FsbGJhY2sgbXVzdCByZXR1cm4gYSBtYXBcIik7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGlzU3RyaW5nKHNlbGVjdG9yKSkge1xuXHRcdG1hcCA9IG5ldyBNYXAoKTtcblx0XHRidWlsZEZsYXRNYXAuY2FsbChtYXAsIHN1YmplY3QsIHNlbGVjdG9yKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwic2VsZWN0b3IgaXMgbmVpdGhlciBhIHN0cmluZyBub3IgYSBmdW5jdGlvblwiKTtcblx0fVxuXG5cdGlmICghKG1hcCBpbnN0YW5jZW9mIE1hcCkpIHtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0bWFwLmZvckVhY2goKHYsIGssIG0pID0+IHtcblx0XHRpZiAoaXNGdW5jdGlvbihmaWx0ZXIpKSB7XG5cdFx0XHRpZiAoZmlsdGVyLmNhbGwobSwgdiwgaykgIT09IHRydWUpIHJldHVybjtcblx0XHR9XG5cblx0XHRjYWxsYmFjay5jYWxsKHJlc3VsdCwgdiwgaywgbSk7XG5cdH0pO1xuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBzdWJqZWN0XG4gKiBAcGFyYW0gc2VsZWN0b3JcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSBwYXJlbnRNYXBcbiAqIEByZXR1cm4geyp9XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRmxhdE1hcChzdWJqZWN0LCBzZWxlY3Rvciwga2V5LCBwYXJlbnRNYXApIHtcblx0Y29uc3QgY3VycmVudE1hcCA9IG5ldyBNYXAoKTtcblxuXHRjb25zdCByZXN1bHRMZW5ndGggPSB0aGlzLnNpemU7XG5cblx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSBrZXkgPSBbXTtcblxuXHRjb25zdCBwYXJ0cyA9IHNlbGVjdG9yLnNwbGl0KERFTElNSVRFUik7XG5cdGxldCBjdXJyZW50ID0gXCJcIjtcblx0Y29uc3QgY3VycmVudFBhdGggPSBbXTtcblx0ZG8ge1xuXHRcdGN1cnJlbnQgPSBwYXJ0cy5zaGlmdCgpO1xuXHRcdGN1cnJlbnRQYXRoLnB1c2goY3VycmVudCk7XG5cblx0XHRpZiAoY3VycmVudCA9PT0gV0lMRENBUkQpIHtcblx0XHRcdGNvbnN0IGZpbmRlciA9IG5ldyBQYXRoZmluZGVyKHN1YmplY3QpO1xuXHRcdFx0bGV0IG1hcDtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bWFwID0gZmluZGVyLmdldFZpYShjdXJyZW50UGF0aC5qb2luKERFTElNSVRFUikpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRjb25zdCBhID0gZTtcblx0XHRcdFx0bWFwID0gbmV3IE1hcCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IFtrLCBvXSBvZiBtYXApIHtcblx0XHRcdFx0Y29uc3QgY29weUtleSA9IGNsb25lKGtleSk7XG5cblx0XHRcdFx0Y3VycmVudFBhdGgubWFwKChhKSA9PiB7XG5cdFx0XHRcdFx0Y29weUtleS5wdXNoKGEgPT09IFdJTERDQVJEID8gayA6IGEpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRjb25zdCBrayA9IGNvcHlLZXkuam9pbihERUxJTUlURVIpO1xuXHRcdFx0XHRjb25zdCBzdWIgPSBidWlsZEZsYXRNYXAuY2FsbChcblx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdG8sXG5cdFx0XHRcdFx0cGFydHMuam9pbihERUxJTUlURVIpLFxuXHRcdFx0XHRcdGNvcHlLZXksXG5cdFx0XHRcdFx0byxcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpZiAoaXNPYmplY3Qoc3ViKSAmJiBwYXJlbnRNYXAgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHN1YltQQVJFTlRdID0gcGFyZW50TWFwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y3VycmVudE1hcC5zZXQoa2ssIHN1Yik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IHdoaWxlIChwYXJ0cy5sZW5ndGggPiAwKTtcblxuXHQvLyBubyBzZXQgaW4gY2hpbGQgcnVuXG5cdGlmIChyZXN1bHRMZW5ndGggPT09IHRoaXMuc2l6ZSkge1xuXHRcdGZvciAoY29uc3QgW2ssIG9dIG9mIGN1cnJlbnRNYXApIHtcblx0XHRcdHRoaXMuc2V0KGssIG8pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzdWJqZWN0O1xufVxuXG4vKipcbiAqIFdpdGggdGhlIGhlbHAgb2YgdGhpcyBmaWx0ZXIgY2FsbGJhY2ssIHZhbHVlcyBjYW4gYmUgZmlsdGVyZWQgb3V0LiBPbmx5IGlmIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCB0aGUgdmFsdWUgaXMgdGFrZW4gZm9yIHRoZSBtYXAuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuRGF0YX5leGFtcGxlRmlsdGVyQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgIEtleVxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5EYXRhLmJ1aWxkTWFwfVxuICovXG5cbi8qKlxuICogQWx0ZXJuYXRpdmVseSB0byBhIHN0cmluZyBzZWxlY3RvciBhIGNhbGxiYWNrIGNhbiBiZSBzcGVjaWZpZWQuIHRoaXMgbXVzdCByZXR1cm4gYSBtYXAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7YnVpbGRNYXB9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL2RhdGEvYnVpbGRtYXAubWpzJztcbiAqXG4gKiBsZXQgb2JqID0ge1xuICogICAgICAgICAgICAgICAgXCJkYXRhXCI6IFtcbiAqICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTAsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIkNhc3NhbmRyYVwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcImVucmljaG1lbnRcIjoge1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMSwgbGFiZWw6IFwiWFhTXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAyLCBsYWJlbDogXCJYU1wiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMywgbGFiZWw6IFwiU1wiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogNCwgbGFiZWw6IFwiTFwiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgICAgIH0sXG4gKiAgICAgICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIwLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJZZXNzZXkhXCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwiZW5yaWNobWVudFwiOiB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAxLCBsYWJlbDogXCJYWFNcIiwgcHJpY2U6IFtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJ31cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDIsIGxhYmVsOiBcIlhTXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAzLCBsYWJlbDogXCJTXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiA0LCBsYWJlbDogXCJMXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICB9O1xuICpcbiAqIGxldCBjYWxsYmFjayA9IGZ1bmN0aW9uIChzdWJqZWN0KSB7XG4gKiAgICAgICAgICAgICAgICBsZXQgbSA9IG5ldyBNYXA7XG4gKlxuICogICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaSwgYl0gb2YgT2JqZWN0LmVudHJpZXMoc3ViamVjdC5kYXRhKSkge1xuICpcbiAqICAgICAgICAgICAgICAgICAgICBsZXQga2V5MSA9IGk7XG4gKlxuICogICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2osIGNdIG9mIE9iamVjdC5lbnRyaWVzKGIuZW5yaWNobWVudC52YXJpYW50cykpIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleTIgPSBqO1xuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaywgZF0gb2YgT2JqZWN0LmVudHJpZXMoYy5wcmljZSkpIHtcbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5MyA9IGs7XG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5uYW1lID0gYi5uYW1lO1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5sYWJlbCA9IGMubGFiZWw7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmlkID0gW2tleTEsIGtleTIsIGtleTNdLmpvaW4oJy4nKTtcbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLnNldChkLmlkLCBkKTtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgfVxuICpcbiAqICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICByZXR1cm4gbTtcbiAqICAgICAgICAgICAgfVxuICpcbiAqIGxldCBtYXAgPSBidWlsZE1hcChvYmosIGNhbGxiYWNrLCAnJHtuYW1lfSAke3ZrfScsICcke2lkfScpXG4gKlxuICogLy8gXHUyMUE2IE1hcCgzKSB7XG4gKiAvLyAgXCIwLjAuMFwiOlwiQ2Fzc2FuZHJhIDEyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMC4wLjFcIjpcIkNhc3NhbmRyYSAxMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjAuMS4wXCI6XCJDYXNzYW5kcmEgMjIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIwLjEuMVwiOlwiQ2Fzc2FuZHJhIDIyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMC4yLjBcIjpcIkNhc3NhbmRyYSAzMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjAuMi4xXCI6XCJDYXNzYW5kcmEgMzIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIwLjMuMFwiOlwiQ2Fzc2FuZHJhIDQyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMC4zLjFcIjpcIkNhc3NhbmRyYSA0Mi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMC4wXCI6XCJZZXNzZXkhIDEyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMS4wLjFcIjpcIlllc3NleSEgMTIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIxLjEuMFwiOlwiWWVzc2V5ISAyMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMS4xXCI6XCJZZXNzZXkhIDIyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMS4yLjBcIjpcIlllc3NleSEgMzIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIxLjIuMVwiOlwiWWVzc2V5ISAzMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMy4wXCI6XCJZZXNzZXkhIDQyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMS4zLjFcIjpcIlllc3NleSEgNDIuMTIgXHUyMEFDXCJcbiAqIC8vIH1cbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5EYXRhfmV4YW1wbGVTZWxlY3RvckNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHN1YmplY3Qgc3ViamVjdFxuICogQHJldHVybiBNYXBcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTcuMFxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5EYXRhLmJ1aWxkTWFwfVxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdFxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBkZWZpbml0aW9uXG4gKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZVxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gYnVpbGQoc3ViamVjdCwgZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKSB7XG5cdGlmIChkZWZpbml0aW9uID09PSB1bmRlZmluZWQpIHJldHVybiBkZWZhdWx0VmFsdWUgPyBkZWZhdWx0VmFsdWUgOiBzdWJqZWN0O1xuXHR2YWxpZGF0ZVN0cmluZyhkZWZpbml0aW9uKTtcblxuXHRjb25zdCByZWdleHAgPSAvKD88cGxhY2Vob2xkZXI+XFwkeyg/PHBhdGg+W2EtelxcXkEtWi5cXC1fMC05XSopfSkvZ207XG5cdGNvbnN0IGFycmF5ID0gWy4uLmRlZmluaXRpb24ubWF0Y2hBbGwocmVnZXhwKV07XG5cblx0Y29uc3QgZmluZGVyID0gbmV3IFBhdGhmaW5kZXIoc3ViamVjdCk7XG5cblx0aWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBmaW5kZXIuZ2V0VmlhKGRlZmluaXRpb24pO1xuXHR9XG5cblx0YXJyYXkuZm9yRWFjaCgoYSkgPT4ge1xuXHRcdGNvbnN0IGdyb3VwcyA9IGE/LltcImdyb3Vwc1wiXTtcblx0XHRjb25zdCBwbGFjZWhvbGRlciA9IGdyb3Vwcz8uW1wicGxhY2Vob2xkZXJcIl07XG5cdFx0aWYgKHBsYWNlaG9sZGVyID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuXHRcdGNvbnN0IHBhdGggPSBncm91cHM/LltcInBhdGhcIl07XG5cblx0XHRsZXQgdiA9IGZpbmRlci5nZXRWaWEocGF0aCk7XG5cdFx0aWYgKHYgPT09IHVuZGVmaW5lZCkgdiA9IGRlZmF1bHRWYWx1ZTtcblxuXHRcdGRlZmluaXRpb24gPSBkZWZpbml0aW9uLnJlcGxhY2VBbGwocGxhY2Vob2xkZXIsIHYpO1xuXHR9KTtcblxuXHRyZXR1cm4gZGVmaW5pdGlvbjtcbn1cbiIsICIvKipcbiAqIEN1c3RvbSBwb3NpdGlvbmluZyByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy92aXJ0dWFsLWVsZW1lbnRzXG4gKi9cblxuY29uc3Qgc2lkZXMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddO1xuY29uc3QgYWxpZ25tZW50cyA9IFsnc3RhcnQnLCAnZW5kJ107XG5jb25zdCBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL3NpZGVzLnJlZHVjZSgoYWNjLCBzaWRlKSA9PiBhY2MuY29uY2F0KHNpZGUsIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMF0sIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMV0pLCBbXSk7XG5jb25zdCBtaW4gPSBNYXRoLm1pbjtcbmNvbnN0IG1heCA9IE1hdGgubWF4O1xuY29uc3Qgcm91bmQgPSBNYXRoLnJvdW5kO1xuY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yO1xuY29uc3QgY3JlYXRlQ29vcmRzID0gdiA9PiAoe1xuICB4OiB2LFxuICB5OiB2XG59KTtcbmNvbnN0IG9wcG9zaXRlU2lkZU1hcCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmNvbnN0IG9wcG9zaXRlQWxpZ25tZW50TWFwID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmZ1bmN0aW9uIGNsYW1wKHN0YXJ0LCB2YWx1ZSwgZW5kKSB7XG4gIHJldHVybiBtYXgoc3RhcnQsIG1pbih2YWx1ZSwgZW5kKSk7XG59XG5mdW5jdGlvbiBldmFsdWF0ZSh2YWx1ZSwgcGFyYW0pIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKHBhcmFtKSA6IHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0U2lkZShwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QXhpc0xlbmd0aChheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG59XG5mdW5jdGlvbiBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIFsndG9wJywgJ2JvdHRvbSddLmluY2x1ZGVzKGdldFNpZGUocGxhY2VtZW50KSkgPyAneScgOiAneCc7XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCkge1xuICByZXR1cm4gZ2V0T3Bwb3NpdGVBeGlzKGdldFNpZGVBeGlzKHBsYWNlbWVudCkpO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50U2lkZXMocGxhY2VtZW50LCByZWN0cywgcnRsKSB7XG4gIGlmIChydGwgPT09IHZvaWQgMCkge1xuICAgIHJ0bCA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnRBeGlzID0gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBsZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGFsaWdubWVudEF4aXMpO1xuICBsZXQgbWFpbkFsaWdubWVudFNpZGUgPSBhbGlnbm1lbnRBeGlzID09PSAneCcgPyBhbGlnbm1lbnQgPT09IChydGwgPyAnZW5kJyA6ICdzdGFydCcpID8gJ3JpZ2h0JyA6ICdsZWZ0JyA6IGFsaWdubWVudCA9PT0gJ3N0YXJ0JyA/ICdib3R0b20nIDogJ3RvcCc7XG4gIGlmIChyZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSA+IHJlY3RzLmZsb2F0aW5nW2xlbmd0aF0pIHtcbiAgICBtYWluQWxpZ25tZW50U2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5BbGlnbm1lbnRTaWRlKTtcbiAgfVxuICByZXR1cm4gW21haW5BbGlnbm1lbnRTaWRlLCBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluQWxpZ25tZW50U2lkZSldO1xufVxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRQbGFjZW1lbnRzKHBsYWNlbWVudCkge1xuICBjb25zdCBvcHBvc2l0ZVBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHJldHVybiBbZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSwgb3Bwb3NpdGVQbGFjZW1lbnQsIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KG9wcG9zaXRlUGxhY2VtZW50KV07XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9zdGFydHxlbmQvZywgYWxpZ25tZW50ID0+IG9wcG9zaXRlQWxpZ25tZW50TWFwW2FsaWdubWVudF0pO1xufVxuZnVuY3Rpb24gZ2V0U2lkZUxpc3Qoc2lkZSwgaXNTdGFydCwgcnRsKSB7XG4gIGNvbnN0IGxyID0gWydsZWZ0JywgJ3JpZ2h0J107XG4gIGNvbnN0IHJsID0gWydyaWdodCcsICdsZWZ0J107XG4gIGNvbnN0IHRiID0gWyd0b3AnLCAnYm90dG9tJ107XG4gIGNvbnN0IGJ0ID0gWydib3R0b20nLCAndG9wJ107XG4gIHN3aXRjaCAoc2lkZSkge1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIGlmIChydGwpIHJldHVybiBpc1N0YXJ0ID8gcmwgOiBscjtcbiAgICAgIHJldHVybiBpc1N0YXJ0ID8gbHIgOiBybDtcbiAgICBjYXNlICdsZWZ0JzpcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICByZXR1cm4gaXNTdGFydCA/IHRiIDogYnQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBbXTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cyhwbGFjZW1lbnQsIGZsaXBBbGlnbm1lbnQsIGRpcmVjdGlvbiwgcnRsKSB7XG4gIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICBsZXQgbGlzdCA9IGdldFNpZGVMaXN0KGdldFNpZGUocGxhY2VtZW50KSwgZGlyZWN0aW9uID09PSAnc3RhcnQnLCBydGwpO1xuICBpZiAoYWxpZ25tZW50KSB7XG4gICAgbGlzdCA9IGxpc3QubWFwKHNpZGUgPT4gc2lkZSArIFwiLVwiICsgYWxpZ25tZW50KTtcbiAgICBpZiAoZmxpcEFsaWdubWVudCkge1xuICAgICAgbGlzdCA9IGxpc3QuY29uY2F0KGxpc3QubWFwKGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBsaXN0O1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIHNpZGUgPT4gb3Bwb3NpdGVTaWRlTWFwW3NpZGVdKTtcbn1cbmZ1bmN0aW9uIGV4cGFuZFBhZGRpbmdPYmplY3QocGFkZGluZykge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMCxcbiAgICAuLi5wYWRkaW5nXG4gIH07XG59XG5mdW5jdGlvbiBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IGV4cGFuZFBhZGRpbmdPYmplY3QocGFkZGluZykgOiB7XG4gICAgdG9wOiBwYWRkaW5nLFxuICAgIHJpZ2h0OiBwYWRkaW5nLFxuICAgIGJvdHRvbTogcGFkZGluZyxcbiAgICBsZWZ0OiBwYWRkaW5nXG4gIH07XG59XG5mdW5jdGlvbiByZWN0VG9DbGllbnRSZWN0KHJlY3QpIHtcbiAgY29uc3Qge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IHJlY3Q7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHRvcDogeSxcbiAgICBsZWZ0OiB4LFxuICAgIHJpZ2h0OiB4ICsgd2lkdGgsXG4gICAgYm90dG9tOiB5ICsgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5leHBvcnQgeyBhbGlnbm1lbnRzLCBjbGFtcCwgY3JlYXRlQ29vcmRzLCBldmFsdWF0ZSwgZXhwYW5kUGFkZGluZ09iamVjdCwgZmxvb3IsIGdldEFsaWdubWVudCwgZ2V0QWxpZ25tZW50QXhpcywgZ2V0QWxpZ25tZW50U2lkZXMsIGdldEF4aXNMZW5ndGgsIGdldEV4cGFuZGVkUGxhY2VtZW50cywgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQsIGdldE9wcG9zaXRlQXhpcywgZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cywgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQsIGdldFBhZGRpbmdPYmplY3QsIGdldFNpZGUsIGdldFNpZGVBeGlzLCBtYXgsIG1pbiwgcGxhY2VtZW50cywgcmVjdFRvQ2xpZW50UmVjdCwgcm91bmQsIHNpZGVzIH07XG4iLCAiaW1wb3J0IHsgZ2V0U2lkZUF4aXMsIGdldEFsaWdubWVudEF4aXMsIGdldEF4aXNMZW5ndGgsIGdldFNpZGUsIGdldEFsaWdubWVudCwgZXZhbHVhdGUsIGdldFBhZGRpbmdPYmplY3QsIHJlY3RUb0NsaWVudFJlY3QsIG1pbiwgY2xhbXAsIHBsYWNlbWVudHMsIGdldEFsaWdubWVudFNpZGVzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQsIGdldEV4cGFuZGVkUGxhY2VtZW50cywgZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cywgc2lkZXMsIG1heCwgZ2V0T3Bwb3NpdGVBeGlzIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcbmV4cG9ydCB7IHJlY3RUb0NsaWVudFJlY3QgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMnO1xuXG5mdW5jdGlvbiBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChfcmVmLCBwbGFjZW1lbnQsIHJ0bCkge1xuICBsZXQge1xuICAgIHJlZmVyZW5jZSxcbiAgICBmbG9hdGluZ1xuICB9ID0gX3JlZjtcbiAgY29uc3Qgc2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnRBeGlzID0gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbkxlbmd0aCA9IGdldEF4aXNMZW5ndGgoYWxpZ25tZW50QXhpcyk7XG4gIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gIGNvbnN0IGlzVmVydGljYWwgPSBzaWRlQXhpcyA9PT0gJ3knO1xuICBjb25zdCBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZmxvYXRpbmcud2lkdGggLyAyO1xuICBjb25zdCBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGZsb2F0aW5nLmhlaWdodCAvIDI7XG4gIGNvbnN0IGNvbW1vbkFsaWduID0gcmVmZXJlbmNlW2FsaWduTGVuZ3RoXSAvIDIgLSBmbG9hdGluZ1thbGlnbkxlbmd0aF0gLyAyO1xuICBsZXQgY29vcmRzO1xuICBzd2l0Y2ggKHNpZGUpIHtcbiAgICBjYXNlICd0b3AnOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGZsb2F0aW5nLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBmbG9hdGluZy53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54LFxuICAgICAgICB5OiByZWZlcmVuY2UueVxuICAgICAgfTtcbiAgfVxuICBzd2l0Y2ggKGdldEFsaWdubWVudChwbGFjZW1lbnQpKSB7XG4gICAgY2FzZSAnc3RhcnQnOlxuICAgICAgY29vcmRzW2FsaWdubWVudEF4aXNdIC09IGNvbW1vbkFsaWduICogKHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2VuZCc6XG4gICAgICBjb29yZHNbYWxpZ25tZW50QXhpc10gKz0gY29tbW9uQWxpZ24gKiAocnRsICYmIGlzVmVydGljYWwgPyAtMSA6IDEpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGNvb3Jkcztcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMgdGhhdCB3aWxsIHBsYWNlIHRoZSBmbG9hdGluZyBlbGVtZW50XG4gKiBuZXh0IHRvIGEgZ2l2ZW4gcmVmZXJlbmNlIGVsZW1lbnQuXG4gKlxuICogVGhpcyBleHBvcnQgZG9lcyBub3QgaGF2ZSBhbnkgYHBsYXRmb3JtYCBpbnRlcmZhY2UgbG9naWMuIFlvdSB3aWxsIG5lZWQgdG9cbiAqIHdyaXRlIG9uZSBmb3IgdGhlIHBsYXRmb3JtIHlvdSBhcmUgdXNpbmcgRmxvYXRpbmcgVUkgd2l0aC5cbiAqL1xuY29uc3QgY29tcHV0ZVBvc2l0aW9uID0gYXN5bmMgKHJlZmVyZW5jZSwgZmxvYXRpbmcsIGNvbmZpZykgPT4ge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50ID0gJ2JvdHRvbScsXG4gICAgc3RyYXRlZ3kgPSAnYWJzb2x1dGUnLFxuICAgIG1pZGRsZXdhcmUgPSBbXSxcbiAgICBwbGF0Zm9ybVxuICB9ID0gY29uZmlnO1xuICBjb25zdCB2YWxpZE1pZGRsZXdhcmUgPSBtaWRkbGV3YXJlLmZpbHRlcihCb29sZWFuKTtcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChmbG9hdGluZykpO1xuICBsZXQgcmVjdHMgPSBhd2FpdCBwbGF0Zm9ybS5nZXRFbGVtZW50UmVjdHMoe1xuICAgIHJlZmVyZW5jZSxcbiAgICBmbG9hdGluZyxcbiAgICBzdHJhdGVneVxuICB9KTtcbiAgbGV0IHtcbiAgICB4LFxuICAgIHlcbiAgfSA9IGNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50KHJlY3RzLCBwbGFjZW1lbnQsIHJ0bCk7XG4gIGxldCBzdGF0ZWZ1bFBsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgbGV0IG1pZGRsZXdhcmVEYXRhID0ge307XG4gIGxldCByZXNldENvdW50ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWxpZE1pZGRsZXdhcmUubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB7XG4gICAgICBuYW1lLFxuICAgICAgZm5cbiAgICB9ID0gdmFsaWRNaWRkbGV3YXJlW2ldO1xuICAgIGNvbnN0IHtcbiAgICAgIHg6IG5leHRYLFxuICAgICAgeTogbmV4dFksXG4gICAgICBkYXRhLFxuICAgICAgcmVzZXRcbiAgICB9ID0gYXdhaXQgZm4oe1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBpbml0aWFsUGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQ6IHN0YXRlZnVsUGxhY2VtZW50LFxuICAgICAgc3RyYXRlZ3ksXG4gICAgICBtaWRkbGV3YXJlRGF0YSxcbiAgICAgIHJlY3RzLFxuICAgICAgcGxhdGZvcm0sXG4gICAgICBlbGVtZW50czoge1xuICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgIGZsb2F0aW5nXG4gICAgICB9XG4gICAgfSk7XG4gICAgeCA9IG5leHRYICE9IG51bGwgPyBuZXh0WCA6IHg7XG4gICAgeSA9IG5leHRZICE9IG51bGwgPyBuZXh0WSA6IHk7XG4gICAgbWlkZGxld2FyZURhdGEgPSB7XG4gICAgICAuLi5taWRkbGV3YXJlRGF0YSxcbiAgICAgIFtuYW1lXToge1xuICAgICAgICAuLi5taWRkbGV3YXJlRGF0YVtuYW1lXSxcbiAgICAgICAgLi4uZGF0YVxuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHJlc2V0ICYmIHJlc2V0Q291bnQgPD0gNTApIHtcbiAgICAgIHJlc2V0Q291bnQrKztcbiAgICAgIGlmICh0eXBlb2YgcmVzZXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChyZXNldC5wbGFjZW1lbnQpIHtcbiAgICAgICAgICBzdGF0ZWZ1bFBsYWNlbWVudCA9IHJlc2V0LnBsYWNlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzZXQucmVjdHMpIHtcbiAgICAgICAgICByZWN0cyA9IHJlc2V0LnJlY3RzID09PSB0cnVlID8gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICAgICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgICAgIGZsb2F0aW5nLFxuICAgICAgICAgICAgc3RyYXRlZ3lcbiAgICAgICAgICB9KSA6IHJlc2V0LnJlY3RzO1xuICAgICAgICB9XG4gICAgICAgICh7XG4gICAgICAgICAgeCxcbiAgICAgICAgICB5XG4gICAgICAgIH0gPSBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChyZWN0cywgc3RhdGVmdWxQbGFjZW1lbnQsIHJ0bCkpO1xuICAgICAgfVxuICAgICAgaSA9IC0xO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlZnVsUGxhY2VtZW50LFxuICAgIHN0cmF0ZWd5LFxuICAgIG1pZGRsZXdhcmVEYXRhXG4gIH07XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHdpdGggYW4gb2JqZWN0IG9mIG92ZXJmbG93IHNpZGUgb2Zmc2V0cyB0aGF0IGRldGVybWluZSBob3cgbXVjaCB0aGVcbiAqIGVsZW1lbnQgaXMgb3ZlcmZsb3dpbmcgYSBnaXZlbiBjbGlwcGluZyBib3VuZGFyeSBvbiBlYWNoIHNpZGUuXG4gKiAtIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGJvdW5kYXJ5IGJ5IHRoYXQgbnVtYmVyIG9mIHBpeGVsc1xuICogLSBuZWdhdGl2ZSA9IGhvdyBtYW55IHBpeGVscyBsZWZ0IGJlZm9yZSBpdCB3aWxsIG92ZXJmbG93XG4gKiAtIDAgPSBsaWVzIGZsdXNoIHdpdGggdGhlIGJvdW5kYXJ5XG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZGV0ZWN0T3ZlcmZsb3dcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9hd2FpdCRwbGF0Zm9ybSRpc0VsZTtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBjb25zdCB7XG4gICAgeCxcbiAgICB5LFxuICAgIHBsYXRmb3JtLFxuICAgIHJlY3RzLFxuICAgIGVsZW1lbnRzLFxuICAgIHN0cmF0ZWd5XG4gIH0gPSBzdGF0ZTtcbiAgY29uc3Qge1xuICAgIGJvdW5kYXJ5ID0gJ2NsaXBwaW5nQW5jZXN0b3JzJyxcbiAgICByb290Qm91bmRhcnkgPSAndmlld3BvcnQnLFxuICAgIGVsZW1lbnRDb250ZXh0ID0gJ2Zsb2F0aW5nJyxcbiAgICBhbHRCb3VuZGFyeSA9IGZhbHNlLFxuICAgIHBhZGRpbmcgPSAwXG4gIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gIGNvbnN0IHBhZGRpbmdPYmplY3QgPSBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpO1xuICBjb25zdCBhbHRDb250ZXh0ID0gZWxlbWVudENvbnRleHQgPT09ICdmbG9hdGluZycgPyAncmVmZXJlbmNlJyA6ICdmbG9hdGluZyc7XG4gIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIGNvbnN0IGNsaXBwaW5nQ2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QoYXdhaXQgcGxhdGZvcm0uZ2V0Q2xpcHBpbmdSZWN0KHtcbiAgICBlbGVtZW50OiAoKF9hd2FpdCRwbGF0Zm9ybSRpc0VsZSA9IGF3YWl0IChwbGF0Zm9ybS5pc0VsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzRWxlbWVudChlbGVtZW50KSkpICE9IG51bGwgPyBfYXdhaXQkcGxhdGZvcm0kaXNFbGUgOiB0cnVlKSA/IGVsZW1lbnQgOiBlbGVtZW50LmNvbnRleHRFbGVtZW50IHx8IChhd2FpdCAocGxhdGZvcm0uZ2V0RG9jdW1lbnRFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudHMuZmxvYXRpbmcpKSksXG4gICAgYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5LFxuICAgIHN0cmF0ZWd5XG4gIH0pKTtcbiAgY29uc3QgcmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSAnZmxvYXRpbmcnID8ge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aDogcmVjdHMuZmxvYXRpbmcud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0cy5mbG9hdGluZy5oZWlnaHRcbiAgfSA6IHJlY3RzLnJlZmVyZW5jZTtcbiAgY29uc3Qgb2Zmc2V0UGFyZW50ID0gYXdhaXQgKHBsYXRmb3JtLmdldE9mZnNldFBhcmVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gIGNvbnN0IG9mZnNldFNjYWxlID0gKGF3YWl0IChwbGF0Zm9ybS5pc0VsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzRWxlbWVudChvZmZzZXRQYXJlbnQpKSkgPyAoYXdhaXQgKHBsYXRmb3JtLmdldFNjYWxlID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRTY2FsZShvZmZzZXRQYXJlbnQpKSkgfHwge1xuICAgIHg6IDEsXG4gICAgeTogMVxuICB9IDoge1xuICAgIHg6IDEsXG4gICAgeTogMVxuICB9O1xuICBjb25zdCBlbGVtZW50Q2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QocGxhdGZvcm0uY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QgPyBhd2FpdCBwbGF0Zm9ybS5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCh7XG4gICAgZWxlbWVudHMsXG4gICAgcmVjdCxcbiAgICBvZmZzZXRQYXJlbnQsXG4gICAgc3RyYXRlZ3lcbiAgfSkgOiByZWN0KTtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IChjbGlwcGluZ0NsaWVudFJlY3QudG9wIC0gZWxlbWVudENsaWVudFJlY3QudG9wICsgcGFkZGluZ09iamVjdC50b3ApIC8gb2Zmc2V0U2NhbGUueSxcbiAgICBib3R0b206IChlbGVtZW50Q2xpZW50UmVjdC5ib3R0b20gLSBjbGlwcGluZ0NsaWVudFJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20pIC8gb2Zmc2V0U2NhbGUueSxcbiAgICBsZWZ0OiAoY2xpcHBpbmdDbGllbnRSZWN0LmxlZnQgLSBlbGVtZW50Q2xpZW50UmVjdC5sZWZ0ICsgcGFkZGluZ09iamVjdC5sZWZ0KSAvIG9mZnNldFNjYWxlLngsXG4gICAgcmlnaHQ6IChlbGVtZW50Q2xpZW50UmVjdC5yaWdodCAtIGNsaXBwaW5nQ2xpZW50UmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHQpIC8gb2Zmc2V0U2NhbGUueFxuICB9O1xufVxuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gcG9zaXRpb24gYW4gaW5uZXIgZWxlbWVudCBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBzbyB0aGF0IGl0XG4gKiBhcHBlYXJzIGNlbnRlcmVkIHRvIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hcnJvd1xuICovXG5jb25zdCBhcnJvdyA9IG9wdGlvbnMgPT4gKHtcbiAgbmFtZTogJ2Fycm93JyxcbiAgb3B0aW9ucyxcbiAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICBjb25zdCB7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHBsYWNlbWVudCxcbiAgICAgIHJlY3RzLFxuICAgICAgcGxhdGZvcm0sXG4gICAgICBlbGVtZW50cyxcbiAgICAgIG1pZGRsZXdhcmVEYXRhXG4gICAgfSA9IHN0YXRlO1xuICAgIC8vIFNpbmNlIGBlbGVtZW50YCBpcyByZXF1aXJlZCwgd2UgZG9uJ3QgUGFydGlhbDw+IHRoZSB0eXBlLlxuICAgIGNvbnN0IHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwYWRkaW5nID0gMFxuICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSkgfHwge307XG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICB4LFxuICAgICAgeVxuICAgIH07XG4gICAgY29uc3QgYXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgICBjb25zdCBsZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGF4aXMpO1xuICAgIGNvbnN0IGFycm93RGltZW5zaW9ucyA9IGF3YWl0IHBsYXRmb3JtLmdldERpbWVuc2lvbnMoZWxlbWVudCk7XG4gICAgY29uc3QgaXNZQXhpcyA9IGF4aXMgPT09ICd5JztcbiAgICBjb25zdCBtaW5Qcm9wID0gaXNZQXhpcyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgIGNvbnN0IG1heFByb3AgPSBpc1lBeGlzID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICAgIGNvbnN0IGNsaWVudFByb3AgPSBpc1lBeGlzID8gJ2NsaWVudEhlaWdodCcgOiAnY2xpZW50V2lkdGgnO1xuICAgIGNvbnN0IGVuZERpZmYgPSByZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSArIHJlY3RzLnJlZmVyZW5jZVtheGlzXSAtIGNvb3Jkc1theGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbmd0aF07XG4gICAgY29uc3Qgc3RhcnREaWZmID0gY29vcmRzW2F4aXNdIC0gcmVjdHMucmVmZXJlbmNlW2F4aXNdO1xuICAgIGNvbnN0IGFycm93T2Zmc2V0UGFyZW50ID0gYXdhaXQgKHBsYXRmb3JtLmdldE9mZnNldFBhcmVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpKTtcbiAgICBsZXQgY2xpZW50U2l6ZSA9IGFycm93T2Zmc2V0UGFyZW50ID8gYXJyb3dPZmZzZXRQYXJlbnRbY2xpZW50UHJvcF0gOiAwO1xuXG4gICAgLy8gRE9NIHBsYXRmb3JtIGNhbiByZXR1cm4gYHdpbmRvd2AgYXMgdGhlIGBvZmZzZXRQYXJlbnRgLlxuICAgIGlmICghY2xpZW50U2l6ZSB8fCAhKGF3YWl0IChwbGF0Zm9ybS5pc0VsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzRWxlbWVudChhcnJvd09mZnNldFBhcmVudCkpKSkge1xuICAgICAgY2xpZW50U2l6ZSA9IGVsZW1lbnRzLmZsb2F0aW5nW2NsaWVudFByb3BdIHx8IHJlY3RzLmZsb2F0aW5nW2xlbmd0aF07XG4gICAgfVxuICAgIGNvbnN0IGNlbnRlclRvUmVmZXJlbmNlID0gZW5kRGlmZiAvIDIgLSBzdGFydERpZmYgLyAyO1xuXG4gICAgLy8gSWYgdGhlIHBhZGRpbmcgaXMgbGFyZ2UgZW5vdWdoIHRoYXQgaXQgY2F1c2VzIHRoZSBhcnJvdyB0byBubyBsb25nZXIgYmVcbiAgICAvLyBjZW50ZXJlZCwgbW9kaWZ5IHRoZSBwYWRkaW5nIHNvIHRoYXQgaXQgaXMgY2VudGVyZWQuXG4gICAgY29uc3QgbGFyZ2VzdFBvc3NpYmxlUGFkZGluZyA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyIC0gMTtcbiAgICBjb25zdCBtaW5QYWRkaW5nID0gbWluKHBhZGRpbmdPYmplY3RbbWluUHJvcF0sIGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcpO1xuICAgIGNvbnN0IG1heFBhZGRpbmcgPSBtaW4ocGFkZGluZ09iamVjdFttYXhQcm9wXSwgbGFyZ2VzdFBvc3NpYmxlUGFkZGluZyk7XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFycm93IGRvZXNuJ3Qgb3ZlcmZsb3cgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaWYgdGhlIGNlbnRlclxuICAgIC8vIHBvaW50IGlzIG91dHNpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQncyBib3VuZHMuXG4gICAgY29uc3QgbWluJDEgPSBtaW5QYWRkaW5nO1xuICAgIGNvbnN0IG1heCA9IGNsaWVudFNpemUgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAtIG1heFBhZGRpbmc7XG4gICAgY29uc3QgY2VudGVyID0gY2xpZW50U2l6ZSAvIDIgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgKyBjZW50ZXJUb1JlZmVyZW5jZTtcbiAgICBjb25zdCBvZmZzZXQgPSBjbGFtcChtaW4kMSwgY2VudGVyLCBtYXgpO1xuXG4gICAgLy8gSWYgdGhlIHJlZmVyZW5jZSBpcyBzbWFsbCBlbm91Z2ggdGhhdCB0aGUgYXJyb3cncyBwYWRkaW5nIGNhdXNlcyBpdCB0b1xuICAgIC8vIHRvIHBvaW50IHRvIG5vdGhpbmcgZm9yIGFuIGFsaWduZWQgcGxhY2VtZW50LCBhZGp1c3QgdGhlIG9mZnNldCBvZiB0aGVcbiAgICAvLyBmbG9hdGluZyBlbGVtZW50IGl0c2VsZi4gVG8gZW5zdXJlIGBzaGlmdCgpYCBjb250aW51ZXMgdG8gdGFrZSBhY3Rpb24sXG4gICAgLy8gYSBzaW5nbGUgcmVzZXQgaXMgcGVyZm9ybWVkIHdoZW4gdGhpcyBpcyB0cnVlLlxuICAgIGNvbnN0IHNob3VsZEFkZE9mZnNldCA9ICFtaWRkbGV3YXJlRGF0YS5hcnJvdyAmJiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSAhPSBudWxsICYmIGNlbnRlciAhPT0gb2Zmc2V0ICYmIHJlY3RzLnJlZmVyZW5jZVtsZW5ndGhdIC8gMiAtIChjZW50ZXIgPCBtaW4kMSA/IG1pblBhZGRpbmcgOiBtYXhQYWRkaW5nKSAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiA8IDA7XG4gICAgY29uc3QgYWxpZ25tZW50T2Zmc2V0ID0gc2hvdWxkQWRkT2Zmc2V0ID8gY2VudGVyIDwgbWluJDEgPyBjZW50ZXIgLSBtaW4kMSA6IGNlbnRlciAtIG1heCA6IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtheGlzXTogY29vcmRzW2F4aXNdICsgYWxpZ25tZW50T2Zmc2V0LFxuICAgICAgZGF0YToge1xuICAgICAgICBbYXhpc106IG9mZnNldCxcbiAgICAgICAgY2VudGVyT2Zmc2V0OiBjZW50ZXIgLSBvZmZzZXQgLSBhbGlnbm1lbnRPZmZzZXQsXG4gICAgICAgIC4uLihzaG91bGRBZGRPZmZzZXQgJiYge1xuICAgICAgICAgIGFsaWdubWVudE9mZnNldFxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIHJlc2V0OiBzaG91bGRBZGRPZmZzZXRcbiAgICB9O1xuICB9XG59KTtcblxuZnVuY3Rpb24gZ2V0UGxhY2VtZW50TGlzdChhbGlnbm1lbnQsIGF1dG9BbGlnbm1lbnQsIGFsbG93ZWRQbGFjZW1lbnRzKSB7XG4gIGNvbnN0IGFsbG93ZWRQbGFjZW1lbnRzU29ydGVkQnlBbGlnbm1lbnQgPSBhbGlnbm1lbnQgPyBbLi4uYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSA9PT0gYWxpZ25tZW50KSwgLi4uYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSAhPT0gYWxpZ25tZW50KV0gOiBhbGxvd2VkUGxhY2VtZW50cy5maWx0ZXIocGxhY2VtZW50ID0+IGdldFNpZGUocGxhY2VtZW50KSA9PT0gcGxhY2VtZW50KTtcbiAgcmV0dXJuIGFsbG93ZWRQbGFjZW1lbnRzU29ydGVkQnlBbGlnbm1lbnQuZmlsdGVyKHBsYWNlbWVudCA9PiB7XG4gICAgaWYgKGFsaWdubWVudCkge1xuICAgICAgcmV0dXJuIGdldEFsaWdubWVudChwbGFjZW1lbnQpID09PSBhbGlnbm1lbnQgfHwgKGF1dG9BbGlnbm1lbnQgPyBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpICE9PSBwbGFjZW1lbnQgOiBmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcbn1cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGNob29zaW5nIHRoZSBwbGFjZW1lbnRcbiAqIHRoYXQgaGFzIHRoZSBtb3N0IHNwYWNlIGF2YWlsYWJsZSBhdXRvbWF0aWNhbGx5LCB3aXRob3V0IG5lZWRpbmcgdG8gc3BlY2lmeSBhXG4gKiBwcmVmZXJyZWQgcGxhY2VtZW50LiBBbHRlcm5hdGl2ZSB0byBgZmxpcGAuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1BsYWNlbWVudFxuICovXG5jb25zdCBhdXRvUGxhY2VtZW50ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdhdXRvUGxhY2VtZW50JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJGF1dG9QLCBfbWlkZGxld2FyZURhdGEkYXV0b1AyLCBfcGxhY2VtZW50c1RoYXRGaXRPbkU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlY3RzLFxuICAgICAgICBtaWRkbGV3YXJlRGF0YSxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgZWxlbWVudHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY3Jvc3NBeGlzID0gZmFsc2UsXG4gICAgICAgIGFsaWdubWVudCxcbiAgICAgICAgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLFxuICAgICAgICBhdXRvQWxpZ25tZW50ID0gdHJ1ZSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgcGxhY2VtZW50cyQxID0gYWxpZ25tZW50ICE9PSB1bmRlZmluZWQgfHwgYWxsb3dlZFBsYWNlbWVudHMgPT09IHBsYWNlbWVudHMgPyBnZXRQbGFjZW1lbnRMaXN0KGFsaWdubWVudCB8fCBudWxsLCBhdXRvQWxpZ25tZW50LCBhbGxvd2VkUGxhY2VtZW50cykgOiBhbGxvd2VkUGxhY2VtZW50cztcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXggPSAoKF9taWRkbGV3YXJlRGF0YSRhdXRvUCA9IG1pZGRsZXdhcmVEYXRhLmF1dG9QbGFjZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkYXV0b1AuaW5kZXgpIHx8IDA7XG4gICAgICBjb25zdCBjdXJyZW50UGxhY2VtZW50ID0gcGxhY2VtZW50cyQxW2N1cnJlbnRJbmRleF07XG4gICAgICBpZiAoY3VycmVudFBsYWNlbWVudCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsaWdubWVudFNpZGVzID0gZ2V0QWxpZ25tZW50U2lkZXMoY3VycmVudFBsYWNlbWVudCwgcmVjdHMsIGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKSk7XG5cbiAgICAgIC8vIE1ha2UgYGNvbXB1dGVDb29yZHNgIHN0YXJ0IGZyb20gdGhlIHJpZ2h0IHBsYWNlLlxuICAgICAgaWYgKHBsYWNlbWVudCAhPT0gY3VycmVudFBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudHMkMVswXVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnRPdmVyZmxvd3MgPSBbb3ZlcmZsb3dbZ2V0U2lkZShjdXJyZW50UGxhY2VtZW50KV0sIG92ZXJmbG93W2FsaWdubWVudFNpZGVzWzBdXSwgb3ZlcmZsb3dbYWxpZ25tZW50U2lkZXNbMV1dXTtcbiAgICAgIGNvbnN0IGFsbE92ZXJmbG93cyA9IFsuLi4oKChfbWlkZGxld2FyZURhdGEkYXV0b1AyID0gbWlkZGxld2FyZURhdGEuYXV0b1BsYWNlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRhdXRvUDIub3ZlcmZsb3dzKSB8fCBbXSksIHtcbiAgICAgICAgcGxhY2VtZW50OiBjdXJyZW50UGxhY2VtZW50LFxuICAgICAgICBvdmVyZmxvd3M6IGN1cnJlbnRPdmVyZmxvd3NcbiAgICAgIH1dO1xuICAgICAgY29uc3QgbmV4dFBsYWNlbWVudCA9IHBsYWNlbWVudHMkMVtjdXJyZW50SW5kZXggKyAxXTtcblxuICAgICAgLy8gVGhlcmUgYXJlIG1vcmUgcGxhY2VtZW50cyB0byBjaGVjay5cbiAgICAgIGlmIChuZXh0UGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCArIDEsXG4gICAgICAgICAgICBvdmVyZmxvd3M6IGFsbE92ZXJmbG93c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZSA9IGFsbE92ZXJmbG93cy5tYXAoZCA9PiB7XG4gICAgICAgIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChkLnBsYWNlbWVudCk7XG4gICAgICAgIHJldHVybiBbZC5wbGFjZW1lbnQsIGFsaWdubWVudCAmJiBjcm9zc0F4aXMgP1xuICAgICAgICAvLyBDaGVjayBhbG9uZyB0aGUgbWFpbkF4aXMgYW5kIG1haW4gY3Jvc3NBeGlzIHNpZGUuXG4gICAgICAgIGQub3ZlcmZsb3dzLnNsaWNlKDAsIDIpLnJlZHVjZSgoYWNjLCB2KSA9PiBhY2MgKyB2LCAwKSA6XG4gICAgICAgIC8vIENoZWNrIG9ubHkgdGhlIG1haW5BeGlzLlxuICAgICAgICBkLm92ZXJmbG93c1swXSwgZC5vdmVyZmxvd3NdO1xuICAgICAgfSkuc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pO1xuICAgICAgY29uc3QgcGxhY2VtZW50c1RoYXRGaXRPbkVhY2hTaWRlID0gcGxhY2VtZW50c1NvcnRlZEJ5TW9zdFNwYWNlLmZpbHRlcihkID0+IGRbMl0uc2xpY2UoMCxcbiAgICAgIC8vIEFsaWduZWQgcGxhY2VtZW50cyBzaG91bGQgbm90IGNoZWNrIHRoZWlyIG9wcG9zaXRlIGNyb3NzQXhpc1xuICAgICAgLy8gc2lkZS5cbiAgICAgIGdldEFsaWdubWVudChkWzBdKSA/IDIgOiAzKS5ldmVyeSh2ID0+IHYgPD0gMCkpO1xuICAgICAgY29uc3QgcmVzZXRQbGFjZW1lbnQgPSAoKF9wbGFjZW1lbnRzVGhhdEZpdE9uRSA9IHBsYWNlbWVudHNUaGF0Rml0T25FYWNoU2lkZVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wbGFjZW1lbnRzVGhhdEZpdE9uRVswXSkgfHwgcGxhY2VtZW50c1NvcnRlZEJ5TW9zdFNwYWNlWzBdWzBdO1xuICAgICAgaWYgKHJlc2V0UGxhY2VtZW50ICE9PSBwbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBpbmRleDogY3VycmVudEluZGV4ICsgMSxcbiAgICAgICAgICAgIG92ZXJmbG93czogYWxsT3ZlcmZsb3dzXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiByZXNldFBsYWNlbWVudFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBmbGlwcGluZyB0aGUgYHBsYWNlbWVudGBcbiAqIGluIG9yZGVyIHRvIGtlZXAgaXQgaW4gdmlldyB3aGVuIHRoZSBwcmVmZXJyZWQgcGxhY2VtZW50KHMpIHdpbGwgb3ZlcmZsb3cgdGhlXG4gKiBjbGlwcGluZyBib3VuZGFyeS4gQWx0ZXJuYXRpdmUgdG8gYGF1dG9QbGFjZW1lbnRgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2ZsaXBcbiAqL1xuY29uc3QgZmxpcCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnZmxpcCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRhcnJvdywgX21pZGRsZXdhcmVEYXRhJGZsaXA7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBpbml0aWFsUGxhY2VtZW50LFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgZWxlbWVudHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxuICAgICAgICBjcm9zc0F4aXM6IGNoZWNrQ3Jvc3NBeGlzID0gdHJ1ZSxcbiAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzOiBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICAgIGZhbGxiYWNrU3RyYXRlZ3kgPSAnYmVzdEZpdCcsXG4gICAgICAgIGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gPSAnbm9uZScsXG4gICAgICAgIGZsaXBBbGlnbm1lbnQgPSB0cnVlLFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG5cbiAgICAgIC8vIElmIGEgcmVzZXQgYnkgdGhlIGFycm93IHdhcyBjYXVzZWQgZHVlIHRvIGFuIGFsaWdubWVudCBvZmZzZXQgYmVpbmdcbiAgICAgIC8vIGFkZGVkLCB3ZSBzaG91bGQgc2tpcCBhbnkgbG9naWMgbm93IHNpbmNlIGBmbGlwKClgIGhhcyBhbHJlYWR5IGRvbmUgaXRzXG4gICAgICAvLyB3b3JrLlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8yNTQ5I2lzc3VlY29tbWVudC0xNzE5NjAxNjQzXG4gICAgICBpZiAoKF9taWRkbGV3YXJlRGF0YSRhcnJvdyA9IG1pZGRsZXdhcmVEYXRhLmFycm93KSAhPSBudWxsICYmIF9taWRkbGV3YXJlRGF0YSRhcnJvdy5hbGlnbm1lbnRPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGluaXRpYWxTaWRlQXhpcyA9IGdldFNpZGVBeGlzKGluaXRpYWxQbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaXNCYXNlUGxhY2VtZW50ID0gZ2V0U2lkZShpbml0aWFsUGxhY2VtZW50KSA9PT0gaW5pdGlhbFBsYWNlbWVudDtcbiAgICAgIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKTtcbiAgICAgIGNvbnN0IGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwQWxpZ25tZW50ID8gW2dldE9wcG9zaXRlUGxhY2VtZW50KGluaXRpYWxQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkUGxhY2VtZW50cyhpbml0aWFsUGxhY2VtZW50KSk7XG4gICAgICBjb25zdCBoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uID0gZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiAhPT0gJ25vbmUnO1xuICAgICAgaWYgKCFzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgJiYgaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbikge1xuICAgICAgICBmYWxsYmFja1BsYWNlbWVudHMucHVzaCguLi5nZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKGluaXRpYWxQbGFjZW1lbnQsIGZsaXBBbGlnbm1lbnQsIGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24sIHJ0bCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGxhY2VtZW50cyA9IFtpbml0aWFsUGxhY2VtZW50LCAuLi5mYWxsYmFja1BsYWNlbWVudHNdO1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IG92ZXJmbG93cyA9IFtdO1xuICAgICAgbGV0IG92ZXJmbG93c0RhdGEgPSAoKF9taWRkbGV3YXJlRGF0YSRmbGlwID0gbWlkZGxld2FyZURhdGEuZmxpcCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRmbGlwLm92ZXJmbG93cykgfHwgW107XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBvdmVyZmxvd3MucHVzaChvdmVyZmxvd1tzaWRlXSk7XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgY29uc3Qgc2lkZXMgPSBnZXRBbGlnbm1lbnRTaWRlcyhwbGFjZW1lbnQsIHJlY3RzLCBydGwpO1xuICAgICAgICBvdmVyZmxvd3MucHVzaChvdmVyZmxvd1tzaWRlc1swXV0sIG92ZXJmbG93W3NpZGVzWzFdXSk7XG4gICAgICB9XG4gICAgICBvdmVyZmxvd3NEYXRhID0gWy4uLm92ZXJmbG93c0RhdGEsIHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBvdmVyZmxvd3NcbiAgICAgIH1dO1xuXG4gICAgICAvLyBPbmUgb3IgbW9yZSBzaWRlcyBpcyBvdmVyZmxvd2luZy5cbiAgICAgIGlmICghb3ZlcmZsb3dzLmV2ZXJ5KHNpZGUgPT4gc2lkZSA8PSAwKSkge1xuICAgICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJGZsaXAyLCBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXI7XG4gICAgICAgIGNvbnN0IG5leHRJbmRleCA9ICgoKF9taWRkbGV3YXJlRGF0YSRmbGlwMiA9IG1pZGRsZXdhcmVEYXRhLmZsaXApID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkZmxpcDIuaW5kZXgpIHx8IDApICsgMTtcbiAgICAgICAgY29uc3QgbmV4dFBsYWNlbWVudCA9IHBsYWNlbWVudHNbbmV4dEluZGV4XTtcbiAgICAgICAgaWYgKG5leHRQbGFjZW1lbnQpIHtcbiAgICAgICAgICAvLyBUcnkgbmV4dCBwbGFjZW1lbnQgYW5kIHJlLXJ1biB0aGUgbGlmZWN5Y2xlLlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGluZGV4OiBuZXh0SW5kZXgsXG4gICAgICAgICAgICAgIG92ZXJmbG93czogb3ZlcmZsb3dzRGF0YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaXJzdCwgZmluZCB0aGUgY2FuZGlkYXRlcyB0aGF0IGZpdCBvbiB0aGUgbWFpbkF4aXMgc2lkZSBvZiBvdmVyZmxvdyxcbiAgICAgICAgLy8gdGhlbiBmaW5kIHRoZSBwbGFjZW1lbnQgdGhhdCBmaXRzIHRoZSBiZXN0IG9uIHRoZSBtYWluIGNyb3NzQXhpcyBzaWRlLlxuICAgICAgICBsZXQgcmVzZXRQbGFjZW1lbnQgPSAoX292ZXJmbG93c0RhdGEkZmlsdGVyID0gb3ZlcmZsb3dzRGF0YS5maWx0ZXIoZCA9PiBkLm92ZXJmbG93c1swXSA8PSAwKS5zb3J0KChhLCBiKSA9PiBhLm92ZXJmbG93c1sxXSAtIGIub3ZlcmZsb3dzWzFdKVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9vdmVyZmxvd3NEYXRhJGZpbHRlci5wbGFjZW1lbnQ7XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGZhbGxiYWNrLlxuICAgICAgICBpZiAoIXJlc2V0UGxhY2VtZW50KSB7XG4gICAgICAgICAgc3dpdGNoIChmYWxsYmFja1N0cmF0ZWd5KSB7XG4gICAgICAgICAgICBjYXNlICdiZXN0Rml0JzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIyO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlbWVudCA9IChfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIyID0gb3ZlcmZsb3dzRGF0YS5maWx0ZXIoZCA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhkLnBsYWNlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50U2lkZUF4aXMgPT09IGluaXRpYWxTaWRlQXhpcyB8fFxuICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBiaWFzIHRvIHRoZSBgeWAgc2lkZSBheGlzIGR1ZSB0byBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlYWRpbmcgZGlyZWN0aW9ucyBmYXZvcmluZyBncmVhdGVyIHdpZHRoLlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2lkZUF4aXMgPT09ICd5JztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0pLm1hcChkID0+IFtkLnBsYWNlbWVudCwgZC5vdmVyZmxvd3MuZmlsdGVyKG92ZXJmbG93ID0+IG92ZXJmbG93ID4gMCkucmVkdWNlKChhY2MsIG92ZXJmbG93KSA9PiBhY2MgKyBvdmVyZmxvdywgMCldKS5zb3J0KChhLCBiKSA9PiBhWzFdIC0gYlsxXSlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIyWzBdO1xuICAgICAgICAgICAgICAgIGlmIChwbGFjZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgIHJlc2V0UGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnaW5pdGlhbFBsYWNlbWVudCc6XG4gICAgICAgICAgICAgIHJlc2V0UGxhY2VtZW50ID0gaW5pdGlhbFBsYWNlbWVudDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwbGFjZW1lbnQgIT09IHJlc2V0UGxhY2VtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICAgIHBsYWNlbWVudDogcmVzZXRQbGFjZW1lbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3QpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IG92ZXJmbG93LnRvcCAtIHJlY3QuaGVpZ2h0LFxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGgsXG4gICAgYm90dG9tOiBvdmVyZmxvdy5ib3R0b20gLSByZWN0LmhlaWdodCxcbiAgICBsZWZ0OiBvdmVyZmxvdy5sZWZ0IC0gcmVjdC53aWR0aFxuICB9O1xufVxuZnVuY3Rpb24gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG92ZXJmbG93KSB7XG4gIHJldHVybiBzaWRlcy5zb21lKHNpZGUgPT4gb3ZlcmZsb3dbc2lkZV0gPj0gMCk7XG59XG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gaGlkZSB0aGUgZmxvYXRpbmcgZWxlbWVudCBpbiBhcHBsaWNhYmxlIHNpdHVhdGlvbnMsIHN1Y2ggYXNcbiAqIHdoZW4gaXQgaXMgbm90IGluIHRoZSBzYW1lIGNsaXBwaW5nIGNvbnRleHQgYXMgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2hpZGVcbiAqL1xuY29uc3QgaGlkZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnaGlkZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICByZWN0c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBzdHJhdGVneSA9ICdyZWZlcmVuY2VIaWRkZW4nLFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBzd2l0Y2ggKHN0cmF0ZWd5KSB7XG4gICAgICAgIGNhc2UgJ3JlZmVyZW5jZUhpZGRlbic6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnMsXG4gICAgICAgICAgICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3RzLnJlZmVyZW5jZSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlSGlkZGVuT2Zmc2V0czogb2Zmc2V0cyxcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VIaWRkZW46IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvZmZzZXRzKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnZXNjYXBlZCc6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnMsXG4gICAgICAgICAgICAgIGFsdEJvdW5kYXJ5OiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdHMuZmxvYXRpbmcpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGVzY2FwZWRPZmZzZXRzOiBvZmZzZXRzLFxuICAgICAgICAgICAgICAgIGVzY2FwZWQ6IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvZmZzZXRzKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0cykge1xuICBjb25zdCBtaW5YID0gbWluKC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QubGVmdCkpO1xuICBjb25zdCBtaW5ZID0gbWluKC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QudG9wKSk7XG4gIGNvbnN0IG1heFggPSBtYXgoLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5yaWdodCkpO1xuICBjb25zdCBtYXhZID0gbWF4KC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QuYm90dG9tKSk7XG4gIHJldHVybiB7XG4gICAgeDogbWluWCxcbiAgICB5OiBtaW5ZLFxuICAgIHdpZHRoOiBtYXhYIC0gbWluWCxcbiAgICBoZWlnaHQ6IG1heFkgLSBtaW5ZXG4gIH07XG59XG5mdW5jdGlvbiBnZXRSZWN0c0J5TGluZShyZWN0cykge1xuICBjb25zdCBzb3J0ZWRSZWN0cyA9IHJlY3RzLnNsaWNlKCkuc29ydCgoYSwgYikgPT4gYS55IC0gYi55KTtcbiAgY29uc3QgZ3JvdXBzID0gW107XG4gIGxldCBwcmV2UmVjdCA9IG51bGw7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkUmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCByZWN0ID0gc29ydGVkUmVjdHNbaV07XG4gICAgaWYgKCFwcmV2UmVjdCB8fCByZWN0LnkgLSBwcmV2UmVjdC55ID4gcHJldlJlY3QuaGVpZ2h0IC8gMikge1xuICAgICAgZ3JvdXBzLnB1c2goW3JlY3RdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JvdXBzW2dyb3Vwcy5sZW5ndGggLSAxXS5wdXNoKHJlY3QpO1xuICAgIH1cbiAgICBwcmV2UmVjdCA9IHJlY3Q7XG4gIH1cbiAgcmV0dXJuIGdyb3Vwcy5tYXAocmVjdCA9PiByZWN0VG9DbGllbnRSZWN0KGdldEJvdW5kaW5nUmVjdChyZWN0KSkpO1xufVxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdpbmxpbmUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBzdHJhdGVneVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgLy8gQSBNb3VzZUV2ZW50J3MgY2xpZW50e1gsWX0gY29vcmRzIGNhbiBiZSB1cCB0byAyIHBpeGVscyBvZmYgYVxuICAgICAgLy8gQ2xpZW50UmVjdCdzIGJvdW5kcywgZGVzcGl0ZSB0aGUgZXZlbnQgbGlzdGVuZXIgYmVpbmcgdHJpZ2dlcmVkLiBBXG4gICAgICAvLyBwYWRkaW5nIG9mIDIgc2VlbXMgdG8gaGFuZGxlIHRoaXMgaXNzdWUuXG4gICAgICBjb25zdCB7XG4gICAgICAgIHBhZGRpbmcgPSAyLFxuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgbmF0aXZlQ2xpZW50UmVjdHMgPSBBcnJheS5mcm9tKChhd2FpdCAocGxhdGZvcm0uZ2V0Q2xpZW50UmVjdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldENsaWVudFJlY3RzKGVsZW1lbnRzLnJlZmVyZW5jZSkpKSB8fCBbXSk7XG4gICAgICBjb25zdCBjbGllbnRSZWN0cyA9IGdldFJlY3RzQnlMaW5lKG5hdGl2ZUNsaWVudFJlY3RzKTtcbiAgICAgIGNvbnN0IGZhbGxiYWNrID0gcmVjdFRvQ2xpZW50UmVjdChnZXRCb3VuZGluZ1JlY3QobmF0aXZlQ2xpZW50UmVjdHMpKTtcbiAgICAgIGNvbnN0IHBhZGRpbmdPYmplY3QgPSBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpO1xuICAgICAgZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkge1xuICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHJlY3RzIGFuZCB0aGV5IGFyZSBkaXNqb2luZWQuXG4gICAgICAgIGlmIChjbGllbnRSZWN0cy5sZW5ndGggPT09IDIgJiYgY2xpZW50UmVjdHNbMF0ubGVmdCA+IGNsaWVudFJlY3RzWzFdLnJpZ2h0ICYmIHggIT0gbnVsbCAmJiB5ICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBGaW5kIHRoZSBmaXJzdCByZWN0IGluIHdoaWNoIHRoZSBwb2ludCBpcyBmdWxseSBpbnNpZGUuXG4gICAgICAgICAgcmV0dXJuIGNsaWVudFJlY3RzLmZpbmQocmVjdCA9PiB4ID4gcmVjdC5sZWZ0IC0gcGFkZGluZ09iamVjdC5sZWZ0ICYmIHggPCByZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodCAmJiB5ID4gcmVjdC50b3AgLSBwYWRkaW5nT2JqZWN0LnRvcCAmJiB5IDwgcmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSkgfHwgZmFsbGJhY2s7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGVyZSBhcmUgMiBvciBtb3JlIGNvbm5lY3RlZCByZWN0cy5cbiAgICAgICAgaWYgKGNsaWVudFJlY3RzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgaWYgKGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5Jykge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RSZWN0ID0gY2xpZW50UmVjdHNbMF07XG4gICAgICAgICAgICBjb25zdCBsYXN0UmVjdCA9IGNsaWVudFJlY3RzW2NsaWVudFJlY3RzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgY29uc3QgaXNUb3AgPSBnZXRTaWRlKHBsYWNlbWVudCkgPT09ICd0b3AnO1xuICAgICAgICAgICAgY29uc3QgdG9wID0gZmlyc3RSZWN0LnRvcDtcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IGxhc3RSZWN0LmJvdHRvbTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBpc1RvcCA/IGZpcnN0UmVjdC5sZWZ0IDogbGFzdFJlY3QubGVmdDtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gaXNUb3AgPyBmaXJzdFJlY3QucmlnaHQgOiBsYXN0UmVjdC5yaWdodDtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgICBib3R0b20sXG4gICAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICAgIHJpZ2h0LFxuICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICB4OiBsZWZ0LFxuICAgICAgICAgICAgICB5OiB0b3BcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGlzTGVmdFNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCkgPT09ICdsZWZ0JztcbiAgICAgICAgICBjb25zdCBtYXhSaWdodCA9IG1heCguLi5jbGllbnRSZWN0cy5tYXAocmVjdCA9PiByZWN0LnJpZ2h0KSk7XG4gICAgICAgICAgY29uc3QgbWluTGVmdCA9IG1pbiguLi5jbGllbnRSZWN0cy5tYXAocmVjdCA9PiByZWN0LmxlZnQpKTtcbiAgICAgICAgICBjb25zdCBtZWFzdXJlUmVjdHMgPSBjbGllbnRSZWN0cy5maWx0ZXIocmVjdCA9PiBpc0xlZnRTaWRlID8gcmVjdC5sZWZ0ID09PSBtaW5MZWZ0IDogcmVjdC5yaWdodCA9PT0gbWF4UmlnaHQpO1xuICAgICAgICAgIGNvbnN0IHRvcCA9IG1lYXN1cmVSZWN0c1swXS50b3A7XG4gICAgICAgICAgY29uc3QgYm90dG9tID0gbWVhc3VyZVJlY3RzW21lYXN1cmVSZWN0cy5sZW5ndGggLSAxXS5ib3R0b207XG4gICAgICAgICAgY29uc3QgbGVmdCA9IG1pbkxlZnQ7XG4gICAgICAgICAgY29uc3QgcmlnaHQgPSBtYXhSaWdodDtcbiAgICAgICAgICBjb25zdCB3aWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgICAgICAgICBjb25zdCBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICByaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgeDogbGVmdCxcbiAgICAgICAgICAgIHk6IHRvcFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzZXRSZWN0cyA9IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgICAgIHJlZmVyZW5jZToge1xuICAgICAgICAgIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuICAgICAgICB9LFxuICAgICAgICBmbG9hdGluZzogZWxlbWVudHMuZmxvYXRpbmcsXG4gICAgICAgIHN0cmF0ZWd5XG4gICAgICB9KTtcbiAgICAgIGlmIChyZWN0cy5yZWZlcmVuY2UueCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UueCB8fCByZWN0cy5yZWZlcmVuY2UueSAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UueSB8fCByZWN0cy5yZWZlcmVuY2Uud2lkdGggIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLndpZHRoIHx8IHJlY3RzLnJlZmVyZW5jZS5oZWlnaHQgIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLmhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICByZWN0czogcmVzZXRSZWN0c1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG4vLyBGb3IgdHlwZSBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSwgdGhlIGBPZmZzZXRPcHRpb25zYCB0eXBlIHdhcyBhbHNvXG4vLyBEZXJpdmFibGUuXG5cbmFzeW5jIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZVRvQ29vcmRzKHN0YXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IHtcbiAgICBwbGFjZW1lbnQsXG4gICAgcGxhdGZvcm0sXG4gICAgZWxlbWVudHNcbiAgfSA9IHN0YXRlO1xuICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICBjb25zdCBpc1ZlcnRpY2FsID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knO1xuICBjb25zdCBtYWluQXhpc011bHRpID0gWydsZWZ0JywgJ3RvcCddLmluY2x1ZGVzKHNpZGUpID8gLTEgOiAxO1xuICBjb25zdCBjcm9zc0F4aXNNdWx0aSA9IHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxO1xuICBjb25zdCByYXdWYWx1ZSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gIGxldCB7XG4gICAgbWFpbkF4aXMsXG4gICAgY3Jvc3NBeGlzLFxuICAgIGFsaWdubWVudEF4aXNcbiAgfSA9IHR5cGVvZiByYXdWYWx1ZSA9PT0gJ251bWJlcicgPyB7XG4gICAgbWFpbkF4aXM6IHJhd1ZhbHVlLFxuICAgIGNyb3NzQXhpczogMCxcbiAgICBhbGlnbm1lbnRBeGlzOiBudWxsXG4gIH0gOiB7XG4gICAgbWFpbkF4aXM6IHJhd1ZhbHVlLm1haW5BeGlzIHx8IDAsXG4gICAgY3Jvc3NBeGlzOiByYXdWYWx1ZS5jcm9zc0F4aXMgfHwgMCxcbiAgICBhbGlnbm1lbnRBeGlzOiByYXdWYWx1ZS5hbGlnbm1lbnRBeGlzXG4gIH07XG4gIGlmIChhbGlnbm1lbnQgJiYgdHlwZW9mIGFsaWdubWVudEF4aXMgPT09ICdudW1iZXInKSB7XG4gICAgY3Jvc3NBeGlzID0gYWxpZ25tZW50ID09PSAnZW5kJyA/IGFsaWdubWVudEF4aXMgKiAtMSA6IGFsaWdubWVudEF4aXM7XG4gIH1cbiAgcmV0dXJuIGlzVmVydGljYWwgPyB7XG4gICAgeDogY3Jvc3NBeGlzICogY3Jvc3NBeGlzTXVsdGksXG4gICAgeTogbWFpbkF4aXMgKiBtYWluQXhpc011bHRpXG4gIH0gOiB7XG4gICAgeDogbWFpbkF4aXMgKiBtYWluQXhpc011bHRpLFxuICAgIHk6IGNyb3NzQXhpcyAqIGNyb3NzQXhpc011bHRpXG4gIH07XG59XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0gMDtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkb2Zmc2UsIF9taWRkbGV3YXJlRGF0YSRhcnJvdztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBtaWRkbGV3YXJlRGF0YVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3QgZGlmZkNvb3JkcyA9IGF3YWl0IGNvbnZlcnRWYWx1ZVRvQ29vcmRzKHN0YXRlLCBvcHRpb25zKTtcblxuICAgICAgLy8gSWYgdGhlIHBsYWNlbWVudCBpcyB0aGUgc2FtZSBhbmQgdGhlIGFycm93IGNhdXNlZCBhbiBhbGlnbm1lbnQgb2Zmc2V0XG4gICAgICAvLyB0aGVuIHdlIGRvbid0IG5lZWQgdG8gY2hhbmdlIHRoZSBwb3NpdGlvbmluZyBjb29yZGluYXRlcy5cbiAgICAgIGlmIChwbGFjZW1lbnQgPT09ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlLnBsYWNlbWVudCkgJiYgKF9taWRkbGV3YXJlRGF0YSRhcnJvdyA9IG1pZGRsZXdhcmVEYXRhLmFycm93KSAhPSBudWxsICYmIF9taWRkbGV3YXJlRGF0YSRhcnJvdy5hbGlnbm1lbnRPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogeCArIGRpZmZDb29yZHMueCxcbiAgICAgICAgeTogeSArIGRpZmZDb29yZHMueSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIC4uLmRpZmZDb29yZHMsXG4gICAgICAgICAgcGxhY2VtZW50XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzaGlmdCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnRcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxuICAgICAgICBjcm9zc0F4aXM6IGNoZWNrQ3Jvc3NBeGlzID0gZmFsc2UsXG4gICAgICAgIGxpbWl0ZXIgPSB7XG4gICAgICAgICAgZm46IF9yZWYgPT4ge1xuICAgICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgfSA9IF9yZWY7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICB5XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9O1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IGNyb3NzQXhpcyA9IGdldFNpZGVBeGlzKGdldFNpZGUocGxhY2VtZW50KSk7XG4gICAgICBjb25zdCBtYWluQXhpcyA9IGdldE9wcG9zaXRlQXhpcyhjcm9zc0F4aXMpO1xuICAgICAgbGV0IG1haW5BeGlzQ29vcmQgPSBjb29yZHNbbWFpbkF4aXNdO1xuICAgICAgbGV0IGNyb3NzQXhpc0Nvb3JkID0gY29vcmRzW2Nyb3NzQXhpc107XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBjb25zdCBtaW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgICAgICBjb25zdCBtYXhTaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICAgICAgY29uc3QgbWluID0gbWFpbkF4aXNDb29yZCArIG92ZXJmbG93W21pblNpZGVdO1xuICAgICAgICBjb25zdCBtYXggPSBtYWluQXhpc0Nvb3JkIC0gb3ZlcmZsb3dbbWF4U2lkZV07XG4gICAgICAgIG1haW5BeGlzQ29vcmQgPSBjbGFtcChtaW4sIG1haW5BeGlzQ29vcmQsIG1heCk7XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgY29uc3QgbWluU2lkZSA9IGNyb3NzQXhpcyA9PT0gJ3knID8gJ3RvcCcgOiAnbGVmdCc7XG4gICAgICAgIGNvbnN0IG1heFNpZGUgPSBjcm9zc0F4aXMgPT09ICd5JyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICAgICAgY29uc3QgbWluID0gY3Jvc3NBeGlzQ29vcmQgKyBvdmVyZmxvd1ttaW5TaWRlXTtcbiAgICAgICAgY29uc3QgbWF4ID0gY3Jvc3NBeGlzQ29vcmQgLSBvdmVyZmxvd1ttYXhTaWRlXTtcbiAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBjbGFtcChtaW4sIGNyb3NzQXhpc0Nvb3JkLCBtYXgpO1xuICAgICAgfVxuICAgICAgY29uc3QgbGltaXRlZENvb3JkcyA9IGxpbWl0ZXIuZm4oe1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgW21haW5BeGlzXTogbWFpbkF4aXNDb29yZCxcbiAgICAgICAgW2Nyb3NzQXhpc106IGNyb3NzQXhpc0Nvb3JkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmxpbWl0ZWRDb29yZHMsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB4OiBsaW1pdGVkQ29vcmRzLnggLSB4LFxuICAgICAgICAgIHk6IGxpbWl0ZWRDb29yZHMueSAtIHksXG4gICAgICAgICAgZW5hYmxlZDoge1xuICAgICAgICAgICAgW21haW5BeGlzXTogY2hlY2tNYWluQXhpcyxcbiAgICAgICAgICAgIFtjcm9zc0F4aXNdOiBjaGVja0Nyb3NzQXhpc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuLyoqXG4gKiBCdWlsdC1pbiBgbGltaXRlcmAgdGhhdCB3aWxsIHN0b3AgYHNoaWZ0KClgIGF0IGEgY2VydGFpbiBwb2ludC5cbiAqL1xuY29uc3QgbGltaXRTaGlmdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBvcHRpb25zLFxuICAgIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG9mZnNldCA9IDAsXG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWVcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH07XG4gICAgICBjb25zdCBjcm9zc0F4aXMgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgbWFpbkF4aXMgPSBnZXRPcHBvc2l0ZUF4aXMoY3Jvc3NBeGlzKTtcbiAgICAgIGxldCBtYWluQXhpc0Nvb3JkID0gY29vcmRzW21haW5BeGlzXTtcbiAgICAgIGxldCBjcm9zc0F4aXNDb29yZCA9IGNvb3Jkc1tjcm9zc0F4aXNdO1xuICAgICAgY29uc3QgcmF3T2Zmc2V0ID0gZXZhbHVhdGUob2Zmc2V0LCBzdGF0ZSk7XG4gICAgICBjb25zdCBjb21wdXRlZE9mZnNldCA9IHR5cGVvZiByYXdPZmZzZXQgPT09ICdudW1iZXInID8ge1xuICAgICAgICBtYWluQXhpczogcmF3T2Zmc2V0LFxuICAgICAgICBjcm9zc0F4aXM6IDBcbiAgICAgIH0gOiB7XG4gICAgICAgIG1haW5BeGlzOiAwLFxuICAgICAgICBjcm9zc0F4aXM6IDAsXG4gICAgICAgIC4uLnJhd09mZnNldFxuICAgICAgfTtcbiAgICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICAgIGNvbnN0IGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgICAgIGNvbnN0IGxpbWl0TWluID0gcmVjdHMucmVmZXJlbmNlW21haW5BeGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbl0gKyBjb21wdXRlZE9mZnNldC5tYWluQXhpcztcbiAgICAgICAgY29uc3QgbGltaXRNYXggPSByZWN0cy5yZWZlcmVuY2VbbWFpbkF4aXNdICsgcmVjdHMucmVmZXJlbmNlW2xlbl0gLSBjb21wdXRlZE9mZnNldC5tYWluQXhpcztcbiAgICAgICAgaWYgKG1haW5BeGlzQ29vcmQgPCBsaW1pdE1pbikge1xuICAgICAgICAgIG1haW5BeGlzQ29vcmQgPSBsaW1pdE1pbjtcbiAgICAgICAgfSBlbHNlIGlmIChtYWluQXhpc0Nvb3JkID4gbGltaXRNYXgpIHtcbiAgICAgICAgICBtYWluQXhpc0Nvb3JkID0gbGltaXRNYXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaGVja0Nyb3NzQXhpcykge1xuICAgICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJG9mZnNlLCBfbWlkZGxld2FyZURhdGEkb2Zmc2UyO1xuICAgICAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgICAgICBjb25zdCBpc09yaWdpblNpZGUgPSBbJ3RvcCcsICdsZWZ0J10uaW5jbHVkZXMoZ2V0U2lkZShwbGFjZW1lbnQpKTtcbiAgICAgICAgY29uc3QgbGltaXRNaW4gPSByZWN0cy5yZWZlcmVuY2VbY3Jvc3NBeGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbl0gKyAoaXNPcmlnaW5TaWRlID8gKChfbWlkZGxld2FyZURhdGEkb2Zmc2UgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2VbY3Jvc3NBeGlzXSkgfHwgMCA6IDApICsgKGlzT3JpZ2luU2lkZSA/IDAgOiBjb21wdXRlZE9mZnNldC5jcm9zc0F4aXMpO1xuICAgICAgICBjb25zdCBsaW1pdE1heCA9IHJlY3RzLnJlZmVyZW5jZVtjcm9zc0F4aXNdICsgcmVjdHMucmVmZXJlbmNlW2xlbl0gKyAoaXNPcmlnaW5TaWRlID8gMCA6ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlMiA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZTJbY3Jvc3NBeGlzXSkgfHwgMCkgLSAoaXNPcmlnaW5TaWRlID8gY29tcHV0ZWRPZmZzZXQuY3Jvc3NBeGlzIDogMCk7XG4gICAgICAgIGlmIChjcm9zc0F4aXNDb29yZCA8IGxpbWl0TWluKSB7XG4gICAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBsaW1pdE1pbjtcbiAgICAgICAgfSBlbHNlIGlmIChjcm9zc0F4aXNDb29yZCA+IGxpbWl0TWF4KSB7XG4gICAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBsaW1pdE1heDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW21haW5BeGlzXTogbWFpbkF4aXNDb29yZCxcbiAgICAgICAgW2Nyb3NzQXhpc106IGNyb3NzQXhpc0Nvb3JkXG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IFx1MjAxNFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc2l6ZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YSwgX3N0YXRlJG1pZGRsZXdhcmVEYXRhMjtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICByZWN0cyxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGFwcGx5ID0gKCkgPT4ge30sXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBpc1lBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knO1xuICAgICAgY29uc3Qge1xuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgICB9ID0gcmVjdHMuZmxvYXRpbmc7XG4gICAgICBsZXQgaGVpZ2h0U2lkZTtcbiAgICAgIGxldCB3aWR0aFNpZGU7XG4gICAgICBpZiAoc2lkZSA9PT0gJ3RvcCcgfHwgc2lkZSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgaGVpZ2h0U2lkZSA9IHNpZGU7XG4gICAgICAgIHdpZHRoU2lkZSA9IGFsaWdubWVudCA9PT0gKChhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSkpID8gJ3N0YXJ0JyA6ICdlbmQnKSA/ICdsZWZ0JyA6ICdyaWdodCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aWR0aFNpZGUgPSBzaWRlO1xuICAgICAgICBoZWlnaHRTaWRlID0gYWxpZ25tZW50ID09PSAnZW5kJyA/ICd0b3AnIDogJ2JvdHRvbSc7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQgPSBoZWlnaHQgLSBvdmVyZmxvdy50b3AgLSBvdmVyZmxvdy5ib3R0b207XG4gICAgICBjb25zdCBtYXhpbXVtQ2xpcHBpbmdXaWR0aCA9IHdpZHRoIC0gb3ZlcmZsb3cubGVmdCAtIG92ZXJmbG93LnJpZ2h0O1xuICAgICAgY29uc3Qgb3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQgPSBtaW4oaGVpZ2h0IC0gb3ZlcmZsb3dbaGVpZ2h0U2lkZV0sIG1heGltdW1DbGlwcGluZ0hlaWdodCk7XG4gICAgICBjb25zdCBvdmVyZmxvd0F2YWlsYWJsZVdpZHRoID0gbWluKHdpZHRoIC0gb3ZlcmZsb3dbd2lkdGhTaWRlXSwgbWF4aW11bUNsaXBwaW5nV2lkdGgpO1xuICAgICAgY29uc3Qgbm9TaGlmdCA9ICFzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdDtcbiAgICAgIGxldCBhdmFpbGFibGVIZWlnaHQgPSBvdmVyZmxvd0F2YWlsYWJsZUhlaWdodDtcbiAgICAgIGxldCBhdmFpbGFibGVXaWR0aCA9IG92ZXJmbG93QXZhaWxhYmxlV2lkdGg7XG4gICAgICBpZiAoKF9zdGF0ZSRtaWRkbGV3YXJlRGF0YSA9IHN0YXRlLm1pZGRsZXdhcmVEYXRhLnNoaWZ0KSAhPSBudWxsICYmIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YS5lbmFibGVkLngpIHtcbiAgICAgICAgYXZhaWxhYmxlV2lkdGggPSBtYXhpbXVtQ2xpcHBpbmdXaWR0aDtcbiAgICAgIH1cbiAgICAgIGlmICgoX3N0YXRlJG1pZGRsZXdhcmVEYXRhMiA9IHN0YXRlLm1pZGRsZXdhcmVEYXRhLnNoaWZ0KSAhPSBudWxsICYmIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTIuZW5hYmxlZC55KSB7XG4gICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IG1heGltdW1DbGlwcGluZ0hlaWdodDtcbiAgICAgIH1cbiAgICAgIGlmIChub1NoaWZ0ICYmICFhbGlnbm1lbnQpIHtcbiAgICAgICAgY29uc3QgeE1pbiA9IG1heChvdmVyZmxvdy5sZWZ0LCAwKTtcbiAgICAgICAgY29uc3QgeE1heCA9IG1heChvdmVyZmxvdy5yaWdodCwgMCk7XG4gICAgICAgIGNvbnN0IHlNaW4gPSBtYXgob3ZlcmZsb3cudG9wLCAwKTtcbiAgICAgICAgY29uc3QgeU1heCA9IG1heChvdmVyZmxvdy5ib3R0b20sIDApO1xuICAgICAgICBpZiAoaXNZQXhpcykge1xuICAgICAgICAgIGF2YWlsYWJsZVdpZHRoID0gd2lkdGggLSAyICogKHhNaW4gIT09IDAgfHwgeE1heCAhPT0gMCA/IHhNaW4gKyB4TWF4IDogbWF4KG92ZXJmbG93LmxlZnQsIG92ZXJmbG93LnJpZ2h0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXZhaWxhYmxlSGVpZ2h0ID0gaGVpZ2h0IC0gMiAqICh5TWluICE9PSAwIHx8IHlNYXggIT09IDAgPyB5TWluICsgeU1heCA6IG1heChvdmVyZmxvdy50b3AsIG92ZXJmbG93LmJvdHRvbSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCBhcHBseSh7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBhdmFpbGFibGVXaWR0aCxcbiAgICAgICAgYXZhaWxhYmxlSGVpZ2h0XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5leHREaW1lbnNpb25zID0gYXdhaXQgcGxhdGZvcm0uZ2V0RGltZW5zaW9ucyhlbGVtZW50cy5mbG9hdGluZyk7XG4gICAgICBpZiAod2lkdGggIT09IG5leHREaW1lbnNpb25zLndpZHRoIHx8IGhlaWdodCAhPT0gbmV4dERpbWVuc2lvbnMuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHJlY3RzOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgc2hpZnQsIHNpemUgfTtcbiIsICJmdW5jdGlvbiBoYXNXaW5kb3coKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbn1cbmZ1bmN0aW9uIGdldE5vZGVOYW1lKG5vZGUpIHtcbiAgaWYgKGlzTm9kZShub2RlKSkge1xuICAgIHJldHVybiAobm9kZS5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgfVxuICAvLyBNb2NrZWQgbm9kZXMgaW4gdGVzdGluZyBlbnZpcm9ubWVudHMgbWF5IG5vdCBiZSBpbnN0YW5jZXMgb2YgTm9kZS4gQnlcbiAgLy8gcmV0dXJuaW5nIGAjZG9jdW1lbnRgIGFuIGluZmluaXRlIGxvb3Agd29uJ3Qgb2NjdXIuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjMxN1xuICByZXR1cm4gJyNkb2N1bWVudCc7XG59XG5mdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICB2YXIgX25vZGUkb3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIChub2RlID09IG51bGwgfHwgKF9ub2RlJG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSB8fCB3aW5kb3c7XG59XG5mdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQobm9kZSkge1xuICB2YXIgX3JlZjtcbiAgcmV0dXJuIChfcmVmID0gKGlzTm9kZShub2RlKSA/IG5vZGUub3duZXJEb2N1bWVudCA6IG5vZGUuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9yZWYuZG9jdW1lbnRFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNOb2RlKHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgTm9kZSB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuTm9kZTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkhUTUxFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNTaGFkb3dSb290KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkgfHwgdHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLlNoYWRvd1Jvb3Q7XG59XG5mdW5jdGlvbiBpc092ZXJmbG93RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICBvdmVyZmxvdyxcbiAgICBvdmVyZmxvd1gsXG4gICAgb3ZlcmZsb3dZLFxuICAgIGRpc3BsYXlcbiAgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkgJiYgIVsnaW5saW5lJywgJ2NvbnRlbnRzJ10uaW5jbHVkZXMoZGlzcGxheSk7XG59XG5mdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBbJ3RhYmxlJywgJ3RkJywgJ3RoJ10uaW5jbHVkZXMoZ2V0Tm9kZU5hbWUoZWxlbWVudCkpO1xufVxuZnVuY3Rpb24gaXNUb3BMYXllcihlbGVtZW50KSB7XG4gIHJldHVybiBbJzpwb3BvdmVyLW9wZW4nLCAnOm1vZGFsJ10uc29tZShzZWxlY3RvciA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBlbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gaXNDb250YWluaW5nQmxvY2soZWxlbWVudE9yQ3NzKSB7XG4gIGNvbnN0IHdlYmtpdCA9IGlzV2ViS2l0KCk7XG4gIGNvbnN0IGNzcyA9IGlzRWxlbWVudChlbGVtZW50T3JDc3MpID8gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50T3JDc3MpIDogZWxlbWVudE9yQ3NzO1xuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gIHJldHVybiBjc3MudHJhbnNmb3JtICE9PSAnbm9uZScgfHwgY3NzLnBlcnNwZWN0aXZlICE9PSAnbm9uZScgfHwgKGNzcy5jb250YWluZXJUeXBlID8gY3NzLmNvbnRhaW5lclR5cGUgIT09ICdub3JtYWwnIDogZmFsc2UpIHx8ICF3ZWJraXQgJiYgKGNzcy5iYWNrZHJvcEZpbHRlciA/IGNzcy5iYWNrZHJvcEZpbHRlciAhPT0gJ25vbmUnIDogZmFsc2UpIHx8ICF3ZWJraXQgJiYgKGNzcy5maWx0ZXIgPyBjc3MuZmlsdGVyICE9PSAnbm9uZScgOiBmYWxzZSkgfHwgWyd0cmFuc2Zvcm0nLCAncGVyc3BlY3RpdmUnLCAnZmlsdGVyJ10uc29tZSh2YWx1ZSA9PiAoY3NzLndpbGxDaGFuZ2UgfHwgJycpLmluY2x1ZGVzKHZhbHVlKSkgfHwgWydwYWludCcsICdsYXlvdXQnLCAnc3RyaWN0JywgJ2NvbnRlbnQnXS5zb21lKHZhbHVlID0+IChjc3MuY29udGFpbiB8fCAnJykuaW5jbHVkZXModmFsdWUpKTtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKGN1cnJlbnROb2RlKSkge1xuICAgIGlmIChpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2UgaWYgKGlzVG9wTGF5ZXIoY3VycmVudE5vZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzV2ViS2l0KCkge1xuICBpZiAodHlwZW9mIENTUyA9PT0gJ3VuZGVmaW5lZCcgfHwgIUNTUy5zdXBwb3J0cykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gQ1NTLnN1cHBvcnRzKCctd2Via2l0LWJhY2tkcm9wLWZpbHRlcicsICdub25lJyk7XG59XG5mdW5jdGlvbiBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUobm9kZSkge1xuICByZXR1cm4gWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5jbHVkZXMoZ2V0Tm9kZU5hbWUobm9kZSkpO1xufVxuZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn1cbmZ1bmN0aW9uIGdldE5vZGVTY3JvbGwoZWxlbWVudCkge1xuICBpZiAoaXNFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxYLFxuICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxZXG4gIH07XG59XG5mdW5jdGlvbiBnZXRQYXJlbnROb2RlKG5vZGUpIHtcbiAgaWYgKGdldE5vZGVOYW1lKG5vZGUpID09PSAnaHRtbCcpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICBjb25zdCByZXN1bHQgPVxuICAvLyBTdGVwIGludG8gdGhlIHNoYWRvdyBET00gb2YgdGhlIHBhcmVudCBvZiBhIHNsb3R0ZWQgbm9kZS5cbiAgbm9kZS5hc3NpZ25lZFNsb3QgfHxcbiAgLy8gRE9NIEVsZW1lbnQgZGV0ZWN0ZWQuXG4gIG5vZGUucGFyZW50Tm9kZSB8fFxuICAvLyBTaGFkb3dSb290IGRldGVjdGVkLlxuICBpc1NoYWRvd1Jvb3Qobm9kZSkgJiYgbm9kZS5ob3N0IHx8XG4gIC8vIEZhbGxiYWNrLlxuICBnZXREb2N1bWVudEVsZW1lbnQobm9kZSk7XG4gIHJldHVybiBpc1NoYWRvd1Jvb3QocmVzdWx0KSA/IHJlc3VsdC5ob3N0IDogcmVzdWx0O1xufVxuZnVuY3Rpb24gZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3Iobm9kZSkge1xuICBjb25zdCBwYXJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShub2RlKTtcbiAgaWYgKGlzTGFzdFRyYXZlcnNhYmxlTm9kZShwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQgPyBub2RlLm93bmVyRG9jdW1lbnQuYm9keSA6IG5vZGUuYm9keTtcbiAgfVxuICBpZiAoaXNIVE1MRWxlbWVudChwYXJlbnROb2RlKSAmJiBpc092ZXJmbG93RWxlbWVudChwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBwYXJlbnROb2RlO1xuICB9XG4gIHJldHVybiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvcihwYXJlbnROb2RlKTtcbn1cbmZ1bmN0aW9uIGdldE92ZXJmbG93QW5jZXN0b3JzKG5vZGUsIGxpc3QsIHRyYXZlcnNlSWZyYW1lcykge1xuICB2YXIgX25vZGUkb3duZXJEb2N1bWVudDI7XG4gIGlmIChsaXN0ID09PSB2b2lkIDApIHtcbiAgICBsaXN0ID0gW107XG4gIH1cbiAgaWYgKHRyYXZlcnNlSWZyYW1lcyA9PT0gdm9pZCAwKSB7XG4gICAgdHJhdmVyc2VJZnJhbWVzID0gdHJ1ZTtcbiAgfVxuICBjb25zdCBzY3JvbGxhYmxlQW5jZXN0b3IgPSBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKTtcbiAgY29uc3QgaXNCb2R5ID0gc2Nyb2xsYWJsZUFuY2VzdG9yID09PSAoKF9ub2RlJG93bmVyRG9jdW1lbnQyID0gbm9kZS5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX25vZGUkb3duZXJEb2N1bWVudDIuYm9keSk7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhzY3JvbGxhYmxlQW5jZXN0b3IpO1xuICBpZiAoaXNCb2R5KSB7XG4gICAgY29uc3QgZnJhbWVFbGVtZW50ID0gZ2V0RnJhbWVFbGVtZW50KHdpbik7XG4gICAgcmV0dXJuIGxpc3QuY29uY2F0KHdpbiwgd2luLnZpc3VhbFZpZXdwb3J0IHx8IFtdLCBpc092ZXJmbG93RWxlbWVudChzY3JvbGxhYmxlQW5jZXN0b3IpID8gc2Nyb2xsYWJsZUFuY2VzdG9yIDogW10sIGZyYW1lRWxlbWVudCAmJiB0cmF2ZXJzZUlmcmFtZXMgPyBnZXRPdmVyZmxvd0FuY2VzdG9ycyhmcmFtZUVsZW1lbnQpIDogW10pO1xuICB9XG4gIHJldHVybiBsaXN0LmNvbmNhdChzY3JvbGxhYmxlQW5jZXN0b3IsIGdldE92ZXJmbG93QW5jZXN0b3JzKHNjcm9sbGFibGVBbmNlc3RvciwgW10sIHRyYXZlcnNlSWZyYW1lcykpO1xufVxuZnVuY3Rpb24gZ2V0RnJhbWVFbGVtZW50KHdpbikge1xuICByZXR1cm4gd2luLnBhcmVudCAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yod2luLnBhcmVudCkgPyB3aW4uZnJhbWVFbGVtZW50IDogbnVsbDtcbn1cblxuZXhwb3J0IHsgZ2V0Q29tcHV0ZWRTdHlsZSwgZ2V0Q29udGFpbmluZ0Jsb2NrLCBnZXREb2N1bWVudEVsZW1lbnQsIGdldEZyYW1lRWxlbWVudCwgZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3IsIGdldE5vZGVOYW1lLCBnZXROb2RlU2Nyb2xsLCBnZXRPdmVyZmxvd0FuY2VzdG9ycywgZ2V0UGFyZW50Tm9kZSwgZ2V0V2luZG93LCBpc0NvbnRhaW5pbmdCbG9jaywgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50LCBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUsIGlzTm9kZSwgaXNPdmVyZmxvd0VsZW1lbnQsIGlzU2hhZG93Um9vdCwgaXNUYWJsZUVsZW1lbnQsIGlzVG9wTGF5ZXIsIGlzV2ViS2l0IH07XG4iLCAiaW1wb3J0IHsgcmVjdFRvQ2xpZW50UmVjdCwgZGV0ZWN0T3ZlcmZsb3cgYXMgZGV0ZWN0T3ZlcmZsb3ckMSwgb2Zmc2V0IGFzIG9mZnNldCQxLCBhdXRvUGxhY2VtZW50IGFzIGF1dG9QbGFjZW1lbnQkMSwgc2hpZnQgYXMgc2hpZnQkMSwgZmxpcCBhcyBmbGlwJDEsIHNpemUgYXMgc2l6ZSQxLCBoaWRlIGFzIGhpZGUkMSwgYXJyb3cgYXMgYXJyb3ckMSwgaW5saW5lIGFzIGlubGluZSQxLCBsaW1pdFNoaWZ0IGFzIGxpbWl0U2hpZnQkMSwgY29tcHV0ZVBvc2l0aW9uIGFzIGNvbXB1dGVQb3NpdGlvbiQxIH0gZnJvbSAnQGZsb2F0aW5nLXVpL2NvcmUnO1xuaW1wb3J0IHsgcm91bmQsIGNyZWF0ZUNvb3JkcywgbWF4LCBtaW4sIGZsb29yIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcbmltcG9ydCB7IGdldENvbXB1dGVkU3R5bGUsIGlzSFRNTEVsZW1lbnQsIGlzRWxlbWVudCwgZ2V0V2luZG93LCBpc1dlYktpdCwgZ2V0RnJhbWVFbGVtZW50LCBnZXROb2RlU2Nyb2xsLCBnZXREb2N1bWVudEVsZW1lbnQsIGlzVG9wTGF5ZXIsIGdldE5vZGVOYW1lLCBpc092ZXJmbG93RWxlbWVudCwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMsIGdldFBhcmVudE5vZGUsIGlzTGFzdFRyYXZlcnNhYmxlTm9kZSwgaXNDb250YWluaW5nQmxvY2ssIGlzVGFibGVFbGVtZW50LCBnZXRDb250YWluaW5nQmxvY2sgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcbmV4cG9ydCB7IGdldE92ZXJmbG93QW5jZXN0b3JzIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzL2RvbSc7XG5cbmZ1bmN0aW9uIGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCkge1xuICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAvLyBJbiB0ZXN0aW5nIGVudmlyb25tZW50cywgdGhlIGB3aWR0aGAgYW5kIGBoZWlnaHRgIHByb3BlcnRpZXMgYXJlIGVtcHR5XG4gIC8vIHN0cmluZ3MgZm9yIFNWRyBlbGVtZW50cywgcmV0dXJuaW5nIE5hTi4gRmFsbGJhY2sgdG8gYDBgIGluIHRoaXMgY2FzZS5cbiAgbGV0IHdpZHRoID0gcGFyc2VGbG9hdChjc3Mud2lkdGgpIHx8IDA7XG4gIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGNzcy5oZWlnaHQpIHx8IDA7XG4gIGNvbnN0IGhhc09mZnNldCA9IGlzSFRNTEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IG9mZnNldFdpZHRoID0gaGFzT2Zmc2V0ID8gZWxlbWVudC5vZmZzZXRXaWR0aCA6IHdpZHRoO1xuICBjb25zdCBvZmZzZXRIZWlnaHQgPSBoYXNPZmZzZXQgPyBlbGVtZW50Lm9mZnNldEhlaWdodCA6IGhlaWdodDtcbiAgY29uc3Qgc2hvdWxkRmFsbGJhY2sgPSByb3VuZCh3aWR0aCkgIT09IG9mZnNldFdpZHRoIHx8IHJvdW5kKGhlaWdodCkgIT09IG9mZnNldEhlaWdodDtcbiAgaWYgKHNob3VsZEZhbGxiYWNrKSB7XG4gICAgd2lkdGggPSBvZmZzZXRXaWR0aDtcbiAgICBoZWlnaHQgPSBvZmZzZXRIZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgJDogc2hvdWxkRmFsbGJhY2tcbiAgfTtcbn1cblxuZnVuY3Rpb24gdW53cmFwRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiAhaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudC5jb250ZXh0RWxlbWVudCA6IGVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldFNjYWxlKGVsZW1lbnQpIHtcbiAgY29uc3QgZG9tRWxlbWVudCA9IHVud3JhcEVsZW1lbnQoZWxlbWVudCk7XG4gIGlmICghaXNIVE1MRWxlbWVudChkb21FbGVtZW50KSkge1xuICAgIHJldHVybiBjcmVhdGVDb29yZHMoMSk7XG4gIH1cbiAgY29uc3QgcmVjdCA9IGRvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgJFxuICB9ID0gZ2V0Q3NzRGltZW5zaW9ucyhkb21FbGVtZW50KTtcbiAgbGV0IHggPSAoJCA/IHJvdW5kKHJlY3Qud2lkdGgpIDogcmVjdC53aWR0aCkgLyB3aWR0aDtcbiAgbGV0IHkgPSAoJCA/IHJvdW5kKHJlY3QuaGVpZ2h0KSA6IHJlY3QuaGVpZ2h0KSAvIGhlaWdodDtcblxuICAvLyAwLCBOYU4sIG9yIEluZmluaXR5IHNob3VsZCBhbHdheXMgZmFsbGJhY2sgdG8gMS5cblxuICBpZiAoIXggfHwgIU51bWJlci5pc0Zpbml0ZSh4KSkge1xuICAgIHggPSAxO1xuICB9XG4gIGlmICgheSB8fCAhTnVtYmVyLmlzRmluaXRlKHkpKSB7XG4gICAgeSA9IDE7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuY29uc3Qgbm9PZmZzZXRzID0gLyojX19QVVJFX18qL2NyZWF0ZUNvb3JkcygwKTtcbmZ1bmN0aW9uIGdldFZpc3VhbE9mZnNldHMoZWxlbWVudCkge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGlmICghaXNXZWJLaXQoKSB8fCAhd2luLnZpc3VhbFZpZXdwb3J0KSB7XG4gICAgcmV0dXJuIG5vT2Zmc2V0cztcbiAgfVxuICByZXR1cm4ge1xuICAgIHg6IHdpbi52aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0LFxuICAgIHk6IHdpbi52aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3BcbiAgfTtcbn1cbmZ1bmN0aW9uIHNob3VsZEFkZFZpc3VhbE9mZnNldHMoZWxlbWVudCwgaXNGaXhlZCwgZmxvYXRpbmdPZmZzZXRQYXJlbnQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuICBpZiAoIWZsb2F0aW5nT2Zmc2V0UGFyZW50IHx8IGlzRml4ZWQgJiYgZmxvYXRpbmdPZmZzZXRQYXJlbnQgIT09IGdldFdpbmRvdyhlbGVtZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gaXNGaXhlZDtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGluY2x1ZGVTY2FsZSwgaXNGaXhlZFN0cmF0ZWd5LCBvZmZzZXRQYXJlbnQpIHtcbiAgaWYgKGluY2x1ZGVTY2FsZSA9PT0gdm9pZCAwKSB7XG4gICAgaW5jbHVkZVNjYWxlID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzRml4ZWRTdHJhdGVneSA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZFN0cmF0ZWd5ID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgY2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IGRvbUVsZW1lbnQgPSB1bndyYXBFbGVtZW50KGVsZW1lbnQpO1xuICBsZXQgc2NhbGUgPSBjcmVhdGVDb29yZHMoMSk7XG4gIGlmIChpbmNsdWRlU2NhbGUpIHtcbiAgICBpZiAob2Zmc2V0UGFyZW50KSB7XG4gICAgICBpZiAoaXNFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgICAgc2NhbGUgPSBnZXRTY2FsZShvZmZzZXRQYXJlbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzY2FsZSA9IGdldFNjYWxlKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuICBjb25zdCB2aXN1YWxPZmZzZXRzID0gc2hvdWxkQWRkVmlzdWFsT2Zmc2V0cyhkb21FbGVtZW50LCBpc0ZpeGVkU3RyYXRlZ3ksIG9mZnNldFBhcmVudCkgPyBnZXRWaXN1YWxPZmZzZXRzKGRvbUVsZW1lbnQpIDogY3JlYXRlQ29vcmRzKDApO1xuICBsZXQgeCA9IChjbGllbnRSZWN0LmxlZnQgKyB2aXN1YWxPZmZzZXRzLngpIC8gc2NhbGUueDtcbiAgbGV0IHkgPSAoY2xpZW50UmVjdC50b3AgKyB2aXN1YWxPZmZzZXRzLnkpIC8gc2NhbGUueTtcbiAgbGV0IHdpZHRoID0gY2xpZW50UmVjdC53aWR0aCAvIHNjYWxlLng7XG4gIGxldCBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodCAvIHNjYWxlLnk7XG4gIGlmIChkb21FbGVtZW50KSB7XG4gICAgY29uc3Qgd2luID0gZ2V0V2luZG93KGRvbUVsZW1lbnQpO1xuICAgIGNvbnN0IG9mZnNldFdpbiA9IG9mZnNldFBhcmVudCAmJiBpc0VsZW1lbnQob2Zmc2V0UGFyZW50KSA/IGdldFdpbmRvdyhvZmZzZXRQYXJlbnQpIDogb2Zmc2V0UGFyZW50O1xuICAgIGxldCBjdXJyZW50V2luID0gd2luO1xuICAgIGxldCBjdXJyZW50SUZyYW1lID0gZ2V0RnJhbWVFbGVtZW50KGN1cnJlbnRXaW4pO1xuICAgIHdoaWxlIChjdXJyZW50SUZyYW1lICYmIG9mZnNldFBhcmVudCAmJiBvZmZzZXRXaW4gIT09IGN1cnJlbnRXaW4pIHtcbiAgICAgIGNvbnN0IGlmcmFtZVNjYWxlID0gZ2V0U2NhbGUoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBpZnJhbWVSZWN0ID0gY3VycmVudElGcmFtZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBsZWZ0ID0gaWZyYW1lUmVjdC5sZWZ0ICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50TGVmdCArIHBhcnNlRmxvYXQoY3NzLnBhZGRpbmdMZWZ0KSkgKiBpZnJhbWVTY2FsZS54O1xuICAgICAgY29uc3QgdG9wID0gaWZyYW1lUmVjdC50b3AgKyAoY3VycmVudElGcmFtZS5jbGllbnRUb3AgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nVG9wKSkgKiBpZnJhbWVTY2FsZS55O1xuICAgICAgeCAqPSBpZnJhbWVTY2FsZS54O1xuICAgICAgeSAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgd2lkdGggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIGhlaWdodCAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgeCArPSBsZWZ0O1xuICAgICAgeSArPSB0b3A7XG4gICAgICBjdXJyZW50V2luID0gZ2V0V2luZG93KGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3Qoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfSk7XG59XG5cbi8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbi8vIGluY29ycmVjdCBmb3IgUlRMLlxuZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50LCByZWN0KSB7XG4gIGNvbnN0IGxlZnRTY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG4gIGlmICghcmVjdCkge1xuICAgIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgbGVmdFNjcm9sbDtcbiAgfVxuICByZXR1cm4gcmVjdC5sZWZ0ICsgbGVmdFNjcm9sbDtcbn1cblxuZnVuY3Rpb24gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCwgaWdub3JlU2Nyb2xsYmFyWCkge1xuICBpZiAoaWdub3JlU2Nyb2xsYmFyWCA9PT0gdm9pZCAwKSB7XG4gICAgaWdub3JlU2Nyb2xsYmFyWCA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGh0bWxSZWN0ID0gZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB4ID0gaHRtbFJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gKGlnbm9yZVNjcm9sbGJhclggPyAwIDpcbiAgLy8gUlRMIDxib2R5PiBzY3JvbGxiYXIuXG4gIGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50LCBodG1sUmVjdCkpO1xuICBjb25zdCB5ID0gaHRtbFJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcDtcbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QoX3JlZikge1xuICBsZXQge1xuICAgIGVsZW1lbnRzLFxuICAgIHJlY3QsXG4gICAgb2Zmc2V0UGFyZW50LFxuICAgIHN0cmF0ZWd5XG4gIH0gPSBfcmVmO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCB0b3BMYXllciA9IGVsZW1lbnRzID8gaXNUb3BMYXllcihlbGVtZW50cy5mbG9hdGluZykgOiBmYWxzZTtcbiAgaWYgKG9mZnNldFBhcmVudCA9PT0gZG9jdW1lbnRFbGVtZW50IHx8IHRvcExheWVyICYmIGlzRml4ZWQpIHtcbiAgICByZXR1cm4gcmVjdDtcbiAgfVxuICBsZXQgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIGxldCBzY2FsZSA9IGNyZWF0ZUNvb3JkcygxKTtcbiAgY29uc3Qgb2Zmc2V0cyA9IGNyZWF0ZUNvb3JkcygwKTtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgaWYgKGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgY29uc3Qgb2Zmc2V0UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQpO1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ID0gb2Zmc2V0UmVjdC54ICsgb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgPSBvZmZzZXRSZWN0LnkgKyBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH1cbiAgfVxuICBjb25zdCBodG1sT2Zmc2V0ID0gZG9jdW1lbnRFbGVtZW50ICYmICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCA/IGdldEhUTUxPZmZzZXQoZG9jdW1lbnRFbGVtZW50LCBzY3JvbGwsIHRydWUpIDogY3JlYXRlQ29vcmRzKDApO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiByZWN0LndpZHRoICogc2NhbGUueCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0ICogc2NhbGUueSxcbiAgICB4OiByZWN0LnggKiBzY2FsZS54IC0gc2Nyb2xsLnNjcm9sbExlZnQgKiBzY2FsZS54ICsgb2Zmc2V0cy54ICsgaHRtbE9mZnNldC54LFxuICAgIHk6IHJlY3QueSAqIHNjYWxlLnkgLSBzY3JvbGwuc2Nyb2xsVG9wICogc2NhbGUueSArIG9mZnNldHMueSArIGh0bWxPZmZzZXQueVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0cyhlbGVtZW50KSB7XG4gIHJldHVybiBBcnJheS5mcm9tKGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKSk7XG59XG5cbi8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGUuXG5mdW5jdGlvbiBnZXREb2N1bWVudFJlY3QoZWxlbWVudCkge1xuICBjb25zdCBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpO1xuICBjb25zdCBib2R5ID0gZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gIGNvbnN0IHdpZHRoID0gbWF4KGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGJvZHkuc2Nyb2xsV2lkdGgsIGJvZHkuY2xpZW50V2lkdGgpO1xuICBjb25zdCBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5LnNjcm9sbEhlaWdodCwgYm9keS5jbGllbnRIZWlnaHQpO1xuICBsZXQgeCA9IC1zY3JvbGwuc2Nyb2xsTGVmdCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCk7XG4gIGNvbnN0IHkgPSAtc2Nyb2xsLnNjcm9sbFRvcDtcbiAgaWYgKGdldENvbXB1dGVkU3R5bGUoYm9keSkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkuY2xpZW50V2lkdGgpIC0gd2lkdGg7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuICBsZXQgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICBsZXQgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIGxldCB4ID0gMDtcbiAgbGV0IHkgPSAwO1xuICBpZiAodmlzdWFsVmlld3BvcnQpIHtcbiAgICB3aWR0aCA9IHZpc3VhbFZpZXdwb3J0LndpZHRoO1xuICAgIGhlaWdodCA9IHZpc3VhbFZpZXdwb3J0LmhlaWdodDtcbiAgICBjb25zdCB2aXN1YWxWaWV3cG9ydEJhc2VkID0gaXNXZWJLaXQoKTtcbiAgICBpZiAoIXZpc3VhbFZpZXdwb3J0QmFzZWQgfHwgdmlzdWFsVmlld3BvcnRCYXNlZCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuLy8gUmV0dXJucyB0aGUgaW5uZXIgY2xpZW50IHJlY3QsIHN1YnRyYWN0aW5nIHNjcm9sbGJhcnMgaWYgcHJlc2VudC5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICBjb25zdCB0b3AgPSBjbGllbnRSZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICBjb25zdCBsZWZ0ID0gY2xpZW50UmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICBjb25zdCBzY2FsZSA9IGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRTY2FsZShlbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygxKTtcbiAgY29uc3Qgd2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoICogc2NhbGUueDtcbiAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQgKiBzY2FsZS55O1xuICBjb25zdCB4ID0gbGVmdCAqIHNjYWxlLng7XG4gIGNvbnN0IHkgPSB0b3AgKiBzY2FsZS55O1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkge1xuICBsZXQgcmVjdDtcbiAgaWYgKGNsaXBwaW5nQW5jZXN0b3IgPT09ICd2aWV3cG9ydCcpIHtcbiAgICByZWN0ID0gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KTtcbiAgfSBlbHNlIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAnZG9jdW1lbnQnKSB7XG4gICAgcmVjdCA9IGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpO1xuICB9IGVsc2UgaWYgKGlzRWxlbWVudChjbGlwcGluZ0FuY2VzdG9yKSkge1xuICAgIHJlY3QgPSBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IGdldFZpc3VhbE9mZnNldHMoZWxlbWVudCk7XG4gICAgcmVjdCA9IHtcbiAgICAgIHg6IGNsaXBwaW5nQW5jZXN0b3IueCAtIHZpc3VhbE9mZnNldHMueCxcbiAgICAgIHk6IGNsaXBwaW5nQW5jZXN0b3IueSAtIHZpc3VhbE9mZnNldHMueSxcbiAgICAgIHdpZHRoOiBjbGlwcGluZ0FuY2VzdG9yLndpZHRoLFxuICAgICAgaGVpZ2h0OiBjbGlwcGluZ0FuY2VzdG9yLmhlaWdodFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3QocmVjdCk7XG59XG5mdW5jdGlvbiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgc3RvcE5vZGUpIHtcbiAgY29uc3QgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIGlmIChwYXJlbnROb2RlID09PSBzdG9wTm9kZSB8fCAhaXNFbGVtZW50KHBhcmVudE5vZGUpIHx8IGlzTGFzdFRyYXZlcnNhYmxlTm9kZShwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnROb2RlKS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJyB8fCBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IocGFyZW50Tm9kZSwgc3RvcE5vZGUpO1xufVxuXG4vLyBBIFwiY2xpcHBpbmcgYW5jZXN0b3JcIiBpcyBhbiBgb3ZlcmZsb3dgIGVsZW1lbnQgd2l0aCB0aGUgY2hhcmFjdGVyaXN0aWMgb2Zcbi8vIGNsaXBwaW5nIChvciBoaWRpbmcpIGNoaWxkIGVsZW1lbnRzLiBUaGlzIHJldHVybnMgYWxsIGNsaXBwaW5nIGFuY2VzdG9yc1xuLy8gb2YgdGhlIGdpdmVuIGVsZW1lbnQgdXAgdGhlIHRyZWUuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMoZWxlbWVudCwgY2FjaGUpIHtcbiAgY29uc3QgY2FjaGVkUmVzdWx0ID0gY2FjaGUuZ2V0KGVsZW1lbnQpO1xuICBpZiAoY2FjaGVkUmVzdWx0KSB7XG4gICAgcmV0dXJuIGNhY2hlZFJlc3VsdDtcbiAgfVxuICBsZXQgcmVzdWx0ID0gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZWxlbWVudCwgW10sIGZhbHNlKS5maWx0ZXIoZWwgPT4gaXNFbGVtZW50KGVsKSAmJiBnZXROb2RlTmFtZShlbCkgIT09ICdib2R5Jyk7XG4gIGxldCBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IG51bGw7XG4gIGNvbnN0IGVsZW1lbnRJc0ZpeGVkID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJztcbiAgbGV0IGN1cnJlbnROb2RlID0gZWxlbWVudElzRml4ZWQgPyBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIDogZWxlbWVudDtcblxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuICB3aGlsZSAoaXNFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKGN1cnJlbnROb2RlKSkge1xuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnROb2RlKTtcbiAgICBjb25zdCBjdXJyZW50Tm9kZUlzQ29udGFpbmluZyA9IGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKTtcbiAgICBpZiAoIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc2hvdWxkRHJvcEN1cnJlbnROb2RlID0gZWxlbWVudElzRml4ZWQgPyAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlIDogIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdzdGF0aWMnICYmICEhY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgJiYgWydhYnNvbHV0ZScsICdmaXhlZCddLmluY2x1ZGVzKGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlLnBvc2l0aW9uKSB8fCBpc092ZXJmbG93RWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvcihlbGVtZW50LCBjdXJyZW50Tm9kZSk7XG4gICAgaWYgKHNob3VsZERyb3BDdXJyZW50Tm9kZSkge1xuICAgICAgLy8gRHJvcCBub24tY29udGFpbmluZyBibG9ja3MuXG4gICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKGFuY2VzdG9yID0+IGFuY2VzdG9yICE9PSBjdXJyZW50Tm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlY29yZCBsYXN0IGNvbnRhaW5pbmcgYmxvY2sgZm9yIG5leHQgaXRlcmF0aW9uLlxuICAgICAgY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgPSBjb21wdXRlZFN0eWxlO1xuICAgIH1cbiAgICBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpO1xuICB9XG4gIGNhY2hlLnNldChlbGVtZW50LCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBHZXRzIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIGR1ZSB0byBhbnkgbnVtYmVyIG9mXG4vLyBjbGlwcGluZyBhbmNlc3RvcnMuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ1JlY3QoX3JlZikge1xuICBsZXQge1xuICAgIGVsZW1lbnQsXG4gICAgYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5LFxuICAgIHN0cmF0ZWd5XG4gIH0gPSBfcmVmO1xuICBjb25zdCBlbGVtZW50Q2xpcHBpbmdBbmNlc3RvcnMgPSBib3VuZGFyeSA9PT0gJ2NsaXBwaW5nQW5jZXN0b3JzJyA/IGlzVG9wTGF5ZXIoZWxlbWVudCkgPyBbXSA6IGdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyhlbGVtZW50LCB0aGlzLl9jKSA6IFtdLmNvbmNhdChib3VuZGFyeSk7XG4gIGNvbnN0IGNsaXBwaW5nQW5jZXN0b3JzID0gWy4uLmVsZW1lbnRDbGlwcGluZ0FuY2VzdG9ycywgcm9vdEJvdW5kYXJ5XTtcbiAgY29uc3QgZmlyc3RDbGlwcGluZ0FuY2VzdG9yID0gY2xpcHBpbmdBbmNlc3RvcnNbMF07XG4gIGNvbnN0IGNsaXBwaW5nUmVjdCA9IGNsaXBwaW5nQW5jZXN0b3JzLnJlZHVjZSgoYWNjUmVjdCwgY2xpcHBpbmdBbmNlc3RvcikgPT4ge1xuICAgIGNvbnN0IHJlY3QgPSBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpO1xuICAgIGFjY1JlY3QudG9wID0gbWF4KHJlY3QudG9wLCBhY2NSZWN0LnRvcCk7XG4gICAgYWNjUmVjdC5yaWdodCA9IG1pbihyZWN0LnJpZ2h0LCBhY2NSZWN0LnJpZ2h0KTtcbiAgICBhY2NSZWN0LmJvdHRvbSA9IG1pbihyZWN0LmJvdHRvbSwgYWNjUmVjdC5ib3R0b20pO1xuICAgIGFjY1JlY3QubGVmdCA9IG1heChyZWN0LmxlZnQsIGFjY1JlY3QubGVmdCk7XG4gICAgcmV0dXJuIGFjY1JlY3Q7XG4gIH0sIGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBmaXJzdENsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KSk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IGNsaXBwaW5nUmVjdC5yaWdodCAtIGNsaXBwaW5nUmVjdC5sZWZ0LFxuICAgIGhlaWdodDogY2xpcHBpbmdSZWN0LmJvdHRvbSAtIGNsaXBwaW5nUmVjdC50b3AsXG4gICAgeDogY2xpcHBpbmdSZWN0LmxlZnQsXG4gICAgeTogY2xpcHBpbmdSZWN0LnRvcFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXREaW1lbnNpb25zKGVsZW1lbnQpIHtcbiAgY29uc3Qge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gZ2V0Q3NzRGltZW5zaW9ucyhlbGVtZW50KTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoZWxlbWVudCwgb2Zmc2V0UGFyZW50LCBzdHJhdGVneSkge1xuICBjb25zdCBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IGlzRml4ZWQgPSBzdHJhdGVneSA9PT0gJ2ZpeGVkJztcbiAgY29uc3QgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCB0cnVlLCBpc0ZpeGVkLCBvZmZzZXRQYXJlbnQpO1xuICBsZXQgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIGNvbnN0IG9mZnNldHMgPSBjcmVhdGVDb29yZHMoMCk7XG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50KSB7XG4gICAgICBjb25zdCBvZmZzZXRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgICAgIG9mZnNldHMueCA9IG9mZnNldFJlY3QueCArIG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ID0gb2Zmc2V0UmVjdC55ICsgb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgLy8gSWYgdGhlIDxib2R5PiBzY3JvbGxiYXIgYXBwZWFycyBvbiB0aGUgbGVmdCAoZS5nLiBSVEwgc3lzdGVtcykuIFVzZVxuICAgICAgLy8gRmlyZWZveCB3aXRoIGxheW91dC5zY3JvbGxiYXIuc2lkZSA9IDMgaW4gYWJvdXQ6Y29uZmlnIHRvIHRlc3QgdGhpcy5cbiAgICAgIG9mZnNldHMueCA9IGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgaHRtbE9mZnNldCA9IGRvY3VtZW50RWxlbWVudCAmJiAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQgPyBnZXRIVE1MT2Zmc2V0KGRvY3VtZW50RWxlbWVudCwgc2Nyb2xsKSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgY29uc3QgeCA9IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54IC0gaHRtbE9mZnNldC54O1xuICBjb25zdCB5ID0gcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55IC0gaHRtbE9mZnNldC55O1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGljUG9zaXRpb25lZChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJztcbn1cblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50LCBwb2x5ZmlsbCkge1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChwb2x5ZmlsbCkge1xuICAgIHJldHVybiBwb2x5ZmlsbChlbGVtZW50KTtcbiAgfVxuICBsZXQgcmF3T2Zmc2V0UGFyZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cbiAgLy8gRmlyZWZveCByZXR1cm5zIHRoZSA8aHRtbD4gZWxlbWVudCBhcyB0aGUgb2Zmc2V0UGFyZW50IGlmIGl0J3Mgbm9uLXN0YXRpYyxcbiAgLy8gd2hpbGUgQ2hyb21lIGFuZCBTYWZhcmkgcmV0dXJuIHRoZSA8Ym9keT4gZWxlbWVudC4gVGhlIDxib2R5PiBlbGVtZW50IG11c3RcbiAgLy8gYmUgdXNlZCB0byBwZXJmb3JtIHRoZSBjb3JyZWN0IGNhbGN1bGF0aW9ucyBldmVuIGlmIHRoZSA8aHRtbD4gZWxlbWVudCBpc1xuICAvLyBub24tc3RhdGljLlxuICBpZiAoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpID09PSByYXdPZmZzZXRQYXJlbnQpIHtcbiAgICByYXdPZmZzZXRQYXJlbnQgPSByYXdPZmZzZXRQYXJlbnQub3duZXJEb2N1bWVudC5ib2R5O1xuICB9XG4gIHJldHVybiByYXdPZmZzZXRQYXJlbnQ7XG59XG5cbi8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5mdW5jdGlvbiBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBpZiAoaXNUb3BMYXllcihlbGVtZW50KSkge1xuICAgIHJldHVybiB3aW47XG4gIH1cbiAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgbGV0IHN2Z09mZnNldFBhcmVudCA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gICAgd2hpbGUgKHN2Z09mZnNldFBhcmVudCAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKHN2Z09mZnNldFBhcmVudCkpIHtcbiAgICAgIGlmIChpc0VsZW1lbnQoc3ZnT2Zmc2V0UGFyZW50KSAmJiAhaXNTdGF0aWNQb3NpdGlvbmVkKHN2Z09mZnNldFBhcmVudCkpIHtcbiAgICAgICAgcmV0dXJuIHN2Z09mZnNldFBhcmVudDtcbiAgICAgIH1cbiAgICAgIHN2Z09mZnNldFBhcmVudCA9IGdldFBhcmVudE5vZGUoc3ZnT2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHdpbjtcbiAgfVxuICBsZXQgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50LCBwb2x5ZmlsbCk7XG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBpc1N0YXRpY1Bvc2l0aW9uZWQob2Zmc2V0UGFyZW50KSkge1xuICAgIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQob2Zmc2V0UGFyZW50LCBwb2x5ZmlsbCk7XG4gIH1cbiAgaWYgKG9mZnNldFBhcmVudCAmJiBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUob2Zmc2V0UGFyZW50KSAmJiBpc1N0YXRpY1Bvc2l0aW9uZWQob2Zmc2V0UGFyZW50KSAmJiAhaXNDb250YWluaW5nQmxvY2sob2Zmc2V0UGFyZW50KSkge1xuICAgIHJldHVybiB3aW47XG4gIH1cbiAgcmV0dXJuIG9mZnNldFBhcmVudCB8fCBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkgfHwgd2luO1xufVxuXG5jb25zdCBnZXRFbGVtZW50UmVjdHMgPSBhc3luYyBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCBnZXRPZmZzZXRQYXJlbnRGbiA9IHRoaXMuZ2V0T2Zmc2V0UGFyZW50IHx8IGdldE9mZnNldFBhcmVudDtcbiAgY29uc3QgZ2V0RGltZW5zaW9uc0ZuID0gdGhpcy5nZXREaW1lbnNpb25zO1xuICBjb25zdCBmbG9hdGluZ0RpbWVuc2lvbnMgPSBhd2FpdCBnZXREaW1lbnNpb25zRm4oZGF0YS5mbG9hdGluZyk7XG4gIHJldHVybiB7XG4gICAgcmVmZXJlbmNlOiBnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudChkYXRhLnJlZmVyZW5jZSwgYXdhaXQgZ2V0T2Zmc2V0UGFyZW50Rm4oZGF0YS5mbG9hdGluZyksIGRhdGEuc3RyYXRlZ3kpLFxuICAgIGZsb2F0aW5nOiB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMCxcbiAgICAgIHdpZHRoOiBmbG9hdGluZ0RpbWVuc2lvbnMud2lkdGgsXG4gICAgICBoZWlnaHQ6IGZsb2F0aW5nRGltZW5zaW9ucy5oZWlnaHRcbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBpc1JUTChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmRpcmVjdGlvbiA9PT0gJ3J0bCc7XG59XG5cbmNvbnN0IHBsYXRmb3JtID0ge1xuICBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCxcbiAgZ2V0RG9jdW1lbnRFbGVtZW50LFxuICBnZXRDbGlwcGluZ1JlY3QsXG4gIGdldE9mZnNldFBhcmVudCxcbiAgZ2V0RWxlbWVudFJlY3RzLFxuICBnZXRDbGllbnRSZWN0cyxcbiAgZ2V0RGltZW5zaW9ucyxcbiAgZ2V0U2NhbGUsXG4gIGlzRWxlbWVudCxcbiAgaXNSVExcbn07XG5cbi8vIGh0dHBzOi8vc2FtdGhvci5hdS8yMDIxL29ic2VydmluZy1kb20vXG5mdW5jdGlvbiBvYnNlcnZlTW92ZShlbGVtZW50LCBvbk1vdmUpIHtcbiAgbGV0IGlvID0gbnVsbDtcbiAgbGV0IHRpbWVvdXRJZDtcbiAgY29uc3Qgcm9vdCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICB2YXIgX2lvO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgIChfaW8gPSBpbykgPT0gbnVsbCB8fCBfaW8uZGlzY29ubmVjdCgpO1xuICAgIGlvID0gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiByZWZyZXNoKHNraXAsIHRocmVzaG9sZCkge1xuICAgIGlmIChza2lwID09PSB2b2lkIDApIHtcbiAgICAgIHNraXAgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJlc2hvbGQgPSAxO1xuICAgIH1cbiAgICBjbGVhbnVwKCk7XG4gICAgY29uc3Qge1xuICAgICAgbGVmdCxcbiAgICAgIHRvcCxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0XG4gICAgfSA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKCFza2lwKSB7XG4gICAgICBvbk1vdmUoKTtcbiAgICB9XG4gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluc2V0VG9wID0gZmxvb3IodG9wKTtcbiAgICBjb25zdCBpbnNldFJpZ2h0ID0gZmxvb3Iocm9vdC5jbGllbnRXaWR0aCAtIChsZWZ0ICsgd2lkdGgpKTtcbiAgICBjb25zdCBpbnNldEJvdHRvbSA9IGZsb29yKHJvb3QuY2xpZW50SGVpZ2h0IC0gKHRvcCArIGhlaWdodCkpO1xuICAgIGNvbnN0IGluc2V0TGVmdCA9IGZsb29yKGxlZnQpO1xuICAgIGNvbnN0IHJvb3RNYXJnaW4gPSAtaW5zZXRUb3AgKyBcInB4IFwiICsgLWluc2V0UmlnaHQgKyBcInB4IFwiICsgLWluc2V0Qm90dG9tICsgXCJweCBcIiArIC1pbnNldExlZnQgKyBcInB4XCI7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3RNYXJnaW4sXG4gICAgICB0aHJlc2hvbGQ6IG1heCgwLCBtaW4oMSwgdGhyZXNob2xkKSkgfHwgMVxuICAgIH07XG4gICAgbGV0IGlzRmlyc3RVcGRhdGUgPSB0cnVlO1xuICAgIGZ1bmN0aW9uIGhhbmRsZU9ic2VydmUoZW50cmllcykge1xuICAgICAgY29uc3QgcmF0aW8gPSBlbnRyaWVzWzBdLmludGVyc2VjdGlvblJhdGlvO1xuICAgICAgaWYgKHJhdGlvICE9PSB0aHJlc2hvbGQpIHtcbiAgICAgICAgaWYgKCFpc0ZpcnN0VXBkYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJhdGlvKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHJlZmVyZW5jZSBpcyBjbGlwcGVkLCB0aGUgcmF0aW8gaXMgMC4gVGhyb3R0bGUgdGhlIHJlZnJlc2hcbiAgICAgICAgICAvLyB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3Agb2YgdXBkYXRlcy5cbiAgICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHJlZnJlc2goZmFsc2UsIDFlLTcpO1xuICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZnJlc2goZmFsc2UsIHJhdGlvKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaXNGaXJzdFVwZGF0ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIE9sZGVyIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgYSBgZG9jdW1lbnRgIGFzIHRoZSByb290IGFuZCB3aWxsIHRocm93IGFuXG4gICAgLy8gZXJyb3IuXG4gICAgdHJ5IHtcbiAgICAgIGlvID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGhhbmRsZU9ic2VydmUsIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgLy8gSGFuZGxlIDxpZnJhbWU+c1xuICAgICAgICByb290OiByb290Lm93bmVyRG9jdW1lbnRcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlvID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGhhbmRsZU9ic2VydmUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpby5vYnNlcnZlKGVsZW1lbnQpO1xuICB9XG4gIHJlZnJlc2godHJ1ZSk7XG4gIHJldHVybiBjbGVhbnVwO1xufVxuXG4vKipcbiAqIEF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgd2hlbiBuZWNlc3NhcnkuXG4gKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgZmxvYXRpbmcgZWxlbWVudCBpcyBtb3VudGVkIG9uIHRoZSBET00gb3JcbiAqIHZpc2libGUgb24gdGhlIHNjcmVlbi5cbiAqIEByZXR1cm5zIGNsZWFudXAgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgaW52b2tlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzXG4gKiByZW1vdmVkIGZyb20gdGhlIERPTSBvciBoaWRkZW4gZnJvbSB0aGUgc2NyZWVuLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9VcGRhdGVcbiAqL1xuZnVuY3Rpb24gYXV0b1VwZGF0ZShyZWZlcmVuY2UsIGZsb2F0aW5nLCB1cGRhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBjb25zdCB7XG4gICAgYW5jZXN0b3JTY3JvbGwgPSB0cnVlLFxuICAgIGFuY2VzdG9yUmVzaXplID0gdHJ1ZSxcbiAgICBlbGVtZW50UmVzaXplID0gdHlwZW9mIFJlc2l6ZU9ic2VydmVyID09PSAnZnVuY3Rpb24nLFxuICAgIGxheW91dFNoaWZ0ID0gdHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyID09PSAnZnVuY3Rpb24nLFxuICAgIGFuaW1hdGlvbkZyYW1lID0gZmFsc2VcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJlZmVyZW5jZUVsID0gdW53cmFwRWxlbWVudChyZWZlcmVuY2UpO1xuICBjb25zdCBhbmNlc3RvcnMgPSBhbmNlc3RvclNjcm9sbCB8fCBhbmNlc3RvclJlc2l6ZSA/IFsuLi4ocmVmZXJlbmNlRWwgPyBnZXRPdmVyZmxvd0FuY2VzdG9ycyhyZWZlcmVuY2VFbCkgOiBbXSksIC4uLmdldE92ZXJmbG93QW5jZXN0b3JzKGZsb2F0aW5nKV0gOiBbXTtcbiAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgIGFuY2VzdG9yU2Nyb2xsICYmIGFuY2VzdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZVxuICAgIH0pO1xuICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gIH0pO1xuICBjb25zdCBjbGVhbnVwSW8gPSByZWZlcmVuY2VFbCAmJiBsYXlvdXRTaGlmdCA/IG9ic2VydmVNb3ZlKHJlZmVyZW5jZUVsLCB1cGRhdGUpIDogbnVsbDtcbiAgbGV0IHJlb2JzZXJ2ZUZyYW1lID0gLTE7XG4gIGxldCByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gIGlmIChlbGVtZW50UmVzaXplKSB7XG4gICAgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoX3JlZiA9PiB7XG4gICAgICBsZXQgW2ZpcnN0RW50cnldID0gX3JlZjtcbiAgICAgIGlmIChmaXJzdEVudHJ5ICYmIGZpcnN0RW50cnkudGFyZ2V0ID09PSByZWZlcmVuY2VFbCAmJiByZXNpemVPYnNlcnZlcikge1xuICAgICAgICAvLyBQcmV2ZW50IHVwZGF0ZSBsb29wcyB3aGVuIHVzaW5nIHRoZSBgc2l6ZWAgbWlkZGxld2FyZS5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8xNzQwXG4gICAgICAgIHJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZShmbG9hdGluZyk7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJlb2JzZXJ2ZUZyYW1lKTtcbiAgICAgICAgcmVvYnNlcnZlRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIHZhciBfcmVzaXplT2JzZXJ2ZXI7XG4gICAgICAgICAgKF9yZXNpemVPYnNlcnZlciA9IHJlc2l6ZU9ic2VydmVyKSA9PSBudWxsIHx8IF9yZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB1cGRhdGUoKTtcbiAgICB9KTtcbiAgICBpZiAocmVmZXJlbmNlRWwgJiYgIWFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHJlZmVyZW5jZUVsKTtcbiAgICB9XG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShmbG9hdGluZyk7XG4gIH1cbiAgbGV0IGZyYW1lSWQ7XG4gIGxldCBwcmV2UmVmUmVjdCA9IGFuaW1hdGlvbkZyYW1lID8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHJlZmVyZW5jZSkgOiBudWxsO1xuICBpZiAoYW5pbWF0aW9uRnJhbWUpIHtcbiAgICBmcmFtZUxvb3AoKTtcbiAgfVxuICBmdW5jdGlvbiBmcmFtZUxvb3AoKSB7XG4gICAgY29uc3QgbmV4dFJlZlJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKTtcbiAgICBpZiAocHJldlJlZlJlY3QgJiYgKG5leHRSZWZSZWN0LnggIT09IHByZXZSZWZSZWN0LnggfHwgbmV4dFJlZlJlY3QueSAhPT0gcHJldlJlZlJlY3QueSB8fCBuZXh0UmVmUmVjdC53aWR0aCAhPT0gcHJldlJlZlJlY3Qud2lkdGggfHwgbmV4dFJlZlJlY3QuaGVpZ2h0ICE9PSBwcmV2UmVmUmVjdC5oZWlnaHQpKSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gICAgcHJldlJlZlJlY3QgPSBuZXh0UmVmUmVjdDtcbiAgICBmcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lTG9vcCk7XG4gIH1cbiAgdXBkYXRlKCk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgdmFyIF9yZXNpemVPYnNlcnZlcjI7XG4gICAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlKTtcbiAgICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gICAgfSk7XG4gICAgY2xlYW51cElvID09IG51bGwgfHwgY2xlYW51cElvKCk7XG4gICAgKF9yZXNpemVPYnNlcnZlcjIgPSByZXNpemVPYnNlcnZlcikgPT0gbnVsbCB8fCBfcmVzaXplT2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTtcbiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgaWYgKGFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZUlkKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgb2Ygb3ZlcmZsb3cgc2lkZSBvZmZzZXRzIHRoYXQgZGV0ZXJtaW5lIGhvdyBtdWNoIHRoZVxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cbiAqIC0gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgYm91bmRhcnkgYnkgdGhhdCBudW1iZXIgb2YgcGl4ZWxzXG4gKiAtIG5lZ2F0aXZlID0gaG93IG1hbnkgcGl4ZWxzIGxlZnQgYmVmb3JlIGl0IHdpbGwgb3ZlcmZsb3dcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9kZXRlY3RPdmVyZmxvd1xuICovXG5jb25zdCBkZXRlY3RPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93JDE7XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IG9mZnNldCQxO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGF1dG9QbGFjZW1lbnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gc2hpZnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmbGlwJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IFx1MjAxNFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IHNpemUkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBoaWRlJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gYXJyb3ckMTtcblxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gaW5saW5lJDE7XG5cbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBsaW1pdFNoaWZ0JDE7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSAocmVmZXJlbmNlLCBmbG9hdGluZywgb3B0aW9ucykgPT4ge1xuICAvLyBUaGlzIGNhY2hlcyB0aGUgZXhwZW5zaXZlIGBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnNgIGZ1bmN0aW9uIHNvIHRoYXRcbiAgLy8gbXVsdGlwbGUgbGlmZWN5Y2xlIHJlc2V0cyByZS11c2UgdGhlIHNhbWUgcmVzdWx0LiBJdCBvbmx5IGxpdmVzIGZvciBhXG4gIC8vIHNpbmdsZSBjYWxsLiBJZiBvdGhlciBmdW5jdGlvbnMgYmVjb21lIGV4cGVuc2l2ZSwgd2UgY2FuIGFkZCB0aGVtIGFzIHdlbGwuXG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcCgpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0ge1xuICAgIHBsYXRmb3JtLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgY29uc3QgcGxhdGZvcm1XaXRoQ2FjaGUgPSB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucy5wbGF0Zm9ybSxcbiAgICBfYzogY2FjaGVcbiAgfTtcbiAgcmV0dXJuIGNvbXB1dGVQb3NpdGlvbiQxKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHtcbiAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgIHBsYXRmb3JtOiBwbGF0Zm9ybVdpdGhDYWNoZVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgcGxhdGZvcm0sIHNoaWZ0LCBzaXplIH07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0YXJyb3csXG5cdGF1dG9QbGFjZW1lbnQsXG5cdGF1dG9VcGRhdGUsXG5cdGRldGVjdE92ZXJmbG93LFxuXHRjb21wdXRlUG9zaXRpb24sXG5cdG9mZnNldCxcblx0ZmxpcCxcblx0c2l6ZSxcblx0c2hpZnQsXG59IGZyb20gXCJAZmxvYXRpbmctdWkvZG9tXCI7XG5pbXBvcnQgeyBQcm9jZXNzaW5nIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvcHJvY2Vzc2luZy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcsIGlzQXJyYXksIGlzT2JqZWN0LCBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuXG5leHBvcnQgeyBwb3NpdGlvblBvcHBlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gY29udHJvbEVsZW1lbnRcbiAqIEBwYXJhbSBwb3BwZXJFbGVtZW50XG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybiB7UHJvbWlzZXwqfVxuICovXG5mdW5jdGlvbiBwb3NpdGlvblBvcHBlcihjb250cm9sRWxlbWVudCwgcG9wcGVyRWxlbWVudCwgb3B0aW9ucykge1xuXHRjb25zdCBib2R5ID0gZ2V0RG9jdW1lbnQoKS5ib2R5O1xuXG5cdHJldHVybiBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0Y29uc3QgYXJyb3dFbGVtZW50ID0gY29udHJvbEVsZW1lbnQucXVlcnlTZWxlY3Rvcihcblx0XHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWFycm93XVwiLFxuXHRcdCk7XG5cblx0XHRjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHR7XG5cdFx0XHRcdHBsYWNlbWVudDogXCJ0b3BcIixcblx0XHRcdH0sXG5cdFx0XHRvcHRpb25zLFxuXHRcdCk7XG5cblx0XHRjb25zdCBtaWRkbGV3YXJlID0gY29uZmlnPy5bXCJtaWRkbGV3YXJlXCJdO1xuXHRcdGlmICghaXNBcnJheShtaWRkbGV3YXJlKSkge1xuXHRcdFx0aWYgKGlzU3RyaW5nKG1pZGRsZXdhcmUpKSB7XG5cdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl0gPSBtaWRkbGV3YXJlLnNwbGl0KFwiLFwiKS5maWx0ZXIoKGxpbmUpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gbGluZS50cmltKCkubGVuZ3RoID4gMDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25maWdbXCJtaWRkbGV3YXJlXCJdID0gW107XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gbWlkZGxld2FyZSkge1xuXHRcdFx0Y29uc3QgbGluZSA9IG1pZGRsZXdhcmVba2V5XTtcblx0XHRcdGlmIChpc0Z1bmN0aW9uKGxpbmUpKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPYmplY3QobGluZSkpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghaXNTdHJpbmcobGluZSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdGBNaWRkbGV3YXJlIG11c3QgYmUgYSBzdHJpbmcsIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0LiBHb3QgJHt0eXBlb2YgbGluZX1gLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBrdiA9IGxpbmUuc3BsaXQoXCI6XCIpO1xuXHRcdFx0Y29uc3QgZm4gPSBrdi5zaGlmdCgpO1xuXG5cdFx0XHRzd2l0Y2ggKGZuKSB7XG5cdFx0XHRcdGNhc2UgXCJmbGlwXCI6XG5cdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gZmxpcCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwic2hpZnRcIjpcblx0XHRcdFx0XHRjb25maWdbXCJtaWRkbGV3YXJlXCJdW2tleV0gPSBzaGlmdCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiYXV0b1BsYWNlbWVudFwiOlxuXHRcdFx0XHRcdGxldCBkZWZhdWx0QWxsb3dlZFBsYWNlbWVudHMgPSBbXCJ0b3BcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCIsIFwicmlnaHRcIl07XG5cblx0XHRcdFx0XHRjb25zdCBkZWZQbGFjZW1lbnQgPSBrdj8uc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAoaXNTdHJpbmcoZGVmUGxhY2VtZW50KSAmJiBkZWZQbGFjZW1lbnQudHJpbSgpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGRlZmF1bHRBbGxvd2VkUGxhY2VtZW50cyA9IGRlZlBsYWNlbWVudFxuXHRcdFx0XHRcdFx0XHQuc3BsaXQoXCIsXCIpXG5cdFx0XHRcdFx0XHRcdC5maWx0ZXIoKGxpbmUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbGluZS50cmltKCkubGVuZ3RoID4gMDtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGRlZmF1bHRBbGxvd2VkUGxhY2VtZW50cy5pbmNsdWRlcyhjb25maWcucGxhY2VtZW50KSkge1xuXHRcdFx0XHRcdFx0ZGVmYXVsdEFsbG93ZWRQbGFjZW1lbnRzLnNwbGljZShcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdEFsbG93ZWRQbGFjZW1lbnRzLmluZGV4T2YoY29uZmlnLnBsYWNlbWVudCksXG5cdFx0XHRcdFx0XHRcdDEsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkZWZhdWx0QWxsb3dlZFBsYWNlbWVudHMudW5zaGlmdChjb25maWcucGxhY2VtZW50KTtcblxuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IGF1dG9QbGFjZW1lbnQoe1xuXHRcdFx0XHRcdFx0Y3Jvc3NBeGlzOiB0cnVlLFxuXHRcdFx0XHRcdFx0YXV0b0FsaWdubWVudDogdHJ1ZSxcblx0XHRcdFx0XHRcdGFsbG93ZWRQbGFjZW1lbnRzOiBkZWZhdWx0QWxsb3dlZFBsYWNlbWVudHMsXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImRldGVjdE92ZXJmbG93XCI6XG5cdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gZGV0ZWN0T3ZlcmZsb3coKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImFycm93XCI6XG5cdFx0XHRcdFx0aWYgKGFycm93RWxlbWVudCkge1xuXHRcdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gYXJyb3coeyBlbGVtZW50OiBhcnJvd0VsZW1lbnQgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwic2l6ZVwiOlxuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IHNpemUoe1xuXHRcdFx0XHRcdFx0YXBwbHkoeyBhdmFpbGFibGVXaWR0aCwgYXZhaWxhYmxlSGVpZ2h0LCBlbGVtZW50cyB9KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG1heFdpZHRoID0gYm9keS5jbGllbnRXaWR0aDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWF4SGVpZ2h0ID0gYm9keS5jbGllbnRIZWlnaHQ7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGF2YWlsYWJsZVdpZHRoIDwgMCkge1xuXHRcdFx0XHRcdFx0XHRcdGF2YWlsYWJsZVdpZHRoID0gMDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChhdmFpbGFibGVIZWlnaHQgPCAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXZhaWxhYmxlSGVpZ2h0ID0gMDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChhdmFpbGFibGVXaWR0aCA+IG1heFdpZHRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXZhaWxhYmxlV2lkdGggPSBtYXhXaWR0aDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChhdmFpbGFibGVIZWlnaHQgPiBtYXhIZWlnaHQpIHtcblx0XHRcdFx0XHRcdFx0XHRhdmFpbGFibGVIZWlnaHQgPSBtYXhIZWlnaHQ7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRPYmplY3QuYXNzaWduKGVsZW1lbnRzLmZsb2F0aW5nLnN0eWxlLCB7XG5cdFx0XHRcdFx0XHRcdFx0Ym94U2l6aW5nOiBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0XHRcdFx0XHRtYXhXaWR0aDogYCR7YXZhaWxhYmxlV2lkdGh9cHhgLFxuXHRcdFx0XHRcdFx0XHRcdG1heEhlaWdodDogYCR7YXZhaWxhYmxlSGVpZ2h0fXB4YCxcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwib2Zmc2V0XCI6XG5cdFx0XHRcdFx0Y29uc3QgbyA9IGt2Py5zaGlmdCgpO1xuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IG9mZnNldChwYXJzZUludChvKSB8fCAxMCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJoaWRlXCI6XG5cdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gaGlkZSgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgVW5rbm93biBmdW5jdGlvbjogJHtmbn1gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRwb3BwZXJFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KFwidmlzaWJpbGl0eVwiKTtcblx0XHRwb3BwZXJFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cblx0XHRhdXRvVXBkYXRlKGNvbnRyb2xFbGVtZW50LCBwb3BwZXJFbGVtZW50LCAoKSA9PiB7XG5cdFx0XHRjb21wdXRlUG9zaXRpb24oY29udHJvbEVsZW1lbnQsIHBvcHBlckVsZW1lbnQsIGNvbmZpZykudGhlbihcblx0XHRcdFx0KHsgeCwgeSwgcGxhY2VtZW50LCBtaWRkbGV3YXJlRGF0YSB9KSA9PiB7XG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihwb3BwZXJFbGVtZW50LnN0eWxlLCB7XG5cdFx0XHRcdFx0XHR0b3A6IFwiMFwiLFxuXHRcdFx0XHRcdFx0bGVmdDogXCIwXCIsXG5cdFx0XHRcdFx0XHR0cmFuc2Zvcm06IGB0cmFuc2xhdGUoJHtyb3VuZEJ5RFBSKHgpfXB4LCR7cm91bmRCeURQUih5KX1weClgLFxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKG1pZGRsZXdhcmVEYXRhLmFycm93KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzaWRlID0gcGxhY2VtZW50LnNwbGl0KFwiLVwiKVswXTtcblxuXHRcdFx0XHRcdFx0Y29uc3Qgc3RhdGljU2lkZSA9IHtcblx0XHRcdFx0XHRcdFx0dG9wOiBcImJvdHRvbVwiLFxuXHRcdFx0XHRcdFx0XHRyaWdodDogXCJsZWZ0XCIsXG5cdFx0XHRcdFx0XHRcdGJvdHRvbTogXCJ0b3BcIixcblx0XHRcdFx0XHRcdFx0bGVmdDogXCJyaWdodFwiLFxuXHRcdFx0XHRcdFx0fVtzaWRlXTtcblxuXHRcdFx0XHRcdFx0Ly8gbW9uc3Rlci1ib3JkZXItd2lkdGggPSArIDQgKDIqMikgKHNob3VsZCBjb21lIGZyb20gY3NzKVxuXHRcdFx0XHRcdFx0Y29uc3QgYXJyb3dMZW4gPSBhcnJvd0VsZW1lbnQub2Zmc2V0V2lkdGggKyA0O1xuXG5cdFx0XHRcdFx0XHRjb25zdCBib3JkZXJTdHlsZSA9IHtcblx0XHRcdFx0XHRcdFx0Ym9yZGVyTGVmdDogXCJ0cmFuc3BhcmVudFwiLFxuXHRcdFx0XHRcdFx0XHRib3JkZXJSaWdodDogXCJ0cmFuc3BhcmVudFwiLFxuXHRcdFx0XHRcdFx0XHRib3JkZXJCb3R0b206IFwidHJhbnNwYXJlbnRcIixcblx0XHRcdFx0XHRcdFx0Ym9yZGVyVG9wOiBcInRyYW5zcGFyZW50XCIsXG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRjb25zdCBkZWZhdWx0Qm9yZGVyID1cblx0XHRcdFx0XHRcdFx0XCJ2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KVwiO1xuXG5cdFx0XHRcdFx0XHRzd2l0Y2ggKHNpZGUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcInRvcFwiOlxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlclJpZ2h0ID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJCb3R0b20gPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJib3R0b21cIjpcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJUb3AgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlckxlZnQgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJsZWZ0XCI6XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyUmlnaHQgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlclRvcCA9IGRlZmF1bHRCb3JkZXI7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0Y2FzZSBcInJpZ2h0XCI6XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyQm90dG9tID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJMZWZ0ID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgeyB4LCB5IH0gPSBtaWRkbGV3YXJlRGF0YS5hcnJvdztcblxuXHRcdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihcblx0XHRcdFx0XHRcdFx0YXJyb3dFbGVtZW50LnN0eWxlLFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bGVmdDogeCAhPSBudWxsID8gYCR7eH1weGAgOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdHRvcDogeSAhPSBudWxsID8gYCR7eX1weGAgOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdC8vIEVuc3VyZSB0aGUgc3RhdGljIHNpZGUgZ2V0cyB1bnNldCB3aGVuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gZmxpcHBpbmcgdG8gb3RoZXIgcGxhY2VtZW50cycgYXhlcy5cblx0XHRcdFx0XHRcdFx0XHRyaWdodDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRib3R0b206IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0W3N0YXRpY1NpZGVdOiBgJHstYXJyb3dMZW4gLyAyfXB4YCxcblx0XHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm06IFwicm90YXRlKDQ1ZGVnKVwiLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZSxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHR9KTtcblx0fSkucnVuKCk7XG59XG5cbmZ1bmN0aW9uIHJvdW5kQnlEUFIodmFsdWUpIHtcblx0Y29uc3QgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcblx0cmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBkcHIpIC8gZHByO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFNlbGVjdFN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFNlbGVjdFN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRTZWxlY3RTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHNlbGVjdCB7IFxuLmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfS5tb25zdGVyLWJhZGdlLXByaW1hcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXByaW1hcnksLm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnksLm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnksLm1vbnN0ZXItYmFkZ2UtdGVydGlhcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZle3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZSwubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utc3VjY2Vzc3twYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utc3VjY2VzcywubW9uc3Rlci1iYWRnZS1zdWNjZXNzLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MtcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS13YXJuaW5ne3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS13YXJuaW5nLC5tb25zdGVyLWJhZGdlLXdhcm5pbmctcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utd2FybmluZy1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLWVycm9ye3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1lcnJvciwubW9uc3Rlci1iYWRnZS1lcnJvci1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLWVycm9yLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl17YWxpZ24tY29udGVudDpjZW50ZXI7YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpub25lO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2xlZnQ6MDtwYWRkaW5nOjEuMWVtO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnQ7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwpfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJdIGRpdltkYXRhLW1vbnN0ZXItcm9sZT1hcnJvd117YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7aGVpZ2h0OmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSAqIHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSAqIHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTt6LWluZGV4Oi0xfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250YWluZXJdey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtmbGV4OjQgMCA5MCU7bWluLWhlaWdodDoxLjRlbTtvdmVyZmxvdzphdXRvO3Njcm9sbGJhci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO3Njcm9sbGJhci13aWR0aDp0aGluO3dpZHRoOjEwMCV9LmQtbm9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fWRpdltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl0ub3Blbnstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNNy42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBsNiA2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA1LjcwN2wtNS42NDYgNS42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDh6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J003LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMGw2IDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDUuNzA3bC01LjY0NiA1LjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOHonLyUzRSUzQy9zdmclM0VcXFwiKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udGFpbmVyXS5jbGVhcixbZGF0YS1tb25zdGVyLXJvbGU9Y29udGFpbmVyXS5vcGVue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXIgY2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyIGNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6LjhlbTttYXNrLXNpemU6LjhlbX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udGFpbmVyXS5jbGVhcnstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXthY2NlbnQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpOy1vLWJvcmRlci1pbWFnZTppbml0aWFsO2JvcmRlci1pbWFnZTppbml0aWFsO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aCk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6MTAwJTttYXJnaW46MDtvdXRsaW5lOm5vbmU7cGFkZGluZzouNHJlbSAuNnJlbTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOmZpbGwtYXZhaWxhYmxlfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpe1tkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF06Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpO291dGxpbmUtb2Zmc2V0OjJweH19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXNlbGVjdGlvbl17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOndyYXA7Z2FwOjVweDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDttYXJnaW46NXB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb24tY29udHJvbF17bWFyZ2luLXJpZ2h0OjhweH1bZGF0YS1tb25zdGVyLXJvbGU9YmFkZ2Vde2Rpc3BsYXk6aW5saW5lLWZsZXh9W2RhdGEtbW9uc3Rlci1yb2xlPWJhZGdlLWxhYmVsXXthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztnYXA6N3B4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufVtkYXRhLW1vbnN0ZXItcm9sZT1maWx0ZXJdLFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItZmlsdGVyXXtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjIwMDtvcmRlcjo5OTk5OTk5OTt2aXNpYmlsaXR5OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9ZmlsdGVyXS5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Ym9yZGVyOjA7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO21pbi13aWR0aDo0MCU7b3V0bGluZTpub25lO3Zpc2liaWxpdHk6dmlzaWJsZX0uYWN0aXZlW2RhdGEtbW9uc3Rlci1yb2xlPWZpbHRlcl1bbmFtZT1wb3BwZXItZmlsdGVyXXtoZWlnaHQ6MS41ZW07bWFyZ2luOjIuNWVtO3BhZGRpbmc6MnB4O3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSoyKX0ub3B0aW9uLWZpbHRlci1jb250cm9se2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtkaXNwbGF5OmZsZXg7aGVpZ2h0OjIuNWVtO21hcmdpbjotMS4xZW0gLTEuMWVtIC4zZW19W2RhdGEtbW9uc3Rlci1yb2xlPXJlbW92ZS1iYWRnZV17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7aGVpZ2h0OjE2cHg7bWFyZ2luLWxlZnQ6NXB4Oy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7b3JkZXI6Mn1bZGF0YS1tb25zdGVyLXJvbGU9cmVtb3ZlLWJhZGdlXSxbZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNdey13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXIgY2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyIGNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6LjhlbTttYXNrLXNpemU6LjhlbTttaW4taGVpZ2h0OjE2cHg7d2lkdGg6MTZweH1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNdey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNMS42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCAxMC4yOTNsNS42NDYtNS42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOGwtNiA2YS41LjUgMCAwIDEtLjcwOCAwbC02LTZhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTEuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggMTAuMjkzbDUuNjQ2LTUuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhsLTYgNmEuNS41IDAgMCAxLS43MDggMGwtNi02YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9Lm9wZW5bZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J003LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMGw2IDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDUuNzA3bC01LjY0NiA1LjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTcuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwbDYgNmEuNS41IDAgMCAxLS43MDguNzA4TDggNS43MDdsLTUuNjQ2IDUuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4eicvJTNFJTNDL3N2ZyUzRVxcXCIpfS5lbXB0eVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc117YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS1kYXNoLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWRhc2gtY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000IDhhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgMCAxaC03QS41LjUgMCAwIDEgNCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9LmNsZWFyW2RhdGEtbW9uc3Rlci1yb2xlPXN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfS5lcnJvcltkYXRhLW1vbnN0ZXItcm9sZT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc117YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J003LjAwMiAxMWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBNNy4xIDQuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwbC0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDB6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J003LjAwMiAxMWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBNNy4xIDQuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwbC0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDB6Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9LmxvYWRpbmdbZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNde2FuaW1hdGlvbi1kdXJhdGlvbjoxczthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlO2FuaW1hdGlvbi1uYW1lOmFjdGl2aXR5O2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsMCwuMiwxKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2FjdGl2aXR5JyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDY2lyY2xlIGN4PSc4JyBjeT0nOCcgcj0nOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2FjdGl2aXR5JyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDY2lyY2xlIGN4PSc4JyBjeT0nOCcgcj0nOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfUBrZXlmcmFtZXMgYWN0aXZpdHl7MCV7dHJhbnNmb3JtOnNjYWxlKDEpfTUwJXt0cmFuc2Zvcm06c2NhbGUoLjEpfXRve3RyYW5zZm9ybTpzY2FsZSgxKX19W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbnNde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxO3Njcm9sbGJhci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO3Njcm9sbGJhci13aWR0aDp0aGlufVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25de2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O3BhZGRpbmc6NnB4IDVweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXSBsYWJlbHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dIGxhYmVsPmRpdnthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9bm8tb3B0aW9uc117YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Ym9yZGVyLXJhZGl1czouMmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KTttYXJnaW46MS4xZW0gMS4xZW0gMDtwYWRkaW5nOi4zZW0gLjhlbX0uc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1maWx0ZXJlZD10cnVlXSxbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eT1oaWRkZW5de2Rpc3BsYXk6bm9uZX1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItZm9jdXNlZD10cnVlXXtvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMik7b3V0bGluZS1vZmZzZXQ6LTJweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXT5pbnB1dDpmb2N1cyxbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXT5sYWJlbDpmb2N1c3tvdXRsaW5lOm5vbmV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGJ1aWxkTWFwIH0gZnJvbSBcIi4uLy4uL2RhdGEvYnVpbGRtYXAubWpzXCI7XG5pbXBvcnQgeyBEZWFkTWFuc1N3aXRjaCB9IGZyb20gXCIuLi8uLi91dGlsL2RlYWRtYW5zc3dpdGNoLm1qc1wiO1xuaW1wb3J0IHsgcG9zaXRpb25Qb3BwZXIgfSBmcm9tIFwiLi91dGlsL2Zsb2F0aW5nLXVpLm1qc1wiO1xuaW1wb3J0IHtcblx0YWRkQXR0cmlidXRlVG9rZW4sXG5cdGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUsXG5cdHJlbW92ZUF0dHJpYnV0ZVRva2VuLFxufSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUFJFRklYLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBDdXN0b21Db250cm9sIH0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21jb250cm9sLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdGdldFNsb3R0ZWRFbGVtZW50cyxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQge1xuXHRmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCxcblx0ZmlyZUN1c3RvbUV2ZW50LFxuXHRmaXJlRXZlbnQsXG59IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQsIGdldFdpbmRvdyB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IEZvcm1hdHRlciB9IGZyb20gXCIuLi8uLi90ZXh0L2Zvcm1hdHRlci5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gXCIuLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuLi8uLi90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7XG5cdGlzQXJyYXksXG5cdGlzRnVuY3Rpb24sXG5cdGlzSW50ZWdlcixcblx0aXNJdGVyYWJsZSxcblx0aXNPYmplY3QsXG5cdGlzUHJpbWl0aXZlLFxuXHRpc1N0cmluZyxcbn0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUFycmF5LCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IFByb2Nlc3NpbmcgfSBmcm9tIFwiLi4vLi4vdXRpbC9wcm9jZXNzaW5nLm1qc1wiO1xuaW1wb3J0IHsgU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgU2VsZWN0U3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc2VsZWN0Lm1qc1wiO1xuaW1wb3J0IHtcblx0Z2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMsXG5cdFRyYW5zbGF0aW9ucyxcbn0gZnJvbSBcIi4uLy4uL2kxOG4vdHJhbnNsYXRpb25zLm1qc1wiO1xuXG5leHBvcnQge1xuXHRTZWxlY3QsXG5cdHBvcHBlckVsZW1lbnRTeW1ib2wsXG5cdGdldFN1bW1hcnlUZW1wbGF0ZSxcblx0Z2V0U2VsZWN0aW9uVGVtcGxhdGUsXG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBub09wdGlvbnNBdmFpbGFibGVNZXNzYWdlID0gXCJObyBvcHRpb25zIGF2YWlsYWJsZS5cIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgY2xpY2tUb0xvYWRPcHRpb25zTWVzc2FnZSA9IFwiQ2xpY2sgdG8gbG9hZCBvcHRpb25zLlwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCB0aW1lckNhbGxiYWNrU3ltYm9sID0gU3ltYm9sKFwidGltZXJDYWxsYmFja1wiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3Qga2V5RmlsdGVyRXZlbnRTeW1ib2wgPSBTeW1ib2woXCJrZXlGaWx0ZXJFdmVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgbGF6eUxvYWREb25lU3ltYm9sID0gU3ltYm9sKFwibGF6eUxvYWREb25lXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBpc0xvYWRpbmdTeW1ib2wgPSBTeW1ib2woXCJpc0xvYWRpbmdcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgY2xvc2VFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjbG9zZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBjbGVhck9wdGlvbkV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNsZWFyT3B0aW9uRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IHJlc2l6ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFwicmVzaXplT2JzZXJ2ZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3Qga2V5RXZlbnRIYW5kbGVyID0gU3ltYm9sKFwia2V5RXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGxhc3RGZXRjaGVkRGF0YVN5bWJvbCA9IFN5bWJvbChcImxhc3RGZXRjaGVkRGF0YVwiKTtcbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgaW5wdXRFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJpbnB1dEV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBjaGFuZ2VFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjaGFuZ2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBzZWxlY3Rpb25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic2VsZWN0aW9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBjb250YWluZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udGFpbmVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiaW5saW5lRmlsdGVyRWxlbWVudFwiKTtcbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInBvcHBlckZpbHRlckVsZW1lbnRcIik7XG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXG5cdFwicG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFwiLFxuKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBvcHRpb25zRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm9wdGlvbnNFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IG5vT3B0aW9uc0F2YWlsYWJsZUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJub09wdGlvbnNBdmFpbGFibGVFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IHN0YXR1c09yUmVtb3ZlQmFkZ2VzRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInN0YXR1c09yUmVtb3ZlQmFkZ2VzRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRTeW1ib2wgPSBTeW1ib2woXCJAQGFyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkaXNhYmxlZFJlcXVlc3RNYXJrZXIgPSBTeW1ib2woXCJAQGRpc2FibGVkUmVxdWVzdE1hcmtlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgRk9DVVNfRElSRUNUSU9OX1VQID0gMTtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IEZPQ1VTX0RJUkVDVElPTl9ET1dOID0gMjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRklMVEVSX01PREVfUkVNT1RFID0gXCJyZW1vdGVcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRklMVEVSX01PREVfT1BUSU9OUyA9IFwib3B0aW9uc1wiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBGSUxURVJfTU9ERV9ESVNBQkxFRCA9IFwiZGlzYWJsZWRcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRklMVEVSX1BPU0lUSU9OX1BPUFBFUiA9IFwicG9wcGVyXCI7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBGSUxURVJfUE9TSVRJT05fSU5MSU5FID0gXCJpbmxpbmVcIjtcblxuLyoqXG4gKiBBIHNlbGVjdCBjb250cm9sIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IG9uZSBvciBtb3JlIG9wdGlvbnMgZnJvbSBhIGxpc3QuXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QvXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9zZWxlY3Qtd2l0aC1vcHRpb25zIFNlbGVjdCB3aXRoIG9wdGlvbnNcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vc2VsZWN0LXdpdGgtaHRtbC1vcHRpb25zIFNlbGVjdCB3aXRoIEhUTUwgb3B0aW9uc1xuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QtbXVsdGlwbGUgTXVsdGlwbGUgc2VsZWN0aW9uXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3NlbGVjdC1maWx0ZXIgRmlsdGVyXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3NlbGVjdC1mZXRjaCBGZXRjaCBvcHRpb25zXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3NlbGVjdC1sYXp5IExhenkgbG9hZFxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QtcmVtb3RlLWZpbHRlciBSZW1vdGUgZmlsdGVyXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIHNlbGVjdCBjb250cm9sIHRoYXQgY2FuIG1ha2UgeW91ciBsaWZlIGVhc2llciBhbmQgYWxzbyBsb29rcyBnb29kLlxuICogQGZpcmVzIG1vbnN0ZXItY2hhbmdlXG4gKiBAZmlyZXMgbW9uc3Rlci1jaGFuZ2VkXG4gKi9cbmNsYXNzIFNlbGVjdCBleHRlbmRzIEN1c3RvbUNvbnRyb2wge1xuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0aW5pdE9wdGlvbk9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge1N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3NlbGVjdEBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnQgc2VsZWN0aW9uIG9mIHRoZSBTZWxlY3Rcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXNlbGVjdCcpO1xuXHQgKiBjb25zb2xlLmxvZyhlLnZhbHVlKVxuXHQgKiAvLyBcdTIxQTYgMVxuXHQgKiAvLyBcdTIxQTYgWycxJywnMiddXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXQgdmFsdWUoKSB7XG5cdFx0cmV0dXJuIGNvbnZlcnRTZWxlY3Rpb25Ub1ZhbHVlLmNhbGwodGhpcywgdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIikpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9hdHRhY2hJbnRlcm5hbHN9XG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IGZvcm1Bc3NvY2lhdGVkKCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBzZWxlY3Rpb25cblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXNlbGVjdCcpO1xuXHQgKiBlLnZhbHVlPTFcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfGFycmF5fSB2YWx1ZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKiBAZmlyZXMgbW9uc3Rlci1zZWxlY3RlZCB0aGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBzZXRcblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRWYWx1ZVRvU2VsZWN0aW9uLmNhbGwodGhpcywgdmFsdWUpO1xuXHRcdHNldFNlbGVjdGlvblxuXHRcdFx0LmNhbGwodGhpcywgcmVzdWx0LnNlbGVjdGlvbilcblx0XHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0b2dnbGVFdmVudFR5cGU9Y2xpY2ssdG91Y2ggTGlzdCBvZiBldmVudCB0eXBlcyB0byBiZSBvYnNlcnZlZCBmb3Igb3BlbmluZyB0aGUgZHJvcGRvd25cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBkZWxlZ2F0ZXNGb2N1cz1mYWxzZSBsb3JlbSBbc2VlIG1vemlsbGEub3JnXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU2hhZG93Um9vdC9kZWxlZ2F0ZXNGb2N1cylcblx0ICogQHByb3BlcnR5IHtPYmplY3RbXX0gb3B0aW9ucyBTZWxlY3Rpb24gb2Yga2V5IGlkZW50aWZpZXIgcGFpcnMgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24gYW5kIGRpc3BsYXllZCBpbiB0aGUgZHJvcGRvd24uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBvcHRpb25zW10ubGFiZWxcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG9wdGlvbnNbXS52YWx1ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gb3B0aW9uc1tdLnZpc2liaWxpdHkgaGlkZGVuIG9yIHZpc2libGVcblx0ICogQHByb3BlcnR5IHtBcnJheX0gc2VsZWN0aW9uIFNlbGVjdGVkIG9wdGlvbnNcblx0ICogQHByb3BlcnR5IHtJbnRlZ2VyfSBzaG93TWF4T3B0aW9ucz0xMCBNYXhpbXVtIG51bWJlciBvZiB2aXNpYmxlIG9wdGlvbnMgYmVmb3JlIGEgc2Nyb2xsIGJhciBzaG91bGQgYmUgZGlzcGxheWVkLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZT1yYWRpbyBNdWx0aXBsZSAoY2hlY2tib3gpIG9yIHNpbmdsZSBzZWxlY3Rpb24gKHJhZGlvKVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZT0ocmFuZG9tIGlkKSBOYW1lIG9mIHRoZSBmb3JtIGZpZWxkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmwgTG9hZCBvcHRpb25zIGZyb20gc2VydmVyIHBlciB1cmxcblx0ICogQHByb3BlcnR5IHtvYmplY3R9IGxvb2t1cCBMb2FkIG9wdGlvbnMgZnJvbSBzZXJ2ZXIgcGVyIHVybFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbG9va3VwLnVybD1udWxsIExvYWQgb3B0aW9ucyBmcm9tIHNlcnZlciBwZXIgdXJsXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbG9va3VwLmdyb3VwaW5nPWZhbHNlIExvYWQgYWxsIHNlbGVjdGVkIG9wdGlvbnMgZnJvbSBzZXJ2ZXIgcGVyIHVybCBhdCBvbmNlICh0cnVlKSBvciBvbmUgYnkgb25lIChmYWxzZSlcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoIEZldGNoIFtzZWUgVXNpbmcgRmV0Y2ggbW96aWxsYS5vcmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEkvVXNpbmdfRmV0Y2gpXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWRpcmVjdD1lcnJvclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubWV0aG9kPUdFVFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubW9kZT1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2guY3JlZGVudGlhbHM9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoLmhlYWRlcnM9e1wiYWNjZXB0XCI6XCJhcHBsaWNhdGlvbi9qc29uXCJ9fVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbGFiZWxzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuY2Fubm90LWJlLWxvYWRlZCBjYW5ub3QgYmUgbG9hZGVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMubm8tb3B0aW9ucy1hdmFpbGFibGUgbm8gb3B0aW9ucyBhdmFpbGFibGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5zZWxlY3QtYW4tb3B0aW9uIHNlbGVjdCBhbiBvcHRpb25cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5uby1vcHRpb24gbm8gb3B0aW9uIGluIHRoZSBsaXN0LCBtYXliZSB5b3UgaGF2ZSB0byBjaGFuZ2UgdGhlIGZpbHRlclxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmVhdHVyZXMgTGlzdCB3aXRoIGZlYXR1cmVzXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmVhdHVyZXMuY2xlYXJBbGw9dHJ1ZSBEaXNwbGF5IG9mIGEgZGVsZXRlIGJ1dHRvbiB0byBkZWxldGUgdGhlIGVudGlyZSBzZWxlY3Rpb25cblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy5jbGVhcj10cnVlIERpc3BsYXkgb2YgYSBkZWxldGUga2V5IGZvciBkZWxldGluZyB0aGUgc3BlY2lmaWMgc2VsZWN0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmVhdHVyZXMubGF6eUxvYWQ9ZmFsc2UgTG9hZCBvcHRpb25zIHdoZW4gZmlyc3Qgb3BlbmluZyB0aGUgZHJvcGRvd24uIChIaW50OyBsYXp5bExvYWQgaXMgbm90IHN1cHBvcnRlZCB3aXRoIHJlbW90ZSBmaWx0ZXIpXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmVhdHVyZXMuY2xvc2VPblNlbGVjdD1mYWxzZSBDbG9zZSB0aGUgZHJvcGRvd24gd2hlbiBhbiBvcHRpb24gaXMgc2VsZWN0ZWQgKHNpbmNlIDMuNTQuMClcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy5lbXB0eVZhbHVlSWZOb09wdGlvbnM9ZmFsc2UgSWYgbm8gb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCB0aGUgc2VsZWN0aW9uIGlzIHNldCB0byBhbiBlbXB0eSBhcnJheVxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGZlYXR1cmVzLnN0b3JlRmV0Y2hlZERhdGE9ZmFsc2UgU3RvcmUgZmV0Y2hlZCBkYXRhIGluIHRoZSBvYmplY3Rcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy51c2VTdHJpY3RWYWx1ZUNvbXBhcmlzb249dHJ1ZSBVc2Ugc3RyaWN0IHZhbHVlIGNvbXBhcmlzb24gZm9yIHRoZSBzZWxlY3Rpb25cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGZpbHRlci5kZWZhdWx0VmFsdWU9bnVsbCBEZWZhdWx0IGZpbHRlciB2YWx1ZSwgaWYgdGhlIGZpbHRlciBpcyBlbXB0eSwgaWYgdGhlIGRlZmF1bHQgdmFsdWUgaXMgbnVsbCwgdGhlbiBubyByZXF1ZXN0IGlzIG1hZGVcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmaWx0ZXIubW9kZT1vcHRpb25zIEZpbHRlciBtb2RlLCB2YWx1ZXM6IG9wdGlvbnMsIHJlbW90ZSwgZGlzYWJsZWQgKEhpbnQ7IGxhenlsTG9hZCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggcmVtb3RlIGZpbHRlciwgaWYgeW91IHVzZSByZW1vdGUgZmlsdGVyLCB0aGUgbGF6eUxvYWQgaXMgZGlzYWJsZWQpXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlTWFwcGluZyBNYXBwaW5nIG9mIHRoZSB0ZW1wbGF0ZSBwbGFjZWhvbGRlcnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlTWFwcGluZy5zZWxlY3RlZCBTZWxlY3RlZCBUZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcG9wcGVyIFtQb3BwZXJKUyBPcHRpb25zXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwb3BwZXIucGxhY2VtZW50PWJvdHRvbSBQb3BwZXJKUyBwbGFjZW1lbnRcblx0ICogQHByb3BlcnR5IHtPYmplY3RbXX0gbW9kaWZpZXJzPXtuYW1lOm9mZnNldH0gUG9wcGVySlMgcGxhY2VtZW50XG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBtYXBwaW5nXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXBwaW5nLnNlbGVjdG9yPSogUGF0aCB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcubGFiZWxUZW1wbGF0ZT1cIlwiIHRlbXBsYXRlIHdpdGggdGhlIGxhYmVsIHBsYWNlaG9sZGVycyBpbiB0aGUgZm9ybSAke25hbWV9LCB3aGVyZSBuYW1lIGlzIHRoZSBrZXkgKCoqKVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gbWFwcGluZy52YWx1ZVRlbXBsYXRlPVwiXCIgdGVtcGxhdGUgd2l0aCB0aGUgdmFsdWUgcGxhY2Vob2xkZXJzIGluIHRoZSBmb3JtICR7bmFtZX0sIHdoZXJlIG5hbWUgaXMgdGhlIGtleVxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVGaWx0ZXJDYWxsYmFja3x1bmRlZmluZWR9IG1hcHBpbmcuZmlsdGVyIEZpbHRlcmluZyBvZiB2YWx1ZXMgdmlhIGEgZnVuY3Rpb25cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZvcm1hdHRlclxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmZvcm1hdHRlclNlbGVjdGlvbkNhbGxiYWNrfHVuZGVmaW5lZH0gZm9ybWF0dGVyLnNlbGVjdGlvbiBmb3JtYXQgc2VsZWN0aW9uIGxhYmVsXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0e1xuXHRcdFx0XHR0b2dnbGVFdmVudFR5cGU6IFtcImNsaWNrXCIsIFwidG91Y2hcIl0sXG5cdFx0XHRcdGRlbGVnYXRlc0ZvY3VzOiBmYWxzZSxcblx0XHRcdFx0b3B0aW9uczogW10sXG5cdFx0XHRcdHNlbGVjdGlvbjogW10sXG5cdFx0XHRcdHNob3dNYXhPcHRpb25zOiAxMCxcblx0XHRcdFx0dHlwZTogXCJyYWRpb1wiLFxuXHRcdFx0XHRuYW1lOiBuZXcgSUQoXCJzXCIpLnRvU3RyaW5nKCksXG5cdFx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdFx0Y2xlYXJBbGw6IHRydWUsXG5cdFx0XHRcdFx0Y2xlYXI6IHRydWUsXG5cdFx0XHRcdFx0bGF6eUxvYWQ6IGZhbHNlLFxuXHRcdFx0XHRcdGNsb3NlT25TZWxlY3Q6IGZhbHNlLFxuXHRcdFx0XHRcdGVtcHR5VmFsdWVJZk5vT3B0aW9uczogZmFsc2UsXG5cdFx0XHRcdFx0c3RvcmVGZXRjaGVkRGF0YTogZmFsc2UsXG5cdFx0XHRcdFx0dXNlU3RyaWN0VmFsdWVDb21wYXJpc29uOiBmYWxzZSxcblx0XHRcdFx0fSxcblx0XHRcdFx0dXJsOiBudWxsLFxuXHRcdFx0XHRsb29rdXA6IHtcblx0XHRcdFx0XHR1cmw6IG51bGwsXG5cdFx0XHRcdFx0Z3JvdXBpbmc6IGZhbHNlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0XHRcImNhbm5vdC1iZS1sb2FkZWRcIjogXCJDYW5ub3QgYmUgbG9hZGVkXCIsXG5cdFx0XHRcdFx0XCJuby1vcHRpb25zLWF2YWlsYWJsZVwiOiBub09wdGlvbnNBdmFpbGFibGVNZXNzYWdlLFxuXHRcdFx0XHRcdFwiY2xpY2stdG8tbG9hZC1vcHRpb25zXCI6IGNsaWNrVG9Mb2FkT3B0aW9uc01lc3NhZ2UsXG5cdFx0XHRcdFx0XCJzZWxlY3QtYW4tb3B0aW9uXCI6IFwiU2VsZWN0IGFuIG9wdGlvblwiLFxuXHRcdFx0XHRcdFwic3VtbWFyeS10ZXh0XCI6IHtcblx0XHRcdFx0XHRcdHplcm86IFwiTm8gZW50cmllcyB3ZXJlIHNlbGVjdGVkXCIsXG5cdFx0XHRcdFx0XHRvbmU6ICc8c3BhbiBjbGFzcz1cIm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxsXCI+MTwvc3Bhbj4gZW50cnkgd2FzIHNlbGVjdGVkJyxcblx0XHRcdFx0XHRcdG90aGVyOlxuXHRcdFx0XHRcdFx0XHQnPHNwYW4gY2xhc3M9XCJtb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbFwiPiR7Y291bnR9PC9zcGFuPiBlbnRyaWVzIHdlcmUgc2VsZWN0ZWQnLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XCJuby1vcHRpb25zXCI6XG5cdFx0XHRcdFx0XHRcIlVuZm9ydHVuYXRlbHksIHRoZXJlIGFyZSBubyBvcHRpb25zIGF2YWlsYWJsZSBpbiB0aGUgbGlzdC5cIixcblx0XHRcdFx0XHRcIm5vLW9wdGlvbnMtZm91bmRcIjpcblx0XHRcdFx0XHRcdFwiTm8gb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGluIHRoZSBsaXN0LiBQbGVhc2UgY29uc2lkZXIgbW9kaWZ5aW5nIHRoZSBmaWx0ZXIuXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1lc3NhZ2VzOiB7XG5cdFx0XHRcdFx0Y29udHJvbDogbnVsbCxcblx0XHRcdFx0XHRzZWxlY3RlZDogbnVsbCxcblx0XHRcdFx0XHRlbXB0eU9wdGlvbnM6IG51bGwsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZldGNoOiB7XG5cdFx0XHRcdFx0cmVkaXJlY3Q6IFwiZXJyb3JcIixcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0bW9kZTogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRcdGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRcdFx0YWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRmaWx0ZXI6IHtcblx0XHRcdFx0XHRkZWZhdWx0VmFsdWU6IG51bGwsXG5cdFx0XHRcdFx0bW9kZTogRklMVEVSX01PREVfRElTQUJMRUQsXG5cdFx0XHRcdFx0cG9zaXRpb246IEZJTFRFUl9QT1NJVElPTl9JTkxJTkUsXG5cdFx0XHRcdFx0bWFya2VyOiB7XG5cdFx0XHRcdFx0XHRvcGVuOiBcIntcIixcblx0XHRcdFx0XHRcdGNsb3NlOiBcIn1cIixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdFx0YmFkZ2U6IFwibW9uc3Rlci1iYWRnZS1wcmltYXJ5XCIsXG5cdFx0XHRcdFx0c3RhdHVzT3JSZW1vdmVCYWRnZTogXCJlbXB0eVwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtYXBwaW5nOiB7XG5cdFx0XHRcdFx0c2VsZWN0b3I6IFwiKlwiLFxuXHRcdFx0XHRcdGxhYmVsVGVtcGxhdGU6IFwiXCIsXG5cdFx0XHRcdFx0dmFsdWVUZW1wbGF0ZTogXCJcIixcblx0XHRcdFx0XHRmaWx0ZXI6IG51bGwsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZvcm1hdHRlcjoge1xuXHRcdFx0XHRcdHNlbGVjdGlvbjogYnVpbGRTZWxlY3Rpb25MYWJlbCxcblx0XHRcdFx0fSxcblx0XHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0dGVtcGxhdGVNYXBwaW5nOiB7XG5cdFx0XHRcdFx0LyoqIHdpdGggdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXNlbGVjdGVkLXRlbXBsYXRlYCB0aGUgdGVtcGxhdGUgZm9yIHRoZSBzZWxlY3RlZCBvcHRpb25zIGNhbiBiZSBkZWZpbmVkLiAqL1xuXHRcdFx0XHRcdHNlbGVjdGVkOiBnZXRTZWxlY3Rpb25UZW1wbGF0ZSgpLFxuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdHBvcHBlcjoge1xuXHRcdFx0XHRcdHBsYWNlbWVudDogXCJib3R0b21cIixcblx0XHRcdFx0XHRtaWRkbGV3YXJlOiBbXCJmbGlwXCIsIFwib2Zmc2V0OjFcIl0sXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTZWxlY3R9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwoc2VsZik7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHNlbGYpO1xuXG5cdFx0bGV0IGxhenlMb2FkRmxhZyA9IHNlbGYuZ2V0T3B0aW9uKFwiZmVhdHVyZXMubGF6eUxvYWRcIiwgZmFsc2UpO1xuXHRcdGxldCByZW1vdGVGaWx0ZXJGbGFnID0gZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpID09PSBGSUxURVJfTU9ERV9SRU1PVEU7XG5cblx0XHRpZiAoZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpID09PSBGSUxURVJfTU9ERV9SRU1PVEUpIHtcblx0XHRcdHNlbGYuZ2V0T3B0aW9uKFwiZmVhdHVyZXMubGF6eUxvYWRcIiwgZmFsc2UpO1xuXHRcdFx0aWYgKGxhenlMb2FkRmxhZyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdFx0XCJsYXp5TG9hZCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggcmVtb3RlIGZpbHRlclwiLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRsYXp5TG9hZEZsYWcgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoc2VsZi5oYXNBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSkge1xuXHRcdFx0bmV3IFByb2Nlc3NpbmcoMTAsICgpID0+IHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidmFsdWVcIik7XG5cdFx0XHR9KVxuXHRcdFx0XHQucnVuKClcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKHNlbGYuZ2V0T3B0aW9uKFwidXJsXCIpICE9PSBudWxsKSB7XG5cdFx0XHRpZiAobGF6eUxvYWRGbGFnIHx8IHJlbW90ZUZpbHRlckZsYWcpIHtcblx0XHRcdFx0bG9va3VwU2VsZWN0aW9uLmNhbGwoc2VsZik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLmZldGNoKCkuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgbGFzdFZhbHVlID0gc2VsZi52YWx1ZTtcblx0XHRzZWxmW2ludGVybmFsU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihcblx0XHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChpc09iamVjdCh0aGlzKSAmJiB0aGlzIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcikge1xuXHRcdFx0XHRcdGNvbnN0IG4gPSB0aGlzLmdldFN1YmplY3QoKT8ub3B0aW9ucz8udmFsdWU7XG5cblx0XHRcdFx0XHRpZiAobGFzdFZhbHVlICE9PSBuKSB7XG5cdFx0XHRcdFx0XHRsYXN0VmFsdWUgPSBuO1xuXHRcdFx0XHRcdFx0c2V0U2VsZWN0aW9uXG5cdFx0XHRcdFx0XHRcdC5jYWxsKHNlbGYsIG4pXG5cdFx0XHRcdFx0XHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdFx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdCk7XG5cblx0XHRhcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdC5jYWxsKHNlbGYpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICogQHRocm93cyB7RXJyb3J9IHN0b3JlRmV0Y2hlZERhdGEgaXMgbm90IGVuYWJsZWRcblx0ICogQHNpbmNlIDMuNjYuMFxuXHQgKi9cblx0Z2V0TGFzdEZldGNoZWREYXRhKCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnN0b3JlRmV0Y2hlZERhdGFcIikgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzdG9yZUZldGNoZWREYXRhIGlzIG5vdCBlbmFibGVkXCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzPy5bbGFzdEZldGNoZWREYXRhU3ltYm9sXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmNsaWNrKCkgbWV0aG9kIHNpbXVsYXRlcyBhIGNsaWNrIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvY2xpY2t9XG5cdCAqL1xuXHRjbGljaygpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRvZ2dsZS5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uZm9jdXMoKSBtZXRob2Qgc2V0cyBmb2N1cyBvbiB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2ZvY3VzfVxuXHQgKi9cblx0Zm9jdXMob3B0aW9ucykge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdFx0Z2F0aGVyU3RhdGUuY2FsbCh0aGlzKTtcblx0XHRcdGZvY3VzRmlsdGVyLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdFx0fSlcblx0XHRcdC5ydW4oKVxuXHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGAke2V9YCk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmJsdXIoKSBtZXRob2QgcmVtb3ZlcyBmb2N1cyBmcm9tIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2JsdXJcblx0ICovXG5cdGJsdXIoKSB7XG5cdFx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdFx0Z2F0aGVyU3RhdGUuY2FsbCh0aGlzKTtcblx0XHRcdGJsdXJGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHR9KVxuXHRcdFx0LnJ1bigpXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIElmIG5vIHVybCBpcyBzcGVjaWZpZWQsIHRoZSBvcHRpb25zIGFyZSB0YWtlbiBmcm9tIHRoZSBDb21wb25lbnQgaXRzZWxmLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybCBVUkwgdG8gZmV0Y2ggdGhlIG9wdGlvbnNcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGZldGNoKHVybCkge1xuXHRcdHJldHVybiBmZXRjaEl0LmNhbGwodGhpcywgdXJsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXG5cdFx0cGFyc2VTbG90c1RvT3B0aW9ucy5jYWxsKHRoaXMpO1xuXHRcdGF0dGFjaFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cblx0XHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0XHRnYXRoZXJTdGF0ZS5jYWxsKHRoaXMpO1xuXHRcdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHR9KVxuXHRcdFx0LnJ1bigpXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXHRcdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXG5cdFx0ZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogSW1wb3J0IFNlbGVjdCBPcHRpb25zIGZyb20gZGF0YXNldFxuXHQgKiBOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCB0aGUgY29udHJvbCBkZWZhdWx0cy9vcHRpb25zXG5cdCAqXG5cdCAqIEBwYXJhbSB7YXJyYXl8b2JqZWN0fE1hcHxTZXR9IGRhdGFcblx0ICogQHJldHVybiB7U2VsZWN0fVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWFwIGlzIG5vdCBpdGVyYWJsZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBsYWJlbCBjb25maWd1cmF0aW9uXG5cdCAqIEBmaXJlcyBtb25zdGVyLW9wdGlvbnMtc2V0IHRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgb3B0aW9ucyBhcmUgc2V0XG5cdCAqL1xuXHRpbXBvcnRPcHRpb25zKGRhdGEpIHtcblx0XHRjb25zdCBtYXBwaW5nT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZ1wiLCB7fSk7XG5cdFx0Y29uc3Qgc2VsZWN0b3IgPSBtYXBwaW5nT3B0aW9ucz8uW1wic2VsZWN0b3JcIl07XG5cdFx0Y29uc3QgbGFiZWxUZW1wbGF0ZSA9IG1hcHBpbmdPcHRpb25zPy5bXCJsYWJlbFRlbXBsYXRlXCJdO1xuXHRcdGNvbnN0IHZhbHVlVGVtcGxhdGUgPSBtYXBwaW5nT3B0aW9ucz8uW1widmFsdWVUZW1wbGF0ZVwiXTtcblx0XHRjb25zdCBmaWx0ZXIgPSBtYXBwaW5nT3B0aW9ucz8uW1wiZmlsdGVyXCJdO1xuXG5cdFx0bGV0IGZsYWcgPSBmYWxzZTtcblx0XHRpZiAobGFiZWxUZW1wbGF0ZSA9PT0gXCJcIikge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgXCJlbXB0eSBsYWJlbCB0ZW1wbGF0ZVwiKTtcblx0XHRcdGZsYWcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZVRlbXBsYXRlID09PSBcIlwiKSB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBcImVtcHR5IHZhbHVlIHRlbXBsYXRlXCIpO1xuXHRcdFx0ZmxhZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGZsYWcgPT09IHRydWUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgbGFiZWwgY29uZmlndXJhdGlvblwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBtYXAgPSBidWlsZE1hcChkYXRhLCBzZWxlY3RvciwgbGFiZWxUZW1wbGF0ZSwgdmFsdWVUZW1wbGF0ZSwgZmlsdGVyKTtcblxuXHRcdGNvbnN0IG9wdGlvbnMgPSBbXTtcblxuXHRcdGlmICghaXNJdGVyYWJsZShtYXApKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtYXAgaXMgbm90IGl0ZXJhYmxlXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcblxuXHRcdG1hcC5mb3JFYWNoKChsYWJlbCwgdmFsdWUpID0+IHtcblx0XHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRsYWJlbCxcblx0XHRcdFx0dmlzaWJpbGl0eSxcblx0XHRcdFx0ZGF0YTogbWFwLmdldCh2YWx1ZSksXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHJ1bkFzT3B0aW9uTGVuZ3RoQ2hhbmdlZC5jYWxsKHRoaXMsIG1hcC5zaXplKTtcblx0XHR0aGlzLnNldE9wdGlvbihcIm9wdGlvbnNcIiwgb3B0aW9ucyk7XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLW9wdGlvbnMtc2V0XCIsIHtcblx0XHRcdG9wdGlvbnMsXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcmV0dXJuIHtTZWxlY3R9XG5cdCAqL1xuXHRjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbigpIHtcblx0XHRjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbi5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1zZWxlY3RcIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1NlbGVjdFN0eWxlU2hlZXRdO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbG9va3VwU2VsZWN0aW9uKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRjb25zdCBzZWxlY3Rpb24gPSBzZWxmLmdldE9wdGlvbihcInNlbGVjdGlvblwiKTtcblx0XHRpZiAoc2VsZWN0aW9uLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChzZWxmW2lzTG9hZGluZ1N5bWJvbF0gPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoc2VsZltsYXp5TG9hZERvbmVTeW1ib2xdID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IHVybCA9IHNlbGYuZ2V0T3B0aW9uKFwidXJsXCIpO1xuXHRcdGxldCBsb29rdXBVcmwgPSBzZWxmLmdldE9wdGlvbihcImxvb2t1cC51cmxcIik7XG5cdFx0aWYgKGxvb2t1cFVybCAhPT0gbnVsbCkge1xuXHRcdFx0dXJsID0gbG9va3VwVXJsO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImxvb2t1cC5ncm91cGluZ1wiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0ZmlsdGVyRnJvbVJlbW90ZUJ5VmFsdWVcblx0XHRcdFx0LmNhbGwoXG5cdFx0XHRcdFx0c2VsZixcblx0XHRcdFx0XHR1cmwsXG5cdFx0XHRcdFx0c2VsZWN0aW9uLm1hcCgocykgPT4gcz8uW1widmFsdWVcIl0pLFxuXHRcdFx0XHQpXG5cdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHNlbGYsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGAke2V9YCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgcyBvZiBzZWxlY3Rpb24pIHtcblx0XHRcdGlmIChzPy5bXCJ2YWx1ZVwiXSkge1xuXHRcdFx0XHRmaWx0ZXJGcm9tUmVtb3RlQnlWYWx1ZS5jYWxsKHNlbGYsIHVybCwgcz8uW1widmFsdWVcIl0pLmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZiwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCAxMDApO1xufVxuXG5mdW5jdGlvbiBmZXRjaEl0KHVybCwgY29udHJvbE9wdGlvbnMpIHtcblx0aWYgKHVybCBpbnN0YW5jZW9mIFVSTCkge1xuXHRcdHVybCA9IHVybC50b1N0cmluZygpO1xuXHR9XG5cblx0aWYgKHVybCAhPT0gdW5kZWZpbmVkICYmIHVybCAhPT0gbnVsbCkge1xuXHRcdHVybCA9IHZhbGlkYXRlU3RyaW5nKHVybCk7XG5cdH0gZWxzZSB7XG5cdFx0dXJsID0gdGhpcy5nZXRPcHRpb24oXCJ1cmxcIik7XG5cdFx0aWYgKHVybCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHVybCBkZWZpbmVkXCIpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJsb2FkaW5nXCIpO1xuXG5cdFx0bmV3IFByb2Nlc3NpbmcoMTAsICgpID0+IHtcblx0XHRcdGZldGNoRGF0YVxuXHRcdFx0XHQuY2FsbCh0aGlzLCB1cmwpXG5cdFx0XHRcdC50aGVuKChtYXApID0+IHtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRpc09iamVjdChtYXApIHx8XG5cdFx0XHRcdFx0XHRpc0FycmF5KG1hcCkgfHxcblx0XHRcdFx0XHRcdG1hcCBpbnN0YW5jZW9mIFNldCB8fFxuXHRcdFx0XHRcdFx0bWFwIGluc3RhbmNlb2YgTWFwXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmltcG9ydE9wdGlvbnMobWFwKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImVycm9yXCIpO1xuXHRcdFx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dGhpc1tsYXN0RmV0Y2hlZERhdGFTeW1ib2xdID0gbWFwO1xuXG5cdFx0XHRcdFx0XHRsZXQgcmVzdWx0O1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIik7XG5cdFx0XHRcdFx0XHRsZXQgbmV3VmFsdWUgPSBbXTtcblx0XHRcdFx0XHRcdGlmIChzZWxlY3Rpb24pIHtcblx0XHRcdFx0XHRcdFx0bmV3VmFsdWUgPSBzZWxlY3Rpb247XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuaGFzQXR0cmlidXRlKFwidmFsdWVcIikpIHtcblx0XHRcdFx0XHRcdFx0bmV3VmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZXN1bHQgPSBzZXRTZWxlY3Rpb24uY2FsbCh0aGlzLCBuZXdWYWx1ZSk7XG5cdFx0XHRcdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjaGVja09wdGlvblN0YXRlLmNhbGwodGhpcyk7XG5cdFx0XHRcdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJjbG9zZWRcIik7XG5cdFx0XHRcdFx0XHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJlcnJvclwiKTtcblx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiaW52YWxpZCByZXNwb25zZVwiKSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJlcnJvclwiKTtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH0pO1xuXHRcdH0pXG5cdFx0XHQucnVuKClcblx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwiZXJyb3JcIik7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdH0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBwYXNzIGEgVVJMIHRvIHRoaXMgc2VsZWN0LlxuICpcbiAqIGBgYFxuICogPG1vbnN0ZXItc2VsZWN0IGRhdGEtbW9uc3Rlci11cmw9XCJodHRwczovL2V4YW1wbGUuY29tL1wiPjwvbW9uc3Rlci1zZWxlY3Q+XG4gKiBgYGBcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGRlcHJlY2F0ZWQgMjAyNC0wMS0yMSAoeW91IHNob3VsZCB1c2UgZGF0YS1tb25zdGVyLW9wdGlvbi0uLi4pXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdGNvbnN0IHRlbXBsYXRlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItc2VsZWN0ZWQtdGVtcGxhdGVcIik7XG5cdGlmIChpc1N0cmluZyh0ZW1wbGF0ZSkpIHtcblx0XHRpZiAoIW9wdGlvbnNbXCJ0ZW1wbGF0ZU1hcHBpbmdcIl0pIG9wdGlvbnNbXCJ0ZW1wbGF0ZU1hcHBpbmdcIl0gPSB7fTtcblxuXHRcdHN3aXRjaCAodGVtcGxhdGUpIHtcblx0XHRcdGNhc2UgXCJzdW1tYXJ5XCI6XG5cdFx0XHRjYXNlIFwiZGVmYXVsdFwiOlxuXHRcdFx0XHRvcHRpb25zW1widGVtcGxhdGVNYXBwaW5nXCJdW1wic2VsZWN0ZWRcIl0gPSBnZXRTdW1tYXJ5VGVtcGxhdGUoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwic2VsZWN0ZWRcIjpcblx0XHRcdFx0b3B0aW9uc1tcInRlbXBsYXRlTWFwcGluZ1wiXVtcInNlbGVjdGVkXCJdID0gZ2V0U2VsZWN0aW9uVGVtcGxhdGUoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdFx0XCJpbnZhbGlkIHRlbXBsYXRlLCB1c2Ugc3VtbWFyeSBvciBzZWxlY3RlZFwiLFxuXHRcdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvcHRpb25zO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFJlc2l6ZU9ic2VydmVyKCkge1xuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcblx0XHRpZiAodGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdLnRvdWNoKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUodGhpcy5wYXJlbnRFbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCkge1xuXHRpZiAodGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gaW5zdGFuY2VvZiBSZXNpemVPYnNlcnZlcikge1xuXHRcdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLmRpc2Nvbm5lY3QoKTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25UZW1wbGF0ZSgpIHtcblx0cmV0dXJuIGA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic2VsZWN0aW9uXCIgcGFydD1cInNlbGVjdGlvblwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJzZWxlY3Rpb24gcGF0aDpzZWxlY3Rpb25cIiByb2xlPVwic2VhcmNoXCJcbiAgICAgICAgICAgID48aW5wdXQgdHlwZT1cInRleHRcIiByb2xlPVwic2VhcmNoYm94XCJcbiAgICAgICAgICAgICAgICAgICAgcGFydD1cImlubGluZS1maWx0ZXJcIiBuYW1lPVwiaW5saW5lLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgID48ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlcy5jb250cm9sXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5gO1xufVxuXG5mdW5jdGlvbiBnZXRTdW1tYXJ5VGVtcGxhdGUoKSB7XG5cdHJldHVybiBgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInNlbGVjdGlvblwiIHJvbGU9XCJzZWFyY2hcIiBwYXJ0PVwic3VtbWFyeVwiPlxuICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHJvbGU9XCJzZWFyY2hib3hcIlxuICAgICAgICAgICBwYXJ0PVwiaW5saW5lLWZpbHRlclwiIG5hbWU9XCJpbmxpbmUtZmlsdGVyXCJcbiAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJmaWx0ZXJcIlxuICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgID5cbiAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlcy5zZWxlY3RlZFwiPjwvZGl2PiAgICBcbjwvZGl2PmA7XG59XG5cbi8qKlxuICogQHJldHVybiB7dm9pZH1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU2xvdHNUb09wdGlvbnMoKSB7XG5cdGxldCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXHRpZiAoIWlzSXRlcmFibGUob3B0aW9ucykpIHtcblx0XHRvcHRpb25zID0gW107XG5cdH1cblxuXHRsZXQgY291bnRlciA9IDE7XG5cdGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIFwiZGl2XCIpLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRsZXQgdmFsdWUgPSAoY291bnRlcisrKS50b1N0cmluZygpO1xuXHRcdGxldCB2aXNpYmlsaXR5ID0gXCJ2aXNpYmxlXCI7XG5cblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItdmFsdWVcIikpIHtcblx0XHRcdHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItdmFsdWVcIik7XG5cdFx0fVxuXG5cdFx0bGV0IGxhYmVsID0gbm9kZS5vdXRlckhUTUw7XG5cblx0XHRpZiAobm9kZS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIikge1xuXHRcdFx0dmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG5cdFx0fVxuXG5cdFx0b3B0aW9ucy5wdXNoKHtcblx0XHRcdHZhbHVlLFxuXHRcdFx0bGFiZWwsXG5cdFx0XHR2aXNpYmlsaXR5LFxuXHRcdH0pO1xuXHR9KTtcblxuXHRydW5Bc09wdGlvbkxlbmd0aENoYW5nZWQuY2FsbCh0aGlzLCBvcHRpb25zLmxlbmd0aCk7XG5cdHRoaXMuc2V0T3B0aW9uKFwib3B0aW9uc1wiLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiB3YWl0IHVudGlsIGFsbCBvcHRpb25zIGFyZSBmaW5pc2hlZCByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtpbnR9IHRhcmdldExlbmd0aFxuICovXG5mdW5jdGlvbiBydW5Bc09wdGlvbkxlbmd0aENoYW5nZWQodGFyZ2V0TGVuZ3RoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGlmICghc2VsZltvcHRpb25zRWxlbWVudFN5bWJvbF0pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBjYWxsYmFjayA9IGZ1bmN0aW9uIChtdXRhdGlvbnNMaXN0LCBvYnNlcnZlcikge1xuXHRcdGNvbnN0IHJ1biA9IGZhbHNlO1xuXHRcdGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zTGlzdCkge1xuXHRcdFx0aWYgKG11dGF0aW9uLnR5cGUgPT09IFwiY2hpbGRMaXN0XCIpIHtcblx0XHRcdFx0Y29uc3QgcnVuID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJ1biA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3Qgbm9kZXMgPSBzZWxmW29wdGlvbnNFbGVtZW50U3ltYm9sXS5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdFx0XHRgZGl2WyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbl1gLFxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKG5vZGVzLmxlbmd0aCA9PT0gdGFyZ2V0TGVuZ3RoKSB7XG5cdFx0XHRcdGNoZWNrT3B0aW9uU3RhdGUuY2FsbChzZWxmKTtcblx0XHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrKTtcblx0b2JzZXJ2ZXIub2JzZXJ2ZShzZWxmW29wdGlvbnNFbGVtZW50U3ltYm9sXSwge1xuXHRcdGF0dHJpYnV0ZXM6IGZhbHNlLFxuXHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRzdWJ0cmVlOiB0cnVlLFxuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gYnVpbGRTZWxlY3Rpb25MYWJlbCh2YWx1ZSkge1xuXHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdGxldCBvID0gb3B0aW9ucz8uW2ldO1xuXHRcdGxldCBsLCB2LCB2MjtcblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnVzZVN0cmljdFZhbHVlQ29tcGFyaXNvblwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0diA9IHZhbHVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2ID0gYCR7dmFsdWV9YDtcblx0XHR9XG5cblx0XHRpZiAoaXNQcmltaXRpdmUobykgJiYgbyA9PT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBvO1xuXHRcdH0gZWxzZSBpZiAoIWlzT2JqZWN0KG8pKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy51c2VTdHJpY3RWYWx1ZUNvbXBhcmlzb25cIikgPT09IHRydWUpIHtcblx0XHRcdGwgPSBvPy5bXCJsYWJlbFwiXTtcblx0XHRcdHYyID0gbz8uW1widmFsdWVcIl07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGwgPSBgJHtvPy5bXCJsYWJlbFwiXX1gO1xuXHRcdFx0djIgPSBgJHtvPy5bXCJ2YWx1ZVwiXX1gO1xuXHRcdH1cblxuXHRcdGlmICh2MiA9PT0gdikge1xuXHRcdFx0cmV0dXJuIGw7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICogQHRocm93cyB7RXJyb3J9IG5vIHZhbHVlIGZvdW5kXG4gKi9cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbkxhYmVsKHZhbHVlKSB7XG5cdGNvbnN0IGNhbGxiYWNrID0gdGhpcy5nZXRPcHRpb24oXCJmb3JtYXR0ZXIuc2VsZWN0aW9uXCIpO1xuXHRpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRjb25zdCBsYWJlbCA9IGNhbGxiYWNrLmNhbGwodGhpcywgdmFsdWUpO1xuXHRcdGlmIChpc1N0cmluZyhsYWJlbCkpIHJldHVybiBsYWJlbDtcblx0fVxuXG5cdGlmIChpc1N0cmluZyh2YWx1ZSkgfHwgaXNJbnRlZ2VyKHZhbHVlKSkge1xuXHRcdHJldHVybiBgJHt2YWx1ZX1gO1xuXHR9XG5cblx0cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLmNhbm5vdC1iZS1sb2FkZWRcIiwgdmFsdWUpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICovXG5mdW5jdGlvbiBoYW5kbGVUb2dnbGVLZXlib2FyZEV2ZW50cyhldmVudCkge1xuXHRzd2l0Y2ggKGV2ZW50Py5bXCJjb2RlXCJdKSB7XG5cdFx0Y2FzZSBcIkVzY2FwZVwiOlxuXHRcdFx0dG9nZ2xlLmNhbGwodGhpcyk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlNwYWNlXCI6XG5cdFx0XHR0b2dnbGUuY2FsbCh0aGlzKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQXJyb3dEb3duXCI6XG5cdFx0XHRzaG93LmNhbGwodGhpcyk7XG5cdFx0XHRhY3RpdmF0ZUN1cnJlbnRPcHRpb24uY2FsbCh0aGlzLCBGT0NVU19ESVJFQ1RJT05fRE9XTik7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkFycm93VXBcIjpcblx0XHRcdGhpZGUuY2FsbCh0aGlzKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0fVxufVxuXG4vKipcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTUuMFxuICogQHByaXZhdGVcbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbk9ic2VydmVyKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRzZWxmLmF0dGFjaE9ic2VydmVyKFxuXHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c2VsZi51cGRhdGVJMThuKCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHNlbGYsIFwiZXJyb3JcIik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdC5jYWxsKHNlbGYpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZiwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHRcdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbChzZWxmLCBcImVycm9yXCIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2V0U3VtbWFyeUFuZENvbnRyb2xUZXh0LmNhbGwoc2VsZik7XG5cdFx0XHR9KS5ydW4oKTtcblx0XHR9KSxcblx0KTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFRyYW5zbGF0aW9uKCkge1xuXHRjb25zdCB0cmFuc2xhdGlvbiA9IG5ldyBUcmFuc2xhdGlvbnMoXCJlblwiKS5hc3NpZ25UcmFuc2xhdGlvbnMoXG5cdFx0dGhpcy5nZXRPcHRpb24oXCJsYWJlbHNcIiwge30pLFxuXHQpO1xuXG5cdHRyeSB7XG5cdFx0Y29uc3QgZG9jID0gZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoKTtcblx0XHR0cmFuc2xhdGlvbi5sb2NhbGUgPSBkb2MubG9jYWxlO1xuXHR9IGNhdGNoIChlKSB7fVxuXG5cdHJldHVybiB0cmFuc2xhdGlvbjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfCp9XG4gKi9cbmZ1bmN0aW9uIHNldFN1bW1hcnlBbmRDb250cm9sVGV4dCgpIHtcblx0Y29uc3QgdHJhbnNsYXRpb25zID0gZ2V0RGVmYXVsdFRyYW5zbGF0aW9uLmNhbGwodGhpcyk7XG5cdGNvbnN0IHNlbGVjdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcInNlbGVjdGlvblwiKTtcblxuXHRjb25zdCB0ZXh0ID0gdHJhbnNsYXRpb25zLmdldFBsdXJhbFJ1bGVUZXh0KFxuXHRcdFwic3VtbWFyeS10ZXh0XCIsXG5cdFx0c2VsZWN0aW9ucy5sZW5ndGgsXG5cdFx0XCJcIixcblx0KTtcblxuXHRjb25zdCBzZWxlY3RlZFRleHQgPSBuZXcgRm9ybWF0dGVyKHtcblx0XHRjb3VudDogU3RyaW5nKHNlbGVjdGlvbnMubGVuZ3RoKSxcblx0fSkuZm9ybWF0KHRleHQpO1xuXG5cdHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZXMuc2VsZWN0ZWRcIiwgc2VsZWN0ZWRUZXh0KTtcblxuXHRjb25zdCBjdXJyZW50ID0gdGhpcy5nZXRPcHRpb24oXCJtZXNzYWdlcy5jb250cm9sXCIpO1xuXHRjb25zdCBtc2cgPSB0aGlzLmdldE9wdGlvbihcImxhYmVscy5zZWxlY3QtYW4tb3B0aW9uXCIpO1xuXG5cdGlmIChcblx0XHRjdXJyZW50ID09PSBcIlwiIHx8XG5cdFx0Y3VycmVudCA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0Y3VycmVudCA9PT0gbXNnIHx8XG5cdFx0Y3VycmVudCA9PT0gbnVsbFxuXHQpIHtcblx0XHRpZiAoc2VsZWN0aW9ucy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZXMuY29udHJvbFwiLCBtc2cpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLmNvbnRyb2xcIiwgXCJcIik7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge05vZGVMaXN0fVxuICovXG5mdW5jdGlvbiBnZXRPcHRpb25FbGVtZW50cygpIHtcblx0cmV0dXJuIHRoaXNbb3B0aW9uc0VsZW1lbnRTeW1ib2xdLnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dYCxcblx0KTtcbn1cblxuLyoqXG4gKiBXaXRoIHRoZSBoZWxwIG9mIHRoaXMgZmlsdGVyIGNhbGxiYWNrLCB2YWx1ZXMgY2FuIGJlIGZpbHRlcmVkIG91dC4gT25seSBpZiB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgdGhlIHZhbHVlIGlzIHRha2VuIGZvciB0aGUgbWFwLlxuICpcbiAqIEBjYWxsYmFjayBNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlRmlsdGVyQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgIEtleVxuICogQHNlZSBNb25zdGVyLkRhdGEuYnVpbGRNYXBcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1+Zm9ybWF0dGVyU2VsZWN0aW9uQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG4gKiBAc2VlIE1vbnN0ZXIuRGF0YS5idWlsZE1hcFxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2FsY0FuZFNldE9wdGlvbnNEaW1lbnNpb24oKSB7XG5cdGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25FbGVtZW50cy5jYWxsKHRoaXMpO1xuXHRjb25zdCBjb250YWluZXIgPSB0aGlzW29wdGlvbnNFbGVtZW50U3ltYm9sXTtcblx0aWYgKCEoY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgb3B0aW9ucyBpbnN0YW5jZW9mIE5vZGVMaXN0KSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGxldCB2aXNpYmxlID0gMDtcblx0bGV0IG9wdGlvbkhlaWdodCA9IDA7XG5cdGNvbnN0IG1heCA9IHRoaXMuZ2V0T3B0aW9uKFwic2hvd01heE9wdGlvbnNcIiwgMTApO1xuXG5cdGxldCBzY3JvbGxGbGFnID0gZmFsc2U7XG5cdGZvciAoY29uc3QgWywgb3B0aW9uXSBvZiBPYmplY3QuZW50cmllcyhvcHRpb25zKSkge1xuXHRcdGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRHbG9iYWwoKS5nZXRDb21wdXRlZFN0eWxlKG9wdGlvbik7XG5cdFx0aWYgKGNvbXB1dGVkU3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIpIGNvbnRpbnVlO1xuXG5cdFx0bGV0IGggPSBvcHRpb24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuXHRcdGggKz0gcGFyc2VJbnQoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwibWFyZ2luLXRvcFwiKSwgMTApO1xuXHRcdGggKz0gcGFyc2VJbnQoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwibWFyZ2luLWJvdHRvbVwiKSwgMTApO1xuXHRcdG9wdGlvbkhlaWdodCArPSBoO1xuXG5cdFx0dmlzaWJsZSsrO1xuXG5cdFx0aWYgKHZpc2libGUgPiBtYXgpIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdGlmICh2aXNpYmxlID4gbWF4KSB7XG5cdFx0dmlzaWJsZSA9IG1heDtcblx0XHRzY3JvbGxGbGFnID0gdHJ1ZTtcblx0fVxuXG5cdGlmICh2aXNpYmxlID09PSAwKSB7XG5cdFx0aWYgKGdldEZpbHRlck1vZGUuY2FsbCh0aGlzKSA9PT0gRklMVEVSX01PREVfRElTQUJMRUQpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9uKFxuXHRcdFx0XHRcIm1lc3NhZ2VzLmVtcHR5T3B0aW9uc1wiLFxuXHRcdFx0XHR0aGlzLmdldE9wdGlvbihcImxhYmVscy5uby1vcHRpb25zLWF2YWlsYWJsZVwiKSxcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9uKFxuXHRcdFx0XHRcIm1lc3NhZ2VzLmVtcHR5T3B0aW9uc1wiLFxuXHRcdFx0XHR0aGlzLmdldE9wdGlvbihcImxhYmVscy5uby1vcHRpb25zLWZvdW5kXCIpLFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0dGhpc1tub09wdGlvbnNBdmFpbGFibGVFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiZC1ub25lXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXNbbm9PcHRpb25zQXZhaWxhYmxlRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcblx0fVxuXG5cdGNvbnN0IHN0eWxlcyA9IGdldEdsb2JhbCgpLmdldENvbXB1dGVkU3R5bGUodGhpc1tvcHRpb25zRWxlbWVudFN5bWJvbF0pO1xuXHRsZXQgcGFkZGluZyA9IHBhcnNlSW50KHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZy10b3BcIiksIDEwKTtcblx0cGFkZGluZyArPSBwYXJzZUludChzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmctYm90dG9tXCIpLCAxMCk7XG5cblx0bGV0IG1hcmdpbiA9IHBhcnNlSW50KHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWFyZ2luLXRvcFwiKSwgMTApO1xuXHRtYXJnaW4gKz0gcGFyc2VJbnQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoXCJtYXJnaW4tYm90dG9tXCIpLCAxMCk7XG5cblx0Y29uc3QgY29udGFpbmVySGVpZ2h0ID0gb3B0aW9uSGVpZ2h0ICsgcGFkZGluZyArIG1hcmdpbjtcblx0Y29udGFpbmVyLnN0eWxlLmhlaWdodCA9IGAke2NvbnRhaW5lckhlaWdodH1weGA7XG5cblx0aWYgKHNjcm9sbEZsYWcgPT09IHRydWUpIHtcblx0XHRjb250YWluZXIuc3R5bGUub3ZlcmZsb3dZID0gXCJzY3JvbGxcIjtcblx0fSBlbHNlIHtcblx0XHRjb250YWluZXIuc3R5bGUub3ZlcmZsb3dZID0gXCJhdXRvXCI7XG5cdH1cblxuXHRjb25zdCBkb21SZWN0ID0gdGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS53aWR0aCA9IGAke2RvbVJlY3Qud2lkdGh9cHhgO1xuXHRjb250YWluZXIuc3R5bGUub3ZlcmZsb3dYID0gXCJhdXRvXCI7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJlY3Rpb25cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGFjdGl2YXRlQ3VycmVudE9wdGlvbihkaXJlY3Rpb24pIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0bGV0IGZvY3VzZWQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgWyR7QVRUUklCVVRFX1BSRUZJWH1mb2N1c2VkXWApO1xuXG5cdGlmIChcblx0XHQhKGZvY3VzZWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgfHxcblx0XHRmb2N1c2VkLm1hdGNoZXMoXCJbZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9aGlkZGVuXVwiKVxuXHQpIHtcblx0XHRmb3IgKGNvbnN0IFssIGVdIG9mIE9iamVjdC5lbnRyaWVzKFxuXHRcdFx0dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoYFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dYCksXG5cdFx0KSkge1xuXHRcdFx0aWYgKGUubWF0Y2hlcyhcIltkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eT12aXNpYmxlXVwiKSkge1xuXHRcdFx0XHRmb2N1c2VkID0gZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmIChkaXJlY3Rpb24gPT09IEZPQ1VTX0RJUkVDVElPTl9ET1dOKSB7XG5cdFx0XHR3aGlsZSAoZm9jdXNlZC5uZXh0U2libGluZykge1xuXHRcdFx0XHRmb2N1c2VkID0gZm9jdXNlZC5uZXh0U2libGluZztcblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0Zm9jdXNlZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpID09PSBcIm9wdGlvblwiICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5tYXRjaGVzKFwiW2RhdGEtbW9uc3Rlci12aXNpYmlsaXR5PXZpc2libGVdXCIpICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5tYXRjaGVzKFwiOm5vdChbZGF0YS1tb25zdGVyLWZpbHRlcmVkPXRydWVdKVwiKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgZm91bmQgPSBmYWxzZTtcblx0XHRcdHdoaWxlIChmb2N1c2VkLnByZXZpb3VzU2libGluZykge1xuXHRcdFx0XHRmb2N1c2VkID0gZm9jdXNlZC5wcmV2aW91c1NpYmxpbmc7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRmb2N1c2VkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcblx0XHRcdFx0XHRmb2N1c2VkLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgJiZcblx0XHRcdFx0XHRmb2N1c2VkLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgPT09IFwib3B0aW9uXCIgJiZcblx0XHRcdFx0XHRmb2N1c2VkLm1hdGNoZXMoXCJbZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9dmlzaWJsZV1cIikgJiZcblx0XHRcdFx0XHRmb2N1c2VkLm1hdGNoZXMoXCI6bm90KFtkYXRhLW1vbnN0ZXItZmlsdGVyZWQ9dHJ1ZV0pXCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGZvdW5kID09PSBmYWxzZSkge1xuXHRcdFx0XHRmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRpZiAoZm9jdXNlZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHR0aGlzLnNoYWRvd1Jvb3Rcblx0XHRcdFx0LnF1ZXJ5U2VsZWN0b3JBbGwoYFske0FUVFJJQlVURV9QUkVGSVh9Zm9jdXNlZF1gKVxuXHRcdFx0XHQuZm9yRWFjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGUucmVtb3ZlQXR0cmlidXRlKGAke0FUVFJJQlVURV9QUkVGSVh9Zm9jdXNlZGApO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0Zm9jdXNlZC5mb2N1cygpO1xuXHRcdFx0Zm9jdXNlZC5zZXRBdHRyaWJ1dGUoYCR7QVRUUklCVVRFX1BSRUZJWH1mb2N1c2VkYCwgdHJ1ZSk7XG5cdFx0fVxuXHR9KVxuXHRcdC5ydW4oKVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBmaWx0ZXJPcHRpb25zKCkge1xuXHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0bGV0IGZpbHRlclZhbHVlO1xuXG5cdFx0c3dpdGNoICh0aGlzLmdldE9wdGlvbihcImZpbHRlci5wb3NpdGlvblwiKSkge1xuXHRcdFx0Y2FzZSBGSUxURVJfUE9TSVRJT05fSU5MSU5FOlxuXHRcdFx0XHRpZiAodGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0ZmlsdGVyVmFsdWUgPSB0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIEZJTFRFUl9QT1NJVElPTl9QT1BQRVI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0udmFsdWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXHRcdGZvciAoY29uc3QgW2ksIG9wdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMob3B0aW9ucykpIHtcblx0XHRcdGlmIChvcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlclZhbHVlKSA9PT0gLTEpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYG9wdGlvbnMuJHtpfS5maWx0ZXJlZGAsIFwidHJ1ZVwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKGBvcHRpb25zLiR7aX0uZmlsdGVyZWRgLCB1bmRlZmluZWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSlcblx0XHQucnVuKClcblx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRuZXcgUHJvY2Vzc2luZygxMDAsICgpID0+IHtcblx0XHRcdFx0Y2FsY0FuZFNldE9wdGlvbnNEaW1lbnNpb24uY2FsbCh0aGlzKTtcblx0XHRcdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHRcdH0pXG5cdFx0XHRcdC5ydW4oKVxuXHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9KTtcblx0XHR9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAqL1xuZnVuY3Rpb24gaGFuZGxlRmlsdGVyS2V5Ym9hcmRFdmVudHMoZXZlbnQpIHtcblx0Y29uc3Qgc2hpZnRLZXkgPSBldmVudD8uW1wic2hpZnRLZXlcIl07XG5cblx0c3dpdGNoIChldmVudD8uW1wiY29kZVwiXSkge1xuXHRcdGNhc2UgXCJUYWJcIjpcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9ET1dOKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRXNjYXBlXCI6XG5cdFx0XHR0b2dnbGUuY2FsbCh0aGlzKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVGFiXCIgJiYgc2hpZnRLZXkgPT09IHRydWU6XG5cdFx0Y2FzZSBcIkFycm93VXBcIjpcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9VUCk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlRhYlwiICYmICFzaGlmdEtleTpcblx0XHRjYXNlIFwiQXJyb3dEb3duXCI6XG5cdFx0XHRhY3RpdmF0ZUN1cnJlbnRPcHRpb24uY2FsbCh0aGlzLCBGT0NVU19ESVJFQ1RJT05fRE9XTik7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGlmIChcblx0XHRcdFx0dGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5sYXp5TG9hZFwiKSA9PT0gdHJ1ZSAmJlxuXHRcdFx0XHR0aGlzW2xhenlMb2FkRG9uZVN5bWJvbF0gIT09IHRydWVcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLmNsaWNrKCk7XG5cdFx0XHR9XG5cblx0XHRcdGhhbmRsZUZpbHRlcktleUV2ZW50cy5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogTWV0aG9kIGhhbmRsZUZpbHRlcktleUV2ZW50cyBpcyB1c2VkIHRvIGhhbmRsZSBmaWx0ZXIga2V5IGV2ZW50cy5cbiAqIERlYm91bmNlIGlzIHVzZWQgdG8gcHJldmVudCBtdWx0aXBsZSBjYWxscy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBuYW1lIGhhbmRsZUZpbHRlcktleUV2ZW50c1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHt2b2lkfSBUaGlzIG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gYW55dGhpbmcuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUZpbHRlcktleUV2ZW50cygpIHtcblx0aWYgKHRoaXNba2V5RmlsdGVyRXZlbnRTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHR0cnkge1xuXHRcdFx0dGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF0udG91Y2goKTtcblx0XHRcdHJldHVybjtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRkZWxldGUgdGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF07XG5cdFx0fVxuXHR9XG5cblx0dGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF0gPSBuZXcgRGVhZE1hbnNTd2l0Y2goMjAwLCAoKSA9PiB7XG5cdFx0aWYgKGdldEZpbHRlck1vZGUuY2FsbCh0aGlzKSAhPT0gRklMVEVSX01PREVfUkVNT1RFKSB7XG5cdFx0XHRmaWx0ZXJPcHRpb25zLmNhbGwodGhpcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZpbHRlckZyb21SZW1vdGUuY2FsbCh0aGlzKS5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0ZGVsZXRlIHRoaXNba2V5RmlsdGVyRXZlbnRTeW1ib2xdO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBmaWx0ZXJGcm9tUmVtb3RlKCkge1xuXHRpZiAoXG5cdFx0ISh0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpICYmXG5cdFx0ISh0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpXG5cdCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHNob3cuY2FsbCh0aGlzKTtcblxuXHRjb25zdCB1cmwgPSB0aGlzLmdldE9wdGlvbihcInVybFwiKTtcblx0aWYgKCF1cmwpIHtcblx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdHRoaXMsXG5cdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XCJNaXNzaW5nIFVSTCBmb3IgUmVtb3RlIEZpbHRlci5cIixcblx0XHQpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGxldCBmaWx0ZXJWYWx1ZTtcblxuXHRzd2l0Y2ggKHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLnBvc2l0aW9uXCIpKSB7XG5cdFx0Y2FzZSBGSUxURVJfUE9TSVRJT05fSU5MSU5FOlxuXHRcdFx0aWYgKHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0udmFsdWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdH1cblxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBGSUxURVJfUE9TSVRJT05fUE9QUEVSOlxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRpZiAodGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRcdFx0ZmlsdGVyVmFsdWUgPSB0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZmlsdGVyRnJvbVJlbW90ZUJ5VmFsdWUuY2FsbCh0aGlzLCB1cmwsIGZpbHRlclZhbHVlKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVJMKHVybCwgdmFsdWUpIHtcblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIpIHtcblx0XHR2YWx1ZSA9IHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLmRlZmF1bHRWYWx1ZVwiKTtcblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikge1xuXHRcdFx0dmFsdWUgPSBkaXNhYmxlZFJlcXVlc3RNYXJrZXIudG9TdHJpbmcoKTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHsgZmlsdGVyOiBlbmNvZGVVUkkodmFsdWUpIH0pO1xuXHRjb25zdCBvcGVuTWFya2VyID0gdGhpcy5nZXRPcHRpb24oXCJmaWx0ZXIubWFya2VyLm9wZW5cIik7XG5cdGxldCBjbG9zZU1hcmtlciA9IHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLm1hcmtlci5jbG9zZVwiKTtcblx0aWYgKCFjbG9zZU1hcmtlcikge1xuXHRcdGNsb3NlTWFya2VyID0gb3Blbk1hcmtlcjtcblx0fVxuXG5cdGlmIChvcGVuTWFya2VyICYmIGNsb3NlTWFya2VyKSB7XG5cdFx0Zm9ybWF0dGVyLnNldE1hcmtlcihvcGVuTWFya2VyLCBjbG9zZU1hcmtlcik7XG5cdH1cblxuXHRyZXR1cm4gZm9ybWF0dGVyLmZvcm1hdCh1cmwpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gb3B0aW9uVXJsXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuICovXG5mdW5jdGlvbiBmaWx0ZXJGcm9tUmVtb3RlQnlWYWx1ZShvcHRpb25VcmwsIHZhbHVlKSB7XG5cdHJldHVybiBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0bGV0IHVybCA9IGZvcm1hdFVSTC5jYWxsKHRoaXMsIG9wdGlvblVybCwgdmFsdWUpO1xuXHRcdGlmICh1cmwuaW5kZXhPZihkaXNhYmxlZFJlcXVlc3RNYXJrZXIudG9TdHJpbmcoKSkgIT09IC0xKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZmV0Y2hJdFxuXHRcdFx0LmNhbGwodGhpcywgdXJsLCB7XG5cdFx0XHRcdGRpc2FibGVIaWRpbmc6IHRydWUsXG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRjaGVja09wdGlvblN0YXRlLmNhbGwodGhpcyk7XG5cdFx0XHRcdHNob3cuY2FsbCh0aGlzKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdH0pO1xuXHR9KVxuXHRcdC5ydW4oKVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGFuZGxlT3B0aW9uS2V5Ym9hcmRFdmVudHMoZXZlbnQpIHtcblx0Y29uc3Qgc2hpZnRLZXkgPSBldmVudD8uW1wic2hpZnRLZXlcIl07XG5cblx0c3dpdGNoIChldmVudD8uW1wiY29kZVwiXSkge1xuXHRcdGNhc2UgXCJFc2NhcGVcIjpcblx0XHRcdHRvZ2dsZS5jYWxsKHRoaXMpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJFbnRlclwiOlxuXHRcdGNhc2UgXCJTcGFjZVwiOlxuXHRcdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdFx0Y29uc3QgZWxlbWVudCA9IHBhdGg/LlswXTtcblx0XHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0Y29uc3QgaW5wdXQgPSBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIik7XG5cdFx0XHRcdGlmICghaW5wdXQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0ZmlyZUV2ZW50KGlucHV0LCBcImNsaWNrXCIpO1xuXHRcdFx0fVxuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcIlRhYlwiICYmIHNoaWZ0S2V5ID09PSB0cnVlOlxuXHRcdGNhc2UgXCJBcnJvd1VwXCI6XG5cdFx0XHRhY3RpdmF0ZUN1cnJlbnRPcHRpb24uY2FsbCh0aGlzLCBGT0NVU19ESVJFQ1RJT05fVVApO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcIlRhYlwiICYmICFzaGlmdEtleTpcblx0XHRjYXNlIFwiQXJyb3dMZWZ0XCI6XG5cdFx0Y2FzZSBcIkFycm93UmlnaHRcIjpcblx0XHRcdC8vIGhhbmRsZWQgYnkgdHJlZSBzZWxlY3Rcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJBcnJvd0Rvd25cIjpcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9ET1dOKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0Y29uc3QgcCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdFx0aWYgKHA/LlswXSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHRcdGJyZWFrO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0RmlsdGVyTW9kZSgpIHtcblx0c3dpdGNoICh0aGlzLmdldE9wdGlvbihcImZpbHRlci5tb2RlXCIpKSB7XG5cdFx0Y2FzZSBGSUxURVJfTU9ERV9PUFRJT05TOlxuXHRcdFx0cmV0dXJuIEZJTFRFUl9NT0RFX09QVElPTlM7XG5cdFx0Y2FzZSBGSUxURVJfTU9ERV9SRU1PVEU6XG5cdFx0XHRyZXR1cm4gRklMVEVSX01PREVfUkVNT1RFO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gRklMVEVSX01PREVfRElTQUJMRUQ7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBibHVyRmlsdGVyKCkge1xuXHRpZiAoISh0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGdldEZpbHRlck1vZGUuY2FsbCh0aGlzKSA9PT0gRklMVEVSX01PREVfRElTQUJMRUQpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3BvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uYmx1cigpO1xuXG5cdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5ibHVyKCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBmb2N1c09wdGlvbnNcbiAqL1xuZnVuY3Rpb24gZm9jdXNQb3BwZXJGaWx0ZXIoZm9jdXNPcHRpb25zKSB7XG5cdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImQtbm9uZVwiKTtcblx0dGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuXHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcblxuXHRpZiAoISh0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHR0aGlzLFxuXHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFwiTWlzc2luZyBQb3BwZXIgRmlsdGVyIEVsZW1lbnQuXCIsXG5cdFx0KTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyB2aXNpYmlsaXR5IGlzIHNldCB0byB2aXNpYmxlLCBiZWNhdXNlIGZvY3VzKCkgZG9lcyBub3Qgd29yayBvbiBpbnZpc2libGUgZWxlbWVudHNcblx0Ly8gYW5kIHRoZSBjbGFzcyBkZWZpbml0aW9uIGlzIGFzc2lnbmVkIGxhdGVyIGluIHRoZSBwcm9jZXNzaW5nXG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGlmIChmb2N1c09wdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBmb2N1c09wdGlvbnMgPT09IG51bGwpIHtcblx0XHRcdHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0uZm9jdXMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXS5mb2N1cyhmb2N1c09wdGlvbnMpO1xuXHRcdH1cblx0fSwgMTAwKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZvY3VzT3B0aW9uc1xuICovXG5mdW5jdGlvbiBmb2N1c0lubGluZUZpbHRlcihmb2N1c09wdGlvbnMpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwib3B0aW9uc1wiKTtcblx0aWYgKFxuXHRcdCghaXNBcnJheShvcHRpb25zKSB8fCBvcHRpb25zLmxlbmd0aCA9PT0gMCkgJiZcblx0XHRnZXRGaWx0ZXJNb2RlLmNhbGwodGhpcykgIT09IEZJTFRFUl9NT0RFX1JFTU9URVxuXHQpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3BvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJkLW5vbmVcIik7XG5cdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiZC1ub25lXCIpO1xuXG5cdC8vIHZpc2liaWxpdHkgaXMgc2V0IHRvIHZpc2libGUsIGJlY2F1c2UgZm9jdXMoKSBkb2VzIG5vdCB3b3JrIG9uIGludmlzaWJsZSBlbGVtZW50c1xuXHQvLyBhbmQgdGhlIGNsYXNzIGRlZmluaXRpb24gaXMgYXNzaWduZWQgbGF0ZXIgaW4gdGhlIHByb2Nlc3Npbmdcblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0aWYgKGZvY3VzT3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IGZvY3VzT3B0aW9ucyA9PT0gbnVsbCkge1xuXHRcdFx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5mb2N1cygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmZvY3VzKGZvY3VzT3B0aW9ucyk7XG5cdFx0fVxuXHR9LCAxMDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGZvY3VzRmlsdGVyKGZvY3VzT3B0aW9ucykge1xuXHRpZiAoZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpID09PSBGSUxURVJfTU9ERV9ESVNBQkxFRCkge1xuXHRcdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcblx0XHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJkLW5vbmVcIik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLnBvc2l0aW9uXCIpID09PSBGSUxURVJfUE9TSVRJT05fSU5MSU5FKSB7XG5cdFx0cmV0dXJuIGZvY3VzSW5saW5lRmlsdGVyLmNhbGwodGhpcywgZm9jdXNPcHRpb25zKTtcblx0fVxuXG5cdHJldHVybiBmb2N1c1BvcHBlckZpbHRlci5jYWxsKHRoaXMsIGZvY3VzT3B0aW9ucyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2FycmF5fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKi9cbmZ1bmN0aW9uIGdhdGhlclN0YXRlKCkge1xuXHRjb25zdCB0eXBlID0gdGhpcy5nZXRPcHRpb24oXCJ0eXBlXCIpO1xuXHRpZiAoW1wicmFkaW9cIiwgXCJjaGVja2JveFwiXS5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIHR5cGVcIik7XG5cdH1cblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRjb25zdCBzZWxlY3Rpb24gPSBbXTtcblx0Y29uc3QgZWxlbWVudHMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChcblx0XHRgaW5wdXRbdHlwZT0ke3R5cGV9XTpjaGVja2VkYCxcblx0KTtcblxuXHRmb3IgKGNvbnN0IGUgb2YgZWxlbWVudHMpIHtcblx0XHRzZWxlY3Rpb24ucHVzaCh7XG5cdFx0XHRsYWJlbDogZ2V0U2VsZWN0aW9uTGFiZWwuY2FsbCh0aGlzLCBlLnZhbHVlKSxcblx0XHRcdHZhbHVlOiBlLnZhbHVlLFxuXHRcdH0pO1xuXHR9XG5cblx0c2V0U2VsZWN0aW9uXG5cdFx0LmNhbGwodGhpcywgc2VsZWN0aW9uKVxuXHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHR9KTtcblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5jbG9zZU9uU2VsZWN0XCIpID09PSB0cnVlKSB7XG5cdFx0dG9nZ2xlLmNhbGwodGhpcyk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9uKCkge1xuXHRjb25zdCB0eXBlID0gdGhpcy5nZXRPcHRpb24oXCJ0eXBlXCIpO1xuXHRpZiAoW1wicmFkaW9cIiwgXCJjaGVja2JveFwiXS5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIHR5cGVcIik7XG5cdH1cblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRzZXRTZWxlY3Rpb25cblx0XHQuY2FsbCh0aGlzLCBbXSlcblx0XHQudGhlbigoKSA9PiB7fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGAke2V9YCk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXQoKSB7XG5cdC8vIHByZXZlbnQgbXVsdGlwbGUgY2FsbHNcblx0aWYgKHRoaXNbYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRTeW1ib2xdID09PSB1bmRlZmluZWQpIHtcblx0XHR0aGlzW2FyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0U3ltYm9sXSA9IDA7XG5cdH1cblxuXHRpZiAodGhpc1thcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbF0gPiAwKSB7XG5cdFx0dGhpc1thcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbF0tLTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHRoaXNbYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRTeW1ib2xdKys7XG5cblx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwib3B0aW9uc1wiKTtcblxuXHRpZiAoXG5cdFx0b3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0b3B0aW9ucyA9PT0gbnVsbCB8fFxuXHRcdChpc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubGVuZ3RoID09PSAwKVxuXHQpIHtcblx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwiZW1wdHlcIik7XG5cblx0XHQvLyBoaWRlLmNhbGwodGhpcyk7XG5cblx0XHRsZXQgbXNnID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMubm8tb3B0aW9ucy1hdmFpbGFibGVcIik7XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcInVybFwiKSAhPT0gbnVsbCAmJlxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5sYXp5TG9hZFwiKSA9PT0gdHJ1ZSAmJlxuXHRcdFx0dGhpc1tsYXp5TG9hZERvbmVTeW1ib2xdICE9PSB0cnVlXG5cdFx0KSB7XG5cdFx0XHRtc2cgPSB0aGlzLmdldE9wdGlvbihcImxhYmVscy5jbGljay10by1sb2FkLW9wdGlvbnNcIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5jb250cm9sXCIsIG1zZyk7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5zdW1tYXJ5XCIsIFwiXCIpO1xuXG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuZW1wdHlWYWx1ZUlmTm9PcHRpb25zXCIpID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLnZhbHVlID0gXCJcIjtcblx0XHR9XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgbm9PcHRpb25zQXZhaWxhYmxlTWVzc2FnZSk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Y29uc3Qgc2VsZWN0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXHRpZiAoXG5cdFx0c2VsZWN0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0c2VsZWN0aW9ucyA9PT0gbnVsbCB8fFxuXHRcdHNlbGVjdGlvbnMubGVuZ3RoID09PSAwXG5cdCkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFxuXHRcdFx0XCJtZXNzYWdlcy5jb250cm9sXCIsXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcImxhYmVscy5zZWxlY3QtYW4tb3B0aW9uXCIpLFxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5jb250cm9sXCIsIFwiXCIpO1xuXHR9XG5cblx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5zdW1tYXJ5XCIsIHNldFN1bW1hcnlBbmRDb250cm9sVGV4dC5jYWxsKHRoaXMpKTtcblxuXHRsZXQgdXBkYXRlZCA9IGZhbHNlO1xuXHRsZXQgdmFsdWVDb3VudGVyID0gMTtcblx0Zm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuXHRcdGlmIChvcHRpb24/LnZpc2liaWxpdHkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0b3B0aW9uLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcblx0XHRcdHVwZGF0ZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb24/LnZhbHVlID09PSB1bmRlZmluZWQgJiYgb3B0aW9uPy5sYWJlbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb24udmFsdWUgPSBgJHt2YWx1ZUNvdW50ZXIrK31gO1xuXHRcdFx0b3B0aW9uLmxhYmVsID0gb3B0aW9uLnZhbHVlO1xuXHRcdFx0dXBkYXRlZCA9IHRydWU7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9uPy52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb24udmFsdWUgPSBvcHRpb24ubGFiZWw7XG5cdFx0XHR1cGRhdGVkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9uPy5sYWJlbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb24ubGFiZWwgPSBvcHRpb24udmFsdWU7XG5cdFx0XHR1cGRhdGVkID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHRpZiAodXBkYXRlZCkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwib3B0aW9uc1wiLCBvcHRpb25zKTtcblx0fVxuXG5cdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcyk7XG5cblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgbm9PcHRpb25zQXZhaWxhYmxlTWVzc2FnZSk7XG5cdHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBjaGVja09wdGlvblN0YXRlKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRjb25zdCBlbGVtZW50cyA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09b3B0aW9uXSBpbnB1dGAsXG5cdCk7XG5cblx0bGV0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXHRpZiAoIWlzQXJyYXkoc2VsZWN0aW9uKSkge1xuXHRcdHNlbGVjdGlvbiA9IFtdO1xuXHR9XG5cblx0Y29uc3QgY2hlY2tlZFZhbHVlcyA9IHNlbGVjdGlvbi5tYXAoKGEpID0+IHtcblx0XHRyZXR1cm4gYS52YWx1ZTtcblx0fSk7XG5cblx0Zm9yIChjb25zdCBlIG9mIGVsZW1lbnRzKSB7XG5cdFx0aWYgKGNoZWNrZWRWYWx1ZXMuaW5kZXhPZihlLnZhbHVlKSAhPT0gLTEpIHtcblx0XHRcdGlmIChlLmNoZWNrZWQgIT09IHRydWUpIGUuY2hlY2tlZCA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChlLmNoZWNrZWQgIT09IGZhbHNlKSBlLmNoZWNrZWQgPSBmYWxzZTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBjb252ZXJ0VmFsdWVUb1NlbGVjdGlvbih2YWx1ZSkge1xuXHRjb25zdCBzZWxlY3Rpb24gPSBbXTtcblxuXHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0dmFsdWUgPSB2YWx1ZVxuXHRcdFx0LnNwbGl0KFwiLFwiKVxuXHRcdFx0Lm1hcCgoYSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYS50cmltKCk7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbHRlcigoYSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYSAhPT0gXCJcIjtcblx0XHRcdH0pO1xuXHR9XG5cblx0aWYgKGlzU3RyaW5nKHZhbHVlKSB8fCBpc0ludGVnZXIodmFsdWUpKSB7XG5cdFx0c2VsZWN0aW9uLnB1c2goe1xuXHRcdFx0bGFiZWw6IGdldFNlbGVjdGlvbkxhYmVsLmNhbGwodGhpcywgdmFsdWUpLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG5cdFx0Zm9yIChjb25zdCB2IG9mIHZhbHVlKSB7XG5cdFx0XHRzZWxlY3Rpb24ucHVzaCh7XG5cdFx0XHRcdGxhYmVsOiBnZXRTZWxlY3Rpb25MYWJlbC5jYWxsKHRoaXMsIHYpLFxuXHRcdFx0XHR2YWx1ZTogdixcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHZhbHVlID0gdmFsdWUuam9pbihcIixcIik7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdHlwZVwiKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0c2VsZWN0aW9uOiBzZWxlY3Rpb24sXG5cdFx0dmFsdWU6IHZhbHVlLFxuXHR9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2FycmF5fSBzZWxlY3Rpb25cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29udmVydFNlbGVjdGlvblRvVmFsdWUoc2VsZWN0aW9uKSB7XG5cdGNvbnN0IHZhbHVlID0gW107XG5cblx0aWYgKGlzQXJyYXkoc2VsZWN0aW9uKSkge1xuXHRcdGZvciAoY29uc3Qgb2JqIG9mIHNlbGVjdGlvbikge1xuXHRcdFx0Y29uc3QgdiA9IG9iaj8uW1widmFsdWVcIl07XG5cdFx0XHRpZiAodiAhPT0gdW5kZWZpbmVkKSB2YWx1ZS5wdXNoKGAke3Z9YCk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMSkge1xuXHRcdGNvbnN0IHYgPSB2YWx1ZS5wb3AoKTtcblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gXCJcIjtcblx0XHRpZiAodiA9PT0gbnVsbCkgcmV0dXJuIFwiXCI7XG5cdFx0cmV0dXJuIGAke3Z9YDtcblx0fVxuXG5cdHJldHVybiB2YWx1ZS5qb2luKFwiLFwiKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHthcnJheX0gc2VsZWN0aW9uXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gc2V0U2VsZWN0aW9uKHNlbGVjdGlvbikge1xuXHRpZiAoaXNTdHJpbmcoc2VsZWN0aW9uKSB8fCBpc0ludGVnZXIoc2VsZWN0aW9uKSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRWYWx1ZVRvU2VsZWN0aW9uLmNhbGwodGhpcywgc2VsZWN0aW9uKTtcblx0XHRzZWxlY3Rpb24gPSByZXN1bHQ/LnNlbGVjdGlvbjtcblx0fSBlbHNlIGlmIChzZWxlY3Rpb24gPT09IHVuZGVmaW5lZCB8fCBzZWxlY3Rpb24gPT09IG51bGwpIHtcblx0XHRzZWxlY3Rpb24gPSBbXTtcblx0fVxuXG5cdHZhbGlkYXRlQXJyYXkoc2VsZWN0aW9uKTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGlvbi5sZW5ndGg7IGkrKykge1xuXHRcdGxldCBsID0gZ2V0U2VsZWN0aW9uTGFiZWwuY2FsbCh0aGlzLCBzZWxlY3Rpb25baV0udmFsdWUpO1xuXHRcdGlmIChsID09PSBzZWxlY3Rpb25baV0udmFsdWUpIHtcblx0XHRcdGwgPSBzZWxlY3Rpb25baV0ubGFiZWw7XG5cdFx0fVxuXG5cdFx0c2VsZWN0aW9uW2ldID0ge1xuXHRcdFx0bGFiZWw6IGwsXG5cdFx0XHR2YWx1ZTogc2VsZWN0aW9uW2ldLnZhbHVlLFxuXHRcdH07XG5cdH1cblxuXHR0aGlzLnNldE9wdGlvbihcInNlbGVjdGlvblwiLCBzZWxlY3Rpb24pO1xuXHRjaGVja09wdGlvblN0YXRlLmNhbGwodGhpcyk7XG5cdHNldFN1bW1hcnlBbmRDb250cm9sVGV4dC5jYWxsKHRoaXMpO1xuXG5cdHRyeSB7XG5cdFx0dGhpcz8uc2V0Rm9ybVZhbHVlKHRoaXMudmFsdWUpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0fVxuXG5cdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItc2VsZWN0ZWRcIiwge1xuXHRcdHNlbGVjdGlvbixcblx0fSk7XG5cblx0ZmlyZUV2ZW50KHRoaXMsIFwiY2hhbmdlXCIpO1xuXG5cdHJldHVybiBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0Y29uc3QgQ0xBU1NOQU1FID0gXCJzZWxlY3RlZFwiO1xuXG5cdFx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgbm90U2VsZWN0ZWQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChcIjpub3QoOmNoZWNrZWQpXCIpO1xuXG5cdFx0aWYgKG5vdFNlbGVjdGVkKSB7XG5cdFx0XHRub3RTZWxlY3RlZC5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudCA9IG5vZGUuY2xvc2VzdChgWyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbl1gKTtcblx0XHRcdFx0aWYgKHBhcmVudCkge1xuXHRcdFx0XHRcdHBhcmVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTTkFNRSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6Y2hlY2tlZFwiKTtcblxuXHRcdGlmIChzZWxlY3RlZCkge1xuXHRcdFx0c2VsZWN0ZWQuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYXJlbnQgPSBub2RlLmNsb3Nlc3QoYFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dYCk7XG5cdFx0XHRcdGlmIChwYXJlbnQpIHtcblx0XHRcdFx0XHRwYXJlbnQuY2xhc3NMaXN0LmFkZChDTEFTU05BTUUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pXG5cdFx0LnJ1bigpXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB0aGUgcmVzdWx0IGNhbm5vdCBiZSBwYXJzZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gZmV0Y2hEYXRhKHVybCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblx0aWYgKCF1cmwpIHVybCA9IHRoaXMuZ2V0T3B0aW9uKFwidXJsXCIpO1xuXHRpZiAoIXVybCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG5cdGNvbnN0IGZldGNoT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiZmV0Y2hcIiwge30pO1xuXG5cdGxldCBkZWxheVdhdGNoID0gZmFsc2U7XG5cblx0Ly8gaWYgZmV0Y2ggc2hvcnQgdGltZSwgZG8gbm90IHNob3cgbG9hZGluZyBiYWRnZSwgYmVjYXVzZSBvZiBmbGlja2VyaW5nXG5cdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0aWYgKGRlbGF5V2F0Y2ggPT09IHRydWUpIHJldHVybjtcblx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwibG9hZGluZ1wiKTtcblx0XHRkZWxheVdhdGNoID0gdHJ1ZTtcblx0fSk7XG5cblx0dXJsID0gZm9ybWF0VVJMLmNhbGwodGhpcywgdXJsKTtcblxuXHRzZWxmW2lzTG9hZGluZ1N5bWJvbF0gPSB0cnVlO1xuXHRjb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblx0cmV0dXJuIGdsb2JhbFxuXHRcdC5mZXRjaCh1cmwsIGZldGNoT3B0aW9ucylcblx0XHQudGhlbigocmVzcG9uc2UpID0+IHtcblx0XHRcdHNlbGZbaXNMb2FkaW5nU3ltYm9sXSA9IGZhbHNlO1xuXHRcdFx0ZGVsYXlXYXRjaCA9IHRydWU7XG5cdFx0XHRjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpO1xuXHRcdFx0aWYgKGNvbnRlbnRUeXBlICYmIGNvbnRlbnRUeXBlLmluZGV4T2YoXCJhcHBsaWNhdGlvbi9qc29uXCIpICE9PSAtMSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UudGV4dCgpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGB1bnN1cHBvcnRlZCByZXNwb25zZSAke2NvbnRlbnRUeXBlfWApO1xuXHRcdH0pXG5cdFx0LnRoZW4oKHRleHQpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoSlNPTi5wYXJzZShTdHJpbmcodGV4dCkpKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInRoZSByZXN1bHQgY2Fubm90IGJlIHBhcnNlZCwgY2hlY2sgdGhlIFVSTFwiKTtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0c2VsZltpc0xvYWRpbmdTeW1ib2xdID0gZmFsc2U7XG5cdFx0XHRkZWxheVdhdGNoID0gdHJ1ZTtcblx0XHRcdHRocm93IGU7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGlkZSgpIHtcblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJjbG9zZWRcIik7XG5cdHJlbW92ZUF0dHJpYnV0ZVRva2VuKHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLCBcImNsYXNzXCIsIFwib3BlblwiKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzaG93KCkge1xuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiLCB1bmRlZmluZWQpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9PT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblxuXHRjb25zdCBsYXp5TG9hZEZsYWcgPVxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMubGF6eUxvYWRcIikgJiYgdGhpc1tsYXp5TG9hZERvbmVTeW1ib2xdICE9PSB0cnVlO1xuXG5cdGlmIChsYXp5TG9hZEZsYWcgPT09IHRydWUpIHtcblx0XHR0aGlzW2xhenlMb2FkRG9uZVN5bWJvbF0gPSB0cnVlO1xuXHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJsb2FkaW5nXCIpO1xuXG5cdFx0bmV3IFByb2Nlc3NpbmcoMjAwLCAoKSA9PiB7XG5cdFx0XHR0aGlzLmZldGNoKClcblx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdGNoZWNrT3B0aW9uU3RhdGUuY2FsbCh0aGlzKTtcblx0XHRcdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHRcdFx0c2hvdy5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJlcnJvclwiKTtcblx0XHRcdFx0fSk7XG5cdFx0fSlcblx0XHRcdC5ydW4oKVxuXHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJlcnJvclwiKTtcblx0XHRcdH0pO1xuXG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgaGFzUG9wcGVyRmlsdGVyRmxhZyA9XG5cdFx0dGhpcy5nZXRPcHRpb24oXCJmaWx0ZXIucG9zaXRpb25cIikgPT09IEZJTFRFUl9QT1NJVElPTl9QT1BQRVIgJiZcblx0XHRnZXRGaWx0ZXJNb2RlLmNhbGwodGhpcykgIT09IEZJTFRFUl9NT0RFX0RJU0FCTEVEO1xuXG5cdGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25FbGVtZW50cy5jYWxsKHRoaXMpO1xuXHRpZiAob3B0aW9ucy5sZW5ndGggPT09IDAgJiYgaGFzUG9wcGVyRmlsdGVyRmxhZyA9PT0gZmFsc2UpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0s7XG5cdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJvcGVuXCIpO1xuXG5cdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLCBcImNsYXNzXCIsIFwib3BlblwiKTtcblxuXHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0Y2FsY0FuZFNldE9wdGlvbnNEaW1lbnNpb24uY2FsbCh0aGlzKTtcblx0XHRmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuXHRcdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJ2aXNpYmlsaXR5XCIpO1xuXHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHR9KVxuXHRcdC5ydW4oKVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0b2dnbGUoKSB7XG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdGhpZGUuY2FsbCh0aGlzKTtcblx0fSBlbHNlIHtcblx0XHRzaG93LmNhbGwodGhpcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGZpcmVzIG1vbnN0ZXItc2VsZWN0aW9uLXJlbW92ZWRcbiAqIEBmaXJlcyBtb25zdGVyLXNlbGVjdGlvbi1jbGVhcmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0c2VsZltjbGVhck9wdGlvbkV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XCJyZW1vdmUtYmFkZ2VcIixcblx0XHQpO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0Y29uc3QgYmFkZ2UgPSBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGVsZW1lbnQsIEFUVFJJQlVURV9ST0xFLCBcImJhZGdlXCIpO1xuXHRcdFx0aWYgKGJhZGdlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBiYWRnZS5nZXRBdHRyaWJ1dGUoYCR7QVRUUklCVVRFX1BSRUZJWH12YWx1ZWApO1xuXG5cdFx0XHRcdGxldCBzZWxlY3Rpb24gPSBzZWxmLmdldE9wdGlvbihcInNlbGVjdGlvblwiKTtcblx0XHRcdFx0c2VsZWN0aW9uID0gc2VsZWN0aW9uLmZpbHRlcigoYikgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSAhPT0gYi52YWx1ZTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0c2V0U2VsZWN0aW9uXG5cdFx0XHRcdFx0LmNhbGwoc2VsZiwgc2VsZWN0aW9uKVxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItc2VsZWN0aW9uLXJlbW92ZWRcIiwge1xuXHRcdFx0XHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHNlbGZbY2xvc2VFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXG5cdFx0Zm9yIChjb25zdCBbLCBlbGVtZW50XSBvZiBPYmplY3QuZW50cmllcyhwYXRoKSkge1xuXHRcdFx0aWYgKGVsZW1lbnQgPT09IHNlbGYpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRoaWRlLmNhbGwoc2VsZik7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHRzZWxmW2lucHV0RXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblx0XHRjb25zdCBlbGVtZW50ID0gcGF0aD8uWzBdO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRlbGVtZW50Lmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgJiZcblx0XHRcdFx0ZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpID09PSBcIm9wdGlvbi1jb250cm9sXCJcblx0XHRcdCkge1xuXHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLWNoYW5nZVwiLCB7XG5cdFx0XHRcdFx0dHlwZTogZXZlbnQudHlwZSxcblx0XHRcdFx0XHR2YWx1ZTogZWxlbWVudC52YWx1ZSxcblx0XHRcdFx0XHRjaGVja2VkOiBlbGVtZW50LmNoZWNrZWQsXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0ZWxlbWVudC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpICYmXG5cdFx0XHRcdGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSA9PT0gXCJmaWx0ZXJcIlxuXHRcdFx0KSB7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0c2VsZltjaGFuZ2VFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Z2F0aGVyU3RhdGUuY2FsbChzZWxmKTtcblx0XHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLWNoYW5nZWRcIiwgZXZlbnQ/LmRldGFpbCk7XG5cdH07XG5cblx0c2VsZltrZXlFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBwYXRoLnNoaWZ0KCk7XG5cblx0XHRsZXQgcm9sZTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkpIHtcblx0XHRcdFx0cm9sZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKTtcblx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudCA9PT0gdGhpcykge1xuXHRcdFx0XHRzaG93LmNhbGwodGhpcyk7XG5cdFx0XHRcdC8vIGZvY3VzRmlsdGVyLmNhbGwoc2VsZik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBlID0gZWxlbWVudC5jbG9zZXN0KGBbJHtBVFRSSUJVVEVfUk9MRX1dYCk7XG5cdFx0XHRcdGlmIChlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZS5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpKSB7XG5cdFx0XHRcdFx0cm9sZSA9IGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0c3dpdGNoIChyb2xlKSB7XG5cdFx0XHRjYXNlIFwiZmlsdGVyXCI6XG5cdFx0XHRcdGhhbmRsZUZpbHRlcktleWJvYXJkRXZlbnRzLmNhbGwoc2VsZiwgZXZlbnQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJvcHRpb24tbGFiZWxcIjpcblx0XHRcdGNhc2UgXCJvcHRpb24tY29udHJvbFwiOlxuXHRcdFx0Y2FzZSBcIm9wdGlvblwiOlxuXHRcdFx0XHRoYW5kbGVPcHRpb25LZXlib2FyZEV2ZW50cy5jYWxsKHNlbGYsIGV2ZW50KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY29udHJvbFwiOlxuXHRcdFx0Y2FzZSBcInRvZ2dsZVwiOlxuXHRcdFx0XHRoYW5kbGVUb2dnbGVLZXlib2FyZEV2ZW50cy5jYWxsKHNlbGYsIGV2ZW50KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9O1xuXG5cdGNvbnN0IHR5cGVzID0gc2VsZi5nZXRPcHRpb24oXCJ0b2dnbGVFdmVudFR5cGVcIiwgW1wiY2xpY2tcIl0pO1xuXG5cdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXModHlwZXMpKSB7XG5cdFx0c2VsZltjb250cm9sRWxlbWVudFN5bWJvbF1cblx0XHRcdC5xdWVyeVNlbGVjdG9yKGBbJHtBVFRSSUJVVEVfUk9MRX09XCJjb250YWluZXJcIl1gKVxuXHRcdFx0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0XHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdFx0XHRldmVudCxcblx0XHRcdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFx0XHRcInJlbW92ZS1iYWRnZVwiLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dG9nZ2xlLmNhbGwoc2VsZik7XG5cdFx0XHR9KTtcblxuXHRcdHNlbGZbY29udHJvbEVsZW1lbnRTeW1ib2xdXG5cdFx0XHQucXVlcnlTZWxlY3RvcihgWyR7QVRUUklCVVRFX1JPTEV9PVwic3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIl1gKVxuXHRcdFx0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0XHRcdGlmIChzZWxmLmdldE9wdGlvbihcImRpc2FibGVkXCIsIHVuZGVmaW5lZCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cdFx0XHRcdGNvbnN0IGVsZW1lbnQgPSBwYXRoPy5bMF07XG5cdFx0XHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHRjb25zdCBjb250cm9sID0gZWxlbWVudC5jbG9zZXN0KFxuXHRcdFx0XHRcdFx0YFske0FUVFJJQlVURV9ST0xFfT1cInN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCJdYCxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmIChjb250cm9sIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdGlmIChjb250cm9sLmNsYXNzTGlzdC5jb250YWlucyhcImNsZWFyXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGNsZWFyU2VsZWN0aW9uLmNhbGwoc2VsZik7XG5cblx0XHRcdFx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1zZWxlY3Rpb24tY2xlYXJlZFwiLCB7fSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdFx0XHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcdFx0XHRcdFx0XCJyZW1vdmUtYmFkZ2VcIixcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHRvZ2dsZS5jYWxsKHNlbGYpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHQvLyBiYWRnZSwgc2VsZWN0aW9uXG5cdFx0c2VsZi5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHNlbGZbY2xlYXJPcHRpb25FdmVudEhhbmRsZXJdKTtcblx0fVxuXG5cdHNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcIm1vbnN0ZXItY2hhbmdlXCIsIHNlbGZbY2hhbmdlRXZlbnRIYW5kbGVyXSk7XG5cdHNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIHNlbGZbaW5wdXRFdmVudEhhbmRsZXJdKTtcblx0c2VsZi5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBzZWxmW2tleUV2ZW50SGFuZGxlcl0pO1xuXG5cdHJldHVybiBzZWxmO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKi9cbmZ1bmN0aW9uIHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzKHN1Z2dlc3Rpb24pIHtcblx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldE9wdGlvbihcInNlbGVjdGlvblwiKTtcblxuXHRcdGNvbnN0IGNsZWFyQWxsRmxhZyA9XG5cdFx0XHRpc0FycmF5KHNlbGVjdGlvbikgJiZcblx0XHRcdHNlbGVjdGlvbi5sZW5ndGggPiAwICYmXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmNsZWFyQWxsXCIpID09PSB0cnVlO1xuXG5cdFx0Y29uc3QgY3VycmVudCA9IHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIpO1xuXG5cdFx0aWYgKHN1Z2dlc3Rpb24gPT09IFwiZXJyb3JcIikge1xuXHRcdFx0aWYgKGN1cnJlbnQgIT09IFwiZXJyb3JcIikge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcImNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZVwiLCBcImVycm9yXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzW2lzTG9hZGluZ1N5bWJvbF0gPT09IHRydWUpIHtcblx0XHRcdGlmIChjdXJyZW50ICE9PSBcImxvYWRpbmdcIikge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcImNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZVwiLCBcImxvYWRpbmdcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHN1Z2dlc3Rpb24gPT09IFwibG9hZGluZ1wiKSB7XG5cdFx0XHRpZiAoY3VycmVudCAhPT0gXCJsb2FkaW5nXCIpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIiwgXCJsb2FkaW5nXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChjbGVhckFsbEZsYWcpIHtcblx0XHRcdGlmIChjdXJyZW50ICE9PSBcImNsZWFyXCIpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIiwgXCJjbGVhclwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAodGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwib3BlblwiKSkge1xuXHRcdFx0aWYgKGN1cnJlbnQgIT09IFwib3BlblwiKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIFwib3BlblwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXHRcdGlmIChcblx0XHRcdG9wdGlvbnMgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0b3B0aW9ucyA9PT0gbnVsbCB8fFxuXHRcdFx0KGlzQXJyYXkob3B0aW9ucykgJiYgb3B0aW9ucy5sZW5ndGggPT09IDApXG5cdFx0KSB7XG5cdFx0XHRpZiAoY3VycmVudCAhPT0gXCJlbXB0eVwiKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIFwiZW1wdHlcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHN1Z2dlc3Rpb24pIHtcblx0XHRcdGlmIChjdXJyZW50ICE9PSBzdWdnZXN0aW9uKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIHN1Z2dlc3Rpb24pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRyb2xdYCxcblx0KTtcblx0dGhpc1tzZWxlY3Rpb25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09c2VsZWN0aW9uXWAsXG5cdCk7XG5cdHRoaXNbY29udGFpbmVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRhaW5lcl1gLFxuXHQpO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1wb3BwZXJdYCxcblx0KTtcblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09ZmlsdGVyXVtuYW1lPVwiaW5saW5lLWZpbHRlclwiXWAsXG5cdCk7XG5cdHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWZpbHRlcl1bbmFtZT1cInBvcHBlci1maWx0ZXJcIl1gLFxuXHQpO1xuXHR0aGlzW3BvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRTeW1ib2xdID1cblx0XHR0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdLnBhcmVudEVsZW1lbnQ7XG5cdHRoaXNbb3B0aW9uc0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25zXWAsXG5cdCk7XG5cdHRoaXNbbm9PcHRpb25zQXZhaWxhYmxlRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PVwibm8tb3B0aW9uc1wiXWAsXG5cdCk7XG5cdHRoaXNbc3RhdHVzT3JSZW1vdmVCYWRnZXNFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNdYCxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVQb3BwZXIoKSB7XG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgIT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIsIGZhbHNlKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbi5jYWxsKHRoaXMpO1xuXHRcdHBvc2l0aW9uUG9wcGVyLmNhbGwoXG5cdFx0XHR0aGlzLFxuXHRcdFx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0sXG5cdFx0XHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLFxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJwb3BwZXJcIiwge30pLFxuXHRcdCk7XG5cdH0pXG5cdFx0LnJ1bigpXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH0pO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDx0ZW1wbGF0ZSBpZD1cIm9wdGlvbnNcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJvcHRpb25cIiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWZpbHRlcmVkIHBhdGg6b3B0aW9ucy5maWx0ZXJlZCxcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXZpc2liaWxpdHkgcGF0aDpvcHRpb25zLnZpc2liaWxpdHlcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgcGFydD1cIm9wdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZGF0YS1tb25zdGVyLXJvbGU9XCJvcHRpb24tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgdHlwZSBwYXRoOnR5cGUsXG4gICAgICAgICAgICByb2xlIHBhdGg6cm9sZSxcbiAgICAgICAgICAgIHZhbHVlIHBhdGg6b3B0aW9ucyB8IGluZGV4OnZhbHVlLCBcbiAgICAgICAgICAgIG5hbWUgcGF0aDpuYW1lLCBcbiAgICAgICAgICAgIHBhcnQgcGF0aDp0eXBlIHwgcHJlZml4Om9wdGlvbi0gfCBzdWZmaXg6IGZvcm0sXG4gICAgICAgICAgICBjbGFzcyBwYXRoOm9wdGlvbnMuY2xhc3MgXG4gICAgICAgICAgICBcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm9wdGlvbnMgfCBpbmRleDpsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgcGFydD1cIm9wdGlvbi1sYWJlbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJzZWxlY3Rpb25cIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJiYWRnZVwiXG4gICAgICAgICAgICAgICAgIHBhcnQ9XCJiYWRnZVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci12YWx1ZSBwYXRoOnNlbGVjdGlvbiB8IGluZGV4OnZhbHVlLCBcbiAgICAgICAgICAgICAgICAgY2xhc3MgcGF0aDpjbGFzc2VzIHwgaW5kZXg6YmFkZ2UsIFxuICAgICAgICBwYXJ0IHBhdGg6dHlwZSB8IHN1ZmZpeDotb3B0aW9uIHwgcHJlZml4OiBmb3JtLVwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpzZWxlY3Rpb24gfCBpbmRleDpsYWJlbFwiIHBhcnQ9XCJiYWRnZS1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImJhZGdlLWxhYmVsXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwicmVtb3ZlLWJhZGdlXCIgZGF0YS1tb25zdGVyLXNlbGVjdC10aGlzXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6ZmVhdHVyZXMuY2xlYXIgfCA/OjpoaWRkZW4gXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwicmVtb3ZlLWJhZGdlXCIgdGFiaW5kZXg9XCItMVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPHNsb3QgY2xhc3M9XCJoaWRkZW5cIj48L3Nsb3Q+XG5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIFxcJHtzZWxlY3RlZH1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwicG9wcGVyXCIgcGFydD1cInBvcHBlclwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cIm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1maWx0ZXItY29udHJvbFwiIHJvbGU9XCJzZWFyY2hcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcm9sZT1cInNlYXJjaGJveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0PVwicG9wcGVyLWZpbHRlclwiIG5hbWU9XCJwb3BwZXItZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4XCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwib3B0aW9uc1wiIGRhdGEtbW9uc3Rlci1yb2xlPVwib3B0aW9uc1wiIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJvcHRpb25zIHBhdGg6b3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cIm5vLW9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cIm5vLW9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm1lc3NhZ2VzLmVtcHR5T3B0aW9uc1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHBhcnQ9XCJzdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc1wiIGRhdGEtbW9uc3Rlci1yb2xlPVwic3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIGA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChTZWxlY3QpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFBvcHBlclN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFBvcHBlclN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRQb3BwZXJTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHBvcHBlciB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja31kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXXthbGlnbi1jb250ZW50OmNlbnRlcjtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bGVmdDowO3BhZGRpbmc6MS4xZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1tb2RhbCl9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl0gZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWFycm93XXtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtoZWlnaHQ6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3otaW5kZXg6LTF9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YWRkQXR0cmlidXRlVG9rZW4sXG5cdHJlbW92ZUF0dHJpYnV0ZVRva2VuLFxufSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfUk9MRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IERlYWRNYW5zU3dpdGNoIH0gZnJvbSBcIi4uLy4uL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXCI7XG5pbXBvcnQgeyBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0sgfSBmcm9tIFwiLi4vZm9ybS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBwb3NpdGlvblBvcHBlciB9IGZyb20gXCIuLi9mb3JtL3V0aWwvZmxvYXRpbmctdWkubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXJTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9wb3BwZXIubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuXG5leHBvcnQgeyBQb3BwZXIgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJDYWxsYmFja1N5bWJvbCA9IFN5bWJvbChcInRpbWVyQ2FsbGJhY2tcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVzaXplT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJyZXNpemVPYnNlcnZlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjbG9zZUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNsb3NlRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBidXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYnV0dG9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhcnJvd0VsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJhcnJvd0VsZW1lbnRcIik7XG5cbi8qKlxuICogQSBQb3BwZXIgaXMgYSBmbG9hdGluZyBVSSBlbGVtZW50IHRoYXQgY2FuIGJlIHNob3duIG9yIGhpZGRlbi5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9sYXlvdXQvcG9wcGVyL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2xheW91dC9wb3BwZXItc2ltcGxlXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9sYXlvdXQvcG9wcGVyLWNsaWNrXG4gKlxuICogQHNpbmNlIDEuNjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIHBvcHBlciB0aGF0IGNhbiBtYWtlIHlvdXIgbGlmZSBlYXNpZXIgYW5kIGFsc28gbG9va3MgZ29vZC5cbiAqIEBmaXJlcyBtb25zdGVyLXBvcHBlci1oaWRlIGZpcmVkIHdoZW4gdGhlIHBvcHBlciBpcyBoaWRlLlxuICogQGZpcmVzIG1vbnN0ZXItcG9wcGVyLWhpZGRlbiBmaXJlZCB3aGVuIHRoZSBwb3BwZXIgaXMgaGlkZGVuLlxuICogQGZpcmVzIG1vbnN0ZXItcG9wcGVyLW9wZW4gZmlyZWQgd2hlbiB0aGUgcG9wcGVyIGlzIG9wZW4uXG4gKiBAZmlyZXMgbW9uc3Rlci1wb3BwZXItb3BlbmVkIGZpcmVkIHdoZW4gdGhlIHBvcHBlciBpcyBvcGVuZWQuXG4gKi9cbmNsYXNzIFBvcHBlciBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9sYXlvdXQvcG9wcGVyQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGhlIHRlbXBsYXRlcyBmb3IgdGhlIGNvbnRyb2wuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBUaGUgbWFpbiB0ZW1wbGF0ZS5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG1vZGUgVGhlIG1vZGUgb2YgdGhlIHBvcHBlci4gUG9zc2libGUgdmFsdWVzIGFyZSBgY2xpY2tgLCBgZW50ZXJgLCBgbWFudWFsYCwgYGZvY3VzYCwgXCJhdXRvXCIgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGVtLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY29udGVudCBUaGUgY29udGVudCBvZiB0aGUgcG9wcGVyLlxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gcG9wcGVyIFRoZSBwb3BwZXIgb3B0aW9ucy5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHBvcHBlci5wbGFjZW1lbnQgVGhlIHBsYWNlbWVudCBvZiB0aGUgcG9wcGVyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGB0b3BgLCBgYm90dG9tYCwgYGxlZnRgIGFuZCBgcmlnaHRgLlxuXHQgKiBAcHJvcGVydHkge2Z1bmN0aW9uW119IHBvcHBlci5taWRkbGV3YXJlIFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvZiB0aGUgcG9wcGVyLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmVhdHVyZXMgVGhlIGZlYXR1cmVzIG9mIHRoZSBwb3BwZXIuXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnQgUHJldmVudHMgdGhlIG9wZW4gZXZlbnQgZnJvbSBiZWluZyBzZW50LlxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0bW9kZTogXCJhdXRvIGZvY3VzXCIsXG5cdFx0XHRjb250ZW50OiBcIjxzbG90Pjwvc2xvdD5cIixcblx0XHRcdHBvcHBlcjoge1xuXHRcdFx0XHRwbGFjZW1lbnQ6IFwidG9wXCIsXG5cdFx0XHRcdG1pZGRsZXdhcmU6IFtcImF1dG9QbGFjZW1lbnRcIiwgXCJzaGlmdFwiLCBcIm9mZnNldDoxNVwiLCBcImFycm93XCJdLFxuXHRcdFx0fSxcblx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdHByZXZlbnRPcGVuRXZlbnRTZW50OiBmYWxzZSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgY29ubmVjdGVkQ2FsbGJhY2tgIG1ldGhvZCBvbiB0aGUgZmlyc3QgY2FsbC5cblx0ICpcblx0ICogQHJldHVybiB7Vm9pZH1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHRhZyBuYW1lIG9mIHRoZSBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItcG9wcGVyXCI7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY3NzIHN0eWxlcyBvZiB0aGUgZWxlbWVudC5cblx0ICpcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtQb3BwZXJTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBjb25uZWN0ZWQgdG8gdGhlIGRvbS5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXG5cdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0YXR0YWNoUmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgZG9tLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXG5cdFx0ZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogV2l0aCB0aGlzIG1ldGhvZCB5b3UgY2FuIHNob3cgdGhlIHBvcHBlci5cblx0ICpcblx0ICogQHJldHVybiB7UG9wcGVyfVxuXHQgKi9cblx0c2hvd0RpYWxvZygpIHtcblx0XHRzaG93LmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogV2l0aCB0aGlzIG1ldGhvZCB5b3UgY2FuIGhpZGUgdGhlIHBvcHBlci5cblx0ICpcblx0ICogQHJldHVybiB7UG9wcGVyfVxuXHQgKi9cblx0aGlkZURpYWxvZygpIHtcblx0XHRoaWRlLmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogV2l0aCB0aGlzIG1ldGhvZCB5b3UgY2FuIHRvZ2dsZSB0aGUgcG9wcGVyLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQb3BwZXJ9XG5cdCAqL1xuXHR0b2dnbGVEaWFsb2coKSB7XG5cdFx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9PT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0XHR0aGlzLmhpZGVEaWFsb2coKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zaG93RGlhbG9nKCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1BvcHBlcn1cbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0dGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHBhdGgpKSB7XG5cdFx0XHRpZiAoZWxlbWVudCA9PT0gdGhpcykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGhpZGUuY2FsbCh0aGlzKTtcblx0fTtcblxuXHRsZXQgbW9kZXMgPSBudWxsO1xuXHRjb25zdCBtb2RlT3B0aW9uID0gdGhpcy5nZXRPcHRpb24oXCJtb2RlXCIpO1xuXG5cdGlmICh0eXBlb2YgbW9kZU9wdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdG1vZGVzID0gbW9kZU9wdGlvbi5zcGxpdChcIiBcIik7XG5cdH1cblxuXHRpZiAoXG5cdFx0bW9kZXMgPT09IG51bGwgfHxcblx0XHRtb2RlcyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0aXNBcnJheShtb2RlcykgPT09IGZhbHNlIHx8XG5cdFx0bW9kZXMubGVuZ3RoID09PSAwXG5cdCkge1xuXHRcdG1vZGVzID0gW1wibWFudWFsXCJdO1xuXHR9XG5cblx0Zm9yIChjb25zdCBbLCBtb2RlXSBvZiBPYmplY3QuZW50cmllcyhtb2RlcykpIHtcblx0XHRpbml0RXZlbnRIYW5kbGVyQnlNb2RlLmNhbGwodGhpcywgbW9kZSk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG1vZGVcbiAqIEByZXR1cm4ge1BvcHBlcn1cbiAqIEB0aHJvd3MgRXJyb3JcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlckJ5TW9kZShtb2RlKSB7XG5cdHN3aXRjaCAobW9kZSkge1xuXHRcdGNhc2UgXCJtYW51YWxcIjpcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcImZvY3VzXCI6XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2hvd0RpYWxvZygpO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5oaWRlRGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcImNsaWNrXCI6XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMudG9nZ2xlRGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJlbnRlclwiOlxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2hvd0RpYWxvZygpO1xuXHRcdFx0fSk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJhdXRvXCI6IC8vIGlzIGhvdmVyXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zaG93RGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnByZXZlbnRPcGVuRXZlbnRTZW50XCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmhpZGVEaWFsb2coKTtcblx0XHRcdH0pO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBFcnJvcihgVW5rbm93biBtb2RlICR7bW9kZX1gKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFJlc2l6ZU9ic2VydmVyKCkge1xuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcblx0XHRpZiAodGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdLnRvdWNoKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdH0pO1xuXHR9KTtcblxuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKHRoaXMucGFyZW50RWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpIHtcblx0aWYgKHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdIGluc3RhbmNlb2YgUmVzaXplT2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5kaXNjb25uZWN0KCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBoaWRlKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLXBvcHBlci1oaWRlXCIsIHtcblx0XHRzZWxmLFxuXHR9KTtcblxuXHRzZWxmW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4oc2VsZltjb250cm9sRWxlbWVudFN5bWJvbF0sIFwiY2xhc3NcIiwgXCJvcGVuXCIpO1xuXG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItcG9wcGVyLWhpZGRlblwiLCB7XG5cdFx0XHRzZWxmLFxuXHRcdH0pO1xuXHR9LCAwKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzaG93KCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRpZiAoc2VsZi5nZXRPcHRpb24oXCJkaXNhYmxlZFwiLCBmYWxzZSkgPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoc2VsZltwb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLXBvcHBlci1vcGVuXCIsIHtcblx0XHRzZWxmLFxuXHR9KTtcblxuXHRzZWxmW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuXHRzZWxmW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0s7XG5cblx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZltjb250cm9sRWxlbWVudFN5bWJvbF0sIFwiY2xhc3NcIiwgXCJvcGVuXCIpO1xuXHR1cGRhdGVQb3BwZXIuY2FsbChzZWxmKTtcblxuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLXBvcHBlci1vcGVuZWRcIiwge1xuXHRcdFx0c2VsZixcblx0XHR9KTtcblx0fSwgMCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdXBkYXRlUG9wcGVyKCkge1xuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ICE9PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiLCBmYWxzZSkgPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRwb3NpdGlvblBvcHBlci5jYWxsKFxuXHRcdHRoaXMsXG5cdFx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0sXG5cdFx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXSxcblx0XHR0aGlzLmdldE9wdGlvbihcInBvcHBlclwiLCB7fSksXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1BvcHBlcn1cbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udHJvbF1gLFxuXHQpO1xuXHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1idXR0b25dYCxcblx0KTtcblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09cG9wcGVyXWAsXG5cdCk7XG5cdHRoaXNbYXJyb3dFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09YXJyb3ddYCxcblx0KTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPHNsb3QgbmFtZT1cImJ1dHRvblwiIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCI+PC9zbG90PlxuXG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwicG9wcGVyXCIgcGFydD1cInBvcHBlclwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cIm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImFycm93XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwiY29udGVudFwiIGNsYXNzPVwiZmxleFwiIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFBvcHBlcik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgUG9wcGVyIGFzIE5ld1BvcHBlciB9IGZyb20gXCIuLi9sYXlvdXQvcG9wcGVyLm1qc1wiO1xuXG5leHBvcnQgeyBQb3BwZXIgfTtcblxuLyoqXG4gKiBAc2luY2UgMS4xMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQGRlcHJlY2F0ZWQgc2luY2UgMy42NS4wXG4gKi9cbmNsYXNzIFBvcHBlciBleHRlbmRzIE5ld1BvcHBlciB7fVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFBvcHBlckJ1dHRvblN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFBvcHBlckJ1dHRvblN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRQb3BwZXJCdXR0b25TdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHBvcHBlcmJ1dHRvbiB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja31kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXXthbGlnbi1jb250ZW50OmNlbnRlcjtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bGVmdDowO3BhZGRpbmc6MS4xZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1tb2RhbCl9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl0gZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWFycm93XXtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtoZWlnaHQ6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3otaW5kZXg6LTF9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnksYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5LC5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnksLm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9YnV0dG9uOmFjdGl2ZSxidXR0b246aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31idXR0b246YWN0aXZle3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfS5tb25zdGVyLWJ1dHRvbi1iYXIsLm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2FsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOnN0cmV0Y2g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5tb25zdGVyLWJ1dHRvbi1ncm91cHtib3gtc2l6aW5nOmJvcmRlci1ib3g7Z2FwOjA7bWFyZ2luOjFyZW0gMH0ubW9uc3Rlci1idXR0b24tZ3JvdXA+Om5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLXJpZ2h0OmNhbGModmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKi0xKX0ubW9uc3Rlci1idXR0b24tZ3JvdXAgOmhvdmVye2JveC1zaGFkb3c6bm9uZX1idXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmxpZ2h0KXtidXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX19QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpSYWxld2F5O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFGSjRBQklBQUFBQXQzQUFBRklRQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHb0U4Rys0NkhJVThCbUEvVTFSQlZFUUFoUWdJZ1FvSm54UVJDQXFCdWd5Qm1uQUxoQ0lBQVRZQ0pBT0lRQVFnQllVVUJ5QU1neHdiZmFRWGFKZWZtTnowWm9sM3Y2MGNQZVpNcEc0SEpTams1cUlJTmc2Q0dNZ2xaZi8vbjNGMGpPR0dEUkExclhlSW5jSklVa05IR242OXFNUkRVOFphampzOVVic210bnFuRTN2M3ZxaVFtZlJRcExrS1c2UVp3YWw2czVJVWlKTlVTVUcvT3dvRFk2QjY3NU9qU2prRFNTTXUycGVkcHU5dkpJTFVsSmQ3MDdEK2VMSHBqWURJNGUxdURuTGpISHZ4cERYR015ZHVMTG4xcXQwRkNRT3lGc0paRTEra0pxM1QrSWU3QkpGSU5PQU5iaTl2VFV6aEk3VzRHbVVMMGxXalQvRlFRaS9tKyt4dVBQMDJvbVJIZTVwbjREZ2ZOWmZuK1I5ejk3OXRtRWVOYXExUnhScUhUalRQTkEySkZFZ3JIZG8vbnQvVy81emJnR0N4aWE2RWtWaUEyRmhZR0l0Um1FMVp2VlV2cXRTdGI3TXZyZDNXNyt0MiswWGRvVG56empZYnA3bVNITEFDa2hNV2dDVEw2czBXdjBBVW9oSmZFcUUzb3BQZDU4aWtKbktsbyszdWFlU0hZSjZmY0ljWGpkK3JLVUVzYUVsVHFsVWxWUm0vTitlLzhpUDBMNUFLb3pObEozLzlpQndzaE02djVKSVVKeWtnVDNmZHJPbXE2TGNzK1orcS9Yc0FYRnhFRWlRSVVhS29zRm43Y3RUKzdCQlM1ZHFEb2xKWHVuYmw3cnR0ekQvdjM4NExmdEphZ0ZGQUxZUEU1QTdnbk1yWkJodDRsWHFzYlpLbWJkcTBUdE9tcG1nTml1Z00yUFlCYzczTXJqcTdHTHNvWEhjVHB0OXVQdkZEejhlTjNnK3N4clBRQXc2RFRGTnAvT1pJOWlpbk5pdFpoUm1wUU9Da2RvQmRBTmpWV2xhdk1pdHdETkpYL3BZSUFrVnduT1Avdlc1eHpvTXc3U0FGQUtVK1p6L2tuUC9aOWorT2Rmckw4S2UydmRLYm1waHV4SlN1TDhFVUFnZ0hJaUJIUCs0NDRFRHp2MVBUUTNZa09jT1NsVEhtajZVc2RmbzJMKy9qcFllN0lIV2NRVWdjZ2twTEZSMVlUVzhDR0tRWDliOEdGQUFBSDl0bzRSSFE2R0x2RlJyaTREaXdUekFBRERNS0RQci9mWjNWL3FkZ1Bta0d6S1RFbVdFWGI3UTN0dGdUWXFvMm5QNi8rOTdYZitGLzlKSEFWc0lJY0FDQlp3UnlrR1Q3Z0NSOFZvaEpjVU9PU0RqaVNiQXBoTW96bTJKUnB0QnRVVzY5WGJORkczSVZ5MktMb2s0OC9MZnNtNTI3SWFxQkxNdUJiT0ZJd2VGVWQwMXZlTCtZOHhXaHR6Y3FUbTJDSVRjNWVMSndTSTRmWWxMWUZJVkhBcy8vVDUzTjQvWXgxaEtHVStIU3FFcmRwUFBuczZmcXFXSnNOYlphQ2xRdGpsT0xVTXNoY2RvQTVUUXNzNEpMYzkwU3hDT01NVUs0S1A5TnNocHpwWDR2d3hLQ2hDQVNSRVJFL0xLc1dSbEp3TktBY1RuWEFoRXkzcjFLSGNaYS9ZZFg1ODQyMC9pYVhtdEdob0NBaUlpQVIyM3YvUDkrS1RBQ0FONWhka0MzeFVDNEVMc2dndmtSMmtyRWpZU0V2MEJLU21IQ2hJdllPQ0FKa0tRZ3lZTU0yUW9VTXpDbzE2Qko4NXFBV0NDZEhlazNBQjBPREwxTHEwUGdUZTNoU3cyZmhpNFhoUHVldVFXRUg2eHRJRVFBYkcyTm01b1Y1NFFGUCt5S2dPMkQ0VDV0L3d6MlhXOTIvcnBxcExUU0lQOHFWOXZMdk9kczBOTFd5WDUxSzZvZmJ2UFpFMXBhZjd3MzE4QzladGhxN2YzMmJmdUw2NFZaSHc1MTRZc201bGdmTmJmRzdXOWxzVUE0RUd6NzIzdnh3R3pwNGZSUittUDhMczVCN0tCMmVESlhjNnh3bEc2OTAydWc3QXpMQThOWTIxQjJkQi9QNXFmT1Y4dDFvbnlMNWpaRERmUUk1Umc4RDk4RnZIc3ZjbEh1SnNyZHZzSnJwYy9Uci9ndS9FZlpKelhVenBXYURqN003K1VQOC84RWtBQVZhQVMvQ1IrWHMvSk40WWFJY08xeEhaY1VhTU1ia2xycEt5N05mUUpLUWNVUmFnb0dtQ1crSEE2RU52YmczM3NsMnBJWVJtRTliSUhiMG1BNmtrNmxONUdkeU1ONUVibVFoeEhLbHdNZ1Q1OGNndzdwZFVSejduZk1jUWZjVTN2SWN6VmtkcmhYOFhIcTQwMTJ0Rk9kN2tUL2E3cDdtODNXQTcxRjdhTzlNK2RqdmRkNmo3ZnhtK0QxUHUzejN1aXJ2bXV5emE1M3RydjkzbFRiODJSVDJLYUZWVUtNTlAzNkJ2UU1DbzBHc0Vka0w4cyt6TGcxRXhiTTBOZ0NXQXhnemY4MkRHMUtYTWZjNHJqTmNRZkhLeFNDdVJ1Qkk1QW9kREREa0dkVjhDblZWRW1FTWFpbjRTYTBBWFRJMFJCTnBPWUFMVnExYVY5dnhKaVV6SEtXQ2lzNm1wMEJ1a3gwNjlHcjc0c25WTmJzb0Nta1ZNb3A1K3BER2FXejJzTERyMmlOdCtvWk8wYjM2WVNJaldjeHZubE4weDBWaGxZb1c0VVJqWFhLeUxHM1kzcW9MZEVhekhBRUVvVnVNbDNERGVFUlZwRy9qZVRFUjBDVVpFVTFtb3RxRm9pd0pGS1VhREZpYWNTbEJKckVqU1FLSi9DU0ZTbVNLazE2MVFsa2RLZXlTWFl6c2RYS2k2STlpa05KTXRDVUtsT3VRcVVxMVZIVDF6cTYrbHpmUU5BSWE1SnBSb3ZXYUVQN1p4dU5tVGpNTEJZdXEzWFVUZ05kUkRkNlVxOUEzM2NieEF6eERET04wSXhhTlZheGQvL3MvYWp4QUU2Sm5QYkZHWmt1QzN1YU5VOEVzRFNMWlZteE9qMVBkOEhReFhTcGVka1hhd2JXNndabzgrNkRyaXVRRkZ3NUlwdm5KaDYvWmdGSks5MzBhRU0yWEozeUpCMERIb3BoYnFnMHVya3ZNSWdZbHRiR1JQY2RrZDdWai9OVjRwYkFiYSsvRTRCakNnOXA1WmVyaS9wZE0wQ0cvN3RYWk54VkUrNmJZYXZRbjZ1bVd3eTNGWGY2Z2crWG5BdEhEZ2prUE5pVWJxcG93dkRVdmJSbGNqNVhaSFl6VjhKaTRObDF2anNPaHJNYXhPSHhlRHdlanovVklISlhuNkgwd2hnNnFGT0VVcVFvMFdMRTBvaExDVEtKMHlRNUxVOXlSUXBTcFVsZlpuQVNCa1dwbENsWG9WS1Y2cWliVEJ0TW1RS1lZV0hWVVVmdEdJdDYybGRuTUgzRXBpVTBxVlFxSGJDTHhPVStFNC8xWExmQkVoektoZ1VjZ1VTaGZ4d21EejlHNUVSQUFITDdGSFJLUXlybnd1eFFmNXJoSEJFQlJJb1NMVVlzelViYzRydE1kcGwyNkZnZDU1dGdRRzh4L2ZBWjJKekl2R2JtbHJjWEFtM3dYS2E3RWxmUGNTMnR4ZnErZWdmaUhHb0RNeHlCUktIdnkzU0ozMFE2VjgrNm1kZlpzYUZWM2VPVUtzV015bmtoeUwxdTRWSTBMMVNKTEl4WHlZenBMeU5xaVd6MFhUcGthVHluMVpEdGk5MG1ZMDJ2MHRVcXR6U0NsK3FySzdySXV2MXY5UkQwc2d4cUdiSm9HR2ZFa2xFMVl6cjI4TzFsMktld1g5TjRBRGFOMWI3TDBJYVJUWE91eTl5aXU4MnBPd0hRQkMrcGxkQ3JPbUswTWcvcjF2UllFbTNEQkVjZ1VlZ21VeDAzRzQrd2l0UWdPZkVSRUNWWlVZM200dG1FSXZ3VUtVcTBHTEUwNGxJQ1R1STB5VHF0RmNsRUNsS2xTYTg2V0VaM0pKdnNGV2k3SXhLSk9Cd09oOFBoY0VUclJOM3REcGxNSnBOaFJJYWlxQWlHWVJnbWNia3N5NE5vei9yb2ZRTDdLY2FsTkQwRk9XM1JHWnVPQlIyeG1WTXhrVWdrRGwwWDd1Sml1dFM4Yk5HYUUrdi9aUU93cWU4NkdJSWVFc0N1b3ZXWWZDcTJ0dnBNT0JON016TzY4R1dYTGh0bWdXMmZmZUhwMU11N3F3WDVORHdUa3BDU2NlZkJreGR2ZmluQVJJUklVYUxGaUtVUmx4SUFpWkUwclZxNjVJb1VTWlVtdmVxVU1ycHMvejFaV0VaNVlCZ0dBQUFBQUFDQTBXWnNkMUNwK0h3K24yL2NPbGs0ckRwU2wxSzNIcjM2amcxQ1R0d3pPY051Q1hZTmdpRFlob3RIMW9nT0xSU3V4OG5pbDRyMmlZYXYwbm9yelh2WjJuWmpaTGZhS0QrVlJnSC9mZ05tcGtGYmhnaUdpVWFjR2ZYTm1LNDlGUHZZOXR2YmNUbTc1KzNmZGFtVzZZU3R3a2R6YUNIWmN2cTBDUzRpVTVabU54TFhHQmUvclFvSGpNUDEvUUVHVk1aRkpnYkRESi81VDNleUJjdkdQU3FUaW1KY0MrWVFVanFHdjJuQzdxM25CMERPcXYyRzNWdmxJaEtJVzhNUlNCUzZ5WlRpTkdGWCtSR0NESHM4UFlJZFRqZEFVQXl2UWt3U0NwcGhOZDIwbXB1TWpRWEtCUWtXSWpRcG1KUlVLWXhLWGNMRGM2a0lmSGFUS2FPTVNjNE1zVlJZUTBlelU2RkxwVnVQM3RMSHV3cHJZZnRoaXdpSEZBV2tTcG1XUnQrNm5KNlUxOEN1eUo4NWoyeDBiMGQ3TjlwaWJxMGxiNE5uVStwTzd0RVVMaWhkVU8yaHJwdGdZWENzeEJGQTNsUTJubUZjM0ZiUmpHQmdDZDZCVUg3cW5YQmJhY2pzSzk5UmZJRE1BRmtCc29PK25aZzhQMEJCZ01JQXRRRWFuOVdRRXM5TUFITkc4NTU0d2ErQXJucXZUVGpwR1M3ZS9pbFBtakFSUG1uc3hXa2RBQVJ5T0w5eUFoeW14N1NHS2xrN0doNDh2RHZOZmRnK0lUQlpwRDlnemdNSUJ3d0JrNXRta0VYSXFxTU1hRVRnL0hVZTI2b0xUVHA0dzRnOVVrWjViZ2J4RUh0Q3lUTFlQSG1KVXEzdUpwcXp2U05jdW1iQmRYWVFza3UxQzkyTjhqVHZERkVVMHJ2ODE3Z21xc0dqUGZSdU5qdmVyVERtSENFNHErcWJ6T2p1SUl2UmFEaHpaMS9WSlVwaGhpT1FLSFF3c1o1VGpndUFCOEN1S3IrWUlNS2V3SW9NTzV4eDllNEFFQlREU1lwbTJPVHk4b0lveVlvYWplalVRYjhKd0QvWEI1aVNzd1VpZ2hBc1JHaFMwQ2d6SnpYTUNUVTFYRVpIYVRBWFRDUVNpY1hiWTRWQ29SZ0xFeHN0bGRDdHhaMWFVbmx1dEdodE9RdDE4L1JVZFZwa0RCdmJTNG5Fb05Gb05CcU5GaWRYbjBXSkxKQ3JVOENVYnFxTWhaR3BtK0Y4RWJCSVVhTEZpS1VSbHhLRUVpVlZMVk55UmdwU3BVbXZ1Z0FaaEFHbHlwU3JVS2xLdGJwbUE2d3JRTGNldmZxYUU3RFRXczZZSG0wRTJkY2xpV1dzV0Uzbm1TN0c1YjZ1R1ZuUG5OdXl5V2JId3hEanBXazZNK2oyMGVZTUxRLzAzVk1tS200Wm5nbEpTTW00OCtESml6ZS9LcmRDa1ZNbEtzeUltbWVaZjBHUXl3SkJFRnhDL3JnZ0NJSWdDSUl6OTBiREV3TVRqOGZqQVVBeGRTNlZzRGNzMWc4d2ZZQ1hyTmQ5OFNIOGdhams1dnVVUHFnNFhEUDlKbTdvR1d2R1h4U2RFTExmcnNFU0VzbVdYVGNNM2NMdEhGU0diU0hCQWpjQ2lVSVhKcUhuTWxPTFJCTGFzblVLMlN1eDF6cW5NQi9aTUdPeC96UHU4b2hEQURBQU9BQUNBQW1BQWtBRFlIZ2xDa0N1TFZBaVNJS0ZDUDBraFdOS1BGVXdiZHlMK3NEQnllZ2thSjJXRU10V3JFNi80dnBXN0c2ZTRtRHcwQmZ4WmhGdDlHdmZoUEVBbXlkNGNNdFVxc1BsNGF5N0d1YWs1dDBONTJPT3dKYUJnU05Ic2syTmg3cUVXWllWcThlK2tzeGpqM0VLU1hnOExOaWxRcUZRekUxZnY1dHZwUVFGdEZJbXlMdGl2VGVXa1FDazVaUmUyUWlKMlpyTFlEVjg2TUJZV1g1eEFQdW5rMXludFoyeDZhYk5yaVhBc2hXcmNma1U2M3kvai9tK2duek44STNZdHh6ZkNlT2lBUGk3WWgxd0JCS0Z6czcyV3JsaWZXYjNuK3NPbWtTaXpYSFRYcG12QW5PZ2VhKzdTOEYxRUhQOG5VNEluRlk0UTVtV3AzQkFMbGVzYTdCejRGdU9iRTRFWFJuaXlrOGh0Q09pazh2bGNzV1lJS3I0L2NITTNYWEljY3lPRHNCWEg5UjNOSUJqVXNkMWZpZGowaWluSDVyaVpmVU9EVGlGUXVsemVheDcrakhaVnl4ZjM4VTN4TGRyK1U3dTQzSDU5S2VnSzk1SnZ3dnlxbjNJZ3hMeVVHMlk0UWdrQ3YxQlREK0l2Q01QTWcwbFZZUkJuU0lRa2FKRWl4RkxJeTRsQ0NUMmhtMHNFQWdFSlREcnFiNGdKMkpZb3pTVUtWZWhVcFhxYk5yWitaaGVqYis1ckhyR3pjY0xRaEpTTXU0OGVQTGl6YS9LelFuTUNFS3dFS0ZKWVlHeU55SzFsdEpVL0o2V21GeFVxTHNJblhTczM0czRBSm5UTlA5SlY4MVpXMDhid294d2pNb0dnKzFnUFB4d0FNZVprQkVFK1ZzdXBzeG85Y1dTNWl2bmFTVXBGSlExVEVidGV5S2pNQUxsU1FoNlJLM2dDQ1FLM2VRVTRqYkVDN3VxL0F5Q0RIdUNCUVRzY01iVnV3TVVCQlREUTl5UUZNMnd5Um55RVN4S3NxSkdVM1JpRURQWEw5RFo1RjRJcEF1U1lDRkNrOElHWlZNRkNkT2tMdUUxSUtWRmxHZ3hZbW5FTmVOQkNWU0prbkpFaitTTUZFbVZKcjNxbURLSXpHbGtTYmJkOUhMazFmeCszZStWQ3BtS29oZ2x5VUJWcWt5NUNwV3FWS2NhVUczVWxmcG9rTWJheE5Bc0xWcTFhVTlHSWxPZnZKbE1wcGpKWkRKYlJqdGFOV2svcnpXb01JSWFOV2VzYXV0MDN5TU8yUHhJSTZNQkU5MXFmb0R5eENTd2dDT1FLSFNUNlFWdURoNWhGWGxwdHJnTWp5QktzcUlhTDE3R2Nka0E1OEE4Z0NZLzMyUExid2tuQ1FCQU5tdEN3Nk5vQnJWSXF6YnRPVXNXVTQwNWxDd1oxdER4NXAxbzdURWRKQmdTR0w3NzdCRWpvOTRhbzlvanRLOWJ2NS9oQU04UmE0NlNqZ21kZUx6TkRNaGlVSG51N1FtRERCWitJVUZpVGNKb0hjbElrU3BOK21aR2NUY0g1SWNCcGNxVVIwV29WS1U2NnFaM3VzZWdGM21uK2JGbHJpcTlCbW1uVjdQYjdHMFJ0Q2FzT3dLUVpFZ2g0ODZESnkvZS9KNkpyejJydnoxMThQazhQcC9QNXkvOU5QSmlyOWdKd3lsS3JVeTVDcFdxVkVmZFZGTnRocldnVlp2MlpJU1llcmVCb0pkSEtlYWVnMEo3VUJlcVI4U08xYW4zcEZBTUtMd0l0VlNKKytGbW5pSEVzRkVRVytwZWtvTTVIcWY1MGx4QkxMdjl6Q01BWlRQUTE3bjlYNWtIRlg3YzZRMkp2YitLU0lzU0xVWXNqYmhtdkpFRVd4TEhKRFhNU0s1SWtWUnAwcXVPSUtPTHpHbGtTYmJkOUhMa3lWZWdNQlc1VUt3a0dXd3BWYVpjaFVwVnFxT21qOXA1cWxOVDMvLzF4c2lBUkNLUlNBQkFCUURBZ0VBZ0VGNGtjSFBBNHkvZjJtN1lHbzVBb3RDVlNTSWFUZVZHRkFBbHgxUklaUnZHYzVqMEpJZW9jeHp6cEt0Y2F5Y3hJMWhTeVYrNjEvR0N3dXpBTWZRTXc2TFRLZDhvc0ZBY3JOVkRQSWVGczZMSEZ4bE55dGllRGpiOEdPUVFiaFNJdGowMmdJZzhPVmJVZmdGL0d0a2FDc01NUnlCUjZENTVtY1BqTGJZa0k4SjB3SndYZi9NMW5vOWRqVFZkV2hwaUQ0TWprQ2owR1lZNmtZMU41UTRFS2dVaFdJalFwTkNqYktvU0NOT2lYb1piVkY5L3pzTGRHWUdnVmJNendKd3o4K21xVTJzalkxQnJjamwzZkcvc2Z6NnE3b2cyWTM0dmZwZFVoZS9DWjJISDh5QUEveFE4RDNteUFJRE5BVnNDQUpiWm54aTJjSDVzMmNSSndWYU9tMldXc3RQR1p4WVpBMUtJUjdtdDNBekFtdGtGVUk1aWxEY0FtMlF3b2pGWEI2cjNJc0J5VnE1bCt0TmFiY3RyRitRckFRK2xraVVXemlIR0tXYzV1MUZVZE1LTWhueGl4bkFVNGxrYUFuby9uaHVTY0VuSHJRNlFFZG9SMkZJUTRHRm5ZSGtmQmdKVHdObDQyclFIN2RWNklCS3g0R0RJUFRTUEF0WUhjdWEvVXplUDFlcFpKTmF0T0FTcUZFUWtZQ1dTaktvbWN2SjRRL2xZbVI2YldpRVdXVklGQU5hSVRPVncyWlZIenI1TXpDLzBpL0Qxa3dFV1ZEL3pUOWI2REc2MzJpSzRVcUM3VFAyVU5ibmtFWTg2NFhZaUtsVytCUzNGVUt4SERRWW8rOEI5eXoxdzRoMDdCYTRRa2t6TDBMR0pHSXJyWitjTlh1QjNQdzZjZWRwQU1VNkd6UlFxRFc3bnRCK2NXaXNGeW8zV0NtUWpMME1tWG9CcU5XUkZJWkk3Z0RYaHRTY3Q4THBCZmtIc1JRNlhwVmZJUnZaQlU4cDg1RjRoSDhFS254bUVZbXUrSzZjWVkzZ1FlMSsvVHpKQUlSRjFjS3ZObW4yUTBNOGFPV3NYalQ5anZCQ3I1MjF4cXRXVkk2YXBMcGVoS2N4WnVXOUJXTEozUUdxZjlKVGl1dnZVMHdkZ2h3LzhJQlJJWDFWdU5ReXNCcVN0Vk5QWFpEdEwrTml2Y3dpMVBnRC81TzBveW0ySis3OG9uMHJ4Z0E5T0NsYTBnTjBKRVBIWS9ZUDRuaElhd2JFSjJIbFVuUjlEYnpmV01QQXZ4a3J0QTE0eDZqckFtWVVjZ1JmUmxabm5ZeHMyeStvd0xEd2tTMlZrM2RmakFBVVZJSmV3RDA2dHorQXV3NnBJcXhUbDRkbWpvR2xZUVhETWIzMUZKUHMrNjdqOVJOZ3NIWWd3d09jWXR1Zks2VmhDTE11YzRORlRidjlwRVFqRk5qTnIwTFdBSkIzWEdIbTR4N25CUmZYbUhRaFEwYnpxbU90VlRueWVTNngxSGJDL2Fyai9YZS83cU1PbDdNMGVVbkRQZ2h5aXNGOHFJb0ZiaGZFZ3F5RDRvM28ySzVSTHJNSllDYUM1Z3JId3VwRE5zVm9YRkkzKzlXWVBhMWx3dk9wOTFmdmFuR2hvbUppcDk3dXBOSG1PSCt5YjEraExJcGRkcjIxUmlBMTNKaWI3OWs2cFRCM2RGQW83MTRwUTF5UlpiVFhNeWRBN21RRTlSRkdoTC9PeHJIamRSbm8wWGRmOXlFZTBuWEZmT2VyelkrRE8zZmlCV0JGTUFtcUZiT2Vna0FxWFRWbzVmUzY2eU9JVmxMQ1NkY3A2OHVlNHlKZWxoVVB0VTZWbTJqbk5BUHF3V2FObm52MXc3SlA2eFFaYXdTSVBsT0ZNRVVHdXpQQ0JiMmRKVXlnWTZROXdyNkpVakpyNk5aY2JFWXdML2N4WmZlYzgyTE9zTUs0OXhYNjI4UDhOcTNUREVjSUFQWnd3aEx3NThoUEtrNUpTb0RCSmdpVExFU3RQQTUwbTdTcVltTlN4NkZOdjBpU2pVMDR6bVRiTllzNENxemZKZmxtQy9ZWkpnTkJ3REFhQmk4ZUJIVDVIQWs0SVFrS3VSRVIyY2VIQ2pTdFhZaEplTU42OEVmejR3Zmp6SnhFZ2dKU2NuRXlnVUF3bEpYZGgxSnlFQytjaGdnWXBUaHhLdkhoMkVpUnlsaVNKcDJUcEtEbzZXMlRJc0ZXbVRGNnk1RUR5NUVNS0ZQQldxQkJma1JJQ0JsVm8xYXBSYXRTeVU2Zk9WdlhxK1dqUXdGZVRKbjZhdGVNd01mRm4wY0ZlcDA0QnVuVFpvbHMzcEVjUHZsNjlrRDU5K0NaTjJ1YVVVNFJPTzQxcjJqU3VPZk4yV3JCQTZFMHlaTWtNNGJ3NWh3c1duQzVhY3Joa3hlbXlOWnNyTnR5dTJ2SzRac2R0elo3SE9zd0dFd3Voa1JpTTdUZzRFQzRlbkIxbmlKQVFib3VkRUJHUkhWeUlJUkxlY0Q1OElYNzg0UHo1UXdJRTJFbE9UcVFSWEhBUTE2VTRoQzdnZ0NFQWcwWUFCd29LRHJ1RWw2K0dxYkZOUExXR0F4REEyKzJtVVNOT2lCZzd0MFNrUzMxb3hlTWtqckZuMklJakp6ak1TVWhPdWtrb0VKU2lqeUdneDJJYS85WmMwM2IrbjgrZ3FrZ1MyOHM3NTZjalVwM3p3VHIrUlBlNlNlcmxVZFQ1YWV1Z2UvQUhnQno5RjRpbndFOHErSDRPdklXMzlGYmVXcnkvQnFNdnYvS1N1cGk5SGtyVmVmRzVaNElhdmZqeVd5K3A0c1ZYeWhlVlQ1bnhJcS96YnZiam9xWFgxWmUwaGowQVlGTVFaczJCa0FnRklHRnd4SFlOQjlYZGFtd3IzczcvQ0lmZ1laaWZoVDlnYTEweXd0emRaWS9oY25lVFlhL2tpejhLQ0JvcmhGWjRnMWxYQkdHV0tBNzUyRWxJZDlhTEs0U0ZOZFYzMjliRzdSSUlLVTRHRXZoanI4TFUxd2pBMjNzOUJtZ2JHalE5N29VS3dxaU92eVBaRVJJQ0tJekE2V1RwV1F3VjZvSmxlM1ZUbGo1VHlQS09qbTROYnZPZy9UOUdWZnhOQTloRmhRRFN3L2ZSanBDRjJXOE9BNjhpQ3lUK2YySC9ERzhDNmUrbTF4L0lJODc5TkEzNXJ3QUE2OFFXQVlnbFRUQXNZQUNFcWVOKzZteTN3WW9BNEYrak5vV2NOUzhPaWFqUVFQN3lNRmF3SWpRUmdTVU1MSTBRN24xUkFYNlJGOFlLSUlKVW9aM3lnQytRMlFvc0NrdE81bHVNSEdVYUUzZUxlOFZqMGhxcFdBcElFYWxPYXBHNnJkVys3cVJBRmNDZVlpa0E0QlBUc0xoL3dVV2ZPYng5UjZVOHFmQTRTS241ZzdZQ1hBU1FDUUJZTjNrQS8vMU4xZi9rNlMvMFkvMW9Ccjc0R1h4eCsyTmYwdSsvN2d2cUMvTHp6MEVmOU9SQnFqbjFQZ0xvWlE4YisxWjBjOGdOL2wvMkRXZk5tZktwWDEwMzd6Mkx4bjNsdEJYVGJFNVo4SVB2ZkcvR0pvU0R5NDZBTXhZMkRnRWhFVEVKR1NVTVRvV2dwa2N4TURKNzI0UjMvZUgxOFNDQ1M0SWt5WFF5Wk1xU3IwQ2hJc1VNYXRTcDE2QkpNeU1UTTR0T2Ivbk5XMzd5dnYvNTJPYys4WVhmL1RzdTNMTE1lVDliZFh0MmNOZXZYdkx5YVBqRkRVK05nUmNOdU9CMXIzbkRMQklHUnlOUUdEeE95am1vVklPTGg2K1VHQXdBa29QOHdKT09oaGJKQk5VdmhwVU5MWnFEVTZKMEtWS2x5Yk9iWGc2dEVoVktsYWxTN2x1VjJyVm8xY2FxVmdkdm5hTVFDY3VXWEhIVjVjaTRXVVFtVW1VME1NQW10Z1FzQlN6dEYzUmJCQmV3RklBdzVsNDFpamNiQm1RcDZ5M0FFTnQ4MmRBa3dqeG56N1A3OFZVVURCL1ZtdUFkK3g1NmNQKyt2WHZHUmtlR2gxWXNYN1oweWVqSThPS2JGeTFjTURRNE1IL2UzRG16Ky90NmU3cTdPanZhMjNLdExkbE1PcFZzYm1yY2dXQTA3UGNlZmVUaGg3cWRkcXZadVArdWRHMjFsc1RBUCtmejZkcjFtb3ArMExKMVRFZ2dTNkN1dkM1b3lBaXViMDEzWVBNTGJZelRiT0RBVFg1WUVpWXljcFU1SVZjUGZKRGxKK29PdWRzdkxPVXlDSEEwZXBTaFJkNGR1SDRLZ0VwTUVPV1pHYjVFRmNNalZKa0JVQlVCUlprQTJaS05Sc0FOMSsxMHhLOHRpNUx2dTlDUU9jWnd4b2J0VkpZU05ZU0ZJMy9lendpTEpkUUVsVkFWcWJGZlZqN0dGWUtVd2lMMk05Y1NkZ05tOExIY3NBSWx2M3QrcFR6aWtnalM4TGhucFJBNHlEcGJPN0JjZWtoTElSdHlyc28zaE9GYmlVMjlGZ21LWTVKODJ4UmQ4cXlsc0ZXa0VIL2JhbjhsbkR2M1p5NWU0RFZHaVozT1FSREJENDY0WG5XVG1vRkRSNTJ1WEpremxmeUNSTjBqRlVMZXFaVkxOUUVYbVZFbERvdFpOT2ZpelE0UkxiaTBLM1ZmUWl1T0tPRVNNRlR2MTNUdmk2Q1Z5VTdXeE1tS1czVWJ0RG1uSTE3eVgzSGNud2pnb2ZvVTRtYVNVbExuSVBvZDB3OHl2NjZvV0lNZFNpR1BVdjJ0Z21BNEVkYTEwRnJudFFtL2VsdGhmd3VoQUhXS3MrSnMvM3pxdFR4U2ZjWmRXdk1Ca0VrbzJPV2Q1aDhWeGtsMXdRMHRXcWZYeGpuYlhUd0R3NW9tV1o1cWR2SElEYktZeHlnOTcwcEp2ekF6OG4zNU9MUmtmU2JkRFRwWmdOTTlsUUptMmlVMy9IMG5neHZIMjlkQWVZMlFEUXZ4WjR6U2hwUWJoQWpCbXdWYkk3RjdJdko3a2lOMUZKR1dOdUFuMHpNRXlSbDBoMk4xN0pDS2lnQ1BLZnk5bkhOT3R6d25JendtZ3V2WlovVE1CY1FsSEFmdzVFeEhEc1hHdUZ1U2VvM3lDSm5aUmIzVzdVZjNhTlo3M0VZSzdrT1NsVkpzd1lZeUpDdGNHTTFHcmo5OGNuSGhrRm11N1BkT3duMVd6UjBoeFRuUlU4YUJKbXhxSDl3UUlJYy9mVVdCSGo4cXJJU2piTzJoUFc3bFJJYW9ESnBLcDZXclZIYjBvbDVMbktMeUZqMlRIZ215OTZBcFo2L2xxMWlOUFk4dndES3o1Z3MrRS9DWklDUHdjYWNxY25SaXIxUnpQc25DZ1FWYWc1VU1yS0dKNnk0K3lQWVpJN3lqS1RKS1NVTjRvVVQ3R1RkaXhPMERrZmNUVWRta2FCenFQYmk1U2lLZkphSkRES1kxWmwxMnUxUkFPa3dTcDd6SG42UWthaXBOTHI2RTBwSGdtSVEwTzN4Qm5XU3lZMjBjdUgyeldZeE5RM3cybUZ3UDh4azVjS2VEc2RVYWtLbExITkpHOHM1eHp5aE50dEVCaVJETlFzY0NsMnYyWkFuMUNpdHhNRWpMTXdHOXAxZER0ZHFpd0pUTkNmTFNxUlMwQXRWdXFRUElzUUNSWkltOHg2NklOd3BUQ01KQzJ2WUhyTk1XTXc1VHhKNFZpNEhnUlJva2lnRktQVHBuNDVKWWd4cWgwYm9xZ3VIUDZJZ2tRVEtWUHA5Qm1DdHlTT0pkNmJ5RTBsUTFkbmt0bGNpR1VtcFFPOXRCbjZBQlJCdlliaC9vWGFwbkNDNzVHR0l4bDhXK1paT2pvSFVodTdOQzI1VUpvTGRvdkMxVm9BaTJGQVhwK000TjFEeUF6VVVqZVN2NXdHN1piZjlFY1Q2ak1ic0oxQnBZL0p0b2w3TjBqcFFoZ0xoY1lmWWVVWjJCWHFHVUg4NVE4UlJ0ejJmUWRuem5sbEIxOGRDRE0zQk0wUlZtTFhHUEZWUmpFZFFoTFA5RGlKdnBOem9VQXZlZzlaQUxmSWpUVmI0ZXQ1dlBNOUFVVkMxMUpZQk15RXBKb0xhd0hWczNBMENORDBjZzIveG5YSk4rSUpXNEFLZjFHU1VhM1ZCY3VNclhsVVlUdWdab096UGZXS1J1YzhxWU1tbE9NS3dsN3gwa0t0c3dsZjJaUnNyajFoZzJ5enFCYVBsQWFNbGtSQzd6RzRXYUhjOEFCcmx5MG1EVmdQaEtnNjBLSUdzbG4xRkZRR29CSFkxVEd2OUtnSnAzVm9vM09CSXVBNDg1b3JoMGMwTkcyTFg2eVNBOXNHY0JhbjJRaG9iZ25pSjZGZXR1S1NIWExwNWVjTjFGaTFvM01nTW1LZHcwSXJGaGo4MUtpVUxEdlJKREk1S1NVbEtBRklLeFZ6Q3VnVXhYcEdnWmZBZ1BFRTkwTmV6S3pweHZIYlBUVnEyZE9hcTg0MkVOOXV5VHpLMkZZdCtXZFFaRGU0VWJlQjE4c3d2bFFVQ2lGcmJMK3lDN1dxbHpaT1ViMlZwWVFadTFtUFVrVDJYeTcyNk5qMGdwVW1vRVdJZXIvRkprZ2tnYkFBTDREaC8wbG81SkRCTUM3a2cwRHR6UG9nRjBLN0xXTFhSMDZQRU4wb29ISDFsdWVKa1FEUElXVTZNWk82TGEyc2d1bkY1MDhDMmxZR1pQbGN4MlhKMXR1WEZicmU1MUNJVVdTaGI0Zm9qNkxnR2NtbGcrVUNpU2l4Y0g5cko2VFRKZEFDMjRBcEdic2E1aGEvTklyK2g5SWVhWElDaVp1OEM0Skx6V1Q3Z0tZVDc2MzkrQUFqTGxwcGRYQUxibXQvemNkWjhuZkkvc3dYTmJaZHc5bVIxU083SWZnWktDLzRNQ3dwQ3c1c0QxajQwd0l1YmR0cEJOY3NWSG11VVB2aGFrc3hNOUY4Qkxrc1EzNk0vQk9KQVF0OFRCQlNVYlNvandLMzJFWWJlUXJ6dVlHYTluV0ZoT0tUbFFCdzlDRmo5alRHNEozTmdEdmV1QWcxVU9oYjRLQXA5cEhnYU1KS2IwU2xvTDdEb2RIc0xqcHRYaGt2T2Fhb2UwQ0hqRFU2dGtLQ0I0MmdaSnpSRGNQbzJ4TmVKclpEeGNYZVYzVjI4SndrMEhKaFUwOEx0R0RRTXFLT1AzVEdvQUk2WW5iRWtSd0RSazNPNGtpNjFJbnFUODEyeEtiaWlvQk1HRTVETHBNS3JpT3BvdkZMdGJJZTl4cU1xL1NUWXN5MFpRRjV5YVphdnAvYStIN3ViRG5wU3NpQndKRmFnQk1pN3dWV2M3VUhxbG13M2ZjTHZ2bW5WUlNGWVJRRW5neG5IdnV4OFExQ1Y3QUlBdUFJRGRBSDFBK0x3ZytnSGdQNEM5UUxnQkFOYWV2T1R3b3FNSFVvTmdtVm1FeURJN0xyeExIRFhYRWs3WkFNSTl6T2JHeUNHRGJrNkc1VWduVHBQYzMralpRTWpZR1V5dU5YZytNL1RpYkkyY0J4Z0p3a2IwYmdpNGZaZjVBQkNXVDdCRFNNOFllUy9KOG5vNElzeFFZazUxd1pLbTQ0Q2p3NnBUZlFqWGpVTHY5ZWpQT1ZLSjNQaFMyaUlmdWxBSzZzTUx1elk1T24vYkh6aFpETjJHYVBoNDY2WkxVVVpFbVdKM1hSRys4QSt2NVlPT2xGSU1SRkI0K0xqV3l1U3VTT2VwM3FyUFdyTkJvUnZHRFdiZ3FjdTk3MTVrWHoyQkVNRlVaWGZodkw5VUQvT3VtNjR3ejgxSWtzU1h2WnVJT3FjWVJDcHQrRFVpZ3N1RTNRN2J2Zzh6OXFFemY4bWZlSEZuNTVzSlJVdUxZeFEzZk1IWnVPN3ZoazhNMDkxUXhMQloxU2UyaVFOVjBkakV1Q0ZUYm55amVhcU5XdERVT2JxSmVKc0J1bklRN1BLV3F2SFBQRnhFWFRNS1JqZkFEYytNOWI3NVdpdEtlTjJUVHdQTWIwUEE5cTJGVVVHU2FMaHNsakRBVUFNTUxkS1lRSFZqY3dwZ1lLb3dhVVFDMTZycmh4QkRSVS9hWmdiRW9VcytBMTBUeGtzbmtTTGpaYXl5UmErUGhLS05qQlQ4TG9TcXJxQkdpcUdTUmlGNVRCQzdoNTNDaW9lRjRXRk1WMXpLNWpEUG9iakhnUDVhOXNCREQxaU84NFdjTDk0Q281RWRjSWtIbE5mSnRmbW1BRXQrQXAxSmF0dzd2NUx4YlNVM21lS0NXczEzY29kUVVZbEpWdis4dG11ckFHb0UxbnBNaFpleFRMb1BMMGtnN1VleTJNTEV1dk0weTQ1S2x3R2xXeEFobkhmTmpaYVdOY002ckpiTWltaTArc3p2OUJCcU91dGZQVkVqSGpJYk5kNXBhYU5tYkgzRkxKdmkxdGxPeE5zb3RkaU93VDluZVBPNytlU0dGRlR6MFRhZDlZZG1BL3BKOHFGYTVnc2Zhb2lzdzYxQW50OE92aisyNDJXSzNSVnIrY3lPQ0dUWFRaN1pxM3lISlFMUitxZnVTYmdQbDRVb1VubkZNcWx1SDlBUDhSaU8xa2Fsc3hlZUhYbmt1TkllOSs2MDZ6aWgxczhPSzg2ZWtNcjZxc0JzOHJ1VXE2eEZIMGdVZlZzT1lhbjNXU3RBUmY3RjUwdjZ3ZHVLYjBZdjJic3AydkN3U3FGYU1BcnJJTHZZVjBxeC9UczZjRDkvUjB2bWI3cStVajRRSkRIZkx3cWExTDJZU2FLZTZvY1dYVDZFaCtWd3VhUnlIc3BMdGlVTWVmcEpSVVlJdmRPcDVZRisvTWhnQkIycGZ3R2prS2NjZit3U0krQlZ6T1hMR2cxY3hXNERWZjlIT2FhSGlTczAvUjNkZlNpOGhkRnhZaDdNd2xGL2p5aHdEYWdGL0NlMnowaHd3RjRYNUpiRHNGSnVBd00wTnF0anNHTURDVjZHSzE5aGpVQURiUk43eUdkaE9oOHV3SEwzMEd6cXlsbWN2N2FJZzdRb2x6UG5Md3JiamNOdjM2WEthRlp6NGk4UFZIaGVRM29RcGFxTEpESTNTRGtFWExITUNKVFphUEt5ZlFUVVdyODZxSGNXNlpUZTVvTTd2YXRORFhrRmxja1VQNkdTVVFoVldpdEYyVzcxOWZQT1pIZTdnOFdyN0ZtMjR5OGhIa1RtUmdWN3ZqUFJYUHE0ZEQ4MGEwYVpnNDNmQlY1dFd2dkk2QUJZT2dmR3V0aThpL2txeFF1TEVHb0cxbzVmVG1tNm5zV1pyZGx1RTJicjBMZ2tkU2g3RjFNUzVwRDBEWkR3OFVpdFdLRm11c3gySDIxeEQvYm03eHhzOE9IMWxpWUpTVnc0WXVqd2h4UzMwQncyNUI3YUNiR3RnSFpVTEltNnVlYXR4ZXlwclZrcStsRm5CbVJWQWQyb1VUNUNWNlBMa1hYNGthS2JkZ1RtRmhqZXNvL0tqQzhJbWxnYkx5ckdLMzhTN0pqcXQxRTVhQ01pWG93YStVUGd5M2JKNTZkb0hJZ3hQUGdid0pyZFd0bE9HSjdNQ04rMDVpNlY3VW1qaWpoU21JL2VvZFhqSTJXeFFIamFtZlZPU1B5bldEdDU4Ym95OHl2TE40cTkzSmhwTDVwV0JuUkc2bGFhMXBFVjVtL3VJQXBSTjdSWG5UaklybW5BMnNIa1pwR2NHNnlzNlplV1h6NmQ4blRUZnRaaFFPYmFCWG1MVk1WcVprZ05ERmdEaTZYbFRZbTljVTJXWWpwelNTRkFTQnRxcXNTb2xpVVBLVWZiQUQxK3BpYldaNXlhWXppL2ZtV3NIUlhpY2ovOU5wMFp6ZmladEozMTExZWRnZkF0WDhXK21tdjI1MWRmRXdGQXRxRzh0ejJ5RHpMaUR0dmFiZXJXK0pxTmJoQ3h0U2dyTTZxNHNsVEpTNDF4YUNwQkdocHBEcnJpUVFXVjdOZ2RqNEY2aFNVam1vTFNCc3RaVGR2ZGZoQVluckJqVWl6bStnd1Z1OHpxaHNXYjN4L0YrNVhFVURVVFFYUUN4d2RIeHk1dmk2WUhuczI4VWlKaDBuN3hJV0MzNWwyc0dWUXFTTEhmMUNON2dDUUtrZUdnUjhhVFdxVy9CbGY1S0NBUWdUbXVMQ3hNelJqakxJc1I0UWczVmpvNithdlh0bXNDSm9aTU9rY2J6RjFLT0hHRDdaR3lrbGNXTXhzZWlEc1NtVXdDU1JieE0rT01WWWd4S2d3dlI1Wk5NQ1I0MU9RdUhzenVRMSthNyt1ZjNnTWVQM0dSR1hITTBHT2RiR2hmZjd6SWFSRUIrT3h2VGgwOThCczNmL0RBWTNwb0R5clFVdTZURUh5VWg1ZHRjaWMrT0NoUUZqZUYrUkR6NHR2cWREOUZ0T0NpQTJrZklIdmVrMlBMUmZ0QU84ZHhZdTRlMExpejdXQnl5K3dEeFg2Wkd1clphYnJ1ekd6V29PK21DK1pGa25Hc0tUdUx6TkhDSkM1SDhnVXpGczUzV3JCVk1nSzNJbE9CRkwvQkVRV205alRtY1I4VUVrMExKL1FFTURmZ1BIVFpDcXFXRi9vS2VldjRVUjRxR1ZVUzV6eEIwTmZ5clFkblQ4d2ZkRWFMdHBjajNKaDRGYS9HVDZZYzVadUFpMkRqdXdjK0liK25PSTd3Nk1hcU8rQ3ZLYTBqemFlZjREcVFvZVVJQWtka201dTVuUE83Wm13VHpBQTVWVWZ4b3VTMkdGQUlNQWhBMVMrZllZVklwUGNYaUZMRkNqbWdlT0V3QVVkRElIdzYwUGdwSk5EMk9GUkZid0lNRWF4aHBLV1c3Mlg3bG13OE9ZV09GdzJkWnNuMmROdjhKcCtmRkk0WmhtVDl3WmNaYTlnU3VBQlRydThodzVrMG1lQ2o3U3NlOWRLZ2dKUFJSZ1VzZVVWSGFrK3h4OE1RMUZHRGhNcWF1bG1uUExuQXREWUFDUzlPVzZKZXhlMUYrNHc5dkprejVVeCtxZ1c4NWpreHd6dzV3V0FXNW1IWnlmek9SYk5NekNPYzVqZFZwaFpzVXBzZStwR2dScHhtWjQrWjg5aTlwTzN4eGhnNVJoKy80YlVDakVwaDYwT1AxL0dXWnJXb3JpN2FaV3VRaStMWkp3WXAwYk5NZWZaaHd4NDk5aW42RkpjQUs0RG1BR1RJaUZXSnhEVHp3bEhmemZ6YXZRWWQ0eVlNeURTWVBDTE5tSkN6dUZGYnBvNUV1aWlRWkptUWxySXprRXhCR21LcDJMVGppa2lQc0tmUHZGMkpkRDR2MUUvczJlMjZzeGdDcnVDQjZNeVpMYnNJUDJUZDl1bk03cnNzdFAySDZGQmdVbE9CNjBDL3pZNHEzUXkwcHJuY0FTN0paTTgxMnlZZEpaTDQ0Z0lETnU0NjJZUmFUenk1SEtxN0xqeGpGT2NieGFYWnBCMHJiWmJVUFRPYi83cXhrZlRQT2daL2RLS1JnR3o3YmZJc29RMER4djN6OTgzTE40WW92b2FibU5aMm5qT0tIblo5c1JkVEdqSnF4SU9ZTWlkbkp3UlpEcGtUMjJwcGtkSVVOWEZTQmhYS0hHdUJoK2hsMytqNWJTcjJYTU83U0IzVkthWDJCanJPTW0xNHErUnNPR0JIc3dZRk5yK2tZTHpxQU0wM25qQjk5R2pxamthRHhNZk9hTnJXNkU5Vk1sQmlsVFZ4Y1dSaUFKZXYvUCtUNGE0TmJZcUVza2RzUzRhNHJWS0xLUUpOQkpRRmJTcmZqdEJtTW9FVUtTdmpmQWxBbFlUalMwUmgxTkhVdE1XSFc0Rm4zMFlVMEk0STlBUFU5cnd0dU4rYmVubFNjdGlFVFJZbTRnNGo3dDRBSkpHb2Nlb2tPUmdRTTh6MGZIOU5MTGFTUVJFOFdjQzRGZmthc0NiWmhYNms0c1NiR1hOTkxkSXZtUUhPQkdvR1Y0dGdOSzBzOTN4ZkF2cmk3ZW1NQWhhVWdjR0l5eWZmZVhTcGJIZzkvZDhtOTV1OC90K1R1Ny90KzdhNFR4L3NvL2U1TlB3enNwdktSck5UajF6cC9rL2Ivelgyb0UvLy8yU1dlK05xdmdtUmRVMGFLandSSXYxNnBFNUZVZW56YjNvNzVBamdIRU9rSUY5K0dYSTlmRU5ZS0g5Y1JrUHlxUTFHaFBYUytMTEdubVgyZUc1OWs1VFp1eXJGWE05RG1UN0tsNExtbVJ6WVlMaTVSMmZEa3NLSWJmQzVya3hnQURiNlIydVRmZW8xL0phSlA0WjJ0UWJ2NzVpYnVHOXZRYStvTStYYXVpS2FIWnM5MXJJeVFXK3JCbUlvZ3Y0WUV6aDMxOWZkdDZlZ3I4NjVkV1Y1NjRySitKU0srRzdpVStJZWJqL2VMeGZJOWhGWE92RXhjVmROQzk1U3h4MHA5SS9hVXoyYVZZeFh2YXE1YTlqaW03Mm1TY2JzQXoyTGEwT09icjB2Q1E5WUhkaEFwTGxYYS9XTXVvdytjLytxVnYwRHlxTXBYTEptZkVMWDhFYURidTF4ditFV3RKQnZvb1QwYStrVzJPbG00MlkzQWtSbURRWVg2UHJqWld2OTJwSmtVQk5pWDZnbzJkTGhlOFlqRVFPMXd5cWN2L1AyajJ1aTVIMlB5eXRPZDNKT0FNN3UxRTIyL0ZxbmZVUnJkdmIwNGk3b1g0TkRyeWZKTFJvdURJN2FtcnZWcTl3KzdhcDAxNGpGRnhxeE4vZXFWN3I4MmFtYWM3MTI1VUN3dVVkWDYraWxBaWxrdnNXdUdBaFZxbzJPK1ZPSytkV0NmUWNaN1NxQytPcTkvcnJNUElNenVNU2E3S0cyRmpOZ2lMY2szLytvNVZ0RE4xRnhEalJwc2l4TTNqWnd5d1NrQ3NJcnhCR2xtZXhLT3V5WFNxd1gxSXdXaktuVWFOU3J4djdtenFOdVRsVVVWWnEwM2NsYSt3L0xkQk82Vzg1c1VidElLSVlWS0w2SDdIaFdVck9yNENGcVpQRHhtKy9XaDVSUEhxWDRMUk55SWdqUEYwZVVsRElUdEhPZXFyYnVuL1ZUaWZVS3dXaWhtSXBBbzE0Ti9wL2dTcXpnN2x1ajByN1dLS042T0NQeGw0WExCMUJid0tFR3ZZd3F5elViTzduTnF2ckhtN3RvZnFCTTBkTG5kcXV2ZEVMQjhtQjVuMXpQV09qYTVKQXFTRVFyWGRDSDNQRGV3bjJoK3dvSmEvV1N3c1loSzlNaldzbDA2N290M0FGRHNsWG44N2RTaGlSbnZ2bWE2Qk92OG5RT21IVVFUUnd2WFc5L0Q2clFjUzAyWGozM0RiSS92eitmWElidVNwVnZWcXZIMVhmTnZYdXVtaGczVm15K3JRaHlqVjl5WG5SYTJiMmxMZGEvakg4YmJhVXQ3TjZhNFBpbFRaYzNtYmxqSmJveXpvdmNvdTh1ei91UElORHo4ODRST2o2d1cyMTB0eU8wb3JGVW9QWFhOUWJrOVpKWEdWa3JvRzZaTXk5WFVQTGEwejZyU2dxbGdYS2xiVkJicTQwcWNYOTMvdDBQY1p2c2tWSmx0TTFPeWJodktreXRLT1lNL3VWMHNWZ1RVZUlCRldGZzJ1VU8wRGZ6RjliV0JYdGpEanZTSUhsVjI4MmtuQmxML2IvOU5qcTR3TStNQmd0bkVSZUQ1bHpXWURTMkdxMHYvMENibTZSYTEzd0g1QS9ya3R5ZkxlM1kyczhxOXJ4Yi9LdXJHSWptSEhwUS9zYTlGKzNHMWpSbE5tWW9RdzVYMDhYMmZ2clRQbUtTWkR4ZGpNdlVwTEpIcERrZEJiY3h3UlQ2QnhHQ0JzUXgxS3J0U1Rtc2VBQ1pCeDJ3a1YzamZMVFkwSUo2Z2tpN0tlUWNYdWdMK3ViUWo1WFBidERvekJtem9jdFJhK3pOMmt5UXV3WWJLWDNuY29PMFdsa1FzSS9PQ1hyY2ZiN1BHSEpmeWY0VFB2OE9WaTJ0c0p5Yll6Y2JNcmdyQk9YR0pQdS9PaG1CRUpVZmpnbmlHQzZKN3dnQ3VHQzh4eVZSRk5rVW5kNUFWcUgzTEhBeTgxd2swdVJ5SldHZGI4ajcySUMwbGM3TmIyc2dmTTI2ZVVPMllmYncrMW1LU21YMEpsUFdaR3cxVVliNkRHa3laU2xEZXNOdDFiVVhsMFo1bzZFZmU1MEFXbXhzUWQxQnBNTVlkQTR2OVB1RFF3SFhpSDk2Q2I1c01lZlNCb01oWjhTYU0vcS85QzZiTEM1TkdZMHBLZ2haTy8zMnFUMFZVQVlxSFdER3FWYUpoOFRWSDk3TjBSbmlrYXBkeWwybkJKSVpWQnFqdzFDcmpnTGE2V0F6Wm5CM2VZRWhvc3JMNUFZSVoyYTJjeHJuYkwvV1JpVVJmZGkwNE14czI2VHNHMU9sWXYvUEg0Y0FoVG9nSittYXVFSWxpZTBJQXJKTEpORG1iSE1vRTBxci82aUxuQ1NqMTRkOE5INXFhVlc5UVJBdElvdTB5N05rdHV4RVhPTFVHYzZrMjJEOS9UYzJzL2pmblJBaEpJU2hqQXUrNlcyMTREMVFNZkVCZThuZ0krUWtlY09tTkgvNytTbWRNUEdkYmlFMHlhdGd2N052R3I4S0JiQ3lJQWwwMmxvY2RFZTYydXZjYTd1czJkY3V5Zks1eUNMMXN2SmVkNjJ6THJ3UzhuUjduZGloMlJXTkJ2aFN0N29wVzRzM0tHdjlKNEk0bjhmU0tDUHVYcU5BZWFOUlVDUXZObWFWVEJCdU54amhObmN3aXhvTUdkUnpybTh6R3VEMnpTbnpaMFlidWpKV2t5bHJNL1RZZDlZZEVveW1qTjNZYmIzclZyYndYQnpwb1BXSnZCM1VlYzg3MTUrNXNiWENLWk5wa0NLNDJEZmtjNDJFd3E3UlJYNmZQbzI1b3VmNWlkR1dldDg4cDJ0a1dxS3doRmdKV0hNdFJyTTVaNXkxLzY3VDNDUlI2MXN4WDR6VXU2TXBGRGRucklidVdnZlZ6YW5mMkZ0Sktjc24vNnJNclNuS2FFemEwK2MrSENwbStyei9lY2dUUk4rLy9iVldZd3AzaGFHYzNtOWRNanRRaHhOKzJDR0lvU3BKZkhzUXdnWGp2YVJsUDN0SENBSzArZE84MnBoUUdqZVljOVo5dU80dW5hdzBVK3V3cE5TT3FMUk5iZFgwTkR1c21BOE9WVDBua0RWOUpWQUY0QUZSbk04dE5qVGh0U0ZaVG05QTJsMkJOS2EzNXFuMkV5ZElUMkowTG83N29UblFremFkLzJzeEVVU0sveHBBcmJydWxCMWdKajM1ZlZHVzIwTVdhVlk5V3VSbTNWSXhyZWJmNHRwKzVaS094NXNoUFZObkpJRXVQOGNXOFlzY1NoM3BhcEpTOXJSODhQRE9MTEVHT2pjWEViKzVhLytsWnNsL2hHOU9ndnVidkNkL2NYMmRUaFZLS0EyVjZncjVKeHdJOFp4QUNGb3A5V3V1YXZOdDJsUXphYUxxRkdxdkdoVFNna3VSOG9iK3NCWU9lL1Zkb3U5RkZNOTU2cmhROE1PWWVGTkFHWGlHZkdaVU9icE1tT1ZMdmlUNS9tTTRDYmZUclM0OGp0aTlmL25KQ2RjeDZTMnpOUG5KL0x4SHROanJxYXRmS0RLUzVNMXZaMUN2ZmY3NjUyU0lWcCtlUWJvQXZxQU1HVjZQcjUzNGRQYU5wczlVM2ljOVR4S1Z0bis4U0FNekh0bFl2dnpocnkzdkY3NVhZSG5vcTJYTEh2N0svRzdCZTRVMWc0Zi9XVlcvUmlIeEM3MC96NkNPZnY3YTV6cmgvcHovSkwxSzh3YXJhT2J0MWxmNjVBOUNjMStaSTMrVTd3R21WWVRKb2g2U2tqMWcxNWNjMlM1NWQ4L0x3dUxZUE9BZUVJQUlCTTRnTDdvV3EyTC95VGNPclBMZTVZTFU4TTdPN3RzK2ZCc21Wdko5Y05WVUVYbnE2Q25TZ0RzckVQV1JSc0RaTUpzbisrYUZXNktZaHJHVTUyb1M1UmdhNXZtVkZRdVZDOHNoZVlWWkZqQVoxRnZqOVFuSEg5TFhlS3krOWljVEV5eTZpNVd6ZWh1aCsrcTcxeHg3RmxIdFhNU0VKNlpoaGVTUTVENXovVVVWaTVTTFhJbGR1T3kreEVmTUM1RDBzUXpwcmlYVTlSYW4vVE9KcWtFdFdIZTJ6S055ZWlKKzVvN2kwVlZZMjZ6cFh3Q2x4Y2ZTWkQ5Qzc1MS9wY3lZTXZDMTR6TEpWZXhVUmgvWDRuVnFVcFVJWExkcnNBdXBWdFZ0ZnV3WnI5Z0xNUElpUk1zVmpxOWdhSnpHclZKQ1NjZW13WWpmUHhBQm5sVHFRRlFkakk1SE5vZTFDNU8wMVpLaWdZV0JMWUJkTE5Zay9aZGV4Um9WNFNCMmZMdzFjMFhDSXZtenEwcXJ5RktCU2ppVGtmb1ladlRvN3dzckFNSFpmelJBNTlZakJaVzZQMTArdnNwZWorRWVCWnJaOHVlZDA4NTZ5c0M1QkRmdysxY3VFb3BvcmFaVWw5WVZHbkxzalJCWkV4UE5KZ0tCMXNabUhsNlRhQXpZOEcxZUdXRk5HNktDYytQMUlvMHRxOUxIS1lYVWZady9mOFdSTk43M0JmaDVra2dlcWY4WldTMll2a3MzRWo3cGZxaTcxbTVvSk1nR0k2Vk4xT0Y2TW8yL3I0bHVibEFUUnQ2cEJrQk45NW50WFl6SDJUL1B6TVYrWWVpNTg1eHVUVDFZUy84MlY3ZW5OVlpyYTNWUzZPR0JnQyt5c0lWK1kzZUtYcjNBRS9BTzBzNzVsOVlZMHBTTEdxbFVCa2lvRFIveFZEcXQ1Ny9BM2FrKzFUZHVMdUc5YVdmU0F4cVhiNDdSbGpXcThZQ2JEQW0zWUJBR082K0hPUXA1bUhNZHBqRVl1MU40RDZOWEJQZ0l0b2xoQStvbWhjbW5SZEJSTndzZ211VW1mKzh5RkkySUVIbFliRzFaTVF6QjBMRGtOd0hrRTdUVzRmenUzQzB4aHpWM2IybDYxWkFuNkJtU0tlRmFLU01JR0tsa2VBOXg2NHE5K1hOZHZuNW9tWTJXcnd6MTlkY3kvdG1NZnc2MDNPS1Vyd2oxenE1VjkzQWs4NnlaUnFQRmxyUlljcUk1cFBHOGp6M1RiRFRWV0MydHYrOHFGcXNJSTdHaFp5cysrVDFMWFRQM3k0L3p5TGNhYlQ3TjdkQUUzZFR0aWJqTW96eWtWb0tlQUdZMnhxRzZzMktJZTdSSmFnM2tUT29NWmNEOGJuVkVKcVlGNFZySGE2TDdpVEpwa2JNWGMwVHFPR3pLblZHYURVMkkxb1dwelV3ZjVBTlZZTStnbXlFMDdnUk1NaDBXSXNaeVVVbWhodW5YV1pNbTVmKy9IYnZzMDhtREtyT3JjYTVhc0c1aURqN2FKYlk0MFhuT3NFWmNVcXdiRHYvbGZyRGJVZFdweVhxSGF0Y3hiWFRUVGdiZUo3OGVYRjVuM3p5TFpQRnZyT0RnbmhPQnAvdkhUYVdMV2hINlRkbjgzZlI3c3RFeS9YNXY3c3JRSzFYWHZGMk5hWVBSTnFScURCaTQwZi9uNnhRbCtMNVE3WVorNDNwa0VOOVR6QUNZbW9HdWNUeFNpT2N0WW9BM0poQlp5S1hWd2p1Y3ZCbzVHSFJxMWNpS09ML3N1Z1Q0Q0dobStndzdLOEVLeHp2U3ZQNHhCOVlKbVdVN0p5OCtJcFU2REVBMS82NFJQYzBJTlQ2M1N5TVpHd1B2MzhlUHM2NEM3RmNMYXh1MHFjNnE2dDBRNlZFQ2NFTEpjS1ZjMmd1Q0lJMnFsWjkrdS9uWjF3Y2xHQ05va3dESHhyNGVScVNIdlh6dTFPeWZwSC8vejc5aEJzeXpUMjk5YlZVNGRobDFpWWNSNUVtdkJOTkVsTkkxQWxvcTF6RVVKbEY2Uk5MTjB3RDg4TGZ2N3AwK0NiNE9iSmVxMlhOV3cxdTlvQW9OSXAvbUpYd3BLL3ptaDkzNVBnUVBaUmFOUk5KTlBwVWZ2T2ZlT05sZGhGQW8yZ3FBVzhWQ1FkbFdGMjczRFpENmFaTnlWbTZPN0ZsZkRhcnlpcnZFOG1mUTN5NUxwSGZSSEFDNGVKZEU4dXZNclRYYUdxWkRKT3JVODJzYUZ3akVYZkRwanpnbFU0Zy9kUU00SjZhMDRqei8xVUxjaitUZi9ORlRpTldYeXV2OUhVQXczQXZlQlNNSC9DRHV5elNIUjlNTGZRK0JXOHNFUXRFMkVGZ21GQXFKcGRYZmgvU3k4M1dPZXllNUxGaUhnS0VwSjNobC83V0JiNEYxcmw1T1d3WElQaktaQngxeG9YQzE4OXdkdngvaXp1RmRYanFDUEkxUFZGOENPSzk2ajRkTWRqa0JkS3JpdFNIVTduZ0ozZC8zZjd6L0oxazhFelQzenhTTkJhcGgrYjZ5MVRXMHJGcU1Lb2RjKzFTMUZIMHlMcURDQXZEcHZMZy9iVUVxdGZGZnA2cHhwdGxMK0tDRFRzQjExeDJKbDRvNEwxeXZLY205VXVNVllNY3Y2WlFja3U5V091dU9za3VyYis0Y1BwVlBudC8xNFpzYlNDZE9CZVVZNWdPM0FVZTYwU0x2dytCU3NhcGF5cmVFSjBwc1pmLzNXaE9mRkh6bzdvTit6enp2LzNsOGpNVnByc3k4d0VsV1pTcU82SVJNZHVYa1Q0OUlwV29LcUM2K3EwR3ZjUWsxSHNhbGtUd3hkc043NnZoSHJJdkFQMllSWFpMaU5MOHJIc1hmTEpsUzNNV3d0ekhjdkRjZzMrZm1ibTlUOXY1YkgzOWMzRGorekxqbDJmRVMxNlZ1dkx1b29KRFgwOFBqOUN6bWNXL3U1ZkI2dTR0Y2h4dXhSdlJ6eXhWdDhiSm9WYk91bVJVdFl4cnh4bkRNdzJFenZOeDM1M1RueU85NmREM3NXLzhsKzV6V2JKM3NLVjM4MlhMeXl3M0tXM1JmNFBvdlBrMjNNcVJjb3Z0eXZYeW41aU5jKzlHbmk4REN5V3NDOWlrakhOVGVTek1mZkZOZjdjd2NDdkVlZk5aTGU4Z2xobUZHNFBpYjRqdE5DUkVLdWJuekpWNDF1bW1ELzhGTVd6K0Z2dEdCZDNDMHB2SmQwNGN6UlRXYSs1aHhFWmRBOHhmRmM1cmpJdXhkQSt4NHo3TGN5OC8yQ0E2cERnR0g4RVBsbnByRHFzT3p2SWNiOFVaRlhxNW1OMXdkNVNMam40K2JQeHN2Y2FxSU5VUlJvL3pXMlRhOXBYamR2OWYzRmt1TldLem96d3FncXJ4U1VYYW1lUWFYcFN5TVlXVzZsN0JZb1pMRm5lSDdyMHdobTZvQ0ttN01pR0ZHYWZINmYyN3NLV2FYcGVVbDNSajFBb1dWTkdPR0Z3eFlkMGxKUUxJbi9ycXh0VE9tU3NKZDNCNTFoQm16cFJvUDJWYklWaFI5bXJSTFY5aFgzTnRvVFRGakVUV25CK25DazdsT1UydnM5U0xYWmVJaWtUcWZhSmFldndKRnhibERxdmQzdnI5RGRXNy8rNkpGQVByL3YwN3IyUTZqUWZUUWU2THpXUFBCamcrdWQvNFFoSHdkTnZVZmRLUHN0bXhadGlxcnk3S3lnYThZeHlzb2JWOUdxdHRqNEN0Z3RiT0d2aXZycU03b002eU9zbHQ1WlpoL2tzcXFod2ZBQnJVOUpFdHIzS2JGZlJGUDRjMlNtNFA1N2ZTdXFXVlI3Ti9YUlM1dWNHbnByeDVUdlFDZS84VW9SZVRxSE1qTEQ4WXIvdWFHNUhzbnV4NlJBWTkyZWJ4UGVMM1R6UktKV2U3M0R2czlIWThDd080T3Izdlk2Mm1ucGVicGJzOGRtczhVc1hFWW5vQ2NjZ1ZFajhQUVY1Q3JCS3JVTElJS2x1NDZlMmNCeUlPVzZ5WmJDclpoL1Q5MVE3NjZRZFRxY0pXYk9pbzZYMEorMUY5ZDNJR29PM1FrQjFVaElyTE50SlQxL2RmLzZ0ZDlQL245MDYrWEZja3BCd1BtT29UTzZIVStYR2NJakh3T3lMUkRIcVduRUMwdyt1ZkoxSktnZ3BFd2NqVVJqdUVhZmRiMHlmOUxJbG9VWE1DRHdMOFZMbkZZQzhUVTdxVlYraXJScnkveFdTK05MZDAxUnlCQ1VUR3Y5MmI1WFYxSlpQNS9OVHZnSFVkMVI3ZkQyNFdmRGlDcE0yM20xM054Sm1LeDl1a3JybGhGN3pDNlpydDgrMXJmdGUyNFZlNGk5SGEwYU5VSit4WExCL1dmWmZFcnlwY3RYN0hpSHo5bDVOTG1CSjdBVEhFOGZ2SXdkanZHZDMrQ1lBamFUa2tsMy96M3dCVmo4dk1tenZEQVZiYXNBZ0tHMU9mQWpJbUoyV0VQWnNGTTJJWmI1TGRzU0wrN0JNejV3cnZONlJxeFNGVEQvK1c3QWlEL1R2T0lXSnI5azh0NTVYaCsxYVgyVTZxbmx4TXpHMmFRY0x2ekdYYWZ0MG9PY0ZXdkVWMlpxUXJCdERVTzRETEt2RDhmSmlVdlArZnRoQWZraWdHUWlsTkFqdEJVWXFYNC82ZUZrcyt1QzBYSHpxZEtXMDd5TmtKVHpudTIrL1JHNkRIZ2VsYWJtM3o5YlVkNVh6cTQydGpaWTlwU1h4a3NkLzdtbHN0bUh2RytPNlhVZTJJQk16bFN6OFZ4VDhVRmtoMmVReUorM3RmL0cySkNsZUhzYnpQOTBCYlJuQ2F1OUFtdWM2WlBHQ1JYcEhQRGxOYzlTbVl6MVBLUW4xeWViaDJodk1wUXRmYkl3cnBxTkxURzFObGwyaHh2c0czcWFWOUxiYXc1K2RiR2F2UXBOMXNIT3l1MndKTGY1VksrVU9ucEhUMm9veHY0cU1vZFZXZ0pIN0JOZ1pIZU92dGZkL3N0S0lOcmNuVlN6TnhDdXBQUWtBUDM0eXNUblFObXQ3VmJaYSszVU5wWWdqNVpIakJza0tLMFFRdHR6eGRYWHB4OGRjT0RydEp2QjNZdFgzOUc2ZjFUWlkvYlZmWkUvb2lKN3NVRExsdDl0L0taRGMxNXIvZGtldU1iNHVDdVY0OVpFUXlrbjJSWU10bTlSUU4vbDNXR0FCWGtGTDZJb0hmOG42ZHZBa2hHTHloN2JlZ3ZoYzRVU0NvSWNQbmVxYWVYWHZnZ3dBZWR3dDJ3STY0NURYbksxMjFIaFlCeWpWSzA2Tks0LzQ4YUx2b1hVeTJ0NFNwZS9rVjJ6L1RZV3FxajNiQTJHakdzN1dqYm83SFlPbXJXb0NVU1BiTjJ1Q1ZSc1crRVNEWHJSdngrY2lTWkd0WDRmYjVSS3FVZDlubnRWQnArOUl4MFluRUpiVVVhS1dWTkhjWFVLOHkxblpSN2lvOURMUHlmUFN5WFRDVngxNzRucWxsNDlva2IzYXdJTEtodVBhTFdQWFhOdXp1OTJ1SEVPYUo0K2VqNXZhK05xRjVEeG1RMEtIdHl4am5qMDZwNUI5YTk0ZjNhcDZvL01WVWF2ZjB6V1BKQTdoSjhLWWVjNWVXVEF2aE02a1ZKOHNVemlJRE12S1hVYjVCK0pKVzV0OUpSbWZRb1RoK3RabjE0b29wMXRMR3RlR1o3VTlPMG1jNWx5ZFdiQXpZWGJkeDJwK3BPL0M4elNRVkdqTy9CM3RsRDdPODgzRmsyTnFWV0hwcHBXcG5FazFuL21wWm9WNmFKZEpIbU83TzlRVkpTdjBodGE3Q1U0SnR5Y2JndC9tbERyZjRVWjhFUGdLVWcvQ2NJL2dHREpmV043RWtlK3dTYjlUdVhOMWttM0NCZUM3STVudDRDb0RBbG1pNFExRE44UVhkdkFWZzQyMDd4OWZmQklyaW8vcnMvSzF4YVY2UnM5eHM3WHprb1NDM2pReW1Cb0FuYzBmTUdwQmhocHJQZXR2eDlycmRYc3ptZTRRS2dzSjhZUHIwYWFidW5xZ0F4TVFUUUR2K05QY3d4ajJPeU02ZHUvM2ZubWovR3YxMWtQUUlCZk5CY0N3S1R3M1VnUzV3RnJBQWRSeFZ3UmdXOHFRSXVoMXRIS2xPa3I5cll5MThmYW93aVcyc2c2N1lHTDFqSlpNSlV3b2NxNFR1VnlCMi83UUtLN1hRYm9QR3dCcUxXUUQ3V1FMN1hRSDZ6WVEwSUkzN282KzJnYUFINzEyM2QzN2MvUERkY0swSUFoL3ViRVhLM0NXd0hwMkV5UE95Ykg5clltZjBCMlBzaEFQTXNTSFptY2V2NEZzZnV4ZjM5eGYyelYvLzdENHNYa2JnWmh0bDhxd1lPcUlFSDFHQ2YrOEVmTDlOcU01K0d6VmYybjIvK01FZTBtVWV0WmNCZS9TSG9ja1ljY0o3NEJyeDZkUmdBb0QwNEIwNzBxY2hvellMa1dvYjY1YTV2OG1lV0ptb21BR3B3bVBJZlFCZ1c1TzhXYWpBSHZvMWR2L3lpNDhiN2Jmd1RQWjNzeEFHdi9hZW9ZUUFndmw5S0V3RHM2UjY0MGZ2MXdiSHhTOUgrVDk4OXJTck5icTNuTkwxZkhsd0ErRVJET0lBZmgxemt3UlZIV2d1UFRtRWZXSy8vM1h0TjcwY2V6cVhiUkgvL3M2RDNiMytRc3p6c2xOSms3N2Q5R3hsc1RDSHB4ekk4dSsvVDc3ODRRdFc4c29IM1ErakpCSENSOGtyNFJ5QStmNnVETXo0TWNqWVA5N1NodjlIQ25wOEtmM2lHVWd2YmcvZER1TkR4U2FJQUtNVC8yMWNaOEtEOERMM3h1VGhGY1cyaTRwOVY3aFhMVzBCVkgxeUhsNHQ3UEwyL2xRdW91emhYNzRyd2h2MGFrYktucDg5N1BOTzdGSHpqb2l1V2xGTmVzK1Avc0JiUC8yS25IZHo4dW12clBaU3hGYkxpd1Z4eURVb3hwUmszbCsvOHpNZVBoNVIxR0FjQTdzclYrNC9wQW1KWDI1VnNpNGd2QXdxeFdEVGFFRkp1eURRMkVjbldYcWxLb3BLcHVhblJBRFRBaFpPMDdYWmJLamtibG5XcDdSM1lhQU5UUGI0cEdUZHp1VU9xZFkxV2llOG1EM2pvY1QwNlV5d1FBVWxBMjBZQm9LSmxYUkFKRE1sTmtNWjd5U290WkVRalFJL0VVY2xXbGRXT1hWUm1DbGVPZ3JZV1ZJMUJMN21iKzcyZTBkTnJzTDBDNGRaczNvRUtoYXh1TnNuQkViRnhNa1NFUisrWmpMWkhZaEpWVjNteG95VlJhVVQwcWpvdnJlZ2NWZFJzWGprbWFGRnRFZUpsamVRRlZRcG1VMDRRY2JDSGpBejFpVUlhd3ZsT1hrTzZMUjZrWGVvbVhNb2paUk5WM2ZxcXgzN0hoN2ZVZWdEVkMxK1pxRXdscTY2M3pjeTkzcTU3NCtxdUFyMHR0QlVxZitKdGpGaXBjMEJhK3lsNWE4Y203WXpOcktOQStJUUZPM3BmMWZyVmJlMURTcGhOV1J0b0hlSk5oZnNYUmVleHF2c0ZxU2ZVNzU2RTFpeXJzbkJaV3hwWWFHWW1JUkt2V1M3ejdPZy83aTRnZG00SkRhUmNtaGpySzFNNk4vUmFjbU9KaEdobDlZMDRIS3hralovY0d2S0NuQXJ0ZHV3SWRLMUlSaWhXdHN2b2I1SFlXVmFoQ0w1N2laWlM5U1VxK0RUSDg5MXVBSWp5bFZlbk5hMXRTaUdiSFNuMnpYbG5wOHVxZDducW1QbW5Dd1hteDIxWDh1UEh4emdmRUl0RXk1OXR0OSt1djdMWGRsUG95NWw2NzFsNE1BSjFvNVdvS0lGMkYrNlhaMVR0NjJMTjVndXhXV1dsRXRNa3hQZmR2TnhGcllnUjEyMVJsMnZhc29EOGVnNjNzRjR0UTdsUWVHeGJQZUxNQ1RpcXIxd0RMK3ZTSmZWMis2TVhmVzljRU1QSzBMLzg3a0VpOFkycmI5VkR0K1A5R3lMdjVjQldKMW91N2NLZEV4V2VyOGpQNHd2RFNzK3o2QnVQYUdLT0wvQ21saVNhNGJ5aUx1ZyttUkJSUmZCQU43R1NaMDJDNFhIOGVwZFdyL0NCOGdiVVpVcGVTczV4TlFESU9ZVkExRW1JZWlLWFdLWlJBMVZHVENUeG9tT29nT2pRRGNmWCt6MXJsT3loblV3dEVQWmlRRFNsU1EwWEhPVjVzaTllNlozcTY5Qm50QzIrNnZQb1B2Qys0KzBWYlR0NC8xLzh3WEl4RzQ2bUU0d24wSGkzL1hBUXBpTGdBRlpnMExqNUtIKzFYQnJIUW5waFRaMHYrM09qSXArNmIwZ3M2dW9TRTdxVndqdTN0ZWg5SjlCT1hjL0N3RHkvL2FVbUZxbEZMTW1INWxVMVI5aFJVdzRTYUkzMHFGSFdBbm1tU2xxbythdHVHNFhzc1MxNXpmMVNzeWw1YlozYjRwRlg4N2F5QWNkbWNaK3pvZWh6em9YRWRhUVNaa29vTHZtVjRMbXp1eDZ2RXdXN1JWQ0V0V3QzZEFVSzNmRmlaMWFkaTZWT1FYY2g2bXpHenoyaHpqZk1LUXFUamlqMnUyYXBqaVRQcmFSR0o3N2FOalRwY2Q2Z1BKQldBUDlYdGFwY1dQOXgrakw4amRQUHphL3dxaU51ZkRBdzYzYlhLa2xybXNBZStRVThKZnlmQTJ2cUYrUlAzWW4xM2VoaDUrdTVIcmJNUklZdzlQTHRvWDh3T1lHMWtYZUM0ZWE5WjAyTTNhTWF1bno5Y255YXZYcjdMRVFQSHErcXBoaUpIeTBKZ0pnQXlzem9tejNUbGxZQkNkYkl2Uk9jVWVMZ05aTHRMT3BGcHJYMDRXS09nVjVBbGl3OWV4MmJNMndmblkrbk52TVYvaXZ1L2hPenhGSFZibEpEV2FOSjZTUmx1Vkc5c1ZxMHhyVkVYVGZVS0J1TXE2Z1BRWGRVczFJeVZ0U3dKV3h2aGQraW5YUTlJQzVLaHhITE10NGZuSm9zdXRZTXRxWEFMQnZuUUZRQm1IT1dkbFZyK0RUUHhsSWdkMkdNcThsaFA0OFJEWE91RVFNWmk4OStZaWNTa3RnSklMbm1MaDRPaDBPMGVNcXpkbzlieW9md21PMzd1aFBySklkY0w3MnNFNXg4enFpb1ZZbWt4VkZGYTUvYmxhbzNBS2doL2tFT0FtUHV4NWJETk9RcTFiSUt3VW1KaGlZSEMzQ2NtWkx2a1dGVmtRNVplam5FOWNCL3NDSWk0bFUwa1k2ZXRSVU5hWHVvUUx5dEowTm95Mm9NQ2dyTGlKQ2RRUjNEQk9mK3l4VUNqdkxmUUZiRWVhL1RsNzJTdU5PdXBsVCtuQnRhV2dybHl6TmNST3hzYlgvVEZkSnkvMmd4UGEzb1UyR3BZYkNoTDJ2NUgyYXlJTldOUUwvem1LellxVUNzclYyYXNyZVhSTDcvY2w0YVQ2N1NNVEF4RWZKTHdoT2hOaFhPSnUvcDB3Ti92Q1ZNcUN6eE9qZk41ZUxSTE9DS0ljK01yMXhlNmZBd2JGc1c0TDRjMjdtK2F0b0FkQVRicGwvTjNSSmdiQjBuZk0yNkxmdUtrUFJzRFNFQTBWTVRqZERYWTdKNGY3OCtZRi9QNCtzaFYraGNsWlRHZnlQVG05MHVWS1BSY0JodXRLNUNLV1llOXBnYThjdUNxUmpoY01vNXhOaDRRY1k2SlIzYWs1WTQxbTVTUkI0V0ZGVXRzaXFBVWpVU01CWjY3UGNNSWRCTWEyaWNGSjdVN2oxV3NmMU9heUdjcXpFekMzaUFXVWE1Q2pXYWMzaXYwN0NTSlJJbUdGUGJpZDNPcjVXQ3dMZjIrNEoyTHNiVTJVRmhWU3dUckZxRHpJYzRDbUJOakpEV2xWYlRhRFFhNG1Za1hwZHNreUozZFRVZVQxeEd0bFRJSnVGTU9HbmhPbEhLa2hORUdoSno5QmwrakFsRE1Db0RRbXFaekJXeVVWU0lQSFZjNjJRRFpnOVBITndGWlRERWtJa2xtZ1FpWUxCUWtENEhZOVZvckt0YUFvU0xLQUZwTmNaVVNobXdJTzJzbFJXVE5qV21WbEI4ZjRSUnZ1RmV4d29xUTFaa0JhdmpodUppM2dvZHlmREpLd0x6QUZEdm9oYVdoRFJpSjkyalRvd245MzZ0dXdUaTNKbFlsTXR3T0N5dDE1dkYxYUJsQW1aQTgyb3RPZElHQ3gwV1FKb094Ni8zWTFuWm9mZm5sRGxvM2IvSDlyMFNJRExtd1lPdUpjOWRhZjJ0V1JLQUxhM0RWOXBCR0x0bWJ2YTNwQzRhSjYwUjZYcWJHYTdSKy9lVC9kNVFxbitvOG9kWTlXQytwdXlWMDFoaUNId2NvMjRVcFZGMUhSMFNtdjE0SWNxVXNOQmpwWXJhWG9wQkY1SmFoNmNxT2svSmFGWG1wOGxrMEphTWdoQ2tGQnZRRFB6ckZwUXVBT0lzYVkydjkyWXdwMTBnTkZFcGNyZGg3dGFlTUxSdFRNa3hHeVV4U1ZWZ0ZTbVhaYU5Qc3hzWStJWnA4SkdreHBPYkFGOU5kMGFXMFBQd25ycjhIakNiQkN0N3BjcmROeStIMjhtNlErcFhqNDgrVU1IS0MyRk5qMlEzZWYrM2FScUh1UkQrbWIvNVNlZnc5NE1hTUxDZkdWWlpDU2Y2UzQrSmUvUGhCK1NtSzFKZk9EVTZFMVpVcTVNdDZ2V2M5emFPVTlWbGtndnE1SXpoZVhxTGhZM3A5ZE1QNzVvLy9jWGhMR2VmSGV6YUs4OHpKVjFmOC81NWk2cjY5ZVFmWlhEMzFsNzRwT2JqZXJQWmZSazNjNGZ4L0xVeGVZZ3RiTTd1dy8xcW9lOXpiWW5wK1R5TUI3ZFcwOS9CZHl6S2JxdGVLSGtzR2x5UVVGYkt4ZDdOTmR4ZEVrWkFBQkE4aWxNUEd6dlJTZ0dCRUR6WU1Ybm5VRnpSVEhVU2dOWjdWVVQ2a2VBZTI1cHFmOVFYMWY4NHNXRGlJOVBIRWJVNFpXdExZTFBFVDZWMFFObTllbDlpMExROUhlOTRRdkNsdW5JRUdpUmNSbXBQbVpRcERRbm1GNmtoQUFQeHZ4OS8zMy8vOThMSC8xdFNOS0lmQU1CYSt3OFo1QUY4UEcvOXM2SW4rZTVzRGdHZ1lBQUFFTUMvSDhnanQ2dnIvMGE5VTc3WFgwQm9LQlZDZW83ZzNZU050NnZWUTZXZDRuL3dsZXE5UWxaTlptMUl6eS8yeXVjTC9Bb0lSeTREcGZ1TVEzMndKTXJQNkNMUFVEZmg2dWVCbGxyaFJmQWI4SU41VzVlU1ZjYXBPK3JhUGkreGJ6cmZYYXpvN09kOC83TFkxUTZnLzU2bDBwZVpCQXFvL3I0dDRGOHkzK2hpQ0dlNG5rQWowK1hXVWdrdS9teWNmVjJ2eEUwWkR2cTdUK2FVdGhPVXpWZjlPSkFWV0FtQXJ5NXZ3RDRuelNPZmVZMmRwVXR0MithQWZaNnFkME5sTHNjNCs0azRKV0Z2ZjlRVHF2dEdMZVJqWmhPQzl4WjUxY0wzc0lEOVE1VWpaZHV4MndXcWtLcHRGR1VJTFpsSEx3clpJVDdGVUpjaXBCRDhmS0U5dSs4LzRpMFg4dHZidk9ZRTNCQ1BqYkhsSGp0bUl0a3h2aXNpMm9FdWZKeTBJUVlOekQyNm84K0swYkZzbDR2WS91SUpRSFlvZU44K1dRUTZkd0pQUzFpSndrK3oyRlMycHllNnJjMHRiVDNCODFMZmgyUzdoaGZVbXJGeUxxMEVvbWlJYjUzK1lLVmU3NUxNZEF3RGtKc0NjLzBTQ3NUc3hVK1lXbS9LZXVmSytXamNzRjdaWkZ6YmhURWozcG41eXhVdEQ1VldEc3N1ZUN0aWMvQzJNZGZJNTd6STlyMlFIdU5TZkwyOEp5bHo1ZGs3RW5JUlAwdnRYd3h2TzJEck12YXJ4R0pFcTVYWExMK0xGOVJ4d2VsSWRoTngwYlRIdEpvUlBSS1VUaW55bFpJRTRFOVhuYVVUUURnb3hCMk1BcEFuU2tOSzVKN3U0U3ZCdG5PL3NtZS8zdDAwQXViSi9NSGZSK2s4WkVjRnlnTUFCTkNRZnJRMkZJd0R0VHNCK2g4Y2c4TUJDSXpEb1NZSEFKYkJ0d2JFM1hzYzY5Mi9OT0RVcmpZbEdrZzdGOUpBa1U3WElLQllXNE1EM3A3ZHo5SE1NcnNDQXJBcjcwSStmb2FjM1ZlUThMWDVSSUoyUmozTUd0VnJZQ1ZHMHRBNktOV3dvZHJlT3BWYS9ualhVNnlIV0p4WnV5Yko2dTZnVTRkNHcxN2F6RUpNb1Y4cjR3RCt5a3Jrb0VaOTFGWnE1SEx4OWlYb0F3OCtIREFJTTJwcVdYRHd6b2ZYUE53YnNnMmZSKzlrNnlLRmdMc0hKa1g4UXBmbWpWY2RZbUZTZ054ZXIyT1pZZ29FRFpLQjlYMW1zbVJLRW5scklEUU5RUGxBVURZdWxTZkdXTWN4ZUllZmVxTUk2dkJDMWF4dzQ5NXZJYmZ3QldId3hWVXZVSXlXanRUd1cxVGcrY1pURGIxOWphcnArZlZWRWdwNWZYN3M0MEs4TmpucXJqbjB0WTIxRmRNYjdZb3BpVTF4VldLVlB5YXh5S2NrNWxSTmlHMkViUnZnVWlrb1RnOTFTWFNnYkJKY2JTMHdhNlFCcGlScW1VMUlwYW9rS2k1V01aR05pcnBHU3VHVVJDWlFwVFdxaEsrS2VhcUlxd281OFFLYVA1WGgwZEZXa2FseGNGdlkvUFczUXJyNnc5ZGMxM2FsSm0yN3JpdnQybHdWaFY1RklscGtwYW9CRVZaNVlWYXhFRlhhQk5hL3RwamZ4ZFplenV0dytEYytJUC9KLzR5eTROemdyZ2JJd1gwRUdiVkNaYVd3bHJTU2NqNk8vRTArSUJGaDBkMGkrNDV2MzdkbU5aWEs5VFh3R3Y4TWZQYmV0Q3g2WEwrQXBDbERXL0hqTmlLKzd2cnExU3M0MjEyOGJiRy9NdmlNYzVHbzVKYzNLbWRkWjI4bzdFVTdWckNHQlBaNE50TDg5L3RsWEYwYklZbU5Jd0JCQVE9PSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlF1aWNrc2FuZDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBREkwQUJBQUFBQUFkWEFBQURIVEFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR2x3Ym5GWWNoekFHWUQ5VFZFRlVIQUNGQUJFSUNvR3FJSUdHVmd1RUtBQUJOZ0lrQTRoTUJDQUZoVUlISUF3SEcycGdSUWRpMkRnQWFQQVpGa1d3Y1FBRm0rOFRSZGttblVqMi95bEJtekdoZGVoYlpTRjBSN3VvN2hrWkNaR1Q2aG5wb2JaVFd4eTZjT0RoMEVnLzlvMEZSK0hBOHMzSjFiM3R3NTlYb3pnY0NOd2pabXR0d0NWeFg0aExvcEVrVGFSWHQwWklZMkl0NGpmOTJYc0N2TVJMVXdqMlFvMElraGN4S2tZcTVpUXRjZm5pbXJwWjBqcUh0R25nSmJsL3REcXppaXFkcXdBem9RMFRMeDg2TXpwWDV0STVUL3p2OTY5NzVyNEFvb3NSQkRKZkJibWtXZ3NJdG9xTmJHMlhKOUNrZW9iSGJmM3pCQm1vR0ExSTVhZ3hHTzFHVGFvTkVGVE02N0l1b245Rlh2emYraXVpd1FFSy9XL2FobWlieitWZEViVlZSNFlOK1BkL2pjekNUTzdMbndXZ0lxRmw1UUFsMjFZQjJwNUtKRmxMNkpmN1plQnpmdTRjRkozcStBT0M4UVY2NnpvYld3WWhXd0QvVjVzbXZFWG96RW1FVFd2dEtHMlRQRzNoV2NwUW05blFPdlI4SkZJVmdaQmQybWJGYytJMWZZWHZ3TlFrWml2cXlQMGU5Mzg2eTFiYTlkM3pCcUdMcXdBWDNYcHpiVEg2K3RiWHpHZ2tBMnVKZlF5ZWxmV2VKU3ZnQzBKRlVGMWF4TmRUVTJIVHBTajdsSmwvbmVtcTcrOXZTTWsvNkphZEdzc3FyZ0dlZXRuYU5WUEw0eitkN3F4L3NneG5GMlQ1ZWdIU1VXeVg3QUREVk1LeG94ejBCY2h1WHhpMkFzQ2F0VFB5dmdPT05UT2JyT1NjY0d1Q1FsemhFYktCL3ZydHoxaXJIOGhzWm5hNzluSW5oeTB5UkVMQ0p5TGdXZjg2LzNBZ1REQUFBTHBqTkVnM0pOTlFaTGhzWkxveXBGdzFwazRkY3RoaDVLaWp5QWtuRU1JQlFwK3VKL2lsa2hpcHVDUEhlZytHOWxwRm9RL2EreE9LYzZIRkF4QjJ6cnAzb3pBWGFpQnV4Vk04Vm1Da1dtVjd0dDgzVXFsNmk2eHd5YXN3Q3BWOStjelU1T2Zqck1ySC9CMWJkc1NaSzdtU1cvYS90Q212S29KRWloWWpWaUtQUHJ5bUtWRGtQLzlyTU1Nc2N5MncwRkxMckxQUkRudGRjeDB6S3pNL0U2aUFwQ2o2TC9rL2FLQTNBMjhPeVZ4YUM0T2xUNWFkdVBNUFdmWkIwdkJrUnRuY1lBR2RoU3VXYmxvMjUxclQ5ZUNPQ0tMZ2ZiWUdrcUJKNlZReWE0S1RHSUhVZzVmaHFSU1lFak1IUnhJSEkrbEozRlR6dE4wcFdoN0REREZQcHRvcHVONDRKL0FJa2cxU2VPcGNpOWhQMFJUUUVpV093enhOMDBaSFUrVXBTMUdGOEJZUEVEM0FCTEYxbnFMRmZBdFNJZHM0dFpRckVKQ3o5VEt0WjJUTVVWaGF4SE9MVzNpWVN0MHBvRWNZZ29TeDQ3VkRxY3loa2drRlBZSGR2TVN4OVY5K3Q3Nk5MWnFEQjJtOVlZaG10bXY0ejBsNzFhRFgvaGN6T3dRdXhxNmsxbFVDN25tbnRHL1AzU3p6S0dRL2Z3UlVEL2NPTVFpRElwVGdqeHZ2Yi9QYndFOXNsQTZpakxJVHhia0dscDJtWGhmVTFPNUEveUhlYWJSV0l6SWRXaldaMlcwOThTM05KbXhJVXhEMEpTMklRcWg3L0RMT1ZGVVk5SS8wNzFkcUpGeTRnTjlTTnlQc0Fxa2xKR1hQYWZlTSt4YkY1cUlZYy9JQUJ4bWxtNEJjQitvUE9SejE5Q00yb3VoMm9HdEVOTjJBSkZyQ1Z6TzROb0QzZXhXU0VLRzRzak1EdE9WSlNnWUxWM29TYUxZZWU2T3JFNTlKV3RJN1hxNkZNTkI2cEJhRHptU0c3eDlQL25jb0FRQzBZTzY1QVYvOFZxUjVwQzdPMEtKUlNUaVhNSGVhanp2cThmRDZURWF0ZFNlRWRDeUp5T1A3SFMwSE5zY2puNEVVSDdJVnY1QjlOY0h0NlErUXhyNU5nSmxFWXBCYmw3aVdGVGcyU3ZzdE5McGsxd2QwRU9CL0hLT1A1MW9Ba0tIYmswY3hnYVVTbUVkenZ2UkVYZlhuVUVxeHFHZ2R4LzFwVUJuNnlTVWJpTDhia0lsQ3BPQzJIRi9ZMHg1cXB4VEw2TG1sVVBiRk9KTWpZUURlWUpJY1lBaHRLVnFmckZLSW5nbWpPSTVleCtXYlNVQXJDR053aElEaWFLUFFWMTJlemFkQTA0Q0hHODVMWW1oMmdpTUVvaGd1RkNFN1d0MlJucFpPUDBMQW16akpOSk1sMUZxUTJ3ZmJVQkpiOCtnZGZpU0dTVzFnQzF0WjB6N1FWUWRkb1RTeXNqU2Viem9sZnlvaFN0Z2dCZWVMQ0hPRGZNeW8yQk9TOGExMmhpZHIzWVVoUkRWWFRBSXhFNnh3bXMwREVnMU1SRkhBR3RHWkpMRTZDdEJabDVKMkE3dWxUUDIwTWpRWHUrRkdjUmhqQ29WWHRvd1ppdGhlQWlnYmxuT1pJUmdEQ2dZS2VqakJRb1E2aFJoMkxJYXJHV0I3eitZaXRLQXVxRU1BbDlRRElnSGM5UnNZaVV6QU5nTXNaR0xMb1VheGFra1ZyZkRveksyMTBaYkswNFpwaTZDRUJWb3NNT0FBVVZnUWl3VjJITWpCRHVLVWdKT0lneVhoRU1uc1VDbFNhYVN4dzZUcmlPbU1SVjI0V1NHL0FyMW9iOExOOU1GYWZiRm9xTnJjY0NOeTRraWpxSXdCSmxOd0JDOG1XVmdsRyt0TVordjU1T01WNEVpRjJLQ0liVlNzbEZvWk5wbUZ3ODJYV3N3b0M1NktEK3FVcm9JekttbnU0R0FaZUpaL0VBQk00UVdRUnBGcWhvVllDUWZQZHBPaEhHYVd1eDRldUZpSG51NDAwcG8xTjdDWFZNbmZLalIyWWRGaXNjV3FGcXVCZE52QWE5ZHk4dEVUUCs3MTNMd2NEUHh2RGQwYXcrOW5leWZnZC9ZMzhDRUw1c0ppV0FuciszMy93WktjUW53S2pyWGlNQUJwRHVDb2FVaWtHSVNoQ0FFRnlFRVY1SmVsRmNIQnA5TG5lL2UvYTdiTUV3OEtwUDZaWlZtVlI4UzVvYkFtVlpKV09NNXkwajhCQUJRWVFUVW1ReWFaR0VUMXg5SERDVWtNRzJNMkhFT2h1WDVIalR1QnBTcEFLd2lYT21zcUJxREFYelFVSXdaK2ZPQkh2Z1poWWhQRzMvalZ5SXZKT0RkQklDMGpLNXNLbk43NnFVeHNJNVJqdEFwaXZ3Y21lQVFLOUZZS0dzRVN0Q1FRb2c3Nkc0WmVtcVRKVEFSVzFEOHlCVklRQlZNSWhhWnUvVkg3aFNPQlJGS1JtalFrU2JrZ1FIb2lyWXpoS0ZYWDdMSUpvTEM1YWFuaTB4Z1dMZ1JnVGdsa3JPYTFXTUp3blE5WHpsY2ZtQURzaFE0SDlFb2VueTVTb3JIcldnOXRzMHBJN3YvM3NFZXdBYXpydUMrR0NQQ2Z4cmtUOUNZQTlDOWJBNUJ4U0tLM2R4MEFZSS9leWlxbXRCdUFvMHRjTnVicjgwd2w0K200TVBqOW1LYVdQL0ZKMXRsdFBkVXpPNEcvaEw5V2pwVE5zbFZ1SXlmSTZYSlh1VmllRXdxdDRkYm1majhBQ0NKelNmZG40cE1vNDNLc2tYV3lzUVZwakQ5U3dtMEY5QVBBdndPQU54MnV2Y2IyQzl1QUM5K0VDODk0enpxZkdhUDdLT2Jocm5NN3oyMEJBWUJFUUg4bmdON0s5M1oxZXVWek5QcW43VFBISXZNY2RkVjFpNjJ6M245T21XV1QrWmFhYVlrTHpqbHZnV3VJaGlSUXNHYTBtb3RnWUdSaVpoRWxXcXc0ZGc1T2laSWtTNUZtamYrdDlRQUhva0o2Yi8zZ2JqTDExa2RmT2JRM2dCaDY2bXU5c3Y2M1R1ZFRvRkNSWW1WV3VXZTFTL2FiNjdEampqamh2cHNSY1V1TkxTN2I3SGJVdU91aTMvMFJEbGZjMEJBZXY2bTExVC8rOXErRkJBeEhoU2RTQ3hBdVJLZ3drVnJRMFFzaWE4MnFwYlphT2FPTkJDN3hGS2xpVE5OZUJyZU8ydW1nazY1NjZhNkhub1lZWUtCQlBFYWJZS3h4SmhudnJJbnk1Y2lWcDhSVXBXd21SMDJFalRiWWFaY2RDQTIvRUFCb0RRQnNQOUJ5UUw4Rk1QOEE4SjhETndjQUFEWjJGYnlFaE9NVUxDV3FvcGhJaUZGR1A2L0pTYmJubkpnVXhWMUR6TFFBaENKSXVFYkJvM2d5YVNVSlJTTmRFTEhTSHRJTTNISEdzU054ZmV3RW5jZnI2Y0NnTVdsN2phYUowMGV4UXRRUjlpaUc0Q1V3OGdTaUpubndTYjJyc0FpcFJFbG54Q1lNczZjU3lJK2UyUng2RXFiK0NyR0VIbU9vTkFPRnBKU3lObEFUaEhUTlBvQjlIUU9yeDRqNVhrek9nNFFPQ1dtY1BqUnhUQzNVOFlQb3VVVTdYN3pNdnJraVdvN2RKc1puUVFBRTdubjEvdDVmWjJSRVFtbzB3ZWl1dkprTGxnK3dST2tzNXhTOE04V0xsVG9FeEtSSnVONVpsdWM5VnhtR3AzWG9oU0ZaZzYwMmgwUHBmUWpnSEhMZFU5ZFlHWkdVakY4eEdQYWZwQ2lOQnE5VjZpMDZUMDRZWXA0b0sxNG9jM2VsckNpVkVZRGMvai95UVNuUE90YUpuekhCYWFoY0EwQ2ZBQ3E4Uzc1WnRBazBwVG5LTkF1dU1RV1FiRml2dG5QVXhuTUxRT3UyZkVtTmIxWnE1NUlNYzVRWnRtcDhWeWxSK0ZCWW95bFhwWDdWQkRBbWRtSXRIVjJGUnd4cTNmNHpKb3g0dDNLWmZwc2p5OHUvVldiVWc3WjFSOU1ncGJqSjR0bTRXQURNUWs0NXdEU2tVUmd0eUVtdzJNS1JUV0RGWmROL0ZHYVJmWkhiYTdPTFlPL3VUNGlIQjRxTWNxdEg3S1Z2MGJxd09aRi90ZVkrRFE0b0hVUVloUTRPVlFvYlRXTjFTN0RCOFBYYyt6dXg2T1EzeE8xRmRtRXFBL3Z5aUszdHVhSFNSYVc0ME9ZMDhaVkFQVFdNWHdLNFpFT3hCaEM4ZlR3YXNHaHhLU3Q3eVFsQm9UNTBvcngra05xb21HK3FJTTE0VHlYVmhTSUQxMHVFSTJDY3VGT3E1NENjUXZOengvcGNmOEdvZE5ZL1MzeG1hVit6Slpzdzc5aWxlOUYvVThyaFBWQzRtUWxjTURyYm9EWVM2Q05iNEFLd3hwK1JFRlZTMVRJNlVNWnc0d1lXUU5QUVc1dE5UbkZQZE5ndzBGTStkcWdIZzgyNko4c2lWaTN1blE0VGxzaTlnYjdHNDVtV0xuZC9EeisvUm5hOFJMRWU1OW1xcHI3U2hvcXRWd1NJdmZtR2RWMnY4eXBxalU3djVqNm5yUDExMXBnc2lMeE5qZTFXSEI4Yk1qcFdKODFkdFMycGFud1Rnd25OMjMzV3F3NGJESlNaR2xCSlRTRGxIZU1ZWlhadE85ZnVsV00vZTBETjNaek5GYnpmL2RzMnVYSUxLZ3hka3dOOVdFVFp1N2xzNXJrd3dSS3d5VnVWMkZNMmVhbGZHVmFoM0xVMHI1MXRXZk01V0ZIQ0ovV01ZWVVqaFd5K2NFbzhleVdCTVhFeldDVkxreWJZamoxdnJWSmRuT1JYZXhzcmdVRExxYmFoMm9pRDg1N0VTR0xhdnRrVExKUmZtTldFOGVhRzI5MFdtNUlzWGk1VGg3V3dsTzhjM0xTbjNldWk3V1I1SDh4RFkxMkxDYkN5RXhWKzZ4NGYzdFF3VURHcjNodGxPZkFHNjMxOHhrcnptc2picXdZdEVWU1c4dlI5S0xlaFo3b0ozb2thNWpXTFZuOXBXcWNybUQyVnZHT2FKOGVuK0tpT2RVYmtQWEpRZlc1eFpiN1cyUmVEdE9KVGEwTmJOend0UkpQQVo5UnRxU2F4MHFHbExrOTJndjFEWDVPVVErKzNZNnUwVUszUFB5RFJjOGVJbG1rU2NFWnAwd1MydzZ3Y0szK0txbkozNHllTmFidkY1L1J5RFIwajc4SHc4NUhtekdWT1MwV0lnOUpBZWxnTzQ5d05rdEk3aEEwVzlrd0p1ajlDRWwyR2FCTDVxa0pYSm1nc3NTNmFnTlZ2N29vR2lBZ3hhbCszcXdUWGZUaWxyQ21sVmxvOFkwTE0yRC9BTmhmdWlTSnJOWFZzQngwV3RQYmtWa3ZOYUhsa3dnQTFjT1F0SXl5RVVnME9ISGx6ZDkxUVczcmwzVzAvczNkd25mWUswZ0NPV3p3UHRJQ0hWbk5YN2VCZ1JuUmNHUVNyaml1YzF3bndxV1VsMTZ2Ulo5VmhYU2VNSVMwa2ZKQzcyOGtQay9yMkRFZFRQSTkwR0tBSm10dVJnMHBqSGFFNVMvbG15N0hRQ1kzZ0Jxa2Jia3BEaXQ3S01QcDlMa1FRU1ovUDVJcUR3UkNlUFJ6N2QzNjBPZ2FGVGpzZU41L0RPOG1hNGxDeGw1MVdjcE84VG55ZHVGbG1maGZ6Vm10NmVjaDhMZW04bitnUUtLS2hndzJFWCtwL0Rlc2k5R0FSVmdLOWtUbE9MVGtRSWFyWE1iSlp0YUVEMDZiNWJkSTRhSitFVFgrQWlRNUpkdHVjUTFYYUR6dkRGcTFzTGFKYzN0eEtRM3RRTGV5VXF5S1dWUTNGL3EwZEZqOFlEOGs2eWRkVkZhNStWcytEU0c2dUMvbk45Y2VudUVOcWxqSi80Y290L243ZitwaVllWVVwbytGWk9sRkd4UnZWMVd5NFZFUEdLTEpwWDdBQjN1Q3RMRjJibVdhSUJpTkY2aEI5MjNHL1QybXVkdElFMWZ6NjZUVXczQWJyUXJhbHdFRmhPM1pMTFpKR3pXend6d0xqRHMrejhvWms4NGdPd29IVUFIQWdMdzhYaDJhRk1yNjZqczVTb3hrdEpZQmVUclJqWDV6bkJrZG1JOU0rLzFocmNZall0ZFpyZ2JyVlRSNmMwNm8zbXVhQ2tOWmNqcmZQc1hsaXBhak5Md2F1Zkw1RVZTS0VBSGd6bzdFTXhZSlcwL29pSnh1TnRrbzBXbVUvTzQ0TmRVV3pJdXNOa2RaZmpkZlNWbzJ4OE9ESEg2THpUSHV6MnB3T1QvT2NCRWpKMVJValI4Yjg3NU5JRUJCdW0zQnR0NnpFb2RiMWhNZG9NaHJHR3FYVTQyQjBtNzNreUx1Um9hNThSeG5HaUt4bUlId3RnTlN1dmtBcXV2UjBLTkp3djM0WWU0WTkrcHZXMzVFMHRzRkYxZ3V1alRMVTM1ZnBVOER3bEFmUG5HN0gwM3pXOFgwZEpubXZKenlZNDV4OGxoRDZnMkpBVEVSNW14L3JFdDNtTnpxM09rYVV3SnZJZkd1K2ZxNVhmQk9IamFmdlFENklvd2hoYjluUWF4VDZKRGZTYjhWa3hybVZWbnF1NXJYSTVScTdSSHlNSlJpTkpuT0h0OGttdmJnZ3pZamduVG40ZHlleGNTek8zdlF5RG9KOWxXSWp1SXNSS1I4ZmJBQVhtenZzbHZNdWJib3ZUYW1jN0syYlJVZjJIMHlSakx0SnFlVHV5QWplOFlRY0pKQTFkY2R0enVWQ2UwL0VyaFlOSXd1MFlPekV0ZWIrU2xNS09VUXNFOXV1WnV2dVFYV2JYcFhsQ2J1dkpBUlhQeUFtekZHaEkrdU9HTUJIN0RQTzBvRFV3MU03OEFOM2hKNkVCK3FvMFlSaEk1OGJCWENJVUxJbXlnaFdWc2F5c0lTUUI1NmhxQjJISXBYek96TzlFbEZzZHh1Qk9YMGlQaFN4TlA5ZVZoeVNTSXAyRXpYa2FiUjdmZlF4a2VpVEQ0TDBGWUNHR2lOek1EZElqWGhoZHpYUHplUTZzSFV3RHlnZFVzd3grdW1LaXE0OW81UXJ5NEVKUGNodlgzMm1KMUVaUHZMcko2cGNhVnVtQzNwUXFYemoyZXZYNG9wVTd2TnUyYStPVitlcnh2SWoyVWJsNkEzblJza3hrV3c5Zk5BZWpWd01JRTVSSEVTbzV4cjF4TktzN2NjTjhOdzMxTWYvOXRSQUtORExIRDdjTDY1bW1lcGFvaGtuUGVMWW5jYitaR0FWczNRbWVzNXlCR3Y0eGJKUjdSdVdqS0lXd1E2bGZDdEZ0SEFlMFdDb28xREMrU0I2SnNkbnBFbVBnQjJnU1E2SlVpOFZGb0lCaFYza2hDaGYwMll4ajlKdmVnL1RLcVR3ZzNlSFBPNXNWa1dEWXZHQ1NhQnVxSTduYUE5b05CODcyTmdvdUlRYmtFckhiODhKMmROalM2SnBEclRmVjdyaDhXcnhrcjhjQjNaaDEyS25NbUtxSG8xcE9lbmh0RjQ2YXpFOUxhODd1Y1J2M0pSMnl5UTdtSU5sZmRuR2puVUpldC9GMXVqZStxTzZTdzZ2WVNwNkRSc2lHZ0o1QmN4WFZvM1I1TFYrWVYxdXV6aHZpWEQrYWIxWkdORHgyUHg0bnJhbWFjYnRxSEtvY3l2MzBlekIyOEdya2pYZTAreEFrQndhVE16TGRZbUZPOU8vZzJHSWVIQVNWTnJUejRVeHJJOFR4S2pqVkpxcnQxWHJkSTdETSszRGUrQ1ExZlc1L1YzVFhIZGZ4b3JFd01QVGJ4cnNSYVlwbmxLSE14eFpIcytKY2ZNYjdYR3BQQldtTGZ1Q1EvZlN6ZXYyUFJhdUN6NkFsbC9CNEVDRXZ0Rm85QnJHRWRacG5JT0krTGdnbjVCYnFPd1NiamkvMWhxQmEzNG45Zko5QUQzVThpYnVhbUdHZDNXMUx1UmxOb2h6bkxrdWlQZUQxajNDRERwNVRWTkdBK0ZoZFhvYVlFeU1UMHFUeDJSbndwczhJdEI5ZkhKM3lhNUZlZ0NsZlAwclJsbDlkN0NaMzMzai9oZzNHMk10YXZNMWZCVU5Cck4xVGVGV0Ywb2M3aXdDb1F2S21lU3BoQlJlSHR5dzB5aXc5MG42eHBnQ1l5a21vTktHaG1oMElWWlk4S0JrTzBXMXBxWUlpOU1pVFZHOTRKMmpoK2N2T1MwUnNlUUs1Z1VEOEVBcVAyQ2FyOUlqVmh0VjNzd1BWTnpUQjN2d1lDa2lXQlU3cjczTjQyQkFuNk4xRzlmbDlOWC9ENUErSjNrOVI2TlVXL055YnFUclZzenc1emZPRDhObzFvdFl2WDJTZ1lOWDEwRGM1WW9QdUpMVWo2NmRUdGNPbC9QRWJZWlBocmkzK08rL0U5K045amJlYVFyT1E1Z0oxN3gwQ0oybURvWVlvTkJsVE5XTkh1enhhL0R1Zmpyd3ZyRzBvZytZWWJGQ2IwVEJELzNvN2l0ek43ZHpYR29kejdmSjM2eHNET2t5T1NBNDROOHJIUHYvK1RNYURGcEpuNDM0Tjg1TS9tY3ErQ0tvaWdoeXdkamtsVnpTOThIZzZRR0JHVitrU2FhMUswbHlSNVRrRGNETi9ZSlRwUi96ZmJ6U2trNWV2RjdSdWRGWUtKcW1JaEVpUkVpcjA3RkVCTmF6NEVLejc4MEJOM3FLOXJPYis0WW8xOHo3NThuY2tnUzZPK1BnTEhaayt2WGVyN0lidThCcXRyYnMxZjMzbXg1MkhleVpKeDNvaUc4MFh6ZGJBNVMvK0VKN0x4RWZzMmRQejRZZ2FzZWh3UlJhTEtMVGtZZ1FKWGtQUmJBaDFqcVhtU3JkenZnbWZFKzJUWi9mbTRqdHkrZGorL2ZHODBpUjI2bi82NTFqK2JPZEVlVjNlWkw3NFFVaXNJYlJyM1NKRjVUb25XeGpmaUlHZWQzeGFjdVhZSS9YQzlYdGhZQVlrRFVZM3QxRWdUTk9Sa2dFOFE0VURTZ1VRY09IRUF1Z1BKNkY5dlVaUUo0bkxkUXIvKzlWK0dnYTR2c1F4Q0ROWDc1OTV5TlhwTS9mV3hBbnA5dytDNmpOSW4yNVU1b3NxUUdyR0hYcEJPNE5qYmN1Nnk1ZmN2Sm9kckh3bnBXYUZYV0RWR0ZxWGYzWld1Tno3RjlldnRyeWpHNWhhVG9IUDdYdnhiV3phMmlGZ05sWHB1S2NIeUs2dEhMNUpraXhTKzFqdXVudXdscUQzNy9XMEYzUVRjZElMVVcwR05nM0ZjMmtwNk5LaTVsQVRtZW1vQWtJVDVyWnhYejNmZG1wK1FObUc2UkZ4eDNHNnllWGlvcFprVnpmbGRZclRmVFp6eFk5Z28yK2dZWG1ZSWhTM2NrdDZFRVBlelkyM1pIaGpHMHdQdUh0MXpzejdZc2RHZVB1WllsZU1NSXNLYTBtYlRGcnVsTUd5M3NtSmVSQ3NwZjhQdXpRNEhJUnFkYUlYTGhFODY3WWdZQmRudFhrYzM2YlUvUDR3L2twWlQ4VTlGME0wQjBob0Zub05hMHVjV3d4Rmk1MHM3VDE1d04wd3FUWmZCN3JMVjh5bWhicWJjT0YvamFkYXZVZk4yc2haMEdRMXBiNE40MmtkR24wY1ZURDkxL1dNeWNuNWVxSVJULzErZEZrYjB2VDFnT0p1VnZyQ0lmMjJVdUtwcDkzNlNGVzBxbHNxRnVtSlBXT1RDendVNzRYc0tBK1dCeG5xRE5Wa0FmQXFJM2pXcXNoeW45SE1hOTlTdlpCbUd3L0tjQjFlalF5b1BGWTVzdS9PRVBENzBUeVdvUS9pZlZSM2w4cVRTQXV2VFVYNEY0U2VZMGFORnpRQWlWUUZnM1pEN0cvMzBFS04vcGNFc0FCU2pCWFk5ZGk3NHJsWHBKYzRkVjQ4amFJQnJBeTR3ekx3SURWWnUrM1dnZnN1ME5wT2NZd3czdlhIWlFjclJDM050UXNMUEdtRU1YMUE4c0gzMFladWdCWXVqeENMdzdlKzVORFRkZFE4ZWJHQitZZzVhWDBLcHF3SXVwU0xyM3lENUpuRnhUdmZhbnA2T0cwKzErZG1GMzZJZ0dzdzlCQmNQNTNuZkhQN05uM1FaWHBzeE0rS3B4RE5uMStBcVdCNGtkamJpYVl2dlBxUDdXUTRLL0RqRFVaNzEzL0RiRjdCR0tTS0owOFgrTDFUUlJ5eCtWVzcyb092QTEzQVF1clh1MDQ5dDNOOUZLWUU0VzNjNkU5NmEwMXlZZHZpNzcrREJSWHc5bVJDLzdMUEdKbGtBKzdSNzIyMWNHUWZjV295NlVLY3JmeEF2QWZCeUQ2Y05hY3RlcUhDYWUrcENsbUxHdEdCZ21DU1A3akJIUjF0ZDBYOTR1MzYxYkQrWWwyZ1lzOTl0a29BMXVjODY0UGZCVGljYXBxZXZocVhCZmUyYlBsaStQMUhqTVpGYXU0Qkd1Vk1HbDI2SWFLRGxKNHo2OVhSOUd4eFhIczUwV2JMYmk4QTE4UlRlRXJoNTFXWlpUMWhUVEZncHg4V2o3U1BpcVQ2c2syT0tIODVyNEM2NFVzREt6cW5CR1hmVVVvYUY4OTZuVUpua1N2K21IdlJJaUtNQmhVUU9uenpHdkgwcTkrYXNtWTlhcHFacXdXYzhhR0RPTUVNbGdlUXFCU2gwVWFRRDIySTdzZWZUYXJrRmdMTm5PcEEwZUgrcXdkNmcvb2RYK1Z5V3cwQjFhMW0veUxQYzVWUVo5ejFaSk84TFhiNFlvcmJkMS9XTG1lN1VFQjdCcjEyRmNGZy9aVm8yNlhJc0E5SnRpQktkYXpsb3hGUDBRUXdPSnBRVW9Famd3OTNWc1EzcHQwckNLTm9oNm5KeVhWR2NPd3dmTWFkY1hRK1VSdkgvNTM1KzAwZVk0RWc1L1pMK3dmVXkxcEdKVWtuWk9qbmJqRW1IRVlodXdZMHAreG00eFpNMUswMncxRFdjYzhic2luTXRtaVpXTnl1Q0JaL3RuaEhZanovZ1pPcUx1c2d3QnpRVmR0UEZRWGVZRHZIbFJ4Y3d0c1IySTFqUjlTS2lkdk9iMnBrN0QwL2tpS3VPWHgzcG1EdzVGQUhSYm1YVmxaK2FsU3hlKzRIU3VkaXhmYS9QSllZNkVlbW8wa3RKcjY4aDUyWWNHS3ZzSDlEN3g5RlY3TDlTN3dkS3dLQnVYbUJXN2ZiTXRaMEJJUnpGbFBjYjFtWThudHBzWDJZZ0F1czBjTTBxeFJMUFd0MTFLeHZmY2pxcmdDOWFyRTNtOEo3ZmVKUmNRVkpBZXM4NHI2dS9tZ2JVbnFkei9nMEMydUpvVjdrazkvS1dDVkxvd1c1T1JTN2x2WjJqLzZxQ09rZXcrZjUySTJyeXFqeDQrcTI1Ly8xeVQ5dERvL215K1NsWmx6OWxyOE9kZGp1Q0hHbGRyREJuRUdFd25KWEJYbWRKN1hxK0pLdEJQbVBSZXBld21XOTRST0dWRVk5SzQ4K3I4aUVoQXpuVHhnVkdkRTlPSzBFWG5TQ0ZkeHZGOGE0S1RDMU55OFpxMjc3Qk5MaUZjQ0hNRDVIZWhZdGNoRCtoWjc4RldCb0JBTitraEx5bXl5QUlHV2NsYTdMVzgxbGdpY0NRZHRkaWE4TVBBSGRrSHlIcUczcEl1aHVldk0vYml4Z1B5c1plNFJ3cjRzNExjdkgzVzVCRThnVi82dzErUndlak16Q1IrSnY4L0c5RVc4UXorUXdlSXhaS0NqQStuWDRjNnRuOVlhZlVOZmw4VStjMVdNZHd2WEE4ZGE2WjNSUnVEc1hhZ0FWdlQwWng5UTZway9xc0NLU0F6ODF6WHRmdEZmRUROVHcvbk1iaDZRV1JaVFk0S241L09GWGZmU0FqLzc2YkJBZGlZb1JGcDdjMk1yd1hCVFp0NXBEMXNtMkdJVmNFZnd0cDIwYWRmMmlaVVhJM3dEV2xDQVZaSTVWTGY2Nm1Nd0dZQXh6Q3ZsaUdvKzd2aUwxOVlqNElLejA3Wm9zTVBXL1BxZjAvckl6cCttUC9PN0p4eEgwTHpUWjh6R3RHc08zRUlUNXg2VlRyWFcrTDlsZ2U5VU1MUDVaYmZDdk9ZbEduT2llQnBFblJTQnhOKy9lQk5mMGpidHdFRTZCYW96VnhWNHFXT0xRNys2aWtmZEcrQkt3dXhDeUkrcjJiK2cyTk10a1g3UjdjZlZES1dpL2dDRWtEMWMxS3k4c0xYaHZnZU9Qdmg0cUpaNkU4R3I3TlRiRUZQYzJ2RHNXMlc4bWxqdEZwNmNDWldvc3J5UkhLM1E5RHZSODhtMjlOa1ZuWHVyaVFJT2lTc2FEcCt2MjFNNGZsVWNMellldkJBQzlyK01WcU52b0RSQ2dWRmpjeWdOWEs3Q3hZRmpiL2xvMDdWdlpRdGwwbXpuL090ditkSjExZHRyd0hrMVVBNnRkQ3dlczNrMG5VMkxTeHN4N05NU1BaZXRzbWFNdWtKSG9QWGRDUjlINm96b3hHbXIyV1l5SlpMT1pGQWRndzJrOUJDejNYNjkzT0x5R1RzeTNxK2VlSkpzZTkyeWFJZzY3MS9mOGVnbjRQQU14UUsyWHcwTHZmZEo5QjdjK1FkU1RQU3ZsQ3JaNExoLzJocW03dGJhWERiekFsaHVkU0VvN0FldVdtcXB6eTFYS1YxeTFWQnJwS1JMcVZTNWxacWVOOXE5QnNUbU5Vb1FNV1JOSUlHR0kwWGt5c0VTY2dWWm83SGhZckEwYUFsU293bzhGVmZ1eStYRm1vcmhPRUVvbjh1NXhzRjVZSXc1Y2lvbm9NSUZoMjFYUjBzSGl1dW1EdEpmdytubjVoU1ZGV0wrVjlSVTNGWXlJRkp2U0d3MnBOVXlpZ1g4S3VjRG1qYU9PM0J2bjA2WHNRaGJmT2FVZFBibnVTRFdtaklrazUyVFlWMWFOSTNobGtoV3JLRVpQaXdER3J5UGNQYjcvSXhsejdhcEhrVGgvWVd2Zm1zc0Y2UzRraGJ2RDNxSmtRVVdYQlhuZmlDVVVraUpqUUpsOExYdEU4cWRJNmpGYmRGMko3bXUyN3lYbDQzejk3QzlnMVNOMld3RW8rRERrT2JQZWxwRUhYa2QwbTNETklrdWpWTktORjlUSWV6ZjFxeHBwZENJbWhmOE53bmFydjRQL1ZPTU0vM3dRY3c2NERJSnUzQm5qeER3SURVak4zbmFNbW9qZXptNlBERGNGeCtPbDhPNVF1dzE4R1FtNEM4YTVoL1JTejZQY0ZXNmdCVEYyVEdWeFZRcU9uR1pJYUtHWXlhZE9CVXdXaHdwRk00WTFNcFlBZ0hYcS9CdGVPK2FLYmNHSVVXZ01LS3lOU1I2Tmg5dXVnWXM3Q0NxSEN6MHdxZ3AzWWZZYkhuRWxFWmhnV2ZKUDU0M2ZkK09TNDFJTXFzekdqTTZKR21VdnZnOXRIeUVndkNJWlRLM1dFSEFSQ0xtY2lkaVI4VEIzaVFCcXoxQnFScVdKL0RBUkU4UzFKL1U0SXhMMEVXQmdiNkkrUUx4NXhlUHhyZFY1U2ZyWitGMkdFanNVWlhWTkhnYURNZE5Xa3NRTlovSEFLY05HbVUwbnZFRUJJK3pPbUUxaXh4WFBtNG0xYkJKSFQra1ZIa3dvOHBYRUFrYXNad1RXQzJBRmZSVll3MC9VWTR0THExWXFMU2paeXVhUjZqNXdKYjRBbSt5VDNHV1ZYdWMzWWdOVTgzZ2JibGM4SktzZlVqUTBMNWozcFVGY1hJR2NvQVYwQzd3K2I1cVJpSld4QkVya244WnVYZXlXQW9XZmVtbEF4ZHB2TGR3L3JocVhidmFzRVhZOHNDMWhmeUtjcEI4YjdsYnlQMVhBZTRXc2NMenhVTmJkM1gyMU5ZM1BFRnp3WHVMdHQ1UmY1aUtQU1dRSWpzSXZyL1ZyWWJ3L09DN0NMOHZNL0JUSEhaNTVZYUpNcERPdDdSdGF0cFpPZHcybjE1RGgrdExqUzhBZnVYalBSemV1YjlRQnpWdmRyWUpoUUVVSDJta3YweTQ5OEJHd25mdmlqdG9GYlUzU2RxMlgvZDBTM3RMeXpTTDkxTno4Mk9nQlBnc2F1K3lnVCt0T0FnNTFIQ2ZYZEdmeW5HcUVSVHZhOEEycVBMN1BhMk4zTHMvblpkQUs5OXk2Q2syNTY1RExXM1V4TEpSWSsydDkveHV2clBaMHRwU1diNnQwcmZWMHJTUDA5SFd1cTYxZGJ5MVRRdWlFcnhNcEpmY3ByZERGVFVQVmJORk56dFlhajFsK2RXOG41cGJYdVEwcTF1YUQ0TW5vRkNpMzkwbnVoamY5eURZdnh5eUkzU2FGMTBYeDBybEppdzYzYTNrVTZwMUsyZHdrdnl4V3h5cjFjOFRPa0ZPWFdLS3FqM2JpdklFWDJIR2JicEFZdVhEanFwRDFzRStuMVp0bmNSSnJtbWdjbmlWRE91d3ZQV1NDdXl3bm45YVk3VXYwMURONnhEVHQxcWxROWU3aFV0YmhNS1dwY0pFQlNGYjllVVlYQUpINW5xMGt2c2hEbTFGcldXMzhvN0IyOUJsejg1OVd5UFBBMStiandhcCtQeGtodGQxSUtJdzlmemx5azdWMms1TW5tdVZYc210dFVOenJIM3h0dFlINkpxak9LSzJRK2VtdjE3NVBxUTM4VCs5bTZTN3lmVThxOEQrQnhoVFJlSEN2alRuV2tBTTkxSlkyUWtiNUFHUFFxV0pxQTc2bmx3K3cvZTlPWUJpcGk0ZDJrdEllT1JPdjFCRmNXK2FnQ2hBM2VzbEVYVUdiY0lHQVJUYzRuaFQxMUJaNjZYWHpURkxGTnlaSVQ1TUxXK3J5Qm1vZFcyVnJFWERSTVpxUkQvMnF5TUw3MlhnUXBHRUxmTm96NzBndm83QmtCenhXcDZlaEFWYWNucGV0WGtONnhKR2RnaUp5aHBKaDdhQ01JZ0RNY3BSVDhxaWFMdkw3R2FOVStabjR1aWxyZ2EzWW9NK2lLc0hIcWo5R3U0bmdycEZIb1dydmxGUVBzUGNweGxqcU9Mc3ZkbW1qYnJlbXNIcmE5K3VTc0dEK29WdXBic09iN0Z4WllVNnNxeFJiZHgwbldPeGtra2l1czR2bncvSzBXQ0pSNXVJNzVYWFQzMTRCcys5RFRuQnhieVJtTkc1d3c1QmdXUFVKaG5ac2wyV1czTjUrM1VyZGlVMExpcXhJQzlmSmh1Zk5sK1dUSnF1MExjU2treFg0ekZBZTVSV1JMVmNQajVUTTFORlJ0UDViYmZrYy9ZYk5OVUlpTG5wVEJMVHNyc3BnQ01aeDJuRmFrTXZKdWNvaWp3YVVNYUtlTDdRUXVlajZLTzIzSkZsUUl0VXVqWXpPL1NZdUUwN2ZidklSTkc4TW5jcG81ZDNsNWxLMGpJam1kdTQ5WTliWDZvMjZZbFpjN1BmSGY5MHZNZG1IbHdaUVR5SEROWDFHbDVrMWo3Y1A0LzVNTkVwNDBRSnpUTTNHTGl2MEpyZkJSNHVBZmYwcUJCTVcwS1U0Vm1xMk9NcWNMTWRURGV2YVBpQ21iWTR3WXlWTDFnWk5uVlJzajRITHBhQXVlYW5xNExjQ3BsWHBSS2lreW1VNllhYzRldStFSW8rMS9ONStzOUZ3aTkwUVAyTnJnQ0tHcFRETERLV0xhUlc2a2JQYW1OM0VabUtSSVFReWRVZWJFUzArWEdxZHFoYmdNU200dUg5aGI3d0FhcU9JVjJDNEtQVXZtSUVMMUFQZkEzNEs1bG1peFYzNkc4MEtMc2JVbzFDbnVyQ3lCUkY3a2NGUys5RXNZWC96UWZmOEIvYmZkUGt5enNwTUk0cWpwbnNYcnJBbzcvMXFkZm5TMFRNM0FhUzJVVHZSOGVMVnVMZWp1d0xsSGRid25VV1haRlZtb3hobmFMTGpqQ2JOZmlaMlFKSkxnaUsyOHFPdWt5bHl4WnlldUpQM0MvcEliUTZURjJ1aFhnYWNLWldGYnZnejNHdndoNWdhR2R0SUNIWmRBUHdQYUN6SXVqYWUxZk1kT0Y5MmQ0UXdXSHZPWDJMS0RKbGoyaTZOamZvaHFzZ2hGdXVHOWhLcmFYTjBvaFYwRU9rR2FMTEx6T012dWhYRTh2VTVkYm9jc1pvRE1sTUlUTnkrVFdpMEpLSUw1RFUrMC9wZDBmMFE0bTZDWFdwOE1IUUkrVjluaG5jd1NES01jb1EvY2h6Vjc5YktjKy92dmc1L1NGd083OTA3UEQ1dS9kVXl2ZXY5RDJqWDBaWmRBZVNSaS92ZjZxODNXT3pKeGlZV2hqS0g5cDZEbUtVZHR3MzVmNFN4cXRiSDdvalNjV0hGcm5XK0Q3bFltMU5rK0htYXlyd2RQUkN2ZlltOE1zbGp4b2ZFYzJNdURYMzJ3L01NK2lsdXZ6ckRad1RjZWx0dXA5dWh0MEdsNDhkK1FuSFcwNVVzanpYYS9ubjJiTnM4M1Q5RUhab3U4bnQ0OHNGT1BzMTc4OTNDYlhiMnNOTFdUR05qcFU0QU1PVHJMaFd5NDVQWHF1VlJxeE9WUVRXU0dOV2h5cjh5QjU0OG9KV1lBUFpYY0RoemNLTzkzKzhCK081Ujh4S3FONWNtb3lrRkNvMXJoWUZZSzJvaEdlelJ0UVZqRzZwOGpuQU9sVXBqK1BxYmNTL25sSUNOV1E0QzdCRWNQMU9iOS9ZbmM2dGE0STNMbkpJVmtiN05tSGRXS2oyd3I5WnpLVGk3NXNYSzFORGU1eGRZNG9wejhyRS9RZW5IL2NzV1hZcUZkbWJjUWpYMkFmaXRwQkVHcEc3ZlBJdXZmQ3JLeFZhdjlZUVltV2tqZzQzcUFMVGZKZHR6S29VeG54RS8zZlJPbS9SaktpN3V6QW5PYWdnU0ZuWG5wYnJJSEMyTE5lV292RmwycFpxcmduLzVLTGtzakVpSU1OaS9JaEVvL1JGWlpnL2F4WURLUy9ZSlV6clU3dGdoOXVEbTdqdHBDRklXYjg5MngySTJ5cXlNU3JlYnI5SXEyUFdzSjJNWHJ3ck5TSWgzUUE1QTIvWlVJSzAxZmJ3dm1ZRUY4cUdxcEJpTEdYcVhTOGV1d1ppTEk3VjlxYVBMaGoyMFVKUDkycVZGNlY0dlVRZFlzMzhsOUJWZ1NuY1lPRzdaVmt0aXRyZmZ2dEIyYjdRSitLR21uTmV2SlVqV2V2aGlCQ3ZVaUdOUGR5R2VBWEx0MEo0ZnBDYzJHa0Y5OVhUVWtHNFYvdHFwS1hIOWVtcEJ4Vm52MnVEWFhwZkU4bXNtbU5XbE9NWTJGK3d5VkRNR1NkQ1llUG1ZbTZUb2RPeUN6blQ1bkRJTkZIUUlpWDRZblU2b1YzcTlVZ3duY3lsT0dhU1pvK1hTYVFtVmp1ekJrM0dhS1FYUnhaeHVnMUp2cy8wdzJENGYxdnh5VVFlR0JaNXZUSUQrNGRjOHNkNFQrM1F2bGZBWEIrYUk3K1V6Yzd6RkErTE9aeGY1S0M4UW0xdmY4eElBZEJvVXpsMU5LUCtSSGRGNGZpcDVsY2FtblkzZDFTMXYxYi90V1BJWWk4UmhMMms1UTVuYVVHZzhUb2ExMmlUbUZtYlVBMFVUV2gwQ1RPbVMrcGlnSGNscERoeDhHYW92U1dqTFhRcjBWSUVvaC96MUtVVHRuM1hlT2c3OURDKzVDU1U2UnJkUGVtVFgvMXNpZHY2RDVnVmFWWnNKVFBuVXpzbFY2dkZVdlhWRXVuVkhJbEVjN1ZYWnBOTGJiS3ZNYkJzYjYva3MzK0xvZVhUVjlJUXNnTU45bDBiMmdKWm5QTnBPTTd1dlo0dVdiWWQ1OVJUT1R3M0pHWHBudnFxaGJYK0cwREtWQ3RnRWwxVUxSUGYzZXJna045UEY2NEVFSFdaUnQzRTI2MjFmUFNIYWoreFNMMkhobHp3ZFQyenF2aC93WmRzQ0VqTm80b3VJTGQ3SWNlMWJSSHdmcFZXQlpoamZaaVpUQXRGTlZNTGc2Z1dNaGhxbVdoSzBSM0Vwb0t0eHl1V3pTMXE1bXJwT3dxOGVWeTNDL0ZSZVJNSUhLZVpLRUkrZVlpdW9tbDJDUG9NRmpYNnE4Qmx2MGNFM1Z1b1FrOEs1eWVNcGROSElJa3MzeGhMQ1NYbGZFOHF2M3granc5UVlwaFM0ekxITmYzenRyRW1NSjA0RzAxMlVzUFg1K3RxdWtYYlYyaEtiVWtSVEk2YytEeERmbE1oeG9zQ0ljL3pnSmhIRlV0ZGp5bHZXQ2twdUw0MmRXRGZwT2x1YXFsWjFoTkJ0TnNMZkJHUnFVSm1JU3Y5WjRGRWVrdmdqV3RzYkdyOFFlNTJJN2k5SmZnUlhnT1F2VjdiSk5hdCtPdHRZL1F3eWt1TndINGpDMWI1WlV2WnA3K3VxMkZrdXJzNG1nT2hkclcvZDlqZ1RRNjdwZ0tEcjhobS9rN285bzdzNTA2eTJDZWVZM1B1TzhGbW5ienZidFlQTGEzL1cvclpGSlo3R2dJTTM2N1h3UFlqZ01wci9FTWc0WG9EbTVHdWwxZ0hzNy9DSVNhYjN6dWdrMDRNYUEwSVZFVXZybTN1cFdEUjhEY0tobHRRTUZ5TmdpRVRJL2duZTYya1RkNmMyZGJrNVdIRHJ4N1pKSXNxY0tZdlN1SlJsSWFpb0J0RndUc29DdjZVb2dUQWRjZ0pMY2dKenlJblBJS2M4S0dVb2k5MHdmU2FSdXdBb28rb3FicVIydWNScGc0L2NqM0JUSmo5S2VaeDRHZmptbUFYNVRtV1lDbFRNTnltendRbHhXbURSOVYrL2lPY0pQWmZtQjZIbCtBR2pZMG80dFJ0MXZjSHU0YkZhbjJ5eitBYlJqTmI4bzFTVGpkR0dxTk94WDRTSVRWcHlDUFhJOHloaVQzQkFpWWUzeklWK0toazVpUkNQbWpUKzNTbGVwK3VCdm5nNURHTFFmRVhBOEVBOW5icm5Yb0FzWHd4ZTcrdUl0QUlmbzM2OFVnM1FtQnErd2pvYmZReCtnUjlpajVEbjZNdndKZmdQZWtyVXZ3YXFTSytWZDdENytEM3pBOGUydmgySXpEOXRlbnhWRDZKQzQ1MTJ4dDhsajVIZlQ5UGZ4cCtvczRIdEFWZHdZektuS3ErUXN6eGV4bzNyR3dMY3JkMlZkUVFOMW1YeDFQY3dDMXU0c1BiekJORUx2MkxhTERkVXRQMm9iUXhLOGF6SG9PNFczaUQzVDQ5ZldlVTJlZlIzZjcveUxGWVptRFFYdmM5SzlsYWdVVUFNZUxlZnhhc0FqQ0hmVmdBWkI2SWRZczUwWHUxM2JxTEY5YjI0STlaRDJzRGJpMTQvejhneTFpeGx0amd2T1VCNUxvQWdCWFl6YWxKZ3NhTXJSMXRYWWRSUmxHSDlSUWRzRSs2eG1SZzh5SWVvOG94UnVNUUJTb1B1TU9NWU1MZHM0eEdDSitIMlNNaTVhYnVzL3dDVlk1dE5BMFhtMHk5eEdNMEp0QU9xMXBnSzBCZEtBZjdES0d2ME1mb3k5Ri9aR2xhbE52bHdubENjaGd0Ukw5bFc2QXI0S04rb1NkZ0l4WHBJSnlGMjdnTzJPL05BbGgxVlhlTk95UGQ5LzNTSUtBL1ZDazM5WTRFUFlpdUhlTUJISnBXa20zUWVKRUxQRVlMMFc5Z2daS2E5ekdIenY4Ykk3REhlLzRZYmhmZTJFOWlvTzlKTTMyM2J1YnNTa1F2aU13K24zUU5KVWU4dE90cnp5NXYyRWE2N0EyeFZaVHM0dTh5MWpqbnU1M05DM2tFYmlFL1pqc2l1bE9qMjBRNjhVNllFaW10eGt1dUMzdkw4WVpMbzJzRkVhZFF4dXZHOWxFMGV0Nitsays3TVFIb04wUFlsc2FYYit2YU4zdHIxeTQyZFZta2ZTYlY1eGkzQmJWMXUxMU05d0QwbE96TFhuWUNSOTB0NHd0K3JpdW9LQTE5eXV3RDJwTEFKd1E3WjN5K2NJbmk4a2c2MThuVVNBVDJPNlZLLzNXQklhMWhUMmV3N0VvRlNyYU1JaitUV0UwKzk0cmFIQUp3RVQ5K1o3cGxYRWpxM3hESDNRRGc1SUdPKzVMOEwyK0ovK2l3enhQTXhnRWlCZ0FJL2l5Wm9IQW1NUDAvZUU1azl5NmlOZTFrNnc3V3o0dWNycVRweHlaM0JlVUp2MlJ5cDNYRlRQWWR5TDdKSXdSNFJranpON2F6WGkyQ0lNRTBwVFhvZFpjN0lTamQrckw0Rkh4R0V5M0FSSFVBeDFWL0xadmlqbDh3V1YybTFmU0NmK3N3YzBXMDZPcWE1bTZTS3p5dFJuaFFWYWdNNk1jaFJna0pNWFlFOFloQjl1bUtvb1RwR1JxTmtLNGZ4NE9XK3UrNENyY0dZcmdUWjV2bUc5VFVqdGZuaXFZWlVXVDZVZzBlRTNoa2lVRzVuQnBnakYxNERYYm8rRFFSYmZwVjEzek1wbElKQ3VjK1ZMSnhHZ2F6eEZ3V0kzWkxuajY1WDUwMHhCMDNvWjBNTDRhU1A2R3ZRWEtidVBNclVxdm1hUWgzVUdaclJVWk5pWW85dFhUUlU3eEdsZFN5cFk0NWJBckxVTE16dEFiNjVpbWRJT2FSRFlwSVVGNUJzSW83S1E2L1V6U3d0STJTZWRTMWs3UW9JWFBTYzBHVEY0dXpXaHhMeHZ3TnhGN2g5cjEyTExZWElkOUZENXNyTy9TMzJiS2VXelpQSnFYL0FNM1FoMXB1ZlN0NzZqaVF2WUVsMW1NMGVNN1RNa3dBQTN0OVNEbTc2WmFYS0xaNTY1dnBPMGl4dmZReUNJMmo1Qk9oVi9rMlBpVjNzUnQ0S3FGbC9tRHVEblV6Nm03VnY3OFJQYjNJMWpQTVhWQ3FWWWlmK0VURkhuVzNyY2hNYjUxZTF1dVZwekwwbGdHVElBVU1hUlVGY0tBRHNJRUUwUUlabUtmeURVbEZaWWNvMmE2LzQzUURDYVhza2NNR09LMnM1S0Z6cVB5aTdzamZKOVM4TlZvamo4b1gxTWp1eWZFRVFJQ1BjV2ltQVdnakxCd2tKcTBPSmppZEhaejJpWTNPWnpzRWtkbnJFTmx5blNOWVlsNXloREtYWWc4ajFicVRDQWhzbkM3eTVLdFFLSnRYbG1JeWhVdThOTExCQlppeXVRT1V5RGJKZEVVbXlEV1pyTDlDZWFhWlloSUg3VVMwdUpYbWViVElpalpCY3JGODAyODZKeWV2N0V5MXhFUU9xc21UdzduS3RkQVVaZXp5VGVEbGt5M1hCR1VaNDNMS3BoN1FISzd4cWVBUWV2dG9jV1JsRXRKbEEwMVJaTXBSS1RWRlhlcnB4VnhGeGI2OG5GN2pzcTdHYmRVMjBCdWVJVkpPd3NmRnE0VFBCSVVTT0xpNEpNclFWejk5ZFpNaGFQQzRXVHNZeWdFblpxczRtcndZS2R4ZXVQbFlLVExKcURTL1Y0bzRoQ28rRHZOUWIvUUkrdkhvcmVmZ01UUE1tNFk1dTA3NVA2SklYaEgvZTEveW53RUEpIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9Ym9keSxodG1se2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjR9aHRtbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItcGFyYWdyYXBoLHB7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNjt0ZXh0LWFsaWduOmp1c3RpZnl9Lm1vbnN0ZXItaDEsaDF7Zm9udC1zaXplOjNyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTU7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDIsaDJ7Zm9udC1zaXplOjIuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yO21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgzLGgze2ZvbnQtc2l6ZToycmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI1O21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNCxoNHtmb250LXNpemU6MS41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg1LGg1e2ZvbnQtc2l6ZToxLjRyZW07Zm9udC13ZWlnaHQ6Ym9sZGVyO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDYsaDZ7Zm9udC1zaXplOjEuM3JlbTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX1wK2gxe21hcmdpbi10b3A6My43NXJlbX1wK2gye21hcmdpbi10b3A6M3JlbX1wK2gze21hcmdpbi10b3A6Mi4yNXJlbX1wK2g0e21hcmdpbi10b3A6MS41cmVtfXAraDV7bWFyZ2luLXRvcDouNzVyZW19ZGl2K2gxLGRpditoMixkaXYraDMsZGl2K2g0LGRpditoNSxkaXYraDYscCtoNnttYXJnaW4tdG9wOjB9LmRlY297YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xKSAwLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMikgNTAlLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMykgMTAwJSk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLXNpemU6Y292ZXI7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7dGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50fTo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX06OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfWtiZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtib3JkZXItcmFkaXVzOjEwcmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3BhZGRpbmc6LjI1ZW0gLjZlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9ZGV0YWlsc3ttYXJnaW4tYm90dG9tOjFyZW19c3VtbWFyeXtjdXJzb3I6cG9pbnRlcjtmb250LWZlYXR1cmUtc2V0dGluZ3M6XFxcInRudW1cXFwiO2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMWVtO3BhZGRpbmc6LjZyZW0gMXJlbX1kZXRhaWxzW29wZW5de3BhZGRpbmc6LjZyZW0gMXJlbSAuNzVyZW19ZGV0YWlsc1tvcGVuXSBzdW1tYXJ5e21hcmdpbi1ib3R0b206LjVyZW07cGFkZGluZzowfS5tb25zdGVyLW5vLXVzZXItc2VsZWN0ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX1Aa2V5ZnJhbWVzIGRldGFpbHMtc2hvd3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41ZW0pfX1kZXRhaWxzW29wZW5dPjpub3Qoc3VtbWFyeSl7YW5pbWF0aW9uOmRldGFpbHMtc2hvdyAuMTVzIGVhc2UtaW4tb3V0fWRldGFpbHNbb3Blbl0+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5tb25vc3BhY2V7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2UpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIGJ1dHRvbnt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1idXR0b25de3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnR9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2hlaWdodDoxMDAlfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IERlYWRNYW5zU3dpdGNoIH0gZnJvbSBcIi4uLy4uL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXIgfSBmcm9tIFwiLi9wb3BwZXIubWpzXCI7XG5pbXBvcnQgeyBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0sgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXJCdXR0b25TdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9wb3BwZXItYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgcG9zaXRpb25Qb3BwZXIgfSBmcm9tIFwiLi91dGlsL2Zsb2F0aW5nLXVpLm1qc1wiO1xuaW1wb3J0IFwiLi9idXR0b24ubWpzXCI7XG5cbmV4cG9ydCB7IFBvcHBlckJ1dHRvbiB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0aW1lckNhbGxiYWNrU3ltYm9sID0gU3ltYm9sKFwidGltZXJDYWxsYmFja1wiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZXNpemVPYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcInJlc2l6ZU9ic2VydmVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNsb3NlRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2xvc2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGJ1dHRvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJidXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJwb3BwZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGFycm93RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImFycm93RWxlbWVudFwiKTtcblxuLyoqXG4gKiBUaGlzIGFjdGlvbiBjYWxsYmFjayBleGVjdXRlcyB0aGUgYWN0aW9ucyB3aGVuIGEgYnV0dG9uIGlzIGNsaWNrZWQuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVBY3Rpb25DYWxsYmFja1xuICogQHBhcmFtIHtFdmVudH0gZSBFdmVudFxuICogQHRoaXMge0N1c3RvbUNvbnRyb2x9XG4gKi9cblxuLyoqXG4gKiBUaGUgUG9wcGVyQnV0dG9uIGlzIGEgYnV0dG9uIHRoYXQgb3BlbnMgYSBwb3BwZXIgZWxlbWVudC5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL3BvcHBlci1idXR0b24ucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKiBhcyB3ZWxsIGFzIFtwb29wZXJqc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLXBvcHBlci1idXR0b24gLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItcG9wcGVyLWJ1dHRvbicpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLXBvcHBlci1idXR0b24+PC9tb25zdGVyLXBvcHBlci1idXR0b24+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHtQb3BwZXJCdXR0b259IGZyb20gJ0BzY2h1a2FpL2NvbXBvbmVudC1mb3JtL3NvdXJjZS9wb3BwZXItYnV0dG9uLmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItcG9wcGVyLWJ1dHRvbicpO1xuICogYGBgXG4gKlxuICogVGhlIGBkYXRhLW1vbnN0ZXItb3B0aW9uLWNsYXNzZXMtYnV0dG9uYCBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBDU1MgY2xhc3Mgb2YgdGhlIGJ1dHRvbi5cbiAqXG4gKiBAc3RhcnR1bWwgcG9wcGVyLWJ1dHRvbi5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEN1c3RvbUNvbnRyb2xcbiAqIEN1c3RvbUNvbnRyb2wgPHwtLSBQb3BwZXJcbiAqIFBvcHBlciA8fC0tIFBvcHBlckJ1dHRvblxuICogQGVuZHVtbFxuICpcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIHBvcHBlciBidXR0b25cbiAqL1xuXG4vKipcbiAqIEEgYmVhdXRpZnVsIHBvcHBlciBidXR0b24gdGhhdCBjYW4gbWFrZSB5b3VyIGxpZmUgZWFzaWVyIGFuZCBhbHNvIGxvb2tzIGdvb2QuXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvZm9ybS9wb3BwZXItYnV0dG9uL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vcG9wcGVyLWJ1dHRvbi1zaW1wbGVcbiAqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGJlYXV0aWZ1bCBwb3BwZXIgYnV0dG9uXG4gKiBAZmlyZXMgbW9uc3Rlci1vcHRpb25zLXNldFxuICogQGZpcmVzIG1vbnN0ZXItc2VsZWN0ZWRcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZVxuICogQGZpcmVzIG1vbnN0ZXItY2hhbmdlZFxuICovXG5jbGFzcyBQb3BwZXJCdXR0b24gZXh0ZW5kcyBQb3BwZXIge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3BvcHBlci1idXR0b25AQGluc3RhbmNlXCIsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgLSBUaGUgdGVtcGxhdGVzIGZvciB0aGUgY29udHJvbC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIC0gVGhlIG1haW4gdGVtcGxhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBsYWJlbHMgLSBUaGUgbGFiZWxzIGZvciB0aGUgY29udHJvbC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5idXR0b24gLSBUaGUgbGFiZWwgZm9yIHRoZSBidXR0b24uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250ZW50IC0gVGhlIGNvbnRlbnQgb2YgdGhlIHBvcHBlci5cblx0ICogQHByb3BlcnR5IHtvYmplY3R9IHBvcHBlciAtIFRoZSBwb3BwZXIgb3B0aW9ucy5cblx0ICogQGV4dGVuZHMge0J1dHRvbi5kZWZhdWx0c31cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGFjdGlvbnM6IHtcblx0XHRcdFx0Y2xpY2s6IChlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy50b2dnbGVEaWFsb2coKTtcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGJ1dHRvbjogXCJtb25zdGVyLWJ1dHRvblwiLFxuXHRcdFx0fSxcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRidXR0b246ICc8c2xvdCBuYW1lPVwiYnV0dG9uXCI+PC9zbG90PicsXG5cdFx0XHR9LFxuXHRcdFx0bW9kZTogXCJjbGlja1wiLFxuXHRcdFx0dmFsdWU6IG51bGwsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUG9wcGVyQnV0dG9ufVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItcG9wcGVyLWJ1dHRvblwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdGNvbnN0IHN0eWxlcyA9IHN1cGVyLmdldENTU1N0eWxlU2hlZXQoKTtcblx0XHRzdHlsZXMucHVzaChQb3BwZXJCdXR0b25TdHlsZVNoZWV0KTtcblx0XHRyZXR1cm4gc3R5bGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblxuXHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdGF0dGFjaFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblxuXHRcdGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uY2xpY2soKSBtZXRob2Qgc2ltdWxhdGVzIGEgY2xpY2sgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9jbGlja31cblx0ICovXG5cdGNsaWNrKCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmNsaWNrKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmZvY3VzKCkgbWV0aG9kIHNldHMgZm9jdXMgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9mb2N1c31cblx0ICovXG5cdGZvY3VzKG9wdGlvbnMpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5mb2N1cylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMob3B0aW9ucyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uYmx1cigpIG1ldGhvZCByZW1vdmVzIGZvY3VzIGZyb20gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKi9cblx0Ymx1cigpIHtcblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYmx1cilcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYmx1cigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvYXR0YWNoSW50ZXJuYWxzfVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0c3RhdGljIGdldCBmb3JtQXNzb2NpYXRlZCgpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudCBzZWxlY3Rpb24gb2YgdGhlIFNlbGVjdFxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItc2VsZWN0Jyk7XG5cdCAqIGNvbnNvbGUubG9nKGUudmFsdWUpXG5cdCAqIC8vIFx1MjFBNiAxXG5cdCAqIC8vIFx1MjFBNiBbJzEnLCcyJ11cblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfGFycmF5fVxuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBzZWxlY3Rpb25cblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXNlbGVjdCcpO1xuXHQgKiBlLnZhbHVlPTFcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfGFycmF5fSB2YWx1ZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKi9cblx0c2V0IHZhbHVlKHZhbHVlKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJ2YWx1ZVwiLCB2YWx1ZSk7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXM/LnNldEZvcm1WYWx1ZSh0aGlzLnZhbHVlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtpbml0RXZlbnRIYW5kbGVyfVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHR0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblxuXHRcdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMocGF0aCkpIHtcblx0XHRcdGlmIChlbGVtZW50ID09PSB0aGlzKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5oaWRlRGlhbG9nKCk7XG5cdH07XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoUmVzaXplT2JzZXJ2ZXIoKSB7XG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG5cdFx0aWYgKHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gaW5zdGFuY2VvZiBEZWFkTWFuc1N3aXRjaCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXS50b3VjaCgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gPSBuZXcgRGVhZE1hbnNTd2l0Y2goMjAwLCAoKSA9PiB7XG5cdFx0XHR1cGRhdGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0XHR9KTtcblx0fSk7XG5cblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZSh0aGlzLnBhcmVudEVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIoKSB7XG5cdGlmICh0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSBpbnN0YW5jZW9mIFJlc2l6ZU9ic2VydmVyKSB7XG5cdFx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0uZGlzY29ubmVjdCgpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdXBkYXRlUG9wcGVyKCkge1xuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ICE9PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiLCBmYWxzZSkgPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRwb3NpdGlvblBvcHBlci5jYWxsKFxuXHRcdHRoaXMsXG5cdFx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0sXG5cdFx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXSxcblx0XHR0aGlzLmdldE9wdGlvbihcInBvcHBlclwiLCB7fSksXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udHJvbF1gLFxuXHQpO1xuXG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWJ1dHRvbl1gLFxuXHQpO1xuXG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PXBvcHBlcl1gLFxuXHQpO1xuXG5cdHRoaXNbYXJyb3dFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09YXJyb3ddYCxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGlzYWJsZWQgcGF0aDpkaXNhYmxlZCB8IGlmOnRydWUsIGNsYXNzIHBhdGg6Y2xhc3Nlcy5idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHBhcnQ9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmJ1dHRvblwiPjwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwicG9wcGVyXCIgcGFydD1cInBvcHBlclwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cIm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImFycm93XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwiY29udGVudFwiIGNsYXNzPVwiZmxleFwiIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFBvcHBlckJ1dHRvbik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgQ29uZmlybUJ1dHRvblN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IENvbmZpcm1CdXR0b25TdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0Q29uZmlybUJ1dHRvblN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgY29uZmlybWJ1dHRvbiB7IFxuLmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja30ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpSYWxld2F5O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFGSjRBQklBQUFBQXQzQUFBRklRQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHb0U4Rys0NkhJVThCbUEvVTFSQlZFUUFoUWdJZ1FvSm54UVJDQXFCdWd5Qm1uQUxoQ0lBQVRZQ0pBT0lRQVFnQllVVUJ5QU1neHdiZmFRWGFKZWZtTnowWm9sM3Y2MGNQZVpNcEc0SEpTams1cUlJTmc2Q0dNZ2xaZi8vbjNGMGpPR0dEUkExclhlSW5jSklVa05IR242OXFNUkRVOFphampzOVVic210bnFuRTN2M3ZxaVFtZlJRcExrS1c2UVp3YWw2czVJVWlKTlVTVUcvT3dvRFk2QjY3NU9qU2prRFNTTXUycGVkcHU5dkpJTFVsSmQ3MDdEK2VMSHBqWURJNGUxdURuTGpISHZ4cERYR015ZHVMTG4xcXQwRkNRT3lGc0paRTEra0pxM1QrSWU3QkpGSU5PQU5iaTl2VFV6aEk3VzRHbVVMMGxXalQvRlFRaS9tKyt4dVBQMDJvbVJIZTVwbjREZ2ZOWmZuK1I5ejk3OXRtRWVOYXExUnhScUhUalRQTkEySkZFZ3JIZG8vbnQvVy81emJnR0N4aWE2RWtWaUEyRmhZR0l0Um1FMVp2VlV2cXRTdGI3TXZyZDNXNyt0MiswWGRvVG56empZYnA3bVNITEFDa2hNV2dDVEw2czBXdjBBVW9oSmZFcUUzb3BQZDU4aWtKbktsbyszdWFlU0hZSjZmY0ljWGpkK3JLVUVzYUVsVHFsVWxWUm0vTitlLzhpUDBMNUFLb3pObEozLzlpQndzaE02djVKSVVKeWtnVDNmZHJPbXE2TGNzK1orcS9Yc0FYRnhFRWlRSVVhS29zRm43Y3RUKzdCQlM1ZHFEb2xKWHVuYmw3cnR0ekQvdjM4NExmdEphZ0ZGQUxZUEU1QTdnbk1yWkJodDRsWHFzYlpLbWJkcTBUdE9tcG1nTml1Z00yUFlCYzczTXJqcTdHTHNvWEhjVHB0OXVQdkZEejhlTjNnK3N4clBRQXc2RFRGTnAvT1pJOWlpbk5pdFpoUm1wUU9Da2RvQmRBTmpWV2xhdk1pdHdETkpYL3BZSUFrVnduT1Avdlc1eHpvTXc3U0FGQUtVK1p6L2tuUC9aOWorT2Rmckw4S2UydmRLYm1waHV4SlN1TDhFVUFnZ0hJaUJIUCs0NDRFRHp2MVBUUTNZa09jT1NsVEhtajZVc2RmbzJMKy9qcFllN0lIV2NRVWdjZ2twTEZSMVlUVzhDR0tRWDliOEdGQUFBSDl0bzRSSFE2R0x2RlJyaTREaXdUekFBRERNS0RQci9mWjNWL3FkZ1Bta0d6S1RFbVdFWGI3UTN0dGdUWXFvMm5QNi8rOTdYZitGLzlKSEFWc0lJY0FDQlp3UnlrR1Q3Z0NSOFZvaEpjVU9PU0RqaVNiQXBoTW96bTJKUnB0QnRVVzY5WGJORkczSVZ5MktMb2s0OC9MZnNtNTI3SWFxQkxNdUJiT0ZJd2VGVWQwMXZlTCtZOHhXaHR6Y3FUbTJDSVRjNWVMSndTSTRmWWxMWUZJVkhBcy8vVDUzTjQvWXgxaEtHVStIU3FFcmRwUFBuczZmcXFXSnNOYlphQ2xRdGpsT0xVTXNoY2RvQTVUUXNzNEpMYzkwU3hDT01NVUs0S1A5TnNocHpwWDR2d3hLQ2hDQVNSRVJFL0xLc1dSbEp3TktBY1RuWEFoRXkzcjFLSGNaYS9ZZFg1ODQyMC9pYVhtdEdob0NBaUlpQVIyM3YvUDkrS1RBQ0FONWhka0MzeFVDNEVMc2dndmtSMmtyRWpZU0V2MEJLU21IQ2hJdllPQ0FKa0tRZ3lZTU0yUW9VTXpDbzE2Qko4NXFBV0NDZEhlazNBQjBPREwxTHEwUGdUZTNoU3cyZmhpNFhoUHVldVFXRUg2eHRJRVFBYkcyTm01b1Y1NFFGUCt5S2dPMkQ0VDV0L3d6MlhXOTIvcnBxcExUU0lQOHFWOXZMdk9kczBOTFd5WDUxSzZvZmJ2UFpFMXBhZjd3MzE4QzladGhxN2YzMmJmdUw2NFZaSHc1MTRZc201bGdmTmJmRzdXOWxzVUE0RUd6NzIzdnh3R3pwNGZSUittUDhMczVCN0tCMmVESlhjNnh3bEc2OTAydWc3QXpMQThOWTIxQjJkQi9QNXFmT1Y4dDFvbnlMNWpaRERmUUk1Umc4RDk4RnZIc3ZjbEh1SnNyZHZzSnJwYy9Uci9ndS9FZlpKelhVenBXYURqN003K1VQOC84RWtBQVZhQVMvQ1IrWHMvSk40WWFJY08xeEhaY1VhTU1ia2xycEt5N05mUUpLUWNVUmFnb0dtQ1crSEE2RU52YmczM3NsMnBJWVJtRTliSUhiMG1BNmtrNmxONUdkeU1ONUVibVFoeEhLbHdNZ1Q1OGNndzdwZFVSejduZk1jUWZjVTN2SWN6VmtkcmhYOFhIcTQwMTJ0Rk9kN2tUL2E3cDdtODNXQTcxRjdhTzlNK2RqdmRkNmo3ZnhtK0QxUHUzejN1aXJ2bXV5emE1M3RydjkzbFRiODJSVDJLYUZWVUtNTlAzNkJ2UU1DbzBHc0Vka0w4cyt6TGcxRXhiTTBOZ0NXQXhnemY4MkRHMUtYTWZjNHJqTmNRZkhLeFNDdVJ1Qkk1QW9kREREa0dkVjhDblZWRW1FTWFpbjRTYTBBWFRJMFJCTnBPWUFMVnExYVY5dnhKaVV6SEtXQ2lzNm1wMEJ1a3gwNjlHcjc0c25WTmJzb0Nta1ZNb3A1K3BER2FXejJzTERyMmlOdCtvWk8wYjM2WVNJaldjeHZubE4weDBWaGxZb1c0VVJqWFhLeUxHM1kzcW9MZEVhekhBRUVvVnVNbDNERGVFUlZwRy9qZVRFUjBDVVpFVTFtb3RxRm9pd0pGS1VhREZpYWNTbEJKckVqU1FLSi9DU0ZTbVNLazE2MVFsa2RLZXlTWFl6c2RYS2k2STlpa05KTXRDVUtsT3VRcVVxMVZIVDF6cTYrbHpmUU5BSWE1SnBSb3ZXYUVQN1p4dU5tVGpNTEJZdXEzWFVUZ05kUkRkNlVxOUEzM2NieEF6eERET04wSXhhTlZheGQvL3MvYWp4QUU2Sm5QYkZHWmt1QzN1YU5VOEVzRFNMWlZteE9qMVBkOEhReFhTcGVka1hhd2JXNndabzgrNkRyaXVRRkZ3NUlwdm5KaDYvWmdGSks5MzBhRU0yWEozeUpCMERIb3BoYnFnMHVya3ZNSWdZbHRiR1JQY2RrZDdWai9OVjRwYkFiYSsvRTRCakNnOXA1WmVyaS9wZE0wQ0cvN3RYWk54VkUrNmJZYXZRbjZ1bVd3eTNGWGY2Z2crWG5BdEhEZ2prUE5pVWJxcG93dkRVdmJSbGNqNVhaSFl6VjhKaTRObDF2anNPaHJNYXhPSHhlRHdlanovVklISlhuNkgwd2hnNnFGT0VVcVFvMFdMRTBvaExDVEtKMHlRNUxVOXlSUXBTcFVsZlpuQVNCa1dwbENsWG9WS1Y2cWliVEJ0TW1RS1lZV0hWVVVmdEdJdDYybGRuTUgzRXBpVTBxVlFxSGJDTHhPVStFNC8xWExmQkVoektoZ1VjZ1VTaGZ4d21EejlHNUVSQUFITDdGSFJLUXlybnd1eFFmNXJoSEJFQlJJb1NMVVlzelViYzRydE1kcGwyNkZnZDU1dGdRRzh4L2ZBWjJKekl2R2JtbHJjWEFtM3dYS2E3RWxmUGNTMnR4ZnErZWdmaUhHb0RNeHlCUktIdnkzU0ozMFE2VjgrNm1kZlpzYUZWM2VPVUtzV015bmtoeUwxdTRWSTBMMVNKTEl4WHlZenBMeU5xaVd6MFhUcGthVHluMVpEdGk5MG1ZMDJ2MHRVcXR6U0NsK3FySzdySXV2MXY5UkQwc2d4cUdiSm9HR2ZFa2xFMVl6cjI4TzFsMktld1g5TjRBRGFOMWI3TDBJYVJUWE91eTl5aXU4MnBPd0hRQkMrcGxkQ3JPbUswTWcvcjF2UllFbTNEQkVjZ1VlZ21VeDAzRzQrd2l0UWdPZkVSRUNWWlVZM200dG1FSXZ3VUtVcTBHTEUwNGxJQ1R1STB5VHF0RmNsRUNsS2xTYTg2V0VaM0pKdnNGV2k3SXhLSk9Cd09oOFBoY0VUclJOM3REcGxNSnBOaFJJYWlxQWlHWVJnbWNia3N5NE5vei9yb2ZRTDdLY2FsTkQwRk9XM1JHWnVPQlIyeG1WTXhrVWdrRGwwWDd1Sml1dFM4Yk5HYUUrdi9aUU93cWU4NkdJSWVFc0N1b3ZXWWZDcTJ0dnBNT0JON016TzY4R1dYTGh0bWdXMmZmZUhwMU11N3F3WDVORHdUa3BDU2NlZkJreGR2ZmluQVJJUklVYUxGaUtVUmx4SUFpWkUwclZxNjVJb1VTWlVtdmVxVU1ycHMvejFaV0VaNVlCZ0dBQUFBQUFDQTBXWnNkMUNwK0h3K24yL2NPbGs0ckRwU2wxSzNIcjM2amcxQ1R0d3pPY051Q1hZTmdpRFlob3RIMW9nT0xSU3V4OG5pbDRyMmlZYXYwbm9yelh2WjJuWmpaTGZhS0QrVlJnSC9mZ05tcGtGYmhnaUdpVWFjR2ZYTm1LNDlGUHZZOXR2YmNUbTc1KzNmZGFtVzZZU3R3a2R6YUNIWmN2cTBDUzRpVTVabU54TFhHQmUvclFvSGpNUDEvUUVHVk1aRkpnYkRESi81VDNleUJjdkdQU3FUaW1KY0MrWVFVanFHdjJuQzdxM25CMERPcXYyRzNWdmxJaEtJVzhNUlNCUzZ5WlRpTkdGWCtSR0NESHM4UFlJZFRqZEFVQXl2UWt3U0NwcGhOZDIwbXB1TWpRWEtCUWtXSWpRcG1KUlVLWXhLWGNMRGM2a0lmSGFUS2FPTVNjNE1zVlJZUTBlelU2RkxwVnVQM3RMSHV3cHJZZnRoaXdpSEZBV2tTcG1XUnQrNm5KNlUxOEN1eUo4NWoyeDBiMGQ3TjlwaWJxMGxiNE5uVStwTzd0RVVMaWhkVU8yaHJwdGdZWENzeEJGQTNsUTJubUZjM0ZiUmpHQmdDZDZCVUg3cW5YQmJhY2pzSzk5UmZJRE1BRmtCc29PK25aZzhQMEJCZ01JQXRRRWFuOVdRRXM5TUFITkc4NTU0d2ErQXJucXZUVGpwR1M3ZS9pbFBtakFSUG1uc3hXa2RBQVJ5T0w5eUFoeW14N1NHS2xrN0doNDh2RHZOZmRnK0lUQlpwRDlnemdNSUJ3d0JrNXRta0VYSXFxTU1hRVRnL0hVZTI2b0xUVHA0dzRnOVVrWjViZ2J4RUh0Q3lUTFlQSG1KVXEzdUpwcXp2U05jdW1iQmRYWVFza3UxQzkyTjhqVHZERkVVMHJ2ODE3Z21xc0dqUGZSdU5qdmVyVERtSENFNHErcWJ6T2p1SUl2UmFEaHpaMS9WSlVwaGhpT1FLSFF3c1o1VGpndUFCOEN1S3IrWUlNS2V3SW9NTzV4eDllNEFFQlREU1lwbTJPVHk4b0lveVlvYWplalVRYjhKd0QvWEI1aVNzd1VpZ2hBc1JHaFMwQ2d6SnpYTUNUVTFYRVpIYVRBWFRDUVNpY1hiWTRWQ29SZ0xFeHN0bGRDdHhaMWFVbmx1dEdodE9RdDE4L1JVZFZwa0RCdmJTNG5Fb05Gb05CcU5GaWRYbjBXSkxKQ3JVOENVYnFxTWhaR3BtK0Y4RWJCSVVhTEZpS1VSbHhLRUVpVlZMVk55UmdwU3BVbXZ1Z0FaaEFHbHlwU3JVS2xLdGJwbUE2d3JRTGNldmZxYUU3RFRXczZZSG0wRTJkY2xpV1dzV0Uzbm1TN0c1YjZ1R1ZuUG5OdXl5V2JId3hEanBXazZNK2oyMGVZTUxRLzAzVk1tS200Wm5nbEpTTW00OCtESml6ZS9LcmRDa1ZNbEtzeUltbWVaZjBHUXl3SkJFRnhDL3JnZ0NJSWdDSUl6OTBiREV3TVRqOGZqQVVBeGRTNlZzRGNzMWc4d2ZZQ1hyTmQ5OFNIOGdhams1dnVVUHFnNFhEUDlKbTdvR1d2R1h4U2RFTExmcnNFU0VzbVdYVGNNM2NMdEhGU0diU0hCQWpjQ2lVSVhKcUhuTWxPTFJCTGFzblVLMlN1eDF6cW5NQi9aTUdPeC96UHU4b2hEQURBQU9BQUNBQW1BQWtBRFlIZ2xDa0N1TFZBaVNJS0ZDUDBraFdOS1BGVXdiZHlMK3NEQnllZ2thSjJXRU10V3JFNi80dnBXN0c2ZTRtRHcwQmZ4WmhGdDlHdmZoUEVBbXlkNGNNdFVxc1BsNGF5N0d1YWs1dDBONTJPT3dKYUJnU05Ic2syTmg3cUVXWllWcThlK2tzeGpqM0VLU1hnOExOaWxRcUZRekUxZnY1dHZwUVFGdEZJbXlMdGl2VGVXa1FDazVaUmUyUWlKMlpyTFlEVjg2TUJZV1g1eEFQdW5rMXludFoyeDZhYk5yaVhBc2hXcmNma1U2M3kvai9tK2duek44STNZdHh6ZkNlT2lBUGk3WWgxd0JCS0Z6czcyV3JsaWZXYjNuK3NPbWtTaXpYSFRYcG12QW5PZ2VhKzdTOEYxRUhQOG5VNEluRlk0UTVtV3AzQkFMbGVzYTdCejRGdU9iRTRFWFJuaXlrOGh0Q09pazh2bGNzV1lJS3I0L2NITTNYWEljY3lPRHNCWEg5UjNOSUJqVXNkMWZpZGowaWluSDVyaVpmVU9EVGlGUXVsemVheDcrakhaVnl4ZjM4VTN4TGRyK1U3dTQzSDU5S2VnSzk1SnZ3dnlxbjNJZ3hMeVVHMlk0UWdrQ3YxQlREK0l2Q01QTWcwbFZZUkJuU0lRa2FKRWl4RkxJeTRsQ0NUMmhtMHNFQWdFSlREcnFiNGdKMkpZb3pTVUtWZWhVcFhxYk5yWitaaGVqYis1ckhyR3pjY0xRaEpTTXU0OGVQTGl6YS9LelFuTUNFS3dFS0ZKWVlHeU55SzFsdEpVL0o2V21GeFVxTHNJblhTczM0czRBSm5UTlA5SlY4MVpXMDhid294d2pNb0dnKzFnUFB4d0FNZVprQkVFK1ZzdXBzeG85Y1dTNWl2bmFTVXBGSlExVEVidGV5S2pNQUxsU1FoNlJLM2dDQ1FLM2VRVTRqYkVDN3VxL0F5Q0RIdUNCUVRzY01iVnV3TVVCQlREUTl5UUZNMnd5Um55RVN4S3NxSkdVM1JpRURQWEw5RFo1RjRJcEF1U1lDRkNrOElHWlZNRkNkT2tMdUUxSUtWRmxHZ3hZbW5FTmVOQkNWU0prbkpFaitTTUZFbVZKcjNxbURLSXpHbGtTYmJkOUhMazFmeCszZStWQ3BtS29oZ2x5VUJWcWt5NUNwV3FWS2NhVUczVWxmcG9rTWJheE5Bc0xWcTFhVTlHSWxPZnZKbE1wcGpKWkRKYlJqdGFOV2svcnpXb01JSWFOV2VzYXV0MDN5TU8yUHhJSTZNQkU5MXFmb0R5eENTd2dDT1FLSFNUNlFWdURoNWhGWGxwdHJnTWp5QktzcUlhTDE3R2Nka0E1OEE4Z0NZLzMyUExid2tuQ1FCQU5tdEN3Nk5vQnJWSXF6YnRPVXNXVTQwNWxDd1oxdER4NXAxbzdURWRKQmdTR0w3NzdCRWpvOTRhbzlvanRLOWJ2NS9oQU04UmE0NlNqZ21kZUx6TkRNaGlVSG51N1FtRERCWitJVUZpVGNKb0hjbElrU3BOK21aR2NUY0g1SWNCcGNxVVIwV29WS1U2NnFaM3VzZWdGM21uK2JGbHJpcTlCbW1uVjdQYjdHMFJ0Q2FzT3dLUVpFZ2g0ODZESnkvZS9KNkpyejJydnoxMThQazhQcC9QNXkvOU5QSmlyOWdKd3lsS3JVeTVDcFdxVkVmZFZGTnRocldnVlp2MlpJU1llcmVCb0pkSEtlYWVnMEo3VUJlcVI4U08xYW4zcEZBTUtMd0l0VlNKKytGbW5pSEVzRkVRVytwZWtvTTVIcWY1MGx4QkxMdjl6Q01BWlRQUTE3bjlYNWtIRlg3YzZRMkp2YitLU0lzU0xVWXNqYmhtdkpFRVd4TEhKRFhNU0s1SWtWUnAwcXVPSUtPTHpHbGtTYmJkOUhMa3lWZWdNQlc1VUt3a0dXd3BWYVpjaFVwVnFxT21qOXA1cWxOVDMvLzF4c2lBUkNLUlNBQkFCUURBZ0VBZ0VGNGtjSFBBNHkvZjJtN1lHbzVBb3RDVlNTSWFUZVZHRkFBbHgxUklaUnZHYzVqMEpJZW9jeHp6cEt0Y2F5Y3hJMWhTeVYrNjEvR0N3dXpBTWZRTXc2TFRLZDhvc0ZBY3JOVkRQSWVGczZMSEZ4bE55dGllRGpiOEdPUVFiaFNJdGowMmdJZzhPVmJVZmdGL0d0a2FDc01NUnlCUjZENTVtY1BqTGJZa0k4SjB3SndYZi9NMW5vOWRqVFZkV2hwaUQ0TWprQ2owR1lZNmtZMU41UTRFS2dVaFdJalFwTkNqYktvU0NOT2lYb1piVkY5L3pzTGRHWUdnVmJNendKd3o4K21xVTJzalkxQnJjamwzZkcvc2Z6NnE3b2cyWTM0dmZwZFVoZS9DWjJISDh5QUEveFE4RDNteUFJRE5BVnNDQUpiWm54aTJjSDVzMmNSSndWYU9tMldXc3RQR1p4WVpBMUtJUjdtdDNBekFtdGtGVUk1aWxEY0FtMlF3b2pGWEI2cjNJc0J5VnE1bCt0TmFiY3RyRitRckFRK2xraVVXemlIR0tXYzV1MUZVZE1LTWhueGl4bkFVNGxrYUFuby9uaHVTY0VuSHJRNlFFZG9SMkZJUTRHRm5ZSGtmQmdKVHdObDQyclFIN2RWNklCS3g0R0RJUFRTUEF0WUhjdWEvVXplUDFlcFpKTmF0T0FTcUZFUWtZQ1dTaktvbWN2SjRRL2xZbVI2YldpRVdXVklGQU5hSVRPVncyWlZIenI1TXpDLzBpL0Qxa3dFV1ZEL3pUOWI2REc2MzJpSzRVcUM3VFAyVU5ibmtFWTg2NFhZaUtsVytCUzNGVUt4SERRWW8rOEI5eXoxdzRoMDdCYTRRa2t6TDBMR0pHSXJyWitjTlh1QjNQdzZjZWRwQU1VNkd6UlFxRFc3bnRCK2NXaXNGeW8zV0NtUWpMME1tWG9CcU5XUkZJWkk3Z0RYaHRTY3Q4THBCZmtIc1JRNlhwVmZJUnZaQlU4cDg1RjRoSDhFS254bUVZbXUrSzZjWVkzZ1FlMSsvVHpKQUlSRjFjS3ZObW4yUTBNOGFPV3NYalQ5anZCQ3I1MjF4cXRXVkk2YXBMcGVoS2N4WnVXOUJXTEozUUdxZjlKVGl1dnZVMHdkZ2h3LzhJQlJJWDFWdU5ReXNCcVN0Vk5QWFpEdEwrTml2Y3dpMVBnRC81TzBveW0ySis3OG9uMHJ4Z0E5T0NsYTBnTjBKRVBIWS9ZUDRuaElhd2JFSjJIbFVuUjlEYnpmV01QQXZ4a3J0QTE0eDZqckFtWVVjZ1JmUmxabm5ZeHMyeStvd0xEd2tTMlZrM2RmakFBVVZJSmV3RDA2dHorQXV3NnBJcXhUbDRkbWpvR2xZUVhETWIzMUZKUHMrNjdqOVJOZ3NIWWd3d09jWXR1Zks2VmhDTE11YzRORlRidjlwRVFqRk5qTnIwTFdBSkIzWEdIbTR4N25CUmZYbUhRaFEwYnpxbU90VlRueWVTNngxSGJDL2Fyai9YZS83cU1PbDdNMGVVbkRQZ2h5aXNGOHFJb0ZiaGZFZ3F5RDRvM28ySzVSTHJNSllDYUM1Z3JId3VwRE5zVm9YRkkzKzlXWVBhMWx3dk9wOTFmdmFuR2hvbUppcDk3dXBOSG1PSCt5YjEraExJcGRkcjIxUmlBMTNKaWI3OWs2cFRCM2RGQW83MTRwUTF5UlpiVFhNeWRBN21RRTlSRkdoTC9PeHJIamRSbm8wWGRmOXlFZTBuWEZmT2VyelkrRE8zZmlCV0JGTUFtcUZiT2Vna0FxWFRWbzVmUzY2eU9JVmxMQ1NkY3A2OHVlNHlKZWxoVVB0VTZWbTJqbk5BUHF3V2FObm52MXc3SlA2eFFaYXdTSVBsT0ZNRVVHdXpQQ0JiMmRKVXlnWTZROXdyNkpVakpyNk5aY2JFWXdML2N4WmZlYzgyTE9zTUs0OXhYNjI4UDhOcTNUREVjSUFQWnd3aEx3NThoUEtrNUpTb0RCSmdpVExFU3RQQTUwbTdTcVltTlN4NkZOdjBpU2pVMDR6bVRiTllzNENxemZKZmxtQy9ZWkpnTkJ3REFhQmk4ZUJIVDVIQWs0SVFrS3VSRVIyY2VIQ2pTdFhZaEplTU42OEVmejR3Zmp6SnhFZ2dKU2NuRXlnVUF3bEpYZGgxSnlFQytjaGdnWXBUaHhLdkhoMkVpUnlsaVNKcDJUcEtEbzZXMlRJc0ZXbVRGNnk1RUR5NUVNS0ZQQldxQkJma1JJQ0JsVm8xYXBSYXRTeVU2Zk9WdlhxK1dqUXdGZVRKbjZhdGVNd01mRm4wY0ZlcDA0QnVuVFpvbHMzcEVjUHZsNjlrRDU5K0NaTjJ1YVVVNFJPTzQxcjJqU3VPZk4yV3JCQTZFMHlaTWtNNGJ3NWh3c1duQzVhY3Joa3hlbXlOWnNyTnR5dTJ2SzRac2R0elo3SE9zd0dFd3Voa1JpTTdUZzRFQzRlbkIxbmlKQVFib3VkRUJHUkhWeUlJUkxlY0Q1OElYNzg0UHo1UXdJRTJFbE9UcVFSWEhBUTE2VTRoQzdnZ0NFQWcwWUFCd29LRHJ1RWw2K0dxYkZOUExXR0F4REEyKzJtVVNOT2lCZzd0MFNrUzMxb3hlTWtqckZuMklJakp6ak1TVWhPdWtrb0VKU2lqeUdneDJJYS85WmMwM2IrbjgrZ3FrZ1MyOHM3NTZjalVwM3p3VHIrUlBlNlNlcmxVZFQ1YWV1Z2UvQUhnQno5RjRpbndFOHErSDRPdklXMzlGYmVXcnkvQnFNdnYvS1N1cGk5SGtyVmVmRzVaNElhdmZqeVd5K3A0c1ZYeWhlVlQ1bnhJcS96YnZiam9xWFgxWmUwaGowQVlGTVFaczJCa0FnRklHRnd4SFlOQjlYZGFtd3IzczcvQ0lmZ1laaWZoVDlnYTEweXd0emRaWS9oY25lVFlhL2tpejhLQ0JvcmhGWjRnMWxYQkdHV0tBNzUyRWxJZDlhTEs0U0ZOZFYzMjliRzdSSUlLVTRHRXZoanI4TFUxd2pBMjNzOUJtZ2JHalE5N29VS3dxaU92eVBaRVJJQ0tJekE2V1RwV1F3VjZvSmxlM1ZUbGo1VHlQS09qbTROYnZPZy9UOUdWZnhOQTloRmhRRFN3L2ZSanBDRjJXOE9BNjhpQ3lUK2YySC9ERzhDNmUrbTF4L0lJODc5TkEzNXJ3QUE2OFFXQVlnbFRUQXNZQUNFcWVOKzZteTN3WW9BNEYrak5vV2NOUzhPaWFqUVFQN3lNRmF3SWpRUmdTVU1MSTBRN24xUkFYNlJGOFlLSUlKVW9aM3lnQytRMlFvc0NrdE81bHVNSEdVYUUzZUxlOFZqMGhxcFdBcElFYWxPYXBHNnJkVys3cVJBRmNDZVlpa0E0QlBUc0xoL3dVV2ZPYng5UjZVOHFmQTRTS241ZzdZQ1hBU1FDUUJZTjNrQS8vMU4xZi9rNlMvMFkvMW9Ccjc0R1h4eCsyTmYwdSsvN2d2cUMvTHp6MEVmOU9SQnFqbjFQZ0xvWlE4YisxWjBjOGdOL2wvMkRXZk5tZktwWDEwMzd6Mkx4bjNsdEJYVGJFNVo4SVB2ZkcvR0pvU0R5NDZBTXhZMkRnRWhFVEVKR1NVTVRvV2dwa2N4TURKNzI0UjMvZUgxOFNDQ1M0SWt5WFF5Wk1xU3IwQ2hJc1VNYXRTcDE2QkpNeU1UTTR0T2Ivbk5XMzd5dnYvNTJPYys4WVhmL1RzdTNMTE1lVDliZFh0MmNOZXZYdkx5YVBqRkRVK05nUmNOdU9CMXIzbkRMQklHUnlOUUdEeE95am1vVklPTGg2K1VHQXdBa29QOHdKT09oaGJKQk5VdmhwVU5MWnFEVTZKMEtWS2x5Yk9iWGc2dEVoVktsYWxTN2x1VjJyVm8xY2FxVmdkdm5hTVFDY3VXWEhIVjVjaTRXVVFtVW1VME1NQW10Z1FzQlN6dEYzUmJCQmV3RklBdzVsNDFpamNiQm1RcDZ5M0FFTnQ4MmRBa3dqeG56N1A3OFZVVURCL1ZtdUFkK3g1NmNQKyt2WHZHUmtlR2gxWXNYN1oweWVqSThPS2JGeTFjTURRNE1IL2UzRG16Ky90NmU3cTdPanZhMjNLdExkbE1PcFZzYm1yY2dXQTA3UGNlZmVUaGg3cWRkcXZadVArdWRHMjFsc1RBUCtmejZkcjFtb3ArMExKMVRFZ2dTNkN1dkM1b3lBaXViMDEzWVBNTGJZelRiT0RBVFg1WUVpWXljcFU1SVZjUGZKRGxKK29PdWRzdkxPVXlDSEEwZXBTaFJkNGR1SDRLZ0VwTUVPV1pHYjVFRmNNalZKa0JVQlVCUlprQTJaS05Sc0FOMSsxMHhLOHRpNUx2dTlDUU9jWnd4b2J0VkpZU05ZU0ZJMy9lendpTEpkUUVsVkFWcWJGZlZqN0dGWUtVd2lMMk05Y1NkZ05tOExIY3NBSWx2M3QrcFR6aWtnalM4TGhucFJBNHlEcGJPN0JjZWtoTElSdHlyc28zaE9GYmlVMjlGZ21LWTVKODJ4UmQ4cXlsc0ZXa0VIL2JhbjhsbkR2M1p5NWU0RFZHaVozT1FSREJENDY0WG5XVG1vRkRSNTJ1WEpremxmeUNSTjBqRlVMZXFaVkxOUUVYbVZFbERvdFpOT2ZpelE0UkxiaTBLM1ZmUWl1T0tPRVNNRlR2MTNUdmk2Q1Z5VTdXeE1tS1czVWJ0RG1uSTE3eVgzSGNud2pnb2ZvVTRtYVNVbExuSVBvZDB3OHl2NjZvV0lNZFNpR1BVdjJ0Z21BNEVkYTEwRnJudFFtL2VsdGhmd3VoQUhXS3MrSnMvM3pxdFR4U2ZjWmRXdk1Ca0VrbzJPV2Q1aDhWeGtsMXdRMHRXcWZYeGpuYlhUd0R3NW9tV1o1cWR2SElEYktZeHlnOTcwcEp2ekF6OG4zNU9MUmtmU2JkRFRwWmdOTTlsUUptMmlVMy9IMG5neHZIMjlkQWVZMlFEUXZ4WjR6U2hwUWJoQWpCbXdWYkk3RjdJdko3a2lOMUZKR1dOdUFuMHpNRXlSbDBoMk4xN0pDS2lnQ1BLZnk5bkhOT3R6d25JendtZ3V2WlovVE1CY1FsSEFmdzVFeEhEc1hHdUZ1U2VvM3lDSm5aUmIzVzdVZjNhTlo3M0VZSzdrT1NsVkpzd1lZeUpDdGNHTTFHcmo5OGNuSGhrRm11N1BkT3duMVd6UjBoeFRuUlU4YUJKbXhxSDl3UUlJYy9mVVdCSGo4cXJJU2piTzJoUFc3bFJJYW9ESnBLcDZXclZIYjBvbDVMbktMeUZqMlRIZ215OTZBcFo2L2xxMWlOUFk4dndES3o1Z3MrRS9DWklDUHdjYWNxY25SaXIxUnpQc25DZ1FWYWc1VU1yS0dKNnk0K3lQWVpJN3lqS1RKS1NVTjRvVVQ3R1RkaXhPMERrZmNUVWRta2FCenFQYmk1U2lLZkphSkRES1kxWmwxMnUxUkFPa3dTcDd6SG42UWthaXBOTHI2RTBwSGdtSVEwTzN4Qm5XU3lZMjBjdUgyeldZeE5RM3cybUZ3UDh4azVjS2VEc2RVYWtLbExITkpHOHM1eHp5aE50dEVCaVJETlFzY0NsMnYyWkFuMUNpdHhNRWpMTXdHOXAxZER0ZHFpd0pUTkNmTFNxUlMwQXRWdXFRUElzUUNSWkltOHg2NklOd3BUQ01KQzJ2WUhyTk1XTXc1VHhKNFZpNEhnUlJva2lnRktQVHBuNDVKWWd4cWgwYm9xZ3VIUDZJZ2tRVEtWUHA5Qm1DdHlTT0pkNmJ5RTBsUTFkbmt0bGNpR1VtcFFPOXRCbjZBQlJCdlliaC9vWGFwbkNDNzVHR0l4bDhXK1paT2pvSFVodTdOQzI1VUpvTGRvdkMxVm9BaTJGQVhwK000TjFEeUF6VVVqZVN2NXdHN1piZjlFY1Q2ak1ic0oxQnBZL0p0b2w3TjBqcFFoZ0xoY1lmWWVVWjJCWHFHVUg4NVE4UlJ0ejJmUWRuem5sbEIxOGRDRE0zQk0wUlZtTFhHUEZWUmpFZFFoTFA5RGlKdnBOem9VQXZlZzlaQUxmSWpUVmI0ZXQ1dlBNOUFVVkMxMUpZQk15RXBKb0xhd0hWczNBMENORDBjZzIveG5YSk4rSUpXNEFLZjFHU1VhM1ZCY3VNclhsVVlUdWdab096UGZXS1J1YzhxWU1tbE9NS3dsN3gwa0t0c3dsZjJaUnNyajFoZzJ5enFCYVBsQWFNbGtSQzd6RzRXYUhjOEFCcmx5MG1EVmdQaEtnNjBLSUdzbG4xRkZRR29CSFkxVEd2OUtnSnAzVm9vM09CSXVBNDg1b3JoMGMwTkcyTFg2eVNBOXNHY0JhbjJRaG9iZ25pSjZGZXR1S1NIWExwNWVjTjFGaTFvM01nTW1LZHcwSXJGaGo4MUtpVUxEdlJKREk1S1NVbEtBRklLeFZ6Q3VnVXhYcEdnWmZBZ1BFRTkwTmV6S3pweHZIYlBUVnEyZE9hcTg0MkVOOXV5VHpLMkZZdCtXZFFaRGU0VWJlQjE4c3d2bFFVQ2lGcmJMK3lDN1dxbHpaT1ViMlZwWVFadTFtUFVrVDJYeTcyNk5qMGdwVW1vRVdJZXIvRkprZ2tnYkFBTDREaC8wbG81SkRCTUM3a2cwRHR6UG9nRjBLN0xXTFhSMDZQRU4wb29ISDFsdWVKa1FEUElXVTZNWk82TGEyc2d1bkY1MDhDMmxZR1pQbGN4MlhKMXR1WEZicmU1MUNJVVdTaGI0Zm9qNkxnR2NtbGcrVUNpU2l4Y0g5cko2VFRKZEFDMjRBcEdic2E1aGEvTklyK2g5SWVhWElDaVp1OEM0Skx6V1Q3Z0tZVDc2MzkrQUFqTGxwcGRYQUxibXQvemNkWjhuZkkvc3dYTmJaZHc5bVIxU083SWZnWktDLzRNQ3dwQ3c1c0QxajQwd0l1YmR0cEJOY3NWSG11VVB2aGFrc3hNOUY4Qkxrc1EzNk0vQk9KQVF0OFRCQlNVYlNvandLMzJFWWJlUXJ6dVlHYTluV0ZoT0tUbFFCdzlDRmo5alRHNEozTmdEdmV1QWcxVU9oYjRLQXA5cEhnYU1KS2IwU2xvTDdEb2RIc0xqcHRYaGt2T2Fhb2UwQ0hqRFU2dGtLQ0I0MmdaSnpSRGNQbzJ4TmVKclpEeGNYZVYzVjI4SndrMEhKaFUwOEx0R0RRTXFLT1AzVEdvQUk2WW5iRWtSd0RSazNPNGtpNjFJbnFUODEyeEtiaWlvQk1HRTVETHBNS3JpT3BvdkZMdGJJZTl4cU1xL1NUWXN5MFpRRjV5YVphdnAvYStIN3ViRG5wU3NpQndKRmFnQk1pN3dWV2M3VUhxbG13M2ZjTHZ2bW5WUlNGWVJRRW5neG5IdnV4OFExQ1Y3QUlBdUFJRGRBSDFBK0x3ZytnSGdQNEM5UUxnQkFOYWV2T1R3b3FNSFVvTmdtVm1FeURJN0xyeExIRFhYRWs3WkFNSTl6T2JHeUNHRGJrNkc1VWduVHBQYzMralpRTWpZR1V5dU5YZytNL1RpYkkyY0J4Z0p3a2IwYmdpNGZaZjVBQkNXVDdCRFNNOFllUy9KOG5vNElzeFFZazUxd1pLbTQ0Q2p3NnBUZlFqWGpVTHY5ZWpQT1ZLSjNQaFMyaUlmdWxBSzZzTUx1elk1T24vYkh6aFpETjJHYVBoNDY2WkxVVVpFbVdKM1hSRys4QSt2NVlPT2xGSU1SRkI0K0xqV3l1U3VTT2VwM3FyUFdyTkJvUnZHRFdiZ3FjdTk3MTVrWHoyQkVNRlVaWGZodkw5VUQvT3VtNjR3ejgxSWtzU1h2WnVJT3FjWVJDcHQrRFVpZ3N1RTNRN2J2Zzh6OXFFemY4bWZlSEZuNTVzSlJVdUxZeFEzZk1IWnVPN3ZoazhNMDkxUXhMQloxU2UyaVFOVjBkakV1Q0ZUYm55amVhcU5XdERVT2JxSmVKc0J1bklRN1BLV3F2SFBQRnhFWFRNS1JqZkFEYytNOWI3NVdpdEtlTjJUVHdQTWIwUEE5cTJGVVVHU2FMaHNsakRBVUFNTUxkS1lRSFZqY3dwZ1lLb3dhVVFDMTZycmh4QkRSVS9hWmdiRW9VcytBMTBUeGtzbmtTTGpaYXl5UmErUGhLS05qQlQ4TG9TcXJxQkdpcUdTUmlGNVRCQzdoNTNDaW9lRjRXRk1WMXpLNWpEUG9iakhnUDVhOXNCREQxaU84NFdjTDk0Q281RWRjSWtIbE5mSnRmbW1BRXQrQXAxSmF0dzd2NUx4YlNVM21lS0NXczEzY29kUVVZbEpWdis4dG11ckFHb0UxbnBNaFpleFRMb1BMMGtnN1VleTJNTEV1dk0weTQ1S2x3R2xXeEFobkhmTmpaYVdOY002ckpiTWltaTArc3p2OUJCcU91dGZQVkVqSGpJYk5kNXBhYU5tYkgzRkxKdmkxdGxPeE5zb3RkaU93VDluZVBPNytlU0dGRlR6MFRhZDlZZG1BL3BKOHFGYTVnc2Zhb2lzdzYxQW50OE92aisyNDJXSzNSVnIrY3lPQ0dUWFRaN1pxM3lISlFMUitxZnVTYmdQbDRVb1VubkZNcWx1SDlBUDhSaU8xa2Fsc3hlZUhYbmt1TkllOSs2MDZ6aWgxczhPSzg2ZWtNcjZxc0JzOHJ1VXE2eEZIMGdVZlZzT1lhbjNXU3RBUmY3RjUwdjZ3ZHVLYjBZdjJic3AydkN3U3FGYU1BcnJJTHZZVjBxeC9UczZjRDkvUjB2bWI3cStVajRRSkRIZkx3cWExTDJZU2FLZTZvY1dYVDZFaCtWd3VhUnlIc3BMdGlVTWVmcEpSVVlJdmRPcDVZRisvTWhnQkIycGZ3R2prS2NjZit3U0krQlZ6T1hMR2cxY3hXNERWZjlIT2FhSGlTczAvUjNkZlNpOGhkRnhZaDdNd2xGL2p5aHdEYWdGL0NlMnowaHd3RjRYNUpiRHNGSnVBd00wTnF0anNHTURDVjZHSzE5aGpVQURiUk43eUdkaE9oOHV3SEwzMEd6cXlsbWN2N2FJZzdRb2x6UG5Md3JiamNOdjM2WEthRlp6NGk4UFZIaGVRM29RcGFxTEpESTNTRGtFWExITUNKVFphUEt5ZlFUVVdyODZxSGNXNlpUZTVvTTd2YXRORFhrRmxja1VQNkdTVVFoVldpdEYyVzcxOWZQT1pIZTdnOFdyN0ZtMjR5OGhIa1RtUmdWN3ZqUFJYUHE0ZEQ4MGEwYVpnNDNmQlY1dFd2dkk2QUJZT2dmR3V0aThpL2txeFF1TEVHb0cxbzVmVG1tNm5zV1pyZGx1RTJicjBMZ2tkU2g3RjFNUzVwRDBEWkR3OFVpdFdLRm11c3gySDIxeEQvYm03eHhzOE9IMWxpWUpTVnc0WXVqd2h4UzMwQncyNUI3YUNiR3RnSFpVTEltNnVlYXR4ZXlwclZrcStsRm5CbVJWQWQyb1VUNUNWNlBMa1hYNGthS2JkZ1RtRmhqZXNvL0tqQzhJbWxnYkx5ckdLMzhTN0pqcXQxRTVhQ01pWG93YStVUGd5M2JKNTZkb0hJZ3hQUGdid0pyZFd0bE9HSjdNQ04rMDVpNlY3VW1qaWpoU21JL2VvZFhqSTJXeFFIamFtZlZPU1B5bldEdDU4Ym95OHl2TE40cTkzSmhwTDVwV0JuUkc2bGFhMXBFVjVtL3VJQXBSTjdSWG5UaklybW5BMnNIa1pwR2NHNnlzNlplV1h6NmQ4blRUZnRaaFFPYmFCWG1MVk1WcVprZ05ERmdEaTZYbFRZbTljVTJXWWpwelNTRkFTQnRxcXNTb2xpVVBLVWZiQUQxK3BpYldaNXlhWXppL2ZtV3NIUlhpY2ovOU5wMFp6ZmladEozMTExZWRnZkF0WDhXK21tdjI1MWRmRXdGQXRxRzh0ejJ5RHpMaUR0dmFiZXJXK0pxTmJoQ3h0U2dyTTZxNHNsVEpTNDF4YUNwQkdocHBEcnJpUVFXVjdOZ2RqNEY2aFNVam1vTFNCc3RaVGR2ZGZoQVluckJqVWl6bStnd1Z1OHpxaHNXYjN4L0YrNVhFVURVVFFYUUN4d2RIeHk1dmk2WUhuczI4VWlKaDBuN3hJV0MzNWwyc0dWUXFTTEhmMUNON2dDUUtrZUdnUjhhVFdxVy9CbGY1S0NBUWdUbXVMQ3hNelJqakxJc1I0UWczVmpvNithdlh0bXNDSm9aTU9rY2J6RjFLT0hHRDdaR3lrbGNXTXhzZWlEc1NtVXdDU1JieE0rT01WWWd4S2d3dlI1Wk5NQ1I0MU9RdUhzenVRMSthNyt1ZjNnTWVQM0dSR1hITTBHT2RiR2hmZjd6SWFSRUIrT3h2VGgwOThCczNmL0RBWTNwb0R5clFVdTZURUh5VWg1ZHRjaWMrT0NoUUZqZUYrUkR6NHR2cWREOUZ0T0NpQTJrZklIdmVrMlBMUmZ0QU84ZHhZdTRlMExpejdXQnl5K3dEeFg2Wkd1clphYnJ1ekd6V29PK21DK1pGa25Hc0tUdUx6TkhDSkM1SDhnVXpGczUzV3JCVk1nSzNJbE9CRkwvQkVRV205alRtY1I4VUVrMExKL1FFTURmZ1BIVFpDcXFXRi9vS2VldjRVUjRxR1ZVUzV6eEIwTmZ5clFkblQ4d2ZkRWFMdHBjajNKaDRGYS9HVDZZYzVadUFpMkRqdXdjK0liK25PSTd3Nk1hcU8rQ3ZLYTBqemFlZjREcVFvZVVJQWtka201dTVuUE83Wm13VHpBQTVWVWZ4b3VTMkdGQUlNQWhBMVMrZllZVklwUGNYaUZMRkNqbWdlT0V3QVVkRElIdzYwUGdwSk5EMk9GUkZid0lNRWF4aHBLV1c3Mlg3bG13OE9ZV09GdzJkWnNuMmROdjhKcCtmRkk0WmhtVDl3WmNaYTlnU3VBQlRydThodzVrMG1lQ2o3U3NlOWRLZ2dKUFJSZ1VzZVVWSGFrK3h4OE1RMUZHRGhNcWF1bG1uUExuQXREWUFDUzlPVzZKZXhlMUYrNHc5dkprejVVeCtxZ1c4NWpreHd6dzV3V0FXNW1IWnlmek9SYk5NekNPYzVqZFZwaFpzVXBzZStwR2dScHhtWjQrWjg5aTlwTzN4eGhnNVJoKy80YlVDakVwaDYwT1AxL0dXWnJXb3JpN2FaV3VRaStMWkp3WXAwYk5NZWZaaHd4NDk5aW42RkpjQUs0RG1BR1RJaUZXSnhEVHp3bEhmemZ6YXZRWWQ0eVlNeURTWVBDTE5tSkN6dUZGYnBvNUV1aWlRWkptUWxySXprRXhCR21LcDJMVGppa2lQc0tmUHZGMkpkRDR2MUUvczJlMjZzeGdDcnVDQjZNeVpMYnNJUDJUZDl1bk03cnNzdFAySDZGQmdVbE9CNjBDL3pZNHEzUXkwcHJuY0FTN0paTTgxMnlZZEpaTDQ0Z0lETnU0NjJZUmFUenk1SEtxN0xqeGpGT2NieGFYWnBCMHJiWmJVUFRPYi83cXhrZlRQT2daL2RLS1JnR3o3YmZJc29RMER4djN6OTgzTE40WW92b2FibU5aMm5qT0tIblo5c1JkVEdqSnF4SU9ZTWlkbkp3UlpEcGtUMjJwcGtkSVVOWEZTQmhYS0hHdUJoK2hsMytqNWJTcjJYTU83U0IzVkthWDJCanJPTW0xNHErUnNPR0JIc3dZRk5yK2tZTHpxQU0wM25qQjk5R2pxamthRHhNZk9hTnJXNkU5Vk1sQmlsVFZ4Y1dSaUFKZXYvUCtUNGE0TmJZcUVza2RzUzRhNHJWS0xLUUpOQkpRRmJTcmZqdEJtTW9FVUtTdmpmQWxBbFlUalMwUmgxTkhVdE1XSFc0Rm4zMFlVMEk0STlBUFU5cnd0dU4rYmVubFNjdGlFVFJZbTRnNGo3dDRBSkpHb2Nlb2tPUmdRTTh6MGZIOU5MTGFTUVJFOFdjQzRGZmthc0NiWmhYNms0c1NiR1hOTkxkSXZtUUhPQkdvR1Y0dGdOSzBzOTN4ZkF2cmk3ZW1NQWhhVWdjR0l5eWZmZVhTcGJIZzkvZDhtOTV1OC90K1R1Ny90KzdhNFR4L3NvL2U1TlB3enNwdktSck5UajF6cC9rL2Ivelgyb0UvLy8yU1dlK05xdmdtUmRVMGFLandSSXYxNnBFNUZVZW56YjNvNzVBamdIRU9rSUY5K0dYSTlmRU5ZS0g5Y1JrUHlxUTFHaFBYUytMTEdubVgyZUc1OWs1VFp1eXJGWE05RG1UN0tsNExtbVJ6WVlMaTVSMmZEa3NLSWJmQzVya3hnQURiNlIydVRmZW8xL0phSlA0WjJ0UWJ2NzVpYnVHOXZRYStvTStYYXVpS2FIWnM5MXJJeVFXK3JCbUlvZ3Y0WUV6aDMxOWZkdDZlZ3I4NjVkV1Y1NjRySitKU0srRzdpVStJZWJqL2VMeGZJOWhGWE92RXhjVmROQzk1U3h4MHA5SS9hVXoyYVZZeFh2YXE1YTlqaW03Mm1TY2JzQXoyTGEwT09icjB2Q1E5WUhkaEFwTGxYYS9XTXVvdytjLytxVnYwRHlxTXBYTEptZkVMWDhFYURidTF4ditFV3RKQnZvb1QwYStrVzJPbG00MlkzQWtSbURRWVg2UHJqWld2OTJwSmtVQk5pWDZnbzJkTGhlOFlqRVFPMXd5cWN2L1AyajJ1aTVIMlB5eXRPZDNKT0FNN3UxRTIyL0ZxbmZVUnJkdmIwNGk3b1g0TkRyeWZKTFJvdURJN2FtcnZWcTl3KzdhcDAxNGpGRnhxeE4vZXFWN3I4MmFtYWM3MTI1VUN3dVVkWDYraWxBaWxrdnNXdUdBaFZxbzJPK1ZPSytkV0NmUWNaN1NxQytPcTkvcnJNUElNenVNU2E3S0cyRmpOZ2lMY2szLytvNVZ0RE4xRnhEalJwc2l4TTNqWnd5d1NrQ3NJcnhCR2xtZXhLT3V5WFNxd1gxSXdXaktuVWFOU3J4djdtenFOdVRsVVVWWnEwM2NsYSt3L0xkQk82Vzg1c1VidElLSVlWS0w2SDdIaFdVck9yNENGcVpQRHhtKy9XaDVSUEhxWDRMUk55SWdqUEYwZVVsRElUdEhPZXFyYnVuL1ZUaWZVS3dXaWhtSXBBbzE0Ti9wL2dTcXpnN2x1ajByN1dLS042T0NQeGw0WExCMUJid0tFR3ZZd3F5elViTzduTnF2ckhtN3RvZnFCTTBkTG5kcXV2ZEVMQjhtQjVuMXpQV09qYTVKQXFTRVFyWGRDSDNQRGV3bjJoK3dvSmEvV1N3c1loSzlNaldzbDA2N290M0FGRHNsWG44N2RTaGlSbnZ2bWE2Qk92OG5RT21IVVFUUnd2WFc5L0Q2clFjUzAyWGozM0RiSS92eitmWElidVNwVnZWcXZIMVhmTnZYdXVtaGczVm15K3JRaHlqVjl5WG5SYTJiMmxMZGEvakg4YmJhVXQ3TjZhNFBpbFRaYzNtYmxqSmJveXpvdmNvdTh1ei91UElORHo4ODRST2o2d1cyMTB0eU8wb3JGVW9QWFhOUWJrOVpKWEdWa3JvRzZaTXk5WFVQTGEwejZyU2dxbGdYS2xiVkJicTQwcWNYOTMvdDBQY1p2c2tWSmx0TTFPeWJodktreXRLT1lNL3VWMHNWZ1RVZUlCRldGZzJ1VU8wRGZ6RjliV0JYdGpEanZTSUhsVjI4MmtuQmxML2IvOU5qcTR3TStNQmd0bkVSZUQ1bHpXWURTMkdxMHYvMENibTZSYTEzd0g1QS9ya3R5ZkxlM1kyczhxOXJ4Yi9LdXJHSWptSEhwUS9zYTlGKzNHMWpSbE5tWW9RdzVYMDhYMmZ2clRQbUtTWkR4ZGpNdlVwTEpIcERrZEJiY3h3UlQ2QnhHQ0JzUXgxS3J0U1Rtc2VBQ1pCeDJ3a1YzamZMVFkwSUo2Z2tpN0tlUWNYdWdMK3ViUWo1WFBidERvekJtem9jdFJhK3pOMmt5UXV3WWJLWDNuY29PMFdsa1FzSS9PQ1hyY2ZiN1BHSEpmeWY0VFB2OE9WaTJ0c0p5Yll6Y2JNcmdyQk9YR0pQdS9PaG1CRUpVZmpnbmlHQzZKN3dnQ3VHQzh4eVZSRk5rVW5kNUFWcUgzTEhBeTgxd2swdVJ5SldHZGI4ajcySUMwbGM3TmIyc2dmTTI2ZVVPMllmYncrMW1LU21YMEpsUFdaR3cxVVliNkRHa3laU2xEZXNOdDFiVVhsMFo1bzZFZmU1MEFXbXhzUWQxQnBNTVlkQTR2OVB1RFF3SFhpSDk2Q2I1c01lZlNCb01oWjhTYU0vcS85QzZiTEM1TkdZMHBLZ2haTy8zMnFUMFZVQVlxSFdER3FWYUpoOFRWSDk3TjBSbmlrYXBkeWwybkJKSVpWQnFqdzFDcmpnTGE2V0F6Wm5CM2VZRWhvc3JMNUFZSVoyYTJjeHJuYkwvV1JpVVJmZGkwNE14czI2VHNHMU9sWXYvUEg0Y0FoVG9nSittYXVFSWxpZTBJQXJKTEpORG1iSE1vRTBxci82aUxuQ1NqMTRkOE5INXFhVlc5UVJBdElvdTB5N05rdHV4RVhPTFVHYzZrMjJEOS9UYzJzL2pmblJBaEpJU2hqQXUrNlcyMTREMVFNZkVCZThuZ0krUWtlY09tTkgvNytTbWRNUEdkYmlFMHlhdGd2N052R3I4S0JiQ3lJQWwwMmxvY2RFZTYydXZjYTd1czJkY3V5Zks1eUNMMXN2SmVkNjJ6THJ3UzhuUjduZGloMlJXTkJ2aFN0N29wVzRzM0tHdjlKNEk0bjhmU0tDUHVYcU5BZWFOUlVDUXZObWFWVEJCdU54amhObmN3aXhvTUdkUnpybTh6R3VEMnpTbnpaMFlidWpKV2t5bHJNL1RZZDlZZEVveW1qTjNZYmIzclZyYndYQnpwb1BXSnZCM1VlYzg3MTUrNXNiWENLWk5wa0NLNDJEZmtjNDJFd3E3UlJYNmZQbzI1b3VmNWlkR1dldDg4cDJ0a1dxS3doRmdKV0hNdFJyTTVaNXkxLzY3VDNDUlI2MXN4WDR6VXU2TXBGRGRucklidVdnZlZ6YW5mMkZ0Sktjc24vNnJNclNuS2FFemEwK2MrSENwbStyei9lY2dUUk4rLy9iVldZd3AzaGFHYzNtOWRNanRRaHhOKzJDR0lvU3BKZkhzUXdnWGp2YVJsUDN0SENBSzArZE84MnBoUUdqZVljOVo5dU80dW5hdzBVK3V3cE5TT3FMUk5iZFgwTkR1c21BOE9WVDBua0RWOUpWQUY0QUZSbk04dE5qVGh0U0ZaVG05QTJsMkJOS2EzNXFuMkV5ZElUMkowTG83N29UblFremFkLzJzeEVVU0sveHBBcmJydWxCMWdKajM1ZlZHVzIwTVdhVlk5V3VSbTNWSXhyZWJmNHRwKzVaS094NXNoUFZObkpJRXVQOGNXOFlzY1NoM3BhcEpTOXJSODhQRE9MTEVHT2pjWEViKzVhLytsWnNsL2hHOU9ndnVidkNkL2NYMmRUaFZLS0EyVjZncjVKeHdJOFp4QUNGb3A5V3V1YXZOdDJsUXphYUxxRkdxdkdoVFNna3VSOG9iK3NCWU9lL1Zkb3U5RkZNOTU2cmhROE1PWWVGTkFHWGlHZkdaVU9icE1tT1ZMdmlUNS9tTTRDYmZUclM0OGp0aTlmL25KQ2RjeDZTMnpOUG5KL0x4SHROanJxYXRmS0RLUzVNMXZaMUN2ZmY3NjUyU0lWcCtlUWJvQXZxQU1HVjZQcjUzNGRQYU5wczlVM2ljOVR4S1Z0bis4U0FNekh0bFl2dnpocnkzdkY3NVhZSG5vcTJYTEh2N0svRzdCZTRVMWc0Zi9XVlcvUmlIeEM3MC96NkNPZnY3YTV6cmgvcHovSkwxSzh3YXJhT2J0MWxmNjVBOUNjMStaSTMrVTd3R21WWVRKb2g2U2tqMWcxNWNjMlM1NWQ4L0x3dUxZUE9BZUVJQUlCTTRnTDdvV3EyTC95VGNPclBMZTVZTFU4TTdPN3RzK2ZCc21Wdko5Y05WVUVYbnE2Q25TZ0RzckVQV1JSc0RaTUpzbisrYUZXNktZaHJHVTUyb1M1UmdhNXZtVkZRdVZDOHNoZVlWWkZqQVoxRnZqOVFuSEg5TFhlS3krOWljVEV5eTZpNVd6ZWh1aCsrcTcxeHg3RmxIdFhNU0VKNlpoaGVTUTVENXovVVVWaTVTTFhJbGR1T3kreEVmTUM1RDBzUXpwcmlYVTlSYW4vVE9KcWtFdFdIZTJ6S055ZWlKKzVvN2kwVlZZMjZ6cFh3Q2x4Y2ZTWkQ5Qzc1MS9wY3lZTXZDMTR6TEpWZXhVUmgvWDRuVnFVcFVJWExkcnNBdXBWdFZ0ZnV3WnI5Z0xNUElpUk1zVmpxOWdhSnpHclZKQ1NjZW13WWpmUHhBQm5sVHFRRlFkakk1SE5vZTFDNU8wMVpLaWdZV0JMWUJkTE5Zay9aZGV4Um9WNFNCMmZMdzFjMFhDSXZtenEwcXJ5RktCU2ppVGtmb1ladlRvN3dzckFNSFpmelJBNTlZakJaVzZQMTArdnNwZWorRWVCWnJaOHVlZDA4NTZ5c0M1QkRmdysxY3VFb3BvcmFaVWw5WVZHbkxzalJCWkV4UE5KZ0tCMXNabUhsNlRhQXpZOEcxZUdXRk5HNktDYytQMUlvMHRxOUxIS1lYVWZady9mOFdSTk43M0JmaDVra2dlcWY4WldTMll2a3MzRWo3cGZxaTcxbTVvSk1nR0k2Vk4xT0Y2TW8yL3I0bHVibEFUUnQ2cEJrQk45NW50WFl6SDJUL1B6TVYrWWVpNTg1eHVUVDFZUy84MlY3ZW5OVlpyYTNWUzZPR0JnQyt5c0lWK1kzZUtYcjNBRS9BTzBzNzVsOVlZMHBTTEdxbFVCa2lvRFIveFZEcXQ1Ny9BM2FrKzFUZHVMdUc5YVdmU0F4cVhiNDdSbGpXcThZQ2JEQW0zWUJBR082K0hPUXA1bUhNZHBqRVl1MU40RDZOWEJQZ0l0b2xoQStvbWhjbW5SZEJSTndzZ211VW1mKzh5RkkySUVIbFliRzFaTVF6QjBMRGtOd0hrRTdUVzRmenUzQzB4aHpWM2IybDYxWkFuNkJtU0tlRmFLU01JR0tsa2VBOXg2NHE5K1hOZHZuNW9tWTJXcnd6MTlkY3kvdG1NZnc2MDNPS1Vyd2oxenE1VjkzQWs4NnlaUnFQRmxyUlljcUk1cFBHOGp6M1RiRFRWV0MydHYrOHFGcXNJSTdHaFp5cysrVDFMWFRQM3k0L3p5TGNhYlQ3TjdkQUUzZFR0aWJqTW96eWtWb0tlQUdZMnhxRzZzMktJZTdSSmFnM2tUT29NWmNEOGJuVkVKcVlGNFZySGE2TDdpVEpwa2JNWGMwVHFPR3pLblZHYURVMkkxb1dwelV3ZjVBTlZZTStnbXlFMDdnUk1NaDBXSXNaeVVVbWhodW5YV1pNbTVmKy9IYnZzMDhtREtyT3JjYTVhc0c1aURqN2FKYlk0MFhuT3NFWmNVcXdiRHYvbGZyRGJVZFdweVhxSGF0Y3hiWFRUVGdiZUo3OGVYRjVuM3p5TFpQRnZyT0RnbmhPQnAvdkhUYVdMV2hINlRkbjgzZlI3c3RFeS9YNXY3c3JRSzFYWHZGMk5hWVBSTnFScURCaTQwZi9uNnhRbCtMNVE3WVorNDNwa0VOOVR6QUNZbW9HdWNUeFNpT2N0WW9BM0poQlp5S1hWd2p1Y3ZCbzVHSFJxMWNpS09ML3N1Z1Q0Q0dobStndzdLOEVLeHp2U3ZQNHhCOVlKbVdVN0p5OCtJcFU2REVBMS82NFJQYzBJTlQ2M1N5TVpHd1B2MzhlUHM2NEM3RmNMYXh1MHFjNnE2dDBRNlZFQ2NFTEpjS1ZjMmd1Q0lJMnFsWjkrdS9uWjF3Y2xHQ05va3dESHhyNGVScVNIdlh6dTFPeWZwSC8vejc5aEJzeXpUMjk5YlZVNGRobDFpWWNSNUVtdkJOTkVsTkkxQWxvcTF6RVVKbEY2Uk5MTjB3RDg4TGZ2N3AwK0NiNE9iSmVxMlhOV3cxdTlvQW9OSXAvbUpYd3BLL3ptaDkzNVBnUVBaUmFOUk5KTlBwVWZ2T2ZlT05sZGhGQW8yZ3FBVzhWQ1FkbFdGMjczRFpENmFaTnlWbTZPN0ZsZkRhcnlpcnZFOG1mUTN5NUxwSGZSSEFDNGVKZEU4dXZNclRYYUdxWkRKT3JVODJzYUZ3akVYZkRwanpnbFU0Zy9kUU00SjZhMDRqei8xVUxjaitUZi9ORlRpTldYeXV2OUhVQXczQXZlQlNNSC9DRHV5elNIUjlNTGZRK0JXOHNFUXRFMkVGZ21GQXFKcGRYZmgvU3k4M1dPZXllNUxGaUhnS0VwSjNobC83V0JiNEYxcmw1T1d3WElQaktaQngxeG9YQzE4OXdkdngvaXp1RmRYanFDUEkxUFZGOENPSzk2ajRkTWRqa0JkS3JpdFNIVTduZ0ozZC8zZjd6L0oxazhFelQzenhTTkJhcGgrYjZ5MVRXMHJGcU1Lb2RjKzFTMUZIMHlMcURDQXZEcHZMZy9iVUVxdGZGZnA2cHhwdGxMK0tDRFRzQjExeDJKbDRvNEwxeXZLY205VXVNVllNY3Y2WlFja3U5V091dU9za3VyYis0Y1BwVlBudC8xNFpzYlNDZE9CZVVZNWdPM0FVZTYwU0x2dytCU3NhcGF5cmVFSjBwc1pmLzNXaE9mRkh6bzdvTit6enp2LzNsOGpNVnByc3k4d0VsV1pTcU82SVJNZHVYa1Q0OUlwV29LcUM2K3EwR3ZjUWsxSHNhbGtUd3hkc043NnZoSHJJdkFQMllSWFpMaU5MOHJIc1hmTEpsUzNNV3d0ekhjdkRjZzMrZm1ibTlUOXY1YkgzOWMzRGorekxqbDJmRVMxNlZ1dkx1b29KRFgwOFBqOUN6bWNXL3U1ZkI2dTR0Y2h4dXhSdlJ6eXhWdDhiSm9WYk91bVJVdFl4cnh4bkRNdzJFenZOeDM1M1RueU85NmREM3NXLzhsKzV6V2JKM3NLVjM4MlhMeXl3M0tXM1JmNFBvdlBrMjNNcVJjb3Z0eXZYeW41aU5jKzlHbmk4REN5V3NDOWlrakhOVGVTek1mZkZOZjdjd2NDdkVlZk5aTGU4Z2xobUZHNFBpYjRqdE5DUkVLdWJuekpWNDF1bW1ELzhGTVd6K0Z2dEdCZDNDMHB2SmQwNGN6UlRXYSs1aHhFWmRBOHhmRmM1cmpJdXhkQSt4NHo3TGN5OC8yQ0E2cERnR0g4RVBsbnByRHFzT3p2SWNiOFVaRlhxNW1OMXdkNVNMam40K2JQeHN2Y2FxSU5VUlJvL3pXMlRhOXBYamR2OWYzRmt1TldLem96d3FncXJ4U1VYYW1lUWFYcFN5TVlXVzZsN0JZb1pMRm5lSDdyMHdobTZvQ0ttN01pR0ZHYWZINmYyN3NLV2FYcGVVbDNSajFBb1dWTkdPR0Z3eFlkMGxKUUxJbi9ycXh0VE9tU3NKZDNCNTFoQm16cFJvUDJWYklWaFI5bXJSTFY5aFgzTnRvVFRGakVUV25CK25DazdsT1UydnM5U0xYWmVJaWtUcWZhSmFldndKRnhibERxdmQzdnI5RGRXNy8rNkpGQVByL3YwN3IyUTZqUWZUUWU2THpXUFBCamcrdWQvNFFoSHdkTnZVZmRLUHN0bXhadGlxcnk3S3lnYThZeHlzb2JWOUdxdHRqNEN0Z3RiT0d2aXZycU03b002eU9zbHQ1WlpoL2tzcXFod2ZBQnJVOUpFdHIzS2JGZlJGUDRjMlNtNFA1N2ZTdXFXVlI3Ti9YUlM1dWNHbnByeDVUdlFDZS84VW9SZVRxSE1qTEQ4WXIvdWFHNUhzbnV4NlJBWTkyZWJ4UGVMM1R6UktKV2U3M0R2czlIWThDd080T3Izdlk2Mm1ucGVicGJzOGRtczhVc1hFWW5vQ2NjZ1ZFajhQUVY1Q3JCS3JVTElJS2x1NDZlMmNCeUlPVzZ5WmJDclpoL1Q5MVE3NjZRZFRxY0pXYk9pbzZYMEorMUY5ZDNJR29PM1FrQjFVaElyTE50SlQxL2RmLzZ0ZDlQL245MDYrWEZja3BCd1BtT29UTzZIVStYR2NJakh3T3lMUkRIcVduRUMwdyt1ZkoxSktnZ3BFd2NqVVJqdUVhZmRiMHlmOUxJbG9VWE1DRHdMOFZMbkZZQzhUVTdxVlYraXJScnkveFdTK05MZDAxUnlCQ1VUR3Y5MmI1WFYxSlpQNS9OVHZnSFVkMVI3ZkQyNFdmRGlDcE0yM20xM054Sm1LeDl1a3JybGhGN3pDNlpydDgrMXJmdGUyNFZlNGk5SGEwYU5VSit4WExCL1dmWmZFcnlwY3RYN0hpSHo5bDVOTG1CSjdBVEhFOGZ2SXdkanZHZDMrQ1lBamFUa2tsMy96M3dCVmo4dk1tenZEQVZiYXNBZ0tHMU9mQWpJbUoyV0VQWnNGTTJJWmI1TGRzU0wrN0JNejV3cnZONlJxeFNGVEQvK1c3QWlEL1R2T0lXSnI5azh0NTVYaCsxYVgyVTZxbmx4TXpHMmFRY0x2ekdYYWZ0MG9PY0ZXdkVWMlpxUXJCdERVTzRETEt2RDhmSmlVdlArZnRoQWZraWdHUWlsTkFqdEJVWXFYNC82ZUZrcyt1QzBYSHpxZEtXMDd5TmtKVHpudTIrL1JHNkRIZ2VsYWJtM3o5YlVkNVh6cTQydGpaWTlwU1h4a3NkLzdtbHN0bUh2RytPNlhVZTJJQk16bFN6OFZ4VDhVRmtoMmVReUorM3RmL0cySkNsZUhzYnpQOTBCYlJuQ2F1OUFtdWM2WlBHQ1JYcEhQRGxOYzlTbVl6MVBLUW4xeWViaDJodk1wUXRmYkl3cnBxTkxURzFObGwyaHh2c0czcWFWOUxiYXc1K2RiR2F2UXBOMXNIT3l1MndKTGY1VksrVU9ucEhUMm9veHY0cU1vZFZXZ0pIN0JOZ1pIZU92dGZkL3N0S0lOcmNuVlN6TnhDdXBQUWtBUDM0eXNUblFObXQ3VmJaYSszVU5wWWdqNVpIakJza0tLMFFRdHR6eGRYWHB4OGRjT0RydEp2QjNZdFgzOUc2ZjFUWlkvYlZmWkUvb2lKN3NVRExsdDl0L0taRGMxNXIvZGtldU1iNHVDdVY0OVpFUXlrbjJSWU10bTlSUU4vbDNXR0FCWGtGTDZJb0hmOG42ZHZBa2hHTHloN2JlZ3ZoYzRVU0NvSWNQbmVxYWVYWHZnZ3dBZWR3dDJ3STY0NURYbksxMjFIaFlCeWpWSzA2Tks0LzQ4YUx2b1hVeTJ0NFNwZS9rVjJ6L1RZV3FxajNiQTJHakdzN1dqYm83SFlPbXJXb0NVU1BiTjJ1Q1ZSc1crRVNEWHJSdngrY2lTWkd0WDRmYjVSS3FVZDlubnRWQnArOUl4MFluRUpiVVVhS1dWTkhjWFVLOHkxblpSN2lvOURMUHlmUFN5WFRDVngxNzRucWxsNDlva2IzYXdJTEtodVBhTFdQWFhOdXp1OTJ1SEVPYUo0K2VqNXZhK05xRjVEeG1RMEtIdHl4am5qMDZwNUI5YTk0ZjNhcDZvL01WVWF2ZjB6V1BKQTdoSjhLWWVjNWVXVEF2aE02a1ZKOHNVemlJRE12S1hVYjVCK0pKVzV0OUpSbWZRb1RoK3RabjE0b29wMXRMR3RlR1o3VTlPMG1jNWx5ZFdiQXpZWGJkeDJwK3BPL0M4elNRVkdqTy9CM3RsRDdPODgzRmsyTnFWV0hwcHBXcG5FazFuL21wWm9WNmFKZEpIbU83TzlRVkpTdjBodGE3Q1U0SnR5Y2JndC9tbERyZjRVWjhFUGdLVWcvQ2NJL2dHREpmV043RWtlK3dTYjlUdVhOMWttM0NCZUM3STVudDRDb0RBbG1pNFExRE44UVhkdkFWZzQyMDd4OWZmQklyaW8vcnMvSzF4YVY2UnM5eHM3WHprb1NDM2pReW1Cb0FuYzBmTUdwQmhocHJQZXR2eDlycmRYc3ptZTRRS2dzSjhZUHIwYWFidW5xZ0F4TVFUUUR2K05QY3d4ajJPeU02ZHUvM2ZubWovR3YxMWtQUUlCZk5CY0N3S1R3M1VnUzV3RnJBQWRSeFZ3UmdXOHFRSXVoMXRIS2xPa3I5cll5MThmYW93aVcyc2c2N1lHTDFqSlpNSlV3b2NxNFR1VnlCMi83UUtLN1hRYm9QR3dCcUxXUUQ3V1FMN1hRSDZ6WVEwSUkzN282KzJnYUFINzEyM2QzN2MvUERkY0swSUFoL3ViRVhLM0NXd0hwMkV5UE95Ykg5clltZjBCMlBzaEFQTXNTSFptY2V2NEZzZnV4ZjM5eGYyelYvLzdENHNYa2JnWmh0bDhxd1lPcUlFSDFHQ2YrOEVmTDlOcU01K0d6VmYybjIvK01FZTBtVWV0WmNCZS9TSG9ja1ljY0o3NEJyeDZkUmdBb0QwNEIwNzBxY2hvellMa1dvYjY1YTV2OG1lV0ptb21BR3B3bVBJZlFCZ1c1TzhXYWpBSHZvMWR2L3lpNDhiN2Jmd1RQWjNzeEFHdi9hZW9ZUUFndmw5S0V3RHM2UjY0MGZ2MXdiSHhTOUgrVDk4OXJTck5icTNuTkwxZkhsd0ErRVJET0lBZmgxemt3UlZIV2d1UFRtRWZXSy8vM1h0TjcwY2V6cVhiUkgvL3M2RDNiMytRc3p6c2xOSms3N2Q5R3hsc1RDSHB4ekk4dSsvVDc3ODRRdFc4c29IM1ErakpCSENSOGtyNFJ5QStmNnVETXo0TWNqWVA5N1NodjlIQ25wOEtmM2lHVWd2YmcvZER1TkR4U2FJQUtNVC8yMWNaOEtEOERMM3h1VGhGY1cyaTRwOVY3aFhMVzBCVkgxeUhsNHQ3UEwyL2xRdW91emhYNzRyd2h2MGFrYktucDg5N1BOTzdGSHpqb2l1V2xGTmVzK1Avc0JiUC8yS25IZHo4dW12clBaU3hGYkxpd1Z4eURVb3hwUmszbCsvOHpNZVBoNVIxR0FjQTdzclYrNC9wQW1KWDI1VnNpNGd2QXdxeFdEVGFFRkp1eURRMkVjbldYcWxLb3BLcHVhblJBRFRBaFpPMDdYWmJLamtibG5XcDdSM1lhQU5UUGI0cEdUZHp1VU9xZFkxV2llOG1EM2pvY1QwNlV5d1FBVWxBMjBZQm9LSmxYUkFKRE1sTmtNWjd5U290WkVRalFJL0VVY2xXbGRXT1hWUm1DbGVPZ3JZV1ZJMUJMN21iKzcyZTBkTnJzTDBDNGRaczNvRUtoYXh1TnNuQkViRnhNa1NFUisrWmpMWkhZaEpWVjNteG95VlJhVVQwcWpvdnJlZ2NWZFJzWGprbWFGRnRFZUpsamVRRlZRcG1VMDRRY2JDSGpBejFpVUlhd3ZsT1hrTzZMUjZrWGVvbVhNb2paUk5WM2ZxcXgzN0hoN2ZVZWdEVkMxK1pxRXdscTY2M3pjeTkzcTU3NCtxdUFyMHR0QlVxZitKdGpGaXBjMEJhK3lsNWE4Y203WXpOcktOQStJUUZPM3BmMWZyVmJlMURTcGhOV1J0b0hlSk5oZnNYUmVleHF2c0ZxU2ZVNzU2RTFpeXJzbkJaV3hwWWFHWW1JUkt2V1M3ejdPZy83aTRnZG00SkRhUmNtaGpySzFNNk4vUmFjbU9KaEdobDlZMDRIS3hralovY0d2S0NuQXJ0ZHV3SWRLMUlSaWhXdHN2b2I1SFlXVmFoQ0w1N2laWlM5U1VxK0RUSDg5MXVBSWp5bFZlbk5hMXRTaUdiSFNuMnpYbG5wOHVxZDducW1QbW5Dd1hteDIxWDh1UEh4emdmRUl0RXk1OXR0OSt1djdMWGRsUG95NWw2NzFsNE1BSjFvNVdvS0lGMkYrNlhaMVR0NjJMTjVndXhXV1dsRXRNa3hQZmR2TnhGcllnUjEyMVJsMnZhc29EOGVnNjNzRjR0UTdsUWVHeGJQZUxNQ1RpcXIxd0RMK3ZTSmZWMis2TVhmVzljRU1QSzBMLzg3a0VpOFkycmI5VkR0K1A5R3lMdjVjQldKMW91N2NLZEV4V2VyOGpQNHd2RFNzK3o2QnVQYUdLT0wvQ21saVNhNGJ5aUx1ZyttUkJSUmZCQU43R1NaMDJDNFhIOGVwZFdyL0NCOGdiVVpVcGVTczV4TlFESU9ZVkExRW1JZWlLWFdLWlJBMVZHVENUeG9tT29nT2pRRGNmWCt6MXJsT3loblV3dEVQWmlRRFNsU1EwWEhPVjVzaTllNlozcTY5Qm50QzIrNnZQb1B2Qys0KzBWYlR0NC8xLzh3WEl4RzQ2bUU0d24wSGkzL1hBUXBpTGdBRlpnMExqNUtIKzFYQnJIUW5waFRaMHYrM09qSXArNmIwZ3M2dW9TRTdxVndqdTN0ZWg5SjlCT1hjL0N3RHkvL2FVbUZxbEZMTW1INWxVMVI5aFJVdzRTYUkzMHFGSFdBbm1tU2xxbythdHVHNFhzc1MxNXpmMVNzeWw1YlozYjRwRlg4N2F5QWNkbWNaK3pvZWh6em9YRWRhUVNaa29vTHZtVjRMbXp1eDZ2RXdXN1JWQ0V0V3QzZEFVSzNmRmlaMWFkaTZWT1FYY2g2bXpHenoyaHpqZk1LUXFUamlqMnUyYXBqaVRQcmFSR0o3N2FOalRwY2Q2Z1BKQldBUDlYdGFwY1dQOXgrakw4amRQUHphL3dxaU51ZkRBdzYzYlhLa2xybXNBZStRVThKZnlmQTJ2cUYrUlAzWW4xM2VoaDUrdTVIcmJNUklZdzlQTHRvWDh3T1lHMWtYZUM0ZWE5WjAyTTNhTWF1bno5Y255YXZYcjdMRVFQSHErcXBoaUpIeTBKZ0pnQXlzem9tejNUbGxZQkNkYkl2Uk9jVWVMZ05aTHRMT3BGcHJYMDRXS09nVjVBbGl3OWV4MmJNMndmblkrbk52TVYvaXZ1L2hPenhGSFZibEpEV2FOSjZTUmx1Vkc5c1ZxMHhyVkVYVGZVS0J1TXE2Z1BRWGRVczFJeVZ0U3dKV3h2aGQraW5YUTlJQzVLaHhITE10NGZuSm9zdXRZTXRxWEFMQnZuUUZRQm1IT1dkbFZyK0RUUHhsSWdkMkdNcThsaFA0OFJEWE91RVFNWmk4OStZaWNTa3RnSklMbm1MaDRPaDBPMGVNcXpkbzlieW9md21PMzd1aFBySklkY0w3MnNFNXg4enFpb1ZZbWt4VkZGYTUvYmxhbzNBS2doL2tFT0FtUHV4NWJETk9RcTFiSUt3VW1KaGlZSEMzQ2NtWkx2a1dGVmtRNVplam5FOWNCL3NDSWk0bFUwa1k2ZXRSVU5hWHVvUUx5dEowTm95Mm9NQ2dyTGlKQ2RRUjNEQk9mK3l4VUNqdkxmUUZiRWVhL1RsNzJTdU5PdXBsVCtuQnRhV2dybHl6TmNST3hzYlgvVEZkSnkvMmd4UGEzb1UyR3BZYkNoTDJ2NUgyYXlJTldOUUwvem1LellxVUNzclYyYXNyZVhSTDcvY2w0YVQ2N1NNVEF4RWZKTHdoT2hOaFhPSnUvcDB3Ti92Q1ZNcUN6eE9qZk41ZUxSTE9DS0ljK01yMXhlNmZBd2JGc1c0TDRjMjdtK2F0b0FkQVRicGwvTjNSSmdiQjBuZk0yNkxmdUtrUFJzRFNFQTBWTVRqZERYWTdKNGY3OCtZRi9QNCtzaFYraGNsWlRHZnlQVG05MHVWS1BSY0JodXRLNUNLV1llOXBnYThjdUNxUmpoY01vNXhOaDRRY1k2SlIzYWs1WTQxbTVTUkI0V0ZGVXRzaXFBVWpVU01CWjY3UGNNSWRCTWEyaWNGSjdVN2oxV3NmMU9heUdjcXpFekMzaUFXVWE1Q2pXYWMzaXYwN0NTSlJJbUdGUGJpZDNPcjVXQ3dMZjIrNEoyTHNiVTJVRmhWU3dUckZxRHpJYzRDbUJOakpEV2xWYlRhRFFhNG1Za1hwZHNreUozZFRVZVQxeEd0bFRJSnVGTU9HbmhPbEhLa2hORUdoSno5QmwrakFsRE1Db0RRbXFaekJXeVVWU0lQSFZjNjJRRFpnOVBITndGWlRERWtJa2xtZ1FpWUxCUWtENEhZOVZvckt0YUFvU0xLQUZwTmNaVVNobXdJTzJzbFJXVE5qV21WbEI4ZjRSUnZ1RmV4d29xUTFaa0JhdmpodUppM2dvZHlmREpLd0x6QUZEdm9oYVdoRFJpSjkyalRvd245MzZ0dXdUaTNKbFlsTXR3T0N5dDE1dkYxYUJsQW1aQTgyb3RPZElHQ3gwV1FKb094Ni8zWTFuWm9mZm5sRGxvM2IvSDlyMFNJRExtd1lPdUpjOWRhZjJ0V1JLQUxhM0RWOXBCR0x0bWJ2YTNwQzRhSjYwUjZYcWJHYTdSKy9lVC9kNVFxbitvOG9kWTlXQytwdXlWMDFoaUNId2NvMjRVcFZGMUhSMFNtdjE0SWNxVXNOQmpwWXJhWG9wQkY1SmFoNmNxT2svSmFGWG1wOGxrMEphTWdoQ2tGQnZRRFB6ckZwUXVBT0lzYVkydjkyWXdwMTBnTkZFcGNyZGg3dGFlTUxSdFRNa3hHeVV4U1ZWZ0ZTbVhaYU5Qc3hzWStJWnA4SkdreHBPYkFGOU5kMGFXMFBQd25ycjhIakNiQkN0N3BjcmROeStIMjhtNlErcFhqNDgrVU1IS0MyRk5qMlEzZWYrM2FScUh1UkQrbWIvNVNlZnc5NE1hTUxDZkdWWlpDU2Y2UzQrSmUvUGhCK1NtSzFKZk9EVTZFMVpVcTVNdDZ2V2M5emFPVTlWbGtndnE1SXpoZVhxTGhZM3A5ZE1QNzVvLy9jWGhMR2VmSGV6YUs4OHpKVjFmOC81NWk2cjY5ZVFmWlhEMzFsNzRwT2JqZXJQWmZSazNjNGZ4L0xVeGVZZ3RiTTd1dy8xcW9lOXpiWW5wK1R5TUI3ZFcwOS9CZHl6S2JxdGVLSGtzR2x5UVVGYkt4ZDdOTmR4ZEVrWkFBQkE4aWxNUEd6dlJTZ0dCRUR6WU1Ybm5VRnpSVEhVU2dOWjdWVVQ2a2VBZTI1cHFmOVFYMWY4NHNXRGlJOVBIRWJVNFpXdExZTFBFVDZWMFFObTllbDlpMExROUhlOTRRdkNsdW5JRUdpUmNSbXBQbVpRcERRbm1GNmtoQUFQeHZ4OS8zMy8vOThMSC8xdFNOS0lmQU1CYSt3OFo1QUY4UEcvOXM2SW4rZTVzRGdHZ1lBQUFFTUMvSDhnanQ2dnIvMGE5VTc3WFgwQm9LQlZDZW83ZzNZU050NnZWUTZXZDRuL3dsZXE5UWxaTlptMUl6eS8yeXVjTC9Bb0lSeTREcGZ1TVEzMndKTXJQNkNMUFVEZmg2dWVCbGxyaFJmQWI4SU41VzVlU1ZjYXBPK3JhUGkreGJ6cmZYYXpvN09kOC83TFkxUTZnLzU2bDBwZVpCQXFvL3I0dDRGOHkzK2hpQ0dlNG5rQWowK1hXVWdrdS9teWNmVjJ2eEUwWkR2cTdUK2FVdGhPVXpWZjlPSkFWV0FtQXJ5NXZ3RDRuelNPZmVZMmRwVXR0MithQWZaNnFkME5sTHNjNCs0azRKV0Z2ZjlRVHF2dEdMZVJqWmhPQzl4WjUxY0wzc0lEOVE1VWpaZHV4MndXcWtLcHRGR1VJTFpsSEx3clpJVDdGVUpjaXBCRDhmS0U5dSs4LzRpMFg4dHZidk9ZRTNCQ1BqYkhsSGp0bUl0a3h2aXNpMm9FdWZKeTBJUVlOekQyNm84K0swYkZzbDR2WS91SUpRSFlvZU44K1dRUTZkd0pQUzFpSndrK3oyRlMycHllNnJjMHRiVDNCODFMZmgyUzdoaGZVbXJGeUxxMEVvbWlJYjUzK1lLVmU3NUxNZEF3RGtKc0NjLzBTQ3NUc3hVK1lXbS9LZXVmSytXamNzRjdaWkZ6YmhURWozcG41eXhVdEQ1VldEc3N1ZUN0aWMvQzJNZGZJNTd6STlyMlFIdU5TZkwyOEp5bHo1ZGs3RW5JUlAwdnRYd3h2TzJEck12YXJ4R0pFcTVYWExMK0xGOVJ4d2VsSWRoTngwYlRIdEpvUlBSS1VUaW55bFpJRTRFOVhuYVVUUURnb3hCMk1BcEFuU2tOSzVKN3U0U3ZCdG5PL3NtZS8zdDAwQXViSi9NSGZSK2s4WkVjRnlnTUFCTkNRZnJRMkZJd0R0VHNCK2g4Y2c4TUJDSXpEb1NZSEFKYkJ0d2JFM1hzYzY5Mi9OT0RVcmpZbEdrZzdGOUpBa1U3WElLQllXNE1EM3A3ZHo5SE1NcnNDQXJBcjcwSStmb2FjM1ZlUThMWDVSSUoyUmozTUd0VnJZQ1ZHMHRBNktOV3dvZHJlT3BWYS9ualhVNnlIV0p4WnV5Yko2dTZnVTRkNHcxN2F6RUpNb1Y4cjR3RCt5a3Jrb0VaOTFGWnE1SEx4OWlYb0F3OCtIREFJTTJwcVdYRHd6b2ZYUE53YnNnMmZSKzlrNnlLRmdMc0hKa1g4UXBmbWpWY2RZbUZTZ054ZXIyT1pZZ29FRFpLQjlYMW1zbVJLRW5scklEUU5RUGxBVURZdWxTZkdXTWN4ZUllZmVxTUk2dkJDMWF4dzQ5NXZJYmZ3QldId3hWVXZVSXlXanRUd1cxVGcrY1pURGIxOWphcnArZlZWRWdwNWZYN3M0MEs4TmpucXJqbjB0WTIxRmRNYjdZb3BpVTF4VldLVlB5YXh5S2NrNWxSTmlHMkViUnZnVWlrb1RnOTFTWFNnYkJKY2JTMHdhNlFCcGlScW1VMUlwYW9rS2k1V01aR05pcnBHU3VHVVJDWlFwVFdxaEsrS2VhcUlxd281OFFLYVA1WGgwZEZXa2FseGNGdlkvUFczUXJyNnc5ZGMxM2FsSm0yN3JpdnQybHdWaFY1RklscGtwYW9CRVZaNVlWYXhFRlhhQk5hL3RwamZ4ZFplenV0dytEYytJUC9KLzR5eTROemdyZ2JJd1gwRUdiVkNaYVd3bHJTU2NqNk8vRTArSUJGaDBkMGkrNDV2MzdkbU5aWEs5VFh3R3Y4TWZQYmV0Q3g2WEwrQXBDbERXL0hqTmlLKzd2cnExU3M0MjEyOGJiRy9NdmlNYzVHbzVKYzNLbWRkWjI4bzdFVTdWckNHQlBaNE50TDg5L3RsWEYwYklZbU5Jd0JCQVE9PSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlF1aWNrc2FuZDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBREkwQUJBQUFBQUFkWEFBQURIVEFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR2x3Ym5GWWNoekFHWUQ5VFZFRlVIQUNGQUJFSUNvR3FJSUdHVmd1RUtBQUJOZ0lrQTRoTUJDQUZoVUlISUF3SEcycGdSUWRpMkRnQWFQQVpGa1d3Y1FBRm0rOFRSZGttblVqMi95bEJtekdoZGVoYlpTRjBSN3VvN2hrWkNaR1Q2aG5wb2JaVFd4eTZjT0RoMEVnLzlvMEZSK0hBOHMzSjFiM3R3NTlYb3pnY0NOd2pabXR0d0NWeFg0aExvcEVrVGFSWHQwWklZMkl0NGpmOTJYc0N2TVJMVXdqMlFvMElraGN4S2tZcTVpUXRjZm5pbXJwWjBqcUh0R25nSmJsL3REcXppaXFkcXdBem9RMFRMeDg2TXpwWDV0STVUL3p2OTY5NzVyNEFvb3NSQkRKZkJibWtXZ3NJdG9xTmJHMlhKOUNrZW9iSGJmM3pCQm1vR0ExSTVhZ3hHTzFHVGFvTkVGVE02N0l1b245Rlh2emYraXVpd1FFSy9XL2FobWlieitWZEViVlZSNFlOK1BkL2pjekNUTzdMbndXZ0lxRmw1UUFsMjFZQjJwNUtKRmxMNkpmN1plQnpmdTRjRkozcStBT0M4UVY2NnpvYld3WWhXd0QvVjVzbXZFWG96RW1FVFd2dEtHMlRQRzNoV2NwUW05blFPdlI4SkZJVmdaQmQybWJGYytJMWZZWHZ3TlFrWml2cXlQMGU5Mzg2eTFiYTlkM3pCcUdMcXdBWDNYcHpiVEg2K3RiWHpHZ2tBMnVKZlF5ZWxmV2VKU3ZnQzBKRlVGMWF4TmRUVTJIVHBTajdsSmwvbmVtcTcrOXZTTWsvNkphZEdzc3FyZ0dlZXRuYU5WUEw0eitkN3F4L3NneG5GMlQ1ZWdIU1VXeVg3QUREVk1LeG94ejBCY2h1WHhpMkFzQ2F0VFB5dmdPT05UT2JyT1NjY0d1Q1FsemhFYktCL3ZydHoxaXJIOGhzWm5hNzluSW5oeTB5UkVMQ0p5TGdXZjg2LzNBZ1REQUFBTHBqTkVnM0pOTlFaTGhzWkxveXBGdzFwazRkY3RoaDVLaWp5QWtuRU1JQlFwK3VKL2lsa2hpcHVDUEhlZytHOWxwRm9RL2EreE9LYzZIRkF4QjJ6cnAzb3pBWGFpQnV4Vk04Vm1Da1dtVjd0dDgzVXFsNmk2eHd5YXN3Q3BWOStjelU1T2Zqck1ySC9CMWJkc1NaSzdtU1cvYS90Q212S29KRWloWWpWaUtQUHJ5bUtWRGtQLzlyTU1Nc2N5MncwRkxMckxQUkRudGRjeDB6S3pNL0U2aUFwQ2o2TC9rL2FLQTNBMjhPeVZ4YUM0T2xUNWFkdVBNUFdmWkIwdkJrUnRuY1lBR2RoU3VXYmxvMjUxclQ5ZUNPQ0tMZ2ZiWUdrcUJKNlZReWE0S1RHSUhVZzVmaHFSU1lFak1IUnhJSEkrbEozRlR6dE4wcFdoN0REREZQcHRvcHVONDRKL0FJa2cxU2VPcGNpOWhQMFJUUUVpV093enhOMDBaSFUrVXBTMUdGOEJZUEVEM0FCTEYxbnFMRmZBdFNJZHM0dFpRckVKQ3o5VEt0WjJUTVVWaGF4SE9MVzNpWVN0MHBvRWNZZ29TeDQ3VkRxY3loa2drRlBZSGR2TVN4OVY5K3Q3Nk5MWnFEQjJtOVlZaG10bXY0ejBsNzFhRFgvaGN6T3dRdXhxNmsxbFVDN25tbnRHL1AzU3p6S0dRL2Z3UlVEL2NPTVFpRElwVGdqeHZ2Yi9QYndFOXNsQTZpakxJVHhia0dscDJtWGhmVTFPNUEveUhlYWJSV0l6SWRXaldaMlcwOThTM05KbXhJVXhEMEpTMklRcWg3L0RMT1ZGVVk5SS8wNzFkcUpGeTRnTjlTTnlQc0Fxa2xKR1hQYWZlTSt4YkY1cUlZYy9JQUJ4bWxtNEJjQitvUE9SejE5Q00yb3VoMm9HdEVOTjJBSkZyQ1Z6TzROb0QzZXhXU0VLRzRzak1EdE9WSlNnWUxWM29TYUxZZWU2T3JFNTlKV3RJN1hxNkZNTkI2cEJhRHptU0c3eDlQL25jb0FRQzBZTzY1QVYvOFZxUjVwQzdPMEtKUlNUaVhNSGVhanp2cThmRDZURWF0ZFNlRWRDeUp5T1A3SFMwSE5zY2puNEVVSDdJVnY1QjlOY0h0NlErUXhyNU5nSmxFWXBCYmw3aVdGVGcyU3ZzdE5McGsxd2QwRU9CL0hLT1A1MW9Ba0tIYmswY3hnYVVTbUVkenZ2UkVYZlhuVUVxeHFHZ2R4LzFwVUJuNnlTVWJpTDhia0lsQ3BPQzJIRi9ZMHg1cXB4VEw2TG1sVVBiRk9KTWpZUURlWUpJY1lBaHRLVnFmckZLSW5nbWpPSTVleCtXYlNVQXJDR053aElEaWFLUFFWMTJlemFkQTA0Q0hHODVMWW1oMmdpTUVvaGd1RkNFN1d0MlJucFpPUDBMQW16akpOSk1sMUZxUTJ3ZmJVQkpiOCtnZGZpU0dTVzFnQzF0WjB6N1FWUWRkb1RTeXNqU2Viem9sZnlvaFN0Z2dCZWVMQ0hPRGZNeW8yQk9TOGExMmhpZHIzWVVoUkRWWFRBSXhFNnh3bXMwREVnMU1SRkhBR3RHWkpMRTZDdEJabDVKMkE3dWxUUDIwTWpRWHUrRkdjUmhqQ29WWHRvd1ppdGhlQWlnYmxuT1pJUmdEQ2dZS2VqakJRb1E2aFJoMkxJYXJHV0I3eitZaXRLQXVxRU1BbDlRRElnSGM5UnNZaVV6QU5nTXNaR0xMb1VheGFra1ZyZkRveksyMTBaYkswNFpwaTZDRUJWb3NNT0FBVVZnUWl3VjJITWpCRHVLVWdKT0lneVhoRU1uc1VDbFNhYVN4dzZUcmlPbU1SVjI0V1NHL0FyMW9iOExOOU1GYWZiRm9xTnJjY0NOeTRraWpxSXdCSmxOd0JDOG1XVmdsRyt0TVordjU1T01WNEVpRjJLQ0liVlNzbEZvWk5wbUZ3ODJYV3N3b0M1NktEK3FVcm9JekttbnU0R0FaZUpaL0VBQk00UVdRUnBGcWhvVllDUWZQZHBPaEhHYVd1eDRldUZpSG51NDAwcG8xTjdDWFZNbmZLalIyWWRGaXNjV3FGcXVCZE52QWE5ZHk4dEVUUCs3MTNMd2NEUHh2RGQwYXcrOW5leWZnZC9ZMzhDRUw1c0ppV0FuciszMy93WktjUW53S2pyWGlNQUJwRHVDb2FVaWtHSVNoQ0FFRnlFRVY1SmVsRmNIQnA5TG5lL2UvYTdiTUV3OEtwUDZaWlZtVlI4UzVvYkFtVlpKV09NNXkwajhCQUJRWVFUVW1ReWFaR0VUMXg5SERDVWtNRzJNMkhFT2h1WDVIalR1QnBTcEFLd2lYT21zcUJxREFYelFVSXdaK2ZPQkh2Z1poWWhQRzMvalZ5SXZKT0RkQklDMGpLNXNLbk43NnFVeHNJNVJqdEFwaXZ3Y21lQVFLOUZZS0dzRVN0Q1FRb2c3Nkc0WmVtcVRKVEFSVzFEOHlCVklRQlZNSWhhWnUvVkg3aFNPQlJGS1JtalFrU2JrZ1FIb2lyWXpoS0ZYWDdMSUpvTEM1YWFuaTB4Z1dMZ1JnVGdsa3JPYTFXTUp3blE5WHpsY2ZtQURzaFE0SDlFb2VueTVTb3JIcldnOXRzMHBJN3YvM3NFZXdBYXpydUMrR0NQQ2Z4cmtUOUNZQTlDOWJBNUJ4U0tLM2R4MEFZSS9leWlxbXRCdUFvMHRjTnVicjgwd2w0K200TVBqOW1LYVdQL0ZKMXRsdFBkVXpPNEcvaEw5V2pwVE5zbFZ1SXlmSTZYSlh1VmllRXdxdDRkYm1majhBQ0NKelNmZG40cE1vNDNLc2tYV3lzUVZwakQ5U3dtMEY5QVBBdndPQU54MnV2Y2IyQzl1QUM5K0VDODk0enpxZkdhUDdLT2Jocm5NN3oyMEJBWUJFUUg4bmdON0s5M1oxZXVWek5QcW43VFBISXZNY2RkVjFpNjJ6M245T21XV1QrWmFhYVlrTHpqbHZnV3VJaGlSUXNHYTBtb3RnWUdSaVpoRWxXcXc0ZGc1T2laSWtTNUZtamYrdDlRQUhva0o2Yi8zZ2JqTDExa2RmT2JRM2dCaDY2bXU5c3Y2M1R1ZFRvRkNSWW1WV3VXZTFTL2FiNjdEampqamh2cHNSY1V1TkxTN2I3SGJVdU91aTMvMFJEbGZjMEJBZXY2bTExVC8rOXErRkJBeEhoU2RTQ3hBdVJLZ3drVnJRMFFzaWE4MnFwYlphT2FPTkJDN3hGS2xpVE5OZUJyZU8ydW1nazY1NjZhNkhub1lZWUtCQlBFYWJZS3h4SmhudnJJbnk1Y2lWcDhSVXBXd21SMDJFalRiWWFaY2RDQTIvRUFCb0RRQnNQOUJ5UUw4Rk1QOEE4SjhETndjQUFEWjJGYnlFaE9NVUxDV3FvcGhJaUZGR1A2L0pTYmJubkpnVXhWMUR6TFFBaENKSXVFYkJvM2d5YVNVSlJTTmRFTEhTSHRJTTNISEdzU054ZmV3RW5jZnI2Y0NnTVdsN2phYUowMGV4UXRRUjlpaUc0Q1V3OGdTaUpubndTYjJyc0FpcFJFbG54Q1lNczZjU3lJK2UyUng2RXFiK0NyR0VIbU9vTkFPRnBKU3lObEFUaEhUTlBvQjlIUU9yeDRqNVhrek9nNFFPQ1dtY1BqUnhUQzNVOFlQb3VVVTdYN3pNdnJraVdvN2RKc1puUVFBRTdubjEvdDVmWjJSRVFtbzB3ZWl1dkprTGxnK3dST2tzNXhTOE04V0xsVG9FeEtSSnVONVpsdWM5VnhtR3AzWG9oU0ZaZzYwMmgwUHBmUWpnSEhMZFU5ZFlHWkdVakY4eEdQYWZwQ2lOQnE5VjZpMDZUMDRZWXA0b0sxNG9jM2VsckNpVkVZRGMvai95UVNuUE90YUpuekhCYWFoY0EwQ2ZBQ3E4Uzc1WnRBazBwVG5LTkF1dU1RV1FiRml2dG5QVXhuTUxRT3UyZkVtTmIxWnE1NUlNYzVRWnRtcDhWeWxSK0ZCWW95bFhwWDdWQkRBbWRtSXRIVjJGUnd4cTNmNHpKb3g0dDNLWmZwc2p5OHUvVldiVWc3WjFSOU1ncGJqSjR0bTRXQURNUWs0NXdEU2tVUmd0eUVtdzJNS1JUV0RGWmROL0ZHYVJmWkhiYTdPTFlPL3VUNGlIQjRxTWNxdEg3S1Z2MGJxd09aRi90ZVkrRFE0b0hVUVloUTRPVlFvYlRXTjFTN0RCOFBYYyt6dXg2T1EzeE8xRmRtRXFBL3Z5aUszdHVhSFNSYVc0ME9ZMDhaVkFQVFdNWHdLNFpFT3hCaEM4ZlR3YXNHaHhLU3Q3eVFsQm9UNTBvcngra05xb21HK3FJTTE0VHlYVmhTSUQxMHVFSTJDY3VGT3E1NENjUXZOengvcGNmOEdvZE5ZL1MzeG1hVit6Slpzdzc5aWxlOUYvVThyaFBWQzRtUWxjTURyYm9EWVM2Q05iNEFLd3hwK1JFRlZTMVRJNlVNWnc0d1lXUU5QUVc1dE5UbkZQZE5ndzBGTStkcWdIZzgyNko4c2lWaTN1blE0VGxzaTlnYjdHNDVtV0xuZC9EeisvUm5hOFJMRWU1OW1xcHI3U2hvcXRWd1NJdmZtR2RWMnY4eXBxalU3djVqNm5yUDExMXBnc2lMeE5qZTFXSEI4Yk1qcFdKODFkdFMycGFud1Rnd25OMjMzV3F3NGJESlNaR2xCSlRTRGxIZU1ZWlhadE85ZnVsV00vZTBETjNaek5GYnpmL2RzMnVYSUxLZ3hka3dOOVdFVFp1N2xzNXJrd3dSS3d5VnVWMkZNMmVhbGZHVmFoM0xVMHI1MXRXZk01V0ZIQ0ovV01ZWVVqaFd5K2NFbzhleVdCTVhFeldDVkxreWJZamoxdnJWSmRuT1JYZXhzcmdVRExxYmFoMm9pRDg1N0VTR0xhdnRrVExKUmZtTldFOGVhRzI5MFdtNUlzWGk1VGg3V3dsTzhjM0xTbjNldWk3V1I1SDh4RFkxMkxDYkN5RXhWKzZ4NGYzdFF3VURHcjNodGxPZkFHNjMxOHhrcnptc2picXdZdEVWU1c4dlI5S0xlaFo3b0ozb2thNWpXTFZuOXBXcWNybUQyVnZHT2FKOGVuK0tpT2RVYmtQWEpRZlc1eFpiN1cyUmVEdE9KVGEwTmJOend0UkpQQVo5UnRxU2F4MHFHbExrOTJndjFEWDVPVVErKzNZNnUwVUszUFB5RFJjOGVJbG1rU2NFWnAwd1MydzZ3Y0szK0txbkozNHllTmFidkY1L1J5RFIwajc4SHc4NUhtekdWT1MwV0lnOUpBZWxnTzQ5d05rdEk3aEEwVzlrd0p1ajlDRWwyR2FCTDVxa0pYSm1nc3NTNmFnTlZ2N29vR2lBZ3hhbCszcXdUWGZUaWxyQ21sVmxvOFkwTE0yRC9BTmhmdWlTSnJOWFZzQngwV3RQYmtWa3ZOYUhsa3dnQTFjT1F0SXl5RVVnME9ISGx6ZDkxUVczcmwzVzAvczNkd25mWUswZ0NPV3p3UHRJQ0hWbk5YN2VCZ1JuUmNHUVNyaml1YzF3bndxV1VsMTZ2Ulo5VmhYU2VNSVMwa2ZKQzcyOGtQay9yMkRFZFRQSTkwR0tBSm10dVJnMHBqSGFFNVMvbG15N0hRQ1kzZ0Jxa2Jia3BEaXQ3S01QcDlMa1FRU1ovUDVJcUR3UkNlUFJ6N2QzNjBPZ2FGVGpzZU41L0RPOG1hNGxDeGw1MVdjcE84VG55ZHVGbG1maGZ6Vm10NmVjaDhMZW04bitnUUtLS2hndzJFWCtwL0Rlc2k5R0FSVmdLOWtUbE9MVGtRSWFyWE1iSlp0YUVEMDZiNWJkSTRhSitFVFgrQWlRNUpkdHVjUTFYYUR6dkRGcTFzTGFKYzN0eEtRM3RRTGV5VXF5S1dWUTNGL3EwZEZqOFlEOGs2eWRkVkZhNStWcytEU0c2dUMvbk45Y2VudUVOcWxqSi80Y290L243ZitwaVllWVVwbytGWk9sRkd4UnZWMVd5NFZFUEdLTEpwWDdBQjN1Q3RMRjJibVdhSUJpTkY2aEI5MjNHL1QybXVkdElFMWZ6NjZUVXczQWJyUXJhbHdFRmhPM1pMTFpKR3pXend6d0xqRHMrejhvWms4NGdPd29IVUFIQWdMdzhYaDJhRk1yNjZqczVTb3hrdEpZQmVUclJqWDV6bkJrZG1JOU0rLzFocmNZall0ZFpyZ2JyVlRSNmMwNm8zbXVhQ2tOWmNqcmZQc1hsaXBhak5Md2F1Zkw1RVZTS0VBSGd6bzdFTXhZSlcwL29pSnh1TnRrbzBXbVUvTzQ0TmRVV3pJdXNOa2RaZmpkZlNWbzJ4OE9ESEg2THpUSHV6MnB3T1QvT2NCRWpKMVJValI4Yjg3NU5JRUJCdW0zQnR0NnpFb2RiMWhNZG9NaHJHR3FYVTQyQjBtNzNreUx1Um9hNThSeG5HaUt4bUlId3RnTlN1dmtBcXV2UjBLTkp3djM0WWU0WTkrcHZXMzVFMHRzRkYxZ3V1alRMVTM1ZnBVOER3bEFmUG5HN0gwM3pXOFgwZEpubXZKenlZNDV4OGxoRDZnMkpBVEVSNW14L3JFdDNtTnpxM09rYVV3SnZJZkd1K2ZxNVhmQk9IamFmdlFENklvd2hoYjluUWF4VDZKRGZTYjhWa3hybVZWbnF1NXJYSTVScTdSSHlNSlJpTkpuT0h0OGttdmJnZ3pZamduVG40ZHlleGNTek8zdlF5RG9KOWxXSWp1SXNSS1I4ZmJBQVhtenZzbHZNdWJib3ZUYW1jN0syYlJVZjJIMHlSakx0SnFlVHV5QWplOFlRY0pKQTFkY2R0enVWQ2UwL0VyaFlOSXd1MFlPekV0ZWIrU2xNS09VUXNFOXV1WnV2dVFYV2JYcFhsQ2J1dkpBUlhQeUFtekZHaEkrdU9HTUJIN0RQTzBvRFV3MU03OEFOM2hKNkVCK3FvMFlSaEk1OGJCWENJVUxJbXlnaFdWc2F5c0lTUUI1NmhxQjJISXBYek96TzlFbEZzZHh1Qk9YMGlQaFN4TlA5ZVZoeVNTSXAyRXpYa2FiUjdmZlF4a2VpVEQ0TDBGWUNHR2lOek1EZElqWGhoZHpYUHplUTZzSFV3RHlnZFVzd3grdW1LaXE0OW81UXJ5NEVKUGNodlgzMm1KMUVaUHZMcko2cGNhVnVtQzNwUXFYemoyZXZYNG9wVTd2TnUyYStPVitlcnh2SWoyVWJsNkEzblJza3hrV3c5Zk5BZWpWd01JRTVSSEVTbzV4cjF4TktzN2NjTjhOdzMxTWYvOXRSQUtORExIRDdjTDY1bW1lcGFvaGtuUGVMWW5jYitaR0FWczNRbWVzNXlCR3Y0eGJKUjdSdVdqS0lXd1E2bGZDdEZ0SEFlMFdDb28xREMrU0I2SnNkbnBFbVBnQjJnU1E2SlVpOFZGb0lCaFYza2hDaGYwMll4ajlKdmVnL1RLcVR3ZzNlSFBPNXNWa1dEWXZHQ1NhQnVxSTduYUE5b05CODcyTmdvdUlRYmtFckhiODhKMmROalM2SnBEclRmVjdyaDhXcnhrcjhjQjNaaDEyS25NbUtxSG8xcE9lbmh0RjQ2YXpFOUxhODd1Y1J2M0pSMnl5UTdtSU5sZmRuR2puVUpldC9GMXVqZStxTzZTdzZ2WVNwNkRSc2lHZ0o1QmN4WFZvM1I1TFYrWVYxdXV6aHZpWEQrYWIxWkdORHgyUHg0bnJhbWFjYnRxSEtvY3l2MzBlekIyOEdya2pYZTAreEFrQndhVE16TGRZbUZPOU8vZzJHSWVIQVNWTnJUejRVeHJJOFR4S2pqVkpxcnQxWHJkSTdETSszRGUrQ1ExZlc1L1YzVFhIZGZ4b3JFd01QVGJ4cnNSYVlwbmxLSE14eFpIcytKY2ZNYjdYR3BQQldtTGZ1Q1EvZlN6ZXYyUFJhdUN6NkFsbC9CNEVDRXZ0Rm85QnJHRWRacG5JT0krTGdnbjVCYnFPd1NiamkvMWhxQmEzNG45Zko5QUQzVThpYnVhbUdHZDNXMUx1UmxOb2h6bkxrdWlQZUQxajNDRERwNVRWTkdBK0ZoZFhvYVlFeU1UMHFUeDJSbndwczhJdEI5ZkhKM3lhNUZlZ0NsZlAwclJsbDlkN0NaMzMzai9oZzNHMk10YXZNMWZCVU5Cck4xVGVGV0Ywb2M3aXdDb1F2S21lU3BoQlJlSHR5dzB5aXc5MG42eHBnQ1l5a21vTktHaG1oMElWWlk4S0JrTzBXMXBxWUlpOU1pVFZHOTRKMmpoK2N2T1MwUnNlUUs1Z1VEOEVBcVAyQ2FyOUlqVmh0VjNzd1BWTnpUQjN2d1lDa2lXQlU3cjczTjQyQkFuNk4xRzlmbDlOWC9ENUErSjNrOVI2TlVXL055YnFUclZzenc1emZPRDhObzFvdFl2WDJTZ1lOWDEwRGM1WW9QdUpMVWo2NmRUdGNPbC9QRWJZWlBocmkzK08rL0U5K045amJlYVFyT1E1Z0oxN3gwQ0oybURvWVlvTkJsVE5XTkh1enhhL0R1Zmpyd3ZyRzBvZytZWWJGQ2IwVEJELzNvN2l0ek43ZHpYR29kejdmSjM2eHNET2t5T1NBNDROOHJIUHYvK1RNYURGcEpuNDM0Tjg1TS9tY3ErQ0tvaWdoeXdkamtsVnpTOThIZzZRR0JHVitrU2FhMUswbHlSNVRrRGNETi9ZSlRwUi96ZmJ6U2trNWV2RjdSdWRGWUtKcW1JaEVpUkVpcjA3RkVCTmF6NEVLejc4MEJOM3FLOXJPYis0WW8xOHo3NThuY2tnUzZPK1BnTEhaayt2WGVyN0lidThCcXRyYnMxZjMzbXg1MkhleVpKeDNvaUc4MFh6ZGJBNVMvK0VKN0x4RWZzMmRQejRZZ2FzZWh3UlJhTEtMVGtZZ1FKWGtQUmJBaDFqcVhtU3JkenZnbWZFKzJUWi9mbTRqdHkrZGorL2ZHODBpUjI2bi82NTFqK2JPZEVlVjNlWkw3NFFVaXNJYlJyM1NKRjVUb25XeGpmaUlHZWQzeGFjdVhZSS9YQzlYdGhZQVlrRFVZM3QxRWdUTk9Sa2dFOFE0VURTZ1VRY09IRUF1Z1BKNkY5dlVaUUo0bkxkUXIvKzlWK0dnYTR2c1F4Q0ROWDc1OTV5TlhwTS9mV3hBbnA5dytDNmpOSW4yNVU1b3NxUUdyR0hYcEJPNE5qYmN1Nnk1ZmN2Sm9kckh3bnBXYUZYV0RWR0ZxWGYzWld1Tno3RjlldnRyeWpHNWhhVG9IUDdYdnhiV3phMmlGZ05sWHB1S2NIeUs2dEhMNUpraXhTKzFqdXVudXdscUQzNy9XMEYzUVRjZElMVVcwR05nM0ZjMmtwNk5LaTVsQVRtZW1vQWtJVDVyWnhYejNmZG1wK1FObUc2UkZ4eDNHNnllWGlvcFprVnpmbGRZclRmVFp6eFk5Z28yK2dZWG1ZSWhTM2NrdDZFRVBlelkyM1pIaGpHMHdQdUh0MXpzejdZc2RHZVB1WllsZU1NSXNLYTBtYlRGcnVsTUd5M3NtSmVSQ3NwZjhQdXpRNEhJUnFkYUlYTGhFODY3WWdZQmRudFhrYzM2YlUvUDR3L2twWlQ4VTlGME0wQjBob0Zub05hMHVjV3d4Rmk1MHM3VDE1d04wd3FUWmZCN3JMVjh5bWhicWJjT0YvamFkYXZVZk4yc2haMEdRMXBiNE40MmtkR24wY1ZURDkxL1dNeWNuNWVxSVJULzErZEZrYjB2VDFnT0p1VnZyQ0lmMjJVdUtwcDkzNlNGVzBxbHNxRnVtSlBXT1RDendVNzRYc0tBK1dCeG5xRE5Wa0FmQXFJM2pXcXNoeW45SE1hOTlTdlpCbUd3L0tjQjFlalF5b1BGWTVzdS9PRVBENzBUeVdvUS9pZlZSM2w4cVRTQXV2VFVYNEY0U2VZMGFORnpRQWlWUUZnM1pEN0cvMzBFS04vcGNFc0FCU2pCWFk5ZGk3NHJsWHBKYzRkVjQ4amFJQnJBeTR3ekx3SURWWnUrM1dnZnN1ME5wT2NZd3czdlhIWlFjclJDM050UXNMUEdtRU1YMUE4c0gzMFladWdCWXVqeENMdzdlKzVORFRkZFE4ZWJHQitZZzVhWDBLcHF3SXVwU0xyM3lENUpuRnhUdmZhbnA2T0cwKzErZG1GMzZJZ0dzdzlCQmNQNTNuZkhQN05uM1FaWHBzeE0rS3B4RE5uMStBcVdCNGtkamJpYVl2dlBxUDdXUTRLL0RqRFVaNzEzL0RiRjdCR0tTS0owOFgrTDFUUlJ5eCtWVzcyb092QTEzQVF1clh1MDQ5dDNOOUZLWUU0VzNjNkU5NmEwMXlZZHZpNzcrREJSWHc5bVJDLzdMUEdKbGtBKzdSNzIyMWNHUWZjV295NlVLY3JmeEF2QWZCeUQ2Y05hY3RlcUhDYWUrcENsbUxHdEdCZ21DU1A3akJIUjF0ZDBYOTR1MzYxYkQrWWwyZ1lzOTl0a29BMXVjODY0UGZCVGljYXBxZXZocVhCZmUyYlBsaStQMUhqTVpGYXU0Qkd1Vk1HbDI2SWFLRGxKNHo2OVhSOUd4eFhIczUwV2JMYmk4QTE4UlRlRXJoNTFXWlpUMWhUVEZncHg4V2o3U1BpcVQ2c2syT0tIODVyNEM2NFVzREt6cW5CR1hmVVVvYUY4OTZuVUpua1N2K21IdlJJaUtNQmhVUU9uenpHdkgwcTkrYXNtWTlhcHFacXdXYzhhR0RPTUVNbGdlUXFCU2gwVWFRRDIySTdzZWZUYXJrRmdMTm5PcEEwZUgrcXdkNmcvb2RYK1Z5V3cwQjFhMW0veUxQYzVWUVo5ejFaSk84TFhiNFlvcmJkMS9XTG1lN1VFQjdCcjEyRmNGZy9aVm8yNlhJc0E5SnRpQktkYXpsb3hGUDBRUXdPSnBRVW9Famd3OTNWc1EzcHQwckNLTm9oNm5KeVhWR2NPd3dmTWFkY1hRK1VSdkgvNTM1KzAwZVk0RWc1L1pMK3dmVXkxcEdKVWtuWk9qbmJqRW1IRVlodXdZMHAreG00eFpNMUswMncxRFdjYzhic2luTXRtaVpXTnl1Q0JaL3RuaEhZanovZ1pPcUx1c2d3QnpRVmR0UEZRWGVZRHZIbFJ4Y3d0c1IySTFqUjlTS2lkdk9iMnBrN0QwL2tpS3VPWHgzcG1EdzVGQUhSYm1YVmxaK2FsU3hlKzRIU3VkaXhmYS9QSllZNkVlbW8wa3RKcjY4aDUyWWNHS3ZzSDlEN3g5RlY3TDlTN3dkS3dLQnVYbUJXN2ZiTXRaMEJJUnpGbFBjYjFtWThudHBzWDJZZ0F1czBjTTBxeFJMUFd0MTFLeHZmY2pxcmdDOWFyRTNtOEo3ZmVKUmNRVkpBZXM4NHI2dS9tZ2JVbnFkei9nMEMydUpvVjdrazkvS1dDVkxvd1c1T1JTN2x2WjJqLzZxQ09rZXcrZjUySTJyeXFqeDQrcTI1Ly8xeVQ5dERvL215K1NsWmx6OWxyOE9kZGp1Q0hHbGRyREJuRUdFd25KWEJYbWRKN1hxK0pLdEJQbVBSZXBld21XOTRST0dWRVk5SzQ4K3I4aUVoQXpuVHhnVkdkRTlPSzBFWG5TQ0ZkeHZGOGE0S1RDMU55OFpxMjc3Qk5MaUZjQ0hNRDVIZWhZdGNoRCtoWjc4RldCb0JBTitraEx5bXl5QUlHV2NsYTdMVzgxbGdpY0NRZHRkaWE4TVBBSGRrSHlIcUczcEl1aHVldk0vYml4Z1B5c1plNFJ3cjRzNExjdkgzVzVCRThnVi82dzErUndlak16Q1IrSnY4L0c5RVc4UXorUXdlSXhaS0NqQStuWDRjNnRuOVlhZlVOZmw4VStjMVdNZHd2WEE4ZGE2WjNSUnVEc1hhZ0FWdlQwWng5UTZway9xc0NLU0F6ODF6WHRmdEZmRUROVHcvbk1iaDZRV1JaVFk0S241L09GWGZmU0FqLzc2YkJBZGlZb1JGcDdjMk1yd1hCVFp0NXBEMXNtMkdJVmNFZnd0cDIwYWRmMmlaVVhJM3dEV2xDQVZaSTVWTGY2Nm1Nd0dZQXh6Q3ZsaUdvKzd2aUwxOVlqNElLejA3Wm9zTVBXL1BxZjAvckl6cCttUC9PN0p4eEgwTHpUWjh6R3RHc08zRUlUNXg2VlRyWFcrTDlsZ2U5VU1MUDVaYmZDdk9ZbEduT2llQnBFblJTQnhOKy9lQk5mMGpidHdFRTZCYW96VnhWNHFXT0xRNys2aWtmZEcrQkt3dXhDeUkrcjJiK2cyTk10a1g3UjdjZlZES1dpL2dDRWtEMWMxS3k4c0xYaHZnZU9Qdmg0cUpaNkU4R3I3TlRiRUZQYzJ2RHNXMlc4bWxqdEZwNmNDWldvc3J5UkhLM1E5RHZSODhtMjlOa1ZuWHVyaVFJT2lTc2FEcCt2MjFNNGZsVWNMellldkJBQzlyK01WcU52b0RSQ2dWRmpjeWdOWEs3Q3hZRmpiL2xvMDdWdlpRdGwwbXpuL090ditkSjExZHRyd0hrMVVBNnRkQ3dlczNrMG5VMkxTeHN4N05NU1BaZXRzbWFNdWtKSG9QWGRDUjlINm96b3hHbXIyV1l5SlpMT1pGQWRndzJrOUJDejNYNjkzT0x5R1RzeTNxK2VlSkpzZTkyeWFJZzY3MS9mOGVnbjRQQU14UUsyWHcwTHZmZEo5QjdjK1FkU1RQU3ZsQ3JaNExoLzJocW03dGJhWERiekFsaHVkU0VvN0FldVdtcXB6eTFYS1YxeTFWQnJwS1JMcVZTNWxacWVOOXE5QnNUbU5Vb1FNV1JOSUlHR0kwWGt5c0VTY2dWWm83SGhZckEwYUFsU293bzhGVmZ1eStYRm1vcmhPRUVvbjh1NXhzRjVZSXc1Y2lvbm9NSUZoMjFYUjBzSGl1dW1EdEpmdytubjVoU1ZGV0wrVjlSVTNGWXlJRkp2U0d3MnBOVXlpZ1g4S3VjRG1qYU9PM0J2bjA2WHNRaGJmT2FVZFBibnVTRFdtaklrazUyVFlWMWFOSTNobGtoV3JLRVpQaXdER3J5UGNQYjcvSXhsejdhcEhrVGgvWVd2Zm1zc0Y2UzRraGJ2RDNxSmtRVVdYQlhuZmlDVVVraUpqUUpsOExYdEU4cWRJNmpGYmRGMko3bXUyN3lYbDQzejk3QzlnMVNOMld3RW8rRERrT2JQZWxwRUhYa2QwbTNETklrdWpWTktORjlUSWV6ZjFxeHBwZENJbWhmOE53bmFydjRQL1ZPTU0vM3dRY3c2NERJSnUzQm5qeER3SURVak4zbmFNbW9qZXptNlBERGNGeCtPbDhPNVF1dzE4R1FtNEM4YTVoL1JTejZQY0ZXNmdCVEYyVEdWeFZRcU9uR1pJYUtHWXlhZE9CVXdXaHdwRk00WTFNcFlBZ0hYcS9CdGVPK2FLYmNHSVVXZ01LS3lOU1I2Tmg5dXVnWXM3Q0NxSEN6MHdxZ3AzWWZZYkhuRWxFWmhnV2ZKUDU0M2ZkK09TNDFJTXFzekdqTTZKR21VdnZnOXRIeUVndkNJWlRLM1dFSEFSQ0xtY2lkaVI4VEIzaVFCcXoxQnFScVdKL0RBUkU4UzFKL1U0SXhMMEVXQmdiNkkrUUx4NXhlUHhyZFY1U2ZyWitGMkdFanNVWlhWTkhnYURNZE5Xa3NRTlovSEFLY05HbVUwbnZFRUJJK3pPbUUxaXh4WFBtNG0xYkJKSFQra1ZIa3dvOHBYRUFrYXNad1RXQzJBRmZSVll3MC9VWTR0THExWXFMU2paeXVhUjZqNXdKYjRBbSt5VDNHV1ZYdWMzWWdOVTgzZ2JibGM4SktzZlVqUTBMNWozcFVGY1hJR2NvQVYwQzd3K2I1cVJpSld4QkVya244WnVYZXlXQW9XZmVtbEF4ZHB2TGR3L3JocVhidmFzRVhZOHNDMWhmeUtjcEI4YjdsYnlQMVhBZTRXc2NMenhVTmJkM1gyMU5ZM1BFRnp3WHVMdHQ1UmY1aUtQU1dRSWpzSXZyL1ZyWWJ3L09DN0NMOHZNL0JUSEhaNTVZYUpNcERPdDdSdGF0cFpPZHcybjE1RGgrdExqUzhBZnVYalBSemV1YjlRQnpWdmRyWUpoUUVVSDJta3YweTQ5OEJHd25mdmlqdG9GYlUzU2RxMlgvZDBTM3RMeXpTTDkxTno4Mk9nQlBnc2F1K3lnVCt0T0FnNTFIQ2ZYZEdmeW5HcUVSVHZhOEEycVBMN1BhMk4zTHMvblpkQUs5OXk2Q2syNTY1RExXM1V4TEpSWSsydDkveHV2clBaMHRwU1diNnQwcmZWMHJTUDA5SFd1cTYxZGJ5MVRRdWlFcnhNcEpmY3ByZERGVFVQVmJORk56dFlhajFsK2RXOG41cGJYdVEwcTF1YUQ0TW5vRkNpMzkwbnVoamY5eURZdnh5eUkzU2FGMTBYeDBybEppdzYzYTNrVTZwMUsyZHdrdnl4V3h5cjFjOFRPa0ZPWFdLS3FqM2JpdklFWDJIR2JicEFZdVhEanFwRDFzRStuMVp0bmNSSnJtbWdjbmlWRE91d3ZQV1NDdXl3bm45YVk3VXYwMURONnhEVHQxcWxROWU3aFV0YmhNS1dwY0pFQlNGYjllVVlYQUpINW5xMGt2c2hEbTFGcldXMzhvN0IyOUJsejg1OVd5UFBBMStiandhcCtQeGtodGQxSUtJdzlmemx5azdWMms1TW5tdVZYc210dFVOenJIM3h0dFlINkpxak9LSzJRK2VtdjE3NVBxUTM4VCs5bTZTN3lmVThxOEQrQnhoVFJlSEN2alRuV2tBTTkxSlkyUWtiNUFHUFFxV0pxQTc2bmx3K3cvZTlPWUJpcGk0ZDJrdEllT1JPdjFCRmNXK2FnQ2hBM2VzbEVYVUdiY0lHQVJUYzRuaFQxMUJaNjZYWHpURkxGTnlaSVQ1TUxXK3J5Qm1vZFcyVnJFWERSTVpxUkQvMnF5TUw3MlhnUXBHRUxmTm96NzBndm83QmtCenhXcDZlaEFWYWNucGV0WGtONnhKR2RnaUp5aHBKaDdhQ01JZ0RNY3BSVDhxaWFMdkw3R2FOVStabjR1aWxyZ2EzWW9NK2lLc0hIcWo5R3U0bmdycEZIb1dydmxGUVBzUGNweGxqcU9Mc3ZkbW1qYnJlbXNIcmE5K3VTc0dEK29WdXBic09iN0Z4WllVNnNxeFJiZHgwbldPeGtra2l1czR2bncvSzBXQ0pSNXVJNzVYWFQzMTRCcys5RFRuQnhieVJtTkc1d3c1QmdXUFVKaG5ac2wyV1czTjUrM1VyZGlVMExpcXhJQzlmSmh1Zk5sK1dUSnF1MExjU2treFg0ekZBZTVSV1JMVmNQajVUTTFORlJ0UDViYmZrYy9ZYk5OVUlpTG5wVEJMVHNyc3BnQ01aeDJuRmFrTXZKdWNvaWp3YVVNYUtlTDdRUXVlajZLTzIzSkZsUUl0VXVqWXpPL1NZdUUwN2ZidklSTkc4TW5jcG81ZDNsNWxLMGpJam1kdTQ5WTliWDZvMjZZbFpjN1BmSGY5MHZNZG1IbHdaUVR5SEROWDFHbDVrMWo3Y1A0LzVNTkVwNDBRSnpUTTNHTGl2MEpyZkJSNHVBZmYwcUJCTVcwS1U0Vm1xMk9NcWNMTWRURGV2YVBpQ21iWTR3WXlWTDFnWk5uVlJzajRITHBhQXVlYW5xNExjQ3BsWHBSS2lreW1VNllhYzRldStFSW8rMS9ONStzOUZ3aTkwUVAyTnJnQ0tHcFRETERLV0xhUlc2a2JQYW1OM0VabUtSSVFReWRVZWJFUzArWEdxZHFoYmdNU200dUg5aGI3d0FhcU9JVjJDNEtQVXZtSUVMMUFQZkEzNEs1bG1peFYzNkc4MEtMc2JVbzFDbnVyQ3lCUkY3a2NGUys5RXNZWC96UWZmOEIvYmZkUGt5enNwTUk0cWpwbnNYcnJBbzcvMXFkZm5TMFRNM0FhUzJVVHZSOGVMVnVMZWp1d0xsSGRid25VV1haRlZtb3hobmFMTGpqQ2JOZmlaMlFKSkxnaUsyOHFPdWt5bHl4WnlldUpQM0MvcEliUTZURjJ1aFhnYWNLWldGYnZnejNHdndoNWdhR2R0SUNIWmRBUHdQYUN6SXVqYWUxZk1kT0Y5MmQ0UXdXSHZPWDJMS0RKbGoyaTZOamZvaHFzZ2hGdXVHOWhLcmFYTjBvaFYwRU9rR2FMTEx6T012dWhYRTh2VTVkYm9jc1pvRE1sTUlUTnkrVFdpMEpLSUw1RFUrMC9wZDBmMFE0bTZDWFdwOE1IUUkrVjluaG5jd1NES01jb1EvY2h6Vjc5YktjKy92dmc1L1NGd083OTA3UEQ1dS9kVXl2ZXY5RDJqWDBaWmRBZVNSaS92ZjZxODNXT3pKeGlZV2hqS0g5cDZEbUtVZHR3MzVmNFN4cXRiSDdvalNjV0hGcm5XK0Q3bFltMU5rK0htYXlyd2RQUkN2ZlltOE1zbGp4b2ZFYzJNdURYMzJ3L01NK2lsdXZ6ckRad1RjZWx0dXA5dWh0MEdsNDhkK1FuSFcwNVVzanpYYS9ubjJiTnM4M1Q5RUhab3U4bnQ0OHNGT1BzMTc4OTNDYlhiMnNOTFdUR05qcFU0QU1PVHJMaFd5NDVQWHF1VlJxeE9WUVRXU0dOV2h5cjh5QjU0OG9KV1lBUFpYY0RoemNLTzkzKzhCK081Ujh4S3FONWNtb3lrRkNvMXJoWUZZSzJvaEdlelJ0UVZqRzZwOGpuQU9sVXBqK1BxYmNTL25sSUNOV1E0QzdCRWNQMU9iOS9ZbmM2dGE0STNMbkpJVmtiN05tSGRXS2oyd3I5WnpLVGk3NXNYSzFORGU1eGRZNG9wejhyRS9RZW5IL2NzV1hZcUZkbWJjUWpYMkFmaXRwQkVHcEc3ZlBJdXZmQ3JLeFZhdjlZUVltV2tqZzQzcUFMVGZKZHR6S29VeG54RS8zZlJPbS9SaktpN3V6QW5PYWdnU0ZuWG5wYnJJSEMyTE5lV292RmwycFpxcmduLzVLTGtzakVpSU1OaS9JaEVvL1JGWlpnL2F4WURLUy9ZSlV6clU3dGdoOXVEbTdqdHBDRklXYjg5MngySTJ5cXlNU3JlYnI5SXEyUFdzSjJNWHJ3ck5TSWgzUUE1QTIvWlVJSzAxZmJ3dm1ZRUY4cUdxcEJpTEdYcVhTOGV1d1ppTEk3VjlxYVBMaGoyMFVKUDkycVZGNlY0dlVRZFlzMzhsOUJWZ1NuY1lPRzdaVmt0aXRyZmZ2dEIyYjdRSitLR21uTmV2SlVqV2V2aGlCQ3ZVaUdOUGR5R2VBWEx0MEo0ZnBDYzJHa0Y5OVhUVWtHNFYvdHFwS1hIOWVtcEJ4Vm52MnVEWFhwZkU4bXNtbU5XbE9NWTJGK3d5VkRNR1NkQ1llUG1ZbTZUb2RPeUN6blQ1bkRJTkZIUUlpWDRZblU2b1YzcTlVZ3duY3lsT0dhU1pvK1hTYVFtVmp1ekJrM0dhS1FYUnhaeHVnMUp2cy8wdzJENGYxdnh5VVFlR0JaNXZUSUQrNGRjOHNkNFQrM1F2bGZBWEIrYUk3K1V6Yzd6RkErTE9aeGY1S0M4UW0xdmY4eElBZEJvVXpsMU5LUCtSSGRGNGZpcDVsY2FtblkzZDFTMXYxYi90V1BJWWk4UmhMMms1UTVuYVVHZzhUb2ExMmlUbUZtYlVBMFVUV2gwQ1RPbVMrcGlnSGNscERoeDhHYW92U1dqTFhRcjBWSUVvaC96MUtVVHRuM1hlT2c3OURDKzVDU1U2UnJkUGVtVFgvMXNpZHY2RDVnVmFWWnNKVFBuVXpzbFY2dkZVdlhWRXVuVkhJbEVjN1ZYWnBOTGJiS3ZNYkJzYjYva3MzK0xvZVhUVjlJUXNnTU45bDBiMmdKWm5QTnBPTTd1dlo0dVdiWWQ1OVJUT1R3M0pHWHBudnFxaGJYK0cwREtWQ3RnRWwxVUxSUGYzZXJna045UEY2NEVFSFdaUnQzRTI2MjFmUFNIYWoreFNMMkhobHp3ZFQyenF2aC93WmRzQ0VqTm80b3VJTGQ3SWNlMWJSSHdmcFZXQlpoamZaaVpUQXRGTlZNTGc2Z1dNaGhxbVdoSzBSM0Vwb0t0eHl1V3pTMXE1bXJwT3dxOGVWeTNDL0ZSZVJNSUhLZVpLRUkrZVlpdW9tbDJDUG9NRmpYNnE4Qmx2MGNFM1Z1b1FrOEs1eWVNcGROSElJa3MzeGhMQ1NYbGZFOHF2M3granc5UVlwaFM0ekxITmYzenRyRW1NSjA0RzAxMlVzUFg1K3RxdWtYYlYyaEtiVWtSVEk2YytEeERmbE1oeG9zQ0ljL3pnSmhIRlV0ZGp5bHZXQ2twdUw0MmRXRGZwT2x1YXFsWjFoTkJ0TnNMZkJHUnFVSm1JU3Y5WjRGRWVrdmdqV3RzYkdyOFFlNTJJN2k5SmZnUlhnT1F2VjdiSk5hdCtPdHRZL1F3eWt1TndINGpDMWI1WlV2WnA3K3VxMkZrdXJzNG1nT2hkclcvZDlqZ1RRNjdwZ0tEcjhobS9rN285bzdzNTA2eTJDZWVZM1B1TzhGbW5ienZidFlQTGEzL1cvclpGSlo3R2dJTTM2N1h3UFlqZ01wci9FTWc0WG9EbTVHdWwxZ0hzNy9DSVNhYjN6dWdrMDRNYUEwSVZFVXZybTN1cFdEUjhEY0tobHRRTUZ5TmdpRVRJL2duZTYya1RkNmMyZGJrNVdIRHJ4N1pKSXNxY0tZdlN1SlJsSWFpb0J0RndUc29DdjZVb2dUQWRjZ0pMY2dKenlJblBJS2M4S0dVb2k5MHdmU2FSdXdBb28rb3FicVIydWNScGc0L2NqM0JUSmo5S2VaeDRHZmptbUFYNVRtV1lDbFRNTnltendRbHhXbURSOVYrL2lPY0pQWmZtQjZIbCtBR2pZMG80dFJ0MXZjSHU0YkZhbjJ5eitBYlJqTmI4bzFTVGpkR0dxTk94WDRTSVRWcHlDUFhJOHloaVQzQkFpWWUzeklWK0toazVpUkNQbWpUKzNTbGVwK3VCdm5nNURHTFFmRVhBOEVBOW5icm5Yb0FzWHd4ZTcrdUl0QUlmbzM2OFVnM1FtQnErd2pvYmZReCtnUjlpajVEbjZNdndKZmdQZWtyVXZ3YXFTSytWZDdENytEM3pBOGUydmgySXpEOXRlbnhWRDZKQzQ1MTJ4dDhsajVIZlQ5UGZ4cCtvczRIdEFWZHdZektuS3ErUXN6eGV4bzNyR3dMY3JkMlZkUVFOMW1YeDFQY3dDMXU0c1BiekJORUx2MkxhTERkVXRQMm9iUXhLOGF6SG9PNFczaUQzVDQ5ZldlVTJlZlIzZjcveUxGWVptRFFYdmM5SzlsYWdVVUFNZUxlZnhhc0FqQ0hmVmdBWkI2SWRZczUwWHUxM2JxTEY5YjI0STlaRDJzRGJpMTQvejhneTFpeGx0amd2T1VCNUxvQWdCWFl6YWxKZ3NhTXJSMXRYWWRSUmxHSDlSUWRzRSs2eG1SZzh5SWVvOG94UnVNUUJTb1B1TU9NWU1MZHM0eEdDSitIMlNNaTVhYnVzL3dDVlk1dE5BMFhtMHk5eEdNMEp0QU9xMXBnSzBCZEtBZjdES0d2ME1mb3k5Ri9aR2xhbE52bHdubENjaGd0Ukw5bFc2QXI0S04rb1NkZ0l4WHBJSnlGMjdnTzJPL05BbGgxVlhlTk95UGQ5LzNTSUtBL1ZDazM5WTRFUFlpdUhlTUJISnBXa20zUWVKRUxQRVlMMFc5Z2daS2E5ekdIenY4Ykk3REhlLzRZYmhmZTJFOWlvTzlKTTMyM2J1YnNTa1F2aU13K24zUU5KVWU4dE90cnp5NXYyRWE2N0EyeFZaVHM0dTh5MWpqbnU1M05DM2tFYmlFL1pqc2l1bE9qMjBRNjhVNllFaW10eGt1dUMzdkw4WVpMbzJzRkVhZFF4dXZHOWxFMGV0Nitsays3TVFIb04wUFlsc2FYYit2YU4zdHIxeTQyZFZta2ZTYlY1eGkzQmJWMXUxMU05d0QwbE96TFhuWUNSOTB0NHd0K3JpdW9LQTE5eXV3RDJwTEFKd1E3WjN5K2NJbmk4a2c2MThuVVNBVDJPNlZLLzNXQklhMWhUMmV3N0VvRlNyYU1JaitUV0UwKzk0cmFIQUp3RVQ5K1o3cGxYRWpxM3hESDNRRGc1SUdPKzVMOEwyK0ovK2l3enhQTXhnRWlCZ0FJL2l5Wm9IQW1NUDAvZUU1azl5NmlOZTFrNnc3V3o0dWNycVRweHlaM0JlVUp2MlJ5cDNYRlRQWWR5TDdKSXdSNFJranpON2F6WGkyQ0lNRTBwVFhvZFpjN0lTamQrckw0Rkh4R0V5M0FSSFVBeDFWL0xadmlqbDh3V1YybTFmU0NmK3N3YzBXMDZPcWE1bTZTS3p5dFJuaFFWYWdNNk1jaFJna0pNWFlFOFloQjl1bUtvb1RwR1JxTmtLNGZ4NE9XK3UrNENyY0dZcmdUWjV2bUc5VFVqdGZuaXFZWlVXVDZVZzBlRTNoa2lVRzVuQnBnakYxNERYYm8rRFFSYmZwVjEzek1wbElKQ3VjK1ZMSnhHZ2F6eEZ3V0kzWkxuajY1WDUwMHhCMDNvWjBNTDRhU1A2R3ZRWEtidVBNclVxdm1hUWgzVUdaclJVWk5pWW85dFhUUlU3eEdsZFN5cFk0NWJBckxVTE16dEFiNjVpbWRJT2FSRFlwSVVGNUJzSW83S1E2L1V6U3d0STJTZWRTMWs3UW9JWFBTYzBHVEY0dXpXaHhMeHZ3TnhGN2g5cjEyTExZWElkOUZENXNyTy9TMzJiS2VXelpQSnFYL0FNM1FoMXB1ZlN0NzZqaVF2WUVsMW1NMGVNN1RNa3dBQTN0OVNEbTc2WmFYS0xaNTY1dnBPMGl4dmZReUNJMmo1Qk9oVi9rMlBpVjNzUnQ0S3FGbC9tRHVEblV6Nm03VnY3OFJQYjNJMWpQTVhWQ3FWWWlmK0VURkhuVzNyY2hNYjUxZTF1dVZwekwwbGdHVElBVU1hUlVGY0tBRHNJRUUwUUlabUtmeURVbEZaWWNvMmE2LzQzUURDYVhza2NNR09LMnM1S0Z6cVB5aTdzamZKOVM4TlZvamo4b1gxTWp1eWZFRVFJQ1BjV2ltQVdnakxCd2tKcTBPSmppZEhaejJpWTNPWnpzRWtkbnJFTmx5blNOWVlsNXloREtYWWc4ajFicVRDQWhzbkM3eTVLdFFLSnRYbG1JeWhVdThOTExCQlppeXVRT1V5RGJKZEVVbXlEV1pyTDlDZWFhWlloSUg3VVMwdUpYbWViVElpalpCY3JGODAyODZKeWV2N0V5MXhFUU9xc21UdzduS3RkQVVaZXp5VGVEbGt5M1hCR1VaNDNMS3BoN1FISzd4cWVBUWV2dG9jV1JsRXRKbEEwMVJaTXBSS1RWRlhlcnB4VnhGeGI2OG5GN2pzcTdHYmRVMjBCdWVJVkpPd3NmRnE0VFBCSVVTT0xpNEpNclFWejk5ZFpNaGFQQzRXVHNZeWdFblpxczRtcndZS2R4ZXVQbFlLVExKcURTL1Y0bzRoQ28rRHZOUWIvUUkrdkhvcmVmZ01UUE1tNFk1dTA3NVA2SklYaEgvZTEveW53RUEpIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9Ym9keSxodG1se2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjR9aHRtbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItcGFyYWdyYXBoLHB7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNjt0ZXh0LWFsaWduOmp1c3RpZnl9Lm1vbnN0ZXItaDEsaDF7Zm9udC1zaXplOjNyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTU7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDIsaDJ7Zm9udC1zaXplOjIuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yO21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgzLGgze2ZvbnQtc2l6ZToycmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI1O21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNCxoNHtmb250LXNpemU6MS41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg1LGg1e2ZvbnQtc2l6ZToxLjRyZW07Zm9udC13ZWlnaHQ6Ym9sZGVyO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDYsaDZ7Zm9udC1zaXplOjEuM3JlbTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX1wK2gxe21hcmdpbi10b3A6My43NXJlbX1wK2gye21hcmdpbi10b3A6M3JlbX1wK2gze21hcmdpbi10b3A6Mi4yNXJlbX1wK2g0e21hcmdpbi10b3A6MS41cmVtfXAraDV7bWFyZ2luLXRvcDouNzVyZW19ZGl2K2gxLGRpditoMixkaXYraDMsZGl2K2g0LGRpditoNSxkaXYraDYscCtoNnttYXJnaW4tdG9wOjB9LmRlY297YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xKSAwLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMikgNTAlLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMykgMTAwJSk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLXNpemU6Y292ZXI7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7dGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50fTo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX06OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfWtiZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtib3JkZXItcmFkaXVzOjEwcmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3BhZGRpbmc6LjI1ZW0gLjZlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9ZGV0YWlsc3ttYXJnaW4tYm90dG9tOjFyZW19c3VtbWFyeXtjdXJzb3I6cG9pbnRlcjtmb250LWZlYXR1cmUtc2V0dGluZ3M6XFxcInRudW1cXFwiO2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMWVtO3BhZGRpbmc6LjZyZW0gMXJlbX1kZXRhaWxzW29wZW5de3BhZGRpbmc6LjZyZW0gMXJlbSAuNzVyZW19ZGV0YWlsc1tvcGVuXSBzdW1tYXJ5e21hcmdpbi1ib3R0b206LjVyZW07cGFkZGluZzowfS5tb25zdGVyLW5vLXVzZXItc2VsZWN0ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX1Aa2V5ZnJhbWVzIGRldGFpbHMtc2hvd3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41ZW0pfX1kZXRhaWxzW29wZW5dPjpub3Qoc3VtbWFyeSl7YW5pbWF0aW9uOmRldGFpbHMtc2hvdyAuMTVzIGVhc2UtaW4tb3V0fWRldGFpbHNbb3Blbl0+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5tb25vc3BhY2V7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2UpfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtsZWZ0OjA7cGFkZGluZzoxLjFlbTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXSBkaXZbZGF0YS1tb25zdGVyLXJvbGU9YXJyb3dde2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7ei1pbmRleDotMX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9ZGVjaXNpb25de2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWV2ZW5seTttYXJnaW46MXJlbSAwIC40cmVtO3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnR9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2hlaWdodDoxMDAlO3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnR9YnV0dG9ue3dpZHRoOjEwMCV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IE1lc3NhZ2VTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IE1lc3NhZ2VTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRNZXNzYWdlU3RhdGVCdXR0b25TdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIG1lc3NhZ2VzdGF0ZWJ1dHRvbiB7IFxuQGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpSYWxld2F5O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFGSjRBQklBQUFBQXQzQUFBRklRQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHb0U4Rys0NkhJVThCbUEvVTFSQlZFUUFoUWdJZ1FvSm54UVJDQXFCdWd5Qm1uQUxoQ0lBQVRZQ0pBT0lRQVFnQllVVUJ5QU1neHdiZmFRWGFKZWZtTnowWm9sM3Y2MGNQZVpNcEc0SEpTams1cUlJTmc2Q0dNZ2xaZi8vbjNGMGpPR0dEUkExclhlSW5jSklVa05IR242OXFNUkRVOFphampzOVVic210bnFuRTN2M3ZxaVFtZlJRcExrS1c2UVp3YWw2czVJVWlKTlVTVUcvT3dvRFk2QjY3NU9qU2prRFNTTXUycGVkcHU5dkpJTFVsSmQ3MDdEK2VMSHBqWURJNGUxdURuTGpISHZ4cERYR015ZHVMTG4xcXQwRkNRT3lGc0paRTEra0pxM1QrSWU3QkpGSU5PQU5iaTl2VFV6aEk3VzRHbVVMMGxXalQvRlFRaS9tKyt4dVBQMDJvbVJIZTVwbjREZ2ZOWmZuK1I5ejk3OXRtRWVOYXExUnhScUhUalRQTkEySkZFZ3JIZG8vbnQvVy81emJnR0N4aWE2RWtWaUEyRmhZR0l0Um1FMVp2VlV2cXRTdGI3TXZyZDNXNyt0MiswWGRvVG56empZYnA3bVNITEFDa2hNV2dDVEw2czBXdjBBVW9oSmZFcUUzb3BQZDU4aWtKbktsbyszdWFlU0hZSjZmY0ljWGpkK3JLVUVzYUVsVHFsVWxWUm0vTitlLzhpUDBMNUFLb3pObEozLzlpQndzaE02djVKSVVKeWtnVDNmZHJPbXE2TGNzK1orcS9Yc0FYRnhFRWlRSVVhS29zRm43Y3RUKzdCQlM1ZHFEb2xKWHVuYmw3cnR0ekQvdjM4NExmdEphZ0ZGQUxZUEU1QTdnbk1yWkJodDRsWHFzYlpLbWJkcTBUdE9tcG1nTml1Z00yUFlCYzczTXJqcTdHTHNvWEhjVHB0OXVQdkZEejhlTjNnK3N4clBRQXc2RFRGTnAvT1pJOWlpbk5pdFpoUm1wUU9Da2RvQmRBTmpWV2xhdk1pdHdETkpYL3BZSUFrVnduT1Avdlc1eHpvTXc3U0FGQUtVK1p6L2tuUC9aOWorT2Rmckw4S2UydmRLYm1waHV4SlN1TDhFVUFnZ0hJaUJIUCs0NDRFRHp2MVBUUTNZa09jT1NsVEhtajZVc2RmbzJMKy9qcFllN0lIV2NRVWdjZ2twTEZSMVlUVzhDR0tRWDliOEdGQUFBSDl0bzRSSFE2R0x2RlJyaTREaXdUekFBRERNS0RQci9mWjNWL3FkZ1Bta0d6S1RFbVdFWGI3UTN0dGdUWXFvMm5QNi8rOTdYZitGLzlKSEFWc0lJY0FDQlp3UnlrR1Q3Z0NSOFZvaEpjVU9PU0RqaVNiQXBoTW96bTJKUnB0QnRVVzY5WGJORkczSVZ5MktMb2s0OC9MZnNtNTI3SWFxQkxNdUJiT0ZJd2VGVWQwMXZlTCtZOHhXaHR6Y3FUbTJDSVRjNWVMSndTSTRmWWxMWUZJVkhBcy8vVDUzTjQvWXgxaEtHVStIU3FFcmRwUFBuczZmcXFXSnNOYlphQ2xRdGpsT0xVTXNoY2RvQTVUUXNzNEpMYzkwU3hDT01NVUs0S1A5TnNocHpwWDR2d3hLQ2hDQVNSRVJFL0xLc1dSbEp3TktBY1RuWEFoRXkzcjFLSGNaYS9ZZFg1ODQyMC9pYVhtdEdob0NBaUlpQVIyM3YvUDkrS1RBQ0FONWhka0MzeFVDNEVMc2dndmtSMmtyRWpZU0V2MEJLU21IQ2hJdllPQ0FKa0tRZ3lZTU0yUW9VTXpDbzE2Qko4NXFBV0NDZEhlazNBQjBPREwxTHEwUGdUZTNoU3cyZmhpNFhoUHVldVFXRUg2eHRJRVFBYkcyTm01b1Y1NFFGUCt5S2dPMkQ0VDV0L3d6MlhXOTIvcnBxcExUU0lQOHFWOXZMdk9kczBOTFd5WDUxSzZvZmJ2UFpFMXBhZjd3MzE4QzladGhxN2YzMmJmdUw2NFZaSHc1MTRZc201bGdmTmJmRzdXOWxzVUE0RUd6NzIzdnh3R3pwNGZSUittUDhMczVCN0tCMmVESlhjNnh3bEc2OTAydWc3QXpMQThOWTIxQjJkQi9QNXFmT1Y4dDFvbnlMNWpaRERmUUk1Umc4RDk4RnZIc3ZjbEh1SnNyZHZzSnJwYy9Uci9ndS9FZlpKelhVenBXYURqN003K1VQOC84RWtBQVZhQVMvQ1IrWHMvSk40WWFJY08xeEhaY1VhTU1ia2xycEt5N05mUUpLUWNVUmFnb0dtQ1crSEE2RU52YmczM3NsMnBJWVJtRTliSUhiMG1BNmtrNmxONUdkeU1ONUVibVFoeEhLbHdNZ1Q1OGNndzdwZFVSejduZk1jUWZjVTN2SWN6VmtkcmhYOFhIcTQwMTJ0Rk9kN2tUL2E3cDdtODNXQTcxRjdhTzlNK2RqdmRkNmo3ZnhtK0QxUHUzejN1aXJ2bXV5emE1M3RydjkzbFRiODJSVDJLYUZWVUtNTlAzNkJ2UU1DbzBHc0Vka0w4cyt6TGcxRXhiTTBOZ0NXQXhnemY4MkRHMUtYTWZjNHJqTmNRZkhLeFNDdVJ1Qkk1QW9kREREa0dkVjhDblZWRW1FTWFpbjRTYTBBWFRJMFJCTnBPWUFMVnExYVY5dnhKaVV6SEtXQ2lzNm1wMEJ1a3gwNjlHcjc0c25WTmJzb0Nta1ZNb3A1K3BER2FXejJzTERyMmlOdCtvWk8wYjM2WVNJaldjeHZubE4weDBWaGxZb1c0VVJqWFhLeUxHM1kzcW9MZEVhekhBRUVvVnVNbDNERGVFUlZwRy9qZVRFUjBDVVpFVTFtb3RxRm9pd0pGS1VhREZpYWNTbEJKckVqU1FLSi9DU0ZTbVNLazE2MVFsa2RLZXlTWFl6c2RYS2k2STlpa05KTXRDVUtsT3VRcVVxMVZIVDF6cTYrbHpmUU5BSWE1SnBSb3ZXYUVQN1p4dU5tVGpNTEJZdXEzWFVUZ05kUkRkNlVxOUEzM2NieEF6eERET04wSXhhTlZheGQvL3MvYWp4QUU2Sm5QYkZHWmt1QzN1YU5VOEVzRFNMWlZteE9qMVBkOEhReFhTcGVka1hhd2JXNndabzgrNkRyaXVRRkZ3NUlwdm5KaDYvWmdGSks5MzBhRU0yWEozeUpCMERIb3BoYnFnMHVya3ZNSWdZbHRiR1JQY2RrZDdWai9OVjRwYkFiYSsvRTRCakNnOXA1WmVyaS9wZE0wQ0cvN3RYWk54VkUrNmJZYXZRbjZ1bVd3eTNGWGY2Z2crWG5BdEhEZ2prUE5pVWJxcG93dkRVdmJSbGNqNVhaSFl6VjhKaTRObDF2anNPaHJNYXhPSHhlRHdlanovVklISlhuNkgwd2hnNnFGT0VVcVFvMFdMRTBvaExDVEtKMHlRNUxVOXlSUXBTcFVsZlpuQVNCa1dwbENsWG9WS1Y2cWliVEJ0TW1RS1lZV0hWVVVmdEdJdDYybGRuTUgzRXBpVTBxVlFxSGJDTHhPVStFNC8xWExmQkVoektoZ1VjZ1VTaGZ4d21EejlHNUVSQUFITDdGSFJLUXlybnd1eFFmNXJoSEJFQlJJb1NMVVlzelViYzRydE1kcGwyNkZnZDU1dGdRRzh4L2ZBWjJKekl2R2JtbHJjWEFtM3dYS2E3RWxmUGNTMnR4ZnErZWdmaUhHb0RNeHlCUktIdnkzU0ozMFE2VjgrNm1kZlpzYUZWM2VPVUtzV015bmtoeUwxdTRWSTBMMVNKTEl4WHlZenBMeU5xaVd6MFhUcGthVHluMVpEdGk5MG1ZMDJ2MHRVcXR6U0NsK3FySzdySXV2MXY5UkQwc2d4cUdiSm9HR2ZFa2xFMVl6cjI4TzFsMktld1g5TjRBRGFOMWI3TDBJYVJUWE91eTl5aXU4MnBPd0hRQkMrcGxkQ3JPbUswTWcvcjF2UllFbTNEQkVjZ1VlZ21VeDAzRzQrd2l0UWdPZkVSRUNWWlVZM200dG1FSXZ3VUtVcTBHTEUwNGxJQ1R1STB5VHF0RmNsRUNsS2xTYTg2V0VaM0pKdnNGV2k3SXhLSk9Cd09oOFBoY0VUclJOM3REcGxNSnBOaFJJYWlxQWlHWVJnbWNia3N5NE5vei9yb2ZRTDdLY2FsTkQwRk9XM1JHWnVPQlIyeG1WTXhrVWdrRGwwWDd1Sml1dFM4Yk5HYUUrdi9aUU93cWU4NkdJSWVFc0N1b3ZXWWZDcTJ0dnBNT0JON016TzY4R1dYTGh0bWdXMmZmZUhwMU11N3F3WDVORHdUa3BDU2NlZkJreGR2ZmluQVJJUklVYUxGaUtVUmx4SUFpWkUwclZxNjVJb1VTWlVtdmVxVU1ycHMvejFaV0VaNVlCZ0dBQUFBQUFDQTBXWnNkMUNwK0h3K24yL2NPbGs0ckRwU2wxSzNIcjM2amcxQ1R0d3pPY051Q1hZTmdpRFlob3RIMW9nT0xSU3V4OG5pbDRyMmlZYXYwbm9yelh2WjJuWmpaTGZhS0QrVlJnSC9mZ05tcGtGYmhnaUdpVWFjR2ZYTm1LNDlGUHZZOXR2YmNUbTc1KzNmZGFtVzZZU3R3a2R6YUNIWmN2cTBDUzRpVTVabU54TFhHQmUvclFvSGpNUDEvUUVHVk1aRkpnYkRESi81VDNleUJjdkdQU3FUaW1KY0MrWVFVanFHdjJuQzdxM25CMERPcXYyRzNWdmxJaEtJVzhNUlNCUzZ5WlRpTkdGWCtSR0NESHM4UFlJZFRqZEFVQXl2UWt3U0NwcGhOZDIwbXB1TWpRWEtCUWtXSWpRcG1KUlVLWXhLWGNMRGM2a0lmSGFUS2FPTVNjNE1zVlJZUTBlelU2RkxwVnVQM3RMSHV3cHJZZnRoaXdpSEZBV2tTcG1XUnQrNm5KNlUxOEN1eUo4NWoyeDBiMGQ3TjlwaWJxMGxiNE5uVStwTzd0RVVMaWhkVU8yaHJwdGdZWENzeEJGQTNsUTJubUZjM0ZiUmpHQmdDZDZCVUg3cW5YQmJhY2pzSzk5UmZJRE1BRmtCc29PK25aZzhQMEJCZ01JQXRRRWFuOVdRRXM5TUFITkc4NTU0d2ErQXJucXZUVGpwR1M3ZS9pbFBtakFSUG1uc3hXa2RBQVJ5T0w5eUFoeW14N1NHS2xrN0doNDh2RHZOZmRnK0lUQlpwRDlnemdNSUJ3d0JrNXRta0VYSXFxTU1hRVRnL0hVZTI2b0xUVHA0dzRnOVVrWjViZ2J4RUh0Q3lUTFlQSG1KVXEzdUpwcXp2U05jdW1iQmRYWVFza3UxQzkyTjhqVHZERkVVMHJ2ODE3Z21xc0dqUGZSdU5qdmVyVERtSENFNHErcWJ6T2p1SUl2UmFEaHpaMS9WSlVwaGhpT1FLSFF3c1o1VGpndUFCOEN1S3IrWUlNS2V3SW9NTzV4eDllNEFFQlREU1lwbTJPVHk4b0lveVlvYWplalVRYjhKd0QvWEI1aVNzd1VpZ2hBc1JHaFMwQ2d6SnpYTUNUVTFYRVpIYVRBWFRDUVNpY1hiWTRWQ29SZ0xFeHN0bGRDdHhaMWFVbmx1dEdodE9RdDE4L1JVZFZwa0RCdmJTNG5Fb05Gb05CcU5GaWRYbjBXSkxKQ3JVOENVYnFxTWhaR3BtK0Y4RWJCSVVhTEZpS1VSbHhLRUVpVlZMVk55UmdwU3BVbXZ1Z0FaaEFHbHlwU3JVS2xLdGJwbUE2d3JRTGNldmZxYUU3RFRXczZZSG0wRTJkY2xpV1dzV0Uzbm1TN0c1YjZ1R1ZuUG5OdXl5V2JId3hEanBXazZNK2oyMGVZTUxRLzAzVk1tS200Wm5nbEpTTW00OCtESml6ZS9LcmRDa1ZNbEtzeUltbWVaZjBHUXl3SkJFRnhDL3JnZ0NJSWdDSUl6OTBiREV3TVRqOGZqQVVBeGRTNlZzRGNzMWc4d2ZZQ1hyTmQ5OFNIOGdhams1dnVVUHFnNFhEUDlKbTdvR1d2R1h4U2RFTExmcnNFU0VzbVdYVGNNM2NMdEhGU0diU0hCQWpjQ2lVSVhKcUhuTWxPTFJCTGFzblVLMlN1eDF6cW5NQi9aTUdPeC96UHU4b2hEQURBQU9BQUNBQW1BQWtBRFlIZ2xDa0N1TFZBaVNJS0ZDUDBraFdOS1BGVXdiZHlMK3NEQnllZ2thSjJXRU10V3JFNi80dnBXN0c2ZTRtRHcwQmZ4WmhGdDlHdmZoUEVBbXlkNGNNdFVxc1BsNGF5N0d1YWs1dDBONTJPT3dKYUJnU05Ic2syTmg3cUVXWllWcThlK2tzeGpqM0VLU1hnOExOaWxRcUZRekUxZnY1dHZwUVFGdEZJbXlMdGl2VGVXa1FDazVaUmUyUWlKMlpyTFlEVjg2TUJZV1g1eEFQdW5rMXludFoyeDZhYk5yaVhBc2hXcmNma1U2M3kvai9tK2duek44STNZdHh6ZkNlT2lBUGk3WWgxd0JCS0Z6czcyV3JsaWZXYjNuK3NPbWtTaXpYSFRYcG12QW5PZ2VhKzdTOEYxRUhQOG5VNEluRlk0UTVtV3AzQkFMbGVzYTdCejRGdU9iRTRFWFJuaXlrOGh0Q09pazh2bGNzV1lJS3I0L2NITTNYWEljY3lPRHNCWEg5UjNOSUJqVXNkMWZpZGowaWluSDVyaVpmVU9EVGlGUXVsemVheDcrakhaVnl4ZjM4VTN4TGRyK1U3dTQzSDU5S2VnSzk1SnZ3dnlxbjNJZ3hMeVVHMlk0UWdrQ3YxQlREK0l2Q01QTWcwbFZZUkJuU0lRa2FKRWl4RkxJeTRsQ0NUMmhtMHNFQWdFSlREcnFiNGdKMkpZb3pTVUtWZWhVcFhxYk5yWitaaGVqYis1ckhyR3pjY0xRaEpTTXU0OGVQTGl6YS9LelFuTUNFS3dFS0ZKWVlHeU55SzFsdEpVL0o2V21GeFVxTHNJblhTczM0czRBSm5UTlA5SlY4MVpXMDhid294d2pNb0dnKzFnUFB4d0FNZVprQkVFK1ZzdXBzeG85Y1dTNWl2bmFTVXBGSlExVEVidGV5S2pNQUxsU1FoNlJLM2dDQ1FLM2VRVTRqYkVDN3VxL0F5Q0RIdUNCUVRzY01iVnV3TVVCQlREUTl5UUZNMnd5Um55RVN4S3NxSkdVM1JpRURQWEw5RFo1RjRJcEF1U1lDRkNrOElHWlZNRkNkT2tMdUUxSUtWRmxHZ3hZbW5FTmVOQkNWU0prbkpFaitTTUZFbVZKcjNxbURLSXpHbGtTYmJkOUhMazFmeCszZStWQ3BtS29oZ2x5VUJWcWt5NUNwV3FWS2NhVUczVWxmcG9rTWJheE5Bc0xWcTFhVTlHSWxPZnZKbE1wcGpKWkRKYlJqdGFOV2svcnpXb01JSWFOV2VzYXV0MDN5TU8yUHhJSTZNQkU5MXFmb0R5eENTd2dDT1FLSFNUNlFWdURoNWhGWGxwdHJnTWp5QktzcUlhTDE3R2Nka0E1OEE4Z0NZLzMyUExid2tuQ1FCQU5tdEN3Nk5vQnJWSXF6YnRPVXNXVTQwNWxDd1oxdER4NXAxbzdURWRKQmdTR0w3NzdCRWpvOTRhbzlvanRLOWJ2NS9oQU04UmE0NlNqZ21kZUx6TkRNaGlVSG51N1FtRERCWitJVUZpVGNKb0hjbElrU3BOK21aR2NUY0g1SWNCcGNxVVIwV29WS1U2NnFaM3VzZWdGM21uK2JGbHJpcTlCbW1uVjdQYjdHMFJ0Q2FzT3dLUVpFZ2g0ODZESnkvZS9KNkpyejJydnoxMThQazhQcC9QNXkvOU5QSmlyOWdKd3lsS3JVeTVDcFdxVkVmZFZGTnRocldnVlp2MlpJU1llcmVCb0pkSEtlYWVnMEo3VUJlcVI4U08xYW4zcEZBTUtMd0l0VlNKKytGbW5pSEVzRkVRVytwZWtvTTVIcWY1MGx4QkxMdjl6Q01BWlRQUTE3bjlYNWtIRlg3YzZRMkp2YitLU0lzU0xVWXNqYmhtdkpFRVd4TEhKRFhNU0s1SWtWUnAwcXVPSUtPTHpHbGtTYmJkOUhMa3lWZWdNQlc1VUt3a0dXd3BWYVpjaFVwVnFxT21qOXA1cWxOVDMvLzF4c2lBUkNLUlNBQkFCUURBZ0VBZ0VGNGtjSFBBNHkvZjJtN1lHbzVBb3RDVlNTSWFUZVZHRkFBbHgxUklaUnZHYzVqMEpJZW9jeHp6cEt0Y2F5Y3hJMWhTeVYrNjEvR0N3dXpBTWZRTXc2TFRLZDhvc0ZBY3JOVkRQSWVGczZMSEZ4bE55dGllRGpiOEdPUVFiaFNJdGowMmdJZzhPVmJVZmdGL0d0a2FDc01NUnlCUjZENTVtY1BqTGJZa0k4SjB3SndYZi9NMW5vOWRqVFZkV2hwaUQ0TWprQ2owR1lZNmtZMU41UTRFS2dVaFdJalFwTkNqYktvU0NOT2lYb1piVkY5L3pzTGRHWUdnVmJNendKd3o4K21xVTJzalkxQnJjamwzZkcvc2Z6NnE3b2cyWTM0dmZwZFVoZS9DWjJISDh5QUEveFE4RDNteUFJRE5BVnNDQUpiWm54aTJjSDVzMmNSSndWYU9tMldXc3RQR1p4WVpBMUtJUjdtdDNBekFtdGtGVUk1aWxEY0FtMlF3b2pGWEI2cjNJc0J5VnE1bCt0TmFiY3RyRitRckFRK2xraVVXemlIR0tXYzV1MUZVZE1LTWhueGl4bkFVNGxrYUFuby9uaHVTY0VuSHJRNlFFZG9SMkZJUTRHRm5ZSGtmQmdKVHdObDQyclFIN2RWNklCS3g0R0RJUFRTUEF0WUhjdWEvVXplUDFlcFpKTmF0T0FTcUZFUWtZQ1dTaktvbWN2SjRRL2xZbVI2YldpRVdXVklGQU5hSVRPVncyWlZIenI1TXpDLzBpL0Qxa3dFV1ZEL3pUOWI2REc2MzJpSzRVcUM3VFAyVU5ibmtFWTg2NFhZaUtsVytCUzNGVUt4SERRWW8rOEI5eXoxdzRoMDdCYTRRa2t6TDBMR0pHSXJyWitjTlh1QjNQdzZjZWRwQU1VNkd6UlFxRFc3bnRCK2NXaXNGeW8zV0NtUWpMME1tWG9CcU5XUkZJWkk3Z0RYaHRTY3Q4THBCZmtIc1JRNlhwVmZJUnZaQlU4cDg1RjRoSDhFS254bUVZbXUrSzZjWVkzZ1FlMSsvVHpKQUlSRjFjS3ZObW4yUTBNOGFPV3NYalQ5anZCQ3I1MjF4cXRXVkk2YXBMcGVoS2N4WnVXOUJXTEozUUdxZjlKVGl1dnZVMHdkZ2h3LzhJQlJJWDFWdU5ReXNCcVN0Vk5QWFpEdEwrTml2Y3dpMVBnRC81TzBveW0ySis3OG9uMHJ4Z0E5T0NsYTBnTjBKRVBIWS9ZUDRuaElhd2JFSjJIbFVuUjlEYnpmV01QQXZ4a3J0QTE0eDZqckFtWVVjZ1JmUmxabm5ZeHMyeStvd0xEd2tTMlZrM2RmakFBVVZJSmV3RDA2dHorQXV3NnBJcXhUbDRkbWpvR2xZUVhETWIzMUZKUHMrNjdqOVJOZ3NIWWd3d09jWXR1Zks2VmhDTE11YzRORlRidjlwRVFqRk5qTnIwTFdBSkIzWEdIbTR4N25CUmZYbUhRaFEwYnpxbU90VlRueWVTNngxSGJDL2Fyai9YZS83cU1PbDdNMGVVbkRQZ2h5aXNGOHFJb0ZiaGZFZ3F5RDRvM28ySzVSTHJNSllDYUM1Z3JId3VwRE5zVm9YRkkzKzlXWVBhMWx3dk9wOTFmdmFuR2hvbUppcDk3dXBOSG1PSCt5YjEraExJcGRkcjIxUmlBMTNKaWI3OWs2cFRCM2RGQW83MTRwUTF5UlpiVFhNeWRBN21RRTlSRkdoTC9PeHJIamRSbm8wWGRmOXlFZTBuWEZmT2VyelkrRE8zZmlCV0JGTUFtcUZiT2Vna0FxWFRWbzVmUzY2eU9JVmxMQ1NkY3A2OHVlNHlKZWxoVVB0VTZWbTJqbk5BUHF3V2FObm52MXc3SlA2eFFaYXdTSVBsT0ZNRVVHdXpQQ0JiMmRKVXlnWTZROXdyNkpVakpyNk5aY2JFWXdML2N4WmZlYzgyTE9zTUs0OXhYNjI4UDhOcTNUREVjSUFQWnd3aEx3NThoUEtrNUpTb0RCSmdpVExFU3RQQTUwbTdTcVltTlN4NkZOdjBpU2pVMDR6bVRiTllzNENxemZKZmxtQy9ZWkpnTkJ3REFhQmk4ZUJIVDVIQWs0SVFrS3VSRVIyY2VIQ2pTdFhZaEplTU42OEVmejR3Zmp6SnhFZ2dKU2NuRXlnVUF3bEpYZGgxSnlFQytjaGdnWXBUaHhLdkhoMkVpUnlsaVNKcDJUcEtEbzZXMlRJc0ZXbVRGNnk1RUR5NUVNS0ZQQldxQkJma1JJQ0JsVm8xYXBSYXRTeVU2Zk9WdlhxK1dqUXdGZVRKbjZhdGVNd01mRm4wY0ZlcDA0QnVuVFpvbHMzcEVjUHZsNjlrRDU5K0NaTjJ1YVVVNFJPTzQxcjJqU3VPZk4yV3JCQTZFMHlaTWtNNGJ3NWh3c1duQzVhY3Joa3hlbXlOWnNyTnR5dTJ2SzRac2R0elo3SE9zd0dFd3Voa1JpTTdUZzRFQzRlbkIxbmlKQVFib3VkRUJHUkhWeUlJUkxlY0Q1OElYNzg0UHo1UXdJRTJFbE9UcVFSWEhBUTE2VTRoQzdnZ0NFQWcwWUFCd29LRHJ1RWw2K0dxYkZOUExXR0F4REEyKzJtVVNOT2lCZzd0MFNrUzMxb3hlTWtqckZuMklJakp6ak1TVWhPdWtrb0VKU2lqeUdneDJJYS85WmMwM2IrbjgrZ3FrZ1MyOHM3NTZjalVwM3p3VHIrUlBlNlNlcmxVZFQ1YWV1Z2UvQUhnQno5RjRpbndFOHErSDRPdklXMzlGYmVXcnkvQnFNdnYvS1N1cGk5SGtyVmVmRzVaNElhdmZqeVd5K3A0c1ZYeWhlVlQ1bnhJcS96YnZiam9xWFgxWmUwaGowQVlGTVFaczJCa0FnRklHRnd4SFlOQjlYZGFtd3IzczcvQ0lmZ1laaWZoVDlnYTEweXd0emRaWS9oY25lVFlhL2tpejhLQ0JvcmhGWjRnMWxYQkdHV0tBNzUyRWxJZDlhTEs0U0ZOZFYzMjliRzdSSUlLVTRHRXZoanI4TFUxd2pBMjNzOUJtZ2JHalE5N29VS3dxaU92eVBaRVJJQ0tJekE2V1RwV1F3VjZvSmxlM1ZUbGo1VHlQS09qbTROYnZPZy9UOUdWZnhOQTloRmhRRFN3L2ZSanBDRjJXOE9BNjhpQ3lUK2YySC9ERzhDNmUrbTF4L0lJODc5TkEzNXJ3QUE2OFFXQVlnbFRUQXNZQUNFcWVOKzZteTN3WW9BNEYrak5vV2NOUzhPaWFqUVFQN3lNRmF3SWpRUmdTVU1MSTBRN24xUkFYNlJGOFlLSUlKVW9aM3lnQytRMlFvc0NrdE81bHVNSEdVYUUzZUxlOFZqMGhxcFdBcElFYWxPYXBHNnJkVys3cVJBRmNDZVlpa0E0QlBUc0xoL3dVV2ZPYng5UjZVOHFmQTRTS241ZzdZQ1hBU1FDUUJZTjNrQS8vMU4xZi9rNlMvMFkvMW9Ccjc0R1h4eCsyTmYwdSsvN2d2cUMvTHp6MEVmOU9SQnFqbjFQZ0xvWlE4YisxWjBjOGdOL2wvMkRXZk5tZktwWDEwMzd6Mkx4bjNsdEJYVGJFNVo4SVB2ZkcvR0pvU0R5NDZBTXhZMkRnRWhFVEVKR1NVTVRvV2dwa2N4TURKNzI0UjMvZUgxOFNDQ1M0SWt5WFF5Wk1xU3IwQ2hJc1VNYXRTcDE2QkpNeU1UTTR0T2Ivbk5XMzd5dnYvNTJPYys4WVhmL1RzdTNMTE1lVDliZFh0MmNOZXZYdkx5YVBqRkRVK05nUmNOdU9CMXIzbkRMQklHUnlOUUdEeE95am1vVklPTGg2K1VHQXdBa29QOHdKT09oaGJKQk5VdmhwVU5MWnFEVTZKMEtWS2x5Yk9iWGc2dEVoVktsYWxTN2x1VjJyVm8xY2FxVmdkdm5hTVFDY3VXWEhIVjVjaTRXVVFtVW1VME1NQW10Z1FzQlN6dEYzUmJCQmV3RklBdzVsNDFpamNiQm1RcDZ5M0FFTnQ4MmRBa3dqeG56N1A3OFZVVURCL1ZtdUFkK3g1NmNQKyt2WHZHUmtlR2gxWXNYN1oweWVqSThPS2JGeTFjTURRNE1IL2UzRG16Ky90NmU3cTdPanZhMjNLdExkbE1PcFZzYm1yY2dXQTA3UGNlZmVUaGg3cWRkcXZadVArdWRHMjFsc1RBUCtmejZkcjFtb3ArMExKMVRFZ2dTNkN1dkM1b3lBaXViMDEzWVBNTGJZelRiT0RBVFg1WUVpWXljcFU1SVZjUGZKRGxKK29PdWRzdkxPVXlDSEEwZXBTaFJkNGR1SDRLZ0VwTUVPV1pHYjVFRmNNalZKa0JVQlVCUlprQTJaS05Sc0FOMSsxMHhLOHRpNUx2dTlDUU9jWnd4b2J0VkpZU05ZU0ZJMy9lendpTEpkUUVsVkFWcWJGZlZqN0dGWUtVd2lMMk05Y1NkZ05tOExIY3NBSWx2M3QrcFR6aWtnalM4TGhucFJBNHlEcGJPN0JjZWtoTElSdHlyc28zaE9GYmlVMjlGZ21LWTVKODJ4UmQ4cXlsc0ZXa0VIL2JhbjhsbkR2M1p5NWU0RFZHaVozT1FSREJENDY0WG5XVG1vRkRSNTJ1WEpremxmeUNSTjBqRlVMZXFaVkxOUUVYbVZFbERvdFpOT2ZpelE0UkxiaTBLM1ZmUWl1T0tPRVNNRlR2MTNUdmk2Q1Z5VTdXeE1tS1czVWJ0RG1uSTE3eVgzSGNud2pnb2ZvVTRtYVNVbExuSVBvZDB3OHl2NjZvV0lNZFNpR1BVdjJ0Z21BNEVkYTEwRnJudFFtL2VsdGhmd3VoQUhXS3MrSnMvM3pxdFR4U2ZjWmRXdk1Ca0VrbzJPV2Q1aDhWeGtsMXdRMHRXcWZYeGpuYlhUd0R3NW9tV1o1cWR2SElEYktZeHlnOTcwcEp2ekF6OG4zNU9MUmtmU2JkRFRwWmdOTTlsUUptMmlVMy9IMG5neHZIMjlkQWVZMlFEUXZ4WjR6U2hwUWJoQWpCbXdWYkk3RjdJdko3a2lOMUZKR1dOdUFuMHpNRXlSbDBoMk4xN0pDS2lnQ1BLZnk5bkhOT3R6d25JendtZ3V2WlovVE1CY1FsSEFmdzVFeEhEc1hHdUZ1U2VvM3lDSm5aUmIzVzdVZjNhTlo3M0VZSzdrT1NsVkpzd1lZeUpDdGNHTTFHcmo5OGNuSGhrRm11N1BkT3duMVd6UjBoeFRuUlU4YUJKbXhxSDl3UUlJYy9mVVdCSGo4cXJJU2piTzJoUFc3bFJJYW9ESnBLcDZXclZIYjBvbDVMbktMeUZqMlRIZ215OTZBcFo2L2xxMWlOUFk4dndES3o1Z3MrRS9DWklDUHdjYWNxY25SaXIxUnpQc25DZ1FWYWc1VU1yS0dKNnk0K3lQWVpJN3lqS1RKS1NVTjRvVVQ3R1RkaXhPMERrZmNUVWRta2FCenFQYmk1U2lLZkphSkRES1kxWmwxMnUxUkFPa3dTcDd6SG42UWthaXBOTHI2RTBwSGdtSVEwTzN4Qm5XU3lZMjBjdUgyeldZeE5RM3cybUZ3UDh4azVjS2VEc2RVYWtLbExITkpHOHM1eHp5aE50dEVCaVJETlFzY0NsMnYyWkFuMUNpdHhNRWpMTXdHOXAxZER0ZHFpd0pUTkNmTFNxUlMwQXRWdXFRUElzUUNSWkltOHg2NklOd3BUQ01KQzJ2WUhyTk1XTXc1VHhKNFZpNEhnUlJva2lnRktQVHBuNDVKWWd4cWgwYm9xZ3VIUDZJZ2tRVEtWUHA5Qm1DdHlTT0pkNmJ5RTBsUTFkbmt0bGNpR1VtcFFPOXRCbjZBQlJCdlliaC9vWGFwbkNDNzVHR0l4bDhXK1paT2pvSFVodTdOQzI1VUpvTGRvdkMxVm9BaTJGQVhwK000TjFEeUF6VVVqZVN2NXdHN1piZjlFY1Q2ak1ic0oxQnBZL0p0b2w3TjBqcFFoZ0xoY1lmWWVVWjJCWHFHVUg4NVE4UlJ0ejJmUWRuem5sbEIxOGRDRE0zQk0wUlZtTFhHUEZWUmpFZFFoTFA5RGlKdnBOem9VQXZlZzlaQUxmSWpUVmI0ZXQ1dlBNOUFVVkMxMUpZQk15RXBKb0xhd0hWczNBMENORDBjZzIveG5YSk4rSUpXNEFLZjFHU1VhM1ZCY3VNclhsVVlUdWdab096UGZXS1J1YzhxWU1tbE9NS3dsN3gwa0t0c3dsZjJaUnNyajFoZzJ5enFCYVBsQWFNbGtSQzd6RzRXYUhjOEFCcmx5MG1EVmdQaEtnNjBLSUdzbG4xRkZRR29CSFkxVEd2OUtnSnAzVm9vM09CSXVBNDg1b3JoMGMwTkcyTFg2eVNBOXNHY0JhbjJRaG9iZ25pSjZGZXR1S1NIWExwNWVjTjFGaTFvM01nTW1LZHcwSXJGaGo4MUtpVUxEdlJKREk1S1NVbEtBRklLeFZ6Q3VnVXhYcEdnWmZBZ1BFRTkwTmV6S3pweHZIYlBUVnEyZE9hcTg0MkVOOXV5VHpLMkZZdCtXZFFaRGU0VWJlQjE4c3d2bFFVQ2lGcmJMK3lDN1dxbHpaT1ViMlZwWVFadTFtUFVrVDJYeTcyNk5qMGdwVW1vRVdJZXIvRkprZ2tnYkFBTDREaC8wbG81SkRCTUM3a2cwRHR6UG9nRjBLN0xXTFhSMDZQRU4wb29ISDFsdWVKa1FEUElXVTZNWk82TGEyc2d1bkY1MDhDMmxZR1pQbGN4MlhKMXR1WEZicmU1MUNJVVdTaGI0Zm9qNkxnR2NtbGcrVUNpU2l4Y0g5cko2VFRKZEFDMjRBcEdic2E1aGEvTklyK2g5SWVhWElDaVp1OEM0Skx6V1Q3Z0tZVDc2MzkrQUFqTGxwcGRYQUxibXQvemNkWjhuZkkvc3dYTmJaZHc5bVIxU083SWZnWktDLzRNQ3dwQ3c1c0QxajQwd0l1YmR0cEJOY3NWSG11VVB2aGFrc3hNOUY4Qkxrc1EzNk0vQk9KQVF0OFRCQlNVYlNvandLMzJFWWJlUXJ6dVlHYTluV0ZoT0tUbFFCdzlDRmo5alRHNEozTmdEdmV1QWcxVU9oYjRLQXA5cEhnYU1KS2IwU2xvTDdEb2RIc0xqcHRYaGt2T2Fhb2UwQ0hqRFU2dGtLQ0I0MmdaSnpSRGNQbzJ4TmVKclpEeGNYZVYzVjI4SndrMEhKaFUwOEx0R0RRTXFLT1AzVEdvQUk2WW5iRWtSd0RSazNPNGtpNjFJbnFUODEyeEtiaWlvQk1HRTVETHBNS3JpT3BvdkZMdGJJZTl4cU1xL1NUWXN5MFpRRjV5YVphdnAvYStIN3ViRG5wU3NpQndKRmFnQk1pN3dWV2M3VUhxbG13M2ZjTHZ2bW5WUlNGWVJRRW5neG5IdnV4OFExQ1Y3QUlBdUFJRGRBSDFBK0x3ZytnSGdQNEM5UUxnQkFOYWV2T1R3b3FNSFVvTmdtVm1FeURJN0xyeExIRFhYRWs3WkFNSTl6T2JHeUNHRGJrNkc1VWduVHBQYzMralpRTWpZR1V5dU5YZytNL1RpYkkyY0J4Z0p3a2IwYmdpNGZaZjVBQkNXVDdCRFNNOFllUy9KOG5vNElzeFFZazUxd1pLbTQ0Q2p3NnBUZlFqWGpVTHY5ZWpQT1ZLSjNQaFMyaUlmdWxBSzZzTUx1elk1T24vYkh6aFpETjJHYVBoNDY2WkxVVVpFbVdKM1hSRys4QSt2NVlPT2xGSU1SRkI0K0xqV3l1U3VTT2VwM3FyUFdyTkJvUnZHRFdiZ3FjdTk3MTVrWHoyQkVNRlVaWGZodkw5VUQvT3VtNjR3ejgxSWtzU1h2WnVJT3FjWVJDcHQrRFVpZ3N1RTNRN2J2Zzh6OXFFemY4bWZlSEZuNTVzSlJVdUxZeFEzZk1IWnVPN3ZoazhNMDkxUXhMQloxU2UyaVFOVjBkakV1Q0ZUYm55amVhcU5XdERVT2JxSmVKc0J1bklRN1BLV3F2SFBQRnhFWFRNS1JqZkFEYytNOWI3NVdpdEtlTjJUVHdQTWIwUEE5cTJGVVVHU2FMaHNsakRBVUFNTUxkS1lRSFZqY3dwZ1lLb3dhVVFDMTZycmh4QkRSVS9hWmdiRW9VcytBMTBUeGtzbmtTTGpaYXl5UmErUGhLS05qQlQ4TG9TcXJxQkdpcUdTUmlGNVRCQzdoNTNDaW9lRjRXRk1WMXpLNWpEUG9iakhnUDVhOXNCREQxaU84NFdjTDk0Q281RWRjSWtIbE5mSnRmbW1BRXQrQXAxSmF0dzd2NUx4YlNVM21lS0NXczEzY29kUVVZbEpWdis4dG11ckFHb0UxbnBNaFpleFRMb1BMMGtnN1VleTJNTEV1dk0weTQ1S2x3R2xXeEFobkhmTmpaYVdOY002ckpiTWltaTArc3p2OUJCcU91dGZQVkVqSGpJYk5kNXBhYU5tYkgzRkxKdmkxdGxPeE5zb3RkaU93VDluZVBPNytlU0dGRlR6MFRhZDlZZG1BL3BKOHFGYTVnc2Zhb2lzdzYxQW50OE92aisyNDJXSzNSVnIrY3lPQ0dUWFRaN1pxM3lISlFMUitxZnVTYmdQbDRVb1VubkZNcWx1SDlBUDhSaU8xa2Fsc3hlZUhYbmt1TkllOSs2MDZ6aWgxczhPSzg2ZWtNcjZxc0JzOHJ1VXE2eEZIMGdVZlZzT1lhbjNXU3RBUmY3RjUwdjZ3ZHVLYjBZdjJic3AydkN3U3FGYU1BcnJJTHZZVjBxeC9UczZjRDkvUjB2bWI3cStVajRRSkRIZkx3cWExTDJZU2FLZTZvY1dYVDZFaCtWd3VhUnlIc3BMdGlVTWVmcEpSVVlJdmRPcDVZRisvTWhnQkIycGZ3R2prS2NjZit3U0krQlZ6T1hMR2cxY3hXNERWZjlIT2FhSGlTczAvUjNkZlNpOGhkRnhZaDdNd2xGL2p5aHdEYWdGL0NlMnowaHd3RjRYNUpiRHNGSnVBd00wTnF0anNHTURDVjZHSzE5aGpVQURiUk43eUdkaE9oOHV3SEwzMEd6cXlsbWN2N2FJZzdRb2x6UG5Md3JiamNOdjM2WEthRlp6NGk4UFZIaGVRM29RcGFxTEpESTNTRGtFWExITUNKVFphUEt5ZlFUVVdyODZxSGNXNlpUZTVvTTd2YXRORFhrRmxja1VQNkdTVVFoVldpdEYyVzcxOWZQT1pIZTdnOFdyN0ZtMjR5OGhIa1RtUmdWN3ZqUFJYUHE0ZEQ4MGEwYVpnNDNmQlY1dFd2dkk2QUJZT2dmR3V0aThpL2txeFF1TEVHb0cxbzVmVG1tNm5zV1pyZGx1RTJicjBMZ2tkU2g3RjFNUzVwRDBEWkR3OFVpdFdLRm11c3gySDIxeEQvYm03eHhzOE9IMWxpWUpTVnc0WXVqd2h4UzMwQncyNUI3YUNiR3RnSFpVTEltNnVlYXR4ZXlwclZrcStsRm5CbVJWQWQyb1VUNUNWNlBMa1hYNGthS2JkZ1RtRmhqZXNvL0tqQzhJbWxnYkx5ckdLMzhTN0pqcXQxRTVhQ01pWG93YStVUGd5M2JKNTZkb0hJZ3hQUGdid0pyZFd0bE9HSjdNQ04rMDVpNlY3VW1qaWpoU21JL2VvZFhqSTJXeFFIamFtZlZPU1B5bldEdDU4Ym95OHl2TE40cTkzSmhwTDVwV0JuUkc2bGFhMXBFVjVtL3VJQXBSTjdSWG5UaklybW5BMnNIa1pwR2NHNnlzNlplV1h6NmQ4blRUZnRaaFFPYmFCWG1MVk1WcVprZ05ERmdEaTZYbFRZbTljVTJXWWpwelNTRkFTQnRxcXNTb2xpVVBLVWZiQUQxK3BpYldaNXlhWXppL2ZtV3NIUlhpY2ovOU5wMFp6ZmladEozMTExZWRnZkF0WDhXK21tdjI1MWRmRXdGQXRxRzh0ejJ5RHpMaUR0dmFiZXJXK0pxTmJoQ3h0U2dyTTZxNHNsVEpTNDF4YUNwQkdocHBEcnJpUVFXVjdOZ2RqNEY2aFNVam1vTFNCc3RaVGR2ZGZoQVluckJqVWl6bStnd1Z1OHpxaHNXYjN4L0YrNVhFVURVVFFYUUN4d2RIeHk1dmk2WUhuczI4VWlKaDBuN3hJV0MzNWwyc0dWUXFTTEhmMUNON2dDUUtrZUdnUjhhVFdxVy9CbGY1S0NBUWdUbXVMQ3hNelJqakxJc1I0UWczVmpvNithdlh0bXNDSm9aTU9rY2J6RjFLT0hHRDdaR3lrbGNXTXhzZWlEc1NtVXdDU1JieE0rT01WWWd4S2d3dlI1Wk5NQ1I0MU9RdUhzenVRMSthNyt1ZjNnTWVQM0dSR1hITTBHT2RiR2hmZjd6SWFSRUIrT3h2VGgwOThCczNmL0RBWTNwb0R5clFVdTZURUh5VWg1ZHRjaWMrT0NoUUZqZUYrUkR6NHR2cWREOUZ0T0NpQTJrZklIdmVrMlBMUmZ0QU84ZHhZdTRlMExpejdXQnl5K3dEeFg2Wkd1clphYnJ1ekd6V29PK21DK1pGa25Hc0tUdUx6TkhDSkM1SDhnVXpGczUzV3JCVk1nSzNJbE9CRkwvQkVRV205alRtY1I4VUVrMExKL1FFTURmZ1BIVFpDcXFXRi9vS2VldjRVUjRxR1ZVUzV6eEIwTmZ5clFkblQ4d2ZkRWFMdHBjajNKaDRGYS9HVDZZYzVadUFpMkRqdXdjK0liK25PSTd3Nk1hcU8rQ3ZLYTBqemFlZjREcVFvZVVJQWtka201dTVuUE83Wm13VHpBQTVWVWZ4b3VTMkdGQUlNQWhBMVMrZllZVklwUGNYaUZMRkNqbWdlT0V3QVVkRElIdzYwUGdwSk5EMk9GUkZid0lNRWF4aHBLV1c3Mlg3bG13OE9ZV09GdzJkWnNuMmROdjhKcCtmRkk0WmhtVDl3WmNaYTlnU3VBQlRydThodzVrMG1lQ2o3U3NlOWRLZ2dKUFJSZ1VzZVVWSGFrK3h4OE1RMUZHRGhNcWF1bG1uUExuQXREWUFDUzlPVzZKZXhlMUYrNHc5dkprejVVeCtxZ1c4NWpreHd6dzV3V0FXNW1IWnlmek9SYk5NekNPYzVqZFZwaFpzVXBzZStwR2dScHhtWjQrWjg5aTlwTzN4eGhnNVJoKy80YlVDakVwaDYwT1AxL0dXWnJXb3JpN2FaV3VRaStMWkp3WXAwYk5NZWZaaHd4NDk5aW42RkpjQUs0RG1BR1RJaUZXSnhEVHp3bEhmemZ6YXZRWWQ0eVlNeURTWVBDTE5tSkN6dUZGYnBvNUV1aWlRWkptUWxySXprRXhCR21LcDJMVGppa2lQc0tmUHZGMkpkRDR2MUUvczJlMjZzeGdDcnVDQjZNeVpMYnNJUDJUZDl1bk03cnNzdFAySDZGQmdVbE9CNjBDL3pZNHEzUXkwcHJuY0FTN0paTTgxMnlZZEpaTDQ0Z0lETnU0NjJZUmFUenk1SEtxN0xqeGpGT2NieGFYWnBCMHJiWmJVUFRPYi83cXhrZlRQT2daL2RLS1JnR3o3YmZJc29RMER4djN6OTgzTE40WW92b2FibU5aMm5qT0tIblo5c1JkVEdqSnF4SU9ZTWlkbkp3UlpEcGtUMjJwcGtkSVVOWEZTQmhYS0hHdUJoK2hsMytqNWJTcjJYTU83U0IzVkthWDJCanJPTW0xNHErUnNPR0JIc3dZRk5yK2tZTHpxQU0wM25qQjk5R2pxamthRHhNZk9hTnJXNkU5Vk1sQmlsVFZ4Y1dSaUFKZXYvUCtUNGE0TmJZcUVza2RzUzRhNHJWS0xLUUpOQkpRRmJTcmZqdEJtTW9FVUtTdmpmQWxBbFlUalMwUmgxTkhVdE1XSFc0Rm4zMFlVMEk0STlBUFU5cnd0dU4rYmVubFNjdGlFVFJZbTRnNGo3dDRBSkpHb2Nlb2tPUmdRTTh6MGZIOU5MTGFTUVJFOFdjQzRGZmthc0NiWmhYNms0c1NiR1hOTkxkSXZtUUhPQkdvR1Y0dGdOSzBzOTN4ZkF2cmk3ZW1NQWhhVWdjR0l5eWZmZVhTcGJIZzkvZDhtOTV1OC90K1R1Ny90KzdhNFR4L3NvL2U1TlB3enNwdktSck5UajF6cC9rL2Ivelgyb0UvLy8yU1dlK05xdmdtUmRVMGFLandSSXYxNnBFNUZVZW56YjNvNzVBamdIRU9rSUY5K0dYSTlmRU5ZS0g5Y1JrUHlxUTFHaFBYUytMTEdubVgyZUc1OWs1VFp1eXJGWE05RG1UN0tsNExtbVJ6WVlMaTVSMmZEa3NLSWJmQzVya3hnQURiNlIydVRmZW8xL0phSlA0WjJ0UWJ2NzVpYnVHOXZRYStvTStYYXVpS2FIWnM5MXJJeVFXK3JCbUlvZ3Y0WUV6aDMxOWZkdDZlZ3I4NjVkV1Y1NjRySitKU0srRzdpVStJZWJqL2VMeGZJOWhGWE92RXhjVmROQzk1U3h4MHA5SS9hVXoyYVZZeFh2YXE1YTlqaW03Mm1TY2JzQXoyTGEwT09icjB2Q1E5WUhkaEFwTGxYYS9XTXVvdytjLytxVnYwRHlxTXBYTEptZkVMWDhFYURidTF4ditFV3RKQnZvb1QwYStrVzJPbG00MlkzQWtSbURRWVg2UHJqWld2OTJwSmtVQk5pWDZnbzJkTGhlOFlqRVFPMXd5cWN2L1AyajJ1aTVIMlB5eXRPZDNKT0FNN3UxRTIyL0ZxbmZVUnJkdmIwNGk3b1g0TkRyeWZKTFJvdURJN2FtcnZWcTl3KzdhcDAxNGpGRnhxeE4vZXFWN3I4MmFtYWM3MTI1VUN3dVVkWDYraWxBaWxrdnNXdUdBaFZxbzJPK1ZPSytkV0NmUWNaN1NxQytPcTkvcnJNUElNenVNU2E3S0cyRmpOZ2lMY2szLytvNVZ0RE4xRnhEalJwc2l4TTNqWnd5d1NrQ3NJcnhCR2xtZXhLT3V5WFNxd1gxSXdXaktuVWFOU3J4djdtenFOdVRsVVVWWnEwM2NsYSt3L0xkQk82Vzg1c1VidElLSVlWS0w2SDdIaFdVck9yNENGcVpQRHhtKy9XaDVSUEhxWDRMUk55SWdqUEYwZVVsRElUdEhPZXFyYnVuL1ZUaWZVS3dXaWhtSXBBbzE0Ti9wL2dTcXpnN2x1ajByN1dLS042T0NQeGw0WExCMUJid0tFR3ZZd3F5elViTzduTnF2ckhtN3RvZnFCTTBkTG5kcXV2ZEVMQjhtQjVuMXpQV09qYTVKQXFTRVFyWGRDSDNQRGV3bjJoK3dvSmEvV1N3c1loSzlNaldzbDA2N290M0FGRHNsWG44N2RTaGlSbnZ2bWE2Qk92OG5RT21IVVFUUnd2WFc5L0Q2clFjUzAyWGozM0RiSS92eitmWElidVNwVnZWcXZIMVhmTnZYdXVtaGczVm15K3JRaHlqVjl5WG5SYTJiMmxMZGEvakg4YmJhVXQ3TjZhNFBpbFRaYzNtYmxqSmJveXpvdmNvdTh1ei91UElORHo4ODRST2o2d1cyMTB0eU8wb3JGVW9QWFhOUWJrOVpKWEdWa3JvRzZaTXk5WFVQTGEwejZyU2dxbGdYS2xiVkJicTQwcWNYOTMvdDBQY1p2c2tWSmx0TTFPeWJodktreXRLT1lNL3VWMHNWZ1RVZUlCRldGZzJ1VU8wRGZ6RjliV0JYdGpEanZTSUhsVjI4MmtuQmxML2IvOU5qcTR3TStNQmd0bkVSZUQ1bHpXWURTMkdxMHYvMENibTZSYTEzd0g1QS9ya3R5ZkxlM1kyczhxOXJ4Yi9LdXJHSWptSEhwUS9zYTlGKzNHMWpSbE5tWW9RdzVYMDhYMmZ2clRQbUtTWkR4ZGpNdlVwTEpIcERrZEJiY3h3UlQ2QnhHQ0JzUXgxS3J0U1Rtc2VBQ1pCeDJ3a1YzamZMVFkwSUo2Z2tpN0tlUWNYdWdMK3ViUWo1WFBidERvekJtem9jdFJhK3pOMmt5UXV3WWJLWDNuY29PMFdsa1FzSS9PQ1hyY2ZiN1BHSEpmeWY0VFB2OE9WaTJ0c0p5Yll6Y2JNcmdyQk9YR0pQdS9PaG1CRUpVZmpnbmlHQzZKN3dnQ3VHQzh4eVZSRk5rVW5kNUFWcUgzTEhBeTgxd2swdVJ5SldHZGI4ajcySUMwbGM3TmIyc2dmTTI2ZVVPMllmYncrMW1LU21YMEpsUFdaR3cxVVliNkRHa3laU2xEZXNOdDFiVVhsMFo1bzZFZmU1MEFXbXhzUWQxQnBNTVlkQTR2OVB1RFF3SFhpSDk2Q2I1c01lZlNCb01oWjhTYU0vcS85QzZiTEM1TkdZMHBLZ2haTy8zMnFUMFZVQVlxSFdER3FWYUpoOFRWSDk3TjBSbmlrYXBkeWwybkJKSVpWQnFqdzFDcmpnTGE2V0F6Wm5CM2VZRWhvc3JMNUFZSVoyYTJjeHJuYkwvV1JpVVJmZGkwNE14czI2VHNHMU9sWXYvUEg0Y0FoVG9nSittYXVFSWxpZTBJQXJKTEpORG1iSE1vRTBxci82aUxuQ1NqMTRkOE5INXFhVlc5UVJBdElvdTB5N05rdHV4RVhPTFVHYzZrMjJEOS9UYzJzL2pmblJBaEpJU2hqQXUrNlcyMTREMVFNZkVCZThuZ0krUWtlY09tTkgvNytTbWRNUEdkYmlFMHlhdGd2N052R3I4S0JiQ3lJQWwwMmxvY2RFZTYydXZjYTd1czJkY3V5Zks1eUNMMXN2SmVkNjJ6THJ3UzhuUjduZGloMlJXTkJ2aFN0N29wVzRzM0tHdjlKNEk0bjhmU0tDUHVYcU5BZWFOUlVDUXZObWFWVEJCdU54amhObmN3aXhvTUdkUnpybTh6R3VEMnpTbnpaMFlidWpKV2t5bHJNL1RZZDlZZEVveW1qTjNZYmIzclZyYndYQnpwb1BXSnZCM1VlYzg3MTUrNXNiWENLWk5wa0NLNDJEZmtjNDJFd3E3UlJYNmZQbzI1b3VmNWlkR1dldDg4cDJ0a1dxS3doRmdKV0hNdFJyTTVaNXkxLzY3VDNDUlI2MXN4WDR6VXU2TXBGRGRucklidVdnZlZ6YW5mMkZ0Sktjc24vNnJNclNuS2FFemEwK2MrSENwbStyei9lY2dUUk4rLy9iVldZd3AzaGFHYzNtOWRNanRRaHhOKzJDR0lvU3BKZkhzUXdnWGp2YVJsUDN0SENBSzArZE84MnBoUUdqZVljOVo5dU80dW5hdzBVK3V3cE5TT3FMUk5iZFgwTkR1c21BOE9WVDBua0RWOUpWQUY0QUZSbk04dE5qVGh0U0ZaVG05QTJsMkJOS2EzNXFuMkV5ZElUMkowTG83N29UblFremFkLzJzeEVVU0sveHBBcmJydWxCMWdKajM1ZlZHVzIwTVdhVlk5V3VSbTNWSXhyZWJmNHRwKzVaS094NXNoUFZObkpJRXVQOGNXOFlzY1NoM3BhcEpTOXJSODhQRE9MTEVHT2pjWEViKzVhLytsWnNsL2hHOU9ndnVidkNkL2NYMmRUaFZLS0EyVjZncjVKeHdJOFp4QUNGb3A5V3V1YXZOdDJsUXphYUxxRkdxdkdoVFNna3VSOG9iK3NCWU9lL1Zkb3U5RkZNOTU2cmhROE1PWWVGTkFHWGlHZkdaVU9icE1tT1ZMdmlUNS9tTTRDYmZUclM0OGp0aTlmL25KQ2RjeDZTMnpOUG5KL0x4SHROanJxYXRmS0RLUzVNMXZaMUN2ZmY3NjUyU0lWcCtlUWJvQXZxQU1HVjZQcjUzNGRQYU5wczlVM2ljOVR4S1Z0bis4U0FNekh0bFl2dnpocnkzdkY3NVhZSG5vcTJYTEh2N0svRzdCZTRVMWc0Zi9XVlcvUmlIeEM3MC96NkNPZnY3YTV6cmgvcHovSkwxSzh3YXJhT2J0MWxmNjVBOUNjMStaSTMrVTd3R21WWVRKb2g2U2tqMWcxNWNjMlM1NWQ4L0x3dUxZUE9BZUVJQUlCTTRnTDdvV3EyTC95VGNPclBMZTVZTFU4TTdPN3RzK2ZCc21Wdko5Y05WVUVYbnE2Q25TZ0RzckVQV1JSc0RaTUpzbisrYUZXNktZaHJHVTUyb1M1UmdhNXZtVkZRdVZDOHNoZVlWWkZqQVoxRnZqOVFuSEg5TFhlS3krOWljVEV5eTZpNVd6ZWh1aCsrcTcxeHg3RmxIdFhNU0VKNlpoaGVTUTVENXovVVVWaTVTTFhJbGR1T3kreEVmTUM1RDBzUXpwcmlYVTlSYW4vVE9KcWtFdFdIZTJ6S055ZWlKKzVvN2kwVlZZMjZ6cFh3Q2x4Y2ZTWkQ5Qzc1MS9wY3lZTXZDMTR6TEpWZXhVUmgvWDRuVnFVcFVJWExkcnNBdXBWdFZ0ZnV3WnI5Z0xNUElpUk1zVmpxOWdhSnpHclZKQ1NjZW13WWpmUHhBQm5sVHFRRlFkakk1SE5vZTFDNU8wMVpLaWdZV0JMWUJkTE5Zay9aZGV4Um9WNFNCMmZMdzFjMFhDSXZtenEwcXJ5RktCU2ppVGtmb1ladlRvN3dzckFNSFpmelJBNTlZakJaVzZQMTArdnNwZWorRWVCWnJaOHVlZDA4NTZ5c0M1QkRmdysxY3VFb3BvcmFaVWw5WVZHbkxzalJCWkV4UE5KZ0tCMXNabUhsNlRhQXpZOEcxZUdXRk5HNktDYytQMUlvMHRxOUxIS1lYVWZady9mOFdSTk43M0JmaDVra2dlcWY4WldTMll2a3MzRWo3cGZxaTcxbTVvSk1nR0k2Vk4xT0Y2TW8yL3I0bHVibEFUUnQ2cEJrQk45NW50WFl6SDJUL1B6TVYrWWVpNTg1eHVUVDFZUy84MlY3ZW5OVlpyYTNWUzZPR0JnQyt5c0lWK1kzZUtYcjNBRS9BTzBzNzVsOVlZMHBTTEdxbFVCa2lvRFIveFZEcXQ1Ny9BM2FrKzFUZHVMdUc5YVdmU0F4cVhiNDdSbGpXcThZQ2JEQW0zWUJBR082K0hPUXA1bUhNZHBqRVl1MU40RDZOWEJQZ0l0b2xoQStvbWhjbW5SZEJSTndzZ211VW1mKzh5RkkySUVIbFliRzFaTVF6QjBMRGtOd0hrRTdUVzRmenUzQzB4aHpWM2IybDYxWkFuNkJtU0tlRmFLU01JR0tsa2VBOXg2NHE5K1hOZHZuNW9tWTJXcnd6MTlkY3kvdG1NZnc2MDNPS1Vyd2oxenE1VjkzQWs4NnlaUnFQRmxyUlljcUk1cFBHOGp6M1RiRFRWV0MydHYrOHFGcXNJSTdHaFp5cysrVDFMWFRQM3k0L3p5TGNhYlQ3TjdkQUUzZFR0aWJqTW96eWtWb0tlQUdZMnhxRzZzMktJZTdSSmFnM2tUT29NWmNEOGJuVkVKcVlGNFZySGE2TDdpVEpwa2JNWGMwVHFPR3pLblZHYURVMkkxb1dwelV3ZjVBTlZZTStnbXlFMDdnUk1NaDBXSXNaeVVVbWhodW5YV1pNbTVmKy9IYnZzMDhtREtyT3JjYTVhc0c1aURqN2FKYlk0MFhuT3NFWmNVcXdiRHYvbGZyRGJVZFdweVhxSGF0Y3hiWFRUVGdiZUo3OGVYRjVuM3p5TFpQRnZyT0RnbmhPQnAvdkhUYVdMV2hINlRkbjgzZlI3c3RFeS9YNXY3c3JRSzFYWHZGMk5hWVBSTnFScURCaTQwZi9uNnhRbCtMNVE3WVorNDNwa0VOOVR6QUNZbW9HdWNUeFNpT2N0WW9BM0poQlp5S1hWd2p1Y3ZCbzVHSFJxMWNpS09ML3N1Z1Q0Q0dobStndzdLOEVLeHp2U3ZQNHhCOVlKbVdVN0p5OCtJcFU2REVBMS82NFJQYzBJTlQ2M1N5TVpHd1B2MzhlUHM2NEM3RmNMYXh1MHFjNnE2dDBRNlZFQ2NFTEpjS1ZjMmd1Q0lJMnFsWjkrdS9uWjF3Y2xHQ05va3dESHhyNGVScVNIdlh6dTFPeWZwSC8vejc5aEJzeXpUMjk5YlZVNGRobDFpWWNSNUVtdkJOTkVsTkkxQWxvcTF6RVVKbEY2Uk5MTjB3RDg4TGZ2N3AwK0NiNE9iSmVxMlhOV3cxdTlvQW9OSXAvbUpYd3BLL3ptaDkzNVBnUVBaUmFOUk5KTlBwVWZ2T2ZlT05sZGhGQW8yZ3FBVzhWQ1FkbFdGMjczRFpENmFaTnlWbTZPN0ZsZkRhcnlpcnZFOG1mUTN5NUxwSGZSSEFDNGVKZEU4dXZNclRYYUdxWkRKT3JVODJzYUZ3akVYZkRwanpnbFU0Zy9kUU00SjZhMDRqei8xVUxjaitUZi9ORlRpTldYeXV2OUhVQXczQXZlQlNNSC9DRHV5elNIUjlNTGZRK0JXOHNFUXRFMkVGZ21GQXFKcGRYZmgvU3k4M1dPZXllNUxGaUhnS0VwSjNobC83V0JiNEYxcmw1T1d3WElQaktaQngxeG9YQzE4OXdkdngvaXp1RmRYanFDUEkxUFZGOENPSzk2ajRkTWRqa0JkS3JpdFNIVTduZ0ozZC8zZjd6L0oxazhFelQzenhTTkJhcGgrYjZ5MVRXMHJGcU1Lb2RjKzFTMUZIMHlMcURDQXZEcHZMZy9iVUVxdGZGZnA2cHhwdGxMK0tDRFRzQjExeDJKbDRvNEwxeXZLY205VXVNVllNY3Y2WlFja3U5V091dU9za3VyYis0Y1BwVlBudC8xNFpzYlNDZE9CZVVZNWdPM0FVZTYwU0x2dytCU3NhcGF5cmVFSjBwc1pmLzNXaE9mRkh6bzdvTit6enp2LzNsOGpNVnByc3k4d0VsV1pTcU82SVJNZHVYa1Q0OUlwV29LcUM2K3EwR3ZjUWsxSHNhbGtUd3hkc043NnZoSHJJdkFQMllSWFpMaU5MOHJIc1hmTEpsUzNNV3d0ekhjdkRjZzMrZm1ibTlUOXY1YkgzOWMzRGorekxqbDJmRVMxNlZ1dkx1b29KRFgwOFBqOUN6bWNXL3U1ZkI2dTR0Y2h4dXhSdlJ6eXhWdDhiSm9WYk91bVJVdFl4cnh4bkRNdzJFenZOeDM1M1RueU85NmREM3NXLzhsKzV6V2JKM3NLVjM4MlhMeXl3M0tXM1JmNFBvdlBrMjNNcVJjb3Z0eXZYeW41aU5jKzlHbmk4REN5V3NDOWlrakhOVGVTek1mZkZOZjdjd2NDdkVlZk5aTGU4Z2xobUZHNFBpYjRqdE5DUkVLdWJuekpWNDF1bW1ELzhGTVd6K0Z2dEdCZDNDMHB2SmQwNGN6UlRXYSs1aHhFWmRBOHhmRmM1cmpJdXhkQSt4NHo3TGN5OC8yQ0E2cERnR0g4RVBsbnByRHFzT3p2SWNiOFVaRlhxNW1OMXdkNVNMam40K2JQeHN2Y2FxSU5VUlJvL3pXMlRhOXBYamR2OWYzRmt1TldLem96d3FncXJ4U1VYYW1lUWFYcFN5TVlXVzZsN0JZb1pMRm5lSDdyMHdobTZvQ0ttN01pR0ZHYWZINmYyN3NLV2FYcGVVbDNSajFBb1dWTkdPR0Z3eFlkMGxKUUxJbi9ycXh0VE9tU3NKZDNCNTFoQm16cFJvUDJWYklWaFI5bXJSTFY5aFgzTnRvVFRGakVUV25CK25DazdsT1UydnM5U0xYWmVJaWtUcWZhSmFldndKRnhibERxdmQzdnI5RGRXNy8rNkpGQVByL3YwN3IyUTZqUWZUUWU2THpXUFBCamcrdWQvNFFoSHdkTnZVZmRLUHN0bXhadGlxcnk3S3lnYThZeHlzb2JWOUdxdHRqNEN0Z3RiT0d2aXZycU03b002eU9zbHQ1WlpoL2tzcXFod2ZBQnJVOUpFdHIzS2JGZlJGUDRjMlNtNFA1N2ZTdXFXVlI3Ti9YUlM1dWNHbnByeDVUdlFDZS84VW9SZVRxSE1qTEQ4WXIvdWFHNUhzbnV4NlJBWTkyZWJ4UGVMM1R6UktKV2U3M0R2czlIWThDd080T3Izdlk2Mm1ucGVicGJzOGRtczhVc1hFWW5vQ2NjZ1ZFajhQUVY1Q3JCS3JVTElJS2x1NDZlMmNCeUlPVzZ5WmJDclpoL1Q5MVE3NjZRZFRxY0pXYk9pbzZYMEorMUY5ZDNJR29PM1FrQjFVaElyTE50SlQxL2RmLzZ0ZDlQL245MDYrWEZja3BCd1BtT29UTzZIVStYR2NJakh3T3lMUkRIcVduRUMwdyt1ZkoxSktnZ3BFd2NqVVJqdUVhZmRiMHlmOUxJbG9VWE1DRHdMOFZMbkZZQzhUVTdxVlYraXJScnkveFdTK05MZDAxUnlCQ1VUR3Y5MmI1WFYxSlpQNS9OVHZnSFVkMVI3ZkQyNFdmRGlDcE0yM20xM054Sm1LeDl1a3JybGhGN3pDNlpydDgrMXJmdGUyNFZlNGk5SGEwYU5VSit4WExCL1dmWmZFcnlwY3RYN0hpSHo5bDVOTG1CSjdBVEhFOGZ2SXdkanZHZDMrQ1lBamFUa2tsMy96M3dCVmo4dk1tenZEQVZiYXNBZ0tHMU9mQWpJbUoyV0VQWnNGTTJJWmI1TGRzU0wrN0JNejV3cnZONlJxeFNGVEQvK1c3QWlEL1R2T0lXSnI5azh0NTVYaCsxYVgyVTZxbmx4TXpHMmFRY0x2ekdYYWZ0MG9PY0ZXdkVWMlpxUXJCdERVTzRETEt2RDhmSmlVdlArZnRoQWZraWdHUWlsTkFqdEJVWXFYNC82ZUZrcyt1QzBYSHpxZEtXMDd5TmtKVHpudTIrL1JHNkRIZ2VsYWJtM3o5YlVkNVh6cTQydGpaWTlwU1h4a3NkLzdtbHN0bUh2RytPNlhVZTJJQk16bFN6OFZ4VDhVRmtoMmVReUorM3RmL0cySkNsZUhzYnpQOTBCYlJuQ2F1OUFtdWM2WlBHQ1JYcEhQRGxOYzlTbVl6MVBLUW4xeWViaDJodk1wUXRmYkl3cnBxTkxURzFObGwyaHh2c0czcWFWOUxiYXc1K2RiR2F2UXBOMXNIT3l1MndKTGY1VksrVU9ucEhUMm9veHY0cU1vZFZXZ0pIN0JOZ1pIZU92dGZkL3N0S0lOcmNuVlN6TnhDdXBQUWtBUDM0eXNUblFObXQ3VmJaYSszVU5wWWdqNVpIakJza0tLMFFRdHR6eGRYWHB4OGRjT0RydEp2QjNZdFgzOUc2ZjFUWlkvYlZmWkUvb2lKN3NVRExsdDl0L0taRGMxNXIvZGtldU1iNHVDdVY0OVpFUXlrbjJSWU10bTlSUU4vbDNXR0FCWGtGTDZJb0hmOG42ZHZBa2hHTHloN2JlZ3ZoYzRVU0NvSWNQbmVxYWVYWHZnZ3dBZWR3dDJ3STY0NURYbksxMjFIaFlCeWpWSzA2Tks0LzQ4YUx2b1hVeTJ0NFNwZS9rVjJ6L1RZV3FxajNiQTJHakdzN1dqYm83SFlPbXJXb0NVU1BiTjJ1Q1ZSc1crRVNEWHJSdngrY2lTWkd0WDRmYjVSS3FVZDlubnRWQnArOUl4MFluRUpiVVVhS1dWTkhjWFVLOHkxblpSN2lvOURMUHlmUFN5WFRDVngxNzRucWxsNDlva2IzYXdJTEtodVBhTFdQWFhOdXp1OTJ1SEVPYUo0K2VqNXZhK05xRjVEeG1RMEtIdHl4am5qMDZwNUI5YTk0ZjNhcDZvL01WVWF2ZjB6V1BKQTdoSjhLWWVjNWVXVEF2aE02a1ZKOHNVemlJRE12S1hVYjVCK0pKVzV0OUpSbWZRb1RoK3RabjE0b29wMXRMR3RlR1o3VTlPMG1jNWx5ZFdiQXpZWGJkeDJwK3BPL0M4elNRVkdqTy9CM3RsRDdPODgzRmsyTnFWV0hwcHBXcG5FazFuL21wWm9WNmFKZEpIbU83TzlRVkpTdjBodGE3Q1U0SnR5Y2JndC9tbERyZjRVWjhFUGdLVWcvQ2NJL2dHREpmV043RWtlK3dTYjlUdVhOMWttM0NCZUM3STVudDRDb0RBbG1pNFExRE44UVhkdkFWZzQyMDd4OWZmQklyaW8vcnMvSzF4YVY2UnM5eHM3WHprb1NDM2pReW1Cb0FuYzBmTUdwQmhocHJQZXR2eDlycmRYc3ptZTRRS2dzSjhZUHIwYWFidW5xZ0F4TVFUUUR2K05QY3d4ajJPeU02ZHUvM2ZubWovR3YxMWtQUUlCZk5CY0N3S1R3M1VnUzV3RnJBQWRSeFZ3UmdXOHFRSXVoMXRIS2xPa3I5cll5MThmYW93aVcyc2c2N1lHTDFqSlpNSlV3b2NxNFR1VnlCMi83UUtLN1hRYm9QR3dCcUxXUUQ3V1FMN1hRSDZ6WVEwSUkzN282KzJnYUFINzEyM2QzN2MvUERkY0swSUFoL3ViRVhLM0NXd0hwMkV5UE95Ykg5clltZjBCMlBzaEFQTXNTSFptY2V2NEZzZnV4ZjM5eGYyelYvLzdENHNYa2JnWmh0bDhxd1lPcUlFSDFHQ2YrOEVmTDlOcU01K0d6VmYybjIvK01FZTBtVWV0WmNCZS9TSG9ja1ljY0o3NEJyeDZkUmdBb0QwNEIwNzBxY2hvellMa1dvYjY1YTV2OG1lV0ptb21BR3B3bVBJZlFCZ1c1TzhXYWpBSHZvMWR2L3lpNDhiN2Jmd1RQWjNzeEFHdi9hZW9ZUUFndmw5S0V3RHM2UjY0MGZ2MXdiSHhTOUgrVDk4OXJTck5icTNuTkwxZkhsd0ErRVJET0lBZmgxemt3UlZIV2d1UFRtRWZXSy8vM1h0TjcwY2V6cVhiUkgvL3M2RDNiMytRc3p6c2xOSms3N2Q5R3hsc1RDSHB4ekk4dSsvVDc3ODRRdFc4c29IM1ErakpCSENSOGtyNFJ5QStmNnVETXo0TWNqWVA5N1NodjlIQ25wOEtmM2lHVWd2YmcvZER1TkR4U2FJQUtNVC8yMWNaOEtEOERMM3h1VGhGY1cyaTRwOVY3aFhMVzBCVkgxeUhsNHQ3UEwyL2xRdW91emhYNzRyd2h2MGFrYktucDg5N1BOTzdGSHpqb2l1V2xGTmVzK1Avc0JiUC8yS25IZHo4dW12clBaU3hGYkxpd1Z4eURVb3hwUmszbCsvOHpNZVBoNVIxR0FjQTdzclYrNC9wQW1KWDI1VnNpNGd2QXdxeFdEVGFFRkp1eURRMkVjbldYcWxLb3BLcHVhblJBRFRBaFpPMDdYWmJLamtibG5XcDdSM1lhQU5UUGI0cEdUZHp1VU9xZFkxV2llOG1EM2pvY1QwNlV5d1FBVWxBMjBZQm9LSmxYUkFKRE1sTmtNWjd5U290WkVRalFJL0VVY2xXbGRXT1hWUm1DbGVPZ3JZV1ZJMUJMN21iKzcyZTBkTnJzTDBDNGRaczNvRUtoYXh1TnNuQkViRnhNa1NFUisrWmpMWkhZaEpWVjNteG95VlJhVVQwcWpvdnJlZ2NWZFJzWGprbWFGRnRFZUpsamVRRlZRcG1VMDRRY2JDSGpBejFpVUlhd3ZsT1hrTzZMUjZrWGVvbVhNb2paUk5WM2ZxcXgzN0hoN2ZVZWdEVkMxK1pxRXdscTY2M3pjeTkzcTU3NCtxdUFyMHR0QlVxZitKdGpGaXBjMEJhK3lsNWE4Y203WXpOcktOQStJUUZPM3BmMWZyVmJlMURTcGhOV1J0b0hlSk5oZnNYUmVleHF2c0ZxU2ZVNzU2RTFpeXJzbkJaV3hwWWFHWW1JUkt2V1M3ejdPZy83aTRnZG00SkRhUmNtaGpySzFNNk4vUmFjbU9KaEdobDlZMDRIS3hralovY0d2S0NuQXJ0ZHV3SWRLMUlSaWhXdHN2b2I1SFlXVmFoQ0w1N2laWlM5U1VxK0RUSDg5MXVBSWp5bFZlbk5hMXRTaUdiSFNuMnpYbG5wOHVxZDducW1QbW5Dd1hteDIxWDh1UEh4emdmRUl0RXk1OXR0OSt1djdMWGRsUG95NWw2NzFsNE1BSjFvNVdvS0lGMkYrNlhaMVR0NjJMTjVndXhXV1dsRXRNa3hQZmR2TnhGcllnUjEyMVJsMnZhc29EOGVnNjNzRjR0UTdsUWVHeGJQZUxNQ1RpcXIxd0RMK3ZTSmZWMis2TVhmVzljRU1QSzBMLzg3a0VpOFkycmI5VkR0K1A5R3lMdjVjQldKMW91N2NLZEV4V2VyOGpQNHd2RFNzK3o2QnVQYUdLT0wvQ21saVNhNGJ5aUx1ZyttUkJSUmZCQU43R1NaMDJDNFhIOGVwZFdyL0NCOGdiVVpVcGVTczV4TlFESU9ZVkExRW1JZWlLWFdLWlJBMVZHVENUeG9tT29nT2pRRGNmWCt6MXJsT3loblV3dEVQWmlRRFNsU1EwWEhPVjVzaTllNlozcTY5Qm50QzIrNnZQb1B2Qys0KzBWYlR0NC8xLzh3WEl4RzQ2bUU0d24wSGkzL1hBUXBpTGdBRlpnMExqNUtIKzFYQnJIUW5waFRaMHYrM09qSXArNmIwZ3M2dW9TRTdxVndqdTN0ZWg5SjlCT1hjL0N3RHkvL2FVbUZxbEZMTW1INWxVMVI5aFJVdzRTYUkzMHFGSFdBbm1tU2xxbythdHVHNFhzc1MxNXpmMVNzeWw1YlozYjRwRlg4N2F5QWNkbWNaK3pvZWh6em9YRWRhUVNaa29vTHZtVjRMbXp1eDZ2RXdXN1JWQ0V0V3QzZEFVSzNmRmlaMWFkaTZWT1FYY2g2bXpHenoyaHpqZk1LUXFUamlqMnUyYXBqaVRQcmFSR0o3N2FOalRwY2Q2Z1BKQldBUDlYdGFwY1dQOXgrakw4amRQUHphL3dxaU51ZkRBdzYzYlhLa2xybXNBZStRVThKZnlmQTJ2cUYrUlAzWW4xM2VoaDUrdTVIcmJNUklZdzlQTHRvWDh3T1lHMWtYZUM0ZWE5WjAyTTNhTWF1bno5Y255YXZYcjdMRVFQSHErcXBoaUpIeTBKZ0pnQXlzem9tejNUbGxZQkNkYkl2Uk9jVWVMZ05aTHRMT3BGcHJYMDRXS09nVjVBbGl3OWV4MmJNMndmblkrbk52TVYvaXZ1L2hPenhGSFZibEpEV2FOSjZTUmx1Vkc5c1ZxMHhyVkVYVGZVS0J1TXE2Z1BRWGRVczFJeVZ0U3dKV3h2aGQraW5YUTlJQzVLaHhITE10NGZuSm9zdXRZTXRxWEFMQnZuUUZRQm1IT1dkbFZyK0RUUHhsSWdkMkdNcThsaFA0OFJEWE91RVFNWmk4OStZaWNTa3RnSklMbm1MaDRPaDBPMGVNcXpkbzlieW9md21PMzd1aFBySklkY0w3MnNFNXg4enFpb1ZZbWt4VkZGYTUvYmxhbzNBS2doL2tFT0FtUHV4NWJETk9RcTFiSUt3VW1KaGlZSEMzQ2NtWkx2a1dGVmtRNVplam5FOWNCL3NDSWk0bFUwa1k2ZXRSVU5hWHVvUUx5dEowTm95Mm9NQ2dyTGlKQ2RRUjNEQk9mK3l4VUNqdkxmUUZiRWVhL1RsNzJTdU5PdXBsVCtuQnRhV2dybHl6TmNST3hzYlgvVEZkSnkvMmd4UGEzb1UyR3BZYkNoTDJ2NUgyYXlJTldOUUwvem1LellxVUNzclYyYXNyZVhSTDcvY2w0YVQ2N1NNVEF4RWZKTHdoT2hOaFhPSnUvcDB3Ti92Q1ZNcUN6eE9qZk41ZUxSTE9DS0ljK01yMXhlNmZBd2JGc1c0TDRjMjdtK2F0b0FkQVRicGwvTjNSSmdiQjBuZk0yNkxmdUtrUFJzRFNFQTBWTVRqZERYWTdKNGY3OCtZRi9QNCtzaFYraGNsWlRHZnlQVG05MHVWS1BSY0JodXRLNUNLV1llOXBnYThjdUNxUmpoY01vNXhOaDRRY1k2SlIzYWs1WTQxbTVTUkI0V0ZGVXRzaXFBVWpVU01CWjY3UGNNSWRCTWEyaWNGSjdVN2oxV3NmMU9heUdjcXpFekMzaUFXVWE1Q2pXYWMzaXYwN0NTSlJJbUdGUGJpZDNPcjVXQ3dMZjIrNEoyTHNiVTJVRmhWU3dUckZxRHpJYzRDbUJOakpEV2xWYlRhRFFhNG1Za1hwZHNreUozZFRVZVQxeEd0bFRJSnVGTU9HbmhPbEhLa2hORUdoSno5QmwrakFsRE1Db0RRbXFaekJXeVVWU0lQSFZjNjJRRFpnOVBITndGWlRERWtJa2xtZ1FpWUxCUWtENEhZOVZvckt0YUFvU0xLQUZwTmNaVVNobXdJTzJzbFJXVE5qV21WbEI4ZjRSUnZ1RmV4d29xUTFaa0JhdmpodUppM2dvZHlmREpLd0x6QUZEdm9oYVdoRFJpSjkyalRvd245MzZ0dXdUaTNKbFlsTXR3T0N5dDE1dkYxYUJsQW1aQTgyb3RPZElHQ3gwV1FKb094Ni8zWTFuWm9mZm5sRGxvM2IvSDlyMFNJRExtd1lPdUpjOWRhZjJ0V1JLQUxhM0RWOXBCR0x0bWJ2YTNwQzRhSjYwUjZYcWJHYTdSKy9lVC9kNVFxbitvOG9kWTlXQytwdXlWMDFoaUNId2NvMjRVcFZGMUhSMFNtdjE0SWNxVXNOQmpwWXJhWG9wQkY1SmFoNmNxT2svSmFGWG1wOGxrMEphTWdoQ2tGQnZRRFB6ckZwUXVBT0lzYVkydjkyWXdwMTBnTkZFcGNyZGg3dGFlTUxSdFRNa3hHeVV4U1ZWZ0ZTbVhaYU5Qc3hzWStJWnA4SkdreHBPYkFGOU5kMGFXMFBQd25ycjhIakNiQkN0N3BjcmROeStIMjhtNlErcFhqNDgrVU1IS0MyRk5qMlEzZWYrM2FScUh1UkQrbWIvNVNlZnc5NE1hTUxDZkdWWlpDU2Y2UzQrSmUvUGhCK1NtSzFKZk9EVTZFMVpVcTVNdDZ2V2M5emFPVTlWbGtndnE1SXpoZVhxTGhZM3A5ZE1QNzVvLy9jWGhMR2VmSGV6YUs4OHpKVjFmOC81NWk2cjY5ZVFmWlhEMzFsNzRwT2JqZXJQWmZSazNjNGZ4L0xVeGVZZ3RiTTd1dy8xcW9lOXpiWW5wK1R5TUI3ZFcwOS9CZHl6S2JxdGVLSGtzR2x5UVVGYkt4ZDdOTmR4ZEVrWkFBQkE4aWxNUEd6dlJTZ0dCRUR6WU1Ybm5VRnpSVEhVU2dOWjdWVVQ2a2VBZTI1cHFmOVFYMWY4NHNXRGlJOVBIRWJVNFpXdExZTFBFVDZWMFFObTllbDlpMExROUhlOTRRdkNsdW5JRUdpUmNSbXBQbVpRcERRbm1GNmtoQUFQeHZ4OS8zMy8vOThMSC8xdFNOS0lmQU1CYSt3OFo1QUY4UEcvOXM2SW4rZTVzRGdHZ1lBQUFFTUMvSDhnanQ2dnIvMGE5VTc3WFgwQm9LQlZDZW83ZzNZU050NnZWUTZXZDRuL3dsZXE5UWxaTlptMUl6eS8yeXVjTC9Bb0lSeTREcGZ1TVEzMndKTXJQNkNMUFVEZmg2dWVCbGxyaFJmQWI4SU41VzVlU1ZjYXBPK3JhUGkreGJ6cmZYYXpvN09kOC83TFkxUTZnLzU2bDBwZVpCQXFvL3I0dDRGOHkzK2hpQ0dlNG5rQWowK1hXVWdrdS9teWNmVjJ2eEUwWkR2cTdUK2FVdGhPVXpWZjlPSkFWV0FtQXJ5NXZ3RDRuelNPZmVZMmRwVXR0MithQWZaNnFkME5sTHNjNCs0azRKV0Z2ZjlRVHF2dEdMZVJqWmhPQzl4WjUxY0wzc0lEOVE1VWpaZHV4MndXcWtLcHRGR1VJTFpsSEx3clpJVDdGVUpjaXBCRDhmS0U5dSs4LzRpMFg4dHZidk9ZRTNCQ1BqYkhsSGp0bUl0a3h2aXNpMm9FdWZKeTBJUVlOekQyNm84K0swYkZzbDR2WS91SUpRSFlvZU44K1dRUTZkd0pQUzFpSndrK3oyRlMycHllNnJjMHRiVDNCODFMZmgyUzdoaGZVbXJGeUxxMEVvbWlJYjUzK1lLVmU3NUxNZEF3RGtKc0NjLzBTQ3NUc3hVK1lXbS9LZXVmSytXamNzRjdaWkZ6YmhURWozcG41eXhVdEQ1VldEc3N1ZUN0aWMvQzJNZGZJNTd6STlyMlFIdU5TZkwyOEp5bHo1ZGs3RW5JUlAwdnRYd3h2TzJEck12YXJ4R0pFcTVYWExMK0xGOVJ4d2VsSWRoTngwYlRIdEpvUlBSS1VUaW55bFpJRTRFOVhuYVVUUURnb3hCMk1BcEFuU2tOSzVKN3U0U3ZCdG5PL3NtZS8zdDAwQXViSi9NSGZSK2s4WkVjRnlnTUFCTkNRZnJRMkZJd0R0VHNCK2g4Y2c4TUJDSXpEb1NZSEFKYkJ0d2JFM1hzYzY5Mi9OT0RVcmpZbEdrZzdGOUpBa1U3WElLQllXNE1EM3A3ZHo5SE1NcnNDQXJBcjcwSStmb2FjM1ZlUThMWDVSSUoyUmozTUd0VnJZQ1ZHMHRBNktOV3dvZHJlT3BWYS9ualhVNnlIV0p4WnV5Yko2dTZnVTRkNHcxN2F6RUpNb1Y4cjR3RCt5a3Jrb0VaOTFGWnE1SEx4OWlYb0F3OCtIREFJTTJwcVdYRHd6b2ZYUE53YnNnMmZSKzlrNnlLRmdMc0hKa1g4UXBmbWpWY2RZbUZTZ054ZXIyT1pZZ29FRFpLQjlYMW1zbVJLRW5scklEUU5RUGxBVURZdWxTZkdXTWN4ZUllZmVxTUk2dkJDMWF4dzQ5NXZJYmZ3QldId3hWVXZVSXlXanRUd1cxVGcrY1pURGIxOWphcnArZlZWRWdwNWZYN3M0MEs4TmpucXJqbjB0WTIxRmRNYjdZb3BpVTF4VldLVlB5YXh5S2NrNWxSTmlHMkViUnZnVWlrb1RnOTFTWFNnYkJKY2JTMHdhNlFCcGlScW1VMUlwYW9rS2k1V01aR05pcnBHU3VHVVJDWlFwVFdxaEsrS2VhcUlxd281OFFLYVA1WGgwZEZXa2FseGNGdlkvUFczUXJyNnc5ZGMxM2FsSm0yN3JpdnQybHdWaFY1RklscGtwYW9CRVZaNVlWYXhFRlhhQk5hL3RwamZ4ZFplenV0dytEYytJUC9KLzR5eTROemdyZ2JJd1gwRUdiVkNaYVd3bHJTU2NqNk8vRTArSUJGaDBkMGkrNDV2MzdkbU5aWEs5VFh3R3Y4TWZQYmV0Q3g2WEwrQXBDbERXL0hqTmlLKzd2cnExU3M0MjEyOGJiRy9NdmlNYzVHbzVKYzNLbWRkWjI4bzdFVTdWckNHQlBaNE50TDg5L3RsWEYwYklZbU5Jd0JCQVE9PSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlF1aWNrc2FuZDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBREkwQUJBQUFBQUFkWEFBQURIVEFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR2x3Ym5GWWNoekFHWUQ5VFZFRlVIQUNGQUJFSUNvR3FJSUdHVmd1RUtBQUJOZ0lrQTRoTUJDQUZoVUlISUF3SEcycGdSUWRpMkRnQWFQQVpGa1d3Y1FBRm0rOFRSZGttblVqMi95bEJtekdoZGVoYlpTRjBSN3VvN2hrWkNaR1Q2aG5wb2JaVFd4eTZjT0RoMEVnLzlvMEZSK0hBOHMzSjFiM3R3NTlYb3pnY0NOd2pabXR0d0NWeFg0aExvcEVrVGFSWHQwWklZMkl0NGpmOTJYc0N2TVJMVXdqMlFvMElraGN4S2tZcTVpUXRjZm5pbXJwWjBqcUh0R25nSmJsL3REcXppaXFkcXdBem9RMFRMeDg2TXpwWDV0STVUL3p2OTY5NzVyNEFvb3NSQkRKZkJibWtXZ3NJdG9xTmJHMlhKOUNrZW9iSGJmM3pCQm1vR0ExSTVhZ3hHTzFHVGFvTkVGVE02N0l1b245Rlh2emYraXVpd1FFSy9XL2FobWlieitWZEViVlZSNFlOK1BkL2pjekNUTzdMbndXZ0lxRmw1UUFsMjFZQjJwNUtKRmxMNkpmN1plQnpmdTRjRkozcStBT0M4UVY2NnpvYld3WWhXd0QvVjVzbXZFWG96RW1FVFd2dEtHMlRQRzNoV2NwUW05blFPdlI4SkZJVmdaQmQybWJGYytJMWZZWHZ3TlFrWml2cXlQMGU5Mzg2eTFiYTlkM3pCcUdMcXdBWDNYcHpiVEg2K3RiWHpHZ2tBMnVKZlF5ZWxmV2VKU3ZnQzBKRlVGMWF4TmRUVTJIVHBTajdsSmwvbmVtcTcrOXZTTWsvNkphZEdzc3FyZ0dlZXRuYU5WUEw0eitkN3F4L3NneG5GMlQ1ZWdIU1VXeVg3QUREVk1LeG94ejBCY2h1WHhpMkFzQ2F0VFB5dmdPT05UT2JyT1NjY0d1Q1FsemhFYktCL3ZydHoxaXJIOGhzWm5hNzluSW5oeTB5UkVMQ0p5TGdXZjg2LzNBZ1REQUFBTHBqTkVnM0pOTlFaTGhzWkxveXBGdzFwazRkY3RoaDVLaWp5QWtuRU1JQlFwK3VKL2lsa2hpcHVDUEhlZytHOWxwRm9RL2EreE9LYzZIRkF4QjJ6cnAzb3pBWGFpQnV4Vk04Vm1Da1dtVjd0dDgzVXFsNmk2eHd5YXN3Q3BWOStjelU1T2Zqck1ySC9CMWJkc1NaSzdtU1cvYS90Q212S29KRWloWWpWaUtQUHJ5bUtWRGtQLzlyTU1Nc2N5MncwRkxMckxQUkRudGRjeDB6S3pNL0U2aUFwQ2o2TC9rL2FLQTNBMjhPeVZ4YUM0T2xUNWFkdVBNUFdmWkIwdkJrUnRuY1lBR2RoU3VXYmxvMjUxclQ5ZUNPQ0tMZ2ZiWUdrcUJKNlZReWE0S1RHSUhVZzVmaHFSU1lFak1IUnhJSEkrbEozRlR6dE4wcFdoN0REREZQcHRvcHVONDRKL0FJa2cxU2VPcGNpOWhQMFJUUUVpV093enhOMDBaSFUrVXBTMUdGOEJZUEVEM0FCTEYxbnFMRmZBdFNJZHM0dFpRckVKQ3o5VEt0WjJUTVVWaGF4SE9MVzNpWVN0MHBvRWNZZ29TeDQ3VkRxY3loa2drRlBZSGR2TVN4OVY5K3Q3Nk5MWnFEQjJtOVlZaG10bXY0ejBsNzFhRFgvaGN6T3dRdXhxNmsxbFVDN25tbnRHL1AzU3p6S0dRL2Z3UlVEL2NPTVFpRElwVGdqeHZ2Yi9QYndFOXNsQTZpakxJVHhia0dscDJtWGhmVTFPNUEveUhlYWJSV0l6SWRXaldaMlcwOThTM05KbXhJVXhEMEpTMklRcWg3L0RMT1ZGVVk5SS8wNzFkcUpGeTRnTjlTTnlQc0Fxa2xKR1hQYWZlTSt4YkY1cUlZYy9JQUJ4bWxtNEJjQitvUE9SejE5Q00yb3VoMm9HdEVOTjJBSkZyQ1Z6TzROb0QzZXhXU0VLRzRzak1EdE9WSlNnWUxWM29TYUxZZWU2T3JFNTlKV3RJN1hxNkZNTkI2cEJhRHptU0c3eDlQL25jb0FRQzBZTzY1QVYvOFZxUjVwQzdPMEtKUlNUaVhNSGVhanp2cThmRDZURWF0ZFNlRWRDeUp5T1A3SFMwSE5zY2puNEVVSDdJVnY1QjlOY0h0NlErUXhyNU5nSmxFWXBCYmw3aVdGVGcyU3ZzdE5McGsxd2QwRU9CL0hLT1A1MW9Ba0tIYmswY3hnYVVTbUVkenZ2UkVYZlhuVUVxeHFHZ2R4LzFwVUJuNnlTVWJpTDhia0lsQ3BPQzJIRi9ZMHg1cXB4VEw2TG1sVVBiRk9KTWpZUURlWUpJY1lBaHRLVnFmckZLSW5nbWpPSTVleCtXYlNVQXJDR053aElEaWFLUFFWMTJlemFkQTA0Q0hHODVMWW1oMmdpTUVvaGd1RkNFN1d0MlJucFpPUDBMQW16akpOSk1sMUZxUTJ3ZmJVQkpiOCtnZGZpU0dTVzFnQzF0WjB6N1FWUWRkb1RTeXNqU2Viem9sZnlvaFN0Z2dCZWVMQ0hPRGZNeW8yQk9TOGExMmhpZHIzWVVoUkRWWFRBSXhFNnh3bXMwREVnMU1SRkhBR3RHWkpMRTZDdEJabDVKMkE3dWxUUDIwTWpRWHUrRkdjUmhqQ29WWHRvd1ppdGhlQWlnYmxuT1pJUmdEQ2dZS2VqakJRb1E2aFJoMkxJYXJHV0I3eitZaXRLQXVxRU1BbDlRRElnSGM5UnNZaVV6QU5nTXNaR0xMb1VheGFra1ZyZkRveksyMTBaYkswNFpwaTZDRUJWb3NNT0FBVVZnUWl3VjJITWpCRHVLVWdKT0lneVhoRU1uc1VDbFNhYVN4dzZUcmlPbU1SVjI0V1NHL0FyMW9iOExOOU1GYWZiRm9xTnJjY0NOeTRraWpxSXdCSmxOd0JDOG1XVmdsRyt0TVordjU1T01WNEVpRjJLQ0liVlNzbEZvWk5wbUZ3ODJYV3N3b0M1NktEK3FVcm9JekttbnU0R0FaZUpaL0VBQk00UVdRUnBGcWhvVllDUWZQZHBPaEhHYVd1eDRldUZpSG51NDAwcG8xTjdDWFZNbmZLalIyWWRGaXNjV3FGcXVCZE52QWE5ZHk4dEVUUCs3MTNMd2NEUHh2RGQwYXcrOW5leWZnZC9ZMzhDRUw1c0ppV0FuciszMy93WktjUW53S2pyWGlNQUJwRHVDb2FVaWtHSVNoQ0FFRnlFRVY1SmVsRmNIQnA5TG5lL2UvYTdiTUV3OEtwUDZaWlZtVlI4UzVvYkFtVlpKV09NNXkwajhCQUJRWVFUVW1ReWFaR0VUMXg5SERDVWtNRzJNMkhFT2h1WDVIalR1QnBTcEFLd2lYT21zcUJxREFYelFVSXdaK2ZPQkh2Z1poWWhQRzMvalZ5SXZKT0RkQklDMGpLNXNLbk43NnFVeHNJNVJqdEFwaXZ3Y21lQVFLOUZZS0dzRVN0Q1FRb2c3Nkc0WmVtcVRKVEFSVzFEOHlCVklRQlZNSWhhWnUvVkg3aFNPQlJGS1JtalFrU2JrZ1FIb2lyWXpoS0ZYWDdMSUpvTEM1YWFuaTB4Z1dMZ1JnVGdsa3JPYTFXTUp3blE5WHpsY2ZtQURzaFE0SDlFb2VueTVTb3JIcldnOXRzMHBJN3YvM3NFZXdBYXpydUMrR0NQQ2Z4cmtUOUNZQTlDOWJBNUJ4U0tLM2R4MEFZSS9leWlxbXRCdUFvMHRjTnVicjgwd2w0K200TVBqOW1LYVdQL0ZKMXRsdFBkVXpPNEcvaEw5V2pwVE5zbFZ1SXlmSTZYSlh1VmllRXdxdDRkYm1majhBQ0NKelNmZG40cE1vNDNLc2tYV3lzUVZwakQ5U3dtMEY5QVBBdndPQU54MnV2Y2IyQzl1QUM5K0VDODk0enpxZkdhUDdLT2Jocm5NN3oyMEJBWUJFUUg4bmdON0s5M1oxZXVWek5QcW43VFBISXZNY2RkVjFpNjJ6M245T21XV1QrWmFhYVlrTHpqbHZnV3VJaGlSUXNHYTBtb3RnWUdSaVpoRWxXcXc0ZGc1T2laSWtTNUZtamYrdDlRQUhva0o2Yi8zZ2JqTDExa2RmT2JRM2dCaDY2bXU5c3Y2M1R1ZFRvRkNSWW1WV3VXZTFTL2FiNjdEampqamh2cHNSY1V1TkxTN2I3SGJVdU91aTMvMFJEbGZjMEJBZXY2bTExVC8rOXErRkJBeEhoU2RTQ3hBdVJLZ3drVnJRMFFzaWE4MnFwYlphT2FPTkJDN3hGS2xpVE5OZUJyZU8ydW1nazY1NjZhNkhub1lZWUtCQlBFYWJZS3h4SmhudnJJbnk1Y2lWcDhSVXBXd21SMDJFalRiWWFaY2RDQTIvRUFCb0RRQnNQOUJ5UUw4Rk1QOEE4SjhETndjQUFEWjJGYnlFaE9NVUxDV3FvcGhJaUZGR1A2L0pTYmJubkpnVXhWMUR6TFFBaENKSXVFYkJvM2d5YVNVSlJTTmRFTEhTSHRJTTNISEdzU054ZmV3RW5jZnI2Y0NnTVdsN2phYUowMGV4UXRRUjlpaUc0Q1V3OGdTaUpubndTYjJyc0FpcFJFbG54Q1lNczZjU3lJK2UyUng2RXFiK0NyR0VIbU9vTkFPRnBKU3lObEFUaEhUTlBvQjlIUU9yeDRqNVhrek9nNFFPQ1dtY1BqUnhUQzNVOFlQb3VVVTdYN3pNdnJraVdvN2RKc1puUVFBRTdubjEvdDVmWjJSRVFtbzB3ZWl1dkprTGxnK3dST2tzNXhTOE04V0xsVG9FeEtSSnVONVpsdWM5VnhtR3AzWG9oU0ZaZzYwMmgwUHBmUWpnSEhMZFU5ZFlHWkdVakY4eEdQYWZwQ2lOQnE5VjZpMDZUMDRZWXA0b0sxNG9jM2VsckNpVkVZRGMvai95UVNuUE90YUpuekhCYWFoY0EwQ2ZBQ3E4Uzc1WnRBazBwVG5LTkF1dU1RV1FiRml2dG5QVXhuTUxRT3UyZkVtTmIxWnE1NUlNYzVRWnRtcDhWeWxSK0ZCWW95bFhwWDdWQkRBbWRtSXRIVjJGUnd4cTNmNHpKb3g0dDNLWmZwc2p5OHUvVldiVWc3WjFSOU1ncGJqSjR0bTRXQURNUWs0NXdEU2tVUmd0eUVtdzJNS1JUV0RGWmROL0ZHYVJmWkhiYTdPTFlPL3VUNGlIQjRxTWNxdEg3S1Z2MGJxd09aRi90ZVkrRFE0b0hVUVloUTRPVlFvYlRXTjFTN0RCOFBYYyt6dXg2T1EzeE8xRmRtRXFBL3Z5aUszdHVhSFNSYVc0ME9ZMDhaVkFQVFdNWHdLNFpFT3hCaEM4ZlR3YXNHaHhLU3Q3eVFsQm9UNTBvcngra05xb21HK3FJTTE0VHlYVmhTSUQxMHVFSTJDY3VGT3E1NENjUXZOengvcGNmOEdvZE5ZL1MzeG1hVit6Slpzdzc5aWxlOUYvVThyaFBWQzRtUWxjTURyYm9EWVM2Q05iNEFLd3hwK1JFRlZTMVRJNlVNWnc0d1lXUU5QUVc1dE5UbkZQZE5ndzBGTStkcWdIZzgyNko4c2lWaTN1blE0VGxzaTlnYjdHNDVtV0xuZC9EeisvUm5hOFJMRWU1OW1xcHI3U2hvcXRWd1NJdmZtR2RWMnY4eXBxalU3djVqNm5yUDExMXBnc2lMeE5qZTFXSEI4Yk1qcFdKODFkdFMycGFud1Rnd25OMjMzV3F3NGJESlNaR2xCSlRTRGxIZU1ZWlhadE85ZnVsV00vZTBETjNaek5GYnpmL2RzMnVYSUxLZ3hka3dOOVdFVFp1N2xzNXJrd3dSS3d5VnVWMkZNMmVhbGZHVmFoM0xVMHI1MXRXZk01V0ZIQ0ovV01ZWVVqaFd5K2NFbzhleVdCTVhFeldDVkxreWJZamoxdnJWSmRuT1JYZXhzcmdVRExxYmFoMm9pRDg1N0VTR0xhdnRrVExKUmZtTldFOGVhRzI5MFdtNUlzWGk1VGg3V3dsTzhjM0xTbjNldWk3V1I1SDh4RFkxMkxDYkN5RXhWKzZ4NGYzdFF3VURHcjNodGxPZkFHNjMxOHhrcnptc2picXdZdEVWU1c4dlI5S0xlaFo3b0ozb2thNWpXTFZuOXBXcWNybUQyVnZHT2FKOGVuK0tpT2RVYmtQWEpRZlc1eFpiN1cyUmVEdE9KVGEwTmJOend0UkpQQVo5UnRxU2F4MHFHbExrOTJndjFEWDVPVVErKzNZNnUwVUszUFB5RFJjOGVJbG1rU2NFWnAwd1MydzZ3Y0szK0txbkozNHllTmFidkY1L1J5RFIwajc4SHc4NUhtekdWT1MwV0lnOUpBZWxnTzQ5d05rdEk3aEEwVzlrd0p1ajlDRWwyR2FCTDVxa0pYSm1nc3NTNmFnTlZ2N29vR2lBZ3hhbCszcXdUWGZUaWxyQ21sVmxvOFkwTE0yRC9BTmhmdWlTSnJOWFZzQngwV3RQYmtWa3ZOYUhsa3dnQTFjT1F0SXl5RVVnME9ISGx6ZDkxUVczcmwzVzAvczNkd25mWUswZ0NPV3p3UHRJQ0hWbk5YN2VCZ1JuUmNHUVNyaml1YzF3bndxV1VsMTZ2Ulo5VmhYU2VNSVMwa2ZKQzcyOGtQay9yMkRFZFRQSTkwR0tBSm10dVJnMHBqSGFFNVMvbG15N0hRQ1kzZ0Jxa2Jia3BEaXQ3S01QcDlMa1FRU1ovUDVJcUR3UkNlUFJ6N2QzNjBPZ2FGVGpzZU41L0RPOG1hNGxDeGw1MVdjcE84VG55ZHVGbG1maGZ6Vm10NmVjaDhMZW04bitnUUtLS2hndzJFWCtwL0Rlc2k5R0FSVmdLOWtUbE9MVGtRSWFyWE1iSlp0YUVEMDZiNWJkSTRhSitFVFgrQWlRNUpkdHVjUTFYYUR6dkRGcTFzTGFKYzN0eEtRM3RRTGV5VXF5S1dWUTNGL3EwZEZqOFlEOGs2eWRkVkZhNStWcytEU0c2dUMvbk45Y2VudUVOcWxqSi80Y290L243ZitwaVllWVVwbytGWk9sRkd4UnZWMVd5NFZFUEdLTEpwWDdBQjN1Q3RMRjJibVdhSUJpTkY2aEI5MjNHL1QybXVkdElFMWZ6NjZUVXczQWJyUXJhbHdFRmhPM1pMTFpKR3pXend6d0xqRHMrejhvWms4NGdPd29IVUFIQWdMdzhYaDJhRk1yNjZqczVTb3hrdEpZQmVUclJqWDV6bkJrZG1JOU0rLzFocmNZall0ZFpyZ2JyVlRSNmMwNm8zbXVhQ2tOWmNqcmZQc1hsaXBhak5Md2F1Zkw1RVZTS0VBSGd6bzdFTXhZSlcwL29pSnh1TnRrbzBXbVUvTzQ0TmRVV3pJdXNOa2RaZmpkZlNWbzJ4OE9ESEg2THpUSHV6MnB3T1QvT2NCRWpKMVJValI4Yjg3NU5JRUJCdW0zQnR0NnpFb2RiMWhNZG9NaHJHR3FYVTQyQjBtNzNreUx1Um9hNThSeG5HaUt4bUlId3RnTlN1dmtBcXV2UjBLTkp3djM0WWU0WTkrcHZXMzVFMHRzRkYxZ3V1alRMVTM1ZnBVOER3bEFmUG5HN0gwM3pXOFgwZEpubXZKenlZNDV4OGxoRDZnMkpBVEVSNW14L3JFdDNtTnpxM09rYVV3SnZJZkd1K2ZxNVhmQk9IamFmdlFENklvd2hoYjluUWF4VDZKRGZTYjhWa3hybVZWbnF1NXJYSTVScTdSSHlNSlJpTkpuT0h0OGttdmJnZ3pZamduVG40ZHlleGNTek8zdlF5RG9KOWxXSWp1SXNSS1I4ZmJBQVhtenZzbHZNdWJib3ZUYW1jN0syYlJVZjJIMHlSakx0SnFlVHV5QWplOFlRY0pKQTFkY2R0enVWQ2UwL0VyaFlOSXd1MFlPekV0ZWIrU2xNS09VUXNFOXV1WnV2dVFYV2JYcFhsQ2J1dkpBUlhQeUFtekZHaEkrdU9HTUJIN0RQTzBvRFV3MU03OEFOM2hKNkVCK3FvMFlSaEk1OGJCWENJVUxJbXlnaFdWc2F5c0lTUUI1NmhxQjJISXBYek96TzlFbEZzZHh1Qk9YMGlQaFN4TlA5ZVZoeVNTSXAyRXpYa2FiUjdmZlF4a2VpVEQ0TDBGWUNHR2lOek1EZElqWGhoZHpYUHplUTZzSFV3RHlnZFVzd3grdW1LaXE0OW81UXJ5NEVKUGNodlgzMm1KMUVaUHZMcko2cGNhVnVtQzNwUXFYemoyZXZYNG9wVTd2TnUyYStPVitlcnh2SWoyVWJsNkEzblJza3hrV3c5Zk5BZWpWd01JRTVSSEVTbzV4cjF4TktzN2NjTjhOdzMxTWYvOXRSQUtORExIRDdjTDY1bW1lcGFvaGtuUGVMWW5jYitaR0FWczNRbWVzNXlCR3Y0eGJKUjdSdVdqS0lXd1E2bGZDdEZ0SEFlMFdDb28xREMrU0I2SnNkbnBFbVBnQjJnU1E2SlVpOFZGb0lCaFYza2hDaGYwMll4ajlKdmVnL1RLcVR3ZzNlSFBPNXNWa1dEWXZHQ1NhQnVxSTduYUE5b05CODcyTmdvdUlRYmtFckhiODhKMmROalM2SnBEclRmVjdyaDhXcnhrcjhjQjNaaDEyS25NbUtxSG8xcE9lbmh0RjQ2YXpFOUxhODd1Y1J2M0pSMnl5UTdtSU5sZmRuR2puVUpldC9GMXVqZStxTzZTdzZ2WVNwNkRSc2lHZ0o1QmN4WFZvM1I1TFYrWVYxdXV6aHZpWEQrYWIxWkdORHgyUHg0bnJhbWFjYnRxSEtvY3l2MzBlekIyOEdya2pYZTAreEFrQndhVE16TGRZbUZPOU8vZzJHSWVIQVNWTnJUejRVeHJJOFR4S2pqVkpxcnQxWHJkSTdETSszRGUrQ1ExZlc1L1YzVFhIZGZ4b3JFd01QVGJ4cnNSYVlwbmxLSE14eFpIcytKY2ZNYjdYR3BQQldtTGZ1Q1EvZlN6ZXYyUFJhdUN6NkFsbC9CNEVDRXZ0Rm85QnJHRWRacG5JT0krTGdnbjVCYnFPd1NiamkvMWhxQmEzNG45Zko5QUQzVThpYnVhbUdHZDNXMUx1UmxOb2h6bkxrdWlQZUQxajNDRERwNVRWTkdBK0ZoZFhvYVlFeU1UMHFUeDJSbndwczhJdEI5ZkhKM3lhNUZlZ0NsZlAwclJsbDlkN0NaMzMzai9oZzNHMk10YXZNMWZCVU5Cck4xVGVGV0Ywb2M3aXdDb1F2S21lU3BoQlJlSHR5dzB5aXc5MG42eHBnQ1l5a21vTktHaG1oMElWWlk4S0JrTzBXMXBxWUlpOU1pVFZHOTRKMmpoK2N2T1MwUnNlUUs1Z1VEOEVBcVAyQ2FyOUlqVmh0VjNzd1BWTnpUQjN2d1lDa2lXQlU3cjczTjQyQkFuNk4xRzlmbDlOWC9ENUErSjNrOVI2TlVXL055YnFUclZzenc1emZPRDhObzFvdFl2WDJTZ1lOWDEwRGM1WW9QdUpMVWo2NmRUdGNPbC9QRWJZWlBocmkzK08rL0U5K045amJlYVFyT1E1Z0oxN3gwQ0oybURvWVlvTkJsVE5XTkh1enhhL0R1Zmpyd3ZyRzBvZytZWWJGQ2IwVEJELzNvN2l0ek43ZHpYR29kejdmSjM2eHNET2t5T1NBNDROOHJIUHYvK1RNYURGcEpuNDM0Tjg1TS9tY3ErQ0tvaWdoeXdkamtsVnpTOThIZzZRR0JHVitrU2FhMUswbHlSNVRrRGNETi9ZSlRwUi96ZmJ6U2trNWV2RjdSdWRGWUtKcW1JaEVpUkVpcjA3RkVCTmF6NEVLejc4MEJOM3FLOXJPYis0WW8xOHo3NThuY2tnUzZPK1BnTEhaayt2WGVyN0lidThCcXRyYnMxZjMzbXg1MkhleVpKeDNvaUc4MFh6ZGJBNVMvK0VKN0x4RWZzMmRQejRZZ2FzZWh3UlJhTEtMVGtZZ1FKWGtQUmJBaDFqcVhtU3JkenZnbWZFKzJUWi9mbTRqdHkrZGorL2ZHODBpUjI2bi82NTFqK2JPZEVlVjNlWkw3NFFVaXNJYlJyM1NKRjVUb25XeGpmaUlHZWQzeGFjdVhZSS9YQzlYdGhZQVlrRFVZM3QxRWdUTk9Sa2dFOFE0VURTZ1VRY09IRUF1Z1BKNkY5dlVaUUo0bkxkUXIvKzlWK0dnYTR2c1F4Q0ROWDc1OTV5TlhwTS9mV3hBbnA5dytDNmpOSW4yNVU1b3NxUUdyR0hYcEJPNE5qYmN1Nnk1ZmN2Sm9kckh3bnBXYUZYV0RWR0ZxWGYzWld1Tno3RjlldnRyeWpHNWhhVG9IUDdYdnhiV3phMmlGZ05sWHB1S2NIeUs2dEhMNUpraXhTKzFqdXVudXdscUQzNy9XMEYzUVRjZElMVVcwR05nM0ZjMmtwNk5LaTVsQVRtZW1vQWtJVDVyWnhYejNmZG1wK1FObUc2UkZ4eDNHNnllWGlvcFprVnpmbGRZclRmVFp6eFk5Z28yK2dZWG1ZSWhTM2NrdDZFRVBlelkyM1pIaGpHMHdQdUh0MXpzejdZc2RHZVB1WllsZU1NSXNLYTBtYlRGcnVsTUd5M3NtSmVSQ3NwZjhQdXpRNEhJUnFkYUlYTGhFODY3WWdZQmRudFhrYzM2YlUvUDR3L2twWlQ4VTlGME0wQjBob0Zub05hMHVjV3d4Rmk1MHM3VDE1d04wd3FUWmZCN3JMVjh5bWhicWJjT0YvamFkYXZVZk4yc2haMEdRMXBiNE40MmtkR24wY1ZURDkxL1dNeWNuNWVxSVJULzErZEZrYjB2VDFnT0p1VnZyQ0lmMjJVdUtwcDkzNlNGVzBxbHNxRnVtSlBXT1RDendVNzRYc0tBK1dCeG5xRE5Wa0FmQXFJM2pXcXNoeW45SE1hOTlTdlpCbUd3L0tjQjFlalF5b1BGWTVzdS9PRVBENzBUeVdvUS9pZlZSM2w4cVRTQXV2VFVYNEY0U2VZMGFORnpRQWlWUUZnM1pEN0cvMzBFS04vcGNFc0FCU2pCWFk5ZGk3NHJsWHBKYzRkVjQ4amFJQnJBeTR3ekx3SURWWnUrM1dnZnN1ME5wT2NZd3czdlhIWlFjclJDM050UXNMUEdtRU1YMUE4c0gzMFladWdCWXVqeENMdzdlKzVORFRkZFE4ZWJHQitZZzVhWDBLcHF3SXVwU0xyM3lENUpuRnhUdmZhbnA2T0cwKzErZG1GMzZJZ0dzdzlCQmNQNTNuZkhQN05uM1FaWHBzeE0rS3B4RE5uMStBcVdCNGtkamJpYVl2dlBxUDdXUTRLL0RqRFVaNzEzL0RiRjdCR0tTS0owOFgrTDFUUlJ5eCtWVzcyb092QTEzQVF1clh1MDQ5dDNOOUZLWUU0VzNjNkU5NmEwMXlZZHZpNzcrREJSWHc5bVJDLzdMUEdKbGtBKzdSNzIyMWNHUWZjV295NlVLY3JmeEF2QWZCeUQ2Y05hY3RlcUhDYWUrcENsbUxHdEdCZ21DU1A3akJIUjF0ZDBYOTR1MzYxYkQrWWwyZ1lzOTl0a29BMXVjODY0UGZCVGljYXBxZXZocVhCZmUyYlBsaStQMUhqTVpGYXU0Qkd1Vk1HbDI2SWFLRGxKNHo2OVhSOUd4eFhIczUwV2JMYmk4QTE4UlRlRXJoNTFXWlpUMWhUVEZncHg4V2o3U1BpcVQ2c2syT0tIODVyNEM2NFVzREt6cW5CR1hmVVVvYUY4OTZuVUpua1N2K21IdlJJaUtNQmhVUU9uenpHdkgwcTkrYXNtWTlhcHFacXdXYzhhR0RPTUVNbGdlUXFCU2gwVWFRRDIySTdzZWZUYXJrRmdMTm5PcEEwZUgrcXdkNmcvb2RYK1Z5V3cwQjFhMW0veUxQYzVWUVo5ejFaSk84TFhiNFlvcmJkMS9XTG1lN1VFQjdCcjEyRmNGZy9aVm8yNlhJc0E5SnRpQktkYXpsb3hGUDBRUXdPSnBRVW9Famd3OTNWc1EzcHQwckNLTm9oNm5KeVhWR2NPd3dmTWFkY1hRK1VSdkgvNTM1KzAwZVk0RWc1L1pMK3dmVXkxcEdKVWtuWk9qbmJqRW1IRVlodXdZMHAreG00eFpNMUswMncxRFdjYzhic2luTXRtaVpXTnl1Q0JaL3RuaEhZanovZ1pPcUx1c2d3QnpRVmR0UEZRWGVZRHZIbFJ4Y3d0c1IySTFqUjlTS2lkdk9iMnBrN0QwL2tpS3VPWHgzcG1EdzVGQUhSYm1YVmxaK2FsU3hlKzRIU3VkaXhmYS9QSllZNkVlbW8wa3RKcjY4aDUyWWNHS3ZzSDlEN3g5RlY3TDlTN3dkS3dLQnVYbUJXN2ZiTXRaMEJJUnpGbFBjYjFtWThudHBzWDJZZ0F1czBjTTBxeFJMUFd0MTFLeHZmY2pxcmdDOWFyRTNtOEo3ZmVKUmNRVkpBZXM4NHI2dS9tZ2JVbnFkei9nMEMydUpvVjdrazkvS1dDVkxvd1c1T1JTN2x2WjJqLzZxQ09rZXcrZjUySTJyeXFqeDQrcTI1Ly8xeVQ5dERvL215K1NsWmx6OWxyOE9kZGp1Q0hHbGRyREJuRUdFd25KWEJYbWRKN1hxK0pLdEJQbVBSZXBld21XOTRST0dWRVk5SzQ4K3I4aUVoQXpuVHhnVkdkRTlPSzBFWG5TQ0ZkeHZGOGE0S1RDMU55OFpxMjc3Qk5MaUZjQ0hNRDVIZWhZdGNoRCtoWjc4RldCb0JBTitraEx5bXl5QUlHV2NsYTdMVzgxbGdpY0NRZHRkaWE4TVBBSGRrSHlIcUczcEl1aHVldk0vYml4Z1B5c1plNFJ3cjRzNExjdkgzVzVCRThnVi82dzErUndlak16Q1IrSnY4L0c5RVc4UXorUXdlSXhaS0NqQStuWDRjNnRuOVlhZlVOZmw4VStjMVdNZHd2WEE4ZGE2WjNSUnVEc1hhZ0FWdlQwWng5UTZway9xc0NLU0F6ODF6WHRmdEZmRUROVHcvbk1iaDZRV1JaVFk0S241L09GWGZmU0FqLzc2YkJBZGlZb1JGcDdjMk1yd1hCVFp0NXBEMXNtMkdJVmNFZnd0cDIwYWRmMmlaVVhJM3dEV2xDQVZaSTVWTGY2Nm1Nd0dZQXh6Q3ZsaUdvKzd2aUwxOVlqNElLejA3Wm9zTVBXL1BxZjAvckl6cCttUC9PN0p4eEgwTHpUWjh6R3RHc08zRUlUNXg2VlRyWFcrTDlsZ2U5VU1MUDVaYmZDdk9ZbEduT2llQnBFblJTQnhOKy9lQk5mMGpidHdFRTZCYW96VnhWNHFXT0xRNys2aWtmZEcrQkt3dXhDeUkrcjJiK2cyTk10a1g3UjdjZlZES1dpL2dDRWtEMWMxS3k4c0xYaHZnZU9Qdmg0cUpaNkU4R3I3TlRiRUZQYzJ2RHNXMlc4bWxqdEZwNmNDWldvc3J5UkhLM1E5RHZSODhtMjlOa1ZuWHVyaVFJT2lTc2FEcCt2MjFNNGZsVWNMellldkJBQzlyK01WcU52b0RSQ2dWRmpjeWdOWEs3Q3hZRmpiL2xvMDdWdlpRdGwwbXpuL090ditkSjExZHRyd0hrMVVBNnRkQ3dlczNrMG5VMkxTeHN4N05NU1BaZXRzbWFNdWtKSG9QWGRDUjlINm96b3hHbXIyV1l5SlpMT1pGQWRndzJrOUJDejNYNjkzT0x5R1RzeTNxK2VlSkpzZTkyeWFJZzY3MS9mOGVnbjRQQU14UUsyWHcwTHZmZEo5QjdjK1FkU1RQU3ZsQ3JaNExoLzJocW03dGJhWERiekFsaHVkU0VvN0FldVdtcXB6eTFYS1YxeTFWQnJwS1JMcVZTNWxacWVOOXE5QnNUbU5Vb1FNV1JOSUlHR0kwWGt5c0VTY2dWWm83SGhZckEwYUFsU293bzhGVmZ1eStYRm1vcmhPRUVvbjh1NXhzRjVZSXc1Y2lvbm9NSUZoMjFYUjBzSGl1dW1EdEpmdytubjVoU1ZGV0wrVjlSVTNGWXlJRkp2U0d3MnBOVXlpZ1g4S3VjRG1qYU9PM0J2bjA2WHNRaGJmT2FVZFBibnVTRFdtaklrazUyVFlWMWFOSTNobGtoV3JLRVpQaXdER3J5UGNQYjcvSXhsejdhcEhrVGgvWVd2Zm1zc0Y2UzRraGJ2RDNxSmtRVVdYQlhuZmlDVVVraUpqUUpsOExYdEU4cWRJNmpGYmRGMko3bXUyN3lYbDQzejk3QzlnMVNOMld3RW8rRERrT2JQZWxwRUhYa2QwbTNETklrdWpWTktORjlUSWV6ZjFxeHBwZENJbWhmOE53bmFydjRQL1ZPTU0vM3dRY3c2NERJSnUzQm5qeER3SURVak4zbmFNbW9qZXptNlBERGNGeCtPbDhPNVF1dzE4R1FtNEM4YTVoL1JTejZQY0ZXNmdCVEYyVEdWeFZRcU9uR1pJYUtHWXlhZE9CVXdXaHdwRk00WTFNcFlBZ0hYcS9CdGVPK2FLYmNHSVVXZ01LS3lOU1I2Tmg5dXVnWXM3Q0NxSEN6MHdxZ3AzWWZZYkhuRWxFWmhnV2ZKUDU0M2ZkK09TNDFJTXFzekdqTTZKR21VdnZnOXRIeUVndkNJWlRLM1dFSEFSQ0xtY2lkaVI4VEIzaVFCcXoxQnFScVdKL0RBUkU4UzFKL1U0SXhMMEVXQmdiNkkrUUx4NXhlUHhyZFY1U2ZyWitGMkdFanNVWlhWTkhnYURNZE5Xa3NRTlovSEFLY05HbVUwbnZFRUJJK3pPbUUxaXh4WFBtNG0xYkJKSFQra1ZIa3dvOHBYRUFrYXNad1RXQzJBRmZSVll3MC9VWTR0THExWXFMU2paeXVhUjZqNXdKYjRBbSt5VDNHV1ZYdWMzWWdOVTgzZ2JibGM4SktzZlVqUTBMNWozcFVGY1hJR2NvQVYwQzd3K2I1cVJpSld4QkVya244WnVYZXlXQW9XZmVtbEF4ZHB2TGR3L3JocVhidmFzRVhZOHNDMWhmeUtjcEI4YjdsYnlQMVhBZTRXc2NMenhVTmJkM1gyMU5ZM1BFRnp3WHVMdHQ1UmY1aUtQU1dRSWpzSXZyL1ZyWWJ3L09DN0NMOHZNL0JUSEhaNTVZYUpNcERPdDdSdGF0cFpPZHcybjE1RGgrdExqUzhBZnVYalBSemV1YjlRQnpWdmRyWUpoUUVVSDJta3YweTQ5OEJHd25mdmlqdG9GYlUzU2RxMlgvZDBTM3RMeXpTTDkxTno4Mk9nQlBnc2F1K3lnVCt0T0FnNTFIQ2ZYZEdmeW5HcUVSVHZhOEEycVBMN1BhMk4zTHMvblpkQUs5OXk2Q2syNTY1RExXM1V4TEpSWSsydDkveHV2clBaMHRwU1diNnQwcmZWMHJTUDA5SFd1cTYxZGJ5MVRRdWlFcnhNcEpmY3ByZERGVFVQVmJORk56dFlhajFsK2RXOG41cGJYdVEwcTF1YUQ0TW5vRkNpMzkwbnVoamY5eURZdnh5eUkzU2FGMTBYeDBybEppdzYzYTNrVTZwMUsyZHdrdnl4V3h5cjFjOFRPa0ZPWFdLS3FqM2JpdklFWDJIR2JicEFZdVhEanFwRDFzRStuMVp0bmNSSnJtbWdjbmlWRE91d3ZQV1NDdXl3bm45YVk3VXYwMURONnhEVHQxcWxROWU3aFV0YmhNS1dwY0pFQlNGYjllVVlYQUpINW5xMGt2c2hEbTFGcldXMzhvN0IyOUJsejg1OVd5UFBBMStiandhcCtQeGtodGQxSUtJdzlmemx5azdWMms1TW5tdVZYc210dFVOenJIM3h0dFlINkpxak9LSzJRK2VtdjE3NVBxUTM4VCs5bTZTN3lmVThxOEQrQnhoVFJlSEN2alRuV2tBTTkxSlkyUWtiNUFHUFFxV0pxQTc2bmx3K3cvZTlPWUJpcGk0ZDJrdEllT1JPdjFCRmNXK2FnQ2hBM2VzbEVYVUdiY0lHQVJUYzRuaFQxMUJaNjZYWHpURkxGTnlaSVQ1TUxXK3J5Qm1vZFcyVnJFWERSTVpxUkQvMnF5TUw3MlhnUXBHRUxmTm96NzBndm83QmtCenhXcDZlaEFWYWNucGV0WGtONnhKR2RnaUp5aHBKaDdhQ01JZ0RNY3BSVDhxaWFMdkw3R2FOVStabjR1aWxyZ2EzWW9NK2lLc0hIcWo5R3U0bmdycEZIb1dydmxGUVBzUGNweGxqcU9Mc3ZkbW1qYnJlbXNIcmE5K3VTc0dEK29WdXBic09iN0Z4WllVNnNxeFJiZHgwbldPeGtra2l1czR2bncvSzBXQ0pSNXVJNzVYWFQzMTRCcys5RFRuQnhieVJtTkc1d3c1QmdXUFVKaG5ac2wyV1czTjUrM1VyZGlVMExpcXhJQzlmSmh1Zk5sK1dUSnF1MExjU2treFg0ekZBZTVSV1JMVmNQajVUTTFORlJ0UDViYmZrYy9ZYk5OVUlpTG5wVEJMVHNyc3BnQ01aeDJuRmFrTXZKdWNvaWp3YVVNYUtlTDdRUXVlajZLTzIzSkZsUUl0VXVqWXpPL1NZdUUwN2ZidklSTkc4TW5jcG81ZDNsNWxLMGpJam1kdTQ5WTliWDZvMjZZbFpjN1BmSGY5MHZNZG1IbHdaUVR5SEROWDFHbDVrMWo3Y1A0LzVNTkVwNDBRSnpUTTNHTGl2MEpyZkJSNHVBZmYwcUJCTVcwS1U0Vm1xMk9NcWNMTWRURGV2YVBpQ21iWTR3WXlWTDFnWk5uVlJzajRITHBhQXVlYW5xNExjQ3BsWHBSS2lreW1VNllhYzRldStFSW8rMS9ONStzOUZ3aTkwUVAyTnJnQ0tHcFRETERLV0xhUlc2a2JQYW1OM0VabUtSSVFReWRVZWJFUzArWEdxZHFoYmdNU200dUg5aGI3d0FhcU9JVjJDNEtQVXZtSUVMMUFQZkEzNEs1bG1peFYzNkc4MEtMc2JVbzFDbnVyQ3lCUkY3a2NGUys5RXNZWC96UWZmOEIvYmZkUGt5enNwTUk0cWpwbnNYcnJBbzcvMXFkZm5TMFRNM0FhUzJVVHZSOGVMVnVMZWp1d0xsSGRid25VV1haRlZtb3hobmFMTGpqQ2JOZmlaMlFKSkxnaUsyOHFPdWt5bHl4WnlldUpQM0MvcEliUTZURjJ1aFhnYWNLWldGYnZnejNHdndoNWdhR2R0SUNIWmRBUHdQYUN6SXVqYWUxZk1kT0Y5MmQ0UXdXSHZPWDJMS0RKbGoyaTZOamZvaHFzZ2hGdXVHOWhLcmFYTjBvaFYwRU9rR2FMTEx6T012dWhYRTh2VTVkYm9jc1pvRE1sTUlUTnkrVFdpMEpLSUw1RFUrMC9wZDBmMFE0bTZDWFdwOE1IUUkrVjluaG5jd1NES01jb1EvY2h6Vjc5YktjKy92dmc1L1NGd083OTA3UEQ1dS9kVXl2ZXY5RDJqWDBaWmRBZVNSaS92ZjZxODNXT3pKeGlZV2hqS0g5cDZEbUtVZHR3MzVmNFN4cXRiSDdvalNjV0hGcm5XK0Q3bFltMU5rK0htYXlyd2RQUkN2ZlltOE1zbGp4b2ZFYzJNdURYMzJ3L01NK2lsdXZ6ckRad1RjZWx0dXA5dWh0MEdsNDhkK1FuSFcwNVVzanpYYS9ubjJiTnM4M1Q5RUhab3U4bnQ0OHNGT1BzMTc4OTNDYlhiMnNOTFdUR05qcFU0QU1PVHJMaFd5NDVQWHF1VlJxeE9WUVRXU0dOV2h5cjh5QjU0OG9KV1lBUFpYY0RoemNLTzkzKzhCK081Ujh4S3FONWNtb3lrRkNvMXJoWUZZSzJvaEdlelJ0UVZqRzZwOGpuQU9sVXBqK1BxYmNTL25sSUNOV1E0QzdCRWNQMU9iOS9ZbmM2dGE0STNMbkpJVmtiN05tSGRXS2oyd3I5WnpLVGk3NXNYSzFORGU1eGRZNG9wejhyRS9RZW5IL2NzV1hZcUZkbWJjUWpYMkFmaXRwQkVHcEc3ZlBJdXZmQ3JLeFZhdjlZUVltV2tqZzQzcUFMVGZKZHR6S29VeG54RS8zZlJPbS9SaktpN3V6QW5PYWdnU0ZuWG5wYnJJSEMyTE5lV292RmwycFpxcmduLzVLTGtzakVpSU1OaS9JaEVvL1JGWlpnL2F4WURLUy9ZSlV6clU3dGdoOXVEbTdqdHBDRklXYjg5MngySTJ5cXlNU3JlYnI5SXEyUFdzSjJNWHJ3ck5TSWgzUUE1QTIvWlVJSzAxZmJ3dm1ZRUY4cUdxcEJpTEdYcVhTOGV1d1ppTEk3VjlxYVBMaGoyMFVKUDkycVZGNlY0dlVRZFlzMzhsOUJWZ1NuY1lPRzdaVmt0aXRyZmZ2dEIyYjdRSitLR21uTmV2SlVqV2V2aGlCQ3ZVaUdOUGR5R2VBWEx0MEo0ZnBDYzJHa0Y5OVhUVWtHNFYvdHFwS1hIOWVtcEJ4Vm52MnVEWFhwZkU4bXNtbU5XbE9NWTJGK3d5VkRNR1NkQ1llUG1ZbTZUb2RPeUN6blQ1bkRJTkZIUUlpWDRZblU2b1YzcTlVZ3duY3lsT0dhU1pvK1hTYVFtVmp1ekJrM0dhS1FYUnhaeHVnMUp2cy8wdzJENGYxdnh5VVFlR0JaNXZUSUQrNGRjOHNkNFQrM1F2bGZBWEIrYUk3K1V6Yzd6RkErTE9aeGY1S0M4UW0xdmY4eElBZEJvVXpsMU5LUCtSSGRGNGZpcDVsY2FtblkzZDFTMXYxYi90V1BJWWk4UmhMMms1UTVuYVVHZzhUb2ExMmlUbUZtYlVBMFVUV2gwQ1RPbVMrcGlnSGNscERoeDhHYW92U1dqTFhRcjBWSUVvaC96MUtVVHRuM1hlT2c3OURDKzVDU1U2UnJkUGVtVFgvMXNpZHY2RDVnVmFWWnNKVFBuVXpzbFY2dkZVdlhWRXVuVkhJbEVjN1ZYWnBOTGJiS3ZNYkJzYjYva3MzK0xvZVhUVjlJUXNnTU45bDBiMmdKWm5QTnBPTTd1dlo0dVdiWWQ1OVJUT1R3M0pHWHBudnFxaGJYK0cwREtWQ3RnRWwxVUxSUGYzZXJna045UEY2NEVFSFdaUnQzRTI2MjFmUFNIYWoreFNMMkhobHp3ZFQyenF2aC93WmRzQ0VqTm80b3VJTGQ3SWNlMWJSSHdmcFZXQlpoamZaaVpUQXRGTlZNTGc2Z1dNaGhxbVdoSzBSM0Vwb0t0eHl1V3pTMXE1bXJwT3dxOGVWeTNDL0ZSZVJNSUhLZVpLRUkrZVlpdW9tbDJDUG9NRmpYNnE4Qmx2MGNFM1Z1b1FrOEs1eWVNcGROSElJa3MzeGhMQ1NYbGZFOHF2M3granc5UVlwaFM0ekxITmYzenRyRW1NSjA0RzAxMlVzUFg1K3RxdWtYYlYyaEtiVWtSVEk2YytEeERmbE1oeG9zQ0ljL3pnSmhIRlV0ZGp5bHZXQ2twdUw0MmRXRGZwT2x1YXFsWjFoTkJ0TnNMZkJHUnFVSm1JU3Y5WjRGRWVrdmdqV3RzYkdyOFFlNTJJN2k5SmZnUlhnT1F2VjdiSk5hdCtPdHRZL1F3eWt1TndINGpDMWI1WlV2WnA3K3VxMkZrdXJzNG1nT2hkclcvZDlqZ1RRNjdwZ0tEcjhobS9rN285bzdzNTA2eTJDZWVZM1B1TzhGbW5ienZidFlQTGEzL1cvclpGSlo3R2dJTTM2N1h3UFlqZ01wci9FTWc0WG9EbTVHdWwxZ0hzNy9DSVNhYjN6dWdrMDRNYUEwSVZFVXZybTN1cFdEUjhEY0tobHRRTUZ5TmdpRVRJL2duZTYya1RkNmMyZGJrNVdIRHJ4N1pKSXNxY0tZdlN1SlJsSWFpb0J0RndUc29DdjZVb2dUQWRjZ0pMY2dKenlJblBJS2M4S0dVb2k5MHdmU2FSdXdBb28rb3FicVIydWNScGc0L2NqM0JUSmo5S2VaeDRHZmptbUFYNVRtV1lDbFRNTnltendRbHhXbURSOVYrL2lPY0pQWmZtQjZIbCtBR2pZMG80dFJ0MXZjSHU0YkZhbjJ5eitBYlJqTmI4bzFTVGpkR0dxTk94WDRTSVRWcHlDUFhJOHloaVQzQkFpWWUzeklWK0toazVpUkNQbWpUKzNTbGVwK3VCdm5nNURHTFFmRVhBOEVBOW5icm5Yb0FzWHd4ZTcrdUl0QUlmbzM2OFVnM1FtQnErd2pvYmZReCtnUjlpajVEbjZNdndKZmdQZWtyVXZ3YXFTSytWZDdENytEM3pBOGUydmgySXpEOXRlbnhWRDZKQzQ1MTJ4dDhsajVIZlQ5UGZ4cCtvczRIdEFWZHdZektuS3ErUXN6eGV4bzNyR3dMY3JkMlZkUVFOMW1YeDFQY3dDMXU0c1BiekJORUx2MkxhTERkVXRQMm9iUXhLOGF6SG9PNFczaUQzVDQ5ZldlVTJlZlIzZjcveUxGWVptRFFYdmM5SzlsYWdVVUFNZUxlZnhhc0FqQ0hmVmdBWkI2SWRZczUwWHUxM2JxTEY5YjI0STlaRDJzRGJpMTQvejhneTFpeGx0amd2T1VCNUxvQWdCWFl6YWxKZ3NhTXJSMXRYWWRSUmxHSDlSUWRzRSs2eG1SZzh5SWVvOG94UnVNUUJTb1B1TU9NWU1MZHM0eEdDSitIMlNNaTVhYnVzL3dDVlk1dE5BMFhtMHk5eEdNMEp0QU9xMXBnSzBCZEtBZjdES0d2ME1mb3k5Ri9aR2xhbE52bHdubENjaGd0Ukw5bFc2QXI0S04rb1NkZ0l4WHBJSnlGMjdnTzJPL05BbGgxVlhlTk95UGQ5LzNTSUtBL1ZDazM5WTRFUFlpdUhlTUJISnBXa20zUWVKRUxQRVlMMFc5Z2daS2E5ekdIenY4Ykk3REhlLzRZYmhmZTJFOWlvTzlKTTMyM2J1YnNTa1F2aU13K24zUU5KVWU4dE90cnp5NXYyRWE2N0EyeFZaVHM0dTh5MWpqbnU1M05DM2tFYmlFL1pqc2l1bE9qMjBRNjhVNllFaW10eGt1dUMzdkw4WVpMbzJzRkVhZFF4dXZHOWxFMGV0Nitsays3TVFIb04wUFlsc2FYYit2YU4zdHIxeTQyZFZta2ZTYlY1eGkzQmJWMXUxMU05d0QwbE96TFhuWUNSOTB0NHd0K3JpdW9LQTE5eXV3RDJwTEFKd1E3WjN5K2NJbmk4a2c2MThuVVNBVDJPNlZLLzNXQklhMWhUMmV3N0VvRlNyYU1JaitUV0UwKzk0cmFIQUp3RVQ5K1o3cGxYRWpxM3hESDNRRGc1SUdPKzVMOEwyK0ovK2l3enhQTXhnRWlCZ0FJL2l5Wm9IQW1NUDAvZUU1azl5NmlOZTFrNnc3V3o0dWNycVRweHlaM0JlVUp2MlJ5cDNYRlRQWWR5TDdKSXdSNFJranpON2F6WGkyQ0lNRTBwVFhvZFpjN0lTamQrckw0Rkh4R0V5M0FSSFVBeDFWL0xadmlqbDh3V1YybTFmU0NmK3N3YzBXMDZPcWE1bTZTS3p5dFJuaFFWYWdNNk1jaFJna0pNWFlFOFloQjl1bUtvb1RwR1JxTmtLNGZ4NE9XK3UrNENyY0dZcmdUWjV2bUc5VFVqdGZuaXFZWlVXVDZVZzBlRTNoa2lVRzVuQnBnakYxNERYYm8rRFFSYmZwVjEzek1wbElKQ3VjK1ZMSnhHZ2F6eEZ3V0kzWkxuajY1WDUwMHhCMDNvWjBNTDRhU1A2R3ZRWEtidVBNclVxdm1hUWgzVUdaclJVWk5pWW85dFhUUlU3eEdsZFN5cFk0NWJBckxVTE16dEFiNjVpbWRJT2FSRFlwSVVGNUJzSW83S1E2L1V6U3d0STJTZWRTMWs3UW9JWFBTYzBHVEY0dXpXaHhMeHZ3TnhGN2g5cjEyTExZWElkOUZENXNyTy9TMzJiS2VXelpQSnFYL0FNM1FoMXB1ZlN0NzZqaVF2WUVsMW1NMGVNN1RNa3dBQTN0OVNEbTc2WmFYS0xaNTY1dnBPMGl4dmZReUNJMmo1Qk9oVi9rMlBpVjNzUnQ0S3FGbC9tRHVEblV6Nm03VnY3OFJQYjNJMWpQTVhWQ3FWWWlmK0VURkhuVzNyY2hNYjUxZTF1dVZwekwwbGdHVElBVU1hUlVGY0tBRHNJRUUwUUlabUtmeURVbEZaWWNvMmE2LzQzUURDYVhza2NNR09LMnM1S0Z6cVB5aTdzamZKOVM4TlZvamo4b1gxTWp1eWZFRVFJQ1BjV2ltQVdnakxCd2tKcTBPSmppZEhaejJpWTNPWnpzRWtkbnJFTmx5blNOWVlsNXloREtYWWc4ajFicVRDQWhzbkM3eTVLdFFLSnRYbG1JeWhVdThOTExCQlppeXVRT1V5RGJKZEVVbXlEV1pyTDlDZWFhWlloSUg3VVMwdUpYbWViVElpalpCY3JGODAyODZKeWV2N0V5MXhFUU9xc21UdzduS3RkQVVaZXp5VGVEbGt5M1hCR1VaNDNMS3BoN1FISzd4cWVBUWV2dG9jV1JsRXRKbEEwMVJaTXBSS1RWRlhlcnB4VnhGeGI2OG5GN2pzcTdHYmRVMjBCdWVJVkpPd3NmRnE0VFBCSVVTT0xpNEpNclFWejk5ZFpNaGFQQzRXVHNZeWdFblpxczRtcndZS2R4ZXVQbFlLVExKcURTL1Y0bzRoQ28rRHZOUWIvUUkrdkhvcmVmZ01UUE1tNFk1dTA3NVA2SklYaEgvZTEveW53RUEpIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9Ym9keSxodG1se2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjR9aHRtbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItcGFyYWdyYXBoLHB7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNjt0ZXh0LWFsaWduOmp1c3RpZnl9Lm1vbnN0ZXItaDEsaDF7Zm9udC1zaXplOjNyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTU7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDIsaDJ7Zm9udC1zaXplOjIuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yO21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgzLGgze2ZvbnQtc2l6ZToycmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI1O21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNCxoNHtmb250LXNpemU6MS41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg1LGg1e2ZvbnQtc2l6ZToxLjRyZW07Zm9udC13ZWlnaHQ6Ym9sZGVyO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDYsaDZ7Zm9udC1zaXplOjEuM3JlbTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX1wK2gxe21hcmdpbi10b3A6My43NXJlbX1wK2gye21hcmdpbi10b3A6M3JlbX1wK2gze21hcmdpbi10b3A6Mi4yNXJlbX1wK2g0e21hcmdpbi10b3A6MS41cmVtfXAraDV7bWFyZ2luLXRvcDouNzVyZW19ZGl2K2gxLGRpditoMixkaXYraDMsZGl2K2g0LGRpditoNSxkaXYraDYscCtoNnttYXJnaW4tdG9wOjB9LmRlY297YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xKSAwLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMikgNTAlLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMykgMTAwJSk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLXNpemU6Y292ZXI7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7dGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50fTo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX06OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfWtiZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtib3JkZXItcmFkaXVzOjEwcmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3BhZGRpbmc6LjI1ZW0gLjZlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9ZGV0YWlsc3ttYXJnaW4tYm90dG9tOjFyZW19c3VtbWFyeXtjdXJzb3I6cG9pbnRlcjtmb250LWZlYXR1cmUtc2V0dGluZ3M6XFxcInRudW1cXFwiO2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMWVtO3BhZGRpbmc6LjZyZW0gMXJlbX1kZXRhaWxzW29wZW5de3BhZGRpbmc6LjZyZW0gMXJlbSAuNzVyZW19ZGV0YWlsc1tvcGVuXSBzdW1tYXJ5e21hcmdpbi1ib3R0b206LjVyZW07cGFkZGluZzowfS5tb25zdGVyLW5vLXVzZXItc2VsZWN0ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX1Aa2V5ZnJhbWVzIGRldGFpbHMtc2hvd3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41ZW0pfX1kZXRhaWxzW29wZW5dPjpub3Qoc3VtbWFyeSl7YW5pbWF0aW9uOmRldGFpbHMtc2hvdyAuMTVzIGVhc2UtaW4tb3V0fWRldGFpbHNbb3Blbl0+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5tb25vc3BhY2V7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2UpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9YnV0dG9uXXttaW4td2lkdGg6LW1vei1tYXgtY29udGVudDttaW4td2lkdGg6bWF4LWNvbnRlbnQ7d2lkdGg6MTAwJX1idXR0b257d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudH0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX1JPTEUgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXksIGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXIgfSBmcm9tIFwiLi9wb3BwZXIubWpzXCI7XG5pbXBvcnQgeyBNZXNzYWdlU3RhdGVCdXR0b25TdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanNcIjtcbmltcG9ydCB7IFN0YXRlQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc3RhdGUtYnV0dG9uLm1qc1wiO1xuaW1wb3J0IFwiLi9zdGF0ZS1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuXG5leHBvcnQgeyBNZXNzYWdlU3RhdGVCdXR0b24gfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYnV0dG9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImJ1dHRvbkVsZW1lbnRcIik7XG5cbi8qKlxuICogQSBzZWxlY3QgY29udHJvbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBvcHRpb25zIGZyb20gYSBsaXN0LlxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2Zvcm0vbWVzc2FnZS1zdGF0ZS1idXR0b24vXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9tZXNzYWdlLXN0YXRlLWJ1dHRvbi1zaW1wbGVcbiAqXG4gKiBAc2luY2UgMi4xMS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBiZWF1dGlmdWwgc2VsZWN0IGNvbnRyb2wgdGhhdCBjYW4gbWFrZSB5b3VyIGxpZmUgZWFzaWVyIGFuZCBhbHNvIGxvb2tzIGdvb2QuXG4gKiBAZmlyZXMgbW9uc3Rlci1vcHRpb25zLXNldFxuICogQGZpcmVzIG1vbnN0ZXItc2VsZWN0ZWRcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZVxuICogQGZpcmVzIG1vbnN0ZXItY2hhbmdlZFxuICovXG5jbGFzcyBNZXNzYWdlU3RhdGVCdXR0b24gZXh0ZW5kcyBQb3BwZXIge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcblx0XHRcdFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vbWVzc2FnZS1zdGF0ZS1idXR0b25AQGluc3RhbmNlXCIsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRcblx0ICogQHJldHVybiB7TWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZVxuXHQgKi9cblx0c2V0U3RhdGUoc3RhdGUsIHRpbWVvdXQpIHtcblx0XHRyZXR1cm4gdGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5zZXRTdGF0ZShzdGF0ZSwgdGltZW91dCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKi9cblx0cmVtb3ZlU3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0ucmVtb3ZlU3RhdGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZXx1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXRTdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5nZXRTdGF0ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbGFiZWxzIExhYmVsIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuYnV0dG9uIEJ1dHRvbiBsYWJlbFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbW9kZSBNb2RlIGRlZmluaXRpb25zIChtYW51YWwsIHN1Ym1pdClcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdG1lc3NhZ2U6IHtcblx0XHRcdFx0dGl0bGU6IHVuZGVmaW5lZCxcblx0XHRcdFx0Y29udGVudDogdW5kZWZpbmVkLFxuXHRcdFx0XHRpY29uOiB1bmRlZmluZWQsXG5cdFx0XHR9LFxuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0bW9kZTogXCJtYW51YWxcIixcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRidXR0b246IFwiPHNsb3Q+PC9zbG90PlwiLFxuXHRcdFx0fSxcblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIm1vbnN0ZXItYnV0dG9uLXByaW1hcnlcIixcblx0XHRcdH0sXG5cdFx0XHRhY3Rpb25zOiB7XG5cdFx0XHRcdGNsaWNrOiAoZSkgPT4ge30sXG5cdFx0XHR9LFxuXHRcdFx0ZmVhdHVyZXM6IHtcblx0XHRcdFx0ZGlzYWJsZUJ1dHRvbjogZmFsc2UsXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXG5cdFx0bGV0IG1vZGVzID0gbnVsbDtcblx0XHRjb25zdCBtb2RlT3B0aW9uID0gdGhpcy5nZXRPcHRpb24oXCJtb2RlXCIpO1xuXHRcdGlmICh0eXBlb2YgbW9kZU9wdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0bW9kZXMgPSBtb2RlT3B0aW9uLnNwbGl0KFwiIFwiKTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRtb2RlcyA9PT0gbnVsbCB8fFxuXHRcdFx0bW9kZXMgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0aXNBcnJheShtb2RlcykgPT09IGZhbHNlIHx8XG5cdFx0XHRtb2Rlcy5sZW5ndGggPT09IDBcblx0XHQpIHtcblx0XHRcdG1vZGVzID0gW1wibWFudWFsXCJdO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgWywgbW9kZV0gb2YgT2JqZWN0LmVudHJpZXMobW9kZXMpKSB7XG5cdFx0XHRpbml0RXZlbnRIYW5kbGVyQnlNb2RlLmNhbGwodGhpcywgbW9kZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgbWVzc2FnZVxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xIVE1MRWxlbWVudH1tZXNzYWdlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWNvblxuXHQgKiBAcmV0dXJuIHtNZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqL1xuXHRzZXRNZXNzYWdlKG1lc3NhZ2UsIHRpdGxlLCBpY29uKSB7XG5cdFx0aWYgKGlzU3RyaW5nKG1lc3NhZ2UpKSB7XG5cdFx0XHRpZiAobWVzc2FnZSA9PT0gXCJcIikge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwibWVzc2FnZSBtdXN0IG5vdCBiZSBlbXB0eVwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY29udGFpbmVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2VEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0Y29uc3QgdGl0bGVEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0dGl0bGVEaXYuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFLCBcIm1lc3NhZ2UtdGl0bGUtYm94XCIpO1xuXG5cdFx0XHRsZXQgdGl0bGVFbGVtZW50LCBpY29uRWxlbWVudDtcblx0XHRcdGlmICh0aXRsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRpdGxlID0gdmFsaWRhdGVTdHJpbmcodGl0bGUpO1xuXHRcdFx0XHR0aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0XHR0aXRsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJcIik7XG5cdFx0XHRcdHRpdGxlRWxlbWVudC5pbm5lckhUTUwgPSB0aXRsZTtcblx0XHRcdFx0dGl0bGVFbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSwgXCJtZXNzYWdlLXRpdGxlXCIpO1xuXHRcdFx0XHR0aXRsZURpdi5hcHBlbmRDaGlsZCh0aXRsZUVsZW1lbnQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaWNvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGljb24gPSB2YWxpZGF0ZVN0cmluZyhpY29uKTtcblx0XHRcdFx0aWNvbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0XHRpY29uRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcIlwiKTtcblx0XHRcdFx0aWNvbkVsZW1lbnQuaW5uZXJIVE1MID0gaWNvbjtcblx0XHRcdFx0aWNvbkVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFLCBcIm1lc3NhZ2UtaWNvblwiKTtcblx0XHRcdFx0dGl0bGVEaXYuYXBwZW5kQ2hpbGQoaWNvbkVsZW1lbnQpO1xuXHRcdFx0fVxuXG5cdFx0XHRtZXNzYWdlRGl2LmlubmVySFRNTCA9IG1lc3NhZ2U7XG5cdFx0XHRjb250YWluZXJEaXYuYXBwZW5kQ2hpbGQodGl0bGVEaXYpO1xuXHRcdFx0Y29udGFpbmVyRGl2LmFwcGVuZENoaWxkKG1lc3NhZ2VEaXYpO1xuXG5cdFx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2UuY29udGVudFwiLCBjb250YWluZXJEaXYpO1xuXHRcdH0gZWxzZSBpZiAobWVzc2FnZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2UuY29udGVudFwiLCBtZXNzYWdlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdFx0XCJtZXNzYWdlIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnRcIixcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogY2xlYXJzIHRoZSBNZXNzYWdlXG5cdCAqXG5cdCAqIEByZXR1cm4ge01lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICovXG5cdGNsZWFyTWVzc2FnZSgpIHtcblx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2UudGl0bGVcIiwgdW5kZWZpbmVkKTtcblx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2UuY29udGVudFwiLCB1bmRlZmluZWQpO1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZS5pY29uXCIsIHVuZGVmaW5lZCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogV2l0aCB0aGlzIG1ldGhvZCB5b3UgY2FuIHNob3cgdGhlIHBvcHBlciB3aXRoIHRpbWVvdXQgZmVhdHVyZS5cblx0ICpcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRcblx0ICogQHJldHVybiB7TWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKi9cblx0c2hvd01lc3NhZ2UodGltZW91dCkge1xuXHRcdHRoaXMuc2hvd0RpYWxvZy5jYWxsKHRoaXMpO1xuXG5cdFx0aWYgKHRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHN1cGVyLmhpZGVEaWFsb2coKTtcblx0XHRcdH0sIHRpbWVvdXQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpdGggdGhpcyBtZXRob2QgeW91IGNhbiBzaG93IHRoZSBwb3BwZXIuXG5cdCAqXG5cdCAqIEByZXR1cm4ge01lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICovXG5cdHNob3dEaWFsb2coKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwibWVzc2FnZS5jb250ZW50XCIpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0c3VwZXIuc2hvd0RpYWxvZygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICovXG5cdGhpZGVNZXNzYWdlKCkge1xuXHRcdHN1cGVyLmhpZGVEaWFsb2coKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqL1xuXHR0b2dnbGVNZXNzYWdlKCkge1xuXHRcdHN1cGVyLnRvZ2dsZURpYWxvZygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge09iamVjdH1cblx0ICovXG5cdGdldE1lc3NhZ2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKFwibWVzc2FnZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItbWVzc2FnZS1zdGF0ZS1idXR0b25cIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtBcnJheTxDU1NTdHlsZVNoZWV0Pn1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdGNvbnN0IHN0eWxlcyA9IFBvcHBlci5nZXRDU1NTdHlsZVNoZWV0KCk7XG5cdFx0c3R5bGVzLnB1c2goU3RhdGVCdXR0b25TdHlsZVNoZWV0KTtcblx0XHRzdHlsZXMucHVzaChNZXNzYWdlU3RhdGVCdXR0b25TdHlsZVNoZWV0KTtcblx0XHRyZXR1cm4gc3R5bGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uY2xpY2soKSBtZXRob2Qgc2ltdWxhdGVzIGEgY2xpY2sgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9jbGlja31cblx0ICovXG5cdGNsaWNrKCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmNsaWNrKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmZvY3VzKCkgbWV0aG9kIHNldHMgZm9jdXMgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9mb2N1c31cblx0ICovXG5cdGZvY3VzKG9wdGlvbnMpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5mb2N1cylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMob3B0aW9ucyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uYmx1cigpIG1ldGhvZCByZW1vdmVzIGZvY3VzIGZyb20gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKi9cblx0Ymx1cigpIHtcblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYmx1cilcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYmx1cigpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyQnlNb2RlKG1vZGUpIHtcblx0c3dpdGNoIChtb2RlKSB7XG5cdFx0Y2FzZSBcIm1hbnVhbFwiOlxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIsIChlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNhbGxiYWNrID0gdGhpcy5nZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIpO1xuXHRcdFx0XHRpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRcdFx0XHRjYWxsYmFjayhlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJzdWJtaXRcIjpcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiLCAoZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBmb3JtID0gdGhpcy5mb3JtO1xuXG5cdFx0XHRcdGlmIChmb3JtIGluc3RhbmNlb2YgSFRNTEZvcm1FbGVtZW50KSB7XG5cdFx0XHRcdFx0Zm9ybS5yZXF1ZXN0U3VibWl0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRicmVhaztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09YnV0dG9uXWAsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuXG4gICAgICAgICAgICA8bW9uc3Rlci1zdGF0ZS1idXR0b24gZXhwb3J0cGFydHM9XCJidXR0b246YnV0dG9uLWJ1dHRvbixjb250cm9sOmJ1dHRvbi1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1vcHRpb24tY2xhc3Nlcy1idXR0b24gcGF0aDpjbGFzc2VzLmJ1dHRvbiwgZGlzYWJsZWQgcGF0aDpmZWF0dXJlcy5kaXNhYmxlQnV0dG9uIHwgaWY6dHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydD1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmJ1dHRvblwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvbW9uc3Rlci1zdGF0ZS1idXR0b24+XG5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJtb25zdGVyLWNvbG9yLXByaW1hcnktMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJhcnJvd1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJtZXNzYWdlXCIgcGFydD1cIm1lc3NhZ2VcIiBjbGFzcz1cImZsZXhcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm1lc3NhZ2UuY29udGVudFwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoTWVzc2FnZVN0YXRlQnV0dG9uKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfUk9MRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgdHlwZU9mIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVvZi5tanNcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuL2J1dHRvbi5tanNcIjtcbmltcG9ydCB7IFBvcHBlckJ1dHRvbiB9IGZyb20gXCIuL3BvcHBlci1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBDb25maXJtQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvY29uZmlybS1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcblxuaW1wb3J0IFwiLi9idXR0b24ubWpzXCI7XG5pbXBvcnQgXCIuL21lc3NhZ2Utc3RhdGUtYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgUG9wcGVyQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvcG9wcGVyLWJ1dHRvbi5tanNcIjtcbmltcG9ydCB7IFN0YXRlQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc3RhdGUtYnV0dG9uLm1qc1wiO1xuXG5leHBvcnQgeyBDb25maXJtQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29uZmlybUJ1dHRvbkVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNhbmNlbEJ1dHRvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjYW5jZWxCdXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIFRoaXMgYWN0aW9uIGNhbGxiYWNrIGV4ZWN1dGVzIHRoZSBhY3Rpb25zIHdoZW4gYSBidXR0b24gaXMgY2xpY2tlZC5cbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1+ZXhhbXBsZUFjdGlvbkNhbGxiYWNrXG4gKiBAcGFyYW0ge0V2ZW50fSBlIEV2ZW50XG4gKiBAdGhpcyB7Q3VzdG9tQ29udHJvbH1cbiAqL1xuXG4vKipcbiAqIFRoaXMgQ3VzdG9tQ29udHJvbCBjcmVhdGVzIGEgY29uZmlybSBidXR0b24gZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvY29uZmlybS1idXR0b24ucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKiBhcyB3ZWxsIGFzIFtwb29wZXJqc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLWNvbmZpcm0tYnV0dG9uIC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItY29uZmlybS1idXR0b24+PC9tb25zdGVyLWNvbmZpcm0tYnV0dG9uPlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCB7Q29uZmlybUJ1dHRvbn0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL2NvbmZpcm0tYnV0dG9uLmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY29uZmlybS1idXR0b24nKTtcbiAqIGBgYFxuICogVGhlIGBkYXRhLW1vbnN0ZXItYnV0dG9uLWNsYXNzYCBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBDU1MgY2xhc3Mgb2YgdGhlIGJ1dHRvbi5cbiAqXG4gKiBAc3RhcnR1bWwgY29uZmlybS1idXR0b24ucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDdXN0b21Db250cm9sXG4gKiBDdXN0b21Db250cm9sIDx8LS0gQnV0dG9uXG4gKiBCdXR0b24gPHwtLSBQb3BwZXJCdXR0b25cbiAqIFBvcHBlckJ1dHRvbiA8fC0tIENvbmZpcm1CdXR0b25cbiAqIEBlbmR1bWxcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBjb25maXJtIGJ1dHRvblxuICovXG5cbi8qKlxuICogQSBjb25maXJtIGJ1dHRvbiBjb250cm9sLlxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2Zvcm0vY29uZmlybS1idXR0b24vXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9jb25maXJtLWJ1dHRvbi1zaW1wbGUgY29uZmlybSBidXR0b25cbiAqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGNvbmZpcm0gYnV0dG9uIGNvbnRyb2xcbiAqL1xuY2xhc3MgQ29uZmlybUJ1dHRvbiBleHRlbmRzIFBvcHBlckJ1dHRvbiB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcblx0XHRcdFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vY29uZmlybS1idXR0b25AQGluc3RhbmNlXCIsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0b2dnbGVFdmVudFR5cGU9Y2xpY2ssdG91Y2ggTGlzdCBvZiBldmVudCB0eXBlcyB0byBiZSBvYnNlcnZlZCBmb3Igb3BlbmluZyB0aGUgY29uZmlybSBtZXNzYWdlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5idXR0b249JzxzbG90IG5hbWU9XCJidXR0b25cIj48L3Nsb3Q+JyBCdXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5tZXNzYWdlPSc8c2xvdD5TaG91bGQgSSBTdGF5IG9yIFNob3VsZCBJIEdvPzwvc2xvdD4nIE1lc3NhZ2Vcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5jb25maXJtPSc8c2xvdCBuYW1lPVwiY29uZmlybVwiPkNvbmZpcm08L3Nsb3Q+JyBDb25maXJtIGJ1dHRvbiBsYWJlbFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLmNhbmNlbD0nPHNsb3QgbmFtZT1cImNhbmNlbFwiPkNhbmNlbDwvc2xvdD4nIENhbmNlbCBidXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlQWN0aW9uQ2FsbGJhY2t9IGFjdGlvbnMuY29uZmlybVxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVBY3Rpb25DYWxsYmFja30gYWN0aW9ucy5jYW5jZWwgTGlzdCBvZiBldmVudCB0eXBlcyB0byBiZSBvYnNlcnZlZCBmb3Igb3BlbmluZyB0aGUgZHJvcGRvd25cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHBvcHBlciBbUG9wcGVySlMgT3B0aW9uc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcG9wcGVyLnBsYWNlbWVudD10b3AgUG9wcGVySlMgcGxhY2VtZW50XG5cdCAqIEBleHRlbmRzIHtQb3BwZXJCdXR0b259XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0Y29uc3Qgb2JqID0gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRidXR0b246ICc8c2xvdCBuYW1lPVwiYnV0dG9uXCI+PC9zbG90PicsXG5cdFx0XHRcdG1lc3NhZ2U6IFwiPHNsb3Q+U2hvdWxkIEkgU3RheSBvciBTaG91bGQgSSBHbz88L3Nsb3Q+XCIsXG5cdFx0XHRcdGNvbmZpcm06ICc8c2xvdCBuYW1lPVwiY29uZmlybVwiPkNvbmZpcm08L3Nsb3Q+Jyxcblx0XHRcdFx0Y2FuY2VsOiAnPHNsb3QgbmFtZT1cImNhbmNlbFwiPkNhbmNlbDwvc2xvdD4nLFxuXHRcdFx0fSxcblx0XHR9KTtcblxuXHRcdG9ialtcImNsYXNzZXNcIl1bXCJjb25maXJtQnV0dG9uXCJdID0gXCJtb25zdGVyLWJ1dHRvbi1wcmltYXJ5XCI7XG5cdFx0b2JqW1wiY2xhc3Nlc1wiXVtcImNhbmNlbEJ1dHRvblwiXSA9IFwibW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5XCI7XG5cdFx0b2JqW1wiYWN0aW9uc1wiXVtcImNhbmNlbFwiXSA9IChlKSA9PiB7XG5cdFx0XHR0aGlzLmhpZGVEaWFsb2coKTtcblx0XHR9O1xuXG5cdFx0b2JqW1wiYWN0aW9uc1wiXVtcImNvbmZpcm1cIl0gPSAoZSkgPT4ge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhpcyBjYWxsYmFjayBtdXN0IGJlIGltcGxlbWVudGVkXCIpO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0aGlkZURpYWxvZygpIHtcblx0XHRzdXBlci5oaWRlRGlhbG9nKCk7XG5cdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0ucmVtb3ZlU3RhdGUoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJCdXR0b259XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudGhhbmRsZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItY29uZmlybS1idXR0b25cIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtBcnJheX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdGNvbnN0IHN0eWxlcyA9IFBvcHBlckJ1dHRvbi5nZXRDU1NTdHlsZVNoZWV0KCk7XG5cdFx0c3R5bGVzLnB1c2goQ29uZmlybUJ1dHRvblN0eWxlU2hlZXQpO1xuXHRcdHJldHVybiBzdHlsZXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUG9wcGVyQnV0dG9ufVxuXHQgKi9cblx0c2hvd0RpYWxvZygpIHtcblx0XHRjb25zdCBjb25maXJtQnV0dG9uQ2xhc3MgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuY29uZmlybUJ1dHRvblwiKTtcblx0XHRpZiAoY29uZmlybUJ1dHRvbkNsYXNzKSB7XG5cdFx0XHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XHRcdFwiY2xhc3Nlcy5idXR0b25cIixcblx0XHRcdFx0Y29uZmlybUJ1dHRvbkNsYXNzLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCBjYW5jZWxCdXR0b25DbGFzcyA9IHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5jYW5jZWxCdXR0b25cIik7XG5cdFx0aWYgKGNhbmNlbEJ1dHRvbkNsYXNzKSB7XG5cdFx0XHR0aGlzW2NhbmNlbEJ1dHRvbkVsZW1lbnRTeW1ib2xdLnNldE9wdGlvbihcblx0XHRcdFx0XCJjbGFzc2VzLmJ1dHRvblwiLFxuXHRcdFx0XHRjYW5jZWxCdXR0b25DbGFzcyxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHN1cGVyLnNob3dEaWFsb2coKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGNvbmZpcm0gYnV0dG9uIHN0YXRlXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZVxuXHQgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Db25maXJtQnV0dG9ufVxuXHQgKi9cblx0c2V0Q29uZmlybUJ1dHRvblN0YXRlKHN0YXRlLCB0aW1lb3V0KSB7XG5cdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0U3RhdGUoc3RhdGUsIHRpbWVvdXQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBhbmQgc2hvdyB0aGUgY29uZmlybSBidXR0b24gbWVzc2FnZVxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuXHQgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Db25maXJtQnV0dG9ufVxuXHQgKi9cblx0c2hvd0NvbmZpcm1CdXR0b25NZXNzYWdlKG1lc3NhZ2UsIHRpbWVvdXQpIHtcblx0XHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRNZXNzYWdlKG1lc3NhZ2UpO1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2hvd01lc3NhZ2UodGltZW91dCk7XG5cdFx0fSwgMCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHR5cGVcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBnZXRBY3Rpb24odHlwZSkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSBzZWxmLmdldE9wdGlvbihgYWN0aW9ucy4ke3R5cGV9YCk7XG5cdFx0aWYgKHR5cGVPZihjYWxsYmFjaykgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNhbGxiYWNrLmNhbGwodGhpcywgZXZlbnQpO1xuXHR9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtpbml0RXZlbnRoYW5kbGVyfVxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlckJ1dHRvbiNtb25zdGVyLWNvbmZpcm1cbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJCdXR0b24jbW9uc3Rlci1jb25maXJtZWRcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50aGFuZGxlcigpIHtcblx0dGhpc1tjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XCJjbGlja0V2ZW50VHlwZVwiLFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiY2xpY2tFdmVudFR5cGVcIiwgW1wiY2xpY2tcIl0pLFxuXHQpO1xuXHR0aGlzW2NhbmNlbEJ1dHRvbkVsZW1lbnRTeW1ib2xdLnNldE9wdGlvbihcblx0XHRcImFjdGlvbnMuY2xpY2tcIixcblx0XHRnZXRBY3Rpb24uY2FsbCh0aGlzLCBcImNhbmNlbFwiKSxcblx0KTtcblxuXHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XCJjbGlja0V2ZW50VHlwZVwiLFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiY2xpY2tFdmVudFR5cGVcIiwgW1wiY2xpY2tcIl0pLFxuXHQpO1xuXHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIsICgpID0+IHtcblx0XHRjb25zdCBjYWxsYmFjayA9IGdldEFjdGlvbi5jYWxsKHRoaXMsIFwiY29uZmlybVwiKTtcblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLWNvbmZpcm1cIiwge30pO1xuXHRcdGNhbGxiYWNrLmNhbGwodGhpcyk7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1jb25maXJtZWRcIiwge30pO1xuXHR9KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbY29uZmlybUJ1dHRvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb25maXJtXWAsXG5cdCk7XG5cdHRoaXNbY2FuY2VsQnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNhbmNlbF1gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRpc2FibGVkIHBhdGg6ZGlzYWJsZWQgfCBpZjp0cnVlLCBjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBwYXJ0PVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b25cIj48L2J1dHRvbj5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJtb25zdGVyLWNvbG9yLXByaW1hcnktMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJhcnJvd1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cIm1lc3NhZ2VcIiBjbGFzcz1cImZsZXhcIiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLm1lc3NhZ2VcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiZGVjaXNpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPG1vbnN0ZXItbWVzc2FnZS1zdGF0ZS1idXR0b24gZXhwb3J0cGFydHM9XCJtb25zdGVyLXN0YXRlLWJ1dHRvbjpjb25maXJtLWJ1dHRvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w6Y29uZmlybS1jb250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLWJ1dHRvbjpjb25maXJtLWNvbnRyb2wtYnV0dG9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLWNvbnRyb2w6Y29uZmlybS1idXR0b24tY29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHBlcjpjb25maXJtLXBvcHBlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6Y29uZmlybS1wb3BwZXItbWVzc2FnZS1tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjpjb25maXJtLXBvcHBlci1tZXNzYWdlLWljb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTpjb25maXJtLXBvcHBlci1tZXNzYWdlLXRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItYnV0dG9uLWNsYXNzIHBhdGg6Y2xhc3Nlcy5jb25maXJtQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjb25maXJtXCIgcGFydD1cImNvbmZpcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuY29uZmlybVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tb25zdGVyLW1lc3NhZ2Utc3RhdGUtYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgIDxtb25zdGVyLWJ1dHRvbiBleHBvcnRwYXJ0cz1cImJ1dHRvbjpjYW5jZWwtYnV0dG9uLGNvbnRyb2w6Y2FuY2VsLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItYnV0dG9uLWNsYXNzIHBhdGg6Y2xhc3Nlcy5jYW5jZWxCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjYW5jZWxcIiBwYXJ0PVwiY2FuY2VsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmNhbmNlbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tb25zdGVyLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoQ29uZmlybUJ1dHRvbik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNBcnJheSwgaXNJbnN0YW5jZSB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gXCIuL25vZGUubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBOb2RlTGlzdCB9O1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIHRoZSBpbnN0YW5jZSB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5UeXBlcy5Ob2RlTGlzdCgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI2LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIE5vZGVMaXN0IGNsYXNzXG4gKi9cbmNsYXNzIE5vZGVMaXN0IGV4dGVuZHMgU2V0IHtcblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBpbnZhbGlkIHZhbHVlIHR5cGVcblx0ICogQHBhcmFtIHtOb2RlTGlzdHxOb2RlfEFycmF5PE5vZGU+fXZhbHVlc1xuXHQgKi9cblx0Y29uc3RydWN0b3IodmFsdWVzKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG5cdFx0aWYgKGlzQXJyYXkodmFsdWVzKSkge1xuXHRcdFx0dmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB0aGlzLmFkZCh2YWx1ZSkpO1xuXHRcdH0gZWxzZSBpZiAoaXNJbnN0YW5jZSh2YWx1ZXMsIE5vZGVMaXN0KSkge1xuXHRcdFx0dmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB0aGlzLmFkZCh2YWx1ZSkpO1xuXHRcdH0gZWxzZSBpZiAoaXNJbnN0YW5jZSh2YWx1ZXMsIE5vZGUpKSB7XG5cdFx0XHR0aGlzLmFkZCh2YWx1ZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHZhbHVlIHR5cGVcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9ub2RlLWxpc3RcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuVHlwZXMuTm9kZUxpc3R9XG5cdCAqL1xuXHRhZGQobm9kZSkge1xuXHRcdHN1cGVyLmFkZCh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICogQHJldHVybiB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRyZW1vdmUobm9kZSkge1xuXHRcdHN1cGVyLmRlbGV0ZSh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGhhcyhub2RlKSB7XG5cdFx0cmV0dXJuIHN1cGVyLmhhcyh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtOb2RlTGlzdH1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHN1cGVyLmNsZWFyKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Tm9kZUxpc3R9XG5cdCAqL1xuXHR0b0FycmF5KCkge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge05vZGVMaXN0fVxuXHQgKi9cblx0dG9KU09OKCkge1xuXHRcdHJldHVybiB0aGlzLnRvQXJyYXkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtOb2RlTGlzdH1cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdGNvbnN0IHBhcnRzID0gW107XG5cblx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy50b0FycmF5KCkpIHtcblx0XHRcdHBhcnRzLnB1c2gobm9kZS50b1N0cmluZygpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcGFydHMuam9pbihcIlxcblwiKTtcblx0fVxuXG5cdGdldCBsZW5ndGgoKSB7XG5cdFx0cmV0dXJuIHN1cGVyLnNpemU7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzUHJpbWl0aXZlIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBOb2RlTGlzdCB9IGZyb20gXCIuL25vZGVsaXN0Lm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBOb2RlIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVybmFsVmFsdWVTeW1ib2wgPSBTeW1ib2woXCJpbnRlcm5hbERhdGFcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRyZWVTdHJ1Y3R1cmVTeW1ib2wgPSBTeW1ib2woXCJ0cmVlU3RydWN0dXJlXCIpO1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIHRoZSBpbnN0YW5jZSB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5UeXBlcy5Ob2RlKClgLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgTm9kZSBDbGFzc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kZS9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9JdGVyYXRpb25fcHJvdG9jb2xzXG4gKi9cbmNsYXNzIE5vZGUgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7Kn0gW3ZhbHVlXVxuXHQgKi9cblx0Y29uc3RydWN0b3IodmFsdWUpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF0gPSB2YWx1ZTtcblxuXHRcdHRoaXNbdHJlZVN0cnVjdHVyZVN5bWJvbF0gPSB7XG5cdFx0XHRwYXJlbnQ6IG51bGwsXG5cdFx0XHRjaGlsZE5vZGVzOiBuZXcgTm9kZUxpc3QoKSxcblx0XHRcdGxldmVsOiAwLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL25vZGVcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHsqfVxuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsVmFsdWVTeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7Kn1cblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF0gPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuVHlwZXMuTm9kZXxudWxsfVxuXHQgKi9cblx0Z2V0IHBhcmVudCgpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQ7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtpbnRlZ2VyfVxuXHQgKi9cblx0Z2V0IGxldmVsKCkge1xuXHRcdHJldHVybiB0aGlzW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmxldmVsO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRnZXQgY2hpbGROb2RlcygpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRzZXQgY2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG5cdFx0dGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzID0gdmFsaWRhdGVJbnN0YW5jZShcblx0XHRcdGNoaWxkTm9kZXMsXG5cdFx0XHROb2RlTGlzdCxcblx0XHQpO1xuXHRcdHNldENoaWxkTGV2ZWxBbmRQYXJlbnQuY2FsbCh0aGlzLCB0aGlzLCAxLCBuZXcgU2V0KCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuVHlwZXMuTm9kZX1cblx0ICogQHBhcmFtIHtOb2RlfSBub2RlXG5cdCAqL1xuXHRhcHBlbmRDaGlsZChub2RlKSB7XG5cdFx0dGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmFkZCh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0XHRub2RlW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLnBhcmVudCA9IHRoaXM7XG5cblx0XHRub2RlW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmxldmVsID0gdGhpcy5sZXZlbCArIDE7XG5cdFx0c2V0Q2hpbGRMZXZlbEFuZFBhcmVudC5jYWxsKHRoaXMsIG5vZGUsIDEsIG5ldyBTZXQoKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Ob2RlfVxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICovXG5cdHJlbW92ZUNoaWxkKG5vZGUpIHtcblx0XHR0aGlzW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmNoaWxkTm9kZXMucmVtb3ZlKHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSkpO1xuXHRcdG5vZGVbdHJlZVN0cnVjdHVyZVN5bWJvbF0ucGFyZW50ID0gbnVsbDtcblxuXHRcdG5vZGVbdHJlZVN0cnVjdHVyZVN5bWJvbF0ubGV2ZWwgPSAwO1xuXHRcdHNldENoaWxkTGV2ZWxBbmRQYXJlbnQuY2FsbCh0aGlzLCBub2RlLCAtMSwgbmV3IFNldCgpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aGFzQ2hpbGROb2RlcygpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmxlbmd0aCA+IDA7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Ob2RlfVxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICovXG5cdGhhc0NoaWxkKG5vZGUpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmhhcyhcblx0XHRcdHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMS4yOC4wXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdGNvbnN0IHBhcnRzID0gW107XG5cdFx0aWYgKHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF0pIHtcblx0XHRcdGxldCBsYWJlbCA9IHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF07XG5cdFx0XHRpZiAoIWlzUHJpbWl0aXZlKGxhYmVsKSlcblx0XHRcdFx0bGFiZWwgPSBKU09OLnN0cmluZ2lmeSh0aGlzW2ludGVybmFsVmFsdWVTeW1ib2xdKTtcblxuXHRcdFx0cGFydHMucHVzaChsYWJlbCk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0cmV0dXJuIHBhcnRzLmpvaW4oXCJcXG5cIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY291bnQgPSB0aGlzLmNoaWxkTm9kZXMubGVuZ3RoO1xuXHRcdGxldCBjb3VudGVyID0gMDtcblxuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLmNoaWxkTm9kZXMpIHtcblx0XHRcdGNvdW50ZXIrKztcblx0XHRcdGNvbnN0IHByZWZpeCA9IChjb3VudCA9PT0gY291bnRlciA/IFwiXHUyNTE0XCIgOiBcIlx1MjUxQ1wiKS5wYWRTdGFydChcblx0XHRcdFx0MiAqIG5vZGUubGV2ZWwsXG5cdFx0XHRcdFwiIHxcIixcblx0XHRcdCk7XG5cdFx0XHRwYXJ0cy5wdXNoKHByZWZpeCArIG5vZGUudG9TdHJpbmcoKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBhcnRzLmpvaW4oXCJcXG5cIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiBAcGFyYW0ge2ludH0gb3BlcmFuZFxuICogQHBhcmFtIHtTZXR9IHZpc2l0ZWROb2Rlc1xuICogQHJldHVybiB7c2V0Q2hpbGRMZXZlbEFuZFBhcmVudH1cbiAqL1xuZnVuY3Rpb24gc2V0Q2hpbGRMZXZlbEFuZFBhcmVudChub2RlLCBvcGVyYW5kLCB2aXNpdGVkTm9kZXMpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0aWYgKHZpc2l0ZWROb2Rlcy5oYXMobm9kZSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcInRoZSBub2RlIGhhcyBhbHJlYWR5IGJlZW4gdmlzaXRlZCBhbmQgY2Fubm90IGJlIHRyYXZlcnNlZCBhZ2FpblwiLFxuXHRcdCk7XG5cdH1cblxuXHR2aXNpdGVkTm9kZXMuYWRkKG5vZGUpO1xuXG5cdGlmIChub2RlICE9PSB0aGlzKSB7XG5cdFx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQgPSB0aGlzO1xuXHR9XG5cblx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG5cdFx0Y2hpbGRbdHJlZVN0cnVjdHVyZVN5bWJvbF0ucGFyZW50ID0gbm9kZTtcblx0XHRjaGlsZFt0cmVlU3RydWN0dXJlU3ltYm9sXS5sZXZlbCA9XG5cdFx0XHRub2RlW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmxldmVsICsgb3BlcmFuZDtcblx0XHRzZXRDaGlsZExldmVsQW5kUGFyZW50LmNhbGwoc2VsZiwgY2hpbGQsIG9wZXJhbmQsIHZpc2l0ZWROb2Rlcyk7XG5cdH0pO1xuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE5vZGUgfSBmcm9tIFwiLi4vdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7IE5vZGVMaXN0IH0gZnJvbSBcIi4uL3R5cGVzL25vZGVsaXN0Lm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7IGFzc2VtYmxlUGFydHMgfSBmcm9tIFwiLi9idWlsZG1hcC5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuL2V4dGVuZC5tanNcIjtcblxuZXhwb3J0IHsgYnVpbGRUcmVlIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBhcmVudFN5bWJvbCA9IFN5bWJvbChcInBhcmVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgcm9vdFN5bWJvbCA9IFN5bWJvbChcInJvb3RcIik7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gYnVpbGRUcmVlT3B0aW9uc1xuICogQHByb3BlcnR5IHthcnJheX0gb3B0aW9ucy5yb290UmVmZXJlbmNlcz1bbnVsbCwgdW5kZWZpbmVkXSBkZWZpbmVzIHRoZSB2YWx1ZXMgZm9yIGVsZW1lbnRzIHdpdGhvdXQgcGFyZW50c1xuICogQHByb3BlcnR5IHtNb25zdGVyLkRhdGF+ZXhhbXBsZUZpbHRlckNhbGxiYWNrfSBvcHRpb25zLmZpbHRlciBmaWx0ZXJpbmcgb2YgdGhlIHZhbHVlc1xuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhIHRyZWUgc3RydWN0dXJlIGZyb20gYSBnaXZlbiBzdWJqZWN0IHVzaW5nIGEgc2VsZWN0b3IgYW5kIHNwZWNpZmllZCBJRCBhbmQgcGFyZW50IElEIGtleXMuXG4gKlxuICogVGhlIGJ1aWxkVHJlZSBmdW5jdGlvbiBpcyBhIHBvd2VyZnVsIHRvb2wgZm9yIGNyZWF0aW5nIHRyZWUtbGlrZSBkYXRhIHN0cnVjdHVyZXMgZnJvbSBwbGFpbiBKYXZhU2NyaXB0XG4gKiBvYmplY3RzLiBJdCB0YWtlcyBpbiBmb3VyIHJlcXVpcmVkIHBhcmFtZXRlcnM6IHRoZSBzdWJqZWN0IG9iamVjdCB0aGF0IHlvdSB3YW50IHRvIHR1cm4gaW50byBhIHRyZWUsIGFcbiAqIHNlbGVjdG9yIHRoYXQgaWRlbnRpZmllcyB3aGljaCBwYXJ0cyBvZiB0aGUgc3ViamVjdCB0byB1c2Ugd2hlbiBidWlsZGluZyB0aGUgdHJlZSwgYW5kIHR3byBrZXlzXG4gKiAoaWRLZXkgYW5kIHBhcmVudElES2V5KSB0aGF0IHNwZWNpZnkgd2hpY2ggcHJvcGVydGllcyBpbiB0aGUgc3ViamVjdCByZXByZXNlbnQgdGhlIHVuaXF1ZSBpZGVudGlmaWVyc1xuICogYW5kIHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gbm9kZXMgaW4gdGhlIHRyZWUuXG4gKlxuICogT3B0aW9uYWxseSwgeW91IGNhbiBhbHNvIHBhc3MgaW4gYW4gb3B0aW9ucyBvYmplY3QgdG8gZnVydGhlciBjb25maWd1cmUgdGhlIGJlaGF2aW9yIG9mIHRoZSBmdW5jdGlvbixcbiAqIHN1Y2ggYXMgc3BlY2lmeWluZyB3aGljaCB2YWx1ZXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgcm9vdHMgb2YgdGhlIHRyZWUsIG9yIHByb3ZpZGluZyBhIGN1c3RvbSBmaWx0ZXJcbiAqIGZ1bmN0aW9uIHRvIG9ubHkgaW5jbHVkZSBjZXJ0YWluIG5vZGVzIGluIHRoZSBmaW5hbCBvdXRwdXQuXG4gKlxuICogVGhlIGJ1aWxkVHJlZSBmdW5jdGlvbiB3b3JrcyBieSBmaXJzdCB1c2luZyB0aGUgYXNzZW1ibGVQYXJ0cyBoZWxwZXIgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUgcmVsZXZhbnRcbiAqIHBhcnRzIG9mIHRoZSBzdWJqZWN0IGJhc2VkIG9uIHRoZSBzZWxlY3RvciwgYW5kIHRoZW4gaXRlcmF0ZXMgb3ZlciB0aGUgcmVzdWx0aW5nIG1hcCB0byBjcmVhdGUgTm9kZVxuICogb2JqZWN0cyBhbmQgb3JnYW5pemUgdGhlbSBpbnRvIHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXBzIGJhc2VkIG9uIHRoZSB2YWx1ZXMgb2YgdGhlIGlkS2V5IGFuZCBwYXJlbnRJREtleSBwcm9wZXJ0aWVzLlxuICpcbiAqIFRoZSByZXN1bHRpbmcgTm9kZUxpc3QgcmVwcmVzZW50cyB0aGUgdHJlZSBzdHJ1Y3R1cmUsIHdpdGggZWFjaCBOb2RlIG9iamVjdCBjb250YWluaW5nIHRoZSBvcmlnaW5hbFxuICogb2JqZWN0IGRhdGEgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIG1ldGFkYXRhIGFib3V0IGl0cyBwb3NpdGlvbiBpbiB0aGUgdHJlZS4gWW91IGNhbiB0aGVuIHVzZSB0aGUgY2hpbGROb2Rlc1xuICogcHJvcGVydHkgb2YgZWFjaCBOb2RlIHRvIGFjY2VzcyBpdHMgY2hpbGRyZW4sIG9yIHRoZSBwYXJlbnQgcHJvcGVydHkgdG8gYWNjZXNzIGl0cyBwYXJlbnQuXG4gKlxuICogT3ZlcmFsbCwgdGhlIGJ1aWxkVHJlZSBmdW5jdGlvbiBpcyBhIGZsZXhpYmxlIGFuZCBwb3dlcmZ1bCB3YXkgdG8gdHJhbnNmb3JtIGZsYXQgZGF0YSBpbnRvIGhpZXJhcmNoaWNhbFxuICogc3RydWN0dXJlcywgYW5kIGNhbiBiZSBlc3BlY2lhbGx5IHVzZWZ1bCBpbiBzY2VuYXJpb3Mgc3VjaCBhcyBkaXNwbGF5aW5nIGZvbGRlciBzdHJ1Y3R1cmVzIG9yXG4gKiB2aXN1YWxpemluZyBjb21wbGV4IGRhdGEgcmVsYXRpb25zaGlwcy5cbiAqXG4gKiBMZXQncyBzYXkgeW91IGhhdmUgYW4gYXJyYXkgb2YgZGF0YSBvYmplY3RzIHJlcHJlc2VudGluZyBhIGZpbGUgc3lzdGVtIGRpcmVjdG9yeSBzdHJ1Y3R1cmUsIGFuZCB5b3Ugd2FudFxuICogdG8gdHVybiBpdCBpbnRvIGEgdHJlZS1saWtlIHN0cnVjdHVyZSB3aGVyZSBlYWNoIG5vZGUgcmVwcmVzZW50cyBhIGZvbGRlciBvciBmaWxlLCBhbmQgY2hpbGQgbm9kZXNcbiAqIHJlcHJlc2VudCB0aGUgY29udGVudHMgb2YgdGhlIGZvbGRlcjpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBjb25zdCBmaWxlU3lzdGVtID0gW1xuICogICB7IGlkOiAnZm9sZGVyMScsIG5hbWU6ICdGb2xkZXIgMScsIHR5cGU6ICdmb2xkZXInLCBwYXJlbnQ6IG51bGwgfSxcbiAqICAgeyBpZDogJ2ZpbGUxJywgbmFtZTogJ0ZpbGUgMScsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ2ZpbGUyJywgbmFtZTogJ0ZpbGUgMicsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ3N1YmZvbGRlcjEnLCBuYW1lOiAnU3ViZm9sZGVyIDEnLCB0eXBlOiAnZm9sZGVyJywgcGFyZW50OiAnZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ2ZpbGUzJywgbmFtZTogJ0ZpbGUgMycsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ2ZpbGU0JywgbmFtZTogJ0ZpbGUgNCcsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ3N1YmZvbGRlcjInLCBuYW1lOiAnU3ViZm9sZGVyIDInLCB0eXBlOiAnZm9sZGVyJywgcGFyZW50OiAnZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ2ZpbGU1JywgbmFtZTogJ0ZpbGUgNScsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMicgfSxcbiAqICAgeyBpZDogJ2ZpbGU2JywgbmFtZTogJ0ZpbGUgNicsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMicgfSxcbiAqICAgeyBpZDogJ2ZvbGRlcjInLCBuYW1lOiAnRm9sZGVyIDInLCB0eXBlOiAnZm9sZGVyJywgcGFyZW50OiBudWxsIH0sXG4gKiAgIHsgaWQ6ICdmaWxlNycsIG5hbWU6ICdGaWxlIDcnLCB0eXBlOiAnZmlsZScsIHBhcmVudDogJ2ZvbGRlcjInIH0sXG4gKiAgIHsgaWQ6ICdmaWxlOCcsIG5hbWU6ICdGaWxlIDgnLCB0eXBlOiAnZmlsZScsIHBhcmVudDogJ2ZvbGRlcjInIH0sXG4gKiAgIHsgaWQ6ICdzdWJmb2xkZXIzJywgbmFtZTogJ1N1YmZvbGRlciAzJywgdHlwZTogJ2ZvbGRlcicsIHBhcmVudDogJ2ZvbGRlcjInIH0sXG4gKiAgIHsgaWQ6ICdmaWxlOScsIG5hbWU6ICdGaWxlIDknLCB0eXBlOiAnZmlsZScsIHBhcmVudDogJ3N1YmZvbGRlcjMnIH0sXG4gKiAgIHsgaWQ6ICdmaWxlMTAnLCBuYW1lOiAnRmlsZSAxMCcsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMycgfSxcbiAqIF07XG4gKlxuICogY29uc3QgdHJlZSA9IGJ1aWxkVHJlZShmaWxlU3lzdGVtLCAnaWQnLCAnaWQnLCAncGFyZW50JywgeyByb290UmVmZXJlbmNlczogW251bGxdIH0pO1xuICpcbiAqIGNvbnNvbGUubG9nKHRyZWUudG9TdHJpbmcoKSk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgYnVpbGRUcmVlIGZ1bmN0aW9uIHRha2VzIGluIHRoZSBhcnJheSBvZiBkYXRhIG9iamVjdHMsIGFzIHdlbGwgYXMgc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3BlY2lmeWluZ1xuICogdGhlIGtleXMgdG8gdXNlIGZvciBpZGVudGlmeWluZyBub2RlcyBhbmQgdGhlaXIgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcHMuIEluIHRoaXMgZXhhbXBsZSwgd2UgdXNlIHRoZSBpZFxuICoga2V5IHRvIGlkZW50aWZ5IG5vZGVzLCBhbmQgdGhlIHBhcmVudCBrZXkgdG8gc3BlY2lmeSB0aGUgcGFyZW50IG9mIGVhY2ggbm9kZS5cbiAqXG4gKiBUaGUgcmVzdWx0aW5nIHRyZWUgb2JqZWN0IGlzIGEgbmVzdGVkIHRyZWUgc3RydWN0dXJlLCB3aGVyZSBlYWNoIG5vZGUgaXMgYW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIGZpbGUgb3JcbiAqIGZvbGRlciwgYW5kIGhhcyBjaGlsZCBub2RlcyByZXByZXNlbnRpbmcgaXRzIGNvbnRlbnRzLiBUaGUgdG9TdHJpbmcgbWV0aG9kIG9mIHRoZSB0cmVlIG9iamVjdFxuICogY2FuIGJlIHVzZWQgdG8gcHJpbnQgb3V0IHRoZSB0cmVlIGluIGEgcmVhZGFibGUgZm9ybWF0OlxuICpcbiAqIGBgYG1hcmtkb3duXG4gKiAtIEZvbGRlciAxXG4gKiAgIC0gRmlsZSAxXG4gKiAgIC0gRmlsZSAyXG4gKiAgIC0gU3ViZm9sZGVyIDFcbiAqICAgICAtIEZpbGUgM1xuICogICAgIC0gRmlsZSA0XG4gKiAgIC0gU3ViZm9sZGVyIDJcbiAqICAgICAtIEZpbGUgNVxuICogICAgIC0gRmlsZSA2XG4gKiAtIEZvbGRlciAyXG4gKiAgIC0gRmlsZSA3XG4gKiAgIC0gRmlsZSA4XG4gKiAgIC0gU3ViZm9sZGVyIDNcbiAqICAgICAtIEZpbGUgOVxuICogICAgIC0gRmlsZSAxMFxuICogYGBgXG4gKlxuICogQG1lbWJlcm9mIE1vbnN0ZXIuRGF0YVxuICpcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdCAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYnVpbGQgdGhlIHRyZWUgZnJvbS5cbiAqIEBwYXJhbSB7c3RyaW5nfE1vbnN0ZXIuRGF0YX5leGFtcGxlU2VsZWN0b3JDYWxsYmFja30gc2VsZWN0b3IgLSBFaXRoZXIgYSBzdHJpbmcgdG8gc3BlY2lmeSBhIHByb3BlcnR5IG9mIGVhY2ggb2JqZWN0IHRvIHVzZSBhcyBhIHNlbGVjdG9yLCBvciBhIHNlbGVjdG9yIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgbWFwIG9mIG9iamVjdHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gaWRLZXkgLSBUaGUgcHJvcGVydHkga2V5IHRvIHVzZSBhcyB0aGUgdW5pcXVlIElEIG9mIGVhY2ggbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRJREtleSAtIFRoZSBwcm9wZXJ0eSBrZXkgdG8gdXNlIGFzIHRoZSBwYXJlbnQgSUQgb2YgZWFjaCBub2RlLlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIEFkZGl0aW9uYWwgb3B0aW9ucyB0byBtb2RpZnkgdGhlIGZ1bmN0aW9uIGJlaGF2aW9yLlxuICogQHBhcmFtIHtBcnJheTwqPn0gW29wdGlvbnMucm9vdFJlZmVyZW5jZXM9W251bGwsIHVuZGVmaW5lZF1dIC0gQW4gYXJyYXkgb2YgdmFsdWVzIHRvIHRyZWF0IGFzIHJvb3QgcmVmZXJlbmNlcyB3aGVuIGNyZWF0aW5nIHRoZSB0cmVlLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gW29wdGlvbnMuZmlsdGVyXSAtIEEgZmlsdGVyIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggbm9kZS5cbiAqXG4gKiBAcmV0dXJuIHsqfSBUaGUgcmVzdWx0aW5nIHRyZWUgc3RydWN0dXJlIGFzIGEgTm9kZUxpc3QuXG4gKlxuICogQHRocm93cyB7VHlwZUVycm9yfSBzZWxlY3RvciBpcyBuZWl0aGVyIGEgc3RyaW5nIG5vciBhIGZ1bmN0aW9uLlxuICogQHRocm93cyB7VHlwZUVycm9yfSB0aGUgc2VsZWN0b3IgY2FsbGJhY2sgbXVzdCByZXR1cm4gYSBtYXAuXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9iamVjdCBoYXMgbm8gdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgaWQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKlxuICogQHNpbmNlIDEuMjYuMFxuICovXG5mdW5jdGlvbiBidWlsZFRyZWUoc3ViamVjdCwgc2VsZWN0b3IsIGlkS2V5LCBwYXJlbnRJREtleSwgb3B0aW9ucykge1xuXHRjb25zdCBub2RlcyA9IG5ldyBNYXAoKTtcblxuXHRjb25zdCBtYXhEZXB0aCA9IDEwMDtcblxuXHRpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB7XG5cdFx0b3B0aW9ucyA9IHt9O1xuXHR9XG5cblx0b3B0aW9ucyA9IGV4dGVuZChcblx0XHR7fSxcblx0XHR7XG5cdFx0XHRyb290UmVmZXJlbmNlczogW251bGwsIHVuZGVmaW5lZF0sXG5cdFx0XHRmaWx0ZXI6IHVuZGVmaW5lZCxcblx0XHR9LFxuXHRcdG9wdGlvbnMsXG5cdCk7XG5cblx0Y29uc3QgZmlsdGVyID0gb3B0aW9ucz8uZmlsdGVyO1xuXHRsZXQgcm9vdFJlZmVyZW5jZXMgPSBvcHRpb25zLnJvb3RSZWZlcmVuY2VzO1xuXHRpZiAoIWlzQXJyYXkocm9vdFJlZmVyZW5jZXMpKSB7XG5cdFx0cm9vdFJlZmVyZW5jZXMgPSBbcm9vdFJlZmVyZW5jZXNdO1xuXHR9XG5cblx0Y29uc3QgY2hpbGRNYXAgPSBhc3NlbWJsZVBhcnRzKHN1YmplY3QsIHNlbGVjdG9yLCBmaWx0ZXIsIGZ1bmN0aW9uIChvLCBrLCBtKSB7XG5cdFx0Y29uc3Qga2V5ID0gbz8uW2lkS2V5XTtcblx0XHRsZXQgcmVmID0gbz8uW3BhcmVudElES2V5XTtcblx0XHRpZiAocm9vdFJlZmVyZW5jZXMuaW5kZXhPZihyZWYpICE9PSAtMSkgcmVmID0gcm9vdFN5bWJvbDtcblxuXHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIG9iamVjdCBoYXMgbm8gdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgaWRcIik7XG5cdFx0fVxuXG5cdFx0b1twYXJlbnRTeW1ib2xdID0gcmVmO1xuXG5cdFx0Y29uc3Qgbm9kZSA9IG5ldyBOb2RlKG8pO1xuXHRcdHRoaXMuaGFzKHJlZilcblx0XHRcdD8gdGhpcy5nZXQocmVmKS5hZGQobm9kZSlcblx0XHRcdDogdGhpcy5zZXQocmVmLCBuZXcgTm9kZUxpc3QoKS5hZGQobm9kZSkpO1xuXHRcdG5vZGVzLnNldChrZXksIG5vZGUpO1xuXHR9KTtcblxuXHRub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0Y29uc3QgaWQgPSBub2RlPy5bXCJ2YWx1ZVwiXT8uW2lkS2V5XTtcblxuXHRcdGlmIChpZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgb2JqZWN0IGhhcyBubyB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBpZFwiKTtcblx0XHR9XG5cblx0XHRpZiAoY2hpbGRNYXAuaGFzKGlkKSkge1xuXHRcdFx0bm9kZS5jaGlsZE5vZGVzID0gY2hpbGRNYXAuZ2V0KGlkKTtcblx0XHRcdGNoaWxkTWFwLmRlbGV0ZShpZCk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBsaXN0ID0gbmV3IE5vZGVMaXN0KCk7XG5cblx0Y2hpbGRNYXAuZm9yRWFjaCgocykgPT4ge1xuXHRcdGlmIChzIGluc3RhbmNlb2YgU2V0KSB7XG5cdFx0XHRzLmZvckVhY2goKG4pID0+IHtcblx0XHRcdFx0bGlzdC5hZGQobik7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBsaXN0O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc0luc3RhbmNlIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSBcIi4vbm9kZS5tanNcIjtcbmltcG9ydCB7IE5vZGVMaXN0IH0gZnJvbSBcIi4vbm9kZWxpc3QubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IE5vZGVSZWN1cnNpdmVJdGVyYXRvciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpc05vZGVMaXN0U3ltYm9sID0gU3ltYm9sKFwiaXNOb2RlTGlzdFwiKTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcmVjdXJzaXZlIGl0ZXJhdG9yIGZvciB0cmF2ZXJzaW5nIG5vZGVzIGluIGEgRE9NIHRyZWUuXG4gKlxuICogQHNpbmNlIDEuMjYuMFxuICogQHN1bW1hcnkgQW4gaXRlcmF0b3IgdG8gcnVuIHJlY3Vyc2l2ZWx5IHRocm91Z2ggYSB0cmVlIG9mIG5vZGVzXG4gKiBAZXh0ZW5kcyBCYXNlXG4gKi9cbmNsYXNzIE5vZGVSZWN1cnNpdmVJdGVyYXRvciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHBhcmFtIG5vZGVcblx0ICovXG5cdGNvbnN0cnVjdG9yKG5vZGUpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpc1tpc05vZGVMaXN0U3ltYm9sXSA9IGZhbHNlO1xuXG5cdFx0Ly8gaXRlcmF0b3IgaXMgYSBOb2RlTGlzdFxuXHRcdGlmIChpc0luc3RhbmNlKG5vZGUsIE5vZGVMaXN0KSkge1xuXHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBub2RlO1xuXHRcdFx0Y29uc3QgbiA9IG5ldyBOb2RlKCk7XG5cdFx0XHRuLmNoaWxkTm9kZXMgPSBjaGlsZHJlbjtcblx0XHRcdHRoaXNbaXNOb2RlTGlzdFN5bWJvbF0gPSB0cnVlO1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSBuO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gdmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09wZXJhdG9ycy95aWVsZFxuXHQgKi9cblx0W1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiogKCkge1xuXHRcdC8qKlxuXHRcdCAqIFRoZSBlbmQgb2YgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBpcyByZWFjaGVkLiBJbiB0aGlzIGNhc2UsIGV4ZWN1dGlvbiBvZiB0aGUgZ2VuZXJhdG9yXG5cdFx0ICogZW5kcyBhbmQgYW4gSXRlcmF0b3JSZXN1bHQgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciBpbiB3aGljaCB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZCBkb25lIGlzIHRydWUuXG5cdFx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PcGVyYXRvcnMveWllbGRcblx0XHQgKi9cblx0XHRpZiAodGhpc1tpbnRlcm5hbFN5bWJvbF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGl0ZXJhdG9yIGlzIGEgbm9kZWxpc3QgYW5kIHRoZSBtYWluIG5vZGUgaXMgb25seSBhIHBsYWNlaG9sZGVyXG5cdFx0aWYgKHRoaXNbaXNOb2RlTGlzdFN5bWJvbF0gIT09IHRydWUpIHtcblx0XHRcdHlpZWxkIHRoaXNbaW50ZXJuYWxTeW1ib2xdO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXS5oYXNDaGlsZE5vZGVzKCkpIHtcblx0XHRcdGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5jaGlsZE5vZGVzO1xuXG5cdFx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgY2hpbGROb2Rlcykge1xuXHRcdFx0XHR5aWVsZCogbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihub2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEByZXR1cm4ge05vZGVSZWN1cnNpdmVJdGVyYXRvcn1cblx0ICovXG5cdGZvckVhY2goY2FsbGJhY2spIHtcblx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcykge1xuXHRcdFx0Y2FsbGJhY2sobm9kZSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgVHJlZVNlbGVjdFN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFRyZWVTZWxlY3RTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0VHJlZVNlbGVjdFN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgdHJlZXNlbGVjdCB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWJhZGdlXXtkaXNwbGF5OmlubGluZS1mbGV4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25de2Rpc3BsYXk6ZmxleH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItc3RhdGU9b3Blbl1bZGF0YS1tb25zdGVyLWhhcy1jaGlsZHJlbj10cnVlXSBbZGF0YS1tb25zdGVyLXJvbGU9Zm9sZGVyLWhhbmRsZXJde2NvbnRlbnQ6dXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7IHV0ZjgsIDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB3aWR0aD1cXFwiMTZcXFwiIGhlaWdodD1cXFwiMTZcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIj48cGF0aCBkPVxcXCJNMi41IDBjLS4xNjYgMC0uMzMuMDE2LS40ODcuMDQ4bC4xOTQuOThBMS41MSAxLjUxIDAgMCAxIDIuNSAxaC40NThWMEgyLjV6bTIuMjkyIDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTZ2MWguOTE2VjB6bTEuODM0IDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTd2MWguOTE3VjB6TTEzLjUgMGgtLjQ1OHYxaC40NThjLjEgMCAuMTk5LjAxLjI5My4wMjlsLjE5NC0uOTgxQTIuNTEgMi41MSAwIDAgMCAxMy41IDB6bTIuMDc5IDEuMTFhMi41MTEgMi41MTEgMCAwIDAtLjY5LS42ODlsLS41NTYuODMxYy4xNjQuMTEuMzA1LjI1MS40MTUuNDE1bC44My0uNTU2ek0xLjExLjQyMWEyLjUxMSAyLjUxMSAwIDAgMC0uNjg5LjY5bC44MzEuNTU2Yy4xMS0uMTY0LjI1MS0uMzA1LjQxNS0uNDE1TDEuMTEuNDIyek0xNiAyLjVjMC0uMTY2LS4wMTYtLjMzLS4wNDgtLjQ4N2wtLjk4LjE5NGMuMDE4LjA5NC4wMjguMTkyLjAyOC4yOTN2LjQ1OGgxVjIuNXpNLjA0OCAyLjAxM0EyLjUxIDIuNTEgMCAwIDAgMCAyLjV2LjQ1OGgxVjIuNWMwLS4xLjAxLS4xOTkuMDI5LS4yOTNsLS45ODEtLjE5NHpNMCAzLjg3NXYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6TTAgNS43MDh2LjkxN2gxdi0uOTE3SDB6bTE2IC45MTd2LS45MTdoLTF2LjkxN2gxek0wIDcuNTQydi45MTZoMXYtLjkxNkgwem0xNSAuOTE2aDF2LS45MTZoLTF2LjkxNnpNMCA5LjM3NXYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6bS0xNiAuOTE2di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXptLTE2IC45MTd2LjQ1OGMwIC4xNjYuMDE2LjMzLjA0OC40ODdsLjk4LS4xOTRBMS41MSAxLjUxIDAgMCAxIDEgMTMuNXYtLjQ1OEgwem0xNiAuNDU4di0uNDU4aC0xdi40NThjMCAuMS0uMDEuMTk5LS4wMjkuMjkzbC45ODEuMTk0Yy4wMzItLjE1OC4wNDgtLjMyLjA0OC0uNDg3ek0uNDIxIDE0Ljg5Yy4xODMuMjcyLjQxNy41MDYuNjkuNjg5bC41NTYtLjgzMWExLjUxIDEuNTEgMCAwIDEtLjQxNS0uNDE1bC0uODMuNTU2em0xNC40NjkuNjg5Yy4yNzItLjE4My41MDYtLjQxNy42ODktLjY5bC0uODMxLS41NTZjLS4xMS4xNjQtLjI1MS4zMDUtLjQxNS40MTVsLjU1Ni44M3ptLTEyLjg3Ny4zNzNjLjE1OC4wMzIuMzIuMDQ4LjQ4Ny4wNDhoLjQ1OHYtMUgyLjVjLS4xIDAtLjE5OS0uMDEtLjI5My0uMDI5bC0uMTk0Ljk4MXpNMTMuNSAxNmMuMTY2IDAgLjMzLS4wMTYuNDg3LS4wNDhsLS4xOTQtLjk4QTEuNTEgMS41MSAwIDAgMSAxMy41IDE1aC0uNDU4djFoLjQ1OHptLTkuNjI1IDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzMyAwaC45MTd2LTFoLS45MTd2MXptMS44MzQgMGguOTE2di0xaC0uOTE2djF6bTEuODMzIDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzMyAwaC45MTd2LTFoLS45MTd2MXpNNC41IDcuNWEuNS41IDAgMCAwIDAgMWg3YS41LjUgMCAwIDAgMC0xaC03elxcXCIvPjwvc3ZnPicpO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEzcHg7bWFyZ2luLXJpZ2h0OjhweDt3aWR0aDoxM3B4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1zdGF0ZT1jbG9zZV1bZGF0YS1tb25zdGVyLWhhcy1jaGlsZHJlbj10cnVlXSBbZGF0YS1tb25zdGVyLXJvbGU9Zm9sZGVyLWhhbmRsZXJde2NvbnRlbnQ6dXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7IHV0ZjgsIDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB3aWR0aD1cXFwiMTZcXFwiIGhlaWdodD1cXFwiMTZcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIj48cGF0aCBkPVxcXCJNMi41IDBjLS4xNjYgMC0uMzMuMDE2LS40ODcuMDQ4bC4xOTQuOThBMS41MSAxLjUxIDAgMCAxIDIuNSAxaC40NThWMEgyLjV6bTIuMjkyIDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTZ2MWguOTE2VjB6bTEuODM0IDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTd2MWguOTE3VjB6TTEzLjUgMGgtLjQ1OHYxaC40NThjLjEgMCAuMTk5LjAxLjI5My4wMjlsLjE5NC0uOTgxQTIuNTEgMi41MSAwIDAgMCAxMy41IDB6bTIuMDc5IDEuMTFhMi41MTEgMi41MTEgMCAwIDAtLjY5LS42ODlsLS41NTYuODMxYy4xNjQuMTEuMzA1LjI1MS40MTUuNDE1bC44My0uNTU2ek0xLjExLjQyMWEyLjUxMSAyLjUxMSAwIDAgMC0uNjg5LjY5bC44MzEuNTU2Yy4xMS0uMTY0LjI1MS0uMzA1LjQxNS0uNDE1TDEuMTEuNDIyek0xNiAyLjVjMC0uMTY2LS4wMTYtLjMzLS4wNDgtLjQ4N2wtLjk4LjE5NGMuMDE4LjA5NC4wMjguMTkyLjAyOC4yOTN2LjQ1OGgxVjIuNXpNLjA0OCAyLjAxM0EyLjUxIDIuNTEgMCAwIDAgMCAyLjV2LjQ1OGgxVjIuNWMwLS4xLjAxLS4xOTkuMDI5LS4yOTNsLS45ODEtLjE5NHpNMCAzLjg3NXYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6TTAgNS43MDh2LjkxN2gxdi0uOTE3SDB6bTE2IC45MTd2LS45MTdoLTF2LjkxN2gxek0wIDcuNTQydi45MTZoMXYtLjkxNkgwem0xNSAuOTE2aDF2LS45MTZoLTF2LjkxNnpNMCA5LjM3NXYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6bS0xNiAuOTE2di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXptLTE2IC45MTd2LjQ1OGMwIC4xNjYuMDE2LjMzLjA0OC40ODdsLjk4LS4xOTRBMS41MSAxLjUxIDAgMCAxIDEgMTMuNXYtLjQ1OEgwem0xNiAuNDU4di0uNDU4aC0xdi40NThjMCAuMS0uMDEuMTk5LS4wMjkuMjkzbC45ODEuMTk0Yy4wMzItLjE1OC4wNDgtLjMyLjA0OC0uNDg3ek0uNDIxIDE0Ljg5Yy4xODMuMjcyLjQxNy41MDYuNjkuNjg5bC41NTYtLjgzMWExLjUxIDEuNTEgMCAwIDEtLjQxNS0uNDE1bC0uODMuNTU2em0xNC40NjkuNjg5Yy4yNzItLjE4My41MDYtLjQxNy42ODktLjY5bC0uODMxLS41NTZjLS4xMS4xNjQtLjI1MS4zMDUtLjQxNS40MTVsLjU1Ni44M3ptLTEyLjg3Ny4zNzNjLjE1OC4wMzIuMzIuMDQ4LjQ4Ny4wNDhoLjQ1OHYtMUgyLjVjLS4xIDAtLjE5OS0uMDEtLjI5My0uMDI5bC0uMTk0Ljk4MXpNMTMuNSAxNmMuMTY2IDAgLjMzLS4wMTYuNDg3LS4wNDhsLS4xOTQtLjk4QTEuNTEgMS41MSAwIDAgMSAxMy41IDE1aC0uNDU4djFoLjQ1OHptLTkuNjI1IDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzMyAwaC45MTd2LTFoLS45MTd2MXptMS44MzQtMXYxaC45MTZ2LTFoLS45MTZ6bTEuODMzIDFoLjkxN3YtMWgtLjkxN3Yxem0xLjgzMyAwaC45MTd2LTFoLS45MTd2MXpNOC41IDQuNWEuNS41IDAgMCAwLTEgMHYzaC0zYS41LjUgMCAwIDAgMCAxaDN2M2EuNS41IDAgMCAwIDEgMHYtM2gzYS41LjUgMCAwIDAgMC0xaC0zdi0zelxcXCIvPjwvc3ZnPicpO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEzcHg7bWFyZ2luLXJpZ2h0OjhweDt3aWR0aDoxM3B4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci12aXNpYmlsaXR5PWhpZGRlbl17ZGlzcGxheTpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci12aXNpYmlsaXR5PXZpc2libGVde2Rpc3BsYXk6ZmxleH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaGFzLWNoaWxkcmVuPWZhbHNlXSBbZGF0YS1tb25zdGVyLXJvbGU9Zm9sZGVyLWhhbmRsZXJde2NvbnRlbnQ6XFxcIiBcXFwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEzcHg7bWFyZ2luLXJpZ2h0OjhweDt3aWR0aDoxM3B4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjBcXFwiXXtkaXNwbGF5OmZsZXg7bWFyZ2luOjB9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiMVxcXCJde21hcmdpbjowIDAgMCAyMHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjJcXFwiXXttYXJnaW46MCAwIDAgNDBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaW50ZW5kPVxcXCIzXFxcIl17bWFyZ2luOjAgMCAwIDYwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiNFxcXCJde21hcmdpbjowIDAgMCA4MHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjVcXFwiXXttYXJnaW46MCAwIDAgMTAwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiNlxcXCJde21hcmdpbjowIDAgMCAxMTBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaW50ZW5kPVxcXCI3XFxcIl17bWFyZ2luOjAgMCAwIDEyMHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjhcXFwiXXttYXJnaW46MCAwIDAgMTMwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWZpbHRlcmVkPXRydWVde2Rpc3BsYXk6bm9uZX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgYnVpbGRUcmVlIH0gZnJvbSBcIi4uLy4uL2RhdGEvYnVpbGR0cmVlLm1qc1wiO1xuaW1wb3J0IHtcblx0YWRkQXR0cmlidXRlVG9rZW4sXG5cdGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUsXG59IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9ST0xFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7XG5cdGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50LFxuXHRmaXJlQ3VzdG9tRXZlbnQsXG5cdGZpcmVFdmVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBGb3JtYXR0ZXIgfSBmcm9tIFwiLi4vLi4vdGV4dC9mb3JtYXR0ZXIubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE5vZGUgfSBmcm9tIFwiLi4vLi4vdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7IE5vZGVSZWN1cnNpdmVJdGVyYXRvciB9IGZyb20gXCIuLi8uLi90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0ZPUk1fVVJMLCBBVFRSSUJVVEVfSU5URU5EIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSBcIi4vc2VsZWN0Lm1qc1wiO1xuaW1wb3J0IHsgU2VsZWN0U3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc2VsZWN0Lm1qc1wiO1xuaW1wb3J0IHsgVHJlZVNlbGVjdFN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3RyZWUtc2VsZWN0Lm1qc1wiO1xuXG5leHBvcnQgeyBUcmVlU2VsZWN0LCBmb3JtYXRIaWVyYXJjaGljYWxTZWxlY3Rpb24gfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWxOb2Rlc1N5bWJvbCA9IFN5bWJvbChcImludGVybmFsTm9kZXNcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGtleUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImtleUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBBIHRyZWUgc2VsZWN0IGNvbnRyb2wgaXMgYSBzZWxlY3QgY29udHJvbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlbGVjdCBhIHZhbHVlIGZyb20gYSB0cmVlIHN0cnVjdHVyZS5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL3RyZWUtc2VsZWN0XG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS90cmVlLXNlbGVjdC1zaW1wbGVcbiAqXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGJlYXV0aWZ1bCB0cmVlIHNlbGVjdCBjb250cm9sIHdpdGggYSBsb3Qgb2Ygb3B0aW9uc1xuICogQGZpcmVzIG1vbnN0ZXItb3B0aW9ucy1zZXRcbiAqIEBmaXJlcyBtb25zdGVyLXNlbGVjdGVkXG4gKiBAZmlyZXMgbW9uc3Rlci1jaGFuZ2VcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZWRcbiAqL1xuY2xhc3MgVHJlZVNlbGVjdCBleHRlbmRzIFNlbGVjdCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3RyZWUtc2VsZWN0QEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBleHRlbmRzIFNlbGVjdFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gbWFwcGluZy5yb290UmVmZXJlbmNlcz1bJzAnLCB1bmRlZmluZWQsIG51bGxdXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXBwaW5nLmlkVGVtcGxhdGU9aWRcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcucGFyZW50VGVtcGxhdGU9cGFyZW50XG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXBwaW5nLnNlbGVjdGlvblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZm9ybWF0dGVyXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmb3JtYXR0ZXIuc2VwYXJhdG9yPVwiIC8gXCJcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0XHR7XG5cdFx0XHRcdG1hcHBpbmc6IHtcblx0XHRcdFx0XHRyb290UmVmZXJlbmNlczogW1wiMFwiLCB1bmRlZmluZWQsIG51bGxdLFxuXHRcdFx0XHRcdGlkOiBcImlkXCIsXG5cdFx0XHRcdFx0cGFyZW50OiBcInBhcmVudFwiLFxuXG5cdFx0XHRcdFx0c2VsZWN0b3I6IFwiKlwiLFxuXHRcdFx0XHRcdGxhYmVsVGVtcGxhdGU6IFwiXCIsXG5cdFx0XHRcdFx0dmFsdWVUZW1wbGF0ZTogXCJcIixcblx0XHRcdFx0fSxcblx0XHRcdFx0Zm9ybWF0dGVyOiB7XG5cdFx0XHRcdFx0c2VsZWN0aW9uOiBmb3JtYXRIaWVyYXJjaGljYWxTZWxlY3Rpb24sXG5cdFx0XHRcdFx0c2VwYXJhdG9yOiBcIiAvIFwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cy5jYWxsKHRoaXMpLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLXRyZWUtc2VsZWN0XCI7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtTZWxlY3RTdHlsZVNoZWV0LCBUcmVlU2VsZWN0U3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICogSW1wb3J0IFNlbGVjdCBPcHRpb25zIGZyb20gZGF0YXNldFxuXHQgKiBOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCB0aGUgY29udHJvbCBkZWZhdWx0cy9vcHRpb25zXG5cdCAqXG5cdCAqIEBwYXJhbSB7YXJyYXl8b2JqZWN0fE1hcHxTZXR9IGRhdGFcblx0ICogQHJldHVybiB7U2VsZWN0fVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWFwIGlzIG5vdCBpdGVyYWJsZVxuXHQgKi9cblx0aW1wb3J0T3B0aW9ucyhkYXRhKSB7XG5cdFx0dGhpc1tpbnRlcm5hbE5vZGVzU3ltYm9sXSA9IG5ldyBNYXAoKTtcblxuXHRcdGNvbnN0IG1hcHBpbmdPcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJtYXBwaW5nXCIsIHt9KTtcblxuXHRcdGNvbnN0IGZpbHRlciA9IG1hcHBpbmdPcHRpb25zPy5bXCJmaWx0ZXJcIl07XG5cdFx0Y29uc3Qgcm9vdFJlZmVyZW5jZXMgPSBtYXBwaW5nT3B0aW9ucz8uW1wicm9vdFJlZmVyZW5jZXNcIl07XG5cblx0XHRjb25zdCBpZCA9IHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZy5pZFwiLCBcImlkXCIpO1xuXHRcdGNvbnN0IHBhcmVudElEID0gdGhpcy5nZXRPcHRpb24oXCJtYXBwaW5nLnBhcmVudFwiLCBcInBhcmVudFwiKTtcblxuXHRcdGNvbnN0IHNlbGVjdG9yID0gbWFwcGluZ09wdGlvbnM/LltcInNlbGVjdG9yXCJdO1xuXHRcdGNvbnN0IG9wdGlvbnMgPSBbXTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBub2RlcyA9IGJ1aWxkVHJlZShkYXRhLCBzZWxlY3RvciwgaWQsIHBhcmVudElELCB7XG5cdFx0XHRcdGZpbHRlcixcblx0XHRcdFx0cm9vdFJlZmVyZW5jZXMsXG5cdFx0XHR9KTtcblxuXHRcdFx0Zm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihub2RlKTtcblx0XHRcdFx0Zm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG5cdFx0XHRcdFx0Y29uc3QgZm9ybWF0dGVkVmFsdWVzID0gZm9ybWF0S2V5TGFiZWwuY2FsbCh0aGlzLCBuKTtcblxuXHRcdFx0XHRcdGNvbnN0IGxhYmVsID0gZm9ybWF0dGVkVmFsdWVzLmxhYmVsO1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gZm9ybWF0dGVkVmFsdWVzLnZhbHVlO1xuXHRcdFx0XHRcdGNvbnN0IGludGVuZCA9IG4ubGV2ZWw7XG5cblx0XHRcdFx0XHRjb25zdCB2aXNpYmlsaXR5ID0gaW50ZW5kID4gMCA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcblx0XHRcdFx0XHRjb25zdCBzdGF0ZSA9IFwiY2xvc2VcIjtcblxuXHRcdFx0XHRcdHRoaXNbaW50ZXJuYWxOb2Rlc1N5bWJvbF0uc2V0KHZhbHVlLCBuKTtcblxuXHRcdFx0XHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0XHRcdGxhYmVsLFxuXHRcdFx0XHRcdFx0aW50ZW5kLFxuXHRcdFx0XHRcdFx0c3RhdGUsXG5cdFx0XHRcdFx0XHR2aXNpYmlsaXR5LFxuXHRcdFx0XHRcdFx0W1wiaGFzLWNoaWxkcmVuXCJdOiBuLmhhc0NoaWxkTm9kZXMoKSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNldE9wdGlvbihcIm9wdGlvbnNcIiwgb3B0aW9ucyk7XG5cblx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItb3B0aW9ucy1zZXRcIiwge1xuXHRcdFx0XHRvcHRpb25zLFxuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZT8ubWVzc2FnZSB8fCBlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtUcmVlU2VsZWN0fVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGhhbmRsZU9wdGlvbktleWJvYXJkRXZlbnRzKGV2ZW50KSB7XG5cdHN3aXRjaCAoZXZlbnQ/LltcImNvZGVcIl0pIHtcblx0XHRjYXNlIFwiQXJyb3dMZWZ0XCI6XG5cdFx0XHRjbG9zZU9yT3BlbkN1cnJlbnRPcHRpb24uY2FsbCh0aGlzLCBldmVudCwgXCJjbG9zZVwiKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQXJyb3dSaWdodFwiOlxuXHRcdFx0Y2xvc2VPck9wZW5DdXJyZW50T3B0aW9uLmNhbGwodGhpcywgZXZlbnQsIFwib3BlblwiKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2V2ZW50fSBldmVudFxuICovXG5mdW5jdGlvbiBjbG9zZU9yT3BlbkN1cnJlbnRPcHRpb24oZXZlbnQsIG1vZGUpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShldmVudCwgRXZlbnQpO1xuXG5cdGlmICh0eXBlb2YgZXZlbnQuY29tcG9zZWRQYXRoICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBldmVudFwiKTtcblx0fVxuXG5cdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblx0Y29uc3Qgb3B0aW9uTm9kZSA9IHBhdGguc2hpZnQoKTtcblxuXHRjb25zdCBzdGF0ZSA9IG9wdGlvbk5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLXN0YXRlXCIpO1xuXHRpZiAoc3RhdGUgIT09IG1vZGUpIHtcblx0XHRjb25zdCBoYW5kbGVyID0gb3B0aW9uTm9kZS5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9Zm9sZGVyLWhhbmRsZXJdXCIsXG5cdFx0KTtcblx0XHRpZiAoaGFuZGxlciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRmaXJlRXZlbnQoaGFuZGxlciwgXCJjbGlja1wiKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiBAcmV0dXJuIHthcnJheTxsYWJlbCwgdmFsdWU+fVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZm9ybWF0S2V5TGFiZWwobm9kZSkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpO1xuXG5cdGNvbnN0IHYgPSBub2RlLnZhbHVlO1xuXHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIG9iamVjdCBoYXMgbm8gdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgaWRcIik7XG5cdH1cblxuXHRjb25zdCBsYWJlbCA9IG5ldyBGb3JtYXR0ZXIodikuZm9ybWF0KFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZy5sYWJlbFRlbXBsYXRlXCIsIFwiXCIpLFxuXHQpO1xuXG5cdGNvbnN0IHZhbHVlID0gbmV3IEZvcm1hdHRlcih2KS5mb3JtYXQoXG5cdFx0dGhpcy5nZXRPcHRpb24oXCJtYXBwaW5nLnZhbHVlVGVtcGxhdGVcIiwgXCJcIiksXG5cdCk7XG5cblx0cmV0dXJuIHtcblx0XHR2YWx1ZSxcblx0XHRsYWJlbCxcblx0fTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gYnVpbGRUcmVlTGFiZWxzKHZhbHVlKSB7XG5cdGxldCBub2RlID0gdGhpc1tpbnRlcm5hbE5vZGVzU3ltYm9sXS5nZXQodmFsdWUpO1xuXHRpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0bm9kZSA9IHRoaXNbaW50ZXJuYWxOb2Rlc1N5bWJvbF0uZ2V0KHBhcnNlSW50KHZhbHVlKSk7XG5cdH1cblxuXHRjb25zdCBwYXJ0cyA9IFtdO1xuXG5cdGlmIChub2RlIGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdGxldCBwdHIgPSBub2RlO1xuXHRcdHdoaWxlIChwdHIpIHtcblx0XHRcdGNvbnN0IGZvcm1hdHRlZFZhbHVlcyA9IGZvcm1hdEtleUxhYmVsLmNhbGwodGhpcywgcHRyKTtcblx0XHRcdHBhcnRzLnVuc2hpZnQoZm9ybWF0dGVkVmFsdWVzLmxhYmVsKTtcblx0XHRcdHB0ciA9IHB0ci5wYXJlbnQ7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHBhcnRzO1xufVxuXG4vKipcbiAqIFRoaXMgZm9ybWF0dGVyIGNhbiBmb3JtYXQgYSBsYWJlbCBoaWVyYXJjaGljYWxseS5cbiAqIFRoZSBvcHRpb24gYGZvcm1hdHRlci5zZXBhcmF0b3JgIGRldGVybWluZXMgdGhlIHNlcGFyYXRvci5cbiAqXG4gKiBgYGBcbiAqIGEgLyBiIC8gY1xuICogYGBgXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgcGFzc2VkIGFzIGFyZ3VtZW50IG9mIHRoZSBvcHRpb24gYGZvcm1hdHRlci5zZWxlY3Rpb246YC5cbiAqXG4gKiBAc2luY2UgMS45LjBcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZm9ybWF0SGllcmFyY2hpY2FsU2VsZWN0aW9uKHZhbHVlKSB7XG5cdHJldHVybiBidWlsZFRyZWVMYWJlbHNcblx0XHQuY2FsbCh0aGlzLCB2YWx1ZSlcblx0XHQuam9pbih0aGlzLmdldE9wdGlvbihcImZvcm1hdHRlci5zZXBhcmF0b3JcIiwgXCIgLyBcIikpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBvcGVuT3B0aW9uRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwib3Blbk9wdGlvbkV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tvcGVuT3B0aW9uRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcImZvbGRlci1oYW5kbGVyXCIsXG5cdFx0KTtcblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29udGFpbmVyID0gZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShlbGVtZW50LCBBVFRSSUJVVEVfUk9MRSwgXCJvcHRpb25cIik7XG5cdFx0Y29uc3QgaW5kZXggPSBjb250YWluZXJcblx0XHRcdC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSlcblx0XHRcdC5zcGxpdChcIi1cIilcblx0XHRcdC5wb3AoKTtcblxuXHRcdGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuZ2V0T3B0aW9uKGBvcHRpb25zLiR7aW5kZXh9LnN0YXRlYCk7XG5cblx0XHRjb25zdCBuZXdTdGF0ZSA9IGN1cnJlbnRTdGF0ZSA9PT0gXCJjbG9zZVwiID8gXCJvcGVuXCIgOiBcImNsb3NlXCI7XG5cdFx0dGhpcy5zZXRPcHRpb24oYG9wdGlvbnMuJHtpbmRleH0uc3RhdGVgLCBuZXdTdGF0ZSk7XG5cblx0XHRjb25zdCBuZXdWaXNpYmlsaXR5ID0gbmV3U3RhdGUgPT09IFwib3BlblwiID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xuXG5cdFx0aWYgKGNvbnRhaW5lci5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0lOVEVORCkpIHtcblx0XHRcdGNvbnN0IGludGVuZCA9IGNvbnRhaW5lci5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0lOVEVORCk7XG5cblx0XHRcdGxldCByZWYgPSBjb250YWluZXIubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRcdFx0Y29uc3QgY2hpbGRJbnRlbmQgPSBwYXJzZUludChpbnRlbmQpICsgMTtcblxuXHRcdFx0Y29uc3QgY21wID0gKGEsIGIpID0+IHtcblx0XHRcdFx0aWYgKG5ld1N0YXRlID09PSBcIm9wZW5cIikge1xuXHRcdFx0XHRcdHJldHVybiBhID09PSBiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGEgPj0gYjtcblx0XHRcdH07XG5cblx0XHRcdHdoaWxlIChcblx0XHRcdFx0cmVmPy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0lOVEVORCkgJiZcblx0XHRcdFx0Y21wKHBhcnNlSW50KHJlZi5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0lOVEVORCkpLCBjaGlsZEludGVuZClcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCByZWZJbmRleCA9IHJlZlxuXHRcdFx0XHRcdC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSlcblx0XHRcdFx0XHQuc3BsaXQoXCItXCIpXG5cdFx0XHRcdFx0LnBvcCgpO1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihgb3B0aW9ucy4ke3JlZkluZGV4fS52aXNpYmlsaXR5YCwgbmV3VmlzaWJpbGl0eSk7XG5cblx0XHRcdFx0aWYgKG5ld1N0YXRlID09PSBcImNsb3NlXCIpIHtcblx0XHRcdFx0XHR0aGlzLnNldE9wdGlvbihgb3B0aW9ucy4ke3JlZkluZGV4fS5zdGF0ZWAsIFwiY2xvc2VcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZWYgPSByZWYubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR0aGlzW2tleUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHBhdGg/LlswXTtcblxuXHRcdGxldCByb2xlO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0aWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSkge1xuXHRcdFx0XHRyb2xlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpO1xuXHRcdFx0fSBlbHNlIGlmIChlbGVtZW50ID09PSB0aGlzKSB7XG5cdFx0XHRcdHNob3cuY2FsbCh0aGlzKTtcblx0XHRcdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGUgPSBlbGVtZW50LmNsb3Nlc3QoYFske0FUVFJJQlVURV9ST0xFfV1gKTtcblx0XHRcdFx0aWYgKGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlLmhhc0F0dHJpYnV0ZSgpKSB7XG5cdFx0XHRcdFx0cm9sZSA9IGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0c3dpdGNoIChyb2xlKSB7XG5cdFx0XHRjYXNlIFwib3B0aW9uLWxhYmVsXCI6XG5cdFx0XHRjYXNlIFwib3B0aW9uLWNvbnRyb2xcIjpcblx0XHRcdGNhc2UgXCJvcHRpb25cIjpcblx0XHRcdFx0aGFuZGxlT3B0aW9uS2V5Ym9hcmRFdmVudHMuY2FsbCh0aGlzLCBldmVudCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fTtcblxuXHR0aGlzLnNoYWRvd1Jvb3QuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpc1trZXlFdmVudEhhbmRsZXJdKTtcblx0dGhpcy5zaGFkb3dSb290LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzW29wZW5PcHRpb25FdmVudEhhbmRsZXJdKTtcbn1cblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBwYXNzIGEgVVJMIHRvIHRoaXMgc2VsZWN0LlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLXNlbGVjdCBkYXRhLW1vbnN0ZXItdXJsPVwiaHR0cHM6Ly9leGFtcGxlLmNvbS9cIj48L21vbnN0ZXItc2VsZWN0PlxuICogYGBgXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkge1xuXHRjb25zdCBvcHRpb25zID0ge307XG5cblx0Y29uc3QgdXJsID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKTtcblx0aWYgKGlzU3RyaW5nKHVybCkpIHtcblx0XHRvcHRpb25zW1widXJsXCJdID0gbmV3IFVSTCh1cmwpLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJvcHRpb25zXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1pbnRlbmQgcGF0aDpvcHRpb25zLmludGVuZCwgXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1zdGF0ZSBwYXRoOm9wdGlvbnMuc3RhdGUsIFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eSBwYXRoOm9wdGlvbnMudmlzaWJpbGl0eSwgXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1maWx0ZXJlZCBwYXRoOm9wdGlvbnMuZmlsdGVyZWQsXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1oYXMtY2hpbGRyZW4gcGF0aDpvcHRpb25zLmhhcy1jaGlsZHJlblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJmb2xkZXItaGFuZGxlclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBwYXJ0PVwib3B0aW9uXCIgcm9sZT1cIm9wdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZGF0YS1tb25zdGVyLXJvbGU9XCJvcHRpb24tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgdHlwZSBwYXRoOnR5cGUsXG4gICAgICAgICAgICByb2xlIHBhdGg6cm9sZSxcbiAgICAgICAgICAgIHZhbHVlIHBhdGg6b3B0aW9ucy52YWx1ZSwgXG4gICAgICAgICAgICBuYW1lIHBhdGg6bmFtZSwgXG4gICAgICAgICAgICBwYXJ0IHBhdGg6dHlwZSB8IHByZWZpeDpvcHRpb24tIHwgc3VmZml4OiBmb3JtXG4gICAgICAgICAgICBcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpvcHRpb25zIHwgaW5kZXg6bGFiZWxcIiBwYXJ0PVwib3B0aW9uLWxhYmVsXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJzZWxlY3Rpb25cIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJiYWRnZVwiXG4gICAgICAgICAgICAgICAgIHBhcnQ9XCJiYWRnZVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci12YWx1ZSBwYXRoOnNlbGVjdGlvbiB8IGluZGV4OnZhbHVlLCBcbiAgICAgICAgICAgICAgICAgY2xhc3MgcGF0aDpjbGFzc2VzIHwgaW5kZXg6YmFkZ2UsIFxuICAgICAgICBwYXJ0IHBhdGg6dHlwZSB8IHN1ZmZpeDotb3B0aW9uIHwgcHJlZml4OiBmb3JtLVwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpzZWxlY3Rpb24gfCBpbmRleDpsYWJlbFwiIHBhcnQ9XCJiYWRnZS1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImJhZGdlLWxhYmVsXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwicmVtb3ZlLWJhZGdlXCIgZGF0YS1tb25zdGVyLXNlbGVjdC10aGlzXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6ZmVhdHVyZXMuY2xlYXIgfCA/OjpoaWRkZW4gXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwicmVtb3ZlLWJhZGdlXCIgdGFiaW5kZXg9XCItMVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPHNsb3QgY2xhc3M9XCJoaWRkZW5cIj48L3Nsb3Q+XG5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIFxcJHtzZWxlY3RlZH1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwicG9wcGVyXCIgcGFydD1cInBvcHBlclwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cIm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1maWx0ZXItY29udHJvbFwiIHJvbGU9XCJzZWFyY2hcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcm9sZT1cInNlYXJjaGJveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0PVwicG9wcGVyLWZpbHRlclwiIG5hbWU9XCJwb3BwZXItZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4XCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwib3B0aW9uc1wiIGRhdGEtbW9uc3Rlci1yb2xlPVwib3B0aW9uc1wiIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJvcHRpb25zIHBhdGg6b3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cIm5vLW9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cIm5vLW9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm1lc3NhZ2VzLmVtcHR5T3B0aW9uc1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHBhcnQ9XCJzdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc1wiIGRhdGEtbW9uc3Rlci1yb2xlPVwic3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlIHwgc3VmZml4OlxcXFwgc3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFRyZWVTZWxlY3QpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFRvZ2dsZVN3aXRjaFN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFRvZ2dsZVN3aXRjaFN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRUb2dnbGVTd2l0Y2hTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHRvZ2dsZXN3aXRjaCB7IFxuOmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWdyYXktMTojZjZmNmY2Oy0tbW9uc3Rlci1jb2xvci1ncmF5LTI6I2UyZTJlMjstLW1vbnN0ZXItY29sb3ItZ3JheS0zOiM4YjhiOGI7LS1tb25zdGVyLWNvbG9yLWdyYXktNDojNmY2ZjZmOy0tbW9uc3Rlci1jb2xvci1ncmF5LTU6IzNlM2UzZTstLW1vbnN0ZXItY29sb3ItZ3JheS02OiMyMjI7LS1tb25zdGVyLWNvbG9yLXJvc2UtMTojZmZmN2Y5Oy0tbW9uc3Rlci1jb2xvci1yb3NlLTI6I2ZmZGNlNTstLW1vbnN0ZXItY29sb3Itcm9zZS0zOiNmZjNiOGQ7LS1tb25zdGVyLWNvbG9yLXJvc2UtNDojZGIwMDcyOy0tbW9uc3Rlci1jb2xvci1yb3NlLTU6IzgwMDA0MDstLW1vbnN0ZXItY29sb3Itcm9zZS02OiM0YzAwMjM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0xOiNmZmY4Zjg7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0yOiNmZmRkZGY7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0zOiNmZjQyNmM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS00OiNkZTAwNTE7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS01OiM4MjAwMmM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS02OiM1MTAwMTg7LS1tb25zdGVyLWNvbG9yLXJlZC0xOiNmZmY4ZjY7LS1tb25zdGVyLWNvbG9yLXJlZC0yOiNmZmRkZDg7LS1tb25zdGVyLWNvbG9yLXJlZC0zOiNmZjQ2NDc7LS1tb25zdGVyLWNvbG9yLXJlZC00OiNlMDAwMmI7LS1tb25zdGVyLWNvbG9yLXJlZC01OiM4MzAwMTQ7LS1tb25zdGVyLWNvbG9yLXJlZC02OiM1MzAwMDM7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xOiNmZmY4ZjU7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yOiNmZmRlZDE7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zOiNmZDRkMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS00OiNjZDNjMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS01OiM3NTIxMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS02OiM0MDE2MDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTE6I2ZmZjhmMzstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMjojZmZkZmM2Oy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0zOiNkNTczMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTQ6I2FjNWMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNTojNjMzMzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi02OiMzNzFkMDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTE6I2ZmZjhlZjstLW1vbnN0ZXItY29sb3ItYW1iZXItMjojZmZlMGIyOy0tbW9uc3Rlci1jb2xvci1hbWJlci0zOiNiOTgzMDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTQ6IzkyNjcwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNTojNTIzODAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci02OiMzMDIxMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0xOiNmZmY5ZTU7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0yOiNmZmU1M2U7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0zOiM5YzhiMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy00OiM3ZDZmMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy01OiM0NjNkMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy02OiMyOTIzMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtMTojZjdmZmFjOy0tbW9uc3Rlci1jb2xvci1saW1lLTI6I2Q1ZjIwMDstLW1vbnN0ZXItY29sb3ItbGltZS0zOiM4MTkzMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNDojNjc3NjAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTU6IzM5NDEwMDstLW1vbnN0ZXItY29sb3ItbGltZS02OiMyMjI2MDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMTojZTVmZmMzOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTI6Izk4ZmIwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0zOiM1YzliMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNDojNDk3YzAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTU6IzI2NDUwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS02OiMxODI2MDA7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTE6I2UwZmZkOTstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMjojNzJmZjZjOy0tbW9uc3Rlci1jb2xvci1ncmVlbi0zOiMwMGEyMWY7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTQ6IzAwODIxNzstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNTojMDA0OTA4Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi02OiMwNjI4MDA7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMTojZGNmZmU2Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTI6IzVkZmZhMjstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0zOiMwMGEwNWE7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNDojMDA4MTQ3Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTU6IzAwNDgyNTstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC02OiMwMDI4MTI7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMTojZGFmZmVmOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTI6IzQyZmZjNjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0zOiMwMDlmNzg7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNDojMDA3ZjVmOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTU6IzAwNDczNDstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS02OiMwMDI4MWI7LS1tb25zdGVyLWNvbG9yLXRlYWwtMTojZDdmZmY3Oy0tbW9uc3Rlci1jb2xvci10ZWFsLTI6IzAwZmZlNDstLW1vbnN0ZXItY29sb3ItdGVhbC0zOiMwMDllOGM7LS1tb25zdGVyLWNvbG9yLXRlYWwtNDojMDA3YzZlOy0tbW9uc3Rlci1jb2xvci10ZWFsLTU6IzAwNDQzYzstLW1vbnN0ZXItY29sb3ItdGVhbC02OiMwMDI3MjI7LS1tb25zdGVyLWNvbG9yLWN5YW4tMTojYzRmZmZlOy0tbW9uc3Rlci1jb2xvci1jeWFuLTI6IzAwZmFmYjstLW1vbnN0ZXItY29sb3ItY3lhbi0zOiMwMDk5OWE7LS1tb25zdGVyLWNvbG9yLWN5YW4tNDojMDA3YTdiOy0tbW9uc3Rlci1jb2xvci1jeWFuLTU6IzAwNDM0NDstLW1vbnN0ZXItY29sb3ItY3lhbi02OiMwMDI1MjU7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0xOiNkYWZhZmY7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0yOiM4ZGYwZmY7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0zOiMwMDk4YTk7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci00OiMwMDc5ODc7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci01OiMwMDQwNDg7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci02OiMwMDIyMjc7LS1tb25zdGVyLWNvbG9yLXNreS0xOiNlM2Y3ZmY7LS1tb25zdGVyLWNvbG9yLXNreS0yOiNhZWU5ZmY7LS1tb25zdGVyLWNvbG9yLXNreS0zOiMwMDk0YjQ7LS1tb25zdGVyLWNvbG9yLXNreS00OiMwMDc1OTA7LS1tb25zdGVyLWNvbG9yLXNreS01OiMwMDQwNGY7LS1tb25zdGVyLWNvbG9yLXNreS02OiMwMDFmMjg7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTE6I2U4ZjZmZjstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMjojYjllM2ZmOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0zOiMwMDkyYzU7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTQ6IzAwNzQ5ZDstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNTojMDAzYzU0Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi02OiMwMDFkMmE7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTE6I2U4ZjJmZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtMjojYzZlMGZmOy0tbW9uc3Rlci1jb2xvci1henVyZS0zOiMwMDhmZGI7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTQ6IzAwNzFhZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtNTojMDAzYjVlOy0tbW9uc3Rlci1jb2xvci1henVyZS02OiMwMDFjMzA7LS1tb25zdGVyLWNvbG9yLWJsdWUtMTojZjBmNGZmOy0tbW9uc3Rlci1jb2xvci1ibHVlLTI6I2Q0ZTBmZjstLW1vbnN0ZXItY29sb3ItYmx1ZS0zOiMwMDg5ZmM7LS1tb25zdGVyLWNvbG9yLWJsdWUtNDojMDA2ZGNhOy0tbW9uc3Rlci1jb2xvci1ibHVlLTU6IzAwMzg2ZDstLW1vbnN0ZXItY29sb3ItYmx1ZS02OiMwMDFhMzk7LS1tb25zdGVyLWNvbG9yLWluZGlnby0xOiNmM2YzZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby0yOiNkZWRkZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby0zOiM2NTdlZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby00OiMwMDYxZmM7LS1tb25zdGVyLWNvbG9yLWluZGlnby01OiMwMDMyOGE7LS1tb25zdGVyLWNvbG9yLWluZGlnby02OiMwMDE2NDk7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0xOiNmN2YxZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0yOiNlOGRhZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0zOiM5YjcwZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC00OiM3OTRhZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC01OiMyZDBmYmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC02OiMwYjAwNzQ7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0xOiNmZGY0ZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0yOiNmN2Q5ZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0zOiNkMTUwZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS00OiNiMDFmZTM7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS01OiM2NjAwODc7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS02OiMzYTAwNGY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMTojZmZmM2ZjOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTI6I2ZmZDdmNjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0zOiNmOTExZTA7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNDojY2EwMGI2Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTU6Izc0MDA2ODstLW1vbnN0ZXItY29sb3ItbWFnZW50YS02OiM0NDAwM2M7LS1tb25zdGVyLWNvbG9yLXBpbmstMTojZmZmN2ZiOy0tbW9uc3Rlci1jb2xvci1waW5rLTI6I2ZmZGNlYzstLW1vbnN0ZXItY29sb3ItcGluay0zOiNmZjJmYjI7LS1tb25zdGVyLWNvbG9yLXBpbmstNDojZDIwMDhmOy0tbW9uc3Rlci1jb2xvci1waW5rLTU6Izc5MDA1MTstLW1vbnN0ZXItY29sb3ItcGluay02OiM0YjAwMzA7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS0xOiNlNWI4NzU7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS0yOiNkOWEzNjI7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS0zOiNjMDhhNGU7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS00OiNhNzcxM2I7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS01OiM4ZjVhMjg7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS02OiMzNjA1MDU7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTE6I2Y3ZjVlZjstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMjojZTVlMmQ5Oy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0zOiNjYmM2YjM7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTQ6I2ExOWQ4YTstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNTojN2E3NTY2Oy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02OiM1MTRkM2Z9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci10aGVtZS1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTEpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMXtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0yKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTJ7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLWNvbG9yLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLXRoZW1lLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMyl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ze2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci10aGVtZS1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTQpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtNHtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1yb3ctMXtib3JkZXI6MXB4IHNvbGlkIHZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1lbGVtZW50LC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtcm93LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1iYWNrZ3JvdW5kLWluaGVyaXR7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0IWltcG9ydGFudH0ubW9uc3Rlci10aGVtZS1vbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb24tY29sb3IpfS5tb25zdGVyLXRoZW1lLW9mZntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDttYXJnaW46MDtvdXRsaW5lOm5vbmV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHh9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5zd2l0Y2h7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aCk7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6aW5saW5lLWdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4yczt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAubGFiZWx7ZGlzcGxheTpibG9jazttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowIC4yZW07dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1vdmVyZmxvdzplbGxpcHNpczstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7d2hpdGUtc3BhY2U6bm93cmFwfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuc3dpdGNoLXNsaWRlcntib3R0b206NHB4O2xlZnQ6NHB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjRweDt0b3A6NHB4O3RyYW5zaXRpb246LjJzO3dpZHRoOmNhbGMoNTAlIC0gNHB4KX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLnN3aXRjaFtkYXRhLW1vbnN0ZXItc3RhdGU9b25dIC5sYWJlbC5vZmZ7dmlzaWJpbGl0eTpoaWRkZW59W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5zd2l0Y2hbZGF0YS1tb25zdGVyLXN0YXRlPW9mZl0gLmxhYmVsLm9mZixbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLnN3aXRjaFtkYXRhLW1vbnN0ZXItc3RhdGU9b25dIC5sYWJlbC5vbnt2aXNpYmlsaXR5OnZpc2libGV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5zd2l0Y2hbZGF0YS1tb25zdGVyLXN0YXRlPW9mZl0gLmxhYmVsLm9ue3Zpc2liaWxpdHk6aGlkZGVufVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuc3dpdGNoW2RhdGEtbW9uc3Rlci1zdGF0ZT1vbl0gLnN3aXRjaC1zbGlkZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTAwJSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5zd2l0Y2hbZGF0YS1tb25zdGVyLXN0YXRlPW9mZl0gLnN3aXRjaC1zbGlkZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9Omhvc3R7Y3Vyc29yOnBvaW50ZXJ9Omhvc3QoW2Rpc2FibGVkXSl7Y3Vyc29yOm5vdC1hbGxvd2VkfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCwgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQ3VzdG9tQ29udHJvbCB9IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tY29udHJvbC5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi8uLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG5cdHVwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2wsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgVG9nZ2xlU3dpdGNoU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvdG9nZ2xlLXN3aXRjaC5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IGZpcmVFdmVudCB9IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBUb2dnbGVTd2l0Y2ggfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3dpdGNoRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInN3aXRjaEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IFNUQVRFX09OID0gXCJvblwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBTVEFURV9PRkYgPSBcIm9mZlwiO1xuXG4vKipcbiAqIEEgc2ltcGxlIHRvZ2dsZSBzd2l0Y2hcbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL3RvZ2dsZS1zd2l0Y2hcbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3RvZ2dsZS1zd2l0Y2gtc2ltcGxlIFNpbXBsZSBleGFtcGxlXG4gKlxuICogQHNpbmNlIDMuNTcuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIHN3aXRjaCBlbGVtZW50XG4gKiBAZmlyZXMgbW9uc3Rlci1vcHRpb25zLXNldFxuICogQGZpcmVzIG1vbnN0ZXItc2VsZWN0ZWRcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZVxuICogQGZpcmVzIG1vbnN0ZXItY2hhbmdlZFxuICovXG5jbGFzcyBUb2dnbGVTd2l0Y2ggZXh0ZW5kcyBDdXN0b21Db250cm9sIHtcblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlPWN1cnJlbnQgdmFsdWUgb2YgdGhlIGVsZW1lbnRcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBkaXNhYmxlZD1kaXNhYmxlZD1mYWxzZSBEaXNhYmxlZCBzdGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY2xhc3Nlc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2xhc3Nlcy5vbj1zcGVjaWZpZXMgdGhlIGNsYXNzIGZvciB0aGUgb24gc3RhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzc2VzLm9mZj1zcGVjaWZpZXMgdGhlIGNsYXNzIGZvciB0aGUgb2ZmIHN0YXRlLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdmFsdWVzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZXMub2ZmPXNwZWNpZmllcyB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQgaWYgaXQgaXMgbm90IHNlbGVjdGVkXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsYWJlbHNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5vbj1zcGVjaWZpZXMgdGhlIGxhYmVsIGZvciB0aGUgb24gc3RhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMub2ZmPXNwZWNpZmllcyB0aGUgbGFiZWwgZm9yIHRoZSBvZmYgc3RhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb25zLm9uPXNwZWNpZmllcyB0aGUgYWN0aW9uIGZvciB0aGUgb24gc3RhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb25zLm9mZj1zcGVjaWZpZXMgdGhlIGFjdGlvbiBmb3IgdGhlIG9mZiBzdGF0ZS5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gdGhlIG1haW4gdGVtcGxhdGUgdXNlZCBieSB0aGUgY29udHJvbC5cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHZhbHVlOiBudWxsLFxuXHRcdFx0ZGlzYWJsZWQ6IGZhbHNlLFxuXHRcdFx0Y2xhc3Nlczoge1xuXHRcdFx0XHRvbjogXCJtb25zdGVyLXRoZW1lLW9uXCIsXG5cdFx0XHRcdG9mZjogXCJtb25zdGVyLXRoZW1lLW9mZlwiLFxuXHRcdFx0XHRoYW5kbGU6IFwibW9uc3Rlci10aGVtZS1wcmltYXJ5LTFcIixcblx0XHRcdFx0ZXJyb3I6IFwibW9uc3Rlci10aGVtZS1lcnJvci0xXCIsXG5cdFx0XHR9LFxuXHRcdFx0dmFsdWVzOiB7XG5cdFx0XHRcdG9uOiBcIm9uXCIsXG5cdFx0XHRcdG9mZjogXCJvZmZcIixcblx0XHRcdH0sXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0dG9nZ2xlU3dpdGNoT246IFwiXHUyNzE0XCIsXG5cdFx0XHRcdHRvZ2dsZVN3aXRjaE9mZjogXCJcdTI3MTZcIixcblx0XHRcdH0sXG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRhY3Rpb25zOiB7XG5cdFx0XHRcdG9uOiAoKSA9PiB7fSxcblx0XHRcdFx0b2ZmOiAoKSA9PiB7fSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cblx0XHRnZXRXaW5kb3coKS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBpbml0IHZhbHVlIHRvIG9mZlxuXHRcdFx0ICogaWYgdGhlIHZhbHVlIHdhcyBub3QgZGVmaW5lZCBiZWZvcmUgaW5zZXJ0aW5nIGl0IGludG8gdGhlIEhUTUxcblx0XHRcdCAqL1xuXHRcdFx0aWYgKHNlbGYuZ2V0T3B0aW9uKFwidmFsdWVcIikgPT09IG51bGwpIHtcblx0XHRcdFx0c2VsZi5zZXRPcHRpb24oXCJ2YWx1ZVwiLCBzZWxmLmdldE9wdGlvbihcInZhbHVlcy5vZmZcIikpO1xuXHRcdFx0fVxuXG5cdFx0XHQvKipcblx0XHRcdCAqIHZhbHVlIGZyb20gYXR0cmlidXRlXG5cdFx0XHQgKi9cblx0XHRcdGlmIChzZWxmLmhhc0F0dHJpYnV0ZShcInZhbHVlXCIpKSB7XG5cdFx0XHRcdHNlbGYuc2V0T3B0aW9uKFwidmFsdWVcIiwgc2VsZi5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSk7XG5cdFx0XHR9XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogdmFsaWRhdGUgdmFsdWVcblx0XHRcdCAqL1xuXHRcdFx0dmFsaWRhdGVBbmRTZXRWYWx1ZS5jYWxsKHNlbGYpO1xuXG5cdFx0XHQvLyB0aGlzIHN0YXRlIGlzIGEgZ2V0dGVyXG5cdFx0XHRpZiAodGhpcy5zdGF0ZSA9PT0gU1RBVEVfT04pIHtcblx0XHRcdFx0dG9nZ2xlT24uY2FsbChzZWxmKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRvZ2dsZU9mZi5jYWxsKHNlbGYpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIHVwZGF0ZXIgdHJhbnNmb3JtZXIgbWV0aG9kcyBmb3IgcGlwZVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtmdW5jdGlvbn1cblx0ICovXG5cdFt1cGRhdGVyVHJhbnNmb3JtZXJNZXRob2RzU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJzdGF0ZS1jYWxsYmFja1wiOiAoV2VydCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5zdGF0ZTtcblx0XHRcdH0sXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIFtDU1NTdHlsZVNoZWV0XVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtUb2dnbGVTd2l0Y2hTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiB0b2dnbGUgc3dpdGNoXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci10b2dnbGUtc3dpdGNoJyk7XG5cdCAqIGUuY2xpY2soKVxuXHQgKiBgYGBcblx0ICovXG5cdGNsaWNrKCkge1xuXHRcdHRoaXMudG9nZ2xlKCk7XG5cdH1cblxuXHQvKipcblx0ICogdG9nZ2xlIHN3aXRjaCBvbi9vZmZcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogZS50b2dnbGUoKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7VG9nZ2xlU3dpdGNofVxuXHQgKi9cblx0dG9nZ2xlKCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpID09PSB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vblwiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMudG9nZ2xlT2ZmKCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnRvZ2dsZU9uKCk7XG5cdH1cblxuXHQvKipcblx0ICogdG9nZ2xlIHN3aXRjaCBvblxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXHQgKiBlLnRvZ2dsZU9uKClcblx0ICogYGBgXG5cdCAqXG5cdCAqIEByZXR1cm4ge1RvZ2dsZVN3aXRjaH1cblx0ICovXG5cdHRvZ2dsZU9uKCkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwidmFsdWVcIiwgdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIikpO1xuXHRcdGZpcmVFdmVudCh0aGlzLCBcImNoYW5nZVwiKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiB0b2dnbGUgc3dpdGNoIG9mZlxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXHQgKiBlLnRvZ2dsZU9mZigpXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtUb2dnbGVTd2l0Y2h9XG5cdCAqL1xuXHR0b2dnbGVPZmYoKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJ2YWx1ZVwiLCB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vZmZcIikpO1xuXHRcdGZpcmVFdmVudCh0aGlzLCBcImNoYW5nZVwiKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGVsZW1lbnRcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogY29uc29sZS5sb2coZS5zdGF0ZSlcblx0ICogLy8gXHUyMUE2IG9mZlxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0IHN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpID09PSB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vblwiKVxuXHRcdFx0PyBTVEFURV9PTlxuXHRcdFx0OiBTVEFURV9PRkY7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFN3aXRjaFxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXHQgKiBjb25zb2xlLmxvZyhlLnZhbHVlKVxuXHQgKiAvLyBcdTIxQTYgb25cblx0ICogYGBgXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldCB2YWx1ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdmFsdWVcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogZS52YWx1ZT1cIm9uXCJcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuXHQgKi9cblx0c2V0IHZhbHVlKHZhbHVlKSB7XG5cdFx0aWYgKFxuXHRcdFx0dmFsdWUgPT09IHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVzLm9uXCIpIHx8XG5cdFx0XHR2YWx1ZSA9PT0gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub2ZmXCIpXG5cdFx0KSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHRoaXMuc3RhdGUgIT09XG5cdFx0XHRcdCh2YWx1ZSA9PT0gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIikgPyBTVEFURV9PTiA6IFNUQVRFX09GRilcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcInZhbHVlXCIsIHZhbHVlKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdHRoaXMsXG5cdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0J1RoZSB2YWx1ZSBcIicgK1xuXHRcdFx0XHR2YWx1ZSArXG5cdFx0XHRcdCdcIiBtdXN0IGJlIFwiJyArXG5cdFx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVzLm9uXCIpICtcblx0XHRcdFx0J1wiIG9yIFwiJyArXG5cdFx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVzLm9mZlwiKSxcblx0XHQpO1xuXG5cdFx0c2hvd0Vycm9yLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcblx0XHRcdFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vdG9nZ2xlLXN3aXRjaEBAaW5zdGFuY2VcIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItdG9nZ2xlLXN3aXRjaFwiO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1zd2l0Y2hdYCxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0b2dnbGVPbigpIHtcblx0aWYgKCF0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5vZmZcIikpOyAvLyBjaGFuZ2UgY29sb3Jcblx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5vblwiKSk7IC8vIGNoYW5nZSBjb2xvclxuXG5cdGNvbnN0IGNhbGxiYWNrID0gdGhpcy5nZXRPcHRpb24oXCJhY3Rpb25zLm9uXCIpO1xuXHRpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRjYWxsYmFjay5jYWxsKHRoaXMpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiB0aGlzLnNldEZvcm1WYWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0dGhpcy5zZXRGb3JtVmFsdWUodGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIikpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlT2ZmKCkge1xuXHRpZiAoIXRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLm9uXCIpKTsgLy8gY2hhbmdlIGNvbG9yXG5cdHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZCh0aGlzLmdldE9wdGlvbihcImNsYXNzZXMub2ZmXCIpKTsgLy8gY2hhbmdlIGNvbG9yXG5cblx0Y29uc3QgY2FsbGJhY2sgPSB0aGlzLmdldE9wdGlvbihcImFjdGlvbnMub2ZmXCIpO1xuXHRpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRjYWxsYmFjay5jYWxsKHRoaXMpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiB0aGlzLnNldEZvcm1WYWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0dGhpcy5zZXRGb3JtVmFsdWUodGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub2ZmXCIpKTtcblx0fVxufVxuXG5mdW5jdGlvbiBzaG93RXJyb3IoKSB7XG5cdGlmICghdGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZSh0aGlzLmdldE9wdGlvbihcImNsYXNzZXMub25cIikpO1xuXHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLm9mZlwiKSk7XG5cdHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZCh0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuZXJyb3JcIikpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQW5kU2V0VmFsdWUoKSB7XG5cdGNvbnN0IHZhbHVlID0gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZVwiKTtcblxuXHRjb25zdCB2YWxpZGF0ZWRWYWx1ZXMgPSBbXTtcblx0dmFsaWRhdGVkVmFsdWVzLnB1c2godGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIikpO1xuXHR2YWxpZGF0ZWRWYWx1ZXMucHVzaCh0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vZmZcIikpO1xuXG5cdGlmICh2YWxpZGF0ZWRWYWx1ZXMuaW5jbHVkZXModmFsdWUpID09PSBmYWxzZSkge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0dGhpcyxcblx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHQnVGhlIHZhbHVlIFwiJyArXG5cdFx0XHRcdHZhbHVlICtcblx0XHRcdFx0J1wiIG11c3QgYmUgXCInICtcblx0XHRcdFx0dGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIikgK1xuXHRcdFx0XHQnXCIgb3IgXCInICtcblx0XHRcdFx0dGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub2ZmXCIpLFxuXHRcdCk7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJkaXNhYmxlZFwiLCB0cnVlKTtcblx0XHR0aGlzLmZvcm1EaXNhYmxlZENhbGxiYWNrKHRydWUpO1xuXHRcdHNob3dFcnJvci5jYWxsKHRoaXMpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuc2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgZmFsc2UpO1xuXHR0aGlzLmZvcm1EaXNhYmxlZENhbGxiYWNrKGZhbHNlKTtcblxuXHRpZiAodmFsdWUgPT09IHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVzLm9uXCIpKSB7XG5cdFx0dG9nZ2xlT24uY2FsbCh0aGlzKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0b2dnbGVPZmYuY2FsbCh0aGlzKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7aW5pdEV2ZW50SGFuZGxlcn1cbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0bGV0IGxhc3RWYWx1ZSA9IHNlbGYudmFsdWU7XG5cdHNlbGZbaW50ZXJuYWxTeW1ib2xdLmF0dGFjaE9ic2VydmVyKFxuXHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAoaXNPYmplY3QodGhpcykgJiYgdGhpcyBpbnN0YW5jZW9mIFByb3h5T2JzZXJ2ZXIpIHtcblx0XHRcdFx0Y29uc3QgbiA9IHRoaXMuZ2V0U3ViamVjdCgpPy5vcHRpb25zPy52YWx1ZTtcblx0XHRcdFx0aWYgKGxhc3RWYWx1ZSAhPT0gbikge1xuXHRcdFx0XHRcdGxhc3RWYWx1ZSA9IG47XG5cdFx0XHRcdFx0dmFsaWRhdGVBbmRTZXRWYWx1ZS5jYWxsKHNlbGYpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSksXG5cdCk7XG5cblx0c2VsZi5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgKGV2ZW50KSA9PiB7XG5cdFx0aWYgKGV2ZW50LmtleUNvZGUgPT09IDMyKSB7XG5cdFx0XHRzZWxmLnRvZ2dsZSgpO1xuXHRcdH1cblx0fSk7XG5cblx0c2VsZi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XG5cdFx0c2VsZi50b2dnbGUoKTtcblx0fSk7XG5cblx0c2VsZi5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hcIiwgKGV2ZW50KSA9PiB7XG5cdFx0c2VsZi50b2dnbGUoKTtcblx0fSk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN3aXRjaFwiIGRhdGEtbW9uc3Rlci1yb2xlPVwic3dpdGNoXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItc3RhdGUgcGF0aDp2YWx1ZSB8IGNhbGw6c3RhdGUtY2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwgb25cIiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLnRvZ2dsZVN3aXRjaE9uXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsIG9mZlwiIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMudG9nZ2xlU3dpdGNoT2ZmXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5oYW5kbGUgfCBzdWZmaXg6XFxcXCBzd2l0Y2gtc2xpZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFRvZ2dsZVN3aXRjaCk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0YXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdGluaXRNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRk9STV9SRUxPQUQsIEFUVFJJQlVURV9GT1JNX1VSTCB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGxvYWRBbmRBc3NpZ25Db250ZW50IH0gZnJvbSBcIi4vdXRpbC9mZXRjaC5tanNcIjtcblxuZXhwb3J0IHsgVGVtcGxhdGUgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZCA9IFN5bWJvbChcIndhc0luaXRpYWxpemVkXCIpO1xuXG4vKipcbiAqIEEgVGVtcGxhdGUgY29udHJvbCBpcyBhIGNvbnRyb2wgdGhhdCBjYW4gYmUgdXNlZCB0byBsb2FkIGNvbnRlbnQgZnJvbSBhIFVSTCBhbmQgZGlzcGxheSBpdCBpbiB0aGUgU2hhZG93Um9vdC5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL3RlbXBsYXRlXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS90ZW1wbGF0ZS1zaW1wbGVcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vdGVtcGxhdGUtd2l0aC1kZWZhdWx0XG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3RlbXBsYXRlLXdpdGgtcHJvY2Vzc29yXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3RlbXBsYXRlLW9uc2hvd1xuICpcbiAqIEBzaW5jZSAxLjExLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIHRlbXBsYXRlIGNvbnRyb2xcbiAqIEBmaXJlcyBtb25zdGVyLWZldGNoZWRcbiAqL1xuY2xhc3MgVGVtcGxhdGUgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vdGVtcGxhdGVcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmw9dW5kZWZpbmVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWxvYWQ9dW5kZWZpbmVkICBjdXJyZW50bHkgdGhlIG9ubHkgdmFsdWUgZGVmaW5lZCBpcyBgb25zaG93YC4gQ3VycmVudGx5IHRoZSBvbmx5IHZhbHVlIGRlZmluZWQgaXMgb25zaG93LiB0aGlzIHJlbW92ZXMgdGhlIEludGVyc2VjdGlvbk9ic2VydmVyLiB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvbnRlbnQgaXMgb25seSBsb2FkZWQgb25jZS4gcmVsb2FkaW5nIG9mIHRoZSBjb250ZW50IGRvZXMgbm90IG9jY3VyLlxuXHQgKiBAcHJvcGVydHkge09iamVjdFtdfSBwcm9jZXNzb3JzXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaCBGZXRjaCBbc2VlIFVzaW5nIEZldGNoIG1vemlsbGEub3JnXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJL1VzaW5nX0ZldGNoKVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gucmVkaXJlY3Q9ZXJyb3Jcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1ldGhvZD1HRVRcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1vZGU9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLmNyZWRlbnRpYWxzPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaC5oZWFkZXJzPXtcImFjY2VwdFwiOlwidGV4dC9odG1sXCJ9fVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHtcblx0XHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0dXJsOiBudWxsLFxuXHRcdFx0XHRyZWxvYWQ6IG51bGwsXG5cdFx0XHRcdHByb2Nlc3NvcnM6IFtdLFxuXHRcdFx0XHRmZXRjaDoge1xuXHRcdFx0XHRcdHJlZGlyZWN0OiBcImVycm9yXCIsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdG1vZGU6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0XHRjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IHtcblx0XHRcdFx0XHRcdGFjY2VwdDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cy5jYWxsKHRoaXMpLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZSBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcblx0XHRjb25zdCBsaXN0ID0gc3VwZXIub2JzZXJ2ZWRBdHRyaWJ1dGVzO1xuXHRcdGxpc3QucHVzaChBVFRSSUJVVEVfRk9STV9VUkwpO1xuXHRcdHJldHVybiBsaXN0O1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRbaW5pdE1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbaW5pdE1ldGhvZFN5bWJvbF0oKTtcblxuXHRcdC8vIGRhdGEtbW9uc3Rlci1vcHRpb25zXG5cdFx0dGhpc1thdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bQVRUUklCVVRFX0ZPUk1fVVJMXSA9ICh1cmwpID0+IHtcblx0XHRcdGlmICh0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwpKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwidXJsXCIsIG5ldyBVUkwodXJsLCBkb2N1bWVudC5sb2NhdGlvbikudG9TdHJpbmcoKSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBkZWZhdWx0IHNsb3Rcblx0ICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcblx0ICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGFcblx0ICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcblx0ICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuXHQgKiBAZmlyZXMgbW9uc3Rlci1mZXRjaGVkXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItdGVtcGxhdGVcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2FkIGNvbnRlbnQgZnJvbSB1cmxcblx0ICpcblx0ICogSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgdGhhdCB3aXRoIHRoaXMgZnVuY3Rpb24gdGhlIGxvYWRpbmcgaXMgZXhlY3V0ZWRcblx0ICogZGlyZWN0bHkuIGl0IGlzIGxvYWRlZCBhcyB3ZWxsIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IHZpc2libGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gdXJsXG5cdCAqL1xuXHRmZXRjaCh1cmwpIHtcblx0XHRpZiAoaXNTdHJpbmcodXJsKSB8fCB1cmwgaW5zdGFuY2VvZiBVUkwpIHtcblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCwgYCR7dXJsfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsb2FkQ29udGVudC5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBgYGBcbiAqIDxtb25zdGVyLXNlbGVjdCBkYXRhLW1vbnN0ZXItdXJsPVwiaHR0cHM6Ly9leGFtcGxlLmNvbS9cIj48L21vbnN0ZXItc2VsZWN0PlxuICogYGBgXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkge1xuXHRjb25zdCBvcHRpb25zID0ge307XG5cblx0Y29uc3QgdXJsID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKTtcblxuXHRpZiAoaXNTdHJpbmcodXJsKSkge1xuXHRcdG9wdGlvbnNbXCJ1cmxcIl0gPSBuZXcgVVJMKHVybCwgZG9jdW1lbnQubG9jYXRpb24pLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKSkge1xuXHRcdG9wdGlvbnNbXCJyZWxvYWRcIl0gPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9SRUxPQUQpLnRvTG93ZXJDYXNlKCk7XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgZGVmYXVsdCBzbG90XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gcmVxdWVzdCBmYWlsZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEBmaXJlcyBtb25zdGVyLWZldGNoZWRcbiAqL1xuZnVuY3Rpb24gaW5pdEludGVyc2VjdGlvbk9ic2VydmVyKCkge1xuXHRpZiAodGhpc1tpbnRlcnNlY3Rpb25PYnNlcnZlcldhc0luaXRpYWxpemVkXSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZF0gPSB0cnVlO1xuXG5cdGNvbnN0IG9wdGlvbnMgPSB7XG5cdFx0dGhyZXNob2xkOiBbMC41XSxcblx0fTtcblxuXHRjb25zdCBjYWxsYmFjayA9IChlbnRyaWVzLCBvYnNlcnZlcikgPT4ge1xuXHRcdGZvciAoY29uc3QgWywgZW50cnldIG9mIGVudHJpZXMuZW50cmllcygpKSB7XG5cdFx0XHRpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcgPT09IHRydWUpIHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwicmVsb2FkXCIpID09PSBcIm9uc2hvd1wiKSB7XG5cdFx0XHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRsb2FkQ29udGVudC5jYWxsKHRoaXMpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihjYWxsYmFjaywgb3B0aW9ucyk7XG5cdG9ic2VydmVyLm9ic2VydmUodGhpcyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGRlZmF1bHQgc2xvdFxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIHVybFxuICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IGZvdW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gY2xpZW50IGVycm9yXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEBmaXJlcyBtb25zdGVyLWZldGNoZWRcbiAqL1xuZnVuY3Rpb24gbG9hZENvbnRlbnQoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdGxldCB1cmwgPSB0aGlzLmdldE9wdGlvbihcInVybFwiLCB1bmRlZmluZWQpO1xuXG5cdGlmICh1cmwgaW5zdGFuY2VvZiBVUkwpIHtcblx0XHR1cmwgPSB1cmwudG9TdHJpbmcoKTtcblx0fVxuXG5cdGlmICghaXNTdHJpbmcodXJsKSB8fCB1cmwgPT09IFwiXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHVybFwiKTtcblx0fVxuXG5cdGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcImZldGNoXCIsIHt9KTtcblxuXHRjb25zdCBkZWZhdWx0U2xvdCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwic2xvdFtuYW1lPWRlZmF1bHRdXCIpO1xuXHRpZiAoIShkZWZhdWx0U2xvdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgZGVmYXVsdCBzbG90XCIpO1xuXHR9XG5cblx0ZGVmYXVsdFNsb3Quc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblxuXHRsZXQgY29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb250YWluZXJdYCxcblx0KTtcblx0aWYgKCEoY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0Y29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRjb250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRcdGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUsIFwiY29udGFpbmVyXCIpO1xuXHRcdHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuXHR9XG5cblx0bG9hZEFuZEFzc2lnbkNvbnRlbnQoY29udGFpbmVyLCB1cmwsIG9wdGlvbnMpXG5cdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0ZGVmYXVsdFNsb3Quc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRcdFx0Y29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cdFx0XHRydW5Qcm9jZXNzb3JzLmNhbGwodGhpcyk7XG5cdFx0fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdHRocm93IGU7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3J1blByb2Nlc3NvcnN9XG4gKi9cbmZ1bmN0aW9uIHJ1blByb2Nlc3NvcnMoKSB7XG5cdGNvbnN0IHByb2Nlc3NvcnMgPSB0aGlzLmdldE9wdGlvbihcInByb2Nlc3NvcnNcIik7XG5cdGlmICghaXNBcnJheShwcm9jZXNzb3JzKSkgcmV0dXJuIHRoaXM7XG5cblx0Zm9yIChjb25zdCBbLCBwcm9jZXNzb3JdIG9mIHByb2Nlc3NvcnMuZW50cmllcygpKSB7XG5cdFx0Y29uc3Qgc291cmNlID0gcHJvY2Vzc29yPy5zb3VyY2U7XG5cdFx0bGV0IGRlc3RpbmF0aW9uID0gcHJvY2Vzc29yPy5kZXN0aW5hdGlvbjtcblxuXHRcdGlmIChzb3VyY2UgPT09IG51bGwpIHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIFwibWlzc2luZyBzb3VyY2VcIik7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRkZXN0aW5hdGlvbiA9PT0gbnVsbCB8fFxuXHRcdFx0ZGVzdGluYXRpb24gPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0ZGVzdGluYXRpb24gPT09IFwiXCJcblx0XHQpIHtcblx0XHRcdGRlc3RpbmF0aW9uID0gXCJbXCIgKyBBVFRSSUJVVEVfUk9MRSArIFwiPWNvbnRhaW5lcl1cIjtcblx0XHR9XG5cblx0XHRpZiAoaXNTdHJpbmcoc291cmNlKSAmJiBpc1N0cmluZyhkZXN0aW5hdGlvbikpIHtcblx0XHRcdGNvbnN0IHNvdXJjZU5vZGUgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihzb3VyY2UpO1xuXHRcdFx0bGV0IGRlc3RpbmF0aW9uTm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZGVzdGluYXRpb24pO1xuXG5cdFx0XHRpZiAoZGVzdGluYXRpb25Ob2RlID09PSBudWxsKSB7XG5cdFx0XHRcdGRlc3RpbmF0aW9uTm9kZSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGRlc3RpbmF0aW9uKTtcblx0XHRcdFx0aWYgKGRlc3RpbmF0aW9uTm9kZSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdFx0XHRcImRlc3RpbmF0aW9uIG5vdCBmb3VuZFwiLFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRzb3VyY2VOb2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcblx0XHRcdFx0ZGVzdGluYXRpb25Ob2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnRcblx0XHRcdCkge1xuXHRcdFx0XHRkZXN0aW5hdGlvbk5vZGUuaW5uZXJIVE1MID0gc291cmNlTm9kZS5jbG9uZU5vZGUodHJ1ZSkuaW5uZXJIVE1MO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0XCJpbnZhbGlkIHNvdXJjZSBvciBkZXN0aW5hdGlvblwiLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8c2xvdCBuYW1lPVwiZGVmYXVsdFwiPjwvc2xvdD5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVtcGxhdGUpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEhvc3RTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBIb3N0U3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdEhvc3RTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIGhvc3QgeyBcbi5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufTp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGV4dC1zaXplLWFkanVzdDoxMDAlO3RleHQtc2l6ZS1hZGp1c3Q6MTAwJX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQscHJlLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlfWJvZHksaHRtbHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSA0MHB4KX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1pbnB1dCxtZXRlcixwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWF7YWNjZW50LWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGgpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6MTAwJTttYXJnaW46MDtvdXRsaW5lOm5vbmV9aW5wdXQsc2VsZWN0LHRleHRhcmVhe2hlaWdodDotbW96LWZpdC1jb250ZW50O2hlaWdodDpmaXQtY29udGVudDtwYWRkaW5nOi40cmVtIC42cmVtfXRleHRhcmVhe21pbi1oZWlnaHQ6NnJlbTtyZXNpemU6dmVydGljYWx9aW5wdXRbdHlwZT1jb2xvcl17aGVpZ2h0OjJyZW07bWFyZ2luOjA7cGFkZGluZzouMXJlbTt3aWR0aDoycmVtfWlucHV0OmhvdmVyOm5vdChbdHlwZT1yYWRpb10pOm5vdChbdHlwZT1jaGVja2JveF0pOm5vdChbdHlwZT1yYW5nZV0pLHNlbGVjdDpob3Zlcix0ZXh0YXJlYTpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfWlucHV0OmZvY3VzLHNlbGVjdDpmb2N1cyx0ZXh0YXJlYTpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6M3B4fUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UmFsZXdheTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBRko0QUJJQUFBQUF0M0FBQUZJUUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR29FOEcrNDZISVU4Qm1BL1UxUkJWRVFBaFFnSWdRb0pueFFSQ0FxQnVneUJtbkFMaENJQUFUWUNKQU9JUUFRZ0JZVVVCeUFNZ3h3YmZhUVhhSmVmbU56MFpvbDN2NjBjUGVaTXBHNEhKU2prNXFJSU5nNkNHTWdsWmYvL24zRjBqT0dHRFJBMXJYZUluY0pJVWtOSEduNjlxTVJEVThaYWpqczlVYnNtdG5xbkUzdjN2cWlRbWZSUXBMa0tXNlFad2FsNnM1SVVpSk5VU1VHL093b0RZNkI2NzVPalNqa0RTU011MnBlZHB1OXZKSUxVbEpkNzA3RCtlTEhwallESTRlMXVEbkxqSEh2eHBEWEdNeWR1TExuMXF0MEZDUU95RnNKWkUxK2tKcTNUK0llN0JKRklOT0FOYmk5dlRVemhJN1c0R21VTDBsV2pUL0ZRUWkvbSsreHVQUDAyb21SSGU1cG40RGdmTlpmbitSOXo5Nzl0bUVlTmFxMVJ4UnFIVGpUUE5BMkpGRWdySGRvL250L1cvNXpiZ0dDeGlhNkVrVmlBMkZoWUdJdFJtRTFadlZVdnF0U3RiN012cmQzVzcrdDIrMFhkb1RuenpqWWJwN21TSExBQ2toTVdnQ1RMNnMwV3YwQVVvaEpmRXFFM29wUGQ1OGlrSm5LbG8rM3VhZVNIWUo2ZmNJY1hqZCtyS1VFc2FFbFRxbFVsVlJtL04rZS84aVAwTDVBS296TmxKMy85aUJ3c2hNNnY1SklVSnlrZ1QzZmRyT21xNkxjcytaK3EvWHNBWEZ4RUVpUUlVYUtvc0ZuN2N0VCs3QkJTNWRxRG9sSlh1bmJsN3J0dHpEL3YzODRMZnRKYWdGRkFMWVBFNUE3Z25NclpCaHQ0bFhxc2JaS21iZHEwVHRPbXBtZ05pdWdNMlBZQmM3M01yanE3R0xzb1hIY1RwdDl1UHZGRHo4ZU4zZytzeHJQUUF3NkRURk5wL09aSTlpaW5OaXRaaFJtcFFPQ2tkb0JkQU5qVldsYXZNaXR3RE5KWC9wWUlBa1Z3bk9QL3ZXNXh6b013N1NBRkFLVStaei9rblAvWjlqK09kZnJMOEtlMnZkS2JtcGh1eEpTdUw4RVVBZ2dISWlCSFArNDQ0RUR6djFQVFEzWWtPY09TbFRIbWo2VXNkZm8yTCsvanBZZTdJSFdjUVVnY2drcExGUjFZVFc4Q0dLUVg5YjhHRkFBQUg5dG80UkhRNkdMdkZScmk0RGl3VHpBQURETUtEUHIvZlozVi9xZGdQbWtHektURW1XRVhiN1EzdHRnVFlxbzJuUDYvKzk3WGYrRi85SkhBVnNJSWNBQ0Jad1J5a0dUN2dDUjhWb2hKY1VPT1NEamlTYkFwaE1vem0ySlJwdEJ0VVc2OVhiTkZHM0lWeTJLTG9rNDgvTGZzbTUyN0lhcUJMTXVCYk9GSXdlRlVkMDF2ZUwrWTh4V2h0emNxVG0yQ0lUYzVlTEp3U0k0ZllsTFlGSVZIQXMvL1Q1M040L1l4MWhLR1UrSFNxRXJkcFBQbnM2ZnFxV0pzTmJaYUNsUXRqbE9MVU1zaGNkb0E1VFFzczRKTGM5MFN4Q09NTVVLNEtQOU5zaHB6cFg0dnd4S0NoQ0FTUkVSRS9MS3NXUmxKd05LQWNUblhBaEV5M3IxS0hjWmEvWWRYNTg0MjAvaWFYbXRHaG9DQWlJaUFSMjN2L1A5K0tUQUNBTjVoZGtDM3hVQzRFTHNnZ3ZrUjJrckVqWVNFdjBCS1NtSENoSXZZT0NBSmtLUWd5WU1NMlFvVU16Q28xNkJKODVxQVdDQ2RIZWszQUIwT0RMMUxxMFBnVGUzaFN3MmZoaTRYaFB1ZXVRV0VINnh0SUVRQWJHMk5tNW9WNTRRRlAreUtnTzJENFQ1dC93ejJYVzkyL3JwcXBMVFNJUDhxVjl2THZPZHMwTkxXeVg1MUs2b2ZidlBaRTFwYWY3dzMxOEM5WnRocTdmMzJiZnVMNjRWWkh3NTE0WXNtNWxnZk5iZkc3Vzlsc1VBNEVHejcyM3Z4d0d6cDRmUlIrbVA4THM1QjdLQjJlREpYYzZ4d2xHNjkwMnVnN0F6TEE4TlkyMUIyZEIvUDVxZk9WOHQxb255TDVqWkREZlFJNVJnOEQ5OEZ2SHN2Y2xIdUpzcmR2c0pycGMvVHIvZ3UvRWZaSnpYVXpwV2FEajdNNytVUDgvOEVrQUFWYUFTL0NSK1hzL0pONFlhSWNPMXhIWmNVYU1NYmtscnBLeTdOZlFKS1FjVVJhZ29HbUNXK0hBNkVOdmJnMzNzbDJwSVlSbUU5YklIYjBtQTZrazZsTjVHZHlNTjVFYm1RaHhIS2x3TWdUNThjZ3c3cGRVUno3bmZNY1FmY1UzdkljelZrZHJoWDhYSHE0MDEydEZPZDdrVC9hN3A3bTgzV0E3MUY3YU85TStkanZkZDZqN2Z4bStEMVB1M3ozdWlydm11eXphNTN0cnY5M2xUYjgyUlQyS2FGVlVLTU5QMzZCdlFNQ28wR3NFZGtMOHMrekxnMUV4Yk0wTmdDV0F4Z3pmODJERzFLWE1mYzRyak5jUWZIS3hTQ3VSdUJJNUFvZERERGtHZFY4Q25WVkVtRU1haW40U2EwQVhUSTBSQk5wT1lBTFZxMWFWOXZ4SmlVekhLV0NpczZtcDBCdWt4MDY5R3I3NHNuVk5ic29DbWtWTW9wNStwREdhV3oyc0xEcjJpTnQrb1pPMGIzNllTSWpXY3h2bmxOMHgwVmhsWW9XNFVSalhYS3lMRzNZM3FvTGRFYXpIQUVFb1Z1TWwzRERlRVJWcEcvamVURVIwQ1VaRVUxbW90cUZvaXdKRktVYURGaWFjU2xCSnJFalNRS0ovQ1NGU21TS2sxNjFRbGtkS2V5U1hZenNkWEtpNkk5aWtOSk10Q1VLbE91UXFVcTFWSFQxenE2K2x6ZlFOQUlhNUpwUm92V2FFUDdaeHVObVRqTUxCWXVxM1hVVGdOZFJEZDZVcTlBMzNjYnhBenhERE9OMEl4YU5WYXhkLy9zL2FqeEFFNkpuUGJGR1prdUMzdWFOVThFc0RTTFpWbXhPajFQZDhIUXhYU3BlZGtYYXdiVzZ3Wm84KzZEcml1UUZGdzVJcHZuSmg2L1pnRkpLOTMwYUVNMlhKM3lKQjBESG9waGJxZzB1cmt2TUlnWWx0YkdSUGNka2Q3VmovTlY0cGJBYmErL0U0QmpDZzlwNVplcmkvcGRNMENHLzd0WFpOeFZFKzZiWWF2UW42dW1Xd3kzRlhmNmdnK1huQXRIRGdqa1BOaVVicXBvd3ZEVXZiUmxjajVYWkhZelY4Smk0TmwxdmpzT2hyTWF4T0h4ZUR3ZWp6L1ZJSEpYbjZIMHdoZzZxRk9FVXFRbzBXTEUwb2hMQ1RLSjB5UTVMVTl5UlFwU3BVbGZabkFTQmtXcGxDbFhvVktWNnFpYlRCdE1tUUtZWVdIVlVVZnRHSXQ2Mmxkbk1IM0VwaVUwcVZRcUhiQ0x4T1UrRTQvMVhMZkJFaHpLaGdVY2dVU2hmeHdtRHo5RzVFUkFBSEw3RkhSS1F5cm53dXhRZjVyaEhCRUJSSW9TTFVZc3pVYmM0cnRNZHBsMjZGZ2Q1NXRnUUc4eC9mQVoySnpJdkdibWxyY1hBbTN3WEthN0VsZlBjUzJ0eGZxK2VnZmlIR29ETXh5QlJLSHZ5M1NKMzBRNlY4KzZtZGZac2FGVjNlT1VLc1dNeW5raHlMMXU0VkkwTDFTSkxJeFh5WXpwTHlOcWlXejBYVHBrYVR5bjFaRHRpOTBtWTAydjB0VXF0elNDbCtxcks3ckl1djF2OVJEMHNneHFHYkpvR0dmRWtsRTFZenIyOE8xbDJLZXdYOU40QURhTjFiN0wwSWFSVFhPdXk5eWl1ODJwT3dIUUJDK3BsZENyT21LME1nL3IxdlJZRW0zREJFY2dVZWdtVXgwM0c0K3dpdFFnT2ZFUkVDVlpVWTNtNHRtRUl2d1VLVXEwR0xFMDRsSUNUdUkweVRxdEZjbEVDbEtsU2E4NldFWjNKSnZzRldpN0l4S0pPQndPaDhQaGNFVHJSTjN0RHBsTUpwTmhSSWFpcUFpR1lSZ21jYmtzeTROb3ovcm9mUUw3S2NhbE5EMEZPVzNSR1p1T0JSMnhtVk14a1Vna0RsMFg3dUppdXRTOGJOR2FFK3YvWlFPd3FlODZHSUllRXNDdW92V1lmQ3EydHZwTU9CTjdNek82OEdXWExodG1nVzJmZmVIcDFNdTdxd1g1TkR3VGtwQ1NjZWZCa3hkdmZpbkFSSVJJVWFMRmlLVVJseElBaVpFMHJWcTY1SW9VU1pVbXZlcVVNcnBzL3oxWldFWjVZQmdHQUFBQUFBQ0EwV1pzZDFDcCtIdytuMi9jT2xrNHJEcFNsMUszSHIzNmpnMUNUdHd6T2NOdUNYWU5naURZaG90SDFvZ09MUlN1eDhuaWw0cjJpWWF2MG5vcnpYdloyblpqWkxmYUtEK1ZSZ0gvZmdObXBrRmJoZ2lHaVVhY0dmWE5tSzQ5RlB2WTl0dmJjVG03NSszZmRhbVc2WVN0d2tkemFDSFpjdnEwQ1M0aVU1Wm1OeExYR0JlL3JRb0hqTVAxL1FFR1ZNWkZKZ2JEREovNVQzZXlCY3ZHUFNxVGltSmNDK1lRVWpxR3YybkM3cTNuQjBET3F2MkczVnZsSWhLSVc4TVJTQlM2eVpUaU5HRlgrUkdDREhzOFBZSWRUamRBVUF5dlFrd1NDcHBoTmQyMG1wdU1qUVhLQlFrV0lqUXBtSlJVS1l4S1hjTERjNmtJZkhhVEthT01TYzRNc1ZSWVEwZXpVNkZMcFZ1UDN0TEh1d3ByWWZ0aGl3aUhGQVdrU3BtV1J0KzZuSjZVMThDdXlKODVqMngwYjBkN045cGlicTBsYjROblUrcE83dEVVTGloZFVPMmhycHRnWVhDc3hCRkEzbFEybm1GYzNGYlJqR0JnQ2Q2QlVIN3FuWEJiYWNqc0s5OVJmSURNQUZrQnNvTytuWmc4UDBCQmdNSUF0UUVhbjlXUUVzOU1BSE5HODU1NHdhK0FybnF2VFRqcEdTN2UvaWxQbWpBUlBtbnN4V2tkQUFSeU9MOXlBaHlteDdTR0tsazdHaDQ4dkR2TmZkZytJVEJacEQ5Z3pnTUlCd3dCazV0bWtFWElxcU1NYUVUZy9IVWUyNm9MVFRwNHc0ZzlVa1o1YmdieEVIdEN5VExZUEhtSlVxM3VKcHF6dlNOY3VtYkJkWFlRc2t1MUM5Mk44alR2REZFVTBydjgxN2dtcXNHalBmUnVOanZlclREbUhDRTRxK3Fiek9qdUlJdlJhRGh6WjEvVkpVcGhoaU9RS0hRd3NaNVRqZ3VBQjhDdUtyK1lJTUtld0lvTU81eHg5ZTRBRUJURFNZcG0yT1R5OG9Jb3lZb2FqZWpVUWI4SndEL1hCNWlTc3dVaWdoQXNSR2hTMENnekp6WE1DVFUxWEVaSGFUQVhUQ1FTaWNYYlk0VkNvUmdMRXhzdGxkQ3R4WjFhVW5sdXRHaHRPUXQxOC9SVWRWcGtEQnZiUzRuRW9ORm9OQnFORmlkWG4wV0pMSkNyVThDVWJxcU1oWkdwbStGOEViQklVYUxGaUtVUmx4S0VFaVZWTFZOeVJncFNwVW12dWdBWmhBR2x5cFNyVUtsS3RicG1BNndyUUxjZXZmcWFFN0RUV3M2WUhtMEUyZGNsaVdXc1dFM25tUzdHNWI2dUdWblBuTnV5eVdiSHd4RGpwV2s2TStqMjBlWU1MUS8wM1ZNbUttNFpuZ2xKU01tNDgrREppemUvS3JkQ2tWTWxLc3lJbW1lWmYwR1F5d0pCRUZ4Qy9yZ2dDSUlnQ0lJejkwYkRFd01UajhmakFVQXhkUzZWc0RjczFnOHdmWUNYck5kOThTSDhnYWprNXZ1VVBxZzRYRFA5Sm03b0dXdkdYeFNkRUxMZnJzRVNFc21XWFRjTTNjTHRIRlNHYlNIQkFqY0NpVUlYSnFIbk1sT0xSQkxhc25VSzJTdXgxenFuTUIvWk1HT3gvelB1OG9oREFEQUFPQUFDQUFtQUFrQURZSGdsQ2tDdUxWQWlTSUtGQ1Awa2hXTktQRlV3YmR5TCtzREJ5ZWdrYUoyV0VNdFdyRTYvNHZwVzdHNmU0bUR3MEJmeFpoRnQ5R3ZmaFBFQW15ZDRjTXRVcXNQbDRheTdHdWFrNXQwTjUyT093SmFCZ1NOSHNrMk5oN3FFV1pZVnE4ZStrc3hqajNFS1NYZzhMTmlsUXFGUXpFMWZ2NXR2cFFRRnRGSW15THRpdlRlV2tRQ2s1WlJlMlFpSjJackxZRFY4Nk1CWVdYNXhBUHVuazF5bnRaMng2YWJOcmlYQXNoV3JjZmtVNjN5L2ovbStnbnpOOEkzWXR4emZDZU9pQVBpN1loMXdCQktGenM3MldybGlmV2IzbitzT21rU2l6WEhUWHBtdkFuT2dlYSs3UzhGMUVIUDhuVTRJbkZZNFE1bVdwM0JBTGxlc2E3Qno0RnVPYkU0RVhSbml5azhodENPaWs4dmxjc1dZSUtyNC9jSE0zWFhJY2N5T0RzQlhIOVIzTklCalVzZDFmaWRqMGlpbkg1cmlaZlVPRFRpRlF1bHplYXg3K2pIWlZ5eGYzOFUzeExkcitVN3U0M0g1OUtlZ0s5NUp2d3Z5cW4zSWd4THlVRzJZNFFna0N2MUJURCtJdkNNUE1nMGxWWVJCblNJUWthSkVpeEZMSXk0bENDVDJobTBzRUFnRUpURHJxYjRnSjJKWW96U1VLVmVoVXBYcWJOclorWmhlamIrNXJIckd6Y2NMUWhKU011NDhlUExpemEvS3pRbk1DRUt3RUtGSllZR3lOeUsxbHRKVS9KNldtRnhVcUxzSW5YU3MzNHM0QUpuVE5QOUpWODFaVzA4YndveHdqTW9HZysxZ1BQeHdBTWVaa0JFRStWc3Vwc3hvOWNXUzVpdm5hU1VwRkpRMVRFYnRleUtqTUFMbFNRaDZSSzNnQ0NRSzNlUVU0amJFQzd1cS9BeUNESHVDQlFUc2NNYlZ1d01VQkJURFE5eVFGTTJ3eVJueUVTeEtzcUpHVTNSaUVEUFhMOURaNUY0SXBBdVNZQ0ZDazhJR1pWTUZDZE9rTHVFMUlLVkZsR2d4WW1uRU5lTkJDVlNKa25KRWorU01GRW1WSnIzcW1ES0l6R2xrU2JiZDlITGsxZngrM2UrVkNwbUtvaGdseVVCVnFreTVDcFdxVktjYVVHM1VsZnBva01iYXhOQXNMVnExYVU5R0lsT2Z2SmxNcHBqSlpESmJSanRhTldrL3J6V29NSUlhTldlc2F1dDAzeU1PMlB4SUk2TUJFOTFxZm9EeXhDU3dnQ09RS0hTVDZRVnVEaDVoRlhscHRyZ01qeUJLc3FJYUwxN0djZGtBNThBOGdDWS8zMlBMYndrbkNRQkFObXRDdzZOb0JyVklxemJ0T1VzV1U0MDVsQ3daMXREeDVwMW83VEVkSkJnU0dMNzc3QkVqbzk0YW85b2p0SzlidjUvaEFNOFJhNDZTamdtZGVMek5ETWhpVUhudTdRbUREQlorSVVGaVRjSm9IY2xJa1NwTittWkdjVGNINUljQnBjcVVSMFdvVktVNjZxWjN1c2VnRjNtbitiRmxyaXE5Qm1tblY3UGI3RzBSdENhc093S1FaRWdoNDg2REp5L2UvSjZKcnoycnZ6MTE4UGs4UHAvUDV5LzlOUEppcjlnSnd5bEtyVXk1Q3BXcVZFZmRWRk50aHJXZ1ZadjJaSVNZZXJlQm9KZEhLZWFlZzBKN1VCZXFSOFNPMWFuM3BGQU1LTHdJdFZTSisrRm1uaUhFc0ZFUVcrcGVrb001SHFmNTBseEJMTHY5ekNNQVpUUFExN245WDVrSEZYN2M2UTJKdmIrS1NJc1NMVVlzamJobXZKRUVXeExISkRYTVNLNUlrVlJwMHF1T0lLT0x6R2xrU2JiZDlITGt5VmVnTUJXNVVLd2tHV3dwVmFaY2hVcFZxcU9tajlwNXFsTlQzLy8xeHNpQVJDS1JTQUJBQlFEQWdFQWdFRjRrY0hQQTR5L2YybTdZR281QW90Q1ZTU0lhVGVWR0ZBQWx4MVJJWlJ2R2M1ajBKSWVvY3h6enBLdGNheWN4STFoU3lWKzYxL0dDd3V6QU1mUU13NkxUS2Q4b3NGQWNyTlZEUEllRnM2TEhGeGxOeXRpZURqYjhHT1FRYmhTSXRqMDJnSWc4T1ZiVWZnRi9HdGthQ3NNTVJ5QlI2RDU1bWNQakxiWWtJOEowd0p3WGYvTTFubzlkalRWZFdocGlENE1qa0NqMEdZWTZrWTFONVE0RUtnVWhXSWpRcE5DamJLb1NDTk9pWG9aYlZGOS96c0xkR1lHZ1ZiTXp3Snd6OCttcVUyc2pZMUJyY2psM2ZHL3NmejZxN29nMlkzNHZmcGRVaGUvQ1oySEg4eUFBL3hROEQzbXlBSUROQVZzQ0FKYlpueGkyY0g1czJjUkp3VmFPbTJXV3N0UEdaeFlaQTFLSVI3bXQzQXpBbXRrRlVJNWlsRGNBbTJRd29qRlhCNnIzSXNCeVZxNWwrdE5hYmN0ckYrUXJBUStsa2lVV3ppSEdLV2M1dTFGVWRNS01obnhpeG5BVTRsa2FBbm8vbmh1U2NFbkhyUTZRRWRvUjJGSVE0R0ZuWUhrZkJnSlR3Tmw0MnJRSDdkVjZJQkt4NEdESVBUU1BBdFlIY3VhL1V6ZVAxZXBaSk5hdE9BU3FGRVFrWUNXU2pLb21jdko0US9sWW1SNmJXaUVXV1ZJRkFOYUlUT1Z3MlpWSHpyNU16Qy8waS9EMWt3RVdWRC96VDliNkRHNjMyaUs0VXFDN1RQMlVOYm5rRVk4NjRYWWlLbFcrQlMzRlVLeEhEUVlvKzhCOXl6MXc0aDA3QmE0UWtrekwwTEdKR0lyclorY05YdUIzUHc2Y2VkcEFNVTZHelJRcURXN250QitjV2lzRnlvM1dDbVFqTDBNbVhvQnFOV1JGSVpJN2dEWGh0U2N0OExwQmZrSHNSUTZYcFZmSVJ2WkJVOHA4NUY0aEg4RUtueG1FWW11K0s2Y1lZM2dRZTErL1R6SkFJUkYxY0t2Tm1uMlEwTThhT1dzWGpUOWp2QkNyNTIxeHF0V1ZJNmFwTHBlaEtjeFp1VzlCV0xKM1FHcWY5SlRpdXZ2VTB3ZGdody84SUJSSVgxVnVOUXlzQnFTdFZOUFhaRHRMK05pdmN3aTFQZ0QvNU8wb3ltMkorNzhvbjByeGdBOU9DbGEwZ04wSkVQSFkvWVA0bmhJYXdiRUoySGxVblI5RGJ6ZldNUEF2eGtydEExNHg2anJBbVlVY2dSZlJsWm5uWXhzMnkrb3dMRHdrUzJWazNkZmpBQVVWSUpld0QwNnR6K0F1dzZwSXF4VGw0ZG1qb0dsWVFYRE1iMzFGSlBzKzY3ajlSTmdzSFlnd3dPY1l0dWZLNlZoQ0xNdWM0TkZUYnY5cEVRakZOak5yMExXQUpCM1hHSG00eDduQlJmWG1IUWhRMGJ6cW1PdFZUbnllUzZ4MUhiQy9hcmovWGUvN3FNT2w3TTBlVW5EUGdoeWlzRjhxSW9GYmhmRWdxeUQ0bzNvMks1UkxyTUpZQ2FDNWdySHd1cEROc1ZvWEZJMys5V1lQYTFsd3ZPcDkxZnZhbkdob21KaXA5N3VwTkhtT0greWIxK2hMSXBkZHIyMVJpQTEzSmliNzlrNnBUQjNkRkFvNzE0cFExeVJaYlRYTXlkQTdtUUU5UkZHaEwvT3hySGpkUm5vMFhkZjl5RWUwblhGZk9lcnpZK0RPM2ZpQldCRk1BbXFGYk9lZ2tBcVhUVm81ZlM2NnlPSVZsTENTZGNwNjh1ZTR5SmVsaFVQdFU2Vm0yam5OQVBxd1dhTm5udjF3N0pQNnhRWmF3U0lQbE9GTUVVR3V6UENCYjJkSlV5Z1k2UTl3cjZKVWpKcjZOWmNiRVl3TC9jeFpmZWM4MkxPc01LNDl4WDYyOFA4TnEzVERFY0lBUFp3d2hMdzU4aFBLazVKU29EQkpnaVRMRVN0UEE1MG03U3FZbU5TeDZGTnYwaVNqVTA0em1UYk5ZczRDcXpmSmZsbUMvWVpKZ05Cd0RBYUJpOGVCSFQ1SEFrNElRa0t1UkVSMmNlSENqU3RYWWhKZU1ONjhFZno0d2Zqekp4RWdnSlNjbkV5Z1VBd2xKWGRoMUp5RUMrY2hnZ1lwVGh4S3ZIaDJFaVJ5bGlTSnAyVHBLRG82VzJUSXNGV21URjZ5NUVEeTVFTUtGUEJXcUJCZmtSSUNCbFZvMWFwUmF0U3lVNmZPVnZYcStXalF3RmVUSm42YXRlTXdNZkZuMGNGZXAwNEJ1blRab2xzM3BFY1B2bDY5a0Q1OStDWk4ydWFVVTRST080MXIyalN1T2ZOMldyQkE2RTB5Wk1rTTRidzVod3NXbkM1YWNyaGt4ZW15Tlpzck50eXUydks0WnNkdHpaN0hPc3dHRXd1aGtSaU03VGc0RUM0ZW5CMW5pSkFRYm91ZEVCR1JIVnlJSVJMZWNENThJWDc4NFB6NVF3SUUyRWxPVHFRUlhIQVExNlU0aEM3Z2dDRUFnMFlBQndvS0RydUVsNitHcWJGTlBMV0dBeERBMisybVVTTk9pQmc3dDBTa1MzMW94ZU1ranJGbjJJSWpKempNU1VoT3Vra29FSlNpanlHZ3gySWEvOVpjMDNiK244K2dxa2dTMjhzNzU2Y2pVcDN6d1RyK1JQZTZTZXJsVWRUNWFldWdlL0FIZ0J6OUY0aW53RThxK0g0T3ZJVzM5RmJlV3J5L0JxTXZ2L0tTdXBpOUhrclZlZkc1WjRJYXZmanlXeStwNHNWWHloZVZUNW54SXEvemJ2YmpvcVhYMVplMGhqMEFZRk1RWnMyQmtBZ0ZJR0Z3eEhZTkI5WGRhbXdyM3M3L0NJZmdZWmlmaFQ5Z2ExMHl3dHpkWlkvaGNuZVRZYS9raXo4S0NCb3JoRlo0ZzFsWEJHR1dLQTc1MkVsSWQ5YUxLNFNGTmRWMzI5Ykc3UklJS1U0R0V2aGpyOExVMXdqQTIzczlCbWdiR2pROTdvVUt3cWlPdnlQWkVSSUNLSXpBNldUcFdRd1Y2b0psZTNWVGxqNVR5UEtPam00TmJ2T2cvVDlHVmZ4TkE5aEZoUURTdy9mUmpwQ0YyVzhPQTY4aUN5VCtmMkgvREc4QzZlK20xeC9JSTg3OU5BMzVyd0FBNjhRV0FZZ2xUVEFzWUFDRXFlTis2bXkzd1lvQTRGK2pOb1djTlM4T2lhalFRUDd5TUZhd0lqUVJnU1VNTEkwUTduMVJBWDZSRjhZS0lJSlVvWjN5Z0MrUTJRb3NDa3RPNWx1TUhHVWFFM2VMZThWajBocXBXQXBJRWFsT2FwRzZyZFcrN3FSQUZjQ2VZaWtBNEJQVHNMaC93VVdmT2J4OVI2VThxZkE0U0tuNWc3WUNYQVNRQ1FCWU4za0EvLzFOMWYvazZTLzBZLzFvQnI3NEdYeHgrMk5mMHUrLzdndnFDL0x6ejBFZjlPUkJxam4xUGdMb1pROGIrMVowYzhnTi9sLzJEV2ZObWZLcFgxMDM3ejJMeG4zbHRCWFRiRTVaOElQdmZHL0dKb1NEeTQ2QU14WTJEZ0VoRVRFSkdTVU1Ub1dncGtjeE1ESjcyNFIzL2VIMThTQ0NTNElreVhReVpNcVNyMENoSXNVTWF0U3AxNkJKTXlNVE00dE9iL25OVzM3eXZ2LzUyT2MrOFlYZi9Uc3UzTExNZVQ5YmRYdDJjTmV2WHZMeWFQakZEVStOZ1JjTnVPQjFyM25ETEJJR1J5TlFHRHhPeWptb1ZJT0xoNitVR0F3QWtvUDh3Sk9PaGhiSkJOVXZocFVOTFpxRFU2SjBLVktseWJPYlhnNnRFaFZLbGFsUzdsdVYyclZvMWNhcVZnZHZuYU1RQ2N1V1hISFY1Y2k0V1VRbVVtVTBNTUFtdGdRc0JTenRGM1JiQkJld0ZJQXc1bDQxaWpjYkJtUXA2eTNBRU50ODJkQWt3anhuejdQNzhWVVVEQi9WbXVBZCt4NTZjUCsrdlh2R1JrZUdoMVlzWDdaMHllakk4T0tiRnkxY01EUTRNSC9lM0RteisvdDZlN3E3T2p2YTIzS3RMZGxNT3BWc2JtcmNnV0EwN1BjZWZlVGhoN3FkZHF2WnVQK3VkRzIxbHNUQVArZno2ZHIxbW9wKzBMSjFURWdnUzZDdXZDNW95QWl1YjAxM1lQTUxiWXpUYk9EQVRYNVlFaVl5Y3BVNUlWY1BmSkRsSitvT3Vkc3ZMT1V5Q0hBMGVwU2hSZDRkdUg0S2dFcE1FT1daR2I1RUZjTWpWSmtCVUJVQlJaa0EyWktOUnNBTjErMTB4Szh0aTVMdnU5Q1FPY1p3eG9idFZKWVNOWVNGSTMvZXp3aUxKZFFFbFZBVnFiRmZWajdHRllLVXdpTDJNOWNTZGdObThMSGNzQUlsdjN0K3BUemlrZ2pTOExobnBSQTR5RHBiTzdCY2VraExJUnR5cnNvM2hPRmJpVTI5RmdtS1k1SjgyeFJkOHF5bHNGV2tFSC9iYW44bG5EdjNaeTVlNERWR2laM09RUkRCRDQ2NFhuV1Rtb0ZEUjUydVhKa3psZnlDUk4wakZVTGVxWlZMTlFFWG1WRWxEb3RaTk9maXpRNFJMYmkwSzNWZlFpdU9LT0VTTUZUdjEzVHZpNkNWeVU3V3hNbUtXM1VidERtbkkxN3lYM0hjbndqZ29mb1U0bWFTVWxMbklQb2Qwdzh5djY2b1dJTWRTaUdQVXYydGdtQTRFZGExMEZybnRRbS9lbHRoZnd1aEFIV0tzK0pzLzN6cXRUeFNmY1pkV3ZNQmtFa28yT1dkNWg4VnhrbDF3UTB0V3FmWHhqbmJYVHdEdzVvbVdaNXFkdkhJRGJLWXh5Zzk3MHBKdnpBejhuMzVPTFJrZlNiZERUcFpnTk05bFFKbTJpVTMvSDBuZ3h2SDI5ZEFlWTJRRFF2eFo0elNocFFiaEFqQm13VmJJN0Y3SXZKN2tpTjFGSkdXTnVBbjB6TUV5UmwwaDJOMTdKQ0tpZ0NQS2Z5OW5ITk90enduSXp3bWd1dlpaL1RNQmNRbEhBZnc1RXhIRHNYR3VGdVNlbzN5Q0puWlJiM1c3VWYzYU5aNzNFWUs3a09TbFZKc3dZWXlKQ3RjR00xR3JqOThjbkhoa0ZtdTdQZE93bjFXelIwaHhUblJVOGFCSm14cUg5d1FJSWMvZlVXQkhqOHFySVNqYk8yaFBXN2xSSWFvREpwS3A2V3JWSGIwb2w1TG5LTHlGajJUSGdteTk2QXBaNi9scTFpTlBZOHZ3REt6NWdzK0UvQ1pJQ1B3Y2FjcWNuUmlyMVJ6UHNuQ2dRVmFnNVVNcktHSjZ5NCt5UFlaSTd5aktUSktTVU40b1VUN0dUZGl4TzBEa2ZjVFVkbWthQnpxUGJpNVNpS2ZKYUpEREtZMVpsMTJ1MVJBT2t3U3A3ekhuNlFrYWlwTkxyNkUwcEhnbUlRME8zeEJuV1N5WTIwY3VIMnpXWXhOUTN3Mm1Gd1A4eGs1Y0tlRHNkVWFrS2xMSE5KRzhzNXh6eWhOdHRFQmlSRE5Rc2NDbDJ2MlpBbjFDaXR4TUVqTE13RzlwMWREdGRxaXdKVE5DZkxTcVJTMEF0VnVxUVBJc1FDUlpJbTh4NjZJTndwVENNSkMydllIck5NV013NVR4SjRWaTRIZ1JSb2tpZ0ZLUFRwbjQ1SllneHFoMGJvcWd1SFA2SWdrUVRLVlBwOUJtQ3R5U09KZDZieUUwbFExZG5rdGxjaUdVbXBRTzl0Qm42QUJSQnZZYmgvb1hhcG5DQzc1R0dJeGw4VytaWk9qb0hVaHU3TkMyNVVKb0xkb3ZDMVZvQWkyRkFYcCtNNE4xRHlBelVVamVTdjV3RzdaYmY5RWNUNmpNYnNKMUJwWS9KdG9sN04wanBRaGdMaGNZZlllVVoyQlhxR1VIODVROFJSdHoyZlFkbnpubGxCMThkQ0RNM0JNMFJWbUxYR1BGVlJqRWRRaExQOURpSnZwTnpvVUF2ZWc5WkFMZklqVFZiNGV0NXZQTTlBVVZDMTFKWUJNeUVwSm9MYXdIVnMzQTBDTkQwY2cyL3huWEpOK0lKVzRBS2YxR1NVYTNWQmN1TXJYbFVZVHVnWm9PelBmV0tSdWM4cVlNbWxPTUt3bDd4MGtLdHN3bGYyWlJzcmoxaGcyeXpxQmFQbEFhTWxrUkM3ekc0V2FIYzhBQnJseTBtRFZnUGhLZzYwS0lHc2xuMUZGUUdvQkhZMVRHdjlLZ0pwM1ZvbzNPQkl1QTQ4NW9yaDBjME5HMkxYNnlTQTlzR2NCYW4yUWhvYmduaUo2RmV0dUtTSFhMcDVlY04xRmkxbzNNZ01tS2R3MElyRmhqODFLaVVMRHZSSkRJNUtTVWxLQUZJS3hWekN1Z1V4WHBHZ1pmQWdQRUU5ME5lekt6cHh2SGJQVFZxMmRPYXE4NDJFTjl1eVR6SzJGWXQrV2RRWkRlNFViZUIxOHN3dmxRVUNpRnJiTCt5QzdXcWx6Wk9VYjJWcFlRWnUxbVBVa1QyWHk3MjZOajBncFVtb0VXSWVyL0ZKa2drZ2JBQUw0RGgvMGxvNUpEQk1DN2tnMER0elBvZ0YwSzdMV0xYUjA2UEVOMG9vSEgxbHVlSmtRRFBJV1U2TVpPNkxhMnNndW5GNTA4QzJsWUdaUGxjeDJYSjF0dVhGYnJlNTFDSVVXU2hiNGZvajZMZ0djbWxnK1VDaVNpeGNIOXJKNlRUSmRBQzI0QXBHYnNhNWhhL05JcitoOUllYVhJQ2ladThDNEpMeldUN2dLWVQ3NjM5K0FBakxscHBkWEFMYm10L3pjZFo4bmZJL3N3WE5iWmR3OW1SMVNPN0lmZ1pLQy80TUN3cEN3NXNEMWo0MHdJdWJkdHBCTmNzVkhtdVVQdmhha3N4TTlGOEJMa3NRMzZNL0JPSkFRdDhUQkJTVWJTb2p3SzMyRVliZVFyenVZR2E5bldGaE9LVGxRQnc5Q0ZqOWpURzRKM05nRHZldUFnMVVPaGI0S0FwOXBIZ2FNSktiMFNsb0w3RG9kSHNManB0WGhrdk9hYW9lMENIakRVNnRrS0NCNDJnWkp6UkRjUG8yeE5lSnJaRHhjWGVWM1YyOEp3azBISmhVMDhMdEdEUU1xS09QM1RHb0FJNlluYkVrUndEUmszTzRraTYxSW5xVDgxMnhLYmlpb0JNR0U1RExwTUtyaU9wb3ZGTHRiSWU5eHFNcS9TVFlzeTBaUUY1eWFaYXZwL2ErSDd1YkRucFNzaUJ3SkZhZ0JNaTd3VldjN1VIcWxtdzNmY0x2dm1uVlJTRllSUUVuZ3huSHZ1eDhRMUNWN0FJQXVBSURkQUgxQStMd2crZ0hnUDRDOVFMZ0JBTmFldk9Ud29xTUhVb05nbVZtRXlESTdMcnhMSERYWEVrN1pBTUk5ek9iR3lDR0RiazZHNVVnblRwUGMzK2paUU1qWUdVeXVOWGcrTS9UaWJJMmNCeGdKd2tiMGJnaTRmWmY1QUJDV1Q3QkRTTThZZVMvSjhubzRJc3hRWWs1MXdaS200NENqdzZwVGZRalhqVUx2OWVqUE9WS0ozUGhTMmlJZnVsQUs2c01MdXpZNU9uL2JIemhaRE4yR2FQaDQ2NlpMVVVaRW1XSjNYUkcrOEErdjVZT09sRklNUkZCNCtMald5dVN1U09lcDNxclBXck5Cb1J2R0RXYmdxY3U5NzE1a1h6MkJFTUZVWlhmaHZMOVVEL091bTY0d3o4MUlrc1NYdlp1SU9xY1lSQ3B0K0RVaWdzdUUzUTdidmc4ejlxRXpmOG1mZUhGbjU1c0pSVXVMWXhRM2ZNSFp1Tzd2aGs4TTA5MVF4TEJaMVNlMmlRTlYwZGpFdUNGVGJueWplYXFOV3REVU9icUplSnNCdW5JUTdQS1dxdkhQUEZ4RVhUTUtSamZBRGMrTTliNzVXaXRLZU4yVFR3UE1iMFBBOXEyRlVVR1NhTGhzbGpEQVVBTU1MZEtZUUhWamN3cGdZS293YVVRQzE2cnJoeEJEUlUvYVpnYkVvVXMrQTEwVHhrc25rU0xqWmF5eVJhK1BoS0tOakJUOExvU3FycUJHaXFHU1JpRjVUQkM3aDUzQ2lvZUY0V0ZNVjF6SzVqRFBvYmpIZ1A1YTlzQkREMWlPODRXY0w5NENvNUVkY0lrSGxOZkp0Zm1tQUV0K0FwMUphdHc3djVMeGJTVTNtZUtDV3MxM2NvZFFVWWxKVnYrOHRtdXJBR29FMW5wTWhaZXhUTG9QTDBrZzdVZXkyTUxFdXZNMHk0NUtsd0dsV3hBaG5IZk5qWmFXTmNNNnJKYk1pbWkwK3N6djlCQnFPdXRmUFZFakhqSWJOZDVwYWFObWJIM0ZMSnZpMXRsT3hOc290ZGlPd1Q5bmVQTzcrZVNHRkZUejBUYWQ5WWRtQS9wSjhxRmE1Z3NmYW9pc3c2MUFudDhPdmorMjQyV0szUlZyK2N5T0NHVFhUWjdacTN5SEpRTFIrcWZ1U2JnUGw0VW9Vbm5GTXFsdUg5QVA4UmlPMWthbHN4ZWVIWG5rdU5JZTkrNjA2emloMXM4T0s4NmVrTXI2cXNCczhydVVxNnhGSDBnVWZWc09ZYW4zV1N0QVJmN0Y1MHY2d2R1S2IwWXYyYnNwMnZDd1NxRmFNQXJySUx2WVYwcXgvVHM2Y0Q5L1Iwdm1iN3ErVWo0UUpESGZMd3FhMUwyWVNhS2U2b2NXWFQ2RWgrVnd1YVJ5SHNwTHRpVU1lZnBKUlVZSXZkT3A1WUYrL01oZ0JCMnBmd0dqa0tjY2Yrd1NJK0JWek9YTEdnMWN4VzREVmY5SE9hYUhpU3MwL1IzZGZTaThoZEZ4WWg3TXdsRi9qeWh3RGFnRi9DZTJ6MGh3d0Y0WDVKYkRzRkp1QXdNME5xdGpzR01EQ1Y2R0sxOWhqVUFEYlJON3lHZGhPaDh1d0hMMzBHenF5bG1jdjdhSWc3UW9selBuTHdyYmpjTnYzNlhLYUZaejRpOFBWSGhlUTNvUXBhcUxKREkzU0RrRVhMSE1DSlRaYVBLeWZRVFVXcjg2cUhjVzZaVGU1b003dmF0TkRYa0ZsY2tVUDZHU1VRaFZXaXRGMlc3MTlmUE9aSGU3ZzhXcjdGbTI0eThoSGtUbVJnVjd2alBSWFBxNGREODBhMGFaZzQzZkJWNXRXdnZJNkFCWU9nZkd1dGk4aS9rcXhRdUxFR29HMW81ZlRtbTZuc1dacmRsdUUyYnIwTGdrZFNoN0YxTVM1cEQwRFpEdzhVaXRXS0ZtdXN4MkgyMXhEL2JtN3h4czhPSDFsaVlKU1Z3NFl1andoeFMzMEJ3MjVCN2FDYkd0Z0haVUxJbTZ1ZWF0eGV5cHJWa3ErbEZuQm1SVkFkMm9VVDVDVjZQTGtYWDRrYUtiZGdUbUZoamVzby9LakM4SW1sZ2JMeXJHSzM4UzdKanF0MUU1YUNNaVhvd2ErVVBneTNiSjU2ZG9ISWd4UFBnYndKcmRXdGxPR0o3TUNOKzA1aTZWN1VtamlqaFNtSS9lb2RYakkyV3hRSGphbWZWT1NQeW5XRHQ1OGJveTh5dkxONHE5M0pocEw1cFdCblJHNmxhYTFwRVY1bS91SUFwUk43UlhuVGpJcm1uQTJzSGtacEdjRzZ5czZaZVdYejZkOG5UVGZ0WmhRT2JhQlhtTFZNVnFaa2dOREZnRGk2WGxUWW05Y1UyV1lqcHpTU0ZBU0J0cXFzU29saVVQS1VmYkFEMStwaWJXWjV5YVl6aS9mbVdzSFJYaWNqLzlOcDBaemZpWnRKMzExMWVkZ2ZBdFg4VyttbXYyNTFkZkV3RkF0cUc4dHoyeUR6TGlEdHZhYmVyVytKcU5iaEN4dFNnck02cTRzbFRKUzQxeGFDcEJHaHBwRHJyaVFRV1Y3TmdkajRGNmhTVWptb0xTQnN0WlRkdmRmaEFZbnJCalVpem0rZ3dWdTh6cWhzV2IzeC9GKzVYRVVEVVRRWFFDeHdkSHh5NXZpNllIbnMyOFVpSmgwbjd4SVdDMzVsMnNHVlFxU0xIZjFDTjdnQ1FLa2VHZ1I4YVRXcVcvQmxmNUtDQVFnVG11TEN4TXpSampMSXNSNFFnM1ZqbzYrYXZYdG1zQ0pvWk1Pa2NiekYxS09IR0Q3Wkd5a2xjV014c2VpRHNTbVV3Q1NSYnhNK09NVllneEtnd3ZSNVpOTUNSNDFPUXVIc3p1UTErYTcrdWYzZ01lUDNHUkdYSE0wR09kYkdoZmY3eklhUkVCK094dlRoMDk4QnMzZi9EQVkzcG9EeXJRVXU2VEVIeVVoNWR0Y2ljK09DaFFGamVGK1JEejR0dnFkRDlGdE9DaUEya2ZJSHZlazJQTFJmdEFPOGR4WXU0ZTBMaXo3V0J5eSt3RHhYNlpHdXJaYWJydXpHeldvTyttQytaRmtuR3NLVHVMek5IQ0pDNUg4Z1V6RnM1M1dyQlZNZ0szSWxPQkZML0JFUVdtOWpUbWNSOFVFazBMSi9RRU1EZmdQSFRaQ3FxV0Yvb0tlZXY0VVI0cUdWVVM1enhCME5meXJRZG5UOHdmZEVhTHRwY2ozSmg0RmEvR1Q2WWM1WnVBaTJEanV3YytJYituT0k3dzZNYXFPK0N2S2EwanphZWY0RHFRb2VVSUFrZGttNXU1blBPN1ptd1R6QUE1VlVmeG91UzJHRkFJTUFoQTFTK2ZZWVZJcFBjWGlGTEZDam1nZU9Fd0FVZERJSHc2MFBncEpORDJPRlJGYndJTUVheGhwS1dXNzJYN2xtdzhPWVdPRncyZFpzbjJkTnY4SnArZkZJNFpobVQ5d1pjWmE5Z1N1QUJUcnU4aHc1azBtZUNqN1NzZTlkS2dnSlBSUmdVc2VVVkhhayt4eDhNUTFGR0RoTXFhdWxtblBMbkF0RFlBQ1M5T1c2SmV4ZTFGKzR3OXZKa3o1VXgrcWdXODVqa3h3enc1d1dBVzVtSFp5ZnpPUmJOTXpDT2M1amRWcGhac1Vwc2UrcEdnUnB4bVo0K1o4OWk5cE8zeHhoZzVSaCsvNGJVQ2pFcGg2ME9QMS9HV1pyV29yaTdhWld1UWkrTFpKd1lwMGJOTWVmWmh3eDQ5OWluNkZKY0FLNERtQUdUSWlGV0p4RFR6d2xIZnpmemF2UVlkNHlZTXlEU1lQQ0xObUpDenVGRmJwbzVFdWlpUVpKbVFsckl6a0V4QkdtS3AyTFRqaWtpUHNLZlB2RjJKZEQ0djFFL3MyZTI2c3hnQ3J1Q0I2TXlaTGJzSVAyVGQ5dW5NN3Jzc3RQMkg2RkJnVWxPQjYwQy96WTRxM1F5MHBybmNBUzdKWk04MTJ5WWRKWkw0NGdJRE51NDYyWVJhVHp5NUhLcTdManhqRk9jYnhhWFpwQjByYlpiVVBUT2IvN3F4a2ZUUE9nWi9kS0tSZ0d6N2JmSXNvUTBEeHYzejk4M0xONFlvdm9hYm1OWjJuak9LSG5aOXNSZFRHakpxeElPWU1pZG5Kd1JaRHBrVDIycHBrZElVTlhGU0JoWEtIR3VCaCtobDMrajViU3IyWE1PN1NCM1ZLYVgyQmpyT01tMTRxK1JzT0dCSHN3WUZOcitrWUx6cUFNMDNuakI5OUdqcWprYUR4TWZPYU5yVzZFOVZNbEJpbFRWeGNXUmlBSmV2L1ArVDRhNE5iWXFFc2tkc1M0YTRyVktMS1FKTkJKUUZiU3JmanRCbU1vRVVLU3ZqZkFsQWxZVGpTMFJoMU5IVXRNV0hXNEZuMzBZVTBJNEk5QVBVOXJ3dHVOK2JlbmxTY3RpRVRSWW00ZzRqN3Q0QUpKR29jZW9rT1JnUU04ejBmSDlOTExhU1FSRThXY0M0RmZrYXNDYlpoWDZrNHNTYkdYTk5MZEl2bVFIT0JHb0dWNHRnTkswczkzeGZBdnJpN2VtTUFoYVVnY0dJeXlmZmVYU3BiSGc5L2Q4bTk1dTgvdCtUdTcvdCs3YTRUeC9zby9lNU5Qd3pzcHZLUnJOVGoxenAvay9iL3pYMm9FLy8vMlNXZStOcXZnbVJkVTBhS2p3Ukl2MTZwRTVGVWVuemIzbzc1QWpnSEVPa0lGOStHWEk5ZkVOWUtIOWNSa1B5cVExR2hQWFMrTExHbm1YMmVHNTlrNVRadXlyRlhNOURtVDdLbDRMbW1SellZTGk1UjJmRGtzS0liZkM1cmt4Z0FEYjZSMnVUZmVvMS9KYUpQNFoydFFidjc1aWJ1Rzl2UWErb00rWGF1aUthSFpzOTFySXlRVytyQm1Jb2d2NFlFemgzMTlmZHQ2ZWdyODY1ZFdWNTY0ckorSlNLK0c3aVUrSWViai9lTHhmSTloRlhPdkV4Y1ZkTkM5NVN4eDBwOUkvYVV6MmFWWXhYdmFxNWE5amltNzJtU2Nic0F6MkxhME9PYnIwdkNROVlIZGhBcExsWGEvV011b3crYy8rcVZ2MER5cU1wWExKbWZFTFg4RWFEYnUxeHYrRVd0SkJ2b29UMGEra1cyT2xtNDJZM0FrUm1EUVlYNlByalpXdjkycEprVUJOaVg2Z28yZExoZThZakVRTzF3eXFjdi9QMmoydWk1SDJQeXl0T2QzSk9BTTd1MUUyMi9GcW5mVVJyZHZiMDRpN29YNE5EcnlmSkxSb3VESTdhbXJ2VnE5dys3YXAwMTRqRkZ4cXhOL2VxVjdyODJhbWFjNzEyNVVDd3VVZFg2K2lsQWlsa3ZzV3VHQWhWcW8yTytWT0srZFdDZlFjWjdTcUMrT3E5L3JyTVBJTXp1TVNhN0tHMkZqTmdpTGNrMy8rbzVWdEROMUZ4RGpScHNpeE0zalp3eXdTa0NzSXJ4QkdsbWV4S091eVhTcXdYMUl3V2pLblVhTlNyeHY3bXpxTnVUbFVVVlpxMDNjbGErdy9MZEJPNlc4NXNVYnRJS0lZVktMNkg3SGhXVXJPcjRDRnFaUER4bSsvV2g1UlBIcVg0TFJOeUlnalBGMGVVbERJVHRIT2VxcmJ1bi9WVGlmVUt3V2lobUlwQW8xNE4vcC9nU3F6ZzdsdWowcjdXS0tONk9DUHhsNFhMQjFCYndLRUd2WXdxeXpVYk83bk5xdnJIbTd0b2ZxQk0wZExuZHF1dmRFTEI4bUI1bjF6UFdPamE1SkFxU0VRclhkQ0gzUERld24yaCt3b0phL1dTd3NZaEs5TWpXc2wwNjdvdDNBRkRzbFhuODdkU2hpUm52dm1hNkJPdjhuUU9tSFVRVFJ3dlhXOS9ENnJRY1MwMlhqMzNEYkkvdnorZlhJYnVTcFZ2VnF2SDFYZk52WHV1bWhnM1ZteStyUWh5alY5eVhuUmEyYjJsTGRhL2pIOGJiYVV0N042YTRQaWxUWmMzbWJsakpib3l6b3Zjb3U4dXovdVBJTkR6ODg0Uk9qNndXMjEwdHlPMG9yRlVvUFhYTlFiazlaSlhHVmtyb0c2Wk15OVhVUExhMHo2clNncWxnWEtsYlZCYnE0MHFjWDkzL3QwUGNadnNrVkpsdE0xT3liaHZLa3l0S09ZTS91VjBzVmdUVWVJQkZXRmcydVVPMERmekY5YldCWHRqRGp2U0lIbFYyODJrbkJsTC9iLzlOanE0d00rTUJndG5FUmVENWx6V1lEUzJHcTB2LzBDYm02UmExM3dINUEvcmt0eWZMZTNZMnM4cTlyeGIvS3VyR0lqbUhIcFEvc2E5RiszRzFqUmxObVlvUXc1WDA4WDJmdnJUUG1LU1pEeGRqTXZVcExKSHBEa2RCYmN4d1JUNkJ4R0NCc1F4MUtydFNUbXNlQUNaQngyd2tWM2pmTFRZMElKNmdraTdLZVFjWHVnTCt1YlFqNVhQYnREb3pCbXpvY3RSYSt6TjJreVF1d1liS1gzbmNvTzBXbGtRc0kvT0NYcmNmYjdQR0hKZnlmNFRQdjhPVmkydHNKeWJZemNiTXJnckJPWEdKUHUvT2htQkVKVWZqZ25pR0M2Sjd3Z0N1R0M4eHlWUkZOa1VuZDVBVnFIM0xIQXk4MXdrMHVSeUpXR2RiOGo3MklDMGxjN05iMnNnZk0yNmVVTzJZZmJ3KzFtS1NtWDBKbFBXWkd3MVVZYjZER2t5WlNsRGVzTnQxYlVYbDBaNW82RWZlNTBBV214c1FkMUJwTU1ZZEE0djlQdURRd0hYaUg5NkNiNXNNZWZTQm9NaFo4U2FNL3EvOUM2YkxDNU5HWTBwS2doWk8vMzJxVDBWVUFZcUhXREdxVmFKaDhUVkg5N04wUm5pa2FwZHlsMm5CSklaVkJxancxQ3JqZ0xhNldBelpuQjNlWUVob3NyTDVBWUlaMmEyY3hybmJML1dSaVVSZmRpMDRNeHMyNlRzRzFPbFl2L1BINGNBaFRvZ0orbWF1RUlsaWUwSUFySkxKTkRtYkhNb0UwcXIvNmlMbkNTajE0ZDhOSDVxYVZXOVFSQXRJb3UweTdOa3R1eEVYT0xVR2M2azIyRDkvVGMycy9qZm5SQWhKSVNoakF1KzZXMjE0RDFRTWZFQmU4bmdJK1FrZWNPbU5ILzcrU21kTVBHZGJpRTB5YXRndjdOdkdyOEtCYkN5SUFsMDJsb2NkRWU2MnV2Y2E3dXMyZGN1eWZLNXlDTDFzdkplZDYyekxyd1M4blI3bmRpaDJSV05CdmhTdDdvcFc0czNLR3Y5SjRJNG44ZlNLQ1B1WHFOQWVhTlJVQ1F2Tm1hVlRCQnVOeGpoTm5jd2l4b01HZFJ6cm04ekd1RDJ6U256WjBZYnVqSldreWxyTS9UWWQ5WWRFb3ltak4zWWJiM3JWcmJ3WEJ6cG9QV0p2QjNVZWM4NzE1KzVzYlhDS1pOcGtDSzQyRGZrYzQyRXdxN1JSWDZmUG8yNW91ZjVpZEdXZXQ4OHAydGtXcUt3aEZnSldITXRSck01WjV5MS82N1QzQ1JSNjFzeFg0elV1Nk1wRkRkbnJJYnVXZ2ZWemFuZjJGdEpLY3NuLzZyTXJTbkthRXphMCtjK0hDcG0rcnovZWNnVFJOKy8vYlZXWXdwM2hhR2MzbTlkTWp0UWh4TisyQ0dJb1NwSmZIc1F3Z1hqdmFSbFAzdEhDQUswK2RPODJwaFFHamVZYzlaOXVPNHVuYXcwVSt1d3BOU09xTFJOYmRYME5EdXNtQThPVlQwbmtEVjlKVkFGNEFGUm5NOHROalRodFNGWlRtOUEybDJCTkthMzVxbjJFeWRJVDJKMExvNzdvVG5Ra3phZC8yc3hFVVNLL3hwQXJicnVsQjFnSmozNWZWR1cyME1XYVZZOVd1Um0zVkl4cmViZjR0cCs1WktPeDVzaFBWTm5KSUV1UDhjVzhZc2NTaDNwYXBKUzlyUjg4UERPTExFR09qY1hFYis1YS8rbFpzbC9oRzlPZ3Z1YnZDZC9jWDJkVGhWS0tBMlY2Z3I1Snh3SThaeEFDRm9wOVd1dWF2TnQybFF6YWFMcUZHcXZHaFRTZ2t1UjhvYitzQllPZS9WZG91OUZGTTk1NnJoUThNT1llRk5BR1hpR2ZHWlVPYnBNbU9WTHZpVDUvbU00Q2JmVHJTNDhqdGk5Zi9uSkNkY3g2UzJ6TlBuSi9MeEh0TmpycWF0ZktES1M1TTF2WjFDdmZmNzY1MlNJVnArZVFib0F2cUFNR1Y2UHI1MzRkUGFOcHM5VTNpYzlUeEtWdG4rOFNBTXpIdGxZdnZ6aHJ5M3ZGNzVYWUhub3EyWExIdjdLL0c3QmU0VTFnNGYvV1ZXL1JpSHhDNzAvejZDT2Z2N2E1enJoL3B6L0pMMUs4d2FyYU9idDFsZjY1QTlDYzErWkkzK1U3d0dtVllUSm9oNlNrajFnMTVjYzJTNTVkOC9Md3VMWVBPQWVFSUFJQk00Z0w3b1dxMkwveVRjT3JQTGU1WUxVOE03Tzd0cytmQnNtVnZKOWNOVlVFWG5xNkNuU2dEc3JFUFdSUnNEWk1Kc24rK2FGVzZLWWhyR1U1Mm9TNVJnYTV2bVZGUXVWQzhzaGVZVlpGakFaMUZ2ajlRbkhIOUxYZUt5KzlpY1RFeXk2aTVXemVodWgrK3E3MXh4N0ZsSHRYTVNFSjZaaGhlU1E1RDV6L1VVVmk1U0xYSWxkdU95K3hFZk1DNUQwc1F6cHJpWFU5UmFuL1RPSnFrRXRXSGUyektOeWVpSis1bzdpMFZWWTI2enBYd0NseGNmU1pEOUM3NTEvcGN5WU12QzE0ekxKVmV4VVJoL1g0blZxVXBVSVhMZHJzQXVwVnRWdGZ1d1pyOWdMTVBJaVJNc1ZqcTlnYUp6R3JWSkNTY2Vtd1lqZlB4QUJubFRxUUZRZGpJNUhOb2UxQzVPMDFaS2lnWVdCTFlCZExOWWsvWmRleFJvVjRTQjJmTHcxYzBYQ0l2bXpxMHFyeUZLQlNqaVRrZm9ZWnZUbzd3c3JBTUhaZnpSQTU5WWpCWlc2UDEwK3ZzcGVqK0VlQlpyWjh1ZWQwODU2eXNDNUJEZncrMWN1RW9wb3JhWlVsOVlWR25Mc2pSQlpFeFBOSmdLQjFzWm1IbDZUYUF6WThHMWVHV0ZORzZLQ2MrUDFJbzB0cTlMSEtZWFVmWncvZjhXUk5ONzNCZmg1a2tnZXFmOFpXUzJZdmtzM0VqN3BmcWk3MW01b0pNZ0dJNlZOMU9GNk1vMi9yNGx1YmxBVFJ0NnBCa0JOOTVudFhZekgyVC9Qek1WK1llaTU4NXh1VFQxWVMvODJWN2VuTlZacmEzVlM2T0dCZ0MreXNJVitZM2VLWHIzQUUvQU8wczc1bDlZWTBwU0xHcWxVQmtpb0RSL3hWRHF0NTcvQTNhaysxVGR1THVHOWFXZlNBeHFYYjQ3UmxqV3E4WUNiREFtM1lCQUdPNitIT1FwNW1ITWRwakVZdTFONEQ2TlhCUGdJdG9saEErb21oY21uUmRCUk53c2dtdVVtZis4eUZJMklFSGxZYkcxWk1RekIwTERrTndIa0U3VFc0Znp1M0MweGh6VjNiMmw2MVpBbjZCbVNLZUZhS1NNSUdLbGtlQTl4NjRxOStYTmR2bjVvbVkyV3J3ejE5ZGN5L3RtTWZ3NjAzT0tVcndqMXpxNVY5M0FrODZ5WlJxUEZsclJZY3FJNXBQRzhqejNUYkRUVldDMnR2KzhxRnFzSUk3R2haeXMrK1QxTFhUUDN5NC96eUxjYWJUN043ZEFFM2RUdGliak1venlrVm9LZUFHWTJ4cUc2czJLSWU3UkphZzNrVE9vTVpjRDhiblZFSnFZRjRWckhhNkw3aVRKcGtiTVhjMFRxT0d6S25WR2FEVTJJMW9XcHpVd2Y1QU5WWU0rZ215RTA3Z1JNTWgwV0lzWnlVVW1oaHVuWFdaTW01ZisvSGJ2czA4bURLck9yY2E1YXNHNWlEajdhSmJZNDBYbk9zRVpjVXF3YkR2L2xmckRiVWRXcHlYcUhhdGN4YlhUVFRnYmVKNzhlWEY1bjN6eUxaUEZ2ck9EZ25oT0JwL3ZIVGFXTFdoSDZUZG44M2ZSN3N0RXkvWDV2N3NyUUsxWFh2RjJOYVlQUk5xUnFEQmk0MGYvbjZ4UWwrTDVRN1laKzQzcGtFTjlUekFDWW1vR3VjVHhTaU9jdFlvQTNKaEJaeUtYVndqdWN2Qm81R0hScTFjaUtPTC9zdWdUNENHaG0rZ3c3SzhFS3h6dlN2UDR4QjlZSm1XVTdKeTgrSXBVNkRFQTEvNjRSUGMwSU5UNjNTeU1aR3dQdjM4ZVBzNjRDN0ZjTGF4dTBxYzZxNnQwUTZWRUNjRUxKY0tWYzJndUNJSTJxbFo5K3Uvbloxd2NsR0NOb2t3REh4cjRlUnFTSHZYenUxT3lmcEgvL3o3OWhCc3l6VDI5OWJWVTRkaGwxaVljUjVFbXZCTk5FbE5JMUFsb3ExekVVSmxGNlJOTE4wd0Q4OExmdjdwMCtDYjRPYkplcTJYTld3MXU5b0FvTklwL21KWHdwSy96bWg5MzVQZ1FQWlJhTlJOSk5QcFVmdk9mZU9ObGRoRkFvMmdxQVc4VkNRZGxXRjI3M0RaRDZhWk55Vm02TzdGbGZEYXJ5aXJ2RThtZlEzeTVMcEhmUkhBQzRlSmRFOHV2TXJUWGFHcVpESk9yVTgyc2FGd2pFWGZEcGp6Z2xVNGcvZFFNNEo2YTA0anovMVVMY2orVGYvTkZUaU5XWHl1djlIVUF3M0F2ZUJTTUgvQ0R1eXpTSFI5TUxmUStCVzhzRVF0RTJFRmdtRkFxSnBkWGZoL1N5ODNXT2V5ZTVMRmlIZ0tFcEozaGwvN1dCYjRGMXJsNU9Xd1hJUGpLWkJ4MXhvWEMxODl3ZHZ4L2l6dUZkWGpxQ1BJMVBWRjhDT0s5Nmo0ZE1kamtCZEtyaXRTSFU3bmdKM2QvM2Y3ei9KMWs4RXpUM3p4U05CYXBoK2I2eTFUVzByRnFNS29kYysxUzFGSDB5THFEQ0F2RHB2TGcvYlVFcXRmRmZwNnB4cHRsTCtLQ0RUc0IxMXgySmw0bzRMMXl2S2NtOVV1TVZZTWN2NlpRY2t1OVdPdXVPc2t1cmIrNGNQcFZQbnQvMTRac2JTQ2RPQmVVWTVnTzNBVWU2MFNMdncrQlNzYXBheXJlRUowcHNaZi8zV2hPZkZIem83b04renp6di8zbDhqTVZwcnN5OHdFbFdaU3FPNklSTWR1WGtUNDlJcFdvS3FDNitxMEd2Y1FrMUhzYWxrVHd4ZHNONzZ2aEhySXZBUDJZUlhaTGlOTDhySHNYZkxKbFMzTVd3dHpIY3ZEY2czK2ZtYm05VDl2NWJIMzljM0RqK3pMamwyZkVTMTZWdXZMdW9vSkRYMDhQajlDem1jVy91NWZCNnU0dGNoeHV4UnZSenl4VnQ4YkpvVmJPdW1SVXRZeHJ4eG5ETXcyRXp2TngzNTNUbnlPOTZkRDNzVy84bCs1eldiSjNzS1YzODJYTHl5dzNLVzNSZjRQb3ZQazIzTXFSY292dHl2WHluNWlOYys5R25pOERDeVdzQzlpa2pITlRlU3pNZmZGTmY3Y3djQ3ZFZWZOWkxlOGdsaG1GRzRQaWI0anROQ1JFS3VibnpKVjQxdW1tRC84Rk1XeitGdnRHQmQzQzBwdkpkMDRjelJUV2ErNWh4RVpkQTh4ZkZjNXJqSXV4ZEEreDR6N0xjeTgvMkNBNnBEZ0dIOEVQbG5wckRxc096dkljYjhVWkZYcTVtTjF3ZDVTTGpuNCtiUHhzdmNhcUlOVVJSby96VzJUYTlwWGpkdjlmM0ZrdU5XS3pvendxZ3FyeFNVWGFtZVFhWHBTeU1ZV1c2bDdCWW9aTEZuZUg3cjB3aG02b0NLbTdNaUdGR2FmSDZmMjdzS1dhWHBlVWwzUmoxQW9XVk5HT0dGd3hZZDBsSlFMSW4vcnF4dFRPbVNzSmQzQjUxaEJtenBSb1AyVmJJVmhSOW1yUkxWOWhYM050b1RURmpFVFduQituQ2s3bE9VMnZzOVNMWFplSWlrVHFmYUphZXZ3SkZ4YmxEcXZkM3ZyOURkVzcvKzZKRkFQci92MDdyMlE2alFmVFFlNkx6V1BQQmpnK3VkLzRRaEh3ZE52VWZkS1BzdG14WnRpcXJ5N0t5Z2E4WXh5c29iVjlHcXR0ajRDdGd0Yk9Hdml2cnFNN29NNnlPc2x0NVpaaC9rc3FxaHdmQUJyVTlKRXRyM0tiRmZSRlA0YzJTbTRQNTdmU3VxV1ZSN04vWFJTNXVjR25wcng1VHZRQ2UvOFVvUmVUcUhNakxEOFlyL3VhRzVIc251eDZSQVk5MmVieFBlTDNUelJLSldlNzNEdnM5SFk4Q3dPNE9yM3ZZNjJtbnBlYnBiczhkbXM4VXNYRVlub0NjY2dWRWo4UFFWNUNyQktyVUxJSUtsdTQ2ZTJjQnlJT1c2eVpiQ3JaaC9UOTFRNzY2UWRUcWNKV2JPaW82WDBKKzFGOWQzSUdvTzNRa0IxVWhJckxOdEpUMS9kZi82dGQ5UC9uOTA2K1hGY2twQndQbU9vVE82SFUrWEdjSWpId095TFJESHFXbkVDMHcrdWZKMUpLZ2dwRXdjalVSanVFYWZkYjB5ZjlMSWxvVVhNQ0R3TDhWTG5GWUM4VFU3cVZWK2lyUnJ5L3hXUytOTGQwMVJ5QkNVVEd2OTJiNVhWMUpaUDUvTlR2Z0hVZDFSN2ZEMjRXZkRpQ3BNMjNtMTNOeEptS3g5dWtycmxoRjd6QzZacnQ4KzFyZnRlMjRWZTRpOUhhMGFOVUoreFhMQi9XZlpmRXJ5cGN0WDdIaUh6OWw1TkxtQko3QVRIRThmdkl3ZGp2R2QzK0NZQWphVGtrbDMvejN3QlZqOHZNbXp2REFWYmFzQWdLRzFPZkFqSW1KMldFUFpzRk0ySVpiNUxkc1NMKzdCTXo1d3J2TjZScXhTRlRELytXN0FpRC9Udk9JV0pyOWs4dDU1WGgrMWFYMlU2cW5seE16RzJhUWNMdnpHWGFmdDBvT2NGV3ZFVjJacVFyQnREVU80RExLdkQ4ZkppVXZQK2Z0aEFma2lnR1FpbE5BanRCVVlxWDQvNmVGa3MrdUMwWEh6cWRLVzA3eU5rSlR6bnUyKy9SRzZESGdlbGFibTN6OWJVZDVYenE0MnRqWlk5cFNYeGtzZC83bWxzdG1IdkcrTzZYVWUySUJNemxTejhWeFQ4VUZraDJlUXlKKzN0Zi9HMkpDbGVIc2J6UDkwQmJSbkNhdTlBbXVjNlpQR0NSWHBIUERsTmM5U21ZejFQS1FuMXllYmgyaHZNcFF0ZmJJd3JwcU5MVEcxTmxsMmh4dnNHM3FhVjlMYmF3NStkYkdhdlFwTjFzSE95dTJ3SkxmNVZLK1VPbnBIVDJvb3h2NHFNb2RWV2dKSDdCTmdaSGVPdnRmZC9zdEtJTnJjblZTek54Q3VwUFFrQVAzNHlzVG5RTm10N1ZiWmErM1VOcFlnajVaSGpCc2tLSzBRUXR0enhkWFhweDhkY09EcnRKdkIzWXRYMzlHNmYxVFpZL2JWZlpFL29pSjdzVURMbHQ5dC9LWkRjMTVyL2RrZXVNYjR1Q3VWNDlaRVF5a24yUllNdG05UlFOL2wzV0dBQlhrRkw2SW9IZjhuNmR2QWtoR0x5aDdiZWd2aGM0VVNDb0ljUG5lcWFlWFh2Z2d3QWVkd3Qyd0k2NDVEWG5LMTIxSGhZQnlqVkswNk5LNC80OGFMdm9YVXkydDRTcGUva1Yyei9UWVdxcWozYkEyR2pHczdXamJvN0hZT21yV29DVVNQYk4ydUNWUnNXK0VTRFhyUnZ4K2NpU1pHdFg0ZmI1UktxVWQ5bm50VkJwKzlJeDBZbkVKYlVVYUtXVk5IY1hVSzh5MW5aUjdpbzlETFB5ZlBTeVhUQ1Z4MTc0bnFsbDQ5b2tiM2F3SUxLaHVQYUxXUFhYTnV6dTkydUhFT2FKNCtlajV2YStOcUY1RHhtUTBLSHR5eGpuajA2cDVCOWE5NGYzYXA2by9NVlVhdmYweldQSkE3aEo4S1llYzVlV1RBdmhNNmtWSjhzVXppSURNdktYVWI1QitKSlc1dDlKUm1mUW9UaCt0Wm4xNG9vcDF0TEd0ZUdaN1U5TzBtYzVseWRXYkF6WVhiZHgycCtwTy9DOHpTUVZHak8vQjN0bEQ3Tzg4M0ZrMk5xVldIcHBwV3BuRWsxbi9tcFpvVjZhSmRKSG1PN085UVZKU3YwaHRhN0NVNEp0eWNiZ3QvbWxEcmY0VVo4RVBnS1VnL0NjSS9nR0RKZldON0VrZSt3U2I5VHVYTjFrbTNDQmVDN0k1bnQ0Q29EQWxtaTRRMUROOFFYZHZBVmc0MjA3eDlmZkJJcmlvL3JzL0sxeGFWNlJzOXhzN1h6a29TQzNqUXltQm9BbmMwZk1HcEJoaHByUGV0dng5cnJkWHN6bWU0UUtnc0o4WVByMGFhYnVucWdBeE1RVFFEditOUGN3eGoyT3lNNmR1LzNmbm1qL0d2MTFrUFFJQmZOQmNDd0tUdzNVZ1M1d0ZyQUFkUnhWd1JnVzhxUUl1aDF0SEtsT2tyOXJZeTE4ZmFvd2lXMnNnNjdZR0wxakpaTUpVd29jcTRUdVZ5QjIvN1FLSzdYUWJvUEd3QnFMV1FEN1dRTDdYUUg2ellRMElJMzdvNisyZ2FBSDcxMjNkMzdjL1BEZGNLMElBaC91YkVYSzNDV3dIcDJFeVBPeWJIOXJZbWYwQjJQc2hBUE1zU0habWNldjRGc2Z1eGYzOXhmMnpWLy83RDRzWGtiZ1podGw4cXdZT3FJRUgxR0NmKzhFZkw5TnFNNStHelZmMm4yLytNRWUwbVVldFpjQmUvU0hvY2tZY2NKNzRCcng2ZFJnQW9EMDRCMDcwcWNob3pZTGtXb2I2NWE1djhtZVdKbW9tQUdwd21QSWZRQmdXNU84V2FqQUh2bzFkdi95aTQ4YjdiZndUUFozc3hBR3YvYWVvWVFBZ3ZsOUtFd0RzNlI2NDBmdjF3Ykh4UzlIK1Q5ODlyU3JOYnEzbk5MMWZIbHdBK0VSRE9JQWZoMXprd1JWSFdndVBUbUVmV0svLzNYdE43MGNlenFYYlJILy9zNkQzYjMrUXN6enNsTkprNzdkOUd4bHNUQ0hweHpJOHUrL1Q3Nzg0UXRXOHNvSDNRK2pKQkhDUjhrcjRSeUErZjZ1RE16NE1jallQOTdTaHY5SENucDhLZjNpR1VndmJnL2REdU5EeFNhSUFLTVQvMjFjWjhLRDhETDN4dVRoRmNXMmk0cDlWN2hYTFcwQlZIMXlIbDR0N1BMMi9sUXVvdXpoWDc0cndodjBha2JLbnA4OTdQTk83Rkh6am9pdVdsRk5lcytQL3NCYlAvMktuSGR6OHVtdnJQWlN4RmJMaXdWeHlEVW94cFJrM2wrLzh6TWVQaDVSMUdBY0E3c3JWKzQvcEFtSlgyNVZzaTRndkF3cXhXRFRhRUZKdXlEUTJFY25XWHFsS29wS3B1YW5SQURUQWhaTzA3WFpiS2prYmxuV3A3UjNZYUFOVFBiNHBHVGR6dVVPcWRZMVdpZThtRDNqb2NUMDZVeXdRQVVsQTIwWUJvS0psWFJBSkRNbE5rTVo3eVNvdFpFUWpRSS9FVWNsV2xkV09YVlJtQ2xlT2dyWVdWSTFCTDdtYis3MmUwZE5yc0wwQzRkWnMzb0VLaGF4dU5zbkJFYkZ4TWtTRVIrK1pqTFpIWWhKVlYzbXhveVZSYVVUMHFqb3ZyZWdjVmRSc1hqa21hRkZ0RWVKbGplUUZWUXBtVTA0UWNiQ0hqQXoxaVVJYXd2bE9Ya082TFI2a1hlb21YTW9qWlJOVjNmcXF4MzdIaDdmVWVnRFZDMStacUV3bHE2NjN6Y3k5M3E1NzQrcXVBcjB0dEJVcWYrSnRqRmlwYzBCYSt5bDVhOGNtN1l6TnJLTkErSVFGTzNwZjFmclZiZTFEU3BoTldSdG9IZUpOaGZzWFJlZXhxdnNGcVNmVTc1NkUxaXlyc25CWld4cFlhR1ltSVJLdldTN3o3T2cvN2k0Z2RtNEpEYVJjbWhqcksxTTZOL1JhY21PSmhHaGw5WTA0SEt4a2paL2NHdktDbkFydGR1d0lkSzFJUmloV3Rzdm9iNUhZV1ZhaENMNTdpWlpTOVNVcStEVEg4OTF1QUlqeWxWZW5OYTF0U2lHYkhTbjJ6WGxucDh1cWQ3bnFtUG1uQ3dYbXgyMVg4dVBIeHpnZkVJdEV5NTl0dDkrdXY3TFhkbFBveTVsNjcxbDRNQUoxbzVXb0tJRjJGKzZYWjFUdDYyTE41Z3V4V1dXbEV0TWt4UGZkdk54RnJZZ1IxMjFSbDJ2YXNvRDhlZzYzc0Y0dFE3bFFlR3hiUGVMTUNUaXFyMXdETCt2U0pmVjIrNk1YZlc5Y0VNUEswTC84N2tFaThZMnJiOVZEdCtQOUd5THY1Y0JXSjFvdTdjS2RFeFdlcjhqUDR3dkRTcyt6NkJ1UGFHS09ML0NtbGlTYTRieWlMdWcrbVJCUlJmQkFON0dTWjAyQzRYSDhlcGRXci9DQjhnYlVaVXBlU3M1eE5RRElPWVZBMUVtSWVpS1hXS1pSQTFWR1RDVHhvbU9vZ09qUURjZlgrejFybE95aG5Vd3RFUFppUURTbFNRMFhIT1Y1c2k5ZTZaM3E2OUJudEMyKzZ2UG9QdkMrNCswVmJUdDQvMS84d1hJeEc0Nm1FNHduMEhpMy9YQVFwaUxnQUZaZzBMajVLSCsxWEJySFFucGhUWjB2KzNPaklwKzZiMGdzNnVvU0U3cVZ3anUzdGVoOUo5Qk9YYy9Dd0R5Ly9hVW1GcWxGTE1tSDVsVTFSOWhSVXc0U2FJMzBxRkhXQW5tbVNscW8rYXR1RzRYc3NTMTV6ZjFTc3lsNWJaM2I0cEZYODdheUFjZG1jWit6b2VoenpvWEVkYVFTWmtvb0x2bVY0TG16dXg2dkV3VzdSVkNFdFd0M2RBVUszZkZpWjFhZGk2Vk9RWGNoNm16R3p6Mmh6amZNS1FxVGppajJ1MmFwamlUUHJhUkdKNzdhTmpUcGNkNmdQSkJXQVA5WHRhcGNXUDl4K2pMOGpkUFB6YS93cWlOdWZEQXc2M2JYS2tscm1zQWUrUVU4SmZ5ZkEydnFGK1JQM1luMTNlaGg1K3U1SHJiTVJJWXc5UEx0b1g4d09ZRzFrWGVDNGVhOVowMk0zYU1hdW56OWNueWF2WHI3TEVRUEhxK3FwaGlKSHkwSmdKZ0F5c3pvbXozVGxsWUJDZGJJdlJPY1VlTGdOWkx0TE9wRnByWDA0V0tPZ1Y1QWxpdzlleDJiTTJ3Zm5ZK25Odk1WL2l2dS9oT3p4RkhWYmxKRFdhTko2U1JsdVZHOXNWcTB4clZFWFRmVUtCdU1xNmdQUVhkVXMxSXlWdFN3Sld4dmhkK2luWFE5SUM1S2h4SExNdDRmbkpvc3V0WU10cVhBTEJ2blFGUUJtSE9XZGxWcitEVFB4bElnZDJHTXE4bGhQNDhSRFhPdUVRTVppODkrWWljU2t0Z0pJTG5tTGg0T2gwTzBlTXF6ZG85YnlvZndtTzM3dWhQckpJZGNMNzJzRTV4OHpxaW9WWW1reFZGRmE1L2JsYW8zQUtnaC9rRU9BbVB1eDViRE5PUXExYklLd1VtSmhpWUhDM0NjbVpMdmtXRlZrUTVaZWpuRTljQi9zQ0lpNGxVMGtZNmV0UlVOYVh1b1FMeXRKME5veTJvTUNnckxpSkNkUVIzREJPZit5eFVDanZMZlFGYkVlYS9UbDcyU3VOT3VwbFQrbkJ0YVdncmx5ek5jUk94c2JYL1RGZEp5LzJneFBhM29VMkdwWWJDaEwydjVIMmF5SU5XTlFML3ptS3pZcVVDc3JWMmFzcmVYUkw3L2NsNGFUNjdTTVRBeEVmSkx3aE9oTmhYT0p1L3Awd04vdkNWTXFDenhPamZONWVMUkxPQ0tJYytNcjF4ZTZmQXdiRnNXNEw0YzI3bSthdG9BZEFUYnBsL04zUkpnYkIwbmZNMjZMZnVLa1BSc0RTRUEwVk1UamREWFk3SjRmNzgrWUYvUDQrc2hWK2hjbFpUR2Z5UFRtOTB1VktQUmNCaHV0SzVDS1dZZTlwZ2E4Y3VDcVJqaGNNbzV4Tmg0UWNZNkpSM2FrNVk0MW01U1JCNFdGRlV0c2lxQVVqVVNNQlo2N1BjTUlkQk1hMmljRko3VTdqMVdzZjFPYXlHY3F6RXpDM2lBV1VhNUNqV2FjM2l2MDdDU0pSSW1HRlBiaWQzT3I1V0N3TGYyKzRKMkxzYlUyVUZoVlN3VHJGcUR6SWM0Q21CTmpKRFdsVmJUYURRYTRtWWtYcGRza3lKM2RUVWVUMXhHdGxUSUp1Rk1PR25oT2xIS2toTkVHaEp6OUJsK2pBbERNQ29EUW1xWnpCV3lVVlNJUEhWYzYyUURaZzlQSE53RlpUREVrSWtsbWdRaVlMQlFrRDRIWTlWb3JLdGFBb1NMS0FGcE5jWlVTaG13SU8yc2xSV1ROaldtVmxCOGY0UlJ2dUZleHdvcVExWmtCYXZqaHVKaTNnb2R5ZkRKS3dMekFGRHZvaGFXaERSaUo5MmpUb3duOTM2dHV3VGkzSmxZbE10d09DeXQxNXZGMWFCbEFtWkE4Mm90T2RJR0N4MFdRSm9PeDYvM1kxblpvZmZubERsbzNiL0g5cjBTSURMbXdZT3VKYzlkYWYydFdSS0FMYTNEVjlwQkdMdG1idmEzcEM0YUo2MFI2WHFiR2E3UisvZVQvZDVRcW4rbzhvZFk5V0MrcHV5VjAxaGlDSHdjbzI0VXBWRjFIUjBTbXYxNEljcVVzTkJqcFlyYVhvcEJGNUphaDZjcU9rL0phRlhtcDhsazBKYU1naENrRkJ2UURQenJGcFF1QU9Jc2FZMnY5Mll3cDEwZ05GRXBjcmRoN3RhZU1MUnRUTWt4R3lVeFNWVmdGU21YWmFOUHN4c1krSVpwOEpHa3hwT2JBRjlOZDBhVzBQUHducnI4SGpDYkJDdDdwY3JkTnkrSDI4bTZRK3BYajQ4K1VNSEtDMkZOajJRM2VmKzNhUnFIdVJEK21iLzVTZWZ3OTRNYU1MQ2ZHVlpaQ1NmNlM0K0plL1BoQitTbUsxSmZPRFU2RTFaVXE1TXQ2dldjOXphT1U5VmxrZ3ZxNUl6aGVYcUxoWTNwOWRNUDc1by8vY1hoTEdlZkhlemFLODh6SlYxZjgvNTVpNnI2OWVRZlpYRDMxbDc0cE9iamVyUFpmUmszYzRmeC9MVXhlWWd0Yk03dXcvMXFvZTl6YllucCtUeU1CN2RXMDkvQmR5ekticXRlS0hrc0dseVFVRmJLeGQ3Tk5keGRFa1pBQUJBOGlsTVBHenZSU2dHQkVEellNWG5uVUZ6UlRIVVNnTlo3VlVUNmtlQWUyNXBxZjlRWDFmODRzV0RpSTlQSEViVTRaV3RMWUxQRVQ2VjBRTm05ZWw5aTBMUTlIZTk0UXZDbHVuSUVHaVJjUm1wUG1aUXBEUW5tRjZraEFBUHh2eDkvMzMvLzk4TEgvMXRTTktJZkFNQmErdzhaNUFGOFBHLzlzNkluK2U1c0RnR2dZQUFBRU1DL0g4Z2p0NnZyLzBhOVU3N1hYMEJvS0JWQ2VvN2czWVNOdDZ2VlE2V2Q0bi93bGVxOVFsWk5abTFJenkvMnl1Y0wvQW9JUnk0RHBmdU1RMzJ3Sk1yUDZDTFBVRGZoNnVlQmxscmhSZkFiOElONVc1ZVNWY2FwTytyYVBpK3hienJmWGF6bzdPZDgvN0xZMVE2Zy81NmwwcGVaQkFxby9yNHQ0Rjh5MytoaUNHZTRua0FqMCtYV1Vna3UvbXljZlYydnhFMFpEdnE3VCthVXRoT1V6VmY5T0pBVldBbUFyeTV2d0Q0bnpTT2ZlWTJkcFV0dDIrYUFmWjZxZDBObExzYzQrNGs0SldGdmY5UVRxdnRHTGVSalpoT0M5eFo1MWNMM3NJRDlRNVVqWmR1eDJ3V3FrS3B0RkdVSUxabEhMd3JaSVQ3RlVKY2lwQkQ4ZktFOXUrOC80aTBYOHR2YnZPWUUzQkNQamJIbEhqdG1JdGt4dmlzaTJvRXVmSnkwSVFZTnpEMjZvOCtLMGJGc2w0dlkvdUlKUUhZb2VOOCtXUVE2ZHdKUFMxaUp3ayt6MkZTMnB5ZTZyYzB0YlQzQjgxTGZoMlM3aGhmVW1yRnlMcTBFb21pSWI1MytZS1ZlNzVMTWRBd0RrSnNDYy8wU0NzVHN4VStZV20vS2V1ZksrV2pjc0Y3WlpGemJoVEVqM3BuNXl4VXRENVZXRHNzdWVDdGljL0MyTWRmSTU3ekk5cjJRSHVOU2ZMMjhKeWx6NWRrN0VuSVJQMHZ0WHd4dk8yRHJNdmFyeEdKRXE1WFhMTCtMRjlSeHdlbElkaE54MGJUSHRKb1JQUktVVGlueWxaSUU0RTlYbmFVVFFEZ294QjJNQXBBblNrTks1Sjd1NFN2QnRuTy9zbWUvM3QwMEF1YkovTUhmUitrOFpFY0Z5Z01BQk5DUWZyUTJGSXdEdFRzQitoOGNnOE1CQ0l6RG9TWUhBSmJCdHdiRTNYc2M2OTIvTk9EVXJqWWxHa2c3RjlKQWtVN1hJS0JZVzRNRDNwN2R6OUhNTXJzQ0FyQXI3MEkrZm9hYzNWZVE4TFg1UklKMlJqM01HdFZyWUNWRzB0QTZLTld3b2RyZU9wVmEvbmpYVTZ5SFdKeFp1eWJKNnU2Z1U0ZDR3MTdhekVKTW9WOHI0d0QreWtya29FWjkxRlpxNUhMeDlpWG9BdzgrSERBSU0ycHFXWER3em9mWFBOd2JzZzJmUis5azZ5S0ZnTHNISmtYOFFwZm1qVmNkWW1GU2dOeGVyMk9aWWdvRURaS0I5WDFtc21SS0VubHJJRFFOUVBsQVVEWXVsU2ZHV01jeGVJZWZlcU1JNnZCQzFheHc0OTV2SWJmd0JXSHd4VlV2VUl5V2p0VHdXMVRnK2NaVERiMTlqYXJwK2ZWVkVncDVmWDdzNDBLOE5qbnFyam4wdFkyMUZkTWI3WW9waVUxeFZXS1ZQeWF4eUtjazVsUk5pRzJFYlJ2Z1Vpa29UZzkxU1hTZ2JCSmNiUzB3YTZRQnBpUnFtVTFJcGFva0tpNVdNWkdOaXJwR1N1R1VSQ1pRcFRXcWhLK0tlYXFJcXdvNThRS2FQNVhoMGRGV2thbHhjRnZZL1BXM1FycjZ3OWRjMTNhbEptMjdyaXZ0Mmx3VmhWNUZJbHBrcGFvQkVWWjVZVmF4RUZYYUJOYS90cGpmeGRaZXp1dHcrRGMrSVAvSi80eXk0TnpncmdiSXdYMEVHYlZDWmFXd2xyU1NjajZPL0UwK0lCRmgwZDBpKzQ1djM3ZG1OWlhLOVRYd0d2OE1mUGJldEN4NlhMK0FwQ2xEVy9Iak5pSys3dnJxMVNzNDIxMjhiYkcvTXZpTWM1R281SmMzS21kZFoyOG83RVU3VnJDR0JQWjROdEw4OS90bFhGMGJJWW1OSXdCQkFRPT0pIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpRdWlja3NhbmQ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQURJMEFCQUFBQUFBZFhBQUFESFRBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdsd2JuRlljaHpBR1lEOVRWRUZVSEFDRkFCRUlDb0dxSUlHR1ZndUVLQUFCTmdJa0E0aE1CQ0FGaFVJSElBd0hHMnBnUlFkaTJEZ0FhUEFaRmtXd2NRQUZtKzhUUmRrbW5VajIveWxCbXpHaGRlaGJaU0YwUjd1bzdoa1pDWkdUNmhucG9iWlRXeHk2Y09EaDBFZy85bzBGUitIQThzM0oxYjN0dzU5WG96Z2NDTndqWm10dHdDVnhYNGhMb3BFa1RhUlh0MFpJWTJJdDRqZjkyWHNDdk1STFV3ajJRbzBJa2hjeEtrWXE1aVF0Y2ZuaW1ycFowanFIdEduZ0pibC90RHF6aWlxZHF3QXpvUTBUTHg4Nk16cFg1dEk1VC96djk2OTc1cjRBb29zUkJESmZCYm1rV2dzSXRvcU5iRzJYSjlDa2VvYkhiZjN6QkJtb0dBMUk1YWd4R08xR1Rhb05FRlRNNjdJdW9uOUZYdnpmK2l1aXdRRUsvVy9haG1pYnorVmRFYlZWUjRZTitQZC9qY3pDVE83TG53V2dJcUZsNVFBbDIxWUIycDVLSkZsTDZKZjdaZUJ6ZnU0Y0ZKM3ErQU9DOFFWNjZ6b2JXd1loV3dEL1Y1c212RVhvekVtRVRXdnRLRzJUUEczaFdjcFFtOW5RT3ZSOEpGSVZnWkJkMm1iRmMrSTFmWVh2d05Ra1ppdnF5UDBlOTM4NnkxYmE5ZDN6QnFHTHF3QVgzWHB6YlRINit0Ylh6R2drQTJ1SmZReWVsZldlSlN2Z0MwSkZVRjFheE5kVFUySFRwU2o3bEpsL25lbXE3Kzl2U01rLzZKYWRHc3NxcmdHZWV0bmFOVlBMNHorZDdxeC9zZ3huRjJUNWVnSFNVV3lYN0FERFZNS3hveHowQmNodVh4aTJBc0NhdFRQeXZnT09OVE9ick9TY2NHdUNRbHpoRWJLQi92cnR6MWlySDhoc1puYTc5bkluaHkweVJFTENKeUxnV2Y4Ni8zQWdUREFBQUxwak5FZzNKTk5RWkxoc1pMb3lwRncxcGs0ZGN0aGg1S2lqeUFrbkVNSUJRcCt1Si9pbGtoaXB1Q1BIZWcrRzlscEZvUS9hK3hPS2M2SEZBeEIyenJwM296QVhhaUJ1eFZNOFZtQ2tXbVY3dHQ4M1VxbDZpNnh3eWFzd0NwVjkrY3pVNU9manJNckgvQjFiZHNTWks3bVNXL2EvdENtdktvSkVpaFlqVmlLUFByeW1LVkRrUC85ck1NTXNjeTJ3MEZMTHJMUFJEbnRkY3gwekt6TS9FNmlBcENqNkwvay9hS0EzQTI4T3lWeGFDNE9sVDVhZHVQTVBXZlpCMHZCa1J0bmNZQUdkaFN1V2JsbzI1MXJUOWVDT0NLTGdmYllHa3FCSjZWUXlhNEtUR0lIVWc1ZmhxUlNZRWpNSFJ4SUhJK2xKM0ZUenROMHBXaDdERERGUHB0b3B1TjQ0Si9BSWtnMVNlT3BjaTloUDBSVFFFaVdPd3p4TjAwWkhVK1VwUzFHRjhCWVBFRDNBQkxGMW5xTEZmQXRTSWRzNHRaUXJFSkN6OVRLdFoyVE1VVmhheEhPTFczaVlTdDBwb0VjWWdvU3g0N1ZEcWN5aGtna0ZQWUhkdk1TeDlWOSt0NzZOTFpxREIybTlZWWhtdG12NHowbDcxYURYL2hjek93UXV4cTZrMWxVQzdubW50Ry9QM1N6ektHUS9md1JVRC9jT01RaURJcFRnanh2dmIvUGJ3RTlzbEE2aWpMSVR4YmtHbHAybVhoZlUxTzVBL3lIZWFiUldJeklkV2pXWjJXMDk4UzNOSm14SVV4RDBKUzJJUXFoNy9ETE9WRlVZOUkvMDcxZHFKRnk0Z045U055UHNBcWtsSkdYUGFmZU0reGJGNXFJWWMvSUFCeG1sbTRCY0Irb1BPUnoxOUNNMm91aDJvR3RFTk4yQUpGckNWek80Tm9EM2V4V1NFS0c0c2pNRHRPVkpTZ1lMVjNvU2FMWWVlNk9yRTU5Sld0STdYcTZGTU5CNnBCYUR6bVNHN3g5UC9uY29BUUMwWU82NUFWLzhWcVI1cEM3TzBLSlJTVGlYTUhlYWp6dnE4ZkQ2VEVhdGRTZUVkQ3lKeU9QN0hTMEhOc2NqbjRFVUg3SVZ2NUI5TmNIdDZRK1F4cjVOZ0psRVlwQmJsN2lXRlRnMlN2c3ROTHBrMXdkMEVPQi9IS09QNTFvQWtLSGJrMGN4Z2FVU21FZHp2dlJFWGZYblVFcXhxR2dkeC8xcFVCbjZ5U1ViaUw4YmtJbENwT0MySEYvWTB4NXFweFRMNkxtbFVQYkZPSk1qWVFEZVlKSWNZQWh0S1ZxZnJGS0luZ21qT0k1ZXgrV2JTVUFyQ0dOd2hJRGlhS1BRVjEyZXphZEEwNENIRzg1TFltaDJnaU1Fb2hndUZDRTdXdDJSbnBaT1AwTEFtempKTkpNbDFGcVEyd2ZiVUJKYjgrZ2RmaVNHU1cxZ0MxdFowejdRVlFkZG9UU3lzalNlYnpvbGZ5b2hTdGdnQmVlTENIT0RmTXlvMkJPUzhhMTJoaWRyM1lVaFJEVlhUQUl4RTZ4d21zMERFZzFNUkZIQUd0R1pKTEU2Q3RCWmw1SjJBN3VsVFAyME1qUVh1K0ZHY1JoakNvVlh0b3daaXRoZUFpZ2Jsbk9aSVJnRENnWUtlampCUW9RNmhSaDJMSWFyR1dCN3orWWl0S0F1cUVNQWw5UURJZ0hjOVJzWWlVekFOZ01zWkdMTG9VYXhha2tWcmZEb3pLMjEwWmJLMDRacGk2Q0VCVm9zTU9BQVVWZ1Fpd1YySE1qQkR1S1VnSk9JZ3lYaEVNbnNVQ2xTYWFTeHc2VHJpT21NUlYyNFdTRy9BcjFvYjhMTjlNRmFmYkZvcU5yY2NDTnk0a2lqcUl3QkpsTndCQzhtV1ZnbEcrdE1aK3Y1NU9NVjRFaUYyS0NJYlZTc2xGb1pOcG1GdzgyWFdzd29DNTZLRCtxVXJvSXpLbW51NEdBWmVKWi9FQUJNNFFXUVJwRnFob1ZZQ1FmUGRwT2hIR2FXdXg0ZXVGaUhudTQwMHBvMU43Q1hWTW5mS2pSMllkRmlzY1dxRnF1QmROdkFhOWR5OHRFVFArNzEzTHdjRFB4dkRkMGF3KzluZXlmZ2QvWTM4Q0VMNXNKaVdBbnIrMzMvd1pLY1Fud0tqclhpTUFCcER1Q29hVWlrR0lTaENBRUZ5RUVWNUplbEZjSEJwOUxuZS9lL2E3Yk1FdzhLcFA2WlpWbVZSOFM1b2JBbVZaSldPTTV5MGo4QkFCUVlRVFVtUXlhWkdFVDF4OUhEQ1VrTUcyTTJIRU9odVg1SGpUdUJwU3BBS3dpWE9tc3FCcURBWHpRVUl3WitmT0JIdmdaaFloUEczL2pWeUl2Sk9EZEJJQzBqSzVzS25ONzZxVXhzSTVSanRBcGl2d2NtZUFRSzlGWUtHc0VTdENRUW9nNzZHNFplbXFUSlRBUlcxRDh5QlZJUUJWTUloYVp1L1ZIN2hTT0JSRktSbWpRa1Nia2dRSG9pcll6aEtGWFg3TElKb0xDNWFhbmkweGdXTGdSZ1RnbGtyT2ExV01Kd25ROVh6bGNmbUFEc2hRNEg5RW9lbnk1U29ySHJXZzl0czBwSTd2LzNzRWV3QWF6cnVDK0dDUENmeHJrVDlDWUE5QzliQTVCeFNLSzNkeDBBWUkvZXlpcW10QnVBbzB0Y051YnI4MHdsNCttNE1QajltS2FXUC9GSjF0bHRQZFV6TzRHL2hMOVdqcFROc2xWdUl5Zkk2WEpYdVZpZUV3cXQ0ZGJtZmo4QUNDSnpTZmRuNHBNbzQzS3NrWFd5c1FWcGpEOVN3bTBGOUFQQXZ3T0FOeDJ1dmNiMkM5dUFDOStFQzg5NHp6cWZHYVA3S09iaHJuTTd6MjBCQVlCRVFIOG5nTjdLOTNaMWV1VnpOUHFuN1RQSEl2TWNkZFYxaTYyejNuOU9tV1dUK1phYWFZa0x6amx2Z1d1SWhpUlFzR2EwbW90Z1lHUmlaaEVsV3F3NGRnNU9pWklrUzVGbWpmK3Q5UUFIb2tKNmIvM2diakwxMWtkZk9iUTNnQmg2Nm11OXN2NjNUdWRUb0ZDUlltVld1V2UxUy9hYjY3RGpqampodnBzUmNVdU5MUzdiN0hiVXVPdWkzLzBSRGxmYzBCQWV2Nm0xMVQvKzlxK0ZCQXhIaFNkU0N4QXVSS2d3a1ZyUTBRc2lhODJxcGJaYU9hT05CQzd4RktsaVROTmVCcmVPMnVtZ2s2NTY2YTZIbm9ZWVlLQkJQRWFiWUt4eEpobnZySW55NWNpVnA4UlVwV3dtUjAyRWpUYllhWmNkQ0EyL0VBQm9EUUJzUDlCeVFMOEZNUDhBOEo4RE53Y0FBRFoyRmJ5RWhPTVVMQ1dxb3BoSWlGRkdQNi9KU2Jibm5KZ1V4VjFEekxRQWhDSkl1RWJCbzNneWFTVUpSU05kRUxIU0h0SU0zSEhHc1NOeGZld0VuY2ZyNmNDZ01XbDdqYWFKMDBleFF0UVI5aWlHNENVdzhnU2lKbm53U2IycnNBaXBSRWxueENZTXM2Y1N5SStlMlJ4NkVxYitDckdFSG1Pb05BT0ZwSlN5TmxBVGhIVE5Qb0I5SFFPcng0ajVYa3pPZzRRT0NXbWNQalJ4VEMzVThZUG91VVU3WDd6TXZya2lXbzdkSnNablFRQUU3bm4xL3Q1ZloyUkVRbW8wd2VpdXZKa0xsZyt3Uk9rczV4UzhNOFdMbFRvRXhLUkp1TjVabHVjOVZ4bUdwM1hvaFNGWmc2MDJoMFBwZlFqZ0hITGRVOWRZR1pHVWpGOHhHUGFmcENpTkJxOVY2aTA2VDA0WVlwNG9LMTRvYzNlbHJDaVZFWURjL2oveVFTblBPdGFKbnpIQmFhaGNBMENmQUNxOFM3NVp0QWswcFRuS05BdXVNUVdRYkZpdnRuUFV4bk1MUU91MmZFbU5iMVpxNTVJTWM1UVp0bXA4VnlsUitGQllveWxYcFg3VkJEQW1kbUl0SFYyRlJ3eHEzZjR6Sm94NHQzS1pmcHNqeTh1L1ZXYlVnN1oxUjlNZ3Biako0dG00V0FETVFrNDV3RFNrVVJndHlFbXcyTUtSVFdERlpkTi9GR2FSZlpIYmE3T0xZTy91VDRpSEI0cU1jcXRIN0tWdjBicXdPWkYvdGVZK0RRNG9IVVFZaFE0T1ZRb2JUV04xUzdEQjhQWGMrenV4Nk9RM3hPMUZkbUVxQS92eWlLM3R1YUhTUmFXNDBPWTA4WlZBUFRXTVh3SzRaRU94QmhDOGZUd2FzR2h4S1N0N3lRbEJvVDUwb3J4K2tOcW9tRytxSU0xNFR5WFZoU0lEMTB1RUkyQ2N1Rk9xNTRDY1F2Tnp4L3BjZjhHb2ROWS9TM3htYVYrekpac3c3OWlsZTlGL1U4cmhQVkM0bVFsY01EcmJvRFlTNkNOYjRBS3d4cCtSRUZWUzFUSTZVTVp3NHdZV1FOUFFXNXROVG5GUGROZ3cwRk0rZHFnSGc4MjZKOHNpVmkzdW5RNFRsc2k5Z2I3RzQ1bVdMbmQvRHorL1JuYThSTEVlNTltcXByN1Nob3F0VndTSXZmbUdkVjJ2OHlwcWpVN3Y1ajZuclAxMTFwZ3NpTHhOamUxV0hCOGJNanBXSjgxZHRTMnBhbndUZ3duTjIzM1dxdzRiREpTWkdsQkpUU0RsSGVNWVpYWnRPOWZ1bFdNL2UwRE4zWnpORmJ6Zi9kczJ1WElMS2d4ZGt3TjlXRVRadTdsczVya3d3Ukt3eVZ1VjJGTTJlYWxmR1ZhaDNMVTByNTF0V2ZNNVdGSENKL1dNWVlVamhXeStjRW84ZXlXQk1YRXpXQ1ZMa3liWWpqMXZyVkpkbk9SWGV4c3JnVURMcWJhaDJvaUQ4NTdFU0dMYXZ0a1RMSlJmbU5XRThlYUcyOTBXbTVJc1hpNVRoN1d3bE84YzNMU24zZXVpN1dSNUg4eERZMTJMQ2JDeUV4Vis2eDRmM3RRd1VER3IzaHRsT2ZBRzYzMTh4a3J6bXNqYnF3WXRFVlNXOHZSOUtMZWhaN29KM29rYTVqV0xWbjlwV3Fjcm1EMlZ2R09hSjhlbitLaU9kVWJrUFhKUWZXNXhaYjdXMlJlRHRPSlRhME5iTnp3dFJKUEFaOVJ0cVNheDBxR2xMazkyZ3YxRFg1T1VRKyszWTZ1MFVLM1BQeURSYzhlSWxta1NjRVpwMHdTMnc2d2NLMytLcW5KMzR5ZU5hYnZGNS9SeURSMGo3OEh3ODVIbXpHVk9TMFdJZzlKQWVsZ080OXdOa3RJN2hBMFc5a3dKdWo5Q0VsMkdhQkw1cWtKWEptZ3NzUzZhZ05Wdjdvb0dpQWd4YWwrM3F3VFhmVGlsckNtbFZsbzhZMExNMkQvQU5oZnVpU0pyTlhWc0J4MFd0UGJrVmt2TmFIbGt3Z0ExY09RdEl5eUVVZzBPSEhsemQ5MVFXM3JsM1cwL3MzZHduZllLMGdDT1d6d1B0SUNIVm5OWDdlQmdSblJjR1FTcmppdWMxd253cVdVbDE2dlJaOVZoWFNlTUlTMGtmSkM3MjhrUGsvcjJERWRUUEk5MEdLQUptdHVSZzBwakhhRTVTL2xteTdIUUNZM2dCcWtiYmtwRGl0N0tNUHA5TGtRUVNaL1A1SXFEd1JDZVBSejdkMzYwT2dhRlRqc2VONS9ETzhtYTRsQ3hsNTFXY3BPOFRueWR1RmxtZmhmelZtdDZlY2g4TGVtOG4rZ1FLS0toZ3cyRVgrcC9EZXNpOUdBUlZnSzlrVGxPTFRrUUlhclhNYkpadGFFRDA2YjViZEk0YUorRVRYK0FpUTVKZHR1Y1ExWGFEenZERnExc0xhSmMzdHhLUTN0UUxleVVxeUtXVlEzRi9xMGRGajhZRDhrNnlkZFZGYTUrVnMrRFNHNnVDL25OOWNlbnVFTnFsakovNGNvdC9uN2YrcGlZZVlVcG8rRlpPbEZHeFJ2VjFXeTRWRVBHS0xKcFg3QUIzdUN0TEYyYm1XYUlCaU5GNmhCOTIzRy9UMm11ZHRJRTFmejY2VFV3M0FiclFyYWx3RUZoTzNaTExaSkd6V3p3endMakRzK3o4b1prODRnT3dvSFVBSEFnTHc4WGgyYUZNcjY2anM1U294a3RKWUJlVHJSalg1em5Ca2RtSTlNKy8xaHJjWWpZdGRacmdiclZUUjZjMDZvM211YUNrTlpjanJmUHNYbGlwYWpOTHdhdWZMNUVWU0tFQUhnem83RU14WUpXMC9vaUp4dU50a28wV21VL080NE5kVVd6SXVzTmtkWmZqZGZTVm8yeDhPREhINkx6VEh1ejJwd09UL09jQkVqSjFSVWpSOGI4NzVOSUVCQnVtM0J0dDZ6RW9kYjFoTWRvTWhyR0dxWFU0MkIwbTcza3lMdVJvYTU4UnhuR2lLeG1JSHd0Z05TdXZrQXF1dlIwS05Kd3YzNFllNFk5K3B2VzM1RTB0c0ZGMWd1dWpUTFUzNWZwVThEd2xBZlBuRzdIMDN6VzhYMGRKbm12Snp5WTQ1eDhsaEQ2ZzJKQVRFUjVteC9yRXQzbU56cTNPa2FVd0p2SWZHdStmcTVYZkJPSGphZnZRRDZJb3doaGI5blFheFQ2SkRmU2I4Vmt4cm1WVm5xdTVyWEk1UnE3Ukh5TUpSaU5Kbk9IdDhrbXZiZ2d6WWpnblRuNGR5ZXhjU3pPM3ZReURvSjlsV0lqdUlzUktSOGZiQUFYbXp2c2x2TXViYm92VGFtYzdLMmJSVWYySDB5UmpMdEpxZVR1eUFqZThZUWNKSkExZGNkdHp1VkNlMC9FcmhZTkl3dTBZT3pFdGViK1NsTUtPVVFzRTl1dVp1dnVRWFdiWHBYbENidXZKQVJYUHlBbXpGR2hJK3VPR01CSDdEUE8wb0RVdzFNNzhBTjNoSjZFQitxbzBZUmhJNThiQlhDSVVMSW15Z2hXVnNheXNJU1FCNTZocUIySElwWHpPek85RWxGc2R4dUJPWDBpUGhTeE5QOWVWaHlTU0lwMkV6WGthYlI3ZmZReGtlaVRENEwwRllDR0dpTnpNRGRJalhoaGR6WFB6ZVE2c0hVd0R5Z2RVc3d4K3VtS2lxNDlvNVFyeTRFSlBjaHZYMzJtSjFFWlB2THJKNnBjYVZ1bUMzcFFxWHpqMmV2WDRvcFU3dk51MmErT1YrZXJ4dklqMlVibDZBM25Sc2t4a1d3OWZOQWVqVndNSUU1UkhFU281eHIxeE5LczdjY044TnczMU1mLzl0UkFLTkRMSEQ3Y0w2NW1tZXBhb2hrblBlTFluY2IrWkdBVnMzUW1lczV5Qkd2NHhiSlI3UnVXaktJV3dRNmxmQ3RGdEhBZTBXQ29vMURDK1NCNkpzZG5wRW1QZ0IyZ1NRNkpVaThWRm9JQmhWM2toQ2hmMDJZeGo5SnZlZy9US3FUd2czZUhQTzVzVmtXRFl2R0NTYUJ1cUk3bmFBOW9OQjg3Mk5nb3VJUWJrRXJIYjg4SjJkTmpTNkpwRHJUZlY3cmg4V3J4a3I4Y0IzWmgxMktuTW1LcUhvMXBPZW5odEY0NmF6RTlMYTg3dWNSdjNKUjJ5eVE3bUlObGZkbkdqblVKZXQvRjF1amUrcU82U3c2dllTcDZEUnNpR2dKNUJjeFhWbzNSNUxWK1lWMXV1emh2aVhEK2FiMVpHTkR4MlB4NG5yYW1hY2J0cUhLb2N5djMwZXpCMjhHcmtqWGUwK3hBa0J3YVRNekxkWW1GTzlPL2cyR0llSEFTVk5yVHo0VXhySThUeEtqalZKcXJ0MVhyZEk3RE0rM0RlK0NRMWZXNS9WM1RYSGRmeG9yRXdNUFRieHJzUmFZcG5sS0hNeHhaSHMrSmNmTWI3WEdwUEJXbUxmdUNRL2ZTemV2MlBSYXVDejZBbGwvQjRFQ0V2dEZvOUJyR0VkWnBuSU9JK0xnZ241QmJxT3dTYmppLzFocUJhMzRuOWZKOUFEM1U4aWJ1YW1HR2QzVzFMdVJsTm9oem5Ma3VpUGVEMWozQ0REcDVUVk5HQStGaGRYb2FZRXlNVDBxVHgyUm53cHM4SXRCOWZISjN5YTVGZWdDbGZQMHJSbGw5ZDdDWjMzM2ovaGczRzJNdGF2TTFmQlVOQnJOMVRlRldGMG9jN2l3Q29RdkttZVNwaEJSZUh0eXcweWl3OTBuNnhwZ0NZeWttb05LR2htaDBJVlpZOEtCa08wVzFwcVlJaTlNaVRWRzk0SjJqaCtjdk9TMFJzZVFLNWdVRDhFQXFQMkNhcjlJalZodFYzc3dQVk56VEIzdndZQ2tpV0JVN3I3M040MkJBbjZOMUc5Zmw5TlgvRDVBK0ozazlSNk5VVy9OeWJxVHJWc3p3NXpmT0Q4Tm8xb3RZdlgyU2dZTlgxMERjNVlvUHVKTFVqNjZkVHRjT2wvUEViWVpQaHJpMytPKy9FOStOOWpiZWFRck9RNWdKMTd4MENKMm1Eb1lZb05CbFROV05IdXp4YS9EdWZqcnd2ckcwb2crWVliRkNiMFRCRC8zbzdpdHpON2R6WEdvZHo3ZkozNnhzRE9reU9TQTQ0TjhySFB2LytUTWFERnBKbjQzNE44NU0vbWNxK0NLb2lnaHl3ZGprbFZ6Uzk4SGc2UUdCR1Yra1NhYTFLMGx5UjVUa0RjRE4vWUpUcFIvemZielNrazVldkY3UnVkRllLSnFtSWhFaVJFaXIwN0ZFQk5hejRFS3o3ODBCTjNxSzlyT2IrNFlvMTh6NzU4bmNrZ1M2TytQZ0xIWmsrdlhlcjdJYnU4QnF0cmJzMWYzM214NTJIZXlaSngzb2lHODBYemRiQTVTLytFSjdMeEVmczJkUHo0WWdhc2Vod1JSYUxLTFRrWWdRSlhrUFJiQWgxanFYbVNyZHp2Z21mRSsyVFovZm00anR5K2RqKy9mRzgwaVIyNm4vNjUxaitiT2RFZVYzZVpMNzRRVWlzSWJScjNTSkY1VG9uV3hqZmlJR2VkM3hhY3VYWUkvWEM5WHRoWUFZa0RVWTN0MUVnVE5PUmtnRThRNFVEU2dVUWNPSEVBdWdQSjZGOXZVWlFKNG5MZFFyLys5VitHZ2E0dnNReENETlg3NTk1eU5YcE0vZld4QW5wOXcrQzZqTkluMjVVNW9zcVFHckdIWHBCTzROamJjdTZ5NWZjdkpvZHJId25wV2FGWFdEVkdGcVhmM1pXdU56N0Y5ZXZ0cnlqRzVoYVRvSFA3WHZ4Yld6YTJpRmdObFhwdUtjSHlLNnRITDVKa2l4UysxanV1bnV3bHFEMzcvVzBGM1FUY2RJTFVXMEdOZzNGYzJrcDZOS2k1bEFUbWVtb0FrSVQ1clp4WHozZmRtcCtRTm1HNlJGeHgzRzZ5ZVhpb3Baa1Z6ZmxkWXJUZlRaenhZOWdvMitnWVhtWUloUzNja3Q2RUVQZXpZMjNaSGhqRzB3UHVIdDF6c3o3WXNkR2VQdVpZbGVNTUlzS2EwbWJURnJ1bE1HeTNzbUplUkNzcGY4UHV6UTRISVJxZGFJWExoRTg2N1lnWUJkbnRYa2MzNmJVL1A0dy9rcFpUOFU5RjBNMEIwaG9Gbm9OYTB1Y1d3eEZpNTBzN1QxNXdOMHdxVFpmQjdyTFY4eW1oYnFiY09GL2phZGF2VWZOMnNoWjBHUTFwYjRONDJrZEduMGNWVEQ5MS9XTXljbjVlcUlSVC8xK2RGa2IwdlQxZ09KdVZ2ckNJZjIyVXVLcHA5MzZTRlcwcWxzcUZ1bUpQV09UQ3p3VTc0WHNLQStXQnhucUROVmtBZkFxSTNqV3FzaHluOUhNYTk5U3ZaQm1Hdy9LY0IxZWpReW9QRlk1c3UvT0VQRDcwVHlXb1EvaWZWUjNsOHFUU0F1dlRVWDRGNFNlWTBhTkZ6UUFpVlFGZzNaRDdHLzMwRUtOL3BjRXNBQlNqQlhZOWRpNzRybFhwSmM0ZFY0OGphSUJyQXk0d3pMd0lEVlp1KzNXZ2ZzdTBOcE9jWXd3M3ZYSFpRY3JSQzNOdFFzTFBHbUVNWDFBOHNIMzBZWnVnQll1anhDTHc3ZSs1TkRUZGRROGViR0IrWWc1YVgwS3Bxd0l1cFNMcjN5RDVKbkZ4VHZmYW5wNk9HMCsxK2RtRjM2SWdHc3c5QkJjUDUzbmZIUDdObjNRWlhwc3hNK0tweERObjErQXFXQjRrZGpiaWFZdnZQcVA3V1E0Sy9EakRVWjcxMy9EYkY3QkdLU0tKMDhYK0wxVFJSeXgrVlc3Mm9PdkExM0FRdXJYdTA0OXQzTjlGS1lFNFczYzZFOTZhMDF5WWR2aTc3K0RCUlh3OW1SQy83TFBHSmxrQSs3UjcyMjFjR1FmY1dveTZVS2NyZnhBdkFmQnlENmNOYWN0ZXFIQ2FlK3BDbG1MR3RHQmdtQ1NQN2pCSFIxdGQwWDk0dTM2MWJEK1lsMmdZczk5dGtvQTF1Yzg2NFBmQlRpY2FwcWV2aHFYQmZlMmJQbGkrUDFIak1aRmF1NEJHdVZNR2wyNklhS0RsSjR6NjlYUjlHeHhYSHM1MFdiTGJpOEExOFJUZUVyaDUxV1paVDFoVFRGZ3B4OFdqN1NQaXFUNnNrMk9LSDg1cjRDNjRVc0RLenFuQkdYZlVVb2FGODk2blVKbmtTdittSHZSSWlLTUJoVVFPbnp6R3ZIMHE5K2FzbVk5YXBxWnF3V2M4YUdET01FTWxnZVFxQlNoMFVhUUQyMkk3c2VmVGFya0ZnTE5uT3BBMGVIK3F3ZDZnL29kWCtWeVd3MEIxYTFtL3lMUGM1VlFaOXoxWkpPOExYYjRZb3JiZDEvV0xtZTdVRUI3QnIxMkZjRmcvWlZvMjZYSXNBOUp0aUJLZGF6bG94RlAwUVF3T0pwUVVvRWpndzkzVnNRM3B0MHJDS05vaDZuSnlYVkdjT3d3Zk1hZGNYUStVUnZILzUzNSswMGVZNEVnNS9aTCt3ZlV5MXBHSlVrblpPam5iakVtSEVZaHV3WTBwK3htNHhaTTFLMDJ3MURXY2M4YnNpbk10bWlaV055dUNCWi90bmhIWWp6L2daT3FMdXNnd0J6UVZkdFBGUVhlWUR2SGxSeGN3dHNSMkkxalI5U0tpZHZPYjJwazdEMC9raUt1T1h4M3BtRHc1RkFIUmJtWFZsWithbFN4ZSs0SFN1ZGl4ZmEvUEpZWTZFZW1vMGt0SnI2OGg1MlljR0t2c0g5RDd4OUZWN0w5Uzd3ZEt3S0J1WG1CVzdmYk10WjBCSVJ6RmxQY2IxbVk4bnRwc1gyWWdBdXMwY00wcXhSTFBXdDExS3h2ZmNqcXJnQzlhckUzbThKN2ZlSlJjUVZKQWVzODRyNnUvbWdiVW5xZHovZzBDMnVKb1Y3a2s5L0tXQ1ZMb3dXNU9SUzdsdloyai82cUNPa2V3K2Y1Mkkycnlxang0K3EyNS8vMXlUOXREby9teStTbFpsejlscjhPZGRqdUNIR2xkckRCbkVHRXduSlhCWG1kSjdYcStKS3RCUG1QUmVwZXdtVzk0Uk9HVkVZOUs0OCtyOGlFaEF6blR4Z1ZHZEU5T0swRVhuU0NGZHh2RjhhNEtUQzFOeThacTI3N0JOTGlGY0NITUQ1SGVoWXRjaEQraFo3OEZXQm9CQU4ra2hMeW15eUFJR1djbGE3TFc4MWxnaWNDUWR0ZGlhOE1QQUhka0h5SHFHM3BJdWh1ZXZNL2JpeGdQeXNaZTRSd3I0czRMY3ZIM1c1QkU4Z1YvNncxK1J3ZWpNekNSK0p2OC9HOUVXOFF6K1F3ZUl4WktDakErblg0YzZ0bjlZYWZVTmZsOFUrYzFXTWR3dlhBOGRhNlozUlJ1RHNYYWdBVnZUMFp4OVE2cGsvcXNDS1NBejgxelh0ZnRGZkVETlR3L25NYmg2UVdSWlRZNEtuNS9PRlhmZlNBai83NmJCQWRpWW9SRnA3YzJNcndYQlRadDVwRDFzbTJHSVZjRWZ3dHAyMGFkZjJpWlVYSTN3RFdsQ0FWWkk1VkxmNjZtTXdHWUF4ekN2bGlHbys3dmlMMTlZajRJS3owN1pvc01QVy9QcWYwL3JJenArbVAvTzdKeHhIMEx6VFo4ekd0R3NPM0VJVDV4NlZUclhXK0w5bGdlOVVNTFA1WmJmQ3ZPWWxHbk9pZUJwRW5SU0J4TisvZUJOZjBqYnR3RUU2QmFvelZ4VjRxV09MUTcrNmlrZmRHK0JLd3V4Q3lJK3IyYitnMk5NdGtYN1I3Y2ZWREtXaS9nQ0VrRDFjMUt5OHNMWGh2Z2VPUHZoNHFKWjZFOEdyN05UYkVGUGMydkRzVzJXOG1sanRGcDZjQ1pXb3NyeVJISzNROUR2Ujg4bTI5TmtWblh1cmlRSU9pU3NhRHArdjIxTTRmbFVjTHpZZXZCQUM5citNVnFOdm9EUkNnVkZqY3lnTlhLN0N4WUZqYi9sbzA3VnZaUXRsMG16bi9PdHYrZEoxMWR0cndIazFVQTZ0ZEN3ZXMzazBuVTJMU3hzeDdOTVNQWmV0c21hTXVrSkhvUFhkQ1I5SDZvem94R21yMldZeUpaTE9aRkFkZ3cyazlCQ3ozWDY5M09MeUdUc3kzcStlZUpKc2U5MnlhSWc2NzEvZjhlZ240UEFNeFFLMlh3MEx2ZmRKOUI3YytRZFNUUFN2bENyWjRMaC8yaHFtN3RiYVhEYnpBbGh1ZFNFbzdBZXVXbXFwenkxWEtWMXkxVkJycEtSTHFWUzVsWnFlTjlxOUJzVG1OVW9RTVdSTklJR0dJMFhreXNFU2NnVlpvN0hoWXJBMGFBbFNvd284RlZmdXkrWEZtb3JoT0VFb244dTV4c0Y1WUl3NWNpb25vTUlGaDIxWFIwc0hpdXVtRHRKZncrbm41aFNWRldMK1Y5UlUzRll5SUZKdlNHdzJwTlV5aWdYOEt1Y0RtamFPTzNCdm4wNlhzUWhiZk9hVWRQYm51U0RXbWpJa2s1MlRZVjFhTkkzaGxraFdyS0VaUGl3REdyeVBjUGI3L0l4bHo3YXBIa1RoL1lXdmZtc3NGNlM0a2hidkQzcUprUVVXWEJYbmZpQ1VVa2lKalFKbDhMWHRFOHFkSTZqRmJkRjJKN211Mjd5WGw0M3o5N0M5ZzFTTjJXd0VvK0REa09iUGVscEVIWGtkMG0zRE5Ja3VqVk5LTkY5VEllemYxcXhwcGRDSW1oZjhOd25hcnY0UC9WT01NLzN3UWN3NjRESUp1M0JuanhEd0lEVWpOM25hTW1vamV6bTZQRERjRngrT2w4TzVRdXcxOEdRbTRDOGE1aC9SU3o2UGNGVzZnQlRGMlRHVnhWUXFPbkdaSWFLR1l5YWRPQlV3V2h3cEZNNFkxTXBZQWdIWHEvQnRlTythS2JjR0lVV2dNS0t5TlNSNk5oOXV1Z1lzN0NDcUhDejB3cWdwM1lmWWJIbkVsRVpoZ1dmSlA1NDNmZCtPUzQxSU1xc3pHak02SkdtVXZ2Zzl0SHlFZ3ZDSVpUSzNXRUhBUkNMbWNpZGlSOFRCM2lRQnF6MUJxUnFXSi9EQVJFOFMxSi9VNEl4TDBFV0JnYjZJK1FMeDV4ZVB4cmRWNVNmclorRjJHRWpzVVpYVk5IZ2FETWROV2tzUU5aL0hBS2NOR21VMG52RUVCSSt6T21FMWl4eFhQbTRtMWJCSkhUK2tWSGt3bzhwWEVBa2FzWndUV0MyQUZmUlZZdzAvVVk0dExxMVlxTFNqWnl1YVI2ajV3SmI0QW0reVQzR1dWWHVjM1lnTlU4M2diYmxjOEpLc2ZValEwTDVqM3BVRmNYSUdjb0FWMEM3dytiNXFSaUpXeEJFcmtuOFp1WGV5V0FvV2ZlbWxBeGRwdkxkdy9yaHFYYnZhc0VYWThzQzFoZnlLY3BCOGI3bGJ5UDFYQWU0V3NjTHp4VU5iZDNYMjFOWTNQRUZ6d1h1THR0NVJmNWlLUFNXUUlqc0l2ci9Wcllidy9PQzdDTDh2TS9CVEhIWjU1WWFKTXBET3Q3UnRhdHBaT2R3Mm4xNURoK3RMalM4QWZ1WGpQUnpldWI5UUJ6VnZkcllKaFFFVUgybWt2MHk0OThCR3duZnZpanRvRmJVM1NkcTJYL2QwUzN0THl6U0w5MU56ODJPZ0JQZ3NhdSt5Z1QrdE9BZzUxSENmWGRHZnluR3FFUlR2YThBMnFQTDdQYTJOM0xzL25aZEFLOTl5NkNrMjU2NURMVzNVeExKUlkrMnQ5L3h1dnJQWjB0cFNXYjZ0MHJmVjByU1AwOUhXdXE2MWRieTFUUXVpRXJ4TXBKZmNwcmRERlRVUFZiTkZOenRZYWoxbCtkVzhuNXBiWHVRMHExdWFENE1ub0ZDaTM5MG51aGpmOXlEWXZ4eXlJM1NhRjEwWHgwcmxKaXc2M2Eza1U2cDFLMmR3a3Z5eFd4eXIxYzhUT2tGT1hXS0txajNiaXZJRVgySEdiYnBBWXVYRGpxcEQxc0UrbjFadG5jUkpybW1nY25pVkRPdXd2UFdTQ3V5d25uOWFZN1V2MDFETjZ4RFR0MXFsUTllN2hVdGJoTUtXcGNKRUJTRmI5ZVVZWEFKSDVucTBrdnNoRG0xRnJXVzM4bzdCMjlCbHo4NTlXeVBQQTErYmp3YXArUHhraHRkMUlLSXc5ZnpseWs3VjJrNU1ubXVWWHNtdHRVTnpySDN4dHRZSDZKcWpPS0syUStlbXYxNzVQcVEzOFQrOW02Uzd5ZlU4cThEK0J4aFRSZUhDdmpUbldrQU05MUpZMlFrYjVBR1BRcVdKcUE3Nm5sdyt3L2U5T1lCaXBpNGQya3RJZU9ST3YxQkZjVythZ0NoQTNlc2xFWFVHYmNJR0FSVGM0bmhUMTFCWjY2WFh6VEZMRk55WklUNU1MVytyeUJtb2RXMlZyRVhEUk1acVJELzJxeU1MNzJYZ1FwR0VMZk5vejcwZ3ZvN0JrQnp4V3A2ZWhBVmFjbnBldFhrTjZ4SkdkZ2lKeWhwSmg3YUNNSWdETWNwUlQ4cWlhTHZMN0dhTlUrWm40dWlscmdhM1lvTStpS3NISHFqOUd1NG5ncnBGSG9XcnZsRlFQc1BjcHhsanFPTHN2ZG1tamJyZW1zSHJhOSt1U3NHRCtvVnVwYnNPYjdGeFpZVTZzcXhSYmR4MG5XT3hra2tpdXM0dm53L0swV0NKUjV1STc1WFhUMzE0QnMrOURUbkJ4YnlSbU5HNXd3NUJnV1BVSmhuWnNsMldXM041KzNVcmRpVTBMaXF4SUM5ZkpodWZObCtXVEpxdTBMY1Nra3hYNHpGQWU1UldSTFZjUGo1VE0xTkZSdFA1YmJma2MvWWJOTlVJaUxucFRCTFRzcnNwZ0NNWngybkZha012SnVjb2lqd2FVTWFLZUw3UVF1ZWo2S08yM0pGbFFJdFV1all6Ty9TWXVFMDdmYnZJUk5HOE1uY3BvNWQzbDVsSzBqSWptZHU0OVk5Ylg2bzI2WWxaYzdQZkhmOTB2TWRtSGx3WlFUeUhETlgxR2w1azFqN2NQNC81TU5FcDQwUUp6VE0zR0xpdjBKcmZCUjR1QWZmMHFCQk1XMEtVNFZtcTJPTXFjTE1kVERldmFQaUNtYlk0d1l5VkwxZ1pOblZSc2o0SExwYUF1ZWFucTRMY0NwbFhwUktpa3ltVTZZYWM0ZXUrRUlvKzEvTjUrczlGd2k5MFFQMk5yZ0NLR3BURExES1dMYVJXNmtiUGFtTjNFWm1LUklRUXlkVWViRVMwK1hHcWRxaGJnTVNtNHVIOWhiN3dBYXFPSVYyQzRLUFV2bUlFTDFBUGZBMzRLNWxtaXhWMzZHODBLTHNiVW8xQ251ckN5QlJGN2tjRlMrOUVzWVgvelFmZjhCL2JmZFBreXpzcE1JNHFqcG5zWHJyQW83LzFxZGZuUzBUTTNBYVMyVVR2UjhlTFZ1TGVqdXdMbEhkYnduVVdYWkZWbW94aG5hTExqakNiTmZpWjJRSkpMZ2lLMjhxT3VreWx5eFp5ZXVKUDNDL3BJYlE2VEYydWhYZ2FjS1pXRmJ2Z3ozR3Z3aDVnYUdkdElDSFpkQVB3UGFDekl1amFlMWZNZE9GOTJkNFF3V0h2T1gyTEtESmxqMmk2Tmpmb2hxc2doRnV1RzloS3JhWE4wb2hWMEVPa0dhTExMek9NdnVoWEU4dlU1ZGJvY3Nab0RNbE1JVE55K1RXaTBKS0lMNURVKzAvcGQwZjBRNG02Q1hXcDhNSFFJK1Y5bmhuY3dTREtNY29RL2NoelY3OWJLYysvdnZnNS9TRndPNzkwN1BENXUvZFV5dmV2OUQyalgwWlpkQWVTUmkvdmY2cTgzV096SnhpWVdoaktIOXA2RG1LVWR0dzM1ZjRTeHF0Ykg3b2pTY1dIRnJuVytEN2xZbTFOaytIbWF5cndkUFJDdmZZbThNc2xqeG9mRWMyTXVEWDMydy9NTStpbHV2enJEWndUY2VsdHVwOXVodDBHbDQ4ZCtRbkhXMDVVc2p6WGEvbm4yYk5zODNUOUVIWm91OG50NDhzRk9QczE3ODkzQ2JYYjJzTkxXVEdOanBVNEFNT1RyTGhXeTQ1UFhxdVZScXhPVlFUV1NHTldoeXI4eUI1NDhvSldZQVBaWGNEaHpjS085Mys4QitPNVI4eEtxTjVjbW95a0ZDbzFyaFlGWUsyb2hHZXpSdFFWakc2cDhqbkFPbFVwaitQcWJjUy9ubElDTldRNEM3QkVjUDFPYjkvWW5jNnRhNEkzTG5KSVZrYjdObUhkV0tqMndyOVp6S1RpNzVzWEsxTkRlNXhkWTRvcHo4ckUvUWVuSC9jc1dYWXFGZG1iY1FqWDJBZml0cEJFR3BHN2ZQSXV2ZkNyS3hWYXY5WVFZbVdramc0M3FBTFRmSmR0ektvVXhueEUvM2ZST20vUmpLaTd1ekFuT2FnZ1NGblhucGJySUhDMkxOZVdvdkZsMnBacXJnbi81S0xrc2pFaUlNTmkvSWhFby9SRlpaZy9heFlES1MvWUpVenJVN3RnaDl1RG03anRwQ0ZJV2I4OTJ4MkkyeXF5TVNyZWJyOUlxMlBXc0oyTVhyd3JOU0loM1FBNUEyL1pVSUswMWZid3ZtWUVGOHFHcXBCaUxHWHFYUzhldXdaaUxJN1Y5cWFQTGhqMjBVSlA5MnFWRjZWNHZVUWRZczM4bDlCVmdTbmNZT0c3WlZrdGl0cmZmdnRCMmI3UUorS0dtbk5ldkpValdldmhpQkN2VWlHTlBkeUdlQVhMdDBKNGZwQ2MyR2tGOTlYVFVrRzRWL3RxcEtYSDllbXBCeFZudjJ1RFhYcGZFOG1zbW1OV2xPTVkyRit3eVZETUdTZENZZVBtWW02VG9kT3lDem5UNW5ESU5GSFFJaVg0WW5VNm9WM3E5VWd3bmN5bE9HYVNabytYU2FRbVZqdXpCazNHYUtRWFJ4Wnh1ZzFKdnMvMHcyRDRmMXZ4eVVRZUdCWjV2VElEKzRkYzhzZDRUKzNRdmxmQVhCK2FJNytVemM3ekZBK0xPWnhmNUtDOFFtMXZmOHhJQWRCb1V6bDFOS1ArUkhkRjRmaXA1bGNhbW5ZM2QxUzF2MWIvdFdQSVlpOFJoTDJrNVE1bmFVR2c4VG9hMTJpVG1GbWJVQTBVVFdoMENUT21TK3BpZ0hjbHBEaHg4R2FvdlNXakxYUXIwVklFb2gvejFLVVR0bjNYZU9nNzlEQys1Q1NVNlJyZFBlbVRYLzFzaWR2NkQ1Z1ZhVlpzSlRQblV6c2xWNnZGVXZYVkV1blZISWxFYzdWWFpwTkxiYkt2TWJCc2I2L2tzMytMb2VYVFY5SVFzZ01OOWwwYjJnSlpuUE5wT003dXZaNHVXYllkNTlSVE9UdzNKR1hwbnZxcWhiWCtHMERLVkN0Z0VsMVVMUlBmM2VyZ2tOOVBGNjRFRUhXWlJ0M0UyNjIxZlBTSGFqK3hTTDJIaGx6d2RUMnpxdmgvd1pkc0NFak5vNG91SUxkN0ljZTFiUkh3ZnBWV0JaaGpmWmlaVEF0Rk5WTUxnNmdXTWhocW1XaEswUjNFcG9LdHh5dVd6UzFxNW1ycE93cThlVnkzQy9GUmVSTUlIS2VaS0VJK2VZaXVvbWwyQ1BvTUZqWDZxOEJsdjBjRTNWdW9RazhLNXllTXBkTkhJSWtzM3hoTENTWGxmRThxdjN4K2p3OVFZcGhTNHpMSE5mM3p0ckVtTUowNEcwMTJVc1BYNSt0cXVrWGJWMmhLYlVrUlRJNmMrRHhEZmxNaHhvc0NJYy96Z0poSEZVdGRqeWx2V0NrcHVMNDJkV0RmcE9sdWFxbFoxaE5CdE5zTGZCR1JxVUptSVN2OVo0RkVla3Znald0c2JHcjhRZTUySTdpOUpmZ1JYZ09RdlY3YkpOYXQrT3R0WS9Rd3lrdU53SDRqQzFiNVpVdlpwNyt1cTJGa3VyczRtZ09oZHJXL2Q5amdUUTY3cGdLRHI4aG0vazdvOW83czUwNnkyQ2VlWTNQdU84Rm1uYnp2YnRZUExhMy9XL3JaRkpaN0dnSU0zNjdYd1BZamdNcHIvRU1nNFhvRG01R3VsMWdIczcvQ0lTYWIzenVnazA0TWFBMElWRVV2cm0zdXBXRFI4RGNLaGx0UU1GeU5naUVUSS9nbmU2MmtUZDZjMmRiazVXSERyeDdaSklzcWNLWXZTdUpSbElhaW9CdEZ3VHNvQ3Y2VW9nVEFkY2dKTGNnSnp5SW5QSUtjOEtHVW9pOTB3ZlNhUnV3QW9vK29xYnFSMnVjUnBnNC9jajNCVEpqOUtlWng0R2ZqbW1BWDVUbVdZQ2xUTU55bXp3UWx4V21EUjlWKy9pT2NKUFpmbUI2SGwrQUdqWTBvNHRSdDF2Y0h1NGJGYW4yeXorQWJSak5iOG8xU1RqZEdHcU5PeFg0U0lUVnB5Q1BYSTh5aGlUM0JBaVllM3pJVitLaGs1aVJDUG1qVCszU2xlcCt1QnZuZzVER0xRZkVYQThFQTluYnJuWG9Bc1h3eGU3K3VJdEFJZm8zNjhVZzNRbUJxK3dqb2JmUXgrZ1I5aWo1RG42TXZ3SmZnUGVrclV2d2FxU0srVmQ3RDcrRDN6QThlMnZoMkl6RDl0ZW54VkQ2SkM0NTEyeHQ4bGo1SGZUOVBmeHArb3M0SHRBVmR3WXpLbktxK1FzenhleG8zckd3TGNyZDJWZFFRTjFtWHgxUGN3QzF1NHNQYnpCTkVMdjJMYUxEZFV0UDJvYlF4SzhhekhvTzRXM2lEM1Q0OWZXZVUyZWZSM2Y3L3lMRllabURRWHZjOUs5bGFnVVVBTWVMZWZ4YXNBakNIZlZnQVpCNklkWXM1MFh1MTNicUxGOWIyNEk5WkQyc0RiaTE0L3o4Z3kxaXhsdGpndk9VQjVMb0FnQlhZemFsSmdzYU1yUjF0WFlkUlJsR0g5UlFkc0UrNnhtUmc4eUllbzhveFJ1TVFCU29QdU1PTVlNTGRzNHhHQ0orSDJTTWk1YWJ1cy93Q1ZZNXROQTBYbTB5OXhHTTBKdEFPcTFwZ0swQmRLQWY3REtHdjBNZm95OUYvWkdsYWxOdmx3bmxDY2hndFJMOWxXNkFyNEtOK29TZGdJeFhwSUp5RjI3Z08yTy9OQWxoMVZYZU5PeVBkOS8zU0lLQS9WQ2szOVk0RVBZaXVIZU1CSEpwV2ttM1FlSkVMUEVZTDBXOWdnWkthOXpHSHp2OGJJN0RIZS80WWJoZmUyRTlpb085Sk0zMjNidWJzU2tRdmlNdytuM1FOSlVlOHRPdHJ6eTV2MkVhNjdBMnhWWlRzNHU4eTFqam51NTNOQzNrRWJpRS9aanNpdWxPajIwUTY4VTZZRWltdHhrdXVDM3ZMOFlaTG8yc0ZFYWRReHV2RzlsRTBldDYrbGsrN01RSG9OMFBZbHNhWGIrdmFOM3RyMXk0MmRWbWtmU2JWNXhpM0JiVjF1MTFNOXdEMGxPekxYbllDUjkwdDR3dCtyaXVvS0ExOXl1d0QycExBSndRN1ozeStjSW5pOGtnNjE4blVTQVQyTzZWSy8zV0JJYTFoVDJldzdFb0ZTcmFNSWorVFdFMCs5NHJhSEFKd0VUOStaN3BsWEVqcTN4REgzUURnNUlHTys1TDhMMitKLytpd3p4UE14Z0VpQmdBSS9peVpvSEFtTVAwL2VFNWs5eTZpTmUxazZ3N1d6NHVjcnFUcHh5WjNCZVVKdjJSeXAzWEZUUFlkeUw3Skl3UjRSa2p6TjdhelhpMkNJTUUwcFRYb2RaYzdJU2pkK3JMNEZIeEdFeTNBUkhVQXgxVi9MWnZpamw4d1dWMm0xZlNDZitzd2MwVzA2T3FhNW02U0t6eXRSbmhRVmFnTTZNY2hSZ2tKTVhZRThZaEI5dW1Lb29UcEdScU5rSzRmeDRPVyt1KzRDcmNHWXJnVFo1dm1HOVRVanRmbmlxWVpVV1Q2VWcwZUUzaGtpVUc1bkJwZ2pGMTREWGJvK0RRUmJmcFYxM3pNcGxJSkN1YytWTEp4R2dhenhGd1dJM1pMbmo2NVg1MDB4QjAzb1owTUw0YVNQNkd2UVhLYnVQTXJVcXZtYVFoM1VHWnJSVVpOaVlvOXRYVFJVN3hHbGRTeXBZNDViQXJMVUxNenRBYjY1aW1kSU9hUkRZcElVRjVCc0lvN0tRNi9VelN3dEkyU2VkUzFrN1FvSVhQU2MwR1RGNHV6V2h4THh2d054RjdoOXIxMkxMWVhJZDlGRDVzck8vUzMyYktlV3paUEpxWC9BTTNRaDFwdWZTdDc2amlRdllFbDFtTTBlTTdUTWt3QUEzdDlTRG03NlphWEtMWjU2NXZwTzBpeHZmUXlDSTJqNUJPaFYvazJQaVYzc1J0NEtxRmwvbUR1RG5VejZtN1Z2NzhSUGIzSTFqUE1YVkNxVllpZitFVEZIblczcmNoTWI1MWUxdXVWcHpMMGxnR1RJQVVNYVJVRmNLQURzSUVFMFFJWm1LZnlEVWxGWlljbzJhNi80M1FEQ2FYc2tjTUdPSzJzNUtGenFQeWk3c2pmSjlTOE5Wb2pqOG9YMU1qdXlmRUVRSUNQY1dpbUFXZ2pMQndrSnEwT0pqaWRIWnoyaVkzT1p6c0VrZG5yRU5seW5TTllZbDV5aERLWFlnOGoxYnFUQ0Foc25DN3k1S3RRS0p0WGxtSXloVXU4TkxMQkJaaXl1UU9VeURiSmRFVW15RFdackw5Q2VhYVpZaElIN1VTMHVKWG1lYlRJaWpaQmNyRjgwMjg2SnlldjdFeTF4RVFPcXNtVHc3bkt0ZEFVWmV6eVRlRGxreTNYQkdVWjQzTEtwaDdRSEs3eHFlQVFldnRvY1dSbEV0SmxBMDFSWk1wUktUVkZYZXJweFZ4RnhiNjhuRjdqc3E3R2JkVTIwQnVlSVZKT3dzZkZxNFRQQklVU09MaTRKTXJRVno5OWRaTWhhUEM0V1RzWXlnRW5acXM0bXJ3WUtkeGV1UGxZS1RMSnFEUy9WNG80aENvK0R2TlFiL1FJK3ZIb3JlZmdNVFBNbTRZNXUwNzVQNkpJWGhIL2UxL3lud0VBKSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfWJvZHksaHRtbHtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fWh0bWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXBhcmFncmFwaCxwe2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpqdXN0aWZ5fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjE1O21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgyLGgye2ZvbnQtc2l6ZToyLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMyxoM3tmb250LXNpemU6MnJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yNTttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDQsaDR7Zm9udC1zaXplOjEuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNSxoNXtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OmJvbGRlcjtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg2LGg2e2ZvbnQtc2l6ZToxLjNyZW07Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19cCtoMXttYXJnaW4tdG9wOjMuNzVyZW19cCtoMnttYXJnaW4tdG9wOjNyZW19cCtoM3ttYXJnaW4tdG9wOjIuMjVyZW19cCtoNHttYXJnaW4tdG9wOjEuNXJlbX1wK2g1e21hcmdpbi10b3A6Ljc1cmVtfWRpditoMSxkaXYraDIsZGl2K2gzLGRpditoNCxkaXYraDUsZGl2K2g2LHAraDZ7bWFyZ2luLXRvcDowfS5kZWNve2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMSkgMCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTIpIDUwJSx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTMpIDEwMCUpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1zaXplOmNvdmVyO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO3RleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudH06Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9OjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX1rYmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Ym9yZGVyLXJhZGl1czoxMHJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtwYWRkaW5nOi4yNWVtIC42ZW07dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfWRldGFpbHN7bWFyZ2luLWJvdHRvbToxcmVtfXN1bW1hcnl7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mZWF0dXJlLXNldHRpbmdzOlxcXCJ0bnVtXFxcIjtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjFlbTtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0ubW9ub3NwYWNle2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFxcXCJRdWlja3NhbmRcXFwiLFxcXCJTZWdvZSBVSVxcXCIsXFxcIlJvYm90b1xcXCIsXFxcIk94eWdlblxcXCIsXFxcIlVidW50dVxcXCIsXFxcIkNhbnRhcmVsbFxcXCIsXFxcIkZpcmEgU2Fuc1xcXCIsXFxcIkRyb2lkIFNhbnNcXFwiLFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsQXJpYWwsc2Fucy1zZXJpZixcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCI7LS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZTpcXFwiQ29uc29sYXNcXFwiLFxcXCJDb3VyaWVyIE5ld1xcXCIsXFxcIlJvYm90byBNb25vXFxcIixcXFwiU291cmNlIENvZGUgUHJvXFxcIixcXFwiRmlyYSBNb25vXFxcIixtb25vc3BhY2U7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi02KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTYpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTIpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xOiM4MzNhYjQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTI6I2ZkMWQxZDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMzojZmNiMDQ1Oy0tbW9uc3Rlci1ib3gtc2hhZG93LTE6bm9uZTstLW1vbnN0ZXItYm94LXNoYWRvdy0yOi0xcHggMXB4IDEwcHggMXB4IGhzbGEoMCwwJSw3NiUsLjYxKTstLW1vbnN0ZXItdGV4dC1zaGFkb3c6bm9uZTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTIpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aDoycHg7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci1ib3JkZXItd2lkdGg6M3B4Oy0tbW9uc3Rlci1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlOi00cHg7LS1tb25zdGVyLXotaW5kZXgtZGVmYXVsdDowOy0tbW9uc3Rlci16LWluZGV4LW91dGxpbmU6MTA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd246MjAwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duLW92ZXJsYXk6MjEwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreTozMDA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5LW92ZXJsYXk6MzEwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkOjQwMDstLW1vbnN0ZXItei1pbmRleC1maXhlZC1vdmVybGF5OjQxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcDo1MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3Atb3ZlcmxheTo1MTA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzOjYwMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMtb3ZlcmxheTo2MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWw6NzAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXk6NzEwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXI6ODAwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXItb3ZlcmxheTo4MTA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcDo4MDA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcC1vdmVybGF5OjkxMDstLW1vbnN0ZXItc3BhY2UtMDowOy0tbW9uc3Rlci1zcGFjZS0xOjJweDstLW1vbnN0ZXItc3BhY2UtMjo0cHg7LS1tb25zdGVyLXNwYWNlLTM6NnB4Oy0tbW9uc3Rlci1zcGFjZS00OjEwcHg7LS1tb25zdGVyLXNwYWNlLTU6MTZweDstLW1vbnN0ZXItc3BhY2UtNjoyNnB4Oy0tbW9uc3Rlci1zcGFjZS03OjQycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC00OjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTc6NzY4cHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtOTo5OTJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0xMjoxMjAwcHg7LS1tb25zdGVyLWRyYWdnZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS13aWR0aDo0cHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLWhlaWdodDo1MHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXthbGlnbi1jb250ZW50OnN0cmV0Y2g7Ym9yZGVyOjA7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDttYXJnaW46MDttaW4taGVpZ2h0OjEwMHZoO3BhZGRpbmc6MH1bZGF0YS1tb25zdGVyLXJvbGU9aGVhZGVyXXtoZWlnaHQ6NjRweDttYXJnaW46MCAwIDAgNjBweH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udGVudF0sW2RhdGEtbW9uc3Rlci1yb2xlPWZvb3Rlcl0sW2RhdGEtbW9uc3Rlci1yb2xlPWhlYWRlcl17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uLy4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0LCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IHBhcnNlTG9jYWxlIH0gZnJvbSBcIi4uL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcIi4uL3Byb3ZpZGVyLm1qc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25zIH0gZnJvbSBcIi4uL3RyYW5zbGF0aW9ucy5tanNcIjtcblxuZXhwb3J0IHsgRW1iZWQgfTtcblxuLyoqXG4gKiBUaGUgRW1iZWQgcHJvdmlkZXIgcmV0cmlldmVzIGEgSlNPTiBmaWxlIGZyb20gdGhlIGdpdmVuIFNjcmlwdCBUYWcuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi9leGFtcGxlL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzMDY2fVxuICovXG5jbGFzcyBFbWJlZCBleHRlbmRzIFByb3ZpZGVyIHtcblx0LyoqXG5cdCAqIGBgYGh0bWxcblx0ICogPHNjcmlwdCBpZD1cInRyYW5zbGF0aW9uc1wiIHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCI+XG5cdCAqIHtcblx0ICogICAgIFwiaGVsbG9cIjogXCJIYWxsb1wiXG5cdCAqIH1cblx0ICogPC9zY3JpcHQ+XG5cdCAqIGBgYFxuXHQgKlxuXHQgKlxuXHQgKiBgYGBqYXZhc2NyaXB0XG5cdCAqIG5ldyBFbWJlZCgndHJhbnNsYXRpb25zJylcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8c3RyaW5nfSBlbGVtZW50T3JJZFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHQgKi9cblx0Y29uc3RydWN0b3IoZWxlbWVudE9ySWQsIG9wdGlvbnMpIHtcblx0XHRzdXBlcihvcHRpb25zKTtcblxuXHRcdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbnMgPSB7fTtcblx0XHR9XG5cblx0XHRpZiAoZWxlbWVudE9ySWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBAcHJvcGVydHkge0hUTUxFbGVtZW50fHN0cmluZ31cblx0XHRcdCAqL1xuXHRcdFx0dGhpcy50cmFuc2xhdGVFbGVtZW50ID0gZWxlbWVudE9ySWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogQHByb3BlcnR5IHtIVE1MRWxlbWVudHxzdHJpbmd9XG5cdFx0XHQgKi9cblx0XHRcdHRoaXMudHJhbnNsYXRlRWxlbWVudCA9IGdldERvY3VtZW50KCkuZ2V0RWxlbWVudEJ5SWQoXG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKGVsZW1lbnRPcklkKSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcHJvcGVydHkge09iamVjdH0gb3B0aW9uc1xuXHRcdCAqL1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gZXh0ZW5kKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHRoaXMuZGVmYXVsdHMsXG5cdFx0XHR2YWxpZGF0ZU9iamVjdChvcHRpb25zKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmF1bHRzXG5cdCAqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEl9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7TG9jYWxlfHN0cmluZ30gbG9jYWxlXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRnZXRUcmFuc2xhdGlvbnMobG9jYWxlKSB7XG5cdFx0aWYgKGlzU3RyaW5nKGxvY2FsZSkpIHtcblx0XHRcdGxvY2FsZSA9IHBhcnNlTG9jYWxlKGxvY2FsZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGlmICh0aGlzLnRyYW5zbGF0ZUVsZW1lbnQgPT09IG51bGwpIHtcblx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIlRleHQgbm90IGZvdW5kXCIpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoISh0aGlzLnRyYW5zbGF0ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MU2NyaXB0RWxlbWVudCkpIHtcblx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIkVsZW1lbnQgaXMgbm90IGEgc2NyaXB0IHRhZ1wiKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMudHJhbnNsYXRlRWxlbWVudC50eXBlICE9PSBcImFwcGxpY2F0aW9uL2pzb25cIikge1xuXHRcdFx0XHRyZWplY3QoXG5cdFx0XHRcdFx0bmV3IEVycm9yKFwiRWxlbWVudCBpcyBub3QgYSBzY3JpcHQgdGFnIHdpdGggdHlwZSBhcHBsaWNhdGlvbi9qc29uXCIpLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGxldCB0cmFuc2xhdGlvbnMgPSBudWxsO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dHJhbnNsYXRpb25zID0gSlNPTi5wYXJzZSh0aGlzLnRyYW5zbGF0ZUVsZW1lbnQuaW5uZXJIVE1MLnRyaW0oKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodHJhbnNsYXRpb25zID09PSBudWxsKSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJUcmFuc2xhdGlvbnMgbm90IGZvdW5kIG9yIGludmFsaWRcIikpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHQgPSBuZXcgVHJhbnNsYXRpb25zKGxvY2FsZSk7XG5cdFx0XHR0LmFzc2lnblRyYW5zbGF0aW9ucyh0cmFuc2xhdGlvbnMpO1xuXG5cdFx0XHRyZXNvbHZlKHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSB0cmFuc2xhdGlvbnMgZm9yIHRoZSBjdXJyZW50IGRvY3VtZW50LlxuXHQgKlxuXHQgKiBgc2NyaXB0W2RhdGEtbW9uc3Rlci1yb2xlPXRyYW5zbGF0aW9uc11gIGlzIHNlYXJjaGVkIGZvciBhbmQgdGhlIHRyYW5zbGF0aW9ucyBhcmUgYXNzaWduZWQgdG8gdGhlIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbGVtZW50XG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPEF3YWl0ZWQ8KltdPj58UHJvbWlzZTxBd2FpdGVkPHVua25vd24+W10+fVxuXHQgKi9cblx0c3RhdGljIGFzc2lnblRyYW5zbGF0aW9uc1RvRWxlbWVudChlbGVtZW50KSB7XG5cdFx0Y29uc3QgZCA9IGdldERvY3VtZW50KCk7XG5cblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHRlbGVtZW50ID0gZC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBsaXN0ID0gZC5xdWVyeVNlbGVjdG9yQWxsKFwic2NyaXB0W2RhdGEtbW9uc3Rlci1yb2xlPXRyYW5zbGF0aW9uc11cIik7XG5cdFx0aWYgKGxpc3QgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHRcdH1cblxuXHRcdGNvbnN0IHByb21pc2VzID0gW107XG5cblx0XHRsaXN0LmZvckVhY2goKHRyYW5zbGF0aW9uRWxlbWVudCkgPT4ge1xuXHRcdFx0Y29uc3QgcCA9IG5ldyBFbWJlZCh0cmFuc2xhdGlvbkVsZW1lbnQsIHt9KTtcblx0XHRcdHByb21pc2VzLnB1c2gocC5hc3NpZ25Ub0VsZW1lbnQodW5kZWZpbmVkLCBlbGVtZW50KSk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZ2V0RG9jdW1lbnQsIGdldFdpbmRvdyB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5cbmV4cG9ydCB7IGRvbVJlYWR5LCB3aW5kb3dSZWFkeSB9O1xuXG4vKipcbiAqIFRoaXMgdmFyaWFibGUgaXMgYSBwcm9taXNlIGZ1bGZpbGxlZCBhcyBzb29uIGFzIHRoZSBkb20gaXMgYXZhaWxhYmxlLlxuICpcbiAqIFRoZSBET01Db250ZW50TG9hZGVkIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIG9yaWdpbmFsIEhUTUwgZG9jdW1lbnQgaXMgZnVsbHkgbG9hZGVkIGFuZCBwYXJzZWRcbiAqIHdpdGhvdXQgd2FpdGluZyBmb3Igc3R5bGVzaGVldHMsIGltYWdlcywgYW5kIHN1YmZyYW1lcyB0byBmaW5pc2ggbG9hZGluZy5cbiAqXG4gKiBkb2N1bWVudC5yZWFkeVN0YXRlIGNoYW5nZXMgdG8gaW50ZXJhY3RpdmVcbiAqIHdpbmRvdydzIERPTUNvbnRlbnRMb2FkZWQgZXZlbnQgZ2V0cyBmaXJlZFxuICogZG9jdW1lbnQucmVhZHlTdGF0ZSBjaGFuZ2VzIHRvIGNvbXBsZXRlXG4gKiB3aW5kb3cncyBsb2FkIGV2ZW50IGdldHMgZmlyZWQgbG9hZFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMzEuMFxuICogQHN1bW1hcnkgdmFyaWFibGUgdG8gY2hlY2sgaWYgZG9tIGlzIHJlYWR5XG4gKiBAdHlwZSB7UHJvbWlzZX1cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L0RPTUNvbnRlbnRMb2FkZWRfZXZlbnRcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L3JlYWR5U3RhdGVcbiAqL1xuY29uc3QgZG9tUmVhZHkgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0aWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwibG9hZGluZ1wiKSB7XG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgcmVzb2x2ZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmVzb2x2ZSgpO1xuXHR9XG59KTtcblxuLyoqXG4gKiBUaGlzIHZhcmlhYmxlIGlzIGEgcHJvbWlzZSBpcyBmdWxmaWxsZWQgYXMgc29vbiBhcyB0aGUgd2luZG93cyBpcyBhdmFpbGFibGUuXG4gKlxuICogVGhlIGxvYWQgZXZlbnQgZmlyZXMgd2hlbiB0aGUgZW50aXJlIHBhZ2UgaXMgbG9hZGVkLCBpbmNsdWRpbmcgYWxsIGRlcGVuZGVudCByZXNvdXJjZXMgc3VjaCBhcyBzdHlsZXNoZWV0cyxcbiAqIGFzc2V0cywgYW5kIGltYWdlcy4gVW5saWtlIERPTUNvbnRlbnRMb2FkZWQsIHdoaWNoIGZpcmVzIGFzIHNvb24gYXMgdGhlIERPTSBvZiB0aGUgcGFnZSBpcyBsb2FkZWQsXG4gKiB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSByZXNvdXJjZXMgdG8gZmluaXNoIGxvYWRpbmcuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zMS4wXG4gKiBAc3VtbWFyeSB2YXJpYWJsZSB0byBjaGVjayBpZiB3aW5kb3cgaXMgcmVhZHlcbiAqIEB0eXBlIHtQcm9taXNlfVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93L2xvYWRfZXZlbnRcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L3JlYWR5U3RhdGVcbiAqL1xuY29uc3Qgd2luZG93UmVhZHkgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cdGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuXG5cdGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcblx0XHRyZXNvbHZlKCk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHJlc29sdmUpO1xuXHR9XG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBCYXNlV2l0aE9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZXdpdGhvcHRpb25zLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBTdGFjayB9IGZyb20gXCIuLi90eXBlcy9zdGFjay5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgRm9jdXNNYW5hZ2VyIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEtFWV9ET0NVTUVOVCA9IFwiZG9jdW1lbnRcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgS0VZX0NPTlRFWFQgPSBcImNvbnRleHRcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3Qgc3RhY2tTeW1ib2wgPSBTeW1ib2woXCJzdGFja1wiKTtcblxuLyoqXG4gKiBXaXRoIHRoZSBmb2N1cyBtYW5hZ2VyIHRoZSBmb2N1cyBjYW4gYmUgc3RvcmVkIGluIGEgZG9jdW1lbnQsIHJlY2FsbGVkIGFuZCBtb3ZlZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgbG9jYWxlXG4gKiBAc3VtbWFyeSBIYW5kbGUgdGhlIGZvY3VzXG4gKi9cbmNsYXNzIEZvY3VzTWFuYWdlciBleHRlbmRzIEJhc2VXaXRoT3B0aW9ucyB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdHx1bmRlZmluZWR9IG9wdGlvbnNcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRzdXBlcihvcHRpb25zKTtcblx0XHR2YWxpZGF0ZUluc3RhbmNlKHRoaXMuZ2V0T3B0aW9uKEtFWV9ET0NVTUVOVCksIEhUTUxEb2N1bWVudCk7XG5cblx0XHR0aGlzW3N0YWNrU3ltYm9sXSA9IG5ldyBTdGFjaygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vZm9jdXNtYW5hZ2VyXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7SFRNTERvY3VtZW50fSBkb2N1bWVudCB0aGUgZG9jdW1lbnQgb2JqZWN0IGludG8gd2hpY2ggdGhlIG5vZGUgaXMgdG8gYmUgYXBwZW5kZWRcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0W0tFWV9ET0NVTUVOVF06IGdldEdsb2JhbE9iamVjdChcImRvY3VtZW50XCIpLFxuXHRcdFx0W0tFWV9DT05URVhUXTogdW5kZWZpbmVkLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbWVtYmVycyB0aGUgY3VycmVudCBmb2N1cyBvbiBhIHN0YWNrLlxuXHQgKiBTZXZlcmFsIGZvY3VzIGNhbiBiZSBzdG9yZWQuXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlcn1cblx0ICovXG5cdHN0b3JlRm9jdXMoKSB7XG5cdFx0Y29uc3QgYWN0aXZlID0gdGhpcy5nZXRBY3RpdmUoKTtcblx0XHRpZiAoYWN0aXZlIGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0dGhpc1tzdGFja1N5bWJvbF0ucHVzaChhY3RpdmUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbGFzdCBmb2N1cyBvbiB0aGUgc3RhY2sgaXMgc2V0IGFnYWluXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlcn1cblx0ICovXG5cdHJlc3RvcmVGb2N1cygpIHtcblx0XHRjb25zdCBsYXN0ID0gdGhpc1tzdGFja1N5bWJvbF0ucG9wKCk7XG5cdFx0aWYgKGxhc3QgaW5zdGFuY2VvZiBOb2RlKSB7XG5cdFx0XHR0aGlzLmZvY3VzKGxhc3QpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IHByZXZlbnRTY3JvbGxcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2Zcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uRm9jdXNNYW5hZ2VyfVxuXHQgKi9cblx0Zm9jdXMoZWxlbWVudCwgcHJldmVudFNjcm9sbCkge1xuXHRcdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgTm9kZSk7XG5cblx0XHRlbGVtZW50LmZvY3VzKHtcblx0XHRcdHByZXZlbnRTY3JvbGw6IHByZXZlbnRTY3JvbGwgPz8gZmFsc2UsXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtFbGVtZW50fVxuXHQgKi9cblx0Z2V0QWN0aXZlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihLRVlfRE9DVU1FTlQpLmFjdGl2ZUVsZW1lbnQ7XG5cdH1cblxuXHQvKipcblx0ICogU2VsZWN0IGFsbCBlbGVtZW50cyB0aGF0IGNhbiBiZSBmb2N1c2VkXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gcXVlcnlcblx0ICogQHJldHVybiB7YXJyYXl9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG5cdCAqL1xuXHRnZXRGb2N1c2FibGUocXVlcnkpIHtcblx0XHRsZXQgY29udGV4dEVsZW1lbnQgPSB0aGlzLmdldE9wdGlvbihLRVlfQ09OVEVYVCk7XG5cdFx0aWYgKGNvbnRleHRFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnRleHRFbGVtZW50ID0gdGhpcy5nZXRPcHRpb24oS0VZX0RPQ1VNRU5UKTtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZUluc3RhbmNlKGNvbnRleHRFbGVtZW50LCBOb2RlKTtcblxuXHRcdGlmIChxdWVyeSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyhxdWVyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtcblx0XHRcdC4uLmNvbnRleHRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0XHRcdCdkZXRhaWxzLCBidXR0b24sIGlucHV0LCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSksIHNlbGVjdCwgdGV4dGFyZWEsIGFbaHJlZl0sIGJvZHknLFxuXHRcdFx0KSxcblx0XHRdLmZpbHRlcigoZWxlbWVudCkgPT4ge1xuXHRcdFx0aWYgKHF1ZXJ5ICE9PSB1bmRlZmluZWQgJiYgIWVsZW1lbnQubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0aWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIikgPT09IFwidHJ1ZVwiKSByZXR1cm4gZmFsc2U7XG5cblx0XHRcdGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdFx0aWYgKHJlY3Qud2lkdGggPT09IDApIHJldHVybiBmYWxzZTtcblx0XHRcdGlmIChyZWN0LmhlaWdodCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnlcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uRm9jdXNNYW5hZ2VyfVxuXHQgKi9cblx0Zm9jdXNOZXh0KHF1ZXJ5KSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHRoaXMuZ2V0QWN0aXZlKCk7XG5cdFx0Y29uc3QgZm9jdXNhYmxlID0gdGhpcy5nZXRGb2N1c2FibGUocXVlcnkpO1xuXG5cdFx0aWYgKCFpc0FycmF5KGZvY3VzYWJsZSkgfHwgZm9jdXNhYmxlLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKGN1cnJlbnQgaW5zdGFuY2VvZiBOb2RlKSB7XG5cdFx0XHRjb25zdCBpbmRleCA9IGZvY3VzYWJsZS5pbmRleE9mKGN1cnJlbnQpO1xuXG5cdFx0XHRpZiAoaW5kZXggPiAtMSkge1xuXHRcdFx0XHR0aGlzLmZvY3VzKGZvY3VzYWJsZVtpbmRleCArIDFdIHx8IGZvY3VzYWJsZVswXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmZvY3VzKGZvY3VzYWJsZVswXSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9jdXMoZm9jdXNhYmxlWzBdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnlcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uRm9jdXNNYW5hZ2VyfVxuXHQgKi9cblx0Zm9jdXNQcmV2KHF1ZXJ5KSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHRoaXMuZ2V0QWN0aXZlKCk7XG5cdFx0Y29uc3QgZm9jdXNhYmxlID0gdGhpcy5nZXRGb2N1c2FibGUocXVlcnkpO1xuXG5cdFx0aWYgKCFpc0FycmF5KGZvY3VzYWJsZSkgfHwgZm9jdXNhYmxlLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKGN1cnJlbnQgaW5zdGFuY2VvZiBOb2RlKSB7XG5cdFx0XHRjb25zdCBpbmRleCA9IGZvY3VzYWJsZS5pbmRleE9mKGN1cnJlbnQpO1xuXG5cdFx0XHRpZiAoaW5kZXggPiAtMSkge1xuXHRcdFx0XHR0aGlzLmZvY3VzKGZvY3VzYWJsZVtpbmRleCAtIDFdIHx8IGZvY3VzYWJsZVtmb2N1c2FibGUubGVuZ3RoIC0gMV0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5mb2N1cyhmb2N1c2FibGVbZm9jdXNhYmxlLmxlbmd0aCAtIDFdKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mb2N1cyhmb2N1c2FibGVbZm9jdXNhYmxlLmxlbmd0aCAtIDFdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgcGFyc2VEYXRhVVJMIH0gZnJvbSBcIi4vZGF0YXVybC5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tIFwiLi9pcy5tanNcIjtcblxuZXhwb3J0IHsgZXF1aXBXaXRoSW50ZXJuYWwgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgcHJvcGVydHlOYW1lID0gXCJpbnRlcm5hbERlZmF1bHRzXCI7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBleHRlbmRzIHRoZSBnaXZlbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIG1ldGhvZHM6XG4gKlxuICogLSBhdHRhY2hJbnRlcm5hbE9ic2VydmVyXG4gKiAtIGRldGFjaEludGVybmFsT2JzZXJ2ZXJcbiAqIC0gY29udGFpbnNJbnRlcm5hbE9ic2VydmVyXG4gKiAtIHNldEludGVybmFsXG4gKiAtIHNldEludGVybmFsc1xuICogLSBnZXRJbnRlcm5hbFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuMTUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gZXF1aXBXaXRoSW50ZXJuYWwoKSB7XG5cdHZhbGlkYXRlT2JqZWN0KHRoaXMpO1xuXG5cdGlmICghaGFzR2V0dGVyKHRoaXMsIHByb3BlcnR5TmFtZSkpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlOYW1lLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdGNvbnN0IGRlZmF1bHRzID0gZXh0ZW5kKHt9LCB0aGlzW3Byb3BlcnR5TmFtZV0gfHwge30pO1xuXHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IG5ldyBQcm94eU9ic2VydmVyKGRlZmF1bHRzKTtcblxuXHQvKipcblx0ICogQXR0YWNoIGEgbmV3IG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHR0aGlzW1wiYXR0YWNoSW50ZXJuYWxPYnNlcnZlclwiXSA9IChvYnNlcnZlcikgPT4ge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmF0dGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogRGV0YWNoIGEgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdHRoaXNbXCJkZXRhY2hJbnRlcm5hbE9ic2VydmVyXCJdID0gKG9ic2VydmVyKSA9PiB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBhIG9ic2VydmVyIGlzIGF0dGFjaGVkXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHR0aGlzW1wiY29udGFpbnNJbnRlcm5hbE9ic2VydmVyXCJdID0gKG9ic2VydmVyKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBTZXQgYW4gaW50ZXJuYWwgdmFsdWUsIG5lc3RlZCBpbnRlcm5hbHMgY2FuIGJlIHNwZWNpZmllZCBieSBwYXRoIGBhLmIuY2Bcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKi9cblx0dGhpc1tcInNldEludGVybmFsXCJdID0gKHBhdGgsIHZhbHVlKSA9PiB7XG5cdFx0bmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpKS5zZXRWaWEocGF0aCwgdmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBzZXQgbXVsdGlwbGUgaW50ZXJuYWxzIGF0IG9uY2Vcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge0RhdGFzb3VyY2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uXG5cdCAqL1xuXHR0aGlzW1wic2V0SW50ZXJuYWxzXCJdID0gKG9wdGlvbnMpID0+IHtcblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSBwYXJzZU9wdGlvbnNKU09OKG9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdGV4dGVuZCh0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCksIGRlZmF1bHRzLCBvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogbmVzdGVkIGludGVybmFscyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHBhdGggYGEuYi5jYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuXHQgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZVxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0dGhpc1tcImdldEludGVybmFsXCJdID0gKHBhdGgsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuXHRcdGxldCB2YWx1ZTtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YWx1ZSA9IG5ldyBQYXRoZmluZGVyKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KCkpLmdldFZpYShcblx0XHRcdFx0cGF0aCxcblx0XHRcdCk7XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG9ialxuICogQHBhcmFtIHByb3BcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc0dldHRlcihvYmosIHByb3ApIHtcblx0d2hpbGUgKGlzT2JqZWN0KG9iaikpIHtcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3ApPy5bXCJnZXRcIl0pIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRvYmogPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gcGFyc2VPcHRpb25zSlNPTihkYXRhKSB7XG5cdGxldCBvYmogPSB7fTtcblxuXHRpZiAoIWlzU3RyaW5nKGRhdGEpKSB7XG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdC8vIHRoZSBjb25maWd1cmF0aW9uIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBkYXRhIHVybC5cblx0dHJ5IHtcblx0XHRjb25zdCBkYXRhVXJsID0gcGFyc2VEYXRhVVJMKGRhdGEpO1xuXHRcdGRhdGEgPSBkYXRhVXJsLmNvbnRlbnQ7XG5cdH0gY2F0Y2ggKGUpIHt9XG5cblx0dHJ5IHtcblx0XHRvYmogPSBKU09OLnBhcnNlKGRhdGEpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0dGhyb3cgZTtcblx0fVxuXG5cdHJldHVybiB2YWxpZGF0ZU9iamVjdChvYmopO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3RhdGVTeW1ib2wsIGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IEJhc2VXaXRoT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgSUQgfSBmcm9tIFwiLi4vdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0NMQVNTLFxuXHRBVFRSSUJVVEVfSUQsXG5cdEFUVFJJQlVURV9USVRMRSxcbn0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBSZXNvdXJjZSwgS0VZX0RPQ1VNRU5ULCBLRVlfUVVFUlksIHJlZmVyZW5jZVN5bWJvbCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBLRVlfRE9DVU1FTlQgPSBcImRvY3VtZW50XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEtFWV9RVUVSWSA9IFwicXVlcnlcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgS0VZX1RJTUVPVVQgPSBcInRpbWVvdXRcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVmZXJlbmNlU3ltYm9sID0gU3ltYm9sKFwicmVmZXJlbmNlXCIpO1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGFsbCByZXNvdXJjZXMgdG8gYmUgbG9hZGVkLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgUmVzb3VyY2UgY2xhc3NcbiAqL1xuY2xhc3MgUmVzb3VyY2UgZXh0ZW5kcyBCYXNlV2l0aE9wdGlvbnMge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R8dW5kZWZpbmVkfSBvcHRpb25zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cblx0XHRsZXQgdXJpID0gdGhpcy5nZXRPcHRpb24odGhpcy5jb25zdHJ1Y3Rvci5nZXRVUkxBdHRyaWJ1dGUoKSk7XG5cblx0XHRpZiAodXJpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcgc291cmNlXCIpO1xuXHRcdH0gZWxzZSBpZiAodXJpIGluc3RhbmNlb2YgVVJMKSB7XG5cdFx0XHR1cmkgPSB1cmkudG9TdHJpbmcoKTtcblx0XHR9IGVsc2UgaWYgKCFpc1N0cmluZyh1cmkpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCB1cmwgdHlwZVwiKTtcblx0XHR9XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVt0aGlzLmNvbnN0cnVjdG9yLmdldFVSTEF0dHJpYnV0ZSgpXSA9IHVyaTtcblx0XHR0aGlzW2ludGVybmFsU3RhdGVTeW1ib2xdID0gbmV3IFByb3h5T2JzZXJ2ZXIoe1xuXHRcdFx0bG9hZGVkOiBmYWxzZSxcblx0XHRcdGVycm9yOiB1bmRlZmluZWQsXG5cdFx0fSk7XG5cblx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0gPSB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzQ29ubmVjdGVkKCkge1xuXHRcdGlmICh0aGlzW3JlZmVyZW5jZVN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIHRoaXNbcmVmZXJlbmNlU3ltYm9sXS5pc0Nvbm5lY3RlZDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgb3ZlcnJpZGRlbiBieSB0aGUgc3BlY2lhbCBjbGFzc2VzIGFuZCBjcmVhdGVzIHRoZSBET00gb2JqZWN0LlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBhbHNvIGNhbGxlZCBpbXBsaWNpdGx5LCBpZiBub3QgeWV0IGRvbmUgZXhwbGljaXRseSwgYnkgY2FsbGluZyBgY29ubmVjdCgpYC5cblx0ICpcblx0ICogQHRocm93cyB7RXJyb3J9IHRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlfVxuXHQgKi9cblx0Y3JlYXRlKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgdGhlIEhUTUxFbGVtZW50IHRvIHRoZSBzcGVjaWZpZWQgZG9jdW1lbnQuXG5cdCAqIElmIHRoZSBlbGVtZW50IGhhcyBub3QgeWV0IGJlZW4gY3JlYXRlZCwgYGNyZWF0ZSgpYCBpcyBjYWxsZWQgaW1wbGljaXRseS5cblx0ICpcblx0ICogdGhyb3dzIHtFcnJvcn0gdGFyZ2V0IG5vdCBmb3VuZFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZX1cblx0ICovXG5cdGNvbm5lY3QoKSB7XG5cdFx0aWYgKCEodGhpc1tyZWZlcmVuY2VTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHR0aGlzLmNyZWF0ZSgpO1xuXHRcdH1cblxuXHRcdGFwcGVuZFRvRG9jdW1lbnQuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge0RvY3VtZW50fSBkb2N1bWVudCB0aGUgZG9jdW1lbnQgb2JqZWN0IGludG8gd2hpY2ggdGhlIG5vZGUgaXMgdG8gYmUgYXBwZW5kZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHNyYy9ocmVmIHVybCB0byB0aGUgY29ycmVzcG9uZGluZyByZXNvdXJjZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcXVlcnkgZGVmaW5lcyB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIHJlc291cmNlIGlzIHRvIGJlIGhvb2tlZCBpbnRvIHRoZSBkb20uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCBlbGVtZW50IGF0dHJpYnV0ZSBpZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGl0bGUgZWxlbWVudCBhdHRyaWJ1dGUgdGl0bGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzIGVsZW1lbnQgYXR0cmlidXRlIGNsYXNzXG5cdCAqIEBwcm9wZXJ0eSB7aW50fSB0aW1lb3V0IHRpbWVvdXRcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0W3RoaXMuY29uc3RydWN0b3IuZ2V0VVJMQXR0cmlidXRlKCldOiB1bmRlZmluZWQsXG5cdFx0XHRbS0VZX0RPQ1VNRU5UXTogZ2V0R2xvYmFsT2JqZWN0KFwiZG9jdW1lbnRcIiksXG5cdFx0XHRbS0VZX1FVRVJZXTogXCJoZWFkXCIsXG5cdFx0XHRbS0VZX1RJTUVPVVRdOiAxMDAwMCxcblx0XHRcdFtBVFRSSUJVVEVfSURdOiBuZXcgSUQoXCJyZXNvdXJjZVwiKS50b1N0cmluZygpLFxuXHRcdFx0W0FUVFJJQlVURV9DTEFTU106IHVuZGVmaW5lZCxcblx0XHRcdFtBVFRSSUJVVEVfVElUTEVdOiB1bmRlZmluZWQsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogV2l0aCBgYXZhaWxhYmxlKClgIHlvdSBjYW4gY2hlY2sgaWYgYSByZXNvdXJjZSBpcyBhdmFpbGFibGUuXG5cdCAqIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiB0aGUgdGFnIGlzIGluY2x1ZGVkIGFuZCB0aGUgcmVzb3VyY2UgaXMgbG9hZGVkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0YXZhaWxhYmxlKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdGlmICghKHNlbGZbcmVmZXJlbmNlU3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwibm8gZWxlbWVudFwiKTtcblx0XHR9XG5cblx0XHRpZiAoIXNlbGYuaXNDb25uZWN0ZWQoKSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiZWxlbWVudCBub3QgY29ubmVjdGVkXCIpO1xuXHRcdH1cblxuXHRcdGlmIChzZWxmW2ludGVybmFsU3RhdGVTeW1ib2xdLmdldFN1YmplY3QoKVtcImxvYWRlZFwiXSA9PT0gdHJ1ZSkge1xuXHRcdFx0aWYgKHNlbGZbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uZ2V0U3ViamVjdCgpW1wiZXJyb3JcIl0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3Qoc2VsZltpbnRlcm5hbFN0YXRlU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJlcnJvclwiXSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0Y29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRyZWplY3QoXCJ0aW1lb3V0XCIpO1xuXHRcdFx0fSwgc2VsZi5nZXRPcHRpb24oXCJ0aW1lb3V0XCIpKTtcblxuXHRcdFx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdHNlbGZbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0c2VsZltpbnRlcm5hbFN0YXRlU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFVSTEF0dHJpYnV0ZSgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlc1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9yZXNvdXJjZVwiKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogdGhyb3dzIHtFcnJvcn0gdGFyZ2V0IG5vdCBmb3VuZFxuICovXG5mdW5jdGlvbiBhcHBlbmRUb0RvY3VtZW50KCkge1xuXHRjb25zdCB0YXJnZXROb2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmdldE9wdGlvbihLRVlfUVVFUlksIFwiaGVhZFwiKSk7XG5cdGlmICghKHRhcmdldE5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0YXJnZXQgbm90IGZvdW5kXCIpO1xuXHR9XG5cblx0YWRkRXZlbnRzLmNhbGwodGhpcyk7XG5cdHRhcmdldE5vZGUuYXBwZW5kQ2hpbGQodGhpc1tyZWZlcmVuY2VTeW1ib2xdKTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7YWRkRXZlbnRzfVxuICovXG5mdW5jdGlvbiBhZGRFdmVudHMoKSB7XG5cdGNvbnN0IG9uRXJyb3IgPSAoKSA9PiB7XG5cdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvbkVycm9yKTtcblx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgb25Mb2FkKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uc2V0U3ViamVjdCh7XG5cdFx0XHRsb2FkZWQ6IHRydWUsXG5cdFx0XHRlcnJvcjogYCR7XG5cdFx0XHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXVt0aGlzLmNvbnN0cnVjdG9yLmdldFVSTEF0dHJpYnV0ZSgpXVxuXHRcdFx0fSBpcyBub3QgYXZhaWxhYmxlYCxcblx0XHR9KTtcblxuXHRcdHJldHVybjtcblx0fTtcblxuXHRjb25zdCBvbkxvYWQgPSAoKSA9PiB7XG5cdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvbkVycm9yKTtcblx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgb25Mb2FkKTtcblx0XHR0aGlzW2ludGVybmFsU3RhdGVTeW1ib2xdLmdldFN1YmplY3QoKVtcImxvYWRlZFwiXSA9IHRydWU7XG5cdH07XG5cblx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIG9uTG9hZCwgZmFsc2UpO1xuXHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG9uRXJyb3IsIGZhbHNlKTtcblxuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN0YXRlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfQ0xBU1MsXG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9JRCxcblx0QVRUUklCVVRFX1NSQyxcblx0QVRUUklCVVRFX1RJVExFLFxuXHRBVFRSSUJVVEVfVFlQRSxcblx0VEFHX1NDUklQVCxcbn0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdEtFWV9ET0NVTUVOVCxcblx0S0VZX1FVRVJZLFxuXHRyZWZlcmVuY2VTeW1ib2wsXG5cdFJlc291cmNlLFxufSBmcm9tIFwiLi4vcmVzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IERhdGEgfTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gZW1iZWQgZGF0YS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIERhdGEgUmVzb3VyY2UgY2xhc3NcbiAqL1xuY2xhc3MgRGF0YSBleHRlbmRzIFJlc291cmNlIHtcblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtb2RlPWNvcnMgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL2ZldGNoXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjcmVkZW50aWFscz1zYW1lLW9yaWdpbiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvZmV0Y2hcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGU9YXBwbGljYXRpb24vanNvbiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLXR5cGV9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdG1vZGU6IFwiY29yc1wiLFxuXHRcdFx0Y3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdHR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlLkRhdGF9XG5cdCAqL1xuXHRjcmVhdGUoKSB7XG5cdFx0Y3JlYXRlRWxlbWVudC5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgdGhlIEhUTUxFbGVtZW50IHRvIHRoZSBzcGVjaWZpZWQgZG9jdW1lbnRcblx0ICpcblx0ICogdGhyb3dzIHtFcnJvcn0gdGFyZ2V0IG5vdCBmb3VuZFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZX1cblx0ICovXG5cdGNvbm5lY3QoKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0aWYgKCEodGhpc1tyZWZlcmVuY2VTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHR0aGlzLmNyZWF0ZSgpO1xuXHRcdH1cblxuXHRcdGFwcGVuZFRvRG9jdW1lbnQuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3Jlc291cmNlL2RhdGFcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFVSTEF0dHJpYnV0ZSgpIHtcblx0XHRyZXR1cm4gQVRUUklCVVRFX1NSQztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZS5EYXRhfVxuICovXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KCkge1xuXHRjb25zdCBkb2N1bWVudCA9IHRoaXMuZ2V0T3B0aW9uKEtFWV9ET0NVTUVOVCk7XG5cdHRoaXNbcmVmZXJlbmNlU3ltYm9sXSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoVEFHX1NDUklQVCk7XG5cblx0Zm9yIChjb25zdCBrZXkgb2YgW1xuXHRcdEFUVFJJQlVURV9UWVBFLFxuXHRcdEFUVFJJQlVURV9JRCxcblx0XHRBVFRSSUJVVEVfQ0xBU1MsXG5cdFx0QVRUUklCVVRFX1RJVExFLFxuXHRdKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKGtleSkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdW2tleV0gPSB0aGlzLmdldE9wdGlvbihrZXkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogdGhyb3dzIHtFcnJvcn0gdGFyZ2V0IG5vdCBmb3VuZFxuICovXG5mdW5jdGlvbiBhcHBlbmRUb0RvY3VtZW50KCkge1xuXHRjb25zdCB0YXJnZXROb2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmdldE9wdGlvbihLRVlfUVVFUlksIFwiaGVhZFwiKSk7XG5cdGlmICghKHRhcmdldE5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0YXJnZXQgbm90IGZvdW5kXCIpO1xuXHR9XG5cblx0dGFyZ2V0Tm9kZS5hcHBlbmRDaGlsZCh0aGlzW3JlZmVyZW5jZVN5bWJvbF0pO1xuXG5cdGdldEdsb2JhbEZ1bmN0aW9uKFwiZmV0Y2hcIikodGhpcy5nZXRPcHRpb24oQVRUUklCVVRFX1NSQyksIHtcblx0XHRtZXRob2Q6IFwiR0VUXCIsIC8vICpHRVQsIFBPU1QsIFBVVCwgREVMRVRFLCBldGMuXG5cdFx0bW9kZTogdGhpcy5nZXRPcHRpb24oXCJtb2RlXCIsIFwiY29yc1wiKSwgLy8gbm8tY29ycywgKmNvcnMsIHNhbWUtb3JpZ2luXG5cdFx0Y2FjaGU6IFwibm8tY2FjaGVcIiwgLy8gKmRlZmF1bHQsIG5vLWNhY2hlLCByZWxvYWQsIGZvcmNlLWNhY2hlLCBvbmx5LWlmLWNhY2hlZFxuXHRcdGNyZWRlbnRpYWxzOiB0aGlzLmdldE9wdGlvbihcImNyZWRlbnRpYWxzXCIsIFwic2FtZS1vcmlnaW5cIiksIC8vIGluY2x1ZGUsICpzYW1lLW9yaWdpbiwgb21pdFxuXHRcdGhlYWRlcnM6IHtcblx0XHRcdEFjY2VwdDogdGhpcy5nZXRPcHRpb24oXCJ0eXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKSxcblx0XHR9LFxuXHRcdHJlZGlyZWN0OiBcImZvbGxvd1wiLCAvLyBtYW51YWwsICpmb2xsb3csIGVycm9yXG5cdFx0cmVmZXJyZXJQb2xpY3k6IFwibm8tcmVmZXJyZXJcIiwgLy8gbm8tcmVmZXJyZXIsXG5cdH0pXG5cdFx0LnRoZW4oKHJlc3BvbnNlKSA9PiB7XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2UudGV4dCgpO1xuXHRcdH0pXG5cdFx0LnRoZW4oKHRleHQpID0+IHtcblx0XHRcdGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG5cdFx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0uYXBwZW5kQ2hpbGQodGV4dE5vZGUpO1xuXG5cdFx0XHR0aGlzW2ludGVybmFsU3RhdGVTeW1ib2xdLmdldFN1YmplY3QoKVtcImxvYWRlZFwiXSA9IHRydWU7XG5cdFx0fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdHRoaXNbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uc2V0U3ViamVjdCh7XG5cdFx0XHRcdGxvYWRlZDogdHJ1ZSxcblx0XHRcdFx0ZXJyb3I6IGUudG9TdHJpbmcoKSxcblx0XHRcdH0pO1xuXG5cdFx0XHR0YXJnZXROb2RlLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdH0pO1xuXG5cdHJldHVybiB0aGlzO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9DTEFTUyxcblx0QVRUUklCVVRFX0hSRUYsXG5cdEFUVFJJQlVURV9JRCxcblx0QVRUUklCVVRFX05PTkNFLFxuXHRBVFRSSUJVVEVfU1JDLFxuXHRBVFRSSUJVVEVfVElUTEUsXG5cdEFUVFJJQlVURV9UWVBFLFxuXHRUQUdfTElOSyxcbn0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEtFWV9ET0NVTUVOVCwgcmVmZXJlbmNlU3ltYm9sLCBSZXNvdXJjZSB9IGZyb20gXCIuLi9yZXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IExpbmsgfTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gZW1iZWQgZXh0ZXJuYWwgcmVzb3VyY2VzLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgUmVzb3VyY2UgY2xhc3NcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmtcbiAqL1xuY2xhc3MgTGluayBleHRlbmRzIFJlc291cmNlIHtcblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcyB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1hc31cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNyb3NzT3JpZ2luPWFub255bW91cyB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLWNyb3Nzb3JpZ2lufVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGRpc2FibGVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBocmVmIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLWhyZWZ9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBocmVmbGFuZyB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1ocmVmbGFuZ31cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGltYWdlc2l6ZXMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItaW1hZ2VzaXplc31cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGltYWdlc3Jjc2V0IHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLWltYWdlc3Jjc2V0fVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaW50ZWdyaXR5IHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLWludGVncml0eX1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG1lZGlhIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLW1lZGlhfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcHJlZmV0Y2gge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItcHJlZmV0Y2h9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWZlcnJlcnBvbGljeSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1yZWZlcnJlcnBvbGljeX1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlbCB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1yZWx9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLXR5cGV9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzaXplcyB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1zaXplc31cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG5vbmNlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItbm9uY2V9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdGFzOiB1bmRlZmluZWQsXG5cdFx0XHRjcm9zc09yaWdpbjogXCJhbm9ueW1vdXNcIixcblx0XHRcdGRpc2FibGVkOiB1bmRlZmluZWQsXG5cdFx0XHRocmVmOiB1bmRlZmluZWQsXG5cdFx0XHRocmVmbGFuZzogdW5kZWZpbmVkLFxuXHRcdFx0aW1hZ2VzaXplczogdW5kZWZpbmVkLFxuXHRcdFx0aW1hZ2VzcmNzZXQ6IHVuZGVmaW5lZCxcblx0XHRcdGludGVncml0eTogdW5kZWZpbmVkLFxuXHRcdFx0bWVkaWE6IHVuZGVmaW5lZCxcblx0XHRcdHByZWZldGNoOiB1bmRlZmluZWQsXG5cdFx0XHRyZWZlcnJlcnBvbGljeTogdW5kZWZpbmVkLFxuXHRcdFx0cmVsOiB1bmRlZmluZWQsXG5cdFx0XHRzaXplczogdW5kZWZpbmVkLFxuXHRcdFx0dHlwZTogdW5kZWZpbmVkLFxuXHRcdFx0bm9uY2U6IHVuZGVmaW5lZCxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3Jlc291cmNlL2xpbmtcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2UuTGlua31cblx0ICovXG5cdGNyZWF0ZSgpIHtcblx0XHRjcmVhdGVFbGVtZW50LmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFVSTEF0dHJpYnV0ZSgpIHtcblx0XHRyZXR1cm4gQVRUUklCVVRFX0hSRUY7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2UuTGlua31cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSB0aGlzLmdldE9wdGlvbihLRVlfRE9DVU1FTlQpO1xuXHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFRBR19MSU5LKTtcblxuXHRmb3IgKGNvbnN0IGtleSBvZiBbXG5cdFx0XCJhc1wiLFxuXHRcdFwiY3Jvc3NPcmlnaW5cIixcblx0XHRcImRpc2FibGVkXCIsXG5cdFx0XCJocmVmXCIsXG5cdFx0XCJocmVmbGFuZ1wiLFxuXHRcdFwiaW1hZ2VzaXplc1wiLFxuXHRcdFwiaW1hZ2VzcmNzZXRcIixcblx0XHRcImludGVncml0eVwiLFxuXHRcdFwibWVkaWFcIixcblx0XHRcInByZWZldGNoXCIsXG5cdFx0XCJyZWZlcnJlcnBvbGljeVwiLFxuXHRcdFwic2l6ZXNcIixcblx0XHRcInJlbFwiLFxuXHRcdFwidHlwZVwiLFxuXHRcdEFUVFJJQlVURV9IUkVGLFxuXHRcdEFUVFJJQlVURV9JRCxcblx0XHRBVFRSSUJVVEVfQ0xBU1MsXG5cdFx0QVRUUklCVVRFX1RJVExFLFxuXHRcdEFUVFJJQlVURV9OT05DRSxcblx0XSkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihrZXkpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXVtrZXldID0gdGhpcy5nZXRPcHRpb24oa2V5KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSBcIi4uL2xpbmsubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBTdHlsZXNoZWV0IH07XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB1c2VkIGJ5IHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIGVtYmVkIGV4dGVybmFsIHJlc291cmNlcy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIFJlc291cmNlIGNsYXNzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rXG4gKi9cbmNsYXNzIFN0eWxlc2hlZXQgZXh0ZW5kcyBMaW5rIHtcblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWwge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItcmVsfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRyZWw6IFwic3R5bGVzaGVldFwiLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vcmVzb3VyY2UvbGluay9zdHlsZXNoZWV0XCIpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uLy4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0NMQVNTLFxuXHRBVFRSSUJVVEVfSUQsXG5cdEFUVFJJQlVURV9OT05DRSxcblx0QVRUUklCVVRFX1NSQyxcblx0QVRUUklCVVRFX1RJVExFLFxuXHRBVFRSSUJVVEVfVFlQRSxcblx0VEFHX1NDUklQVCxcbn0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEtFWV9ET0NVTUVOVCwgcmVmZXJlbmNlU3ltYm9sLCBSZXNvdXJjZSB9IGZyb20gXCIuLi9yZXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IFNjcmlwdCB9O1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCBieSB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBlbWJlZCBzY3JpcHRzLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgUmVzb3VyY2UgY2xhc3NcbiAqL1xuY2xhc3MgU2NyaXB0IGV4dGVuZHMgUmVzb3VyY2Uge1xuXHQvKipcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBhc3luYz10cnVlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItYXN5bmN9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjcm9zc09yaWdpbj1hbm9ueW1vdXMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1jcm9zc29yaWdpbn1cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBkZWZlcj1mYWxzZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLWRlZmVyfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaW50ZWdyaXR5IHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItaW50ZWdyaXR5fVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IG5vbW9kdWxlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItbm9tb2R1bGV9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBub25jZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLW5vbmNlfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVmZXJyZXJwb2xpY3kge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1yZWZlcnJlcnBvbGljeX1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci10eXBlfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdGNyb3NzT3JpZ2luOiBcImFub255bW91c1wiLFxuXHRcdFx0ZGVmZXI6IGZhbHNlLFxuXHRcdFx0aW50ZWdyaXR5OiB1bmRlZmluZWQsXG5cdFx0XHRub21vZHVsZTogZmFsc2UsXG5cdFx0XHRub25jZTogdW5kZWZpbmVkLFxuXHRcdFx0cmVmZXJyZXJwb2xpY3k6IHVuZGVmaW5lZCxcblx0XHRcdHR5cGU6IFwidGV4dC9qYXZhc2NyaXB0XCIsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9yZXNvdXJjZS9zY3JpcHRcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2UuU2NyaXB0fVxuXHQgKi9cblx0Y3JlYXRlKCkge1xuXHRcdGNyZWF0ZUVsZW1lbnQuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VVJMQXR0cmlidXRlKCkge1xuXHRcdHJldHVybiBBVFRSSUJVVEVfU1JDO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlLlNjcmlwdH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSB0aGlzLmdldE9wdGlvbihLRVlfRE9DVU1FTlQpO1xuXHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFRBR19TQ1JJUFQpO1xuXG5cdGZvciAoY29uc3Qga2V5IG9mIFtcblx0XHRcImNyb3NzT3JpZ2luXCIsXG5cdFx0XCJkZWZlclwiLFxuXHRcdFwiYXN5bmNcIixcblx0XHRcImludGVncml0eVwiLFxuXHRcdFwibm9tb2R1bGVcIixcblx0XHRBVFRSSUJVVEVfTk9OQ0UsXG5cdFx0XCJyZWZlcnJlcnBvbGljeVwiLFxuXHRcdEFUVFJJQlVURV9UWVBFLFxuXHRcdEFUVFJJQlVURV9TUkMsXG5cdFx0QVRUUklCVVRFX0lELFxuXHRcdEFUVFJJQlVURV9DTEFTUyxcblx0XHRBVFRSSUJVVEVfVElUTEUsXG5cdF0pIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oa2V5KSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF1ba2V5XSA9IHRoaXMuZ2V0T3B0aW9uKGtleSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGVxdWlwV2l0aEludGVybmFsIH0gZnJvbSBcIi4uL3R5cGVzL2ludGVybmFsLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9IUkVGLCBBVFRSSUJVVEVfU1JDIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgUmVzb3VyY2UgfSBmcm9tIFwiLi9yZXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IERhdGEgfSBmcm9tIFwiLi9yZXNvdXJjZS9kYXRhLm1qc1wiO1xuaW1wb3J0IHsgU3R5bGVzaGVldCB9IGZyb20gXCIuL3Jlc291cmNlL2xpbmsvc3R5bGVzaGVldC5tanNcIjtcbmltcG9ydCB7IFNjcmlwdCB9IGZyb20gXCIuL3Jlc291cmNlL3NjcmlwdC5tanNcIjtcblxuZXhwb3J0IHsgUmVzb3VyY2VNYW5hZ2VyIH07XG5cbi8qKlxuICogVGhlIFJlc291cmNlTWFuYWdlciBpcyBhIHNpbmdsZXRvbiB0aGF0IG1hbmFnZXMgYWxsIHJlc291cmNlcy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIFJlc291cmNlIGNsYXNzXG4gKi9cbmNsYXNzIFJlc291cmNlTWFuYWdlciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICogdGhyb3cge0Vycm9yfSB1bnN1cHBvcnRlZCBkb2N1bWVudCB0eXBlXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cdFx0ZXF1aXBXaXRoSW50ZXJuYWwuY2FsbCh0aGlzKTtcblxuXHRcdGlmICghKHRoaXMuZ2V0T3B0aW9uKFwiZG9jdW1lbnRcIikgaW5zdGFuY2VvZiBEb2N1bWVudCkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGRvY3VtZW50IHR5cGVcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBkZXByZWNhdGVkIHNpbmNlIDMuMTUuMCB1c2UgZ2V0SW50ZXJuYWwgaW5zdGVhZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYmFzZXVybFxuXHQgKi9cblx0Z2V0T3B0aW9uKGtleSkge1xuXHRcdHJldHVybiB0aGlzLmdldEludGVybmFsKGtleSk7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGJhc2V1cmxcblx0ICovXG5cdGdldEJhc2VVUkwoKSB7XG5cdFx0dGhpcy5nZXRPcHRpb24oXCJkb2N1bWVudFwiKT8uYmFzZVVSTDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYmFzZXVybFxuXHQgKiBAZGVwcmVjYXRlZCBzaW5jZSAzLjE1LjAgdXNlIGludGVybmFsRGVmYXVsdHMgaW5zdGVhZFxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiB0aGlzLmludGVybmFsRGVmYXVsdHM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHByb3BlcnR5IHtIVE1MRG9jdW1lbnR9IGRvY3VtZW50PWRvY3VtZW50IERvY3VtZW50XG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSByZXNvdXJjZXNcblx0ICogQHByb3BlcnR5IHtBcnJheX0gcmVzb3VyY2VzLnNjcmlwdHM9W10gYXJyYXkgd2l0aCB7QGxpbmsgTW9uc3Rlci5ET00uUmVzb3VyY2UuU2NyaXB0fSBvYmplY3RzXG5cdCAqIEBwcm9wZXJ0eSB7QXJyYXl9IHJlc291cmNlcy5zdHlsZXNoZWV0cz1bXSBhcnJheSB3aXRoIHtAbGluayBNb25zdGVyLkRPTS5SZXNvdXJjZS5MaW5rLlN0eWxlc2hlZXR9IG9iamVjdHNcblx0ICogQHByb3BlcnR5IHtBcnJheX0gcmVzb3VyY2VzLmRhdGE9W10gYXJyYXkgd2l0aCB7QGxpbmsgTW9uc3Rlci5ET00uUmVzb3VyY2UuRGF0YX0gb2JqZWN0c1xuXHQgKi9cblx0Z2V0IGludGVybmFsRGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHtcblx0XHRcdFx0ZG9jdW1lbnQ6IGdldEdsb2JhbE9iamVjdChcImRvY3VtZW50XCIpLFxuXHRcdFx0XHRyZXNvdXJjZXM6IHtcblx0XHRcdFx0XHRzY3JpcHRzOiBbXSxcblx0XHRcdFx0XHRzdHlsZXNoZWV0czogW10sXG5cdFx0XHRcdFx0ZGF0YTogW10sXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQXBwZW5kIFRhZ3MgdG8gRE9NXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlcn1cblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIHJlc291cmNlIGRlZmluaXRpb25cblx0ICovXG5cdGNvbm5lY3QoKSB7XG5cdFx0cnVuUmVzb3VyY2VNZXRob2QuY2FsbCh0aGlzLCBcImNvbm5lY3RcIik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgYXZhaWxhYmxlXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCByZXNvdXJjZSBkZWZpbml0aW9uXG5cdCAqL1xuXHRhdmFpbGFibGUoKSB7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKHJ1blJlc291cmNlTWV0aG9kLmNhbGwodGhpcywgXCJhdmFpbGFibGVcIikpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIHNjcmlwdFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuXHQgKiBAcGFyYW0gW09iamVjdHx1bmRlZmluZWR9IG9wdGlvbnNcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2VNYW5hZ2VyfVxuXHQgKiBAc2VlIE1vbnN0ZXIuRE9NLlJlc291cmNlLlNjcmlwdFxuXHQgKi9cblx0YWRkU2NyaXB0KHVybCwgb3B0aW9ucykge1xuXHRcdHJldHVybiBhZGRSZXNvdXJjZS5jYWxsKHRoaXMsIFwic2NyaXB0c1wiLCB1cmwsIG9wdGlvbnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBTdHlsZXNoZWV0XG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG5cdCAqIEBwYXJhbSBbT2JqZWN0fHVuZGVmaW5lZH0gb3B0aW9uc1xuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXJ9XG5cdCAqIEBzZWUgTW9uc3Rlci5ET00uUmVzb3VyY2UuTGluay5TdHlsZXNoZWV0XG5cdCAqL1xuXHRhZGRTdHlsZXNoZWV0KHVybCwgb3B0aW9ucykge1xuXHRcdHJldHVybiBhZGRSZXNvdXJjZS5jYWxsKHRoaXMsIFwic3R5bGVzaGVldHNcIiwgdXJsLCBvcHRpb25zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgRGF0YSBUYWdcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcblx0ICogQHBhcmFtIFtPYmplY3R8dW5kZWZpbmVkfSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlcn1cblx0ICogQHNlZSBNb25zdGVyLkRPTS5SZXNvdXJjZS5EYXRhXG5cdCAqL1xuXHRhZGREYXRhKHVybCwgb3B0aW9ucykge1xuXHRcdHJldHVybiBhZGRSZXNvdXJjZS5jYWxsKHRoaXMsIFwiZGF0YVwiLCB1cmwsIG9wdGlvbnMpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5mdW5jdGlvbiBydW5SZXNvdXJjZU1ldGhvZChtZXRob2QpIHtcblx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0Zm9yIChjb25zdCB0eXBlIG9mIFtcInNjcmlwdHNcIiwgXCJzdHlsZXNoZWV0c1wiLCBcImRhdGFcIl0pIHtcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLmdldE9wdGlvbihgcmVzb3VyY2VzLiR7dHlwZX1gKTtcblx0XHRpZiAoIWlzQXJyYXkocmVzb3VyY2VzKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcblx0XHRcdGlmICghKHJlc291cmNlIGluc3RhbmNlb2YgUmVzb3VyY2UpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIHJlc291cmNlIGRlZmluaXRpb25cIik7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3VsdC5wdXNoKHJlc291cmNlW21ldGhvZF0oKSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gKiBAcGFyYW0gW09iamVjdHx1bmRlZmluZWR9IG9wdGlvbnNcbiAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlcn1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGFkZFJlc291cmNlKHR5cGUsIHVybCwgb3B0aW9ucykge1xuXHRpZiAodXJsIGluc3RhbmNlb2YgVVJMKSB7XG5cdFx0dXJsID0gdXJsLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRsZXQgcmVzb3VyY2U7XG5cdHN3aXRjaCAodHlwZSkge1xuXHRcdGNhc2UgXCJzY3JpcHRzXCI6XG5cdFx0XHRyZXNvdXJjZSA9IG5ldyBTY3JpcHQoZXh0ZW5kKHt9LCBvcHRpb25zLCB7IFtBVFRSSUJVVEVfU1JDXTogdXJsIH0pKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJzdHlsZXNoZWV0c1wiOlxuXHRcdFx0cmVzb3VyY2UgPSBuZXcgU3R5bGVzaGVldChleHRlbmQoe30sIG9wdGlvbnMsIHsgW0FUVFJJQlVURV9IUkVGXTogdXJsIH0pKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJkYXRhXCI6XG5cdFx0XHRyZXNvdXJjZSA9IG5ldyBEYXRhKGV4dGVuZCh7fSwgb3B0aW9ucywgeyBbQVRUUklCVVRFX1NSQ106IHVybCB9KSk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCB0eXBlICR7dHlwZX1gKTtcblx0fVxuXG5cdHRoaXMuZ2V0T3B0aW9uKFwicmVzb3VyY2VzXCIpPy5bdHlwZV0ucHVzaChyZXNvdXJjZSk7XG5cdHJldHVybiB0aGlzO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IENvbmZpZ01hbmFnZXJTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBDb25maWdNYW5hZ2VyU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdENvbmZpZ01hbmFnZXJTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIGNvbmZpZ21hbmFnZXIgeyBcbltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtkaXNwbGF5Om5vbmV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IENvbmZpZ01hbmFnZXJTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9jb25maWctbWFuYWdlci5tanNcIjtcbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgQ29uZmlnTWFuYWdlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbmRleERCSW5zdGFuY2VTeW1ib2wgPSBTeW1ib2woXCJpbmRleERCSW5zdGFuY2VcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGluaXRpYWxpemVkUHJvbWlzZVN5bWJvbCA9IFN5bWJvbChcImluaXRpYWxpemVkUHJvbWlzZVN5bWJvbFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgTU9ERV9SRUFET05MWSA9IFwicmVhZG9ubHlcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgTU9ERV9SRUFEX1dSSVRFID0gXCJyZWFkd3JpdGVcIjtcblxuLyoqXG4gKiBUaGUgQ29uZmlnIE1hbmFnZXIgY29tcG9uZW50IGlzIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGNvbmZpZyBtYW5hZ2VyIGNvbXBvbmVudFxuICovXG5jbGFzcyBDb25maWdNYW5hZ2VyIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvY29tcG9uZW50LWhvc3QvY29uZmlnLW1hbmFnZXJAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdC8qKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHR5cGUge3N5bWJvbH1cblx0XHQgKi9cblx0XHR0aGlzW2luaXRpYWxpemVkUHJvbWlzZVN5bWJvbF0gPSBbXTtcblx0XHR0aGlzW2luZGV4REJJbnN0YW5jZVN5bWJvbF0gPSBudWxsO1xuXHRcdHRoaXNbaW5pdGlhbGl6ZWRQcm9taXNlU3ltYm9sXS5wdXNoKG9wZW5EYXRhYmFzZS5jYWxsKHRoaXMpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0cmVhZHkoKSB7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKHRoaXNbaW5pdGlhbGl6ZWRQcm9taXNlU3ltYm9sXSk7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRpbmRleERCOiB7XG5cdFx0XHRcdG5hbWU6IFwibW9uc3RlclwiLFxuXHRcdFx0XHR2ZXJzaW9uOiAyLFxuXHRcdFx0XHRvYmplY3RTdG9yZToge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29uZmlnXCIsXG5cdFx0XHRcdFx0a2V5UGF0aDogXCJrZXlcIixcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlPHVua25vd24+fVxuXHQgKi9cblx0Z2V0Q29uZmlnKGtleSkge1xuXHRcdHJldHVybiB0aGlzLnJlYWR5KCkudGhlbigoKSA9PiB7XG5cdFx0XHRyZXR1cm4gZ2V0QmxvYi5jYWxsKHRoaXMsIGtleSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fVxuXHQgKi9cblx0aGFzQ29uZmlnKGtleSkge1xuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGdldEJsb2IuY2FsbCh0aGlzLCBrZXkpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1Byb21pc2U8dW5rbm93bj59XG5cdCAqL1xuXHRzZXRDb25maWcoa2V5LCB2YWx1ZSkge1xuXHRcdHJldHVybiB0aGlzLnJlYWR5KCkudGhlbigoKSA9PiB7XG5cdFx0XHRyZXR1cm4gc2V0QmxvYi5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuXHRcdH0pO1xuXHR9XG5cblx0ZGVsZXRlQ29uZmlnKGtleSkge1xuXHRcdHJldHVybiB0aGlzLnJlYWR5KCkudGhlbigoKSA9PiB7XG5cdFx0XHRyZXR1cm4gZGVsZXRlQmxvYi5jYWxsKHRoaXMsIGtleSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWNvbmZpZy1tYW5hZ2VyXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtDb25maWdNYW5hZ2VyU3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gb3BlbkRhdGFiYXNlKCkge1xuXHRjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuXHRjb25zdCBuYW1lID0gdGhpcy5nZXRPcHRpb24oXCJpbmRleERCLm5hbWVcIik7XG5cdGNvbnN0IHZlcnNpb24gPSB0aGlzLmdldE9wdGlvbihcImluZGV4REIudmVyc2lvblwiKTtcblx0Y29uc3Qgc3RvcmFnZU5hbWUgPSB0aGlzLmdldE9wdGlvbihcImluZGV4REIub2JqZWN0U3RvcmUubmFtZVwiKTtcblx0Y29uc3QgS2V5UGF0aCA9IHRoaXMuZ2V0T3B0aW9uKFwiaW5kZXhEQi5vYmplY3RTdG9yZS5rZXlQYXRoXCIpO1xuXG5cdGlmICghbmFtZSB8fCAhdmVyc2lvbikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBkYXRhYmFzZSBuYW1lIGFuZCB2ZXJzaW9uIG11c3QgYmUgc2V0LlwiKTtcblx0fVxuXG5cdGNvbnN0IHJlcXVlc3QgPSB3aW5kb3cuaW5kZXhlZERCLm9wZW4obmFtZSwgdmVyc2lvbik7XG5cblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoZXZlbnQpID0+IHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJFcnJvciBvcGVuaW5nIGRhdGFiYXNlXCIsIGV2ZW50KTtcblx0XHRcdHJlamVjdChyZXF1ZXN0LmVycm9yKTtcblx0XHR9O1xuXG5cdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZXZlbnQpID0+IHtcblx0XHRcdHRoaXNbaW5kZXhEQkluc3RhbmNlU3ltYm9sXSA9IGV2ZW50Py50YXJnZXQ/LnJlc3VsdDtcblx0XHRcdHJlc29sdmUocmVxdWVzdC5yZXN1bHQpO1xuXHRcdH07XG5cblx0XHRyZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IChldmVudCkgPT4ge1xuXHRcdFx0Y29uc3QgZGIgPSBldmVudC50YXJnZXQucmVzdWx0O1xuXG5cdFx0XHRsZXQgb2JqZWN0U3RvcmU7XG5cdFx0XHRpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoc3RvcmFnZU5hbWUpKSB7XG5cdFx0XHRcdG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoc3RvcmFnZU5hbWUsIHsga2V5UGF0aDogS2V5UGF0aCB9KTtcblx0XHRcdH1cblxuXHRcdFx0b2JqZWN0U3RvcmUudHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IChldmVudCkgPT4ge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhcIkRhdGFiYXNlIHVwZ3JhZGUgY29tcGxldGVcIik7XG5cdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdH07XG5cdFx0fTtcblx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGUgZWl0aGVyIFwicmVhZG9ubHlcIiBvciBcInJlYWR3cml0ZVwiXG4gKi9cbmZ1bmN0aW9uIGdldE9iamVjdFN0b3JlKG1vZGUpIHtcblx0Y29uc3Qgc3RvcmFnZU5hbWUgPSB0aGlzLmdldE9wdGlvbihcImluZGV4REIub2JqZWN0U3RvcmUubmFtZVwiKTtcblxuXHRpZiAoIXRoaXNbaW5kZXhEQkluc3RhbmNlU3ltYm9sXSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBkYXRhYmFzZSBpcyBub3Qgb3Blbi5cIik7XG5cdH1cblxuXHQvLyBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9JREJEYXRhYmFzZS90cmFuc2FjdGlvblxuXHQvLyB0cmFuc2FjdGlvbihzdG9yZU5hbWVzLCBtb2RlLCBvcHRpb25zKVxuXHRjb25zdCB0eCA9IHRoaXNbaW5kZXhEQkluc3RhbmNlU3ltYm9sXS50cmFuc2FjdGlvbihzdG9yYWdlTmFtZSwgbW9kZSk7XG5cdHJldHVybiB0eC5vYmplY3RTdG9yZShzdG9yYWdlTmFtZSk7XG59XG5cbi8qKlxuICogQHJldHVybiB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZnVuY3Rpb24gY2xlYXJPYmplY3RTdG9yZSgpIHtcblx0Y29uc3Qgc3RvcmUgPSBnZXRPYmplY3RTdG9yZS5jYWxsKHRoaXMsIFwicmVhZHdyaXRlXCIpO1xuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0Y29uc3QgcmVxID0gc3RvcmUuY2xlYXIoKTtcblx0XHRyZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGV2dCkge1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH07XG5cdFx0cmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRyZWplY3QoZXZ0LnRhcmdldD8uZXJyb3JDb2RlKTtcblx0XHR9O1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0QmxvYihrZXkpIHtcblx0Y29uc3Qgc3RvcmUgPSBnZXRPYmplY3RTdG9yZS5jYWxsKHRoaXMsIE1PREVfUkVBRE9OTFkpO1xuXG5cdGNvbnN0IHJlcSA9IHN0b3JlLmdldChrZXkpO1xuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0cmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gZXZ0LnRhcmdldC5yZXN1bHQ7XG5cdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0cmVzb2x2ZSh2YWx1ZS5ibG9iKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIlRoZSB2YWx1ZSBvZiB0aGUga2V5ICdcIiArIGtleSArIFwiJyBpcyBub3QgZGVmaW5lZC5cIikpO1xuXHRcdH07XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBkZWxldGVCbG9iKGtleSkge1xuXHRjb25zdCBzdG9yZSA9IGdldE9iamVjdFN0b3JlLmNhbGwodGhpcywgTU9ERV9SRUFEX1dSSVRFKTtcblxuXHRjb25zdCByZXEgPSBzdG9yZS5kZWxldGUoa2V5KTtcblxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fTtcblxuXHRcdHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGV2dCkge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcImRlbGV0ZUJsb2I6XCIsIGV2dC50YXJnZXQuZXJyb3JDb2RlKTtcblx0XHRcdHJlamVjdChldnQudGFyZ2V0LmVycm9yQ29kZSk7XG5cdFx0fTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIHNldEJsb2Ioa2V5LCBibG9iKSB7XG5cdGNvbnN0IHN0b3JlID0gZ2V0T2JqZWN0U3RvcmUuY2FsbCh0aGlzLCBNT0RFX1JFQURfV1JJVEUpO1xuXG5cdGNvbnN0IEtleVBhdGggPSB0aGlzLmdldE9wdGlvbihcImluZGV4REIub2JqZWN0U3RvcmUua2V5UGF0aFwiKTtcblx0Y29uc3Qgb2JqID0ge307XG5cdG9ialtLZXlQYXRoXSA9IGtleTtcblx0b2JqLmJsb2IgPSBibG9iO1xuXHRjb25zdCByZXEgPSBzdG9yZS5wdXQob2JqKTtcblxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fTtcblxuXHRcdHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGV2dCkge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcInNldEJsb2I6XCIsIGV2dC50YXJnZXQuZXJyb3JDb2RlKTtcblx0XHRcdHJlamVjdChldnQudGFyZ2V0LmVycm9yQ29kZSk7XG5cdFx0fTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KENvbmZpZ01hbmFnZXIpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCBcIi4uL25vdGlmeS9ub3RpZnkubWpzXCI7XG5pbXBvcnQgeyBIb3N0U3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvaG9zdC5tanNcIjtcbmltcG9ydCB7IGdldExvY2FsZU9mRG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IEVtYmVkIH0gZnJvbSBcIi4uLy4uL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi4vLi4vaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQgeyB3aW5kb3dSZWFkeSB9IGZyb20gXCIuLi8uLi9kb20vcmVhZHkubWpzXCI7XG5pbXBvcnQgeyBGb2N1c01hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZG9tL2ZvY3VzbWFuYWdlci5tanNcIjtcbmltcG9ydCB7IFJlc291cmNlTWFuYWdlciB9IGZyb20gXCIuLi8uLi9kb20vcmVzb3VyY2VtYW5hZ2VyLm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBpc0l0ZXJhYmxlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IFwiLi9jb25maWctbWFuYWdlci5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgSG9zdCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwcm9taXNlc1N5bWJvbCA9IFN5bWJvbChcInByb21pc2VzU3ltYm9sXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBub3RpZnlFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwibm90aWZ5RWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgb3ZlcmxheUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJvdmVybGF5RWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb25maWdNYW5hZ2VyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZm9jdXNNYW5hZ2VyU3ltYm9sID0gU3ltYm9sKFwiZm9jdXNNYW5hZ2VyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZXNvdXJjZU1hbmFnZXJTeW1ib2wgPSBTeW1ib2woXCJyZXNvdXJjZU1hbmFnZXJcIik7XG5cbi8qKlxuICogVGhlIEhvc3QgY29tcG9uZW50IGlzIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhlIGNvbnRlbnQgb2YgYSB3ZWIgYXBwLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvaG9zdC5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnlcbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLWhvc3QgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItaG9zdCcpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLWhvc3Q+PC9tb25zdGVyLWhvc3Q+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0ICdAc2NodWthaS9jb21wb25lbnQtc3RhdGUvc291cmNlL2hvc3QubWpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItaG9zdCcpO1xuICogYGBgXG4gKlxuICogVGhlIEJvZHkgc2hvdWxkIGhhdmUgYSBjbGFzcyBcImhpZGRlblwiIHRvIGVuc3VyZSB0aGF0IHRoZSBzdHlsZXMgYXJlIGFwcGxpZWQgY29ycmVjdGx5LlxuICpcbiAqIGBgYGNzc1xuICogYm9keS5oaWRkZW4ge1xuICogICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICogfVxuICogYGBgXG4gKlxuICogQHN0YXJ0dW1sIGhvc3QucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBIb3N0XG4gKiBAZW5kdW1sXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgc2ltcGxlIGhvc3QgY29tcG9uZW50XG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuSG9zdCNtb25zdGVyLWhvc3QtY29ubmVjdGVkXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuSG9zdCNtb25zdGVyLWhvc3QtZGlzY29ubmVjdGVkXG4gKi9cbmNsYXNzIEhvc3QgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9jb21wb25lbnQtaG9zdC9Ib3N0QEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzIEZlYXR1cmUgZGVmaW5pdGlvbnNcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ga2V5XG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRnZXRDb25maWcoa2V5KSB7XG5cdFx0aWYgKHRoaXNbY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBjb25maWcgbWFuYWdlciBlbGVtZW50XCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0uZ2V0Q29uZmlnKGtleSk7XG5cdH1cblxuXHRoYXNDb25maWcoa2V5KSB7XG5cdFx0aWYgKHRoaXNbY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBjb25maWcgbWFuYWdlciBlbGVtZW50XCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0uaGFzQ29uZmlnKGtleSk7XG5cdH1cblxuXHRkZWxldGVDb25maWcoa2V5KSB7XG5cdFx0aWYgKHRoaXNbY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBjb25maWcgbWFuYWdlciBlbGVtZW50XCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0uZGVsZXRlQ29uZmlnKGtleSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRzZXRDb25maWcoa2V5LCB2YWx1ZSkge1xuXHRcdGlmICh0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gY29uZmlnIG1hbmFnZXIgZWxlbWVudFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0uc2V0Q29uZmlnKGtleSwgdmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0I21vbnN0ZXItaG9zdC1jb25uZWN0ZWRcblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHQvKipcblx0XHQgKiBzaG93IHRoZSBzY3JvbGwgYmFyIGFsd2F5c1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93WSA9IFwic2Nyb2xsXCI7XG5cblx0XHRjb25zdCBjbGFzc05hbWVzID0gdGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLmJvZHlcIik7XG5cblx0XHRpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lcykpIHtcblx0XHRcdGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWVzKTtcblx0XHR9XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLWhvc3QtY29ubmVjdGVkXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0I21vbnN0ZXItaG9zdC1kaXNjb25uZWN0ZWRcblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93WSA9IFwiXCI7XG5cblx0XHRjb25zdCBjbGFzc05hbWVzID0gdGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLmJvZHlcIik7XG5cdFx0aWYgKCFkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWVzKSkge1xuXHRcdFx0ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZXMpO1xuXHRcdH1cblxuXHRcdGlmIChpc0l0ZXJhYmxlKHRoaXNbcHJvbWlzZXNTeW1ib2xdKSA9PT0gZmFsc2UpIHtcblx0XHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdID0gW107XG5cdFx0fVxuXG5cdFx0dGhpc1twcm9taXNlc1N5bWJvbF0ucHVzaChcblx0XHRcdG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRcdFwibW9uc3Rlci1ob3N0LWNvbm5lY3RlZFwiLFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHsgb25jZTogdHJ1ZSB9LFxuXHRcdFx0XHQpO1xuXHRcdFx0fSksXG5cdFx0KTtcblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItaG9zdC1kaXNjb25uZWN0ZWRcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuSG9zdH1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0dGhpc1twcm9taXNlc1N5bWJvbF0gPSBbXTtcblx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXS5wdXNoKHdpbmRvd1JlYWR5KTtcblxuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHRcdGluaXRUcmFuc2xhdGlvbnMuY2FsbCh0aGlzKTtcblxuXHRcdHRoaXNbZm9jdXNNYW5hZ2VyU3ltYm9sXSA9IG5ldyBGb2N1c01hbmFnZXIodGhpcyk7XG5cdFx0dGhpc1tyZXNvdXJjZU1hbmFnZXJTeW1ib2xdID0gbmV3IFJlc291cmNlTWFuYWdlcih0aGlzKTtcblxuXHRcdHRyeSB7XG5cdFx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXS5wdXNoKHRoaXNbcmVzb3VyY2VNYW5hZ2VyU3ltYm9sXS5hdmFpbGFibGUoKSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmlzQ29ubmVjdGVkID09PSBmYWxzZSkge1xuXHRcdFx0dGhpc1twcm9taXNlc1N5bWJvbF0ucHVzaChcblx0XHRcdFx0bmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XHRcdFwibW9uc3Rlci1ob3N0LWNvbm5lY3RlZFwiLFxuXHRcdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0eyBvbmNlOiB0cnVlIH0sXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSksXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgUHJvbWlzZSBpcyByZXNvbHZlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGNvbm5lY3RlZCB0byB0aGUgRE9NIGFuZCBhbGwgcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUuXG5cdCAqIElmIHRoZSBlbGVtZW50IGlzIG5vdCBjb25uZWN0ZWQgdG8gdGhlIERPTSwgdGhlIFByb21pc2UgaXMgcmVqZWN0ZWQuXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRvblJlYWR5KCkge1xuXHRcdGlmIChpc0l0ZXJhYmxlKHRoaXNbcHJvbWlzZXNTeW1ib2xdKSA9PT0gZmFsc2UpIHtcblx0XHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdID0gW107XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKHRoaXNbcHJvbWlzZXNTeW1ib2xdKS50aGVuKCgpID0+IHtcblx0XHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdID0gW107XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jL21vbnN0ZXIvTW9uc3Rlci5ET00uRm9jdXNNYW5hZ2VyLmh0bWx8TW9uc3Rlci5ET00uRm9jdXNNYW5hZ2VyfVxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0Z2V0IGZvY3VzTWFuYWdlcigpIHtcblx0XHRyZXR1cm4gdGhpc1tmb2N1c01hbmFnZXJTeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvbW9uc3Rlci9Nb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXIuaHRtbHxNb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXJ9XG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRnZXQgcmVzb3VyY2VNYW5hZ2VyKCkge1xuXHRcdHJldHVybiB0aGlzW3Jlc291cmNlTWFuYWdlclN5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuSG9zdH1cblx0ICogQHRocm93cyB7RXJyb3J9IFRoZXJlIGlzIG5vIG92ZXJsYXkgZWxlbWVudCBkZWZpbmVkLlxuXHQgKi9cblx0dG9nZ2xlT3ZlcmxheSgpIHtcblx0XHRpZiAodGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIG92ZXJsYXkgZWxlbWVudCBkZWZpbmVkLlwiKTtcblx0XHR9XG5cblx0XHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXS50b2dnbGUoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtIb3N0fVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhlcmUgaXMgbm8gb3ZlcmxheSBlbGVtZW50IGRlZmluZWQuXG5cdCAqL1xuXHRvcGVuT3ZlcmxheSgpIHtcblx0XHRpZiAodGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIG92ZXJsYXkgZWxlbWVudCBkZWZpbmVkLlwiKTtcblx0XHR9XG5cblx0XHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXS5vcGVuKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7SG9zdH1cblx0ICogQHRocm93cyB7RXJyb3J9IFRoZXJlIGlzIG5vIG92ZXJsYXkgZWxlbWVudCBkZWZpbmVkLlxuXHQgKi9cblx0Y2xvc2VPdmVybGF5KCkge1xuXHRcdGlmICh0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gb3ZlcmxheSBlbGVtZW50IGRlZmluZWQuXCIpO1xuXHRcdH1cblxuXHRcdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLmNsb3NlKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWhvc3RcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW0hvc3RTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkkxOG4uTG9jYWxlfVxuXHQgKi9cblx0Z2V0IGxvY2FsZSgpIHtcblx0XHRyZXR1cm4gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge1RyYW5zbGF0aW9uc31cblx0ICovXG5cdGdldCB0cmFuc2xhdGlvbnMoKSB7XG5cdFx0cmV0dXJuIGdldERvY3VtZW50VHJhbnNsYXRpb25zKCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8TWVzc2FnZX0gbWVzc2FnZVxuXHQgKi9cblx0cHVzaE5vdGlmaWNhdGlvbihtZXNzYWdlKSB7XG5cdFx0aWYgKHRoaXNbbm90aWZ5RWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIG5vdGlmeSBlbGVtZW50IGRlZmluZWQuXCIpO1xuXHRcdH1cblxuXHRcdHRoaXNbbm90aWZ5RWxlbWVudFN5bWJvbF0ucHVzaChtZXNzYWdlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwibW9uc3Rlci1vdmVybGF5XCIpO1xuXHR0aGlzW25vdGlmeUVsZW1lbnRTeW1ib2xdID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwibW9uc3Rlci1ub3RpZnlcIik7XG5cdHRoaXNbY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5xdWVyeVNlbGVjdG9yKFxuXHRcdFwibW9uc3Rlci1jb25maWctbWFuYWdlclwiLFxuXHQpO1xufVxuXG5mdW5jdGlvbiBpbml0VHJhbnNsYXRpb25zKCkge1xuXHRpZiAoaXNJdGVyYWJsZSh0aGlzW3Byb21pc2VzU3ltYm9sXSkgPT09IGZhbHNlKSB7XG5cdFx0dGhpc1twcm9taXNlc1N5bWJvbF0gPSBbXTtcblx0fVxuXG5cdHRoaXNbcHJvbWlzZXNTeW1ib2xdLnB1c2goRW1iZWQuYXNzaWduVHJhbnNsYXRpb25zVG9FbGVtZW50KCkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDx0ZW1wbGF0ZSBpZD1cImhvc3QtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpob3N0LWNvbnRhaW5lci5jb250ZW50XCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJwYXJ0IHBhdGg6aG9zdC1jb250YWluZXIubmFtZSwgZGF0YS1tb25zdGVyLXJvbGUgcGF0aDpob3N0LWNvbnRhaW5lci5uYW1lXCI+PC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImhvc3QtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChIb3N0KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBPdmVybGF5U3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgT3ZlcmxheVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRPdmVybGF5U3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBvdmVybGF5IHsgXG46d2hlcmUoaHRtbCl7bGluZS1oZWlnaHQ6MS4xNTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstbW96LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTt0ZXh0LXNpemUtYWRqdXN0OjEwMCV9OndoZXJlKGgxKXtmb250LXNpemU6MmVtO21hcmdpbi1ibG9jay1lbmQ6LjY3ZW07bWFyZ2luLWJsb2NrLXN0YXJ0Oi42N2VtfTp3aGVyZShkbCxvbCx1bCkgOndoZXJlKGRsLG9sLHVsKXttYXJnaW4tYmxvY2stZW5kOjA7bWFyZ2luLWJsb2NrLXN0YXJ0OjB9OndoZXJlKGhyKXtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2NvbG9yOmluaGVyaXQ7aGVpZ2h0OjB9OndoZXJlKGFiYnJbdGl0bGVdKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9OndoZXJlKGIsc3Ryb25nKXtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKGNvZGUsa2JkLHByZSxzYW1wKXtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19OndoZXJlKHNtYWxsKXtmb250LXNpemU6ODAlfTp3aGVyZSh0YWJsZSl7Ym9yZGVyLWNvbG9yOmN1cnJlbnRDb2xvcjt0ZXh0LWluZGVudDowfTp3aGVyZShidXR0b24saW5wdXQsc2VsZWN0KXttYXJnaW46MH06d2hlcmUoYnV0dG9uKXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259OndoZXJlKHByb2dyZXNzKXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX06d2hlcmUoc2VsZWN0KXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZSh0ZXh0YXJlYSl7bWFyZ2luOjB9OndoZXJlKGlucHV0W3R5cGU9c2VhcmNoIGldKXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi41NH06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2ZvbnQ6aW5oZXJpdH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1cy1pbm5lcntib3JkZXItc3R5bGU6bm9uZTtwYWRkaW5nOjB9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6MXB4IGRvdHRlZCBCdXR0b25UZXh0fTp3aGVyZSg6LW1vei11aS1pbnZhbGlkKXtib3gtc2hhZG93Om5vbmV9OndoZXJlKGRpYWxvZyl7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjpzb2xpZDtjb2xvcjojMDAwO2hlaWdodDotbW96LWZpdC1jb250ZW50O2hlaWdodDpmaXQtY29udGVudDtsZWZ0OjA7bWFyZ2luOmF1dG87cGFkZGluZzoxZW07cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt3aWR0aDotbW96LWZpdC1jb250ZW50O3dpZHRoOmZpdC1jb250ZW50fTp3aGVyZShkaWFsb2c6bm90KFtvcGVuXSkpe2Rpc3BsYXk6bm9uZX06d2hlcmUoc3VtbWFyeSl7ZGlzcGxheTpsaXN0LWl0ZW19aHRtbHtoZWlnaHQ6MTAwJX1ib2R5LGh0bWx7bWluLWhlaWdodDpjYWxjKDEwMHZoIC0gNDBweCl9Ym9keXtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7cGFkZGluZzowO3dvcmQtYnJlYWs6YnJlYWstd29yZH0uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9aW5wdXQsbWV0ZXIscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhe2FjY2VudC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXdpZHRoKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOjEwMCU7bWFyZ2luOjA7b3V0bGluZTpub25lfWlucHV0LHNlbGVjdCx0ZXh0YXJlYXtoZWlnaHQ6LW1vei1maXQtY29udGVudDtoZWlnaHQ6Zml0LWNvbnRlbnQ7cGFkZGluZzouNHJlbSAuNnJlbX10ZXh0YXJlYXttaW4taGVpZ2h0OjZyZW07cmVzaXplOnZlcnRpY2FsfWlucHV0W3R5cGU9Y29sb3Jde2hlaWdodDoycmVtO21hcmdpbjowO3BhZGRpbmc6LjFyZW07d2lkdGg6MnJlbX1pbnB1dDpob3Zlcjpub3QoW3R5cGU9cmFkaW9dKTpub3QoW3R5cGU9Y2hlY2tib3hdKTpub3QoW3R5cGU9cmFuZ2VdKSxzZWxlY3Q6aG92ZXIsdGV4dGFyZWE6aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31pbnB1dDpmb2N1cyxzZWxlY3Q6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjNweH1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42O3RleHQtYWxpZ246anVzdGlmeX0ubW9uc3Rlci1oMSxoMXtmb250LXNpemU6M3JlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xNTttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDMsaDN7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjU7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpcXFwidG51bVxcXCI7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4xZW07cGFkZGluZzouNnJlbSAxcmVtfWRldGFpbHNbb3Blbl17cGFkZGluZzouNnJlbSAxcmVtIC43NXJlbX1kZXRhaWxzW29wZW5dIHN1bW1hcnl7bWFyZ2luLWJvdHRvbTouNXJlbTtwYWRkaW5nOjB9Lm1vbnN0ZXItbm8tdXNlci1zZWxlY3R7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfUBrZXlmcmFtZXMgZGV0YWlscy1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjVlbSl9fWRldGFpbHNbb3Blbl0+Om5vdChzdW1tYXJ5KXthbmltYXRpb246ZGV0YWlscy1zaG93IC4xNXMgZWFzZS1pbi1vdXR9ZGV0YWlsc1tvcGVuXT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vbm9zcGFjZXtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja306YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsXFxcIlF1aWNrc2FuZFxcXCIsXFxcIlNlZ29lIFVJXFxcIixcXFwiUm9ib3RvXFxcIixcXFwiT3h5Z2VuXFxcIixcXFwiVWJ1bnR1XFxcIixcXFwiQ2FudGFyZWxsXFxcIixcXFwiRmlyYSBTYW5zXFxcIixcXFwiRHJvaWQgU2Fuc1xcXCIsXFxcIkhlbHZldGljYSBOZXVlXFxcIixBcmlhbCxzYW5zLXNlcmlmLFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIjstLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlOlxcXCJDb25zb2xhc1xcXCIsXFxcIkNvdXJpZXIgTmV3XFxcIixcXFwiUm9ib3RvIE1vbm9cXFwiLFxcXCJTb3VyY2UgQ29kZSBQcm9cXFwiLFxcXCJGaXJhIE1vbm9cXFwiLG1vbm9zcGFjZTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTYpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNik7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTE6IzgzM2FiNDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMjojZmQxZDFkOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zOiNmY2IwNDU7LS1tb25zdGVyLWJveC1zaGFkb3ctMTpub25lOy0tbW9uc3Rlci1ib3gtc2hhZG93LTI6LTFweCAxcHggMTBweCAxcHggaHNsYSgwLDAlLDc2JSwuNjEpOy0tbW9uc3Rlci10ZXh0LXNoYWRvdzpub25lOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXdpZHRoOjJweDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLWJvcmRlci13aWR0aDozcHg7LS1tb25zdGVyLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2U6LTRweDstLW1vbnN0ZXItei1pbmRleC1kZWZhdWx0OjA7LS1tb25zdGVyLXotaW5kZXgtb3V0bGluZToxMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bjoyMDA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd24tb3ZlcmxheToyMTA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5OjMwMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3ktb3ZlcmxheTozMTA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQ6NDAwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkLW92ZXJsYXk6NDEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wOjUwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcC1vdmVybGF5OjUxMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXM6NjAwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhcy1vdmVybGF5OjYxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbDo3MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheTo3MTA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlcjo4MDA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlci1vdmVybGF5OjgxMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwOjgwMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwLW92ZXJsYXk6OTEwOy0tbW9uc3Rlci1zcGFjZS0wOjA7LS1tb25zdGVyLXNwYWNlLTE6MnB4Oy0tbW9uc3Rlci1zcGFjZS0yOjRweDstLW1vbnN0ZXItc3BhY2UtMzo2cHg7LS1tb25zdGVyLXNwYWNlLTQ6MTBweDstLW1vbnN0ZXItc3BhY2UtNToxNnB4Oy0tbW9uc3Rlci1zcGFjZS02OjI2cHg7LS1tb25zdGVyLXNwYWNlLTc6NDJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0wOjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTQ6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNzo3NjhweDstLW1vbnN0ZXItYnJlYWtwb2ludC05Ojk5MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTEyOjEyMDBweDstLW1vbnN0ZXItZHJhZ2dlci13aWR0aDoycHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLXdpZHRoOjRweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtaGVpZ2h0OjUwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXldLmhpZGUtZW1wdHl7ZGlzcGxheTpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5XXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMik7aGVpZ2h0OjEwMCU7bGVmdDowO292ZXJmbG93LXg6aGlkZGVuO3Bvc2l0aW9uOmZpeGVkO3RvcDowO3RyYW5zaXRpb246LjVzO3dpZHRoOjA7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzKX1bZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheV0gW2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXktY2xvc2Vde2N1cnNvcjpwb2ludGVyO2hlaWdodDo0MHB4O2xlZnQ6MTBweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTBweDt3aWR0aDo0MHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5XSBbZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheS1jbG9zZV06YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTIuMTQ2IDIuODU0YS41LjUgMCAxIDEgLjcwOC0uNzA4TDggNy4yOTNsNS4xNDYtNS4xNDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDUuMTQ3IDUuMTQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtNS4xNDYgNS4xNDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J00yLjE0NiAyLjg1NGEuNS41IDAgMSAxIC43MDgtLjcwOEw4IDcuMjkzbDUuMTQ2LTUuMTQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGw1LjE0NyA1LjE0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTUuMTQ2IDUuMTQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDh6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5LW9wZW5de2N1cnNvcjpwb2ludGVyO2hlaWdodDo0MHB4O2xlZnQ6MTBweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTBweDt3aWR0aDo0MHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5LW9wZW5dOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J00xIDJhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg3YTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAxLTEtMXpNMSA3YTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIN2ExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxaC0yYTEgMSAwIDAgMS0xLTF6TTEgMTJhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg3YTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAxLTEtMXonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J00xIDJhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg3YTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAxLTEtMXpNMSA3YTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIN2ExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxaC0yYTEgMSAwIDAgMS0xLTF6TTEgMTJhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg3YTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAxLTEtMXonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXldLm9wZW57d2lkdGg6MTAwJX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IFwiLi4vbm90aWZ5L25vdGlmeS5tanNcIjtcbmltcG9ydCB7IE92ZXJsYXlTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9vdmVybGF5Lm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX1JPTEUgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50LFxuXHRmaXJlQ3VzdG9tRXZlbnQsXG59IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBPdmVybGF5IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG92ZXJsYXlFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwib3ZlcmxheUVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG92ZXJsYXlDbG9zZUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJvdmVybGF5Q2xvc2VyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgb3ZlcmxheU9wZW5FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwib3ZlcmxheU9wZW5FbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjbG9zZUV2ZW50SGFuZGxlclN5bWJvbCA9IFN5bWJvbChcImNsb3NlRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBvcGVuRXZlbnRIYW5kbGVyU3ltYm9sID0gU3ltYm9sKFwib3BlbkV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX1ZBTFVFX09WRVJMQVlfT1BFTiA9IFwib3ZlcmxheS1vcGVuXCI7XG5cbi8qKlxuICogVGhlIE92ZXJsYXkgY29tcG9uZW50IGlzIHVzZWQgdG8gc2hvdyBhbiBvdmVybGF5IGFuZCBhIGJ1dHRvbiB0byBvcGVuIHRoZSBvdmVybGF5LlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvb3ZlcmxheS5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnlcbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLW92ZXJsYXkgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItb3ZlcmxheScpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLW92ZXJsYXk+PC9tb25zdGVyLW92ZXJsYXk+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0ICdAc2NodWthaS9jb21wb25lbnQtc3RhdGUvc291cmNlL292ZXJsYXkubWpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItb3ZlcmxheScpO1xuICogYGBgXG4gKlxuICogVGhlIEJvZHkgc2hvdWxkIGhhdmUgYSBjbGFzcyBcImhpZGRlblwiIHRvIGVuc3VyZSB0aGF0IHRoZSBzdHlsZXMgYXJlIGFwcGxpZWQgY29ycmVjdGx5LlxuICpcbiAqIGBgYGNzc1xuICogYm9keS5oaWRkZW4ge1xuICogICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICogfVxuICogYGBgXG4gKlxuICogQHN0YXJ0dW1sIG92ZXJsYXkucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDdXN0b21Db250cm9sXG4gKiBDdXN0b21Db250cm9sIDx8LS0gT3ZlcmxheVxuICogQGVuZHVtbFxuICpcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIHNpbXBsZSBvdmVybGF5IGNvbXBvbmVudFxuICogQGZpcmVzIG1vbnN0ZXItb3ZlcmxheS1iZWZvcmUtb3BlblxuICogQGZpcmVzIG1vbnN0ZXItb3ZlcmxheS1vcGVuXG4gKiBAZmlyZXMgbW9uc3Rlci1vdmVybGF5LWJlZm9yZS1jbG9zZVxuICogQGZpcmVzIG1vbnN0ZXItb3ZlcmxheS1jbG9zZWRcbiAqL1xuY2xhc3MgT3ZlcmxheSBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9ob3N0L292ZXJsYXlAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29udGFpbmVyIENvbnRhaW5lciBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge2FycmF5fSBjb250YWluZXIgQ29udGFpbmVyIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250YWluZXJbXS5uYW1lIE5hbWUgb2YgdGhlIGNvbnRhaW5lclxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY29udGFpbmVyW10uY29udGVudCBDb250ZW50IG9mIHRoZSBjb250YWluZXJcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbnRhaW5lcltdLmNsYXNzIENzcyBjbGFzcyBvZiB0aGUgY29udGFpbmVyXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjbGFzc2VzIENzcyBjbGFzc2VzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzc2VzLmJvZHkgQ3NzIGNsYXNzIHRvIGhpZGUgdGhlIGJvZHkuIFRoaXMgY2xhc3MgaXMgcmVtb3ZlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgcmVhZHkuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzc2VzLm92ZXJsYXkgQ3NzIGNsYXNzIHRvIGhpZGUgdGhlIG92ZXJsYXkuIFRoaXMgY2xhc3MgaXMgcmVtb3ZlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgcmVhZHkuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZWF0dXJlcyBGZWF0dXJlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMuZXNjYXBlS2V5IElmIHRydWUgdGhlIG92ZXJsYXkgY2FuIGJlIGNsb3NlZCB3aXRoIHRoZSBlc2NhcGUga2V5XG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMub3BlbkJ1dHRvbiBJZiB0cnVlIHRoZSBvdmVybGF5IGNhbiBiZSBvcGVuZWQgd2l0aCBhIGJ1dHRvblxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0b3ZlcmxheTogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250ZW50XCIsXG5cdFx0XHRcdFx0Y29udGVudDogXCI8c2xvdD48L3Nsb3Q+XCIsXG5cdFx0XHRcdFx0Y2xhc3M6IFwiXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdFx0Y2xhc3Nlczoge1xuXHRcdFx0XHRib2R5OiBcImhpZGRlblwiLFxuXHRcdFx0XHRvdmVybGF5OiBcImhpZGUtZW1wdHlcIixcblx0XHRcdH0sXG5cdFx0XHRmZWF0dXJlczoge1xuXHRcdFx0XHRlc2NhcGVLZXk6IHRydWUsXG5cdFx0XHRcdG9wZW5CdXR0b246IHRydWUsXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0LyoqXG5cdFx0ICogc2hvdyB0aGUgc2Nyb2xsIGJhciBhbHdheXNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqL1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSBcInNjcm9sbFwiO1xuXG5cdFx0Y29uc3QgY2xhc3NOYW1lcyA9IHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5ib2R5XCIpO1xuXG5cdFx0aWYgKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZXMpKSB7XG5cdFx0XHRkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lk92ZXJsYXl9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lk92ZXJsYXl9XG5cdCAqL1xuXHR0b2dnbGUoKSB7XG5cdFx0aWYgKHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5jb250YWlucyhcIm9wZW5cIikpIHtcblx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5vcGVuKCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lk92ZXJsYXl9XG5cdCAqIEBmaXJlcyBtb25zdGVyLW92ZXJsYXktYmVmb3JlLW9wZW5cblx0ICogQGZpcmVzIG1vbnN0ZXItb3ZlcmxheS1vcGVuXG5cdCAqIEBmaXJlcyBtb25zdGVyLW92ZXJsYXktYmVmb3JlLWNsb3NlXG5cdCAqIEBmaXJlcyBtb25zdGVyLW92ZXJsYXktY2xvc2VkXG5cdCAqL1xuXHRvcGVuKCkge1xuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItb3ZlcmxheS1iZWZvcmUtb3BlblwiLCB7fSk7XG5cblx0XHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZS1lbXB0eVwiKTtcblxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcIm9wZW5cIik7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1vdmVybGF5LW9wZW5cIiwge30pO1xuXHRcdFx0fSwgMCk7XG5cdFx0fSwgMCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5PdmVybGF5fVxuXHQgKi9cblx0Y2xvc2UoKSB7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1vdmVybGF5LWJlZm9yZS1jbG9zZVwiLCB7fSk7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwib3BlblwiKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLW92ZXJsYXktY2xvc2VkXCIsIHt9KTtcblx0XHRcdH0sIDApO1xuXHRcdH0sIDApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1vdmVybGF5XCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtPdmVybGF5U3R5bGVTaGVldF07XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5nZXRFbGVtZW50QnlJZChcIm92ZXJsYXlcIik7XG5cdHRoaXNbb3ZlcmxheUNsb3NlRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5LWNsb3NlXVwiLFxuXHQpO1xuXHR0aGlzW292ZXJsYXlPcGVuRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5LW9wZW5dXCIsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHR0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdHRoaXMuY2xvc2UoKTtcblx0fTtcblxuXHR0aGlzW292ZXJsYXlDbG9zZUVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XCJjbGlja1wiLFxuXHRcdHRoaXNbY2xvc2VFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHQpO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1tvcGVuRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRBVFRSSUJVVEVfVkFMVUVfT1ZFUkxBWV9PUEVOLFxuXHRcdCk7XG5cdFx0aWYgKGVsZW1lbnQpIHtcblx0XHRcdHRoaXMub3BlbigpO1xuXHRcdH1cblx0fTtcblxuXHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzW29wZW5FdmVudEhhbmRsZXJTeW1ib2xdKTtcblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5lc2NhcGVLZXlcIikgPT09IHRydWUpIHtcblx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChldmVudCkgPT4ge1xuXHRcdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuXHRcdFx0XHRjb25zdCBpc05vdENvbWJpbmVkS2V5ID0gIShcblx0XHRcdFx0XHRldmVudC5jdHJsS2V5IHx8XG5cdFx0XHRcdFx0ZXZlbnQuYWx0S2V5IHx8XG5cdFx0XHRcdFx0ZXZlbnQuc2hpZnRLZXlcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGlzTm90Q29tYmluZWRLZXkpIHtcblx0XHRcdFx0XHR0aGlzLnRvZ2dsZU92ZXJsYXkoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwiaG9zdC1vdmVybGF5XCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpob3N0LW92ZXJsYXkuY29udGVudFwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwicGFydCBwYXRoOmhvc3Qtb3ZlcmxheS5uYW1lLCBkYXRhLW1vbnN0ZXItcm9sZSBwYXRoOmhvc3QtY29udGFpbmVyLm92ZXJsYXlcIj48L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwib3ZlcmxheS1vcGVuXCIgcGFydD1cIm9wZW5cIlxuXHRcdFx0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpmZWF0dXJlcy5vcGVuQnV0dG9uIHwgaWY6dmlzaWJsZTpoaWRkZW5cIj48L2Rpdj5cblxuICAgICAgICA8ZGl2IGlkPVwib3ZlcmxheVwiIGRhdGEtbW9uc3Rlci1yb2xlPVwib3ZlcmxheVwiIHBhcnQ9XCJvdmVybGF5XCIgZGF0YS1tb25zdGVyLWluc2VydD1cImhvc3Qtb3ZlcmxheSBwYXRoOm92ZXJsYXlcIlxuICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjbGFzc2VzLm92ZXJsYXlcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJvdmVybGF5LWNsb3NlXCIgcGFydD1cImNsb3NlXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChPdmVybGF5KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBnZXRXaW5kb3cgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5cbmV4cG9ydCB7IGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5IH07XG5cbi8qKlxuICogR2VuZXJhdGUgYSB1bmlxdWUgY29uZmlndXJhdGlvbiBrZXkgYmFzZWQgb24gdGhlIGN1cnJlbnQgYnJvd3NlciBsb2NhdGlvbixcbiAqIGNvbXBvbmVudCBuYW1lLCBpZCwgYW5kIGEgcHJlZml4LlxuICpcbiAqIEBzaW5jZSAzLjU1LjAgdGhlIGZ1bmN0aW9uIHJlbW92ZSB0aGUgaGFzaCBmcm9tIHRoZSBrZXlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBjb21wb25lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY29tcG9uZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCAtIEEgcHJlZml4IHRvIHVzZSBpbiB0aGUgdW5pcXVlIGtleS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGdlbmVyYXRlZCB1bmlxdWUgY29uZmlndXJhdGlvbiBrZXkuXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5KGNvbXBvbmVudE5hbWUsIGlkLCBwcmVmaXgpIHtcblx0Ly8gR2V0IHRoZSBicm93c2VyIGxvY2F0aW9uIHdpdGhvdXQgcGFyYW1ldGVyc1xuXHRjb25zdCB1cmxXaXRob3V0UGFyYW1zID0gZ2V0V2luZG93KCkubG9jYXRpb24uaHJlZi5zcGxpdChcIj9cIilbMF07XG5cblx0Ly8gV2l0aG91dCBoYXNoIChzaW5jZSAzLjU1LjApXG5cdGNvbnN0IHVybFdpdGhvdXRQYXJhbXNBbmRIYXNoID0gdXJsV2l0aG91dFBhcmFtcy5zcGxpdChcIiNcIilbMF07XG5cblx0Ly8gQ29tYmluZSB0aGUgcGFydHMgdG8gY3JlYXRlIGEgdW5pcXVlIGtleVxuXHRjb25zdCB1bmlxdWVLZXkgPSBgJHtwcmVmaXh9XyR7dXJsV2l0aG91dFBhcmFtc0FuZEhhc2h9XyR7Y29tcG9uZW50TmFtZX1fJHtpZH1gO1xuXG5cdC8vIFJlcGxhY2UgYW55IHNwZWNpYWwgY2hhcmFjdGVycyBhbmQgc3BhY2VzIHdpdGggdW5kZXJzY29yZXNcblx0cmV0dXJuIHVuaXF1ZUtleS5yZXBsYWNlKC9bXlxcd1xcc10vZ2ksIFwiX1wiKS5yZXBsYWNlKC9cXHMrL2csIFwiX1wiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBEZXRhaWxzU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgRGV0YWlsc1N0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHREZXRhaWxzU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBkZXRhaWxzIHsgXG46d2hlcmUoaHRtbCl7bGluZS1oZWlnaHQ6MS4xNTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstbW96LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTt0ZXh0LXNpemUtYWRqdXN0OjEwMCV9OndoZXJlKGgxKXtmb250LXNpemU6MmVtO21hcmdpbi1ibG9jay1lbmQ6LjY3ZW07bWFyZ2luLWJsb2NrLXN0YXJ0Oi42N2VtfTp3aGVyZShkbCxvbCx1bCkgOndoZXJlKGRsLG9sLHVsKXttYXJnaW4tYmxvY2stZW5kOjA7bWFyZ2luLWJsb2NrLXN0YXJ0OjB9OndoZXJlKGhyKXtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2NvbG9yOmluaGVyaXQ7aGVpZ2h0OjB9OndoZXJlKGFiYnJbdGl0bGVdKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9OndoZXJlKGIsc3Ryb25nKXtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKGNvZGUsa2JkLHByZSxzYW1wKXtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19OndoZXJlKHNtYWxsKXtmb250LXNpemU6ODAlfTp3aGVyZSh0YWJsZSl7Ym9yZGVyLWNvbG9yOmN1cnJlbnRDb2xvcjt0ZXh0LWluZGVudDowfTp3aGVyZShidXR0b24saW5wdXQsc2VsZWN0KXttYXJnaW46MH06d2hlcmUoYnV0dG9uKXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259OndoZXJlKHByb2dyZXNzKXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX06d2hlcmUoc2VsZWN0KXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZSh0ZXh0YXJlYSl7bWFyZ2luOjB9OndoZXJlKGlucHV0W3R5cGU9c2VhcmNoIGldKXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi41NH06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2ZvbnQ6aW5oZXJpdH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1cy1pbm5lcntib3JkZXItc3R5bGU6bm9uZTtwYWRkaW5nOjB9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6MXB4IGRvdHRlZCBCdXR0b25UZXh0fTp3aGVyZSg6LW1vei11aS1pbnZhbGlkKXtib3gtc2hhZG93Om5vbmV9OndoZXJlKGRpYWxvZyl7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjpzb2xpZDtjb2xvcjojMDAwO2hlaWdodDotbW96LWZpdC1jb250ZW50O2hlaWdodDpmaXQtY29udGVudDtsZWZ0OjA7bWFyZ2luOmF1dG87cGFkZGluZzoxZW07cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt3aWR0aDotbW96LWZpdC1jb250ZW50O3dpZHRoOmZpdC1jb250ZW50fTp3aGVyZShkaWFsb2c6bm90KFtvcGVuXSkpe2Rpc3BsYXk6bm9uZX06d2hlcmUoc3VtbWFyeSl7ZGlzcGxheTpsaXN0LWl0ZW19aHRtbHtoZWlnaHQ6MTAwJX1ib2R5LGh0bWx7bWluLWhlaWdodDpjYWxjKDEwMHZoIC0gNDBweCl9Ym9keXtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7cGFkZGluZzowO3dvcmQtYnJlYWs6YnJlYWstd29yZH0uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1idXR0b24tcHJpbWFyeSxidXR0b257YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnksLm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeSwubW9uc3Rlci1idXR0b24tb3V0bGluZS1zZWNvbmRhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH1idXR0b246YWN0aXZlLGJ1dHRvbjpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfWJ1dHRvbjphY3RpdmV7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9Lm1vbnN0ZXItYnV0dG9uLWJhciwubW9uc3Rlci1idXR0b24tZ3JvdXB7YWxpZ24tY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6c3RyZXRjaDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2JveC1zaXppbmc6Ym9yZGVyLWJveDtnYXA6MDttYXJnaW46MXJlbSAwfS5tb25zdGVyLWJ1dHRvbi1ncm91cD46bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6Y2FsYyh2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkqLTEpfS5tb25zdGVyLWJ1dHRvbi1ncm91cCA6aG92ZXJ7Ym94LXNoYWRvdzpub25lfWJ1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpe2J1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1mb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxcXFwiUXVpY2tzYW5kXFxcIixcXFwiU2Vnb2UgVUlcXFwiLFxcXCJSb2JvdG9cXFwiLFxcXCJPeHlnZW5cXFwiLFxcXCJVYnVudHVcXFwiLFxcXCJDYW50YXJlbGxcXFwiLFxcXCJGaXJhIFNhbnNcXFwiLFxcXCJEcm9pZCBTYW5zXFxcIixcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLEFyaWFsLHNhbnMtc2VyaWYsXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiOy0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2U6XFxcIkNvbnNvbGFzXFxcIixcXFwiQ291cmllciBOZXdcXFwiLFxcXCJSb2JvdG8gTW9ub1xcXCIsXFxcIlNvdXJjZSBDb2RlIFByb1xcXCIsXFxcIkZpcmEgTW9ub1xcXCIsbW9ub3NwYWNlOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS02KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMTojODMzYWI0Oy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yOiNmZDFkMWQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTM6I2ZjYjA0NTstLW1vbnN0ZXItYm94LXNoYWRvdy0xOm5vbmU7LS1tb25zdGVyLWJveC1zaGFkb3ctMjotMXB4IDFweCAxMHB4IDFweCBoc2xhKDAsMCUsNzYlLC42MSk7LS1tb25zdGVyLXRleHQtc2hhZG93Om5vbmU7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0yKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItYm9yZGVyLXdpZHRoOjNweDstLW1vbnN0ZXItYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZTotNHB4Oy0tbW9uc3Rlci16LWluZGV4LWRlZmF1bHQ6MDstLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lOjEwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duOjIwMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bi1vdmVybGF5OjIxMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3k6MzAwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreS1vdmVybGF5OjMxMDstLW1vbnN0ZXItei1pbmRleC1maXhlZDo0MDA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQtb3ZlcmxheTo0MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3A6NTAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wLW92ZXJsYXk6NTEwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhczo2MDA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzLW92ZXJsYXk6NjEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsOjcwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1vdmVybGF5OjcxMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyOjgwMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyLW92ZXJsYXk6ODEwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXA6ODAwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXAtb3ZlcmxheTo5MTA7LS1tb25zdGVyLXNwYWNlLTA6MDstLW1vbnN0ZXItc3BhY2UtMToycHg7LS1tb25zdGVyLXNwYWNlLTI6NHB4Oy0tbW9uc3Rlci1zcGFjZS0zOjZweDstLW1vbnN0ZXItc3BhY2UtNDoxMHB4Oy0tbW9uc3Rlci1zcGFjZS01OjE2cHg7LS1tb25zdGVyLXNwYWNlLTY6MjZweDstLW1vbnN0ZXItc3BhY2UtNzo0MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTA6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC03Ojc2OHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTk6OTkycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMTI6MTIwMHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoOjJweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGg6NHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQ6NTBweH1zcGFuLm1vbnN0ZXItZngtcmlwcGxle2FuaW1hdGlvbjptb25zdGVyLWZ4LXJpcHBsZSAuNnMgbGluZWFyO2JhY2tncm91bmQtY29sb3I6aHNsYSgwLDAlLDEwMCUsLjcpO2JvcmRlci1yYWRpdXM6NTAlO3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTpzY2FsZSgwKX1Aa2V5ZnJhbWVzIG1vbnN0ZXItZngtcmlwcGxle3Rve29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoNCl9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW59IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEFUVFJJQlVURV9QUkVGSVggfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbGAgY2FuIGJlIHVzZWQgdG8gcGFzcyBsYWJlbHMuXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0JVVFRPTl9MQUJFTCA9IGAke0FUVFJJQlVURV9QUkVGSVh9YnV0dG9uLWxhYmVsYDtcblxuZXhwb3J0IHsgQVRUUklCVVRFX0JVVFRPTl9MQUJFTCB9O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IENvbGxhcHNlU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgQ29sbGFwc2VTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0Q29sbGFwc2VTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIGNvbGxhcHNlIHsgXG46d2hlcmUoaHRtbCl7bGluZS1oZWlnaHQ6MS4xNTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstbW96LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTt0ZXh0LXNpemUtYWRqdXN0OjEwMCV9OndoZXJlKGgxKXtmb250LXNpemU6MmVtO21hcmdpbi1ibG9jay1lbmQ6LjY3ZW07bWFyZ2luLWJsb2NrLXN0YXJ0Oi42N2VtfTp3aGVyZShkbCxvbCx1bCkgOndoZXJlKGRsLG9sLHVsKXttYXJnaW4tYmxvY2stZW5kOjA7bWFyZ2luLWJsb2NrLXN0YXJ0OjB9OndoZXJlKGhyKXtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2NvbG9yOmluaGVyaXQ7aGVpZ2h0OjB9OndoZXJlKGFiYnJbdGl0bGVdKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9OndoZXJlKGIsc3Ryb25nKXtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKGNvZGUsa2JkLHByZSxzYW1wKXtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19OndoZXJlKHNtYWxsKXtmb250LXNpemU6ODAlfTp3aGVyZSh0YWJsZSl7Ym9yZGVyLWNvbG9yOmN1cnJlbnRDb2xvcjt0ZXh0LWluZGVudDowfTp3aGVyZShidXR0b24saW5wdXQsc2VsZWN0KXttYXJnaW46MH06d2hlcmUoYnV0dG9uKXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259OndoZXJlKHByb2dyZXNzKXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX06d2hlcmUoc2VsZWN0KXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZSh0ZXh0YXJlYSl7bWFyZ2luOjB9OndoZXJlKGlucHV0W3R5cGU9c2VhcmNoIGldKXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi41NH06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2ZvbnQ6aW5oZXJpdH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1cy1pbm5lcntib3JkZXItc3R5bGU6bm9uZTtwYWRkaW5nOjB9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6MXB4IGRvdHRlZCBCdXR0b25UZXh0fTp3aGVyZSg6LW1vei11aS1pbnZhbGlkKXtib3gtc2hhZG93Om5vbmV9OndoZXJlKGRpYWxvZyl7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjpzb2xpZDtjb2xvcjojMDAwO2hlaWdodDotbW96LWZpdC1jb250ZW50O2hlaWdodDpmaXQtY29udGVudDtsZWZ0OjA7bWFyZ2luOmF1dG87cGFkZGluZzoxZW07cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt3aWR0aDotbW96LWZpdC1jb250ZW50O3dpZHRoOmZpdC1jb250ZW50fTp3aGVyZShkaWFsb2c6bm90KFtvcGVuXSkpe2Rpc3BsYXk6bm9uZX06d2hlcmUoc3VtbWFyeSl7ZGlzcGxheTpsaXN0LWl0ZW19aHRtbHtoZWlnaHQ6MTAwJX1ib2R5LGh0bWx7bWluLWhlaWdodDpjYWxjKDEwMHZoIC0gNDBweCl9Ym9keXtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7cGFkZGluZzowO3dvcmQtYnJlYWs6YnJlYWstd29yZH0uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1idXR0b24tcHJpbWFyeSxidXR0b257YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnksLm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeSwubW9uc3Rlci1idXR0b24tb3V0bGluZS1zZWNvbmRhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH1idXR0b246YWN0aXZlLGJ1dHRvbjpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfWJ1dHRvbjphY3RpdmV7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9Lm1vbnN0ZXItYnV0dG9uLWJhciwubW9uc3Rlci1idXR0b24tZ3JvdXB7YWxpZ24tY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6c3RyZXRjaDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2JveC1zaXppbmc6Ym9yZGVyLWJveDtnYXA6MDttYXJnaW46MXJlbSAwfS5tb25zdGVyLWJ1dHRvbi1ncm91cD46bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6Y2FsYyh2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkqLTEpfS5tb25zdGVyLWJ1dHRvbi1ncm91cCA6aG92ZXJ7Ym94LXNoYWRvdzpub25lfWJ1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpe2J1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1mb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxcXFwiUXVpY2tzYW5kXFxcIixcXFwiU2Vnb2UgVUlcXFwiLFxcXCJSb2JvdG9cXFwiLFxcXCJPeHlnZW5cXFwiLFxcXCJVYnVudHVcXFwiLFxcXCJDYW50YXJlbGxcXFwiLFxcXCJGaXJhIFNhbnNcXFwiLFxcXCJEcm9pZCBTYW5zXFxcIixcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLEFyaWFsLHNhbnMtc2VyaWYsXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiOy0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2U6XFxcIkNvbnNvbGFzXFxcIixcXFwiQ291cmllciBOZXdcXFwiLFxcXCJSb2JvdG8gTW9ub1xcXCIsXFxcIlNvdXJjZSBDb2RlIFByb1xcXCIsXFxcIkZpcmEgTW9ub1xcXCIsbW9ub3NwYWNlOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS02KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMTojODMzYWI0Oy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yOiNmZDFkMWQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTM6I2ZjYjA0NTstLW1vbnN0ZXItYm94LXNoYWRvdy0xOm5vbmU7LS1tb25zdGVyLWJveC1zaGFkb3ctMjotMXB4IDFweCAxMHB4IDFweCBoc2xhKDAsMCUsNzYlLC42MSk7LS1tb25zdGVyLXRleHQtc2hhZG93Om5vbmU7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0yKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItYm9yZGVyLXdpZHRoOjNweDstLW1vbnN0ZXItYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZTotNHB4Oy0tbW9uc3Rlci16LWluZGV4LWRlZmF1bHQ6MDstLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lOjEwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duOjIwMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bi1vdmVybGF5OjIxMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3k6MzAwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreS1vdmVybGF5OjMxMDstLW1vbnN0ZXItei1pbmRleC1maXhlZDo0MDA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQtb3ZlcmxheTo0MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3A6NTAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wLW92ZXJsYXk6NTEwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhczo2MDA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzLW92ZXJsYXk6NjEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsOjcwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1vdmVybGF5OjcxMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyOjgwMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyLW92ZXJsYXk6ODEwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXA6ODAwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXAtb3ZlcmxheTo5MTA7LS1tb25zdGVyLXNwYWNlLTA6MDstLW1vbnN0ZXItc3BhY2UtMToycHg7LS1tb25zdGVyLXNwYWNlLTI6NHB4Oy0tbW9uc3Rlci1zcGFjZS0zOjZweDstLW1vbnN0ZXItc3BhY2UtNDoxMHB4Oy0tbW9uc3Rlci1zcGFjZS01OjE2cHg7LS1tb25zdGVyLXNwYWNlLTY6MjZweDstLW1vbnN0ZXItc3BhY2UtNzo0MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTA6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC03Ojc2OHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTk6OTkycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMTI6MTIwMHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoOjJweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGg6NHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQ6NTBweH1zcGFuLm1vbnN0ZXItZngtcmlwcGxle2FuaW1hdGlvbjptb25zdGVyLWZ4LXJpcHBsZSAuNnMgbGluZWFyO2JhY2tncm91bmQtY29sb3I6aHNsYSgwLDAlLDEwMCUsLjcpO2JvcmRlci1yYWRpdXM6NTAlO3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTpzY2FsZSgwKX1Aa2V5ZnJhbWVzIG1vbnN0ZXItZngtcmlwcGxle3Rve29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoNCl9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42fS5vdmVyZmxvdy1oaWRkZW5bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3ZlcmZsb3c6aGlkZGVufVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBidXR0b257Ym9yZGVyLWxlZnQ6MDtib3JkZXItcmlnaHQ6MDtib3JkZXItdG9wOjB9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5idXR0b246aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWRldGFpbF17Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtoZWlnaHQ6MDtsaW5lLWhlaWdodDoxLjY7dHJhbnNpdGlvbjpoZWlnaHQgLjRzIGVhc2UtaW4tb3V0O3dpZHRoOjEwMCV9OmlzKFtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9ZGV0YWlsXSkgLnBhZGRpbmd7cGFkZGluZzoxcmVtfTppcyhbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWRldGFpbF0pIC5kZWNvLWxpbmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xKSAwLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMikgNTAlLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMykgMTAwJSk7Ym9yZGVyOjA7aGVpZ2h0OjJweDttYXJnaW46MDtwYWRkaW5nOjB9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6aXMoW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1kZXRhaWxdKSAuZGVjby1saW5le2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfX06aXMoW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1kZXRhaWxdKSAuZGVjby1saW5le3RyYW5zaXRpb246YmFja2dyb3VuZCAuNHMgZWFzZS1pbi1vdXR9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5hY3RpdmVbZGF0YS1tb25zdGVyLXJvbGU9ZGV0YWlsXXtoZWlnaHQ6dmFyKC0tbW9uc3Rlci1oZWlnaHQpO3RyYW5zaXRpb246aGVpZ2h0IC40cyBlYXNlLWluLW91dH0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdGdldFNsb3R0ZWRFbGVtZW50cyxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBDb2xsYXBzZVN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2NvbGxhcHNlLm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgSG9zdCB9IGZyb20gXCIuLi9ob3N0L2hvc3QubWpzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleSB9IGZyb20gXCIuLi9ob3N0L3V0aWwubWpzXCI7XG5pbXBvcnQgeyBEZWFkTWFuc1N3aXRjaCB9IGZyb20gXCIuLi8uLi91dGlsL2RlYWRtYW5zc3dpdGNoLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBDb2xsYXBzZSwgbmFtZVN5bWJvbCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0aW1lckNhbGxiYWNrU3ltYm9sID0gU3ltYm9sKFwidGltZXJDYWxsYmFja1wiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZGV0YWlsc0VsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJkZXRhaWxzRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZXNpemVPYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcInJlc2l6ZU9ic2VydmVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkZXRhaWxzU2xvdEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJkZXRhaWxzU2xvdEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRldGFpbHNDb250YWluZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRcIik7XG4vKipcblxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRldGFpbHNEZWNvRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImRldGFpbHNEZWNvRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbmFtZVN5bWJvbCA9IFN5bWJvbChcIm5hbWVcIik7XG5cbi8qKlxuICogQSBDb2xsYXBzZSBjb21wb25lbnRcbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9sYXlvdXQvY29sbGFwc2UvXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbGF5b3V0L2NvbGxhcHNlLXNpbXBsZVxuICpcbiAqIEBzaW5jZSAzLjc0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSAgQSBzaW1wbGUgY29sbGFwc2UgY29tcG9uZW50LlxuICovXG5jbGFzcyBDb2xsYXBzZSBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9sYXlvdXQvY29sbGFwc2VAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdC8vIHRoZSBuYW1lIGlzIG9ubHkgdXNlZCBmb3IgdGhlIGhvc3QgY29uZmlnIGFuZCB0aGUgZXZlbnQgbmFtZVxuXHRcdHRoaXNbbmFtZVN5bWJvbF0gPSBcImNvbGxhcHNlXCI7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjbGFzc2VzIENTUyBjbGFzc2VzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzc2VzLmNvbnRhaW5lciBDU1MgY2xhc3MgZm9yIHRoZSBjb250YWluZXJcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzIEZlYXR1cmUgY29uZmlndXJhdGlvblxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLmFjY29yZGlvbiBFbmFibGUgYWNjb3JkaW9uIG1vZGVcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5wZXJzaXN0U3RhdGUgRW5hYmxlIHBlcnNpc3Qgc3RhdGUgKEhvc3QgYW5kIENvbmZpZy1NYW5hZ2VyIHJlcXVpcmVkKVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLnVzZVNjcm9sbFZhbHVlcyBVc2Ugc2Nyb2xsIHZhbHVlcyAoc2Nyb2xsSGVpZ2h0KSBpbnN0ZWFkIG9mIGNsaWVudEhlaWdodCBmb3IgdGhlIGhlaWdodCBjYWxjdWxhdGlvblxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IG9wZW5CeURlZmF1bHQgT3BlbiB0aGUgZGV0YWlscyBieSBkZWZhdWx0XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGNvbnRhaW5lcjogXCJwYWRkaW5nXCIsXG5cdFx0XHR9LFxuXHRcdFx0ZmVhdHVyZXM6IHtcblx0XHRcdFx0YWNjb3JkaW9uOiB0cnVlLFxuXHRcdFx0XHRwZXJzaXN0U3RhdGU6IHRydWUsXG5cdFx0XHRcdHVzZVNjcm9sbFZhbHVlczogZmFsc2UsXG5cdFx0XHR9LFxuXHRcdFx0b3BlbkJ5RGVmYXVsdDogZmFsc2UsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdFN0YXRlRnJvbUhvc3RDb25maWcuY2FsbCh0aGlzKTtcblx0XHRpbml0UmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJvcGVuQnlEZWZhdWx0XCIpKSB7XG5cdFx0XHR0aGlzLm9wZW4oKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cdFx0dXBkYXRlUmVzaXplT2JzZXJ2ZXJPYnNlcnZhdGlvbi5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0NvbGxhcHNlfVxuXHQgKi9cblx0dG9nZ2xlKCkge1xuXHRcdGlmICh0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpIHtcblx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5vcGVuKCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0Nsb3NlZCgpIHtcblx0XHRyZXR1cm4gIXRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5jb250YWlucyhcImFjdGl2ZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aXNPcGVuKCkge1xuXHRcdHJldHVybiAhdGhpcy5pc0Nsb3NlZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE9wZW4gdGhlIGNvbGxhcHNlXG5cdCAqIEByZXR1cm4ge0NvbGxhcHNlfVxuXHQgKiBAZmlyZXMgbW9uc3Rlci1jb2xsYXBzZS1iZWZvcmUtb3BlbiBUaGlzIGV2ZW50IGlzIGZpcmVkIGJlZm9yZSB0aGUgY29sbGFwc2UgaXMgb3BlbmVkLlxuXHQgKiBAZmlyZXMgbW9uc3Rlci1jb2xsYXBzZS1vcGVuIFRoaXMgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgdGhlIGNvbGxhcHNlIGlzIG9wZW5lZC5cblx0ICovXG5cdG9wZW4oKSB7XG5cdFx0bGV0IG5vZGU7XG5cdFx0aWYgKHRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5jb250YWlucyhcImFjdGl2ZVwiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1cIiArIHRoaXNbbmFtZVN5bWJvbF0gKyBcIi1iZWZvcmUtb3BlblwiLCB7fSk7XG5cblx0XHRhZGp1c3RIZWlnaHQuY2FsbCh0aGlzKTtcblx0XHR0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuXG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuYWNjb3JkaW9uXCIpID09PSB0cnVlKSB7XG5cdFx0XHRub2RlID0gdGhpcztcblx0XHRcdHdoaWxlIChub2RlLm5leHRFbGVtZW50U2libGluZyBpbnN0YW5jZW9mIENvbGxhcHNlKSB7XG5cdFx0XHRcdG5vZGUgPSBub2RlLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdFx0bm9kZS5jbG9zZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRub2RlID0gdGhpcztcblx0XHRcdHdoaWxlIChub2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgaW5zdGFuY2VvZiBDb2xsYXBzZSkge1xuXHRcdFx0XHRub2RlID0gbm9kZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuXHRcdFx0XHRub2RlLmNsb3NlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dXBkYXRlU3RhdGVDb25maWcuY2FsbCh0aGlzKTtcblx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1cIiArIHRoaXNbbmFtZVN5bWJvbF0gKyBcIi1vcGVuXCIsIHt9KTtcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcIm92ZXJmbG93LWhpZGRlblwiKTtcblx0XHRcdFx0fSwgNTAwKTtcblx0XHRcdH0sIDApO1xuXHRcdH0sIDApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2UgdGhlIGNvbGxhcHNlXG5cdCAqIEByZXR1cm4ge0NvbGxhcHNlfVxuXHQgKiBAZmlyZXMgbW9uc3Rlci1jb2xsYXBzZS1iZWZvcmUtY2xvc2UgVGhpcyBldmVudCBpcyBmaXJlZCBiZWZvcmUgdGhlIGNvbGxhcHNlIGlzIGNsb3NlZC5cblx0ICogQGZpcmVzIG1vbnN0ZXItY29sbGFwc2UtY2xvc2VkIFRoaXMgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgdGhlIGNvbGxhcHNlIGlzIGNsb3NlZC5cblx0ICovXG5cdGNsb3NlKCkge1xuXHRcdGlmICghdGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLVwiICsgdGhpc1tuYW1lU3ltYm9sXSArIFwiLWJlZm9yZS1jbG9zZVwiLCB7fSk7XG5cdFx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcIm92ZXJmbG93LWhpZGRlblwiKTtcblxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR1cGRhdGVTdGF0ZUNvbmZpZy5jYWxsKHRoaXMpO1xuXHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLVwiICsgdGhpc1tuYW1lU3ltYm9sXSArIFwiLWNsb3NlZFwiLCB7fSk7XG5cdFx0XHR9LCAwKTtcblx0XHR9LCAwKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1jb2xsYXBzZVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0FycmF5PENTU1N0eWxlU2hlZXQ+fVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtDb2xsYXBzZVN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGluc2VydGVkIGludG8gYSBkb2N1bWVudCwgaW5jbHVkaW5nIGludG8gYSBzaGFkb3cgdHJlZS5cblx0ICogQHJldHVybiB7Q29sbGFwc2V9XG5cdCAqIEBmaXJlcyBtb25zdGVyLWNvbGxhcHNlLWFkanVzdC1oZWlnaHQgVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSBoZWlnaHQgaXMgYWRqdXN0ZWQuIEFzIGEgZGV0YWlsLCB0aGUgaGVpZ2h0IGlzIHBhc3NlZC5cblx0ICovXG5cdGFkanVzdEhlaWdodCgpIHtcblx0XHRhZGp1c3RIZWlnaHQuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiBhZGp1c3RIZWlnaHQoKSB7XG5cdGxldCBoZWlnaHQgPSAwO1xuXG5cdGlmICh0aGlzW2RldGFpbHNDb250YWluZXJFbGVtZW50U3ltYm9sXSkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnVzZVNjcm9sbFZhbHVlc1wiKSkge1xuXHRcdFx0aGVpZ2h0ICs9IHRoaXNbZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRTeW1ib2xdLnNjcm9sbEhlaWdodDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aGVpZ2h0ICs9IHRoaXNbZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRTeW1ib2xdLmNsaWVudEhlaWdodDtcblx0XHR9XG5cdH1cblxuXHRpZiAodGhpc1tkZXRhaWxzRGVjb0VsZW1lbnRTeW1ib2xdKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMudXNlU2Nyb2xsVmFsdWVzXCIpKSB7XG5cdFx0XHRoZWlnaHQgKz0gdGhpc1tkZXRhaWxzRGVjb0VsZW1lbnRTeW1ib2xdLnNjcm9sbEhlaWdodDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aGVpZ2h0ICs9IHRoaXNbZGV0YWlsc0RlY29FbGVtZW50U3ltYm9sXS5jbGllbnRIZWlnaHQgKyAxO1xuXHRcdH1cblx0fVxuXG5cdGlmIChoZWlnaHQgPT09IDApIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy51c2VTY3JvbGxWYWx1ZXNcIikpIHtcblx0XHRcdGhlaWdodCA9IHRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdLnNjcm9sbEhlaWdodDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aGVpZ2h0ID0gdGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xpZW50SGVpZ2h0O1xuXHRcdH1cblxuXHRcdGlmIChoZWlnaHQgPT09IDApIHtcblx0XHRcdGhlaWdodCA9IFwiYXV0b1wiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRoZWlnaHQgKz0gXCJweFwiO1xuXHR9XG5cblx0dGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uc3R5bGUuc2V0UHJvcGVydHkoXG5cdFx0XCItLW1vbnN0ZXItaGVpZ2h0XCIsXG5cdFx0aGVpZ2h0LFxuXHRcdFwiaW1wb3J0YW50XCIsXG5cdCk7XG5cblx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1cIiArIHRoaXNbbmFtZVN5bWJvbF0gKyBcIi1hZGp1c3QtaGVpZ2h0XCIsIHtcblx0XHRoZWlnaHQsXG5cdH0pO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVSZXNpemVPYnNlcnZlck9ic2VydmF0aW9uKCkge1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5kaXNjb25uZWN0KCk7XG5cblx0Y29uc3Qgc2xvdHRlZE5vZGVzID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcyk7XG5cdHNsb3R0ZWROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZShub2RlKTtcblx0fSk7XG5cblx0aWYgKHRoaXNbZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZSh0aGlzW2RldGFpbHNDb250YWluZXJFbGVtZW50U3ltYm9sXSk7XG5cdH1cblxuXHR0aGlzLmFkanVzdEhlaWdodCgpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdGluaXRTbG90Q2hhbmdlZEhhbmRsZXIuY2FsbCh0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIGluaXRTbG90Q2hhbmdlZEhhbmRsZXIoKSB7XG5cdHRoaXNbZGV0YWlsc1Nsb3RFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwic2xvdGNoYW5nZVwiLCAoKSA9PiB7XG5cdFx0dXBkYXRlUmVzaXplT2JzZXJ2ZXJPYnNlcnZhdGlvbi5jYWxsKHRoaXMpO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdXCIsXG5cdCk7XG5cdHRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9ZGV0YWlsXVwiLFxuXHQpO1xuXHR0aGlzW2RldGFpbHNTbG90RWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcInNsb3RcIik7XG5cdHRoaXNbZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9Y29udGFpbmVyXVwiLFxuXHQpO1xuXHR0aGlzW2RldGFpbHNEZWNvRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1kZWNvXVwiLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldENvbmZpZ0tleSgpIHtcblx0cmV0dXJuIGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5KHRoaXNbbmFtZVN5bWJvbF0sIHRoaXMuaWQsIFwic3RhdGVcIik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdXBkYXRlU3RhdGVDb25maWcoKSB7XG5cdGlmICghdGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wZXJzaXN0U3RhdGVcIikpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoIXRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXHRjb25zdCBob3N0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm1vbnN0ZXItaG9zdFwiKTtcblx0aWYgKCEoaG9zdCAmJiB0aGlzLmlkKSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IGNvbmZpZ0tleSA9IGdldENvbmZpZ0tleS5jYWxsKHRoaXMpO1xuXG5cdHRyeSB7XG5cdFx0aG9zdC5zZXRDb25maWcoY29uZmlnS2V5LCB0aGlzLmlzT3BlbigpKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBTdHJpbmcoZXJyb3IpKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICovXG5mdW5jdGlvbiBpbml0U3RhdGVGcm9tSG9zdENvbmZpZygpIHtcblx0aWYgKCF0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnBlcnNpc3RTdGF0ZVwiKSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXHRjb25zdCBob3N0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm1vbnN0ZXItaG9zdFwiKTtcblxuXHRpZiAoIShob3N0ICYmIHRoaXMuaWQpKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG5cdH1cblxuXHRjb25zdCBjb25maWdLZXkgPSBnZXRDb25maWdLZXkuY2FsbCh0aGlzKTtcblx0cmV0dXJuIGhvc3Rcblx0XHQuZ2V0Q29uZmlnKGNvbmZpZ0tleSlcblx0XHQudGhlbigoc3RhdGUpID0+IHtcblx0XHRcdGlmIChzdGF0ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHR0aGlzLm9wZW4oKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGVycm9yLnRvU3RyaW5nKCkpO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRSZXNpemVPYnNlcnZlcigpIHtcblx0Ly8gYWdhaW5zdCBmbGlja2VyaW5nXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG5cdFx0aWYgKHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gaW5zdGFuY2VvZiBEZWFkTWFuc1N3aXRjaCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXS50b3VjaCgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gPSBuZXcgRGVhZE1hbnNTd2l0Y2goMjAwLCAoKSA9PiB7XG5cdFx0XHRjaGVja0FuZFJlYXJyYW5nZUNvbnRlbnQuY2FsbCh0aGlzKTtcblx0XHR9KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQW5kUmVhcnJhbmdlQ29udGVudCgpIHtcblx0dGhpcy5hZGp1c3RIZWlnaHQoKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCIgY2xhc3M9XCJvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJkZXRhaWxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjbGFzc2VzLmNvbnRhaW5lclwiIHBhcnQ9XCJjb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWNvLWxpbmVcIiBkYXRhLW1vbnN0ZXItcm9sZT1cImRlY29cIiBwYXJ0PVwiZGVjb1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChDb2xsYXBzZSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgRGV0YWlsc1N0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2RldGFpbHMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfQlVUVE9OX0xBQkVMIH0gZnJvbSBcIi4uL2hvc3QvY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleSB9IGZyb20gXCIuLi9ob3N0L3V0aWwubWpzXCI7XG5pbXBvcnQgeyBDb2xsYXBzZSwgbmFtZVN5bWJvbCB9IGZyb20gXCIuL2NvbGxhcHNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBEZXRhaWxzIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGJ1dHRvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJidXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBidXR0b25FdmVudEhhbmRsZXJTeW1ib2wgPSBTeW1ib2woXCJidXR0b25FdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQSBEZXRhaWxzIGNvbXBvbmVudFxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2xheW91dC9kZXRhaWxzL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2xheW91dC9kZXRhaWxzLXNpbXBsZVxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbGF5b3V0L2RldGFpbHMtd2l0aC1sYWJlbFxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbGF5b3V0L2RldGFpbHMtYXMtYWNjb3JkaW9uXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9sYXlvdXQvZGV0YWlscy13aXRoLXlvdXItb3duLWRlc2lnblxuICpcbiAqIEBzaW5jZSAzLjc0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIHNpbXBsZSBidXQgY29vbCBkZXRhaWwgY29tcG9uZW50LiBUaGlzIGlzIGJhc2VkIG9uIHRoZSBjb2xsYXBzZSBjb21wb25lbnQgYW5kIGV4dGVuZHMgaXQgd2l0aCBhIGJ1dHRvbi5cbiAqIEBzdW1tYXJ5IFlvdSBjYW4gYWxzbyBlYXNpbHkgYnVpbGQgYW4gYWNjb3JkaW9uIGZyb20gdGhlIGNvbXBvbmVudC5cbiAqL1xuY2xhc3MgRGV0YWlscyBleHRlbmRzIENvbGxhcHNlIHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvbGF5b3V0L2RldGFpbHNAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdC8vIHRoZSBuYW1lIGlzIG9ubHkgdXNlZCBmb3IgdGhlIGhvc3QgY29uZmlnIGFuZCB0aGUgZXZlbnQgbmFtZVxuXHRcdHRoaXNbbmFtZVN5bWJvbF0gPSBcImRldGFpbHNcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIFRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGJ1dHRvbiBCdXR0b24gY29uZmlndXJhdGlvblxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYnV0dG9uLmxhYmVsIEJ1dHRvbiBsYWJlbFxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0bGFiZWxzOiB7XG5cdFx0XHRcdGJ1dHRvbjogXCJEZXRhaWxzXCIsXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdEJ1dHRvbkxhYmVsLmNhbGwodGhpcyk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Y29uc3QgY29udGFpbkRvY3VtZW50ID0gdGhpcy5zaGFkb3dSb290O1xuXG5cdFx0aWYgKGNvbnRhaW5Eb2N1bWVudCAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc3QgcHJldmlvdXNFbGVtZW50ID0gdGhpcy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuXHRcdFx0aWYgKHByZXZpb3VzRWxlbWVudCAmJiBwcmV2aW91c0VsZW1lbnQudGFnTmFtZSA9PT0gXCJNT05TVEVSLURFVEFJTFNcIikge1xuXHRcdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLnN0eWxlLmJvcmRlclRvcCA9IFwiMFwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItZGV0YWlsc1wiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0FycmF5PENTU1N0eWxlU2hlZXQ+fVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0Y29uc3QgY3NzID0gc3VwZXIuZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXHRcdGNzcy5wdXNoKERldGFpbHNTdHlsZVNoZWV0KTtcblx0XHRyZXR1cm4gY3NzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWJ1dHRvbl1cIixcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW2J1dHRvbkV2ZW50SGFuZGxlclN5bWJvbF0gPSAoZXZlbnQpID0+IHtcblx0XHR0aGlzLnRvZ2dsZSgpO1xuXHR9O1xuXG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcImNsaWNrXCIsXG5cdFx0dGhpc1tidXR0b25FdmVudEhhbmRsZXJTeW1ib2xdLFxuXHQpO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGluaXRCdXR0b25MYWJlbCgpIHtcblx0bGV0IGxhYmVsO1xuXHRjb25zdCBzZXRMYWJlbCA9IGZhbHNlO1xuXHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0JVVFRPTl9MQUJFTCkpIHtcblx0XHRsYWJlbCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9CVVRUT05fTEFCRUwpO1xuXHR9IGVsc2Uge1xuXHRcdGxhYmVsID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMuYnV0dG9uXCIsIFwiRGV0YWlsc1wiKTtcblx0fVxuXG5cdGlmICghaXNTdHJpbmcobGFiZWwpKSB7XG5cdFx0bGFiZWwgPSBcIlwiO1xuXHR9XG5cblx0aWYgKGxhYmVsID09PSBcIlwiKSB7XG5cdFx0bGFiZWwgPSB0aGlzLmlubmVyVGV4dDtcblx0fVxuXG5cdGxhYmVsID0gbGFiZWwudHJpbSgpO1xuXG5cdGlmIChsYWJlbCA9PT0gXCJcIikge1xuXHRcdGxhYmVsID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMuYnV0dG9uXCIsIFwiRGV0YWlsc1wiKTtcblx0fVxuXG5cdGlmIChsYWJlbC5sZW5ndGggPiAxMDApIHtcblx0XHRsYWJlbCA9IGAke2xhYmVsLnN1YnN0cmluZygwLCA5OSl9XHUyMDI2YDtcblx0fVxuXG5cdHRoaXMuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9CVVRUT05fTEFCRUwsIGxhYmVsKTtcblx0dGhpcy5zZXRPcHRpb24oXCJsYWJlbHMuYnV0dG9uXCIsIGxhYmVsKTtcblxuXHRyZXR1cm4gbGFiZWw7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0Q29uZmlnS2V5KCkge1xuXHRyZXR1cm4gZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkoXCJkZXRhaWxzXCIsIHRoaXMuaWQsIFwic3RhdGVcIik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIGNsYXNzPVwib3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3VtbWFyeVwiIHBhcnQ9XCJzdW1tYXJ5XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBwYXJ0PVwiYnV0dG9uXCIgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuYnV0dG9uIHwgZGVmYXVsdDpjbGljayBtZVwiPmNsaWNrIG1lXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJkZXRhaWxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjbGFzc2VzLmNvbnRhaW5lclwiIHBhcnQ9XCJjb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNsb3QgcGFydD1cInNsb3RcIj48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwiZGVjby1saW5lXCIgY2xhc3M9XCJkZWNvLWxpbmVcIiBkYXRhLW1vbnN0ZXItcm9sZT1cImRlY29cIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoRGV0YWlscyk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgRGV0YWlscyBhcyBOZXdEZXRhaWxzIH0gZnJvbSBcIi4uL2xheW91dC9kZXRhaWxzLm1qc1wiO1xuZXhwb3J0IHsgRGV0YWlscyB9O1xuXG4vKipcbiAqIEBzaW5jZSAxLjEwLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSAzLjY0LjAgdXNlIHtAbGluayBNb25zdGVyLkNvbXBvbmVudHMuTGF5b3V0LkRldGFpbHN9XG4gKi9cbmNsYXNzIERldGFpbHMgZXh0ZW5kcyBOZXdEZXRhaWxzIHt9XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgcmFuZG9tIH0gZnJvbSBcIi4uL21hdGgvcmFuZG9tLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsIH0gZnJvbSBcIi4vZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgSUQgfSBmcm9tIFwiLi9pZC5tanNcIjtcblxuZXhwb3J0IHsgUmFuZG9tSUQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge251bWJlcn1cbiAqL1xubGV0IGludGVybmFsQ291bnRlciA9IDA7XG5cbi8qKlxuICogVGhlIGBSYW5kb21JRGAgY2xhc3MgcHJvdmlkZXMgYSB1bmlxdWUgSUQgZm9yIGFuIGl0ZW0uXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBjbGFzcyB0byBnZW5lcmF0ZSByYW5kb20gbnVtYmVyc1xuICovXG5jbGFzcyBSYW5kb21JRCBleHRlbmRzIElEIHtcblx0LyoqXG5cdCAqIGNyZWF0ZSBuZXcgb2JqZWN0XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aW50ZXJuYWxDb3VudGVyICs9IDE7XG5cblx0XHR0aGlzLmlkID1cblx0XHRcdGdldEdsb2JhbCgpXG5cdFx0XHRcdC5idG9hKHJhbmRvbSgxLCAxMDAwMCkpXG5cdFx0XHRcdC5yZXBsYWNlKC89L2csIFwiXCIpXG5cdFx0XHRcdC8qKiBObyBudW1iZXJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIElELCBiZWNhdXNlIG9mIHBvc3NpYmxlIHByb2JsZW1zIHdpdGggRE9NICovXG5cdFx0XHRcdC5yZXBsYWNlKC9eWzAtOV0rLywgXCJYXCIpICsgaW50ZXJuYWxDb3VudGVyO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgcmFuZG9tIH0gZnJvbSBcIi4uL21hdGgvcmFuZG9tLm1qc1wiO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tIFwiLi9pcy5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4vZ2xvYmFsLm1qc1wiO1xuXG5leHBvcnQgeyBVVUlEIH07XG5cbi8qKlxuICogVGhlIFVVSUQgY2xhc3MgbWFrZXMgaXQgcG9zc2libGUgdG8gZ2V0IGEgdW5pcXVlIFVVSUQgZm9yIGFuIG9iamVjdC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWRcbiAqL1xuY2xhc3MgVVVJRCBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRsZXQgdXVpZCA9IGNyZWF0ZVdpdGhDcnlwdG8oKTtcblxuXHRcdGlmICh1dWlkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHV1aWQgPSBjcmVhdGVXaXRoUmFuZG9tKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHV1aWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWRcIik7XG5cdFx0fVxuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHR2YWx1ZTogdXVpZCxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXVtcInZhbHVlXCJdO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVdpdGhSYW5kb20oKSB7XG5cdHJldHVybiBcInh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eFwiLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcblx0XHRjb25zdCByID0gKHJhbmRvbSgwLCA2NTAwMCkgKiAxNikgfCAwO1xuXHRcdGNvbnN0IHYgPSBjID09PSBcInhcIiA/IHIgOiAociAmIDB4MykgfCAweDg7XG5cdFx0cmV0dXJuIHYudG9TdHJpbmcoMTYpWzBdO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlV2l0aENyeXB0bygpIHtcblx0Y29uc3QgY3J5cHQgPSBnZXRHbG9iYWxPYmplY3QoXCJjcnlwdG9cIik7XG5cdGlmICghaXNPYmplY3QoY3J5cHQpKSByZXR1cm47XG5cdGlmICh0eXBlb2YgY3J5cHQ/LltcInJhbmRvbVVVSURcIl0pIHJldHVybjtcblx0cmV0dXJuIGNyeXB0LnJhbmRvbVVVSUQoKTtcbn1cbiIsICJpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHtcblxuICAgIChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IHNheXN3aG8gPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudCwgdGVtLFxuICAgICAgICAgICAgICAgIE0gPSB1YS5tYXRjaCgvKG9wZXJhfGNocm9tZXxzYWZhcml8ZmlyZWZveHxtc2llfHRyaWRlbnQoPz1cXC8pKVxcLz9cXHMqKFxcZCspL2kpIHx8IFtdO1xuICAgICAgICAgICAgaWYgKC90cmlkZW50L2kudGVzdChNWzFdKSkge1xuICAgICAgICAgICAgICAgIHRlbSA9IC9cXGJydlsgOl0rKFxcZCspL2cuZXhlYyh1YSkgfHwgW107XG4gICAgICAgICAgICAgICAgcmV0dXJuICdJRSAnICsgKHRlbVsxXSB8fCAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoTVsxXSA9PT0gJ0Nocm9tZScpIHtcbiAgICAgICAgICAgICAgICB0ZW0gPSB1YS5tYXRjaCgvXFxiKE9QUnxFZGdlKVxcLyhcXGQrKS8pO1xuICAgICAgICAgICAgICAgIGlmICh0ZW0gIT0gbnVsbCkgcmV0dXJuIHRlbS5zbGljZSgxKS5qb2luKCcgJykucmVwbGFjZSgnT1BSJywgJ09wZXJhJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBNID0gTVsyXSA/IFtNWzFdLCBNWzJdXSA6IFtuYXZpZ2F0b3IuYXBwTmFtZSwgbmF2aWdhdG9yLmFwcFZlcnNpb24sICctPyddO1xuICAgICAgICAgICAgaWYgKCh0ZW0gPSB1YS5tYXRjaCgvdmVyc2lvblxcLyhcXGQrKS9pKSkgIT0gbnVsbCkgTS5zcGxpY2UoMSwgMSwgdGVtWzFdKTtcbiAgICAgICAgICAgIHJldHVybiBNLmpvaW4oJyAnKTtcbiAgICAgICAgfSkoKTtcblxuXG4gICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaDEnKVxuICAgICAgICBlbGVtZW50LmlubmVySFRNTCArPSBcIiBcIiArIHNheXN3aG87XG5cbiAgICB9KSgpO1xuXG5cbn1cbiIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5cbi8vIGxhbmd1YWdlPWh0bWxcbmxldCBodG1sMSA9IGBcbiAgICA8bW9uc3Rlci10YWJzIGlkPVwibXl0YWJzXCI+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbD1cIlRBQjFcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgRGFzIGlzdCB0YWIgMVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbD1cIlRBQjJcIj5cbiAgICAgICAgICAgIERhcyBpc3QgdGFiIDJcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICBEYXMgaXN0IHRhYiAzIG9obmUgYnV0dG9uXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PjwvZGl2PlxuICAgIDwvbW9uc3Rlci10YWJzPlxuYDtcblxubGV0IFRhYnM7XG5cbmRlc2NyaWJlKCdUYWJzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuXG4gICAgICAgICAgICBpZiAoIWdsb2JhbFsnY3J5cHRvJ10pIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBDcnlwdG8gPSBtWydDcnlwdG8nXTtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsWydjcnlwdG8nXSA9IG5ldyBDcnlwdG8oKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbGF5b3V0L3RhYnMubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBUYWJzID0gbVsnVGFicyddO1xuICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpPT57XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIGJ1dHRvbnMgYW5kIHRhYnMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215dGFicycpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0YWJzKS5pcy5pbnN0YW5jZW9mKFRhYnMpO1xuXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5hdiA9IHRhYnMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCduYXYnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1dHRvbnMgPSB0YWJzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uW3BhcnQ9YnV0dG9uXScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGJ1dHRvbnNbMF0pLmlzLmluc3RhbmNlb2YoSFRNTEJ1dHRvbkVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG5hdi5oYXNDaGlsZE5vZGVzKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoYnV0dG9ucy5sZW5ndGgpLnRvLmJlLmVxdWFsKDQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAxMDApXG5cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX25hbWUgPSAodGFyZ2V0LCB2YWx1ZSkgPT4gX19kZWZQcm9wKHRhcmdldCwgXCJuYW1lXCIsIHsgdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbnZhciBfX2NvbW1vbkpTID0gKGNiLCBtb2QpID0+IGZ1bmN0aW9uIF9fcmVxdWlyZSgpIHtcbiAgcmV0dXJuIG1vZCB8fCAoMCwgY2JbX19nZXRPd25Qcm9wTmFtZXMoY2IpWzBdXSkoKG1vZCA9IHsgZXhwb3J0czoge30gfSkuZXhwb3J0cywgbW9kKSwgbW9kLmV4cG9ydHM7XG59O1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xuXG4vLyAoZGlzYWJsZWQpOnV0aWxcbnZhciByZXF1aXJlX3V0aWwgPSBfX2NvbW1vbkpTKHtcbiAgXCIoZGlzYWJsZWQpOnV0aWxcIigpIHtcbiAgfVxufSk7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2luZGV4LmpzXG52YXIgdXRpbHNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQodXRpbHNfZXhwb3J0cywge1xuICBhZGRDaGFpbmFibGVNZXRob2Q6ICgpID0+IGFkZENoYWluYWJsZU1ldGhvZCxcbiAgYWRkTGVuZ3RoR3VhcmQ6ICgpID0+IGFkZExlbmd0aEd1YXJkLFxuICBhZGRNZXRob2Q6ICgpID0+IGFkZE1ldGhvZCxcbiAgYWRkUHJvcGVydHk6ICgpID0+IGFkZFByb3BlcnR5LFxuICBjaGVja0Vycm9yOiAoKSA9PiBjaGVja19lcnJvcl9leHBvcnRzLFxuICBjb21wYXJlQnlJbnNwZWN0OiAoKSA9PiBjb21wYXJlQnlJbnNwZWN0LFxuICBlcWw6ICgpID0+IGRlZXBfZXFsX2RlZmF1bHQsXG4gIGV4cGVjdFR5cGVzOiAoKSA9PiBleHBlY3RUeXBlcyxcbiAgZmxhZzogKCkgPT4gZmxhZyxcbiAgZ2V0QWN0dWFsOiAoKSA9PiBnZXRBY3R1YWwsXG4gIGdldE1lc3NhZ2U6ICgpID0+IGdldE1lc3NhZ2UyLFxuICBnZXROYW1lOiAoKSA9PiBnZXROYW1lLFxuICBnZXRPcGVyYXRvcjogKCkgPT4gZ2V0T3BlcmF0b3IsXG4gIGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzOiAoKSA9PiBnZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcyxcbiAgZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9sczogKCkgPT4gZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scyxcbiAgZ2V0UGF0aEluZm86ICgpID0+IGdldFBhdGhJbmZvLFxuICBoYXNQcm9wZXJ0eTogKCkgPT4gaGFzUHJvcGVydHksXG4gIGluc3BlY3Q6ICgpID0+IGluc3BlY3QyLFxuICBpc05hTjogKCkgPT4gaXNOYU4yLFxuICBpc051bWVyaWM6ICgpID0+IGlzTnVtZXJpYyxcbiAgaXNQcm94eUVuYWJsZWQ6ICgpID0+IGlzUHJveHlFbmFibGVkLFxuICBpc1JlZ0V4cDogKCkgPT4gaXNSZWdFeHAyLFxuICBvYmpEaXNwbGF5OiAoKSA9PiBvYmpEaXNwbGF5LFxuICBvdmVyd3JpdGVDaGFpbmFibGVNZXRob2Q6ICgpID0+IG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCxcbiAgb3ZlcndyaXRlTWV0aG9kOiAoKSA9PiBvdmVyd3JpdGVNZXRob2QsXG4gIG92ZXJ3cml0ZVByb3BlcnR5OiAoKSA9PiBvdmVyd3JpdGVQcm9wZXJ0eSxcbiAgcHJveGlmeTogKCkgPT4gcHJveGlmeSxcbiAgdGVzdDogKCkgPT4gdGVzdCxcbiAgdHJhbnNmZXJGbGFnczogKCkgPT4gdHJhbnNmZXJGbGFncyxcbiAgdHlwZTogKCkgPT4gdHlwZVxufSk7XG5cbi8vIG5vZGVfbW9kdWxlcy9jaGVjay1lcnJvci9pbmRleC5qc1xudmFyIGNoZWNrX2Vycm9yX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KGNoZWNrX2Vycm9yX2V4cG9ydHMsIHtcbiAgY29tcGF0aWJsZUNvbnN0cnVjdG9yOiAoKSA9PiBjb21wYXRpYmxlQ29uc3RydWN0b3IsXG4gIGNvbXBhdGlibGVJbnN0YW5jZTogKCkgPT4gY29tcGF0aWJsZUluc3RhbmNlLFxuICBjb21wYXRpYmxlTWVzc2FnZTogKCkgPT4gY29tcGF0aWJsZU1lc3NhZ2UsXG4gIGdldENvbnN0cnVjdG9yTmFtZTogKCkgPT4gZ2V0Q29uc3RydWN0b3JOYW1lLFxuICBnZXRNZXNzYWdlOiAoKSA9PiBnZXRNZXNzYWdlXG59KTtcbmZ1bmN0aW9uIGlzRXJyb3JJbnN0YW5jZShvYmopIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEVycm9yIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSBcIltvYmplY3QgRXJyb3JdXCI7XG59XG5fX25hbWUoaXNFcnJvckluc3RhbmNlLCBcImlzRXJyb3JJbnN0YW5jZVwiKTtcbmZ1bmN0aW9uIGlzUmVnRXhwKG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09IFwiW29iamVjdCBSZWdFeHBdXCI7XG59XG5fX25hbWUoaXNSZWdFeHAsIFwiaXNSZWdFeHBcIik7XG5mdW5jdGlvbiBjb21wYXRpYmxlSW5zdGFuY2UodGhyb3duLCBlcnJvckxpa2UpIHtcbiAgcmV0dXJuIGlzRXJyb3JJbnN0YW5jZShlcnJvckxpa2UpICYmIHRocm93biA9PT0gZXJyb3JMaWtlO1xufVxuX19uYW1lKGNvbXBhdGlibGVJbnN0YW5jZSwgXCJjb21wYXRpYmxlSW5zdGFuY2VcIik7XG5mdW5jdGlvbiBjb21wYXRpYmxlQ29uc3RydWN0b3IodGhyb3duLCBlcnJvckxpa2UpIHtcbiAgaWYgKGlzRXJyb3JJbnN0YW5jZShlcnJvckxpa2UpKSB7XG4gICAgcmV0dXJuIHRocm93bi5jb25zdHJ1Y3RvciA9PT0gZXJyb3JMaWtlLmNvbnN0cnVjdG9yIHx8IHRocm93biBpbnN0YW5jZW9mIGVycm9yTGlrZS5jb25zdHJ1Y3RvcjtcbiAgfSBlbHNlIGlmICgodHlwZW9mIGVycm9yTGlrZSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZXJyb3JMaWtlID09PSBcImZ1bmN0aW9uXCIpICYmIGVycm9yTGlrZS5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gdGhyb3duLmNvbnN0cnVjdG9yID09PSBlcnJvckxpa2UgfHwgdGhyb3duIGluc3RhbmNlb2YgZXJyb3JMaWtlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbl9fbmFtZShjb21wYXRpYmxlQ29uc3RydWN0b3IsIFwiY29tcGF0aWJsZUNvbnN0cnVjdG9yXCIpO1xuZnVuY3Rpb24gY29tcGF0aWJsZU1lc3NhZ2UodGhyb3duLCBlcnJNYXRjaGVyKSB7XG4gIGNvbnN0IGNvbXBhcmlzb25TdHJpbmcgPSB0eXBlb2YgdGhyb3duID09PSBcInN0cmluZ1wiID8gdGhyb3duIDogdGhyb3duLm1lc3NhZ2U7XG4gIGlmIChpc1JlZ0V4cChlcnJNYXRjaGVyKSkge1xuICAgIHJldHVybiBlcnJNYXRjaGVyLnRlc3QoY29tcGFyaXNvblN0cmluZyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVyck1hdGNoZXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gY29tcGFyaXNvblN0cmluZy5pbmRleE9mKGVyck1hdGNoZXIpICE9PSAtMTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5fX25hbWUoY29tcGF0aWJsZU1lc3NhZ2UsIFwiY29tcGF0aWJsZU1lc3NhZ2VcIik7XG5mdW5jdGlvbiBnZXRDb25zdHJ1Y3Rvck5hbWUoZXJyb3JMaWtlKSB7XG4gIGxldCBjb25zdHJ1Y3Rvck5hbWUgPSBlcnJvckxpa2U7XG4gIGlmIChpc0Vycm9ySW5zdGFuY2UoZXJyb3JMaWtlKSkge1xuICAgIGNvbnN0cnVjdG9yTmFtZSA9IGVycm9yTGlrZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvckxpa2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNvbnN0cnVjdG9yTmFtZSA9IGVycm9yTGlrZS5uYW1lO1xuICAgIGlmIChjb25zdHJ1Y3Rvck5hbWUgPT09IFwiXCIpIHtcbiAgICAgIGNvbnN0IG5ld0NvbnN0cnVjdG9yTmFtZSA9IG5ldyBlcnJvckxpa2UoKS5uYW1lO1xuICAgICAgY29uc3RydWN0b3JOYW1lID0gbmV3Q29uc3RydWN0b3JOYW1lIHx8IGNvbnN0cnVjdG9yTmFtZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbnN0cnVjdG9yTmFtZTtcbn1cbl9fbmFtZShnZXRDb25zdHJ1Y3Rvck5hbWUsIFwiZ2V0Q29uc3RydWN0b3JOYW1lXCIpO1xuZnVuY3Rpb24gZ2V0TWVzc2FnZShlcnJvckxpa2UpIHtcbiAgbGV0IG1zZyA9IFwiXCI7XG4gIGlmIChlcnJvckxpa2UgJiYgZXJyb3JMaWtlLm1lc3NhZ2UpIHtcbiAgICBtc2cgPSBlcnJvckxpa2UubWVzc2FnZTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3JMaWtlID09PSBcInN0cmluZ1wiKSB7XG4gICAgbXNnID0gZXJyb3JMaWtlO1xuICB9XG4gIHJldHVybiBtc2c7XG59XG5fX25hbWUoZ2V0TWVzc2FnZSwgXCJnZXRNZXNzYWdlXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9mbGFnLmpzXG5mdW5jdGlvbiBmbGFnKG9iaiwga2V5LCB2YWx1ZSkge1xuICB2YXIgZmxhZ3MgPSBvYmouX19mbGFncyB8fCAob2JqLl9fZmxhZ3MgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZmxhZ3Nba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmbGFnc1trZXldO1xuICB9XG59XG5fX25hbWUoZmxhZywgXCJmbGFnXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy90ZXN0LmpzXG5mdW5jdGlvbiB0ZXN0KG9iaiwgYXJncykge1xuICB2YXIgbmVnYXRlID0gZmxhZyhvYmosIFwibmVnYXRlXCIpLCBleHByID0gYXJnc1swXTtcbiAgcmV0dXJuIG5lZ2F0ZSA/ICFleHByIDogZXhwcjtcbn1cbl9fbmFtZSh0ZXN0LCBcInRlc3RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL3R5cGUtZGV0ZWN0LmpzXG5mdW5jdGlvbiB0eXBlKG9iaikge1xuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBcInVuZGVmaW5lZFwiO1xuICB9XG4gIGlmIChvYmogPT09IG51bGwpIHtcbiAgICByZXR1cm4gXCJudWxsXCI7XG4gIH1cbiAgY29uc3Qgc3RyaW5nVGFnID0gb2JqW1N5bWJvbC50b1N0cmluZ1RhZ107XG4gIGlmICh0eXBlb2Ygc3RyaW5nVGFnID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHN0cmluZ1RhZztcbiAgfVxuICBjb25zdCB0eXBlMyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopLnNsaWNlKDgsIC0xKTtcbiAgcmV0dXJuIHR5cGUzO1xufVxuX19uYW1lKHR5cGUsIFwidHlwZVwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2Fzc2VydGlvbi1lcnJvci9pbmRleC5qc1xudmFyIGNhbkVsaWRlRnJhbWVzID0gXCJjYXB0dXJlU3RhY2tUcmFjZVwiIGluIEVycm9yO1xudmFyIEFzc2VydGlvbkVycm9yID0gY2xhc3MgX0Fzc2VydGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIkFzc2VydGlvbkVycm9yXCIpO1xuICB9XG4gIG1lc3NhZ2U7XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBcIkFzc2VydGlvbkVycm9yXCI7XG4gIH1cbiAgZ2V0IG9rKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gXCJVbnNwZWNpZmllZCBBc3NlcnRpb25FcnJvclwiLCBwcm9wcywgc3NmKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICBpZiAoY2FuRWxpZGVGcmFtZXMpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHNzZiB8fCBfQXNzZXJ0aW9uRXJyb3IpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wcykge1xuICAgICAgaWYgKCEoa2V5IGluIHRoaXMpKSB7XG4gICAgICAgIHRoaXNba2V5XSA9IHByb3BzW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHRvSlNPTihzdGFjaykge1xuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgb2s6IGZhbHNlLFxuICAgICAgc3RhY2s6IHN0YWNrICE9PSBmYWxzZSA/IHRoaXMuc3RhY2sgOiB2b2lkIDBcbiAgICB9O1xuICB9XG59O1xuXG4vLyBsaWIvY2hhaS91dGlscy9leHBlY3RUeXBlcy5qc1xuZnVuY3Rpb24gZXhwZWN0VHlwZXMob2JqLCB0eXBlcykge1xuICB2YXIgZmxhZ01zZyA9IGZsYWcob2JqLCBcIm1lc3NhZ2VcIik7XG4gIHZhciBzc2ZpID0gZmxhZyhvYmosIFwic3NmaVwiKTtcbiAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgb2JqID0gZmxhZyhvYmosIFwib2JqZWN0XCIpO1xuICB0eXBlcyA9IHR5cGVzLm1hcChmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIHQudG9Mb3dlckNhc2UoKTtcbiAgfSk7XG4gIHR5cGVzLnNvcnQoKTtcbiAgdmFyIHN0ciA9IHR5cGVzLm1hcChmdW5jdGlvbih0LCBpbmRleCkge1xuICAgIHZhciBhcnQgPSB+W1wiYVwiLCBcImVcIiwgXCJpXCIsIFwib1wiLCBcInVcIl0uaW5kZXhPZih0LmNoYXJBdCgwKSkgPyBcImFuXCIgOiBcImFcIjtcbiAgICB2YXIgb3IgPSB0eXBlcy5sZW5ndGggPiAxICYmIGluZGV4ID09PSB0eXBlcy5sZW5ndGggLSAxID8gXCJvciBcIiA6IFwiXCI7XG4gICAgcmV0dXJuIG9yICsgYXJ0ICsgXCIgXCIgKyB0O1xuICB9KS5qb2luKFwiLCBcIik7XG4gIHZhciBvYmpUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCk7XG4gIGlmICghdHlwZXMuc29tZShmdW5jdGlvbihleHBlY3RlZCkge1xuICAgIHJldHVybiBvYmpUeXBlID09PSBleHBlY3RlZDtcbiAgfSkpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBmbGFnTXNnICsgXCJvYmplY3QgdGVzdGVkIG11c3QgYmUgXCIgKyBzdHIgKyBcIiwgYnV0IFwiICsgb2JqVHlwZSArIFwiIGdpdmVuXCIsXG4gICAgICB2b2lkIDAsXG4gICAgICBzc2ZpXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGV4cGVjdFR5cGVzLCBcImV4cGVjdFR5cGVzXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9nZXRBY3R1YWwuanNcbmZ1bmN0aW9uIGdldEFjdHVhbChvYmosIGFyZ3MpIHtcbiAgcmV0dXJuIGFyZ3MubGVuZ3RoID4gNCA/IGFyZ3NbNF0gOiBvYmouX29iajtcbn1cbl9fbmFtZShnZXRBY3R1YWwsIFwiZ2V0QWN0dWFsXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2hlbHBlcnMuanNcbnZhciBhbnNpQ29sb3JzID0ge1xuICBib2xkOiBbXCIxXCIsIFwiMjJcIl0sXG4gIGRpbTogW1wiMlwiLCBcIjIyXCJdLFxuICBpdGFsaWM6IFtcIjNcIiwgXCIyM1wiXSxcbiAgdW5kZXJsaW5lOiBbXCI0XCIsIFwiMjRcIl0sXG4gIC8vIDUgJiA2IGFyZSBibGlua2luZ1xuICBpbnZlcnNlOiBbXCI3XCIsIFwiMjdcIl0sXG4gIGhpZGRlbjogW1wiOFwiLCBcIjI4XCJdLFxuICBzdHJpa2U6IFtcIjlcIiwgXCIyOVwiXSxcbiAgLy8gMTAtMjAgYXJlIGZvbnRzXG4gIC8vIDIxLTI5IGFyZSByZXNldHMgZm9yIDEtOVxuICBibGFjazogW1wiMzBcIiwgXCIzOVwiXSxcbiAgcmVkOiBbXCIzMVwiLCBcIjM5XCJdLFxuICBncmVlbjogW1wiMzJcIiwgXCIzOVwiXSxcbiAgeWVsbG93OiBbXCIzM1wiLCBcIjM5XCJdLFxuICBibHVlOiBbXCIzNFwiLCBcIjM5XCJdLFxuICBtYWdlbnRhOiBbXCIzNVwiLCBcIjM5XCJdLFxuICBjeWFuOiBbXCIzNlwiLCBcIjM5XCJdLFxuICB3aGl0ZTogW1wiMzdcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0YmxhY2s6IFtcIjMwOzFcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0cmVkOiBbXCIzMTsxXCIsIFwiMzlcIl0sXG4gIGJyaWdodGdyZWVuOiBbXCIzMjsxXCIsIFwiMzlcIl0sXG4gIGJyaWdodHllbGxvdzogW1wiMzM7MVwiLCBcIjM5XCJdLFxuICBicmlnaHRibHVlOiBbXCIzNDsxXCIsIFwiMzlcIl0sXG4gIGJyaWdodG1hZ2VudGE6IFtcIjM1OzFcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0Y3lhbjogW1wiMzY7MVwiLCBcIjM5XCJdLFxuICBicmlnaHR3aGl0ZTogW1wiMzc7MVwiLCBcIjM5XCJdLFxuICBncmV5OiBbXCI5MFwiLCBcIjM5XCJdXG59O1xudmFyIHN0eWxlcyA9IHtcbiAgc3BlY2lhbDogXCJjeWFuXCIsXG4gIG51bWJlcjogXCJ5ZWxsb3dcIixcbiAgYmlnaW50OiBcInllbGxvd1wiLFxuICBib29sZWFuOiBcInllbGxvd1wiLFxuICB1bmRlZmluZWQ6IFwiZ3JleVwiLFxuICBudWxsOiBcImJvbGRcIixcbiAgc3RyaW5nOiBcImdyZWVuXCIsXG4gIHN5bWJvbDogXCJncmVlblwiLFxuICBkYXRlOiBcIm1hZ2VudGFcIixcbiAgcmVnZXhwOiBcInJlZFwiXG59O1xudmFyIHRydW5jYXRvciA9IFwiXFx1MjAyNlwiO1xuZnVuY3Rpb24gY29sb3Jpc2UodmFsdWUsIHN0eWxlVHlwZSkge1xuICBjb25zdCBjb2xvciA9IGFuc2lDb2xvcnNbc3R5bGVzW3N0eWxlVHlwZV1dIHx8IGFuc2lDb2xvcnNbc3R5bGVUeXBlXSB8fCBcIlwiO1xuICBpZiAoIWNvbG9yKSB7XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGBcXHgxQlske2NvbG9yWzBdfW0ke1N0cmluZyh2YWx1ZSl9XFx4MUJbJHtjb2xvclsxXX1tYDtcbn1cbl9fbmFtZShjb2xvcmlzZSwgXCJjb2xvcmlzZVwiKTtcbmZ1bmN0aW9uIG5vcm1hbGlzZU9wdGlvbnMoe1xuICBzaG93SGlkZGVuID0gZmFsc2UsXG4gIGRlcHRoID0gMixcbiAgY29sb3JzID0gZmFsc2UsXG4gIGN1c3RvbUluc3BlY3QgPSB0cnVlLFxuICBzaG93UHJveHkgPSBmYWxzZSxcbiAgbWF4QXJyYXlMZW5ndGggPSBJbmZpbml0eSxcbiAgYnJlYWtMZW5ndGggPSBJbmZpbml0eSxcbiAgc2VlbiA9IFtdLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG4gIHRydW5jYXRlOiB0cnVuY2F0ZTIgPSBJbmZpbml0eSxcbiAgc3R5bGl6ZSA9IFN0cmluZ1xufSA9IHt9LCBpbnNwZWN0Mykge1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgIHNob3dIaWRkZW46IEJvb2xlYW4oc2hvd0hpZGRlbiksXG4gICAgZGVwdGg6IE51bWJlcihkZXB0aCksXG4gICAgY29sb3JzOiBCb29sZWFuKGNvbG9ycyksXG4gICAgY3VzdG9tSW5zcGVjdDogQm9vbGVhbihjdXN0b21JbnNwZWN0KSxcbiAgICBzaG93UHJveHk6IEJvb2xlYW4oc2hvd1Byb3h5KSxcbiAgICBtYXhBcnJheUxlbmd0aDogTnVtYmVyKG1heEFycmF5TGVuZ3RoKSxcbiAgICBicmVha0xlbmd0aDogTnVtYmVyKGJyZWFrTGVuZ3RoKSxcbiAgICB0cnVuY2F0ZTogTnVtYmVyKHRydW5jYXRlMiksXG4gICAgc2VlbixcbiAgICBpbnNwZWN0OiBpbnNwZWN0MyxcbiAgICBzdHlsaXplXG4gIH07XG4gIGlmIChvcHRpb25zLmNvbG9ycykge1xuICAgIG9wdGlvbnMuc3R5bGl6ZSA9IGNvbG9yaXNlO1xuICB9XG4gIHJldHVybiBvcHRpb25zO1xufVxuX19uYW1lKG5vcm1hbGlzZU9wdGlvbnMsIFwibm9ybWFsaXNlT3B0aW9uc1wiKTtcbmZ1bmN0aW9uIGlzSGlnaFN1cnJvZ2F0ZShjaGFyKSB7XG4gIHJldHVybiBjaGFyID49IFwiXFx1RDgwMFwiICYmIGNoYXIgPD0gXCJcXHVEQkZGXCI7XG59XG5fX25hbWUoaXNIaWdoU3Vycm9nYXRlLCBcImlzSGlnaFN1cnJvZ2F0ZVwiKTtcbmZ1bmN0aW9uIHRydW5jYXRlKHN0cmluZywgbGVuZ3RoLCB0YWlsID0gdHJ1bmNhdG9yKSB7XG4gIHN0cmluZyA9IFN0cmluZyhzdHJpbmcpO1xuICBjb25zdCB0YWlsTGVuZ3RoID0gdGFpbC5sZW5ndGg7XG4gIGNvbnN0IHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIGlmICh0YWlsTGVuZ3RoID4gbGVuZ3RoICYmIHN0cmluZ0xlbmd0aCA+IHRhaWxMZW5ndGgpIHtcbiAgICByZXR1cm4gdGFpbDtcbiAgfVxuICBpZiAoc3RyaW5nTGVuZ3RoID4gbGVuZ3RoICYmIHN0cmluZ0xlbmd0aCA+IHRhaWxMZW5ndGgpIHtcbiAgICBsZXQgZW5kID0gbGVuZ3RoIC0gdGFpbExlbmd0aDtcbiAgICBpZiAoZW5kID4gMCAmJiBpc0hpZ2hTdXJyb2dhdGUoc3RyaW5nW2VuZCAtIDFdKSkge1xuICAgICAgZW5kID0gZW5kIC0gMTtcbiAgICB9XG4gICAgcmV0dXJuIGAke3N0cmluZy5zbGljZSgwLCBlbmQpfSR7dGFpbH1gO1xuICB9XG4gIHJldHVybiBzdHJpbmc7XG59XG5fX25hbWUodHJ1bmNhdGUsIFwidHJ1bmNhdGVcIik7XG5mdW5jdGlvbiBpbnNwZWN0TGlzdChsaXN0LCBvcHRpb25zLCBpbnNwZWN0SXRlbSwgc2VwYXJhdG9yID0gXCIsIFwiKSB7XG4gIGluc3BlY3RJdGVtID0gaW5zcGVjdEl0ZW0gfHwgb3B0aW9ucy5pbnNwZWN0O1xuICBjb25zdCBzaXplID0gbGlzdC5sZW5ndGg7XG4gIGlmIChzaXplID09PSAwKVxuICAgIHJldHVybiBcIlwiO1xuICBjb25zdCBvcmlnaW5hbExlbmd0aCA9IG9wdGlvbnMudHJ1bmNhdGU7XG4gIGxldCBvdXRwdXQgPSBcIlwiO1xuICBsZXQgcGVlayA9IFwiXCI7XG4gIGxldCB0cnVuY2F0ZWQgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkgKz0gMSkge1xuICAgIGNvbnN0IGxhc3QgPSBpICsgMSA9PT0gbGlzdC5sZW5ndGg7XG4gICAgY29uc3Qgc2Vjb25kVG9MYXN0ID0gaSArIDIgPT09IGxpc3QubGVuZ3RoO1xuICAgIHRydW5jYXRlZCA9IGAke3RydW5jYXRvcn0oJHtsaXN0Lmxlbmd0aCAtIGl9KWA7XG4gICAgY29uc3QgdmFsdWUgPSBsaXN0W2ldO1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgPSBvcmlnaW5hbExlbmd0aCAtIG91dHB1dC5sZW5ndGggLSAobGFzdCA/IDAgOiBzZXBhcmF0b3IubGVuZ3RoKTtcbiAgICBjb25zdCBzdHJpbmcgPSBwZWVrIHx8IGluc3BlY3RJdGVtKHZhbHVlLCBvcHRpb25zKSArIChsYXN0ID8gXCJcIiA6IHNlcGFyYXRvcik7XG4gICAgY29uc3QgbmV4dExlbmd0aCA9IG91dHB1dC5sZW5ndGggKyBzdHJpbmcubGVuZ3RoO1xuICAgIGNvbnN0IHRydW5jYXRlZExlbmd0aCA9IG5leHRMZW5ndGggKyB0cnVuY2F0ZWQubGVuZ3RoO1xuICAgIGlmIChsYXN0ICYmIG5leHRMZW5ndGggPiBvcmlnaW5hbExlbmd0aCAmJiBvdXRwdXQubGVuZ3RoICsgdHJ1bmNhdGVkLmxlbmd0aCA8PSBvcmlnaW5hbExlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmICghbGFzdCAmJiAhc2Vjb25kVG9MYXN0ICYmIHRydW5jYXRlZExlbmd0aCA+IG9yaWdpbmFsTGVuZ3RoKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcGVlayA9IGxhc3QgPyBcIlwiIDogaW5zcGVjdEl0ZW0obGlzdFtpICsgMV0sIG9wdGlvbnMpICsgKHNlY29uZFRvTGFzdCA/IFwiXCIgOiBzZXBhcmF0b3IpO1xuICAgIGlmICghbGFzdCAmJiBzZWNvbmRUb0xhc3QgJiYgdHJ1bmNhdGVkTGVuZ3RoID4gb3JpZ2luYWxMZW5ndGggJiYgbmV4dExlbmd0aCArIHBlZWsubGVuZ3RoID4gb3JpZ2luYWxMZW5ndGgpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBvdXRwdXQgKz0gc3RyaW5nO1xuICAgIGlmICghbGFzdCAmJiAhc2Vjb25kVG9MYXN0ICYmIG5leHRMZW5ndGggKyBwZWVrLmxlbmd0aCA+PSBvcmlnaW5hbExlbmd0aCkge1xuICAgICAgdHJ1bmNhdGVkID0gYCR7dHJ1bmNhdG9yfSgke2xpc3QubGVuZ3RoIC0gaSAtIDF9KWA7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdHJ1bmNhdGVkID0gXCJcIjtcbiAgfVxuICByZXR1cm4gYCR7b3V0cHV0fSR7dHJ1bmNhdGVkfWA7XG59XG5fX25hbWUoaW5zcGVjdExpc3QsIFwiaW5zcGVjdExpc3RcIik7XG5mdW5jdGlvbiBxdW90ZUNvbXBsZXhLZXkoa2V5KSB7XG4gIGlmIChrZXkubWF0Y2goL15bYS16QS1aX11bYS16QS1aXzAtOV0qJC8pKSB7XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoa2V5KS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIikucmVwbGFjZSgvXFxcXFwiL2csICdcIicpLnJlcGxhY2UoLyheXCJ8XCIkKS9nLCBcIidcIik7XG59XG5fX25hbWUocXVvdGVDb21wbGV4S2V5LCBcInF1b3RlQ29tcGxleEtleVwiKTtcbmZ1bmN0aW9uIGluc3BlY3RQcm9wZXJ0eShba2V5LCB2YWx1ZV0sIG9wdGlvbnMpIHtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSAyO1xuICBpZiAodHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGtleSA9IHF1b3RlQ29tcGxleEtleShrZXkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBrZXkgIT09IFwibnVtYmVyXCIpIHtcbiAgICBrZXkgPSBgWyR7b3B0aW9ucy5pbnNwZWN0KGtleSwgb3B0aW9ucyl9XWA7XG4gIH1cbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBrZXkubGVuZ3RoO1xuICB2YWx1ZSA9IG9wdGlvbnMuaW5zcGVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gIHJldHVybiBgJHtrZXl9OiAke3ZhbHVlfWA7XG59XG5fX25hbWUoaW5zcGVjdFByb3BlcnR5LCBcImluc3BlY3RQcm9wZXJ0eVwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9hcnJheS5qc1xuZnVuY3Rpb24gaW5zcGVjdEFycmF5KGFycmF5LCBvcHRpb25zKSB7XG4gIGNvbnN0IG5vbkluZGV4UHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGFycmF5KS5zbGljZShhcnJheS5sZW5ndGgpO1xuICBpZiAoIWFycmF5Lmxlbmd0aCAmJiAhbm9uSW5kZXhQcm9wZXJ0aWVzLmxlbmd0aClcbiAgICByZXR1cm4gXCJbXVwiO1xuICBvcHRpb25zLnRydW5jYXRlIC09IDQ7XG4gIGNvbnN0IGxpc3RDb250ZW50cyA9IGluc3BlY3RMaXN0KGFycmF5LCBvcHRpb25zKTtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBsaXN0Q29udGVudHMubGVuZ3RoO1xuICBsZXQgcHJvcGVydHlDb250ZW50cyA9IFwiXCI7XG4gIGlmIChub25JbmRleFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgcHJvcGVydHlDb250ZW50cyA9IGluc3BlY3RMaXN0KG5vbkluZGV4UHJvcGVydGllcy5tYXAoKGtleSkgPT4gW2tleSwgYXJyYXlba2V5XV0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICB9XG4gIHJldHVybiBgWyAke2xpc3RDb250ZW50c30ke3Byb3BlcnR5Q29udGVudHMgPyBgLCAke3Byb3BlcnR5Q29udGVudHN9YCA6IFwiXCJ9IF1gO1xufVxuX19uYW1lKGluc3BlY3RBcnJheSwgXCJpbnNwZWN0QXJyYXlcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvdHlwZWRhcnJheS5qc1xudmFyIGdldEFycmF5TmFtZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGFycmF5KSA9PiB7XG4gIGlmICh0eXBlb2YgQnVmZmVyID09PSBcImZ1bmN0aW9uXCIgJiYgYXJyYXkgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICByZXR1cm4gXCJCdWZmZXJcIjtcbiAgfVxuICBpZiAoYXJyYXlbU3ltYm9sLnRvU3RyaW5nVGFnXSkge1xuICAgIHJldHVybiBhcnJheVtTeW1ib2wudG9TdHJpbmdUYWddO1xuICB9XG4gIHJldHVybiBhcnJheS5jb25zdHJ1Y3Rvci5uYW1lO1xufSwgXCJnZXRBcnJheU5hbWVcIik7XG5mdW5jdGlvbiBpbnNwZWN0VHlwZWRBcnJheShhcnJheSwgb3B0aW9ucykge1xuICBjb25zdCBuYW1lID0gZ2V0QXJyYXlOYW1lKGFycmF5KTtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBuYW1lLmxlbmd0aCArIDQ7XG4gIGNvbnN0IG5vbkluZGV4UHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGFycmF5KS5zbGljZShhcnJheS5sZW5ndGgpO1xuICBpZiAoIWFycmF5Lmxlbmd0aCAmJiAhbm9uSW5kZXhQcm9wZXJ0aWVzLmxlbmd0aClcbiAgICByZXR1cm4gYCR7bmFtZX1bXWA7XG4gIGxldCBvdXRwdXQgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gYCR7b3B0aW9ucy5zdHlsaXplKHRydW5jYXRlKGFycmF5W2ldLCBvcHRpb25zLnRydW5jYXRlKSwgXCJudW1iZXJcIil9JHtpID09PSBhcnJheS5sZW5ndGggLSAxID8gXCJcIiA6IFwiLCBcIn1gO1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gc3RyaW5nLmxlbmd0aDtcbiAgICBpZiAoYXJyYXlbaV0gIT09IGFycmF5Lmxlbmd0aCAmJiBvcHRpb25zLnRydW5jYXRlIDw9IDMpIHtcbiAgICAgIG91dHB1dCArPSBgJHt0cnVuY2F0b3J9KCR7YXJyYXkubGVuZ3RoIC0gYXJyYXlbaV0gKyAxfSlgO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIG91dHB1dCArPSBzdHJpbmc7XG4gIH1cbiAgbGV0IHByb3BlcnR5Q29udGVudHMgPSBcIlwiO1xuICBpZiAobm9uSW5kZXhQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgIHByb3BlcnR5Q29udGVudHMgPSBpbnNwZWN0TGlzdChub25JbmRleFByb3BlcnRpZXMubWFwKChrZXkpID0+IFtrZXksIGFycmF5W2tleV1dKSwgb3B0aW9ucywgaW5zcGVjdFByb3BlcnR5KTtcbiAgfVxuICByZXR1cm4gYCR7bmFtZX1bICR7b3V0cHV0fSR7cHJvcGVydHlDb250ZW50cyA/IGAsICR7cHJvcGVydHlDb250ZW50c31gIDogXCJcIn0gXWA7XG59XG5fX25hbWUoaW5zcGVjdFR5cGVkQXJyYXksIFwiaW5zcGVjdFR5cGVkQXJyYXlcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvZGF0ZS5qc1xuZnVuY3Rpb24gaW5zcGVjdERhdGUoZGF0ZU9iamVjdCwgb3B0aW9ucykge1xuICBjb25zdCBzdHJpbmdSZXByZXNlbnRhdGlvbiA9IGRhdGVPYmplY3QudG9KU09OKCk7XG4gIGlmIChzdHJpbmdSZXByZXNlbnRhdGlvbiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBcIkludmFsaWQgRGF0ZVwiO1xuICB9XG4gIGNvbnN0IHNwbGl0ID0gc3RyaW5nUmVwcmVzZW50YXRpb24uc3BsaXQoXCJUXCIpO1xuICBjb25zdCBkYXRlID0gc3BsaXRbMF07XG4gIHJldHVybiBvcHRpb25zLnN0eWxpemUoYCR7ZGF0ZX1UJHt0cnVuY2F0ZShzcGxpdFsxXSwgb3B0aW9ucy50cnVuY2F0ZSAtIGRhdGUubGVuZ3RoIC0gMSl9YCwgXCJkYXRlXCIpO1xufVxuX19uYW1lKGluc3BlY3REYXRlLCBcImluc3BlY3REYXRlXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2Z1bmN0aW9uLmpzXG5mdW5jdGlvbiBpbnNwZWN0RnVuY3Rpb24oZnVuYywgb3B0aW9ucykge1xuICBjb25zdCBmdW5jdGlvblR5cGUgPSBmdW5jW1N5bWJvbC50b1N0cmluZ1RhZ10gfHwgXCJGdW5jdGlvblwiO1xuICBjb25zdCBuYW1lID0gZnVuYy5uYW1lO1xuICBpZiAoIW5hbWUpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKGBbJHtmdW5jdGlvblR5cGV9XWAsIFwic3BlY2lhbFwiKTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKGBbJHtmdW5jdGlvblR5cGV9ICR7dHJ1bmNhdGUobmFtZSwgb3B0aW9ucy50cnVuY2F0ZSAtIDExKX1dYCwgXCJzcGVjaWFsXCIpO1xufVxuX19uYW1lKGluc3BlY3RGdW5jdGlvbiwgXCJpbnNwZWN0RnVuY3Rpb25cIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvbWFwLmpzXG5mdW5jdGlvbiBpbnNwZWN0TWFwRW50cnkoW2tleSwgdmFsdWVdLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gNDtcbiAga2V5ID0gb3B0aW9ucy5pbnNwZWN0KGtleSwgb3B0aW9ucyk7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0ga2V5Lmxlbmd0aDtcbiAgdmFsdWUgPSBvcHRpb25zLmluc3BlY3QodmFsdWUsIG9wdGlvbnMpO1xuICByZXR1cm4gYCR7a2V5fSA9PiAke3ZhbHVlfWA7XG59XG5fX25hbWUoaW5zcGVjdE1hcEVudHJ5LCBcImluc3BlY3RNYXBFbnRyeVwiKTtcbmZ1bmN0aW9uIG1hcFRvRW50cmllcyhtYXApIHtcbiAgY29uc3QgZW50cmllcyA9IFtdO1xuICBtYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgIGVudHJpZXMucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9KTtcbiAgcmV0dXJuIGVudHJpZXM7XG59XG5fX25hbWUobWFwVG9FbnRyaWVzLCBcIm1hcFRvRW50cmllc1wiKTtcbmZ1bmN0aW9uIGluc3BlY3RNYXAobWFwLCBvcHRpb25zKSB7XG4gIGNvbnN0IHNpemUgPSBtYXAuc2l6ZSAtIDE7XG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gXCJNYXB7fVwiO1xuICB9XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gNztcbiAgcmV0dXJuIGBNYXB7ICR7aW5zcGVjdExpc3QobWFwVG9FbnRyaWVzKG1hcCksIG9wdGlvbnMsIGluc3BlY3RNYXBFbnRyeSl9IH1gO1xufVxuX19uYW1lKGluc3BlY3RNYXAsIFwiaW5zcGVjdE1hcFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9udW1iZXIuanNcbnZhciBpc05hTiA9IE51bWJlci5pc05hTiB8fCAoKGkpID0+IGkgIT09IGkpO1xuZnVuY3Rpb24gaW5zcGVjdE51bWJlcihudW1iZXIsIG9wdGlvbnMpIHtcbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKFwiTmFOXCIsIFwibnVtYmVyXCIpO1xuICB9XG4gIGlmIChudW1iZXIgPT09IEluZmluaXR5KSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShcIkluZmluaXR5XCIsIFwibnVtYmVyXCIpO1xuICB9XG4gIGlmIChudW1iZXIgPT09IC1JbmZpbml0eSkge1xuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoXCItSW5maW5pdHlcIiwgXCJudW1iZXJcIik7XG4gIH1cbiAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoMSAvIG51bWJlciA9PT0gSW5maW5pdHkgPyBcIiswXCIgOiBcIi0wXCIsIFwibnVtYmVyXCIpO1xuICB9XG4gIHJldHVybiBvcHRpb25zLnN0eWxpemUodHJ1bmNhdGUoU3RyaW5nKG51bWJlciksIG9wdGlvbnMudHJ1bmNhdGUpLCBcIm51bWJlclwiKTtcbn1cbl9fbmFtZShpbnNwZWN0TnVtYmVyLCBcImluc3BlY3ROdW1iZXJcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvYmlnaW50LmpzXG5mdW5jdGlvbiBpbnNwZWN0QmlnSW50KG51bWJlciwgb3B0aW9ucykge1xuICBsZXQgbnVtcyA9IHRydW5jYXRlKG51bWJlci50b1N0cmluZygpLCBvcHRpb25zLnRydW5jYXRlIC0gMSk7XG4gIGlmIChudW1zICE9PSB0cnVuY2F0b3IpXG4gICAgbnVtcyArPSBcIm5cIjtcbiAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShudW1zLCBcImJpZ2ludFwiKTtcbn1cbl9fbmFtZShpbnNwZWN0QmlnSW50LCBcImluc3BlY3RCaWdJbnRcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvcmVnZXhwLmpzXG5mdW5jdGlvbiBpbnNwZWN0UmVnRXhwKHZhbHVlLCBvcHRpb25zKSB7XG4gIGNvbnN0IGZsYWdzID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdChcIi9cIilbMl07XG4gIGNvbnN0IHNvdXJjZUxlbmd0aCA9IG9wdGlvbnMudHJ1bmNhdGUgLSAoMiArIGZsYWdzLmxlbmd0aCk7XG4gIGNvbnN0IHNvdXJjZSA9IHZhbHVlLnNvdXJjZTtcbiAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShgLyR7dHJ1bmNhdGUoc291cmNlLCBzb3VyY2VMZW5ndGgpfS8ke2ZsYWdzfWAsIFwicmVnZXhwXCIpO1xufVxuX19uYW1lKGluc3BlY3RSZWdFeHAsIFwiaW5zcGVjdFJlZ0V4cFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9zZXQuanNcbmZ1bmN0aW9uIGFycmF5RnJvbVNldChzZXQyKSB7XG4gIGNvbnN0IHZhbHVlcyA9IFtdO1xuICBzZXQyLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICB9KTtcbiAgcmV0dXJuIHZhbHVlcztcbn1cbl9fbmFtZShhcnJheUZyb21TZXQsIFwiYXJyYXlGcm9tU2V0XCIpO1xuZnVuY3Rpb24gaW5zcGVjdFNldChzZXQyLCBvcHRpb25zKSB7XG4gIGlmIChzZXQyLnNpemUgPT09IDApXG4gICAgcmV0dXJuIFwiU2V0e31cIjtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSA3O1xuICByZXR1cm4gYFNldHsgJHtpbnNwZWN0TGlzdChhcnJheUZyb21TZXQoc2V0MiksIG9wdGlvbnMpfSB9YDtcbn1cbl9fbmFtZShpbnNwZWN0U2V0LCBcImluc3BlY3RTZXRcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvc3RyaW5nLmpzXG52YXIgc3RyaW5nRXNjYXBlQ2hhcnMgPSBuZXcgUmVnRXhwKFwiWydcXFxcdTAwMDAtXFxcXHUwMDFmXFxcXHUwMDdmLVxcXFx1MDA5ZlxcXFx1MDBhZFxcXFx1MDYwMC1cXFxcdTA2MDRcXFxcdTA3MGZcXFxcdTE3YjRcXFxcdTE3YjVcXFxcdTIwMGMtXFxcXHUyMDBmXFxcXHUyMDI4LVxcXFx1MjAyZlxcXFx1MjA2MC1cXFxcdTIwNmZcXFxcdWZlZmZcXFxcdWZmZjAtXFxcXHVmZmZmXVwiLCBcImdcIik7XG52YXIgZXNjYXBlQ2hhcmFjdGVycyA9IHtcbiAgXCJcXGJcIjogXCJcXFxcYlwiLFxuICBcIlx0XCI6IFwiXFxcXHRcIixcbiAgXCJcXG5cIjogXCJcXFxcblwiLFxuICBcIlxcZlwiOiBcIlxcXFxmXCIsXG4gIFwiXFxyXCI6IFwiXFxcXHJcIixcbiAgXCInXCI6IFwiXFxcXCdcIixcbiAgXCJcXFxcXCI6IFwiXFxcXFxcXFxcIlxufTtcbnZhciBoZXggPSAxNjtcbnZhciB1bmljb2RlTGVuZ3RoID0gNDtcbmZ1bmN0aW9uIGVzY2FwZShjaGFyKSB7XG4gIHJldHVybiBlc2NhcGVDaGFyYWN0ZXJzW2NoYXJdIHx8IGBcXFxcdSR7YDAwMDAke2NoYXIuY2hhckNvZGVBdCgwKS50b1N0cmluZyhoZXgpfWAuc2xpY2UoLXVuaWNvZGVMZW5ndGgpfWA7XG59XG5fX25hbWUoZXNjYXBlLCBcImVzY2FwZVwiKTtcbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyaW5nLCBvcHRpb25zKSB7XG4gIGlmIChzdHJpbmdFc2NhcGVDaGFycy50ZXN0KHN0cmluZykpIHtcbiAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShzdHJpbmdFc2NhcGVDaGFycywgZXNjYXBlKTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKGAnJHt0cnVuY2F0ZShzdHJpbmcsIG9wdGlvbnMudHJ1bmNhdGUgLSAyKX0nYCwgXCJzdHJpbmdcIik7XG59XG5fX25hbWUoaW5zcGVjdFN0cmluZywgXCJpbnNwZWN0U3RyaW5nXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL3N5bWJvbC5qc1xuZnVuY3Rpb24gaW5zcGVjdFN5bWJvbCh2YWx1ZSkge1xuICBpZiAoXCJkZXNjcmlwdGlvblwiIGluIFN5bWJvbC5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gdmFsdWUuZGVzY3JpcHRpb24gPyBgU3ltYm9sKCR7dmFsdWUuZGVzY3JpcHRpb259KWAgOiBcIlN5bWJvbCgpXCI7XG4gIH1cbiAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG59XG5fX25hbWUoaW5zcGVjdFN5bWJvbCwgXCJpbnNwZWN0U3ltYm9sXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL3Byb21pc2UuanNcbnZhciBnZXRQcm9taXNlVmFsdWUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IFwiUHJvbWlzZXtcXHUyMDI2fVwiLCBcImdldFByb21pc2VWYWx1ZVwiKTtcbnRyeSB7XG4gIGNvbnN0IHsgZ2V0UHJvbWlzZURldGFpbHMsIGtQZW5kaW5nLCBrUmVqZWN0ZWQgfSA9IHByb2Nlc3MuYmluZGluZyhcInV0aWxcIik7XG4gIGlmIChBcnJheS5pc0FycmF5KGdldFByb21pc2VEZXRhaWxzKFByb21pc2UucmVzb2x2ZSgpKSkpIHtcbiAgICBnZXRQcm9taXNlVmFsdWUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSwgb3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgW3N0YXRlLCBpbm5lclZhbHVlXSA9IGdldFByb21pc2VEZXRhaWxzKHZhbHVlKTtcbiAgICAgIGlmIChzdGF0ZSA9PT0ga1BlbmRpbmcpIHtcbiAgICAgICAgcmV0dXJuIFwiUHJvbWlzZXs8cGVuZGluZz59XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gYFByb21pc2Uke3N0YXRlID09PSBrUmVqZWN0ZWQgPyBcIiFcIiA6IFwiXCJ9eyR7b3B0aW9ucy5pbnNwZWN0KGlubmVyVmFsdWUsIG9wdGlvbnMpfX1gO1xuICAgIH0sIFwiZ2V0UHJvbWlzZVZhbHVlXCIpO1xuICB9XG59IGNhdGNoIChub3ROb2RlKSB7XG59XG52YXIgcHJvbWlzZV9kZWZhdWx0ID0gZ2V0UHJvbWlzZVZhbHVlO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL29iamVjdC5qc1xuZnVuY3Rpb24gaW5zcGVjdE9iamVjdChvYmplY3QsIG9wdGlvbnMpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7XG4gIGNvbnN0IHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpIDogW107XG4gIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCAmJiBzeW1ib2xzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBcInt9XCI7XG4gIH1cbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSA0O1xuICBvcHRpb25zLnNlZW4gPSBvcHRpb25zLnNlZW4gfHwgW107XG4gIGlmIChvcHRpb25zLnNlZW4uaW5jbHVkZXMob2JqZWN0KSkge1xuICAgIHJldHVybiBcIltDaXJjdWxhcl1cIjtcbiAgfVxuICBvcHRpb25zLnNlZW4ucHVzaChvYmplY3QpO1xuICBjb25zdCBwcm9wZXJ0eUNvbnRlbnRzID0gaW5zcGVjdExpc3QocHJvcGVydGllcy5tYXAoKGtleSkgPT4gW2tleSwgb2JqZWN0W2tleV1dKSwgb3B0aW9ucywgaW5zcGVjdFByb3BlcnR5KTtcbiAgY29uc3Qgc3ltYm9sQ29udGVudHMgPSBpbnNwZWN0TGlzdChzeW1ib2xzLm1hcCgoa2V5KSA9PiBba2V5LCBvYmplY3Rba2V5XV0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICBvcHRpb25zLnNlZW4ucG9wKCk7XG4gIGxldCBzZXAgPSBcIlwiO1xuICBpZiAocHJvcGVydHlDb250ZW50cyAmJiBzeW1ib2xDb250ZW50cykge1xuICAgIHNlcCA9IFwiLCBcIjtcbiAgfVxuICByZXR1cm4gYHsgJHtwcm9wZXJ0eUNvbnRlbnRzfSR7c2VwfSR7c3ltYm9sQ29udGVudHN9IH1gO1xufVxuX19uYW1lKGluc3BlY3RPYmplY3QsIFwiaW5zcGVjdE9iamVjdFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9jbGFzcy5qc1xudmFyIHRvU3RyaW5nVGFnID0gdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wudG9TdHJpbmdUYWcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBmYWxzZTtcbmZ1bmN0aW9uIGluc3BlY3RDbGFzcyh2YWx1ZSwgb3B0aW9ucykge1xuICBsZXQgbmFtZSA9IFwiXCI7XG4gIGlmICh0b1N0cmluZ1RhZyAmJiB0b1N0cmluZ1RhZyBpbiB2YWx1ZSkge1xuICAgIG5hbWUgPSB2YWx1ZVt0b1N0cmluZ1RhZ107XG4gIH1cbiAgbmFtZSA9IG5hbWUgfHwgdmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKCFuYW1lIHx8IG5hbWUgPT09IFwiX2NsYXNzXCIpIHtcbiAgICBuYW1lID0gXCI8QW5vbnltb3VzIENsYXNzPlwiO1xuICB9XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gbmFtZS5sZW5ndGg7XG4gIHJldHVybiBgJHtuYW1lfSR7aW5zcGVjdE9iamVjdCh2YWx1ZSwgb3B0aW9ucyl9YDtcbn1cbl9fbmFtZShpbnNwZWN0Q2xhc3MsIFwiaW5zcGVjdENsYXNzXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2FyZ3VtZW50cy5qc1xuZnVuY3Rpb24gaW5zcGVjdEFyZ3VtZW50cyhhcmdzLCBvcHRpb25zKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm4gXCJBcmd1bWVudHNbXVwiO1xuICBvcHRpb25zLnRydW5jYXRlIC09IDEzO1xuICByZXR1cm4gYEFyZ3VtZW50c1sgJHtpbnNwZWN0TGlzdChhcmdzLCBvcHRpb25zKX0gXWA7XG59XG5fX25hbWUoaW5zcGVjdEFyZ3VtZW50cywgXCJpbnNwZWN0QXJndW1lbnRzXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2Vycm9yLmpzXG52YXIgZXJyb3JLZXlzID0gW1xuICBcInN0YWNrXCIsXG4gIFwibGluZVwiLFxuICBcImNvbHVtblwiLFxuICBcIm5hbWVcIixcbiAgXCJtZXNzYWdlXCIsXG4gIFwiZmlsZU5hbWVcIixcbiAgXCJsaW5lTnVtYmVyXCIsXG4gIFwiY29sdW1uTnVtYmVyXCIsXG4gIFwibnVtYmVyXCIsXG4gIFwiZGVzY3JpcHRpb25cIixcbiAgXCJjYXVzZVwiXG5dO1xuZnVuY3Rpb24gaW5zcGVjdE9iamVjdDIoZXJyb3IsIG9wdGlvbnMpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKS5maWx0ZXIoKGtleSkgPT4gZXJyb3JLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEpO1xuICBjb25zdCBuYW1lID0gZXJyb3IubmFtZTtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBuYW1lLmxlbmd0aDtcbiAgbGV0IG1lc3NhZ2UgPSBcIlwiO1xuICBpZiAodHlwZW9mIGVycm9yLm1lc3NhZ2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICBtZXNzYWdlID0gdHJ1bmNhdGUoZXJyb3IubWVzc2FnZSwgb3B0aW9ucy50cnVuY2F0ZSk7XG4gIH0gZWxzZSB7XG4gICAgcHJvcGVydGllcy51bnNoaWZ0KFwibWVzc2FnZVwiKTtcbiAgfVxuICBtZXNzYWdlID0gbWVzc2FnZSA/IGA6ICR7bWVzc2FnZX1gIDogXCJcIjtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBtZXNzYWdlLmxlbmd0aCArIDU7XG4gIG9wdGlvbnMuc2VlbiA9IG9wdGlvbnMuc2VlbiB8fCBbXTtcbiAgaWYgKG9wdGlvbnMuc2Vlbi5pbmNsdWRlcyhlcnJvcikpIHtcbiAgICByZXR1cm4gXCJbQ2lyY3VsYXJdXCI7XG4gIH1cbiAgb3B0aW9ucy5zZWVuLnB1c2goZXJyb3IpO1xuICBjb25zdCBwcm9wZXJ0eUNvbnRlbnRzID0gaW5zcGVjdExpc3QocHJvcGVydGllcy5tYXAoKGtleSkgPT4gW2tleSwgZXJyb3Jba2V5XV0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICByZXR1cm4gYCR7bmFtZX0ke21lc3NhZ2V9JHtwcm9wZXJ0eUNvbnRlbnRzID8gYCB7ICR7cHJvcGVydHlDb250ZW50c30gfWAgOiBcIlwifWA7XG59XG5fX25hbWUoaW5zcGVjdE9iamVjdDIsIFwiaW5zcGVjdE9iamVjdFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9odG1sLmpzXG5mdW5jdGlvbiBpbnNwZWN0QXR0cmlidXRlKFtrZXksIHZhbHVlXSwgb3B0aW9ucykge1xuICBvcHRpb25zLnRydW5jYXRlIC09IDM7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gYCR7b3B0aW9ucy5zdHlsaXplKFN0cmluZyhrZXkpLCBcInllbGxvd1wiKX1gO1xuICB9XG4gIHJldHVybiBgJHtvcHRpb25zLnN0eWxpemUoU3RyaW5nKGtleSksIFwieWVsbG93XCIpfT0ke29wdGlvbnMuc3R5bGl6ZShgXCIke3ZhbHVlfVwiYCwgXCJzdHJpbmdcIil9YDtcbn1cbl9fbmFtZShpbnNwZWN0QXR0cmlidXRlLCBcImluc3BlY3RBdHRyaWJ1dGVcIik7XG5mdW5jdGlvbiBpbnNwZWN0SFRNTENvbGxlY3Rpb24oY29sbGVjdGlvbiwgb3B0aW9ucykge1xuICByZXR1cm4gaW5zcGVjdExpc3QoY29sbGVjdGlvbiwgb3B0aW9ucywgaW5zcGVjdEhUTUwsIFwiXFxuXCIpO1xufVxuX19uYW1lKGluc3BlY3RIVE1MQ29sbGVjdGlvbiwgXCJpbnNwZWN0SFRNTENvbGxlY3Rpb25cIik7XG5mdW5jdGlvbiBpbnNwZWN0SFRNTChlbGVtZW50LCBvcHRpb25zKSB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZU5hbWVzKCk7XG4gIGNvbnN0IG5hbWUgPSBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgaGVhZCA9IG9wdGlvbnMuc3R5bGl6ZShgPCR7bmFtZX1gLCBcInNwZWNpYWxcIik7XG4gIGNvbnN0IGhlYWRDbG9zZSA9IG9wdGlvbnMuc3R5bGl6ZShgPmAsIFwic3BlY2lhbFwiKTtcbiAgY29uc3QgdGFpbCA9IG9wdGlvbnMuc3R5bGl6ZShgPC8ke25hbWV9PmAsIFwic3BlY2lhbFwiKTtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBuYW1lLmxlbmd0aCAqIDIgKyA1O1xuICBsZXQgcHJvcGVydHlDb250ZW50cyA9IFwiXCI7XG4gIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcbiAgICBwcm9wZXJ0eUNvbnRlbnRzICs9IFwiIFwiO1xuICAgIHByb3BlcnR5Q29udGVudHMgKz0gaW5zcGVjdExpc3QocHJvcGVydGllcy5tYXAoKGtleSkgPT4gW2tleSwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KV0pLCBvcHRpb25zLCBpbnNwZWN0QXR0cmlidXRlLCBcIiBcIik7XG4gIH1cbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBwcm9wZXJ0eUNvbnRlbnRzLmxlbmd0aDtcbiAgY29uc3QgdHJ1bmNhdGUyID0gb3B0aW9ucy50cnVuY2F0ZTtcbiAgbGV0IGNoaWxkcmVuID0gaW5zcGVjdEhUTUxDb2xsZWN0aW9uKGVsZW1lbnQuY2hpbGRyZW4sIG9wdGlvbnMpO1xuICBpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoID4gdHJ1bmNhdGUyKSB7XG4gICAgY2hpbGRyZW4gPSBgJHt0cnVuY2F0b3J9KCR7ZWxlbWVudC5jaGlsZHJlbi5sZW5ndGh9KWA7XG4gIH1cbiAgcmV0dXJuIGAke2hlYWR9JHtwcm9wZXJ0eUNvbnRlbnRzfSR7aGVhZENsb3NlfSR7Y2hpbGRyZW59JHt0YWlsfWA7XG59XG5fX25hbWUoaW5zcGVjdEhUTUwsIFwiaW5zcGVjdEhUTUxcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvaW5kZXguanNcbnZhciBzeW1ib2xzU3VwcG9ydGVkID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuZm9yID09PSBcImZ1bmN0aW9uXCI7XG52YXIgY2hhaUluc3BlY3QgPSBzeW1ib2xzU3VwcG9ydGVkID8gU3ltYm9sLmZvcihcImNoYWkvaW5zcGVjdFwiKSA6IFwiQEBjaGFpL2luc3BlY3RcIjtcbnZhciBub2RlSW5zcGVjdCA9IGZhbHNlO1xudHJ5IHtcbiAgY29uc3Qgbm9kZVV0aWwgPSByZXF1aXJlX3V0aWwoKTtcbiAgbm9kZUluc3BlY3QgPSBub2RlVXRpbC5pbnNwZWN0ID8gbm9kZVV0aWwuaW5zcGVjdC5jdXN0b20gOiBmYWxzZTtcbn0gY2F0Y2ggKG5vTm9kZUluc3BlY3QpIHtcbiAgbm9kZUluc3BlY3QgPSBmYWxzZTtcbn1cbnZhciBjb25zdHJ1Y3Rvck1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIHN0cmluZ1RhZ01hcCA9IHt9O1xudmFyIGJhc2VUeXBlc01hcCA9IHtcbiAgdW5kZWZpbmVkOiAodmFsdWUsIG9wdGlvbnMpID0+IG9wdGlvbnMuc3R5bGl6ZShcInVuZGVmaW5lZFwiLCBcInVuZGVmaW5lZFwiKSxcbiAgbnVsbDogKHZhbHVlLCBvcHRpb25zKSA9PiBvcHRpb25zLnN0eWxpemUoXCJudWxsXCIsIFwibnVsbFwiKSxcbiAgYm9vbGVhbjogKHZhbHVlLCBvcHRpb25zKSA9PiBvcHRpb25zLnN0eWxpemUoU3RyaW5nKHZhbHVlKSwgXCJib29sZWFuXCIpLFxuICBCb29sZWFuOiAodmFsdWUsIG9wdGlvbnMpID0+IG9wdGlvbnMuc3R5bGl6ZShTdHJpbmcodmFsdWUpLCBcImJvb2xlYW5cIiksXG4gIG51bWJlcjogaW5zcGVjdE51bWJlcixcbiAgTnVtYmVyOiBpbnNwZWN0TnVtYmVyLFxuICBiaWdpbnQ6IGluc3BlY3RCaWdJbnQsXG4gIEJpZ0ludDogaW5zcGVjdEJpZ0ludCxcbiAgc3RyaW5nOiBpbnNwZWN0U3RyaW5nLFxuICBTdHJpbmc6IGluc3BlY3RTdHJpbmcsXG4gIGZ1bmN0aW9uOiBpbnNwZWN0RnVuY3Rpb24sXG4gIEZ1bmN0aW9uOiBpbnNwZWN0RnVuY3Rpb24sXG4gIHN5bWJvbDogaW5zcGVjdFN5bWJvbCxcbiAgLy8gQSBTeW1ib2wgcG9seWZpbGwgd2lsbCByZXR1cm4gYFN5bWJvbGAgbm90IGBzeW1ib2xgIGZyb20gdHlwZWRldGVjdFxuICBTeW1ib2w6IGluc3BlY3RTeW1ib2wsXG4gIEFycmF5OiBpbnNwZWN0QXJyYXksXG4gIERhdGU6IGluc3BlY3REYXRlLFxuICBNYXA6IGluc3BlY3RNYXAsXG4gIFNldDogaW5zcGVjdFNldCxcbiAgUmVnRXhwOiBpbnNwZWN0UmVnRXhwLFxuICBQcm9taXNlOiBwcm9taXNlX2RlZmF1bHQsXG4gIC8vIFdlYWtTZXQsIFdlYWtNYXAgYXJlIHRvdGFsbHkgb3BhcXVlIHRvIHVzXG4gIFdlYWtTZXQ6ICh2YWx1ZSwgb3B0aW9ucykgPT4gb3B0aW9ucy5zdHlsaXplKFwiV2Vha1NldHtcXHUyMDI2fVwiLCBcInNwZWNpYWxcIiksXG4gIFdlYWtNYXA6ICh2YWx1ZSwgb3B0aW9ucykgPT4gb3B0aW9ucy5zdHlsaXplKFwiV2Vha01hcHtcXHUyMDI2fVwiLCBcInNwZWNpYWxcIiksXG4gIEFyZ3VtZW50czogaW5zcGVjdEFyZ3VtZW50cyxcbiAgSW50OEFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgVWludDhBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gIFVpbnQ4Q2xhbXBlZEFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgSW50MTZBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gIFVpbnQxNkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgSW50MzJBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gIFVpbnQzMkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgRmxvYXQzMkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgRmxvYXQ2NEFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgR2VuZXJhdG9yOiAoKSA9PiBcIlwiLFxuICBEYXRhVmlldzogKCkgPT4gXCJcIixcbiAgQXJyYXlCdWZmZXI6ICgpID0+IFwiXCIsXG4gIEVycm9yOiBpbnNwZWN0T2JqZWN0MixcbiAgSFRNTENvbGxlY3Rpb246IGluc3BlY3RIVE1MQ29sbGVjdGlvbixcbiAgTm9kZUxpc3Q6IGluc3BlY3RIVE1MQ29sbGVjdGlvblxufTtcbnZhciBpbnNwZWN0Q3VzdG9tID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodmFsdWUsIG9wdGlvbnMsIHR5cGUzKSA9PiB7XG4gIGlmIChjaGFpSW5zcGVjdCBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWVbY2hhaUluc3BlY3RdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdmFsdWVbY2hhaUluc3BlY3RdKG9wdGlvbnMpO1xuICB9XG4gIGlmIChub2RlSW5zcGVjdCAmJiBub2RlSW5zcGVjdCBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWVbbm9kZUluc3BlY3RdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdmFsdWVbbm9kZUluc3BlY3RdKG9wdGlvbnMuZGVwdGgsIG9wdGlvbnMpO1xuICB9XG4gIGlmIChcImluc3BlY3RcIiBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUuaW5zcGVjdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIHZhbHVlLmluc3BlY3Qob3B0aW9ucy5kZXB0aCwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKFwiY29uc3RydWN0b3JcIiBpbiB2YWx1ZSAmJiBjb25zdHJ1Y3Rvck1hcC5oYXModmFsdWUuY29uc3RydWN0b3IpKSB7XG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yTWFwLmdldCh2YWx1ZS5jb25zdHJ1Y3RvcikodmFsdWUsIG9wdGlvbnMpO1xuICB9XG4gIGlmIChzdHJpbmdUYWdNYXBbdHlwZTNdKSB7XG4gICAgcmV0dXJuIHN0cmluZ1RhZ01hcFt0eXBlM10odmFsdWUsIG9wdGlvbnMpO1xuICB9XG4gIHJldHVybiBcIlwiO1xufSwgXCJpbnNwZWN0Q3VzdG9tXCIpO1xudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbmZ1bmN0aW9uIGluc3BlY3QodmFsdWUsIG9wdHMgPSB7fSkge1xuICBjb25zdCBvcHRpb25zID0gbm9ybWFsaXNlT3B0aW9ucyhvcHRzLCBpbnNwZWN0KTtcbiAgY29uc3QgeyBjdXN0b21JbnNwZWN0IH0gPSBvcHRpb25zO1xuICBsZXQgdHlwZTMgPSB2YWx1ZSA9PT0gbnVsbCA/IFwibnVsbFwiIDogdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZTMgPT09IFwib2JqZWN0XCIpIHtcbiAgICB0eXBlMyA9IHRvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKTtcbiAgfVxuICBpZiAodHlwZTMgaW4gYmFzZVR5cGVzTWFwKSB7XG4gICAgcmV0dXJuIGJhc2VUeXBlc01hcFt0eXBlM10odmFsdWUsIG9wdGlvbnMpO1xuICB9XG4gIGlmIChjdXN0b21JbnNwZWN0ICYmIHZhbHVlKSB7XG4gICAgY29uc3Qgb3V0cHV0ID0gaW5zcGVjdEN1c3RvbSh2YWx1ZSwgb3B0aW9ucywgdHlwZTMpO1xuICAgIGlmIChvdXRwdXQpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3V0cHV0ID09PSBcInN0cmluZ1wiKVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgcmV0dXJuIGluc3BlY3Qob3V0cHV0LCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcHJvdG8gPSB2YWx1ZSA/IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgOiBmYWxzZTtcbiAgaWYgKHByb3RvID09PSBPYmplY3QucHJvdG90eXBlIHx8IHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGluc3BlY3RPYmplY3QodmFsdWUsIG9wdGlvbnMpO1xuICB9XG4gIGlmICh2YWx1ZSAmJiB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwiZnVuY3Rpb25cIiAmJiB2YWx1ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgcmV0dXJuIGluc3BlY3RIVE1MKHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuICBpZiAoXCJjb25zdHJ1Y3RvclwiIGluIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlLmNvbnN0cnVjdG9yICE9PSBPYmplY3QpIHtcbiAgICAgIHJldHVybiBpbnNwZWN0Q2xhc3ModmFsdWUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gaW5zcGVjdE9iamVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKHZhbHVlID09PSBPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGluc3BlY3RPYmplY3QodmFsdWUsIG9wdGlvbnMpO1xuICB9XG4gIHJldHVybiBvcHRpb25zLnN0eWxpemUoU3RyaW5nKHZhbHVlKSwgdHlwZTMpO1xufVxuX19uYW1lKGluc3BlY3QsIFwiaW5zcGVjdFwiKTtcblxuLy8gbGliL2NoYWkvY29uZmlnLmpzXG52YXIgY29uZmlnID0ge1xuICAvKipcbiAgICogIyMjIGNvbmZpZy5pbmNsdWRlU3RhY2tcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGluZmx1ZW5jZXMgd2hldGhlciBzdGFjayB0cmFjZVxuICAgKiBpcyBpbmNsdWRlZCBpbiBBc3NlcnRpb24gZXJyb3IgbWVzc2FnZS4gRGVmYXVsdCBvZiBmYWxzZVxuICAgKiBzdXBwcmVzc2VzIHN0YWNrIHRyYWNlIGluIHRoZSBlcnJvciBtZXNzYWdlLlxuICAgKlxuICAgKiAgICAgY2hhaS5jb25maWcuaW5jbHVkZVN0YWNrID0gdHJ1ZTsgIC8vIGVuYWJsZSBzdGFjayBvbiBlcnJvclxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59XG4gICAqIEBwdWJsaWNcbiAgICovXG4gIGluY2x1ZGVTdGFjazogZmFsc2UsXG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLnNob3dEaWZmXG4gICAqXG4gICAqIFVzZXIgY29uZmlndXJhYmxlIHByb3BlcnR5LCBpbmZsdWVuY2VzIHdoZXRoZXIgb3Igbm90XG4gICAqIHRoZSBgc2hvd0RpZmZgIGZsYWcgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSB0aHJvd25cbiAgICogQXNzZXJ0aW9uRXJyb3JzLiBgZmFsc2VgIHdpbGwgYWx3YXlzIGJlIGBmYWxzZWA7IGB0cnVlYFxuICAgKiB3aWxsIGJlIHRydWUgd2hlbiB0aGUgYXNzZXJ0aW9uIGhhcyByZXF1ZXN0ZWQgYSBkaWZmXG4gICAqIGJlIHNob3duLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59XG4gICAqIEBwdWJsaWNcbiAgICovXG4gIHNob3dEaWZmOiB0cnVlLFxuICAvKipcbiAgICogIyMjIGNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZFxuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgc2V0cyBsZW5ndGggdGhyZXNob2xkIGZvciBhY3R1YWwgYW5kXG4gICAqIGV4cGVjdGVkIHZhbHVlcyBpbiBhc3NlcnRpb24gZXJyb3JzLiBJZiB0aGlzIHRocmVzaG9sZCBpcyBleGNlZWRlZCwgZm9yXG4gICAqIGV4YW1wbGUgZm9yIGxhcmdlIGRhdGEgc3RydWN0dXJlcywgdGhlIHZhbHVlIGlzIHJlcGxhY2VkIHdpdGggc29tZXRoaW5nXG4gICAqIGxpa2UgYFsgQXJyYXkoMykgXWAgb3IgYHsgT2JqZWN0IChwcm9wMSwgcHJvcDIpIH1gLlxuICAgKlxuICAgKiBTZXQgaXQgdG8gemVybyBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIHRydW5jYXRpbmcgYWx0b2dldGhlci5cbiAgICpcbiAgICogVGhpcyBpcyBlc3BlY2lhbGx5IHVzZXJmdWwgd2hlbiBkb2luZyBhc3NlcnRpb25zIG9uIGFycmF5czogaGF2aW5nIHRoaXNcbiAgICogc2V0IHRvIGEgcmVhc29uYWJsZSBsYXJnZSB2YWx1ZSBtYWtlcyB0aGUgZmFpbHVyZSBtZXNzYWdlcyByZWFkaWx5XG4gICAqIGluc3BlY3RhYmxlLlxuICAgKlxuICAgKiAgICAgY2hhaS5jb25maWcudHJ1bmNhdGVUaHJlc2hvbGQgPSAwOyAgLy8gZGlzYWJsZSB0cnVuY2F0aW5nXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfVxuICAgKiBAcHVibGljXG4gICAqL1xuICB0cnVuY2F0ZVRocmVzaG9sZDogNDAsXG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLnVzZVByb3h5XG4gICAqXG4gICAqIFVzZXIgY29uZmlndXJhYmxlIHByb3BlcnR5LCBkZWZpbmVzIGlmIGNoYWkgd2lsbCB1c2UgYSBQcm94eSB0byB0aHJvd1xuICAgKiBhbiBlcnJvciB3aGVuIGEgbm9uLWV4aXN0ZW50IHByb3BlcnR5IGlzIHJlYWQsIHdoaWNoIHByb3RlY3RzIHVzZXJzXG4gICAqIGZyb20gdHlwb3Mgd2hlbiB1c2luZyBwcm9wZXJ0eS1iYXNlZCBhc3NlcnRpb25zLlxuICAgKlxuICAgKiBTZXQgaXQgdG8gZmFsc2UgaWYgeW91IHdhbnQgdG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUuXG4gICAqXG4gICAqICAgICBjaGFpLmNvbmZpZy51c2VQcm94eSA9IGZhbHNlOyAgLy8gZGlzYWJsZSB1c2Ugb2YgUHJveHlcbiAgICpcbiAgICogVGhpcyBmZWF0dXJlIGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgcmVnYXJkbGVzcyBvZiB0aGlzIGNvbmZpZyB2YWx1ZVxuICAgKiBpbiBlbnZpcm9ubWVudHMgdGhhdCBkb24ndCBzdXBwb3J0IHByb3hpZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn1cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgdXNlUHJveHk6IHRydWUsXG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLnByb3h5RXhjbHVkZWRLZXlzXG4gICAqXG4gICAqIFVzZXIgY29uZmlndXJhYmxlIHByb3BlcnR5LCBkZWZpbmVzIHdoaWNoIHByb3BlcnRpZXMgc2hvdWxkIGJlIGlnbm9yZWRcbiAgICogaW5zdGVhZCBvZiB0aHJvd2luZyBhbiBlcnJvciBpZiB0aGV5IGRvIG5vdCBleGlzdCBvbiB0aGUgYXNzZXJ0aW9uLlxuICAgKiBUaGlzIGlzIG9ubHkgYXBwbGllZCBpZiB0aGUgZW52aXJvbm1lbnQgQ2hhaSBpcyBydW5uaW5nIGluIHN1cHBvcnRzIHByb3hpZXMgYW5kXG4gICAqIGlmIHRoZSBgdXNlUHJveHlgIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBpcyBlbmFibGVkLlxuICAgKiBCeSBkZWZhdWx0LCBgdGhlbmAgYW5kIGBpbnNwZWN0YCB3aWxsIG5vdCB0aHJvdyBhbiBlcnJvciBpZiB0aGV5IGRvIG5vdCBleGlzdCBvbiB0aGVcbiAgICogYXNzZXJ0aW9uIG9iamVjdCBiZWNhdXNlIHRoZSBgLmluc3BlY3RgIHByb3BlcnR5IGlzIHJlYWQgYnkgYHV0aWwuaW5zcGVjdGAgKGZvciBleGFtcGxlLCB3aGVuXG4gICAqIHVzaW5nIGBjb25zb2xlLmxvZ2Agb24gdGhlIGFzc2VydGlvbiBvYmplY3QpIGFuZCBgLnRoZW5gIGlzIG5lY2Vzc2FyeSBmb3IgcHJvbWlzZSB0eXBlLWNoZWNraW5nLlxuICAgKlxuICAgKiAgICAgLy8gQnkgZGVmYXVsdCB0aGVzZSBrZXlzIHdpbGwgbm90IHRocm93IGFuIGVycm9yIGlmIHRoZXkgZG8gbm90IGV4aXN0IG9uIHRoZSBhc3NlcnRpb24gb2JqZWN0XG4gICAqICAgICBjaGFpLmNvbmZpZy5wcm94eUV4Y2x1ZGVkS2V5cyA9IFsndGhlbicsICdpbnNwZWN0J107XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9XG4gICAqIEBwdWJsaWNcbiAgICovXG4gIHByb3h5RXhjbHVkZWRLZXlzOiBbXCJ0aGVuXCIsIFwiY2F0Y2hcIiwgXCJpbnNwZWN0XCIsIFwidG9KU09OXCJdLFxuICAvKipcbiAgICogIyMjIGNvbmZpZy5kZWVwRXF1YWxcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGRlZmluZXMgd2hpY2ggYSBjdXN0b20gZnVuY3Rpb24gdG8gdXNlIGZvciBkZWVwRXF1YWxcbiAgICogY29tcGFyaXNvbnMuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBmdW5jdGlvbiB1c2VkIGlzIHRoZSBvbmUgZnJvbSB0aGUgYGRlZXAtZXFsYCBwYWNrYWdlIHdpdGhvdXQgY3VzdG9tIGNvbXBhcmF0b3IuXG4gICAqXG4gICAqICAgICAvLyB1c2UgYSBjdXN0b20gY29tcGFyYXRvclxuICAgKiAgICAgY2hhaS5jb25maWcuZGVlcEVxdWFsID0gKGV4cGVjdGVkLCBhY3R1YWwpID0+IHtcbiAgICogICAgICAgICByZXR1cm4gY2hhaS51dGlsLmVxbChleHBlY3RlZCwgYWN0dWFsLCB7XG4gICAqICAgICAgICAgICAgIGNvbXBhcmF0b3I6IChleHBlY3RlZCwgYWN0dWFsKSA9PiB7XG4gICAqICAgICAgICAgICAgICAgICAvLyBmb3Igbm9uIG51bWJlciBjb21wYXJpc29uLCB1c2UgdGhlIGRlZmF1bHQgYmVoYXZpb3JcbiAgICogICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBleHBlY3RlZCAhPT0gJ251bWJlcicpIHJldHVybiBudWxsO1xuICAgKiAgICAgICAgICAgICAgICAgLy8gYWxsb3cgYSBkaWZmZXJlbmNlIG9mIDEwIGJldHdlZW4gY29tcGFyZWQgbnVtYmVyc1xuICAgKiAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhY3R1YWwgPT09ICdudW1iZXInICYmIE1hdGguYWJzKGFjdHVhbCAtIGV4cGVjdGVkKSA8IDEwXG4gICAqICAgICAgICAgICAgIH1cbiAgICogICAgICAgICB9KVxuICAgKiAgICAgfTtcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn1cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgZGVlcEVxdWFsOiBudWxsXG59O1xuXG4vLyBsaWIvY2hhaS91dGlscy9pbnNwZWN0LmpzXG5mdW5jdGlvbiBpbnNwZWN0MihvYmosIHNob3dIaWRkZW4sIGRlcHRoLCBjb2xvcnMpIHtcbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgY29sb3JzLFxuICAgIGRlcHRoOiB0eXBlb2YgZGVwdGggPT09IFwidW5kZWZpbmVkXCIgPyAyIDogZGVwdGgsXG4gICAgc2hvd0hpZGRlbixcbiAgICB0cnVuY2F0ZTogY29uZmlnLnRydW5jYXRlVGhyZXNob2xkID8gY29uZmlnLnRydW5jYXRlVGhyZXNob2xkIDogSW5maW5pdHlcbiAgfTtcbiAgcmV0dXJuIGluc3BlY3Qob2JqLCBvcHRpb25zKTtcbn1cbl9fbmFtZShpbnNwZWN0MiwgXCJpbnNwZWN0XCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9vYmpEaXNwbGF5LmpzXG5mdW5jdGlvbiBvYmpEaXNwbGF5KG9iaikge1xuICB2YXIgc3RyID0gaW5zcGVjdDIob2JqKSwgdHlwZTMgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKTtcbiAgaWYgKGNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZCAmJiBzdHIubGVuZ3RoID49IGNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZCkge1xuICAgIGlmICh0eXBlMyA9PT0gXCJbb2JqZWN0IEZ1bmN0aW9uXVwiKSB7XG4gICAgICByZXR1cm4gIW9iai5uYW1lIHx8IG9iai5uYW1lID09PSBcIlwiID8gXCJbRnVuY3Rpb25dXCIgOiBcIltGdW5jdGlvbjogXCIgKyBvYmoubmFtZSArIFwiXVwiO1xuICAgIH0gZWxzZSBpZiAodHlwZTMgPT09IFwiW29iamVjdCBBcnJheV1cIikge1xuICAgICAgcmV0dXJuIFwiWyBBcnJheShcIiArIG9iai5sZW5ndGggKyBcIikgXVwiO1xuICAgIH0gZWxzZSBpZiAodHlwZTMgPT09IFwiW29iamVjdCBPYmplY3RdXCIpIHtcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKSwga3N0ciA9IGtleXMubGVuZ3RoID4gMiA/IGtleXMuc3BsaWNlKDAsIDIpLmpvaW4oXCIsIFwiKSArIFwiLCAuLi5cIiA6IGtleXMuam9pbihcIiwgXCIpO1xuICAgICAgcmV0dXJuIFwieyBPYmplY3QgKFwiICsga3N0ciArIFwiKSB9XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbn1cbl9fbmFtZShvYmpEaXNwbGF5LCBcIm9iakRpc3BsYXlcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2dldE1lc3NhZ2UuanNcbmZ1bmN0aW9uIGdldE1lc3NhZ2UyKG9iaiwgYXJncykge1xuICB2YXIgbmVnYXRlID0gZmxhZyhvYmosIFwibmVnYXRlXCIpLCB2YWwgPSBmbGFnKG9iaiwgXCJvYmplY3RcIiksIGV4cGVjdGVkID0gYXJnc1szXSwgYWN0dWFsID0gZ2V0QWN0dWFsKG9iaiwgYXJncyksIG1zZyA9IG5lZ2F0ZSA/IGFyZ3NbMl0gOiBhcmdzWzFdLCBmbGFnTXNnID0gZmxhZyhvYmosIFwibWVzc2FnZVwiKTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09IFwiZnVuY3Rpb25cIilcbiAgICBtc2cgPSBtc2coKTtcbiAgbXNnID0gbXNnIHx8IFwiXCI7XG4gIG1zZyA9IG1zZy5yZXBsYWNlKC8jXFx7dGhpc1xcfS9nLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gb2JqRGlzcGxheSh2YWwpO1xuICB9KS5yZXBsYWNlKC8jXFx7YWN0XFx9L2csIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBvYmpEaXNwbGF5KGFjdHVhbCk7XG4gIH0pLnJlcGxhY2UoLyNcXHtleHBcXH0vZywgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG9iakRpc3BsYXkoZXhwZWN0ZWQpO1xuICB9KTtcbiAgcmV0dXJuIGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiICsgbXNnIDogbXNnO1xufVxuX19uYW1lKGdldE1lc3NhZ2UyLCBcImdldE1lc3NhZ2VcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL3RyYW5zZmVyRmxhZ3MuanNcbmZ1bmN0aW9uIHRyYW5zZmVyRmxhZ3MoYXNzZXJ0aW9uLCBvYmplY3QsIGluY2x1ZGVBbGwpIHtcbiAgdmFyIGZsYWdzID0gYXNzZXJ0aW9uLl9fZmxhZ3MgfHwgKGFzc2VydGlvbi5fX2ZsYWdzID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICBpZiAoIW9iamVjdC5fX2ZsYWdzKSB7XG4gICAgb2JqZWN0Ll9fZmxhZ3MgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgfVxuICBpbmNsdWRlQWxsID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMyA/IGluY2x1ZGVBbGwgOiB0cnVlO1xuICBmb3IgKHZhciBmbGFnMyBpbiBmbGFncykge1xuICAgIGlmIChpbmNsdWRlQWxsIHx8IGZsYWczICE9PSBcIm9iamVjdFwiICYmIGZsYWczICE9PSBcInNzZmlcIiAmJiBmbGFnMyAhPT0gXCJsb2NrU3NmaVwiICYmIGZsYWczICE9IFwibWVzc2FnZVwiKSB7XG4gICAgICBvYmplY3QuX19mbGFnc1tmbGFnM10gPSBmbGFnc1tmbGFnM107XG4gICAgfVxuICB9XG59XG5fX25hbWUodHJhbnNmZXJGbGFncywgXCJ0cmFuc2ZlckZsYWdzXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvZGVlcC1lcWwvaW5kZXguanNcbmZ1bmN0aW9uIHR5cGUyKG9iaikge1xuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBcInVuZGVmaW5lZFwiO1xuICB9XG4gIGlmIChvYmogPT09IG51bGwpIHtcbiAgICByZXR1cm4gXCJudWxsXCI7XG4gIH1cbiAgY29uc3Qgc3RyaW5nVGFnID0gb2JqW1N5bWJvbC50b1N0cmluZ1RhZ107XG4gIGlmICh0eXBlb2Ygc3RyaW5nVGFnID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHN0cmluZ1RhZztcbiAgfVxuICBjb25zdCBzbGljZVN0YXJ0ID0gODtcbiAgY29uc3Qgc2xpY2VFbmQgPSAtMTtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopLnNsaWNlKHNsaWNlU3RhcnQsIHNsaWNlRW5kKTtcbn1cbl9fbmFtZSh0eXBlMiwgXCJ0eXBlXCIpO1xuZnVuY3Rpb24gRmFrZU1hcCgpIHtcbiAgdGhpcy5fa2V5ID0gXCJjaGFpL2RlZXAtZXFsX19cIiArIE1hdGgucmFuZG9tKCkgKyBEYXRlLm5vdygpO1xufVxuX19uYW1lKEZha2VNYXAsIFwiRmFrZU1hcFwiKTtcbkZha2VNYXAucHJvdG90eXBlID0ge1xuICBnZXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIHJldHVybiBrZXlbdGhpcy5fa2V5XTtcbiAgfSwgXCJnZXRcIiksXG4gIHNldDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChPYmplY3QuaXNFeHRlbnNpYmxlKGtleSkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrZXksIHRoaXMuX2tleSwge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFwic2V0XCIpXG59O1xudmFyIE1lbW9pemVNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gXCJmdW5jdGlvblwiID8gV2Vha01hcCA6IEZha2VNYXA7XG5mdW5jdGlvbiBtZW1vaXplQ29tcGFyZShsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG1lbW9pemVNYXApIHtcbiAgaWYgKCFtZW1vaXplTWFwIHx8IGlzUHJpbWl0aXZlKGxlZnRIYW5kT3BlcmFuZCkgfHwgaXNQcmltaXRpdmUocmlnaHRIYW5kT3BlcmFuZCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB2YXIgbGVmdEhhbmRNYXAgPSBtZW1vaXplTWFwLmdldChsZWZ0SGFuZE9wZXJhbmQpO1xuICBpZiAobGVmdEhhbmRNYXApIHtcbiAgICB2YXIgcmVzdWx0ID0gbGVmdEhhbmRNYXAuZ2V0KHJpZ2h0SGFuZE9wZXJhbmQpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5fX25hbWUobWVtb2l6ZUNvbXBhcmUsIFwibWVtb2l6ZUNvbXBhcmVcIik7XG5mdW5jdGlvbiBtZW1vaXplU2V0KGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbWVtb2l6ZU1hcCwgcmVzdWx0KSB7XG4gIGlmICghbWVtb2l6ZU1hcCB8fCBpc1ByaW1pdGl2ZShsZWZ0SGFuZE9wZXJhbmQpIHx8IGlzUHJpbWl0aXZlKHJpZ2h0SGFuZE9wZXJhbmQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBsZWZ0SGFuZE1hcCA9IG1lbW9pemVNYXAuZ2V0KGxlZnRIYW5kT3BlcmFuZCk7XG4gIGlmIChsZWZ0SGFuZE1hcCkge1xuICAgIGxlZnRIYW5kTWFwLnNldChyaWdodEhhbmRPcGVyYW5kLCByZXN1bHQpO1xuICB9IGVsc2Uge1xuICAgIGxlZnRIYW5kTWFwID0gbmV3IE1lbW9pemVNYXAoKTtcbiAgICBsZWZ0SGFuZE1hcC5zZXQocmlnaHRIYW5kT3BlcmFuZCwgcmVzdWx0KTtcbiAgICBtZW1vaXplTWFwLnNldChsZWZ0SGFuZE9wZXJhbmQsIGxlZnRIYW5kTWFwKTtcbiAgfVxufVxuX19uYW1lKG1lbW9pemVTZXQsIFwibWVtb2l6ZVNldFwiKTtcbnZhciBkZWVwX2VxbF9kZWZhdWx0ID0gZGVlcEVxdWFsO1xuZnVuY3Rpb24gZGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmNvbXBhcmF0b3IpIHtcbiAgICByZXR1cm4gZXh0ZW5zaXZlRGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gIH1cbiAgdmFyIHNpbXBsZVJlc3VsdCA9IHNpbXBsZUVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCk7XG4gIGlmIChzaW1wbGVSZXN1bHQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gc2ltcGxlUmVzdWx0O1xuICB9XG4gIHJldHVybiBleHRlbnNpdmVEZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbn1cbl9fbmFtZShkZWVwRXF1YWwsIFwiZGVlcEVxdWFsXCIpO1xuZnVuY3Rpb24gc2ltcGxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKSB7XG4gIGlmIChsZWZ0SGFuZE9wZXJhbmQgPT09IHJpZ2h0SGFuZE9wZXJhbmQpIHtcbiAgICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kICE9PSAwIHx8IDEgLyBsZWZ0SGFuZE9wZXJhbmQgPT09IDEgLyByaWdodEhhbmRPcGVyYW5kO1xuICB9XG4gIGlmIChsZWZ0SGFuZE9wZXJhbmQgIT09IGxlZnRIYW5kT3BlcmFuZCAmJiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByaWdodEhhbmRPcGVyYW5kICE9PSByaWdodEhhbmRPcGVyYW5kKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGlzUHJpbWl0aXZlKGxlZnRIYW5kT3BlcmFuZCkgfHwgaXNQcmltaXRpdmUocmlnaHRIYW5kT3BlcmFuZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5fX25hbWUoc2ltcGxlRXF1YWwsIFwic2ltcGxlRXF1YWxcIik7XG5mdW5jdGlvbiBleHRlbnNpdmVEZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBvcHRpb25zLm1lbW9pemUgPSBvcHRpb25zLm1lbW9pemUgPT09IGZhbHNlID8gZmFsc2UgOiBvcHRpb25zLm1lbW9pemUgfHwgbmV3IE1lbW9pemVNYXAoKTtcbiAgdmFyIGNvbXBhcmF0b3IgPSBvcHRpb25zICYmIG9wdGlvbnMuY29tcGFyYXRvcjtcbiAgdmFyIG1lbW9pemVSZXN1bHRMZWZ0ID0gbWVtb2l6ZUNvbXBhcmUobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUpO1xuICBpZiAobWVtb2l6ZVJlc3VsdExlZnQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gbWVtb2l6ZVJlc3VsdExlZnQ7XG4gIH1cbiAgdmFyIG1lbW9pemVSZXN1bHRSaWdodCA9IG1lbW9pemVDb21wYXJlKHJpZ2h0SGFuZE9wZXJhbmQsIGxlZnRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplKTtcbiAgaWYgKG1lbW9pemVSZXN1bHRSaWdodCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBtZW1vaXplUmVzdWx0UmlnaHQ7XG4gIH1cbiAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICB2YXIgY29tcGFyYXRvclJlc3VsdCA9IGNvbXBhcmF0b3IobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgICBpZiAoY29tcGFyYXRvclJlc3VsdCA9PT0gZmFsc2UgfHwgY29tcGFyYXRvclJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgbWVtb2l6ZVNldChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSwgY29tcGFyYXRvclJlc3VsdCk7XG4gICAgICByZXR1cm4gY29tcGFyYXRvclJlc3VsdDtcbiAgICB9XG4gICAgdmFyIHNpbXBsZVJlc3VsdCA9IHNpbXBsZUVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCk7XG4gICAgaWYgKHNpbXBsZVJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHNpbXBsZVJlc3VsdDtcbiAgICB9XG4gIH1cbiAgdmFyIGxlZnRIYW5kVHlwZSA9IHR5cGUyKGxlZnRIYW5kT3BlcmFuZCk7XG4gIGlmIChsZWZ0SGFuZFR5cGUgIT09IHR5cGUyKHJpZ2h0SGFuZE9wZXJhbmQpKSB7XG4gICAgbWVtb2l6ZVNldChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSwgZmFsc2UpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBtZW1vaXplU2V0KGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplLCB0cnVlKTtcbiAgdmFyIHJlc3VsdCA9IGV4dGVuc2l2ZURlZXBFcXVhbEJ5VHlwZShsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIGxlZnRIYW5kVHlwZSwgb3B0aW9ucyk7XG4gIG1lbW9pemVTZXQobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5fX25hbWUoZXh0ZW5zaXZlRGVlcEVxdWFsLCBcImV4dGVuc2l2ZURlZXBFcXVhbFwiKTtcbmZ1bmN0aW9uIGV4dGVuc2l2ZURlZXBFcXVhbEJ5VHlwZShsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIGxlZnRIYW5kVHlwZSwgb3B0aW9ucykge1xuICBzd2l0Y2ggKGxlZnRIYW5kVHlwZSkge1xuICAgIGNhc2UgXCJTdHJpbmdcIjpcbiAgICBjYXNlIFwiTnVtYmVyXCI6XG4gICAgY2FzZSBcIkJvb2xlYW5cIjpcbiAgICBjYXNlIFwiRGF0ZVwiOlxuICAgICAgcmV0dXJuIGRlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmQudmFsdWVPZigpLCByaWdodEhhbmRPcGVyYW5kLnZhbHVlT2YoKSk7XG4gICAgY2FzZSBcIlByb21pc2VcIjpcbiAgICBjYXNlIFwiU3ltYm9sXCI6XG4gICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgY2FzZSBcIldlYWtNYXBcIjpcbiAgICBjYXNlIFwiV2Vha1NldFwiOlxuICAgICAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZCA9PT0gcmlnaHRIYW5kT3BlcmFuZDtcbiAgICBjYXNlIFwiRXJyb3JcIjpcbiAgICAgIHJldHVybiBrZXlzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBbXCJuYW1lXCIsIFwibWVzc2FnZVwiLCBcImNvZGVcIl0sIG9wdGlvbnMpO1xuICAgIGNhc2UgXCJBcmd1bWVudHNcIjpcbiAgICBjYXNlIFwiSW50OEFycmF5XCI6XG4gICAgY2FzZSBcIlVpbnQ4QXJyYXlcIjpcbiAgICBjYXNlIFwiVWludDhDbGFtcGVkQXJyYXlcIjpcbiAgICBjYXNlIFwiSW50MTZBcnJheVwiOlxuICAgIGNhc2UgXCJVaW50MTZBcnJheVwiOlxuICAgIGNhc2UgXCJJbnQzMkFycmF5XCI6XG4gICAgY2FzZSBcIlVpbnQzMkFycmF5XCI6XG4gICAgY2FzZSBcIkZsb2F0MzJBcnJheVwiOlxuICAgIGNhc2UgXCJGbG9hdDY0QXJyYXlcIjpcbiAgICBjYXNlIFwiQXJyYXlcIjpcbiAgICAgIHJldHVybiBpdGVyYWJsZUVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gICAgY2FzZSBcIlJlZ0V4cFwiOlxuICAgICAgcmV0dXJuIHJlZ2V4cEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCk7XG4gICAgY2FzZSBcIkdlbmVyYXRvclwiOlxuICAgICAgcmV0dXJuIGdlbmVyYXRvckVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gICAgY2FzZSBcIkRhdGFWaWV3XCI6XG4gICAgICByZXR1cm4gaXRlcmFibGVFcXVhbChuZXcgVWludDhBcnJheShsZWZ0SGFuZE9wZXJhbmQuYnVmZmVyKSwgbmV3IFVpbnQ4QXJyYXkocmlnaHRIYW5kT3BlcmFuZC5idWZmZXIpLCBvcHRpb25zKTtcbiAgICBjYXNlIFwiQXJyYXlCdWZmZXJcIjpcbiAgICAgIHJldHVybiBpdGVyYWJsZUVxdWFsKG5ldyBVaW50OEFycmF5KGxlZnRIYW5kT3BlcmFuZCksIG5ldyBVaW50OEFycmF5KHJpZ2h0SGFuZE9wZXJhbmQpLCBvcHRpb25zKTtcbiAgICBjYXNlIFwiU2V0XCI6XG4gICAgICByZXR1cm4gZW50cmllc0VxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gICAgY2FzZSBcIk1hcFwiOlxuICAgICAgcmV0dXJuIGVudHJpZXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpO1xuICAgIGNhc2UgXCJUZW1wb3JhbC5QbGFpbkRhdGVcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuUGxhaW5UaW1lXCI6XG4gICAgY2FzZSBcIlRlbXBvcmFsLlBsYWluRGF0ZVRpbWVcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuSW5zdGFudFwiOlxuICAgIGNhc2UgXCJUZW1wb3JhbC5ab25lZERhdGVUaW1lXCI6XG4gICAgY2FzZSBcIlRlbXBvcmFsLlBsYWluWWVhck1vbnRoXCI6XG4gICAgY2FzZSBcIlRlbXBvcmFsLlBsYWluTW9udGhEYXlcIjpcbiAgICAgIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQuZXF1YWxzKHJpZ2h0SGFuZE9wZXJhbmQpO1xuICAgIGNhc2UgXCJUZW1wb3JhbC5EdXJhdGlvblwiOlxuICAgICAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZC50b3RhbChcIm5hbm9zZWNvbmRzXCIpID09PSByaWdodEhhbmRPcGVyYW5kLnRvdGFsKFwibmFub3NlY29uZHNcIik7XG4gICAgY2FzZSBcIlRlbXBvcmFsLlRpbWVab25lXCI6XG4gICAgY2FzZSBcIlRlbXBvcmFsLkNhbGVuZGFyXCI6XG4gICAgICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kLnRvU3RyaW5nKCkgPT09IHJpZ2h0SGFuZE9wZXJhbmQudG9TdHJpbmcoKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG9iamVjdEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gIH1cbn1cbl9fbmFtZShleHRlbnNpdmVEZWVwRXF1YWxCeVR5cGUsIFwiZXh0ZW5zaXZlRGVlcEVxdWFsQnlUeXBlXCIpO1xuZnVuY3Rpb24gcmVnZXhwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKSB7XG4gIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQudG9TdHJpbmcoKSA9PT0gcmlnaHRIYW5kT3BlcmFuZC50b1N0cmluZygpO1xufVxuX19uYW1lKHJlZ2V4cEVxdWFsLCBcInJlZ2V4cEVxdWFsXCIpO1xuZnVuY3Rpb24gZW50cmllc0VxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucykge1xuICB0cnkge1xuICAgIGlmIChsZWZ0SGFuZE9wZXJhbmQuc2l6ZSAhPT0gcmlnaHRIYW5kT3BlcmFuZC5zaXplKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChsZWZ0SGFuZE9wZXJhbmQuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChzaXplRXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxlZnRIYW5kSXRlbXMgPSBbXTtcbiAgdmFyIHJpZ2h0SGFuZEl0ZW1zID0gW107XG4gIGxlZnRIYW5kT3BlcmFuZC5mb3JFYWNoKC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gZ2F0aGVyRW50cmllcyhrZXksIHZhbHVlKSB7XG4gICAgbGVmdEhhbmRJdGVtcy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sIFwiZ2F0aGVyRW50cmllc1wiKSk7XG4gIHJpZ2h0SGFuZE9wZXJhbmQuZm9yRWFjaCgvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGdhdGhlckVudHJpZXMoa2V5LCB2YWx1ZSkge1xuICAgIHJpZ2h0SGFuZEl0ZW1zLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSwgXCJnYXRoZXJFbnRyaWVzXCIpKTtcbiAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwobGVmdEhhbmRJdGVtcy5zb3J0KCksIHJpZ2h0SGFuZEl0ZW1zLnNvcnQoKSwgb3B0aW9ucyk7XG59XG5fX25hbWUoZW50cmllc0VxdWFsLCBcImVudHJpZXNFcXVhbFwiKTtcbmZ1bmN0aW9uIGl0ZXJhYmxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIHZhciBsZW5ndGggPSBsZWZ0SGFuZE9wZXJhbmQubGVuZ3RoO1xuICBpZiAobGVuZ3RoICE9PSByaWdodEhhbmRPcGVyYW5kLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTE7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGRlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmRbaW5kZXhdLCByaWdodEhhbmRPcGVyYW5kW2luZGV4XSwgb3B0aW9ucykgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuX19uYW1lKGl0ZXJhYmxlRXF1YWwsIFwiaXRlcmFibGVFcXVhbFwiKTtcbmZ1bmN0aW9uIGdlbmVyYXRvckVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucykge1xuICByZXR1cm4gaXRlcmFibGVFcXVhbChnZXRHZW5lcmF0b3JFbnRyaWVzKGxlZnRIYW5kT3BlcmFuZCksIGdldEdlbmVyYXRvckVudHJpZXMocmlnaHRIYW5kT3BlcmFuZCksIG9wdGlvbnMpO1xufVxuX19uYW1lKGdlbmVyYXRvckVxdWFsLCBcImdlbmVyYXRvckVxdWFsXCIpO1xuZnVuY3Rpb24gaGFzSXRlcmF0b3JGdW5jdGlvbih0YXJnZXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHRhcmdldCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB0YXJnZXRbU3ltYm9sLml0ZXJhdG9yXSA9PT0gXCJmdW5jdGlvblwiO1xufVxuX19uYW1lKGhhc0l0ZXJhdG9yRnVuY3Rpb24sIFwiaGFzSXRlcmF0b3JGdW5jdGlvblwiKTtcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRW50cmllcyh0YXJnZXQpIHtcbiAgaWYgKGhhc0l0ZXJhdG9yRnVuY3Rpb24odGFyZ2V0KSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZ2V0R2VuZXJhdG9yRW50cmllcyh0YXJnZXRbU3ltYm9sLml0ZXJhdG9yXSgpKTtcbiAgICB9IGNhdGNoIChpdGVyYXRvckVycm9yKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG4gIHJldHVybiBbXTtcbn1cbl9fbmFtZShnZXRJdGVyYXRvckVudHJpZXMsIFwiZ2V0SXRlcmF0b3JFbnRyaWVzXCIpO1xuZnVuY3Rpb24gZ2V0R2VuZXJhdG9yRW50cmllcyhnZW5lcmF0b3IpIHtcbiAgdmFyIGdlbmVyYXRvclJlc3VsdCA9IGdlbmVyYXRvci5uZXh0KCk7XG4gIHZhciBhY2N1bXVsYXRvciA9IFtnZW5lcmF0b3JSZXN1bHQudmFsdWVdO1xuICB3aGlsZSAoZ2VuZXJhdG9yUmVzdWx0LmRvbmUgPT09IGZhbHNlKSB7XG4gICAgZ2VuZXJhdG9yUmVzdWx0ID0gZ2VuZXJhdG9yLm5leHQoKTtcbiAgICBhY2N1bXVsYXRvci5wdXNoKGdlbmVyYXRvclJlc3VsdC52YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGFjY3VtdWxhdG9yO1xufVxuX19uYW1lKGdldEdlbmVyYXRvckVudHJpZXMsIFwiZ2V0R2VuZXJhdG9yRW50cmllc1wiKTtcbmZ1bmN0aW9uIGdldEVudW1lcmFibGVLZXlzKHRhcmdldCkge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gdGFyZ2V0KSB7XG4gICAga2V5cy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59XG5fX25hbWUoZ2V0RW51bWVyYWJsZUtleXMsIFwiZ2V0RW51bWVyYWJsZUtleXNcIik7XG5mdW5jdGlvbiBnZXRFbnVtZXJhYmxlU3ltYm9scyh0YXJnZXQpIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgdmFyIGFsbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsS2V5cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciBrZXkgPSBhbGxLZXlzW2ldO1xuICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KS5lbnVtZXJhYmxlKSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59XG5fX25hbWUoZ2V0RW51bWVyYWJsZVN5bWJvbHMsIFwiZ2V0RW51bWVyYWJsZVN5bWJvbHNcIik7XG5mdW5jdGlvbiBrZXlzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBrZXlzLCBvcHRpb25zKSB7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoZGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZFtrZXlzW2ldXSwgcmlnaHRIYW5kT3BlcmFuZFtrZXlzW2ldXSwgb3B0aW9ucykgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuX19uYW1lKGtleXNFcXVhbCwgXCJrZXlzRXF1YWxcIik7XG5mdW5jdGlvbiBvYmplY3RFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgdmFyIGxlZnRIYW5kS2V5cyA9IGdldEVudW1lcmFibGVLZXlzKGxlZnRIYW5kT3BlcmFuZCk7XG4gIHZhciByaWdodEhhbmRLZXlzID0gZ2V0RW51bWVyYWJsZUtleXMocmlnaHRIYW5kT3BlcmFuZCk7XG4gIHZhciBsZWZ0SGFuZFN5bWJvbHMgPSBnZXRFbnVtZXJhYmxlU3ltYm9scyhsZWZ0SGFuZE9wZXJhbmQpO1xuICB2YXIgcmlnaHRIYW5kU3ltYm9scyA9IGdldEVudW1lcmFibGVTeW1ib2xzKHJpZ2h0SGFuZE9wZXJhbmQpO1xuICBsZWZ0SGFuZEtleXMgPSBsZWZ0SGFuZEtleXMuY29uY2F0KGxlZnRIYW5kU3ltYm9scyk7XG4gIHJpZ2h0SGFuZEtleXMgPSByaWdodEhhbmRLZXlzLmNvbmNhdChyaWdodEhhbmRTeW1ib2xzKTtcbiAgaWYgKGxlZnRIYW5kS2V5cy5sZW5ndGggJiYgbGVmdEhhbmRLZXlzLmxlbmd0aCA9PT0gcmlnaHRIYW5kS2V5cy5sZW5ndGgpIHtcbiAgICBpZiAoaXRlcmFibGVFcXVhbChtYXBTeW1ib2xzKGxlZnRIYW5kS2V5cykuc29ydCgpLCBtYXBTeW1ib2xzKHJpZ2h0SGFuZEtleXMpLnNvcnQoKSkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBrZXlzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBsZWZ0SGFuZEtleXMsIG9wdGlvbnMpO1xuICB9XG4gIHZhciBsZWZ0SGFuZEVudHJpZXMgPSBnZXRJdGVyYXRvckVudHJpZXMobGVmdEhhbmRPcGVyYW5kKTtcbiAgdmFyIHJpZ2h0SGFuZEVudHJpZXMgPSBnZXRJdGVyYXRvckVudHJpZXMocmlnaHRIYW5kT3BlcmFuZCk7XG4gIGlmIChsZWZ0SGFuZEVudHJpZXMubGVuZ3RoICYmIGxlZnRIYW5kRW50cmllcy5sZW5ndGggPT09IHJpZ2h0SGFuZEVudHJpZXMubGVuZ3RoKSB7XG4gICAgbGVmdEhhbmRFbnRyaWVzLnNvcnQoKTtcbiAgICByaWdodEhhbmRFbnRyaWVzLnNvcnQoKTtcbiAgICByZXR1cm4gaXRlcmFibGVFcXVhbChsZWZ0SGFuZEVudHJpZXMsIHJpZ2h0SGFuZEVudHJpZXMsIG9wdGlvbnMpO1xuICB9XG4gIGlmIChsZWZ0SGFuZEtleXMubGVuZ3RoID09PSAwICYmIGxlZnRIYW5kRW50cmllcy5sZW5ndGggPT09IDAgJiYgcmlnaHRIYW5kS2V5cy5sZW5ndGggPT09IDAgJiYgcmlnaHRIYW5kRW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5fX25hbWUob2JqZWN0RXF1YWwsIFwib2JqZWN0RXF1YWxcIik7XG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiO1xufVxuX19uYW1lKGlzUHJpbWl0aXZlLCBcImlzUHJpbWl0aXZlXCIpO1xuZnVuY3Rpb24gbWFwU3ltYm9scyhhcnIpIHtcbiAgcmV0dXJuIGFyci5tYXAoLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBtYXBTeW1ib2woZW50cnkpIHtcbiAgICBpZiAodHlwZW9mIGVudHJ5ID09PSBcInN5bWJvbFwiKSB7XG4gICAgICByZXR1cm4gZW50cnkudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJ5O1xuICB9LCBcIm1hcFN5bWJvbFwiKSk7XG59XG5fX25hbWUobWFwU3ltYm9scywgXCJtYXBTeW1ib2xzXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvcGF0aHZhbC9pbmRleC5qc1xuZnVuY3Rpb24gaGFzUHJvcGVydHkob2JqLCBuYW1lKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gbmFtZSBpbiBPYmplY3Qob2JqKTtcbn1cbl9fbmFtZShoYXNQcm9wZXJ0eSwgXCJoYXNQcm9wZXJ0eVwiKTtcbmZ1bmN0aW9uIHBhcnNlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHN0ciA9IHBhdGgucmVwbGFjZSgvKFteXFxcXF0pXFxbL2csIFwiJDEuW1wiKTtcbiAgY29uc3QgcGFydHMgPSBzdHIubWF0Y2goLyhcXFxcXFwufFteLl0rPykrL2cpO1xuICByZXR1cm4gcGFydHMubWFwKCh2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gXCJjb25zdHJ1Y3RvclwiIHx8IHZhbHVlID09PSBcIl9fcHJvdG9fX1wiIHx8IHZhbHVlID09PSBcInByb3RvdHlwZVwiKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHJlZ2V4cCA9IC9eXFxbKFxcZCspXFxdJC87XG4gICAgY29uc3QgbUFyciA9IHJlZ2V4cC5leGVjKHZhbHVlKTtcbiAgICBsZXQgcGFyc2VkID0gbnVsbDtcbiAgICBpZiAobUFycikge1xuICAgICAgcGFyc2VkID0geyBpOiBwYXJzZUZsb2F0KG1BcnJbMV0pIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZCA9IHsgcDogdmFsdWUucmVwbGFjZSgvXFxcXChbLltcXF1dKS9nLCBcIiQxXCIpIH07XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH0pO1xufVxuX19uYW1lKHBhcnNlUGF0aCwgXCJwYXJzZVBhdGhcIik7XG5mdW5jdGlvbiBpbnRlcm5hbEdldFBhdGhWYWx1ZShvYmosIHBhcnNlZCwgcGF0aERlcHRoKSB7XG4gIGxldCB0ZW1wb3JhcnlWYWx1ZSA9IG9iajtcbiAgbGV0IHJlcyA9IG51bGw7XG4gIHBhdGhEZXB0aCA9IHR5cGVvZiBwYXRoRGVwdGggPT09IFwidW5kZWZpbmVkXCIgPyBwYXJzZWQubGVuZ3RoIDogcGF0aERlcHRoO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGhEZXB0aDsgaSsrKSB7XG4gICAgY29uc3QgcGFydCA9IHBhcnNlZFtpXTtcbiAgICBpZiAodGVtcG9yYXJ5VmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydC5wID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHRlbXBvcmFyeVZhbHVlID0gdGVtcG9yYXJ5VmFsdWVbcGFydC5pXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRlbXBvcmFyeVZhbHVlID0gdGVtcG9yYXJ5VmFsdWVbcGFydC5wXTtcbiAgICAgIH1cbiAgICAgIGlmIChpID09PSBwYXRoRGVwdGggLSAxKSB7XG4gICAgICAgIHJlcyA9IHRlbXBvcmFyeVZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuX19uYW1lKGludGVybmFsR2V0UGF0aFZhbHVlLCBcImludGVybmFsR2V0UGF0aFZhbHVlXCIpO1xuZnVuY3Rpb24gZ2V0UGF0aEluZm8ob2JqLCBwYXRoKSB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlUGF0aChwYXRoKTtcbiAgY29uc3QgbGFzdCA9IHBhcnNlZFtwYXJzZWQubGVuZ3RoIC0gMV07XG4gIGNvbnN0IGluZm8gPSB7XG4gICAgcGFyZW50OiBwYXJzZWQubGVuZ3RoID4gMSA/IGludGVybmFsR2V0UGF0aFZhbHVlKG9iaiwgcGFyc2VkLCBwYXJzZWQubGVuZ3RoIC0gMSkgOiBvYmosXG4gICAgbmFtZTogbGFzdC5wIHx8IGxhc3QuaSxcbiAgICB2YWx1ZTogaW50ZXJuYWxHZXRQYXRoVmFsdWUob2JqLCBwYXJzZWQpXG4gIH07XG4gIGluZm8uZXhpc3RzID0gaGFzUHJvcGVydHkoaW5mby5wYXJlbnQsIGluZm8ubmFtZSk7XG4gIHJldHVybiBpbmZvO1xufVxuX19uYW1lKGdldFBhdGhJbmZvLCBcImdldFBhdGhJbmZvXCIpO1xuXG4vLyBsaWIvY2hhaS9hc3NlcnRpb24uanNcbmZ1bmN0aW9uIEFzc2VydGlvbihvYmosIG1zZywgc3NmaSwgbG9ja1NzZmkpIHtcbiAgZmxhZyh0aGlzLCBcInNzZmlcIiwgc3NmaSB8fCBBc3NlcnRpb24pO1xuICBmbGFnKHRoaXMsIFwibG9ja1NzZmlcIiwgbG9ja1NzZmkpO1xuICBmbGFnKHRoaXMsIFwib2JqZWN0XCIsIG9iaik7XG4gIGZsYWcodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIGZsYWcodGhpcywgXCJlcWxcIiwgY29uZmlnLmRlZXBFcXVhbCB8fCBkZWVwX2VxbF9kZWZhdWx0KTtcbiAgcmV0dXJuIHByb3hpZnkodGhpcyk7XG59XG5fX25hbWUoQXNzZXJ0aW9uLCBcIkFzc2VydGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBc3NlcnRpb24sIFwiaW5jbHVkZVN0YWNrXCIsIHtcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICBjb25zb2xlLndhcm4oXCJBc3NlcnRpb24uaW5jbHVkZVN0YWNrIGlzIGRlcHJlY2F0ZWQsIHVzZSBjaGFpLmNvbmZpZy5pbmNsdWRlU3RhY2sgaW5zdGVhZC5cIik7XG4gICAgcmV0dXJuIGNvbmZpZy5pbmNsdWRlU3RhY2s7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICBjb25zb2xlLndhcm4oXCJBc3NlcnRpb24uaW5jbHVkZVN0YWNrIGlzIGRlcHJlY2F0ZWQsIHVzZSBjaGFpLmNvbmZpZy5pbmNsdWRlU3RhY2sgaW5zdGVhZC5cIik7XG4gICAgY29uZmlnLmluY2x1ZGVTdGFjayA9IHZhbHVlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBc3NlcnRpb24sIFwic2hvd0RpZmZcIiwge1xuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIGNvbnNvbGUud2FybihcIkFzc2VydGlvbi5zaG93RGlmZiBpcyBkZXByZWNhdGVkLCB1c2UgY2hhaS5jb25maWcuc2hvd0RpZmYgaW5zdGVhZC5cIik7XG4gICAgcmV0dXJuIGNvbmZpZy5zaG93RGlmZjtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIGNvbnNvbGUud2FybihcIkFzc2VydGlvbi5zaG93RGlmZiBpcyBkZXByZWNhdGVkLCB1c2UgY2hhaS5jb25maWcuc2hvd0RpZmYgaW5zdGVhZC5cIik7XG4gICAgY29uZmlnLnNob3dEaWZmID0gdmFsdWU7XG4gIH1cbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5ID0gZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgYWRkUHJvcGVydHkodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuKTtcbn07XG5Bc3NlcnRpb24uYWRkTWV0aG9kID0gZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgYWRkTWV0aG9kKHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbik7XG59O1xuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZCA9IGZ1bmN0aW9uKG5hbWUsIGZuLCBjaGFpbmluZ0JlaGF2aW9yKSB7XG4gIGFkZENoYWluYWJsZU1ldGhvZCh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4sIGNoYWluaW5nQmVoYXZpb3IpO1xufTtcbkFzc2VydGlvbi5vdmVyd3JpdGVQcm9wZXJ0eSA9IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gIG92ZXJ3cml0ZVByb3BlcnR5KHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbik7XG59O1xuQXNzZXJ0aW9uLm92ZXJ3cml0ZU1ldGhvZCA9IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gIG92ZXJ3cml0ZU1ldGhvZCh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4pO1xufTtcbkFzc2VydGlvbi5vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QgPSBmdW5jdGlvbihuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcikge1xuICBvdmVyd3JpdGVDaGFpbmFibGVNZXRob2QodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuLCBjaGFpbmluZ0JlaGF2aW9yKTtcbn07XG5Bc3NlcnRpb24ucHJvdG90eXBlLmFzc2VydCA9IGZ1bmN0aW9uKGV4cHIsIG1zZywgbmVnYXRlTXNnLCBleHBlY3RlZCwgX2FjdHVhbCwgc2hvd0RpZmYpIHtcbiAgdmFyIG9rID0gdGVzdCh0aGlzLCBhcmd1bWVudHMpO1xuICBpZiAoZmFsc2UgIT09IHNob3dEaWZmKVxuICAgIHNob3dEaWZmID0gdHJ1ZTtcbiAgaWYgKHZvaWQgMCA9PT0gZXhwZWN0ZWQgJiYgdm9pZCAwID09PSBfYWN0dWFsKVxuICAgIHNob3dEaWZmID0gZmFsc2U7XG4gIGlmICh0cnVlICE9PSBjb25maWcuc2hvd0RpZmYpXG4gICAgc2hvd0RpZmYgPSBmYWxzZTtcbiAgaWYgKCFvaykge1xuICAgIG1zZyA9IGdldE1lc3NhZ2UyKHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdmFyIGFjdHVhbCA9IGdldEFjdHVhbCh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHZhciBhc3NlcnRpb25FcnJvck9iamVjdFByb3BlcnRpZXMgPSB7XG4gICAgICBhY3R1YWwsXG4gICAgICBleHBlY3RlZCxcbiAgICAgIHNob3dEaWZmXG4gICAgfTtcbiAgICB2YXIgb3BlcmF0b3IgPSBnZXRPcGVyYXRvcih0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChvcGVyYXRvcikge1xuICAgICAgYXNzZXJ0aW9uRXJyb3JPYmplY3RQcm9wZXJ0aWVzLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgfVxuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgIG1zZyxcbiAgICAgIGFzc2VydGlvbkVycm9yT2JqZWN0UHJvcGVydGllcyxcbiAgICAgIGNvbmZpZy5pbmNsdWRlU3RhY2sgPyB0aGlzLmFzc2VydCA6IGZsYWcodGhpcywgXCJzc2ZpXCIpXG4gICAgKTtcbiAgfVxufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgQXNzZXJ0aW9uLnByb3RvdHlwZSxcbiAgXCJfb2JqXCIsXG4gIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZsYWcodGhpcywgXCJvYmplY3RcIik7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgZmxhZyh0aGlzLCBcIm9iamVjdFwiLCB2YWwpO1xuICAgIH1cbiAgfVxuKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvaXNQcm94eUVuYWJsZWQuanNcbmZ1bmN0aW9uIGlzUHJveHlFbmFibGVkKCkge1xuICByZXR1cm4gY29uZmlnLnVzZVByb3h5ICYmIHR5cGVvZiBQcm94eSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIjtcbn1cbl9fbmFtZShpc1Byb3h5RW5hYmxlZCwgXCJpc1Byb3h5RW5hYmxlZFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvYWRkUHJvcGVydHkuanNcbmZ1bmN0aW9uIGFkZFByb3BlcnR5KGN0eCwgbmFtZSwgZ2V0dGVyKSB7XG4gIGdldHRlciA9IGdldHRlciA9PT0gdm9pZCAwID8gZnVuY3Rpb24oKSB7XG4gIH0gOiBnZXR0ZXI7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICBjdHgsXG4gICAgbmFtZSxcbiAgICB7XG4gICAgICBnZXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHJvcGVydHlHZXR0ZXIoKSB7XG4gICAgICAgIGlmICghaXNQcm94eUVuYWJsZWQoKSAmJiAhZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIpKSB7XG4gICAgICAgICAgZmxhZyh0aGlzLCBcInNzZmlcIiwgcHJvcGVydHlHZXR0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHQgPSBnZXR0ZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKVxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKCk7XG4gICAgICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICAgICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgICAgIH0sIFwicHJvcGVydHlHZXR0ZXJcIiksXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gICk7XG59XG5fX25hbWUoYWRkUHJvcGVydHksIFwiYWRkUHJvcGVydHlcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2FkZExlbmd0aEd1YXJkLmpzXG52YXIgZm5MZW5ndGhEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihmdW5jdGlvbigpIHtcbn0sIFwibGVuZ3RoXCIpO1xuZnVuY3Rpb24gYWRkTGVuZ3RoR3VhcmQoZm4sIGFzc2VydGlvbk5hbWUsIGlzQ2hhaW5hYmxlKSB7XG4gIGlmICghZm5MZW5ndGhEZXNjLmNvbmZpZ3VyYWJsZSlcbiAgICByZXR1cm4gZm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgXCJsZW5ndGhcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoaXNDaGFpbmFibGUpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIENoYWkgcHJvcGVydHk6IFwiICsgYXNzZXJ0aW9uTmFtZSArICcubGVuZ3RoLiBEdWUgdG8gYSBjb21wYXRpYmlsaXR5IGlzc3VlLCBcImxlbmd0aFwiIGNhbm5vdCBkaXJlY3RseSBmb2xsb3cgXCInICsgYXNzZXJ0aW9uTmFtZSArICdcIi4gVXNlIFwiJyArIGFzc2VydGlvbk5hbWUgKyAnLmxlbmd0aE9mXCIgaW5zdGVhZC4nKTtcbiAgICAgIH1cbiAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBDaGFpIHByb3BlcnR5OiBcIiArIGFzc2VydGlvbk5hbWUgKyAnLmxlbmd0aC4gU2VlIGRvY3MgZm9yIHByb3BlciB1c2FnZSBvZiBcIicgKyBhc3NlcnRpb25OYW1lICsgJ1wiLicpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmbjtcbn1cbl9fbmFtZShhZGRMZW5ndGhHdWFyZCwgXCJhZGRMZW5ndGhHdWFyZFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvZ2V0UHJvcGVydGllcy5qc1xuZnVuY3Rpb24gZ2V0UHJvcGVydGllcyhvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7XG4gIGZ1bmN0aW9uIGFkZFByb3BlcnR5Mihwcm9wZXJ0eSkge1xuICAgIGlmIChyZXN1bHQuaW5kZXhPZihwcm9wZXJ0eSkgPT09IC0xKSB7XG4gICAgICByZXN1bHQucHVzaChwcm9wZXJ0eSk7XG4gICAgfVxuICB9XG4gIF9fbmFtZShhZGRQcm9wZXJ0eTIsIFwiYWRkUHJvcGVydHlcIik7XG4gIHZhciBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpO1xuICB3aGlsZSAocHJvdG8gIT09IG51bGwpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm90bykuZm9yRWFjaChhZGRQcm9wZXJ0eTIpO1xuICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuX19uYW1lKGdldFByb3BlcnRpZXMsIFwiZ2V0UHJvcGVydGllc1wiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvcHJveGlmeS5qc1xudmFyIGJ1aWx0aW5zID0gW1wiX19mbGFnc1wiLCBcIl9fbWV0aG9kc1wiLCBcIl9vYmpcIiwgXCJhc3NlcnRcIl07XG5mdW5jdGlvbiBwcm94aWZ5KG9iaiwgbm9uQ2hhaW5hYmxlTWV0aG9kTmFtZSkge1xuICBpZiAoIWlzUHJveHlFbmFibGVkKCkpXG4gICAgcmV0dXJuIG9iajtcbiAgcmV0dXJuIG5ldyBQcm94eShvYmosIHtcbiAgICBnZXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHJveHlHZXR0ZXIodGFyZ2V0LCBwcm9wZXJ0eSkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gXCJzdHJpbmdcIiAmJiBjb25maWcucHJveHlFeGNsdWRlZEtleXMuaW5kZXhPZihwcm9wZXJ0eSkgPT09IC0xICYmICFSZWZsZWN0Lmhhcyh0YXJnZXQsIHByb3BlcnR5KSkge1xuICAgICAgICBpZiAobm9uQ2hhaW5hYmxlTWV0aG9kTmFtZSkge1xuICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBDaGFpIHByb3BlcnR5OiBcIiArIG5vbkNoYWluYWJsZU1ldGhvZE5hbWUgKyBcIi5cIiArIHByb3BlcnR5ICsgJy4gU2VlIGRvY3MgZm9yIHByb3BlciB1c2FnZSBvZiBcIicgKyBub25DaGFpbmFibGVNZXRob2ROYW1lICsgJ1wiLicpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzdWdnZXN0aW9uID0gbnVsbDtcbiAgICAgICAgdmFyIHN1Z2dlc3Rpb25EaXN0YW5jZSA9IDQ7XG4gICAgICAgIGdldFByb3BlcnRpZXModGFyZ2V0KS5mb3JFYWNoKGZ1bmN0aW9uKHByb3ApIHtcbiAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkocHJvcCkgJiYgYnVpbHRpbnMuaW5kZXhPZihwcm9wKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHZhciBkaXN0ID0gc3RyaW5nRGlzdGFuY2VDYXBwZWQoXG4gICAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uRGlzdGFuY2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoZGlzdCA8IHN1Z2dlc3Rpb25EaXN0YW5jZSkge1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uID0gcHJvcDtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbkRpc3RhbmNlID0gZGlzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoc3VnZ2VzdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBDaGFpIHByb3BlcnR5OiBcIiArIHByb3BlcnR5ICsgJy4gRGlkIHlvdSBtZWFuIFwiJyArIHN1Z2dlc3Rpb24gKyAnXCI/Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIENoYWkgcHJvcGVydHk6IFwiICsgcHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYnVpbHRpbnMuaW5kZXhPZihwcm9wZXJ0eSkgPT09IC0xICYmICFmbGFnKHRhcmdldCwgXCJsb2NrU3NmaVwiKSkge1xuICAgICAgICBmbGFnKHRhcmdldCwgXCJzc2ZpXCIsIHByb3h5R2V0dGVyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICB9LCBcInByb3h5R2V0dGVyXCIpXG4gIH0pO1xufVxuX19uYW1lKHByb3hpZnksIFwicHJveGlmeVwiKTtcbmZ1bmN0aW9uIHN0cmluZ0Rpc3RhbmNlQ2FwcGVkKHN0ckEsIHN0ckIsIGNhcCkge1xuICBpZiAoTWF0aC5hYnMoc3RyQS5sZW5ndGggLSBzdHJCLmxlbmd0aCkgPj0gY2FwKSB7XG4gICAgcmV0dXJuIGNhcDtcbiAgfVxuICB2YXIgbWVtbyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8PSBzdHJBLmxlbmd0aDsgaSsrKSB7XG4gICAgbWVtb1tpXSA9IEFycmF5KHN0ckIubGVuZ3RoICsgMSkuZmlsbCgwKTtcbiAgICBtZW1vW2ldWzBdID0gaTtcbiAgfVxuICBmb3IgKHZhciBqID0gMDsgaiA8IHN0ckIubGVuZ3RoOyBqKyspIHtcbiAgICBtZW1vWzBdW2pdID0gajtcbiAgfVxuICBmb3IgKHZhciBpID0gMTsgaSA8PSBzdHJBLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNoID0gc3RyQS5jaGFyQ29kZUF0KGkgLSAxKTtcbiAgICBmb3IgKHZhciBqID0gMTsgaiA8PSBzdHJCLmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAoTWF0aC5hYnMoaSAtIGopID49IGNhcCkge1xuICAgICAgICBtZW1vW2ldW2pdID0gY2FwO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIG1lbW9baV1bal0gPSBNYXRoLm1pbihcbiAgICAgICAgbWVtb1tpIC0gMV1bal0gKyAxLFxuICAgICAgICBtZW1vW2ldW2ogLSAxXSArIDEsXG4gICAgICAgIG1lbW9baSAtIDFdW2ogLSAxXSArIChjaCA9PT0gc3RyQi5jaGFyQ29kZUF0KGogLSAxKSA/IDAgOiAxKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1lbW9bc3RyQS5sZW5ndGhdW3N0ckIubGVuZ3RoXTtcbn1cbl9fbmFtZShzdHJpbmdEaXN0YW5jZUNhcHBlZCwgXCJzdHJpbmdEaXN0YW5jZUNhcHBlZFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvYWRkTWV0aG9kLmpzXG5mdW5jdGlvbiBhZGRNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QpIHtcbiAgdmFyIG1ldGhvZFdyYXBwZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgIGlmICghZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIpKSB7XG4gICAgICBmbGFnKHRoaXMsIFwic3NmaVwiLCBtZXRob2RXcmFwcGVyKTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMClcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24oKTtcbiAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgfSwgXCJtZXRob2RXcmFwcGVyXCIpO1xuICBhZGRMZW5ndGhHdWFyZChtZXRob2RXcmFwcGVyLCBuYW1lLCBmYWxzZSk7XG4gIGN0eFtuYW1lXSA9IHByb3hpZnkobWV0aG9kV3JhcHBlciwgbmFtZSk7XG59XG5fX25hbWUoYWRkTWV0aG9kLCBcImFkZE1ldGhvZFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvb3ZlcndyaXRlUHJvcGVydHkuanNcbmZ1bmN0aW9uIG92ZXJ3cml0ZVByb3BlcnR5KGN0eCwgbmFtZSwgZ2V0dGVyKSB7XG4gIHZhciBfZ2V0ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjdHgsIG5hbWUpLCBfc3VwZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICB9LCBcIl9zdXBlclwiKTtcbiAgaWYgKF9nZXQgJiYgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2dldC5nZXQpXG4gICAgX3N1cGVyID0gX2dldC5nZXQ7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICBjdHgsXG4gICAgbmFtZSxcbiAgICB7XG4gICAgICBnZXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gb3ZlcndyaXRpbmdQcm9wZXJ0eUdldHRlcigpIHtcbiAgICAgICAgaWYgKCFpc1Byb3h5RW5hYmxlZCgpICYmICFmbGFnKHRoaXMsIFwibG9ja1NzZmlcIikpIHtcbiAgICAgICAgICBmbGFnKHRoaXMsIFwic3NmaVwiLCBvdmVyd3JpdGluZ1Byb3BlcnR5R2V0dGVyKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3JpZ0xvY2tTc2ZpID0gZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIpO1xuICAgICAgICBmbGFnKHRoaXMsIFwibG9ja1NzZmlcIiwgdHJ1ZSk7XG4gICAgICAgIHZhciByZXN1bHQgPSBnZXR0ZXIoX3N1cGVyKS5jYWxsKHRoaXMpO1xuICAgICAgICBmbGFnKHRoaXMsIFwibG9ja1NzZmlcIiwgb3JpZ0xvY2tTc2ZpKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbigpO1xuICAgICAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gICAgICB9LCBcIm92ZXJ3cml0aW5nUHJvcGVydHlHZXR0ZXJcIiksXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gICk7XG59XG5fX25hbWUob3ZlcndyaXRlUHJvcGVydHksIFwib3ZlcndyaXRlUHJvcGVydHlcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL292ZXJ3cml0ZU1ldGhvZC5qc1xuZnVuY3Rpb24gb3ZlcndyaXRlTWV0aG9kKGN0eCwgbmFtZSwgbWV0aG9kKSB7XG4gIHZhciBfbWV0aG9kID0gY3R4W25hbWVdLCBfc3VwZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihuYW1lICsgXCIgaXMgbm90IGEgZnVuY3Rpb25cIik7XG4gIH0sIFwiX3N1cGVyXCIpO1xuICBpZiAoX21ldGhvZCAmJiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfbWV0aG9kKVxuICAgIF9zdXBlciA9IF9tZXRob2Q7XG4gIHZhciBvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgIGlmICghZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIpKSB7XG4gICAgICBmbGFnKHRoaXMsIFwic3NmaVwiLCBvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXIpO1xuICAgIH1cbiAgICB2YXIgb3JpZ0xvY2tTc2ZpID0gZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIpO1xuICAgIGZsYWcodGhpcywgXCJsb2NrU3NmaVwiLCB0cnVlKTtcbiAgICB2YXIgcmVzdWx0ID0gbWV0aG9kKF9zdXBlcikuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBmbGFnKHRoaXMsIFwibG9ja1NzZmlcIiwgb3JpZ0xvY2tTc2ZpKTtcbiAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKCk7XG4gICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gIH0sIFwib3ZlcndyaXRpbmdNZXRob2RXcmFwcGVyXCIpO1xuICBhZGRMZW5ndGhHdWFyZChvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXIsIG5hbWUsIGZhbHNlKTtcbiAgY3R4W25hbWVdID0gcHJveGlmeShvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXIsIG5hbWUpO1xufVxuX19uYW1lKG92ZXJ3cml0ZU1ldGhvZCwgXCJvdmVyd3JpdGVNZXRob2RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2FkZENoYWluYWJsZU1ldGhvZC5qc1xudmFyIGNhblNldFByb3RvdHlwZSA9IHR5cGVvZiBPYmplY3Quc2V0UHJvdG90eXBlT2YgPT09IFwiZnVuY3Rpb25cIjtcbnZhciB0ZXN0Rm4gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xufSwgXCJ0ZXN0Rm5cIik7XG52YXIgZXhjbHVkZU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdEZuKS5maWx0ZXIoZnVuY3Rpb24obmFtZSkge1xuICB2YXIgcHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRlc3RGbiwgbmFtZSk7XG4gIGlmICh0eXBlb2YgcHJvcERlc2MgIT09IFwib2JqZWN0XCIpXG4gICAgcmV0dXJuIHRydWU7XG4gIHJldHVybiAhcHJvcERlc2MuY29uZmlndXJhYmxlO1xufSk7XG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xudmFyIGFwcGx5ID0gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O1xuZnVuY3Rpb24gYWRkQ2hhaW5hYmxlTWV0aG9kKGN0eCwgbmFtZSwgbWV0aG9kLCBjaGFpbmluZ0JlaGF2aW9yKSB7XG4gIGlmICh0eXBlb2YgY2hhaW5pbmdCZWhhdmlvciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY2hhaW5pbmdCZWhhdmlvciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgfSwgXCJjaGFpbmluZ0JlaGF2aW9yXCIpO1xuICB9XG4gIHZhciBjaGFpbmFibGVCZWhhdmlvciA9IHtcbiAgICBtZXRob2QsXG4gICAgY2hhaW5pbmdCZWhhdmlvclxuICB9O1xuICBpZiAoIWN0eC5fX21ldGhvZHMpIHtcbiAgICBjdHguX19tZXRob2RzID0ge307XG4gIH1cbiAgY3R4Ll9fbWV0aG9kc1tuYW1lXSA9IGNoYWluYWJsZUJlaGF2aW9yO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgY3R4LFxuICAgIG5hbWUsXG4gICAge1xuICAgICAgZ2V0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGNoYWluYWJsZU1ldGhvZEdldHRlcigpIHtcbiAgICAgICAgY2hhaW5hYmxlQmVoYXZpb3IuY2hhaW5pbmdCZWhhdmlvci5jYWxsKHRoaXMpO1xuICAgICAgICB2YXIgY2hhaW5hYmxlTWV0aG9kV3JhcHBlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCFmbGFnKHRoaXMsIFwibG9ja1NzZmlcIikpIHtcbiAgICAgICAgICAgIGZsYWcodGhpcywgXCJzc2ZpXCIsIGNoYWluYWJsZU1ldGhvZFdyYXBwZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgcmVzdWx0ID0gY2hhaW5hYmxlQmVoYXZpb3IubWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbigpO1xuICAgICAgICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICAgICAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICAgICAgICB9LCBcImNoYWluYWJsZU1ldGhvZFdyYXBwZXJcIik7XG4gICAgICAgIGFkZExlbmd0aEd1YXJkKGNoYWluYWJsZU1ldGhvZFdyYXBwZXIsIG5hbWUsIHRydWUpO1xuICAgICAgICBpZiAoY2FuU2V0UHJvdG90eXBlKSB7XG4gICAgICAgICAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgICAgICAgcHJvdG90eXBlLmNhbGwgPSBjYWxsO1xuICAgICAgICAgIHByb3RvdHlwZS5hcHBseSA9IGFwcGx5O1xuICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihjaGFpbmFibGVNZXRob2RXcmFwcGVyLCBwcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBhc3NlcnRlck5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3R4KTtcbiAgICAgICAgICBhc3NlcnRlck5hbWVzLmZvckVhY2goZnVuY3Rpb24oYXNzZXJ0ZXJOYW1lKSB7XG4gICAgICAgICAgICBpZiAoZXhjbHVkZU5hbWVzLmluZGV4T2YoYXNzZXJ0ZXJOYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHBkID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjdHgsIGFzc2VydGVyTmFtZSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2hhaW5hYmxlTWV0aG9kV3JhcHBlciwgYXNzZXJ0ZXJOYW1lLCBwZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdHJhbnNmZXJGbGFncyh0aGlzLCBjaGFpbmFibGVNZXRob2RXcmFwcGVyKTtcbiAgICAgICAgcmV0dXJuIHByb3hpZnkoY2hhaW5hYmxlTWV0aG9kV3JhcHBlcik7XG4gICAgICB9LCBcImNoYWluYWJsZU1ldGhvZEdldHRlclwiKSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgKTtcbn1cbl9fbmFtZShhZGRDaGFpbmFibGVNZXRob2QsIFwiYWRkQ2hhaW5hYmxlTWV0aG9kXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QuanNcbmZ1bmN0aW9uIG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZChjdHgsIG5hbWUsIG1ldGhvZCwgY2hhaW5pbmdCZWhhdmlvcikge1xuICB2YXIgY2hhaW5hYmxlQmVoYXZpb3IgPSBjdHguX19tZXRob2RzW25hbWVdO1xuICB2YXIgX2NoYWluaW5nQmVoYXZpb3IgPSBjaGFpbmFibGVCZWhhdmlvci5jaGFpbmluZ0JlaGF2aW9yO1xuICBjaGFpbmFibGVCZWhhdmlvci5jaGFpbmluZ0JlaGF2aW9yID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBvdmVyd3JpdGluZ0NoYWluYWJsZU1ldGhvZEdldHRlcigpIHtcbiAgICB2YXIgcmVzdWx0ID0gY2hhaW5pbmdCZWhhdmlvcihfY2hhaW5pbmdCZWhhdmlvcikuY2FsbCh0aGlzKTtcbiAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKCk7XG4gICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gIH0sIFwib3ZlcndyaXRpbmdDaGFpbmFibGVNZXRob2RHZXR0ZXJcIik7XG4gIHZhciBfbWV0aG9kID0gY2hhaW5hYmxlQmVoYXZpb3IubWV0aG9kO1xuICBjaGFpbmFibGVCZWhhdmlvci5tZXRob2QgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIG92ZXJ3cml0aW5nQ2hhaW5hYmxlTWV0aG9kV3JhcHBlcigpIHtcbiAgICB2YXIgcmVzdWx0ID0gbWV0aG9kKF9tZXRob2QpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbigpO1xuICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICB9LCBcIm92ZXJ3cml0aW5nQ2hhaW5hYmxlTWV0aG9kV3JhcHBlclwiKTtcbn1cbl9fbmFtZShvdmVyd3JpdGVDaGFpbmFibGVNZXRob2QsIFwib3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9jb21wYXJlQnlJbnNwZWN0LmpzXG5mdW5jdGlvbiBjb21wYXJlQnlJbnNwZWN0KGEsIGIpIHtcbiAgcmV0dXJuIGluc3BlY3QyKGEpIDwgaW5zcGVjdDIoYikgPyAtMSA6IDE7XG59XG5fX25hbWUoY29tcGFyZUJ5SW5zcGVjdCwgXCJjb21wYXJlQnlJbnNwZWN0XCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9nZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzLmpzXG5mdW5jdGlvbiBnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzKG9iaikge1xuICBpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgIT09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gW107XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaikuZmlsdGVyKGZ1bmN0aW9uKHN5bSkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKS5lbnVtZXJhYmxlO1xuICB9KTtcbn1cbl9fbmFtZShnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzLCBcImdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHNcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2dldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzLmpzXG5mdW5jdGlvbiBnZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcyhvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikuY29uY2F0KGdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMob2JqKSk7XG59XG5fX25hbWUoZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMsIFwiZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXNcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2lzTmFOLmpzXG5mdW5jdGlvbiBfaXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cbl9fbmFtZShfaXNOYU4sIFwiX2lzTmFOXCIpO1xudmFyIGlzTmFOMiA9IE51bWJlci5pc05hTiB8fCBfaXNOYU47XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2dldE9wZXJhdG9yLmpzXG5mdW5jdGlvbiBpc09iamVjdFR5cGUob2JqKSB7XG4gIHZhciBvYmplY3RUeXBlID0gdHlwZShvYmopO1xuICB2YXIgb2JqZWN0VHlwZXMgPSBbXCJBcnJheVwiLCBcIk9iamVjdFwiLCBcIkZ1bmN0aW9uXCJdO1xuICByZXR1cm4gb2JqZWN0VHlwZXMuaW5kZXhPZihvYmplY3RUeXBlKSAhPT0gLTE7XG59XG5fX25hbWUoaXNPYmplY3RUeXBlLCBcImlzT2JqZWN0VHlwZVwiKTtcbmZ1bmN0aW9uIGdldE9wZXJhdG9yKG9iaiwgYXJncykge1xuICB2YXIgb3BlcmF0b3IgPSBmbGFnKG9iaiwgXCJvcGVyYXRvclwiKTtcbiAgdmFyIG5lZ2F0ZSA9IGZsYWcob2JqLCBcIm5lZ2F0ZVwiKTtcbiAgdmFyIGV4cGVjdGVkID0gYXJnc1szXTtcbiAgdmFyIG1zZyA9IG5lZ2F0ZSA/IGFyZ3NbMl0gOiBhcmdzWzFdO1xuICBpZiAob3BlcmF0b3IpIHtcbiAgICByZXR1cm4gb3BlcmF0b3I7XG4gIH1cbiAgaWYgKHR5cGVvZiBtc2cgPT09IFwiZnVuY3Rpb25cIilcbiAgICBtc2cgPSBtc2coKTtcbiAgbXNnID0gbXNnIHx8IFwiXCI7XG4gIGlmICghbXNnKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICBpZiAoL1xcc2hhdmVcXHMvLnRlc3QobXNnKSkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgdmFyIGlzT2JqZWN0ID0gaXNPYmplY3RUeXBlKGV4cGVjdGVkKTtcbiAgaWYgKC9cXHNub3RcXHMvLnRlc3QobXNnKSkge1xuICAgIHJldHVybiBpc09iamVjdCA/IFwibm90RGVlcFN0cmljdEVxdWFsXCIgOiBcIm5vdFN0cmljdEVxdWFsXCI7XG4gIH1cbiAgcmV0dXJuIGlzT2JqZWN0ID8gXCJkZWVwU3RyaWN0RXF1YWxcIiA6IFwic3RyaWN0RXF1YWxcIjtcbn1cbl9fbmFtZShnZXRPcGVyYXRvciwgXCJnZXRPcGVyYXRvclwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvaW5kZXguanNcbmZ1bmN0aW9uIGdldE5hbWUoZm4pIHtcbiAgcmV0dXJuIGZuLm5hbWU7XG59XG5fX25hbWUoZ2V0TmFtZSwgXCJnZXROYW1lXCIpO1xuZnVuY3Rpb24gaXNSZWdFeHAyKG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09IFwiW29iamVjdCBSZWdFeHBdXCI7XG59XG5fX25hbWUoaXNSZWdFeHAyLCBcImlzUmVnRXhwXCIpO1xuZnVuY3Rpb24gaXNOdW1lcmljKG9iaikge1xuICByZXR1cm4gW1wiTnVtYmVyXCIsIFwiQmlnSW50XCJdLmluY2x1ZGVzKHR5cGUob2JqKSk7XG59XG5fX25hbWUoaXNOdW1lcmljLCBcImlzTnVtZXJpY1wiKTtcblxuLy8gbGliL2NoYWkvY29yZS9hc3NlcnRpb25zLmpzXG52YXIgeyBmbGFnOiBmbGFnMiB9ID0gdXRpbHNfZXhwb3J0cztcbltcbiAgXCJ0b1wiLFxuICBcImJlXCIsXG4gIFwiYmVlblwiLFxuICBcImlzXCIsXG4gIFwiYW5kXCIsXG4gIFwiaGFzXCIsXG4gIFwiaGF2ZVwiLFxuICBcIndpdGhcIixcbiAgXCJ0aGF0XCIsXG4gIFwid2hpY2hcIixcbiAgXCJhdFwiLFxuICBcIm9mXCIsXG4gIFwic2FtZVwiLFxuICBcImJ1dFwiLFxuICBcImRvZXNcIixcbiAgXCJzdGlsbFwiLFxuICBcImFsc29cIlxuXS5mb3JFYWNoKGZ1bmN0aW9uKGNoYWluKSB7XG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eShjaGFpbik7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIm5vdFwiLCBmdW5jdGlvbigpIHtcbiAgZmxhZzIodGhpcywgXCJuZWdhdGVcIiwgdHJ1ZSk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImRlZXBcIiwgZnVuY3Rpb24oKSB7XG4gIGZsYWcyKHRoaXMsIFwiZGVlcFwiLCB0cnVlKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwibmVzdGVkXCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcIm5lc3RlZFwiLCB0cnVlKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwib3duXCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcIm93blwiLCB0cnVlKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwib3JkZXJlZFwiLCBmdW5jdGlvbigpIHtcbiAgZmxhZzIodGhpcywgXCJvcmRlcmVkXCIsIHRydWUpO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJhbnlcIiwgZnVuY3Rpb24oKSB7XG4gIGZsYWcyKHRoaXMsIFwiYW55XCIsIHRydWUpO1xuICBmbGFnMih0aGlzLCBcImFsbFwiLCBmYWxzZSk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImFsbFwiLCBmdW5jdGlvbigpIHtcbiAgZmxhZzIodGhpcywgXCJhbGxcIiwgdHJ1ZSk7XG4gIGZsYWcyKHRoaXMsIFwiYW55XCIsIGZhbHNlKTtcbn0pO1xudmFyIGZ1bmN0aW9uVHlwZXMgPSB7XG4gIFwiZnVuY3Rpb25cIjogW1wiZnVuY3Rpb25cIiwgXCJhc3luY2Z1bmN0aW9uXCIsIFwiZ2VuZXJhdG9yZnVuY3Rpb25cIiwgXCJhc3luY2dlbmVyYXRvcmZ1bmN0aW9uXCJdLFxuICBcImFzeW5jZnVuY3Rpb25cIjogW1wiYXN5bmNmdW5jdGlvblwiLCBcImFzeW5jZ2VuZXJhdG9yZnVuY3Rpb25cIl0sXG4gIFwiZ2VuZXJhdG9yZnVuY3Rpb25cIjogW1wiZ2VuZXJhdG9yZnVuY3Rpb25cIiwgXCJhc3luY2dlbmVyYXRvcmZ1bmN0aW9uXCJdLFxuICBcImFzeW5jZ2VuZXJhdG9yZnVuY3Rpb25cIjogW1wiYXN5bmNnZW5lcmF0b3JmdW5jdGlvblwiXVxufTtcbmZ1bmN0aW9uIGFuKHR5cGUzLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdHlwZTMgPSB0eXBlMy50b0xvd2VyQ2FzZSgpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGFydGljbGUgPSB+W1wiYVwiLCBcImVcIiwgXCJpXCIsIFwib1wiLCBcInVcIl0uaW5kZXhPZih0eXBlMy5jaGFyQXQoMCkpID8gXCJhbiBcIiA6IFwiYSBcIjtcbiAgY29uc3QgZGV0ZWN0ZWRUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChmdW5jdGlvblR5cGVzW1wiZnVuY3Rpb25cIl0uaW5jbHVkZXModHlwZTMpKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBmdW5jdGlvblR5cGVzW3R5cGUzXS5pbmNsdWRlcyhkZXRlY3RlZFR5cGUpLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIFwiICsgYXJ0aWNsZSArIHR5cGUzLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBcIiArIGFydGljbGUgKyB0eXBlM1xuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICB0eXBlMyA9PT0gZGV0ZWN0ZWRUeXBlLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIFwiICsgYXJ0aWNsZSArIHR5cGUzLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBcIiArIGFydGljbGUgKyB0eXBlM1xuICAgICk7XG4gIH1cbn1cbl9fbmFtZShhbiwgXCJhblwiKTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoXCJhblwiLCBhbik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwiYVwiLCBhbik7XG5mdW5jdGlvbiBTYW1lVmFsdWVaZXJvKGEsIGIpIHtcbiAgcmV0dXJuIGlzTmFOMihhKSAmJiBpc05hTjIoYikgfHwgYSA9PT0gYjtcbn1cbl9fbmFtZShTYW1lVmFsdWVaZXJvLCBcIlNhbWVWYWx1ZVplcm9cIik7XG5mdW5jdGlvbiBpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvcigpIHtcbiAgZmxhZzIodGhpcywgXCJjb250YWluc1wiLCB0cnVlKTtcbn1cbl9fbmFtZShpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvciwgXCJpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvclwiKTtcbmZ1bmN0aW9uIGluY2x1ZGUodmFsLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBvYmpUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG5lZ2F0ZSA9IGZsYWcyKHRoaXMsIFwibmVnYXRlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBpc0RlZXAgPSBmbGFnMih0aGlzLCBcImRlZXBcIiksIGRlc2NyaXB0b3IgPSBpc0RlZXAgPyBcImRlZXAgXCIgOiBcIlwiLCBpc0VxbCA9IGlzRGVlcCA/IGZsYWcyKHRoaXMsIFwiZXFsXCIpIDogU2FtZVZhbHVlWmVybztcbiAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgdmFyIGluY2x1ZGVkID0gZmFsc2U7XG4gIHN3aXRjaCAob2JqVHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIGluY2x1ZGVkID0gb2JqLmluZGV4T2YodmFsKSAhPT0gLTE7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwid2Vha3NldFwiOlxuICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgZmxhZ01zZyArIFwidW5hYmxlIHRvIHVzZSAuZGVlcC5pbmNsdWRlIHdpdGggV2Vha1NldFwiLFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICBzc2ZpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpbmNsdWRlZCA9IG9iai5oYXModmFsKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgIG9iai5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgaW5jbHVkZWQgPSBpbmNsdWRlZCB8fCBpc0VxbChpdGVtLCB2YWwpO1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwic2V0XCI6XG4gICAgICBpZiAoaXNEZWVwKSB7XG4gICAgICAgIG9iai5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICBpbmNsdWRlZCA9IGluY2x1ZGVkIHx8IGlzRXFsKGl0ZW0sIHZhbCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5jbHVkZWQgPSBvYmouaGFzKHZhbCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgIGlmIChpc0RlZXApIHtcbiAgICAgICAgaW5jbHVkZWQgPSBvYmouc29tZShmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGlzRXFsKGl0ZW0sIHZhbCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5jbHVkZWQgPSBvYmouaW5kZXhPZih2YWwpICE9PSAtMTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodmFsICE9PSBPYmplY3QodmFsKSkge1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgZmxhZ01zZyArIFwidGhlIGdpdmVuIGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyAoXCIgKyBvYmpUeXBlICsgXCIgYW5kIFwiICsgdHlwZSh2YWwpLnRvTG93ZXJDYXNlKCkgKyBcIikgaXMgaW52YWxpZCBmb3IgdGhpcyBhc3NlcnRpb24uIFlvdSBjYW4gdXNlIGFuIGFycmF5LCBhIG1hcCwgYW4gb2JqZWN0LCBhIHNldCwgYSBzdHJpbmcsIG9yIGEgd2Vha3NldCBpbnN0ZWFkIG9mIGEgXCIgKyB0eXBlKHZhbCkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgc3NmaVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BzID0gT2JqZWN0LmtleXModmFsKSwgZmlyc3RFcnIgPSBudWxsLCBudW1FcnJzID0gMDtcbiAgICAgIHByb3BzLmZvckVhY2goZnVuY3Rpb24ocHJvcCkge1xuICAgICAgICB2YXIgcHJvcEFzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24ob2JqKTtcbiAgICAgICAgdHJhbnNmZXJGbGFncyh0aGlzLCBwcm9wQXNzZXJ0aW9uLCB0cnVlKTtcbiAgICAgICAgZmxhZzIocHJvcEFzc2VydGlvbiwgXCJsb2NrU3NmaVwiLCB0cnVlKTtcbiAgICAgICAgaWYgKCFuZWdhdGUgfHwgcHJvcHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgcHJvcEFzc2VydGlvbi5wcm9wZXJ0eShwcm9wLCB2YWxbcHJvcF0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHByb3BBc3NlcnRpb24ucHJvcGVydHkocHJvcCwgdmFsW3Byb3BdKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKCFjaGVja19lcnJvcl9leHBvcnRzLmNvbXBhdGlibGVDb25zdHJ1Y3RvcihlcnIsIEFzc2VydGlvbkVycm9yKSkge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZmlyc3RFcnIgPT09IG51bGwpXG4gICAgICAgICAgICBmaXJzdEVyciA9IGVycjtcbiAgICAgICAgICBudW1FcnJzKys7XG4gICAgICAgIH1cbiAgICAgIH0sIHRoaXMpO1xuICAgICAgaWYgKG5lZ2F0ZSAmJiBwcm9wcy5sZW5ndGggPiAxICYmIG51bUVycnMgPT09IHByb3BzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBmaXJzdEVycjtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgfVxuICB0aGlzLmFzc2VydChcbiAgICBpbmNsdWRlZCxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gXCIgKyBkZXNjcmlwdG9yICsgXCJpbmNsdWRlIFwiICsgaW5zcGVjdDIodmFsKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IFwiICsgZGVzY3JpcHRvciArIFwiaW5jbHVkZSBcIiArIGluc3BlY3QyKHZhbClcbiAgKTtcbn1cbl9fbmFtZShpbmNsdWRlLCBcImluY2x1ZGVcIik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwiaW5jbHVkZVwiLCBpbmNsdWRlLCBpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvcik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwiY29udGFpblwiLCBpbmNsdWRlLCBpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvcik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwiY29udGFpbnNcIiwgaW5jbHVkZSwgaW5jbHVkZUNoYWluaW5nQmVoYXZpb3IpO1xuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZChcImluY2x1ZGVzXCIsIGluY2x1ZGUsIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yKTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIm9rXCIsIGZ1bmN0aW9uKCkge1xuICB0aGlzLmFzc2VydChcbiAgICBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgdHJ1dGh5XCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGZhbHN5XCJcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwidHJ1ZVwiLCBmdW5jdGlvbigpIHtcbiAgdGhpcy5hc3NlcnQoXG4gICAgdHJ1ZSA9PT0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIHRydWVcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgZmFsc2VcIixcbiAgICBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiKSA/IGZhbHNlIDogdHJ1ZVxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJudW1lcmljXCIsIGZ1bmN0aW9uKCkge1xuICBjb25zdCBvYmplY3QgPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgW1wiTnVtYmVyXCIsIFwiQmlnSW50XCJdLmluY2x1ZGVzKHR5cGUob2JqZWN0KSksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIG51bWVyaWNcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIG51bWVyaWNcIixcbiAgICBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiKSA/IGZhbHNlIDogdHJ1ZVxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJjYWxsYWJsZVwiLCBmdW5jdGlvbigpIHtcbiAgY29uc3QgdmFsID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIGNvbnN0IHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIik7XG4gIGNvbnN0IG1lc3NhZ2UgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIik7XG4gIGNvbnN0IG1zZyA9IG1lc3NhZ2UgPyBgJHttZXNzYWdlfTogYCA6IFwiXCI7XG4gIGNvbnN0IG5lZ2F0ZSA9IGZsYWcyKHRoaXMsIFwibmVnYXRlXCIpO1xuICBjb25zdCBhc3NlcnRpb25NZXNzYWdlID0gbmVnYXRlID8gYCR7bXNnfWV4cGVjdGVkICR7aW5zcGVjdDIodmFsKX0gbm90IHRvIGJlIGEgY2FsbGFibGUgZnVuY3Rpb25gIDogYCR7bXNnfWV4cGVjdGVkICR7aW5zcGVjdDIodmFsKX0gdG8gYmUgYSBjYWxsYWJsZSBmdW5jdGlvbmA7XG4gIGNvbnN0IGlzQ2FsbGFibGUgPSBbXCJGdW5jdGlvblwiLCBcIkFzeW5jRnVuY3Rpb25cIiwgXCJHZW5lcmF0b3JGdW5jdGlvblwiLCBcIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb25cIl0uaW5jbHVkZXModHlwZSh2YWwpKTtcbiAgaWYgKGlzQ2FsbGFibGUgJiYgbmVnYXRlIHx8ICFpc0NhbGxhYmxlICYmICFuZWdhdGUpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBhc3NlcnRpb25NZXNzYWdlLFxuICAgICAgdm9pZCAwLFxuICAgICAgc3NmaVxuICAgICk7XG4gIH1cbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiZmFsc2VcIiwgZnVuY3Rpb24oKSB7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGZhbHNlID09PSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgZmFsc2VcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgdHJ1ZVwiLFxuICAgIGZsYWcyKHRoaXMsIFwibmVnYXRlXCIpID8gdHJ1ZSA6IGZhbHNlXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIm51bGxcIiwgZnVuY3Rpb24oKSB7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIG51bGwgPT09IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBudWxsXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBudWxsXCJcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwidW5kZWZpbmVkXCIsIGZ1bmN0aW9uKCkge1xuICB0aGlzLmFzc2VydChcbiAgICB2b2lkIDAgPT09IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSB1bmRlZmluZWRcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIHVuZGVmaW5lZFwiXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIk5hTlwiLCBmdW5jdGlvbigpIHtcbiAgdGhpcy5hc3NlcnQoXG4gICAgaXNOYU4yKGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgTmFOXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBOYU5cIlxuICApO1xufSk7XG5mdW5jdGlvbiBhc3NlcnRFeGlzdCgpIHtcbiAgdmFyIHZhbCA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB0aGlzLmFzc2VydChcbiAgICB2YWwgIT09IG51bGwgJiYgdmFsICE9PSB2b2lkIDAsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGV4aXN0XCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBleGlzdFwiXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0RXhpc3QsIFwiYXNzZXJ0RXhpc3RcIik7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJleGlzdFwiLCBhc3NlcnRFeGlzdCk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJleGlzdHNcIiwgYXNzZXJ0RXhpc3QpO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiZW1wdHlcIiwgZnVuY3Rpb24oKSB7XG4gIHZhciB2YWwgPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgaXRlbXNDb3VudDtcbiAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgc3dpdGNoICh0eXBlKHZhbCkudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgXCJhcnJheVwiOlxuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIGl0ZW1zQ291bnQgPSB2YWwubGVuZ3RoO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIm1hcFwiOlxuICAgIGNhc2UgXCJzZXRcIjpcbiAgICAgIGl0ZW1zQ291bnQgPSB2YWwuc2l6ZTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ3ZWFrbWFwXCI6XG4gICAgY2FzZSBcIndlYWtzZXRcIjpcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgZmxhZ01zZyArIFwiLmVtcHR5IHdhcyBwYXNzZWQgYSB3ZWFrIGNvbGxlY3Rpb25cIixcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICBzc2ZpXG4gICAgICApO1xuICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgdmFyIG1zZyA9IGZsYWdNc2cgKyBcIi5lbXB0eSB3YXMgcGFzc2VkIGEgZnVuY3Rpb24gXCIgKyBnZXROYW1lKHZhbCk7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobXNnLnRyaW0oKSwgdm9pZCAwLCBzc2ZpKTtcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHZhbCAhPT0gT2JqZWN0KHZhbCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICAgIGZsYWdNc2cgKyBcIi5lbXB0eSB3YXMgcGFzc2VkIG5vbi1zdHJpbmcgcHJpbWl0aXZlIFwiICsgaW5zcGVjdDIodmFsKSxcbiAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgc3NmaVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaXRlbXNDb3VudCA9IE9iamVjdC5rZXlzKHZhbCkubGVuZ3RoO1xuICB9XG4gIHRoaXMuYXNzZXJ0KFxuICAgIDAgPT09IGl0ZW1zQ291bnQsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGVtcHR5XCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBlbXB0eVwiXG4gICk7XG59KTtcbmZ1bmN0aW9uIGNoZWNrQXJndW1lbnRzKCkge1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIHR5cGUzID0gdHlwZShvYmopO1xuICB0aGlzLmFzc2VydChcbiAgICBcIkFyZ3VtZW50c1wiID09PSB0eXBlMyxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYXJndW1lbnRzIGJ1dCBnb3QgXCIgKyB0eXBlMyxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIGFyZ3VtZW50c1wiXG4gICk7XG59XG5fX25hbWUoY2hlY2tBcmd1bWVudHMsIFwiY2hlY2tBcmd1bWVudHNcIik7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJhcmd1bWVudHNcIiwgY2hlY2tBcmd1bWVudHMpO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiQXJndW1lbnRzXCIsIGNoZWNrQXJndW1lbnRzKTtcbmZ1bmN0aW9uIGFzc2VydEVxdWFsKHZhbCwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgaWYgKGZsYWcyKHRoaXMsIFwiZGVlcFwiKSkge1xuICAgIHZhciBwcmV2TG9ja1NzZmkgPSBmbGFnMih0aGlzLCBcImxvY2tTc2ZpXCIpO1xuICAgIGZsYWcyKHRoaXMsIFwibG9ja1NzZmlcIiwgdHJ1ZSk7XG4gICAgdGhpcy5lcWwodmFsKTtcbiAgICBmbGFnMih0aGlzLCBcImxvY2tTc2ZpXCIsIHByZXZMb2NrU3NmaSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICB2YWwgPT09IG9iaixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBlcXVhbCAje2V4cH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgZXF1YWwgI3tleHB9XCIsXG4gICAgICB2YWwsXG4gICAgICB0aGlzLl9vYmosXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGFzc2VydEVxdWFsLCBcImFzc2VydEVxdWFsXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImVxdWFsXCIsIGFzc2VydEVxdWFsKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJlcXVhbHNcIiwgYXNzZXJ0RXF1YWwpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImVxXCIsIGFzc2VydEVxdWFsKTtcbmZ1bmN0aW9uIGFzc2VydEVxbChvYmosIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgZXFsID0gZmxhZzIodGhpcywgXCJlcWxcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGVxbChvYmosIGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gZGVlcGx5IGVxdWFsICN7ZXhwfVwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgZGVlcGx5IGVxdWFsICN7ZXhwfVwiLFxuICAgIG9iaixcbiAgICB0aGlzLl9vYmosXG4gICAgdHJ1ZVxuICApO1xufVxuX19uYW1lKGFzc2VydEVxbCwgXCJhc3NlcnRFcWxcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZXFsXCIsIGFzc2VydEVxbCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZXFsc1wiLCBhc3NlcnRFcWwpO1xuZnVuY3Rpb24gYXNzZXJ0QWJvdmUobiwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZG9MZW5ndGggPSBmbGFnMih0aGlzLCBcImRvTGVuZ3RoXCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBtc2dQcmVmaXggPSBmbGFnTXNnID8gZmxhZ01zZyArIFwiOiBcIiA6IFwiXCIsIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIG9ialR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKSwgblR5cGUgPSB0eXBlKG4pLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcIm1hcFwiICYmIG9ialR5cGUgIT09IFwic2V0XCIpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShcImxlbmd0aFwiKTtcbiAgfVxuICBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlID09PSBcImRhdGVcIiAmJiBuVHlwZSAhPT0gXCJkYXRlXCIpKSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50IHRvIGFib3ZlIG11c3QgYmUgYSBkYXRlXCIsIHZvaWQgMCwgc3NmaSk7XG4gIH0gZWxzZSBpZiAoIWlzTnVtZXJpYyhuKSAmJiAoZG9MZW5ndGggfHwgaXNOdW1lcmljKG9iaikpKSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50IHRvIGFib3ZlIG11c3QgYmUgYSBudW1iZXJcIiwgdm9pZCAwLCBzc2ZpKTtcbiAgfSBlbHNlIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgIT09IFwiZGF0ZVwiICYmICFpc051bWVyaWMob2JqKSkpIHtcbiAgICB2YXIgcHJpbnRPYmogPSBvYmpUeXBlID09PSBcInN0cmluZ1wiID8gXCInXCIgKyBvYmogKyBcIidcIiA6IG9iajtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobXNnUHJlZml4ICsgXCJleHBlY3RlZCBcIiArIHByaW50T2JqICsgXCIgdG8gYmUgYSBudW1iZXIgb3IgYSBkYXRlXCIsIHZvaWQgMCwgc3NmaSk7XG4gIH1cbiAgaWYgKGRvTGVuZ3RoKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBcImxlbmd0aFwiLCBpdGVtc0NvdW50O1xuICAgIGlmIChvYmpUeXBlID09PSBcIm1hcFwiIHx8IG9ialR5cGUgPT09IFwic2V0XCIpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBcInNpemVcIjtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5sZW5ndGg7XG4gICAgfVxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgaXRlbXNDb3VudCA+IG4sXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIGFib3ZlICN7ZXhwfSBidXQgZ290ICN7YWN0fVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgYWJvdmUgI3tleHB9XCIsXG4gICAgICBuLFxuICAgICAgaXRlbXNDb3VudFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBvYmogPiBuLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGFib3ZlICN7ZXhwfVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGF0IG1vc3QgI3tleHB9XCIsXG4gICAgICBuXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGFzc2VydEFib3ZlLCBcImFzc2VydEFib3ZlXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImFib3ZlXCIsIGFzc2VydEFib3ZlKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJndFwiLCBhc3NlcnRBYm92ZSk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZ3JlYXRlclRoYW5cIiwgYXNzZXJ0QWJvdmUpO1xuZnVuY3Rpb24gYXNzZXJ0TGVhc3QobiwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZG9MZW5ndGggPSBmbGFnMih0aGlzLCBcImRvTGVuZ3RoXCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBtc2dQcmVmaXggPSBmbGFnTXNnID8gZmxhZ01zZyArIFwiOiBcIiA6IFwiXCIsIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIG9ialR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKSwgblR5cGUgPSB0eXBlKG4pLnRvTG93ZXJDYXNlKCksIGVycm9yTWVzc2FnZSwgc2hvdWxkVGhyb3cgPSB0cnVlO1xuICBpZiAoZG9MZW5ndGggJiYgb2JqVHlwZSAhPT0gXCJtYXBcIiAmJiBvYmpUeXBlICE9PSBcInNldFwiKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkoXCJsZW5ndGhcIik7XG4gIH1cbiAgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSA9PT0gXCJkYXRlXCIgJiYgblR5cGUgIT09IFwiZGF0ZVwiKSkge1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50IHRvIGxlYXN0IG11c3QgYmUgYSBkYXRlXCI7XG4gIH0gZWxzZSBpZiAoIWlzTnVtZXJpYyhuKSAmJiAoZG9MZW5ndGggfHwgaXNOdW1lcmljKG9iaikpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gbGVhc3QgbXVzdCBiZSBhIG51bWJlclwiO1xuICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSAhPT0gXCJkYXRlXCIgJiYgIWlzTnVtZXJpYyhvYmopKSkge1xuICAgIHZhciBwcmludE9iaiA9IG9ialR5cGUgPT09IFwic3RyaW5nXCIgPyBcIidcIiArIG9iaiArIFwiJ1wiIDogb2JqO1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwiZXhwZWN0ZWQgXCIgKyBwcmludE9iaiArIFwiIHRvIGJlIGEgbnVtYmVyIG9yIGEgZGF0ZVwiO1xuICB9IGVsc2Uge1xuICAgIHNob3VsZFRocm93ID0gZmFsc2U7XG4gIH1cbiAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGVycm9yTWVzc2FnZSwgdm9pZCAwLCBzc2ZpKTtcbiAgfVxuICBpZiAoZG9MZW5ndGgpIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IFwibGVuZ3RoXCIsIGl0ZW1zQ291bnQ7XG4gICAgaWYgKG9ialR5cGUgPT09IFwibWFwXCIgfHwgb2JqVHlwZSA9PT0gXCJzZXRcIikge1xuICAgICAgZGVzY3JpcHRvciA9IFwic2l6ZVwiO1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5zaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpdGVtc0NvdW50ID49IG4sXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIGF0IGxlYXN0ICN7ZXhwfSBidXQgZ290ICN7YWN0fVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBiZWxvdyAje2V4cH1cIixcbiAgICAgIG4sXG4gICAgICBpdGVtc0NvdW50XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIG9iaiA+PSBuLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGF0IGxlYXN0ICN7ZXhwfVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGJlbG93ICN7ZXhwfVwiLFxuICAgICAgblxuICAgICk7XG4gIH1cbn1cbl9fbmFtZShhc3NlcnRMZWFzdCwgXCJhc3NlcnRMZWFzdFwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJsZWFzdFwiLCBhc3NlcnRMZWFzdCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZ3RlXCIsIGFzc2VydExlYXN0KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJncmVhdGVyVGhhbk9yRXF1YWxcIiwgYXNzZXJ0TGVhc3QpO1xuZnVuY3Rpb24gYXNzZXJ0QmVsb3cobiwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZG9MZW5ndGggPSBmbGFnMih0aGlzLCBcImRvTGVuZ3RoXCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBtc2dQcmVmaXggPSBmbGFnTXNnID8gZmxhZ01zZyArIFwiOiBcIiA6IFwiXCIsIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIG9ialR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKSwgblR5cGUgPSB0eXBlKG4pLnRvTG93ZXJDYXNlKCksIGVycm9yTWVzc2FnZSwgc2hvdWxkVGhyb3cgPSB0cnVlO1xuICBpZiAoZG9MZW5ndGggJiYgb2JqVHlwZSAhPT0gXCJtYXBcIiAmJiBvYmpUeXBlICE9PSBcInNldFwiKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkoXCJsZW5ndGhcIik7XG4gIH1cbiAgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSA9PT0gXCJkYXRlXCIgJiYgblR5cGUgIT09IFwiZGF0ZVwiKSkge1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50IHRvIGJlbG93IG11c3QgYmUgYSBkYXRlXCI7XG4gIH0gZWxzZSBpZiAoIWlzTnVtZXJpYyhuKSAmJiAoZG9MZW5ndGggfHwgaXNOdW1lcmljKG9iaikpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gYmVsb3cgbXVzdCBiZSBhIG51bWJlclwiO1xuICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSAhPT0gXCJkYXRlXCIgJiYgIWlzTnVtZXJpYyhvYmopKSkge1xuICAgIHZhciBwcmludE9iaiA9IG9ialR5cGUgPT09IFwic3RyaW5nXCIgPyBcIidcIiArIG9iaiArIFwiJ1wiIDogb2JqO1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwiZXhwZWN0ZWQgXCIgKyBwcmludE9iaiArIFwiIHRvIGJlIGEgbnVtYmVyIG9yIGEgZGF0ZVwiO1xuICB9IGVsc2Uge1xuICAgIHNob3VsZFRocm93ID0gZmFsc2U7XG4gIH1cbiAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGVycm9yTWVzc2FnZSwgdm9pZCAwLCBzc2ZpKTtcbiAgfVxuICBpZiAoZG9MZW5ndGgpIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IFwibGVuZ3RoXCIsIGl0ZW1zQ291bnQ7XG4gICAgaWYgKG9ialR5cGUgPT09IFwibWFwXCIgfHwgb2JqVHlwZSA9PT0gXCJzZXRcIikge1xuICAgICAgZGVzY3JpcHRvciA9IFwic2l6ZVwiO1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5zaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpdGVtc0NvdW50IDwgbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgYmVsb3cgI3tleHB9IGJ1dCBnb3QgI3thY3R9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBiZWxvdyAje2V4cH1cIixcbiAgICAgIG4sXG4gICAgICBpdGVtc0NvdW50XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIG9iaiA8IG4sXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYmVsb3cgI3tleHB9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYXQgbGVhc3QgI3tleHB9XCIsXG4gICAgICBuXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGFzc2VydEJlbG93LCBcImFzc2VydEJlbG93XCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImJlbG93XCIsIGFzc2VydEJlbG93KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJsdFwiLCBhc3NlcnRCZWxvdyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibGVzc1RoYW5cIiwgYXNzZXJ0QmVsb3cpO1xuZnVuY3Rpb24gYXNzZXJ0TW9zdChuLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBkb0xlbmd0aCA9IGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG1zZ1ByZWZpeCA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIiwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBuVHlwZSA9IHR5cGUobikudG9Mb3dlckNhc2UoKSwgZXJyb3JNZXNzYWdlLCBzaG91bGRUaHJvdyA9IHRydWU7XG4gIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcIm1hcFwiICYmIG9ialR5cGUgIT09IFwic2V0XCIpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShcImxlbmd0aFwiKTtcbiAgfVxuICBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlID09PSBcImRhdGVcIiAmJiBuVHlwZSAhPT0gXCJkYXRlXCIpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gbW9zdCBtdXN0IGJlIGEgZGF0ZVwiO1xuICB9IGVsc2UgaWYgKCFpc051bWVyaWMobikgJiYgKGRvTGVuZ3RoIHx8IGlzTnVtZXJpYyhvYmopKSkge1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50IHRvIG1vc3QgbXVzdCBiZSBhIG51bWJlclwiO1xuICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSAhPT0gXCJkYXRlXCIgJiYgIWlzTnVtZXJpYyhvYmopKSkge1xuICAgIHZhciBwcmludE9iaiA9IG9ialR5cGUgPT09IFwic3RyaW5nXCIgPyBcIidcIiArIG9iaiArIFwiJ1wiIDogb2JqO1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwiZXhwZWN0ZWQgXCIgKyBwcmludE9iaiArIFwiIHRvIGJlIGEgbnVtYmVyIG9yIGEgZGF0ZVwiO1xuICB9IGVsc2Uge1xuICAgIHNob3VsZFRocm93ID0gZmFsc2U7XG4gIH1cbiAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGVycm9yTWVzc2FnZSwgdm9pZCAwLCBzc2ZpKTtcbiAgfVxuICBpZiAoZG9MZW5ndGgpIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IFwibGVuZ3RoXCIsIGl0ZW1zQ291bnQ7XG4gICAgaWYgKG9ialR5cGUgPT09IFwibWFwXCIgfHwgb2JqVHlwZSA9PT0gXCJzZXRcIikge1xuICAgICAgZGVzY3JpcHRvciA9IFwic2l6ZVwiO1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5zaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpdGVtc0NvdW50IDw9IG4sXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIGF0IG1vc3QgI3tleHB9IGJ1dCBnb3QgI3thY3R9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIGFib3ZlICN7ZXhwfVwiLFxuICAgICAgbixcbiAgICAgIGl0ZW1zQ291bnRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgb2JqIDw9IG4sXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYXQgbW9zdCAje2V4cH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhYm92ZSAje2V4cH1cIixcbiAgICAgIG5cbiAgICApO1xuICB9XG59XG5fX25hbWUoYXNzZXJ0TW9zdCwgXCJhc3NlcnRNb3N0XCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcIm1vc3RcIiwgYXNzZXJ0TW9zdCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibHRlXCIsIGFzc2VydE1vc3QpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImxlc3NUaGFuT3JFcXVhbFwiLCBhc3NlcnRNb3N0KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJ3aXRoaW5cIiwgZnVuY3Rpb24oc3RhcnQsIGZpbmlzaCwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZG9MZW5ndGggPSBmbGFnMih0aGlzLCBcImRvTGVuZ3RoXCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBtc2dQcmVmaXggPSBmbGFnTXNnID8gZmxhZ01zZyArIFwiOiBcIiA6IFwiXCIsIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIG9ialR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKSwgc3RhcnRUeXBlID0gdHlwZShzdGFydCkudG9Mb3dlckNhc2UoKSwgZmluaXNoVHlwZSA9IHR5cGUoZmluaXNoKS50b0xvd2VyQ2FzZSgpLCBlcnJvck1lc3NhZ2UsIHNob3VsZFRocm93ID0gdHJ1ZSwgcmFuZ2UgPSBzdGFydFR5cGUgPT09IFwiZGF0ZVwiICYmIGZpbmlzaFR5cGUgPT09IFwiZGF0ZVwiID8gc3RhcnQudG9JU09TdHJpbmcoKSArIFwiLi5cIiArIGZpbmlzaC50b0lTT1N0cmluZygpIDogc3RhcnQgKyBcIi4uXCIgKyBmaW5pc2g7XG4gIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcIm1hcFwiICYmIG9ialR5cGUgIT09IFwic2V0XCIpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShcImxlbmd0aFwiKTtcbiAgfVxuICBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlID09PSBcImRhdGVcIiAmJiAoc3RhcnRUeXBlICE9PSBcImRhdGVcIiB8fCBmaW5pc2hUeXBlICE9PSBcImRhdGVcIikpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnRzIHRvIHdpdGhpbiBtdXN0IGJlIGRhdGVzXCI7XG4gIH0gZWxzZSBpZiAoKCFpc051bWVyaWMoc3RhcnQpIHx8ICFpc051bWVyaWMoZmluaXNoKSkgJiYgKGRvTGVuZ3RoIHx8IGlzTnVtZXJpYyhvYmopKSkge1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50cyB0byB3aXRoaW4gbXVzdCBiZSBudW1iZXJzXCI7XG4gIH0gZWxzZSBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlICE9PSBcImRhdGVcIiAmJiAhaXNOdW1lcmljKG9iaikpKSB7XG4gICAgdmFyIHByaW50T2JqID0gb2JqVHlwZSA9PT0gXCJzdHJpbmdcIiA/IFwiJ1wiICsgb2JqICsgXCInXCIgOiBvYmo7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJleHBlY3RlZCBcIiArIHByaW50T2JqICsgXCIgdG8gYmUgYSBudW1iZXIgb3IgYSBkYXRlXCI7XG4gIH0gZWxzZSB7XG4gICAgc2hvdWxkVGhyb3cgPSBmYWxzZTtcbiAgfVxuICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZXJyb3JNZXNzYWdlLCB2b2lkIDAsIHNzZmkpO1xuICB9XG4gIGlmIChkb0xlbmd0aCkge1xuICAgIHZhciBkZXNjcmlwdG9yID0gXCJsZW5ndGhcIiwgaXRlbXNDb3VudDtcbiAgICBpZiAob2JqVHlwZSA9PT0gXCJtYXBcIiB8fCBvYmpUeXBlID09PSBcInNldFwiKSB7XG4gICAgICBkZXNjcmlwdG9yID0gXCJzaXplXCI7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgIH1cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGl0ZW1zQ291bnQgPj0gc3RhcnQgJiYgaXRlbXNDb3VudCA8PSBmaW5pc2gsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIHdpdGhpbiBcIiArIHJhbmdlLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgd2l0aGluIFwiICsgcmFuZ2VcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgb2JqID49IHN0YXJ0ICYmIG9iaiA8PSBmaW5pc2gsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgd2l0aGluIFwiICsgcmFuZ2UsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIHdpdGhpbiBcIiArIHJhbmdlXG4gICAgKTtcbiAgfVxufSk7XG5mdW5jdGlvbiBhc3NlcnRJbnN0YW5jZU9mKGNvbnN0cnVjdG9yLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIHRhcmdldCA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB2YXIgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKTtcbiAgdmFyIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIik7XG4gIHRyeSB7XG4gICAgdmFyIGlzSW5zdGFuY2VPZiA9IHRhcmdldCBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgVHlwZUVycm9yKSB7XG4gICAgICBmbGFnTXNnID0gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgOiBcIlwiO1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICBmbGFnTXNnICsgXCJUaGUgaW5zdGFuY2VvZiBhc3NlcnRpb24gbmVlZHMgYSBjb25zdHJ1Y3RvciBidXQgXCIgKyB0eXBlKGNvbnN0cnVjdG9yKSArIFwiIHdhcyBnaXZlbi5cIixcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICBzc2ZpXG4gICAgICApO1xuICAgIH1cbiAgICB0aHJvdyBlcnI7XG4gIH1cbiAgdmFyIG5hbWUgPSBnZXROYW1lKGNvbnN0cnVjdG9yKTtcbiAgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgIG5hbWUgPSBcImFuIHVubmFtZWQgY29uc3RydWN0b3JcIjtcbiAgfVxuICB0aGlzLmFzc2VydChcbiAgICBpc0luc3RhbmNlT2YsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGFuIGluc3RhbmNlIG9mIFwiICsgbmFtZSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIGFuIGluc3RhbmNlIG9mIFwiICsgbmFtZVxuICApO1xufVxuX19uYW1lKGFzc2VydEluc3RhbmNlT2YsIFwiYXNzZXJ0SW5zdGFuY2VPZlwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJpbnN0YW5jZW9mXCIsIGFzc2VydEluc3RhbmNlT2YpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImluc3RhbmNlT2ZcIiwgYXNzZXJ0SW5zdGFuY2VPZik7XG5mdW5jdGlvbiBhc3NlcnRQcm9wZXJ0eShuYW1lLCB2YWwsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgaXNOZXN0ZWQgPSBmbGFnMih0aGlzLCBcIm5lc3RlZFwiKSwgaXNPd24gPSBmbGFnMih0aGlzLCBcIm93blwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIG5hbWVUeXBlID0gdHlwZW9mIG5hbWU7XG4gIGZsYWdNc2cgPSBmbGFnTXNnID8gZmxhZ01zZyArIFwiOiBcIiA6IFwiXCI7XG4gIGlmIChpc05lc3RlZCkge1xuICAgIGlmIChuYW1lVHlwZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICBmbGFnTXNnICsgXCJ0aGUgYXJndW1lbnQgdG8gcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZyB3aGVuIHVzaW5nIG5lc3RlZCBzeW50YXhcIixcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICBzc2ZpXG4gICAgICApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAobmFtZVR5cGUgIT09IFwic3RyaW5nXCIgJiYgbmFtZVR5cGUgIT09IFwibnVtYmVyXCIgJiYgbmFtZVR5cGUgIT09IFwic3ltYm9sXCIpIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgZmxhZ01zZyArIFwidGhlIGFyZ3VtZW50IHRvIHByb3BlcnR5IG11c3QgYmUgYSBzdHJpbmcsIG51bWJlciwgb3Igc3ltYm9sXCIsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgc3NmaVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzTmVzdGVkICYmIGlzT3duKSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgZmxhZ01zZyArICdUaGUgXCJuZXN0ZWRcIiBhbmQgXCJvd25cIiBmbGFncyBjYW5ub3QgYmUgY29tYmluZWQuJyxcbiAgICAgIHZvaWQgMCxcbiAgICAgIHNzZmlcbiAgICApO1xuICB9XG4gIGlmIChvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBmbGFnTXNnICsgXCJUYXJnZXQgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLlwiLFxuICAgICAgdm9pZCAwLFxuICAgICAgc3NmaVxuICAgICk7XG4gIH1cbiAgdmFyIGlzRGVlcCA9IGZsYWcyKHRoaXMsIFwiZGVlcFwiKSwgbmVnYXRlID0gZmxhZzIodGhpcywgXCJuZWdhdGVcIiksIHBhdGhJbmZvID0gaXNOZXN0ZWQgPyBnZXRQYXRoSW5mbyhvYmosIG5hbWUpIDogbnVsbCwgdmFsdWUgPSBpc05lc3RlZCA/IHBhdGhJbmZvLnZhbHVlIDogb2JqW25hbWVdLCBpc0VxbCA9IGlzRGVlcCA/IGZsYWcyKHRoaXMsIFwiZXFsXCIpIDogKHZhbDEsIHZhbDIpID0+IHZhbDEgPT09IHZhbDI7XG4gIHZhciBkZXNjcmlwdG9yID0gXCJcIjtcbiAgaWYgKGlzRGVlcClcbiAgICBkZXNjcmlwdG9yICs9IFwiZGVlcCBcIjtcbiAgaWYgKGlzT3duKVxuICAgIGRlc2NyaXB0b3IgKz0gXCJvd24gXCI7XG4gIGlmIChpc05lc3RlZClcbiAgICBkZXNjcmlwdG9yICs9IFwibmVzdGVkIFwiO1xuICBkZXNjcmlwdG9yICs9IFwicHJvcGVydHkgXCI7XG4gIHZhciBoYXNQcm9wZXJ0eTI7XG4gIGlmIChpc093bilcbiAgICBoYXNQcm9wZXJ0eTIgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBuYW1lKTtcbiAgZWxzZSBpZiAoaXNOZXN0ZWQpXG4gICAgaGFzUHJvcGVydHkyID0gcGF0aEluZm8uZXhpc3RzO1xuICBlbHNlXG4gICAgaGFzUHJvcGVydHkyID0gaGFzUHJvcGVydHkob2JqLCBuYW1lKTtcbiAgaWYgKCFuZWdhdGUgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgaGFzUHJvcGVydHkyLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgXCIgKyBkZXNjcmlwdG9yICsgaW5zcGVjdDIobmFtZSksXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgXCIgKyBkZXNjcmlwdG9yICsgaW5zcGVjdDIobmFtZSlcbiAgICApO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgaGFzUHJvcGVydHkyICYmIGlzRXFsKHZhbCwgdmFsdWUpLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgXCIgKyBkZXNjcmlwdG9yICsgaW5zcGVjdDIobmFtZSkgKyBcIiBvZiAje2V4cH0sIGJ1dCBnb3QgI3thY3R9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgXCIgKyBkZXNjcmlwdG9yICsgaW5zcGVjdDIobmFtZSkgKyBcIiBvZiAje2FjdH1cIixcbiAgICAgIHZhbCxcbiAgICAgIHZhbHVlXG4gICAgKTtcbiAgfVxuICBmbGFnMih0aGlzLCBcIm9iamVjdFwiLCB2YWx1ZSk7XG59XG5fX25hbWUoYXNzZXJ0UHJvcGVydHksIFwiYXNzZXJ0UHJvcGVydHlcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwicHJvcGVydHlcIiwgYXNzZXJ0UHJvcGVydHkpO1xuZnVuY3Rpb24gYXNzZXJ0T3duUHJvcGVydHkobmFtZSwgdmFsdWUsIG1zZykge1xuICBmbGFnMih0aGlzLCBcIm93blwiLCB0cnVlKTtcbiAgYXNzZXJ0UHJvcGVydHkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cbl9fbmFtZShhc3NlcnRPd25Qcm9wZXJ0eSwgXCJhc3NlcnRPd25Qcm9wZXJ0eVwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJvd25Qcm9wZXJ0eVwiLCBhc3NlcnRPd25Qcm9wZXJ0eSk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiaGF2ZU93blByb3BlcnR5XCIsIGFzc2VydE93blByb3BlcnR5KTtcbmZ1bmN0aW9uIGFzc2VydE93blByb3BlcnR5RGVzY3JpcHRvcihuYW1lLCBkZXNjcmlwdG9yLCBtc2cpIHtcbiAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgbXNnID0gZGVzY3JpcHRvcjtcbiAgICBkZXNjcmlwdG9yID0gbnVsbDtcbiAgfVxuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHZhciBhY3R1YWxEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qob2JqKSwgbmFtZSk7XG4gIHZhciBlcWwgPSBmbGFnMih0aGlzLCBcImVxbFwiKTtcbiAgaWYgKGFjdHVhbERlc2NyaXB0b3IgJiYgZGVzY3JpcHRvcikge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgZXFsKGRlc2NyaXB0b3IsIGFjdHVhbERlc2NyaXB0b3IpLFxuICAgICAgXCJleHBlY3RlZCB0aGUgb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIFwiICsgaW5zcGVjdDIobmFtZSkgKyBcIiBvbiAje3RoaXN9IHRvIG1hdGNoIFwiICsgaW5zcGVjdDIoZGVzY3JpcHRvcikgKyBcIiwgZ290IFwiICsgaW5zcGVjdDIoYWN0dWFsRGVzY3JpcHRvciksXG4gICAgICBcImV4cGVjdGVkIHRoZSBvd24gcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgXCIgKyBpbnNwZWN0MihuYW1lKSArIFwiIG9uICN7dGhpc30gdG8gbm90IG1hdGNoIFwiICsgaW5zcGVjdDIoZGVzY3JpcHRvciksXG4gICAgICBkZXNjcmlwdG9yLFxuICAgICAgYWN0dWFsRGVzY3JpcHRvcixcbiAgICAgIHRydWVcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgYWN0dWFsRGVzY3JpcHRvcixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGFuIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciBcIiArIGluc3BlY3QyKG5hbWUpLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIGFuIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciBcIiArIGluc3BlY3QyKG5hbWUpXG4gICAgKTtcbiAgfVxuICBmbGFnMih0aGlzLCBcIm9iamVjdFwiLCBhY3R1YWxEZXNjcmlwdG9yKTtcbn1cbl9fbmFtZShhc3NlcnRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsIFwiYXNzZXJ0T3duUHJvcGVydHlEZXNjcmlwdG9yXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcIm93blByb3BlcnR5RGVzY3JpcHRvclwiLCBhc3NlcnRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImhhdmVPd25Qcm9wZXJ0eURlc2NyaXB0b3JcIiwgYXNzZXJ0T3duUHJvcGVydHlEZXNjcmlwdG9yKTtcbmZ1bmN0aW9uIGFzc2VydExlbmd0aENoYWluKCkge1xuICBmbGFnMih0aGlzLCBcImRvTGVuZ3RoXCIsIHRydWUpO1xufVxuX19uYW1lKGFzc2VydExlbmd0aENoYWluLCBcImFzc2VydExlbmd0aENoYWluXCIpO1xuZnVuY3Rpb24gYXNzZXJ0TGVuZ3RoKG4sIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIG9ialR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgZGVzY3JpcHRvciA9IFwibGVuZ3RoXCIsIGl0ZW1zQ291bnQ7XG4gIHN3aXRjaCAob2JqVHlwZSkge1xuICAgIGNhc2UgXCJtYXBcIjpcbiAgICBjYXNlIFwic2V0XCI6XG4gICAgICBkZXNjcmlwdG9yID0gXCJzaXplXCI7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkoXCJsZW5ndGhcIik7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgfVxuICB0aGlzLmFzc2VydChcbiAgICBpdGVtc0NvdW50ID09IG4sXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBvZiAje2V4cH0gYnV0IGdvdCAje2FjdH1cIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBvZiAje2FjdH1cIixcbiAgICBuLFxuICAgIGl0ZW1zQ291bnRcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnRMZW5ndGgsIFwiYXNzZXJ0TGVuZ3RoXCIpO1xuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZChcImxlbmd0aFwiLCBhc3NlcnRMZW5ndGgsIGFzc2VydExlbmd0aENoYWluKTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoXCJsZW5ndGhPZlwiLCBhc3NlcnRMZW5ndGgsIGFzc2VydExlbmd0aENoYWluKTtcbmZ1bmN0aW9uIGFzc2VydE1hdGNoKHJlLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB0aGlzLmFzc2VydChcbiAgICByZS5leGVjKG9iaiksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG1hdGNoIFwiICsgcmUsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IG5vdCB0byBtYXRjaCBcIiArIHJlXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0TWF0Y2gsIFwiYXNzZXJ0TWF0Y2hcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibWF0Y2hcIiwgYXNzZXJ0TWF0Y2gpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcIm1hdGNoZXNcIiwgYXNzZXJ0TWF0Y2gpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcInN0cmluZ1wiLCBmdW5jdGlvbihzdHIsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIik7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwic3RyaW5nXCIpO1xuICB0aGlzLmFzc2VydChcbiAgICB+b2JqLmluZGV4T2Yoc3RyKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gY29udGFpbiBcIiArIGluc3BlY3QyKHN0ciksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBjb250YWluIFwiICsgaW5zcGVjdDIoc3RyKVxuICApO1xufSk7XG5mdW5jdGlvbiBhc3NlcnRLZXlzKGtleXMpIHtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBvYmpUeXBlID0gdHlwZShvYmopLCBrZXlzVHlwZSA9IHR5cGUoa2V5cyksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIGlzRGVlcCA9IGZsYWcyKHRoaXMsIFwiZGVlcFwiKSwgc3RyLCBkZWVwU3RyID0gXCJcIiwgYWN0dWFsLCBvayA9IHRydWUsIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIik7XG4gIGZsYWdNc2cgPSBmbGFnTXNnID8gZmxhZ01zZyArIFwiOiBcIiA6IFwiXCI7XG4gIHZhciBtaXhlZEFyZ3NNc2cgPSBmbGFnTXNnICsgXCJ3aGVuIHRlc3Rpbmcga2V5cyBhZ2FpbnN0IGFuIG9iamVjdCBvciBhbiBhcnJheSB5b3UgbXVzdCBnaXZlIGEgc2luZ2xlIEFycmF5fE9iamVjdHxTdHJpbmcgYXJndW1lbnQgb3IgbXVsdGlwbGUgU3RyaW5nIGFyZ3VtZW50c1wiO1xuICBpZiAob2JqVHlwZSA9PT0gXCJNYXBcIiB8fCBvYmpUeXBlID09PSBcIlNldFwiKSB7XG4gICAgZGVlcFN0ciA9IGlzRGVlcCA/IFwiZGVlcGx5IFwiIDogXCJcIjtcbiAgICBhY3R1YWwgPSBbXTtcbiAgICBvYmouZm9yRWFjaChmdW5jdGlvbih2YWwsIGtleSkge1xuICAgICAgYWN0dWFsLnB1c2goa2V5KTtcbiAgICB9KTtcbiAgICBpZiAoa2V5c1R5cGUgIT09IFwiQXJyYXlcIikge1xuICAgICAga2V5cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFjdHVhbCA9IGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzKG9iaik7XG4gICAgc3dpdGNoIChrZXlzVHlwZSkge1xuICAgICAgY2FzZSBcIkFycmF5XCI6XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtaXhlZEFyZ3NNc2csIHZvaWQgMCwgc3NmaSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiT2JqZWN0XCI6XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtaXhlZEFyZ3NNc2csIHZvaWQgMCwgc3NmaSk7XG4gICAgICAgIH1cbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKGtleXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGtleXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIH1cbiAgICBrZXlzID0ga2V5cy5tYXAoZnVuY3Rpb24odmFsKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJzeW1ib2xcIiA/IHZhbCA6IFN0cmluZyh2YWwpO1xuICAgIH0pO1xuICB9XG4gIGlmICgha2V5cy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZmxhZ01zZyArIFwia2V5cyByZXF1aXJlZFwiLCB2b2lkIDAsIHNzZmkpO1xuICB9XG4gIHZhciBsZW4gPSBrZXlzLmxlbmd0aCwgYW55ID0gZmxhZzIodGhpcywgXCJhbnlcIiksIGFsbCA9IGZsYWcyKHRoaXMsIFwiYWxsXCIpLCBleHBlY3RlZCA9IGtleXMsIGlzRXFsID0gaXNEZWVwID8gZmxhZzIodGhpcywgXCJlcWxcIikgOiAodmFsMSwgdmFsMikgPT4gdmFsMSA9PT0gdmFsMjtcbiAgaWYgKCFhbnkgJiYgIWFsbCkge1xuICAgIGFsbCA9IHRydWU7XG4gIH1cbiAgaWYgKGFueSkge1xuICAgIG9rID0gZXhwZWN0ZWQuc29tZShmdW5jdGlvbihleHBlY3RlZEtleSkge1xuICAgICAgcmV0dXJuIGFjdHVhbC5zb21lKGZ1bmN0aW9uKGFjdHVhbEtleSkge1xuICAgICAgICByZXR1cm4gaXNFcWwoZXhwZWN0ZWRLZXksIGFjdHVhbEtleSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBpZiAoYWxsKSB7XG4gICAgb2sgPSBleHBlY3RlZC5ldmVyeShmdW5jdGlvbihleHBlY3RlZEtleSkge1xuICAgICAgcmV0dXJuIGFjdHVhbC5zb21lKGZ1bmN0aW9uKGFjdHVhbEtleSkge1xuICAgICAgICByZXR1cm4gaXNFcWwoZXhwZWN0ZWRLZXksIGFjdHVhbEtleSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAoIWZsYWcyKHRoaXMsIFwiY29udGFpbnNcIikpIHtcbiAgICAgIG9rID0gb2sgJiYga2V5cy5sZW5ndGggPT0gYWN0dWFsLmxlbmd0aDtcbiAgICB9XG4gIH1cbiAgaWYgKGxlbiA+IDEpIHtcbiAgICBrZXlzID0ga2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gaW5zcGVjdDIoa2V5KTtcbiAgICB9KTtcbiAgICB2YXIgbGFzdCA9IGtleXMucG9wKCk7XG4gICAgaWYgKGFsbCkge1xuICAgICAgc3RyID0ga2V5cy5qb2luKFwiLCBcIikgKyBcIiwgYW5kIFwiICsgbGFzdDtcbiAgICB9XG4gICAgaWYgKGFueSkge1xuICAgICAgc3RyID0ga2V5cy5qb2luKFwiLCBcIikgKyBcIiwgb3IgXCIgKyBsYXN0O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzdHIgPSBpbnNwZWN0MihrZXlzWzBdKTtcbiAgfVxuICBzdHIgPSAobGVuID4gMSA/IFwia2V5cyBcIiA6IFwia2V5IFwiKSArIHN0cjtcbiAgc3RyID0gKGZsYWcyKHRoaXMsIFwiY29udGFpbnNcIikgPyBcImNvbnRhaW4gXCIgOiBcImhhdmUgXCIpICsgc3RyO1xuICB0aGlzLmFzc2VydChcbiAgICBvayxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gXCIgKyBkZWVwU3RyICsgc3RyLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgXCIgKyBkZWVwU3RyICsgc3RyLFxuICAgIGV4cGVjdGVkLnNsaWNlKDApLnNvcnQoY29tcGFyZUJ5SW5zcGVjdCksXG4gICAgYWN0dWFsLnNvcnQoY29tcGFyZUJ5SW5zcGVjdCksXG4gICAgdHJ1ZVxuICApO1xufVxuX19uYW1lKGFzc2VydEtleXMsIFwiYXNzZXJ0S2V5c1wiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJrZXlzXCIsIGFzc2VydEtleXMpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImtleVwiLCBhc3NlcnRLZXlzKTtcbmZ1bmN0aW9uIGFzc2VydFRocm93cyhlcnJvckxpa2UsIGVyck1zZ01hdGNoZXIsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG5lZ2F0ZSA9IGZsYWcyKHRoaXMsIFwibmVnYXRlXCIpIHx8IGZhbHNlO1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYShcImZ1bmN0aW9uXCIpO1xuICBpZiAoaXNSZWdFeHAyKGVycm9yTGlrZSkgfHwgdHlwZW9mIGVycm9yTGlrZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGVyck1zZ01hdGNoZXIgPSBlcnJvckxpa2U7XG4gICAgZXJyb3JMaWtlID0gbnVsbDtcbiAgfVxuICBsZXQgY2F1Z2h0RXJyO1xuICBsZXQgZXJyb3JXYXNUaHJvd24gPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICBvYmooKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyb3JXYXNUaHJvd24gPSB0cnVlO1xuICAgIGNhdWdodEVyciA9IGVycjtcbiAgfVxuICB2YXIgZXZlcnlBcmdJc1VuZGVmaW5lZCA9IGVycm9yTGlrZSA9PT0gdm9pZCAwICYmIGVyck1zZ01hdGNoZXIgPT09IHZvaWQgMDtcbiAgdmFyIGV2ZXJ5QXJnSXNEZWZpbmVkID0gQm9vbGVhbihlcnJvckxpa2UgJiYgZXJyTXNnTWF0Y2hlcik7XG4gIHZhciBlcnJvckxpa2VGYWlsID0gZmFsc2U7XG4gIHZhciBlcnJNc2dNYXRjaGVyRmFpbCA9IGZhbHNlO1xuICBpZiAoZXZlcnlBcmdJc1VuZGVmaW5lZCB8fCAhZXZlcnlBcmdJc1VuZGVmaW5lZCAmJiAhbmVnYXRlKSB7XG4gICAgdmFyIGVycm9yTGlrZVN0cmluZyA9IFwiYW4gZXJyb3JcIjtcbiAgICBpZiAoZXJyb3JMaWtlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGVycm9yTGlrZVN0cmluZyA9IFwiI3tleHB9XCI7XG4gICAgfSBlbHNlIGlmIChlcnJvckxpa2UpIHtcbiAgICAgIGVycm9yTGlrZVN0cmluZyA9IGNoZWNrX2Vycm9yX2V4cG9ydHMuZ2V0Q29uc3RydWN0b3JOYW1lKGVycm9yTGlrZSk7XG4gICAgfVxuICAgIGxldCBhY3R1YWwgPSBjYXVnaHRFcnI7XG4gICAgaWYgKGNhdWdodEVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBhY3R1YWwgPSBjYXVnaHRFcnIudG9TdHJpbmcoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjYXVnaHRFcnIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGFjdHVhbCA9IGNhdWdodEVycjtcbiAgICB9IGVsc2UgaWYgKGNhdWdodEVyciAmJiAodHlwZW9mIGNhdWdodEVyciA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2F1Z2h0RXJyID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhY3R1YWwgPSBjaGVja19lcnJvcl9leHBvcnRzLmdldENvbnN0cnVjdG9yTmFtZShjYXVnaHRFcnIpO1xuICAgICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGVycm9yV2FzVGhyb3duLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIHRocm93IFwiICsgZXJyb3JMaWtlU3RyaW5nLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCB0aHJvdyBhbiBlcnJvciBidXQgI3thY3R9IHdhcyB0aHJvd25cIixcbiAgICAgIGVycm9yTGlrZSAmJiBlcnJvckxpa2UudG9TdHJpbmcoKSxcbiAgICAgIGFjdHVhbFxuICAgICk7XG4gIH1cbiAgaWYgKGVycm9yTGlrZSAmJiBjYXVnaHRFcnIpIHtcbiAgICBpZiAoZXJyb3JMaWtlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIHZhciBpc0NvbXBhdGlibGVJbnN0YW5jZSA9IGNoZWNrX2Vycm9yX2V4cG9ydHMuY29tcGF0aWJsZUluc3RhbmNlKGNhdWdodEVyciwgZXJyb3JMaWtlKTtcbiAgICAgIGlmIChpc0NvbXBhdGlibGVJbnN0YW5jZSA9PT0gbmVnYXRlKSB7XG4gICAgICAgIGlmIChldmVyeUFyZ0lzRGVmaW5lZCAmJiBuZWdhdGUpIHtcbiAgICAgICAgICBlcnJvckxpa2VGYWlsID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgIG5lZ2F0ZSxcbiAgICAgICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyAje2V4cH0gYnV0ICN7YWN0fSB3YXMgdGhyb3duXCIsXG4gICAgICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IHRocm93ICN7ZXhwfVwiICsgKGNhdWdodEVyciAmJiAhbmVnYXRlID8gXCIgYnV0ICN7YWN0fSB3YXMgdGhyb3duXCIgOiBcIlwiKSxcbiAgICAgICAgICAgIGVycm9yTGlrZS50b1N0cmluZygpLFxuICAgICAgICAgICAgY2F1Z2h0RXJyLnRvU3RyaW5nKClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBpc0NvbXBhdGlibGVDb25zdHJ1Y3RvciA9IGNoZWNrX2Vycm9yX2V4cG9ydHMuY29tcGF0aWJsZUNvbnN0cnVjdG9yKGNhdWdodEVyciwgZXJyb3JMaWtlKTtcbiAgICBpZiAoaXNDb21wYXRpYmxlQ29uc3RydWN0b3IgPT09IG5lZ2F0ZSkge1xuICAgICAgaWYgKGV2ZXJ5QXJnSXNEZWZpbmVkICYmIG5lZ2F0ZSkge1xuICAgICAgICBlcnJvckxpa2VGYWlsID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIG5lZ2F0ZSxcbiAgICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgI3tleHB9IGJ1dCAje2FjdH0gd2FzIHRocm93blwiLFxuICAgICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgdGhyb3cgI3tleHB9XCIgKyAoY2F1Z2h0RXJyID8gXCIgYnV0ICN7YWN0fSB3YXMgdGhyb3duXCIgOiBcIlwiKSxcbiAgICAgICAgICBlcnJvckxpa2UgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yTGlrZS50b1N0cmluZygpIDogZXJyb3JMaWtlICYmIGNoZWNrX2Vycm9yX2V4cG9ydHMuZ2V0Q29uc3RydWN0b3JOYW1lKGVycm9yTGlrZSksXG4gICAgICAgICAgY2F1Z2h0RXJyIGluc3RhbmNlb2YgRXJyb3IgPyBjYXVnaHRFcnIudG9TdHJpbmcoKSA6IGNhdWdodEVyciAmJiBjaGVja19lcnJvcl9leHBvcnRzLmdldENvbnN0cnVjdG9yTmFtZShjYXVnaHRFcnIpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChjYXVnaHRFcnIgJiYgZXJyTXNnTWF0Y2hlciAhPT0gdm9pZCAwICYmIGVyck1zZ01hdGNoZXIgIT09IG51bGwpIHtcbiAgICB2YXIgcGxhY2Vob2xkZXIgPSBcImluY2x1ZGluZ1wiO1xuICAgIGlmIChpc1JlZ0V4cDIoZXJyTXNnTWF0Y2hlcikpIHtcbiAgICAgIHBsYWNlaG9sZGVyID0gXCJtYXRjaGluZ1wiO1xuICAgIH1cbiAgICB2YXIgaXNDb21wYXRpYmxlTWVzc2FnZSA9IGNoZWNrX2Vycm9yX2V4cG9ydHMuY29tcGF0aWJsZU1lc3NhZ2UoY2F1Z2h0RXJyLCBlcnJNc2dNYXRjaGVyKTtcbiAgICBpZiAoaXNDb21wYXRpYmxlTWVzc2FnZSA9PT0gbmVnYXRlKSB7XG4gICAgICBpZiAoZXZlcnlBcmdJc0RlZmluZWQgJiYgbmVnYXRlKSB7XG4gICAgICAgIGVyck1zZ01hdGNoZXJGYWlsID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIG5lZ2F0ZSxcbiAgICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgZXJyb3IgXCIgKyBwbGFjZWhvbGRlciArIFwiICN7ZXhwfSBidXQgZ290ICN7YWN0fVwiLFxuICAgICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyBlcnJvciBub3QgXCIgKyBwbGFjZWhvbGRlciArIFwiICN7ZXhwfVwiLFxuICAgICAgICAgIGVyck1zZ01hdGNoZXIsXG4gICAgICAgICAgY2hlY2tfZXJyb3JfZXhwb3J0cy5nZXRNZXNzYWdlKGNhdWdodEVycilcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGVycm9yTGlrZUZhaWwgJiYgZXJyTXNnTWF0Y2hlckZhaWwpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIG5lZ2F0ZSxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyAje2V4cH0gYnV0ICN7YWN0fSB3YXMgdGhyb3duXCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IHRocm93ICN7ZXhwfVwiICsgKGNhdWdodEVyciA/IFwiIGJ1dCAje2FjdH0gd2FzIHRocm93blwiIDogXCJcIiksXG4gICAgICBlcnJvckxpa2UgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yTGlrZS50b1N0cmluZygpIDogZXJyb3JMaWtlICYmIGNoZWNrX2Vycm9yX2V4cG9ydHMuZ2V0Q29uc3RydWN0b3JOYW1lKGVycm9yTGlrZSksXG4gICAgICBjYXVnaHRFcnIgaW5zdGFuY2VvZiBFcnJvciA/IGNhdWdodEVyci50b1N0cmluZygpIDogY2F1Z2h0RXJyICYmIGNoZWNrX2Vycm9yX2V4cG9ydHMuZ2V0Q29uc3RydWN0b3JOYW1lKGNhdWdodEVycilcbiAgICApO1xuICB9XG4gIGZsYWcyKHRoaXMsIFwib2JqZWN0XCIsIGNhdWdodEVycik7XG59XG5fX25hbWUoYXNzZXJ0VGhyb3dzLCBcImFzc2VydFRocm93c1wiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJ0aHJvd1wiLCBhc3NlcnRUaHJvd3MpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcInRocm93c1wiLCBhc3NlcnRUaHJvd3MpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcIlRocm93XCIsIGFzc2VydFRocm93cyk7XG5mdW5jdGlvbiByZXNwb25kVG8obWV0aG9kLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBpdHNlbGYgPSBmbGFnMih0aGlzLCBcIml0c2VsZlwiKSwgY29udGV4dCA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG9iaiAmJiAhaXRzZWxmID8gb2JqLnByb3RvdHlwZVttZXRob2RdIDogb2JqW21ldGhvZF07XG4gIHRoaXMuYXNzZXJ0KFxuICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNvbnRleHQsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIHJlc3BvbmQgdG8gXCIgKyBpbnNwZWN0MihtZXRob2QpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgcmVzcG9uZCB0byBcIiArIGluc3BlY3QyKG1ldGhvZClcbiAgKTtcbn1cbl9fbmFtZShyZXNwb25kVG8sIFwicmVzcG9uZFRvXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcInJlc3BvbmRUb1wiLCByZXNwb25kVG8pO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcInJlc3BvbmRzVG9cIiwgcmVzcG9uZFRvKTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIml0c2VsZlwiLCBmdW5jdGlvbigpIHtcbiAgZmxhZzIodGhpcywgXCJpdHNlbGZcIiwgdHJ1ZSk7XG59KTtcbmZ1bmN0aW9uIHNhdGlzZnkobWF0Y2hlciwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdmFyIHJlc3VsdCA9IG1hdGNoZXIob2JqKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgcmVzdWx0LFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBzYXRpc2Z5IFwiICsgb2JqRGlzcGxheShtYXRjaGVyKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IHNhdGlzZnlcIiArIG9iakRpc3BsYXkobWF0Y2hlciksXG4gICAgZmxhZzIodGhpcywgXCJuZWdhdGVcIikgPyBmYWxzZSA6IHRydWUsXG4gICAgcmVzdWx0XG4gICk7XG59XG5fX25hbWUoc2F0aXNmeSwgXCJzYXRpc2Z5XCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcInNhdGlzZnlcIiwgc2F0aXNmeSk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwic2F0aXNmaWVzXCIsIHNhdGlzZnkpO1xuZnVuY3Rpb24gY2xvc2VUbyhleHBlY3RlZCwgZGVsdGEsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIik7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5udW1lcmljO1xuICBsZXQgbWVzc2FnZSA9IFwiQSBgZGVsdGFgIHZhbHVlIGlzIHJlcXVpcmVkIGZvciBgY2xvc2VUb2BcIjtcbiAgaWYgKGRlbHRhID09IHZvaWQgMClcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZmxhZ01zZyA/IGAke2ZsYWdNc2d9OiAke21lc3NhZ2V9YCA6IG1lc3NhZ2UsIHZvaWQgMCwgc3NmaSk7XG4gIG5ldyBBc3NlcnRpb24oZGVsdGEsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLm51bWVyaWM7XG4gIG1lc3NhZ2UgPSBcIkEgYGV4cGVjdGVkYCB2YWx1ZSBpcyByZXF1aXJlZCBmb3IgYGNsb3NlVG9gXCI7XG4gIGlmIChleHBlY3RlZCA9PSB2b2lkIDApXG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGZsYWdNc2cgPyBgJHtmbGFnTXNnfTogJHttZXNzYWdlfWAgOiBtZXNzYWdlLCB2b2lkIDAsIHNzZmkpO1xuICBuZXcgQXNzZXJ0aW9uKGV4cGVjdGVkLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5udW1lcmljO1xuICBjb25zdCBhYnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh4KSA9PiB4IDwgMG4gPyAteCA6IHgsIFwiYWJzXCIpO1xuICB0aGlzLmFzc2VydChcbiAgICBhYnMob2JqIC0gZXhwZWN0ZWQpIDw9IGRlbHRhLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBjbG9zZSB0byBcIiArIGV4cGVjdGVkICsgXCIgKy8tIFwiICsgZGVsdGEsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBjbG9zZSB0byBcIiArIGV4cGVjdGVkICsgXCIgKy8tIFwiICsgZGVsdGFcbiAgKTtcbn1cbl9fbmFtZShjbG9zZVRvLCBcImNsb3NlVG9cIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiY2xvc2VUb1wiLCBjbG9zZVRvKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJhcHByb3hpbWF0ZWx5XCIsIGNsb3NlVG8pO1xuZnVuY3Rpb24gaXNTdWJzZXRPZihfc3Vic2V0LCBfc3VwZXJzZXQsIGNtcCwgY29udGFpbnMsIG9yZGVyZWQpIHtcbiAgbGV0IHN1cGVyc2V0ID0gQXJyYXkuZnJvbShfc3VwZXJzZXQpO1xuICBsZXQgc3Vic2V0ID0gQXJyYXkuZnJvbShfc3Vic2V0KTtcbiAgaWYgKCFjb250YWlucykge1xuICAgIGlmIChzdWJzZXQubGVuZ3RoICE9PSBzdXBlcnNldC5sZW5ndGgpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgc3VwZXJzZXQgPSBzdXBlcnNldC5zbGljZSgpO1xuICB9XG4gIHJldHVybiBzdWJzZXQuZXZlcnkoZnVuY3Rpb24oZWxlbSwgaWR4KSB7XG4gICAgaWYgKG9yZGVyZWQpXG4gICAgICByZXR1cm4gY21wID8gY21wKGVsZW0sIHN1cGVyc2V0W2lkeF0pIDogZWxlbSA9PT0gc3VwZXJzZXRbaWR4XTtcbiAgICBpZiAoIWNtcCkge1xuICAgICAgdmFyIG1hdGNoSWR4ID0gc3VwZXJzZXQuaW5kZXhPZihlbGVtKTtcbiAgICAgIGlmIChtYXRjaElkeCA9PT0gLTEpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICghY29udGFpbnMpXG4gICAgICAgIHN1cGVyc2V0LnNwbGljZShtYXRjaElkeCwgMSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyc2V0LnNvbWUoZnVuY3Rpb24oZWxlbTIsIG1hdGNoSWR4Mikge1xuICAgICAgaWYgKCFjbXAoZWxlbSwgZWxlbTIpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIWNvbnRhaW5zKVxuICAgICAgICBzdXBlcnNldC5zcGxpY2UobWF0Y2hJZHgyLCAxKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9KTtcbn1cbl9fbmFtZShpc1N1YnNldE9mLCBcImlzU3Vic2V0T2ZcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibWVtYmVyc1wiLCBmdW5jdGlvbihzdWJzZXQsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIik7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5iZS5pdGVyYWJsZTtcbiAgbmV3IEFzc2VydGlvbihzdWJzZXQsIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmJlLml0ZXJhYmxlO1xuICB2YXIgY29udGFpbnMgPSBmbGFnMih0aGlzLCBcImNvbnRhaW5zXCIpO1xuICB2YXIgb3JkZXJlZCA9IGZsYWcyKHRoaXMsIFwib3JkZXJlZFwiKTtcbiAgdmFyIHN1YmplY3QsIGZhaWxNc2csIGZhaWxOZWdhdGVNc2c7XG4gIGlmIChjb250YWlucykge1xuICAgIHN1YmplY3QgPSBvcmRlcmVkID8gXCJhbiBvcmRlcmVkIHN1cGVyc2V0XCIgOiBcImEgc3VwZXJzZXRcIjtcbiAgICBmYWlsTXNnID0gXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIFwiICsgc3ViamVjdCArIFwiIG9mICN7ZXhwfVwiO1xuICAgIGZhaWxOZWdhdGVNc2cgPSBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIFwiICsgc3ViamVjdCArIFwiIG9mICN7ZXhwfVwiO1xuICB9IGVsc2Uge1xuICAgIHN1YmplY3QgPSBvcmRlcmVkID8gXCJvcmRlcmVkIG1lbWJlcnNcIiA6IFwibWVtYmVyc1wiO1xuICAgIGZhaWxNc2cgPSBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSB0aGUgc2FtZSBcIiArIHN1YmplY3QgKyBcIiBhcyAje2V4cH1cIjtcbiAgICBmYWlsTmVnYXRlTXNnID0gXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIHRoZSBzYW1lIFwiICsgc3ViamVjdCArIFwiIGFzICN7ZXhwfVwiO1xuICB9XG4gIHZhciBjbXAgPSBmbGFnMih0aGlzLCBcImRlZXBcIikgPyBmbGFnMih0aGlzLCBcImVxbFwiKSA6IHZvaWQgMDtcbiAgdGhpcy5hc3NlcnQoXG4gICAgaXNTdWJzZXRPZihzdWJzZXQsIG9iaiwgY21wLCBjb250YWlucywgb3JkZXJlZCksXG4gICAgZmFpbE1zZyxcbiAgICBmYWlsTmVnYXRlTXNnLFxuICAgIHN1YnNldCxcbiAgICBvYmosXG4gICAgdHJ1ZVxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJpdGVyYWJsZVwiLCBmdW5jdGlvbihtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB0aGlzLmFzc2VydChcbiAgICBvYmogIT0gdm9pZCAwICYmIG9ialtTeW1ib2wuaXRlcmF0b3JdLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhbiBpdGVyYWJsZVwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgYW4gaXRlcmFibGVcIixcbiAgICBvYmpcbiAgKTtcbn0pO1xuZnVuY3Rpb24gb25lT2YobGlzdCwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBleHBlY3RlZCA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBjb250YWlucyA9IGZsYWcyKHRoaXMsIFwiY29udGFpbnNcIiksIGlzRGVlcCA9IGZsYWcyKHRoaXMsIFwiZGVlcFwiKSwgZXFsID0gZmxhZzIodGhpcywgXCJlcWxcIik7XG4gIG5ldyBBc3NlcnRpb24obGlzdCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uYmUuYW4oXCJhcnJheVwiKTtcbiAgaWYgKGNvbnRhaW5zKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBsaXN0LnNvbWUoZnVuY3Rpb24ocG9zc2liaWxpdHkpIHtcbiAgICAgICAgcmV0dXJuIGV4cGVjdGVkLmluZGV4T2YocG9zc2liaWxpdHkpID4gLTE7XG4gICAgICB9KSxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBjb250YWluIG9uZSBvZiAje2V4cH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgY29udGFpbiBvbmUgb2YgI3tleHB9XCIsXG4gICAgICBsaXN0LFxuICAgICAgZXhwZWN0ZWRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGlmIChpc0RlZXApIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBsaXN0LnNvbWUoZnVuY3Rpb24ocG9zc2liaWxpdHkpIHtcbiAgICAgICAgICByZXR1cm4gZXFsKGV4cGVjdGVkLCBwb3NzaWJpbGl0eSk7XG4gICAgICAgIH0pLFxuICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gZGVlcGx5IGVxdWFsIG9uZSBvZiAje2V4cH1cIixcbiAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGRlZXBseSBlcXVhbCBvbmUgb2YgI3tleHB9XCIsXG4gICAgICAgIGxpc3QsXG4gICAgICAgIGV4cGVjdGVkXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgbGlzdC5pbmRleE9mKGV4cGVjdGVkKSA+IC0xLFxuICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgb25lIG9mICN7ZXhwfVwiLFxuICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIG9uZSBvZiAje2V4cH1cIixcbiAgICAgICAgbGlzdCxcbiAgICAgICAgZXhwZWN0ZWRcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5fX25hbWUob25lT2YsIFwib25lT2ZcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwib25lT2ZcIiwgb25lT2YpO1xuZnVuY3Rpb24gYXNzZXJ0Q2hhbmdlcyhzdWJqZWN0LCBwcm9wLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIGZuID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIik7XG4gIG5ldyBBc3NlcnRpb24oZm4sIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJmdW5jdGlvblwiKTtcbiAgdmFyIGluaXRpYWw7XG4gIGlmICghcHJvcCkge1xuICAgIG5ldyBBc3NlcnRpb24oc3ViamVjdCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYShcImZ1bmN0aW9uXCIpO1xuICAgIGluaXRpYWwgPSBzdWJqZWN0KCk7XG4gIH0gZWxzZSB7XG4gICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KHByb3ApO1xuICAgIGluaXRpYWwgPSBzdWJqZWN0W3Byb3BdO1xuICB9XG4gIGZuKCk7XG4gIHZhciBmaW5hbCA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gc3ViamVjdCgpIDogc3ViamVjdFtwcm9wXTtcbiAgdmFyIG1zZ09iaiA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gaW5pdGlhbCA6IFwiLlwiICsgcHJvcDtcbiAgZmxhZzIodGhpcywgXCJkZWx0YU1zZ09ialwiLCBtc2dPYmopO1xuICBmbGFnMih0aGlzLCBcImluaXRpYWxEZWx0YVZhbHVlXCIsIGluaXRpYWwpO1xuICBmbGFnMih0aGlzLCBcImZpbmFsRGVsdGFWYWx1ZVwiLCBmaW5hbCk7XG4gIGZsYWcyKHRoaXMsIFwiZGVsdGFCZWhhdmlvclwiLCBcImNoYW5nZVwiKTtcbiAgZmxhZzIodGhpcywgXCJyZWFsRGVsdGFcIiwgZmluYWwgIT09IGluaXRpYWwpO1xuICB0aGlzLmFzc2VydChcbiAgICBpbml0aWFsICE9PSBmaW5hbCxcbiAgICBcImV4cGVjdGVkIFwiICsgbXNnT2JqICsgXCIgdG8gY2hhbmdlXCIsXG4gICAgXCJleHBlY3RlZCBcIiArIG1zZ09iaiArIFwiIHRvIG5vdCBjaGFuZ2VcIlxuICApO1xufVxuX19uYW1lKGFzc2VydENoYW5nZXMsIFwiYXNzZXJ0Q2hhbmdlc1wiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJjaGFuZ2VcIiwgYXNzZXJ0Q2hhbmdlcyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiY2hhbmdlc1wiLCBhc3NlcnRDaGFuZ2VzKTtcbmZ1bmN0aW9uIGFzc2VydEluY3JlYXNlcyhzdWJqZWN0LCBwcm9wLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIGZuID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIik7XG4gIG5ldyBBc3NlcnRpb24oZm4sIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJmdW5jdGlvblwiKTtcbiAgdmFyIGluaXRpYWw7XG4gIGlmICghcHJvcCkge1xuICAgIG5ldyBBc3NlcnRpb24oc3ViamVjdCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYShcImZ1bmN0aW9uXCIpO1xuICAgIGluaXRpYWwgPSBzdWJqZWN0KCk7XG4gIH0gZWxzZSB7XG4gICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KHByb3ApO1xuICAgIGluaXRpYWwgPSBzdWJqZWN0W3Byb3BdO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oaW5pdGlhbCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYShcIm51bWJlclwiKTtcbiAgZm4oKTtcbiAgdmFyIGZpbmFsID0gcHJvcCA9PT0gdm9pZCAwIHx8IHByb3AgPT09IG51bGwgPyBzdWJqZWN0KCkgOiBzdWJqZWN0W3Byb3BdO1xuICB2YXIgbXNnT2JqID0gcHJvcCA9PT0gdm9pZCAwIHx8IHByb3AgPT09IG51bGwgPyBpbml0aWFsIDogXCIuXCIgKyBwcm9wO1xuICBmbGFnMih0aGlzLCBcImRlbHRhTXNnT2JqXCIsIG1zZ09iaik7XG4gIGZsYWcyKHRoaXMsIFwiaW5pdGlhbERlbHRhVmFsdWVcIiwgaW5pdGlhbCk7XG4gIGZsYWcyKHRoaXMsIFwiZmluYWxEZWx0YVZhbHVlXCIsIGZpbmFsKTtcbiAgZmxhZzIodGhpcywgXCJkZWx0YUJlaGF2aW9yXCIsIFwiaW5jcmVhc2VcIik7XG4gIGZsYWcyKHRoaXMsIFwicmVhbERlbHRhXCIsIGZpbmFsIC0gaW5pdGlhbCk7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGZpbmFsIC0gaW5pdGlhbCA+IDAsXG4gICAgXCJleHBlY3RlZCBcIiArIG1zZ09iaiArIFwiIHRvIGluY3JlYXNlXCIsXG4gICAgXCJleHBlY3RlZCBcIiArIG1zZ09iaiArIFwiIHRvIG5vdCBpbmNyZWFzZVwiXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0SW5jcmVhc2VzLCBcImFzc2VydEluY3JlYXNlc1wiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJpbmNyZWFzZVwiLCBhc3NlcnRJbmNyZWFzZXMpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImluY3JlYXNlc1wiLCBhc3NlcnRJbmNyZWFzZXMpO1xuZnVuY3Rpb24gYXNzZXJ0RGVjcmVhc2VzKHN1YmplY3QsIHByb3AsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgZm4gPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKTtcbiAgbmV3IEFzc2VydGlvbihmbiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYShcImZ1bmN0aW9uXCIpO1xuICB2YXIgaW5pdGlhbDtcbiAgaWYgKCFwcm9wKSB7XG4gICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwiZnVuY3Rpb25cIik7XG4gICAgaW5pdGlhbCA9IHN1YmplY3QoKTtcbiAgfSBlbHNlIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkocHJvcCk7XG4gICAgaW5pdGlhbCA9IHN1YmplY3RbcHJvcF07XG4gIH1cbiAgbmV3IEFzc2VydGlvbihpbml0aWFsLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwibnVtYmVyXCIpO1xuICBmbigpO1xuICB2YXIgZmluYWwgPSBwcm9wID09PSB2b2lkIDAgfHwgcHJvcCA9PT0gbnVsbCA/IHN1YmplY3QoKSA6IHN1YmplY3RbcHJvcF07XG4gIHZhciBtc2dPYmogPSBwcm9wID09PSB2b2lkIDAgfHwgcHJvcCA9PT0gbnVsbCA/IGluaXRpYWwgOiBcIi5cIiArIHByb3A7XG4gIGZsYWcyKHRoaXMsIFwiZGVsdGFNc2dPYmpcIiwgbXNnT2JqKTtcbiAgZmxhZzIodGhpcywgXCJpbml0aWFsRGVsdGFWYWx1ZVwiLCBpbml0aWFsKTtcbiAgZmxhZzIodGhpcywgXCJmaW5hbERlbHRhVmFsdWVcIiwgZmluYWwpO1xuICBmbGFnMih0aGlzLCBcImRlbHRhQmVoYXZpb3JcIiwgXCJkZWNyZWFzZVwiKTtcbiAgZmxhZzIodGhpcywgXCJyZWFsRGVsdGFcIiwgaW5pdGlhbCAtIGZpbmFsKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgZmluYWwgLSBpbml0aWFsIDwgMCxcbiAgICBcImV4cGVjdGVkIFwiICsgbXNnT2JqICsgXCIgdG8gZGVjcmVhc2VcIixcbiAgICBcImV4cGVjdGVkIFwiICsgbXNnT2JqICsgXCIgdG8gbm90IGRlY3JlYXNlXCJcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnREZWNyZWFzZXMsIFwiYXNzZXJ0RGVjcmVhc2VzXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImRlY3JlYXNlXCIsIGFzc2VydERlY3JlYXNlcyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZGVjcmVhc2VzXCIsIGFzc2VydERlY3JlYXNlcyk7XG5mdW5jdGlvbiBhc3NlcnREZWx0YShkZWx0YSwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBtc2dPYmogPSBmbGFnMih0aGlzLCBcImRlbHRhTXNnT2JqXCIpO1xuICB2YXIgaW5pdGlhbCA9IGZsYWcyKHRoaXMsIFwiaW5pdGlhbERlbHRhVmFsdWVcIik7XG4gIHZhciBmaW5hbCA9IGZsYWcyKHRoaXMsIFwiZmluYWxEZWx0YVZhbHVlXCIpO1xuICB2YXIgYmVoYXZpb3IgPSBmbGFnMih0aGlzLCBcImRlbHRhQmVoYXZpb3JcIik7XG4gIHZhciByZWFsRGVsdGEgPSBmbGFnMih0aGlzLCBcInJlYWxEZWx0YVwiKTtcbiAgdmFyIGV4cHJlc3Npb247XG4gIGlmIChiZWhhdmlvciA9PT0gXCJjaGFuZ2VcIikge1xuICAgIGV4cHJlc3Npb24gPSBNYXRoLmFicyhmaW5hbCAtIGluaXRpYWwpID09PSBNYXRoLmFicyhkZWx0YSk7XG4gIH0gZWxzZSB7XG4gICAgZXhwcmVzc2lvbiA9IHJlYWxEZWx0YSA9PT0gTWF0aC5hYnMoZGVsdGEpO1xuICB9XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGV4cHJlc3Npb24sXG4gICAgXCJleHBlY3RlZCBcIiArIG1zZ09iaiArIFwiIHRvIFwiICsgYmVoYXZpb3IgKyBcIiBieSBcIiArIGRlbHRhLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBub3QgXCIgKyBiZWhhdmlvciArIFwiIGJ5IFwiICsgZGVsdGFcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnREZWx0YSwgXCJhc3NlcnREZWx0YVwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJieVwiLCBhc3NlcnREZWx0YSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJleHRlbnNpYmxlXCIsIGZ1bmN0aW9uKCkge1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHZhciBpc0V4dGVuc2libGUgPSBvYmogPT09IE9iamVjdChvYmopICYmIE9iamVjdC5pc0V4dGVuc2libGUob2JqKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgaXNFeHRlbnNpYmxlLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBleHRlbnNpYmxlXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBleHRlbnNpYmxlXCJcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwic2VhbGVkXCIsIGZ1bmN0aW9uKCkge1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHZhciBpc1NlYWxlZCA9IG9iaiA9PT0gT2JqZWN0KG9iaikgPyBPYmplY3QuaXNTZWFsZWQob2JqKSA6IHRydWU7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGlzU2VhbGVkLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBzZWFsZWRcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIHNlYWxlZFwiXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImZyb3plblwiLCBmdW5jdGlvbigpIHtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB2YXIgaXNGcm96ZW4gPSBvYmogPT09IE9iamVjdChvYmopID8gT2JqZWN0LmlzRnJvemVuKG9iaikgOiB0cnVlO1xuICB0aGlzLmFzc2VydChcbiAgICBpc0Zyb3plbixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgZnJvemVuXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBmcm96ZW5cIlxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJmaW5pdGVcIiwgZnVuY3Rpb24obXNnKSB7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgdHlwZW9mIG9iaiA9PT0gXCJudW1iZXJcIiAmJiBpc0Zpbml0ZShvYmopLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhIGZpbml0ZSBudW1iZXJcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIGEgZmluaXRlIG51bWJlclwiXG4gICk7XG59KTtcblxuLy8gbGliL2NoYWkvaW50ZXJmYWNlL2V4cGVjdC5qc1xuZnVuY3Rpb24gZXhwZWN0KHZhbCwgbWVzc2FnZSkge1xuICByZXR1cm4gbmV3IEFzc2VydGlvbih2YWwsIG1lc3NhZ2UpO1xufVxuX19uYW1lKGV4cGVjdCwgXCJleHBlY3RcIik7XG5leHBlY3QuZmFpbCA9IGZ1bmN0aW9uKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wZXJhdG9yKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIG1lc3NhZ2UgPSBhY3R1YWw7XG4gICAgYWN0dWFsID0gdm9pZCAwO1xuICB9XG4gIG1lc3NhZ2UgPSBtZXNzYWdlIHx8IFwiZXhwZWN0LmZhaWwoKVwiO1xuICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobWVzc2FnZSwge1xuICAgIGFjdHVhbCxcbiAgICBleHBlY3RlZCxcbiAgICBvcGVyYXRvclxuICB9LCBleHBlY3QuZmFpbCk7XG59O1xuXG4vLyBsaWIvY2hhaS9pbnRlcmZhY2Uvc2hvdWxkLmpzXG52YXIgc2hvdWxkX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHNob3VsZF9leHBvcnRzLCB7XG4gIFNob3VsZDogKCkgPT4gU2hvdWxkLFxuICBzaG91bGQ6ICgpID0+IHNob3VsZFxufSk7XG5mdW5jdGlvbiBsb2FkU2hvdWxkKCkge1xuICBmdW5jdGlvbiBzaG91bGRHZXR0ZXIoKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBTdHJpbmcgfHwgdGhpcyBpbnN0YW5jZW9mIE51bWJlciB8fCB0aGlzIGluc3RhbmNlb2YgQm9vbGVhbiB8fCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdGhpcyBpbnN0YW5jZW9mIFN5bWJvbCB8fCB0eXBlb2YgQmlnSW50ID09PSBcImZ1bmN0aW9uXCIgJiYgdGhpcyBpbnN0YW5jZW9mIEJpZ0ludCkge1xuICAgICAgcmV0dXJuIG5ldyBBc3NlcnRpb24odGhpcy52YWx1ZU9mKCksIG51bGwsIHNob3VsZEdldHRlcik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uKHRoaXMsIG51bGwsIHNob3VsZEdldHRlcik7XG4gIH1cbiAgX19uYW1lKHNob3VsZEdldHRlciwgXCJzaG91bGRHZXR0ZXJcIik7XG4gIGZ1bmN0aW9uIHNob3VsZFNldHRlcih2YWx1ZSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInNob3VsZFwiLCB7XG4gICAgICB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIF9fbmFtZShzaG91bGRTZXR0ZXIsIFwic2hvdWxkU2V0dGVyXCIpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LnByb3RvdHlwZSwgXCJzaG91bGRcIiwge1xuICAgIHNldDogc2hvdWxkU2V0dGVyLFxuICAgIGdldDogc2hvdWxkR2V0dGVyLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbiAgdmFyIHNob3VsZDIgPSB7fTtcbiAgc2hvdWxkMi5mYWlsID0gZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgb3BlcmF0b3IpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIG1lc3NhZ2UgPSBhY3R1YWw7XG4gICAgICBhY3R1YWwgPSB2b2lkIDA7XG4gICAgfVxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlIHx8IFwic2hvdWxkLmZhaWwoKVwiO1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtZXNzYWdlLCB7XG4gICAgICBhY3R1YWwsXG4gICAgICBleHBlY3RlZCxcbiAgICAgIG9wZXJhdG9yXG4gICAgfSwgc2hvdWxkMi5mYWlsKTtcbiAgfTtcbiAgc2hvdWxkMi5lcXVhbCA9IGZ1bmN0aW9uKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGFjdHVhbCwgbWVzc2FnZSkudG8uZXF1YWwoZXhwZWN0ZWQpO1xuICB9O1xuICBzaG91bGQyLlRocm93ID0gZnVuY3Rpb24oZm4sIGVycnQsIGVycnMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZykudG8uVGhyb3coZXJydCwgZXJycyk7XG4gIH07XG4gIHNob3VsZDIuZXhpc3QgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2cpLnRvLmV4aXN0O1xuICB9O1xuICBzaG91bGQyLm5vdCA9IHt9O1xuICBzaG91bGQyLm5vdC5lcXVhbCA9IGZ1bmN0aW9uKGFjdHVhbCwgZXhwZWN0ZWQsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oYWN0dWFsLCBtc2cpLnRvLm5vdC5lcXVhbChleHBlY3RlZCk7XG4gIH07XG4gIHNob3VsZDIubm90LlRocm93ID0gZnVuY3Rpb24oZm4sIGVycnQsIGVycnMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZykudG8ubm90LlRocm93KGVycnQsIGVycnMpO1xuICB9O1xuICBzaG91bGQyLm5vdC5leGlzdCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykudG8ubm90LmV4aXN0O1xuICB9O1xuICBzaG91bGQyW1widGhyb3dcIl0gPSBzaG91bGQyW1wiVGhyb3dcIl07XG4gIHNob3VsZDIubm90W1widGhyb3dcIl0gPSBzaG91bGQyLm5vdFtcIlRocm93XCJdO1xuICByZXR1cm4gc2hvdWxkMjtcbn1cbl9fbmFtZShsb2FkU2hvdWxkLCBcImxvYWRTaG91bGRcIik7XG52YXIgc2hvdWxkID0gbG9hZFNob3VsZDtcbnZhciBTaG91bGQgPSBsb2FkU2hvdWxkO1xuXG4vLyBsaWIvY2hhaS9pbnRlcmZhY2UvYXNzZXJ0LmpzXG5mdW5jdGlvbiBhc3NlcnQoZXhwcmVzcywgZXJybXNnKSB7XG4gIHZhciB0ZXN0MiA9IG5ldyBBc3NlcnRpb24obnVsbCwgbnVsbCwgYXNzZXJ0LCB0cnVlKTtcbiAgdGVzdDIuYXNzZXJ0KFxuICAgIGV4cHJlc3MsXG4gICAgZXJybXNnLFxuICAgIFwiWyBuZWdhdGlvbiBtZXNzYWdlIHVuYXZhaWxhYmxlIF1cIlxuICApO1xufVxuX19uYW1lKGFzc2VydCwgXCJhc3NlcnRcIik7XG5hc3NlcnQuZmFpbCA9IGZ1bmN0aW9uKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wZXJhdG9yKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIG1lc3NhZ2UgPSBhY3R1YWw7XG4gICAgYWN0dWFsID0gdm9pZCAwO1xuICB9XG4gIG1lc3NhZ2UgPSBtZXNzYWdlIHx8IFwiYXNzZXJ0LmZhaWwoKVwiO1xuICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobWVzc2FnZSwge1xuICAgIGFjdHVhbCxcbiAgICBleHBlY3RlZCxcbiAgICBvcGVyYXRvclxuICB9LCBhc3NlcnQuZmFpbCk7XG59O1xuYXNzZXJ0LmlzT2sgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNPaywgdHJ1ZSkuaXMub2s7XG59O1xuYXNzZXJ0LmlzTm90T2sgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RPaywgdHJ1ZSkuaXMubm90Lm9rO1xufTtcbmFzc2VydC5lcXVhbCA9IGZ1bmN0aW9uKGFjdCwgZXhwLCBtc2cpIHtcbiAgdmFyIHRlc3QyID0gbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0LmVxdWFsLCB0cnVlKTtcbiAgdGVzdDIuYXNzZXJ0KFxuICAgIGV4cCA9PSBmbGFnKHRlc3QyLCBcIm9iamVjdFwiKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gZXF1YWwgI3tleHB9XCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBlcXVhbCAje2FjdH1cIixcbiAgICBleHAsXG4gICAgYWN0LFxuICAgIHRydWVcbiAgKTtcbn07XG5hc3NlcnQubm90RXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIHZhciB0ZXN0MiA9IG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5ub3RFcXVhbCwgdHJ1ZSk7XG4gIHRlc3QyLmFzc2VydChcbiAgICBleHAgIT0gZmxhZyh0ZXN0MiwgXCJvYmplY3RcIiksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBlcXVhbCAje2V4cH1cIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gZXF1YWwgI3thY3R9XCIsXG4gICAgZXhwLFxuICAgIGFjdCxcbiAgICB0cnVlXG4gICk7XG59O1xuYXNzZXJ0LnN0cmljdEVxdWFsID0gZnVuY3Rpb24oYWN0LCBleHAsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQuc3RyaWN0RXF1YWwsIHRydWUpLnRvLmVxdWFsKGV4cCk7XG59O1xuYXNzZXJ0Lm5vdFN0cmljdEVxdWFsID0gZnVuY3Rpb24oYWN0LCBleHAsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQubm90U3RyaWN0RXF1YWwsIHRydWUpLnRvLm5vdC5lcXVhbChleHApO1xufTtcbmFzc2VydC5kZWVwRXF1YWwgPSBhc3NlcnQuZGVlcFN0cmljdEVxdWFsID0gZnVuY3Rpb24oYWN0LCBleHAsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQuZGVlcEVxdWFsLCB0cnVlKS50by5lcWwoZXhwKTtcbn07XG5hc3NlcnQubm90RGVlcEVxdWFsID0gZnVuY3Rpb24oYWN0LCBleHAsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQubm90RGVlcEVxdWFsLCB0cnVlKS50by5ub3QuZXFsKGV4cCk7XG59O1xuYXNzZXJ0LmlzQWJvdmUgPSBmdW5jdGlvbih2YWwsIGFidiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0Fib3ZlLCB0cnVlKS50by5iZS5hYm92ZShhYnYpO1xufTtcbmFzc2VydC5pc0F0TGVhc3QgPSBmdW5jdGlvbih2YWwsIGF0bHN0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzQXRMZWFzdCwgdHJ1ZSkudG8uYmUubGVhc3QoYXRsc3QpO1xufTtcbmFzc2VydC5pc0JlbG93ID0gZnVuY3Rpb24odmFsLCBibHcsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNCZWxvdywgdHJ1ZSkudG8uYmUuYmVsb3coYmx3KTtcbn07XG5hc3NlcnQuaXNBdE1vc3QgPSBmdW5jdGlvbih2YWwsIGF0bXN0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzQXRNb3N0LCB0cnVlKS50by5iZS5tb3N0KGF0bXN0KTtcbn07XG5hc3NlcnQuaXNUcnVlID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzVHJ1ZSwgdHJ1ZSkuaXNbXCJ0cnVlXCJdO1xufTtcbmFzc2VydC5pc05vdFRydWUgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RUcnVlLCB0cnVlKS50by5ub3QuZXF1YWwodHJ1ZSk7XG59O1xuYXNzZXJ0LmlzRmFsc2UgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNGYWxzZSwgdHJ1ZSkuaXNbXCJmYWxzZVwiXTtcbn07XG5hc3NlcnQuaXNOb3RGYWxzZSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdEZhbHNlLCB0cnVlKS50by5ub3QuZXF1YWwoZmFsc2UpO1xufTtcbmFzc2VydC5pc051bGwgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOdWxsLCB0cnVlKS50by5lcXVhbChudWxsKTtcbn07XG5hc3NlcnQuaXNOb3ROdWxsID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90TnVsbCwgdHJ1ZSkudG8ubm90LmVxdWFsKG51bGwpO1xufTtcbmFzc2VydC5pc05hTiA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05hTiwgdHJ1ZSkudG8uYmUuTmFOO1xufTtcbmFzc2VydC5pc05vdE5hTiA9IGZ1bmN0aW9uKHZhbHVlLCBtZXNzYWdlKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsdWUsIG1lc3NhZ2UsIGFzc2VydC5pc05vdE5hTiwgdHJ1ZSkubm90LnRvLmJlLk5hTjtcbn07XG5hc3NlcnQuZXhpc3RzID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmV4aXN0cywgdHJ1ZSkudG8uZXhpc3Q7XG59O1xuYXNzZXJ0Lm5vdEV4aXN0cyA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5ub3RFeGlzdHMsIHRydWUpLnRvLm5vdC5leGlzdDtcbn07XG5hc3NlcnQuaXNVbmRlZmluZWQgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNVbmRlZmluZWQsIHRydWUpLnRvLmVxdWFsKHZvaWQgMCk7XG59O1xuYXNzZXJ0LmlzRGVmaW5lZCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0RlZmluZWQsIHRydWUpLnRvLm5vdC5lcXVhbCh2b2lkIDApO1xufTtcbmFzc2VydC5pc0NhbGxhYmxlID0gZnVuY3Rpb24odmFsdWUsIG1lc3NhZ2UpIHtcbiAgbmV3IEFzc2VydGlvbih2YWx1ZSwgbWVzc2FnZSwgYXNzZXJ0LmlzQ2FsbGFibGUsIHRydWUpLmlzLmNhbGxhYmxlO1xufTtcbmFzc2VydC5pc05vdENhbGxhYmxlID0gZnVuY3Rpb24odmFsdWUsIG1lc3NhZ2UpIHtcbiAgbmV3IEFzc2VydGlvbih2YWx1ZSwgbWVzc2FnZSwgYXNzZXJ0LmlzTm90Q2FsbGFibGUsIHRydWUpLmlzLm5vdC5jYWxsYWJsZTtcbn07XG5hc3NlcnQuaXNPYmplY3QgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNPYmplY3QsIHRydWUpLnRvLmJlLmEoXCJvYmplY3RcIik7XG59O1xuYXNzZXJ0LmlzTm90T2JqZWN0ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90T2JqZWN0LCB0cnVlKS50by5ub3QuYmUuYShcIm9iamVjdFwiKTtcbn07XG5hc3NlcnQuaXNBcnJheSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0FycmF5LCB0cnVlKS50by5iZS5hbihcImFycmF5XCIpO1xufTtcbmFzc2VydC5pc05vdEFycmF5ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90QXJyYXksIHRydWUpLnRvLm5vdC5iZS5hbihcImFycmF5XCIpO1xufTtcbmFzc2VydC5pc1N0cmluZyA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc1N0cmluZywgdHJ1ZSkudG8uYmUuYShcInN0cmluZ1wiKTtcbn07XG5hc3NlcnQuaXNOb3RTdHJpbmcgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RTdHJpbmcsIHRydWUpLnRvLm5vdC5iZS5hKFwic3RyaW5nXCIpO1xufTtcbmFzc2VydC5pc051bWJlciA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc051bWJlciwgdHJ1ZSkudG8uYmUuYShcIm51bWJlclwiKTtcbn07XG5hc3NlcnQuaXNOb3ROdW1iZXIgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3ROdW1iZXIsIHRydWUpLnRvLm5vdC5iZS5hKFwibnVtYmVyXCIpO1xufTtcbmFzc2VydC5pc051bWVyaWMgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOdW1lcmljLCB0cnVlKS5pcy5udW1lcmljO1xufTtcbmFzc2VydC5pc05vdE51bWVyaWMgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3ROdW1lcmljLCB0cnVlKS5pcy5ub3QubnVtZXJpYztcbn07XG5hc3NlcnQuaXNGaW5pdGUgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNGaW5pdGUsIHRydWUpLnRvLmJlLmZpbml0ZTtcbn07XG5hc3NlcnQuaXNCb29sZWFuID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzQm9vbGVhbiwgdHJ1ZSkudG8uYmUuYShcImJvb2xlYW5cIik7XG59O1xuYXNzZXJ0LmlzTm90Qm9vbGVhbiA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdEJvb2xlYW4sIHRydWUpLnRvLm5vdC5iZS5hKFwiYm9vbGVhblwiKTtcbn07XG5hc3NlcnQudHlwZU9mID0gZnVuY3Rpb24odmFsLCB0eXBlMywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC50eXBlT2YsIHRydWUpLnRvLmJlLmEodHlwZTMpO1xufTtcbmFzc2VydC5ub3RUeXBlT2YgPSBmdW5jdGlvbih2YWx1ZSwgdHlwZTMsIG1lc3NhZ2UpIHtcbiAgbmV3IEFzc2VydGlvbih2YWx1ZSwgbWVzc2FnZSwgYXNzZXJ0Lm5vdFR5cGVPZiwgdHJ1ZSkudG8ubm90LmJlLmEodHlwZTMpO1xufTtcbmFzc2VydC5pbnN0YW5jZU9mID0gZnVuY3Rpb24odmFsLCB0eXBlMywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pbnN0YW5jZU9mLCB0cnVlKS50by5iZS5pbnN0YW5jZU9mKHR5cGUzKTtcbn07XG5hc3NlcnQubm90SW5zdGFuY2VPZiA9IGZ1bmN0aW9uKHZhbCwgdHlwZTMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQubm90SW5zdGFuY2VPZiwgdHJ1ZSkudG8ubm90LmJlLmluc3RhbmNlT2YodHlwZTMpO1xufTtcbmFzc2VydC5pbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQuaW5jbHVkZSwgdHJ1ZSkuaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5ub3RJbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90SW5jbHVkZSwgdHJ1ZSkubm90LmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQuZGVlcEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5kZWVwSW5jbHVkZSwgdHJ1ZSkuZGVlcC5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm5vdERlZXBJbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90RGVlcEluY2x1ZGUsIHRydWUpLm5vdC5kZWVwLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQubmVzdGVkSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5lc3RlZEluY2x1ZGUsIHRydWUpLm5lc3RlZC5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm5vdE5lc3RlZEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3ROZXN0ZWRJbmNsdWRlLCB0cnVlKS5ub3QubmVzdGVkLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQuZGVlcE5lc3RlZEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5kZWVwTmVzdGVkSW5jbHVkZSwgdHJ1ZSkuZGVlcC5uZXN0ZWQuaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5ub3REZWVwTmVzdGVkSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5vdERlZXBOZXN0ZWRJbmNsdWRlLCB0cnVlKS5ub3QuZGVlcC5uZXN0ZWQuaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5vd25JbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQub3duSW5jbHVkZSwgdHJ1ZSkub3duLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQubm90T3duSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5vdE93bkluY2x1ZGUsIHRydWUpLm5vdC5vd24uaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5kZWVwT3duSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0LmRlZXBPd25JbmNsdWRlLCB0cnVlKS5kZWVwLm93bi5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm5vdERlZXBPd25JbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90RGVlcE93bkluY2x1ZGUsIHRydWUpLm5vdC5kZWVwLm93bi5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm1hdGNoID0gZnVuY3Rpb24oZXhwLCByZSwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5tYXRjaCwgdHJ1ZSkudG8ubWF0Y2gocmUpO1xufTtcbmFzc2VydC5ub3RNYXRjaCA9IGZ1bmN0aW9uKGV4cCwgcmUsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90TWF0Y2gsIHRydWUpLnRvLm5vdC5tYXRjaChyZSk7XG59O1xuYXNzZXJ0LnByb3BlcnR5ID0gZnVuY3Rpb24ob2JqLCBwcm9wLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LnByb3BlcnR5LCB0cnVlKS50by5oYXZlLnByb3BlcnR5KHByb3ApO1xufTtcbmFzc2VydC5ub3RQcm9wZXJ0eSA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3RQcm9wZXJ0eSwgdHJ1ZSkudG8ubm90LmhhdmUucHJvcGVydHkocHJvcCk7XG59O1xuYXNzZXJ0LnByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQucHJvcGVydHlWYWwsIHRydWUpLnRvLmhhdmUucHJvcGVydHkocHJvcCwgdmFsKTtcbn07XG5hc3NlcnQubm90UHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3RQcm9wZXJ0eVZhbCwgdHJ1ZSkudG8ubm90LmhhdmUucHJvcGVydHkocHJvcCwgdmFsKTtcbn07XG5hc3NlcnQuZGVlcFByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuZGVlcFByb3BlcnR5VmFsLCB0cnVlKS50by5oYXZlLmRlZXAucHJvcGVydHkocHJvcCwgdmFsKTtcbn07XG5hc3NlcnQubm90RGVlcFByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90RGVlcFByb3BlcnR5VmFsLCB0cnVlKS50by5ub3QuaGF2ZS5kZWVwLnByb3BlcnR5KHByb3AsIHZhbCk7XG59O1xuYXNzZXJ0Lm93blByb3BlcnR5ID0gZnVuY3Rpb24ob2JqLCBwcm9wLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm93blByb3BlcnR5LCB0cnVlKS50by5oYXZlLm93bi5wcm9wZXJ0eShwcm9wKTtcbn07XG5hc3NlcnQubm90T3duUHJvcGVydHkgPSBmdW5jdGlvbihvYmosIHByb3AsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90T3duUHJvcGVydHksIHRydWUpLnRvLm5vdC5oYXZlLm93bi5wcm9wZXJ0eShwcm9wKTtcbn07XG5hc3NlcnQub3duUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbHVlLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm93blByb3BlcnR5VmFsLCB0cnVlKS50by5oYXZlLm93bi5wcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG59O1xuYXNzZXJ0Lm5vdE93blByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWx1ZSwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3RPd25Qcm9wZXJ0eVZhbCwgdHJ1ZSkudG8ubm90LmhhdmUub3duLnByb3BlcnR5KHByb3AsIHZhbHVlKTtcbn07XG5hc3NlcnQuZGVlcE93blByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWx1ZSwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kZWVwT3duUHJvcGVydHlWYWwsIHRydWUpLnRvLmhhdmUuZGVlcC5vd24ucHJvcGVydHkocHJvcCwgdmFsdWUpO1xufTtcbmFzc2VydC5ub3REZWVwT3duUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbHVlLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdERlZXBPd25Qcm9wZXJ0eVZhbCwgdHJ1ZSkudG8ubm90LmhhdmUuZGVlcC5vd24ucHJvcGVydHkocHJvcCwgdmFsdWUpO1xufTtcbmFzc2VydC5uZXN0ZWRQcm9wZXJ0eSA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5uZXN0ZWRQcm9wZXJ0eSwgdHJ1ZSkudG8uaGF2ZS5uZXN0ZWQucHJvcGVydHkocHJvcCk7XG59O1xuYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5ID0gZnVuY3Rpb24ob2JqLCBwcm9wLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5LCB0cnVlKS50by5ub3QuaGF2ZS5uZXN0ZWQucHJvcGVydHkocHJvcCk7XG59O1xuYXNzZXJ0Lm5lc3RlZFByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubmVzdGVkUHJvcGVydHlWYWwsIHRydWUpLnRvLmhhdmUubmVzdGVkLnByb3BlcnR5KHByb3AsIHZhbCk7XG59O1xuYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90TmVzdGVkUHJvcGVydHlWYWwsIHRydWUpLnRvLm5vdC5oYXZlLm5lc3RlZC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xufTtcbmFzc2VydC5kZWVwTmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kZWVwTmVzdGVkUHJvcGVydHlWYWwsIHRydWUpLnRvLmhhdmUuZGVlcC5uZXN0ZWQucHJvcGVydHkocHJvcCwgdmFsKTtcbn07XG5hc3NlcnQubm90RGVlcE5lc3RlZFByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90RGVlcE5lc3RlZFByb3BlcnR5VmFsLCB0cnVlKS50by5ub3QuaGF2ZS5kZWVwLm5lc3RlZC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xufTtcbmFzc2VydC5sZW5ndGhPZiA9IGZ1bmN0aW9uKGV4cCwgbGVuLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lmxlbmd0aE9mLCB0cnVlKS50by5oYXZlLmxlbmd0aE9mKGxlbik7XG59O1xuYXNzZXJ0Lmhhc0FueUtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaGFzQW55S2V5cywgdHJ1ZSkudG8uaGF2ZS5hbnkua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQuaGFzQWxsS2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5oYXNBbGxLZXlzLCB0cnVlKS50by5oYXZlLmFsbC5rZXlzKGtleXMpO1xufTtcbmFzc2VydC5jb250YWluc0FsbEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuY29udGFpbnNBbGxLZXlzLCB0cnVlKS50by5jb250YWluLmFsbC5rZXlzKGtleXMpO1xufTtcbmFzc2VydC5kb2VzTm90SGF2ZUFueUtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuZG9lc05vdEhhdmVBbnlLZXlzLCB0cnVlKS50by5ub3QuaGF2ZS5hbnkua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQuZG9lc05vdEhhdmVBbGxLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRvZXNOb3RIYXZlQWxsS2V5cywgdHJ1ZSkudG8ubm90LmhhdmUuYWxsLmtleXMoa2V5cyk7XG59O1xuYXNzZXJ0Lmhhc0FueURlZXBLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lmhhc0FueURlZXBLZXlzLCB0cnVlKS50by5oYXZlLmFueS5kZWVwLmtleXMoa2V5cyk7XG59O1xuYXNzZXJ0Lmhhc0FsbERlZXBLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lmhhc0FsbERlZXBLZXlzLCB0cnVlKS50by5oYXZlLmFsbC5kZWVwLmtleXMoa2V5cyk7XG59O1xuYXNzZXJ0LmNvbnRhaW5zQWxsRGVlcEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuY29udGFpbnNBbGxEZWVwS2V5cywgdHJ1ZSkudG8uY29udGFpbi5hbGwuZGVlcC5rZXlzKGtleXMpO1xufTtcbmFzc2VydC5kb2VzTm90SGF2ZUFueURlZXBLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRvZXNOb3RIYXZlQW55RGVlcEtleXMsIHRydWUpLnRvLm5vdC5oYXZlLmFueS5kZWVwLmtleXMoa2V5cyk7XG59O1xuYXNzZXJ0LmRvZXNOb3RIYXZlQWxsRGVlcEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuZG9lc05vdEhhdmVBbGxEZWVwS2V5cywgdHJ1ZSkudG8ubm90LmhhdmUuYWxsLmRlZXAua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQudGhyb3dzID0gZnVuY3Rpb24oZm4sIGVycm9yTGlrZSwgZXJyTXNnTWF0Y2hlciwgbXNnKSB7XG4gIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgZXJyb3JMaWtlIHx8IGVycm9yTGlrZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIGVyck1zZ01hdGNoZXIgPSBlcnJvckxpa2U7XG4gICAgZXJyb3JMaWtlID0gbnVsbDtcbiAgfVxuICB2YXIgYXNzZXJ0RXJyID0gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQudGhyb3dzLCB0cnVlKS50by50aHJvdyhlcnJvckxpa2UsIGVyck1zZ01hdGNoZXIpO1xuICByZXR1cm4gZmxhZyhhc3NlcnRFcnIsIFwib2JqZWN0XCIpO1xufTtcbmFzc2VydC5kb2VzTm90VGhyb3cgPSBmdW5jdGlvbihmbiwgZXJyb3JMaWtlLCBlcnJNc2dNYXRjaGVyLCBtZXNzYWdlKSB7XG4gIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgZXJyb3JMaWtlIHx8IGVycm9yTGlrZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIGVyck1zZ01hdGNoZXIgPSBlcnJvckxpa2U7XG4gICAgZXJyb3JMaWtlID0gbnVsbDtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGZuLCBtZXNzYWdlLCBhc3NlcnQuZG9lc05vdFRocm93LCB0cnVlKS50by5ub3QudGhyb3coZXJyb3JMaWtlLCBlcnJNc2dNYXRjaGVyKTtcbn07XG5hc3NlcnQub3BlcmF0b3IgPSBmdW5jdGlvbih2YWwsIG9wZXJhdG9yLCB2YWwyLCBtc2cpIHtcbiAgdmFyIG9rO1xuICBzd2l0Y2ggKG9wZXJhdG9yKSB7XG4gICAgY2FzZSBcIj09XCI6XG4gICAgICBvayA9IHZhbCA9PSB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIj09PVwiOlxuICAgICAgb2sgPSB2YWwgPT09IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiPlwiOlxuICAgICAgb2sgPSB2YWwgPiB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIj49XCI6XG4gICAgICBvayA9IHZhbCA+PSB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIjxcIjpcbiAgICAgIG9rID0gdmFsIDwgdmFsMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCI8PVwiOlxuICAgICAgb2sgPSB2YWwgPD0gdmFsMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCIhPVwiOlxuICAgICAgb2sgPSB2YWwgIT0gdmFsMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCIhPT1cIjpcbiAgICAgIG9rID0gdmFsICE9PSB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIG1zZyA9IG1zZyA/IG1zZyArIFwiOiBcIiA6IG1zZztcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgbXNnICsgJ0ludmFsaWQgb3BlcmF0b3IgXCInICsgb3BlcmF0b3IgKyAnXCInLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIGFzc2VydC5vcGVyYXRvclxuICAgICAgKTtcbiAgfVxuICB2YXIgdGVzdDIgPSBuZXcgQXNzZXJ0aW9uKG9rLCBtc2csIGFzc2VydC5vcGVyYXRvciwgdHJ1ZSk7XG4gIHRlc3QyLmFzc2VydChcbiAgICB0cnVlID09PSBmbGFnKHRlc3QyLCBcIm9iamVjdFwiKSxcbiAgICBcImV4cGVjdGVkIFwiICsgaW5zcGVjdDIodmFsKSArIFwiIHRvIGJlIFwiICsgb3BlcmF0b3IgKyBcIiBcIiArIGluc3BlY3QyKHZhbDIpLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBpbnNwZWN0Mih2YWwpICsgXCIgdG8gbm90IGJlIFwiICsgb3BlcmF0b3IgKyBcIiBcIiArIGluc3BlY3QyKHZhbDIpXG4gICk7XG59O1xuYXNzZXJ0LmNsb3NlVG8gPSBmdW5jdGlvbihhY3QsIGV4cCwgZGVsdGEsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQuY2xvc2VUbywgdHJ1ZSkudG8uYmUuY2xvc2VUbyhleHAsIGRlbHRhKTtcbn07XG5hc3NlcnQuYXBwcm94aW1hdGVseSA9IGZ1bmN0aW9uKGFjdCwgZXhwLCBkZWx0YSwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5hcHByb3hpbWF0ZWx5LCB0cnVlKS50by5iZS5hcHByb3hpbWF0ZWx5KGV4cCwgZGVsdGEpO1xufTtcbmFzc2VydC5zYW1lTWVtYmVycyA9IGZ1bmN0aW9uKHNldDEsIHNldDIsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0LnNhbWVNZW1iZXJzLCB0cnVlKS50by5oYXZlLnNhbWUubWVtYmVycyhzZXQyKTtcbn07XG5hc3NlcnQubm90U2FtZU1lbWJlcnMgPSBmdW5jdGlvbihzZXQxLCBzZXQyLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5ub3RTYW1lTWVtYmVycywgdHJ1ZSkudG8ubm90LmhhdmUuc2FtZS5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5zYW1lRGVlcE1lbWJlcnMgPSBmdW5jdGlvbihzZXQxLCBzZXQyLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5zYW1lRGVlcE1lbWJlcnMsIHRydWUpLnRvLmhhdmUuc2FtZS5kZWVwLm1lbWJlcnMoc2V0Mik7XG59O1xuYXNzZXJ0Lm5vdFNhbWVEZWVwTWVtYmVycyA9IGZ1bmN0aW9uKHNldDEsIHNldDIsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0Lm5vdFNhbWVEZWVwTWVtYmVycywgdHJ1ZSkudG8ubm90LmhhdmUuc2FtZS5kZWVwLm1lbWJlcnMoc2V0Mik7XG59O1xuYXNzZXJ0LnNhbWVPcmRlcmVkTWVtYmVycyA9IGZ1bmN0aW9uKHNldDEsIHNldDIsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0LnNhbWVPcmRlcmVkTWVtYmVycywgdHJ1ZSkudG8uaGF2ZS5zYW1lLm9yZGVyZWQubWVtYmVycyhzZXQyKTtcbn07XG5hc3NlcnQubm90U2FtZU9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQubm90U2FtZU9yZGVyZWRNZW1iZXJzLCB0cnVlKS50by5ub3QuaGF2ZS5zYW1lLm9yZGVyZWQubWVtYmVycyhzZXQyKTtcbn07XG5hc3NlcnQuc2FtZURlZXBPcmRlcmVkTWVtYmVycyA9IGZ1bmN0aW9uKHNldDEsIHNldDIsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0LnNhbWVEZWVwT3JkZXJlZE1lbWJlcnMsIHRydWUpLnRvLmhhdmUuc2FtZS5kZWVwLm9yZGVyZWQubWVtYmVycyhzZXQyKTtcbn07XG5hc3NlcnQubm90U2FtZURlZXBPcmRlcmVkTWVtYmVycyA9IGZ1bmN0aW9uKHNldDEsIHNldDIsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0Lm5vdFNhbWVEZWVwT3JkZXJlZE1lbWJlcnMsIHRydWUpLnRvLm5vdC5oYXZlLnNhbWUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoc2V0Mik7XG59O1xuYXNzZXJ0LmluY2x1ZGVNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0LmluY2x1ZGVNZW1iZXJzLCB0cnVlKS50by5pbmNsdWRlLm1lbWJlcnMoc3Vic2V0KTtcbn07XG5hc3NlcnQubm90SW5jbHVkZU1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQubm90SW5jbHVkZU1lbWJlcnMsIHRydWUpLnRvLm5vdC5pbmNsdWRlLm1lbWJlcnMoc3Vic2V0KTtcbn07XG5hc3NlcnQuaW5jbHVkZURlZXBNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0LmluY2x1ZGVEZWVwTWVtYmVycywgdHJ1ZSkudG8uaW5jbHVkZS5kZWVwLm1lbWJlcnMoc3Vic2V0KTtcbn07XG5hc3NlcnQubm90SW5jbHVkZURlZXBNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwTWVtYmVycywgdHJ1ZSkudG8ubm90LmluY2x1ZGUuZGVlcC5tZW1iZXJzKHN1YnNldCk7XG59O1xuYXNzZXJ0LmluY2x1ZGVPcmRlcmVkTWVtYmVycyA9IGZ1bmN0aW9uKHN1cGVyc2V0LCBzdWJzZXQsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5pbmNsdWRlT3JkZXJlZE1lbWJlcnMsIHRydWUpLnRvLmluY2x1ZGUub3JkZXJlZC5tZW1iZXJzKHN1YnNldCk7XG59O1xuYXNzZXJ0Lm5vdEluY2x1ZGVPcmRlcmVkTWVtYmVycyA9IGZ1bmN0aW9uKHN1cGVyc2V0LCBzdWJzZXQsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5ub3RJbmNsdWRlT3JkZXJlZE1lbWJlcnMsIHRydWUpLnRvLm5vdC5pbmNsdWRlLm9yZGVyZWQubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5pbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0LmluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMsIHRydWUpLnRvLmluY2x1ZGUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoc3Vic2V0KTtcbn07XG5hc3NlcnQubm90SW5jbHVkZURlZXBPcmRlcmVkTWVtYmVycyA9IGZ1bmN0aW9uKHN1cGVyc2V0LCBzdWJzZXQsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5ub3RJbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzLCB0cnVlKS50by5ub3QuaW5jbHVkZS5kZWVwLm9yZGVyZWQubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5vbmVPZiA9IGZ1bmN0aW9uKGluTGlzdCwgbGlzdCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oaW5MaXN0LCBtc2csIGFzc2VydC5vbmVPZiwgdHJ1ZSkudG8uYmUub25lT2YobGlzdCk7XG59O1xuYXNzZXJ0LmlzSXRlcmFibGUgPSBmdW5jdGlvbihvYmosIG1zZykge1xuICBpZiAob2JqID09IHZvaWQgMCB8fCAhb2JqW1N5bWJvbC5pdGVyYXRvcl0pIHtcbiAgICBtc2cgPSBtc2cgPyBgJHttc2d9IGV4cGVjdGVkICR7aW5zcGVjdDIob2JqKX0gdG8gYmUgYW4gaXRlcmFibGVgIDogYGV4cGVjdGVkICR7aW5zcGVjdDIob2JqKX0gdG8gYmUgYW4gaXRlcmFibGVgO1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgIG1zZyxcbiAgICAgIHZvaWQgMCxcbiAgICAgIGFzc2VydC5pc0l0ZXJhYmxlXG4gICAgKTtcbiAgfVxufTtcbmFzc2VydC5jaGFuZ2VzID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1zZyA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuY2hhbmdlcywgdHJ1ZSkudG8uY2hhbmdlKG9iaiwgcHJvcCk7XG59O1xuYXNzZXJ0LmNoYW5nZXNCeSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIHRtcE1zZyA9IGRlbHRhO1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBtc2cgPSB0bXBNc2c7XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5jaGFuZ2VzQnksIHRydWUpLnRvLmNoYW5nZShvYmosIHByb3ApLmJ5KGRlbHRhKTtcbn07XG5hc3NlcnQuZG9lc05vdENoYW5nZSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBtc2cgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kb2VzTm90Q2hhbmdlLCB0cnVlKS50by5ub3QuY2hhbmdlKG9iaiwgcHJvcCk7XG59O1xuYXNzZXJ0LmNoYW5nZXNCdXROb3RCeSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIHRtcE1zZyA9IGRlbHRhO1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBtc2cgPSB0bXBNc2c7XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5jaGFuZ2VzQnV0Tm90QnksIHRydWUpLnRvLmNoYW5nZShvYmosIHByb3ApLmJ1dC5ub3QuYnkoZGVsdGEpO1xufTtcbmFzc2VydC5pbmNyZWFzZXMgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbXNnID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuaW5jcmVhc2VzLCB0cnVlKS50by5pbmNyZWFzZShvYmosIHByb3ApO1xufTtcbmFzc2VydC5pbmNyZWFzZXNCeSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIHRtcE1zZyA9IGRlbHRhO1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBtc2cgPSB0bXBNc2c7XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5pbmNyZWFzZXNCeSwgdHJ1ZSkudG8uaW5jcmVhc2Uob2JqLCBwcm9wKS5ieShkZWx0YSk7XG59O1xuYXNzZXJ0LmRvZXNOb3RJbmNyZWFzZSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBtc2cgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kb2VzTm90SW5jcmVhc2UsIHRydWUpLnRvLm5vdC5pbmNyZWFzZShvYmosIHByb3ApO1xufTtcbmFzc2VydC5pbmNyZWFzZXNCdXROb3RCeSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIHRtcE1zZyA9IGRlbHRhO1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBtc2cgPSB0bXBNc2c7XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5pbmNyZWFzZXNCdXROb3RCeSwgdHJ1ZSkudG8uaW5jcmVhc2Uob2JqLCBwcm9wKS5idXQubm90LmJ5KGRlbHRhKTtcbn07XG5hc3NlcnQuZGVjcmVhc2VzID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1zZyA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRlY3JlYXNlcywgdHJ1ZSkudG8uZGVjcmVhc2Uob2JqLCBwcm9wKTtcbn07XG5hc3NlcnQuZGVjcmVhc2VzQnkgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciB0bXBNc2cgPSBkZWx0YTtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgbXNnID0gdG1wTXNnO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZGVjcmVhc2VzQnksIHRydWUpLnRvLmRlY3JlYXNlKG9iaiwgcHJvcCkuYnkoZGVsdGEpO1xufTtcbmFzc2VydC5kb2VzTm90RGVjcmVhc2UgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbXNnID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZG9lc05vdERlY3JlYXNlLCB0cnVlKS50by5ub3QuZGVjcmVhc2Uob2JqLCBwcm9wKTtcbn07XG5hc3NlcnQuZG9lc05vdERlY3JlYXNlQnkgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciB0bXBNc2cgPSBkZWx0YTtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgbXNnID0gdG1wTXNnO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRvZXNOb3REZWNyZWFzZUJ5LCB0cnVlKS50by5ub3QuZGVjcmVhc2Uob2JqLCBwcm9wKS5ieShkZWx0YSk7XG59O1xuYXNzZXJ0LmRlY3JlYXNlc0J1dE5vdEJ5ID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIG1zZyA9IHRtcE1zZztcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRlY3JlYXNlc0J1dE5vdEJ5LCB0cnVlKS50by5kZWNyZWFzZShvYmosIHByb3ApLmJ1dC5ub3QuYnkoZGVsdGEpO1xufTtcbmFzc2VydC5pZkVycm9yID0gZnVuY3Rpb24odmFsKSB7XG4gIGlmICh2YWwpIHtcbiAgICB0aHJvdyB2YWw7XG4gIH1cbn07XG5hc3NlcnQuaXNFeHRlbnNpYmxlID0gZnVuY3Rpb24ob2JqLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzRXh0ZW5zaWJsZSwgdHJ1ZSkudG8uYmUuZXh0ZW5zaWJsZTtcbn07XG5hc3NlcnQuaXNOb3RFeHRlbnNpYmxlID0gZnVuY3Rpb24ob2JqLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzTm90RXh0ZW5zaWJsZSwgdHJ1ZSkudG8ubm90LmJlLmV4dGVuc2libGU7XG59O1xuYXNzZXJ0LmlzU2VhbGVkID0gZnVuY3Rpb24ob2JqLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzU2VhbGVkLCB0cnVlKS50by5iZS5zZWFsZWQ7XG59O1xuYXNzZXJ0LmlzTm90U2VhbGVkID0gZnVuY3Rpb24ob2JqLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzTm90U2VhbGVkLCB0cnVlKS50by5ub3QuYmUuc2VhbGVkO1xufTtcbmFzc2VydC5pc0Zyb3plbiA9IGZ1bmN0aW9uKG9iaiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc0Zyb3plbiwgdHJ1ZSkudG8uYmUuZnJvemVuO1xufTtcbmFzc2VydC5pc05vdEZyb3plbiA9IGZ1bmN0aW9uKG9iaiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc05vdEZyb3plbiwgdHJ1ZSkudG8ubm90LmJlLmZyb3plbjtcbn07XG5hc3NlcnQuaXNFbXB0eSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0VtcHR5LCB0cnVlKS50by5iZS5lbXB0eTtcbn07XG5hc3NlcnQuaXNOb3RFbXB0eSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdEVtcHR5LCB0cnVlKS50by5ub3QuYmUuZW1wdHk7XG59O1xuKC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYWxpYXMobmFtZSwgYXMpIHtcbiAgYXNzZXJ0W2FzXSA9IGFzc2VydFtuYW1lXTtcbiAgcmV0dXJuIGFsaWFzO1xufSwgXCJhbGlhc1wiKSkoXCJpc09rXCIsIFwib2tcIikoXCJpc05vdE9rXCIsIFwibm90T2tcIikoXCJ0aHJvd3NcIiwgXCJ0aHJvd1wiKShcInRocm93c1wiLCBcIlRocm93XCIpKFwiaXNFeHRlbnNpYmxlXCIsIFwiZXh0ZW5zaWJsZVwiKShcImlzTm90RXh0ZW5zaWJsZVwiLCBcIm5vdEV4dGVuc2libGVcIikoXCJpc1NlYWxlZFwiLCBcInNlYWxlZFwiKShcImlzTm90U2VhbGVkXCIsIFwibm90U2VhbGVkXCIpKFwiaXNGcm96ZW5cIiwgXCJmcm96ZW5cIikoXCJpc05vdEZyb3plblwiLCBcIm5vdEZyb3plblwiKShcImlzRW1wdHlcIiwgXCJlbXB0eVwiKShcImlzTm90RW1wdHlcIiwgXCJub3RFbXB0eVwiKShcImlzQ2FsbGFibGVcIiwgXCJpc0Z1bmN0aW9uXCIpKFwiaXNOb3RDYWxsYWJsZVwiLCBcImlzTm90RnVuY3Rpb25cIik7XG5cbi8vIGxpYi9jaGFpLmpzXG52YXIgdXNlZCA9IFtdO1xuZnVuY3Rpb24gdXNlKGZuKSB7XG4gIGNvbnN0IGV4cG9ydHMgPSB7XG4gICAgQXNzZXJ0aW9uRXJyb3IsXG4gICAgdXRpbDogdXRpbHNfZXhwb3J0cyxcbiAgICBjb25maWcsXG4gICAgZXhwZWN0LFxuICAgIGFzc2VydCxcbiAgICBBc3NlcnRpb24sXG4gICAgLi4uc2hvdWxkX2V4cG9ydHNcbiAgfTtcbiAgaWYgKCF+dXNlZC5pbmRleE9mKGZuKSkge1xuICAgIGZuKGV4cG9ydHMsIHV0aWxzX2V4cG9ydHMpO1xuICAgIHVzZWQucHVzaChmbik7XG4gIH1cbiAgcmV0dXJuIGV4cG9ydHM7XG59XG5fX25hbWUodXNlLCBcInVzZVwiKTtcbmV4cG9ydCB7XG4gIEFzc2VydGlvbixcbiAgQXNzZXJ0aW9uRXJyb3IsXG4gIFNob3VsZCxcbiAgYXNzZXJ0LFxuICBjb25maWcsXG4gIGV4cGVjdCxcbiAgc2hvdWxkLFxuICB1c2UsXG4gIHV0aWxzX2V4cG9ydHMgYXMgdXRpbFxufTtcbi8qIVxuICogQ2hhaSAtIGZsYWcgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSB0ZXN0IHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gZXhwZWN0VHlwZXMgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBnZXRBY3R1YWwgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBtZXNzYWdlIGNvbXBvc2l0aW9uIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gdHJhbnNmZXJGbGFncyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogY2hhaVxuICogaHR0cDovL2NoYWlqcy5jb21cbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gaXNQcm94eUVuYWJsZWQgaGVscGVyXG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIGFkZFByb3BlcnR5IHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gYWRkTGVuZ3RoR3VhcmQgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBnZXRQcm9wZXJ0aWVzIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gcHJveGlmeSB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIGFkZE1ldGhvZCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIG92ZXJ3cml0ZVByb3BlcnR5IHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gb3ZlcndyaXRlTWV0aG9kIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gYWRkQ2hhaW5pbmdNZXRob2QgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBvdmVyd3JpdGVDaGFpbmFibGVNZXRob2QgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBjb21wYXJlQnlJbnNwZWN0IHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gaXNOYU4gdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNSBTYWt0aGlwcml5YW4gVmFpcmFtYW5pIDx0aGVjaGFyZ2luZ3ZvbGNhbm9AZ21haWwuY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogY2hhaVxuICogQ29weXJpZ2h0KGMpIDIwMTEgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBjaGFpXG4gKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246XG5cbmRlZXAtZXFsL2luZGV4LmpzOlxuICAoKiFcbiAgICogZGVlcC1lcWxcbiAgICogQ29weXJpZ2h0KGMpIDIwMTMgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gICAqIE1JVCBMaWNlbnNlZFxuICAgKilcbiAgKCohXG4gICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgTWVtb2l6ZU1hcCBoYXMgcmVjb3JkZWQgYSByZXN1bHQgb2YgdGhlIHR3byBvcGVyYW5kc1xuICAgKlxuICAgKiBAcGFyYW0ge01peGVkfSBsZWZ0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtNaXhlZH0gcmlnaHRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge01lbW9pemVNYXB9IG1lbW9pemVNYXBcbiAgICogQHJldHVybnMge0Jvb2xlYW58bnVsbH0gcmVzdWx0XG4gICopXG4gICgqIVxuICAgKiBTZXQgdGhlIHJlc3VsdCBvZiB0aGUgZXF1YWxpdHkgaW50byB0aGUgTWVtb2l6ZU1hcFxuICAgKlxuICAgKiBAcGFyYW0ge01peGVkfSBsZWZ0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtNaXhlZH0gcmlnaHRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge01lbW9pemVNYXB9IG1lbW9pemVNYXBcbiAgICogQHBhcmFtIHtCb29sZWFufSByZXN1bHRcbiAgKilcbiAgKCohXG4gICAqIFByaW1hcnkgRXhwb3J0XG4gICAqKVxuICAoKiFcbiAgICogVGhlIG1haW4gbG9naWMgb2YgdGhlIGBkZWVwRXF1YWxgIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge01peGVkfSBsZWZ0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtNaXhlZH0gcmlnaHRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIChvcHRpb25hbCkgQWRkaXRpb25hbCBvcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtvcHRpb25zLmNvbXBhcmF0b3JdIChvcHRpb25hbCkgT3ZlcnJpZGUgZGVmYXVsdCBhbGdvcml0aG0sIGRldGVybWluaW5nIGN1c3RvbSBlcXVhbGl0eS5cbiAgICogQHBhcmFtIHtBcnJheX0gW29wdGlvbnMubWVtb2l6ZV0gKG9wdGlvbmFsKSBQcm92aWRlIGEgY3VzdG9tIG1lbW9pemF0aW9uIG9iamVjdCB3aGljaCB3aWxsIGNhY2hlIHRoZSByZXN1bHRzIG9mXG4gICAgICBjb21wbGV4IG9iamVjdHMgZm9yIGEgc3BlZWQgYm9vc3QuIEJ5IHBhc3NpbmcgYGZhbHNlYCB5b3UgY2FuIGRpc2FibGUgbWVtb2l6YXRpb24sIGJ1dCB0aGlzIHdpbGwgY2F1c2UgY2lyY3VsYXJcbiAgICAgIHJlZmVyZW5jZXMgdG8gYmxvdyB0aGUgc3RhY2suXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IGVxdWFsIG1hdGNoXG4gICopXG4gICgqIVxuICAgKiBDb21wYXJlIHR3byBSZWd1bGFyIEV4cHJlc3Npb25zIGZvciBlcXVhbGl0eS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWdFeHB9IGxlZnRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmlnaHRIYW5kT3BlcmFuZFxuICAgKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAgICopXG4gICgqIVxuICAgKiBDb21wYXJlIHR3byBTZXRzL01hcHMgZm9yIGVxdWFsaXR5LiBGYXN0ZXIgdGhhbiBvdGhlciBlcXVhbGl0eSBmdW5jdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7U2V0fSBsZWZ0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtTZXR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAoT3B0aW9uYWwpXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICAgKilcbiAgKCohXG4gICAqIFNpbXBsZSBlcXVhbGl0eSBmb3IgZmxhdCBpdGVyYWJsZSBvYmplY3RzIHN1Y2ggYXMgQXJyYXlzLCBUeXBlZEFycmF5cyBvciBOb2RlLmpzIGJ1ZmZlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7SXRlcmFibGV9IGxlZnRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge0l0ZXJhYmxlfSByaWdodEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gKE9wdGlvbmFsKVxuICAgKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAgICopXG4gICgqIVxuICAgKiBTaW1wbGUgZXF1YWxpdHkgZm9yIGdlbmVyYXRvciBvYmplY3RzIHN1Y2ggYXMgdGhvc2UgcmV0dXJuZWQgYnkgZ2VuZXJhdG9yIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtJdGVyYWJsZX0gbGVmdEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7SXRlcmFibGV9IHJpZ2h0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAoT3B0aW9uYWwpXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICAgKilcbiAgKCohXG4gICAqIERldGVybWluZSBpZiB0aGUgZ2l2ZW4gb2JqZWN0IGhhcyBhbiBAQGl0ZXJhdG9yIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgb2JqZWN0IGhhcyBhbiBAQGl0ZXJhdG9yIGZ1bmN0aW9uLlxuICAgKilcbiAgKCohXG4gICAqIEdldHMgYWxsIGl0ZXJhdG9yIGVudHJpZXMgZnJvbSB0aGUgZ2l2ZW4gT2JqZWN0LiBJZiB0aGUgT2JqZWN0IGhhcyBubyBAQGl0ZXJhdG9yIGZ1bmN0aW9uLCByZXR1cm5zIGFuIGVtcHR5IGFycmF5LlxuICAgKiBUaGlzIHdpbGwgY29uc3VtZSB0aGUgaXRlcmF0b3IgLSB3aGljaCBjb3VsZCBoYXZlIHNpZGUgZWZmZWN0cyBkZXBlbmRpbmcgb24gdGhlIEBAaXRlcmF0b3IgaW1wbGVtZW50YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAgICogQHJldHVybnMge0FycmF5fSBhbiBhcnJheSBvZiBlbnRyaWVzIGZyb20gdGhlIEBAaXRlcmF0b3IgZnVuY3Rpb25cbiAgICopXG4gICgqIVxuICAgKiBHZXRzIGFsbCBlbnRyaWVzIGZyb20gYSBHZW5lcmF0b3IuIFRoaXMgd2lsbCBjb25zdW1lIHRoZSBnZW5lcmF0b3IgLSB3aGljaCBjb3VsZCBoYXZlIHNpZGUgZWZmZWN0cy5cbiAgICpcbiAgICogQHBhcmFtIHtHZW5lcmF0b3J9IHRhcmdldFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFuIGFycmF5IG9mIGVudHJpZXMgZnJvbSB0aGUgR2VuZXJhdG9yLlxuICAgKilcbiAgKCohXG4gICAqIEdldHMgYWxsIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUga2V5cyBmcm9tIGEgdGFyZ2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYW4gYXJyYXkgb2Ygb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBrZXlzIGZyb20gdGhlIHRhcmdldC5cbiAgICopXG4gICgqIVxuICAgKiBEZXRlcm1pbmVzIGlmIHR3byBvYmplY3RzIGhhdmUgbWF0Y2hpbmcgdmFsdWVzLCBnaXZlbiBhIHNldCBvZiBrZXlzLiBEZWZlcnMgdG8gZGVlcEVxdWFsIGZvciB0aGUgZXF1YWxpdHkgY2hlY2sgb2ZcbiAgICogZWFjaCBrZXkuIElmIGFueSB2YWx1ZSBvZiB0aGUgZ2l2ZW4ga2V5IGlzIG5vdCBlcXVhbCwgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGZhbHNlIChlYXJseSkuXG4gICAqXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGxlZnRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7QXJyYXl9IGtleXMgQW4gYXJyYXkgb2Yga2V5cyB0byBjb21wYXJlIHRoZSB2YWx1ZXMgb2YgbGVmdEhhbmRPcGVyYW5kIGFuZCByaWdodEhhbmRPcGVyYW5kIGFnYWluc3RcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAoT3B0aW9uYWwpXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICAgKilcbiAgKCohXG4gICAqIFJlY3Vyc2l2ZWx5IGNoZWNrIHRoZSBlcXVhbGl0eSBvZiB0d28gT2JqZWN0cy4gT25jZSBiYXNpYyBzYW1lbmVzcyBoYXMgYmVlbiBlc3RhYmxpc2hlZCBpdCB3aWxsIGRlZmVyIHRvIGBkZWVwRXF1YWxgXG4gICAqIGZvciBlYWNoIGVudW1lcmFibGUga2V5IGluIHRoZSBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGxlZnRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gKE9wdGlvbmFsKVxuICAgKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAgICopXG4gICgqIVxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgcHJpbWl0aXZlLlxuICAgKlxuICAgKiBUaGlzIGludGVudGlvbmFsbHkgcmV0dXJucyB0cnVlIGZvciBhbGwgb2JqZWN0cyB0aGF0IGNhbiBiZSBjb21wYXJlZCBieSByZWZlcmVuY2UsXG4gICAqIGluY2x1ZGluZyBmdW5jdGlvbnMgYW5kIHN5bWJvbHMuXG4gICAqXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICAgKilcbiovXG4iLCAiLyoqKioqKioqXG5cbiBDb252ZXJ0IGNoYWktZG9tIDEuOC4xIHRvIGVzIG1vZHVsZSwgd2l0aG91dCBhbnkgb3RoZXIgbW9kaWZpY2F0aW9uLlxuIEZyb20gaHR0cHM6Ly9naXRodWIuY29tL25hdGhhbmJva3RhZS9jaGFpLWRvbS9ibG9iLzg2YzM0MjMvY2hhaS1kb20uanNcbiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25hdGhhbmJva3RhZS9jaGFpLWRvbS9pc3N1ZXMvMzhcblxuIFVzYWdlOlxuIGltcG9ydCB7IGNoYWlEb20gfSBmcm9tICc8cGF0aC10bz4vY2hhaS1kb20nO1xuIGNoYWkudXNlKGNoYWlEb20pO1xuXG4gQ29weXJpZ2h0IChjKSAyMDE1IE5hdGhhbiBCbGFjayBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG5cbiBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgbGljZW5zZS4gRm9yIGEgY29weSwgc2VlIDxodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVD4uXG5cbiAqKioqKioqKioqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2hhaURvbShjaGFpLCB1dGlscykge1xuICAgIHZhciBmbGFnID0gdXRpbHMuZmxhZyxcblxuICAgICAgICBlbFRvU3RyaW5nID0gZnVuY3Rpb24oZWwpIHtcbiAgICAgICAgICAgIGxldCBkZXNjXG4gICAgICAgICAgICBpZiAoaXNOb2RlTGlzdChlbCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWwubGVuZ3RoID09PSAwKSByZXR1cm4gJ2VtcHR5IE5vZGVMaXN0J1xuICAgICAgICAgICAgICAgIGRlc2MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlbCwgMCwgNSkubWFwKGVsVG9TdHJpbmcpLmpvaW4oJywgJylcbiAgICAgICAgICAgICAgICByZXR1cm4gZWwubGVuZ3RoID4gNSA/IGRlc2MgKyAnLi4uICgrJyArIChlbC5sZW5ndGggLSA1KSArICcgbW9yZSknIDogZGVzY1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWwpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlc2MgPSBlbC50YWdOYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgIGlmIChlbC5pZCkge1xuICAgICAgICAgICAgICAgIGRlc2MgKz0gJyMnICsgZWwuaWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbC5jbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICBkZXNjICs9ICcuJyArIFN0cmluZyhlbC5jbGFzc05hbWUpLnJlcGxhY2UoL1xccysvZywgJy4nKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChlbC5hdHRyaWJ1dGVzLCBmdW5jdGlvbihhdHRyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGF0dHIubmFtZSAhPT0gJ2NsYXNzJyAmJiBhdHRyLm5hbWUgIT09ICdpZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzYyArPSAnWycgKyBhdHRyLm5hbWUgKyAoYXR0ci52YWx1ZSA/ICc9XCInICsgYXR0ci52YWx1ZSArICdcIl0nIDogJ10nKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICByZXR1cm4gZGVzY1xuICAgICAgICB9LFxuXG4gICAgICAgIGF0dHJBc3NlcnQgPSBmdW5jdGlvbihuYW1lLCB2YWwpIHtcbiAgICAgICAgICAgIGxldCBlbCA9IGZsYWcodGhpcywgJ29iamVjdCcpLCBhY3R1YWwgPSBlbC5nZXRBdHRyaWJ1dGUobmFtZSlcblxuICAgICAgICAgICAgaWYgKCFmbGFnKHRoaXMsICduZWdhdGUnKSB8fCB1bmRlZmluZWQgPT09IHZhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICAhIWVsLmF0dHJpYnV0ZXNbbmFtZV1cbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBoYXZlIGFuIGF0dHJpYnV0ZSAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgbm90IHRvIGhhdmUgYW4gYXR0cmlidXRlICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAgICAgLCBuYW1lXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodW5kZWZpbmVkICE9PSB2YWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgdmFsID09PSBhY3R1YWxcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBoYXZlIGFuIGF0dHJpYnV0ZSAnICsgdXRpbHMuaW5zcGVjdChuYW1lKSArICcgd2l0aCB0aGUgdmFsdWUgI3tleHB9LCBidXQgdGhlIHZhbHVlIHdhcyAje2FjdH0nXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgbm90IHRvIGhhdmUgYW4gYXR0cmlidXRlICcgKyB1dGlscy5pbnNwZWN0KG5hbWUpICsgJyB3aXRoIHRoZSB2YWx1ZSAje2FjdH0nXG4gICAgICAgICAgICAgICAgICAgICwgdmFsXG4gICAgICAgICAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmbGFnKHRoaXMsICdvYmplY3QnLCBhY3R1YWwpXG4gICAgICAgIH0sXG5cbiAgICAgICAgaXNIVE1MRWxlbWVudCA9IGZ1bmN0aW9uKGVsKSB7XG4gICAgICAgICAgICByZXR1cm4gZWwubm9kZVR5cGUgPT09IDEgLy8gd2luZG93Lk5vZGUuRUxFTUVOVF9OT0RFXG4gICAgICAgIH0sXG5cbiAgICAgICAgaXNOb2RlTGlzdCA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBOb2RlTGlzdF0nXG4gICAgICAgIH1cblxuICAgIHV0aWxzLmVsVG9TdHJpbmcgPSBlbFRvU3RyaW5nXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCdhdHRyJywgYXR0ckFzc2VydClcbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ2F0dHJpYnV0ZScsIGF0dHJBc3NlcnQpXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ2NsYXNzJywgZnVuY3Rpb24oY2xhc3NOYW1lKSB7XG4gICAgICAgIHZhciBlbCA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSlcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gaGF2ZSBjbGFzcyAje2V4cH0nXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIG5vdCB0byBoYXZlIGNsYXNzICN7ZXhwfSdcbiAgICAgICAgICAgICwgY2xhc3NOYW1lXG4gICAgICAgIClcbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCdpZCcsIGZ1bmN0aW9uKGlkKSB7XG4gICAgICAgIHZhciBlbCA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgZWwuaWQgPT0gaWRcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gaGF2ZSBpZCAje2V4cH0nXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIG5vdCB0byBoYXZlIGlkICN7ZXhwfSdcbiAgICAgICAgICAgICwgaWRcbiAgICAgICAgKVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ2h0bWwnLCBmdW5jdGlvbihodG1sKSB7XG4gICAgICAgIHZhciBlbCA9IGZsYWcodGhpcywgJ29iamVjdCcpLCBhY3R1YWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKS5pbm5lckhUTUxcblxuICAgICAgICBpZiAoZmxhZyh0aGlzLCAnY29udGFpbnMnKSkge1xuICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgYWN0dWFsLmluZGV4T2YoaHRtbCkgPj0gMFxuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICN7YWN0fSB0byBjb250YWluIEhUTUwgI3tleHB9J1xuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICN7YWN0fSBub3QgdG8gY29udGFpbiBIVE1MICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAsIGh0bWxcbiAgICAgICAgICAgICAgICAsIGFjdHVhbFxuICAgICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgYWN0dWFsID09PSBodG1sXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBoYXZlIEhUTUwgI3tleHB9LCBidXQgdGhlIEhUTUwgd2FzICN7YWN0fSdcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIG5vdCB0byBoYXZlIEhUTUwgI3tleHB9J1xuICAgICAgICAgICAgICAgICwgaHRtbFxuICAgICAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKCd0cmltbWVkJywgbnVsbCwgZnVuY3Rpb24oKSB7XG4gICAgICAgIGZsYWcodGhpcywgJ3RyaW0tdGV4dCcsIHRydWUpXG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgndGV4dCcsIGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpLCBjb250YWlucyA9IGZsYWcodGhpcywgJ2NvbnRhaW5zJyksXG4gICAgICAgICAgICB0cmltID0gZmxhZyh0aGlzLCAndHJpbS10ZXh0JyksIGFjdHVhbCwgcmVzdWx0XG5cbiAgICAgICAgaWYgKGlzTm9kZUxpc3Qob2JqKSkge1xuICAgICAgICAgICAgYWN0dWFsID0gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKG9iaiwgZnVuY3Rpb24oZWwpIHsgcmV0dXJuIHRyaW0gPyBlbC50ZXh0Q29udGVudC50cmltKCkgOiBlbC50ZXh0Q29udGVudCB9KVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGV4dCkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBjb250YWlucyA/XG4gICAgICAgICAgICAgICAgICAgIHRleHRbZmxhZyh0aGlzLCAnbmVnYXRlJykgPyAnc29tZScgOiAnZXZlcnknXShmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNvbWUuY2FsbChvYmosIGZ1bmN0aW9uKGVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0cmltID8gZWwudGV4dENvbnRlbnQudHJpbSgpIDogZWwudGV4dENvbnRlbnQpID09PSB0XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgIHV0aWxzLmVxbChhY3R1YWwsIHRleHQpXG5cbiAgICAgICAgICAgICAgICBhY3R1YWwgPSBhY3R1YWwuam9pbigpXG4gICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuam9pbigpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFjdHVhbCA9IGFjdHVhbC5qb2luKCcnKVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbnRhaW5zID8gYWN0dWFsLmluZGV4T2YodGV4dCkgPj0gMCA6IGFjdHVhbCA9PT0gdGV4dFxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWN0dWFsID0gdHJpbSA/IG9iai50ZXh0Q29udGVudC50cmltKCkgOiBvYmoudGV4dENvbnRlbnRcbiAgICAgICAgICAgIHJlc3VsdCA9IGNvbnRhaW5zID8gYWN0dWFsLmluZGV4T2YodGV4dCkgPj0gMCA6IGFjdHVhbCA9PT0gdGV4dFxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG9iakRlc2MgPSBlbFRvU3RyaW5nKG9iaiksIHRleHRNc2cgPSB0cmltID8gJ3RyaW1tZWQgdGV4dCcgOiAndGV4dCdcbiAgICAgICAgaWYgKGNvbnRhaW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICByZXN1bHRcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgb2JqRGVzYyArICcgdG8gY29udGFpbiAje2V4cH0sIGJ1dCB0aGUgJyArIHRleHRNc2cgKyAnIHdhcyAje2FjdH0nXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIG9iakRlc2MgKyAnIG5vdCB0byBjb250YWluICN7ZXhwfSwgYnV0IHRoZSAnICsgdGV4dE1zZyArICcgd2FzICN7YWN0fSdcbiAgICAgICAgICAgICAgICAsIHRleHRcbiAgICAgICAgICAgICAgICAsIGFjdHVhbFxuICAgICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgcmVzdWx0XG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIG9iakRlc2MgKyAnIHRvIGhhdmUgJyArIHRleHRNc2cgKyAnICN7ZXhwfSwgYnV0IHRoZSAnICsgdGV4dE1zZyArICcgd2FzICN7YWN0fSdcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgb2JqRGVzYyArICcgbm90IHRvIGhhdmUgJyArIHRleHRNc2cgKyAnICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAsIHRleHRcbiAgICAgICAgICAgICAgICAsIGFjdHVhbFxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgndmFsdWUnLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICB2YXIgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKSwgYWN0dWFsID0gZmxhZyh0aGlzLCAnb2JqZWN0JykudmFsdWVcbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICBmbGFnKHRoaXMsICdvYmplY3QnKS52YWx1ZSA9PT0gdmFsdWVcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gaGF2ZSB2YWx1ZSAje2V4cH0sIGJ1dCB0aGUgdmFsdWUgd2FzICN7YWN0fSdcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgbm90IHRvIGhhdmUgdmFsdWUgI3tleHB9J1xuICAgICAgICAgICAgLCB2YWx1ZVxuICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgKVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5vdmVyd3JpdGVQcm9wZXJ0eSgnZXhpc3QnLCBmdW5jdGlvbihfc3VwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAgICAgICBpZiAoaXNOb2RlTGlzdChvYmopKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgIG9iai5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkIGFuIGVtcHR5IE5vZGVMaXN0IHRvIGhhdmUgbm9kZXMnXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBleGlzdCcpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24ub3ZlcndyaXRlUHJvcGVydHkoJ2VtcHR5JywgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICAgICAgaWYgKGlzSFRNTEVsZW1lbnQob2JqKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICBvYmouY2hpbGRyZW4ubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGJlIGVtcHR5J1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgYmUgZW1wdHknKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc05vZGVMaXN0KG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgb2JqLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBiZSBlbXB0eSdcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGJlIGVtcHR5JylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QoJ2xlbmd0aCcsXG4gICAgICAgIGZ1bmN0aW9uKF9zdXBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICAgICAgICAgIGlmIChpc05vZGVMaXN0KG9iaikgfHwgaXNIVE1MRWxlbWVudChvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhY3R1YWxMZW5ndGggPSBvYmouY2hpbGRyZW4gPyBvYmouY2hpbGRyZW4ubGVuZ3RoIDogb2JqLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbExlbmd0aCA9PT0gbGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBoYXZlICN7ZXhwfSBjaGlsZHJlbiBidXQgaXQgaGFkICN7YWN0fSBjaGlsZHJlbidcbiAgICAgICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBoYXZlICN7ZXhwfSBjaGlsZHJlbidcbiAgICAgICAgICAgICAgICAgICAgICAgICwgbGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAsIGFjdHVhbExlbmd0aFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uKF9zdXBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIF9zdXBlci5jYWxsKHRoaXMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApXG5cblxuICAgIGNoYWkuQXNzZXJ0aW9uLm92ZXJ3cml0ZU1ldGhvZCgnbWF0Y2gnLCBmdW5jdGlvbihfc3VwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gICAgICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICAgICAgIGlmIChpc0hUTUxFbGVtZW50KG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgb2JqLm1hdGNoZXMoc2VsZWN0b3IpXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG1hdGNoICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IG1hdGNoICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAgICAgLCBzZWxlY3RvclxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlTGlzdChvYmopKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgICghIW9iai5sZW5ndGggJiYgQXJyYXkucHJvdG90eXBlLmV2ZXJ5LmNhbGwob2JqLCBmdW5jdGlvbihlbCkgeyByZXR1cm4gZWwubWF0Y2hlcyhzZWxlY3RvcikgfSkpXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG1hdGNoICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IG1hdGNoICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAgICAgLCBzZWxlY3RvclxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QoJ2NvbnRhaW4nLFxuICAgICAgICBmdW5jdGlvbihfc3VwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzdWJpdGVtKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAgICAgICAgICAgaWYgKGlzSFRNTEVsZW1lbnQob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHN1Yml0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIW9iai5xdWVyeVNlbGVjdG9yKHN1Yml0ZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gY29udGFpbiAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGNvbnRhaW4gI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgc3ViaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5jb250YWlucyhzdWJpdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGNvbnRhaW4gJyArIGVsVG9TdHJpbmcoc3ViaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgY29udGFpbiAnICsgZWxUb1N0cmluZyhzdWJpdGVtKSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmdW5jdGlvbihfc3VwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCdkZXNjZW5kYW50JywgZnVuY3Rpb24oc3ViaXRlbSkge1xuICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksIGFjdHVhbCA9IHN1Yml0ZW1cblxuICAgICAgICBpZiAodHlwZW9mIHN1Yml0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBhY3R1YWwgPSBvYmoucXVlcnlTZWxlY3RvcihzdWJpdGVtKVxuICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgISFhY3R1YWxcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBoYXZlIGRlc2NlbmRhbnQgI3tleHB9J1xuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBoYXZlIGRlc2NlbmRhbnQgI3tleHB9J1xuICAgICAgICAgICAgICAgICwgc3ViaXRlbSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgIG9iai5jb250YWlucyhzdWJpdGVtKVxuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGNvbnRhaW4gJyArIGVsVG9TdHJpbmcoc3ViaXRlbSlcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgY29udGFpbiAnICsgZWxUb1N0cmluZyhzdWJpdGVtKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGZsYWcodGhpcywgJ29iamVjdCcsIGFjdHVhbClcbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCdkZXNjZW5kYW50cycsIGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKSxcbiAgICAgICAgICAgIGFjdHVhbCA9IG9iai5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKVxuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICEhYWN0dWFsLmxlbmd0aFxuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gaGF2ZSBkZXNjZW5kYW50cyAje2V4cH0nXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgaGF2ZSBkZXNjZW5kYW50cyAje2V4cH0nXG4gICAgICAgICAgICAsIHNlbGVjdG9yKVxuICAgICAgICBmbGFnKHRoaXMsICdvYmplY3QnLCBhY3R1YWwpXG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdkaXNwbGF5ZWQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGVsID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksXG4gICAgICAgICAgICBhY3R1YWwgPSBkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGVsKSA/IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKS5kaXNwbGF5IDogZWwuc3R5bGUuZGlzcGxheVxuXG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgYWN0dWFsICE9PSAnbm9uZSdcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gYmUgZGlzcGxheWVkLCBidXQgaXQgd2FzIG5vdCdcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gbm90IGJlIGRpc3BsYXllZCwgYnV0IGl0IHdhcyBhcyAnICsgYWN0dWFsXG4gICAgICAgICAgICAsIGFjdHVhbFxuICAgICAgICApXG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCd2aXNpYmxlJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlbCA9IGZsYWcodGhpcywgJ29iamVjdCcpLFxuICAgICAgICAgICAgYWN0dWFsID0gZG9jdW1lbnQuYm9keS5jb250YWlucyhlbCkgPyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCkudmlzaWJpbGl0eSA6IGVsLnN0eWxlLnZpc2liaWxpdHlcblxuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgIGFjdHVhbCAhPT0gJ2hpZGRlbicgJiYgYWN0dWFsICE9PSAnY29sbGFwc2UnXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGJlIHZpc2libGUsIGJ1dCBpdCB3YXMgJyArIChhY3R1YWwgPT09ICdoaWRkZW4nID8gJ2hpZGRlbicgOiAnY29sbGFwc2VkJylcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gbm90IGJlIHZpc2libGUsIGJ1dCBpdCB3YXMnXG4gICAgICAgICAgICAsIGFjdHVhbFxuICAgICAgICApXG4gICAgfSlcbn0iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4dGVuZH0gZnJvbSBcIi4uLy4uL3NvdXJjZS9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuZXhwb3J0IGNvbnN0IGlzQnJvd3NlciA9IG5ldyBGdW5jdGlvbihcInRyeSB7cmV0dXJuIHRoaXM9PT13aW5kb3c7fWNhdGNoKGUpeyByZXR1cm4gZmFsc2U7fVwiKTtcbmV4cG9ydCBjb25zdCBpc05vZGUgPSBuZXcgRnVuY3Rpb24oXCJ0cnkge3JldHVybiB0aGlzPT09Z2xvYmFsO31jYXRjaChlKXtyZXR1cm4gZmFsc2U7fVwiKTtcblxubGV0IEpTRE9NRXhwb3J0ID0gbnVsbDtcblxuLyoqXG4gKiB0aGlzIGhlbHBlciBmdW5jdGlvbiBjcmVhdGVzIHRoZSBkb20gc3RhY2sgaW4gdGhlIG5vZGUgZW52aXJvbm1lbnRcbiAqXG4gKiBAcmV0dXJuIHtQcm9taXNlPHVua25vd24+fFByb21pc2U8dm9pZD59XG4gKi9cbmZ1bmN0aW9uIGluaXRKU0RPTShvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgJiYgd2luZG93WydET01QYXJzZXInXSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgY29uc3QgZyA9IGdldEdsb2JhbCgpO1xuXG4gICAgb3B0aW9ucyA9IGV4dGVuZCh7fSwge1xuICAgICAgICBwcmV0ZW5kVG9CZVZpc3VhbDogdHJ1ZSxcbiAgICAgICAgY29udGVudFR5cGU6IFwidGV4dC9odG1sXCIsXG4gICAgICAgIGluY2x1ZGVOb2RlTG9jYXRpb25zOiB0cnVlLFxuICAgICAgICBzdG9yYWdlUXVvdGE6IDEwMDAwMDAwLFxuICAgICAgICBydW5TY3JpcHRzOiBcImRhbmdlcm91c2x5XCIsXG4gICAgICAgIHJlc291cmNlczogXCJ1c2FibGVcIlxuICAgIH0sIG9wdGlvbnMgfHwge30pXG5cbiAgICByZXR1cm4gaW1wb3J0KFwianNkb21cIikudGhlbigoe0pTRE9NfSkgPT4ge1xuICAgICAgICBKU0RPTUV4cG9ydCA9IEpTRE9NO1xuICAgICAgICBjb25zdCB7d2luZG93fSA9IG5ldyBKU0RPTShgPCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz1cImVuXCI+PGhlYWQ+PHRpdGxlPlRlc3Q8L3RpdGxlPjwvaGVhZD48Ym9keT48ZGl2IGlkPVwibW9ja3NcIj48L2Rpdj48L2JvZHk+PC9odG1sPmAsIG9wdGlvbnMpO1xuXG4gICAgICAgIGdbJ3dpbmRvdyddID0gd2luZG93O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAnQmxvYicsXG4gICAgICAgICAgICAgICAgICAgICdDU1NTdHlsZVNoZWV0JyxcbiAgICAgICAgICAgICAgICAgICAgJ2N1c3RvbUVsZW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ0N1c3RvbUV2ZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2RvY3VtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0RPTUV4Y2VwdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdET01JbXBsZW1lbnRhdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdEb2N1bWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdEb2N1bWVudEZyYWdtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0RPTVBhcnNlcicsXG4gICAgICAgICAgICAgICAgICAgICdFbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0VsZW1lbnRJbnRlcm5hbHMnLFxuICAgICAgICAgICAgICAgICAgICAnRXZlbnQnLFxuICAgICAgICAgICAgICAgICAgICAnRXZlbnRUYXJnZXQnLFxuICAgICAgICAgICAgICAgICAgICAnZ2V0Q29tcHV0ZWRTdHlsZScsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MQnV0dG9uRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MQ29sbGVjdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MRGl2RWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MRG9jdW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTEVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTEZvcm1FbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxJbnB1dEVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTFNjcmlwdEVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAncmVxdWVzdEFuaW1hdGlvbkZyYW1lJyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxTZWxlY3RFbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxUZW1wbGF0ZUVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTFRleHRBcmVhRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdJbnB1dEV2ZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0tleWJvYXJkRXZlbnQnLFxuICAgICAgICAgICAgICAgICAgICAnTXV0YXRpb25PYnNlcnZlcicsXG4gICAgICAgICAgICAgICAgICAgICduYXZpZ2F0b3InLFxuICAgICAgICAgICAgICAgICAgICAnTm9kZScsXG4gICAgICAgICAgICAgICAgICAgICdOb2RlRmlsdGVyJyxcbiAgICAgICAgICAgICAgICAgICAgJ05vZGVMaXN0JyxcbiAgICAgICAgICAgICAgICAgICAgJ3NlbGYnLFxuICAgICAgICAgICAgICAgICAgICAnU2hhZG93Um9vdCcsXG4gICAgICAgICAgICAgICAgICAgICdYTUxTZXJpYWxpemVyJyxcbiAgICAgICAgICAgICAgICBdLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdba2V5XSA9IHdpbmRvd1trZXldICAgIFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBzZXR0aW5nIGtleVwiLCBrZXksIGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpbXBvcnQoXCJkb20tc3RvcmFnZVwiKS50aGVuKCh7ZGVmYXVsdDogU3RvcmFnZX0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGcubG9jYWxTdG9yYWdlID0gbmV3IFN0b3JhZ2UobnVsbCwge3N0cmljdDogdHJ1ZX0pO1xuICAgICAgICAgICAgICAgICAgICBnLnNlc3Npb25TdG9yYWdlID0gbmV3IFN0b3JhZ2UobnVsbCwge3N0cmljdDogdHJ1ZX0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvd1snbG9jYWxTdG9yYWdlJ10gPSBnLmxvY2FsU3RvcmFnZTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93WydzZXNzaW9uU3RvcmFnZSddID0gZy5zZXNzaW9uU3RvcmFnZTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGcpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGxvYWRpbmcgZG9tLXN0b3JhZ2VcIiwgZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuXG4gICAgfSk7XG59XG5cbmV4cG9ydCB7aW5pdEpTRE9NLCBKU0RPTUV4cG9ydH0gXG5cbiIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5cbi8vIGxhbmd1YWdlPWh0bWxcbmxldCBodG1sMSA9IGBcbiAgICA8bW9uc3Rlci1zcGxpdC1wYW5lbCBpZD1cIm15LXNwbGl0LXBhbmVsXCI+XG4gICAgICAgXG4gICAgPC9tb25zdGVyLXNwbGl0LXBhbmVsPlxuYDtcblxubGV0IFNwbGl0U2NyZWVuO1xuXG5kZXNjcmliZSgnU3BsaXRTY3JlZW4nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG5cbiAgICAgICAgICAgIGlmICghZ2xvYmFsWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IENyeXB0byA9IG1bJ0NyeXB0byddO1xuICAgICAgICAgICAgICAgICAgICBnbG9iYWxbJ2NyeXB0byddID0gbmV3IENyeXB0bygpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3BsaXQtcGFuZWwubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBTcGxpdFNjcmVlbiA9IG1bJ1NwbGl0UGFuZWwnXTtcbiAgICAgICAgICAgIH0pKVxuXG4gICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKT0+e1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBidXR0b25zIGFuZCBTcGxpdFNjcmVlbicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFNwbGl0U2NyZWVuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215LXNwbGl0LXBhbmVsJylcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KFNwbGl0U2NyZWVuKS5pcy5pbnN0YW5jZW9mKEhUTUxFbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkaXYgPSBTcGxpdFNjcmVlbi5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRpdi5oYXNDaGlsZE5vZGVzKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMClcblxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxuXG4vLyBsYW5ndWFnZT1odG1sXG5sZXQgaHRtbDEgPSBgXG4gICAgPG1vbnN0ZXItcGFuZWwgaWQ9XCJteS1wYW5lbFwiPlxuICAgICAgIFxuICAgIDwvbW9uc3Rlci1wYW5lbD5cbmA7XG5cbmxldCBTcGxpdFNjcmVlbjtcblxuZGVzY3JpYmUoJ1NwbGl0U2NyZWVuJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuXG4gICAgICAgICAgICBpZiAoIWdsb2JhbFsnY3J5cHRvJ10pIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBDcnlwdG8gPSBtWydDcnlwdG8nXTtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsWydjcnlwdG8nXSA9IG5ldyBDcnlwdG8oKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbGF5b3V0L3BhbmVsLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgU3BsaXRTY3JlZW4gPSBtWydQYW5lbCddO1xuICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpPT57XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIGJ1dHRvbnMgYW5kIFNwbGl0U2NyZWVuJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgU3BsaXRTY3JlZW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXktcGFuZWwnKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoU3BsaXRTY3JlZW4pLmlzLmluc3RhbmNlb2YoSFRNTEVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRpdiA9IFNwbGl0U2NyZWVuLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZGl2Lmhhc0NoaWxkTm9kZXMoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKVxuXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7c2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlck1vY2t9IGZyb20gXCIuLi8uLi8uLi91dGlsL2ludGVyc2VjdGlvbi1tb2NrLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5sZXQgbW9ja2ludGVyc2VjdGlvbm9ic2VydmVyO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5kZXNjcmliZSgnUmVsb2FkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgLy8ganNkb20tdGVzdGluZy1tb2NrcyBuZWVkIGplc3RcbiAgICBsZXQgUmVsb2FkLCB2aWV3cG9ydCwgbW9ja1ZpZXdwb3J0O1xuXG4gICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIucmVzdG9yZSgpO1xuICAgIH0pXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIgPSBzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9jaygpO1xuXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3JlbG9hZC5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFJlbG9hZCA9IG1bJ1JlbG9hZCddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCduZXcgUmVsb2FkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICAvLyBsYW5ndWFnZT1IVE1MXG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtb25zdGVyLXJlbG9hZD48L21vbnN0ZXItcmVsb2FkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci1yZWxvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDInKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci1yZWxvYWQnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiByZWxvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItcmVsb2FkJykpLmlzLmluc3RhbmNlb2YoUmVsb2FkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbW9ja3M7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlbG9hZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItcmVsb2FkJyk7XG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChyZWxvYWQpO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci1yZWxvYWQnKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ2xvYWQgY29udGVudCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbW9ja3MsIGZldGNoUmVmZXJlbmNlLCBpbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgICAgICAgYmVmb3JlRWFjaCgoZG9uZSkgPT4ge1xuICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIC8vIGxhbmd1YWdlPUhUTUxcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwidGhpcy1jb250ZW50XCI+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGA7XG5cbiAgICAgICAgICAgIGZldGNoUmVmZXJlbmNlID0gZ2xvYmFsWydmZXRjaCddO1xuXG4gICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBNYXA7XG4gICAgICAgICAgICAgICAgaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L2h0bWwnKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgb2s6dHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czoyMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdDIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTIoJ2hlbGxvIHdvcmxkIScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgbG9hZCBjb250ZW50IGZyb20gdXJsJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgcmVsb2FkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1yZWxvYWQnKTtcbiAgICAgICAgICAgIHJlbG9hZC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci11cmwnLCAnaHR0cDovL2xvY2FsaG9zdC8nKVxuXG4gICAgICAgICAgICByZWxvYWQuYWRkRXZlbnRMaXN0ZW5lcignbW9uc3Rlci1mZXRjaGVkJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItcmVsb2FkJyk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJ2hlbGxvIHdvcmxkJyk7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQocmVsb2FkKTtcbiAgICAgICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlci5nZXRJbnN0YW5jZSgpLmVudGVyTm9kZSgpO1xuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlck1vY2soXG4gICAge1xuICAgICAgICByb290ID0gbnVsbCxcbiAgICAgICAgcm9vdE1hcmdpbiA9ICcnLFxuICAgICAgICB0aHJlc2hvbGRzID0gW10sXG4gICAgICAgIGRpc2Nvbm5lY3QgPSAoKSA9PiBudWxsLFxuICAgICAgICBvYnNlcnZlID0gKCkgPT4gbnVsbCxcbiAgICAgICAgdGFrZVJlY29yZHMgPSAoKSA9PiBbXSxcbiAgICAgICAgdW5vYnNlcnZlID0gKCkgPT4gbnVsbCxcbiAgICB9ID0ge30pIHtcblxuICAgIGNvbnN0IHNhdmVkSW1wbGVtZW50YXRpb24gPSB3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG5cbiAgICBsZXQgbGFzdE9iamVjdDtcblxuICAgIGNsYXNzIE1vY2tJbnRlcnNlY3Rpb25PYnNlcnZlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnJvb3QgPSByb290O1xuICAgICAgICAgICAgdGhpcy5yb290TWFyZ2luID0gcm9vdE1hcmdpbjtcbiAgICAgICAgICAgIHRoaXMudGhyZXNob2xkcyA9IHRocmVzaG9sZHM7XG4gICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QgPSBkaXNjb25uZWN0O1xuICAgICAgICAgICAgdGhpcy5vYnNlcnZlID0gb2JzZXJ2ZTtcbiAgICAgICAgICAgIHRoaXMudGFrZVJlY29yZHMgPSB0YWtlUmVjb3JkcztcbiAgICAgICAgICAgIHRoaXMudW5vYnNlcnZlID0gdW5vYnNlcnZlO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgICAgICAgICAgbGFzdE9iamVjdCA9IHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBlbnRlck5vZGUoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBbXTtcbiAgICAgICAgICAgIGVudHJpZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgaXNJbnRlcnNlY3Rpbmc6IHRydWVcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHRoaXNbJ2NhbGxiYWNrJ10oZW50cmllcywgdGhpcyk7XG4gICAgICAgIH1cblxuXG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ0ludGVyc2VjdGlvbk9ic2VydmVyJywge1xuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogTW9ja0ludGVyc2VjdGlvbk9ic2VydmVyXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsLCAnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInLCB7XG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBNb2NrSW50ZXJzZWN0aW9uT2JzZXJ2ZXJcbiAgICB9KTtcblxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdG9yZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyID0gc2F2ZWRJbXBsZW1lbnRhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0SW5zdGFuY2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0T2JqZWN0O1xuICAgICAgICB9XG4gICAgfVxufSIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7UmVzaXplT2JzZXJ2ZXJNb2NrfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9yZXNpemUtb2JzZXJ2ZXIubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxubGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxubGV0IGh0bWwyID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgIDxtb25zdGVyLXN0YXRlLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDp2YWx1ZXMuY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLW9wdGlvbnM9J3tcbiAgXCJ1cmxcIjogXCJtb2NrLWRhdGEuanNvblwiLFxuICBcIm1hcHBpbmdcIjoge1xuICAgIFwidmFsdWVQYXRoXCI6IFwiXFwke2ZpcnN0X25hbWV9IFxcJHtsYXN0X25hbWV9XCIsXG4gICAgXCJrZXlQYXRoXCI6IFwiaWRcIlxuICB9LFxuICAgICAgXCJ0eXBlXCI6XCJjaGVja2JveFwiXG5cbn0nPjwvbW9uc3Rlci1zdGF0ZS1idXR0b24+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgU3RhdGVCdXR0b247XG5cbmRlc2NyaWJlKCdTdGF0ZUJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGFmdGVyKGZ1bmN0aW9uICgpIHtcbiAgICB9KVxuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgICAgICBpZighZ2xvYmFsLlJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsLlJlc2l6ZU9ic2VydmVyID0gUmVzaXplT2JzZXJ2ZXJNb2NrO1xuICAgICAgICAgICAgfSAgICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0YXRlLWJ1dHRvbi5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFN0YXRlQnV0dG9uID0gbVsnU3RhdGVCdXR0b24nXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbmV3IFN0YXRlQnV0dG9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci1zdGF0ZS1idXR0b24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDInKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci1zdGF0ZS1idXR0b24nKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBzdGF0ZS1idXR0b24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItc3RhdGUtYnV0dG9uJykpLmlzLmluc3RhbmNlb2YoU3RhdGVCdXR0b24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIG5vIG9wdGlvbnMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItc3RhdGUtYnV0dG9uJyk7XG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChidXR0b24pO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gYnV0dG9uLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignYnV0dG9uJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMpLmlzLmluc3RhbmNlb2YoSFRNTEJ1dHRvbkVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucy5oYXNDaGlsZE5vZGVzKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgIlxuXG5cbmV4cG9ydCB7UmVzaXplT2JzZXJ2ZXJNb2NrfVxuXG5cbmNsYXNzIFJlc2l6ZU9ic2VydmVyTW9jayB7XG4gICAgY29uc3RydWN0b3IoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0gW107XG4gICAgfVxuXG4gICAgb2JzZXJ2ZShlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICB9XG5cbiAgICB1bm9ic2VydmUoZWxlbWVudCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0gdGhpcy5lbGVtZW50cy5maWx0ZXIoKGVsKSA9PiBlbCAhPT0gZWxlbWVudCk7XG4gICAgfVxuXG4gICAgZGlzY29ubmVjdCgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IFtdO1xuICAgIH1cblxuICAgIHRyaWdnZXJSZXNpemUoZW50cmllcykge1xuICAgICAgICB0aGlzLmNhbGxiYWNrKGVudHJpZXMsIHRoaXMpO1xuICAgIH1cbn1cblxuIiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtSZXNpemVPYnNlcnZlck1vY2t9IGZyb20gXCIuLi8uLi8uLi91dGlsL3Jlc2l6ZS1vYnNlcnZlci5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgPG1vbnN0ZXItc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnZhbHVlcy5jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItb3B0aW9ucz0ne1xuICBcInVybFwiOiBcIm1vY2stZGF0YS5qc29uXCIsXG4gIFwibWFwcGluZ1wiOiB7XG4gICAgXCJzZWxlY3RvclwiOiBcIipcIixcbiAgICBcInZhbHVlVGVtcGxhdGVcIjogXCJcXCR7Zmlyc3RfbmFtZX0gXFwke2xhc3RfbmFtZX1cIixcbiAgICBcImxhYmVsVGVtcGxhdGVcIjogXCJpZFwiXG4gIH0sXG4gICAgICBcInR5cGVcIjpcImNoZWNrYm94XCJcblxufSc+PC9tb25zdGVyLXNlbGVjdD5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBTZWxlY3QsIGZldGNoUmVmZXJlbmNlO1xuXG5kZXNjcmliZSgnU2VsZWN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgICAgICBmZXRjaFJlZmVyZW5jZSA9IGdsb2JhbFsnZmV0Y2gnXTtcblxuICAgICAgICAgICAgaWYgKCFnbG9iYWwuUmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICBnbG9iYWwuUmVzaXplT2JzZXJ2ZXIgPSBSZXNpemVPYnNlcnZlck1vY2s7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc2VsZWN0Lm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgU2VsZWN0ID0gbVsnU2VsZWN0J107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ1dpdGggZmV0Y2gnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBNYXA7XG4gICAgICAgICAgICAgICAgaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0MikgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqc29uID0gSlNPTi5wYXJzZShgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIkFsZXhpYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3RfbmFtZVwiOiBcIk91Z2h0cmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbWFpbFwiOiBcImFvdWdodHJpZ2h0MEBleGJsb2cuanBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnZW5kZXJcIjogXCJBZ2VuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY291bnRyeVwiOiBcIm1uXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIkJldGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYXN0X25hbWVcIjogXCJCb2RkaW5ndG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJiYm9kZGluZ3RvbjFAc3RhdGNvdW50ZXIuY29tXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiTm9uLWJpbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJzeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIlNoZWxsaVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3RfbmFtZVwiOiBcIkEnQmFycm93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJzYWJhcnJvdzJAZ29vZ2xlLmNvLnVrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiUG9seWdlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJub1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF1gKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlMihKU09OLnN0cmluZ2lmeShqc29uKSlcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIH07XG5cblxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXNlbGVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXNlbGVjdCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIHNlbGVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXNlbGVjdCcpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzZWxlY3QpLmlzLmluc3RhbmNlb2YoU2VsZWN0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhdmUgb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXNlbGVjdCcpO1xuICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRPcHRpb24oJ3VybCcsICdodHRwczovL2V4YW1wbGUuY29tJylcbiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0T3B0aW9uKCdtYXBwaW5nLnNlbGVjdG9yJywgJyonKVxuICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRPcHRpb24oJ21hcHBpbmcubGFiZWxUZW1wbGF0ZScsICcke2lkfScpXG4gICAgICAgICAgICAgICAgc2VsZWN0LnNldE9wdGlvbignbWFwcGluZy52YWx1ZVRlbXBsYXRlJywgJyR7aWR9JylcblxuICAgICAgICAgICAgICAgIHNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdtb25zdGVyLW9wdGlvbnMtc2V0JywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHNlbGVjdC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMubGVuZ3RoKS5pcy5lcXVhbCgzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkh0bWwgPSBzZWxlY3Quc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uc10nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtMFwiJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTFcIicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25IdG1sKS5jb250YWluLmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0yXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5ub3QuaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTNcIicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHNlbGVjdCk7XG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zZWxlY3QnKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHNlbGVjdCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzZWxlY3Quc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uc10nKTtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucykuaXMuaW5zdGFuY2VvZihIVE1MRGl2RWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IG9wdGlvbnMucGFyZW50Tm9kZS5vdXRlckhUTUw7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGIgPSBvcHRpb25zLmNoaWxkTm9kZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucy5oYXNDaGlsZE5vZGVzKCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7RGF0YVVybH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuXG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7UmVzaXplT2JzZXJ2ZXJNb2NrfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9yZXNpemUtb2JzZXJ2ZXIubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxubGV0IGh0bWwxLCBvcHRpb25zLCBodG1sMiwgQ29uZmlybUJ1dHRvbjtcblxuZGVzY3JpYmUoJ0NvbmZpcm1CdXR0b24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpOyAgICBcbiAgICAgICAgXG4gICAgICAgIGlmKCFnbG9iYWwuUmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIGdsb2JhbC5SZXNpemVPYnNlcnZlciA9IFJlc2l6ZU9ic2VydmVyTW9jaztcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMgPSBuZXcgRGF0YVVybChidG9hKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHBvcHBlcjoge1xuICAgICAgICAgICAgICAgIHBsYWNlbWVudDogXCJ0b3BcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSkpLCAnYXBwbGljYXRpb24vanNvbicsIHRydWUpLnRvU3RyaW5nKClcblxuICAgICAgICBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICA8bW9uc3Rlci1jb25maXJtLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDp2YWx1ZXMuY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLW9wdGlvbnM9XCJgICsgb3B0aW9ucyArIGBcIj48L21vbnN0ZXItY29uZmlybS1idXR0b24+XG4gICAgPC9kaXY+XG5gO1xuXG4gICAgICAgIGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYFxuXG5cbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vY29uZmlybS1idXR0b24ubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBDb25maXJtQnV0dG9uID0gbVsnQ29uZmlybUJ1dHRvbiddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCduZXcgQ29uZmlybUJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItY29uZmlybS1idXR0b24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDInKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci1jb25maXJtLWJ1dHRvbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIGJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jb25maXJtLWJ1dHRvbicpKS5pcy5pbnN0YW5jZW9mKENvbmZpcm1CdXR0b24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIGNoaWxkcycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jb25maXJtLWJ1dHRvbicpO1xuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGJ1dHRvbi5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItYnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChjb250ZW50Lmhhc0NoaWxkTm9kZXMoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge0RhdGFzb3VyY2V9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlLm1qc1wiO1xuaW1wb3J0IHtQcm9jZXNzaW5nfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3V0aWwvcHJvY2Vzc2luZy5tanNcIjtcblxuaW1wb3J0IHtzdG9yYWdlT2JqZWN0U3ltYm9sfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcbi8vXG4vLyBsZXQgaHRtbDEgPSBgXG4vLyAgICAgPGRpdiBpZD1cInRlc3QxXCI+XG4vLyAgICAgPG1vbnN0ZXItZm9ybSBpZD1cImZvcm0xXCI+PC9tb25zdGVyLWZvcm0+XG4vLyAgICAgPC9kaXY+XG4vLyBgO1xuLy9cbi8vIGxldCBodG1sMiA9IGA8ZGl2IGlkPVwidGVzdDJcIj5cbi8vXG4vLyAgICAgPG1vbnN0ZXItZGF0YXNvdXJjZS1kb20gaWQ9XCJkYXRhc291cmNlWGRyZnJcIj5cbi8vICAgICAgICAgPHNjcmlwdCB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiPlxuLy8gICAgICAgICAgICAgW1xuLy8gICAgICAgICAgICAgICAgIHtcbi8vICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxLFxuLy8gICAgICAgICAgICAgICAgICAgICBcInVzZXJuYW1lXCI6IFwibWFydGluODlcIixcbi8vICAgICAgICAgICAgICAgICAgICAgXCJlbWFpbFwiOiBcImVsZW5hLnJpY2hhcmRzQGRvbWFpbi5jb21cIixcbi8vICAgICAgICAgICAgICAgICAgICAgXCJmdWxsX25hbWVcIjogXCJFbGVuYSBSaWNoYXJkc1wiLFxuLy8gICAgICAgICAgICAgICAgICAgICBcImFnZVwiOiAyOSxcbi8vICAgICAgICAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6IFwiR3JlZWNlXCIsXG4vLyAgICAgICAgICAgICAgICAgICAgIFwicmVnaXN0ZXJlZF9kYXRlXCI6IFwiMjAxOS0xMS0yM1wiLFxuLy8gICAgICAgICAgICAgICAgICAgICBcInN0YXR1c1wiOiBcImFjdGl2ZVwiXG4vLyAgICAgICAgICAgICAgICAgfVxuLy8gICAgICAgICAgICAgXVxuLy8gICAgICAgICA8L3NjcmlwdD5cbi8vICAgICA8L21vbnN0ZXItZGF0YXNvdXJjZS1kb20+XG4vL1xuLy9cbi8vICAgICA8bW9uc3Rlci1mb3JtIGlkPVwiZm9ybTJEcmZhMlwiXG4vLyAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItb3B0aW9uLW1hcHBpbmctZGF0YT1cIlwiXG4vLyAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItb3B0aW9uLWRhdGFzb3VyY2Utc2VsZWN0b3I9XCIjZGF0YXNvdXJjZVhkcmZyXCI+XG4vLyAgICAgICAgIDxkaXY+XG4vLyAgICAgICAgICAgICA8ZGl2PlxuLy8gICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiY29udHJvbDFcIlxuLy8gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbnRyb2wxXCJcbi8vICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOmRhdGEuZnVsbF9uYW1lXCI+XG4vLyAgICAgICAgICAgICA8L2Rpdj5cbi8vICAgICAgICAgPC9kaXY+XG4vLyAgICAgICAgIDxkaXY+XG4vLyAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImNvbnRyb2wyXCJcbi8vICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6ZGF0YS5zdGF0dXNcIj5cbi8vICAgICAgICAgPC9kaXY+XG4vL1xuLy8gICAgIDwvbW9uc3Rlci1mb3JtPlxuLy8gPC9kaXY+XG4vLyBgO1xuLy9cbi8vIGRlc2NyaWJlKCdGb3JtJywgZnVuY3Rpb24gKCkge1xuLy9cbi8vICAgICBsZXQgZm9ybTtcbi8vICAgICBsZXQgdGVzdE1vY2tcbi8vXG4vLyAgICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4vL1xuLy8gICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuLy9cbi8vICAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoeCkgPT4ge1xuLy8gICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9mb3JtLm1qc1wiKS50aGVuKChtKSA9PiB7XG4vLyAgICAgICAgICAgICAgICAgZm9ybSA9IG1bJ0Zvcm0nXTtcbi8vICAgICAgICAgICAgICAgICBkb25lKClcbi8vICAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcbi8vICAgICAgICAgfSk7XG4vL1xuLy8gICAgIH0pXG4vL1xuLy8gICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuLy8gICAgICAgICAvLyBhZGQgbW9jayB2b250YWluZXIgdG8gYm9keVxuLy8gICAgICAgICB0ZXN0TW9jayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuLy8gICAgICAgICB0ZXN0TW9jay5pZCA9ICdtb2Nrc1I1MjMnO1xuLy8gICAgICAgICB0ZXN0TW9jay5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4vLyAgICAgICAgIHRlc3RNb2NrLnN0eWxlLnRvcCA9ICctMTAwMDBweCc7XG4vLyAgICAgICAgIHRlc3RNb2NrLnN0eWxlLmxlZnQgPSAnLTEwMDAwcHgnO1xuLy8gICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlc3RNb2NrKTtcbi8vICAgICB9KVxuLy9cbi8vICAgICBhZnRlckVhY2goKCkgPT4ge1xuLy8gICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbi8vICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbi8vICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3Rlc3Qta2V5Jylcbi8vICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXN0TW9jayk7XG4vL1xuLy8gICAgIH0pXG4vL1xuLy8gICAgIGRlc2NyaWJlKCdIVE1MLVRlbXBsYXRlcycsIGZ1bmN0aW9uICgpIHtcbi8vXG4vLyAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZSBodG1sMScsIGZ1bmN0aW9uICgpIHtcbi8vICAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuLy8gICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuLy8gICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuLy8gICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0ZXN0LWtleScsICd7fScpXG4vLyAgICAgICAgICAgICB9KTtcbi8vXG4vLyAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItZm9ybScsIGZ1bmN0aW9uICgpIHtcbi8vICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItZm9ybScpO1xuLy8gICAgICAgICAgICAgfSk7XG4vL1xuLy9cbi8vICAgICAgICAgfSk7XG4vL1xuLy8gICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUgaHRtbDInLCBmdW5jdGlvbiAoKSB7XG4vL1xuLy8gICAgICAgICAgICAgYmVmb3JlRWFjaCgoZG9uZSkgPT4ge1xuLy8gICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0ZXN0LWtleScsIEpTT04uc3RyaW5naWZ5KHtcbi8vICAgICAgICAgICAgICAgICAgICAgYTogdHJ1ZSxcbi8vICAgICAgICAgICAgICAgICAgICAgYjogNyxcbi8vICAgICAgICAgICAgICAgICAgICAgYzogWzEsIDUsIDZdLFxuLy8gICAgICAgICAgICAgICAgICAgICBkOiB7XG4vLyAgICAgICAgICAgICAgICAgICAgICAgICBlOiB0cnVlXG4vLyAgICAgICAgICAgICAgICAgICAgIH1cbi8vICAgICAgICAgICAgICAgICB9KSlcbi8vICAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbi8vXG4vLyAgICAgICAgICAgICAgICAgdHJ5IHtcbi8vICAgICAgICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG4vLyAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbi8vICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4vLyAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4vLyAgICAgICAgICAgICAgICAgfVxuLy9cbi8vICAgICAgICAgICAgIH0pO1xuLy9cbi8vICAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci1mb3JtJywgZnVuY3Rpb24gKCkge1xuLy9cbi8vICAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbi8vICAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbi8vXG4vLyAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWZvcm0nKTtcbi8vICAgICAgICAgICAgIH0pO1xuLy9cbi8vICAgICAgICAgICAgIGl0KCdzaG91bGQgY2xpY2snLCBmdW5jdGlvbiAoZG9uZSkge1xuLy9cbi8vICAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbi8vICAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbi8vXG4vLyAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWZvcm0nKTtcbi8vXG4vLyAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykuaW5uZXJIVE1MKVxuLy9cbi8vICAgICAgICAgICAgICAgICBjb25zdCBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0yRHJmYTInKTtcbi8vXG4vL1xuLy8gICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuLy9cbi8vICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JtLnNoYWRvd1Jvb3QpIHtcbi8vICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKG5ldyBFcnJvcignbm8gc2hhZG93Um9vdCcpKVxuLy8gICAgICAgICAgICAgICAgICAgICB9XG4vL1xuLy8gICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sMSA9IGZvcm0uc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdzbG90JykuYXNzaWduZWRFbGVtZW50cygpWzBdLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jylcbi8vICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250cm9sMSkge1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUobmV3IEVycm9yKCdubyBjb250cm9sMScpKVxuLy8gICAgICAgICAgICAgICAgICAgICB9XG4vL1xuLy8gICAgICAgICAgICAgICAgICAgICBjb250cm9sMS5jbGljaygpO1xuLy9cbi8vXG4vLyAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbi8vICAgICAgICAgICAgICAgICB9LCAyKVxuLy9cbi8vICAgICAgICAgICAgIH0pO1xuLy9cbi8vXG4vLyAgICAgICAgIH0pO1xuLy9cbi8vXG4vLyAgICAgfSlcbi8vXG4vLyB9KVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHBhcnNlRGF0YVVSTCB9IGZyb20gXCIuLi90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi9wYXRoZmluZGVyLm1qc1wiO1xuXG5leHBvcnQgeyBEYXRhc291cmNlIH07XG5cbi8qKlxuICogVGhpcyBjYWxsYmFjayBjYW4gYmUgcGFzc2VkIHRvIGEgZGF0YXNvdXJjZSBhbmQgaXMgdXNlZCB0byBhZGFwdCBkYXRhIHN0cnVjdHVyZXMuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlfmV4YW1wbGVDYWxsYmFja1xuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAgS2V5XG4gKiBAc2VlIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlXG4gKi9cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBpbnRlcm5hbERhdGFTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL0BAZGF0YVwiLFxuKTtcblxuLyoqXG4gKiBUaGUgZGF0YXNvdXJjZSBjbGFzcyBpcyB0aGUgYmFzaXMgZm9yIGRlYWxpbmcgd2l0aCBkaWZmZXJlbnQgZGF0YSBzb3VyY2VzLlxuICogSXQgcHJvdmlkZXMgYSB1bmlmaWVkIGludGVyZmFjZSBmb3IgYWNjZXNzaW5nIGRhdGFcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9kYXRhL2RhdGFzb3VyY2UubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIyLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgZGF0YXNvdXJjZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIERhdGFzb3VyY2UgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIGNyZWF0ZXMgYSBuZXcgZGF0YXNvdXJjZVxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gbmV3IFByb3h5T2JzZXJ2ZXIoe1xuXHRcdFx0b3B0aW9uczogZXh0ZW5kKHt9LCB0aGlzLmRlZmF1bHRzKSxcblx0XHR9KTtcblxuXHRcdHRoaXNbaW50ZXJuYWxEYXRhU3ltYm9sXSA9IG5ldyBQcm94eU9ic2VydmVyKHt9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBhdHRhY2ggYSBuZXcgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7RGF0YXNvdXJjZX1cblx0ICovXG5cdGF0dGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpc1tpbnRlcm5hbERhdGFTeW1ib2xdLmF0dGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBkZXRhY2ggYSBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRjb250YWluc09ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxEYXRhU3ltYm9sXS5jb250YWluc09ic2VydmVyKG9ic2VydmVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXJpdmVkIGNsYXNzZXMgY2FuIG92ZXJyaWRlIGFuZCBleHRlbmQgdGhpcyBtZXRob2QgYXMgZm9sbG93cy5cblx0ICpcblx0ICogYGBgXG5cdCAqIGdldCBkZWZhdWx0cygpIHtcblx0ICogICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdCAqICAgICAgICBteVZhbHVlOnRydWVcblx0ICogICAgfSk7XG5cdCAqIH1cblx0ICogYGBgXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBvcHRpb25cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKi9cblx0c2V0T3B0aW9uKHBhdGgsIHZhbHVlKSB7XG5cdFx0bmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpW1wib3B0aW9uc1wiXSkuc2V0VmlhKFxuXHRcdFx0cGF0aCxcblx0XHRcdHZhbHVlLFxuXHRcdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge0RhdGFzb3VyY2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uXG5cdCAqL1xuXHRzZXRPcHRpb25zKG9wdGlvbnMpIHtcblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSBwYXJzZU9wdGlvbnNKU09OKG9wdGlvbnMpO1xuXHRcdH1cblx0XHRleHRlbmQoXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJvcHRpb25zXCJdLFxuXHRcdFx0dGhpcy5kZWZhdWx0cyxcblx0XHRcdG9wdGlvbnMsXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIG5lc3RlZCBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgYnkgcGF0aCBgYS5iLmNgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRnZXRPcHRpb24ocGF0aCwgZGVmYXVsdFZhbHVlKSB7XG5cdFx0bGV0IHZhbHVlO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhbHVlID0gbmV3IFBhdGhmaW5kZXIoXG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLFxuXHRcdFx0KS5nZXRWaWEocGF0aCk7XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXMuXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRyZWFkKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlcy5cblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgcmVhbCBvYmplY3Rcblx0ICpcblx0ICogQHJldHVybiB7T2JqZWN0fEFycmF5fVxuXHQgKi9cblx0Z2V0KCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdHxBcnJheX0gZGF0YVxuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKi9cblx0c2V0KGRhdGEpIHtcblx0XHR0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uc2V0U3ViamVjdChkYXRhKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlXCIpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBkYXRhXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9wdGlvbnMgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvblxuICovXG5mdW5jdGlvbiBwYXJzZU9wdGlvbnNKU09OKGRhdGEpIHtcblx0aWYgKGlzU3RyaW5nKGRhdGEpKSB7XG5cdFx0Ly8gdGhlIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHNwZWNpZmllZCBhcyBhIGRhdGEgdXJsLlxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkYXRhVXJsID0gcGFyc2VEYXRhVVJMKGRhdGEpO1xuXHRcdFx0ZGF0YSA9IGRhdGFVcmwuY29udGVudDtcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZGF0YSk7XG5cdFx0XHR2YWxpZGF0ZU9iamVjdChvYmopO1xuXHRcdFx0cmV0dXJuIG9iajtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdGB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uIChhY3R1YWw6ICR7ZGF0YX0pLmAsXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7fTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBEYXRhc291cmNlIH0gZnJvbSBcIi4uL2RhdGFzb3VyY2UubWpzXCI7XG5cbmV4cG9ydCB7IFN0b3JhZ2UsIHN0b3JhZ2VPYmplY3RTeW1ib2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3RvcmFnZU9iamVjdFN5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9AQHN0b3JhZ2VPYmplY3RcIixcbik7XG5cbi8qKlxuICogVGhlIGNsYXNzIHJlcHJlc2VudHMgYSByZWNvcmQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIFN0b3JhZ2UgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBhY2Nlc3MgdG8gZGF0YSBvYmplY3RzIG92ZXIgV2ViU3RvcmFnZUFQSS5cbiAqL1xuY2xhc3MgU3RvcmFnZSBleHRlbmRzIERhdGFzb3VyY2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleSBMb2NhbFN0b3JhZ2UgS2V5XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihrZXkpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwia2V5XCIsIHZhbGlkYXRlU3RyaW5nKGtleSkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30ga2V5PXVuZGVmaW5lZCBMb2NhbFN0b3JhZ2UgS2V5XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRrZXk6IHVuZGVmaW5lZCxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXMuXG5cdCAqIEByZXR1cm4ge2V4dGVybmFsOlN0b3JhZ2V9XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRbc3RvcmFnZU9iamVjdFN5bWJvbF0oKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXNcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBvcHRpb25zIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBqc29uIGRlZmluaXRpb25cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3Rcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBkYXRhIGNhbm5vdCBiZSByZWFkXG5cdCAqL1xuXHRyZWFkKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0Y29uc3Qgc3RvcmFnZSA9IHNlbGZbc3RvcmFnZU9iamVjdFN5bWJvbF0oKTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0Y29uc3QgZGF0YSA9IEpTT04ucGFyc2Uoc3RvcmFnZS5nZXRJdGVtKHNlbGYuZ2V0T3B0aW9uKFwia2V5XCIpKSk7XG5cdFx0XHRzZWxmLnNldChkYXRhID8/IHt9KTtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTdG9yYWdlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGRhdGEgY2Fubm90IGJlIHdyaXR0ZW5cblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0Y29uc3Qgc3RvcmFnZSA9IHNlbGZbc3RvcmFnZU9iamVjdFN5bWJvbF0oKTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0Y29uc3QgZGF0YSA9IHNlbGYuZ2V0KCk7XG5cdFx0XHRpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHN0b3JhZ2UucmVtb3ZlSXRlbShzZWxmLmdldE9wdGlvbihcImtleVwiKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdG9yYWdlLnNldEl0ZW0oc2VsZi5nZXRPcHRpb24oXCJrZXlcIiksIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1N0b3JhZ2V9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFN0b3JhZ2UodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0ua2V5KTtcblx0fVxufVxuIiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICA8bW9uc3Rlci10cmVlLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDp2YWx1ZXMuY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLW9wdGlvbnM9J3tcbiAgXCJ1cmxcIjogXCJtb2NrLWRhdGEuanNvblwiLFxuICBcIm1hcHBpbmdcIjoge1xuICAgIFwidmFsdWVUZW1wbGF0ZVwiOiBcIlxcJHtmaXJzdF9uYW1lfSBcXCR7bGFzdF9uYW1lfVwiLFxuICAgIFwibGFiZWxUZW1wbGF0ZVwiOiBcImlkXCIsXG4gICAgXCJzZWxlY3RvclwiOiBcIipcIlxuICB9LFxuICAgICAgXCJ0eXBlXCI6XCJjaGVja2JveFwiXG5cbn0nPjwvbW9uc3Rlci10cmVlLXNlbGVjdD5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBUcmVlU2VsZWN0LCBmZXRjaFJlZmVyZW5jZTtcblxuZGVzY3JpYmUoJ1RyZWVzZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxbJ2ZldGNoJ107XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdHJlZS1zZWxlY3QubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBUcmVlU2VsZWN0ID0gbVsnVHJlZVNlbGVjdCddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdXaXRoIGZldGNoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuXG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgTWFwO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdDIpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQganNvbiA9IEpTT04ucGFyc2UoYFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZpcnN0X25hbWVcIjogXCJBbGV4aWFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYXN0X25hbWVcIjogXCJPdWdodHJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJhb3VnaHRyaWdodDBAZXhibG9nLmpwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiQWdlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJtblwiICxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwYXJlbnRcIjogXCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXJzdF9uYW1lXCI6IFwiQmV0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3RfbmFtZVwiOiBcIkJvZGRpbmd0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbWFpbFwiOiBcImJib2RkaW5ndG9uMUBzdGF0Y291bnRlci5jb21cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnZW5kZXJcIjogXCJOb24tYmluYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY291bnRyeVwiOiBcInN5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFyZW50XCI6IFwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIlNoZWxsaVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3RfbmFtZVwiOiBcIkEnQmFycm93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJzYWJhcnJvdzJAZ29vZ2xlLmNvLnVrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiUG9seWdlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJub1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBhcmVudFwiOiBcIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdYCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTIoSlNPTi5zdHJpbmdpZnkoanNvbikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItdHJlZS1zZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDInKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci10cmVlLXNlbGVjdCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIHNlbGVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10cmVlLXNlbGVjdCcpKS5pcy5pbnN0YW5jZW9mKFRyZWVTZWxlY3QpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgaGF2ZSBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRyZWUtc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgdHJlZXNlbGVjdC5zZXRPcHRpb24oJ3VybCcsICdodHRwczovL2V4YW1wbGUuY29tJylcblxuICAgICAgICAgICAgICAgIHRyZWVzZWxlY3Quc2V0T3B0aW9uKCdtYXBwaW5nLnNlbGVjdG9yJywgJyonKTtcbiAgICAgICAgICAgICAgICB0cmVlc2VsZWN0LnNldE9wdGlvbignbWFwcGluZy5sYWJlbFRlbXBsYXRlJywgJyR7bGFzdF9uYW1lfScpO1xuICAgICAgICAgICAgICAgIHRyZWVzZWxlY3Quc2V0T3B0aW9uKCdtYXBwaW5nLnZhbHVlVGVtcGxhdGUnLCAnJHtpZCB8IHRvc3RyaW5nIH0nKTtcblxuICAgICAgICAgICAgICAgIHRyZWVzZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignbW9uc3Rlci1vcHRpb25zLXNldCcsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0cmVlc2VsZWN0LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl0nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgb3B0aW9ucyAoc2VlIGZldGNoIGFib3ZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zLmxlbmd0aCkuaXMuZXF1YWwoMyk7XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkh0bWwgPSB0cmVlc2VsZWN0LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbnNdJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTBcIicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25IdG1sKS5jb250YWluLmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0xXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtMlwiJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4ubm90Lmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0zXCInKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgICAgICAgICAgICB9LCAxMDApXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZCh0cmVlc2VsZWN0KTtcblxuICAgICAgICAgICAgXG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10cmVlLXNlbGVjdCcpO1xuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoc2VsZWN0KTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHNlbGVjdC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25zXScpO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zKS5pcy5pbnN0YW5jZW9mKEhUTUxEaXZFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMuaGFzQ2hpbGROb2RlcygpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5cbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICA8bW9uc3Rlci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6dmFsdWVzLmNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1vcHRpb25zPSd7XG4gIFwidXJsXCI6IFwibW9jay1kYXRhLmpzb25cIixcbiAgXCJtYXBwaW5nXCI6IHtcbiAgICBcInZhbHVlUGF0aFwiOiBcIlxcJHtmaXJzdF9uYW1lfSBcXCR7bGFzdF9uYW1lfVwiLFxuICAgIFwia2V5UGF0aFwiOiBcImlkXCJcbiAgfSxcbiAgICAgIFwidHlwZVwiOlwiY2hlY2tib3hcIlxuXG59Jz48L21vbnN0ZXItYnV0dG9uPlxuICAgIDwvZGl2PlxuYDtcblxubGV0IEJ1dHRvbjtcblxuZGVzY3JpYmUoJ0J1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9idXR0b24ubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBCdXR0b24gPSBtWydCdXR0b24nXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbmV3IEJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItYnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWJ1dHRvbicpKS5pcy5pbnN0YW5jZW9mKEJ1dHRvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1idXR0b24nKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKGJ1dHRvbik7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gYnV0dG9uLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignYnV0dG9uJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMpLmlzLmluc3RhbmNlb2YoSFRNTEJ1dHRvbkVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucy5oYXNDaGlsZE5vZGVzKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAxMDApXG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxubGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxubGV0IGh0bWwyID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgICAgICAgPG1vbnN0ZXItdG9nZ2xlLXN3aXRjaD48L21vbnN0ZXItdG9nZ2xlLXN3aXRjaD5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBUb2dnbGVTd2l0Y2g7XG5cbmRlc2NyaWJlKCdUb2dnbGVTd2l0Y2gnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdG9nZ2xlLXN3aXRjaC5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFRvZ2dsZVN3aXRjaCA9IG1bJ1RvZ2dsZVN3aXRjaCddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCduZXcgVG9nZ2xlU3dpdGNoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci10b2dnbGUtc3dpdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIG1vbnN0ZXItdG9nZ2xlLXN3aXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10b2dnbGUtc3dpdGNoJykpLmlzLmluc3RhbmNlb2YoVG9nZ2xlU3dpdGNoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3RvZ2dsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KTtcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCd0b2dnbGUgdG8gb24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZVN3aXRjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnNldE9wdGlvbigndmFsdWVzLm9uJywgJ3RydWUnKTtcbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC5zZXRPcHRpb24oJ3ZhbHVlcy5vZmYnLCAnZmFsc2UnKTtcblxuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnZhbHVlID0gXCJ0cnVlXCI7XG5cbiAgICAgICAgICAgIGV4cGVjdChcInRydWVcIikuaXMuZXF1YWwodG9nZ2xlU3dpdGNoLnZhbHVlKTtcbiAgICAgICAgICAgIGV4cGVjdChcIm9uXCIpLmlzLmVxdWFsKHRvZ2dsZVN3aXRjaC5zdGF0ZSk7XG5cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC50b2dnbGUoKTtcblxuICAgICAgICAgICAgZXhwZWN0KFwiZmFsc2VcIikuaXMuZXF1YWwodG9nZ2xlU3dpdGNoLnZhbHVlKTtcbiAgICAgICAgICAgIGV4cGVjdChcIm9mZlwiKS5pcy5lcXVhbCh0b2dnbGVTd2l0Y2guc3RhdGUpO1xuXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2gudG9nZ2xlKCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChcInRydWVcIikuaXMuZXF1YWwodG9nZ2xlU3dpdGNoLnZhbHVlKTtcbiAgICAgICAgICAgIGV4cGVjdChcIm9uXCIpLmlzLmVxdWFsKHRvZ2dsZVN3aXRjaC5zdGF0ZSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3RvZ2dsZSBvbiB0byBvZmYnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZVN3aXRjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2gudG9nZ2xlT24oKTtcblxuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC52YWx1ZSkuaXMuZXF1YWwoJ29uJyk7XG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnN0YXRlKS5pcy5lcXVhbCgnb24nKTtcblxuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnRvZ2dsZU9mZigpO1xuXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnZhbHVlKS5pcy5lcXVhbCgnb2ZmJyk7XG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnN0YXRlKS5pcy5lcXVhbCgnb2ZmJyk7XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2Rlc2NyaWJlIGNzcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2NzcyB0b2dnbGUnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIG5ldyBDb250cm9sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZVN3aXRjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHNldCBpbml0IHZhbHVlIHRvIG9uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC52YWx1ZSA9IFwib25cIjtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBpbnNlcnQgRE9NXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpLmFwcGVuZENoaWxkKHRvZ2dsZVN3aXRjaCk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVXBkYXRlciBwcm96ZXNzIHJ1bnMgaW4gc2V0VGltZW91dFxuICAgICAgICAgICAgICogc2VsZltpbnRlcm5hbFN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIoKTtcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogZXhwZWN0IHRoYXQgY2xhc3Nlcy5vbiBpcyBzZXQgdG8gRWxlbWVudCBTd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGxldCBoYXNDbGFzc0EgPSB0b2dnbGVTd2l0Y2guc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tb25zdGVyLXJvbGU9XCJzd2l0Y2hcIl0nKVswXS5jbGFzc0xpc3QuY29udGFpbnModG9nZ2xlU3dpdGNoLmdldE9wdGlvbignY2xhc3Nlcy5vbicpKTtcblxuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChoYXNDbGFzc0EpLmlzLnRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIHN3aXRjaCBvZmZcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC52YWx1ZSA9IFwib2ZmXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIGV4cGVjdCB0aGF0IGNsYXNzZXMub24gaXMgcmVtb3ZlZCBmcm9tIEVsZW1lbnQgU3dpdGNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoYXNDbGFzc0IgPSB0b2dnbGVTd2l0Y2guc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tb25zdGVyLXJvbGU9XCJzd2l0Y2hcIl0nKVswXS5jbGFzc0xpc3QuY29udGFpbnModG9nZ2xlU3dpdGNoLmdldE9wdGlvbignY2xhc3Nlcy5vbicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChoYXNDbGFzc0IpLmlzLmZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIGV4cGVjdCB0aGF0IGNsYXNzZXMub2ZmIGlzIHNldCB0byBFbGVtZW50IFN3aXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGFzQ2xhc3NDID0gdG9nZ2xlU3dpdGNoLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbW9uc3Rlci1yb2xlPVwic3dpdGNoXCJdJylbMF0uY2xhc3NMaXN0LmNvbnRhaW5zKHRvZ2dsZVN3aXRjaC5nZXRPcHRpb24oJ2NsYXNzZXMub2ZmJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGhhc0NsYXNzQykuaXMudHJ1ZTtcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0sIDApO1xuXG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkZXNjcmliZSB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICAgICAgfSlcblxuICAgICAgICBpdCgndGhlIGRlZmF1bHQgdmFsdWUgaXMgb2ZmJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIG5ldyBDb250cm9sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGxldCB0b2dnbGVTd2l0Y2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcbiAgICAgICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogdGhlIHN3aXRjaCBpcyBvZmYgYW5kIHByb3ZpZGVzIHRoZSB2YWx1ZSBmb3Igb2ZmXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgZXhwZWN0KG51bGwpLmlzLmVxdWFsKHRvZ2dsZVN3aXRjaC52YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiB0aGUgc3dpdGNoIGlzIG9mZlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guc3RhdGUpLmlzLmVxdWFsKCdvZmYnKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdpbmNvcnJlY3QgdmFsdWVzIGFyZSBub3QgYWNjZXB0ZWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCB0b2dnbGVTd2l0Y2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBkZWZpbmUgdGhlIHZhbHVlcyBmb3Igb24gYW5kIG9mZlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2guc2V0T3B0aW9uKCd2YWx1ZXMub24nLCAndHJ1ZScpO1xuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnNldE9wdGlvbigndmFsdWVzLm9mZicsICdmYWxzZScpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoaXMgdmFsdWUgaXMgbm90IFwidHJ1ZVwiIGFuZCBub3QgXCJmYWxzZVwiXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC52YWx1ZSA9IFwidGVzdFwiO1xuXG4gICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIHRoZSBzd2l0Y2ggaXMgb2ZmIGFuZCBwcm92aWRlcyB0aGUgdmFsdWUgZm9yIG9mZlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGV4cGVjdChudWxsKS5pcy5lcXVhbCh0b2dnbGVTd2l0Y2gudmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogdGhlIHN3aXRjaCBpcyBvZmZcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnN0YXRlKS5pcy5lcXVhbCgnb2ZmJyk7XG5cbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBkaXNhYmxlZCBhdHRyaWJ1dGUgaXMgb25seSBzZXQgd2hlbiB0aGUgZWxlbWVudCBoYXMgYmVlbiBtb3VudGVkIGluIHRoZSBET01cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkuaXMuZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBpbnNlcnQgRE9NXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykuYXBwZW5kQ2hpbGQodG9nZ2xlU3dpdGNoKTtcblxuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIG5vdyB0aGUgZWxlbWVudCBpcyBkaXNhYmxlZFxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKS5pcy5mYWxzZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdjb3JyZWN0IHZhbHVlcyBhcmUgYWNjZXB0ZWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZVN3aXRjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGRlZmluZSB0aGUgdmFsdWVzIGZvciBvbiBhbmQgb2ZmXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC5zZXRPcHRpb24oJ3ZhbHVlcy5vbicsICd0cnVlJyk7XG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2guc2V0T3B0aW9uKCd2YWx1ZXMub2ZmJywgJ2ZhbHNlJyk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhpcyB2YWx1ZSBpcyBjb3JyZWN0XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC52YWx1ZSA9IFwidHJ1ZVwiO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHRoZSBzd2l0Y2ggaXMgb24gYW5kIHByb3ZpZGVzIHRoZSB2YWx1ZSBmb3Igb25cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC52YWx1ZSkuaXMuZXF1YWwoJ3RydWUnKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiB0aGUgc3dpdGNoIGlzIG9uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guc3RhdGUpLmlzLmVxdWFsKCdvbicpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGluc2VydCBET01cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykuYXBwZW5kQ2hpbGQodG9nZ2xlU3dpdGNoKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBkaXNhYmxlZCBhdHRyaWJ1dGUgaXMgbm90IHNldFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkuaXMuZmFsc2U7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge3NldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXJNb2NrfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9pbnRlcnNlY3Rpb24tbW9jay5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xubGV0IG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlcjtcblxubGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxuZGVzY3JpYmUoJ1RlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgLy8ganNkb20tdGVzdGluZy1tb2NrcyBuZWVkIGplc3RcbiAgICBsZXQgVGVtcGxhdGUsIHZpZXdwb3J0LCBtb2NrVmlld3BvcnQ7XG5cbiAgICBhZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlci5yZXN0b3JlKCk7XG4gICAgfSlcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlciA9IHNldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXJNb2NrKCk7XG5cbiAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90ZW1wbGF0ZS5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFRlbXBsYXRlID0gbVsnVGVtcGxhdGUnXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbmV3IFRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICAvLyBsYW5ndWFnZT1IVE1MXG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtb25zdGVyLXRlbXBsYXRlPjwvbW9uc3Rlci10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDInKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci10ZW1wbGF0ZScpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlbXBsYXRlJykpLmlzLmluc3RhbmNlb2YoVGVtcGxhdGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBtb2NrcztcbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBubyBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlbXBsYXRlJyk7XG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZCh0ZW1wbGF0ZSk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXRlbXBsYXRlJyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdsb2FkIGNvbnRlbnQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG1vY2tzLCBmZXRjaFJlZmVyZW5jZSwgaW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4gICAgICAgIGJlZm9yZUVhY2goKGRvbmUpID0+IHtcbiAgICAgICAgICAgIG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAvLyBsYW5ndWFnZT1IVE1MXG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cInRoaXMtY29udGVudFwiPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICBmZXRjaFJlZmVyZW5jZSA9IGdsb2JhbFsnZmV0Y2gnXTtcblxuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuXG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgTWFwO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9odG1sJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9rOnRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6MjAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUyKCdoZWxsbyB3b3JsZCEnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGxvYWQgY29udGVudCBmcm9tIHVybCcsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZW1wbGF0ZScpO1xuICAgICAgICAgICAgdGVtcGxhdGUuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItdXJsJywgJ2h0dHA6Ly9sb2NhbGhvc3QvJylcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHRlbXBsYXRlKTtcblxuICAgICAgICAgICAgdGVtcGxhdGUuYWRkRXZlbnRMaXN0ZW5lcignbW9uc3Rlci1mZXRjaGVkJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItdGVtcGxhdGUnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGVsZW1lbnQuc2hhZG93Um9vdDtcblxuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChzaGFkb3dSb290KS5jb250YWluLmh0bWwoJ2hlbGxvIHdvcmxkJyk7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlci5nZXRJbnN0YW5jZSgpLmVudGVyTm9kZSgpO1xuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICJcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuXG5cbmxldCBNZXNzYWdlO1xuXG5kZXNjcmliZSgnTWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbm90aWZ5L21lc3NhZ2UubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBNZXNzYWdlID0gbVsnTWVzc2FnZSddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgTWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5LW1lc3NhZ2UnKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wpLmlzLmluc3RhbmNlb2YoTWVzc2FnZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pXG4iLCAiLy9pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbi8vIGNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuLy9cbi8vIGxldCBodG1sMSA9IGBcbi8vICAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbi8vICAgICA8L2Rpdj5cbi8vIGA7XG4vL1xuLy8gLy8gbGFuZ3VhZ2U9SFRNTFxuLy8gbGV0IGh0bWwyID0gYFxuLy8gICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuLy8gICAgICAgICA8bW9uc3Rlci1ub3RpZnkgZGF0YS1tb25zdGVyLW9wdGlvbnM9J3t9Jz48L21vbnN0ZXItbm90aXRmeT5cbi8vICAgICA8L2Rpdj5cbi8vIGA7XG5cbmxldCBOb3RpZnksIGZldGNoUmVmZXJlbmNlO1xuXG5kZXNjcmliZSgnTm90aWZ5JywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbm90aWZ5L25vdGlmeS5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIE5vdGlmeSA9IG1bJ05vdGlmeSddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2Ygbm90aWZ5JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ub3RpZnknKSkuaXMuaW5zdGFuY2VvZihOb3RpZnkpO1xuICAgICAgICAgICAgXG5cblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbWVzc2FnZXMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGNvbnN0IG5vdGlmeSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5Jyk7XG4gICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICBub3RpZnkucHVzaChcInRoaXMgaXMgbWVzc2FnZSBcIiArIGkrKyk7XG4gICAgICAgICAgICBub3RpZnkucHVzaChcInRoaXMgaXMgbWVzc2FnZSBcIiArIGkrKyk7XG4gICAgICAgICAgICBub3RpZnkucHVzaChcInRoaXMgaXMgbWVzc2FnZSBcIiArIGkrKyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG11dGF0aW9ub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zKSB7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFssIG11dGF0aW9uXSBvZiBtdXRhdGlvbnMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbi5hZGRlZE5vZGVzWzBdLnRhZ05hbWUgPT09ICdNT05TVEVSLU5PVElGWScpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRpb25vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlcyA9IG5vdGlmeS5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ21vbnN0ZXItbm90aWZ5LW1lc3NhZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMyBvcHRpb25zIChzZWUgZmV0Y2ggYWJvdmUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChtZXNzYWdlcy5sZW5ndGgpLmlzLmVxdWFsKDMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIG11dGF0aW9ub2JzZXJ2ZXIub2JzZXJ2ZShtb2Nrcywge2NoaWxkTGlzdDogdHJ1ZX0pO1xuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQobm90aWZ5KTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pXG4iLCAiaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxuXG5kZXNjcmliZSgnSG9zdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBob3N0O1xuICAgIGxldCBodG1sMSA9IGBcbiAgICAgICAgPG1vbnN0ZXItaG9zdCBpZD1cImhvc3QxXCI+PC9tb25zdGVyLWhvc3Q+XG4gICAgYDtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3QvaG9zdC5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIGhvc3QgPSBtWydIb3N0J107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgLy8gcmVnaXN0ZXIgb3duIGRhdGFzb3VyY2UsIGFmdGVyIHRoZSBmb3JtIGlzIGxvYWRlZFxuICAgICAgICAvLyBiZWNhdXNlIGluIHRoZSB3aWxkLCB0aGUgZm9ybSBpcyBwYXJzZWQgYmVmb3JlIHRoZSBkYXRhc291cmNlIGlzIHJlZ2lzdGVyZWRcbiAgICAgICAgLy9mb3JtLnJlZ2lzdGVyRGF0YXNvdXJjZSgndGVzdDMnLCB0ZXN0M0RhdGFzb3VyY2UpO1xuXG5cbiAgICB9KTsgICAgXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3Rlc3Qta2V5JylcbiAgICB9KVxuICAgIFxuICAgIFxuICAgIGl0KCdzaG91bGQgcnVuJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWhvc3QnKTtcbiAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoZm9ybUNvbnRyb2wpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItaG9zdCBkYXRhLW1vbnN0ZXItb2JqZWN0bGluaz1cIlN5bWJvbChAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAb3B0aW9ucy11cGRhdGVyLWxpbmspXCI+PC9tb25zdGVyLWhvc3Q+JylcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9LCAwKVxuXG5cblxuXG5cbiAgICB9KTtcblxuXG59KTtcbiIsICJpbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcblxuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cblxuZGVzY3JpYmUoJ092ZXJsYXknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgaG9zdDtcbiAgICBsZXQgaHRtbDEgPSBgXG4gICAgICAgIDxtb25zdGVyLW92ZXJsYXkgaWQ9XCJkZXRhaWxzMVwiPjwvbW9uc3Rlci1vdmVybGF5PlxuICAgIGA7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L292ZXJsYXkubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBob3N0ID0gbVsnRGV0YWlscyddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgIH0pOyAgICBcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgIH0pXG4gICAgXG4gICAgXG4gICAgaXQoJ3Nob3VsZCBydW4nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItb3ZlcmxheScpO1xuICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChmb3JtQ29udHJvbCk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKSkuY29udGFpbi5odG1sKFxuICAgICAgICAgICAgICAgICAgICAnIDxtb25zdGVyLW92ZXJsYXkgZGF0YS1tb25zdGVyLW9iamVjdGxpbms9XCJTeW1ib2woQHNjaHVrYWkvbW9uc3Rlci9kb20vY3VzdG9tLWVsZW1lbnRAQG9wdGlvbnMtdXBkYXRlci1saW5rKVwiPjwvbW9uc3Rlci1vdmVybGF5PicpXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSwgMClcblxuICAgIH0pO1xuXG59KTtcbiIsICIvLyBJbXBvcnQgdGhlIHJlcXVpcmVkIGxpYnJhcmllc1xuaW1wb3J0IHsgZXhwZWN0IH0gZnJvbSAnY2hhaSc7XG4vL2ltcG9ydCB7IEpTRE9NIH0gZnJvbSAnanNkb20nO1xuaW1wb3J0IHsgZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkgfSBmcm9tICcuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L3V0aWwubWpzJztcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuLy8gQ3JlYXRlIGEgSlNET00gaW5zdGFuY2UgdG8gc2ltdWxhdGUgdGhlIGJyb3dzZXIgZW52aXJvbm1lbnRcbi8vY29uc3QgZG9tID0gbmV3IEpTRE9NKCk7XG5cblxuLy8gVGVzdCBzdWl0ZSBmb3IgdGhlIGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5IGZ1bmN0aW9uXG5kZXNjcmliZSgnZ2VuZXJhdGVVbmlxdWVDb25maWdLZXknLCAoKSA9PiB7XG5cbiAgICAvL2xldCBvcmlnaW5hbFdpbmRvdztcblxuICAgIC8vIGJlZm9yZSgoKSA9PiB7XG4gICAgLy8gICAgIC8vIFN0b3JlIHRoZSBvcmlnaW5hbCB3aW5kb3cgb2JqZWN0XG4gICAgLy8gICAgIG9yaWdpbmFsV2luZG93ID0gZ2xvYmFsVGhpcy53aW5kb3c7XG4gICAgLy9cbiAgICAvLyAgICAgLy8gQ3JlYXRlIGEgSlNET00gaW5zdGFuY2UgdG8gc2ltdWxhdGUgdGhlIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAgICAvLyAgICAgY29uc3QgZG9tID0gbmV3IEpTRE9NKCk7XG4gICAgLy8gICAgIGdsb2JhbFRoaXMud2luZG93ID0gZG9tLndpbmRvdztcbiAgICAvLyB9KTtcblxuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICB9KSAgICBcblxuICAgIC8vIC4uLiAoc2FtZSB0ZXN0IGNhc2VzIGFzIGJlZm9yZSlcblxuICAgIGFmdGVyKCgpID0+IHtcbiAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgd2luZG93IG9iamVjdFxuICAgICAgIC8vIGdsb2JhbFRoaXMud2luZG93ID0gb3JpZ2luYWxXaW5kb3c7XG4gICAgfSk7ICAgIFxuICAgIFxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSB1bmlxdWUga2V5IHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSAnTXlDb21wb25lbnQnO1xuICAgICAgICBjb25zdCBpZCA9ICcxMjMnO1xuICAgICAgICBjb25zdCBwcmVmaXggPSAnbXlQcmVmaXgnO1xuXG4gICAgICAgIGNvbnN0IHVuaXF1ZUtleSA9IGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5KGNvbXBvbmVudE5hbWUsIGlkLCBwcmVmaXgpO1xuXG4gICAgICAgIC8vIEVuc3VyZSB0aGUgdW5pcXVlIGtleSBjb250YWlucyB0aGUgZ2l2ZW4gcGFyYW1ldGVycyBhbmQgZm9sbG93cyB0aGUgZXhwZWN0ZWQgZm9ybWF0XG4gICAgICAgIGV4cGVjdCh1bmlxdWVLZXkpLnRvLmluY2x1ZGUocHJlZml4KTtcbiAgICAgICAgZXhwZWN0KHVuaXF1ZUtleSkudG8uaW5jbHVkZShjb21wb25lbnROYW1lKTtcbiAgICAgICAgZXhwZWN0KHVuaXF1ZUtleSkudG8uaW5jbHVkZShpZCk7XG4gICAgICAgIGV4cGVjdCh1bmlxdWVLZXkpLnRvLm1hdGNoKC9eW2EtekEtWjAtOV9dKyQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVwbGFjZSBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIHNwYWNlcyB3aXRoIHVuZGVyc2NvcmVzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjb21wb25lbnROYW1lID0gJ015JENvbXBvbmVudCc7XG4gICAgICAgIGNvbnN0IGlkID0gJzEyIzMnO1xuICAgICAgICBjb25zdCBwcmVmaXggPSAnbXkgUHJlZml4JztcblxuICAgICAgICBjb25zdCB1bmlxdWVLZXkgPSBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleShjb21wb25lbnROYW1lLCBpZCwgcHJlZml4KTtcblxuICAgICAgICAvLyBFbnN1cmUgdGhlIHVuaXF1ZSBrZXkgZG9lcyBub3QgY29udGFpbiBhbnkgc3BlY2lhbCBjaGFyYWN0ZXJzIG9yIHNwYWNlc1xuICAgICAgICBleHBlY3QodW5pcXVlS2V5KS50by5tYXRjaCgvXlthLXpBLVowLTlfXSskLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGluY2x1ZGUgdGhlIGJyb3dzZXIgbG9jYXRpb24gd2l0aG91dCBwYXJhbWV0ZXJzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjb21wb25lbnROYW1lID0gJ015Q29tcG9uZW50JztcbiAgICAgICAgY29uc3QgaWQgPSAnMTIzJztcbiAgICAgICAgY29uc3QgcHJlZml4ID0gJ215UHJlZml4JztcblxuICAgICAgICBjb25zdCB1bmlxdWVLZXkgPSBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleShjb21wb25lbnROYW1lLCBpZCwgcHJlZml4KTtcblxuICAgICAgICAvLyBFbnN1cmUgdGhlIHVuaXF1ZSBrZXkgY29udGFpbnMgdGhlIGJyb3dzZXIgbG9jYXRpb24gd2l0aG91dCBwYXJhbWV0ZXJzXG4gICAgICAgIGNvbnN0IHVybFdpdGhvdXRQYXJhbXMgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgnPycpWzBdO1xuICAgICAgICBjb25zdCBzYW5pdGl6ZWRVcmwgPSB1cmxXaXRob3V0UGFyYW1zLnJlcGxhY2UoL1teXFx3XFxzXS9naSwgJ18nKS5yZXBsYWNlKC9cXHMrL2csICdfJyk7XG4gICAgICAgIGV4cGVjdCh1bmlxdWVLZXkpLnRvLmluY2x1ZGUoc2FuaXRpemVkVXJsKTtcbiAgICB9KTtcblxuICAgIFxuICAgIFxufSkiLCAiaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge1Jlc2l6ZU9ic2VydmVyTW9ja30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvcmVzaXplLW9ic2VydmVyLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cblxuZGVzY3JpYmUoJ0RldGFpbHMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgaG9zdDtcbiAgICBsZXQgaHRtbDEgPSBgXG4gICAgICAgIDxtb25zdGVyLWRldGFpbHMgaWQ9XCJkZXRhaWxzMVwiPjwvbW9uc3Rlci1kZXRhaWxzPlxuICAgIGA7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L2RldGFpbHMubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBob3N0ID0gbVsnRGV0YWlscyddO1xuXG4gICAgICAgICAgICAgICAgaWYoIWdsb2JhbC5SZXNpemVPYnNlcnZlcikge1xuICAgICAgICAgICAgICAgICAgICBnbG9iYWwuUmVzaXplT2JzZXJ2ZXIgPSBSZXNpemVPYnNlcnZlck1vY2s7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIFxuICAgIH0pXG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgIH0pOyAgICBcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgIH0pXG4gICAgXG4gICAgXG4gICAgaXQoJ3Nob3VsZCBydW4nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItZGV0YWlscycpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykpLmNvbnRhaW4uaHRtbChcbiAgICAgICAgICAgICAgICAgICAgJzxtb25zdGVyLWRldGFpbHMgaWQ9XCJkZXRhaWxzMVwiIGRhdGEtbW9uc3Rlci1vYmplY3RsaW5rPVwiU3ltYm9sKEBzY2h1a2FpL21vbnN0ZXIvZG9tL2N1c3RvbS1lbGVtZW50QEBvcHRpb25zLXVwZGF0ZXItbGluaylcIiBkYXRhLW1vbnN0ZXItYnV0dG9uLWxhYmVsPVwiRGV0YWlsc1wiPjwvbW9uc3Rlci1kZXRhaWxzPicpXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSwgMClcblxuICAgIH0pO1xuXG59KTtcbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtGb3JtYXR0ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdGV4dC9mb3JtYXR0ZXIubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0Zvcm1hdHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIC8vIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzQ3XG4gICAgZGVzY3JpYmUoJ2V4YW1wbGVzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdyZmMgZXhhbXBsZSBzaG91bGQgcnVuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIoe1xuXG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjOiBcIkhlbGxvXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZDogXCJXb3JsZFwiLFxuICAgICAgICAgICAgICAgICAgICBlOiAxXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9KS5mb3JtYXQoXCIke2EuYi5jfSAke2EuZCB8IHRvdXBwZXJ9IVwiKSkudG8uYmUuZXF1YWwoJ0hlbGxvIFdPUkxEIScpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdkb2MgZXhhbXBsZSBzaG91bGQgcnVuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIoe1xuXG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjOiBcIkhlbGxvXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZDogXCJ3b3JsZFwiLFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSkuZm9ybWF0KFwiJHthLmIuY30gJHthLmQgfCB1Y2ZpcnN0fSFcIikpLnRvLmJlLmVxdWFsKCdIZWxsbyBXb3JsZCEnKTtcbiAgICAgICAgfSlcblxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdzZXQgbWFya2VyKCknLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgICAgICBbXG4gICAgICAgICAgICBbJyNhIycsICcjJywgdW5kZWZpbmVkLCAndGVzdCddLFxuICAgICAgICAgICAgWyd7YX0nLCAneycsICd9JywgJ3Rlc3QnXSxcbiAgICAgICAgICAgIFsnaTE4bnthfScsICdpMThueycsICd9JywgJ3Rlc3QnXSxcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2Zvcm1hdCAnICsgYSArICcgd2l0aCBtYXJrZXIgJyArIGIgKyAnIGFuZCAnICsgYyArICcgc2hvdWxkIHJldHVybiAgJyArIGIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChcbiAgICAgICAgICAgICAgICAgICAgbmV3IEZvcm1hdHRlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBhOiBcInRlc3RcIlxuICAgICAgICAgICAgICAgICAgICB9KS5zZXRNYXJrZXIoYiwgYykuZm9ybWF0KGEpXG4gICAgICAgICAgICAgICAgKS50by5lcXVhbChkKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2V4YW1wbGVzKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWycke2EgfCB0b2pzb259JywgXCJ7XFxcImJcXFwiOntcXFwiY1xcXCI6XFxcIkhlbGxvXFxcIn0sXFxcImRcXFwiOlxcXCJXb3JsZFxcXCIsXFxcImVcXFwiOjF9XCJdLFxuICAgICAgICAgICAgWydjbGljayAke2EuZH0gdGltZXMnLCBcImNsaWNrIFdvcmxkIHRpbWVzXCJdLFxuICAgICAgICAgICAgWycgJHthLmIuY30gJywgJyBIZWxsbyAnXSxcbiAgICAgICAgICAgIFsnICR7YS5iLmN9JywgJyBIZWxsbyddLFxuICAgICAgICAgICAgWycke2EuYi5jfSAnLCAnSGVsbG8gJ10sXG4gICAgICAgICAgICBbJyR7YS5iLmN9JywgJ0hlbGxvJ10sXG4gICAgICAgICAgICBbJyR7YS5iLmN9JHthLmIuY30nLCAnSGVsbG9IZWxsbyddLFxuICAgICAgICAgICAgWycke2EuYi5jfSAke2EuYi5jfScsICdIZWxsbyBIZWxsbyddLFxuICAgICAgICAgICAgWycke2EuYi5jfSAke2EuYi5jfSAnLCAnSGVsbG8gSGVsbG8gJ10sXG4gICAgICAgICAgICBbJyAke2EuYi5jfSAke2EuYi5jfSAnLCAnIEhlbGxvIEhlbGxvICddLFxuICAgICAgICAgICAgWycgJHthLmIuY30gJHthLmR9ICcsICcgSGVsbG8gV29ybGQgJ10sXG4gICAgICAgICAgICBbJyAke2EuYi5jfSAke2EuYi5jIHwgdG91cHBlciB8IGxlbmd0aCB8IHRvc3RyaW5nfSAnLCAnIEhlbGxvIDUgJ10sXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnZm9ybWF0ICcgKyBhICsgJyBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogXCJIZWxsb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZDogXCJXb3JsZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZTogMVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IEZvcm1hdHRlcihvYmopLmZvcm1hdChhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ01hcmtlciBpbiBtYXJrZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IHRleHQgPSAnJHtteWtleSR7c3Via2V5fX0nO1xuICAgICAgICBsZXQgZXhwZWN0ZWQgPSAnMSc7XG5cbiAgICAgICAgaXQoJ2Zvcm1hdCAnICsgdGV4dCArICcgc2hvdWxkICcgKyBleHBlY3RlZCwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgICAgICAgIG15a2V5MjogXCIxXCIsXG4gICAgICAgICAgICAgICAgc3Via2V5OiBcIjJcIlxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIob2JqKS5mb3JtYXQodGV4dCkpLmlzLmVxdWFsKGV4cGVjdGVkKVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzZXRQYXJhbWV0ZXJDaGFycygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzZXRQYXJhbWV0ZXJDaGFycygpIHNob3VsZCByZXR1cm4gSW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEZvcm1hdHRlcih7fSkuc2V0UGFyYW1ldGVyQ2hhcnMoJ2EnLCAnYicpKS5pcy5pbnN0YW5jZW9mKEZvcm1hdHRlcik7XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnd2l0aCBjYWxsYmFja3MnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2FkZCBjYWxsYmFjaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoe1xuICAgICAgICAgICAgICAgIHg6ICcxJ1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICAgICAgICAgICAgICBteTogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCIhXCIgKyB2YWx1ZSArIFwiIVwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZXhwZWN0KGZvcm1hdHRlci5mb3JtYXQoJyR7eCB8IGNhbGw6bXl9JykpLmlzLmVxdWFsKCchMSEnKTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnTWFya2VyIGluIG1hcmtlciB3aXRoIHBhcmFtZXRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgdGV4dCA9ICcke215a2V5OjpteWtleT0ke3N1YmtleX19JztcbiAgICAgICAgbGV0IGV4cGVjdGVkID0gJzInO1xuXG4gICAgICAgIGl0KCdmb3JtYXQgJyArIHRleHQgKyAnIHNob3VsZCAnICsgZXhwZWN0ZWQsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBzdWJrZXk6IFwiMlwiXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBleHBlY3QobmV3IEZvcm1hdHRlcihvYmopLmZvcm1hdCh0ZXh0KSkuaXMuZXF1YWwoZXhwZWN0ZWQpXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZXhjZXB0aW9ucycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJyR7YS5iLnh9JywgVHlwZUVycm9yXSxcbiAgICAgICAgICAgIFsnJHthLmIuZCB8IHRvdXBwZXIgfCBsZW5ndGh9JywgVHlwZUVycm9yXSxcbiAgICAgICAgICAgIFsnJHthLmIuZH0nLCBUeXBlRXJyb3JdLCAgLy8gYS5iLmQgcmV0dXJuIHVuZGVmaW5lZCBieSBwYXRoZmluZGVyIFxuICAgICAgICAgICAgWycke2EuYi5kIHwgdG9sb3dlcn0nLCBUeXBlRXJyb3JdLCAgLy8gYS5iLmQgcmV0dXJuIHVuZGVmaW5lZCBieSBwYXRoZmluZGVyIFxuICAgICAgICAgICAgWycke2EgfCB9JywgRXJyb3JdLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2Zvcm1hdCAnICsgYSArICcgc2hvdWxkIHRocm93ICcgKyB0eXBlb2YgYiwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGb3JtYXR0ZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogXCJ0ZXN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkOiA0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5mb3JtYXQoYSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICkudG8udGhyb3coYik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG5cblxuICAgIGRlc2NyaWJlKCdGb3JtYXR0ZXInLCAoKSA9PiB7XG4gICAgICAgIGl0KCdzaG91bGQgZm9ybWF0IGEgYmFzaWMgc3RyaW5nIHdpdGggb2JqZWN0IHZhbHVlcycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoe25hbWU6ICdKb2huJywgYWdlOiAzMH0pO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0dGVyLmZvcm1hdCgnTXkgbmFtZSBpcyAke25hbWV9IGFuZCBJIGFtICR7YWdlIHwgdG9zdHJpbmd9IHllYXJzIG9sZC4nKTtcblxuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoJ015IG5hbWUgaXMgSm9obiBhbmQgSSBhbSAzMCB5ZWFycyBvbGQuJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZm9ybWF0IGEgc3RyaW5nIHdpdGggbmVzdGVkIG1hcmtlcnMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gJyR7bXlrZXkke3N1YmtleX19JztcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHtteWtleTI6ICcxJywgc3Via2V5OiAnMid9O1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcihvYmopO1xuXG4gICAgICAgICAgICBleHBlY3QoZm9ybWF0dGVyLmZvcm1hdCh0ZXh0KSkudG8uZXF1YWwoJzEnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmb3JtYXQgYSBzdHJpbmcgd2l0aCBjdXN0b20gbWFya2VycycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoe25hbWU6ICdKb2huJywgYWdlOiAzMH0pO1xuICAgICAgICAgICAgZm9ybWF0dGVyLnNldE1hcmtlcignWycsICddJyk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXR0ZXIuZm9ybWF0KCdNeSBuYW1lIGlzIFtuYW1lXSBhbmQgSSBhbSBbYWdlIHwgdG9zdHJpbmddIHllYXJzIG9sZC4nKTtcblxuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoJ015IG5hbWUgaXMgSm9obiBhbmQgSSBhbSAzMCB5ZWFycyBvbGQuJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZm9ybWF0IGEgc3RyaW5nIHVzaW5nIGNhbGxiYWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcih7eDogJzEnfSwge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICAgICAgICAgICAgICBxdW90ZTogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1wiJyArIHZhbHVlICsgJ1wiJztcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChmb3JtYXR0ZXIuZm9ybWF0KCcke3ggfCBjYWxsOnF1b3RlfScpKS50by5lcXVhbCgnXCIxXCInKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmb3JtYXQgYSBzdHJpbmcgd2l0aCBwYXJhbWV0ZXJzJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzogJ0hlbGxvJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZDogJ3dvcmxkJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIob2JqKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdHRlci5mb3JtYXQoJyR7YS5iLmN9ICR7YS5kIHwgdWNmaXJzdH0hJyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCdIZWxsbyBXb3JsZCEnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGEgdG9vIGRlZXAgbmVzdGluZyBlcnJvcicsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoe25hbWU6ICdKb2huJ30pO1xuICAgICAgICAgICAgY29uc3QgbmVzdGVkVGV4dCA9ICcke25hbWUke25hbWUke25hbWUke25hbWUke25hbWUke25hbWUke25hbWUke25hbWUke25hbWUke25hbWUke25hbWUke25hbWUke25hbWUke25hbWUke25hbWUke25hbWUke25hbWUke25hbWUke25hbWV9fX19fX19fX19fX19fX19fX0nO1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGZvcm1hdHRlci5mb3JtYXQobmVzdGVkVGV4dCkpLnRvLnRocm93KCdzeW50YXggZXJyb3IgaW4gZm9ybWF0dGVyIHRlbXBsYXRlJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgYSB0b28gZGVlcCBuZXN0aW5nIGVycm9yJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRPYmogPSB7XG4gICAgICAgICAgICAgICAgbXlrZXk6ICcke215a2V5fScsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKGlucHV0T2JqKTtcblxuICAgICAgICAgICAgY29uc3QgdGV4dCA9ICcke215a2V5fSc7XG4gICAgICAgICAgICBsZXQgZm9ybWF0dGVkVGV4dCA9IHRleHQ7XG5cbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIHN0cmluZyB3aXRoIDIxIGxldmVscyBvZiBuZXN0aW5nXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIxOyBpKyspIHtcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZWRUZXh0ID0gJyR7JyArIGZvcm1hdHRlZFRleHQgKyAnfSc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBmb3JtYXR0ZXIuZm9ybWF0KGZvcm1hdHRlZFRleHQpKS50by50aHJvdygndG9vIGRlZXAgbmVzdGluZycpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgfSk7XG5cblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmV4cG9ydCB7IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbiB9O1xuXG4vKipcbiAqIFRoZSBgZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKClgIGZ1bmN0aW9uIGlzIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gKiBvZiBhIGNvbXBhcmlzb24gZXhwcmVzc2lvbiBiYXNlZCBvbiBhIHJhbmdlIG9mIHZhbHVlcy4gSXQgdGFrZXMgdGhyZWUgYXJndW1lbnRzOlxuICpcbiAqIC0gZXhwcmVzc2lvbiAocmVxdWlyZWQpOiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHJhbmdlIG9mIHZhbHVlcyBpbiB0aGUgZm9ybWF0IG9mIHN0YXJ0MS1lbmQxLHN0YXJ0Mi1lbmQyLHZhbHVlMy4uLi5cbiAqIC0gdmFsdWVOYW1lIChyZXF1aXJlZCk6IGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgbmFtZSBvZiB0aGUgdmFsdWUgdGhhdCBpcyBiZWluZyBjb21wYXJlZCB0byB0aGUgcmFuZ2Ugb2YgdmFsdWVzLlxuICogLSBvcHRpb25zIChvcHRpb25hbCk6IGFuIG9iamVjdCBjb250YWluaW5nIGFkZGl0aW9uYWwgb3B0aW9ucyB0byBjdXN0b21pemUgdGhlIGNvbXBhcmlzb24gZXhwcmVzc2lvbi5cbiAqXG4gKiBUaGUgZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKCkgZnVuY3Rpb24gcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tcGFyaXNvbiBleHByZXNzaW9uLlxuICpcbiAqICMjIE9wdGlvbnNcbiAqIFRoZSBvcHRpb24gcGFyYW1ldGVyIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiB1cmxFbmNvZGUgKGJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlKTogaWYgc2V0IHRvIHRydWUsIFVSTCBlbmNvZGVzIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycy5cbiAqIGFuZE9wIChzdHJpbmcsIGRlZmF1bHQ6ICcmJicpOiB0aGUgbG9naWNhbCBBTkQgb3BlcmF0b3IgdG8gdXNlIGluIHRoZSBleHByZXNzaW9uLlxuICogb3JPcCAoc3RyaW5nLCBkZWZhdWx0OiAnfHwnKTogdGhlIGxvZ2ljYWwgT1Igb3BlcmF0b3IgdG8gdXNlIGluIHRoZSBleHByZXNzaW9uLlxuICogZXFPcCAoc3RyaW5nLCBkZWZhdWx0OiAnPT0nKTogdGhlIGVxdWFsaXR5IG9wZXJhdG9yIHRvIHVzZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAqIGdlT3AgKHN0cmluZywgZGVmYXVsdDogJz49Jyk6IHRoZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gb3BlcmF0b3IgdG8gdXNlIGluIHRoZSBleHByZXNzaW9uLlxuICogbGVPcCAoc3RyaW5nLCBkZWZhdWx0OiAnPD0nKTogdGhlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBvcGVyYXRvciB0byB1c2UgaW4gdGhlIGV4cHJlc3Npb24uXG4gKlxuICogRXhhbXBsZXNcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBjb25zdCBleHByZXNzaW9uID0gJzAtMTAsMjAtMzAnO1xuICogY29uc3QgdmFsdWVOYW1lID0gJ2FnZSc7XG4gKiBjb25zdCBvcHRpb25zID0geyB1cmxFbmNvZGU6IHRydWUsIGFuZE9wOiAnYW5kJywgb3JPcDogJ29yJywgZXFPcDogJz0nLCBnZU9wOiAnPj0nLCBsZU9wOiAnPD0nIH07XG4gKiBjb25zdCBjb21wYXJpc29uRXhwcmVzc2lvbiA9IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUsIG9wdGlvbnMpO1xuICpcbiAqIGNvbnNvbGUubG9nKGNvbXBhcmlzb25FeHByZXNzaW9uKTsgLy8gYWdlJTNFJTNEMCUyMGFuZCUyMGFnZSUzQyUzRDEwJTIwb3IlMjBhZ2UlM0UlM0QyMCUyMGFuZCUyMGFnZSUzQyUzRDMwXG4gKiBgYGBcbiAqXG4gKiBJbiB0aGlzIGV4YW1wbGUsIHRoZSBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oKSBmdW5jdGlvbiBnZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbXBhcmlzb25cbiAqIGV4cHJlc3Npb24gZm9yIHRoZSBleHByZXNzaW9uIGFuZCB2YWx1ZU5hbWUgcGFyYW1ldGVycyB3aXRoIHRoZSBzcGVjaWZpZWQgb3B0aW9ucy4gVGhlIHJlc3VsdGluZyBjb21wYXJpc29uXG4gKiBleHByZXNzaW9uIGlzICdhZ2U+PTAgYW5kIGFnZTw9MTAgb3IgYWdlPj0yMCBhbmQgYWdlPD0zMCcsIFVSTCBlbmNvZGVkIGFjY29yZGluZyB0byB0aGUgdXJsRW5jb2RlIG9wdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVzc2lvbiAtIFRoZSBzdHJpbmcgZXhwcmVzc2lvbiB0byBnZW5lcmF0ZSB0aGUgY29tcGFyaXNvbiBmb3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHZhbHVlIHRvIGNvbXBhcmUgYWdhaW5zdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gLSBUaGUgb3B0aW9uYWwgcGFyYW1ldGVycy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudXJsRW5jb2RlPWZhbHNlXSAtIFdoZXRoZXIgdG8gZW5jb2RlIGNvbXBhcmlzb24gb3BlcmF0b3JzIGZvciB1c2UgaW4gYSBVUkwuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuYW5kT3A9JyYmJ10gLSBUaGUgbG9naWNhbCBBTkQgb3BlcmF0b3IgdG8gdXNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLm9yT3A9J3x8J10gLSBUaGUgbG9naWNhbCBPUiBvcGVyYXRvciB0byB1c2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuZXFPcD0nPT0nXSAtIFRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGZvciBlcXVhbGl0eSB0byB1c2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuZ2VPcD0nPj0nXSAtIFRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGZvciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdG8gdXNlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxlT3A9Jzw9J10gLSBUaGUgY29tcGFyaXNvbiBvcGVyYXRvciBmb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRvIHVzZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGdlbmVyYXRlZCBjb21wYXJpc29uIGV4cHJlc3Npb24uXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIGlucHV0IGlzIGludmFsaWQuXG4gKiBAc3VtbWFyeSBHZW5lcmF0ZXMgYSBjb21wYXJpc29uIGV4cHJlc3Npb24gYmFzZWQgb24gYSByYW5nZSBvZiB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihcblx0ZXhwcmVzc2lvbixcblx0dmFsdWVOYW1lLFxuXHRvcHRpb25zID0ge30sXG4pIHtcblx0Y29uc3Qge1xuXHRcdHVybEVuY29kZSA9IGZhbHNlLFxuXHRcdGFuZE9wID0gXCImJlwiLFxuXHRcdG9yT3AgPSBcInx8XCIsXG5cdFx0ZXFPcCA9IFwiPT1cIixcblx0XHRnZU9wID0gXCI+PVwiLFxuXHRcdGxlT3AgPSBcIjw9XCIsXG5cdH0gPSBvcHRpb25zO1xuXHRjb25zdCByYW5nZXMgPSBleHByZXNzaW9uLnNwbGl0KFwiLFwiKTtcblx0bGV0IGNvbXBhcmlzb24gPSBcIlwiO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IHJhbmdlcy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IHJhbmdlID0gcmFuZ2VzW2ldLnRyaW0oKTtcblx0XHRpZiAocmFuZ2UgPT09IFwiXCIpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCByYW5nZSAnJHtyYW5nZX0nYCk7XG5cdFx0fSBlbHNlIGlmIChyYW5nZS5pbmNsdWRlcyhcIi1cIikpIHtcblx0XHRcdGNvbnN0IFtzdGFydCwgZW5kXSA9IHJhbmdlXG5cdFx0XHRcdC5zcGxpdChcIi1cIilcblx0XHRcdFx0Lm1hcCgocykgPT4gKHMgPT09IFwiXCIgPyBudWxsIDogcGFyc2VGbG9hdChzKSkpO1xuXHRcdFx0aWYgKChzdGFydCAhPT0gbnVsbCAmJiBpc05hTihzdGFydCkpIHx8IChlbmQgIT09IG51bGwgJiYgaXNOYU4oZW5kKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZhbHVlIGluIHJhbmdlICcke3JhbmdlfSdgKTtcblx0XHRcdH1cblx0XHRcdGlmIChzdGFydCAhPT0gbnVsbCAmJiBlbmQgIT09IG51bGwgJiYgc3RhcnQgPiBlbmQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHJhbmdlICcke3JhbmdlfSdgKTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNvbXBTdGFydCA9XG5cdFx0XHRcdHN0YXJ0ICE9PSBudWxsXG5cdFx0XHRcdFx0PyBgJHt2YWx1ZU5hbWV9JHt1cmxFbmNvZGUgPyBlbmNvZGVVUklDb21wb25lbnQoZ2VPcCkgOiBnZU9wfSR7c3RhcnR9YFxuXHRcdFx0XHRcdDogXCJcIjtcblx0XHRcdGNvbnN0IGNvbXBFbmQgPVxuXHRcdFx0XHRlbmQgIT09IG51bGxcblx0XHRcdFx0XHQ/IGAke3ZhbHVlTmFtZX0ke3VybEVuY29kZSA/IGVuY29kZVVSSUNvbXBvbmVudChsZU9wKSA6IGxlT3B9JHtlbmR9YFxuXHRcdFx0XHRcdDogXCJcIjtcblx0XHRcdGNvbnN0IGNvbXBSYW5nZSA9IGAke2NvbXBTdGFydH0ke1xuXHRcdFx0XHRjb21wU3RhcnQgJiYgY29tcEVuZCA/IGAgJHthbmRPcH0gYCA6IFwiXCJcblx0XHRcdH0ke2NvbXBFbmR9YDtcblx0XHRcdGNvbXBhcmlzb24gKz0gcmFuZ2VzLmxlbmd0aCA+IDEgPyBgKCR7Y29tcFJhbmdlfSlgIDogY29tcFJhbmdlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHBhcnNlRmxvYXQocmFuZ2UpO1xuXHRcdFx0aWYgKGlzTmFOKHZhbHVlKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWUgJyR7cmFuZ2V9J2ApO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY29tcFZhbHVlID0gYCR7dmFsdWVOYW1lfSR7XG5cdFx0XHRcdHVybEVuY29kZSA/IGVuY29kZVVSSUNvbXBvbmVudChlcU9wKSA6IGVxT3Bcblx0XHRcdH0ke3ZhbHVlfWA7XG5cdFx0XHRjb21wYXJpc29uICs9IHJhbmdlcy5sZW5ndGggPiAxID8gYCgke2NvbXBWYWx1ZX0pYCA6IGNvbXBWYWx1ZTtcblx0XHR9XG5cdFx0aWYgKGkgPCByYW5nZXMubGVuZ3RoIC0gMSkge1xuXHRcdFx0Y29tcGFyaXNvbiArPSBgICR7b3JPcH0gYDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGNvbXBhcmlzb247XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Z2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9ufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3RleHQvdXRpbC5tanNcIjtcblxuZGVzY3JpYmUoJ2dlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGNvcnJlY3QgY29tcGFyaXNvbiBleHByZXNzaW9uIGZvciBzaW5nbGUgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gJzEsMyw1JztcbiAgICAgICAgY29uc3QgdmFsdWVOYW1lID0gJ3gnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoJyh4PT0xKSB8fCAoeD09MykgfHwgKHg9PTUpJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGNvcnJlY3QgY29tcGFyaXNvbiBleHByZXNzaW9uIGZvciByYW5nZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnMS0zLDYtOCc7XG4gICAgICAgIGNvbnN0IHZhbHVlTmFtZSA9ICd4JztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb24sIHZhbHVlTmFtZSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCcoeD49MSAmJiB4PD0zKSB8fCAoeD49NiAmJiB4PD04KScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBjb3JyZWN0IGNvbXBhcmlzb24gZXhwcmVzc2lvbiBmb3IgbWl4ZWQgcmFuZ2VzIGFuZCBzaW5nbGUgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gJzEtMyw1LDctOSc7XG4gICAgICAgIGNvbnN0IHZhbHVlTmFtZSA9ICd4JztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb24sIHZhbHVlTmFtZSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCcoeD49MSAmJiB4PD0zKSB8fCAoeD09NSkgfHwgKHg+PTcgJiYgeDw9OSknKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIGludmFsaWQgcmFuZ2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnMS0zLDUtNCc7XG4gICAgICAgIGNvbnN0IHZhbHVlTmFtZSA9ICd4JztcbiAgICAgICAgZXhwZWN0KCgpID0+IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUpKS50by50aHJvdyhgSW52YWxpZCByYW5nZSAnNS00J2ApO1xuICAgIH0pO1xuXG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGZvciBpbnZhbGlkIHZhbHVlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gJzEtMyxhJztcbiAgICAgICAgY29uc3QgdmFsdWVOYW1lID0gJ3gnO1xuICAgICAgICBleHBlY3QoKCkgPT4gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb24sIHZhbHVlTmFtZSkpLnRvLnRocm93KCdJbnZhbGlkIHZhbHVlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGNvcnJlY3QgY29tcGFyaXNvbiBleHByZXNzaW9uIHdpdGggY3VzdG9tIG9wZXJhdG9ycycsICgpID0+IHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9ICcxLTMsNSc7XG4gICAgICAgIGNvbnN0IHZhbHVlTmFtZSA9ICd4JztcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGFuZE9wOiAnQU5EJyxcbiAgICAgICAgICAgIG9yT3A6ICdPUicsXG4gICAgICAgICAgICBlcU9wOiAnPT09JyxcbiAgICAgICAgICAgIGdlT3A6ICc+PScsXG4gICAgICAgICAgICBsZU9wOiAnPD0nLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lLCBvcHRpb25zKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoJyh4Pj0xIEFORCB4PD0zKSBPUiAoeD09PTUpJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGNvcnJlY3QgY29tcGFyaXNvbiBleHByZXNzaW9uIHdpdGggdXJsRW5jb2RlIG9wdGlvbicsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGVzdENhc2VzID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICcxLDMsNScsXG4gICAgICAgICAgICAgICAgdmFsdWVOYW1lOiAneCcsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICcoeCUzRCUzRDEpIHx8ICh4JTNEJTNEMykgfHwgKHglM0QlM0Q1KScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICctMTAnLFxuICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogJ3gnLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiAneCUzQyUzRDEwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogJzEwLScsXG4gICAgICAgICAgICAgICAgdmFsdWVOYW1lOiAneCcsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICd4JTNFJTNEMTAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAnMS0zLDYtOCcsXG4gICAgICAgICAgICAgICAgdmFsdWVOYW1lOiAneScsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICcoeSUzRSUzRDEgJiYgeSUzQyUzRDMpIHx8ICh5JTNFJTNENiAmJiB5JTNDJTNEOCknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAnMS0zLDUsNy05JyxcbiAgICAgICAgICAgICAgICB2YWx1ZU5hbWU6ICd6JyxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogJyh6JTNFJTNEMSAmJiB6JTNDJTNEMykgfHwgKHolM0QlM0Q1KSB8fCAoeiUzRSUzRDcgJiYgeiUzQyUzRDkpJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgdGVzdENhc2VzLmZvckVhY2goKHtleHByZXNzaW9uLCB2YWx1ZU5hbWUsIGV4cGVjdGVkfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb24sIHZhbHVlTmFtZSwge3VybEVuY29kZTogdHJ1ZX0pO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgY29ycmVjdCBjb21wYXJpc29uIGV4cHJlc3Npb24gZm9yIG9wZW4tZW5kZWQgcmFuZ2VzIHdpdGggdXJsRW5jb2RlIG9wdGlvbicsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGVzdENhc2VzID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICcxMC0nLFxuICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogJ3gnLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiAneCUzRSUzRDEwJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogJy0xMCcsXG4gICAgICAgICAgICAgICAgdmFsdWVOYW1lOiAneScsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICd5JTNDJTNEMTAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICB0ZXN0Q2FzZXMuZm9yRWFjaCgoe2V4cHJlc3Npb24sIHZhbHVlTmFtZSwgZXhwZWN0ZWR9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lLCB7dXJsRW5jb2RlOiB0cnVlfSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbChleHBlY3RlZCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmV4cG9ydCB7IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoLCBjcmVhdGVCcmFja2V0ZWRLZXlWYWx1ZUhhc2ggfTtcblxuLyoqXG4gKiBQYXJzZXMgYSBzdHJpbmcgY29udGFpbmluZyBicmFja2V0ZWQga2V5LXZhbHVlIHBhaXJzIGFuZCByZXR1cm5zIGFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBhcnNlZCByZXN1bHQuXG4gKlxuICogLSBUaGUgc3RyaW5nIHN0YXJ0cyB3aXRoIGEgaGFzaCBzeW1ib2wgIy5cbiAqIC0gQWZ0ZXIgdGhlIGhhc2ggc3ltYm9sLCB0aGVyZSBhcmUgb25lIG9yIG1vcmUgc2VsZWN0b3Igc3RyaW5ncywgc2VwYXJhdGVkIGJ5IGEgc2VtaWNvbG9uIDsuXG4gKiAtIEVhY2ggc2VsZWN0b3Igc3RyaW5nIGhhcyB0aGUgZm9ybWF0IHNlbGVjdG9yTmFtZShrZXkxPXZhbHVlMSxrZXkyPXZhbHVlMiwuLi4pLlxuICogLSBUaGUgc2VsZWN0b3IgbmFtZSBpcyBhIHN0cmluZyBvZiBvbmUgb3IgbW9yZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycy5cbiAqIC0gVGhlIGtleS12YWx1ZSBwYWlycyBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcyAsIGFuZCBhcmUgb2YgdGhlIGZvcm0ga2V5PXZhbHVlLlxuICogLSBUaGUga2V5IGlzIGEgc3RyaW5nIG9mIG9uZSBvciBtb3JlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLlxuICogLSBUaGUgdmFsdWUgY2FuIGJlIGFuIGVtcHR5IHN0cmluZyBvciBhIHN0cmluZyBvZiBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzLlxuICogLSBJZiB0aGUgdmFsdWUgY29udGFpbnMgY29tbWFzLCBpdCBtdXN0IGJlIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMgXCIuXG4gKiAtIFRoZSBlbnRpcmUga2V5LXZhbHVlIHBhaXIgbXVzdCBiZSBVUkwtZW5jb2RlZC5cbiAqIC0gVGhlIGNsb3NpbmcgcGFyZW50aGVzaXMgKSBmb3IgZWFjaCBzZWxlY3RvciBtdXN0IGJlIHByZXNlbnQsIGV2ZW4gaWYgdGhlcmUgYXJlIG5vIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIC8vIEV4YW1wbGUgMTpcbiAqIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yMShrZXkxPXZhbHVlMSxrZXkyPXZhbHVlMik7c2VsZWN0b3IyKGtleTM9dmFsdWUzKSc7XG4gKiBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAqIC8vIHJlc3VsdCA9PiB7IHNlbGVjdG9yMTogeyBrZXkxOiBcInZhbHVlMVwiLCBrZXkyOiBcInZhbHVlMlwiIH0sIHNlbGVjdG9yMjogeyBrZXkzOiBcInZhbHVlM1wiIH0gfVxuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAvLyBFeGFtcGxlIDI6XG4gKiBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcjEoa2V5MT12YWx1ZTEsa2V5Mj12YWx1ZTIpO3NlbGVjdG9yMignO1xuICogY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gKiAvLyByZXN1bHQgPT4ge31cbiAqIGBgYFxuICpcbiAqIEBzaW5jZSAzLjM3LjBcbiAqIEBwYXJhbSB7c3RyaW5nfSBoYXNoU3RyaW5nIC0gVGhlIHN0cmluZyB0byBwYXJzZSwgY29udGFpbmluZyBicmFja2V0ZWQga2V5LXZhbHVlIHBhaXJzLlxuICogQHJldHVybiB7T2JqZWN0fSAtIEFuIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHBhcnNlZCByZXN1bHQsIHdpdGgga2V5cyByZXByZXNlbnRpbmcgdGhlIHNlbGVjdG9ycyBhbmQgdmFsdWVzIHJlcHJlc2VudGluZyB0aGUga2V5LXZhbHVlIHBhaXJzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIHNlbGVjdG9yLlxuICogICAgICAgICAgICAgICAgICAgIC0gUmV0dXJucyBhbiBlbXB0eSBvYmplY3QgaWYgdGhlcmUgd2FzIGFuIGVycm9yIGR1cmluZyBwYXJzaW5nLiAqL1xuZnVuY3Rpb24gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZykge1xuXHRjb25zdCBzZWxlY3RvcnMgPSB7fTtcblx0Ly9jb25zdCBzZWxlY3RvclN0YWNrID0gW107XG5cdC8vY29uc3Qga2V5VmFsdWVTdGFjayA9IFtdO1xuXG5cdGNvbnN0IHRyaW1tZWRIYXNoU3RyaW5nID0gaGFzaFN0cmluZy50cmltKCk7XG5cdGNvbnN0IGNsZWFuZWRIYXNoU3RyaW5nID1cblx0XHR0cmltbWVkSGFzaFN0cmluZy5jaGFyQXQoMCkgPT09IFwiI1wiXG5cdFx0XHQ/IHRyaW1tZWRIYXNoU3RyaW5nLnNsaWNlKDEpXG5cdFx0XHQ6IHRyaW1tZWRIYXNoU3RyaW5nO1xuXG5cdC8vY29uc3Qgc2VsZWN0b3JzID0gKGtleVZhbHVlU3RhY2subGVuZ3RoID4gMCkgPyByZXN1bHRbc2VsZWN0b3JTdGFja1tzZWxlY3RvclN0YWNrLmxlbmd0aCAtIDFdXSA6IHJlc3VsdDtcblx0bGV0IGN1cnJlbnRTZWxlY3RvciA9IFwiXCI7XG5cblx0ZnVuY3Rpb24gYWRkVG9SZXN1bHQoa2V5LCB2YWx1ZSkge1xuXHRcdGlmIChjdXJyZW50U2VsZWN0b3IgJiYga2V5KSB7XG5cdFx0XHRpZiAoIXNlbGVjdG9yc1tjdXJyZW50U2VsZWN0b3JdKSB7XG5cdFx0XHRcdHNlbGVjdG9yc1tjdXJyZW50U2VsZWN0b3JdID0ge307XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yc1tjdXJyZW50U2VsZWN0b3JdW2tleV0gPSB2YWx1ZTtcblx0XHR9XG5cdH1cblxuXHRsZXQgY3VycmVudEtleSA9IFwiXCI7XG5cdGxldCBjdXJyZW50VmFsdWUgPSBcIlwiO1xuXHRsZXQgaW5LZXkgPSB0cnVlO1xuXHRsZXQgaW5WYWx1ZSA9IGZhbHNlO1xuXHRsZXQgaW5RdW90ZWRWYWx1ZSA9IGZhbHNlO1xuXHRsZXQgaW5TZWxlY3RvciA9IHRydWU7XG5cdGxldCBlc2NhcGVkID0gZmFsc2U7XG5cdGxldCBxdW90ZWRWYWx1ZVN0YXJ0Q2hhciA9IFwiXCI7XG5cblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjbGVhbmVkSGFzaFN0cmluZy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGMgPSBjbGVhbmVkSGFzaFN0cmluZ1tpXTtcblx0XHRjb25zdCBuZXh0Q2hhciA9IGNsZWFuZWRIYXNoU3RyaW5nPy5baSArIDFdO1xuXG5cdFx0aWYgKGMgPT09IFwiXFxcXFwiICYmICFlc2NhcGVkKSB7XG5cdFx0XHRlc2NhcGVkID0gdHJ1ZTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChlc2NhcGVkKSB7XG5cdFx0XHRpZiAoaW5TZWxlY3Rvcikge1xuXHRcdFx0XHRjdXJyZW50U2VsZWN0b3IgKz0gYztcblx0XHRcdH0gZWxzZSBpZiAoaW5LZXkpIHtcblx0XHRcdFx0Y3VycmVudEtleSArPSBjO1xuXHRcdFx0fSBlbHNlIGlmIChpblZhbHVlKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSArPSBjO1xuXHRcdFx0fVxuXHRcdFx0ZXNjYXBlZCA9IGZhbHNlO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGluUXVvdGVkVmFsdWUgJiYgcXVvdGVkVmFsdWVTdGFydENoYXIgIT09IGMpIHtcblx0XHRcdGlmIChpblNlbGVjdG9yKSB7XG5cdFx0XHRcdGN1cnJlbnRTZWxlY3RvciArPSBjO1xuXHRcdFx0fSBlbHNlIGlmIChpbktleSkge1xuXHRcdFx0XHRjdXJyZW50S2V5ICs9IGM7XG5cdFx0XHR9IGVsc2UgaWYgKGluVmFsdWUpIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlICs9IGM7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChjID09PSBcIjtcIiAmJiBpblNlbGVjdG9yKSB7XG5cdFx0XHRpblNlbGVjdG9yID0gdHJ1ZTtcblx0XHRcdGN1cnJlbnRTZWxlY3RvciA9IFwiXCI7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoaW5TZWxlY3RvciA9PT0gdHJ1ZSAmJiBjICE9PSBcIihcIikge1xuXHRcdFx0Y3VycmVudFNlbGVjdG9yICs9IGM7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoYyA9PT0gXCIoXCIgJiYgaW5TZWxlY3Rvcikge1xuXHRcdFx0aW5TZWxlY3RvciA9IGZhbHNlO1xuXHRcdFx0aW5LZXkgPSB0cnVlO1xuXG5cdFx0XHRjdXJyZW50S2V5ID0gXCJcIjtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChpbktleSA9PT0gdHJ1ZSAmJiBjICE9PSBcIj1cIikge1xuXHRcdFx0Y3VycmVudEtleSArPSBjO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGMgPT09IFwiPVwiICYmIGluS2V5KSB7XG5cdFx0XHRpbktleSA9IGZhbHNlO1xuXHRcdFx0aW5WYWx1ZSA9IHRydWU7XG5cblx0XHRcdGlmIChuZXh0Q2hhciA9PT0gJ1wiJyB8fCBuZXh0Q2hhciA9PT0gXCInXCIpIHtcblx0XHRcdFx0aW5RdW90ZWRWYWx1ZSA9IHRydWU7XG5cdFx0XHRcdHF1b3RlZFZhbHVlU3RhcnRDaGFyID0gbmV4dENoYXI7XG5cdFx0XHRcdGkrKztcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGN1cnJlbnRWYWx1ZSA9IFwiXCI7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoaW5WYWx1ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0aWYgKGluUXVvdGVkVmFsdWUpIHtcblx0XHRcdFx0aWYgKGMgPT09IHF1b3RlZFZhbHVlU3RhcnRDaGFyKSB7XG5cdFx0XHRcdFx0aW5RdW90ZWRWYWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y3VycmVudFZhbHVlICs9IGM7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYyA9PT0gXCIsXCIpIHtcblx0XHRcdFx0aW5WYWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHRpbktleSA9IHRydWU7XG5cdFx0XHRcdGNvbnN0IGRlY29kZWRDdXJyZW50VmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQoY3VycmVudFZhbHVlKTtcblx0XHRcdFx0YWRkVG9SZXN1bHQoY3VycmVudEtleSwgZGVjb2RlZEN1cnJlbnRWYWx1ZSk7XG5cdFx0XHRcdGN1cnJlbnRLZXkgPSBcIlwiO1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBcIlwiO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGMgPT09IFwiKVwiKSB7XG5cdFx0XHRcdGluVmFsdWUgPSBmYWxzZTtcblx0XHRcdFx0Ly9pbktleSA9IHRydWU7XG5cdFx0XHRcdGluU2VsZWN0b3IgPSB0cnVlO1xuXG5cdFx0XHRcdGNvbnN0IGRlY29kZWRDdXJyZW50VmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQoY3VycmVudFZhbHVlKTtcblx0XHRcdFx0YWRkVG9SZXN1bHQoY3VycmVudEtleSwgZGVjb2RlZEN1cnJlbnRWYWx1ZSk7XG5cdFx0XHRcdGN1cnJlbnRLZXkgPSBcIlwiO1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgPSBcIlwiO1xuXHRcdFx0XHRjdXJyZW50U2VsZWN0b3IgPSBcIlwiO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y3VycmVudFZhbHVlICs9IGM7XG5cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0fVxuXG5cdGlmIChpblNlbGVjdG9yKSB7XG5cdFx0cmV0dXJuIHNlbGVjdG9ycztcblx0fVxuXG5cdHJldHVybiB7fTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBzZWxlY3RvciBzdHJpbmcgZnJvbSBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCAtIFRoZSBvYmplY3QgY29udGFpbmluZyBzZWxlY3RvcnMgYW5kIGtleS12YWx1ZSBwYWlycy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWRkSGFzaFByZWZpeCAtIFdoZXRoZXIgdG8gYWRkIHRoZSBoYXNoIHByZWZpeCAjIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZy5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGhhc2ggc2VsZWN0b3Igc3RyaW5nLlxuICogQHNpbmNlIDMuMzcuMFxuICovXG5mdW5jdGlvbiBjcmVhdGVCcmFja2V0ZWRLZXlWYWx1ZUhhc2gob2JqZWN0LCBhZGRIYXNoUHJlZml4ID0gdHJ1ZSkge1xuXHRpZiAoIW9iamVjdCkge1xuXHRcdHJldHVybiBhZGRIYXNoUHJlZml4ID8gXCIjXCIgOiBcIlwiO1xuXHR9XG5cblx0bGV0IGhhc2hTdHJpbmcgPSBcIlwiO1xuXG5cdGZ1bmN0aW9uIGVuY29kZUtleVZhbHVlKGtleSwgdmFsdWUpIHtcblx0XHRyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGtleSkgKyBcIj1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IHNlbGVjdG9yIGluIG9iamVjdCkge1xuXHRcdGlmIChvYmplY3QuaGFzT3duUHJvcGVydHkoc2VsZWN0b3IpKSB7XG5cdFx0XHRjb25zdCBrZXlWYWx1ZVBhaXJzID0gb2JqZWN0W3NlbGVjdG9yXTtcblx0XHRcdGxldCBzZWxlY3RvclN0cmluZyA9IHNlbGVjdG9yO1xuXHRcdFx0bGV0IGtleVZhbHVlU3RyaW5nID0gXCJcIjtcblxuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4ga2V5VmFsdWVQYWlycykge1xuXHRcdFx0XHRpZiAoa2V5VmFsdWVQYWlycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBrZXlWYWx1ZVBhaXJzW2tleV07XG5cdFx0XHRcdFx0a2V5VmFsdWVTdHJpbmcgKz0ga2V5VmFsdWVTdHJpbmcubGVuZ3RoID09PSAwID8gXCJcIiA6IFwiLFwiO1xuXHRcdFx0XHRcdGtleVZhbHVlU3RyaW5nICs9IGVuY29kZUtleVZhbHVlKGtleSwgdmFsdWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChrZXlWYWx1ZVN0cmluZy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHNlbGVjdG9yU3RyaW5nICs9IFwiKFwiICsga2V5VmFsdWVTdHJpbmcgKyBcIilcIjtcblx0XHRcdFx0aGFzaFN0cmluZyArPSBoYXNoU3RyaW5nLmxlbmd0aCA9PT0gMCA/IFwiXCIgOiBcIjtcIjtcblx0XHRcdFx0aGFzaFN0cmluZyArPSBzZWxlY3RvclN0cmluZztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYWRkSGFzaFByZWZpeCA/IFwiI1wiICsgaGFzaFN0cmluZyA6IGhhc2hTdHJpbmc7XG59XG4iLCAiLy8gdGVzdC5qc1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCI7XG5pbXBvcnQge1xuICAgIHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoLFxuICAgIGNyZWF0ZUJyYWNrZXRlZEtleVZhbHVlSGFzaFxufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3RleHQvYnJhY2tldGVkLWtleS12YWx1ZS1oYXNoLm1qc1wiO1xuXG5kZXNjcmliZShcInBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGZvciBhbiBlbXB0eSBzdHJpbmdcIiwgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IFwiXCI7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge307XG4gICAgICAgIGV4cGVjdChwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCkpLnRvLmRlZXAuZXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcGFyc2UgYSBzaW5nbGUgc2VsZWN0b3Igd2l0aCBvbmUga2V5LXZhbHVlIHBhaXJcIiwgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IFwiI3NlbGVjdG9yMShrZXkxPXZhbHVlMSlcIjtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7XG4gICAgICAgICAgICBzZWxlY3RvcjE6IHtcbiAgICAgICAgICAgICAgICBrZXkxOiBcInZhbHVlMVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgZXhwZWN0KHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0KSkudG8uZGVlcC5lcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBwYXJzZSBtdWx0aXBsZSBzZWxlY3RvcnMgd2l0aCBtdWx0aXBsZSBrZXktdmFsdWUgcGFpcnNcIiwgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IFwiI3NlbGVjdG9yMShrZXkxPXZhbHVlMSxrZXkyPXZhbHVlMik7c2VsZWN0b3IyKGtleTM9dmFsdWUzLGtleTQ9dmFsdWU0KVwiO1xuICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHtcbiAgICAgICAgICAgIHNlbGVjdG9yMToge1xuICAgICAgICAgICAgICAgIGtleTE6IFwidmFsdWUxXCIsXG4gICAgICAgICAgICAgICAga2V5MjogXCJ2YWx1ZTJcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWxlY3RvcjI6IHtcbiAgICAgICAgICAgICAgICBrZXkzOiBcInZhbHVlM1wiLFxuICAgICAgICAgICAgICAgIGtleTQ6IFwidmFsdWU0XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBleHBlY3QocGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQpKS50by5kZWVwLmVxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGRlY29kZSBVUkwtZW5jb2RlZCB2YWx1ZXNcIiwgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IFwiI3NlbGVjdG9yMShrZXkxPXZhbHVlMSUyQ3dpdGglMjBjb21tYSlcIjtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7XG4gICAgICAgICAgICBzZWxlY3RvcjE6IHtcbiAgICAgICAgICAgICAgICBrZXkxOiBcInZhbHVlMSx3aXRoIGNvbW1hXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQuc2VsZWN0b3IxLmtleTEpLnRvLmVxdWFsKGV4cGVjdGVkUmVzdWx0LnNlbGVjdG9yMS5rZXkxKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBpbnB1dCB3aXRob3V0IGEgbGVhZGluZyBoYXNoXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBcInNlbGVjdG9yMShrZXkxPXZhbHVlMSlcIjtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7XG4gICAgICAgICAgICBzZWxlY3RvcjE6IHtcbiAgICAgICAgICAgICAgICBrZXkxOiBcInZhbHVlMVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgZXhwZWN0KHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0KSkudG8uZGVlcC5lcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGZvciBpbnZhbGlkIGlucHV0XCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBcIiNzZWxlY3RvcjEoa2V5MT12YWx1ZTEsa2V5MlwiO1xuICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHt9O1xuICAgICAgICBleHBlY3QocGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQpKS50by5kZWVwLmVxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBmb3IgYW4gZW1wdHkgaW5wdXQgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBmb3IgYW4gaW52YWxpZCBpbnB1dCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI2ludmFsaWQnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhcnNlIGEgc2ltcGxlIGlucHV0IHN0cmluZyB3aXRoIG9uZSBzZWxlY3RvciBhbmQgb25lIGtleS12YWx1ZSBwYWlyJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXk9dmFsdWUpJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe3NlbGVjdG9yOiB7a2V5OiAndmFsdWUnfX0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSBhbiBpbnB1dCBzdHJpbmcgd2l0aCBtdWx0aXBsZSBzZWxlY3RvcnMgYW5kIGtleS12YWx1ZSBwYWlycycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3IxKGtleTE9dmFsdWUxKTtzZWxlY3RvcjIoa2V5Mj12YWx1ZTIpJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe3NlbGVjdG9yMToge2tleTE6ICd2YWx1ZTEnfSwgc2VsZWN0b3IyOiB7a2V5MjogJ3ZhbHVlMid9fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBlbXB0eSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yKGtleTE9LGtleTI9KSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtzZWxlY3Rvcjoge2tleTE6ICcnLCBrZXkyOiAnJ319KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIHBlcmNlbnQtZW5jb2RlZCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yKGtleTE9dmFsdWUlMjAxLGtleTI9dmFsdWUlMkMyKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtzZWxlY3Rvcjoge2tleTE6ICd2YWx1ZSAxJywga2V5MjogJ3ZhbHVlLDInfX0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZG91YmxlLXF1b3RlZCB2YWx1ZXMgd2l0aCBjb21tYXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yKGtleTE9XCJ2YWx1ZSwxXCIsa2V5Mj1cInZhbHVlLDJcIiknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7c2VsZWN0b3I6IHtrZXkxOiAndmFsdWUsMScsIGtleTI6ICd2YWx1ZSwyJ319KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaWdub3JlIGxlYWRpbmcgaGFzaCBzeW1ib2wgKCMpJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJ3NlbGVjdG9yKGtleT12YWx1ZSknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7c2VsZWN0b3I6IHtrZXk6ICd2YWx1ZSd9fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGlnbm9yZSBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZSBzcGFjZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcgICNzZWxlY3RvcihrZXk9dmFsdWUpICAnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7c2VsZWN0b3I6IHtrZXk6ICd2YWx1ZSd9fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlIGlucHV0IHN0cmluZyBlbmRzIHByZW1hdHVyZWx5JywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXk9dmFsdWUnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgYSBzZWxlY3RvciBpcyBtaXNzaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyMoa2V5PXZhbHVlKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZiBhIGtleSBpcyBtaXNzaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3Rvcig9dmFsdWUpJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmYSB2YWx1ZSBpcyBtaXNzaW5nJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcihrZXk9KSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtcbiAgICAgICAgICAgIHNlbGVjdG9yOiB7XG4gICAgICAgICAgICAgICAga2V5OiAnJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIHRoZXJlIGlzIG5vIGNsb3NpbmcgcGFyZW50aGVzaXMgZm9yIGEgc2VsZWN0b3InLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yKGtleT12YWx1ZTsnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlcmUgaXMgbm8gc2VtaWNvbG9uIGFmdGVyIGEgc2VsZWN0b3InLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yKGtleT12YWx1ZSlzZWxlY3RvcjIoa2V5Mj12YWx1ZTIpJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe1xuICAgICAgICAgICAgc2VsZWN0b3I6IHtcbiAgICAgICAgICAgICAgICBrZXk6ICd2YWx1ZScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VsZWN0b3IyOiB7XG4gICAgICAgICAgICAgICAga2V5MjogJ3ZhbHVlMicsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGVCcmFja2V0ZWRLZXlWYWx1ZUhhc2gnLCAoKSA9PiB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGhhc2ggc3RyaW5nIGZvciBhIHNpbXBsZSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHtcbiAgICAgICAgICAgICAgICAnLmV4YW1wbGUnOiB7XG4gICAgICAgICAgICAgICAgICAgICdjb2xvcic6ICdyZWQnLFxuICAgICAgICAgICAgICAgICAgICAnZm9udC1zaXplJzogJzE0cHgnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnLm90aGVyJzoge1xuICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZCc6ICdibHVlJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFwiIy5leGFtcGxlKGNvbG9yPXJlZCxmb250LXNpemU9MTRweCk7Lm90aGVyKGJhY2tncm91bmQ9Ymx1ZSlcIik7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSB1cmwtZW5jb2RlZCBoYXNoIHN0cmluZyBmb3IgYSBzaW1wbGUgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB7XG4gICAgICAgICAgICAgICAgJy5leGFtcGxlJzoge1xuICAgICAgICAgICAgICAgICAgICAnY29sb3InOiAnclwiZWQnLFxuICAgICAgICAgICAgICAgICAgICAnZm9udC1zaXplJzogJzE0cHgnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnLm90aGVyJzoge1xuICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZCc6ICdibHVlJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNyZWF0ZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCwgdHJ1ZSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFwiIy5leGFtcGxlKGNvbG9yPXIlMjJlZCxmb250LXNpemU9MTRweCk7Lm90aGVyKGJhY2tncm91bmQ9Ymx1ZSlcIik7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGZvciBhbiBlbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHt9O1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY3JlYXRlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0LGZhbHNlKTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoXCJcIik7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGZvciBhbiBlbXB0eSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHt9O1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY3JlYXRlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0LGZhbHNlKTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoXCJcIik7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICB9KTtcblxuXG59KTtcbiIsICIvKiogbm9kZWpzIGRvZXNudCBzdXBwb3J0IHdpbmRvdy5jcnlwdCAqL1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ01hdGgnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgcmFuZG9tID0gKCkgPT4ge31cbiAgICBcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBpZiAoIWdsb2JhbFRoaXNbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbihtID0+IHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzWydjcnlwdG8nXSA9IG5ldyBtLkNyeXB0bygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgIH1cblxuICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS9tYXRoL3JhbmRvbS5tanNcIikudGhlbihtID0+IHtcbiAgICAgICAgICAgIHJhbmRvbSA9IG0ucmFuZG9tO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pKVxuXG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnJhbmRvbSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdhIGdyZWF0ZXIgYiBzaG91bGQgdGhyb3cgZXJyb3IgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHJhbmRvbSgxMCwgMikpLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJyBzaG91bGQgcmV0dXJuIGEgbnVtYmVyICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCByID0gcmFuZG9tKCk7XG4gICAgICAgICAgICBleHBlY3QocikudGhhdC5pcy5hKCdudW1iZXInKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJyBzaG91bGQgcmV0dXJuIGEgbnVtYmVyICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiByYW5kb20oNSwgNikpLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJyBzaG91bGQgdGhyb3cgRXJyb3Igd2UgY2Fubm90IGdlbmVyYXRlIG51bWJlcnMgbGFyZ2VyIHRoYW4gNTMgYml0cy4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gcmFuZG9tKC05OTk5OTk5OTksIDk5OTk5OTk5OTk5OTk5OTk5OTk5KSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnIHNob3VsZCB0aHJvdyBFcnJvciB3ZSBjYW5ub3QgZ2VuZXJhdGUgbnVtYmVycyBsYXJnZXIgdGhhbiA1MyBiaXRzLicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsxLCAxMDBdLFxuICAgICAgICAgICAgICAgIFs1MDAsIDYwMF0sXG4gICAgICAgICAgICAgICAgWzEwMCwgMTAwMF1cbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICAgICAgbGV0IHIgPSByYW5kb20oYSwgYik7XG5cbiAgICAgICAgICAgICAgICBpdChyICsgJyBzaG91bGQgcmV0dXJuIHZhbHVlIGJldHdlZW4gJyArIGEgKyAnICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChyID49IGEpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChyIDw9IGIpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsxLCAxMDBdLFxuICAgICAgICAgICAgICAgIFs1MDAsIDYwMF0sXG4gICAgICAgICAgICAgICAgWzEwMCwgMTAwMF1cbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICAgICAgbGV0IHN1bSA9IDA7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm91bmRzID0gNTAwXG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbWF4ID0gcm91bmRzOyBpIDwgbWF4OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgc3VtICs9IHJhbmRvbShhLCBiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgYXZnID0gc3VtIC8gcm91bmRzO1xuXG4gICAgICAgICAgICAgICAgaXQoYXZnICsgJyBzaG91bGQgYmV0d2VlbiAnICsgYSArICcgJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGF2ZyA+IGEpLnRvLmJlLnRydWVcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGF2ZyA8IGIpLnRvLmJlLnRydWVcbiAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfSlcblxuXG4gICAgfSlcblxuXG59KSIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHt0cmltU3BhY2VzfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvdHJpbXNwYWNlcy5tanNcIjtcblxuXG5kZXNjcmliZSgndHJpbVNwYWNlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBbXG4gICAgICAgIC8vIG9uZSBzdHJva2UgaXMgZXNjcGVkIGJ5IHRoZSBqYXZhc2NyaXB0IGludGVycHJldGVyLCB0aGUgc2Vjb25kIHN0cm9rZSBlc2NhcGVzIHRoZSBzdHJva2VcbiAgICAgICAgWycgdmFsdWUgJywgJ3ZhbHVlJ10sXG4gICAgICAgIFsnIHZhbHVlXFxcXCAnLCAndmFsdWVcXFxcICddLFxuICAgICAgICBbJ1xcXFwgdmFsdWVcXFxcICcsICdcXFxcIHZhbHVlXFxcXCAnXSxcbiAgICAgICAgWydcXCB2YWx1ZVxcICcsICd2YWx1ZSddLCAgIFxuICAgICAgICBbXCIgICB2YWx1ZSBcXCBcIiwgJ3ZhbHVlJ10sIFxuXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICBpdCgndHJpbVNwYWNlcygnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBKU09OLnN0cmluZ2lmeShiKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHRyaW1TcGFjZXMoYSkpLnRvLmJlLmVxdWFsKGIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn0pO1xuICAgICIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtQcm9jZXNzaW5nfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvcHJvY2Vzc2luZy5tanNcIjtcblxuXG5kZXNjcmliZSgnUHJvY2Vzc2luZycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdydW4gaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gbWFueSBmdW5jdGlvbicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgICAgICAgIGxldCB0ID0gK25ldyBEYXRlKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRlc2lyZWREZWxheSA9IDIwMDtcbiAgICAgICAgICAgIHRoaXMudGltZW91dChkZXNpcmVkRGVsYXkrMTAwKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gZGVsYXkgMTIgXG4gICAgICAgICAgICBuZXcgUHJvY2Vzc2luZygodikgPT4ge1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH0sICh2KSA9PiB7XG4gICAgICAgICAgICAgICAgY291bnRlcisrXG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrK1xuICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgfSwgZGVzaXJlZERlbGF5LGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgY291bnRlcisrXG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9KS5ydW4oJ3Rlc3QnKS50aGVuKCh2KSA9PiB7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoY291bnRlcikudG8uYmUuZXF1YWwoNCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2ID09PSAndGVzdCcpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGRlbGF5XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgrbmV3IERhdGUoKSA+IHQgKyBkZXNpcmVkRGVsYXkrMSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJ1biBvbmUgZnVuY3Rpb24nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG5cbiAgICAgICAgICAgIG5ldyBQcm9jZXNzaW5nKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrK1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0pLnJ1bigndGVzdCcpLnRoZW4oKHYpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodiA9PT0gJ3Rlc3QnKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gbm8gZnVuY3Rpb24nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG5cbiAgICAgICAgICAgIG5ldyBQcm9jZXNzaW5nKCkucnVuKCd0ZXN0JykudGhlbigodikgPT4ge1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHYgPT09ICd0ZXN0JykudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUgbmV3IGluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgUHJvY2Vzc2luZyBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFByb2Nlc3NpbmcoKSkudG8uYmUuYSgnb2JqZWN0Jyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgUHJvY2Vzc2luZyBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFByb2Nlc3NpbmcoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgfSkpLnRvLmJlLmEoJ29iamVjdCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IFR5cGVFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgUHJvY2Vzc2luZyh0cnVlKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBUeXBlRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IFByb2Nlc3NpbmcoXCJ0ZXN0XCIpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbn0pOyIsICJpbXBvcnQge0RlYWRNYW5zU3dpdGNofSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0RlYWRNYW5zU3dpdGNoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ3J1biBpbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJ1bicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IG1zMSA9ICBEYXRlLm5vdygpO1xuXG4gICAgICAgICAgICBuZXcgRGVhZE1hbnNTd2l0Y2goMTAwLCAoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBtczIgPSAgRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBtczIgLSBtczE7XG4gICAgICAgICAgICAgICAgaWYgKGRpZmYgPCAxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgndG8gc2hvcnQgJyArIGRpZmYpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdydW4gaW5zdGFuY2UgYW5kIHRvdWNoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgbXMxID0gRGF0ZS5ub3coKTtcblxuICAgICAgICAgICAgY29uc3QgZGVhZG1hbnNzd2l0Y2ggPSBuZXcgRGVhZE1hbnNTd2l0Y2goMTAwLCAoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBtczIgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZGlmZiA9IG1zMiAtIG1zMTtcblxuICAgICAgICAgICAgICAgIGlmIChtczEgPiBtczIpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoJ3RpbWluZyBlcnJvcicpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkaWZmIDwgNjAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKCd0byBzaG9ydCAnICsgZGlmZikpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIC8vICAgMCBtczogaW5pdCgpIC0+IHdhaXQgMTAwIG1zIFxuICAgICAgICAgICAgLy8gIDUwIG1zOiB0b3VjaCgpIC0+IHdhaXQgMTAwIG1zXG4gICAgICAgICAgICAvLyAgICAgICAgICAtPiB3YWl0IDEwMFxuICAgICAgICAgICAgLy8gMTAwIG1zOiB0b3VjaCg1MDApIC0+IHdhaXQgNTAwIG1zXG4gICAgICAgICAgICAvLyAgICAgICAgICAtPiB3YWl0IDUwMFxuICAgICAgICAgICAgLy8gNjAwIG1zOiBleGVjdXRlIGNhbGxiYWNrXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBkZWFkbWFuc3N3aXRjaC50b3VjaCgpXG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGVhZG1hbnNzd2l0Y2gudG91Y2goNTAwKVxuICAgICAgICAgICAgICAgIH0sIDUwKVxuXG4gICAgICAgICAgICB9LCA1MClcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG59KTsiLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcblxuZXhwb3J0IHsgQ29tcGFyYXRvciB9O1xuXG4vKipcbiAqIFRoZSBjb21wYXJhdG9yIGFsbG93cyBhIGNvbXBhcmlzb24gZnVuY3Rpb24gdG8gYmUgYWJzdHJhY3RlZC5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIGFyZSBzb21lIGV4YW1wbGVzIG9mIHRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgY2xhc3MuXG4gKlxuICogYGBgXG4gKiBuZXcgQ29tcGFyYXRvcigpLmxlc3NUaGFuT3JFcXVhbCgyLCA1KSAvLyBcdTIxQTYgdHJ1ZVxuICogbmV3IENvbXBhcmF0b3IoKS5ncmVhdGVyVGhhbig0LCAyKSAvLyBcdTIxQTYgdHJ1ZVxuICogbmV3IENvbXBhcmF0b3IoKS5lcXVhbCg0LCA0KSAvLyBcdTIxQTYgdHJ1ZVxuICogbmV3IENvbXBhcmF0b3IoKS5lcXVhbCg0LCA1KSAvLyBcdTIxQTYgZmFsc2VcbiAqIGBgYFxuICpcbiAqIFlvdSBjYW4gYWxzbyBwYXNzIHlvdXIgb3duIGNvbXBhcmlzb24gZnVuY3Rpb24sIGFuZCB0aHVzIGRlZmluZSB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbi5cbiAqXG4gKiBgYGBcbiAqIG5ldyBDb21wYXJhdG9yKGZ1bmN0aW9uIChhLCBiKSB7XG4gKiAgICAgIGlmIChhLnYgPT09IGIudikgcmV0dXJuIDA7XG4gKiAgICAgICAgIHJldHVybiBhLnYgPCBiLnYgPyAtMSA6IDE7XG4gKiAgICAgIH0pLmVxdWFsKHt2OiAyfSwge3Y6IDJ9KTsgIC8vIFx1MjFBNiB0cnVlXG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZS9jb21wYXJhdG9yL3NpbXBsZS8gU2ltcGxlIGV4YW1wbGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMy4wXG4gKi9cbmNsYXNzIENvbXBhcmF0b3IgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIGNyZWF0ZSBuZXcgY29tcGFyYXRvclxuXHQgKlxuXHQgKiBAcGFyYW0ge01vbnN0ZXIuVXRpbH5leGFtcGxlQ2FsbGJhY2t9IFtjYWxsYmFja10gQ29tcGFyYXRvciBjYWxsYmFja1xuXHQgKiBAdGhyb3cge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKiBAdGhyb3cge1R5cGVFcnJvcn0gaW1wcmFjdGljYWwgY29tcGFyaXNvblxuXHQgKi9cblx0Y29uc3RydWN0b3IoY2FsbGJhY2spIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0XHR0aGlzLmNvbXBhcmUgPSBjYWxsYmFjaztcblx0XHR9IGVsc2UgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ1bnN1cHBvcnRlZCB0eXBlXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBkZWZhdWx0IGNvbXBhcmUgZnVuY3Rpb25cblxuXHRcdFx0LyoqXG5cdFx0XHQgKlxuXHRcdFx0ICogQHBhcmFtIHsqfSBhXG5cdFx0XHQgKiBAcGFyYW0geyp9IGJcblx0XHRcdCAqIEByZXR1cm4ge2ludGVnZXJ9IC0xLCAwIG9yIDFcblx0XHRcdCAqL1xuXHRcdFx0dGhpcy5jb21wYXJlID0gZnVuY3Rpb24gKGEsIGIpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikge1xuXHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJpbXByYWN0aWNhbCBjb21wYXJpc29uXCIsIFwidHlwZXMvY29tcGFyYXRvci5tanNcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoYSA9PT0gYikge1xuXHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBhIDwgYiA/IC0xIDogMTtcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIGNoYW5nZXMgdGhlIG9yZGVyIG9mIHRoZSBvcGVyYXRvcnNcblx0ICpcblx0ICogQHJldHVybiB7Q29tcGFyYXRvcn1cblx0ICovXG5cdHJldmVyc2UoKSB7XG5cdFx0Y29uc3Qgb3JpZ2luYWwgPSB0aGlzLmNvbXBhcmU7XG5cdFx0dGhpcy5jb21wYXJlID0gKGEsIGIpID0+IG9yaWdpbmFsKGIsIGEpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0d28gdmFyaWFibGVzIGFyZSBlcXVhbC5cblx0ICpcblx0ICogQHBhcmFtIHsqfSBhXG5cdCAqIEBwYXJhbSB7Kn0gYlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0ZXF1YWwoYSwgYikge1xuXHRcdHJldHVybiB0aGlzLmNvbXBhcmUoYSwgYikgPT09IDA7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHZhcmlhYmxlIGBhYCBpcyBncmVhdGVyIHRoYW4gYGJgXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYVxuXHQgKiBAcGFyYW0geyp9IGJcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGdyZWF0ZXJUaGFuKGEsIGIpIHtcblx0XHRyZXR1cm4gdGhpcy5jb21wYXJlKGEsIGIpID4gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdmFyaWFibGUgYGFgIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgYmBcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhXG5cdCAqIEBwYXJhbSB7Kn0gYlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0Z3JlYXRlclRoYW5PckVxdWFsKGEsIGIpIHtcblx0XHRyZXR1cm4gdGhpcy5ncmVhdGVyVGhhbihhLCBiKSB8fCB0aGlzLmVxdWFsKGEsIGIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB2YXJpYWJsZSBgYWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBiYFxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFcblx0ICogQHBhcmFtIHsqfSBiXG5cdCAqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRsZXNzVGhhbk9yRXF1YWwoYSwgYikge1xuXHRcdHJldHVybiB0aGlzLmxlc3NUaGFuKGEsIGIpIHx8IHRoaXMuZXF1YWwoYSwgYik7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHZhcmlhYmxlIGEgaXMgbGVzcyB0aGFuIGJcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhXG5cdCAqIEBwYXJhbSB7Kn0gYlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0bGVzc1RoYW4oYSwgYikge1xuXHRcdHJldHVybiB0aGlzLmNvbXBhcmUoYSwgYikgPCAwO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB1c2VkIGJ5IHRoZSBvcGVyYXRvclxuICpcbiAqIGBgYFxuICogbmV3IENvbXBhcmF0b3IoZnVuY3Rpb24gKGEsIGIpIHtcbiAqICAgICAgaWYgKGEudiA9PT0gYi52KSByZXR1cm4gMDtcbiAqICAgICAgICAgcmV0dXJuIGEudiA8IGIudiA/IC0xIDogMTtcbiAqICAgICAgfSkuZXF1YWwoe3Y6IDJ9LCB7djogMn0pOyAgLy8gXHUyMUE2IHRydWVcbiAqIGBgYFxuICpcbiAqIEBjYWxsYmFjayBNb25zdGVyLlV0aWx+ZXhhbXBsZUNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IGFcbiAqIEBwYXJhbSB7Kn0gYlxuICogQHJldHVybiB7aW50ZWdlcn0gLTEsIDAgb3IgMVxuICogQHNlZSBNb25zdGVyLlV0aWwuQ29tcGFyYXRvclxuICovXG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Q29tcGFyYXRvcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS91dGlsL2NvbXBhcmF0b3IubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0NvbXBhcmF0b3InLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnY3JlYXRlIG5ldyBpbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIGNvbXBhcmF0b3Igb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkpLnRvLmJlLmEoJ29iamVjdCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIGNvbXBhcmF0b3Igb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIH0pKS50by5iZS5hKCdvYmplY3QnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBUeXBlRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IENvbXBhcmF0b3IodHJ1ZSkpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBDb21wYXJhdG9yKFwidGVzdFwiKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2VxdWFsKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIFwidGVzdFwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbNS4xLCA1LCBmYWxzZV0sXG4gICAgICAgICAgICBbNS4xLCA1LjEsIHRydWVdLFxuICAgICAgICAgICAgW3RydWUsIHRydWUsIHRydWVdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFstNCwgLTQsIHRydWVdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkuZXF1YWwoYSwgYikpLmlzLmVxdWFsKGMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdlcXVhbCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCB0cnVlXSxcbiAgICAgICAgICAgIFsndGVzdDEnLCA1XSxcbiAgICAgICAgICAgIFsndGVzdDEnLCBudWxsXSxcbiAgICAgICAgICAgIFsndGVzdDEnLCBwYXJzZUludChcImFcIildLFxuICAgICAgICAgICAgW2ZhbHNlLCA1XSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIG51bGxdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgY29tcGFyZSAnICsgYSArICcgYW5kICcgKyBiICsgJyB0aHJvdyBUeXBlRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBDb21wYXJhdG9yKCkuZXF1YWwoYSwgYikpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdncmVhdGVyVGhhbigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBcInRlc3RcIiwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LCB0cnVlXSxcbiAgICAgICAgICAgIFs1LjEsIDUuMSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgWy00LCAtNCwgZmFsc2VdLFxuICAgICAgICAgICAgWy00LCA0LCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgY29tcGFyZSAnICsgYSArICcgYW5kICcgKyBiICsgJyByZXR1cm4gJyArIGMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKS5ncmVhdGVyVGhhbihhLCBiKSkuaXMuZXF1YWwoYylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3JldmVyc2UoKS5ncmVhdGVyVGhhbigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBcInRlc3RcIiwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LCB0cnVlXSxcbiAgICAgICAgICAgIFs1LjEsIDUuMSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgWy00LCAtNCwgZmFsc2VdLFxuICAgICAgICAgICAgWy00LCA0LCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgY29tcGFyZSAnICsgYSArICcgYW5kICcgKyBiICsgJyByZXR1cm4gJyArIGMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKS5yZXZlcnNlKCkuZ3JlYXRlclRoYW4oYSwgYikpLmlzLmVxdWFsKGMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdncmVhdGVyVGhhbk9yRXF1YWwoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LjEsIHRydWVdLFxuICAgICAgICAgICAgW3RydWUsIHRydWUsIHRydWVdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFstNCwgLTQsIHRydWVdLFxuICAgICAgICAgICAgWy00LCA0LCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgY29tcGFyZSAnICsgYSArICcgYW5kICcgKyBiICsgJyByZXR1cm4gJyArIGMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKS5ncmVhdGVyVGhhbk9yRXF1YWwoYSwgYikpLmlzLmVxdWFsKGMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdsZXNzVGhhbigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBcInRlc3RcIiwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LCB0cnVlXSxcbiAgICAgICAgICAgIFs1LjEsIDUuMSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgWy00LCAtNCwgZmFsc2VdLFxuICAgICAgICAgICAgWy00LCA0LCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgY29tcGFyZSAnICsgYSArICcgYW5kICcgKyBiICsgJyByZXR1cm4gJyArIGMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKS5sZXNzVGhhbihhLCBiKSkuaXMuZXF1YWwoYylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50YXRpb25zJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gLi4uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkubGVzc1RoYW5PckVxdWFsKDIsIDUpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkuZ3JlYXRlclRoYW4oNCwgMikpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKS5lcXVhbCg0LCA0KSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmVxdWFsKDQsIDUpKS50by5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG5cblxuICAgICAgICBpdCgnc2hvdWxkIHJ1biB3aXRoIG93biBmdW5jdGlvbiAuLi4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICBpZiAoYS52ID09PSBiLnYpIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIHJldHVybiBhLnYgPCBiLnYgPyAtMSA6IDE7XG4gICAgICAgICAgICB9KS5lcXVhbCh7djogMn0sIHt2OiAyfSkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2xlc3NUaGFuT3JFcXVhbCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBcInRlc3RcIiwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LCB0cnVlXSxcbiAgICAgICAgICAgIFs1LjEsIDUuMSwgdHJ1ZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgWy00LCAtNCwgdHJ1ZV0sXG4gICAgICAgICAgICBbLTQsIDQsIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb21wYXJlICcgKyBhICsgJyBhbmQgJyArIGIgKyAnIHJldHVybiAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmxlc3NUaGFuT3JFcXVhbChhLCBiKSkuaXMuZXF1YWwoYylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgZGVlcEZyZWV6ZSB9O1xuXG4vKipcbiAqIERlZXAgZnJlZXplIGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9iamVjdCBvYmplY3QgdG8gYmUgZnJlZXplXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQHJldHVybiB7b2JqZWN0fVxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGRlZXBGcmVlemUob2JqZWN0KSB7XG5cdHZhbGlkYXRlT2JqZWN0KG9iamVjdCk7XG5cblx0Ly8gUmV0cmlldmUgdGhlIGRlZmluZWQgcHJvcGVydHkgbmFtZXMgb2YgdGhlIG9iamVjdFxuXHRsZXQgcHJvcE5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KTtcblxuXHQvLyBGcmVlemUgcHJvcGVydGllcyBiZWZvcmUgZnJlZXppbmcgeW91cnNlbGZcblx0Zm9yIChjb25zdCBuYW1lIG9mIHByb3BOYW1lcykge1xuXHRcdGNvbnN0IHZhbHVlID0gb2JqZWN0W25hbWVdO1xuXG5cdFx0b2JqZWN0W25hbWVdID1cblx0XHRcdHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiA/IGRlZXBGcmVlemUodmFsdWUpIDogdmFsdWU7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0LmZyZWV6ZShvYmplY3QpO1xufVxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2RlZXBGcmVlemV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdXRpbC9mcmVlemUubWpzXCI7XG5cblxuZGVzY3JpYmUoJ2RlZXBGcmVlemUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnZGVlcEZyZWV6ZSBhbiBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmcmVlemUgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgb2JqMSA9IHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGM6MVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IG9iajIgPSB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjOjJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGV4cGVjdChvYmoyKS50by5ub3QuZXFsKG9iajEpXG4gICAgICAgICAgICBvYmoxLmEuYi5jID0gMjtcbiAgICAgICAgICAgIGV4cGVjdChvYmoyKS50by5lcWwob2JqMSk7XG5cbiAgICAgICAgICAgIGNvbnN0IG9iajFGcmVlemVkID0gZGVlcEZyZWV6ZShvYmoxKTtcblxuICAgICAgICAgICAgZXhwZWN0KG9iajIpLnRvLmVxbChvYmoxRnJlZXplZCk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZGUvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2ZyZWV6ZVxuICAgICAgICAgICAgICAgIC8vIG5vIGNoYW5nZSB0byB0aGUgb2JqZWN0LCBleGNlcHRpb24gZGVwZW5kcyBvbiBtb2RlIChzdHJpY3QgRVMgMjAxNSwgZXRjKVxuICAgICAgICAgICAgICAgIG9iajFGcmVlemVkLmEuYi5jID0gMyAgICBcbiAgICAgICAgICAgIH0gY2F0Y2ggKF8pIHtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleHBlY3Qob2JqMikudG8uZXFsKG9iajFGcmVlemVkKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7Y2xvbmV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCdDbG9uZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGNsYXNzIEEge1xuICAgICAgICBjb25zdHJ1Y3RvcihiKSB7XG4gICAgICAgICAgICB0aGlzLmIgPSBiXG4gICAgICAgIH1cblxuICAgICAgICBhKCkge1xuXG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgY2xhc3MgQiB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGIpIHtcbiAgICAgICAgICAgIHRoaXMuYiA9IGJcbiAgICAgICAgfVxuXG4gICAgICAgIGEoKSB7XG5cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgZ2V0Q2xvbmUoKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJET05FXCJcbiAgICAgICAgfVxuICAgICAgICBcbiAgICB9XG5cbiAgICBkZXNjcmliZSgnLmNsb25lKEIpIHdpdGggZ2V0Q2xvbmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCcuY2xvbmUoQikgc2hvdWxkIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBiID0gbmV3IEIoe1xuICAgICAgICAgICAgICAgIHg6IHtcbiAgICAgICAgICAgICAgICAgICAgeTogMSwgZDogbmV3IEEoMSksIHo6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IHIgPSBjbG9uZShiKTtcbiAgICAgICAgICAgIGV4cGVjdChiKS50by5iZS5pbnN0YW5jZU9mKEIpXG4gICAgICAgICAgICBleHBlY3Qocikubm90LmVxdWFsKGIpO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KHIpKS5lcXVhbChKU09OLnN0cmluZ2lmeSgnRE9ORScpKTtcblxuICAgICAgICB9KTtcbiAgICB9KVxuICAgIFxuICAgIGRlc2NyaWJlKCcuY2xvbmUoQSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCcuY2xvbmUoQSkgc2hvdWxkIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBhID0gbmV3IEEoe1xuICAgICAgICAgICAgICAgIHg6IHtcbiAgICAgICAgICAgICAgICAgICAgeTogMSwgZDogbmV3IEEoMSksIHo6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IGIgPSBjbG9uZShhKTtcbiAgICAgICAgICAgIGV4cGVjdChhKS50by5iZS5pbnN0YW5jZU9mKEEpXG4gICAgICAgICAgICBleHBlY3QoYikudG8uYmUuaW5zdGFuY2VPZihBKVxuICAgICAgICAgICAgZXhwZWN0KGIpLm5vdC5lcXVhbChhKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShhKSkuZXF1YWwoSlNPTi5zdHJpbmdpZnkoYikpO1xuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICAvLyBub2RlanMgZG9lcyBub3QgaGF2ZSBhIERPTVxuICAgIGlmICh0eXBlb2YgRG9jdW1lbnRGcmFnbWVudCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBkZXNjcmliZSgnLmNsb25lKERvY3VtZW50RnJhZ21lbnQpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJy5jbG9uZShEb2N1bWVudEZyYWdtZW50KSBzaG91bGQgc2FtZSBEb2N1bWVudEZyYWdtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBhID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICAgICAgICAgIGxldCBiID0gY2xvbmUoYSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGIpLmVxdWFsKGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZGVzY3JpYmUoJy5jbG9uZShudWxsKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gdHlwZW9mIG51bGwgcmVzdWx0cyBpbiAnb2JqZWN0Jy4gIGh0dHBzOi8vMmFsaXR5LmNvbS8yMDEzLzEwL3R5cGVvZi1udWxsLmh0bWxcbiAgICAgICAgaXQoJy5jbG9uZShudWxsKSBzaG91bGQgIG51bGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYSA9IG51bGxcbiAgICAgICAgICAgIGxldCBiID0gY2xvbmUoYSk7XG4gICAgICAgICAgICBleHBlY3QoYikuZXF1YWwoYSk7XG4gICAgICAgICAgICBleHBlY3QoYikudG8uYmUubnVsbDtcbiAgICAgICAgICAgIGV4cGVjdChhKS50by5iZS5udWxsO1xuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJy5jbG9uZSh1bmRlZmluZWQpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnLmNsb25lKHVuZGVmaW5lZCkgc2hvdWxkICB1bmRlZmluZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYSA9IHVuZGVmaW5lZFxuICAgICAgICAgICAgbGV0IGIgPSBjbG9uZShhKTtcbiAgICAgICAgICAgIGV4cGVjdChhID09PSBiKS50by5iZS50cnVlXG4gICAgICAgICAgICBleHBlY3QodHlwZW9mIGIgPT09ICd1bmRlZmluZWQnKS50by5iZS50cnVlXG4gICAgICAgICAgICBleHBlY3QoYSA9PT0gdW5kZWZpbmVkKS50by5iZS50cnVlXG4gICAgICAgICAgICBleHBlY3QoYiA9PT0gdW5kZWZpbmVkKS50by5iZS50cnVlXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnLmNsb25lKG9iamVjdCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJy5jbG9uZSh7fSkgc2hvdWxkICBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYSA9IHt9XG4gICAgICAgICAgICBsZXQgYiA9IGNsb25lKGEpO1xuICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBiID09PSAnb2JqZWN0JykudG8uYmUudHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnLmNsb25lKHt4OjF9KSBzaG91bGQgIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBhID0ge3g6IDF9XG4gICAgICAgICAgICBsZXQgYiA9IGNsb25lKGEpO1xuICAgICAgICAgICAgZXhwZWN0KGEueCkuaXMuZXF1YWwoYi54KVxuICAgICAgICB9KTtcbiAgICB9KVxuICAgIGRlc2NyaWJlKCcuY2xvbmUoZnVuY3Rpb24pJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCcuY2xvbmUoZnVuY3Rpb24pIHNob3VsZCAgZnVuY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgYSA9ICgpID0+IHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBiID0gY2xvbmUoYSk7XG4gICAgICAgICAgICBleHBlY3QodHlwZW9mIGIgPT09ICdmdW5jdGlvbicpLnRvLmJlLnRydWVcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJy5jbG9uZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCAnc3RyaW5nJ10sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCAndW5kZWZpbmVkJ10sXG4gICAgICAgICAgICBbbnVsbCwgJ29iamVjdCddLCAvLyB0eXBlb2YgbnVsbCByZXN1bHRzIGluICdvYmplY3QnLiAgaHR0cHM6Ly8yYWxpdHkuY29tLzIwMTMvMTAvdHlwZW9mLW51bGwuaHRtbFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sICdmdW5jdGlvbiddLFxuICAgICAgICAgICAgWzIsICdudW1iZXInXSxcbiAgICAgICAgICAgIFtmYWxzZSwgJ2Jvb2xlYW4nXSxcbiAgICAgICAgICAgIFt0cnVlLCAnYm9vbGVhbiddLFxuICAgICAgICAgICAgWzQuNSwgJ251bWJlciddLFxuICAgICAgICAgICAgW3t9LCAnb2JqZWN0J10sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCAnb2JqZWN0J10sIC8vIGFycmF5IGlzdCBhdWNoIHR5cGUgb2JqZWN0XG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCAnc3ltYm9sJ10sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgICAgICBpdCgnLmNsb25lKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcpIHNob3VsZCAgJyArIGIgKyAnICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgYyA9IGNsb25lKGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgYykuaXMuZXF1YWwoYik7XG4gICAgICAgICAgICB9KTtcblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxufSk7XG5cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgSGFuZGxlciB9IGZyb20gXCIuLi9oYW5kbGVyLm1qc1wiO1xuaW1wb3J0IHsgTG9nRW50cnkgfSBmcm9tIFwiLi4vbG9nZW50cnkubWpzXCI7XG5pbXBvcnQgeyBUUkFDRSwgV0FSTiwgREVCVUcsIEVSUk9SLCBGQVRBTCwgSU5GTyB9IGZyb20gXCIuLi9sb2dnZXIubWpzXCI7XG5cbmV4cG9ydCB7IENvbnNvbGVIYW5kbGVyIH07XG5cbi8qKlxuICogWW91IGNhbiBjcmVhdGUgYW4gb2JqZWN0IG9mIHRoZSBjbGFzcyBzaW1wbHkgYnkgdXNpbmcgdGhlIG5hbWVzcGFjZSBgbmV3IE1vbnN0ZXIuTG9nZ2luZy5IYW5kbGVyLkNvbnNvbGVIYW5kbGVyKClgLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5jbGFzcyBDb25zb2xlSGFuZGxlciBleHRlbmRzIEhhbmRsZXIge1xuXHQvKipcblx0ICogVGhpcyBpcyB0aGUgY2VudHJhbCBsb2cgZnVuY3Rpb24uIHRoaXMgbWV0aG9kIG11c3QgYmVcblx0ICogb3ZlcndyaXR0ZW4gYnkgZGVyaXZlZCBoYW5kbGVycyB3aXRoIHRoZWlyIG93biBsb2dpYy5cblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHtMb2dFbnRyeX0gZW50cnlcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGxvZyhlbnRyeSkge1xuXHRcdGlmIChzdXBlci5sb2coZW50cnkpKSB7XG5cdFx0XHRjb25zdCBjb25zb2xlID0gZ2V0R2xvYmFsT2JqZWN0KFwiY29uc29sZVwiKTtcblx0XHRcdGlmICghY29uc29sZSkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRpZiAoIWNvbnNvbGUuZXJyb3IpIGNvbnNvbGUuZXJyb3IgPSBjb25zb2xlLmxvZztcblx0XHRcdGlmICghY29uc29sZS53YXJuKSBjb25zb2xlLndhcm4gPSBjb25zb2xlLmxvZztcblxuXHRcdFx0c3dpdGNoIChlbnRyeS5nZXRMb2dMZXZlbCgpKSB7XG5cdFx0XHRcdGNhc2UgVFJBQ0U6XG5cdFx0XHRcdGNhc2UgREVCVUc6XG5cdFx0XHRcdGNhc2UgSU5GTzpcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhlbnRyeS50b1N0cmluZygpKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBGQVRBTDpcblx0XHRcdFx0Y2FzZSBFUlJPUjpcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVudHJ5LnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFdBUk46XG5cdFx0XHRcdFx0Y29uc29sZS53YXJuKGVudHJ5LnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGVudHJ5LnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZUludGVnZXIgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBMb2dFbnRyeSB9IGZyb20gXCIuL2xvZ2VudHJ5Lm1qc1wiO1xuaW1wb3J0IHsgQUxMLCBERUJVRywgRVJST1IsIEZBVEFMLCBJTkZPLCBPRkYsIFRSQUNFLCBXQVJOIH0gZnJvbSBcIi4vbG9nZ2VyLm1qc1wiO1xuXG5leHBvcnQgeyBIYW5kbGVyIH07XG5cbi8qKlxuICogVGhlIGxvZyBoYW5kbGVyIGlzIHRoZSBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgbG9nIGVudHJpZXMgYW5kIHRoZSBsb2cgbGlzdGVuZXJzLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5jbGFzcyBIYW5kbGVyIGV4dGVuZHMgQmFzZSB7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHQvKipcblx0XHQgKiBMb2dsZXZlbFxuXHRcdCAqXG5cdFx0ICogQHR5cGUge2ludGVnZXJ9XG5cdFx0ICovXG5cdFx0dGhpcy5sb2dsZXZlbCA9IE9GRjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIHRoZSBjZW50cmFsIGxvZyBmdW5jdGlvbi4gdGhpcyBtZXRob2QgbXVzdCBiZVxuXHQgKiBvdmVyd3JpdHRlbiBieSBkZXJpdmVkIGhhbmRsZXJzIHdpdGggdGhlaXIgb3duIGxvZ2ljLlxuXHQgKlxuXHQgKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuXHQgKlxuXHQgKiBAcGFyYW0ge0xvZ0VudHJ5fSBlbnRyeVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0bG9nKGVudHJ5KSB7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZShlbnRyeSwgTG9nRW50cnkpO1xuXG5cdFx0aWYgKHRoaXMubG9nbGV2ZWwgPCBlbnRyeS5nZXRMb2dMZXZlbCgpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogc2V0IGxvZ2xldmVsXG5cdCAqXG5cdCAqIEBwYXJhbSB7aW50ZWdlcn0gbG9nbGV2ZWxcblx0ICogQHJldHVybiB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRMb2dMZXZlbChsb2dsZXZlbCkge1xuXHRcdHZhbGlkYXRlSW50ZWdlcihsb2dsZXZlbCk7XG5cdFx0dGhpcy5sb2dsZXZlbCA9IGxvZ2xldmVsO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGdldCBsb2dsZXZlbFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtpbnRlZ2VyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdGdldExvZ0xldmVsKCkge1xuXHRcdHJldHVybiB0aGlzLmxvZ2xldmVsO1xuXHR9XG5cblx0LyoqXG5cdCAqICBTZXQgbG9nIGxldmVsIHRvIEFsbFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtIYW5kbGVyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdHNldEFsbCgpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKEFMTCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGxvZyBsZXZlbCB0byBUcmFjZVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtIYW5kbGVyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdHNldFRyYWNlKCkge1xuXHRcdHRoaXMuc2V0TG9nTGV2ZWwoVFJBQ0UpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBsb2cgbGV2ZWwgdG8gRGVidWdcblx0ICpcblx0ICogQHJldHVybiB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXREZWJ1ZygpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKERFQlVHKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgbG9nIGxldmVsIHRvIEluZm9cblx0ICpcblx0ICogQHJldHVybiB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRJbmZvKCkge1xuXHRcdHRoaXMuc2V0TG9nTGV2ZWwoSU5GTyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGxvZyBsZXZlbCB0byBXYXJuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3VuZGVmaW5lZH1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRXYXJuKCkge1xuXHRcdHRoaXMuc2V0TG9nTGV2ZWwoV0FSTik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGxvZyBsZXZlbCB0byBFcnJvclxuXHQgKlxuXHQgKiBAcmV0dXJuIHtIYW5kbGVyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdHNldEVycm9yKCkge1xuXHRcdHRoaXMuc2V0TG9nTGV2ZWwoRVJST1IpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBsb2cgbGV2ZWwgdG8gRmF0YWxcblx0ICpcblx0ICogQHJldHVybiB7SGFuZGxlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRzZXRGYXRhbCgpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKEZBVEFMKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgbG9nIGxldmVsIHRvIE9mZlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtIYW5kbGVyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdHNldE9mZigpIHtcblx0XHR0aGlzLnNldExvZ0xldmVsKE9GRik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUludGVnZXIgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IExvZ0VudHJ5IH07XG5cbi8qKlxuICogQSBsb2cgZW50cnkgZm9yIHRoZSBsb2dnZXJcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgTG9nRW50cnkgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7SW50ZWdlcn0gbG9nbGV2ZWxcblx0ICogQHBhcmFtIHsuLi4qfSBhcmdzXG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihsb2dsZXZlbCwgLi4uYXJncykge1xuXHRcdHN1cGVyKCk7XG5cdFx0dmFsaWRhdGVJbnRlZ2VyKGxvZ2xldmVsKTtcblxuXHRcdHRoaXMubG9nbGV2ZWwgPSBsb2dsZXZlbDtcblx0XHR0aGlzLmFyZ3VtZW50cyA9IGFyZ3M7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7aW50ZWdlcnJ9XG5cdCAqL1xuXHRnZXRMb2dMZXZlbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5sb2dsZXZlbDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHthcnJheX1cblx0ICovXG5cdGdldEFyZ3VtZW50cygpIHtcblx0XHRyZXR1cm4gdGhpcy5hcmd1bWVudHM7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBIYW5kbGVyIH0gZnJvbSBcIi4vaGFuZGxlci5tanNcIjtcbmltcG9ydCB7IExvZ0VudHJ5IH0gZnJvbSBcIi4vbG9nZW50cnkubWpzXCI7XG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7XG5cdHZhbGlkYXRlSW50ZWdlcixcblx0dmFsaWRhdGVPYmplY3QsXG5cdHZhbGlkYXRlU3RyaW5nLFxufSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IExvZ2dlciwgQUxMLCBUUkFDRSwgREVCVUcsIElORk8sIFdBUk4sIEVSUk9SLCBGQVRBTCwgT0ZGIH07XG5cbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgQUxMID0gMjU1O1xuLyoqXG4gKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBUUkFDRSA9IDY0O1xuLyoqXG4gKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBERUJVRyA9IDMyO1xuLyoqXG4gKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBJTkZPID0gMTY7XG4vKipcbiAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkZcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IFdBUk4gPSA4O1xuLyoqXG4gKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBFUlJPUiA9IDQ7XG4vKipcbiAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkZcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IEZBVEFMID0gMjtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgT0ZGID0gMDtcblxuLyoqXG4gKiBUaGUgbG9nZ2VyIGlzIGEgY2xhc3MgdGhhdCB0YWtlcyBjYXJlIG9mIGxvZ2dpbmcuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIExvZ2dlciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5oYW5kbGVyID0gbmV3IFNldCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7SGFuZGxlcn0gaGFuZGxlclxuXHQgKiBAcmV0dXJuIHtMb2dnZXJ9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgaGFuZGxlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIEhhbmRsZXJcblx0ICovXG5cdGFkZEhhbmRsZXIoaGFuZGxlcikge1xuXHRcdHZhbGlkYXRlT2JqZWN0KGhhbmRsZXIpO1xuXHRcdGlmICghKGhhbmRsZXIgaW5zdGFuY2VvZiBIYW5kbGVyKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGhhbmRsZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBIYW5kbGVyXCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuaGFuZGxlci5hZGQoaGFuZGxlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtIYW5kbGVyfSBoYW5kbGVyXG5cdCAqIEByZXR1cm4ge0xvZ2dlcn1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBoYW5kbGVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgSGFuZGxlclxuXHQgKi9cblx0cmVtb3ZlSGFuZGxlcihoYW5kbGVyKSB7XG5cdFx0dmFsaWRhdGVPYmplY3QoaGFuZGxlcik7XG5cdFx0aWYgKCEoaGFuZGxlciBpbnN0YW5jZW9mIEhhbmRsZXIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgaGFuZGxlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIEhhbmRsZXJcIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5oYW5kbGVyLmRlbGV0ZShoYW5kbGVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2cgVHJhY2UgbWVzc2FnZVxuXHQgKlxuXHQgKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJuIHtMb2dnZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0bG9nVHJhY2UoLi4uYXJncykge1xuXHRcdGlmICh0eXBlb2YgYXJncyAhPT0gXCJvYmplY3RcIiB8fCBhcmdzWzBdID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3RcIik7XG5cdFx0fVxuXG5cdFx0dHJpZ2dlckxvZy5hcHBseSh0aGlzLCBbVFJBQ0UsIC4uLmFyZ3NdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2cgRGVidWcgbWVzc2FnZVxuXHQgKlxuXHQgKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJuIHtMb2dnZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0bG9nRGVidWcoLi4uYXJncykge1xuXHRcdGlmICh0eXBlb2YgYXJncyAhPT0gXCJvYmplY3RcIiB8fCBhcmdzWzBdID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3RcIik7XG5cdFx0fVxuXG5cdFx0dHJpZ2dlckxvZy5hcHBseSh0aGlzLCBbREVCVUcsIC4uLmFyZ3NdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2cgSW5mbyBtZXNzYWdlXG5cdCAqXG5cdCAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkYgIChBTEwgPSAweGZmO09GRiA9IDB4MDA7XG5cdCAqXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYXJndW1lbnRzXG5cdCAqIEByZXR1cm4ge0xvZ2dlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRsb2dJbmZvKC4uLmFyZ3MpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdH1cblxuXHRcdHRyaWdnZXJMb2cuYXBwbHkodGhpcywgW0lORk8sIC4uLmFyZ3NdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2cgV2FybiBtZXNzYWdlXG5cdCAqXG5cdCAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkYgIChBTEwgPSAweGZmO09GRiA9IDB4MDA7XG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYXJndW1lbnRzXG5cdCAqIEByZXR1cm4ge0xvZ2dlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRsb2dXYXJuKC4uLmFyZ3MpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0XCIpO1xuXHRcdH1cblxuXHRcdHRyaWdnZXJMb2cuYXBwbHkodGhpcywgW1dBUk4sIC4uLmFyZ3NdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2cgRXJyb3IgbWVzc2FnZVxuXHQgKlxuXHQgKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJuIHtMb2dnZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0bG9nRXJyb3IoLi4uYXJncykge1xuXHRcdGlmICh0eXBlb2YgYXJncyAhPT0gXCJvYmplY3RcIiB8fCBhcmdzWzBdID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3RcIik7XG5cdFx0fVxuXG5cdFx0dHJpZ2dlckxvZy5hcHBseSh0aGlzLCBbRVJST1IsIC4uLmFyZ3NdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2cgRmF0YWwgbWVzc2FnZVxuXHQgKlxuXHQgKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFyZ3VtZW50c1xuXHQgKiBAcmV0dXJuIHtMb2dnZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0bG9nRmF0YWwoLi4uYXJncykge1xuXHRcdGlmICh0eXBlb2YgYXJncyAhPT0gXCJvYmplY3RcIiB8fCBhcmdzWzBdID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3RcIik7XG5cdFx0fVxuXG5cdFx0dHJpZ2dlckxvZy5hcHBseSh0aGlzLCBbRkFUQUwsIC4uLmFyZ3NdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBMYWJlbHNcblx0ICpcblx0ICogQHBhcmFtIHtpbnRlZ2VyfSBsZXZlbFxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXRMYWJlbChsZXZlbCkge1xuXHRcdHZhbGlkYXRlSW50ZWdlcihsZXZlbCk7XG5cblx0XHRpZiAobGV2ZWwgPT09IEFMTCkgcmV0dXJuIFwiQUxMXCI7XG5cdFx0aWYgKGxldmVsID09PSBUUkFDRSkgcmV0dXJuIFwiVFJBQ0VcIjtcblx0XHRpZiAobGV2ZWwgPT09IERFQlVHKSByZXR1cm4gXCJERUJVR1wiO1xuXHRcdGlmIChsZXZlbCA9PT0gSU5GTykgcmV0dXJuIFwiSU5GT1wiO1xuXHRcdGlmIChsZXZlbCA9PT0gV0FSTikgcmV0dXJuIFwiV0FSTlwiO1xuXHRcdGlmIChsZXZlbCA9PT0gRVJST1IpIHJldHVybiBcIkVSUk9SXCI7XG5cdFx0aWYgKGxldmVsID09PSBGQVRBTCkgcmV0dXJuIFwiRkFUQUxcIjtcblx0XHRpZiAobGV2ZWwgPT09IE9GRikgcmV0dXJuIFwiT0ZGXCI7XG5cblx0XHRyZXR1cm4gXCJ1bmtub3duXCI7XG5cdH1cblxuXHQvKipcblx0ICogTGV2ZWxcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsXG5cdCAqIEByZXR1cm4ge2ludGVnZXJ9XG5cdCAqL1xuXHRnZXRMZXZlbChsYWJlbCkge1xuXHRcdHZhbGlkYXRlU3RyaW5nKGxhYmVsKTtcblxuXHRcdGlmIChsYWJlbCA9PT0gXCJBTExcIikgcmV0dXJuIEFMTDtcblx0XHRpZiAobGFiZWwgPT09IFwiVFJBQ0VcIikgcmV0dXJuIFRSQUNFO1xuXHRcdGlmIChsYWJlbCA9PT0gXCJERUJVR1wiKSByZXR1cm4gREVCVUc7XG5cdFx0aWYgKGxhYmVsID09PSBcIklORk9cIikgcmV0dXJuIElORk87XG5cdFx0aWYgKGxhYmVsID09PSBcIldBUk5cIikgcmV0dXJuIFdBUk47XG5cdFx0aWYgKGxhYmVsID09PSBcIkVSUk9SXCIpIHJldHVybiBFUlJPUjtcblx0XHRpZiAobGFiZWwgPT09IFwiRkFUQUxcIikgcmV0dXJuIEZBVEFMO1xuXHRcdGlmIChsYWJlbCA9PT0gXCJPRkZcIikgcmV0dXJuIE9GRjtcblxuXHRcdHJldHVybiAwO1xuXHR9XG59XG5cbi8qKlxuICogTG9nIHRyaWdnZXJuXG4gKlxuICogQHBhcmFtIHtpbnRlZ2VyfSBsb2dsZXZlbFxuICogQHBhcmFtIHsqfSBhcmdzXG4gKiBAcmV0dXJuIHtMb2dnZXJ9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0cmlnZ2VyTG9nKGxvZ2xldmVsLCAuLi5hcmdzKSB7XG5cdGZvciAoY29uc3QgaGFuZGxlciBvZiB0aGlzLmhhbmRsZXIpIHtcblx0XHRoYW5kbGVyLmxvZyhuZXcgTG9nRW50cnkobG9nbGV2ZWwsIGFyZ3MpKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiO1xuaW1wb3J0IHtDb25zb2xlSGFuZGxlcn0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9sb2dnaW5nL2hhbmRsZXIvY29uc29sZS5tanNcIjtcbmltcG9ydCB7TG9nRW50cnl9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dlbnRyeS5tanNcIjtcbmltcG9ydCB7VFJBQ0UsIFdBUk4sIERFQlVHLCBFUlJPUiwgRkFUQUwsIElORk99IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dnZXIubWpzXCI7XG5cbmRlc2NyaWJlKCdMb2dnaW5nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ0NvbnNvbGVIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIENvbnNvbGVIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb25zb2xlSGFuZGxlcigpKS50by5iZS5pbnN0YW5jZW9mKENvbnNvbGVIYW5kbGVyKVxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGxvZyB0byBjb25zb2xlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb25zb2xlSGFuZGxlcigpLnNldEFsbCgpLmxvZyhuZXcgTG9nRW50cnkoRkFUQUwsIFsxLCB0cnVlLCAnZmF0YWwnXSkpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGxvZyB0byBjb25zb2xlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb25zb2xlSGFuZGxlcigpLnNldEFsbCgpLmxvZyhuZXcgTG9nRW50cnkoVFJBQ0UsIFsxLCB0cnVlLCAndHJhY2UnXSkpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGxvZyB0byBjb25zb2xlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb25zb2xlSGFuZGxlcigpLnNldEFsbCgpLmxvZyhuZXcgTG9nRW50cnkoV0FSTiwgWzEsIHRydWUsICd3YXJuJ10pKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2cgdG8gY29uc29sZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKS5zZXRBbGwoKS5sb2cobmV3IExvZ0VudHJ5KERFQlVHLCBbMSwgdHJ1ZSwgJ2RlYnVnJ10pKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2cgdG8gY29uc29sZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKS5zZXRBbGwoKS5sb2cobmV3IExvZ0VudHJ5KEVSUk9SLCBbMSwgdHJ1ZSwgJ2Vycm9yJ10pKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBsb2cgdG8gY29uc29sZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29uc29sZUhhbmRsZXIoKS5zZXRBbGwoKS5sb2cobmV3IExvZ0VudHJ5KElORk8sIFsxLCB0cnVlLCAnaW5mbyddKSkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtMb2dnZXIsIE9GRiwgQUxMLCBUUkFDRSwgREVCVUcsIElORk8sIFdBUk4sIEVSUk9SLCBGQVRBTH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9sb2dnaW5nL2xvZ2dlci5tanNcIjtcblxuXG5kZXNjcmliZSgnTG9nZ2luZycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCduZXcgTG9nZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkpLnRvLmluc3RhbmNlT2YoTG9nZ2VyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnTG9nZ2VyLmxvZ1RyYWNlKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgTG9nZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2dnZXIoKS5sb2dUcmFjZShcInRlc3RcIikpLnRvLmluc3RhbmNlT2YoTG9nZ2VyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgXG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5sb2dEZWJ1ZygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkubG9nRGVidWcoXCJ0ZXN0XCIpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCdMb2dnZXIubG9nSW5mbygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkubG9nSW5mbyhcInRlc3RcIikpLnRvLmluc3RhbmNlT2YoTG9nZ2VyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgXG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5sb2dXYXJuKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgTG9nZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2dnZXIoKS5sb2dXYXJuKFwidGVzdFwiKSkudG8uaW5zdGFuY2VPZihMb2dnZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBcbiAgICBkZXNjcmliZSgnTG9nZ2VyLmxvZ0Vycm9yKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgTG9nZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2dnZXIoKS5sb2dFcnJvcihcInRlc3RcIikpLnRvLmluc3RhbmNlT2YoTG9nZ2VyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgXG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5sb2dGYXRhbCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZ2dlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkubG9nRmF0YWwoXCJ0ZXN0XCIpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCdMb2dnZXIuZ2V0TGV2ZWwoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgW1xuICAgICAgICAgICAgWydBTEwnLCBBTExdLFxuICAgICAgICAgICAgWydUUkFDRScsIFRSQUNFXSxcbiAgICAgICAgICAgIFsnREVCVUcnLCBERUJVR10sXG4gICAgICAgICAgICBbJ0lORk8nLCBJTkZPXSxcbiAgICAgICAgICAgIFsnV0FSTicsIFdBUk5dLFxuICAgICAgICAgICAgWydFUlJPUicsIEVSUk9SXSxcbiAgICAgICAgICAgIFsnRkFUQUwnLCBGQVRBTF0sXG4gICAgICAgICAgICBbJ09GRicsIE9GRl0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoYSArICcgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkuZ2V0TGV2ZWwoYSkpLnRvLmJlLmVxdWFscyhiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnTG9nZ2VyLmdldExhYmVsKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnQUxMJywgQUxMXSxcbiAgICAgICAgICAgIFsnVFJBQ0UnLCBUUkFDRV0sXG4gICAgICAgICAgICBbJ0RFQlVHJywgREVCVUddLFxuICAgICAgICAgICAgWydJTkZPJywgSU5GT10sXG4gICAgICAgICAgICBbJ1dBUk4nLCBXQVJOXSxcbiAgICAgICAgICAgIFsnRVJST1InLCBFUlJPUl0sXG4gICAgICAgICAgICBbJ0ZBVEFMJywgRkFUQUxdLFxuICAgICAgICAgICAgWydPRkYnLCBPRkZdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KGEgKyAnIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpLmdldExhYmVsKGIpKS50by5iZS5lcXVhbHMoYSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCI7XG5pbXBvcnQge0FMTCwgVFJBQ0UsIERFQlVHLCBJTkZPLCBXQVJOLCBFUlJPUiwgRkFUQUwsIE9GRn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9sb2dnaW5nL2xvZ2dlci5tanNcIjtcbmltcG9ydCB7SGFuZGxlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9sb2dnaW5nL2hhbmRsZXIubWpzXCI7XG5pbXBvcnQge0xvZ0VudHJ5fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2xvZ2dpbmcvbG9nZW50cnkubWpzXCI7XG5cbmRlc2NyaWJlKCdMb2dnaW5nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0TG9nTGV2ZWwoKS5nZXRMb2dMZXZlbCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtBTExdLCBbVFJBQ0VdLCBbREVCVUddLCBbSU5GT10sIFtXQVJOXSwgW0VSUk9SXSwgW0ZBVEFMXSwgW09GRl0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgndGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gdGhlIHNldCB2YWx1ZSAnICsgYSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldExvZ0xldmVsKGEpLmdldExvZ0xldmVsKCkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnSGFuZGxlci5sb2coKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkubG9nKG5ldyBMb2dFbnRyeSgwLCBcInRlc3RcIikpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdIYW5kbGVyLmxvZygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBoYW5kbGVyO1xuXG4gICAgICAgIGNsYXNzIFRlc3RIYW5kbGVyIGV4dGVuZHMgSGFuZGxlciB7XG4gICAgICAgICAgICBsb2coZW50cnkpIHtcbiAgICAgICAgICAgICAgICBzdXBlci5sb2coZW50cnkpO1xuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBoYW5kbGVyID0gbmV3IFRlc3RIYW5kbGVyKCk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkubG9nKG5ldyBMb2dFbnRyeSgwLCBcInRlc3RcIikpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmxvZygpIHdpdGggbG9nbGV2ZWwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IFRlc3RIYW5kbGVyO1xuXG4gICAgICAgIGJlZm9yZSgoKSA9PiB7XG4gICAgICAgICAgICBUZXN0SGFuZGxlciA9IGNsYXNzIGV4dGVuZHMgSGFuZGxlciB7XG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbHMgPSAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxvZyhsb2dsZXZlbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3VwZXIubG9nKGxvZ2xldmVsKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxscysrXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBbIC8vIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkYgIChBTEwgPSAweGZmO09GRiA9IDB4MDA7XG4gICAgICAgICAgICBbQUxMLCA2XSxcbiAgICAgICAgICAgIFtUUkFDRSwgNl0sXG4gICAgICAgICAgICBbREVCVUcsIDVdLFxuICAgICAgICAgICAgW0lORk8sIDRdLFxuICAgICAgICAgICAgW1dBUk4sIDNdLFxuICAgICAgICAgICAgW0VSUk9SLCAyXSxcbiAgICAgICAgICAgIFtGQVRBTCwgMV0sXG4gICAgICAgICAgICBbT0ZGLCAwXVxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5sb2coJyArIGEgKyAnKSBzaG91bGQgbG9nICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGhhbmRsZXIgPSBuZXcgVGVzdEhhbmRsZXIoKS5zZXRMb2dMZXZlbChhKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmxvZyhuZXcgTG9nRW50cnkoVFJBQ0UpKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmxvZyhuZXcgTG9nRW50cnkoREVCVUcpKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmxvZyhuZXcgTG9nRW50cnkoSU5GTykpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIubG9nKG5ldyBMb2dFbnRyeShXQVJOKSk7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KEVSUk9SKSk7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KEZBVEFMKSk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoaGFuZGxlci5jYWxscykuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldExvZ0xldmVsKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldExvZ0xldmVsKEFMTCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuZ2V0TG9nTGV2ZWwoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ25ldyBsb2dnZXIgc2hvdWxkIGJlIDAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5nZXRMb2dMZXZlbCgpKS50by5iZS5lcXVhbChPRkYpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldEFsbCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnIHNob3VsZCBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRBbGwoKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0VHJhY2UoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ25ldyBsb2dnZXIgc2hvdWxkIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldFRyYWNlKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldERlYnVnKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCcgc2hvdWxkIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldERlYnVnKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldEluZm8oKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuc2V0SW5mbygpKS50by5pbnN0YW5jZU9mKEhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXRXYXJuKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCcgc2hvdWxkIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldFdhcm4oKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0RXJyb3IoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuc2V0RXJyb3IoKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0RmF0YWwoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuc2V0RmF0YWwoKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0T2ZmKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldE9mZigpKS50by5pbnN0YW5jZU9mKEhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtMb2dFbnRyeX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9sb2dnaW5nL2xvZ2VudHJ5Lm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdMb2cnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnbmV3IExvZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBMb2cnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IExvZ0VudHJ5KDEsICdhJywgJ2InLCAnYycpKS50by5pbnN0YW5jZU9mKExvZ0VudHJ5KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnTG9nLmxvZ2xldmVsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBsb2c7XG5cbiAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsb2cgPSBuZXcgTG9nRW50cnkoMSwgZmFsc2UsICd0ZXN0JywgOTksIHthOiB0cnVlfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gbG9nbGV2ZWwgMScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChsb2cuZ2V0TG9nTGV2ZWwoKSkudG8uYmUuZXF1YWwoMSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYXJndW1lbnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGxvZy5nZXRBcmd1bWVudHMoKSkudG8uaGF2ZS5kZWVwLm1lbWJlcnMoW2ZhbHNlLCAndGVzdCcsIDk5LCB7YTogdHJ1ZX1dKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGlzSW50ZWdlciwgaXNTdHJpbmcsIGlzT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgQmFzZVdpdGhPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanNcIjtcbmltcG9ydCB7IE9ic2VydmFibGVRdWV1ZSB9IGZyb20gXCIuLi90eXBlcy9vYnNlcnZhYmxlcXVldWUubWpzXCI7XG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSBcIi4vd2ViY29ubmVjdC9tZXNzYWdlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsRnVuY3Rpb24gfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuXG5leHBvcnQgeyBXZWJDb25uZWN0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlY2VpdmVRdWV1ZVN5bWJvbCA9IFN5bWJvbChcInJlY2VpdmVRdWV1ZVwiKTtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHNlbmRRdWV1ZVN5bWJvbCA9IFN5bWJvbChcInNlbmRRdWV1ZVwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqXG4gKiBoaW50OiB0aGlzIG5hbWUgaXMgdXNlZCBpbiB0aGUgdGVzdHMuIGlmIHlvdSB3YW50IHRvIGNoYW5nZSBpdCwgcGxlYXNlIGNoYW5nZSBpdCBpbiB0aGUgdGVzdHMgYXMgd2VsbC5cbiAqL1xuY29uc3QgY29ubmVjdGlvblN5bWJvbCA9IFN5bWJvbChcImNvbm5lY3Rpb25cIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG1hbnVhbENsb3NlU3ltYm9sID0gU3ltYm9sKFwibWFudWFsQ2xvc2VcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzY0NTUuaHRtbCNzZWN0aW9uLTcuNC4xXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5jb25zdCBjb25uZWN0aW9uU3RhdHVzQ29kZSA9IHtcblx0MTAwMDogXCJOb3JtYWwgY2xvc3VyZVwiLFxuXHQxMDAxOiBcIkdvaW5nIGF3YXlcIixcblx0MTAwMjogXCJQcm90b2NvbCBlcnJvclwiLFxuXHQxMDAzOiBcIlVuc3VwcG9ydGVkIGRhdGFcIixcblx0MTAwNDogXCJSZXNlcnZlZFwiLFxuXHQxMDA1OiBcIk5vIHN0YXR1cyBjb2RlXCIsXG5cdDEwMDY6IFwiQ29ubmVjdGlvbiBjbG9zZWQgYWJub3JtYWxseVwiLFxuXHQxMDA3OiBcIkludmFsaWQgZnJhbWUgcGF5bG9hZCBkYXRhXCIsXG5cdDEwMDg6IFwiUG9saWN5IHZpb2xhdGlvblwiLFxuXHQxMDA5OiBcIlRoZSBNZXNzYWdlIGlzIHRvbyBiaWdcIixcblx0MTAxMDogXCJNYW5kYXRvcnkgZXh0ZW5zaW9uXCIsXG5cdDEwMTE6IFwiSW50ZXJuYWwgc2VydmVyIGVycm9yXCIsXG5cdDEwMTU6IFwiVExTIGhhbmRzaGFrZVwiLFxufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRoaXMge1dlYkNvbm5lY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gTm8gdXJsIGRlZmluZWQgZm9yIHdlYnNvY2tldCBkYXRhc291cmNlLlxuICovXG5mdW5jdGlvbiBjb25uZWN0U2VydmVyKHJlc29sdmUsIHJlamVjdCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRjb25zdCB1cmwgPSBzZWxmLmdldE9wdGlvbihcInVybFwiKTtcblx0aWYgKCF1cmwpIHtcblx0XHRyZWplY3QoXCJObyB1cmwgZGVmaW5lZCBmb3Igd2ViIGNvbm5lY3QuXCIpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGxldCBwcm9taXNlQWxscmVkeVJlc29sdmVkID0gZmFsc2U7XG5cblx0bGV0IGNvbm5lY3Rpb25UaW1lb3V0ID0gc2VsZi5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnRpbWVvdXRcIik7XG5cdGlmICghaXNJbnRlZ2VyKGNvbm5lY3Rpb25UaW1lb3V0KSB8fCBjb25uZWN0aW9uVGltZW91dCA8IDEwMCkge1xuXHRcdGNvbm5lY3Rpb25UaW1lb3V0ID0gNTAwMDtcblx0fVxuXG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGlmIChwcm9taXNlQWxscmVkeVJlc29sdmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHJlamVjdChuZXcgRXJyb3IoXCJDb25uZWN0aW9uIHRpbWVvdXRcIikpO1xuXHR9LCBjb25uZWN0aW9uVGltZW91dCk7XG5cblx0bGV0IHJlY29ubmVjdFRpbWVvdXQgPSBzZWxmLmdldE9wdGlvbihcImNvbm5lY3Rpb24ucmVjb25uZWN0LnRpbWVvdXRcIik7XG5cdGlmICghaXNJbnRlZ2VyKHJlY29ubmVjdFRpbWVvdXQpIHx8IHJlY29ubmVjdFRpbWVvdXQgPCAxMDAwKVxuXHRcdHJlY29ubmVjdFRpbWVvdXQgPSAxMDAwO1xuXHRsZXQgcmVjb25uZWN0QXR0ZW1wdHMgPSBzZWxmLmdldE9wdGlvbihcImNvbm5lY3Rpb24ucmVjb25uZWN0LmF0dGVtcHRzXCIpO1xuXHRpZiAoIWlzSW50ZWdlcihyZWNvbm5lY3RBdHRlbXB0cykgfHwgcmVjb25uZWN0QXR0ZW1wdHMgPCAxKVxuXHRcdHJlY29ubmVjdEF0dGVtcHRzID0gMTtcblx0bGV0IHJlY29ubmVjdEVuYWJsZWQgPSBzZWxmLmdldE9wdGlvbihcImNvbm5lY3Rpb24ucmVjb25uZWN0LmVuYWJsZWRcIik7XG5cdGlmIChyZWNvbm5lY3RFbmFibGVkICE9PSB0cnVlKSByZWNvbm5lY3RFbmFibGVkID0gZmFsc2U7XG5cblx0c2VsZlttYW51YWxDbG9zZVN5bWJvbF0gPSBmYWxzZTtcblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5yZWNvbm5lY3RDb3VudGVyKys7XG5cblx0aWYgKFxuXHRcdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0ICYmXG5cdFx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQucmVhZHlTdGF0ZSA8IDJcblx0KSB7XG5cdFx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQuY2xvc2UoKTtcblx0fVxuXHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldCA9IG51bGw7XG5cblx0Y29uc3QgV2ViU29ja2V0ID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJXZWJTb2NrZXRcIik7XG5cdGlmICghV2ViU29ja2V0KSB7XG5cdFx0cmVqZWN0KG5ldyBFcnJvcihcIldlYlNvY2tldCBpcyBub3QgYXZhaWxhYmxlXCIpKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQodXJsKTtcblxuXHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRpZiAoZXZlbnQuZGF0YSBpbnN0YW5jZW9mIEJsb2IpIHtcblx0XHRcdGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cdFx0XHRyZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRlbmRcIiwgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRzZWxmW3JlY2VpdmVRdWV1ZVN5bWJvbF0uYWRkKG5ldyBNZXNzYWdlKHJlYWRlci5yZXN1bHQpKTtcblx0XHRcdH0pO1xuXHRcdFx0cmVhZGVyLnJlYWRBc1RleHQobmV3IE1lc3NhZ2UoZXZlbnQuZGF0YSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxmW3JlY2VpdmVRdWV1ZVN5bWJvbF0uYWRkKE1lc3NhZ2UuZnJvbUpTT04oZXZlbnQuZGF0YSkpO1xuXHRcdH1cblx0fTtcblxuXHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5vbm9wZW4gPSBmdW5jdGlvbiAoKSB7XG5cdFx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5yZWNvbm5lY3RDb3VudGVyID0gMDtcblx0XHRpZiAodHlwZW9mIHJlc29sdmUgPT09IFwiZnVuY3Rpb25cIiAmJiAhcHJvbWlzZUFsbHJlZHlSZXNvbHZlZCkge1xuXHRcdFx0cHJvbWlzZUFsbHJlZHlSZXNvbHZlZCA9IHRydWU7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fVxuXHR9O1xuXG5cdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0LmNsb3NlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0aWYgKHNlbGZbbWFudWFsQ2xvc2VTeW1ib2xdKSB7XG5cdFx0XHRzZWxmW21hbnVhbENsb3NlU3ltYm9sXSA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHJlY29ubmVjdEVuYWJsZWQgJiZcblx0XHRcdHRoaXNbY29ubmVjdGlvblN5bWJvbF0ucmVjb25uZWN0Q291bnRlciA8IHJlY29ubmVjdEF0dGVtcHRzXG5cdFx0KSB7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0c2VsZi5jb25uZWN0KCk7XG5cdFx0XHR9LCByZWNvbm5lY3RUaW1lb3V0ICogdGhpc1tjb25uZWN0aW9uU3ltYm9sXS5yZWNvbm5lY3RDb3VudGVyKTtcblx0XHR9XG5cdH07XG5cblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQub25lcnJvciA9IChlcnJvcikgPT4ge1xuXHRcdGlmIChcblx0XHRcdHJlY29ubmVjdEVuYWJsZWQgJiZcblx0XHRcdHNlbGZbY29ubmVjdGlvblN5bWJvbF0ucmVjb25uZWN0Q291bnRlciA8IHJlY29ubmVjdEF0dGVtcHRzXG5cdFx0KSB7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0c2VsZi5jb25uZWN0KCk7XG5cdFx0XHR9LCByZWNvbm5lY3RUaW1lb3V0ICogdGhpc1tjb25uZWN0aW9uU3ltYm9sXS5yZWNvbm5lY3RDb3VudGVyKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHR5cGVvZiByZWplY3QgPT09IFwiZnVuY3Rpb25cIiAmJiAhcHJvbWlzZUFsbHJlZHlSZXNvbHZlZCkge1xuXHRcdFx0XHRwcm9taXNlQWxscmVkeVJlc29sdmVkID0gdHJ1ZTtcblx0XHRcdFx0cmVqZWN0KGVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8qKlxuICogVGhlIFJlc3RBUEkgaXMgYSBjbGFzcyB0aGF0IGVuYWJsZXMgYSBSRVNUIEFQSSBzZXJ2ZXIuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL25ldC93ZWJjb25uZWN0Lm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy4xLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgTG9jYWxTdG9yYWdlIGNsYXNzIGVuY2Fwc3VsYXRlcyB0aGUgYWNjZXNzIHRvIGRhdGEgb2JqZWN0cy5cbiAqL1xuY2xhc3MgV2ViQ29ubmVjdCBleHRlbmRzIEJhc2VXaXRoT3B0aW9ucyB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIG9wdGlvbnMgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSB3ZWJjb25uZWN0LlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuXHRcdFx0b3B0aW9ucyA9IHsgdXJsOiBvcHRpb25zIH07XG5cdFx0fVxuXG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cblx0XHR0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0gPSBuZXcgT2JzZXJ2YWJsZVF1ZXVlKCk7XG5cdFx0dGhpc1tzZW5kUXVldWVTeW1ib2xdID0gbmV3IE9ic2VydmFibGVRdWV1ZSgpO1xuXG5cdFx0dGhpc1tjb25uZWN0aW9uU3ltYm9sXSA9IHt9O1xuXHRcdHRoaXNbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0ID0gbnVsbDtcblx0XHR0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIgPSAwO1xuXHRcdHRoaXNbbWFudWFsQ2xvc2VTeW1ib2xdID0gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGNvbm5lY3QoKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGNvbm5lY3RTZXJ2ZXIuY2FsbCh0aGlzLCByZXNvbHZlLCByZWplY3QpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0Nvbm5lY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpc1tjb25uZWN0aW9uU3ltYm9sXT8uc29ja2V0Py5yZWFkeVN0YXRlID09PSAxO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL25ldC93ZWJjb25uZWN0XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmw9dW5kZWZpbmVkIERlZmluZXMgdGhlIHJlc291cmNlIHRoYXQgeW91IHdpc2ggdG8gZmV0Y2guXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjb25uZWN0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjb25uZWN0aW9uLnRpbWVvdXQ9NTAwMCBEZWZpbmVzIHRoZSB0aW1lb3V0IGZvciB0aGUgY29ubmVjdGlvbi5cblx0ICogQHByb3BlcnR5IHtOdW1iZXJ9IGNvbm5lY3Rpb24ucmVjb25uZWN0LnRpbWVvdXQgVGhlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB0aGUgcmVjb25uZWN0LlxuXHQgKiBAcHJvcGVydHkge051bWJlcn0gY29ubmVjdGlvbi5yZWNvbm5lY3QuYXR0ZW1wdHMgVGhlIG1heGltdW0gbnVtYmVyIG9mIHJlY29ubmVjdHMuXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbH0gY29ubmVjdGlvbi5yZWNvbm5lY3QuZW5hYmxlZCBJZiB0aGUgcmVjb25uZWN0IGlzIGVuYWJsZWQuXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR1cmw6IHVuZGVmaW5lZCxcblx0XHRcdGNvbm5lY3Rpb246IHtcblx0XHRcdFx0dGltZW91dDogNTAwMCxcblx0XHRcdFx0cmVjb25uZWN0OiB7XG5cdFx0XHRcdFx0dGltZW91dDogMTAwMCxcblx0XHRcdFx0XHRhdHRlbXB0czogMSxcblx0XHRcdFx0XHRlbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgY2xvc2VzIHRoZSBjb25uZWN0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvZGU9MTAwMF0gVGhlIGNsb3NlIGNvZGUuXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBbcmVhc29uPVwiXCJdIFRoZSBjbG9zZSByZWFzb24uXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzY0NTUuaHRtbCNzZWN0aW9uLTcuNC4xXG5cdCAqL1xuXHRjbG9zZShzdGF0dXNDb2RlLCByZWFzb24pIHtcblx0XHRpZiAoIWlzSW50ZWdlcihzdGF0dXNDb2RlKSB8fCBzdGF0dXNDb2RlIDwgMTAwMCB8fCBzdGF0dXNDb2RlID4gNDk5OSkge1xuXHRcdFx0c3RhdHVzQ29kZSA9IDEwMDA7XG5cdFx0fVxuXHRcdGlmICghaXNTdHJpbmcocmVhc29uKSkge1xuXHRcdFx0cmVhc29uID0gXCJcIjtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpc1ttYW51YWxDbG9zZVN5bWJvbF0gPSB0cnVlO1xuXHRcdFx0XHRpZiAodGhpc1tjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQpIHtcblx0XHRcdFx0XHR0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5jbG9zZShzdGF0dXNDb2RlLCByZWFzb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBvbGxzIHRoZSByZWNlaXZlIHF1ZXVlIGZvciBuZXcgbWVzc2FnZXMuXG5cdCAqXG5cdCAqIEByZXR1cm4ge01lc3NhZ2V9XG5cdCAqL1xuXHRwb2xsKCkge1xuXHRcdHJldHVybiB0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0ucG9sbCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFyZSB0aGVyZSBhbnkgbWVzc2FnZXMgaW4gdGhlIHJlY2VpdmUgcXVldWU/XG5cdCAqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRkYXRhUmVjZWl2ZWQoKSB7XG5cdFx0cmV0dXJuICF0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0uaXNFbXB0eSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBNZXNzYWdlIGZyb20gdGhlIHJlY2VpdmUgcXVldWUsIGJ1dCBkbyBub3QgcmVtb3ZlIGl0LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtPYmplY3R9XG5cdCAqL1xuXHRwZWVrKCkge1xuXHRcdHJldHVybiB0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0ucGVlaygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEF0dGFjaCBhIG5ldyBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0YXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGFjaCBhIG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHRkZXRhY2hPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHRoaXNbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5kZXRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHRyZXR1cm4gdGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdLmNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7TWVzc2FnZXxPYmplY3R9IG1lc3NhZ2Vcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHNlbmQobWVzc2FnZSkge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRpZiAodGhpc1tjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQucmVhZHlTdGF0ZSAhPT0gMSkge1xuXHRcdFx0XHRyZWplY3QoXCJ0aGUgc29ja2V0IGlzIG5vdCByZWFkeVwiKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpc1tjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeShtZXNzYWdlKSk7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gXCIuL3F1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wsIGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyTGlzdCB9IGZyb20gXCIuL29ic2VydmVybGlzdC5tanNcIjtcblxuZXhwb3J0IHsgT2JzZXJ2YWJsZVF1ZXVlIH07XG5cbi8qKlxuICogQW4gb2JzZXJ2YWJsZSBxdWV1ZSBpcyBhIGxpc3Qgb2YgaXRlbXMgdGhhdCBhcmUgcHJvY2Vzc2VkIG9uZSBhZnRlciBhbm90aGVyIChmaXJzdCBpbiwgZmlyc3Qgb3V0KS5cbiAqXG4gKiBgUXVldWUuYWRkKClgIGFuZCBgUXVldWUuY2xlYXIoKWAgbm90aWZ5IGFsbCBvYnNlcnZlcnMuXG4gKlxuICogQHNpbmNlIDMuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQW4gb2JzZXJ2YWJsZSBRdWV1ZSAoRmlmbylcbiAqL1xuY2xhc3MgT2JzZXJ2YWJsZVF1ZXVlIGV4dGVuZHMgUXVldWUge1xuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHRvYnNlcnZlcnM6IG5ldyBPYnNlcnZlckxpc3QoKSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL29ic2VydmFibGVxdWV1ZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYSBuZXcgZWxlbWVudCB0byB0aGUgZW5kIG9mIHRoZSBxdWV1ZS5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtRdWV1ZX1cblx0ICovXG5cdGFkZCh2YWx1ZSkge1xuXHRcdHN1cGVyLmFkZCh2YWx1ZSk7XG5cdFx0dGhpcy5ub3RpZnlPYnNlcnZlcnMoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZW1vdmUgYWxsIGVudHJpZXNcblx0ICpcblx0ICogQHJldHVybiB7UXVldWV9XG5cdCAqL1xuXHRjbGVhcigpIHtcblx0XHRzdXBlci5jbGVhcigpO1xuXHRcdHRoaXMubm90aWZ5T2JzZXJ2ZXJzKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQXR0YWNoIGEgbmV3IG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHRhdHRhY2hPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLm9ic2VydmVycy5hdHRhY2gob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIERldGFjaCBhIG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHRkZXRhY2hPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLm9ic2VydmVycy5kZXRhY2gob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5vdGlmeSBhbGwgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdG5vdGlmeU9ic2VydmVycygpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0ub2JzZXJ2ZXJzLm5vdGlmeSh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0Y29udGFpbnNPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5vYnNlcnZlcnMuY29udGFpbnMob2JzZXJ2ZXIpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi8uLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBNZXNzYWdlIH07XG5cbmNvbnN0IGRhdGFTeW1ib2wgPSBTeW1ib2woXCJAQGRhdGFcIik7XG5cbi8qKlxuICogVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgV2ViU29ja2V0IG1lc3NhZ2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy40LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgTWVzc2FnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgYSBXZWJTb2NrZXQgbWVzc2FnZS5cbiAqL1xuY2xhc3MgTWVzc2FnZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IGRhdGFcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3Rcblx0ICovXG5cdGNvbnN0cnVjdG9yKGRhdGEpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbZGF0YVN5bWJvbF0gPSB2YWxpZGF0ZU9iamVjdChkYXRhKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSByYXcgbWVzc2FnZS5cblx0ICpcblx0ICogQHJldHVybiB7b2JqZWN0fVxuXHQgKi9cblx0Z2V0RGF0YSgpIHtcblx0XHRyZXR1cm4gdGhpc1tkYXRhU3ltYm9sXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0dG9KU09OKCkge1xuXHRcdHJldHVybiB0aGlzW2RhdGFTeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBqc29uXG5cdCAqIEByZXR1cm4ge01lc3NhZ2V9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqL1xuXHRzdGF0aWMgZnJvbUpTT04oanNvbikge1xuXHRcdHZhbGlkYXRlU3RyaW5nKGpzb24pO1xuXHRcdHJldHVybiBuZXcgTWVzc2FnZShKU09OLnBhcnNlKGpzb24pKTtcblx0fVxufVxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1dlYkNvbm5lY3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbmV0L3dlYmNvbm5lY3QubWpzXCI7XG5pbXBvcnQge01lc3NhZ2V9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbmV0L3dlYmNvbm5lY3QvbWVzc2FnZS5tanNcIjtcbmltcG9ydCB7T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQge2luaXRXZWJTb2NrZXR9IGZyb20gXCIuLi8uLi91dGlsL3dlYnNvY2tldC5tanNcIjtcblxuY29uc3QgdGVzdFVybCA9IFwid3NzOi8vd3MucG9zdG1hbi1lY2hvLmNvbS9yYXdcIlxuXG5kZXNjcmliZSgnV2Vic29ja2V0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGRzID0gdW5kZWZpbmVkXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdFdlYlNvY2tldCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBkb25lKGUpXG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaWYgKGRzKSB7XG4gICAgICAgICAgICBkcy5jbG9zZSgpXG4gICAgICAgIH1cblxuICAgICAgICAvLyB3aXRob3V0IHRoaXMsIHRoZSBub2RlIHRlc3Qgd2lsbCBoYW5nIFxuICAgICAgICBmb3IgKGNvbnN0IHN5bSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGRzKSkge1xuICAgICAgICAgICAgaWYgKHN5bS50b1N0cmluZygpID09PSAnU3ltYm9sKGNvbm5lY3Rpb24pJykge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZHNbc3ltXT8uc29ja2V0Py50ZXJtaW5hdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgZHNbc3ltXT8uc29ja2V0Py5bJ3Rlcm1pbmF0ZSddKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkb25lKClcbiAgICB9KTtcblxuXG4gICAgaXQoJ3Nob3VsZCB0cmFuc2Zvcm0gZGF0YScsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgZHMgPSBuZXcgV2ViQ29ubmVjdCgge1xuICAgICAgICAgICAgdXJsOiB0ZXN0VXJsLFxuICAgICAgICB9KVxuXG4gICAgICAgIGRzLmNvbm5lY3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZHMuYXR0YWNoT2JzZXJ2ZXIobmV3IE9ic2VydmVyKCgpPT4ge1xuICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZHMuc2VuZCh7XG4gICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIkhlbGxvIFdvcmxkXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBkb25lKGUpXG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cbiAgICBpdCgnc2hvdWxkIGNvbm5lY3QnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBkcyA9IG5ldyBXZWJDb25uZWN0KHtcbiAgICAgICAgICAgIHVybDogdGVzdFVybCxcbiAgICAgICAgICAgIHJlY29ubmVjdDoge1xuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBkcy5jb25uZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgfSlcblxuXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgc2VuZCBtZXNzYWdlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgZHMgPSBuZXcgV2ViQ29ubmVjdCh7XG4gICAgICAgICAgICB1cmw6IHRlc3RVcmwsXG4gICAgICAgICAgICByZWNvbm5lY3Q6IHtcbiAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZHMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBkcy5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoKCk9PiB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRzLmRhdGFSZWNlaXZlZCgpKS50by5iZS50cnVlXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnID0gZHMucG9sbCgpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChtc2cpLnRvLmJlLmluc3RhbmNlT2YoTWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IG1zZy5nZXREYXRhKClcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRhdGEpLnRvLmJlLmRlZXAuZXF1YWwoe21lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIn0pXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pKVxuXG4gICAgICAgICAgICBkcy5zZW5kKHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXCJIZWxsbyBXb3JsZFwiXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBkb25lKGUpXG4gICAgICAgIH0pXG5cblxuICAgIH0pLnRpbWVvdXQoMTAwMDApO1xuXG59KTtcbiIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5cbmZ1bmN0aW9uIGluaXRXZWJTb2NrZXQoKSB7XG5cbi8vICAgIGNvbnN0IGlzQnJvd3NlciA9IHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnICYmICdbb2JqZWN0IFdpbmRvd10nID09PSB3aW5kb3cudG9TdHJpbmcuY2FsbCh3aW5kb3cpXG4gICAgY29uc3QgaXNOb2RlID0gdHlwZW9mIGdsb2JhbCA9PT0gJ29iamVjdCcgJiYgJ1tvYmplY3QgZ2xvYmFsXScgPT09IGdsb2JhbC50b1N0cmluZy5jYWxsKGdsb2JhbClcblxuXG4gICAgaWYgKCFpc05vZGUpIHtcbiAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW1wb3J0KFwid3NcIikudGhlbigod3MpID0+IHtcbiAgICAgICAgZ2V0R2xvYmFsKCkuV2ViU29ja2V0ID0gY2xhc3MgZXh0ZW5kcyB3c1snV2ViU29ja2V0J10ge1xuICAgICAgICAgICAgY29uc3RydWN0b3IodXJsLCBwcm90b2NvbHMpIHtcbiAgICAgICAgICAgICAgICBzdXBlcih1cmwsIHByb3RvY29scywge1xuICAgICAgICAgICAgICAgICAgICBoYW5kc2hha2VUaW1lb3V0OiAxMDAwLFxuICAgICAgICAgICAgICAgICAgICBtYXhQYXlsb2FkOiAxMDI0ICogMTAyNCAqIDEwMjQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgIH0pO1xuXG5cbn1cblxuZXhwb3J0IHtpbml0V2ViU29ja2V0fSIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtNZXNzYWdlfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL25ldC93ZWJjb25uZWN0L21lc3NhZ2UubWpzXCI7XG5cbmRlc2NyaWJlKCdNZXNzYWdlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgaXQoJ2NvbnN0cnVjdCB3aXRob3V0aCBwYXJhbWV0ZXJzIHNob3VsZCB0aHJvdycsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIFxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IE1lc3NhZ2UoKTtcbiAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKCdzaG91bGQgdGhyb3cnKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfVxuXG4gICAgfSlcbiAgICBcbiAgICBpdCgnZnJvbSBqc29uIHNob3VsZCAnICwgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIFwiaWRcIjogXCIxMjNcIixcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInRlc3RcIixcbiAgICAgICAgICAgIFwiZGF0YVwiOiB7XG4gICAgICAgICAgICAgICAgXCJ0ZXN0XCI6IFwidGVzdFwiXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IE1lc3NhZ2UuZnJvbUpTT04oSlNPTi5zdHJpbmdpZnkoanNvbikpO1xuICAgICAgICBjb25zdCBkYXRhID0gbWVzc2FnZS5nZXREYXRhKCk7XG4gICAgICAgIGV4cGVjdChkYXRhLmlkKS50by5lcXVhbChqc29uLmlkKTtcbiAgICAgICAgZXhwZWN0KGRhdGEudHlwZSkudG8uZXF1YWwoanNvbi50eXBlKTtcbiAgICAgICAgZXhwZWN0KGRhdGEuZGF0YSkudG8uZGVlcC5lcXVhbChqc29uLmRhdGEpO1xuICAgICAgICBkb25lKCk7XG4gICAgfSlcbiAgICBcbiAgICBpdCAoXCJ0byBqc29uIHNob3VsZFwiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBcImlkXCI6IFwiMTIzXCIsXG4gICAgICAgICAgICBcInR5cGVcIjogXCJ0ZXN0XCIsXG4gICAgICAgICAgICBcImRhdGFcIjoge1xuICAgICAgICAgICAgICAgIFwidGVzdFwiOiBcInRlc3RcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXcgTWVzc2FnZShvYmopO1xuICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5zdHJpbmdpZnkobWVzc2FnZSk7XG4gICAgICAgIGV4cGVjdChkYXRhKS50by5lcXVhbCgne1wiaWRcIjpcIjEyM1wiLFwidHlwZVwiOlwidGVzdFwiLFwiZGF0YVwiOntcInRlc3RcIjpcInRlc3RcIn19Jyk7XG4gICAgICAgIGRvbmUoKTtcbiAgICB9KVxuXG5cblxufSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFZlcnNpb24sIGdldE1vbnN0ZXJWZXJzaW9uIH07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2JqZWN0IGNvbnRhaW5zIGEgc2VtYW50aWMgdmVyc2lvbiBudW1iZXJcbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvdmVyc2lvbi0xLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBhdXRob3Igc2NodWthaSBHbWJIXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIHZlcnNpb24gb2JqZWN0IGNvbnRhaW5zIGEgc2VtYW50aWMgdmVyc2lvbiBudW1iZXJcbiAqL1xuY2xhc3MgVmVyc2lvbiBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIG1ham9yXG5cdCAqIEBwYXJhbSBtaW5vclxuXHQgKiBAcGFyYW0gcGF0Y2hcblx0ICogQHRocm93cyB7RXJyb3J9IG1ham9yIGlzIG5vdCBhIG51bWJlclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWlub3IgaXMgbm90IGEgbnVtYmVyXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBwYXRjaCBpcyBub3QgYSBudW1iZXJcblx0ICovXG5cdGNvbnN0cnVjdG9yKG1ham9yLCBtaW5vciwgcGF0Y2gpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKFxuXHRcdFx0dHlwZW9mIG1ham9yID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRtaW5vciA9PT0gdW5kZWZpbmVkICYmXG5cdFx0XHRwYXRjaCA9PT0gdW5kZWZpbmVkXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBwYXJ0cyA9IG1ham9yLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpO1xuXHRcdFx0bWFqb3IgPSBwYXJzZUludChwYXJ0c1swXSB8fCAwKTtcblx0XHRcdG1pbm9yID0gcGFyc2VJbnQocGFydHNbMV0gfHwgMCk7XG5cdFx0XHRwYXRjaCA9IHBhcnNlSW50KHBhcnRzWzJdIHx8IDApO1xuXHRcdH1cblxuXHRcdGlmIChtYWpvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtYWpvciB2ZXJzaW9uIGlzIHVuZGVmaW5lZFwiKTtcblx0XHR9XG5cblx0XHRpZiAobWlub3IgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bWlub3IgPSAwO1xuXHRcdH1cblxuXHRcdGlmIChwYXRjaCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXRjaCA9IDA7XG5cdFx0fVxuXG5cdFx0dGhpcy5tYWpvciA9IHBhcnNlSW50KG1ham9yKTtcblx0XHR0aGlzLm1pbm9yID0gcGFyc2VJbnQobWlub3IpO1xuXHRcdHRoaXMucGF0Y2ggPSBwYXJzZUludChwYXRjaCk7XG5cblx0XHRpZiAoaXNOYU4odGhpcy5tYWpvcikpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1ham9yIGlzIG5vdCBhIG51bWJlclwiKTtcblx0XHR9XG5cblx0XHRpZiAoaXNOYU4odGhpcy5taW5vcikpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pbm9yIGlzIG5vdCBhIG51bWJlclwiKTtcblx0XHR9XG5cblx0XHRpZiAoaXNOYU4odGhpcy5wYXRjaCkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInBhdGNoIGlzIG5vdCBhIG51bWJlclwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL3ZlcnNpb25cIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIGAke3RoaXMubWFqb3J9LiR7dGhpcy5taW5vcn0uJHt0aGlzLnBhdGNofWA7XG5cdH1cblxuXHQvKipcblx0ICogcmV0dXJucyAwIGlmIGVxdWFsLCAtMSBpZiB0aGUgb2JqZWN0IHZlcnNpb24gaXMgbGVzcyBhbmQgMSBpZiBncmVhdGVyXG5cdCAqIHRoYW4gdGhlIGNvbXBhcmVkIHZlcnNpb25cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8VmVyc2lvbn0gdmVyc2lvbiBWZXJzaW9uIHRvIGNvbXBhcmVcblx0ICogQHJldHVybiB7bnVtYmVyfVxuXHQgKi9cblx0Y29tcGFyZVRvKHZlcnNpb24pIHtcblx0XHRpZiAodmVyc2lvbiBpbnN0YW5jZW9mIFZlcnNpb24pIHtcblx0XHRcdHZlcnNpb24gPSB2ZXJzaW9uLnRvU3RyaW5nKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiB2ZXJzaW9uICE9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIGV4Y2VwdGlvblwiKTtcblx0XHR9XG5cblx0XHRpZiAodmVyc2lvbiA9PT0gdGhpcy50b1N0cmluZygpKSB7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHRjb25zdCBhID0gW3RoaXMubWFqb3IsIHRoaXMubWlub3IsIHRoaXMucGF0Y2hdO1xuXHRcdGNvbnN0IGIgPSB2ZXJzaW9uLnNwbGl0KFwiLlwiKTtcblx0XHRjb25zdCBsZW4gPSBNYXRoLm1heChhLmxlbmd0aCwgYi5sZW5ndGgpO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkgKz0gMSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQoYVtpXSAmJiAhYltpXSAmJiBwYXJzZUludChhW2ldKSA+IDApIHx8XG5cdFx0XHRcdHBhcnNlSW50KGFbaV0pID4gcGFyc2VJbnQoYltpXSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdChiW2ldICYmICFhW2ldICYmIHBhcnNlSW50KGJbaV0pID4gMCkgfHxcblx0XHRcdFx0cGFyc2VJbnQoYVtpXSkgPCBwYXJzZUludChiW2ldKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gMDtcblx0fVxufVxuXG5sZXQgbW9uc3RlclZlcnNpb247XG5cbi8qKlxuICogVmVyc2lvbiBvZiBtb25zdGVyXG4gKlxuICogQHJldHVybiB7VmVyc2lvbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQGF1dGhvciBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gZ2V0TW9uc3RlclZlcnNpb24oKSB7XG5cdGlmIChtb25zdGVyVmVyc2lvbiBpbnN0YW5jZW9mIFZlcnNpb24pIHtcblx0XHRyZXR1cm4gbW9uc3RlclZlcnNpb247XG5cdH1cblxuXHQvKiogZG9uJ3QgdG91Y2gsIHJlcGxhY2VkIGJ5IG1ha2Ugd2l0aCBwYWNrYWdlLmpzb24gdmVyc2lvbiAqL1xuXHRtb25zdGVyVmVyc2lvbiA9IG5ldyBWZXJzaW9uKFwiMy45Ni4xXCIpO1xuXG5cdHJldHVybiBtb25zdGVyVmVyc2lvbjtcbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtWZXJzaW9uLCBnZXRNb25zdGVyVmVyc2lvbn0gZnJvbSBcIi4uLy4uL3NvdXJjZS90eXBlcy92ZXJzaW9uLm1qc1wiO1xuXG5kZXNjcmliZSgnTW9uc3RlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcuZ2V0TW9uc3RlclZlcnNpb24oKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IG1vbnN0ZXJWZXJzaW9uXG5cbiAgICAgICAgLyoqIGRvblx1MDBCNHQgdG91Y2gsIHJlcGxhY2VkIGJ5IG1ha2Ugd2l0aCBwYWNrYWdlLmpzb24gdmVyc2lvbiAqL1xuICAgICAgICBtb25zdGVyVmVyc2lvbiA9IG5ldyBWZXJzaW9uKFwiMy45Ni4xXCIpXG5cbiAgICAgICAgbGV0IG0gPSBnZXRNb25zdGVyVmVyc2lvbigpO1xuXG4gICAgICAgIGl0KCdzaG91bGQgJyArIG1vbnN0ZXJWZXJzaW9uICsgJyBpcyAnICsgbSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG0uY29tcGFyZVRvKG1vbnN0ZXJWZXJzaW9uKSkuaXMuZXF1YWwoMCk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbn0pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgY29udmVydFRvUGl4ZWxzLCBnZXREZXZpY2VEUEkgfTtcblxuLyoqXG4gKiBTdG9yZXMgdGhlIERQSSBvZiB0aGUgZGV2aWNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKiBAc2luY2UgMy4zNC4wXG4gKiBAdHlwZSB7bnVtYmVyfGZ1bmN0aW9ufVxuICovXG5sZXQgQ1VSUkVOVF9ERVZJQ0VfRFBJID0gZnVuY3Rpb24gKCkge1xuXHRsZXQgaSA9IDA7XG5cdGZvciAoaSA9IDU2OyBpIDwgMjAwMDsgaSsrKSB7XG5cdFx0aWYgKGdldFdpbmRvdygpLm1hdGNoTWVkaWEoYChtYXgtcmVzb2x1dGlvbjogJHtpfWRwaSlgKS5tYXRjaGVzID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gaTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIERQSSBvZiB0aGUgZGV2aWNlLlxuICpcbiAqIEBzaW5jZSAzLjM0LjBcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0RGV2aWNlRFBJKCkge1xuXHQvLyBvbmx5IGNhbGwgdGhlIGZ1bmN0aW9uIG9uY2Vcblx0aWYgKHR5cGVvZiBDVVJSRU5UX0RFVklDRV9EUEkgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdENVUlJFTlRfREVWSUNFX0RQSSA9IENVUlJFTlRfREVWSUNFX0RQSSgpO1xuXHR9XG5cblx0cmV0dXJuIGdldFdpbmRvdygpLmRldmljZVBpeGVsUmF0aW8gKiBDVVJSRU5UX0RFVklDRV9EUEk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBDU1MgdmFsdWUgdG8gcGl4ZWxzLlxuICpcbiAqIEFzIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIGNvbnZlcnRUb1BpeGVscygnMWVtJykgLy8gcmV0dXJucyB0aGUgY3VycmVudCBmb250IHNpemUgaW4gcGl4ZWxzXG4gKiBjb252ZXJ0VG9QaXhlbHMoJzFyZW0nKSAvLyByZXR1cm5zIHRoZSBjdXJyZW50IHJvb3QgZm9udCBzaXplIGluIHBpeGVsc1xuICogY29udmVydFRvUGl4ZWxzKCcxcHgnKSAvLyByZXR1cm5zIDFcbiAqIGNvbnZlcnRUb1BpeGVscygnMTAwJScpIC8vIHJldHVybnMgdGhlIGN1cnJlbnQgd2lkdGggb2YgdGhlIHBhcmVudCBlbGVtZW50IGluIHBpeGVsc1xuICogYGBgXG4gKlxuICogRm9sbG93aW5nIHVuaXRzIGFyZSBzdXBwb3J0ZWQ6XG4gKiAtIHB4XG4gKiAtIGVtXG4gKiAtIHJlbVxuICogLSAlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBbcGFyZW50RWxlbWVudD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBbZm9udFNpemVFbGVtZW50PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudF1cbiAqIEByZXR1cm4ge251bWJlcn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuMzQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge0Vycm9yfSBVbnN1cHBvcnRlZCB1bml0XG4gKiBAdGhyb3dzIHtFcnJvcn0gSW52YWxpZCB2YWx1ZSBmb3JtYXRcbiAqL1xuXG5mdW5jdGlvbiBjb252ZXJ0VG9QaXhlbHMoXG5cdHZhbHVlLFxuXHRwYXJlbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRmb250U2l6ZUVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG4pIHtcblx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdGNvbnN0IHJlZ2V4ID0gL14oLT9bXFxkLl0rKSguKikkLztcblx0Y29uc3QgbWF0Y2hSZXN1bHQgPSB2YWx1ZS5tYXRjaChyZWdleCk7XG5cblx0aWYgKCFtYXRjaFJlc3VsdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWx1ZSBmb3JtYXQ6ICR7dmFsdWV9YCk7XG5cdH1cblxuXHRjb25zdCBbLCBudW0sIHVuaXRdID0gbWF0Y2hSZXN1bHQ7XG5cdGNvbnN0IG51bWJlciA9IHBhcnNlRmxvYXQobnVtKTtcblx0Y29uc3QgZHBpID0gZ2V0RGV2aWNlRFBJKCk7XG5cblx0aWYgKHVuaXQgPT09IFwicHhcIikge1xuXHRcdHJldHVybiBudW1iZXI7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJlbVwiKSB7XG5cdFx0Y29uc3QgZm9udFNpemUgPSBwYXJzZUZsb2F0KFxuXHRcdFx0d2luZG93LmdldENvbXB1dGVkU3R5bGUoZm9udFNpemVFbGVtZW50KS5mb250U2l6ZSxcblx0XHQpO1xuXHRcdHJldHVybiBudW1iZXIgKiBmb250U2l6ZTtcblx0fSBlbHNlIGlmICh1bml0ID09PSBcInJlbVwiKSB7XG5cdFx0Y29uc3Qgcm9vdEZvbnRTaXplID0gcGFyc2VGbG9hdChcblx0XHRcdHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudEVsZW1lbnQpLmZvbnRTaXplLFxuXHRcdCk7XG5cdFx0cmV0dXJuIG51bWJlciAqIHJvb3RGb250U2l6ZTtcblx0fSBlbHNlIGlmICh1bml0ID09PSBcIiVcIikge1xuXHRcdGNvbnN0IHBhcmVudFdpZHRoID0gcGFyc2VGbG9hdChcblx0XHRcdHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHBhcmVudEVsZW1lbnQpLndpZHRoLFxuXHRcdCk7XG5cdFx0cmV0dXJuIChudW1iZXIgKiBwYXJlbnRXaWR0aCkgLyAxMDA7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJpblwiKSB7XG5cdFx0cmV0dXJuIG51bWJlciAqIGRwaTtcblx0fSBlbHNlIGlmICh1bml0ID09PSBcImNtXCIpIHtcblx0XHRyZXR1cm4gKG51bWJlciAqIGRwaSkgLyAyLjU0O1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwibW1cIikge1xuXHRcdHJldHVybiAobnVtYmVyICogZHBpKSAvIDI1LjQ7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJwdFwiKSB7XG5cdFx0cmV0dXJuIChudW1iZXIgKiBkcGkpIC8gNzI7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJwY1wiKSB7XG5cdFx0cmV0dXJuIChudW1iZXIgKiBkcGkpIC8gNjtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIHVuaXQ6ICR7dW5pdH1gKTtcblx0fVxufVxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y29udmVydFRvUGl4ZWxzLCBnZXREZXZpY2VEUEl9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2RpbWVuc2lvbi5tanNcIjtcbmltcG9ydCB7Z2V0V2luZG93fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET00sIGlzQnJvd3NlciwgSlNET01FeHBvcnQgYXMgSlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHtkZXRlY3RSdW50aW1lRW52aXJvbm1lbnR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdXRpbC9ydW50aW1lLm1qc1wiO1xuXG5cbmZ1bmN0aW9uIGdldE1vY2tXaW5kb3coZHBpKSB7XG5cbiAgICBpZihkZXRlY3RSdW50aW1lRW52aXJvbm1lbnQoKSA9PT0gJ2Jyb3dzZXInKSB7XG4gICAgICAgIHJldHVybiBnZXRXaW5kb3coKTtcbiAgICB9XG4gICAgXG4gICAgXG4gICAgY29uc3QgZG9tID0gbmV3IEpTRE9NKCcnLCB7XG4gICAgICAgIHByZXRlbmRUb0JlVmlzdWFsOiB0cnVlLFxuICAgICAgICByZXNvdXJjZXM6ICd1c2FibGUnLFxuICAgIH0pO1xuXG4gICAgZG9tLndpbmRvdy5tYXRjaE1lZGlhID0gKHF1ZXJ5KSA9PiB7XG4gICAgICAgIGNvbnN0IGRwaVJlZ2V4ID0gL1xcKG1heC1yZXNvbHV0aW9uOiAoXFxkKylkcGlcXCkvO1xuICAgICAgICBjb25zdCBtYXRjaCA9IHF1ZXJ5Lm1hdGNoKGRwaVJlZ2V4KTtcblxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heERwaSA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7XG4gICAgICAgICAgICByZXR1cm4ge21hdGNoZXM6IGRwaSA8PSBtYXhEcGl9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHttYXRjaGVzOiBmYWxzZX07XG4gICAgfTtcblxuICAgIHJldHVybiBkb20ud2luZG93O1xufVxuXG5kZXNjcmliZSgnZGltZW5zaW9uJywgKCkgPT4ge1xuICAgIGxldCBjdXJyZW50RW52aXJvbm1lbnQ7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAvL2NoYWlEb20oZ2V0RG9jdW1lbnQoKSk7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICBjb25zdCB0ZXN0RHBpID0gOTY7XG4gICAgICAgIGNvbnN0IHRlc3RXaW5kb3cgPSBnZXRNb2NrV2luZG93KHRlc3REcGkpO1xuICAgICAgICBnZXRHbG9iYWwoKS53aW5kb3cgPSB0ZXN0V2luZG93O1xuXG4gICAgfSk7XG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBkZWxldGUgZ2V0R2xvYmFsKCkud2luZG93O1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NvbnZlcnRUb1BpeGVscycsICgpID0+IHtcbiAgICAgICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgY29udmVydCBweCB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VG9QaXhlbHMoJzEwMHB4Jyk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgxMDApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChcInNob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIHRoZSBpbnB1dCB2YWx1ZSBoYXMgYW4gaW52YWxpZCBmb3JtYXRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW52YWxpZFZhbHVlID0gXCJpbnZhbGlkX3ZhbHVlXCI7XG5cbiAgICAgICAgICAgIGNvbnN0IGVycm9yRm4gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29udmVydFRvUGl4ZWxzKGludmFsaWRWYWx1ZSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBleHBlY3QoZXJyb3JGbikudG8udGhyb3coRXJyb3IsIGBJbnZhbGlkIHZhbHVlIGZvcm1hdDogJHtpbnZhbGlkVmFsdWV9YCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwic2hvdWxkIGhhbmRsZSBuZWdhdGl2ZSB2YWx1ZXMgY29ycmVjdGx5XCIsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5lZ2F0aXZlVmFsdWUgPSBcIi0xMHB4XCI7XG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IC0xMDtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udmVydFRvUGl4ZWxzKG5lZ2F0aXZlVmFsdWUpO1xuXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGNvbnZlcnQgZW0gdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVzdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRlc3RFbGVtZW50LnN0eWxlLmZvbnRTaXplID0gJzE2cHgnO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0ZXN0RWxlbWVudCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUb1BpeGVscygnMmVtJywgdGVzdEVsZW1lbnQsIHRlc3RFbGVtZW50KTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKDMyKTtcblxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXN0RWxlbWVudCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY29ycmVjdGx5IGNvbnZlcnQgcmVtIHZhbHVlcycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0ZXN0RWxlbWVudC5zdHlsZS5mb250U2l6ZSA9ICcxNnB4JztcbiAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0ZXN0RWxlbWVudCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUb1BpeGVscygnMnJlbScsIHRlc3RFbGVtZW50KTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKDMyKTtcblxuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRlc3RFbGVtZW50KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgY29udmVydCBwZXJjZW50YWdlIHZhbHVlcycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0ZXN0RWxlbWVudC5zdHlsZS53aWR0aCA9ICc1MDBweCc7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlc3RFbGVtZW50KTtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udmVydFRvUGl4ZWxzKCc1MCUnLCB0ZXN0RWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgyNTApO1xuXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRlc3RFbGVtZW50KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBmb3IgdW5zdXBwb3J0ZWQgdW5pdHMnLCAoKSA9PiB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gY29udmVydFRvUGl4ZWxzKCcxMHVuc3VwcG9ydGVkVW5pdCcpKS50by50aHJvdygnVW5zdXBwb3J0ZWQgdW5pdDogdW5zdXBwb3J0ZWRVbml0Jyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnZ2V0RGV2aWNlRFBJJywgKCkgPT4ge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBkZXZpY2UgRFBJJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVzdERwaSA9IDk2O1xuICAgICAgICAgICAgY29uc3QgdGVzdFdpbmRvdyA9IGdldE1vY2tXaW5kb3codGVzdERwaSk7XG4gICAgICAgICAgICBnZXRHbG9iYWwoKS53aW5kb3cgPSB0ZXN0V2luZG93O1xuXG4gICAgICAgICAgICBjb25zdCBkZXZpY2VEcGkgPSBnZXREZXZpY2VEUEkoKTtcbiAgICAgICAgICAgIGV4cGVjdChkZXZpY2VEcGkpLnRvLmVxdWFsKHRlc3REcGkgKiB0ZXN0V2luZG93LmRldmljZVBpeGVsUmF0aW8pO1xuXG4gICAgICAgICAgICBkZWxldGUgZ2V0R2xvYmFsKCkud2luZG93O1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNhY2hlIHRoZSByZXN1bHQgYW5kIHJldHVybiB0aGUgc2FtZSB2YWx1ZScsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3REcGkgPSA5NjtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RXaW5kb3cgPSBnZXRNb2NrV2luZG93KHRlc3REcGkpO1xuICAgICAgICAgICAgZ2V0R2xvYmFsKCkud2luZG93ID0gdGVzdFdpbmRvdztcblxuICAgICAgICAgICAgY29uc3QgZGV2aWNlRHBpMSA9IGdldERldmljZURQSSgpO1xuICAgICAgICAgICAgY29uc3QgZGV2aWNlRHBpMiA9IGdldERldmljZURQSSgpO1xuICAgICAgICAgICAgZXhwZWN0KGRldmljZURwaTEpLnRvLmVxdWFsKGRldmljZURwaTIpO1xuXG4gICAgICAgICAgICBkZWxldGUgZ2V0R2xvYmFsKCkud2luZG93O1xuICAgICAgICB9KTtcbiAgICB9KTtcblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmNvbnN0IEVOVl9BV1NfTEFNQkRBID0gXCJhd3MtbGFtYmRhXCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEVOVl9HT09HTEVfRlVOQ1RJT05TID0gXCJnb29nbGUtZnVuY3Rpb25zXCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEVOVl9FTEVDVFJPTiA9IFwiZWxlY3Ryb25cIjtcbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRU5WX05PREUgPSBcIm5vZGVcIjtcbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRU5WX0JST1dTRVIgPSBcImJyb3dzZXJcIjtcbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRU5WX1dFQl9XT1JLRVIgPSBcIndlYi13b3JrZXJcIjtcbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRU5WX0RFTk8gPSBcImRlbm9cIjtcbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRU5WX1VOS05PV04gPSBcInVua25vd25cIjtcblxuLyoqXG4gKiBEZXRlY3RzIGFuZCByZXR1cm5zIHRoZSBjdXJyZW50IHJ1bnRpbWUgZW52aXJvbm1lbnQuXG4gKlxuICogLSAnYXdzLWxhbWJkYSc6IEFXUyBMYW1iZGEgZW52aXJvbm1lbnRcbiAqIC0gJ2dvb2dsZS1mdW5jdGlvbnMnOiBHb29nbGUgQ2xvdWQgRnVuY3Rpb25zIGVudmlyb25tZW50XG4gKiAtICdlbGVjdHJvbic6IEVsZWN0cm9uIGVudmlyb25tZW50XG4gKiAtICdub2RlJzogTm9kZS5qcyBlbnZpcm9ubWVudFxuICogLSAnYnJvd3Nlcic6IEJyb3dzZXIgZW52aXJvbm1lbnRcbiAqIC0gJ3dlYi13b3JrZXInOiBXZWIgV29ya2VyIGVudmlyb25tZW50XG4gKiAtICdkZW5vJzogRGVubyBlbnZpcm9ubWVudFxuICogLSAncmVhY3QtbmF0aXZlJzogUmVhY3QgTmF0aXZlIGVudmlyb25tZW50XG4gKiAtICd1bmtub3duJzogVW5rbm93biBlbnZpcm9ubWVudFxuICpcbiAqIEBzaW5jZSAzLjM0LjBcbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGRldGVjdGVkIHJ1bnRpbWUgZW52aXJvbm1lbnQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6XG4gKi9cbmZ1bmN0aW9uIGRldGVjdFJ1bnRpbWVFbnZpcm9ubWVudCgpIHtcblx0Ly8gQVdTIExhbWJkYSBlbnZpcm9ubWVudFxuXHRpZiAoXG5cdFx0dHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRwcm9jZXNzLmVudiAhPSBudWxsICYmXG5cdFx0cHJvY2Vzcy5lbnYuQVdTX0xBTUJEQV9GVU5DVElPTl9OQU1FXG5cdCkge1xuXHRcdHJldHVybiBFTlZfQVdTX0xBTUJEQTtcblx0fVxuXG5cdC8vIEdvb2dsZSBDbG91ZCBGdW5jdGlvbnMgZW52aXJvbm1lbnRcblx0aWYgKFxuXHRcdHR5cGVvZiBwcm9jZXNzICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0cHJvY2Vzcy5lbnYgIT0gbnVsbCAmJlxuXHRcdHByb2Nlc3MuZW52LkZVTkNUSU9OX05BTUVcblx0KSB7XG5cdFx0cmV0dXJuIEVOVl9HT09HTEVfRlVOQ1RJT05TO1xuXHR9XG5cblx0Ly8gTm9kZS5qcyBlbnZpcm9ubWVudFxuXHRpZiAoXG5cdFx0dHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRwcm9jZXNzLnZlcnNpb25zICE9IG51bGwgJiZcblx0XHRwcm9jZXNzLnZlcnNpb25zLm5vZGUgIT0gbnVsbFxuXHQpIHtcblx0XHQvLyBFbGVjdHJvbiBlbnZpcm9ubWVudFxuXHRcdGlmIChwcm9jZXNzLnZlcnNpb25zLmVsZWN0cm9uICE9IG51bGwpIHtcblx0XHRcdHJldHVybiBFTlZfRUxFQ1RST047XG5cdFx0fVxuXHRcdHJldHVybiBFTlZfTk9ERTtcblx0fVxuXG5cdC8vIEJyb3dzZXIgZW52aXJvbm1lbnRcblx0aWYgKFxuXHRcdHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHR0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0dHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdHR5cGVvZiBuYXZpZ2F0b3IudXNlckFnZW50ID09PSBcInN0cmluZ1wiXG5cdCkge1xuXHRcdC8vIFdlYiBXb3JrZXIgZW52aXJvbm1lbnRcblx0XHRpZiAodHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIGltcG9ydFNjcmlwdHMgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0cmV0dXJuIEVOVl9XRUJfV09SS0VSO1xuXHRcdH1cblx0XHRyZXR1cm4gRU5WX0JST1dTRVI7XG5cdH1cblxuXHQvLyBEZW5vIGVudmlyb25tZW50XG5cdGlmICh0eXBlb2YgRGVubyAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdHJldHVybiBFTlZfREVOTztcblx0fVxuXG5cdC8vIFVua25vd24gZW52aXJvbm1lbnRcblx0cmV0dXJuIEVOVl9VTktOT1dOO1xufVxuXG5leHBvcnQge1xuXHRFTlZfQVdTX0xBTUJEQSxcblx0RU5WX0dPT0dMRV9GVU5DVElPTlMsXG5cdEVOVl9FTEVDVFJPTixcblx0RU5WX05PREUsXG5cdEVOVl9CUk9XU0VSLFxuXHRFTlZfV0VCX1dPUktFUixcblx0RU5WX0RFTk8sXG5cdEVOVl9VTktOT1dOLFxuXHRkZXRlY3RSdW50aW1lRW52aXJvbm1lbnQsXG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7U3R5bGVzaGVldH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2UvbGluay9zdHlsZXNoZWV0Lm1qc1wiO1xuaW1wb3J0IHtEYXRhVXJsfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2RhdGF1cmwubWpzXCI7XG5pbXBvcnQge0lEfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7Y2xlYW51cERPTUZyb21UZXN0aW5nLCBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3Rpbmd9IGZyb20gXCIuLi8uLi8uLi8uLi91dGlsL2NsZWFudXBkb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcblxuY2hhaS51c2UoY2hhaURvbSk7XG5cbmxldCBodG1sMSA9IGBcblxuYDtcblxuXG5kZXNjcmliZSgnU3R5bGVzaGVldCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oe1xuICAgICAgICAgICAgcnVuU2NyaXB0czogXCJkYW5nZXJvdXNseVwiLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiBcInVzYWJsZVwiXG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nKClcbiAgICB9KVxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgY2xlYW51cERPTUZyb21UZXN0aW5nKCk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdTdHlsZXNoZWV0KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdjb25uZWN0KCkuYXZhaWxhYmxlKCknLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCBzdHlsZXNoZWV0ID0gbmV3IFN0eWxlc2hlZXQoe1xuICAgICAgICAgICAgICAgIGhyZWY6IG5ldyBEYXRhVXJsKCcnLCAndGV4dC9jc3MnKS50b1N0cmluZygpLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHN0eWxlc2hlZXQuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gc3R5bGVzaGVldC5nZXRPcHRpb24oJ2lkJylcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cbiAgICAgICAgfSlcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdFeHRlcm5hbCBTdHlsZXNoZWV0JywgKCkgPT4ge1xuXG4gICAgICAgIGxldCBpZCA9IG5ldyBJRCgnU3R5bGVzaGVldCcpLnRvU3RyaW5nKCk7XG4gICAgICAgIGxldCBzdHlsZXNoZWV0LCB1cmwgPSAnaHR0cHM6Ly9hbHZpbmUuaW8vbWFpbi5taW4uY3NzJztcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgc3R5bGVzaGVldCA9IG5ldyBTdHlsZXNoZWV0KHtcbiAgICAgICAgICAgICAgICBocmVmOiB1cmwsXG4gICAgICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2FwcGVuZCBhbmQgcmVtb3ZlIFN0eWxlc2hlZXQgJywgKGRvbmUpID0+IHtcblxuICAgICAgICAgICAgZXhwZWN0KHN0eWxlc2hlZXQuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG5cbiAgICAgICAgICAgIHN0eWxlc2hlZXQuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChzdHlsZXNoZWV0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tocmVmPVwiJyArIHVybCArICdcIl0nKSkudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHN0eWxlc2hlZXQuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tocmVmPVwiJyArIHVybCArICdcIl0nKSkubm90LnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgc3R5bGVzaGVldC5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChzdHlsZXNoZWV0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tocmVmPVwiJyArIHVybCArICdcIl0nKSkubm90LnRvLmV4aXN0O1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qoc3R5bGVzaGVldC5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxufSk7IiwgIid1c2Ugc3RyaWN0JztcblxuXG5sZXQgYWRkZWROb2RlcywgbXV0YXRpb25vYnNlcnZlcjtcblxuZnVuY3Rpb24gaW5pdCgpIHtcblxuICAgIGFkZGVkTm9kZXMgPSBbXTtcbiAgICBtdXRhdGlvbm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24gKG11dGF0aW9ucykge1xuICAgICAgICBtdXRhdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAobXV0YXRpb24pIHtcbiAgICAgICAgICAgIGlmIChtdXRhdGlvbi50eXBlID09PSAnY2hpbGRMaXN0JyAmJiBtdXRhdGlvbi5yZW1vdmVkTm9kZXMpIHtcblxuICAgICAgICAgICAgICAgIG11dGF0aW9uLmFkZGVkTm9kZXMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRlZE5vZGVzLnB1c2gobik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nKCkge1xuXG4gICAgaWYgKG11dGF0aW9ub2JzZXJ2ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpbml0KClcbiAgICB9XG5cbiAgICBtdXRhdGlvbm9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaGVhZCcpLCB7Y2hpbGRMaXN0OiB0cnVlfSk7XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFudXBET01Gcm9tVGVzdGluZygpIHtcbiAgICBtdXRhdGlvbm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcblxuICAgIGZvciAoY29uc3QgbiBvZiBhZGRlZE5vZGVzKSB7XG4gICAgICAgIG4ucmVtb3ZlKCk7XG4gICAgfVxufSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge0xpbmt9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL2xpbmsubWpzXCI7XG5pbXBvcnQge0RhdGFVcmx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZGF0YXVybC5tanNcIjtcbmltcG9ydCB7SUR9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtjbGVhbnVwRE9NRnJvbVRlc3RpbmcsIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZ30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2xlYW51cGRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuXG5jaGFpLnVzZShjaGFpRG9tKTtcblxuXG5cbmRlc2NyaWJlKCdMaW5rJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZygpXG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGNsZWFudXBET01Gcm9tVGVzdGluZygpO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnTGluaygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQoNTAwMCk7XG5cbiAgICAgICAgaXQoJ2Nvbm5lY3QoKS5hdmFpbGFibGUoKScsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGxpbmsgPSBuZXcgTGluayh7XG4gICAgICAgICAgICAgICAgaHJlZjogbmV3IERhdGFVcmwoJycsICd0ZXh0L2NzcycpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgcmVsOiAnc3R5bGVzaGVldCdcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBsaW5rLmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cbiAgICAgICAgfSlcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdFeHRlcm5hbCBMaW5rJywgKCkgPT4ge1xuICAgICAgICB0aGlzLnRpbWVvdXQoNTAwMCk7XG5cbiAgICAgICAgbGV0IGlkID0gbmV3IElEKCdsaW5rJykudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IGxpbmssIHVybCA9ICdodHRwczovL2FsdmluZS5pby9tYWluLm1pbi5jc3MnO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgICAgICBsaW5rID0gbmV3IExpbmsoe1xuICAgICAgICAgICAgICAgIGhyZWY6IHVybCxcbiAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgcmVsOiAnc3R5bGVzaGVldCdcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdhcHBlbmQgYW5kIHJlbW92ZSBMaW5rICcsIChkb25lKSA9PiB7XG5cbiAgICAgICAgICAgIGV4cGVjdChsaW5rLmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICBsaW5rLmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3QobGluay5pc0Nvbm5lY3RlZCgpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChsaW5rLmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLm5vdC50by5leGlzdDtcblxuICAgICAgICAgICAgICAgIGxpbmsuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QobGluay5pc0Nvbm5lY3RlZCgpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2hyZWY9XCInICsgdXJsICsgJ1wiXScpKS50by5leGlzdDtcblxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLm5vdC50by5leGlzdDtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGxpbmsuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbn0pOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge1NjcmlwdH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2Uvc2NyaXB0Lm1qc1wiO1xuaW1wb3J0IHtEYXRhVXJsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2RhdGF1cmwubWpzXCI7XG5pbXBvcnQge0lEfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7Y2xlYW51cERPTUZyb21UZXN0aW5nLCBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3Rpbmd9IGZyb20gXCIuLi8uLi8uLi91dGlsL2NsZWFudXBkb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcblxuY2hhaS51c2UoY2hhaURvbSk7XG5cbmxldCBodG1sMSA9IGBcblxuYDtcblxuXG5kZXNjcmliZSgnU2NyaXB0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZygpXG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGNsZWFudXBET01Gcm9tVGVzdGluZygpO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnU2NyaXB0KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzZXRFdmVudFR5cGVzKCknLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCBzY3JpcHQgPSBuZXcgU2NyaXB0KHtcbiAgICAgICAgICAgICAgICBzcmM6IG5ldyBEYXRhVXJsKCcnLCAndGV4dC9qYXZhc2NyaXB0JykudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICBhc3luYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogJ2Fub255bW91cycsXG4gICAgICAgICAgICAgICAgZGVmZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGludGVncml0eTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG5vbW9kdWxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBub25jZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHJlZmVycmVycG9saWN5OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQvamF2YXNjcmlwdCdcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzY3JpcHQuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBzY3JpcHQuZ2V0T3B0aW9uKCdpZCcpXG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnRXh0ZXJuYWwgSlMnLCAoKSA9PiB7XG5cbiAgICAgICAgbGV0IGlkID0gbmV3IElEKCdzY3JpcHQnKS50b1N0cmluZygpO1xuICAgICAgICBsZXQgc2VydmVyLCBzY3JpcHQsIHVybCA9ICdodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sYXl6ci5qcy8yLjIuMi9sYXl6ci5taW4uanMnO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgICAgICBzY3JpcHQgPSBuZXcgU2NyaXB0KHtcbiAgICAgICAgICAgICAgICBzcmM6IHVybCxcbiAgICAgICAgICAgICAgICBhc3luYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogJ2Fub255bW91cycsXG4gICAgICAgICAgICAgICAgZGVmZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGludGVncml0eTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIG5vbW9kdWxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBub25jZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHJlZmVycmVycG9saWN5OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3RleHQvamF2YXNjcmlwdCcsXG4gICAgICAgICAgICAgICAgaWQ6IGlkXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYXBwZW5kIGFuZCByZW1vdmUgc2NyaXB0ICcsIChkb25lKSA9PiB7XG5cbiAgICAgICAgICAgIGV4cGVjdChzY3JpcHQuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG5cbiAgICAgICAgICAgIHNjcmlwdC5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHNjcmlwdC5pc0Nvbm5lY3RlZCgpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbc3JjPVwiJyArIHVybCArICdcIl0nKSkudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHNjcmlwdC5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3NyYz1cIicgKyB1cmwgKyAnXCJdJykpLm5vdC50by5leGlzdDtcblxuICAgICAgICAgICAgICAgIHNjcmlwdC5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChzY3JpcHQuaXNDb25uZWN0ZWQoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tzcmM9XCInICsgdXJsICsgJ1wiXScpKS50by5leGlzdDtcblxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbc3JjPVwiJyArIHVybCArICdcIl0nKSkubm90LnRvLmV4aXN0O1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qoc2NyaXB0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG59KTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtEYXRhfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS9kYXRhLm1qc1wiO1xuaW1wb3J0IHtEYXRhVXJsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2RhdGF1cmwubWpzXCI7XG5pbXBvcnQge0lEfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7Y2xlYW51cERPTUZyb21UZXN0aW5nLCBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3Rpbmd9IGZyb20gXCIuLi8uLi8uLi91dGlsL2NsZWFudXBkb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcblxuY2hhaS51c2UoY2hhaURvbSk7XG5cbmxldCBodG1sMSA9IGBcblxuYDtcblxuXG5kZXNjcmliZSgnRGF0YScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBmZXRjaFJlZmVyZW5jZSwgcmV0dXJuU3RhdHVzLCBtdXRhdGlvbm9ic2VydmVyLCBhZGRlZE5vZGVzID0gW107XG5cblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZygpXG5cbiAgICAgICAgcmV0dXJuU3RhdHVzID0gMjAwO1xuICAgICAgICBmZXRjaFJlZmVyZW5jZSA9IGdsb2JhbFRoaXNbJ2ZldGNoJ107XG4gICAgICAgIGdsb2JhbFRoaXNbJ2ZldGNoJ10gPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG5cbiAgICAgICAgICAgIGlmICghdXJsKSB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgdXJsJylcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiBcInRlc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiByZXR1cm5TdGF0dXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfTtcblxuXG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGdsb2JhbFRoaXNbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgY2xlYW51cERPTUZyb21UZXN0aW5nKCk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdEYXRhKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzZXRFdmVudFR5cGVzKCknLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gbmV3IERhdGEoe1xuICAgICAgICAgICAgICAgIHNyYzogbmV3IERhdGFVcmwoJycsICd0ZXh0L2phdmFzY3JpcHQnKS50b1N0cmluZygpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZGF0YS5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnRXh0ZXJuYWwgRGF0YScsICgpID0+IHtcblxuICAgICAgICBsZXQgaWQgPSBuZXcgSUQoJ2RhdGEnKS50b1N0cmluZygpO1xuICAgICAgICBsZXQgc2VydmVyLCBkYXRhLCB1cmwgPSAnaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvbGF5enIuanMvMi4yLjIvbGF5enIubWluLmpzJztcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgZGF0YSA9IG5ldyBEYXRhKHtcbiAgICAgICAgICAgICAgICBzcmM6IHVybCxcbiAgICAgICAgICAgICAgICBpZDogaWRcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdkYXRhIGlzIG5vdCBjb25uZWN0ZWQnLCAoKSA9PiB7XG4gICAgICAgICAgICBleHBlY3QoZGF0YS5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnY29ubmVjdCBhbmQgY2hlY2sgYXZhaWxhYmlsaXR5JywgKGRvbmUpID0+IHtcblxuICAgICAgICAgICAgZGF0YS5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRhdGEuaXNDb25uZWN0ZWQoKSwgJ2lzQ29ubmVjdGVkIDEnKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIl0nKSwgJ2V4aXN0cyAxJykudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnBhcmVudEVsZW1lbnQ7XG5cblxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkYXRhLmlzQ29ubmVjdGVkKCksICdpc0Nvbm5lY3RlZCAyJykudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0eXBlPVwiYXBwbGljYXRpb24vanNvblwiXScpLCAnZXhpc3RzIDInKS5ub3QudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICBkYXRhLmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRhdGEuaXNDb25uZWN0ZWQoKSwgJ2lzQ29ubmVjdGVkIDMnKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3R5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCJdJyksICdleGlzdHMgMycpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0eXBlPVwiYXBwbGljYXRpb24vanNvblwiXScpLCAnZXhpc3RzIDQnKS5ub3QudG8uZXhpc3Q7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkYXRhLmlzQ29ubmVjdGVkKCksICdpc0Nvbm5lY3RlZCA0JykudG8uYmUuZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzJywgKCkgPT4ge1xuICAgIGxldCBlbGVtZW50O1xuICAgIGxldCBvcHRpb25zO1xuICAgIGxldCBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzO1xuXG4gICAgYmVmb3JlKCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvZG9tL3V0aWwvaW5pdC1vcHRpb25zLWZyb20tYXR0cmlidXRlcy5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMgPSBtWydpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzJ107XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBvcHRpb25zID0ge3VybDogXCJcIiwga2V5OiB7c3Via2V5OiBcIlwiLCBjYXNlU2Vuc2l0aXZlOiB0cnVlfX07XG4gICAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaW5pdGlhbGl6ZSBvcHRpb25zIHdpdGggbWF0Y2hpbmcgYXR0cmlidXRlcycsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJywgJ2h0dHBzOi8vZXhhbXBsZS5jb20nKTtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24ta2V5LXN1YmtleScsICd0ZXN0Jyk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJ2h0dHBzOi8vZXhhbXBsZS5jb20nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5rZXkuc3Via2V5KS50by5lcXVhbCgndGVzdCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgbW9kaWZ5IG9wdGlvbnMgd2l0aG91dCBtYXRjaGluZyBhdHRyaWJ1dGVzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnJyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQua2V5LnN1YmtleSkudG8uZXF1YWwoJycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpZ25vcmUgYXR0cmlidXRlcyB3aXRob3V0IHRoZSBjb3JyZWN0IHByZWZpeCcsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc29tZS1vcHRpb24tdXJsJywgJ2h0dHBzOi8vZXhhbXBsZS5jb20nKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGlnbm9yZSBhdHRyaWJ1dGVzIHdpdGggaW52YWxpZCBvcHRpb24gcGF0aHMnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLW5vbmV4aXN0ZW50JywgJ3ZhbHVlJyk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKG9wdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhcHBseSBtYXBwaW5nIGZvciBhIHNpbmdsZSBhdHRyaWJ1dGUnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLXVybCcsICdleGFtcGxlJyk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAndXJsJzogKHZhbHVlKSA9PiAnaHR0cHM6Ly8nICsgdmFsdWUgKyAnLmNvbSdcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhcHBseSBtYXBwaW5nIGZvciBhIG5lc3RlZCBhdHRyaWJ1dGUnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLWtleS1zdWJrZXknLCAnMTIzJyk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAna2V5LnN1YmtleSc6ICh2YWx1ZSkgPT4gcGFyc2VJbnQodmFsdWUsIDEwKSAqIDJcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQua2V5LnN1YmtleSkudG8uZXF1YWwoXCIyNDZcIik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFwcGx5IG11bHRpcGxlIG1hcHBpbmdzJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi11cmwnLCAnZXhhbXBsZScpO1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi1rZXktc3Via2V5JywgJzEyMycpO1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ3VybCc6ICh2YWx1ZSkgPT4gJ2h0dHBzOi8vJyArIHZhbHVlICsgJy5jb20nLFxuICAgICAgICAgICAgJ2tleS5zdWJrZXknOiAodmFsdWUpID0+IHBhcnNlSW50KHZhbHVlLCAxMCkgKiAyXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJ2h0dHBzOi8vZXhhbXBsZS5jb20nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5rZXkuc3Via2V5KS50by5lcXVhbChcIjI0NlwiKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaWdub3JlIG1hcHBpbmdzIGZvciBub24tZXhpc3RpbmcgYXR0cmlidXRlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICd1cmwnOiAodmFsdWUpID0+ICdodHRwczovLycgKyB2YWx1ZSArICcuY29tJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucywgbWFwcGluZyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaWdub3JlIG1hcHBpbmdzIGZvciBpbnZhbGlkIG9wdGlvbiBwYXRocycsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24tbm9uZXhpc3RlbnQnLCAndmFsdWUnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICdub25leGlzdGVudCc6ICh2YWx1ZSkgPT4gdmFsdWUgKyAnYmFyJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucywgbWFwcGluZyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChvcHRpb25zKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYXBwbHkgbWFwcGluZyBvbmx5IHRvIHNwZWNpZmllZCBhdHRyaWJ1dGVzJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi11cmwnLCAnZXhhbXBsZScpO1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi1rZXktc3Via2V5JywgJzEyMycpO1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ3VybCc6ICh2YWx1ZSkgPT4gJ2h0dHBzOi8vJyArIHZhbHVlICsgJy5jb20nXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJ2h0dHBzOi8vZXhhbXBsZS5jb20nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5rZXkuc3Via2V5KS50by5lcXVhbCgnMTIzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBhcHBseSBtYXBwaW5nIGlmIG5vdCBhIGZ1bmN0aW9uJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi11cmwnLCAnZXhhbXBsZScpO1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ3VybCc6ICdodHRwczovL2V4YW1wbGUuY29tJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucywgbWFwcGluZyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCdleGFtcGxlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFwcGx5IG1hcHBpbmcgd2l0aCBjdXN0b20gcHJlZml4JywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1jdXN0b20tb3B0aW9uLXVybCcsICdleGFtcGxlJyk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAndXJsJzogKHZhbHVlKSA9PiAnaHR0cHM6Ly8nICsgdmFsdWUgKyAnLmNvbSdcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcsICdkYXRhLWN1c3RvbS1vcHRpb24tJyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCdodHRwczovL2V4YW1wbGUuY29tJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBhcHBseSBtYXBwaW5nIHdpdGggaW5jb3JyZWN0IGN1c3RvbSBwcmVmaXgnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWN1c3RvbS1vcHRpb24tdXJsJywgJ2V4YW1wbGUnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICd1cmwnOiAodmFsdWUpID0+ICdodHRwczovLycgKyB2YWx1ZSArICcuY29tJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucywgbWFwcGluZyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYXBwbHkgY2FzZSBzZW5zaXRpdmUgbWFwcGluZycsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24ta2V5LWNhc2VTZW5zaXRpdmUnLCAnZmFsc2UnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LmtleS5jYXNlU2Vuc2l0aXZlKS50by5lcXVhbChmYWxzZSk7XG4gICAgfSk7XG5cbn0pO1xuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tICdjaGFpJztcbmltcG9ydCB7ZXh0cmFjdEtleXN9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZG9tL3V0aWwvZXh0cmFjdC1rZXlzLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdleHRyYWN0S2V5cycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGV4dHJhY3Qga2V5cyBmcm9tIHRoZSBnaXZlbiBvYmplY3QnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGZpcnN0TmFtZTogJ0pvaG4nLFxuICAgICAgICAgICAgbGFzdE5hbWU6ICdEb2UnLFxuICAgICAgICAgICAgYWRkcmVzczoge1xuICAgICAgICAgICAgICAgIHN0cmVldDogJzEyMyBNYWluIFN0JyxcbiAgICAgICAgICAgICAgICBjaXR5OiAnTmV3IFlvcmsnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBleHBlY3RlZCA9IG5ldyBNYXAoW1xuICAgICAgICAgICAgWydmaXJzdG5hbWUnLCAnZmlyc3ROYW1lJ10sXG4gICAgICAgICAgICBbJ2xhc3RuYW1lJywgJ2xhc3ROYW1lJ10sXG4gICAgICAgICAgICBbJ2FkZHJlc3Mtc3RyZWV0JywgJ2FkZHJlc3Muc3RyZWV0J10sXG4gICAgICAgICAgICBbJ2FkZHJlc3MtY2l0eScsICdhZGRyZXNzLmNpdHknXSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdEtleXMob2JqKTtcblxuICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbShyZXN1bHQpKSkudG8uZXF1YWwoSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbShleHBlY3RlZCkpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdXNlIGN1c3RvbSBrZXkgYW5kIHZhbHVlIHNlcGFyYXRvcnMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGZpcnN0TmFtZTogJ0pvaG4nLFxuICAgICAgICAgICAgbGFzdE5hbWU6ICdEb2UnLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gbmV3IE1hcChbXG4gICAgICAgICAgICBbJ3ByZWZpeCtmaXJzdG5hbWUnLCAncHJlZml4K2ZpcnN0TmFtZSddLFxuICAgICAgICAgICAgWydwcmVmaXgrbGFzdG5hbWUnLCAncHJlZml4K2xhc3ROYW1lJ10sXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3RLZXlzKG9iaiwgJ3ByZWZpeCcsICcrJywgJysnKTtcblxuICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbShyZXN1bHQpKSkudG8uZXF1YWwoSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbShleHBlY3RlZCkpKTtcbiAgICB9KTtcblxuICAgIGl0KCdjaGVjayBpZiB2YWx1ZSBpcyBudWxsJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICBmaXJzdE5hbWU6ICdKb2huJyxcbiAgICAgICAgICAgIGxhc3ROYW1lOiAnRG9lJyxcbiAgICAgICAgICAgIGFkZHJlc3M6IG51bGwsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBuZXcgTWFwKFtcbiAgICAgICAgICAgIFsnZmlyc3RuYW1lJywgJ2ZpcnN0TmFtZSddLFxuICAgICAgICAgICAgWydsYXN0bmFtZScsICdsYXN0TmFtZSddLFxuICAgICAgICAgICAgWydhZGRyZXNzJywgJ2FkZHJlc3MnXSxcbiAgICAgICAgICAgIFxuICAgICAgICBdKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBleHRyYWN0S2V5cyhvYmopO1xuXG4gICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHJlc3VsdCkpKS50by5lcXVhbChKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKGV4cGVjdGVkKSkpO1xuICAgIH0pO1xuXG4gICAgLy8gQWRkIG1vcmUgdGVzdCBjYXNlcyBhcyBuZWVkZWRcbn0pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbCwgZ2V0R2xvYmFsRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBGYWN0b3J5IH07XG5cbi8qKlxuICogQSBmYWN0b3J5IGZvciBjcmVhdGluZyB3b3JrZXIgaW5zdGFuY2VzLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgc21hbGwgZmFjdG9yeSB0byBjcmVhdGUgd29ya2VyXG4gKi9cbmNsYXNzIEZhY3RvcnkgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0d29ya2VyOiBuZXcgV2Vha01hcCgpLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIHdvcmtlciBmcm9tIGEgVVJMXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IG1lc3NhZ2VIYW5kbGVyXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGVycm9ySGFuZGxlclxuXHQgKiBAcmV0dXJuIHtXb3JrZXJ9XG5cdCAqL1xuXHRjcmVhdGVGcm9tVVJMID0gZnVuY3Rpb24gKHVybCwgbWVzc2FnZUhhbmRsZXIsIGVycm9ySGFuZGxlcikge1xuXHRcdGlmICh1cmwgaW5zdGFuY2VvZiBVUkwpIHtcblx0XHRcdHVybCA9IHVybC50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHdvcmtlckNsYXNzID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJXb3JrZXJcIik7XG5cdFx0dmFyIHdvcmtlciA9IG5ldyB3b3JrZXJDbGFzcyh2YWxpZGF0ZVN0cmluZyh1cmwpKTtcblxuXHRcdGlmIChpc0Z1bmN0aW9uKG1lc3NhZ2VIYW5kbGVyKSkge1xuXHRcdFx0d29ya2VyLm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xuXHRcdFx0XHRtZXNzYWdlSGFuZGxlci5jYWxsKHdvcmtlciwgZXZlbnQpO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAoaXNGdW5jdGlvbihlcnJvckhhbmRsZXIpKSB7XG5cdFx0XHR3b3JrZXIub25lcnJvciA9IChldmVudCkgPT4ge1xuXHRcdFx0XHRlcnJvckhhbmRsZXIuY2FsbCh3b3JrZXIsIGV2ZW50KTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHdvcmtlcjtcblx0fTtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIHdvcmtlciBmcm9tIGEgc2NyaXB0XG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50XG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IG1lc3NhZ2VIYW5kbGVyXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGVycm9ySGFuZGxlclxuXHQgKiBAcmV0dXJuIHtXb3JrZXJ9XG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZGUvZG9jcy9XZWIvQVBJL1VSTC9jcmVhdGVPYmplY3RVUkxcblx0ICovXG5cdGNyZWF0ZUZyb21TY3JpcHQgPSBmdW5jdGlvbiAoY29udGVudCwgbWVzc2FnZUhhbmRsZXIsIGVycm9ySGFuZGxlcikge1xuXHRcdGNvbnN0IGJsb2JGdW5jdGlvbiA9IG5ldyBnZXRHbG9iYWxGdW5jdGlvbihcIkJsb2JcIik7XG5cdFx0Y29uc3QgYmxvYiA9IG5ldyBibG9iRnVuY3Rpb24oW3ZhbGlkYXRlU3RyaW5nKGNvbnRlbnQpXSwge1xuXHRcdFx0dHlwZTogXCJzY3JpcHQvamF2YXNjcmlwdFwiLFxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgdXJsID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJVUkxcIikuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuXHRcdGNvbnN0IHdvcmtlciA9IHRoaXMuY3JlYXRlRnJvbVVSTCh1cmwsIG1lc3NhZ2VIYW5kbGVyLCBlcnJvckhhbmRsZXIpO1xuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ3b3JrZXJcIl0uc2V0KHdvcmtlciwgdXJsKTtcblxuXHRcdHJldHVybiB3b3JrZXI7XG5cdH07XG5cblx0LyoqXG5cdCAqIFRlcm1pbmF0ZSB0aGUgd29ya2VyIGFuZCBjYWxsIHJldm9rZU9iamVjdFVSTCBpZiBuZWNlc3NhcnkuXG5cdCAqXG5cdCAqIEBwYXJhbSB3b3JrZXJcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uV29ya2VyLkZhY3Rvcnl9XG5cdCAqL1xuXHR0ZXJtaW5hdGUod29ya2VyKSB7XG5cdFx0Y29uc3Qgd29ya2VyQ2xhc3MgPSBnZXRHbG9iYWxGdW5jdGlvbihcIldvcmtlclwiKTtcblx0XHR2YWxpZGF0ZUluc3RhbmNlKHdvcmtlciwgd29ya2VyQ2xhc3MpO1xuXG5cdFx0d29ya2VyLnRlcm1pbmF0ZSgpO1xuXG5cdFx0aWYgKHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wid29ya2VyXCJdLmhhcyh3b3JrZXIpKSB7XG5cdFx0XHRjb25zdCB1cmwgPSB0aGlzW2ludGVybmFsU3ltYm9sXVtcIndvcmtlclwiXS5nZXQod29ya2VyKTtcblx0XHRcdFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmltcG9ydCB7RmFjdG9yeX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kb20vd29ya2VyL2ZhY3RvcnkubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTSwgaXNOb2RlfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmRlc2NyaWJlKCdXb3JrZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBpZiAoaXNOb2RlKCkpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxbJ1VSTCddLCAnY3JlYXRlT2JqZWN0VVJMJywge1xuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIi9leGFtcGxlLm1qc1wiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZ2xvYmFsWydXb3JrZXInXSA9IGNsYXNzIHtcbiAgICAgICAgICAgICAgICB0ZXJtaW5hdGUoKSB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG9uZXJyb3IoKSB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG9ubWVzc2FnZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgYSA9IHR5cGVvZiBnbG9iYWxbJ1dvcmtlciddO1xuICAgICAgICAgICAgbGV0IGExID0gdHlwZW9mIFdvcmtlcjtcblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QganNkb20gPSBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnRmFjdG9yeScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnY3JlYXRlIHdvcmtlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgZmFjdG9yeSA9IG5ldyBGYWN0b3J5KCk7XG4gICAgICAgICAgICBjb25zdCB3b3JrZXIgPSBmYWN0b3J5LmNyZWF0ZUZyb21TY3JpcHQoJ2NvbnNvbGUubG9nKFwiaGVsbG8gd29ybGRcIik7JylcbiAgICAgICAgICAgIGV4cGVjdCh3b3JrZXIpLmlzLmluc3RhbmNlb2YoV29ya2VyKTtcblxuICAgICAgICAgICAgZXhwZWN0KGZhY3RvcnkudGVybWluYXRlKHdvcmtlcikpLmlzLmluc3RhbmNlb2YoRmFjdG9yeSlcblxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcblxuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQge1Byb3h5T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcblxuY2hhaS51c2UoY2hhaURvbSk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8dGVtcGxhdGUgaWQ9XCJjdXJyZW50XCI+XG4gICAgICAgIDxsaSBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y3VycmVudCB8IHRvanNvblwiPjwvbGk+XG4gICAgPC90ZW1wbGF0ZT5cbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICAgICAgPHVsIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJjdXJyZW50IHBhdGg6YS5iXCI+XG4gICAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgICAgIDx1bCBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwiY3VycmVudCBwYXRoOmEuYiB8IGRvaXRcIj5cbiAgICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGlkPVwidGVzdDNcIj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6YS5iXCI+XG4gICAgICAgICAgICA8aW5wdXQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEuY1wiIGlkPVwiaW5wdXQxXCI+XG4gICAgICAgICAgICA8aW5wdXQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjaGVja2VkIHBhdGg6YS5jaGVja2JveFwiIHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJjaGVja2JveFwiIGlkPVwiY2hlY2tib3hcIj5cbiAgICAgICAgICAgIDxpbnB1dCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInZhbHVlIHBhdGg6YS50ZXh0XCIgdHlwZT1cInRleHRcIiBuYW1lPVwidGV4dFwiIGlkPVwidGV4dFwiPlxuICAgICAgICAgICAgPGlucHV0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2hlY2tlZCBwYXRoOmEucmFkaW9cIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwicmFkaW9cIiB2YWx1ZT1cInIxXCIgaWQ9XCJyYWRpb1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJyYWRpb1wiIHZhbHVlPVwicjJcIiBpZD1cInIyXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInJhZGlvXCIgdmFsdWU9XCJyeFwiIGlkPVwicnhcIj5cblxuICAgICAgICAgICAgPHNlbGVjdCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInZhbHVlIHBhdGg6YS5zZWxlY3RcIiBuYW1lPVwic2VsZWN0XCIgaWQ9XCJzZWxlY3RcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwib3RoZXItdmFsdWVcIj52YWx1ZTE8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMjwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICAgICAgIDxzZWxlY3QgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEubXVsdGlzZWxlY3RcIiBuYW1lPVwibXVsdGlzZWxlY3RcIiBtdWx0aXBsZSBpZD1cIm11bHRpc2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTE8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTQ8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwib3RoZXItdmFsdWU1XCI+dmFsdWU1PC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cblxuICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9XCJ0ZXh0YXJlYVwiIGlkPVwidGV4dGFyZWFcIiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInZhbHVlIHBhdGg6YS50ZXh0YXJlYVwiPjwvdGV4dGFyZWE+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6dGV4dCB8IHRvbG93ZXJcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6dGV4dCB8IGNhbGw6bXlmb3JtYXR0ZXJcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInN0YXRpYzpoZWxsb1xcXFwgXCI+PC9kaXY+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDMgPSBgXG5cbiAgICA8dGVtcGxhdGUgaWQ9XCJteWlubmVyaWRcIj5cbiAgICAgICAgPHNwYW4gZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm15aW5uZXJpZCB8IHRvanNvblwiPjwvc3Bhbj5cbiAgICA8L3RlbXBsYXRlPlxuXG4gICAgPHRlbXBsYXRlIGlkPVwibXlpZFwiPlxuICAgICAgICA8cCBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwibXlpbm5lcmlkIHBhdGg6YS5iXCI+PC9wPlxuICAgIDwvdGVtcGxhdGU+XG5cbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwibXlpZCBwYXRoOmEuYlwiPjwvZGl2PlxuICAgIDwvZGl2PlxuXG5gO1xuXG5sZXQgaHRtbDQgPSBgXG4gICAgPGRpdj5cbiAgICAgICAgPGZvcm0gaWQ9XCJmb3JtMVwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwiY2hlY2tlZFwiIG5hbWU9XCJjaGVja2JveFwiIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDpzdGF0ZVwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInRleHRcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwicmFkaW9cIiB2YWx1ZT1cInIxXCIgaWQ9XCJyMVwiIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDpyYWRpb1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJyYWRpb1wiIHZhbHVlPVwicjJcIiBpZD1cInIyXCIgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnJhZGlvXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInJhZGlvXCIgdmFsdWU9XCJyeFwiIGlkPVwicnhcIiBkYXRhLWNvbW1lbnQ9XCJub3QgY2FsbGVkIGJlY2F1c2Ugbm8gYmluZCBhdHRyaWJ1dGVcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiYnV0dG9uXCIgbmFtZT1cImJ1dHRvblwiPlxuXG4gICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJzZWxlY3QxXCIgaWQ9XCJzZWxlY3QxXCIgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUxPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTI8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuXG4gICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJzZWxlY3QyXCIgbXVsdGlwbGUgaWQ9XCJzZWxlY3QyXCIgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOm11bHRpc2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTE8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUzPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTQ8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlNTwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPVwidGV4dGFyZWFcIiBpZD1cInRleHRhcmVhXCIgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnRleHRhcmVhXCI+XG4gICAgICAgICAgICBcbiAgICAgICAgPC90ZXh0YXJlYT5cblxuICAgICAgICA8L2Zvcm0+XG4gICAgPC9kaXY+XG5cbmA7XG5cblxuXG5kZXNjcmliZSgnRE9NJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IFVwZGF0ZXIgPSBudWxsO1xuICAgIFxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICB9XG4gICAgICAgIGluaXRKU0RPTShvcHRpb25zKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS91cGRhdGVyLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgVXBkYXRlciA9IG0uVXBkYXRlcjtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnVXBkYXRlcigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkZXNjcmliZSgndGVzdCBHZXR0ZXIgJiYgU2V0dGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3NldEV2ZW50VHlwZXMoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBVcGRhdGVyKGVsZW1lbnQpLnNldEV2ZW50VHlwZXMoWyd0b3VjaCddKSkudG8uYmUuaW5zdGFuY2VvZihVcGRhdGVyKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBpdCgnZ2V0U3ViamVjdCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcbiAgICAgICAgICAgICAgICBsZXQgc3ViamVjdCA9IHthOiAxfTtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IFVwZGF0ZXIoZWxlbWVudCwgc3ViamVjdCkuZ2V0U3ViamVjdCgpLmEpLnRvLmJlLmVxdWFsKDEpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ3Rlc3QgY29udHJvbCBtZXRob2RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ2VuYWJsZUV2ZW50UHJvY2Vzc2luZygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IFVwZGF0ZXIoZWxlbWVudCkuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCkpLnRvLmJlLmluc3RhbmNlb2YoVXBkYXRlcik7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdCgnZGlzYWJsZUV2ZW50UHJvY2Vzc2luZygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IFVwZGF0ZXIoZWxlbWVudCkuZGlzYWJsZUV2ZW50UHJvY2Vzc2luZygpKS50by5iZS5pbnN0YW5jZW9mKFVwZGF0ZXIpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ3Rlc3QgRXJyb3JzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIHRocm93IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudCBFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IFVwZGF0ZXIoKSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyB2YWx1ZSBpcyB3cm9uZycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IFVwZGF0ZXIoZWxlbWVudCwgbnVsbCkpLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgdGhyb3cgRXJyb3I6IHRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGUnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcblxuICAgICAgICAgICAgICAgIGxldCB1ID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGxldCBwcm9taXNlID0gdS5ydW4oKTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJzaG91bGQgbmV2ZXIgY2FsbGVkIVwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGUpLmlzLmluc3RhbmNlT2YoRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGUgKyBcIlwiKS50by5iZS5lcXVhbCgnRXJyb3I6IHRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xuXG4gICAgICAgICAgICB9KTtcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1VwZGF0ZXIoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVzY3JpYmUoJ25ldyBVcGRhdGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBkb2N1bWVudCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKVxuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBuZXcgVXBkYXRlcihcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAge31cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnVXBkYXRlcigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkZXNjcmliZSgnUmVwZWF0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGJ1aWxkIDYgbGkgZWxlbWVudHMnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcblxuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpOiAnMCd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aTogJzEnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2k6ICcyJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpOiAnMyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aTogJzQnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2k6ICc1J30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGQucnVuKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxsaSBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6YS5iLicgKyBpICsgJyB8IHRvanNvblwiIGRhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwiY3VycmVudC0nICsgaSArICdcIj57XCJpXCI6XCInICsgaSArICdcIn08L2xpPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaChcbiAgICAgICAgICAgICAgICAgICAgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihlKSlcbiAgICAgICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdVcGRhdGVyKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWw0O1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdFdmVudGhhbmRsaW5nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgdXBkYXRlciwgZm9ybTEsIHByb3h5b2JzZXJ2ZXI7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBwcm94eW9ic2VydmVyID0gbmV3IFByb3h5T2JzZXJ2ZXIoe30pXG4gICAgICAgICAgICAgICAgdXBkYXRlciA9IG5ldyBVcGRhdGVyKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtMScpLCBwcm94eW9ic2VydmVyKTtcbiAgICAgICAgICAgICAgICBmb3JtMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb3JtMScpO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAvLyBoZXJlIGNsaWNrIGV2ZW50cyBhcmUgdGhyb3duIG9uIHRoZSBjaGVja2JveCBhbmQgdGhlIHNldHRpbmcgb2YgdGhlIHZhbHVlIGlzIG9ic2VydmVkIHZpYSB0aGUgcHJveHlvYnNlcnZlci5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgaGFuZGxlIGNoZWNrYm94IGNsaWNrIGV2ZW50cycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVyLmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHN1YmplY3QgPSB1cGRhdGVyLmdldFN1YmplY3QoKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc3ViamVjdCkuaXMuZXF1YWwocHJveHlvYnNlcnZlci5nZXRTdWJqZWN0KCkpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGV4cGVjdGVkID0gWydjaGVja2VkJywgdW5kZWZpbmVkLCAnY2hlY2tlZCddO1xuICAgICAgICAgICAgICAgIC8vIGhlcmUgdGhlIG5vdGF0aW9uIHdpdGggZnVuY3Rpb24gaXMgaW1wb3J0YW50LCBiZWNhdXNlIHRoZSBwb2ludGVyIGlzIHNldC5cbiAgICAgICAgICAgICAgICBwcm94eW9ic2VydmVyLmF0dGFjaE9ic2VydmVyKG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSBleHBlY3RlZC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSA9PT0gdW5kZWZpbmVkICYmIGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkgZG9uZShuZXcgRXJyb3IoJ3RvIG1hbnkgY2FsbHMnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0U3ViamVjdCgpWydzdGF0ZSddICE9PSBlKSBkb25lKG5ldyBFcnJvcih0aGlzLmdldFN1YmplY3QoKVsnc3RhdGUnXSArICcgc2hvdWxkICcgKyBlKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybTEucXVlcnlTZWxlY3RvcignW25hbWU9Y2hlY2tib3hdJykuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwKVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybTEucXVlcnlTZWxlY3RvcignW25hbWU9Y2hlY2tib3hdJykuY2xpY2soKTtcbiAgICAgICAgICAgICAgICB9LCAxMClcblxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhbmRsZSByYWRpbyBjbGljayBldmVudHMgMScsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVyLmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHN1YmplY3QgPSB1cGRhdGVyLmdldFN1YmplY3QoKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc3ViamVjdCkuaXMuZXF1YWwocHJveHlvYnNlcnZlci5nZXRTdWJqZWN0KCkpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGV4cGVjdGVkID0gWydyMScsICdyMicsICdyMSddO1xuICAgICAgICAgICAgICAgIGxldCBjbGlja1RhcmdldHMgPSBbJ3IyJywgJ3IxJ11cbiAgICAgICAgICAgICAgICAvLyBoZXJlIHRoZSBub3RhdGlvbiB3aXRoIGZ1bmN0aW9uIGlzIGltcG9ydGFudCwgYmVjYXVzZSB0aGUgdGhpcyBwb2ludGVyIGlzIHNldC5cbiAgICAgICAgICAgICAgICBwcm94eW9ic2VydmVyLmF0dGFjaE9ic2VydmVyKG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSBleHBlY3RlZC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSA9PT0gdW5kZWZpbmVkICYmIGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkgZG9uZShuZXcgRXJyb3IoJ3RvIG1hbnkgY2FsbHMnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSB0aGlzLmdldFN1YmplY3QoKVsncmFkaW8nXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgIT09IGUpIGRvbmUobmV3IEVycm9yKHYgKyAnIHNob3VsZCAnICsgZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjbGlja1RhcmdldHMuc2hpZnQoKSkuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwKVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3IxJykuY2xpY2soKTtcbiAgICAgICAgICAgICAgICB9LCAxMClcblxuICAgICAgICAgICAgICAgIC8vIG5vIGhhbmRsZXIgLy8gYmluZFxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncngnKS5jbGljaygpO1xuICAgICAgICAgICAgICAgIH0sIDIwKVxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhbmRsZSBzZWxlY3QgY2xpY2sgZXZlbnRzIDInLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0MScpO1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblxuICAgICAgICAgICAgICAgIGxldCBzdWJqZWN0ID0gdXBkYXRlci5nZXRTdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHN1YmplY3QpLmlzLmVxdWFsKHByb3h5b2JzZXJ2ZXIuZ2V0U3ViamVjdCgpKTtcblxuICAgICAgICAgICAgICAgIGxldCBleHBlY3RlZCA9IFsndmFsdWUyJywgJ3ZhbHVlMScsICd2YWx1ZTInXTtcbiAgICAgICAgICAgICAgICAvLyBoZXJlIHRoZSBub3RhdGlvbiB3aXRoIGZ1bmN0aW9uIGlzIGltcG9ydGFudCwgYmVjYXVzZSB0aGUgdGhpcyBwb2ludGVyIGlzIHNldC5cbiAgICAgICAgICAgICAgICBwcm94eW9ic2VydmVyLmF0dGFjaE9ic2VydmVyKG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSBleHBlY3RlZC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSA9PT0gdW5kZWZpbmVkICYmIGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkgZG9uZShuZXcgRXJyb3IoJ3RvIG1hbnkgY2FsbHMnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSB0aGlzLmdldFN1YmplY3QoKVsnc2VsZWN0J107XG4gICAgICAgICAgICAgICAgICAgIGlmICh2ICE9PSBlKSBkb25lKG5ldyBFcnJvcih2ICsgJyBzaG91bGQgJyArIGUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4ID0gc2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4ID09PSAxID8gMCA6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5jbGljaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTApXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBzZXQgdmFsdWUgYW5kIHNpbXVsYXRlIGNsaWNrIGV2ZW50IGZvciBidWJibGVcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5zZWxlY3RlZEluZGV4ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5jbGljaygpO1xuXG4gICAgICAgICAgICAgICAgfSwgMjApXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhbmRsZSB0ZXh0YXJlYSBldmVudHMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IHRleHRhcmVhRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXh0YXJlYScpO1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblxuICAgICAgICAgICAgICAgIGxldCBzdWJqZWN0ID0gdXBkYXRlci5nZXRTdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHN1YmplY3QpLmlzLmVxdWFsKHByb3h5b2JzZXJ2ZXIuZ2V0U3ViamVjdCgpKTtcblxuICAgICAgICAgICAgICAgIGxldCBleHBlY3RlZCA9IFsndGVzdFgnLCAnbG9yZW0gaXBzdW0nLCAnJ107XG4gICAgICAgICAgICAgICAgbGV0IHRlc3RWYWx1ZXMgPSBbXCJsb3JlbSBpcHN1bVwiLCBcIlwiXTtcbiAgICAgICAgICAgICAgICAvLyBoZXJlIHRoZSBub3RhdGlvbiB3aXRoIGZ1bmN0aW9uIGlzIGltcG9ydGFudCwgYmVjYXVzZSB0aGUgdGhpcyBwb2ludGVyIGlzIHNldC5cbiAgICAgICAgICAgICAgICBwcm94eW9ic2VydmVyLmF0dGFjaE9ic2VydmVyKG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSBleHBlY3RlZC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSA9PT0gdW5kZWZpbmVkICYmIGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkgZG9uZShuZXcgRXJyb3IoJ3RvIG1hbnkgY2FsbHMnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSB0aGlzLmdldFN1YmplY3QoKVsndGV4dGFyZWEnXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHYpICE9PSBKU09OLnN0cmluZ2lmeShlKSkgZG9uZShuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkodikgKyAnIHNob3VsZCAnICsgSlNPTi5zdHJpbmdpZnkoZSkpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dGFyZWFFbGVtZW50LnZhbHVlID0gdGVzdFZhbHVlcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRhcmVhRWxlbWVudC5jbGljaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTApXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHNldCB2YWx1ZSBhbmQgc2ltdWxhdGUgY2xpY2sgZXZlbnQgZm9yIGJ1YmJsZVxuICAgICAgICAgICAgICAgICAgICB0ZXh0YXJlYUVsZW1lbnQudmFsdWUgPSBcInRlc3RYXCI7XG4gICAgICAgICAgICAgICAgICAgIHRleHRhcmVhRWxlbWVudC5jbGljaygpO1xuXG4gICAgICAgICAgICAgICAgfSwgMjApXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhbmRsZSBtdWx0aXBsZSBzZWxlY3QgZXZlbnRzJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdDInKTtcblxuICAgICAgICAgICAgICAgIHVwZGF0ZXIuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgc3ViamVjdCA9IHVwZGF0ZXIuZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzdWJqZWN0KS5pcy5lcXVhbChwcm94eW9ic2VydmVyLmdldFN1YmplY3QoKSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZXhwZWN0ZWQgPSBbXG4gICAgICAgICAgICAgICAgICAgIFsndmFsdWUxJ10sXG4gICAgICAgICAgICAgICAgICAgIFsndmFsdWUyJywgJ3ZhbHVlMycsICd2YWx1ZTQnXSxcbiAgICAgICAgICAgICAgICAgICAgWyd2YWx1ZTEnLCAndmFsdWU0J10sXG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgIGxldCB0ZXN0U2VsZWN0aW9ucyA9IFtcbiAgICAgICAgICAgICAgICAgICAgW2ZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgICAgICAgICAgW3RydWUsIGZhbHNlLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgXVxuXG4gICAgICAgICAgICAgICAgLy8gaGVyZSB0aGUgbm90YXRpb24gd2l0aCBmdW5jdGlvbiBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlIHRoaXMgcG9pbnRlciBpcyBzZXQuXG4gICAgICAgICAgICAgICAgcHJveHlvYnNlcnZlci5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBlID0gZXhwZWN0ZWQuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPT09IHVuZGVmaW5lZCAmJiBleHBlY3RlZC5sZW5ndGggPT09IDApIGRvbmUobmV3IEVycm9yKCd0byBtYW55IGNhbGxzJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gdGhpcy5nZXRTdWJqZWN0KClbJ211bHRpc2VsZWN0J107XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHYpICE9PSBKU09OLnN0cmluZ2lmeShlKSkgZG9uZShuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkodikgKyAnIHNob3VsZCAnICsgSlNPTi5zdHJpbmdpZnkoZSkpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSB0ZXN0U2VsZWN0aW9ucy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1swXS5zZWxlY3RlZCA9IHZbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5vcHRpb25zWzFdLnNlbGVjdGVkID0gdlsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbMl0uc2VsZWN0ZWQgPSB2WzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1szXS5zZWxlY3RlZCA9IHZbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5jbGljaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTApXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1swXS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1sxXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbMl0uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5vcHRpb25zWzNdLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQuY2xpY2soKTtcblxuICAgICAgICAgICAgICAgIH0sIDIwKVxuXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cblxuICAgIGRlc2NyaWJlKCdVcGRhdGVyKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdSZXBsYWNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGFkZCBsb3dlciBoZWxsbyBhbmQgSEVMTE95ZXMhJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG5cblxuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IFwiSEFMTE9cIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcblxuXG4gICAgICAgICAgICAgICAgZC5zZXRDYWxsYmFjaygnbXlmb3JtYXR0ZXInLCBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSArICd5ZXMhJ1xuICAgICAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgICAgIGQucnVuKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDp0ZXh0IHwgdG9sb3dlclwiPmhhbGxvPC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDp0ZXh0IHwgY2FsbDpteWZvcm1hdHRlclwiPkhBTExPeWVzITwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInN0YXRpYzpoZWxsb1xcXFwgXCI+aGVsbG8gPC9kaXY+Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKFxuICAgICAgICAgICAgICAgICAgICBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGUpKVxuICAgICAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ1VwZGF0ZXIoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDM7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ1JlcGxhY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IG5ldyBVcGRhdGVyKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aTogJzAnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuXG5cbiAgICAgICAgICAgICAgICBkLnJ1bigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwibXlpZCBwYXRoOmEuYlwiPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPHAgZGF0YS1tb25zdGVyLWluc2VydD1cIm15aW5uZXJpZCBwYXRoOmEuYlwiIGRhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwibXlpZC0wXCI+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8c3BhbiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6YS5iLjAgfCB0b2pzb25cIiBkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm15aW5uZXJpZC0wXCI+e1wiaVwiOlwiMFwifTwvc3Bhbj4nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaChcbiAgICAgICAgICAgICAgICAgICAgZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihlKSlcbiAgICAgICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdVcGRhdGVyKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc2NyaWJlKCdBdHRyaWJ1dGVzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNoYW5nZSBhdHRyaWJ1dGVzJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MycpXG5cbiAgICAgICAgICAgICAgICBsZXQgdGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXh0JylcbiAgICAgICAgICAgICAgICBleHBlY3QodGV4dC52YWx1ZSkudG8uYmUuZXF1YWwoXCJcIik7XG5cbiAgICAgICAgICAgICAgICBsZXQgcmFkaW8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmFkaW8nKVxuICAgICAgICAgICAgICAgIGV4cGVjdChyYWRpby5jaGVja2VkKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgICAgIGxldCBjaGVja2JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGVja2JveCcpXG4gICAgICAgICAgICAgICAgZXhwZWN0KGNoZWNrYm94LmNoZWNrZWQpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWxlY3QnKVxuICAgICAgICAgICAgICAgIGV4cGVjdChzZWxlY3Quc2VsZWN0ZWRJbmRleCkudG8uYmUuZXF1YWwoMCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgbXVsdGlzZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXVsdGlzZWxlY3QnKVxuICAgICAgICAgICAgICAgIGV4cGVjdChtdWx0aXNlbGVjdC5zZWxlY3RlZEluZGV4KS50by5iZS5lcXVhbCgtMSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgdGV4dGFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dGFyZWEnKVxuICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXh0YXJlYS52YWx1ZSkudG8uYmUuZXF1YWwoXCJcIik7XG5cblxuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOiBcImRpdi1jbGFzc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiaGVsbG9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBcImhlbGxvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaW86IFwidHJ1ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRhcmVhOiBcInRlc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXNlbGVjdDogWyd2YWx1ZTMnLCAndmFsdWU0JywgJ290aGVyLXZhbHVlNSddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdDogXCJ2YWx1ZTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveDogXCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG5cblxuICAgICAgICAgICAgICAgIGQucnVuKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDphLmJcIiBjbGFzcz1cImRpdi1jbGFzc1wiPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGlucHV0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphLmNcIiBpZD1cImlucHV0MVwiIHZhbHVlPVwiaGVsbG9cIj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzx0ZXh0YXJlYSBuYW1lPVwidGV4dGFyZWFcIiBpZD1cInRleHRhcmVhXCIgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEudGV4dGFyZWFcIiB2YWx1ZT1cInRlc3RcIj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxpbnB1dCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNoZWNrZWQgcGF0aDphLnJhZGlvXCIgdHlwZT1cInJhZGlvXCIgbmFtZT1cInJhZGlvXCIgdmFsdWU9XCJyMVwiIGlkPVwicmFkaW9cIiBjaGVja2VkPVwidHJ1ZVwiPicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QodGV4dC52YWx1ZSwgJ3RleHQgY29udHJvbCcpLnRvLmJlLmVxdWFsKGQuZ2V0U3ViamVjdCgpWydhJ11bJ2MnXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QocmFkaW8uY2hlY2tlZCwgJ3JhZGlvIGNvbnRyb2wnKS50by5iZS5lcXVhbCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXh0YXJlYS52YWx1ZSwgJ3RleHRhcmVhIGNvbnRyb2wnKS50by5iZS5lcXVhbChkLmdldFN1YmplY3QoKVsnYSddWyd0ZXh0YXJlYSddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChzZWxlY3Quc2VsZWN0ZWRJbmRleCwgJ3NlbGVjdCBjb250cm9sJykudG8uYmUuZXF1YWwoMSk7IC8vIFswPT5vdGhlci12YWx1ZSwgMT0+dmFsdWUyXVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXVsdGlzZWxlY3RTZWxlY3RlZE9wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2luZGV4LCBvYmpdIG9mIE9iamVjdC5lbnRyaWVzKG11bHRpc2VsZWN0LnNlbGVjdGVkT3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXNlbGVjdFNlbGVjdGVkT3B0aW9ucy5wdXNoKG9iai52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KG11bHRpc2VsZWN0U2VsZWN0ZWRPcHRpb25zKSwgJ211bHRpc2VsZWN0IGNvbnRyb2wnKS50by5iZS5lcXVhbChKU09OLnN0cmluZ2lmeShkLmdldFN1YmplY3QoKVsnYSddWydtdWx0aXNlbGVjdCddKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoY2hlY2tib3guY2hlY2tlZCwgJ2NoZWNrYm94IGNvbnRyb2wnKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKFxuICAgICAgICAgICAgICAgICAgICBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGUpKVxuICAgICAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdHZXQgQXR0cmlidXRlIFBpcGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBpZCwgbW9ja3M7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGlkID0gbmV3IElEKCdtb25zdGVyJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgIDxkaXYgaWQ9XCJgICsgaWQgKyBgXCJcbiAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDphIHwgaWY6dmFsdWU6XFxcXCBcIj48L2Rpdj5gXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBpbmNsdWRlIHNwYWNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQudG9TdHJpbmcoKSlcblxuICAgICAgICAgICAgY29uc3QgcGlwZSA9IGRpdi5nZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1yZXBsYWNlJyk7XG4gICAgICAgICAgICBleHBlY3QocGlwZS5sZW5ndGgpLnRvLmJlLmVxdWFsKDIwKTtcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ21hbnVlbCB1cGRhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBpZCwgbW9ja3M7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgaWQgPSBuZXcgSUQoJ21vbnN0ZXInKS50b1N0cmluZygpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYDxpbnB1dCBpZD1cImAgKyBpZCArIGBcImRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDpteXZhbHVlXCI+YFxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgZ2V0IHZhbHVlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkudmFsdWUgPSBcImhlbGxvXCI7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVyID0gbmV3IFVwZGF0ZXIobW9ja3MpO1xuICAgICAgICAgICAgY29uc3Qgc3ViamVjdCA9IHVwZGF0ZXIuZ2V0U3ViamVjdCgpO1xuXG4gICAgICAgICAgICBleHBlY3Qoc3ViamVjdCkudG8ubm90LmhhdmUucHJvcGVydHkoJ215dmFsdWUnKTtcbiAgICAgICAgICAgIHVwZGF0ZXIucmV0cmlldmUoKTtcbiAgICAgICAgICAgIGV4cGVjdChzdWJqZWN0KS50by5oYXZlLnByb3BlcnR5KCdteXZhbHVlJyk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgLyoqXG4gICAgICogaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vb3NzL2xpYnJhcmllcy9qYXZhc2NyaXB0L21vbnN0ZXIvLS9pc3N1ZXMvMTEyXG4gICAgICovXG4gICAgZGVzY3JpYmUoJ1VwZGF0ZXIoKSAyMDIyMDEwNycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgLy8gbGFuZ3VhZ2U9SFRNTFxuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpjb250ZW50XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgYDtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnQnVnZml4ICMxMTInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgYWRkICcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNvbnRhaW5lckVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJyk7XG4gICAgICAgICAgICAgICAgbGV0IG5ld0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTCA9ICd5ZWFoISA8Yj5UZXN0PC9iPiEnO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVySFRNTCA9IGNvbnRhaW5lckVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0hUTUwgPSBuZXdFbGVtZW50LmlubmVySFRNTDtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lckVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG5ld0VsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGQucnVuKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5lckVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdj55ZWFoISA8Yj5UZXN0PC9iPiE8L2Rpdj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDApXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSwgMTAwKVxuXG4gICAgICAgICAgICAgICAgLy8gZC5zZXRDYWxsYmFjaygnbXlmb3JtYXR0ZXInLCBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gYSArICd5ZXMhJ1xuICAgICAgICAgICAgICAgIC8vIH0pXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgZC5ydW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDp0ZXh0IHwgdG9sb3dlclwiPmhhbGxvPC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDp0ZXh0IHwgY2FsbDpteWZvcm1hdHRlclwiPkhBTExPeWVzITwvZGl2PicpO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInN0YXRpYzpoZWxsb1xcXFwgXCI+aGVsbG8gPC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIHJldHVybiBkb25lKCk7XG4gICAgICAgICAgICAgICAgLy8gICAgIH0pLmNhdGNoKFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgZSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZSkpXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC8vIH0sIDEwMClcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmltcG9ydCB7TG9jYWxlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHtnZXRMb2NhbGVPZkRvY3VtZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9sb2NhbGUubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdBdHRyaWJ1dGVzJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXRMb2NhbGVPZkRvY3VtZW50JywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW1wiZGVcIl0sXG4gICAgICAgICAgICBbXCJzbC1JVC1uZWRpc1wiXSxcbiAgICAgICAgICAgIFtcImVuLUdCXCJdLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgICAgIGl0KCdyZXR1cm4gbGFuZ3VhZ2UgJyArIGEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdodG1sJyk7XG4gICAgICAgICAgICAgICAgbGV0IG5vZGUgPSBodG1sLml0ZW0oMCk7XG5cbiAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnbGFuZycsIGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChnZXRMb2NhbGVPZkRvY3VtZW50KCkudG9TdHJpbmcoKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbiAgICBpdCgncmV0dXJuIGxhbmd1YWdlIGVuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgaHRtbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdodG1sJyk7XG4gICAgICAgIGxldCBub2RlID0gaHRtbC5pdGVtKDApO1xuICAgICAgICBsZXQgbGFuZz0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2xhbmcnKTtcblxuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZSgnbGFuZycpO1xuICAgICAgICBjb25zdCBsb2NhbGUgPSBnZXRMb2NhbGVPZkRvY3VtZW50KCk7XG4gICAgICAgIGV4cGVjdChsb2NhbGUpLnRvLmJlLmluc3RhbmNlT2YoTG9jYWxlKTtcbiAgICAgICAgZXhwZWN0KGxvY2FsZS5sb2NhbGVTdHJpbmcpLnRvLmJlLmVxdWFsKG5hdmlnYXRvci5sYW5ndWFnZSk7XG5cbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2xhbmcnLCBsYW5nKTtcbiAgICAgICAgXG4gICAgfSlcblxuXG59KSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7Z2V0RG9jdW1lbnRGcmFnbWVudEZyb21TdHJpbmd9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtUaGVtZSwgZ2V0RG9jdW1lbnRUaGVtZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdGhlbWUubWpzXCI7XG5cbmRlc2NyaWJlKCdUaGVtZScsIGZ1bmN0aW9uICgpIHtcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbmV3IFRoZW1lKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIFRoZW1lIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVGhlbWUoJ215LXRoZW1lJykpLmlzLmEuaW5zdGFuY2VPZihUaGVtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBUaGVtZS1OYW1lJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUaGVtZSgnbXktdGhlbWUnKS5nZXROYW1lKCkpLmlzLmVxdWFsKCdteS10aGVtZScpO1xuICAgICAgICB9KTtcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBFcnJvciBiZWNhdXNlIGVtcHR5IGFyZ3VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBUaGVtZSgpKS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93IEVycm9yIGJlY2F1c2Ugbm8gc3RyaW5nIGFyZ3VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBUaGVtZSgyKSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXREb2N1bWVudFRoZW1lKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIFRoZW1lIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChnZXREb2N1bWVudFRoZW1lKCkpLmlzLmEuaW5zdGFuY2VPZihUaGVtZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIERlZmF1bHQgVGhlbWUgbmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChnZXREb2N1bWVudFRoZW1lKCkuZ2V0TmFtZSgpKS5pcy5lcXVhbCgnbW9uc3RlcicpO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldERvY3VtZW50VGhlbWUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKS5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci10aGVtZS1uYW1lJywgJ3Rlc3R0aGVtZScpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJykucmVtb3ZlQXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZScpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRlc3R0aGVtZSBUaGVtZSBuYW1lJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGdldERvY3VtZW50VGhlbWUoKS5nZXROYW1lKCkpLmlzLmVxdWFsKCd0ZXN0dGhlbWUnKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcbn0pO1xuXG5cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2ludGVybmFsU3ltYm9sfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7Z2V0RG9jdW1lbnR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQge1Byb3h5T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8aW5wdXQgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOmFcIiBpZD1cInRlc3QyXCIgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmFcIj5cbmA7XG5cbi8vIGRlZmluZWQgaW4gY29uc3RhbnRzLm1qc1xuY29uc3QgdXBkYXRlclN5bWJvbEtleSA9IFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vY3VzdG9tLWVsZW1lbnRAQG9wdGlvbnMtdXBkYXRlci1saW5rXCJcbmNvbnN0IHVwZGF0ZXJTeW1ib2xTeW1ib2wgPSBTeW1ib2wuZm9yKHVwZGF0ZXJTeW1ib2xLZXkpO1xuXG5cbmRlc2NyaWJlKCdET00nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgQ3VzdG9tRWxlbWVudCwgcmVnaXN0ZXJDdXN0b21FbGVtZW50LCBUZXN0Q29tcG9uZW50LCBkb2N1bWVudCwgVGVzdENvbXBvbmVudDIsIGFzc2lnblVwZGF0ZXJUb0VsZW1lbnQsXG4gICAgICAgIGFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50O1xuXG4gICAgZGVzY3JpYmUoXCJhc3NpZ25VcGRhdGVyVG9FbGVtZW50XCIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIGluaXRKU0RPTShvcHRpb25zKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3VwZGF0ZXIubWpzXCIpLnRoZW4oKHl5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50ID0geXlbJ2FkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50J107XG4gICAgICAgICAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS9kb20vY3VzdG9tZWxlbWVudC5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21FbGVtZW50ID0gbVsnQ3VzdG9tRWxlbWVudCddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnblVwZGF0ZXJUb0VsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudHMsIG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQuY2FsbCh0aGlzLCBlbGVtZW50cywgdXBkYXRlclN5bWJvbFN5bWJvbCwgb2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICAvKipcbiAgICAgICAgICogdGhpcyB0ZXN0IHRyeSB0byBzaW11bGF0ZSB0aGUgYnVnIHRoYXQgd2FzIGZvdW5kIGluIHRoZSBhc3NpZ25VcGRhdGVyVG9FbGVtZW50IGZ1bmN0aW9uLlxuICAgICAgICAgKiBUaGUgYnVnIHdhcyB0aGF0IHRoZSB1cGRhdGVyIHdhcyBub3QgYXNzaWduZWQgdG8gdGhlIGVsZW1lbnQgd2hlbiB0aGUgZWxlbWVudCB3YXMgY3JlYXRlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogdW5mb3J0dW5hdGVseSwgdGhpcyB0ZXN0IGRvZXMgbm90IHJlcHJvZHVjZSB0aGUgYnVnLlxuICAgICAgICAgKi9cbiAgICAgICAgaXQoXCJzaG91bGQgYXNzaWduIGFuIHVwZGF0ZXIgdG8gYW4gZWxlbWVudFwiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDInKTtcblxuICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibW9ja3NcIikuaW5uZXJIVE1MKS50by5lcXVhbChodG1sMik7XG5cbiAgICAgICAgICAgIGNvbnN0IGEgPSB7YTogMX07XG4gICAgICAgICAgICBjb25zdCBiID0ge2I6IDJ9O1xuXG4gICAgICAgICAgICBjb25zdCBhcCA9IG5ldyBQcm94eU9ic2VydmVyKGEpO1xuICAgICAgICAgICAgY29uc3QgYnAgPSBuZXcgUHJveHlPYnNlcnZlcihiKTtcblxuICAgICAgICAgICAgY29uc3QgeCA9IGFwLmdldFN1YmplY3QoKVxuICAgICAgICAgICAgY29uc3QgeSA9IGJwLmdldFN1YmplY3QoKVxuXG4gICAgICAgICAgICBjb25zdCBzZXQgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBzZXQuYWRkKGVsZW1lbnQpO1xuXG4gICAgICAgICAgICBhc3NpZ25VcGRhdGVyVG9FbGVtZW50LmNhbGwoZWxlbWVudCwgc2V0LCBhcCk7XG4gICAgICAgICAgICBhc3NpZ25VcGRhdGVyVG9FbGVtZW50LmNhbGwoZWxlbWVudCwgc2V0LCBicCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeSh4KSkudG8uZXF1YWwoJ3tcImFcIjoxfScpO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KHkpKS50by5lcXVhbCgne1wiYlwiOjJ9Jyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHN5ID0gdXBkYXRlclN5bWJvbFN5bWJvbDtcblxuICAgICAgICAgICAgbGV0IHYgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1vYmplY3RsaW5rXCIpO1xuICAgICAgICAgICAgZXhwZWN0KHYpLnRvLmVxdWFsKCdTeW1ib2woJyArIHVwZGF0ZXJTeW1ib2xLZXkgKyAnKScpO1xuXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVyID0gZWxlbWVudFtzeV07XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiB1cGRhdGVyKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB1IG9mIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgdS5ydW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHUuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhwZWN0KHVwZGF0ZXIpLnRvLmJlLmFuLmluc3RhbmNlb2YoU2V0KTtcbiAgICAgICAgICAgIGV4cGVjdCh1cGRhdGVyKS50by5iZS5hKFwiU2V0XCIpO1xuXG4gICAgICAgICAgICB4LmEgPSAzO1xuICAgICAgICAgICAgYnAuZ2V0U3ViamVjdCgpLmIgPSA0O1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrSFRNTCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibW9ja3NcIik7XG5cbiAgICAgICAgICAgICAgICAvLyBodG1sIGV4cGV4dGVkOlxuICAgICAgICAgICAgICAgIC8vIDxpbnB1dCBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6YVwiIGlkPVwidGVzdDJcIiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInZhbHVlIHBhdGg6YVwiIGRhdGEtbW9uc3Rlci1vYmplY3RsaW5rPVwiU3ltYm9sKEBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAb2JqZWN0LXVwZGF0ZXItbGluaylcIiB2YWx1ZT1cIjNcIj5cblxuICAgICAgICAgICAgICAgIGV4cGVjdChtb2NrSFRNTC5xdWVyeVNlbGVjdG9yKFwiI3Rlc3QyXCIpKS50by5oYXZlLnZhbHVlKCczJylcbiAgICAgICAgICAgICAgICBleHBlY3QobW9ja0hUTUwucXVlcnlTZWxlY3RvcihcIiN0ZXN0MlwiKSkudG8uaGF2ZS5hdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vYmplY3RsaW5rJywgJ1N5bWJvbCgnICsgdXBkYXRlclN5bWJvbEtleSArICcpJylcbiAgICAgICAgICAgICAgICAvL2V4cGVjdChtb2NrSFRNTCkudG8uaGF2ZS5odG1sKHJlc3VsdEhUTUwpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQudmFsdWUpLnRvLmVxdWFsKFwiM1wiKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShhcC5nZXRSZWFsU3ViamVjdCgpKSkudG8uZXF1YWwoJ3tcImFcIjozfScpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShicC5nZXRSZWFsU3ViamVjdCgpKSkudG8uZXF1YWwoJ3tcImJcIjo0fScpO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSwgNTApXG5cbiAgICAgICAgfSlcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnQ3VzdG9tRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgaW5pdEpTRE9NKHt9KS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS9kb20vY3VzdG9tZWxlbWVudC5tanNcIikudGhlbigobSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21FbGVtZW50ID0gbVsnQ3VzdG9tRWxlbWVudCddO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50ID0gbVsncmVnaXN0ZXJDdXN0b21FbGVtZW50J107XG4gICAgICAgICAgICAgICAgICAgICAgICBUZXN0Q29tcG9uZW50ID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJtb25zdGVyLXRlc3RjbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudClcblxuICAgICAgICAgICAgICAgICAgICAgICAgVGVzdENvbXBvbmVudDIgPSBjbGFzcyBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm1vbnN0ZXItdGVzdGNsYXNzMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGRlZmF1bHRzKCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVtb3Rlc3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW46ICc8aDE+PC9oMT48YXJ0aWNsZT48cD50ZXN0PC9wPjxkaXYgaWQ9XCJjb250YWluZXJcIj48L2Rpdj48L2FydGljbGU+J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlc3RDb21wb25lbnQyKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ0N1c3RvbUVsZW1lbnQoKSB3aXRoIENvbmZpZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmVhZCBjb25maWcgZnJvbSB0YWcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPHNjcmlwdCBpZD1cImNvbmZpZzFcIiB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiPlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJkZW1vdGVzdFwiOjE0MjVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zY3JpcHQ+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgPG1vbnN0ZXItdGVzdGNsYXNzMiBpZD1cInRoaXNpc2F0ZXN0XCIgZGF0YS1tb25zdGVyLW9wdGlvbnMtc2VsZWN0b3I9XCIjY29uZmlnMVwiPlxuICAgICAgICAgICAgICAgIDwvbW9uc3Rlci10ZXN0Y2xhc3MyPlxuICAgICAgICAgICAgICAgIGA7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9uc3RlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0aGlzaXNhdGVzdCcpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChtb25zdGVyLmdldE9wdGlvbignZGVtb3Rlc3QnKSkuaXMuZXFsKDE0MjUpO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGN1c3RvbS1lbGVtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IG5ldyBUZXN0Q29tcG9uZW50KCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2Nvbm5lY3QgZW1wdHkgZWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdkb2N1bWVudCBzaG91bGQgY29udGFpbiBtb25zdGVyLXRlc3RjbGFzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGVzdGNsYXNzJyk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJykuYXBwZW5kQ2hpbGQoZCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdtb25zdGVyLXRlc3RjbGFzcycpLmxlbmd0aCkuaXMuZXF1YWwoMSk7XG4gICAgICAgICAgICAgICAgLy8gbm8gZGF0YS1tb25zdGVyLW9iamVjdGxpbms9XCJTeW1ib2wobW9uc3RlclVwZGF0ZXIpXCIgYmVjYXVzZSBpdCBoYXMgbm90aGluZyB0byB1cGRhdGVcbiAgICAgICAgICAgICAgICAvLyBidXQgZGF0YS1tb25zdGVyLWVycm9yPVwiRXJyb3I6IGh0bWwgaXMgbm90IHNldC5cIlxuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci10ZXN0Y2xhc3MgZGF0YS1tb25zdGVyLWVycm9yPVwiRXJyb3I6IGh0bWwgaXMgbm90IHNldC5cIj48L21vbnN0ZXItdGVzdGNsYXNzPicpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdjb25uZWN0IGVsZW1lbnQgd2l0aCBodG1sJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ2RvY3VtZW50IHNob3VsZCBjb250YWluIG1vbnN0ZXItdGVzdGNsYXNzMicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzczInKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIC8vIGluc2VydCBET00gcnVuIGluIGV4dHJhIHByb2Nlc3MgdmlhIHNldFRpbWVvdXQhXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21vbnN0ZXItdGVzdGNsYXNzMicpLmxlbmd0aCkuaXMuZXF1YWwoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21vbnN0ZXItdGVzdGNsYXNzMicpLml0ZW0oMCkuc2hhZG93Um9vdC5pbm5lckhUTUwpLmlzLmVxdWFsKCc8aDE+PC9oMT48YXJ0aWNsZT48cD50ZXN0PC9wPjxkaXYgaWQ9XCJjb250YWluZXJcIj48L2Rpdj48L2FydGljbGU+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItdGVzdGNsYXNzMiBkYXRhLW1vbnN0ZXItb2JqZWN0bGluaz1cIlN5bWJvbCgnICsgdXBkYXRlclN5bWJvbEtleSArICcpXCI+PC9tb25zdGVyLXRlc3RjbGFzczI+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9LCAxMCk7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnT3B0aW9ucyBjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGl0KCdkZWxlZ2F0ZXNGb2N1cyBzaG91bGQgY2hhbmdlIGZyb20gdHJ1ZSB0byBmYWxzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGVzdGNsYXNzJylcblxuICAgICAgICAgICAgICAgIGNvbnN0IG8gPSBlbGVtZW50W2ludGVybmFsU3ltYm9sXS5yZWFsU3ViamVjdDtcbiAgICAgICAgICAgICAgICBleHBlY3QoT2JqZWN0LmlzKGVsZW1lbnRbaW50ZXJuYWxTeW1ib2xdLnJlYWxTdWJqZWN0LCBvKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50W2ludGVybmFsU3ltYm9sXS5yZWFsU3ViamVjdC5vcHRpb25zLmRlbGVnYXRlc0ZvY3VzKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50W2ludGVybmFsU3ltYm9sXS5zdWJqZWN0Lm9wdGlvbnMuZGVsZWdhdGVzRm9jdXMpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0T3B0aW9uKCdkZWxlZ2F0ZXNGb2N1cycpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChPYmplY3QuaXMoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3QsIG8pKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICAgICAgLy8gZWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX09QVElPTlMsIEpTT04uc3RyaW5naWZ5KHtkZWxlZ2F0ZXNGb2N1czogZmFsc2V9KSk7XG4gICAgICAgICAgICAgICAgLy8gZXhwZWN0KE9iamVjdC5pcyhlbGVtZW50W2ludGVybmFsU3ltYm9sXS5yZWFsU3ViamVjdCwgbykpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyBleHBlY3QoZWxlbWVudC5nZXRPcHRpb24oJ2RlbGVnYXRlc0ZvY3VzJykpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIGV4cGVjdChlbGVtZW50W2ludGVybmFsU3ltYm9sXS5yZWFsU3ViamVjdC5vcHRpb25zLmRlbGVnYXRlc0ZvY3VzKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICAvLyBleHBlY3QoT2JqZWN0LmlzKGVsZW1lbnRbaW50ZXJuYWxTeW1ib2xdLnJlYWxTdWJqZWN0LCBvKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ3NldE9wdGlvbnMoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ3NoYWRvd01vZGUnLCAneDEnXSxcbiAgICAgICAgICAgICAgICBbJ3RlbXBsYXRlcy5tYWluJywgJ3gyJ10sIC8vIGlzIGV4cGxpY2l0bHkgc2V0IHRvIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIFsnZGVsZWdhdGVzRm9jdXMnLCAneDQnXSxcbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG5cbiAgICAgICAgICAgICAgICBsZXQga2V5ID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IG5ld1ZhbHVlID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgICBsZXQgdGV4dCA9IGtleSArICcgc2hvdWxkIHJldHVybiAnICsgbmV3VmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKG5ld1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IGtleSArICcgd2FzIG5vdCBzZXQsIHRoZXJlZm9yZSBkZWZhdWx0ICcgKyBuZXdWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIGl0KHRleHQsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGVzdGNsYXNzJyk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkLmdldE9wdGlvbihrZXkpKS50by5iZS5ub3QuZXF1YWwobmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgeCA9IGQuc2V0T3B0aW9uKGtleSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZC5nZXRPcHRpb24oa2V5KSkudG8uYmUuZXF1YWwobmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2dldE9wdGlvbnMoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsnc2hhZG93TW9kZScsICdvcGVuJ10sXG4gICAgICAgICAgICAgICAgWyd0ZW1wbGF0ZXMubWFpbicsIHVuZGVmaW5lZF0sIC8vIGlzIGV4cGxpY2l0bHkgc2V0IHRvIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIFsnZGVsZWdhdGVzRm9jdXMnLCB0cnVlXSxcbiAgICAgICAgICAgICAgICBbJ3gueS56JywgdHJ1ZSwgdHJ1ZV0sIC8vIHgueS56IGlzbnQgc2V0LCBkZWZhdWx0VmFsdWUgaXMgdXNlZFxuICAgICAgICAgICAgICAgIFsneCcsIHRydWUsIHRydWVdIC8vIHggaXNudCBzZXQsIGRlZmF1bHRWYWx1ZSBpcyB1c2VkXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuXG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBkZWZhdWx0VmFsdWUgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgICAgIGxldCB0ZXh0ID0ga2V5ICsgJyBzaG91bGQgcmV0dXJuICcgKyB2YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IGtleSArICcgd2FzIG5vdCBzZXQsIHRoZXJlZm9yZSBkZWZhdWx0ICcgKyBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICBpdCh0ZXh0LCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzcycpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgeCA9IGQuZ2V0T3B0aW9uKGtleSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHgpLnRvLmJlLmVxdWFsKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzExM1xuICAgICAgICAgKi9cbiAgICAgICAgZGVzY3JpYmUoJ0Fzc2lnbiBDU1NTdHlsZSBhcyBBcnJheSB3aXRoIHdyb25nIHR5cGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGh0bWxUQUcgPSAnbW9uc3Rlci10ZXN0Y2xhc3MteDEnO1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MsIFRlc3RDb21wb25lbnRYMTtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuXG4gICAgICAgICAgICAgICAgVGVzdENvbXBvbmVudFgxID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sVEFHXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdHJ1ZV07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZ2V0IGRlZmF1bHRzKCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbjogJzxoMT50ZXN0PC9oMT4nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZXN0Q29tcG9uZW50WDEpXG5cblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoaHRtbFRBRyArIFwiIHNob3VsZCB0aHJvdyBFeGNlcHRpb25cIiwgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaHRtbFRBRyk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICAgICAgZGl2LmFwcGVuZChkKTtcblxuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRpdikuY29udGFpbi5odG1sKCdkYXRhLW1vbnN0ZXItZXJyb3I9XCJUeXBlRXJyb3I6IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBDU1NTdHlsZVNoZWV0XCInKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KVxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzExM1xuICAgICAgICAgKi9cbiAgICAgICAgZGVzY3JpYmUoJ0Fzc2lnbiBDU1NTdHlsZSBhcyBBcnJheSBhbmQgQ1NTU3R5bGVzaGVldCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgaHRtbFRBRyA9ICdtb25zdGVyLXRlc3RjbGFzcy14MTEzLTInO1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MsIFRlc3RDb21wb25lbnRYMTEzWDI7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgICAgICAgICBUZXN0Q29tcG9uZW50WDExM1gyID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sVEFHXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgZ2V0IGRlZmF1bHRzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7bWFpbjogJzxoMT50ZXN0PC9oMT4nfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gKG5ldyBDU1NTdHlsZVNoZWV0KCkpXG4gICAgICAgICAgICAgICAgICAgICAgICBzLmluc2VydFJ1bGUoJ2EgeyBjb2xvciA6IHJlZH0nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtzXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZXN0Q29tcG9uZW50WDExM1gyKVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KGh0bWxUQUcgKyBcIiBzaG91bGQgdGhyb3cgRXhjZXB0aW9uIDJcIiwgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaHRtbFRBRyk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICAgICAgZGl2LmFwcGVuZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLnNoYWRvd1Jvb3QuaW5uZXJIVE1MKS5pcy5lcSgnPGgxPnRlc3Q8L2gxPicpO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcblxuICAgICAgICAvKipcbiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vb3NzL2xpYnJhcmllcy9qYXZhc2NyaXB0L21vbnN0ZXIvLS9pc3N1ZXMvMTEzXG4gICAgICAgICAqL1xuICAgICAgICBkZXNjcmliZSgnQXNzaWduIENTU1N0eWxlIGFzIEFycmF5IGFuZCBDU1MgYXMgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCBodG1sVEFHID0gJ21vbnN0ZXItdGVzdGNsYXNzLXgxMTMtMjEnO1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MsIFRlc3RDb21wb25lbnRYMTEzWDIyO1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICAgICAgVGVzdENvbXBvbmVudFgxMTNYMjIgPSBjbGFzcyBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWxUQUdcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBnZXQgZGVmYXVsdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXM6IHttYWluOiAnPGgxPnRlc3Q8L2gxPid9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2EgeyBjb2xvcjpyZWQgfSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudFgxMTNYMjIpXG5cblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoaHRtbFRBRyArIFwiIHNob3VsZCBlcSA8c3R5bGU+YSB7IGNvbG9yOnJlZCB9PC9zdHlsZT48aDE+dGVzdDwvaDE+XCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGh0bWxUQUcpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgICAgIGRpdi5hcHBlbmQoZCk7XG5cblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLnNoYWRvd1Jvb3QuaW5uZXJIVE1MKS5pcy5lcSgnPHN0eWxlPmEgeyBjb2xvcjpyZWQgfTwvc3R5bGU+PGgxPnRlc3Q8L2gxPicpO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBsaW5rIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzExM1xuICAgICAgICAgKi9cbiAgICAgICAgZGVzY3JpYmUoJ0Fzc2lnbiBDU1NTdHlsZSBhcyBBcnJheSBhbmQgQ1NTIGFzIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgaHRtbFRBRyA9ICdtb25zdGVyLXRlc3RjbGFzcy14MTEzLTIyJztcblxuICAgICAgICAgICAgbGV0IG1vY2tzLCBUZXN0Q29tcG9uZW50WDExM1gyMjM7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgICAgICAgICBUZXN0Q29tcG9uZW50WDExM1gyMjMgPSBjbGFzcyBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWxUQUdcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBnZXQgZGVmYXVsdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXM6IHttYWluOiAnPGgxPnRlc3Q8L2gxPid9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWydhIHsgY29sb3I6cmVkIH0nXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZXN0Q29tcG9uZW50WDExM1gyMjMpXG5cblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoaHRtbFRBRyArIFwiIHNob3VsZCBlcSA8c3R5bGU+YSB7IGNvbG9yOnJlZCB9PC9zdHlsZT48aDE+dGVzdDwvaDE+XCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGh0bWxUQUcpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgICAgIGRpdi5hcHBlbmQoZCk7XG5cblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLnNoYWRvd1Jvb3QuaW5uZXJIVE1MKS5pcy5lcSgnPHN0eWxlPmEgeyBjb2xvcjpyZWQgfTwvc3R5bGU+PGgxPnRlc3Q8L2gxPicpO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnaGFzTm9kZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3M7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KFwiaGFzTm9kZSBtb25zdGVyLXRlc3RjbGFzcyBzaG91bGQgcmV0dXJuIC4uLlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlc3RjbGFzcycpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHAxID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xuICAgICAgICAgICAgICAgIGxldCB0MSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCd0ZXN0MScpO1xuICAgICAgICAgICAgICAgIHAxLmFwcGVuZENoaWxkKHQxKTtcblxuICAgICAgICAgICAgICAgIGxldCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgndGVzdCcpO1xuICAgICAgICAgICAgICAgIHAuYXBwZW5kQ2hpbGQocDEpO1xuICAgICAgICAgICAgICAgIHAuYXBwZW5kQ2hpbGQodCk7XG4gICAgICAgICAgICAgICAgZC5hcHBlbmRDaGlsZChwKTtcblxuICAgICAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBkaXYuYXBwZW5kKGQpO1xuXG5cbiAgICAgICAgICAgICAgICBsZXQgbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKG4xKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZSh0KSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKHApKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUocDEpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUodDEpKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdChcImhhc05vZGUgbW9uc3Rlci10ZXN0Y2xhc3MyIHNob3VsZCByZXR1cm4gLi4uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGVzdGNsYXNzMicpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHAxID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xuICAgICAgICAgICAgICAgIGxldCB0MSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCd0ZXN0MScpO1xuICAgICAgICAgICAgICAgIHAxLmFwcGVuZENoaWxkKHQxKTtcblxuICAgICAgICAgICAgICAgIGxldCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgndGVzdCcpO1xuICAgICAgICAgICAgICAgIHAuYXBwZW5kQ2hpbGQocDEpO1xuICAgICAgICAgICAgICAgIHAuYXBwZW5kQ2hpbGQodCk7XG5cblxuICAgICAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBkaXYuYXBwZW5kKGQpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkLnNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpO1xuXG4gICAgICAgICAgICAgICAgZC5zaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5hcHBlbmRDaGlsZChwKTtcblxuICAgICAgICAgICAgICAgIGxldCBuMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUobjEpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKHQpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUocCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZShwMSkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZSh0MSkpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KVxuXG4gICAgfSk7XG59KSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiO1xuaW1wb3J0IHtGb2N1c01hbmFnZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2ZvY3VzbWFuYWdlci5tanNcIjtcbmltcG9ydCB7Y2xlYW51cERPTUZyb21UZXN0aW5nLCBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3Rpbmd9IGZyb20gXCIuLi8uLi91dGlsL2NsZWFudXBkb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdGb2N1c01hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZygpXG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGNsZWFudXBET01Gcm9tVGVzdGluZygpO1xuICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKS5pbm5lckhUTUwgPSAnJ1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbmV3JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgRm9jdXNNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBGb2N1c01hbmFnZXIoKSkuaXMuaW5zdGFuY2VvZihGb2N1c01hbmFnZXIpO1xuICAgICAgICB9KVxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdzdG9yZSBhbmQgcmVzdG9yZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IG1hbmFnZXI7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtYW5hZ2VyID0gbmV3IEZvY3VzTWFuYWdlcigpO1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwidGVzdGl0XCIgaWQ9XCJ0eDFcIj5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInRlc3RpdFwiIGlkPVwidHgyXCI+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0ZXN0aXRcIiBpZD1cInR4M1wiIGRpc2FibGVkPlxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwidGVzdGl0XCIgaWQ9XCJ0eDRcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwidGVzdGl0XCIgdGFiaW5kZXg9XCIyXCIgaWQ9XCJ0eDVcIj5oZWxsbzwvcD5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInRlc3RpdFwiIGlkPVwidHg2XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGVzdGl0XCIgaWQ9XCJ0eDdcIj48L2J1dHRvbj5cbiAgICAgICAgICAgIGA7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnRlc3RpdCcpKSkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID0gKCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAyMDAsXG4gICAgICAgICAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgYm90dG9tOiAyMDAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSlcblxuICAgICAgICBpdCgncnVuIGlzdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbWFuYWdlci5mb2N1cyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHgxJykpO1xuICAgICAgICAgICAgbWFuYWdlci5zdG9yZUZvY3VzKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGUxID0gbWFuYWdlci5nZXRBY3RpdmUoKTtcbiAgICAgICAgICAgIGV4cGVjdChlMS5nZXRBdHRyaWJ1dGUoJ2lkJyksICdlcnJvcjEnKS50by5iZS5lcXVhbCgndHgxJyk7XG5cbiAgICAgICAgICAgIG1hbmFnZXIuZm9jdXMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3R4MicpKTtcblxuICAgICAgICAgICAgbWFuYWdlci5zdG9yZUZvY3VzKCk7XG4gICAgICAgICAgICBleHBlY3QobWFuYWdlci5nZXRBY3RpdmUoKS5nZXRBdHRyaWJ1dGUoJ2lkJyksICdlcnJvcjInKS50by5iZS5lcXVhbCgndHgyJyk7XG4gICAgICAgICAgICBtYW5hZ2VyLmZvY3VzTmV4dCgpO1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuZ2V0QWN0aXZlKCkuZ2V0QXR0cmlidXRlKCdpZCcpLCAnZXJyb3IzJykudG8uYmUuZXF1YWwoJ3R4NCcpO1xuICAgICAgICAgICAgbWFuYWdlci5mb2N1c05leHQoKTtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmdldEFjdGl2ZSgpLmdldEF0dHJpYnV0ZSgnaWQnKSwgJ2Vycm9yNCcpLnRvLmJlLmVxdWFsKCd0eDUnKTtcbiAgICAgICAgICAgIG1hbmFnZXIucmVzdG9yZUZvY3VzKCk7XG4gICAgICAgICAgICBleHBlY3QobWFuYWdlci5nZXRBY3RpdmUoKS5nZXRBdHRyaWJ1dGUoJ2lkJyksICdlcnJvcjUnKS50by5iZS5lcXVhbCgndHgyJyk7XG4gICAgICAgICAgICBtYW5hZ2VyLnJlc3RvcmVGb2N1cygpO1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuZ2V0QWN0aXZlKCkuZ2V0QXR0cmlidXRlKCdpZCcpLCAnZXJyb3I2JykudG8uYmUuZXF1YWwoJ3R4MScpO1xuICAgICAgICAgICAgbWFuYWdlci5yZXN0b3JlRm9jdXMoKTtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmdldEFjdGl2ZSgpLmdldEF0dHJpYnV0ZSgnaWQnKSwgJ2Vycm9yNycpLnRvLmJlLmVxdWFsKCd0eDEnKTtcbiAgICAgICAgfSlcblxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdyZXR1cm50eXBlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBmb2N1c21hbmFnZXI7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBmb2N1c21hbmFnZXIgPSBuZXcgRm9jdXNNYW5hZ2VyKCk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2NoZWNrIHJldHVybnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGV4cGVjdChmb2N1c21hbmFnZXIuZ2V0Rm9jdXNhYmxlKCkpLmlzLmluc3RhbmNlb2YoQXJyYXkpO1xuICAgICAgICAgICAgZXhwZWN0KGZvY3VzbWFuYWdlci5nZXRBY3RpdmUoKSkuaXMuaW5zdGFuY2VvZihIVE1MRWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QoZm9jdXNtYW5hZ2VyLmZvY3VzTmV4dCgpKS5pcy5pbnN0YW5jZW9mKEZvY3VzTWFuYWdlcik7XG4gICAgICAgICAgICBleHBlY3QoZm9jdXNtYW5hZ2VyLmZvY3VzUHJldigpKS5pcy5pbnN0YW5jZW9mKEZvY3VzTWFuYWdlcik7XG4gICAgICAgICAgICBleHBlY3QoZm9jdXNtYW5hZ2VyLnN0b3JlRm9jdXMoKSkuaXMuaW5zdGFuY2VvZihGb2N1c01hbmFnZXIpO1xuICAgICAgICAgICAgZXhwZWN0KGZvY3VzbWFuYWdlci5mb2N1cyhkb2N1bWVudC5ib2R5KSkuaXMuaW5zdGFuY2VvZihGb2N1c01hbmFnZXIpO1xuICAgICAgICAgICAgZXhwZWN0KGZvY3VzbWFuYWdlci5yZXN0b3JlRm9jdXMoKSkuaXMuaW5zdGFuY2VvZihGb2N1c01hbmFnZXIpO1xuXG4gICAgICAgIH0pXG5cbiAgICB9KVxuXG5cbn0pOyIsICJpbXBvcnQge1xuICAgIGZpbmRFbGVtZW50V2l0aElkVXB3YXJkc1xufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS91dGlsLm1qc1wiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSAnY2hhaSc7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmZ1bmN0aW9uIHNldHVwVGVzdEVudmlyb25tZW50KCkge1xuXG5cbiAgICBjbGFzcyBUZXN0Q29tcG9uZW50IGV4dGVuZHMgSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICB0aGlzLmF0dGFjaFNoYWRvdyh7bW9kZTogJ29wZW4nfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWN1c3RvbUVsZW1lbnRzLmdldCgndGVzdC1jb21wb25lbnQnKSkge1xuICAgICAgICBjdXN0b21FbGVtZW50cy5kZWZpbmUoJ3Rlc3QtY29tcG9uZW50JywgVGVzdENvbXBvbmVudCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjbGVhbnVwVGVzdEVudmlyb25tZW50KCkge1xuICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG59XG5cbmRlc2NyaWJlKCdmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMnLCAoKSA9PiB7XG4gICAgYmVmb3JlKChkb25lKSA9PiB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgc2V0dXBUZXN0RW52aXJvbm1lbnQoKTtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGFmdGVyKCgpID0+IHtcbiAgICAgICAgY2xlYW51cFRlc3RFbnZpcm9ubWVudCgpO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIC8vIFNldCB1cCB0aGUgRE9NXG5cbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgIDxkaXYgaWQ9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBpZD1cInBhcmVudFwiPlxuICAgICAgICAgIDxkaXYgaWQ9XCJjaGlsZFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PmA7XG5cbiAgICAgICAgY29uc3Qgc2hhZG93SG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNoYWRvd0hvc3QpO1xuICAgICAgICBjb25zdCBzaGFkb3dSb290ID0gc2hhZG93SG9zdC5hdHRhY2hTaGFkb3coe21vZGU6ICdvcGVuJ30pO1xuICAgICAgICBjb25zdCBpbm5lckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgaW5uZXJFbGVtZW50LmlkID0gJ2lubmVyJztcbiAgICAgICAgc2hhZG93Um9vdC5hcHBlbmRDaGlsZChpbm5lckVsZW1lbnQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBmaW5kIHRoZSBlbGVtZW50IHdpdGggdGhlIHRhcmdldCBJRCBpbiB0aGUgbm9ybWFsIERPTScsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hpbGQnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzKGNoaWxkLCAncGFyZW50Jyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXJlbnQnKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZpbmQgdGhlIGVsZW1lbnQgd2l0aCB0aGUgdGFyZ2V0IElEIGluIHRoZSBzaGFkb3cgRE9NJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbm5lckVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdkaXZbc2hhZG93cm9vdF0gPiBkaXYnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzKGlubmVyRWxlbWVudCwgJ2lubmVyJyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKGlubmVyRWxlbWVudCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIGlmIHRoZSBlbGVtZW50IHdpdGggdGhlIHRhcmdldCBJRCBpcyBub3QgZm91bmQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoaWxkJyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhjaGlsZCwgJ25vbmV4aXN0ZW50Jyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmJlLm51bGw7XG4gICAgfSk7XG59KTtcbiIsICIndXNlIHN0cmljdCc7XG5cblxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgd2luZG93UmVhZHk7XG5sZXQgZG9tUmVhZHk7XG5cbmRlc2NyaWJlKCdSZWFkeScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9yZWFkeS5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbVJlYWR5ID0gbVsnZG9tUmVhZHknXTtcbiAgICAgICAgICAgICAgICB3aW5kb3dSZWFkeSA9IG1bJ3dpbmRvd1JlYWR5J107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdkb21SZWFkeScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVzb2x2ZSBwcm9taXNlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGRvbVJlYWR5LnRoZW4oZG9uZSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCd3aW5kb3dSZWFkeScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVzb2x2ZSBwcm9taXNlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIHdpbmRvd1JlYWR5LnRoZW4oZG9uZSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtcbiAgICBnZXREb2N1bWVudCwgZ2V0V2luZG93LCBnZXREb2N1bWVudEZyYWdtZW50RnJvbVN0cmluZ1xufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS91dGlsLm1qc1wiO1xuXG5pbXBvcnQge2dldENvbnRhaW5pbmdEb2N1bWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcblxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5cbmRlc2NyaWJlKCdET00nLCBmdW5jdGlvbiAoKSB7XG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaW5pdEpTRE9NKCk7XG4gICAgfSlcbiAgICBkZXNjcmliZSgnZ2V0RG9jdW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZG9jdW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldFdpbmRvdygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBkb2N1bWVudCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IGdldFdpbmRvdygpO1xuICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldERvY3VtZW50RnJhZ21lbnRGcm9tU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgICAgICBbXG4gICAgICAgICAgICBbJzxkaXY+PC9kaXY+J10sXG4gICAgICAgICAgICBbJzxkaXY+PGRpdj4yPC9kaXY+PC9kaXY+J10sXG4gICAgICAgICAgICBbJzxkaXY+PGRpdj4yPC9kaXY+JywgJzxkaXY+PGRpdj4yPC9kaXY+PC9kaXY+J10sIC8vIHRlc3QgaW52YWxpZCBodG1sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKCFiKSBiID0gYTtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZG9jdW1lbnRGcmFnbWVudCBvYmplY3QgJyArIGEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZnJhZ21lbnQgPSBnZXREb2N1bWVudEZyYWdtZW50RnJvbVN0cmluZyhhKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZnJhZ21lbnQpLnRvLmJlLmluc3RhbmNlT2YoRG9jdW1lbnRGcmFnbWVudCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKGZyYWdtZW50LmNsb25lTm9kZSh0cnVlKSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRpdi5pbm5lckhUTUwpLnRvLmJlLmVxdWFsKGIpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ2dldENvbnRhaW5pbmdEb2N1bWVudCcsICgpID0+IHtcbiAgICAgICAgbGV0ICBqc0RvbURvY3VtZW50O1xuXG4gICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICBqc0RvbURvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgICAgIH0pO1xuICAgICAgICAvL1xuICAgICAgICAvLyBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAvLyAgICAgZG9tLndpbmRvdy5jbG9zZSgpO1xuICAgICAgICAvLyB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIHdoZW4gY2FsbGVkIHdpdGggYW4gaW52YWxpZCBhcmd1bWVudCcsICgpID0+IHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBnZXRDb250YWluaW5nRG9jdW1lbnQobnVsbCkpLnRvLnRocm93KCdJbnZhbGlkIGFyZ3VtZW50LiBFeHBlY3RlZCBhbiBIVE1MRWxlbWVudC4nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgY29udGFpbmluZyBkb2N1bWVudCBmb3IgYW4gZWxlbWVudCBpbiB0aGUgbWFpbiBkb2N1bWVudCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBqc0RvbURvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmluZ0RvY3VtZW50ID0gZ2V0Q29udGFpbmluZ0RvY3VtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgICBleHBlY3QoY29udGFpbmluZ0RvY3VtZW50KS50by5udWxsO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBjb250YWluaW5nIGRvY3VtZW50IGZvciBhbiBlbGVtZW50IGluc2lkZSBhIHNoYWRvdyByb290JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaG9zdCA9IGpzRG9tRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBjb25zdCBzaGFkb3dSb290ID0gaG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiAnb3BlbicgfSk7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0ganNEb21Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICBzaGFkb3dSb290LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXG4gICAgICAgICAgICBjb25zdCBjb250YWluaW5nRG9jdW1lbnQgPSBnZXRDb250YWluaW5nRG9jdW1lbnQoZWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QoY29udGFpbmluZ0RvY3VtZW50KS50by5ub3QubnVsbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGhlIGNvcnJlY3QgY29udGFpbmluZyBkb2N1bWVudCBmb3IgYW4gZWxlbWVudCBpbnNpZGUgYSBuZXN0ZWQgc2hhZG93IHJvb3QnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvdXRlckhvc3QgPSBqc0RvbURvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgY29uc3Qgb3V0ZXJTaGFkb3dSb290ID0gb3V0ZXJIb3N0LmF0dGFjaFNoYWRvdyh7IG1vZGU6ICdvcGVuJyB9KTtcblxuICAgICAgICAgICAgY29uc3QgaW5uZXJIb3N0ID0ganNEb21Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG91dGVyU2hhZG93Um9vdC5hcHBlbmRDaGlsZChpbm5lckhvc3QpO1xuXG4gICAgICAgICAgICBjb25zdCBpbm5lclNoYWRvd1Jvb3QgPSBpbm5lckhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogJ29wZW4nIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0ganNEb21Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICBpbm5lclNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5pbmdEb2N1bWVudCA9IGdldENvbnRhaW5pbmdEb2N1bWVudChlbGVtZW50KTtcbiAgICAgICAgICAgIGV4cGVjdChjb250YWluaW5nRG9jdW1lbnQpLnRvLm5vdC5udWxsO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBudWxsIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IGF0dGFjaGVkIHRvIGFueSBkb2N1bWVudCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRldGFjaGVkRWxlbWVudCA9IGpzRG9tRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkZXRhY2hlZEVsZW1lbnQucmVtb3ZlKCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5pbmdEb2N1bWVudCA9IGdldENvbnRhaW5pbmdEb2N1bWVudChkZXRhY2hlZEVsZW1lbnQpO1xuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5pbmdEb2N1bWVudCkudG8uYmUubnVsbDtcbiAgICAgICAgfSk7XG4gICAgfSk7ICAgIFxuICAgIFxufSk7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Z2V0RG9jdW1lbnR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG4vLyBsZXQgaHRtbDEgPSBgXG4vLyAgICAgPGRpdiBpZD1cInNjcmlwdGhvc3RcIj5cbi8vICAgICA8L2Rpdj5cbi8vICAgIFxuLy8gICAgIDxkaXY+XG4vLyAgICAgPFxuLy8gPC9kaXY+XG4vLyBgO1xuXG5cbi8vIGRlZmluZWQgaW4gY29uc3RhbnRzLm1qc1xuLy8gY29uc3QgdXBkYXRlclN5bWJvbEtleSA9IFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vY3VzdG9tLWVsZW1lbnRAQG9wdGlvbnMtdXBkYXRlci1saW5rXCJcbi8vIGNvbnN0IHVwZGF0ZXJTeW1ib2xTeW1ib2wgPSBTeW1ib2wuZm9yKHVwZGF0ZXJTeW1ib2xLZXkpO1xuXG5cblxuZGVzY3JpYmUoJ0RPTScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBDdXN0b21FbGVtZW50LCByZWdpc3RlckN1c3RvbUVsZW1lbnQsIFRlc3RDb21wb25lbnQsIGRvY3VtZW50LCBUZXN0Q29tcG9uZW50Mixhc3NpZ25VcGRhdGVyVG9FbGVtZW50O1xuXG4gICAgZGVzY3JpYmUoJ2luaXRGcm9tU2NyaXB0SG9zdCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IHJhbmRvbVRhZ051bWJlciA9IFwibW9uc3Rlci10ZXN0XCIrTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMCk7XG4gICAgICAgIFxuICAgICAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiKS50aGVuKChtKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUVsZW1lbnQgPSBtWydDdXN0b21FbGVtZW50J107XG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQgPSBtWydyZWdpc3RlckN1c3RvbUVsZW1lbnQnXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgVGVzdENvbXBvbmVudDIgPSBjbGFzcyBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByYW5kb21UYWdOdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGRlZmF1bHRzKCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW46ICc8aDE+PC9oMT48YXJ0aWNsZT48cD50ZXN0PC9wPjxkaXYgaWQ9XCJjb250YWluZXJcIj48L2Rpdj48L2FydGljbGU+J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlc3RDb21wb25lbnQyKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjYWxsIGNhbGxiYWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBub3QgZm91bmQgY2FsbGJhY2sgYW5kIGFkZCBlcnJvciBhdHRyaWJ1dGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgPGRpdiBpZD1cImNhbGwtYmFjay1ob3N0XCI+PC9kaXY+PGRpdiBpZD1cImNvbnRhaW5lclwiPjwvZGl2PmA7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHJhbmRvbVRhZ051bWJlcik7XG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1zY3JpcHQtaG9zdCcsIFwiY2FsbC1iYWNrLWhvc3RcIik7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpLmFwcGVuZENoaWxkKGNvbnRyb2wpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChjb250cm9sLmdldE9wdGlvbigndGVzdCcpKS5pcy5lcWwoMCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wuaGFzQXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItZXJyb3InKSkuaXMudHJ1ZTtcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGl0KCdzaG91bGQgZm91bmQgY2FsbGJhY2sgaW5pdEN1c3RvbUNvbnRyb2xDYWxsYmFjaycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGA8ZGl2IGlkPVwiY2FsbC1iYWNrLWhvc3RcIj48L2Rpdj48ZGl2IGlkPVwiY29udGFpbmVyXCI+PC9kaXY+YDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2FsbC1iYWNrLWhvc3QnKTtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuaW5pdEN1c3RvbUNvbnRyb2xDYWxsYmFjayA9IGZ1bmN0aW9uIChjb250cm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0T3B0aW9uKCd0ZXN0JywgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGxldCBjb250cm9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChyYW5kb21UYWdOdW1iZXIpO1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItc2NyaXB0LWhvc3QnLCBcImNhbGwtYmFjay1ob3N0XCIpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKS5hcHBlbmRDaGlsZChjb250cm9sKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbC5nZXRPcHRpb24oJ3Rlc3QnKSkuaXMuZXFsKDEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChjb250cm9sLmhhc0F0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLWVycm9yJykpLmlzLmZhbHNlO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBmb3VuZCBjYWxsYmFjayBpbml0Q3VzdG9tQ29udHJvbENhbGxiYWNrIGZyb20gc2VsZicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGA8ZGl2IGlkPVwiY2FsbC1iYWNrLWhvc3RcIj48L2Rpdj48ZGl2IGlkPVwiY29udGFpbmVyXCI+PC9kaXY+YDtcblxuICAgICAgICAgICAgICAgIGxldCBjb250cm9sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChyYW5kb21UYWdOdW1iZXIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChjb250cm9sLmdldE9wdGlvbigndGVzdCcpKS5pcy5lcWwoMCk7XG4gICAgICAgICAgICAgICAgY29udHJvbC5pbml0Q3VzdG9tQ29udHJvbENhbGxiYWNrID0gZnVuY3Rpb24gKGNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbC5zZXRPcHRpb24oJ3Rlc3QnLCAyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1zY3JpcHQtaG9zdCcsIFwiY2FsbC1iYWNrLWhvc3RcIik7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpLmFwcGVuZENoaWxkKGNvbnRyb2wpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChjb250cm9sLmdldE9wdGlvbigndGVzdCcpKS5pcy5lcWwoMik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wuaGFzQXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItZXJyb3InKSkuaXMuZmFsc2U7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG4gICAgfSk7XG59KSIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSAnY2hhaSc7XG5pbXBvcnQge2dldFNsb3R0ZWROb2Rlc30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vc2xvdHRlZC5tanNcIjtcblxuXG5kZXNjcmliZSgnZ2V0U2xvdHRlZE5vZGVzJywgKCkgPT4ge1xuXG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBTZXQgaWYgdGhlcmUgaXMgbm8gU2hhZG93Um9vdCcsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KGdldFNsb3R0ZWROb2RlcykuaXMuYSgnZnVuY3Rpb24nKTtcbiAgICB9KTtcblxuXG59KTtcblxuIiwgIlxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtcbiAgICBhZGRBdHRyaWJ1dGVUb2tlbixcbiAgICBhZGRUb09iamVjdExpbmssXG4gICAgY2xlYXJBdHRyaWJ1dGVUb2tlbnMsXG4gICAgY29udGFpbnNBdHRyaWJ1dGVUb2tlbixcbiAgICBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlLFxuICAgIGZpbmRDbG9zZXN0T2JqZWN0TGluayxcbiAgICBnZXRMaW5rZWRPYmplY3RzLFxuICAgIGhhc09iamVjdExpbmssXG4gICAgcmVtb3ZlQXR0cmlidXRlVG9rZW4sXG4gICAgcmVtb3ZlT2JqZWN0TGluayxcbiAgICByZXBsYWNlQXR0cmlidXRlVG9rZW4sXG4gICAgdG9nZ2xlQXR0cmlidXRlVG9rZW4sXG4gICAgZmluZENsb3Nlc3RCeUNsYXNzXG59IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5cbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGh0bWwxLCBodG1sMiwgaHRtbDM7XG5cbmRlc2NyaWJlKCdBdHRyaWJ1dGVzJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGh0bWwxID0gYDxkaXYgaWQ9XCJ0ZXN0MVwiPjwvZGl2PmA7XG4gICAgICAgIGh0bWwyID0gYDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDxkaXYgaWQ9XCJzdWIxXCI+XG4gICAgICAgIDxkaXYgaWQ9XCJzdWIyXCI+XG4gICAgICAgICAgICA8ZGl2IGlkPVwic3ViM1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJzdWI0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJzdWI1XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbmA7XG4gICAgICAgIFxuICAgICAgICBodG1sMyA9IGA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwidGVzdDFcIj5cbiAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3ViMVwiIGlkPVwiYTFcIiBjbGFzcz1cInN1YjFcIj5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInN1YjJcIiBpZD1cImEyXCIgY2xhc3M9XCJzdWIyXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3ViM1wiIGlkPVwiYTNcIiBjbGFzcz1cInN1YjNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3ViNFwiIGlkPVwiYTRcIiBjbGFzcz1cInN1YjRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInN1YjVcIiBpZD1cImE1XCIgY2xhc3M9XCJzdWI1XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbmA7XG5cblxuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ09iamVjdExpbmsnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3Qgc3ltYm9sID0gU3ltYm9sKCdteXRlc3QnKTtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhbmRsZSBvYmplY3QtbGlua3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgb2JqID0ge2E6IDF9O1xuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgIGV4cGVjdChoYXNPYmplY3RMaW5rKGVsZW1lbnQsIHN5bWJvbCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgYWRkVG9PYmplY3RMaW5rKGVsZW1lbnQsIHN5bWJvbCwgb2JqKTtcbiAgICAgICAgICAgIGV4cGVjdChoYXNPYmplY3RMaW5rKGVsZW1lbnQsIHN5bWJvbCkpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgIGxldCBvID0gZ2V0TGlua2VkT2JqZWN0cyhlbGVtZW50LCBzeW1ib2wpLm5leHQoKTtcbiAgICAgICAgICAgIGV4cGVjdChvLnZhbHVlKS50by5lcXVhbChvYmopO1xuXG4gICAgICAgICAgICByZW1vdmVPYmplY3RMaW5rKGVsZW1lbnQsIHN5bWJvbCk7XG4gICAgICAgICAgICBleHBlY3QoaGFzT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBnZXRMaW5rZWRPYmplY3RzKGVsZW1lbnQsIHN5bWJvbCkpLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgfSlcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZmluZENsb3Nlc3RPYmplY3RMaW5rKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3Qgc3ltYm9sID0gU3ltYm9sKCdteXRlc3QnKTtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBvYmplY3RsaW5rJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgc3ViNCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWI0JylcbiAgICAgICAgICAgIGxldCBzdWIyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YjInKVxuXG4gICAgICAgICAgICBsZXQgb2JqID0ge307XG5cbiAgICAgICAgICAgIGV4cGVjdChoYXNPYmplY3RMaW5rKHN1YjIsIHN5bWJvbCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgYWRkVG9PYmplY3RMaW5rKHN1YjIsIHN5bWJvbCwgb2JqKTtcbiAgICAgICAgICAgIGV4cGVjdChoYXNPYmplY3RMaW5rKHN1YjIsIHN5bWJvbCkpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZmluZENsb3Nlc3RPYmplY3RMaW5rKHN1YjQpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmlzLmluc3RhbmNlT2YoSFRNTERpdkVsZW1lbnQpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpKS50by5iZS5lcXVhbCgnc3ViMicpO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnQXR0cmlidXRlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwzO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2ZpbmQgY2xvc2VzdCBBdHRyaWJ1dGVzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydhNScsICdkYXRhLW1vbnN0ZXItcm9sZScsIHVuZGVmaW5lZCwgJ3N1YjUnXSxcbiAgICAgICAgICAgICAgICBbJ2E1JywgJ2RhdGEtbW9uc3Rlci1yb2xlJywgJ3N1YjMnLCAnc3ViMyddLFxuICAgICAgICAgICAgICAgIFsnYTUnLCAnZGF0YS1tb25zdGVyLXJvbGUnLCAnc3ViMScsICdzdWIxJ10sXG4gICAgICAgICAgICAgICAgWydhNCcsICdkYXRhLW1vbnN0ZXItcm9sZScsICdzdWIxJywgJ3N1YjEnXSxcbiAgICAgICAgICAgICAgICBbJ2EzJywgJ2RhdGEtbW9uc3Rlci1yb2xlJywgJ3N1YjEnLCAnc3ViMSddLFxuICAgICAgICAgICAgICAgIFsnYTInLCAnZGF0YS1tb25zdGVyLXJvbGUnLCB1bmRlZmluZWQsICdzdWIyJ10sXG4gICAgICAgICAgICAgICAgWydhNScsICdkYXRhLW1vbnN0ZXItcm9sZScsICdzdWI1JywgJ3N1YjUnXVxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICAgICAgaXQoJ2ZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoJyArIGEgKyAnLCAnICsgYiArICcsJyArIGMgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpLCBiLCBjKS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1yb2xlJykpLnRvLmJlLmVxdWFsKGQpO1xuICAgICAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pOyBcbiAgICAgICAgXG4gICAgICAgIGRlc2NyaWJlKCdmaW5kIGNsb3Nlc3QgRWxlbWVudCB3aXRoIGNsYXNzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydhNScsICAnc3ViMycsICdzdWIzJ10sXG4gICAgICAgICAgICAgICAgWydhNScsICAnc3ViMScsICdzdWIxJ10sXG4gICAgICAgICAgICAgICAgWydhNCcsICAnc3ViMScsICdzdWIxJ10sXG4gICAgICAgICAgICAgICAgWydhMycsICAnc3ViMScsICdzdWIxJ10sXG4gICAgICAgICAgICAgICAgWydhNScsICAnc3ViNScsICdzdWI1J11cbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgaXQoJ2ZpbmRDbG9zZXN0QnlDbGFzcygnICsgYSArICcsICcgKyBiICsgJykgc2hvdWxkIHJldHVybiAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZmluZENsb3Nlc3RCeUNsYXNzKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpLCBiKS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykpLnRvLmJlLmVxdWFsKGMpO1xuICAgICAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0F0dHJpYnV0ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgYXRyaWJ1dGVLZXkgPSAnZGF0YS10ZXN0JztcblxuICAgICAgICBpdCgndG9nZ2xlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB2YWx1ZSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuaGFzQXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSwgJ2FwcGxlIGJhbmFubmEnKVxuICAgICAgICAgICAgdG9nZ2xlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdwaW5hcHBsZScpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJ2FwcGxlIGJhbmFubmEgcGluYXBwbGUnKTtcbiAgICAgICAgICAgIHRvZ2dsZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAncGluYXBwbGUnKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmVxdWFsKCdhcHBsZSBiYW5hbm5hJyk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2FkZEF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgdmFsdWUpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50Lmhhc0F0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgYWRkQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdwaW5hcHBsZScpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJ3BpbmFwcGxlJyk7XG4gICAgICAgICAgICBhZGRBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ2JhbmFubmEnKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmVxdWFsKCdwaW5hcHBsZSBiYW5hbm5hJyk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3JlbW92ZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgdmFsdWUpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0cmlidXRlS2V5LCAnYXBwbGUgYmFuYW5uYSBsZW1tb24nKVxuICAgICAgICAgICAgcmVtb3ZlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdwaW5hcHBsZScpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJ2FwcGxlIGJhbmFubmEgbGVtbW9uJyk7XG4gICAgICAgICAgICByZW1vdmVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ2JhbmFubmEnKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmVxdWFsKCdhcHBsZSBsZW1tb24nKTtcblxuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdjb250YWluc0F0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgdmFsdWUpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgIGV4cGVjdChjb250YWluc0F0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAncGluYXBwbGUnKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSwgJ2FwcGxlIGJhbmFubmEnKVxuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5zQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdwaW5hcHBsZScpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChjb250YWluc0F0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAnYmFuYW5uYScpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5zQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdhcHBsZScpKS50by5iZS50cnVlO1xuXG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJyByZXBsYWNlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB2YWx1ZSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXksICdhcHBsZSBiYW5hbm5hIHRvbWF0bycpXG4gICAgICAgICAgICByZXBsYWNlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICd0b21hdG8nLCAnbGVtbW9uJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgnYXBwbGUgYmFuYW5uYSBsZW1tb24nKTtcbiAgICAgICAgICAgIHJlcGxhY2VBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ2JhbmFubmEnLCAncGVhcicpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJ2FwcGxlIHBlYXIgbGVtbW9uJyk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2NsZWFyQXR0cmlidXRlVG9rZW5zKGVsZW1lbnQsIGtleSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXksICdhcHBsZSBiYW5hbm5hJylcbiAgICAgICAgICAgIGNsZWFyQXR0cmlidXRlVG9rZW5zKGVsZW1lbnQsIGF0cmlidXRlS2V5KTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmVxdWFsKCcnKTtcblxuICAgICAgICB9KVxuXG5cbiAgICB9KVxufSkiLCAiJ3VzZSBzdHJpY3QnO1xuXG5cbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5sZXQgUmVzb3VyY2UsRGVyaXZlZFJlc291cmNlO1xuXG5cblxuZGVzY3JpYmUoJ1Jlc291cmNlJywgZnVuY3Rpb24oKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2UubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBSZXNvdXJjZSA9IG1bJ1Jlc291cmNlJ107XG5cblxuICAgICAgICAgICAgICAgIERlcml2ZWRSZXNvdXJjZSA9IGNsYXNzICBleHRlbmRzIFJlc291cmNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkYXRhLXVybFwiOiBcImh0dHA6Ly9leGFtcGxlLmNvbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VVJMQXR0cmlidXRlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdkYXRhLXVybCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnRGVyaXZlZFJlc291cmNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2VvZiBSZXNvdXJjZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgRGVyaXZlZFJlc291cmNlKCkpLnRvLmJlLmFuLmluc3RhbmNlb2YoUmVzb3VyY2UpO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmltcG9ydCB7UmVzb3VyY2VNYW5hZ2VyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZW1hbmFnZXIubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnUmVzb3VyY2VNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGZldGNoUmVmZXJlbmNlLCByZXR1cm5TdGF0dXM7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGdsb2JhbFRoaXNbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgY2xlYW51cERPTUZyb21UZXN0aW5nKCk7XG4gICAgfSlcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZygpXG5cbiAgICAgICAgcmV0dXJuU3RhdHVzID0gMjAwO1xuICAgICAgICBmZXRjaFJlZmVyZW5jZSA9IGdsb2JhbFRoaXNbJ2ZldGNoJ107XG4gICAgICAgIGdsb2JhbFRoaXNbJ2ZldGNoJ10gPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG5cbiAgICAgICAgICAgIGlmICghdXJsKSB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgdXJsJylcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiBcInRlc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiByZXR1cm5TdGF0dXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbmV3JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnbmV3IFJlc291cmNlTWFuYWdlcigpIHNob3VsZCByZXR1cm4gUmVzb3VyY2VNYW5hZ2VyIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IFJlc291cmNlTWFuYWdlcigpO1xuICAgICAgICAgICAgZXhwZWN0KGQpLnRvLmJlLmluc3RhbmNlT2YoUmVzb3VyY2VNYW5hZ2VyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbG9hZCByZXNvdXJjZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG1hbmFnZXI7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtYW5hZ2VyID0gbmV3IFJlc291cmNlTWFuYWdlcigpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdhZGQgc2NyaXB0IHNob3VsZCBpbnN0YW5jZSBvZiBSZXNvdXJjZU1hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobWFuYWdlci5hZGRTY3JpcHQoJy9leGFtcGxlLmpzJykpLnRvLmJlLmluc3RhbmNlT2YoUmVzb3VyY2VNYW5hZ2VyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2FkZCBzdHlsZSBzaG91bGQgaW5zdGFuY2Ugb2YgUmVzb3VyY2VNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkU3R5bGVzaGVldCgnL3N0eWxlLmpzJykpLnRvLmJlLmluc3RhbmNlT2YoUmVzb3VyY2VNYW5hZ2VyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2FkZCBkYXRhIHNob3VsZCBpbnN0YW5jZSBvZiBSZXNvdXJjZU1hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobWFuYWdlci5hZGREYXRhKCcvZGF0YS5qc29uJykpLnRvLmJlLmluc3RhbmNlT2YoUmVzb3VyY2VNYW5hZ2VyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2Nvbm5lY3QgcmVzb3VyY2VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ2FkZCBzY3JpcHQgYW5kIGNvbm5lY3Qgc2hvdWxkIGluc3RhbmNlIG9mIFJlc291cmNlTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobWFuYWdlci5hZGRTY3JpcHQoJy9leGFtcGxlLmpzJykuY29ubmVjdCgpKS50by5iZS5pbnN0YW5jZU9mKFJlc291cmNlTWFuYWdlcik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ2FkZCBzdHlsZSBhbmQgY29ubmVjdCBzaG91bGQgaW5zdGFuY2Ugb2YgUmVzb3VyY2VNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZFN0eWxlc2hlZXQoJy9zdHlsZS5qcycpLmNvbm5lY3QoKSkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdhZGQgZGF0YSBhbmQgY29ubmVjdCAgc2hvdWxkIGluc3RhbmNlIG9mIFJlc291cmNlTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobWFuYWdlci5hZGREYXRhKCcvZGF0YS5qc29uJykuY29ubmVjdCgpKS50by5iZS5pbnN0YW5jZU9mKFJlc291cmNlTWFuYWdlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuXG4gICAgICAgIGRlc2NyaWJlKCdjaGVjayBhdmFpbGFiaWxpdHkgcmVzb3VyY2VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ2FkZCBzY3JpcHQgYW5kIGNoZWNrIGF2YWlsYWJpbGl0eSBzaG91bGQgcmV0dXJuIFByb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkU2NyaXB0KCcvZXhhbXBsZS5qcycpLmF2YWlsYWJsZSgpKS50by5iZS5pbnN0YW5jZU9mKFByb21pc2UpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdhZGQgc3R5bGUgYW5kIGNoZWNrIGF2YWlsYWJpbGl0eSBzaG91bGQgc2hvdWxkIHJldHVybiBQcm9taXNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZFN0eWxlc2hlZXQoJy9zdHlsZS5qcycpLmF2YWlsYWJsZSgpKS50by5iZS5pbnN0YW5jZU9mKFByb21pc2UpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdhZGQgZGF0YSBhbmQgY2hlY2sgYXZhaWxhYmlsaXR5ICBzaG91bGQgc2hvdWxkIHJldHVybiBQcm9taXNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZERhdGEoJy9kYXRhLmpzb24nKS5hdmFpbGFibGUoKSkudG8uYmUuaW5zdGFuY2VPZihQcm9taXNlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjaGVjayBhdmFpbGFiaWxpdHkgZXhhbXBsZS5qc29uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ2FkZCBkYXRhIGFuZCBjaGVjayBjb250ZW50JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBtYW5hZ2VyLmFkZERhdGEoJ2h0dHBzOi8vZXhhbXBsZS5jb20vZXhhbXBsZS5qc29uJykuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4ociA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJykub3V0ZXJIVE1MKS5jb250YWlucygnPntcImFcIjpcInRlc3RcIn08L3NjcmlwdD48L2hlYWQ+Jyk7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSlcblxuICAgIH0pO1xuXG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxGdW5jdGlvbiB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgQVRUUklCVVRFUFJFRklYLCBBc3NlbWJsZXIgfTtcblxuLyoqXG4gKiBhdHRyaWJ1dGUgcHJlZml4XG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFUFJFRklYID0gXCJkYXRhLW1vbnN0ZXItXCI7XG5cbi8qKlxuICogQXNzZW1ibGVyIGNsYXNzXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBbGxvd3MgeW91IHRvIGJ1aWxkIGFuIGh0bWwgZnJhZ21lbnRcbiAqL1xuY2xhc3MgQXNzZW1ibGVyIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge0RvY3VtZW50RnJhZ21lbnR9IGZyYWdtZW50XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBmdW5jdGlvbiBpcyBub3QgZGVmaW5lZFxuXHQgKi9cblx0Y29uc3RydWN0b3IoZnJhZ21lbnQpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuYXR0cmlidXRlUHJlZml4ID0gQVRUUklCVVRFUFJFRklYO1xuXHRcdHZhbGlkYXRlSW5zdGFuY2UoZnJhZ21lbnQsIGdldEdsb2JhbEZ1bmN0aW9uKFwiRG9jdW1lbnRGcmFnbWVudFwiKSk7XG5cdFx0dGhpcy5mcmFnbWVudCA9IGZyYWdtZW50O1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcblx0ICogQHJldHVybiB7QXNzZW1ibGVyfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0c2V0QXR0cmlidXRlUHJlZml4KHByZWZpeCkge1xuXHRcdHZhbGlkYXRlU3RyaW5nKHByZWZpeCk7XG5cdFx0dGhpcy5hdHRyaWJ1dGVQcmVmaXggPSBwcmVmaXg7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0QXR0cmlidXRlUHJlZml4KCkge1xuXHRcdHJldHVybiB0aGlzLmF0dHJpYnV0ZVByZWZpeDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge1Byb3h5T2JzZXJ2ZXJ8dW5kZWZpbmVkfSBkYXRhXG5cdCAqIEByZXR1cm4ge0RvY3VtZW50RnJhZ21lbnR9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG5cdCAqL1xuXHRjcmVhdGVEb2N1bWVudEZyYWdtZW50KGRhdGEpIHtcblx0XHRpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRkYXRhID0gbmV3IFByb3h5T2JzZXJ2ZXIoe30pO1xuXHRcdH1cblxuXHRcdHZhbGlkYXRlSW5zdGFuY2UoZGF0YSwgUHJveHlPYnNlcnZlcik7XG5cdFx0Y29uc3QgZnJhZ21lbnQgPSB0aGlzLmZyYWdtZW50LmNsb25lTm9kZSh0cnVlKTtcblx0XHRyZXR1cm4gZnJhZ21lbnQ7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5pbXBvcnQge0FUVFJJQlVURVBSRUZJWCwgQXNzZW1ibGVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9hc3NlbWJsZXIubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdBc3NlbWJsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaW5pdEpTRE9NKCk7XG4gICAgfSlcbiAgICBkZXNjcmliZSgnY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiA8ZGl2Pk9uZTwvZGl2PjxkaXY+VHdvPC9kaXY+JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCgnPGRpdj5PbmU8L2Rpdj48ZGl2PlR3bzwvZGl2PicpO1xuXG4gICAgICAgICAgICBsZXQgZiA9IG5ldyBBc3NlbWJsZXIoZnJhZ21lbnQpO1xuXG4gICAgICAgICAgICAvLyBjb252ZXJ0IHRvIHN0cmluZ1xuICAgICAgICAgICAgbGV0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGYuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLmNsb25lTm9kZSh0cnVlKSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChjb250YWluZXIuaW5uZXJIVE1MKS50by5iZS5lcXVhbCgnPGRpdj5PbmU8L2Rpdj48ZGl2PlR3bzwvZGl2PicpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGVEb2N1bWVudEZyYWdtZW50KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIERvY3VtZW50RnJhZ21lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBuZXcgQXNzZW1ibGVyKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG4gICAgICAgICAgICBleHBlY3QoZC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpLnRvLmJlLmluc3RhbmNlT2YoRG9jdW1lbnRGcmFnbWVudCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ25ldycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ25ldyBSZW5kZXJlcigpIHNob3VsZCByZXR1cm4gQXNzZW1ibGVyIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IEFzc2VtYmxlcihkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICAgICAgICAgICAgZXhwZWN0KGQpLnRvLmJlLmluc3RhbmNlT2YoQXNzZW1ibGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ2V0QXR0cmlidXRlUHJlZml4KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuICcgKyBBVFRSSUJVVEVQUkVGSVgsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IEFzc2VtYmxlcihkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuICAgICAgICAgICAgZXhwZWN0KGQuZ2V0QXR0cmlidXRlUHJlZml4KCkpLnRvLmJlLmVxdWFsKEFUVFJJQlVURVBSRUZJWCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3NldEF0dHJpYnV0ZVByZWZpeCgpLmdldEF0dHJpYnV0ZVByZWZpeCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBzYW1lIHZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBuZXcgQXNzZW1ibGVyKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG4gICAgICAgICAgICBleHBlY3QoZC5zZXRBdHRyaWJ1dGVQcmVmaXgoJ3Rlc3QwMScpLmdldEF0dHJpYnV0ZVByZWZpeCgpKS50by5iZS5lcXVhbCgndGVzdDAxJyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2dldERvY3VtZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7Y2xlYW51cERPTUZyb21UZXN0aW5nLCBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3Rpbmd9IGZyb20gXCIuLi8uLi91dGlsL2NsZWFudXBkb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5kZXNjcmliZSgnRE9NJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IEN1c3RvbUNvbnRyb2wsIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCwgVGVzdENvbXBvbmVudCwgZG9jdW1lbnQsIGpzZG9tRmxhZztcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oe30pLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgbS5wb2x5ZmlsbCgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGpzZG9tIGRvZXMgbm90IHN1cHBvcnQgRWxlbWVudEludGVybmFsc1xuICAgICAgICAgICAganNkb21GbGFnID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmNsdWRlcyhcImpzZG9tXCIpO1xuXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWVsZW1lbnQubWpzXCIpLnRoZW4oKG0pID0+IHtcblxuICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCA9IG1bJ3JlZ2lzdGVyQ3VzdG9tRWxlbWVudCddO1xuXG5cbiAgICAgICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWNvbnRyb2wubWpzXCIpLnRoZW4oKG0pID0+IHtcblxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUNvbnRyb2wgPSBtWydDdXN0b21Db250cm9sJ107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnQgPSBjbGFzcyBleHRlbmRzIEN1c3RvbUNvbnRyb2wge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm1vbnN0ZXItY3VzdG9tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlc3RDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2Zvcm1EaXNhYmxlZENhbGxiYWNrKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIFxuICAgICAgICBsZXQgZWxlbWVudFxuICAgICAgICBcbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IFRlc3RDb21wb25lbnQyID0gY2xhc3MgZXh0ZW5kcyBDdXN0b21Db250cm9sIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEEgZGVzY3JpcHRpb24gb2YgdGhlIGVudGlyZSBmdW5jdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBkZXNjcmlwdGlvbiBvZiByZXR1cm4gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJtb25zdGVyLWN1c3RvbWNvbnRyb2wyXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudDIpXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGUpLnRvLmJlLm5vdC5udWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbDInKTtcblxuICAgICAgICB9KVxuICAgICAgICBcbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcblxuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmZvcm1EaXNhYmxlZENhbGxiYWNrKCkpLnRvLmJlLnVuZGVmaW5lZDtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5mb3JtRGlzYWJsZWRDYWxsYmFjayh0cnVlKSkudG8uYmUudW5kZWZpbmVkO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgY29uc3QgZCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkaXNhYmxlZCcpO1xuICAgICAgICAgICAgZXhwZWN0KGQpLnRvLm5vdC5iZS5udWxsO1xuICAgICAgICAgICAgXG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuXG4gICAgZGVzY3JpYmUoJ0N1c3RvbUNvbnRyb2woKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZygpXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcblxuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBjdXN0b20tZWxlbWVudCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBkID0gbmV3IFRlc3RDb21wb25lbnQoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChlKS50by5iZS5udWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgZCkuaXMuZXF1YWwoJ29iamVjdCcpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdjb25uZWN0IGVtcHR5IGVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnZG9jdW1lbnQgc2hvdWxkIGNvbnRhaW4gbW9uc3Rlci1jdXN0b21jb250cm9sJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbW9uc3Rlci1jdXN0b21jb250cm9sJykubGVuZ3RoKS5pcy5lcXVhbCgxKTtcbiAgICAgICAgICAgICAgICAvLyBubyBkYXRhLW1vbnN0ZXItb2JqZWN0bGluaz1cIlN5bWJvbChtb25zdGVyVXBkYXRlcilcIiBiZWNhdXNlIGl0IGhhcyBub3RoaW5nIHRvIHVwZGF0ZSBcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItY3VzdG9tY29udHJvbCBkYXRhLW1vbnN0ZXItZXJyb3I9XCJFcnJvcjogaHRtbCBpcyBub3Qgc2V0LlwiPjwvbW9uc3Rlci1jdXN0b21jb250cm9sPicpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gZGVzY3JpYmUoJ09wdGlvbnMgY2hhbmdlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgaXQoJ2RlbGVnYXRlc0ZvY3VzIHNob3VsZCBjaGFuZ2UgZnJvbSB0cnVlIHRvIGZhbHNlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgLy8gICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpXG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0T3B0aW9uKCdkZWxlZ2F0ZXNGb2N1cycpKS50by5iZS50cnVlO1xuICAgICAgICAvLyAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfT1BUSU9OUywgSlNPTi5zdHJpbmdpZnkoe2RlbGVnYXRlc0ZvY3VzOiBmYWxzZX0pKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRPcHRpb24oJ2RlbGVnYXRlc0ZvY3VzJykpLnRvLmJlLmZhbHNlO1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAvLyAgICAgICAgICAgICB9LCAxMCk7XG4gICAgICAgIC8vICAgICAgICAgfSwgMTApO1xuICAgICAgICAvL1xuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgfSkudGltZW91dCgxMDApO1xuICAgICAgICAvL1xuICAgICAgICAvLyB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdUZXN0IEVsZW1lbnRJbnRlcm5hbHMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBmb3JtO1xuXG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJ2Zvcm1Bc3NvY2lhdGVkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuY29uc3RydWN0b3IuZm9ybUFzc29jaWF0ZWQpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnZm9ybScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLmZvcm0pLnRvLmJlLmluc3RhbmNlb2YoSFRNTEZvcm1FbGVtZW50KVxuXG4gICAgICAgICAgICAgICAgLy8gaWYgKGpzZG9tRmxhZykge1xuICAgICAgICAgICAgICAgIC8vICAgICBleHBlY3QoKCkgPT4gZC5mb3JtKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgICAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgZXhwZWN0KGQuZm9ybSkudG8uYmUuaW5zdGFuY2VvZihIVE1MRm9ybUVsZW1lbnQpXG4gICAgICAgICAgICAgICAgLy8gfVxuXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgndmFsdWUgZ2V0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IGQudmFsdWUpLnRvLnRocm93KEVycm9yKTtcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCd2YWx1ZSBzZXR0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gZC52YWx1ZSA9IDQpLnRvLnRocm93KEVycm9yKTtcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdzZXRGb3JtVmFsdWUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnbmFtZSBnZXR0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5uYW1lKS50by5iZS5udWxsO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3R5cGUgZ2V0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGQudHlwZSkudG8uYmUuZXF1YWwoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3ZhbGlkaXR5IGdldHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCd2YWxpZGF0aW9uTWVzc2FnZSBnZXR0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCd3aWxsVmFsaWRhdGUgZ2V0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXQoJ2NoZWNrVmFsaWRpdHkoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3JlcG9ydFZhbGlkaXR5KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cblxuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgaXQoJ3NldFZhbGlkaXR5KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuc2V0VmFsaWRpdHkoeyd2YWx1ZU1pc3NpbmcnOiB0cnVlfSwgXCJteSBtZXNzYWdlXCIpKS50by5iZS51bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn0pO1xuXG5cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0FUVFJJQlVURV9USEVNRV9OQU1FfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmltcG9ydCB7ZmluZERvY3VtZW50VGVtcGxhdGUsIFRlbXBsYXRlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS90ZW1wbGF0ZS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuXG5kZXNjcmliZSgnVGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBpbml0SlNET00oKTtcbiAgICB9KVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICA8dGVtcGxhdGUgaWQ9XCJteXRlbXBsYXRlXCI+PC90ZW1wbGF0ZT5gO1xuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2NyZWF0ZSBIVE1MRnJhZ21lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIFtcbiAgICAgICAgICAgIFtcIjxkaXY+Zmlyc3Q8L2Rpdj48ZGl2PnNlY29uZDwvZGl2PlwiXSxcbiAgICAgICAgICAgIFtcIjxkaXY+Zmlyc3Q8L2Rpdj5cIl0sXG4gICAgICAgICAgICBbXCI8ZGl2PmZpcnN0PC9kaXY+PHA+c2Vjb25kPC9wPlwiXVxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnbmV3IFRlbXBsYXRlKCkuZ2V0TmV3RG9jdW1lbnRGcmFnbWVudEFzU3RyaW5nKCkgc2hvdWxkIHJldHVybiBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKTtcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBhO1xuICAgICAgICAgICAgICAgIGxldCB0ID0gbmV3IFRlbXBsYXRlKHRlbXBsYXRlKTtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5lci5pbm5lckhUTUwpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NyZWF0ZSBpbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ25ldyBUZW1wbGF0ZSgpIHNob3VsZCByZXR1cm4gZG9jdW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBuZXcgVGVtcGxhdGUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKSk7XG4gICAgICAgICAgICBleHBlY3QoZCkudG8uYmUuaW5zdGFuY2VPZihUZW1wbGF0ZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5nZXRUZW1wbGF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ25ldyBUZW1wbGF0ZSgpLmdldFRlbXBsYXRlRWxlbWVudCgpIHNob3VsZCByZXR1cm4gSFRNTFRlbXBsYXRlRWxlbWVudCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IG5ldyBUZW1wbGF0ZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpKTtcbiAgICAgICAgICAgIGV4cGVjdChkLmdldFRlbXBsYXRlRWxlbWVudCgpKS50by5iZS5pbnN0YW5jZU9mKEhUTUxUZW1wbGF0ZUVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuZmluZERvY3VtZW50VGVtcGxhdGUoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBUZW1wbGF0ZSBub3QgZm91bmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZmluZERvY3VtZW50VGVtcGxhdGUoXCJub3dheVwiLCBkaXYpXG4gICAgICAgICAgICB9KS50by50aHJvd3MoRXJyb3IpO1xuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5maW5kRG9jdW1lbnRUZW1wbGF0ZSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkZXNjcmliZSgnVGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGZpbmQgdGVtcGxhdGUgb3ZlciBvd25lckRvY3VtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGRpdi5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBsZXQgdCA9IGZpbmREb2N1bWVudFRlbXBsYXRlKFwibXl0ZW1wbGF0ZVwiLCBkaXYpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0KS5pcy5pbnN0YW5jZW9mKFRlbXBsYXRlKTtcblxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ1RobWVuZWQgVGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgbWVtQXR0cmlidXRlVmFsdWU7XG5cbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlkPVwibXl0ZW1wbGF0ZVwiPjxwPjE8L3A+PC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlkPVwibXl0ZW1wbGF0ZS1tb25zdGVyXCI+PHA+MjwvcD48L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaWQ9XCJteXRlbXBsYXRlLXRlc3R0aGVtZVwiPjxwPjQ8L3A+PC90ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPHRlbXBsYXRlIGlkPVwibXlwcmVmaXgtbXl0ZW1wbGF0ZS1tb25zdGVyXCI+PHA+MzwvcD48L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgIGA7XG5cbiAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKTtcbiAgICAgICAgICAgICAgICBpZiAoaHRtbC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1RIRU1FX05BTUUpKSB7XG4gICAgICAgICAgICAgICAgICAgIG1lbUF0dHJpYnV0ZVZhbHVlID0gaHRtbC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1RIRU1FX05BTUUpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKTtcblxuICAgICAgICAgICAgICAgIGlmIChodG1sLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfVEhFTUVfTkFNRSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaHRtbC5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX1RIRU1FX05BTUUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChtZW1BdHRyaWJ1dGVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBodG1sLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfVEhFTUVfTkFNRSwgbWVtQXR0cmlidXRlVmFsdWUpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgZmluZCB0ZW1wbGF0ZSBvdmVyIG93bmVyRG9jdW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXRlbXBsYXRlLXByZWZpeCcsICdteXByZWZpeCcpXG4gICAgICAgICAgICAgICAgZGl2LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGxldCB0MSA9IGZpbmREb2N1bWVudFRlbXBsYXRlKFwibXl0ZW1wbGF0ZVwiLCBkaXYpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0MSkuaXMuaW5zdGFuY2VvZihUZW1wbGF0ZSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQxLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKS50ZXh0Q29udGVudCkuaXMuZXF1YWwoXCIzXCIpO1xuXG4gICAgICAgICAgICAgICAgZGl2LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXRlbXBsYXRlLXByZWZpeCcpXG4gICAgICAgICAgICAgICAgbGV0IHQyID0gZmluZERvY3VtZW50VGVtcGxhdGUoXCJteXRlbXBsYXRlXCIsIGRpdik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQyKS5pcy5pbnN0YW5jZW9mKFRlbXBsYXRlKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodDIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLnRleHRDb250ZW50KS5pcy5lcXVhbChcIjJcIik7XG5cbiAgICAgICAgICAgICAgICBodG1sLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfVEhFTUVfTkFNRSwndGVzdHRoZW1lJyk7XG4gICAgICAgICAgICAgICAgbGV0IGE9IGh0bWwub3V0ZXJIVE1MO1xuICAgICAgICAgICAgICAgIGxldCB0MyA9IGZpbmREb2N1bWVudFRlbXBsYXRlKFwibXl0ZW1wbGF0ZVwiLCBkaXYpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0MykuaXMuaW5zdGFuY2VvZihUZW1wbGF0ZSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQzLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKS50ZXh0Q29udGVudCkuaXMuZXF1YWwoXCI0XCIpO1xuXG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtmaXJlRXZlbnQsIGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50LCBmaXJlQ3VzdG9tRXZlbnR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuZGVzY3JpYmUoJ0V2ZW50cycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGluaXRKU0RPTSgpO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnZmluZCBvYmplY3QnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyJywgJ2hlbGxvJyk7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBlID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoZXZlbnQsICdkYXRhLW1vbnN0ZXInKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3RlcicpKS50by5iZS5lcXVhbCgnaGVsbG8nKVxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBmaXJlRXZlbnQoZGl2LCAnY2xpY2snKTtcbiAgICAgICAgICAgIH0sIDApXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdmaXJlRXZlbnQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgY2xpY2sgZXZlbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBmaXJlRXZlbnQoZGl2LCAnY2xpY2snKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgdG91Y2ggZXZlbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBmaXJlRXZlbnQoZGl2LCAndG91Y2gnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgdG91Y2ggZXZlbnQgb24gY29sbGVjdGlvbicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2gnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uID0gZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdicpO1xuXG5cbiAgICAgICAgICAgIGZpcmVFdmVudChjb2xsZWN0aW9uLCAndG91Y2gnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgdG91Y2ggZXZlbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4gICAgICAgICAgICBsZXQgY29sbGVjdGlvbiA9IGRpdi5xdWVyeVNlbGVjdG9yQWxsKCdkaXYnKTtcblxuXG4gICAgICAgICAgICBmaXJlRXZlbnQoY29sbGVjdGlvbiwgJ3RvdWNoJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZmlyZUV2ZW50KHt9LCAndG91Y2gnKSkudG8udGhyb3coRXJyb3IpO1xuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2ZpcmVDdXN0b21FdmVudCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGZpcmUgYSBjbGljayBldmVudCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGZpcmVDdXN0b21FdmVudChkaXYsICdjbGljaycpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZpcmUgYSB0b3VjaCBldmVudCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2gnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGZpcmVDdXN0b21FdmVudChkaXYsICd0b3VjaCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZpcmUgYSB0b3VjaCBldmVudCBvbiBjb2xsZWN0aW9uMScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2gnLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlLmRldGFpbC5kZXRhaWwgIT09ICdoZWxsbyB3b3JsZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgnZXJyb3InKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uID0gZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdicpO1xuXG4gICAgICAgICAgICBmaXJlQ3VzdG9tRXZlbnQoY29sbGVjdGlvbiwgJ3RvdWNoJywgXCJoZWxsbyB3b3JsZFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgdG91Y2ggZXZlbnQgb24gY29sbGVjdGlvbjInLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoJywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZS5kZXRhaWwuYSAhPT0gJ2hlbGxvIHdvcmxkJykge1xuICAgICAgICAgICAgICAgICAgICBkb25lKCdlcnJvcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb24gPSBkaXYucXVlcnlTZWxlY3RvckFsbCgnZGl2Jyk7XG5cbiAgICAgICAgICAgIGZpcmVDdXN0b21FdmVudChjb2xsZWN0aW9uLCAndG91Y2gnLCB7YTogXCJoZWxsbyB3b3JsZFwifSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIHRvdWNoIGV2ZW50JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb24gPSBkaXYucXVlcnlTZWxlY3RvckFsbCgnZGl2Jyk7XG5cblxuICAgICAgICAgICAgZmlyZUN1c3RvbUV2ZW50KGNvbGxlY3Rpb24sICd0b3VjaCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGZpcmVDdXN0b21FdmVudCh7fSwgJ3RvdWNoJykpLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGZpbmRFbGVtZW50V2l0aFNlbGVjdG9yVXB3YXJkcyB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgRGF0YXNvdXJjZSB9IGZyb20gXCIuLi9kYXRhc291cmNlLm1qc1wiO1xuXG5leHBvcnQgeyBEb21TdG9yYWdlIH07XG5cbi8qKlxuICogVGhlIERvbVN0b3JhZ2UgaXMgYSBjbGFzcyB0aGF0IHN0b3JlcyBkYXRhIGluIG1lbW9yeS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIERvbVN0b3JhZ2UgZXh0ZW5kcyBEYXRhc291cmNlIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gb3B0aW9ucyBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgdGhlIGRhdGFzb3VyY2UuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChpc09iamVjdChvcHRpb25zKSkge1xuXHRcdFx0dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9kb20tc3RvcmFnZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZGVmYXVsdHNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGRlZmF1bHRzLnJlYWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGRlZmF1bHRzLnJlYWQuc2VsZWN0b3Jcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGRlZmF1bHRzLndyaXRlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkZWZhdWx0cy53cml0ZS5zZWxlY3RvclxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0cmVhZDoge1xuXHRcdFx0XHRzZWxlY3RvcjogdW5kZWZpbmVkLFxuXHRcdFx0fSxcblx0XHRcdHdyaXRlOiB7XG5cdFx0XHRcdHNlbGVjdG9yOiB1bmRlZmluZWQsXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaGUgcmVhZCBzZWxlY3RvciBpcyBub3QgZGVmaW5lZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhlcmUgYXJlIG5vIHN0b3JhZ2UgZWxlbWVudFxuXHQgKi9cblx0cmVhZCgpIHtcblx0XHRjb25zdCBzZWxlY3RvciA9IHRoaXMuZ2V0T3B0aW9uKFwicmVhZC5zZWxlY3RvclwiLCB1bmRlZmluZWQpO1xuXHRcdGlmICghc2VsZWN0b3IpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSByZWFkIHNlbGVjdG9yIGlzIG5vdCBkZWZpbmVkXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHN0b3JhZ2UgPSBmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHModGhpcywgc2VsZWN0b3IpO1xuXHRcdGlmICghc3RvcmFnZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gc3RvcmFnZSBlbGVtZW50XCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBkYXRhID0gSlNPTi5wYXJzZShzdG9yYWdlLmlubmVySFRNTCk7XG5cdFx0XHRcdHRoaXMuc2V0KGRhdGEpO1xuXHRcdFx0XHRyZXNvbHZlKGRhdGEpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICogQHRocm93cyB7RXJyb3J9IFRoZSB3cml0ZSBzZWxlY3RvciBpcyBub3QgZGVmaW5lZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhlcmUgYXJlIG5vIHN0b3JhZ2UgZWxlbWVudFxuXHQgKi9cblx0d3JpdGUoKSB7XG5cdFx0Y29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldE9wdGlvbihcIndyaXRlLnNlbGVjdG9yXCIpO1xuXHRcdGlmICghc2VsZWN0b3IpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBvcHRpb24gd3JpdGUuc2VsZWN0b3IgaXMgbm90IGRlZmluZWRcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3RvcmFnZSA9IGZpbmRFbGVtZW50V2l0aFNlbGVjdG9yVXB3YXJkcyh0aGlzLCBzZWxlY3Rvcik7XG5cdFx0aWYgKCFzdG9yYWdlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBzdG9yYWdlIGVsZW1lbnRcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHN0b3JhZ2UuaW5uZXJIVE1MID0gSlNPTi5zdHJpbmdpZnkodGhpcy5nZXQoKSk7XG5cdFx0XHRcdHJlc29sdmUoc3RvcmFnZSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0RvbVN0b3JhZ2V9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL2RvbS5tanNcIjtcblxuXG5kZXNjcmliZSgnU2VydmVEb21yJywgZnVuY3Rpb24gKCkge1xuXG4gICAgaXQoJ3Nob3VsZCBpbml0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IGRvbSA9IG5ldyBEb21TdG9yYWdlKHtcbiAgICAgICAgICAgIFxuICAgICAgICB9KVxuXG4gICAgICAgIGV4cGVjdChkb20pLnRvLmJlLm5vdC5udWxsXG5cblxuICAgIH0pXG5cbn0pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgRGF0YXNvdXJjZSB9IGZyb20gXCIuLi8uLi9kYXRhc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgU3RvcmFnZSwgc3RvcmFnZU9iamVjdFN5bWJvbCB9IGZyb20gXCIuLi9zdG9yYWdlLm1qc1wiO1xuXG5leHBvcnQgeyBMb2NhbFN0b3JhZ2UgfTtcblxuLyoqXG4gKiBUaGUgTG9jYWxTdG9yYWdlIERhdGFzb3VyY2UgcHJvdmlkZXMgYSBkYXRhIHN0b3JlIGluIHRoZSBicm93c2VyIGxvY2FsU3RvcmFnZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIyLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgTG9jYWxTdG9yYWdlIGNsYXNzIGVuY2Fwc3VsYXRlcyB0aGUgYWNjZXNzIHRvIGRhdGEgb2JqZWN0cy5cbiAqL1xuY2xhc3MgTG9jYWxTdG9yYWdlIGV4dGVuZHMgU3RvcmFnZSB7XG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXMuXG5cdCAqIEByZXR1cm4ge2V4dGVybmFsOmxvY2FsU3RvcmFnZX1cblx0ICogQHByaXZhdGVcblx0ICovXG5cdFtzdG9yYWdlT2JqZWN0U3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gZ2V0R2xvYmFsT2JqZWN0KFwibG9jYWxTdG9yYWdlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9sb2NhbHN0b3JhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIGNsb25lXG5cdCAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cblx0ICovXG5cdGdldENsb25lKCkge1xuXHRcdHJldHVybiBuZXcgTG9jYWxTdG9yYWdlKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0ua2V5LFxuXHRcdCk7XG5cdH1cbn1cbiIsICJmdW5jdGlvbiBjcmVhdGVTdG9yYWdlKCkge1xuICAgIFxuICAgIGxldCBVTlNFVCA9IFN5bWJvbCgpO1xuICAgIGxldCBzID0ge30sXG4gICAgICAgIG5vb3BDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgfSxcbiAgICAgICAgX2l0ZW1JbnNlcnRpb25DYWxsYmFjayA9IG5vb3BDYWxsYmFjaztcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCAnc2V0SXRlbScsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKGssIHYgPSBVTlNFVCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2ID09PSBVTlNFVCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0SXRlbScgb24gJ1N0b3JhZ2UnOiAyIGFyZ3VtZW50cyByZXF1aXJlZCwgYnV0IG9ubHkgMSBwcmVzZW50LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBrID0gayArICcnO1xuICAgICAgICAgICAgICAgIGlmICghcy5oYXNPd25Qcm9wZXJ0eShrKSkge1xuICAgICAgICAgICAgICAgICAgICBfaXRlbUluc2VydGlvbkNhbGxiYWNrKHMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc1trXSA9IHYgKyAnJztcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgJ2dldEl0ZW0nLCB7XG4gICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGsgPT4ge1xuICAgICAgICAgICAgICAgIGsgPSBrICsgJyc7XG4gICAgICAgICAgICAgICAgaWYgKHMuaGFzT3duUHJvcGVydHkoaykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNba107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCAncmVtb3ZlSXRlbScsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gayA9PiB7XG4gICAgICAgICAgICAgICAgayA9IGsgKyAnJztcbiAgICAgICAgICAgICAgICBpZiAocy5oYXNPd25Qcm9wZXJ0eShrKSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgc1trXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsICdjbGVhcicsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGsgaW4gcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocy5oYXNPd25Qcm9wZXJ0eShrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNba107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsICdsZW5ndGgnLCB7XG4gICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHMpLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCBcImtleVwiLCB7XG4gICAgICAgIHZhbHVlOiBrID0+IHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBPYmplY3Qua2V5cyhzKVtrXTtcbiAgICAgICAgICAgIHJldHVybiAoIWtleSkgPyBudWxsIDoga2V5O1xuICAgICAgICB9LFxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCAnaXRlbUluc2VydGlvbkNhbGxiYWNrJywge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBfaXRlbUluc2VydGlvbkNhbGxiYWNrO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IHYgPT4ge1xuICAgICAgICAgICAgaWYgKCF2IHx8IHR5cGVvZiB2ICE9ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB2ID0gbm9vcENhbGxiYWNrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2l0ZW1JbnNlcnRpb25DYWxsYmFjayA9IHY7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcztcbn1cblxuXG5leHBvcnQge2NyZWF0ZVN0b3JhZ2V9OyIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7TG9jYWxTdG9yYWdlfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL2xvY2Fsc3RvcmFnZS5tanNcIjtcbmltcG9ydCB7Y3JlYXRlU3RvcmFnZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWwvbG9jYWxzdG9yYWdlLm1qc1wiO1xuXG5cbmxldCBsb2NhbFN0b3JhZ2VSZWZlcmVuY2U7XG5cbmRlc2NyaWJlKCdMb2NhbFN0b3JhZ2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxUaGlzWydsb2NhbFN0b3JhZ2UnXSA9IGxvY2FsU3RvcmFnZVJlZmVyZW5jZTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxvY2FsU3RvcmFnZVJlZmVyZW5jZSA9IGdsb2JhbFRoaXNbJ2xvY2FsU3RvcmFnZSddXG4gICAgICAgIGdsb2JhbFRoaXNbJ2xvY2FsU3RvcmFnZSddID0gY3JlYXRlU3RvcmFnZSgpO1xuXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgTG9jYWxTdG9yYWdlICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBMb2NhbFN0b3JhZ2UoJ215a2V5JykpLnRvLmJlLmluc3RhbmNlb2YoTG9jYWxTdG9yYWdlKVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3J3JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdyZWFkIHNob3VsZCByZXR1cm4gb2JqZWN0JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IExvY2FsU3RvcmFnZSgnbXlrZXknKVxuICAgICAgICAgICAgZHMucmVhZCgpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3dyaXRlIHNob3VsZCAnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgZHMgPSBuZXcgTG9jYWxTdG9yYWdlKCdteWtleScpXG4gICAgICAgICAgICBkcy53cml0ZSgpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cblxufSkiLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBEYXRhc291cmNlIH0gZnJvbSBcIi4uLy4uL2RhdGFzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBTdG9yYWdlLCBzdG9yYWdlT2JqZWN0U3ltYm9sIH0gZnJvbSBcIi4uL3N0b3JhZ2UubWpzXCI7XG5cbmV4cG9ydCB7IFNlc3Npb25TdG9yYWdlIH07XG5cbi8qKlxuICogVGhlIFNlc3Npb25TdG9yYWdlIGNsYXNzIHByb3ZpZGVzIGEgZGF0YSBzb3VyY2UgdGhhdCB1c2VzIHRoZSBTZXNzaW9uU3RvcmFnZSBBUEkgb24gdGhlIGNsaWVudC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIyLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgTG9jYWxTdG9yYWdlIGNsYXNzIGVuY2Fwc3VsYXRlcyB0aGUgYWNjZXNzIHRvIGRhdGEgb2JqZWN0cy5cbiAqL1xuY2xhc3MgU2Vzc2lvblN0b3JhZ2UgZXh0ZW5kcyBTdG9yYWdlIHtcblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlcy5cblx0ICogQHJldHVybiB7ZXh0ZXJuYWw6c2Vzc2lvblN0b3JhZ2V9XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRbc3RvcmFnZU9iamVjdFN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIGdldEdsb2JhbE9iamVjdChcInNlc3Npb25TdG9yYWdlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFxuXHRcdFx0XCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL3Nlc3Npb24tc3RvcmFnZVwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlIENsb25lXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Nlc3Npb25TdG9yYWdlfVxuXHQgKi9cblx0Z2V0Q2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBTZXNzaW9uU3RvcmFnZShcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLmtleSxcblx0XHQpO1xuXHR9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1Nlc3Npb25TdG9yYWdlfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL3Nlc3Npb25zdG9yYWdlLm1qc1wiO1xuaW1wb3J0IHtjcmVhdGVTdG9yYWdlfSBmcm9tIFwiLi4vLi4vLi4vLi4vdXRpbC9sb2NhbHN0b3JhZ2UubWpzXCI7XG5cblxubGV0IHN0b3JhZ2VSZWZlcmVuY2U7XG5cbmRlc2NyaWJlKCdTZXNzaW9uU3RvcmFnZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGdsb2JhbFRoaXNbJ3Nlc3Npb25TdG9yYWdlJ10gPSBzdG9yYWdlUmVmZXJlbmNlO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgc3RvcmFnZVJlZmVyZW5jZSA9IGdsb2JhbFRoaXNbJ3Nlc3Npb25TdG9yYWdlJ11cbiAgICAgICAgZ2xvYmFsVGhpc1snc2Vzc2lvblN0b3JhZ2UnXSA9IGNyZWF0ZVN0b3JhZ2UoKTtcblxuICAgIH0pXG5cbiAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIFNlc3Npb25TdG9yYWdlICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBTZXNzaW9uU3RvcmFnZSgnbXlrZXknKSkudG8uYmUuaW5zdGFuY2VvZihTZXNzaW9uU3RvcmFnZSlcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdydycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVhZCBzaG91bGQgcmV0dXJuIG9iamVjdCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBkcyA9IG5ldyBTZXNzaW9uU3RvcmFnZSgnbXlrZXknKVxuICAgICAgICAgICAgZHMucmVhZCgpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3dyaXRlIHNob3VsZCAnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgZHMgPSBuZXcgU2Vzc2lvblN0b3JhZ2UoJ215a2V5JylcbiAgICAgICAgICAgIGRzLndyaXRlKCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuXG59KSIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc09iamVjdCB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IERhdGFzb3VyY2UgfSBmcm9tIFwiLi4vZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IGRpZmYgfSBmcm9tIFwiLi4vZGlmZi5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IFBpcGUgfSBmcm9tIFwiLi4vcGlwZS5tanNcIjtcblxuZXhwb3J0IHsgU2VydmVyIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHNlcnZlclZlcnNpb25TeW1ib2wgPSBTeW1ib2woXCJzZXJ2ZXJWZXJzaW9uXCIpO1xuXG4vKipcbiAqIEJhc2UgY2xhc3MgZm9yIGFsbCBzZXJ2ZXIgZGF0YSBzb3VyY2VzXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy40LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgU2VydmVyIGNsYXNzIGVuY2Fwc3VsYXRlcyB0aGUgYWNjZXNzIHRvIGEgc2VydmVyIGRhdGFzb3VyY2VcbiAqL1xuY2xhc3MgU2VydmVyIGV4dGVuZHMgRGF0YXNvdXJjZSB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgcHJlcGFyZXMgdGhlIGRhdGEgdGhhdCBjb21lcyBmcm9tIHRoZSBzZXJ2ZXIuXG5cdCAqIFNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge09iamVjdH0gcGF5bG9hZFxuXHQgKiBAcmV0dXJuIHtPYmplY3R9XG5cdCAqL1xuXHR0cmFuc2Zvcm1TZXJ2ZXJQYXlsb2FkKHBheWxvYWQpIHtcblx0XHRwYXlsb2FkID0gZG9UcmFuc2Zvcm0uY2FsbCh0aGlzLCBcInJlYWRcIiwgcGF5bG9hZCk7XG5cdFx0dGhpc1tzZXJ2ZXJWZXJzaW9uU3ltYm9sXSA9IHBheWxvYWQ7XG5cblx0XHRjb25zdCBkYXRhUGF0aCA9IHRoaXMuZ2V0T3B0aW9uKFwicmVhZC5wYXRoXCIpO1xuXHRcdGlmIChkYXRhUGF0aCkge1xuXHRcdFx0cGF5bG9hZCA9IG5ldyBQYXRoZmluZGVyKHBheWxvYWQpLmdldFZpYShkYXRhUGF0aCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBheWxvYWQ7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBwcmVwYXJlcyB0aGUgZGF0YSBmb3Igd3JpdGluZyBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXlsb2FkXG5cdCAqIEByZXR1cm4ge09iamVjdH1cblx0ICovXG5cdHByZXBhcmVTZXJ2ZXJQYXlsb2FkKHBheWxvYWQpIHtcblx0XHRwYXlsb2FkID0gZG9UcmFuc2Zvcm0uY2FsbCh0aGlzLCBcIndyaXRlXCIsIHBheWxvYWQpO1xuXHRcdHBheWxvYWQgPSBkb0RpZmYuY2FsbCh0aGlzLCBwYXlsb2FkKTtcblxuXHRcdGNvbnN0IHNoZWF0aGluZ09iamVjdCA9IHRoaXMuZ2V0T3B0aW9uKFwid3JpdGUuc2hlYXRoaW5nLm9iamVjdFwiKTtcblx0XHRjb25zdCBzaGVhdGhpbmdQYXRoID0gdGhpcy5nZXRPcHRpb24oXCJ3cml0ZS5zaGVhdGhpbmcucGF0aFwiKTtcblxuXHRcdGlmIChzaGVhdGhpbmdPYmplY3QgJiYgc2hlYXRoaW5nUGF0aCkge1xuXHRcdFx0Y29uc3Qgc3ViID0gcGF5bG9hZDtcblx0XHRcdHBheWxvYWQgPSBzaGVhdGhpbmdPYmplY3Q7XG5cdFx0XHRuZXcgUGF0aGZpbmRlcihwYXlsb2FkKS5zZXRWaWEoc2hlYXRoaW5nUGF0aCwgc3ViKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcGF5bG9hZDtcblx0fVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gb2JqXG4gKiBAcmV0dXJuIHsqfVxuICovXG5mdW5jdGlvbiBkb0RpZmYob2JqKSB7XG5cdGlmIChcblx0XHR0aGlzW3NlcnZlclZlcnNpb25TeW1ib2xdID09PSBudWxsIHx8XG5cdFx0dGhpc1tzZXJ2ZXJWZXJzaW9uU3ltYm9sXSA9PT0gdW5kZWZpbmVkXG5cdCkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHRjb25zdCBjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwid3JpdGUucGFydGlhbC5jYWxsYmFja1wiKTtcblx0aWYgKCFpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHRjb25zdCByZXN1bHRzID0gZGlmZih0aGlzW3NlcnZlclZlcnNpb25TeW1ib2xdLCBvYmopO1xuXHRpZiAoIXJlc3VsdHMpIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0b2JqID0gY2FsbGJhY2sob2JqLCByZXN1bHRzKTtcblx0dGhpc1tzZXJ2ZXJWZXJzaW9uU3ltYm9sXSA9IG9iajtcblxuXHRyZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBkb1RyYW5zZm9ybSh0eXBlLCBvYmopIHtcblx0Y29uc3QgdHJhbnNmb3JtYXRpb24gPSB0aGlzLmdldE9wdGlvbihgJHt0eXBlfS5tYXBwaW5nLnRyYW5zZm9ybWVyYCk7XG5cblx0aWYgKHRyYW5zZm9ybWF0aW9uICE9PSB1bmRlZmluZWQgJiYgdHJhbnNmb3JtYXRpb24gIT09IG51bGwpIHtcblx0XHRjb25zdCBwaXBlID0gbmV3IFBpcGUodHJhbnNmb3JtYXRpb24pO1xuXHRcdGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMuZ2V0T3B0aW9uKGAke3R5cGV9Lm1hcHBpbmcuY2FsbGJhY2tzYCk7XG5cblx0XHRpZiAoaXNBcnJheShjYWxsYmFja3MpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIGNhbGxiYWNrcykge1xuXHRcdFx0XHRpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHRwaXBlLnNldENhbGxiYWNrKGNhbGxiYWNrKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChpc09iamVjdChjYWxsYmFja3MpKSB7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBjYWxsYmFja3MpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGNhbGxiYWNrcy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmXG5cdFx0XHRcdFx0dHlwZW9mIGNhbGxiYWNrc1trZXldID09PSBcImZ1bmN0aW9uXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cGlwZS5zZXRDYWxsYmFjayhrZXksIGNhbGxiYWNrc1trZXldKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG9iaiA9IHBpcGUucnVuKG9iaik7XG5cdH1cblxuXHRyZXR1cm4gb2JqO1xufVxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1NlcnZlcn0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdTZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBpdCgnc2hvdWxkIHRyYW5zZm9ybSBkYXRhJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCB3cml0ZUNhbGxiYWNrQ2FsbGVkID0gZmFsc2VcbiAgICAgICAgbGV0IHJlYWRDYWxsYmFja0NhbGxlZCA9IGZhbHNlXG5cbiAgICAgICAgY29uc3Qgc2VydmVyID0gbmV3IFNlcnZlcih7XG4gICAgICAgICAgICB3cml0ZToge1xuICAgICAgICAgICAgICAgIG1hcHBpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZXI6IFwiY2FsbDpvbldyaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25Xcml0ZTogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNoZWF0aGluZzoge1xuICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbW86IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeHl6OiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogXCJkYXRhLnh5elwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVhZDoge1xuICAgICAgICAgICAgICAgIG1hcHBpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZXI6IFwiY2FsbDpvblJlYWRcIixcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvblJlYWQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNrQ2FsbGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBhdGg6ICdkYXRhLnh5eicsXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgZXhwZWN0KHNlcnZlci50cmFuc2Zvcm1TZXJ2ZXJQYXlsb2FkKHtkZW1vOiAxLCBkYXRhOiB7eHl6OiAyfX0pKS50by5kZWVwLmVxdWFsKHtkZW1vOiAxLCBkYXRhOiB7eHl6OiAyfX0pXG4gICAgICAgIGV4cGVjdChzZXJ2ZXIucHJlcGFyZVNlcnZlclBheWxvYWQoe2RlbW86IDEsIGRhdGE6IHt4eXo6IDJ9fSkpLnRvLmRlZXAuZXF1YWwoe2RlbW86IDEsIGRhdGE6IHt4eXo6IDJ9fSlcblxuXG4gICAgfSlcblxufSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nLCBpc09iamVjdCB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IFdlYkNvbm5lY3QgYXMgTmV0V2ViQ29ubmVjdCB9IGZyb20gXCIuLi8uLi8uLi9uZXQvd2ViY29ubmVjdC5tanNcIjtcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tIFwiLi4vLi4vLi4vbmV0L3dlYmNvbm5lY3QvbWVzc2FnZS5tanNcIjtcbmltcG9ydCB7IFNlcnZlciB9IGZyb20gXCIuLi9zZXJ2ZXIubWpzXCI7XG5cbmV4cG9ydCB7IFdlYkNvbm5lY3QgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqXG4gKiBoaW50OiB0aGlzIG5hbWUgaXMgdXNlZCBpbiB0aGUgdGVzdHMuIGlmIHlvdSB3YW50IHRvIGNoYW5nZSBpdCwgcGxlYXNlIGNoYW5nZSBpdCBpbiB0aGUgdGVzdHMgYXMgd2VsbC5cbiAqL1xuY29uc3Qgd2ViQ29ubmVjdFN5bWJvbCA9IFN5bWJvbChcImNvbm5lY3Rpb25cIik7XG5cbi8qKlxuICogVGhlIFJlc3RBUEkgaXMgYSBjbGFzcyB0aGF0IGVuYWJsZXMgYSBSRVNUIEFQSSBzZXJ2ZXIuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi8uLi9leGFtcGxlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvd2ViY29ubmVjdC5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuMS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIExvY2FsU3RvcmFnZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIFdlYkNvbm5lY3QgZXh0ZW5kcyBTZXJ2ZXIge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBvcHRpb25zIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciB0aGUgZGF0YXNvdXJjZS5cblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKGlzU3RyaW5nKG9wdGlvbnMpKSB7XG5cdFx0XHRvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfTtcblx0XHR9XG5cblx0XHRpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSBvcHRpb25zID0ge307XG5cdFx0dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0gPSBuZXcgTmV0V2ViQ29ubmVjdCh7XG5cdFx0XHR1cmw6IHRoaXMuZ2V0T3B0aW9uKFwidXJsXCIpLFxuXHRcdFx0Y29ubmVjdGlvbjoge1xuXHRcdFx0XHR0aW1lb3V0OiB0aGlzLmdldE9wdGlvbihcImNvbm5lY3Rpb24udGltZW91dFwiKSxcblx0XHRcdFx0cmVjb25uZWN0OiB7XG5cdFx0XHRcdFx0dGltZW91dDogdGhpcy5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnJlY29ubmVjdC50aW1lb3V0XCIpLFxuXHRcdFx0XHRcdGF0dGVtcHRzOiB0aGlzLmdldE9wdGlvbihcImNvbm5lY3Rpb24ucmVjb25uZWN0LmF0dGVtcHRzXCIpLFxuXHRcdFx0XHRcdGVuYWJsZWQ6IHRoaXMuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi5yZWNvbm5lY3QuZW5hYmxlZFwiKSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGNvbm5lY3QoKSB7XG5cdFx0cmV0dXJuIHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0uY29ubmVjdCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0Nvbm5lY3RlZCgpIHtcblx0XHRyZXR1cm4gdGhpc1t3ZWJDb25uZWN0U3ltYm9sXS5pc0Nvbm5lY3RlZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvd2ViY29ubmVjdFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdXJsPXVuZGVmaW5lZCBEZWZpbmVzIHRoZSByZXNvdXJjZSB0aGF0IHlvdSB3aXNoIHRvIGZldGNoLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29ubmVjdGlvblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29ubmVjdGlvbi50aW1lb3V0PTUwMDAgRGVmaW5lcyB0aGUgdGltZW91dCBmb3IgdGhlIGNvbm5lY3Rpb24uXG5cdCAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBjb25uZWN0aW9uLnJlY29ubmVjdC50aW1lb3V0IFRoZSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgdGhlIHJlY29ubmVjdC5cblx0ICogQHByb3BlcnR5IHtOdW1iZXJ9IGNvbm5lY3Rpb24ucmVjb25uZWN0LmF0dGVtcHRzIFRoZSBtYXhpbXVtIG51bWJlciBvZiByZWNvbm5lY3RzLlxuXHQgKiBAcHJvcGVydHkge0Jvb2x9IGNvbm5lY3Rpb24ucmVjb25uZWN0LmVuYWJsZWQgSWYgdGhlIHJlY29ubmVjdCBpcyBlbmFibGVkLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGU9e30gT3B0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUubWFwcGluZyB0aGUgbWFwcGluZyBpcyBhcHBsaWVkIGJlZm9yZSB3cml0aW5nLlxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gd3JpdGUubWFwcGluZy50cmFuc2Zvcm1lciBUcmFuc2Zvcm1lciB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkRhdGEuRGF0YXNvdXJjZX5leGFtcGxlQ2FsbGJhY2tbXX0gd3JpdGUubWFwcGluZy5jYWxsYmFjayB3aXRoIHRoZSBoZWxwIG9mIHRoZSBjYWxsYmFjaywgdGhlIHN0cnVjdHVyZXMgY2FuIGJlIGFkanVzdGVkIGJlZm9yZSB3cml0aW5nLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUuc2hlYXRoaW5nXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5zaGVhdGhpbmcub2JqZWN0IE9iamVjdCB0byBiZSB3cmFwcGVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3cml0ZS5zaGVhdGhpbmcucGF0aCBQYXRoIHRvIHRoZSBkYXRhXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSByZWFkPXt9IE9wdGlvbnNcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHJlYWQucGF0aCBQYXRoIHRvIGRhdGFcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQubWFwcGluZyB0aGUgbWFwcGluZyBpcyBhcHBsaWVkIGFmdGVyIHJlYWRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSByZWFkLm1hcHBpbmcudHJhbnNmb3JtZXIgVHJhbnNmb3JtZXIgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBlbnRyaWVzXG5cdCAqIEBwcm9wZXJ0eSB7TW9uc3Rlci5EYXRhLkRhdGFzb3VyY2V+ZXhhbXBsZUNhbGxiYWNrW119IHJlYWQubWFwcGluZy5jYWxsYmFjayB3aXRoIHRoZSBoZWxwIG9mIHRoZSBjYWxsYmFjaywgdGhlIHN0cnVjdHVyZXMgY2FuIGJlIGFkanVzdGVkIGFmdGVyIHJlYWRpbmcuXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR1cmw6IHVuZGVmaW5lZCxcblx0XHRcdHdyaXRlOiB7XG5cdFx0XHRcdG1hcHBpbmc6IHtcblx0XHRcdFx0XHR0cmFuc2Zvcm1lcjogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNhbGxiYWNrczoge30sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNoZWF0aGluZzoge1xuXHRcdFx0XHRcdG9iamVjdDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdHBhdGg6IHVuZGVmaW5lZCxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRyZWFkOiB7XG5cdFx0XHRcdG1hcHBpbmc6IHtcblx0XHRcdFx0XHR0cmFuc2Zvcm1lcjogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNhbGxiYWNrczoge30sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHBhdGg6IHVuZGVmaW5lZCxcblx0XHRcdH0sXG5cdFx0XHRjb25uZWN0aW9uOiB7XG5cdFx0XHRcdHRpbWVvdXQ6IDUwMDAsXG5cdFx0XHRcdHJlY29ubmVjdDoge1xuXHRcdFx0XHRcdHRpbWVvdXQ6IDEwMDAsXG5cdFx0XHRcdFx0YXR0ZW1wdHM6IDEsXG5cdFx0XHRcdFx0ZW5hYmxlZDogZmFsc2UsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNsb3NlcyB0aGUgY29ubmVjdGlvbi5cblx0ICpcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGNsb3NlKCkge1xuXHRcdHJldHVybiB0aGlzW3dlYkNvbm5lY3RTeW1ib2xdLmNsb3NlKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHJlYWQoKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHdoaWxlICh0aGlzW3dlYkNvbm5lY3RTeW1ib2xdLmRhdGFSZWNlaXZlZCgpID09PSB0cnVlKSB7XG5cdFx0XHRcdGxldCBvYmogPSB0aGlzW3dlYkNvbm5lY3RTeW1ib2xdLnBvbGwoKTtcblx0XHRcdFx0aWYgKCFpc09iamVjdChvYmopKSB7XG5cdFx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIlRoZSByZWNlaXZlZCBkYXRhIGlzIG5vdCBhbiBvYmplY3QuXCIpKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIShvYmogaW5zdGFuY2VvZiBNZXNzYWdlKSkge1xuXHRcdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJUaGUgcmVjZWl2ZWQgZGF0YSBpcyBub3QgYSBNZXNzYWdlLlwiKSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0b2JqID0gb2JqLmdldERhdGEoKTtcblx0XHRcdFx0b2JqID0gdGhpcy50cmFuc2Zvcm1TZXJ2ZXJQYXlsb2FkLmNhbGwodGhpcywgb2JqKTtcblx0XHRcdFx0dGhpcy5zZXQob2JqKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzb2x2ZSh0aGlzLmdldCgpKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0d3JpdGUoKSB7XG5cdFx0Y29uc3Qgb2JqID0gdGhpcy5wcmVwYXJlU2VydmVyUGF5bG9hZCh0aGlzLmdldCgpKTtcblx0XHRyZXR1cm4gdGhpc1t3ZWJDb25uZWN0U3ltYm9sXS5zZW5kKG9iaik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UmVzdEFQSX1cblx0ICovXG5cdGdldENsb25lKCkge1xuXHRcdHJldHVybiBuZXcgV2ViQ29ubmVjdCh0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXSk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtXZWJDb25uZWN0fSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvd2ViY29ubmVjdC5tanNcIjtcbmltcG9ydCB7aW5pdFdlYlNvY2tldH0gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWwvd2Vic29ja2V0Lm1qc1wiO1xuXG5jb25zdCB0ZXN0VXJsID0gXCJ3c3M6Ly93cy5wb3N0bWFuLWVjaG8uY29tL3Jhd1wiXG5cbmRlc2NyaWJlKCdXZWJzb2NrZXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgZHMgPSB1bmRlZmluZWRcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0V2ViU29ja2V0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgfSlcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpZiAoZHMpIHtcbiAgICAgICAgICAgIGRzLmNsb3NlKClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdvcmthcm91bmQ6IHdpdGhvdXQgdGhpcywgdGhlIG5vZGUgdGVzdCB3aWxsIG5vdCBleGl0IFxuICAgICAgICBmb3IgKGNvbnN0IHN5bSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGRzKSkge1xuICAgICAgICAgICAgaWYgKHN5bS50b1N0cmluZygpID09PSAnU3ltYm9sKGNvbm5lY3Rpb24pJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBkc1tzeW1dXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzeW0yIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoY29ubmVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN5bTIudG9TdHJpbmcoKSA9PT0gJ1N5bWJvbChjb25uZWN0aW9uKScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvY2tldCA9IGNvbm5lY3Rpb25bc3ltMl0/LnNvY2tldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb2NrZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNvY2tldD8udGVybWluYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldD8uWyd0ZXJtaW5hdGUnXSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZG9uZSgpXG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdldCBjbG9uZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBkcyA9IG5ldyBXZWJDb25uZWN0KHRlc3RVcmwpXG4gICAgICAgIGNvbnN0IGNsb25lID0gZHMuZ2V0Q2xvbmUoKVxuICAgICAgICBleHBlY3QoY2xvbmUpLnRvLmJlLmFuLmluc3RhbmNlb2YoV2ViQ29ubmVjdClcblxuICAgIH0pXG5cbiAgICBpdCgnc2hvdWxkIHRyYW5zZm9ybSBkYXRhJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgd3JpdGVDYWxsYmFja0NhbGxlZCA9IGZhbHNlXG4gICAgICAgIGxldCByZWFkQ2FsbGJhY2tDYWxsZWQgPSBmYWxzZVxuXG4gICAgICAgIGRzID0gbmV3IFdlYkNvbm5lY3Qoe1xuICAgICAgICAgICAgdXJsOiB0ZXN0VXJsLFxuICAgICAgICAgICAgd3JpdGU6IHtcbiAgICAgICAgICAgICAgICBtYXBwaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVyOiBcImNhbGw6b25Xcml0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uV3JpdGU6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVDYWxsYmFja0NhbGxlZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzaGVhdGhpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZW1vOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh5ejogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IFwiZGF0YS54eXpcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlYWQ6IHtcbiAgICAgICAgICAgICAgICBtYXBwaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVyOiBcImNhbGw6b25SZWFkXCIsXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25SZWFkOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRDYWxsYmFja0NhbGxlZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwYXRoOiAnZGF0YS54eXonLFxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGRzLmNvbm5lY3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRzLnNldCh7XG4gICAgICAgICAgICAgICAgZW52ZWxvcDoge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIkhlbGxvIFdvcmxkXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkcy53cml0ZSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgZHMuc2V0KHt9KVxuICAgICAgICAgICAgICAgIGV4cGVjdChkcy5nZXQoKSkudG8uYmUuZGVlcC5lcXVhbCh7fSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuXG4gICAgICAgICAgICAgICAgICAgIGRzLnJlYWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChkcy5nZXQoKSkudG8uYmUuZGVlcC5lcXVhbCh7ZW52ZWxvcDp7bWVzc2FnZTogXCJIZWxsbyBXb3JsZFwifX0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHdyaXRlQ2FsbGJhY2tDYWxsZWQpLnRvLmJlLnRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChyZWFkQ2FsbGJhY2tDYWxsZWQpLnRvLmJlLnRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sIDIwMClcblxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGVycikpO1xuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBkb25lKGUpXG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cbiAgICBpdCgnc2hvdWxkIGNvbm5lY3QnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBkcyA9IG5ldyBXZWJDb25uZWN0KHtcbiAgICAgICAgICAgIHVybDogdGVzdFVybCxcbiAgICAgICAgICAgIHJlY29ubmVjdDoge1xuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBkcy5jb25uZWN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgfSlcblxuXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgc2VuZCBhIG1lc3NhZ2UnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBcbiAgICAgICAgdGhpcy50aW1lb3V0KDEwMDAwKVxuICAgICAgICBcbiAgICAgICAgZHMgPSBuZXcgV2ViQ29ubmVjdCh7XG4gICAgICAgICAgICB1cmw6IHRlc3RVcmwsXG4gICAgICAgICAgICByZWNvbm5lY3Q6IHtcbiAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGRzLmNvbm5lY3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRzLnNldCh7XG4gICAgICAgICAgICAgICAgZW52ZWxvcDoge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIkhlbGxvIFdvcmxkXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkcy53cml0ZSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgZHMuc2V0KHt9KVxuICAgICAgICAgICAgICAgIGV4cGVjdChkcy5nZXQoKSkudG8uYmUuZGVlcC5lcXVhbCh7fSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICBkcy5yZWFkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkcy5nZXQoKSkudG8uYmUuZGVlcC5lcXVhbCh7ZW52ZWxvcDp7bWVzc2FnZTogXCJIZWxsbyBXb3JsZFwifX0pO1xuICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9LDUwMClcbiAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGVycikpO1xuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICBkb25lKGUpXG4gICAgICAgIH0pXG5cblxuICAgIH0pO1xuXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzRnVuY3Rpb24sIGlzQXJyYXkgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBkaWZmIH0gZnJvbSBcIi4uLy4uL2RpZmYubWpzXCI7XG5pbXBvcnQgeyBTZXJ2ZXIgfSBmcm9tIFwiLi4vc2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgV3JpdGVFcnJvciB9IGZyb20gXCIuL3Jlc3RhcGkvd3JpdGVlcnJvci5tanNcIjtcbmltcG9ydCB7IERhdGFGZXRjaEVycm9yIH0gZnJvbSBcIi4vcmVzdGFwaS9kYXRhLWZldGNoLWVycm9yLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jbG9uZS5tanNcIjtcblxuZXhwb3J0IHsgUmVzdEFQSSB9O1xuXG4vKipcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjEyLjBcbiAqL1xuY29uc3QgcmF3RGF0YVN5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3Jlc3RhcGkvcmF3ZGF0YVwiLFxuKTtcblxuLyoqXG4gKiBUaGUgUmVzdEFQSSBpcyBhIGNsYXNzIHRoYXQgZW5hYmxlcyBhIFJFU1QgQVBJIHNlcnZlci5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uLy4uLy4uL2V4YW1wbGUvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIFJlc3RBUEkgaXMgYSBjbGFzcyB0aGF0IGJpbmRzIGEgUkVTVCBBUEkgc2VydmVyLlxuICovXG5jbGFzcyBSZXN0QVBJIGV4dGVuZHMgU2VydmVyIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gb3B0aW9ucyBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgdGhlIGRhdGFzb3VyY2UuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChpc09iamVjdChvcHRpb25zKSkge1xuXHRcdFx0dGhpcy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZT17fSBPcHRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5pbml0PXt9IEFuIG9wdGlvbiBvYmplY3QsIGNvbnRhaW5pbmcgYW55IGN1c3RvbSBzZXR0aW5ncyB0aGF0IHlvdSB3YW50IHRvIGFwcGx5IHRvIHRoZSByZXF1ZXN0LiBUaGUgcGFyYW1ldGVycyBhcmUgaWRlbnRpY2FsIHRvIHRob3NlIG9mIHRoZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1JlcXVlc3QvUmVxdWVzdHxSZXF1ZXN0IGNvbnN0cnVjdG9yfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gd3JpdGUuaW5pdC5tZXRob2Q9UE9TVFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUuaW5pdC5oZWFkZXJzIE9iamVjdCBjb250YWluaW5nIGFueSBjdXN0b20gaGVhZGVycyB0aGF0IHlvdSB3YW50IHRvIGFwcGx5IHRvIHRoZSByZXF1ZXN0LlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gd3JpdGUucmVzcG9uc2VDYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgcmVxdWVzdCBoYXMgYmVlbiBjb21wbGV0ZWQuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3cml0ZS5hY2NlcHRlZFN0YXR1cz1bMjAwLDIwMV1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLnVybCBVUkxcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLm1hcHBpbmcgdGhlIG1hcHBpbmcgaXMgYXBwbGllZCBiZWZvcmUgd3JpdGluZy5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHdyaXRlLm1hcHBpbmcudHJhbnNmb3JtZXIgVHJhbnNmb3JtZXIgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBlbnRyaWVzXG5cdCAqIEBwcm9wZXJ0eSB7ZXhhbXBsZUNhbGxiYWNrW119IHdyaXRlLm1hcHBpbmcuY2FsbGJhY2sgd2l0aCB0aGUgaGVscCBvZiB0aGUgY2FsbGJhY2ssIHRoZSBzdHJ1Y3R1cmVzIGNhbiBiZSBhZGp1c3RlZCBiZWZvcmUgd3JpdGluZy5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLnJlcG9ydFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gd3JpdGUucmVwb3J0LnBhdGggUGF0aCB0byB2YWxpZGF0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUucGFydGlhbFxuXHQgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSB3cml0ZS5wYXJ0aWFsLmNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSByZXF1ZXN0IGhhcyBiZWVuIGNvbXBsZXRlZC4gKG9iaiwgZGlmZlJlc3VsdCkgPT4gb2JqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5zaGVhdGhpbmdcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLnNoZWF0aGluZy5vYmplY3QgT2JqZWN0IHRvIGJlIHdyYXBwZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLnNoZWF0aGluZy5wYXRoIFBhdGggdG8gdGhlIGRhdGFcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQ9e30gT3B0aW9uc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVhZC5pbml0PXt9IEFuIG9wdGlvbiBvYmplY3QgY29udGFpbmluZyBhbnkgY3VzdG9tIHNldHRpbmdzIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gdGhlIHJlcXVlc3QuIFRoZSBwYXJhbWV0ZXJzIGFyZSBpZGVudGljYWwgdG8gdGhvc2Ugb2YgdGhlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUmVxdWVzdC9SZXF1ZXN0fFJlcXVlc3QgY29uc3RydWN0b3J9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWFkLmluaXQubWV0aG9kPUdFVFxuXHQgKiBAcHJvcGVydHkge2FycmF5fSByZWFkLmFjY2VwdGVkU3RhdHVzPVsyMDBdXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWFkLnVybCBVUkxcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQubWFwcGluZyB0aGUgbWFwcGluZyBpcyBhcHBsaWVkIGFmdGVyIHJlYWRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSByZWFkLm1hcHBpbmcudHJhbnNmb3JtZXIgVHJhbnNmb3JtZXIgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBlbnRyaWVzXG5cdCAqIEBwcm9wZXJ0eSB7ZXhhbXBsZUNhbGxiYWNrW119IHJlYWQubWFwcGluZy5jYWxsYmFjayB3aXRoIHRoZSBoZWxwIG9mIHRoZSBjYWxsYmFjaywgdGhlIHN0cnVjdHVyZXMgY2FuIGJlIGFkanVzdGVkIGFmdGVyIHJlYWRpbmcuXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR3cml0ZToge1xuXHRcdFx0XHRpbml0OiB7XG5cdFx0XHRcdFx0bWV0aG9kOiBcIlBPU1RcIixcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVzcG9uc2VDYWxsYmFjazogbnVsbCxcblx0XHRcdFx0YWNjZXB0ZWRTdGF0dXM6IFsyMDAsIDIwMV0sXG5cdFx0XHRcdHVybDogbnVsbCxcblx0XHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRcdHRyYW5zZm9ybWVyOiBudWxsLFxuXHRcdFx0XHRcdGNhbGxiYWNrczogW10sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNoZWF0aGluZzoge1xuXHRcdFx0XHRcdG9iamVjdDogbnVsbCxcblx0XHRcdFx0XHRwYXRoOiBudWxsLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRyZXBvcnQ6IHtcblx0XHRcdFx0XHRwYXRoOiBudWxsLFxuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdHBhcnRpYWw6IHtcblx0XHRcdFx0XHRjYWxsYmFjazogbnVsbCxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRyZWFkOiB7XG5cdFx0XHRcdGluaXQ6IHtcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHBhdGg6IG51bGwsXG5cdFx0XHRcdHJlc3BvbnNlQ2FsbGJhY2s6IG51bGwsXG5cdFx0XHRcdGFjY2VwdGVkU3RhdHVzOiBbMjAwXSxcblx0XHRcdFx0dXJsOiBudWxsLFxuXHRcdFx0XHRtYXBwaW5nOiB7XG5cdFx0XHRcdFx0dHJhbnNmb3JtZXI6IG51bGwsXG5cdFx0XHRcdFx0Y2FsbGJhY2tzOiBbXSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBvcHRpb25zIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBqc29uIGRlZmluaXRpb25cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3Rcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBkYXRhIGNhbm5vdCBiZSByZWFkXG5cdCAqL1xuXHRyZWFkKCkge1xuXHRcdGxldCBpbml0ID0gdGhpcy5nZXRPcHRpb24oXCJyZWFkLmluaXRcIik7XG5cdFx0aWYgKCFpc09iamVjdChpbml0KSkgaW5pdCA9IHt9O1xuXHRcdGlmICghaW5pdFtcIm1ldGhvZFwiXSkgaW5pdFtcIm1ldGhvZFwiXSA9IFwiR0VUXCI7XG5cblx0XHRsZXQgY2FsbGJhY2sgPSB0aGlzLmdldE9wdGlvbihcInJlYWQucmVzcG9uc2VDYWxsYmFja1wiKTtcblx0XHRpZiAoIWNhbGxiYWNrKSB7XG5cdFx0XHRjYWxsYmFjayA9IChvYmopID0+IHtcblx0XHRcdFx0dGhpcy5zZXQodGhpcy50cmFuc2Zvcm1TZXJ2ZXJQYXlsb2FkLmNhbGwodGhpcywgb2JqKSk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiBmZXRjaERhdGEuY2FsbCh0aGlzLCBpbml0LCBcInJlYWRcIiwgY2FsbGJhY2spO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqIEB0aHJvd3Mge1dyaXRlRXJyb3J9IHRoZSBkYXRhIGNhbm5vdCBiZSB3cml0dGVuXG5cdCAqL1xuXHR3cml0ZSgpIHtcblx0XHRsZXQgaW5pdCA9IHRoaXMuZ2V0T3B0aW9uKFwid3JpdGUuaW5pdFwiKTtcblx0XHRpZiAoIWlzT2JqZWN0KGluaXQpKSBpbml0ID0ge307XG5cdFx0aWYgKHR5cGVvZiBpbml0W1wiaGVhZGVyc1wiXSAhPT0gXCJvYmplY3RcIikge1xuXHRcdFx0aW5pdFtcImhlYWRlcnNcIl0gPSB7XG5cdFx0XHRcdFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aWYgKCFpbml0W1wibWV0aG9kXCJdKSBpbml0W1wibWV0aG9kXCJdID0gXCJQT1NUXCI7XG5cblx0XHRjb25zdCBvYmogPSB0aGlzLnByZXBhcmVTZXJ2ZXJQYXlsb2FkKHRoaXMuZ2V0KCkpO1xuXHRcdGluaXRbXCJib2R5XCJdID0gSlNPTi5zdHJpbmdpZnkob2JqKTtcblxuXHRcdGNvbnN0IGNhbGxiYWNrID0gdGhpcy5nZXRPcHRpb24oXCJ3cml0ZS5yZXNwb25zZUNhbGxiYWNrXCIpO1xuXHRcdHJldHVybiBmZXRjaERhdGEuY2FsbCh0aGlzLCBpbml0LCBcIndyaXRlXCIsIGNhbGxiYWNrKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtSZXN0QVBJfVxuXHQgKi9cblx0Z2V0Q2xvbmUoKSB7XG5cdFx0Y29uc3QgYXBpID0gbmV3IFJlc3RBUEkoKTtcblxuXHRcdGNvbnN0IHJlYWQgPSBjbG9uZSh0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXS5yZWFkKTtcblx0XHRjb25zdCB3cml0ZSA9IGNsb25lKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLndyaXRlKTtcblxuXHRcdGFwaS5zZXRPcHRpb24oXCJyZWFkXCIsIHJlYWQpO1xuXHRcdGFwaS5zZXRPcHRpb24oXCJ3cml0ZVwiLCB3cml0ZSk7XG5cblx0XHRyZXR1cm4gYXBpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBpbml0XG4gKiBAcGFyYW0ga2V5XG4gKiBAcGFyYW0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn1cbiAqL1xuZnVuY3Rpb24gZmV0Y2hEYXRhKGluaXQsIGtleSwgY2FsbGJhY2spIHtcblx0bGV0IHJlc3BvbnNlO1xuXG5cdHJldHVybiBmZXRjaCh0aGlzLmdldE9wdGlvbihgJHtrZXl9LnVybGApLCBpbml0KVxuXHRcdC50aGVuKChyZXNwKSA9PiB7XG5cdFx0XHRyZXNwb25zZSA9IHJlc3A7XG5cblx0XHRcdGNvbnN0IGFjY2VwdGVkU3RhdHVzID0gdGhpcy5nZXRPcHRpb24oYCR7a2V5fS5hY2NlcHRlZFN0YXR1c2AsIFsyMDBdKS5tYXAoXG5cdFx0XHRcdE51bWJlcixcblx0XHRcdCk7XG5cblx0XHRcdGlmIChhY2NlcHRlZFN0YXR1cy5pbmRleE9mKHJlc3Auc3RhdHVzKSA9PT0gLTEpIHtcblx0XHRcdFx0dGhyb3cgbmV3IERhdGFGZXRjaEVycm9yKFxuXHRcdFx0XHRcdGB0aGUgcmVzcG9uc2UgZG9lcyBub3QgY29udGFpbiBhbiBhY2NlcHRlZCBzdGF0dXMgKGFjdHVhbDogJHtyZXNwLnN0YXR1c30pLmAsXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXNwLnRleHQoKTtcblx0XHR9KVxuXHRcdC50aGVuKChib2R5KSA9PiB7XG5cdFx0XHRsZXQgb2JqO1xuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRvYmogPSBKU09OLnBhcnNlKGJvZHkpO1xuXG5cdFx0XHRcdHJlc3BvbnNlW3Jhd0RhdGFTeW1ib2xdID0gb2JqO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRpZiAoYm9keS5sZW5ndGggPiAxMDApIHtcblx0XHRcdFx0XHRib2R5ID0gYCR7Ym9keS5zdWJzdHJpbmcoMCwgOTcpfS4uLmA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aHJvdyBuZXcgRGF0YUZldGNoRXJyb3IoXG5cdFx0XHRcdFx0YHRoZSByZXNwb25zZSBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiAoYWN0dWFsOiAke2JvZHl9KS5gLFxuXHRcdFx0XHRcdHJlc3BvbnNlLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRcdFx0Y2FsbGJhY2sob2JqKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXNwb25zZTtcblx0XHR9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBXcml0ZUVycm9yIH07XG5cbi8qKlxuICogRXJyb3IgbWVzc2FnZSBmb3IgQVBJIHJlcXVlc3RzIHdpdGggZXh0ZW5zaW9uIG9mIHJlcXVlc3QgYW5kIHZhbGlkYXRpb24uXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgdGhlIGVycm9yIGlzIHRocm93biBieSB0aGUgcmVzdCBhcGkgaW4gY2FzZSBvZiBlcnJvclxuICovXG5jbGFzcyBXcml0ZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2Vcblx0ICogQHBhcmFtIHtSZXNwb25zZX0gcmVzcG9uc2Vcblx0ICogQHBhcmFtIHtPYmplY3R9IHZhbGlkYXRpb25cblx0ICovXG5cdGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHJlc3BvbnNlLCB2YWxpZGF0aW9uKSB7XG5cdFx0c3VwZXIobWVzc2FnZSk7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHRyZXNwb25zZTogcmVzcG9uc2UsXG5cdFx0XHR2YWxpZGF0aW9uOiB2YWxpZGF0aW9uLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL3dyaXRlLWVycm9yXCIsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtSZXNwb25zZX1cblx0ICovXG5cdGdldFJlc3BvbnNlKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXVtcInJlc3BvbnNlXCJdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge09iamVjdH1cblx0ICovXG5cdGdldFZhbGlkYXRpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdW1widmFsaWRhdGlvblwiXTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IERhdGFGZXRjaEVycm9yIH07XG5cbi8qKlxuICogRXJyb3IgbWVzc2FnZSBmb3IgQVBJIHJlcXVlc3RzXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy40My4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgdGhlIGVycm9yIGlzIHRocm93biBieSB0aGUgcmVzdCBhcGkgaW4gY2FzZSBvZiBlcnJvclxuICovXG5jbGFzcyBEYXRhRmV0Y2hFcnJvciBleHRlbmRzIEVycm9yIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG5cdCAqIEBwYXJhbSB7UmVzcG9uc2V9IHJlc3BvbnNlXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihtZXNzYWdlLCByZXNwb25zZSkge1xuXHRcdHN1cGVyKG1lc3NhZ2UpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0cmVzcG9uc2U6IHJlc3BvbnNlLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcblx0XHRcdFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3Jlc3RhcGkvZGF0YWZldGNoZXJyb3JAQGluc3RhbmNlXCIsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtSZXNwb25zZX1cblx0ICovXG5cdGdldFJlc3BvbnNlKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXVtcInJlc3BvbnNlXCJdO1xuXHR9XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1Jlc3RBUEl9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpLm1qc1wiO1xuaW1wb3J0IHt2YWxpZGF0ZU9iamVjdH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZGVzY3JpYmUoJ1Jlc3RBUEknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgZmV0Y2hSZWZlcmVuY2U7XG4gICAgbGV0IHJldHVyblN0YXR1cztcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGdsb2JhbFRoaXNbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgIHJldHVyblN0YXR1cyA9IDIwMDtcbiAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxUaGlzWydmZXRjaCddO1xuICAgICAgICBnbG9iYWxUaGlzWydmZXRjaCddID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogXCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiByZXR1cm5TdGF0dXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfTtcblxuICAgIH0pXG5cbiAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIFJlc3RBUEkgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IFJlc3RBUEkoJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvd29ybGQuanNvbicpKS50by5iZS5pbnN0YW5jZW9mKFJlc3RBUEkpXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncncnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3JlYWQgc2hvdWxkIHJldHVybiBvYmplY3QnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgZHMgPSBuZXcgUmVzdEFQSSh7dXJsOiAnaHR0cHM6Ly9tb25zdGVyanMub3JnL2Fzc2V0cy93b3JsZC5qc29uJ30pXG4gICAgICAgICAgICBkcy5yZWFkKCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZU9iamVjdChkYXRhKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnd3JpdGUgc2hvdWxkICcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBkcyA9IG5ldyBSZXN0QVBJKHtcbiAgICAgICAgICAgICAgICAgICAgcmVhZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnaHR0cHM6Ly9tb25zdGVyanMub3JnL2Fzc2V0cy93b3JsZC5qc29uJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB3cml0ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnaHR0cHM6Ly9tb25zdGVyanMub3JnL2Fzc2V0cy93b3JsZC5qc29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdGVkU3RhdHVzOiBbOTldXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApXG4gICAgICAgICAgICBkcy53cml0ZSgpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShcInNob3VsZCBub3QgYmUgaGVyZVwiKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZSgpKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdydyB3aXRoIGVycm9ycycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVhZCBzaG91bGQgdGhyb3cgZXhjZXB0aW9uJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVyblN0YXR1cyA9IDQwMDsgLy8gZmV0Y2ggcmVzcG9uc2Ugd2l0aCA0MDBcblxuICAgICAgICAgICAgY29uc3QgZHMgPSBuZXcgUmVzdEFQSSh7dXJsOiAnaHR0cHM6Ly9tb25zdGVyanMub3JnL2Fzc2V0cy93b3JsZC5qc29uJ30pXG4gICAgICAgICAgICBkcy5yZWFkKCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKFwic2hvdWxkIG5vdCBydW4uXCIpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKCkpOyAvLyBzaG91bGQgdGhyb3cgZXhjZXB0aW9uIGJlY2F1c2UgcmV0dXJuU3RhdHVzPTQwMFxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnd3JpdGUgc2hvdWxkICcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm5TdGF0dXMgPSA0MDA7IC8vIGZldGNoIHJlc3BvbnNlIHdpdGggNDAwXG4gICAgICAgICAgICBjb25zdCBkcyA9IG5ldyBSZXN0QVBJKHt1cmw6ICdodHRwczovL21vbnN0ZXJqcy5vcmcvYXNzZXRzL3dvcmxkLmpzb24nfSwge3VybDogJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvd29ybGQuanNvbid9KVxuICAgICAgICAgICAgZHMud3JpdGUoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlT2JqZWN0KGRhdGEpO1xuICAgICAgICAgICAgICAgIGRvbmUoXCJlcnJvclwiKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZSgpKTsgLy8gc2hvdWxkIHRocm93IGV4Y2VwdGlvbiBiZWNhdXNlIHJldHVyblN0YXR1cz00MDBcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cblxufSlcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7RGF0YXNvdXJjZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2UubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0RhdGFzb3VyY2UnLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgRGF0YXNvdXJjZSAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgRGF0YXNvdXJjZSgpKS50by5iZS5pbnN0YW5jZW9mKERhdGFzb3VyY2UpXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnT3B0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3NldE9wdGlvbiBzaG91bGQgY2hhbmdlIHZhbHVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZGF0YXNvdXJjZSA9IG5ldyBEYXRhc291cmNlKCk7XG4gICAgICAgICAgICBleHBlY3QoZGF0YXNvdXJjZS5nZXRPcHRpb24oJ2RlZmF1bHQnKSkudG8uYmUudW5kZWZpbmVkXG4gICAgICAgICAgICBkYXRhc291cmNlLnNldE9wdGlvbignZGVmYXVsdCcsIHRydWUpXG4gICAgICAgICAgICBleHBlY3QoZGF0YXNvdXJjZS5nZXRPcHRpb24oJ2RlZmF1bHQnKSkudG8uYmUudHJ1ZVxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2V0T3B0aW9ucyBzaG91bGQgc2V0IGFsbCB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhc291cmNlID0gbmV3IERhdGFzb3VyY2UoKTtcbiAgICAgICAgICAgIGV4cGVjdChkYXRhc291cmNlLmdldE9wdGlvbignZGVmYXVsdCcpKS50by5iZS51bmRlZmluZWRcbiAgICAgICAgICAgIGRhdGFzb3VyY2Uuc2V0T3B0aW9ucyh7ZGVmYXVsdDogdHJ1ZX0pXG4gICAgICAgICAgICBleHBlY3QoZGF0YXNvdXJjZS5nZXRPcHRpb24oJ2RlZmF1bHQnKSkudG8uYmUudHJ1ZVxuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgncncnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGRhdGFzb3VyY2UgPSBuZXcgRGF0YXNvdXJjZSgpO1xuICAgICAgICBpdCgncmVhZCBzaG91bGQgdGhyb3cgZXhlcHRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZGF0YXNvdXJjZS5yZWFkKCkpLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnd3JpdGUgc2hvdWxkIHRocm93IGV4ZXB0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGRhdGFzb3VyY2UucmVhZCgpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuICAgIFxuICAgIGRlc2NyaWJlKCdnZXQvc2V0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkYXRhc291cmNlID0gbmV3IERhdGFzb3VyY2UoKTtcbiAgICAgICAgaXQoJ2dldCBzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCggZGF0YXNvdXJjZS5nZXQoKSkudG8uYmUuZXFsKHt9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnd3JpdGUgc2hvdWxkIHRocm93IGV4ZXB0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCBkYXRhc291cmNlLmdldCgpKS50by5iZS5lcWwoe30pO1xuICAgICAgICAgICAgZXhwZWN0KCBkYXRhc291cmNlLnNldCh7YTonbXl2YWx1ZSd9KSkudG8uYmUuaW5zdGFuY2VvZihEYXRhc291cmNlKTtcbiAgICAgICAgICAgIGV4cGVjdCggZGF0YXNvdXJjZS5nZXQoKSkudG8uYmUuZXFsKHthOidteXZhbHVlJ30pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuXG59KSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7YnVpbGRNYXB9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS9idWlsZG1hcC5tanNcIjtcblxuXG5kZXNjcmliZSgnYnVpbGRNYXAnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgY29udmVydE1hcFJlc3VsdCA9IGZ1bmN0aW9uIChyKSB7XG4gICAgICAgIGlmIChyIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICByID0gT2JqZWN0LmZyb21FbnRyaWVzKHIpO1xuICAgICAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgICAgIHIgPSByLm1hcCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydE1hcFJlc3VsdChlKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIG9dIG9mIE9iamVjdC5lbnRyaWVzKHIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJba10gPSBjb252ZXJ0TWFwUmVzdWx0KG8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIGRlc2NyaWJlKCdidWlsZCBNYXAgd2l0aCBjYWxsYmFjaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ2RlZmluaXRpb24gc2hvdWxkIHJldHVybiBtYXAgd2l0aCBzdWIgYW5kIHBhcmVudCBrZXlzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgICAgICAgIFwiZGF0YVwiOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJDYXNzYW5kcmFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZW5yaWNobWVudFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAxLCBsYWJlbDogXCJYWFNcIiwgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDIsIGxhYmVsOiBcIlhTXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAzLCBsYWJlbDogXCJTXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiA0LCBsYWJlbDogXCJMXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiWWVzc2V5IVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlbnJpY2htZW50XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDEsIGxhYmVsOiBcIlhYU1wiLCBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMiwgbGFiZWw6IFwiWFNcIiwgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDMsIGxhYmVsOiBcIlNcIiwgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDQsIGxhYmVsOiBcIkxcIiwgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgY2FsbGJhY2sgPSBmdW5jdGlvbiAoc3ViamVjdCkge1xuICAgICAgICAgICAgICAgIGxldCBtID0gbmV3IE1hcDtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ksIGJdIG9mIE9iamVjdC5lbnRyaWVzKHN1YmplY3QuZGF0YSkpIHtcblxuICAgICAgICAgICAgICAgICAgICBsZXQga2V5MSA9IGk7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaiwgY10gb2YgT2JqZWN0LmVudHJpZXMoYi5lbnJpY2htZW50LnZhcmlhbnRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleTIgPSBqO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCBkXSBvZiBPYmplY3QuZW50cmllcyhjLnByaWNlKSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleTMgPSBrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5uYW1lID0gYi5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQubGFiZWwgPSBjLmxhYmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuaWQgPSBba2V5MSwga2V5Miwga2V5M10uam9pbignLicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbS5zZXQoZC5pZCwgZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IG1hcCA9IGJ1aWxkTWFwKG9iaiwgY2FsbGJhY2ssICcke25hbWV9ICR7bGFiZWx9JywgJyR7aWR9JylcbiAgICAgICAgICAgIGxldCBpID0gY29udmVydE1hcFJlc3VsdChtYXApO1xuXG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoaSkpLnRvLmJlLmVxdWFsKCd7XCIwLjAuMFwiOlwiQ2Fzc2FuZHJhIFhYU1wiLFwiMC4wLjFcIjpcIkNhc3NhbmRyYSBYWFNcIixcIjAuMS4wXCI6XCJDYXNzYW5kcmEgWFNcIixcIjAuMS4xXCI6XCJDYXNzYW5kcmEgWFNcIixcIjAuMi4wXCI6XCJDYXNzYW5kcmEgU1wiLFwiMC4yLjFcIjpcIkNhc3NhbmRyYSBTXCIsXCIwLjMuMFwiOlwiQ2Fzc2FuZHJhIExcIixcIjAuMy4xXCI6XCJDYXNzYW5kcmEgTFwiLFwiMS4wLjBcIjpcIlllc3NleSEgWFhTXCIsXCIxLjAuMVwiOlwiWWVzc2V5ISBYWFNcIixcIjEuMS4wXCI6XCJZZXNzZXkhIFhTXCIsXCIxLjEuMVwiOlwiWWVzc2V5ISBYU1wiLFwiMS4yLjBcIjpcIlllc3NleSEgU1wiLFwiMS4yLjFcIjpcIlllc3NleSEgU1wiLFwiMS4zLjBcIjpcIlllc3NleSEgTFwiLFwiMS4zLjFcIjpcIlllc3NleSEgTFwifScpO1xuXG4gICAgICAgIH0pXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdidWlsZCBzdWJtYXAgd2l0aCAqJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnZGVmaW5pdGlvbiBzaG91bGQgcmV0dXJuIHtcIjEwXCI6XCJDYXNzYW5kcmEgMTBcIixcIjIwXCI6XCJZZXNzZXkhIDIwXCJ9JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgICAgICAgIFwiZGF0YVwiOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJDYXNzYW5kcmFcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiWWVzc2V5IVwiLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbGV0IG1hcCA9IGJ1aWxkTWFwKG9iaiwgJ2RhdGEuKicsICcke25hbWV9ICR7aWR9JywgJyR7aWR9JylcbiAgICAgICAgICAgIGxldCBpID0gY29udmVydE1hcFJlc3VsdChtYXApO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGkpKS50by5iZS5lcXVhbCgne1wiMTBcIjpcIkNhc3NhbmRyYSAxMFwiLFwiMjBcIjpcIlllc3NleSEgMjBcIn0nKTtcblxuICAgICAgICB9KVxuICAgIH0pXG5cblxuICAgIGRlc2NyaWJlKCdidWlsZCBzdWJtYXAgd2l0aCAqKicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ2RlZmluaXRpb24gc2hvdWxkIHJldHVybiBNYXAnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgXCJkYXRhXCI6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIkNhc3NhbmRyYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlbnJpY2htZW50XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDEsIGxhYmVsOiBcIlhYU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnLCBpZDogMX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJywgaWQ6IDJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMiwgbGFiZWw6IFwiWFNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJywgaWQ6IDN9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQycsIGlkOiA0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDMsIGxhYmVsOiBcIlNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJywgaWQ6IDV9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQycsIGlkOiA2fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDQsIGxhYmVsOiBcIkxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJywgaWQ6IDd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQycsIGlkOiA4fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJZZXNzZXkhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVucmljaG1lbnRcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMSwgbGFiZWw6IFwiWFhTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQycsIGlkOiA5fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnLCBpZDogMTB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMiwgbGFiZWw6IFwiWFNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJywgaWQ6IDExfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnLCBpZDogMTJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMywgbGFiZWw6IFwiU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnLCBpZDogMTN9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQycsIGlkOiAxNH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnLCBpZDogMTV9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQycsIGlkOiAxNn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDQuMTIgXHUyMEFDJywgaWQ6IDE3fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgbWFwID0gYnVpbGRNYXAob2JqLCAnZGF0YS4qLmVucmljaG1lbnQudmFyaWFudHMuKi5wcmljZS4qJywgJyR7dmt9ICR7Xi5sYWJlbH0gJHteLl4ubmFtZX0nLCAnJHteLl4uc2t1fScpXG4gICAgICAgICAgICBsZXQgaSA9IGNvbnZlcnRNYXBSZXN1bHQobWFwKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShpKSkudG8uYmUuZXF1YWwoJ3tcImRhdGEuMC5lbnJpY2htZW50LnZhcmlhbnRzLjAucHJpY2UuMFwiOlwiMTIuMTIgXHUyMEFDIFhYUyBDYXNzYW5kcmFcIixcImRhdGEuMC5lbnJpY2htZW50LnZhcmlhbnRzLjAucHJpY2UuMVwiOlwiMTIuMTIgXHUyMEFDIFhYUyBDYXNzYW5kcmFcIixcImRhdGEuMC5lbnJpY2htZW50LnZhcmlhbnRzLjEucHJpY2UuMFwiOlwiMjIuMTIgXHUyMEFDIFhTIENhc3NhbmRyYVwiLFwiZGF0YS4wLmVucmljaG1lbnQudmFyaWFudHMuMS5wcmljZS4xXCI6XCIyMi4xMiBcdTIwQUMgWFMgQ2Fzc2FuZHJhXCIsXCJkYXRhLjAuZW5yaWNobWVudC52YXJpYW50cy4yLnByaWNlLjBcIjpcIjMyLjEyIFx1MjBBQyBTIENhc3NhbmRyYVwiLFwiZGF0YS4wLmVucmljaG1lbnQudmFyaWFudHMuMi5wcmljZS4xXCI6XCIzMi4xMiBcdTIwQUMgUyBDYXNzYW5kcmFcIixcImRhdGEuMC5lbnJpY2htZW50LnZhcmlhbnRzLjMucHJpY2UuMFwiOlwiNDIuMTIgXHUyMEFDIEwgQ2Fzc2FuZHJhXCIsXCJkYXRhLjAuZW5yaWNobWVudC52YXJpYW50cy4zLnByaWNlLjFcIjpcIjQyLjEyIFx1MjBBQyBMIENhc3NhbmRyYVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMC5wcmljZS4wXCI6XCIxMi4xMiBcdTIwQUMgWFhTIFllc3NleSFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjAucHJpY2UuMVwiOlwiMTIuMTIgXHUyMEFDIFhYUyBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4xLnByaWNlLjBcIjpcIjIyLjEyIFx1MjBBQyBYUyBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4xLnByaWNlLjFcIjpcIjIyLjEyIFx1MjBBQyBYUyBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4yLnByaWNlLjBcIjpcIjMyLjEyIFx1MjBBQyBTIFllc3NleSFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjIucHJpY2UuMVwiOlwiMzIuMTIgXHUyMEFDIFMgWWVzc2V5IVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMy5wcmljZS4wXCI6XCI0Mi4xMiBcdTIwQUMgTCBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4zLnByaWNlLjFcIjpcIjQyLjEyIFx1MjBBQyBMIFllc3NleSFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjMucHJpY2UuMlwiOlwiNDQuMTIgXHUyMEFDIEwgWWVzc2V5IVwifScpO1xuXG4gICAgICAgIH0pXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdleGFtcGxlY29kZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGV4ZWN1dGUgZXhhbXBsZSBjb2RlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgICAgICAgIFwiZGF0YVwiOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJDYXNzYW5kcmFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRkcmVzc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdHJlZXRcIjogXCI0OTMtNDEwNSBWdWxwdXRhdGUgU3RyZWV0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaXR5XCI6IFwiU2F1bXVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ6aXBcIjogXCI1MjYyOFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJIb2xseVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhZGRyZXNzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0cmVldFwiOiBcIjE3NjIgRWdldCBSZC5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNpdHlcIjogXCJTY2h3YWxiYWNoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ6aXBcIjogXCI5NTIzNDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiR3V5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFkZHJlc3NcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3RyZWV0XCI6IFwiOTU3LTM4OCBTb2xsaWNpdHVkaW4gQXZlbnVlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjaXR5XCI6IFwiUGFuY2hpXHUwMEUwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ6aXBcIjogXCI0MjA3MjlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbGV0IG1hcDtcbiAgICAgICAgICAgIG1hcCA9IGJ1aWxkTWFwKG9iaiwgJ2RhdGEuKicsICcke25hbWV9ICgke2FkZHJlc3MuemlwfSAke2FkZHJlc3MuY2l0eX0pJywgJ2lkJylcbiAgICAgICAgICAgIGV4cGVjdChtYXApLnRvLmJlLmluc3RhbmNlT2YoTWFwKTtcblxuICAgICAgICAgICAgbWFwID0gYnVpbGRNYXAob2JqLCAnZGF0YS4qJywgJyR7bmFtZX0gKCR7YWRkcmVzcy56aXB9ICR7YWRkcmVzcy5jaXR5fSknKVxuICAgICAgICAgICAgZXhwZWN0KG1hcCkudG8uYmUuaW5zdGFuY2VPZihNYXApO1xuXG4gICAgICAgICAgICBtYXAgPSBidWlsZE1hcChvYmosICdkYXRhLionLCAnJHtuYW1lfSAoJHthZGRyZXNzLnppcH0gJHthZGRyZXNzLmNpdHl9KScsICdpZCcsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh2YWx1ZVsnaWQnXSA+PSAyMCkgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBleHBlY3QobWFwKS50by5iZS5pbnN0YW5jZU9mKE1hcCk7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdidWlsZG1hcCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBvYmoxID0ge1xuICAgICAgICAgICAgZGF0YXNldDoge1xuICAgICAgICAgICAgICAgIFwiMTAwODJcIjoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgMVwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgMVwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjEwMDg0XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDJcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDJcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBNYXAgSW5zdGFuY2UuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGJ1aWxkTWFwKHt9LCAnJykpLnRvLmJlLmluc3RhbmNlT2YoTWFwKTtcbiAgICAgICAgfSk7XG5cblxuICAgICAgICBbXG4gICAgICAgICAgICBbb2JqMSwgJ2RhdGFzZXQuKicsICdhZGRyZXNzJywgJ3tcImRhdGFzZXQuMTAwODJcIjpcIkhlcmUgMVwiLFwiZGF0YXNldC4xMDA4NFwiOlwiSGVyZSAyXCJ9J10sXG4gICAgICAgICAgICBbb2JqMSwgJ3gnLCB1bmRlZmluZWQsICd7fSddLFxuICAgICAgICAgICAgW29iajEsICdkYXRhc2V0LionLCAnbmFtZScsICd7XCJkYXRhc2V0LjEwMDgyXCI6XCJUZXN0IDFcIixcImRhdGFzZXQuMTAwODRcIjpcIlRlc3QgMlwifSddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2J1aWxkTWFwKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcsJyArIEpTT04uc3RyaW5naWZ5KGIpICsgJywnICsgSlNPTi5zdHJpbmdpZnkoYykgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBKU09OLnN0cmluZ2lmeShkKSArICcgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gYnVpbGRNYXAoYSwgYiwgYyk7XG4gICAgICAgICAgICAgICAgbGV0IG0gPSBKU09OLnN0cmluZ2lmeShjb252ZXJ0TWFwUmVzdWx0KHQpKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobSkudG8uYmUuZXF1YWwoZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcbn0pO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtUcmFuc2Zvcm1lcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kYXRhL3RyYW5zZm9ybWVyLm1qc1wiO1xuaW1wb3J0IHtnZXRMb2NhbGVPZkRvY3VtZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9sb2NhbGUubWpzXCI7XG5pbXBvcnQge0VtYmVkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnVHJhbnNmb3JtZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBwcm9taXNlcy5wdXNoKGluaXRKU0RPTSgpKTtcbiAgICAgICAgaWYgKCFnbG9iYWxUaGlzWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpc1snY3J5cHRvJ10gPSBuZXcgbS5DcnlwdG8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnVHJhbnNmb3JtZXIucnVuKCkgbG9jYWxpemUgY29tbWFuZHMnLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgICAgICBjb25zdCBpc05vZGUgPSB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiAnW29iamVjdCBnbG9iYWxdJyA9PT0gZ2xvYmFsLnRvU3RyaW5nLmNhbGwoZ2xvYmFsKTtcblxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnZGF0ZXRpbWVmb3JtYXQnLCBcIjIwMjMtMDItMDQgMDg6MDI6MDFcIiwgXCJGZWIgNCwgMjAyMywgMDg6MDI6MDFcIiwgXCI0IEZlYiAyMDIzLCAwODowMjowMVwiXSxcbiAgICAgICAgICAgIFsnZGF0ZXRpbWVmb3JtYXQ6bG9uZzpzaG9ydCcsIFwiMjAyMy0wMi0wNCAwODowMjowMVwiLCBcIkZlYnJ1YXJ5IDQsIDIwMjMgYXQgMDg6MDJcIiwgXCI0IEZlYnJ1YXJ5IDIwMjMgYXQgMDg6MDJcIl0sXG4gICAgICAgICAgICBbJ2RhdGV0aW1lZm9ybWF0OnNob3J0OnNob3J0JywgXCIyMDIzLTAyLTA0IDA4OjAyOjAxXCIsIFwiMi80LzIzLCAwODowMlwiLCBcIjA0LzAyLzIwMjMsIDA4OjAyXCJdLFxuICAgICAgICAgICAgWydjdXJyZW5jeScsIFwiRVVSMFwiLCBcIlx1MjBBQzAuMDBcIiwgXCJcdTIwQUMwLjAwXCJdLFxuLy8gICAgICAgICAgICBbJ2N1cnJlbmN5OjE6MicsIFwiRVVSMTQuMjVcIiwgXCJcdTIwQUMxNC4zXCIsIFwiXHUyMEFDMTQuMlwiXSxcbiAgICAgICAgICAgIFsnY3VycmVuY3knLCBcIkVVUjE0LjI1XCIsIFwiXHUyMEFDMTQuMjVcIiwgXCJcdTIwQUMxNC4yNVwiXSxcbiAgICAgICAgICAgIFsnZGF0ZXRpbWUnLCBcIjIwMjMtMDItMTQgMTQ6MTI6MTBcIiwgXCIyLzE0LzIwMjMsIDE0OjEyOjEwXCIsXCIxNC8wMi8yMDIzLCAxNDoxMjoxMFwiXSxcbiAgICAgICAgICAgIFsnZGF0ZXRpbWUnLCBcIjIwMjMtMDItMTQgMDg6MDI6MDFcIiwgXCIyLzE0LzIwMjMsIDA4OjAyOjAxXCIsXCIxNC8wMi8yMDIzLCAwODowMjowMVwiXSxcbiAgICAgICAgICAgIFsnZGF0ZScsIFwiMjAyMy0wMi0xNFwiLCBcIjAyLzE0LzIwMjNcIixcIjE0LzAyLzIwMjNcIl0sXG5cblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vb3NzL2xpYnJhcmllcy9qYXZhc2NyaXB0L21vbnN0ZXIvLS9pc3N1ZXMvMTI0XG5cblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KCkgLy8gY29tbWFuZFxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KCkgLy8gdmFsdWVcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpIC8vIGV4cGVjdGVkIHJlc3VsdCBub2RlICAgIFxuICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KCkgLy8gZXhwZWN0ZWQgcmVzdWx0IGJyb3dzZXIgICAgXG5cbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkID0gaXNOb2RlID8gYyA6IGRcblxuICAgICAgICAgICAgaXQoJ1RyYW5zZm9ybWVyLnJ1bignICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKS5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGIpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWQpLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBuZXcgVHJhbnNmb3JtZXIoYSk7XG4gICAgICAgICAgICAgICAgY29uc3QgciA9IHQucnVuKGIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChleHBlY3RlZCkudG8uYmUuZXFsKHIsIFwiVHJhbnNmb3JtZXIucnVuKFwiICsgSlNPTi5zdHJpbmdpZnkoYSkgKyBcIikucnVuKFwiICsgSlNPTi5zdHJpbmdpZnkoYikgKyBcIikgc2hvdWxkIHJldHVybiBcIiArIEpTT04uc3RyaW5naWZ5KGMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnVHJhbnNmb3JtZXIucnVuKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWydlcXVhbHM6YScsIFwiYVwiLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOmEnLCBcImJcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6MycsIDMsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6MycsIDYsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOm9uJywgdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczp0cnVlJywgdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpvbicsIGZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczp0cnVlJywgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOm9mZicsIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOmZhbHNlJywgZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6b2ZmJywgZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6ZmFsc2UnLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczozJywgMywgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczozJywgNiwgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6dW5kZWZpbmVkJywgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOnVuZGVmaW5lZCcsIDMsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOm51bGwnLCBudWxsLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOm51bGwnLCAzLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczozJywgNiwgZmFsc2VdLFxuICAgICAgICAgICAgWydoYXMtZW50cmllcycsIHt9LCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywge2E6IDR9LCB0cnVlXSxcbiAgICAgICAgICAgIFsnaGFzLWVudHJpZXMnLCBbXSwgZmFsc2VdLFxuICAgICAgICAgICAgWydoYXMtZW50cmllcycsIFwiXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaGFzLWVudHJpZXMnLCBbMSwgMiwgM10sIHRydWVdLFxuICAgICAgICAgICAgWydoYXMtZW50cmllcycsIFsxXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywgW1wiMVwiXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywgW3RydWVdLCB0cnVlXSxcbiAgICAgICAgICAgIFsnY29udGFpbnM6eCcsIFwiYXNkIHd4ZCBzZGZcIiwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2NvbnRhaW5zOngnLCBcImFzZCB3ZCBzZGZcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWydjb250YWluczpiJywgW1wiYVwiLCBcImJcIiwgXCJjXCJdLCB0cnVlXSxcbiAgICAgICAgICAgIFsnY29udGFpbnM6eCcsIFtcImFcIiwgXCJiXCIsIFwiY1wiXSwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc3VuZGVmaW5lZCcsIFwiYVwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzdW5kZWZpbmVkJywgbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc3VuZGVmaW5lZCcsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzbnVsbCcsIFwiYVwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzbnVsbCcsIG51bGwsIHRydWVdLFxuICAgICAgICAgICAgWydpc3NldCcsIG51bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXNzZXQnLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXNzZXQnLCBcIlwiLCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNudW1iZXInLCBcImFcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc251bWJlcicsIDQsIHRydWVdLFxuICAgICAgICAgICAgWydpc251bWJlcicsIDQuNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzaW50ZWdlcicsIDQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc2ludGVnZXInLCA0LCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNmbG9hdCcsIDUuNiwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzZmxvYXQnLCA1LCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzb2JqZWN0JywgNCwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc29iamVjdCcsIHt9LCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNhcnJheScsIFt7fV0sIHRydWVdLFxuICAgICAgICAgICAgWydpc2FycmF5JywgXCJhXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnbm90JywgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWydub3QnLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ21hcDphPTQ6Yj01OmM9NicsIFwiYVwiLCBcIjRcIl0sXG4gICAgICAgICAgICBbJ3llYXInLCBcIjIwMjMtMDItMTRcIiwgMjAyM10sXG4gICAgICAgICAgICBbJ21vbnRoJywgXCIyMDIzLTAyLTE0XCIsIDJdLFxuICAgICAgICAgICAgWydkYXknLCBcIjIwMjMtMDItMTRcIiwgMTRdLFxuICAgICAgICAgICAgWyd3ZWVrZGF5JywgXCIyMDIzLTAyLTE0XCIsIDJdLFxuICAgICAgICAgICAgWydtaW51dGVzJywgXCIyMDIzLTAyLTE0IDA2OjEyOjIxXCIsIDEyXSxcbiAgICAgICAgICAgIFsnc2Vjb25kcycsIFwiMjAyMy0wMi0xNCAwNjoxMjoyMVwiLCAyMV0sXG4gICAgICAgICAgICBbJ2hvdXJzJywgXCIyMDIzLTAyLTE0IDA2OjEyOjIxXCIsIDZdLFxuICAgICAgICAgICAgWyd0aW1lJywgXCIyMDIzLTAyLTE0IDA2OjEyOjIxXCIsIFwiMDY6MTI6MjFcIl0sXG4gICAgICAgICAgICBbJ3RpbWVzdGFtcCcsIFwiMjAyMy0wMi0xNFwiLCAxNjc2MzMyODAwMDAwXSxcbiAgICAgICAgICAgIFsnY29uY2F0OmEuYi5jOnRlc3Q6YS5iLmQnLCB7YToge2I6IHtjOiA0LCBkOiA2fX19LCBcIjR0ZXN0NlwiXSxcbiAgICAgICAgICAgIFsnY29uY2F0OmEuYi5jOlxcXFwgXFxcXCA6YS5iLmQnLCB7YToge2I6IHtjOiA0LCBkOiA2fX19LCBcIjQgIDZcIl0sXG4gICAgICAgICAgICBbJ2NvbmNhdDphLmIuYzosOmEuYi5kJywge2E6IHtiOiB7YzogNCwgZDogNn19fSwgXCI0LDZcIl0sXG4gICAgICAgICAgICBbJ2NvbmNhdDphLmIuYzosOlxcXFwgOmEuYi5kJywge2E6IHtiOiB7YzogNCwgZDogNn19fSwgXCI0LCA2XCJdLFxuICAgICAgICAgICAgWyc/PzphJywgbnVsbCwgJ2EnXSxcbiAgICAgICAgICAgIFsnPz86YScsIHVuZGVmaW5lZCwgJ2EnXSxcbiAgICAgICAgICAgIFsnPz86YScsICd0cnVlJywgJ3RydWUnXSxcbiAgICAgICAgICAgIFsnPz86YScsIGZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbJyBpZjphOiAnLCBmYWxzZSwgdW5kZWZpbmVkXSwgLy8gd2l0aG91dCBcXFxcXG4gICAgICAgICAgICBbJyBpZjphOlxcXFwgJywgZmFsc2UsIFwiIFwiXSxcbiAgICAgICAgICAgIFsnIGlmOmE6XFxcXCAnLCB0cnVlLCBcImFcIl0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6dW5kZWZpbmVkOmJvb2wnLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDp5ZXMnLCBudWxsLCAneWVzJ10sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6eWVzJywgdW5kZWZpbmVkLCAneWVzJ10sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6MTpib29sJywgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDpvbjpib29sJywgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDp0cnVlOmJvb2wnLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgWydkZWZhdWx0Onllczpib29sJywgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDpmYWxzZTpib29sJywgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6MTppbnQnLCB1bmRlZmluZWQsIDFdLFxuICAgICAgICAgICAgWydkZWZhdWx0OjE6c3RyaW5nJywgdW5kZWZpbmVkLCAnMSddLFxuICAgICAgICAgICAgWydmaXJzdC1rZXknLCB7YTogMSwgYzogMywgYjogMn0sIDFdLFxuICAgICAgICAgICAgWydsYXN0LWtleScsIHthOiAxLCBjOiAzLCBiOiAyfSwgM10sXG4gICAgICAgICAgICBbJ250aC1sYXN0LWtleTowJywge2E6IDEsIGM6IDMsIGI6IDJ9LCAzXSxcbiAgICAgICAgICAgIFsnbnRoLWxhc3Qta2V5OjEnLCB7YTogMSwgYzogMywgYjogMn0sIDJdLFxuICAgICAgICAgICAgWydudGgtbGFzdC1rZXk6MicsIHthOiAxLCBjOiAzLCBiOiAyfSwgMV0sXG4gICAgICAgICAgICBbJ250aC1rZXk6MicsIHthOiAxLCBiOiAyLCBjOiAzfSwgM10sXG4gICAgICAgICAgICBbJ250aC1rZXk6MCcsIHtjOiAzLCBhOiAxLCBiOiAyfSwgMV0sXG4gICAgICAgICAgICBbJ250aC1rZXk6MicsIHthOiAxLCBjOiAzLCBiOiAyfSwgM10sXG4gICAgICAgICAgICBbJ3ByZWZpeDpIZWxsb1xcXFwgJywgJ3Rlc3QnLCBcIkhlbGxvIHRlc3RcIl0sXG4gICAgICAgICAgICBbJ3RvanNvbicsIHthOiA0fSwgXCJ7XFxcImFcXFwiOjR9XCJdLFxuICAgICAgICAgICAgWydwcmVmaXg6YVxcXFxcXFxcOiAnLCAndGVzdCcsIFwiYVxcXFx0ZXN0XCJdLFxuICAgICAgICAgICAgWydwcmVmaXg6YVxcXFwgJywgJ3Rlc3QnLCBcImEgdGVzdFwiXSxcbiAgICAgICAgICAgIFsnc3RhdGljOmFiYzphOmI6eCcsIFwidGVzdFwiLCBcImFiYzphOmI6eFwiXSxcbiAgICAgICAgICAgIFsndG9sb3dlcmNhc2UnLCBcIkE6YjpDc2U0XCIsIFwiYTpiOmNzZTRcIl0sXG4gICAgICAgICAgICBbJ3RvdXBwZXInLCBcIkE6YjpDc2U0XCIsIFwiQTpCOkNTRTRcIl0sXG4gICAgICAgICAgICBbJ3Rvc3RyaW5nJywgNSwgXCI1XCJdLFxuICAgICAgICAgICAgWyd0b3N0cmluZycsIFsxLCAyLCAzLCB7fV0sIFwiMSwyLDMsW29iamVjdCBPYmplY3RdXCJdLFxuICAgICAgICAgICAgWyd0b2ludGVnZXInLCBcIjVcIiwgNV0sXG4gICAgICAgICAgICBbJ3RyaW0nLCBcIiA1IFwiLCBcIjVcIl0sXG4gICAgICAgICAgICBbJ3RyaW0nLCBcIiBhXCIsIFwiYVwiXSxcbiAgICAgICAgICAgIFsndHJpbScsIFwiIFwiLCBcIlwiXSxcbiAgICAgICAgICAgIFsncmF3dXJsZW5jb2RlJywgXCJcdTAwRkNcdTAwRjZcdTAwRTRcIiwgXCIlQzMlQkMlQzMlQjYlQzMlQTRcIl0sXG4gICAgICAgICAgICBbJ2NhbGw6dGVzdGNhbGxiYWNrOjQ6NTo2JywgXCJ0ZXN0XCIsIFwidGVzdDQ1NlwiXSxcbiAgICAgICAgICAgIFsncGxhaW4nLCAndDxicj5lc3QnLCBcInRlc3RcIl0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsIHRydWUsIFwiYVwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgJ29uJywgXCJhXCJdLFxuICAgICAgICAgICAgWydpZjphOmInLCAndHJ1ZScsIFwiYVwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgJ2ZhbHNlJywgXCJiXCJdLFxuICAgICAgICAgICAgWydpZjphOmInLCA5LCBcImFcIl0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsICcnLCBcImJcIl0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsIHVuZGVmaW5lZCwgXCJiXCJdLFxuICAgICAgICAgICAgWydpZjphOmInLCBmYWxzZSwgXCJiXCJdLFxuICAgICAgICAgICAgWyd1Y2ZpcnN0JywgJ2NhcicsIFwiQ2FyXCJdLFxuICAgICAgICAgICAgWyd1Y2ZpcnN0JywgJ2NBcicsIFwiQ0FyXCJdLFxuICAgICAgICAgICAgWydkZWZhdWx0OnRlc3QnLCAnYScsIFwiYVwiXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDp0ZXN0JywgdW5kZWZpbmVkLCBcInRlc3RcIl0sXG4gICAgICAgICAgICBbJ2Zyb21qc29uJywgJ3t9Jywge31dLFxuICAgICAgICAgICAgWydmcm9tanNvbicsICd7XCJhXCI6MX0nLCB7YTogMX1dLFxuICAgICAgICAgICAgWyd1Y3dvcmRzJywgJ2NBciBydW5zJywgXCJDQXIgUnVuc1wiXSxcbiAgICAgICAgICAgIFsndG9pbnRlZ2VyJywgJzYnLCA2XSxcbiAgICAgICAgICAgIFsnbGVuZ3RoJywgJ3Rlc3QnLCA0XSxcbiAgICAgICAgICAgIFsndG8tYmFzZTY0JywgJ0hlbGxvIFdvcmxkIScsIFwiU0dWc2JHOGdWMjl5YkdRaFwiXSxcbiAgICAgICAgICAgIFsnZnJvbS1iYXNlNjQnLCAnU0dWc2JHOGdWMjl5YkdRaCcsIFwiSGVsbG8gV29ybGQhXCJdLFxuICAgICAgICAgICAgWyd0by1iYXNlNjQnLCAndGVzdCcsIFwiZEdWemRBPT1cIl0sXG4gICAgICAgICAgICBbJ2Zyb20tYmFzZTY0JywgXCJkR1Z6ZEE9PVwiLCAndGVzdCddLFxuICAgICAgICAgICAgWydwcmVmaXg6YScsICd0ZXN0JywgXCJhdGVzdFwiXSxcbiAgICAgICAgICAgIFsnc3VmZml4OmEnLCAndGVzdCcsIFwidGVzdGFcIl0sXG4gICAgICAgICAgICBbJ2luZGV4OmEnLCB7YTogNH0sIDRdLFxuICAgICAgICAgICAgWydpbmRleDoyJywgWzIsIDQsIDddLCA3XSxcbiAgICAgICAgICAgIFsnaW5kZXg6eDp0ZXN0JywgWzIsIDQsIDddLCAndGVzdCddLFxuICAgICAgICAgICAgWydwYXRoOmEuYi5jJywge2E6IHtiOiB7YzogNH19fSwgNF0sXG4gICAgICAgICAgICBbJ3BhdGg6YS5iLmQnLCB7YToge2I6IHtjOiA0fX19LCB1bmRlZmluZWRdLFxuICAgICAgICAgICAgWydpbmRleDphJywgbmV3IE1hcCgpLnNldCgnYScsIDUpLCA1XSxcbiAgICAgICAgICAgIFsnc3Vic3RyaW5nOjI6NCcsICdhYmNkZWZnaGlqa2xtbm9wJywgJ2NkZWYnXSxcbiAgICAgICAgICAgIFsnbm9wJywgJ2FiY2RlZmdoaWprbG1ub3AnLCAnYWJjZGVmZ2hpamtsbW5vcCddLFxuICAgICAgICAgICAgWydzZXQtdG9nZ2xlOmMnLCAnYSBiIGMnLCAnYSBiJ10sXG4gICAgICAgICAgICBbJ3NldC10b2dnbGU6YycsICdhIGInLCAnYSBiIGMnXSxcbiAgICAgICAgICAgIFsnc2V0LXNldDpjJywgJ2EgYicsICdhIGIgYyddLFxuICAgICAgICAgICAgWydzZXQtc2V0OmMnLCAnYSBiIGMnLCAnYSBiIGMnXSxcbiAgICAgICAgICAgIFsnc2V0LXJlbW92ZTpjJywgJ2EgYiBjJywgJ2EgYiddLFxuICAgICAgICAgICAgWydzZXQtdG9nZ2xlOmM6LCcsICdhLGIsYycsICdhLGInXSxcbiAgICAgICAgICAgIFsnc2V0LXRvZ2dsZTpjOiwnLCAnYSxiJywgJ2EsYixjJ10sXG4gICAgICAgICAgICBbJ3NldC1zZXQ6YzosJywgJ2EsYicsICdhLGIsYyddLFxuICAgICAgICAgICAgWydzZXQtc2V0OmM6LCcsICdhLGIsYycsICdhLGIsYyddLFxuICAgICAgICAgICAgWydzZXQtcmVtb3ZlOmM6LCcsICdhLGIsYycsICdhLGInXSxcbiAgICAgICAgICAgIFsnc2V0LXRvZ2dsZTpjLGQ6LCcsICdhLGIsYycsICdhLGIsZCddLFxuICAgICAgICAgICAgWydzZXQtdG9nZ2xlOmMsZDosJywgJ2EsYixjLGQnLCAnYSxiJ10sXG4gICAgICAgICAgICBbJ3NldC10b2dnbGU6YyxkOiwnLCAnYSxiJywgJ2EsYixjLGQnXSxcbiAgICAgICAgICAgIFsnc2V0LXNldDpjLGQ6LCcsICdhLGInLCAnYSxiLGMsZCddLFxuICAgICAgICAgICAgWydzZXQtc2V0OmMsZDosJywgJ2EsYixjJywgJ2EsYixjLGQnXSxcbiAgICAgICAgICAgIFsnc2V0LXJlbW92ZTpjOiwnLCAnYSxiLGMnLCAnYSxiJ10sXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnVHJhbnNmb3JtZXIucnVuKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcpLnJ1bignICsgSlNPTi5zdHJpbmdpZnkoYikgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBKU09OLnN0cmluZ2lmeShjKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gbmV3IFRyYW5zZm9ybWVyKGEpO1xuXG4gICAgICAgICAgICAgICAgdC5zZXRDYWxsYmFjaygndGVzdGNhbGxiYWNrJywgZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgKyBiICsgYyArIGQ7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCByID0gdC5ydW4oYik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGMpLnRvLmJlLmVxbChyLCBcIlRyYW5zZm9ybWVyLnJ1bihcIiArIEpTT04uc3RyaW5naWZ5KGEpICsgXCIpLnJ1bihcIiArIEpTT04uc3RyaW5naWZ5KGIpICsgXCIpIHNob3VsZCByZXR1cm4gXCIgKyBKU09OLnN0cmluZ2lmeShjKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdUcmFuc2Zvcm1lci5ydW4oKSB0aHJvd3MgRXJyb3InLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0b2xvd2VyY2FzZScsIFtdXSxcbiAgICAgICAgICAgIFsndG9sb3dlcmNhc2UnLCB7fV0sXG4gICAgICAgICAgICBbJ3RvbG93ZXJjYXNlJywgNC41XSxcbiAgICAgICAgICAgIFsndG91cHBlcicsIHRydWVdLFxuICAgICAgICAgICAgWyd0b3VwcGVyJywgNV0sXG4gICAgICAgICAgICBbJ3RvaW50ZWdlcicsIFwiYVwiXSxcbiAgICAgICAgICAgIFsndHJpbScsIDVdLFxuICAgICAgICAgICAgWyd0cmltJywgdHJ1ZV0sXG4gICAgICAgICAgICBbJ3RyaW0nLCB7fV0sXG4gICAgICAgICAgICBbJ3RyaW0nLCBbXV0sXG4gICAgICAgICAgICBbJ3Jhd3VybGVuY29kZScsIFtdXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywge31dLFxuICAgICAgICAgICAgWyd1Y3dvcmRzJywge31dLFxuICAgICAgICAgICAgWyd1Y3dvcmRzJywgZmFsc2VdLFxuICAgICAgICAgICAgWyd1Y3dvcmRzJywgNF0sXG4gICAgICAgICAgICBbJ3BhdGg6YS5iLmMnLCBcIlwiLCA0XSxcbiAgICAgICAgICAgIFsndG9pbnRlZ2VyJywge31dLFxuICAgICAgICAgICAgWydiYXNlNjQnLCB7fV0sXG4gICAgICAgICAgICBbJ2Zyb21qc29uJywgJyddLFxuICAgICAgICAgICAgWydwcmVmaXgnLCB7fV0sXG4gICAgICAgICAgICBbJ3N1ZmZpeCcsIHt9XSxcbiAgICAgICAgICAgIFsnaW5kZXgnLCBcInRlc3RcIl0sXG4gICAgICAgICAgICBbJ3h4eHh4eCcsIFwidGVzdFwiXSwgLy8gdW5zdXBwb3J0ZWQgY29tbWFuZFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdUcmFuc2Zvcm1lci5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykucnVuKCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcpIHNob3VsZCB0aHJvdyBFcnJvciAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBuZXcgVHJhbnNmb3JtZXIoYSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHQucnVuKGIpKS50by50aHJvdyhFcnJvcilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ25ldyBUcmFuc2Zvcm1lcigpLnJ1bihcInVuaXFpZFwiKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gU3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHQgPSBuZXcgVHJhbnNmb3JtZXIoJ3VuaXFpZCcpO1xuICAgICAgICAgICAgZXhwZWN0KHQucnVuKFwiXCIpKS50by5iZS5hKCdzdHJpbmcnKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCduZXcgVHJhbnNmb3JtZXIoKS5ydW4oXCJkZWZhdWx0OmV5SmlJam94ZlE9PTpvYmplY3RcIiknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIE9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0ID0gbmV3IFRyYW5zZm9ybWVyKCdkZWZhdWx0OmV5SmlJam94ZlE9PTpvYmplY3QnKTtcbiAgICAgICAgICAgIGV4cGVjdCh0LnJ1bih1bmRlZmluZWQpKS50by5lcWwoe2I6IDF9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ25ldyBUcmFuc2Zvcm1lcigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIFRyYW5zZm9ybWVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUcmFuc2Zvcm1lcihcIlwiKSkudG8uaW5zdGFuY2VPZihUcmFuc2Zvcm1lcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgVHJhbnNmb3JtZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFRyYW5zZm9ybWVyKFwic3VmZml4OmFiY1wiKSkudG8uaW5zdGFuY2VPZihUcmFuc2Zvcm1lcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdmYWxzZSBhcyBhcmd1bWVudCBzaG91bGQgdGhyb3cgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBuZXcgVHJhbnNmb3JtZXIoZmFsc2UpXG4gICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnb2JqZWN0IGFzIGFyZ3VtZW50IHNob3VsZCB0aHJvdyBUeXBlRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIG5ldyBUcmFuc2Zvcm1lcih7fSlcbiAgICAgICAgICAgIH0pLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnaTE4bicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgaHRtbDEgPSBgXG48ZGl2IGlkPVwibW9jay10cmFuc2xhdGlvbnNcIj48L2Rpdj5cbjxzY3JpcHQgdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIiBkYXRhLW1vbnN0ZXItcm9sZT1cInRyYW5zbGF0aW9uc1wiPlxuICAgIHtcbiAgICAgICAgXCJ0ZXN0MVwiOiBcInh5elwiLFxuICAgICAgICBcInRlc3QzXCI6IHtcbiAgICAgICAgICAgIFwib3RoZXJcIjogXCJ4eXpcIlxuICAgICAgICB9XG4gICAgfVxuPC9zY3JpcHQ+ICBcbmA7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoZG9uZSkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2stdHJhbnNsYXRpb25zJyk7XG4gICAgICAgICAgICBFbWJlZC5hc3NpZ25UcmFuc2xhdGlvbnNUb0VsZW1lbnQoZWxlbSkudGhlbigobykgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnaTE4bjp0ZXN0MScsIFwiXCIsIFwieHl6XCJdLFxuICAgICAgICAgICAgWydpMThuOicsIFwidGVzdDFcIiwgXCJ4eXpcIl0sIC8vIGtleSBieSB2YWx1ZVxuICAgICAgICAgICAgWydpMThuOjonLCBcInRlc3QxXCIsIFwieHl6XCJdLCAvLyBrZXkgYnkgdmFsdWUgbm8gZGVmYXVsdFxuICAgICAgICAgICAgWydpMThuOjplZWUnLCBcInRlc3QyXCIsIFwiZWVlXCJdLCAvLyBrZXkgYnkgdmFsdWUgd2l0aCBkZWZhdWx0XG4gICAgICAgICAgICBbJ2kxOG46OmRkZCcsIFwidGVzdDJcIiwgXCJkZGRcIl0sIC8vIGtleSBieSB2YWx1ZSBhbmQgZGVmYXVsdFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgdHJhbnNmb3JtKCcgKyBhICsgJykucnVuKCcgKyBiICsgJykgcmV0dXJuICcgKyBKU09OLnN0cmluZ2lmeShjKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBuZXcgVHJhbnNmb3JtZXIoYSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQucnVuKGIpKS50by5iZS5lcWwoYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9KVxuXG5cbn0pO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtkaWZmfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvZGlmZi5tanNcIjtcbmltcG9ydCB7UXVldWV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvcXVldWUubWpzXCI7XG5cbmRlc2NyaWJlKCdEaWZmJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ3Rlc3QgdG8gZGF0YXNldHMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgdmFyIG9iajEsIG9iajI7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBvYmoxID0gW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxLFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAyLFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJ0ZXN0MlwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuXG4gICAgICAgICAgICBvYmoyID0gW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxLFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiBcIjNcIixcbiAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwidGVzdDJcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBkYXRhc2V0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gZGlmZihvYmoxLCBvYmoyKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShkKSkuaXMuZXF1YWwoJ1t7XCJvcGVyYXRvclwiOlwidXBkYXRlXCIsXCJwYXRoXCI6W1wiMVwiLFwiaWRcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6MixcInR5cGVcIjpcIm51bWJlclwifSxcInNlY29uZFwiOntcInZhbHVlXCI6XCIzXCIsXCJ0eXBlXCI6XCJzdHJpbmdcIn19XScpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIFxuICAgIH0pXG4gICAgXG4gICAgZGVzY3JpYmUoJ0RpZmYgc3BlY2lhbCBjYXNlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICB2YXIgb2JqMSwgb2JqMjtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG9iajEgPSB7XG4gICAgICAgICAgICAgICAgXCJjb3VudFwiOiAxLFxuICAgICAgICAgICAgICAgIFwicmVhc29uXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgXCJpbmZvXCI6IFwidGVzdFwiLFxuICAgICAgICAgICAgICAgIFwiZXhjaGFuZ2VcIjogW11cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBvYmoyID0ge1xuICAgICAgICAgICAgICAgIFwiY291bnRcIjogMixcbiAgICAgICAgICAgICAgICBcInJlYXNvblwiOiBudWxsLFxuICAgICAgICAgICAgICAgIFwiaW5mb1wiOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgXCJleGNoYW5nZVwiOiBbXVxuICAgICAgICAgICAgfTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnRGlmZiB2YWx1ZSB3aXRoIG51bGwgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBkaWZmKG9iajEsIG9iajIpO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGQpKS5pcy5lcXVhbCgnW3tcIm9wZXJhdG9yXCI6XCJ1cGRhdGVcIixcInBhdGhcIjpbXCJjb3VudFwiXSxcImZpcnN0XCI6e1widmFsdWVcIjoxLFwidHlwZVwiOlwibnVtYmVyXCJ9LFwic2Vjb25kXCI6e1widmFsdWVcIjoyLFwidHlwZVwiOlwibnVtYmVyXCJ9fSx7XCJvcGVyYXRvclwiOlwiZGVsZXRlXCIsXCJwYXRoXCI6W1wiaW5mb1wiXSxcImZpcnN0XCI6e1widmFsdWVcIjpcInRlc3RcIixcInR5cGVcIjpcInN0cmluZ1wifX1dJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdEaWZmIGlkZW50aWNhbCB2YWx1ZSB3aXRoIG51bGwgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBkaWZmKG9iajEsIG9iajEpO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGQpKS5pcy5lcXVhbCgnW10nKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cbiAgICBjb25zdCBkYXRlMSA9IG5ldyBEYXRlO1xuXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZGUvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZS9wYXJzZVxuICAgIGNvbnN0IGRhdGUyID0gRGF0ZS5wYXJzZSgnMDEgSmFuIDE5NzAgMDA6MDA6MDAgR01UJyk7XG4gICAgY29uc3QgZGF0ZTMgPSBEYXRlLnBhcnNlKCcwNCBEZWMgMTk5NSAwMDoxMjowMCBHTVQnKTsgLy8gTnVtYmVyXG4gICAgY29uc3QgZGF0ZTQgPSBEYXRlLnBhcnNlKCcwNCBEZWMgMTk5NSAwMDoxMjowMSBHTVQnKTsgLy8gTnVtYmVyXG5cbiAgICBjb25zdCBkYXRlNSA9IG5ldyBEYXRlKERhdGUucGFyc2UoJzA0IERlYyAxOTk1IDAwOjEyOjAxIEdNVCcpKTsgLy8gRGF0ZVxuICAgIGNvbnN0IGRhdGU2ID0gbmV3IERhdGUoRGF0ZS5wYXJzZSgnMDQgRGVjIDE5OTUgMDA6MTI6MDIgR01UJykpOyAvLyBEYXRlXG5cbiAgICBbXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge30sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogbmV3IFF1ZXVlKClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJhXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjp7XCJkYXRhXCI6W119LFwidHlwZVwiOlwib2JqZWN0XCIsXCJpbnN0YW5jZVwiOlwiUXVldWVcIn19XSdcbiAgICAgICAgXSxcblxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiAxXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjOiB7XG4gICAgICAgICAgICAgICAgICAgIGQ6IDJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZTogM1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZjoge1xuICAgICAgICAgICAgICAgICAgICBkOiAyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcImRlbGV0ZVwiLFwicGF0aFwiOltcImFcIixcImJcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6MSxcInR5cGVcIjpcIm51bWJlclwifX0se1wib3BlcmF0b3JcIjpcImFkZFwiLFwicGF0aFwiOltcImFcIixcImVcIl0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOjMsXCJ0eXBlXCI6XCJudW1iZXJcIn19LHtcIm9wZXJhdG9yXCI6XCJkZWxldGVcIixcInBhdGhcIjpbXCJjXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOntcImRcIjoyfSxcInR5cGVcIjpcIm9iamVjdFwiLFwiaW5zdGFuY2VcIjpcIk9iamVjdFwifX0se1wib3BlcmF0b3JcIjpcImFkZFwiLFwicGF0aFwiOltcImZcIl0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOntcImRcIjoyfSxcInR5cGVcIjpcIm9iamVjdFwiLFwiaW5zdGFuY2VcIjpcIk9iamVjdFwifX1dJ1xuICAgICAgICBdLFxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlMSxcbiAgICAgICAgICAgICAgICBjOiBkYXRlNFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlMixcbiAgICAgICAgICAgICAgICBiOiBkYXRlM1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcInVwZGF0ZVwiLFwicGF0aFwiOltcImFcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6XCInICsgZGF0ZTEudG9JU09TdHJpbmcoKSArICdcIixcInR5cGVcIjpcIm9iamVjdFwiLFwiaW5zdGFuY2VcIjpcIkRhdGVcIn0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOjAsXCJ0eXBlXCI6XCJudW1iZXJcIn19LHtcIm9wZXJhdG9yXCI6XCJkZWxldGVcIixcInBhdGhcIjpbXCJjXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOjgxODAzNTkyMTAwMCxcInR5cGVcIjpcIm51bWJlclwifX0se1wib3BlcmF0b3JcIjpcImFkZFwiLFwicGF0aFwiOltcImJcIl0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOjgxODAzNTkyMDAwMCxcInR5cGVcIjpcIm51bWJlclwifX1dJ1xuICAgICAgICBdLFxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlNVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiOiBkYXRlNlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcImRlbGV0ZVwiLFwicGF0aFwiOltcImFcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6XCIxOTk1LTEyLTA0VDAwOjEyOjAxLjAwMFpcIixcInR5cGVcIjpcIm9iamVjdFwiLFwiaW5zdGFuY2VcIjpcIkRhdGVcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJiXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjpcIjE5OTUtMTItMDRUMDA6MTI6MDIuMDAwWlwiLFwidHlwZVwiOlwib2JqZWN0XCIsXCJpbnN0YW5jZVwiOlwiRGF0ZVwifX1dJ1xuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZGF0ZTFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZGF0ZTFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW10nXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IGRhdGUzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wiYVwiXSxcInNlY29uZFwiOntcInZhbHVlXCI6ODE4MDM1OTIwMDAwLFwidHlwZVwiOlwibnVtYmVyXCJ9fV0nXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IGRhdGUyXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IGRhdGUzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwidXBkYXRlXCIsXCJwYXRoXCI6W1wiYVwiXSxcImZpcnN0XCI6e1widmFsdWVcIjowLFwidHlwZVwiOlwibnVtYmVyXCJ9LFwic2Vjb25kXCI6e1widmFsdWVcIjo4MTgwMzU5MjAwMDAsXCJ0eXBlXCI6XCJudW1iZXJcIn19XSdcbiAgICAgICAgXSxcblxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiAyXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwidXBkYXRlXCIsXCJwYXRoXCI6W1wiYVwiXSxcImZpcnN0XCI6e1widmFsdWVcIjoxLFwidHlwZVwiOlwibnVtYmVyXCJ9LFwic2Vjb25kXCI6e1widmFsdWVcIjoyLFwidHlwZVwiOlwibnVtYmVyXCJ9fV0nXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgeDogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcImRlbGV0ZVwiLFwicGF0aFwiOltcImFcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6MSxcInR5cGVcIjpcIm51bWJlclwifX0se1wib3BlcmF0b3JcIjpcImFkZFwiLFwicGF0aFwiOltcInhcIl0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOjEsXCJ0eXBlXCI6XCJudW1iZXJcIn19XSdcbiAgICAgICAgXSxcblxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiAyLFxuICAgICAgICAgICAgICAgIHg6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJ1cGRhdGVcIixcInBhdGhcIjpbXCJhXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOjEsXCJ0eXBlXCI6XCJudW1iZXJcIn0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOjIsXCJ0eXBlXCI6XCJudW1iZXJcIn19LHtcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJ4XCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjoxLFwidHlwZVwiOlwibnVtYmVyXCJ9fV0nXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJkZWxldGVcIixcInBhdGhcIjpbXCJhXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOm51bGwsXCJ0eXBlXCI6XCJvYmplY3RcIn19XSdcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IG51bGxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogbnVsbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbXSdcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAge30sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogbnVsbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcImFkZFwiLFwicGF0aFwiOltcImFcIl0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOm51bGwsXCJ0eXBlXCI6XCJvYmplY3RcIn19XSdcbiAgICAgICAgXSwgW1xuICAgICAgICB7fSxcbiAgICAgICAge2E6IHVuZGVmaW5lZH0sXG4gICAgICAgICdbe1wib3BlcmF0b3JcIjpcImFkZFwiLFwicGF0aFwiOltcImFcIl0sXCJzZWNvbmRcIjp7XCJ0eXBlXCI6XCJ1bmRlZmluZWRcIn19XSdcbiAgICBdXG5cblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICBpdCgnRGlmZiBzaG91bGQgcmVzdWx0ICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IGRpZmYoYSwgYik7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoZCkpLmlzLmVxdWFsKGMpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbn0pIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtidWlsZFRyZWV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS9idWlsZHRyZWUubWpzXCI7XG5pbXBvcnQge05vZGVMaXN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL25vZGVsaXN0Lm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdidWlsZFRyZWUnLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgIGRlc2NyaWJlKCdsZWdhY3kgbmF2aWdhdGlvbiBleGFtcGxlIChpc3N1ZSAjMjMwKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJ1biBleGFtcGxlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCBvYmplY3RzID0gSlNPTi5wYXJzZShge1xuICAgIFwiZGF0YXNldFwiOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMTAwMDAxLFxuICAgICAgICAgICAgXCJwYXJlbnRfaWRcIjogMjAwMDAxLFxuICAgICAgICAgICAgXCJ0aXRsZVwiOiBcImVCYXlcIixcbiAgICAgICAgICAgIFwidXJsXCI6IFwiL1wiLFxuICAgICAgICAgICAgXCJ3ZWlnaHRcIjogMSxcbiAgICAgICAgICAgIFwiY3NzX3N0eWxlc1wiOiBcIlwiLFxuICAgICAgICAgICAgXCJjc3NfY2xhc3Nlc1wiOiBcIlwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIFwiaWRcIjogMjAwMDAxLFxuICAgICAgICAgICAgXCJwYXJlbnRfaWRcIjogMjAwMDAxLFxuICAgICAgICAgICAgXCJ0aXRsZVwiOiBcImFsdmluZWNvbnNvbGVcIixcbiAgICAgICAgICAgIFwidXJsXCI6IFwiXCIsXG4gICAgICAgICAgICBcIndlaWdodFwiOiAxLFxuICAgICAgICAgICAgXCJjc3Nfc3R5bGVzXCI6IFwiXCIsXG4gICAgICAgICAgICBcImNzc19jbGFzc2VzXCI6IFwiXCJcbiAgICAgICAgfVxuICAgIF0sXG4gICAgXCJzeXNcIjoge1xuICAgICAgICBcImNvZGVcIjogMjAwLFxuICAgICAgICBcInJlc3VsdFwiOiB7fSxcbiAgICAgICAgXCJhcGlfdmVyc2lvblwiOiBcIjFcIlxuICAgIH1cbn1gKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBidWlsZFRyZWUob2JqZWN0cywgJ2RhdGFzZXQuKicsICdpZCcsICdwYXJlbnRfaWQnKTsgICAgXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGV4cGVjdChlcnJvcikudG8uYmUuaW5zdGFuY2VPZihFcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcblxuICAgICAgICAgICAgXG5cbiAgICAgICAgfSlcbiAgICB9KSAgICBcbiAgICBcblxuICAgIGRlc2NyaWJlKCdleGFtcGxlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIGV4YW1wbGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IG9iamVjdHMgPSB7XG4gICAgICAgICAgICAgICAgZGF0YXNldDoge1xuICAgICAgICAgICAgICAgICAgICBcIjFcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiMVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJ2ZWhpY2xlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IG51bGxcblxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIjJcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJjYXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIxXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCIzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIjNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwidHJ1Y2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIxXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCI0XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIjRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwibW90b3JjeWNsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjFcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIjVcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTVVZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIyXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXCI2XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIjZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwic3BvcnRzIGNhclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjJcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBub2RlcyA9IGJ1aWxkVHJlZShvYmplY3RzLCAnZGF0YXNldC4qJywgJ2lkJywgJ3BhcmVudCcpO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZXMpLnRvLmJlLmluc3RhbmNlT2YoTm9kZUxpc3QpO1xuICAgICAgICAgICAgZXhwZWN0KG5vZGVzLmxlbmd0aCkudG8uZXF1YWwoMSk7XG4gICAgICAgICAgICBleHBlY3Qobm9kZXMudG9TdHJpbmcoKSkudG8uYmUuZXF1YWwoJ3tcImlkXCI6XCIxXCIsXCJuYW1lXCI6XCJ2ZWhpY2xlXCIsXCJwYXJlbnRcIjpudWxsfVxcbiBcdTI1MUN7XCJpZFwiOlwiMlwiLFwibmFtZVwiOlwiY2FyXCIsXCJwYXJlbnRcIjpcIjFcIn1cXG4gfCBcdTI1MUN7XCJpZFwiOlwiNVwiLFwibmFtZVwiOlwiU1VWXCIsXCJwYXJlbnRcIjpcIjJcIn1cXG4gfCBcdTI1MTR7XCJpZFwiOlwiNlwiLFwibmFtZVwiOlwic3BvcnRzIGNhclwiLFwicGFyZW50XCI6XCIyXCJ9XFxuIFx1MjUxQ3tcImlkXCI6XCIzXCIsXCJuYW1lXCI6XCJ0cnVja1wiLFwicGFyZW50XCI6XCIxXCJ9XFxuIFx1MjUxNHtcImlkXCI6XCI0XCIsXCJuYW1lXCI6XCJtb3RvcmN5Y2xlXCIsXCJwYXJlbnRcIjpcIjFcIn0nICk7XG5cblxuICAgICAgICB9KVxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYnVpbGRUcmVlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG9iajEgPSB7XG4gICAgICAgICAgICBkYXRhc2V0OiB7XG4gICAgICAgICAgICAgICAgXCIxXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiMVwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgMVwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgMVwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IG51bGxcblxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCIyXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiMlwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgMlwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgMlwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMVwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjNcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCIzXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCAzXCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSAzXCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIyXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiNFwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjRcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDRcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDRcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjJcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCI1XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNVwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgNVwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgNVwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMVwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjZcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCI2XCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCA2XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSA2XCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCI0XCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gTm9kZSBJbnN0YW5jZS4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoYnVpbGRUcmVlKHt9LCAnJykpLnRvLmJlLmluc3RhbmNlT2YoTm9kZUxpc3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbb2JqMSwgJ2RhdGFzZXQuKicsICd7XCJpZFwiOlwiMVwiLFwibmFtZVwiOlwiVGVzdCAxXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDFcIixcInBhcmVudFwiOm51bGx9XFxuIFx1MjUxQ3tcImlkXCI6XCIyXCIsXCJuYW1lXCI6XCJUZXN0IDJcIixcImFkZHJlc3NcIjpcIkhlcmUgMlwiLFwicGFyZW50XCI6XCIxXCJ9XFxuIHwgXHUyNTFDe1wiaWRcIjpcIjNcIixcIm5hbWVcIjpcIlRlc3QgM1wiLFwiYWRkcmVzc1wiOlwiSGVyZSAzXCIsXCJwYXJlbnRcIjpcIjJcIn1cXG4gfCBcdTI1MTR7XCJpZFwiOlwiNFwiLFwibmFtZVwiOlwiVGVzdCA0XCIsXCJhZGRyZXNzXCI6XCJIZXJlIDRcIixcInBhcmVudFwiOlwiMlwifVxcbiB8IHwgXHUyNTE0e1wiaWRcIjpcIjZcIixcIm5hbWVcIjpcIlRlc3QgNlwiLFwiYWRkcmVzc1wiOlwiSGVyZSA2XCIsXCJwYXJlbnRcIjpcIjRcIn1cXG4gXHUyNTE0e1wiaWRcIjpcIjVcIixcIm5hbWVcIjpcIlRlc3QgNVwiLFwiYWRkcmVzc1wiOlwiSGVyZSA1XCIsXCJwYXJlbnRcIjpcIjFcIn0nXSxcbiAgICAgICAgICAgIFtvYmoxLCAneCcsICcnXSxcbiAgICAgICAgICAgIFtvYmoxLCAnZGF0YXNldC4qJywgJ3tcImlkXCI6XCIxXCIsXCJuYW1lXCI6XCJUZXN0IDFcIixcImFkZHJlc3NcIjpcIkhlcmUgMVwiLFwicGFyZW50XCI6bnVsbH1cXG4gXHUyNTFDe1wiaWRcIjpcIjJcIixcIm5hbWVcIjpcIlRlc3QgMlwiLFwiYWRkcmVzc1wiOlwiSGVyZSAyXCIsXCJwYXJlbnRcIjpcIjFcIn1cXG4gfCBcdTI1MUN7XCJpZFwiOlwiM1wiLFwibmFtZVwiOlwiVGVzdCAzXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDNcIixcInBhcmVudFwiOlwiMlwifVxcbiB8IFx1MjUxNHtcImlkXCI6XCI0XCIsXCJuYW1lXCI6XCJUZXN0IDRcIixcImFkZHJlc3NcIjpcIkhlcmUgNFwiLFwicGFyZW50XCI6XCIyXCJ9XFxuIHwgfCBcdTI1MTR7XCJpZFwiOlwiNlwiLFwibmFtZVwiOlwiVGVzdCA2XCIsXCJhZGRyZXNzXCI6XCJIZXJlIDZcIixcInBhcmVudFwiOlwiNFwifVxcbiBcdTI1MTR7XCJpZFwiOlwiNVwiLFwibmFtZVwiOlwiVGVzdCA1XCIsXCJhZGRyZXNzXCI6XCJIZXJlIDVcIixcInBhcmVudFwiOlwiMVwifSddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnYnVpbGRUcmVlKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcsJyArIEpTT04uc3RyaW5naWZ5KGIpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoYykgKyAnICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgbm9kZWxpc3QgPSBidWlsZFRyZWUoYSwgYiwgJ2lkJywgJ3BhcmVudCcpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChub2RlbGlzdC50b1N0cmluZygpKS50by5iZS5lcWwoYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2J1aWxkVHJlZSgpIHRlc3QgMicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAvKipcbiAgICAgICAgICogMlxuICAgICAgICAgKiAgICAxXG4gICAgICAgICAqICAgIDNcbiAgICAgICAgICogNFxuICAgICAgICAgKiAgICA2XG4gICAgICAgICAqIDVcbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIGxldCBvYmoxID0ge1xuICAgICAgICAgICAgZGF0YXNldDoge1xuICAgICAgICAgICAgICAgIFwiMVwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDFcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDFcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjJcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCIyXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiMlwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgMlwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgMlwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjNcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCIzXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCAzXCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSAzXCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIyXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiNFwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjRcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDRcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDRcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjBcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCI1XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNVwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgNVwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgNVwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjZcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCI2XCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCA2XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSA2XCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCI0XCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiN1wiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjdcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDdcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDdcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjFcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBOb2RlIEluc3RhbmNlLicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChidWlsZFRyZWUoe30sICcnKSkudG8uYmUuaW5zdGFuY2VPZihOb2RlTGlzdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtvYmoxLCAnZGF0YXNldC4qJywgJ3tcImlkXCI6XCIyXCIsXCJuYW1lXCI6XCJUZXN0IDJcIixcImFkZHJlc3NcIjpcIkhlcmUgMlwiLFwicGFyZW50XCI6XCIwXCJ9XFxuIFx1MjUxQ3tcImlkXCI6XCIxXCIsXCJuYW1lXCI6XCJUZXN0IDFcIixcImFkZHJlc3NcIjpcIkhlcmUgMVwiLFwicGFyZW50XCI6XCIyXCJ9XFxuIHwgXHUyNTE0e1wiaWRcIjpcIjdcIixcIm5hbWVcIjpcIlRlc3QgN1wiLFwiYWRkcmVzc1wiOlwiSGVyZSA3XCIsXCJwYXJlbnRcIjpcIjFcIn1cXG4gXHUyNTE0e1wiaWRcIjpcIjNcIixcIm5hbWVcIjpcIlRlc3QgM1wiLFwiYWRkcmVzc1wiOlwiSGVyZSAzXCIsXCJwYXJlbnRcIjpcIjJcIn1cXG57XCJpZFwiOlwiNFwiLFwibmFtZVwiOlwiVGVzdCA0XCIsXCJhZGRyZXNzXCI6XCJIZXJlIDRcIixcInBhcmVudFwiOlwiMFwifVxcbiBcdTI1MTR7XCJpZFwiOlwiNlwiLFwibmFtZVwiOlwiVGVzdCA2XCIsXCJhZGRyZXNzXCI6XCJIZXJlIDZcIixcInBhcmVudFwiOlwiNFwifVxcbntcImlkXCI6XCI1XCIsXCJuYW1lXCI6XCJUZXN0IDVcIixcImFkZHJlc3NcIjpcIkhlcmUgNVwiLFwicGFyZW50XCI6XCIwXCJ9J10sXG4gICAgICAgICAgICBbb2JqMSwgJ3gnLCAnJ10sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdidWlsZFRyZWUoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJywnICsgSlNPTi5zdHJpbmdpZnkoYikgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBKU09OLnN0cmluZ2lmeShjKSArICcgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBub2RlbGlzdCA9IGJ1aWxkVHJlZShhLCBiLCAnaWQnLCAncGFyZW50Jywge1xuICAgICAgICAgICAgICAgICAgICByb290UmVmZXJlbmNlczogWycwJ11cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChub2RlbGlzdC50b1N0cmluZygpKS50by5iZS5lcXVhbChjKTtcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcbiAgICBcbiAgICBcbiAgICBcblxuXG59KTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7UGF0aGZpbmRlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5cbmRlc2NyaWJlKCdQYXRoZmluZGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGNvbnZlcnRNYXBSZXN1bHQgPSBmdW5jdGlvbiAocikge1xuICAgICAgICBpZiAociBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICAgICAgciA9IE9iamVjdC5mcm9tRW50cmllcyhyKTtcbiAgICAgICAgICAgIGlmIChyIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgICAgICByID0gci5tYXAoKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRNYXBSZXN1bHQoZSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHIgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCBvXSBvZiBPYmplY3QuZW50cmllcyhyKSkge1xuICAgICAgICAgICAgICAgICAgICByW2tdID0gY29udmVydE1hcFJlc3VsdChvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcjtcbiAgICB9XG5cblxuICAgIGRlc2NyaWJlKCd3aXRoIFdpbGRjYXJkIGFuZCBJdGVyYXRpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgcGYsIG9iajtcblxuICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIG9iaiA9IHtcbiAgICAgICAgICAgICAgICBhOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiMS0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogXCIxLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkOiAnISdcblxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBcIjItMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiMi0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgZDogJz8nXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwZiA9IG5ldyBQYXRoZmluZGVyKG9iaik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnYS4qLmIuKicsICd7XCIwXCI6e1wiMFwiOntcImNcIjpcIjEtMVwifSxcIjFcIjp7XCJjXCI6XCIxLTJcIn19LFwiMVwiOntcIjBcIjp7XCJjXCI6XCIyLTFcIn0sXCIxXCI6e1wiY1wiOlwiMi0yXCJ9fX0nXSxcbiAgICAgICAgICAgIFsnYS4qLmInLCAne1wiMFwiOlt7XCJjXCI6XCIxLTFcIn0se1wiY1wiOlwiMS0yXCJ9XSxcIjFcIjpbe1wiY1wiOlwiMi0xXCJ9LHtcImNcIjpcIjItMlwifV19J10sXG4gICAgICAgICAgICBbJ2EuMS5iJywgJ1t7XCJjXCI6XCIyLTFcIn0se1wiY1wiOlwiMi0yXCJ9XSddLFxuICAgICAgICAgICAgWydhLjAuYicsICdbe1wiY1wiOlwiMS0xXCJ9LHtcImNcIjpcIjEtMlwifV0nXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgICAgIGl0KCcuc2V0VmlhKCcgKyBhICsgJykgc2hvdWxkIHJlc3VsdCBpbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IHIgPSBwZi5nZXRWaWEoYSk7XG4gICAgICAgICAgICAgICAgbGV0IGkgPSBjb252ZXJ0TWFwUmVzdWx0KHIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShpKSkuaXMuZXF1YWwoYik7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ2FwaSB0ZXN0cycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgcGF0aGZpbmRlciwgb2JqZWN0O1xuXG5cbiAgICAgICAgY2xhc3MgQSB7XG4gICAgICAgICAgICBnZXQgYSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgIG9iamVjdCA9IHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCBcInRlc3QxXCIsIGZhbHNlLCB1bmRlZmluZWQsIHBhcnNlSW50KFwiYVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk6IFtcInRlc3QyXCJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGo6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgazogKG5ldyBNYXApLnNldCgnbScsIHtuOiAzfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBsOiAobmV3IFNldCkuYWRkKHtuOiA0fSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYjogbmV3IEFcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHBhdGhmaW5kZXIgPSBuZXcgUGF0aGZpbmRlcihvYmplY3QpO1xuXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBuZXcgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWzEyXSxcbiAgICAgICAgICAgICAgICBbdW5kZWZpbmVkXSxcbiAgICAgICAgICAgICAgICBbbnVsbF0sXG4gICAgICAgICAgICAgICAgW1widGVzdFwiXVxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBsYWJlbCA9IHR5cGVvZiBhO1xuICAgICAgICAgICAgICAgIGlmIChhID09PSBudWxsKSBsYWJlbCA9ICdudWxsJztcblxuXG4gICAgICAgICAgICAgICAgaXQobGFiZWwgKyAnIHNob3VsZCB0aHJvdyBlcnJvcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFBhdGhmaW5kZXIoYSlcbiAgICAgICAgICAgICAgICAgICAgfSkudG8udGhyb3coRXJyb3IpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnLnNldFZpYSh4KScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IHBmLCBvYmo7XG5cbiAgICAgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIG9iaiA9IHt9XG4gICAgICAgICAgICAgICAgcGYgPSBuZXcgUGF0aGZpbmRlcihvYmopO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ2EuYi4wLjAuYycsIHRydWUsICd7XCJhXCI6e1wiYlwiOltbe1wiY1wiOnRydWV9XV19fSddLFxuICAgICAgICAgICAgICAgIFsnYS5iLjAuYycsIHRydWUsICd7XCJhXCI6e1wiYlwiOlt7XCJjXCI6dHJ1ZX1dfX0nXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi4zLmMnLCB0cnVlLCAne1wiYVwiOntcImJcIjpbbnVsbCxudWxsLG51bGwse1wiY1wiOnRydWV9XX19J10sXG4gICAgICAgICAgICAgICAgWydhLmIuYycsIHRydWUsICd7XCJhXCI6e1wiYlwiOntcImNcIjp0cnVlfX19J11cbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICAgICAgICAgIGl0KCcuc2V0VmlhKCcgKyBhICsgJywgJyArIGIgKyAnKSBzaG91bGQgcmVzdWx0IGluICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHBmLnNldFZpYShhLCBiKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkob2JqKSkuaXMuZXF1YWwoYyk7XG4gICAgICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnLnNldFZpYSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgYTtcbiAgICAgICAgICAgIGxldCBiO1xuICAgICAgICAgICAgbGV0IGM7XG5cbiAgICAgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGEgPSBcImEueFwiO1xuICAgICAgICAgICAgICAgIGIgPSBcInRydWVcIjtcbiAgICAgICAgICAgICAgICBjID0gXCJhLnkuZFwiO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJy5zZXRWaWEoJyArIGEgKyAnLCAnICsgYiArICcpIHNob3VsZCByZXR1cm4gUGF0aGZpbmRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QocGF0aGZpbmRlci5zZXRWaWEoYSwgYikpLmlzLmluc3RhbmNlT2YoUGF0aGZpbmRlcik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJy5zZXRWaWEoJyArIGEgKyAnLCAnICsgYiArICcpIHNob3VsZCBjaGFuZ2Ugb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHBhdGhmaW5kZXIuc2V0VmlhKGEsIGIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShvYmplY3QpKS5pcy5lcXVhbCgne1wiYVwiOntcImJcIjp7XCJjXCI6WzQsXCJ0ZXN0MVwiLGZhbHNlLG51bGwsbnVsbF0sXCJlXCI6ZmFsc2UsXCJmXCI6W3tcImdcIjpmYWxzZSxcImhcIjozLFwiaVwiOltcInRlc3QyXCJdfV0sXCJqXCI6e30sXCJrXCI6e30sXCJsXCI6e319LFwieFwiOlwidHJ1ZVwifSxcImJcIjp7fX0nKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnLnNldFZpYSgnICsgYyArICcsICcgKyBiICsgJykgc2hvdWxkIGNoYW5nZSBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcGF0aGZpbmRlci5zZXRWaWEoYywgYik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KG9iamVjdCkpLmlzLmVxdWFsKCd7XCJhXCI6e1wiYlwiOntcImNcIjpbNCxcInRlc3QxXCIsZmFsc2UsbnVsbCxudWxsXSxcImVcIjpmYWxzZSxcImZcIjpbe1wiZ1wiOmZhbHNlLFwiaFwiOjMsXCJpXCI6W1widGVzdDJcIl19XSxcImpcIjp7fSxcImtcIjp7fSxcImxcIjp7fX0sXCJ5XCI6e1wiZFwiOlwidHJ1ZVwifX0sXCJiXCI6e319Jyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuXG4gICAgICAgIGRlc2NyaWJlKCcuZXhpc3RzKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydhLmIuYy4xJywgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgWydiLmEnLCB0cnVlXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi54JywgZmFsc2VdLFxuICAgICAgICAgICAgICAgIFsnYS54JywgZmFsc2VdLFxuICAgICAgICAgICAgICAgIFsnYS5iLnEnLCBmYWxzZV0sXG4gICAgICAgICAgICAgICAgWydhLmIuYy4wJywgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgWydhLmIuZCcsIHRydWVdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmYuMC5nJywgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgWydhLmIuZi4wLmkuMCcsIHRydWVdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmYuMC5pLjInLCBmYWxzZV0sXG4gICAgICAgICAgICAgICAgWydhLmIuZScsIHRydWVdLFxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICAgICAgICAgIGl0KCcuZXhpc3RzKCcgKyBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiArICcgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QocGF0aGZpbmRlci5leGlzdHMoYSkpLmlzLmVxdWFsKGIpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJy5kZWxldGVWaWEoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ2EuYi5lJywgJ3tcImFcIjp7XCJiXCI6e1wiY1wiOls0LFwidGVzdDFcIixmYWxzZSxudWxsLG51bGxdLFwiZlwiOlt7XCJnXCI6ZmFsc2UsXCJoXCI6MyxcImlcIjpbXCJ0ZXN0MlwiXX1dLFwialwiOnt9LFwia1wiOnt9LFwibFwiOnt9fX0sXCJiXCI6e319J10sXG4gICAgICAgICAgICAgICAgWydhLmIuZicsICd7XCJhXCI6e1wiYlwiOntcImNcIjpbNCxcInRlc3QxXCIsZmFsc2UsbnVsbCxudWxsXSxcImVcIjpmYWxzZSxcImpcIjp7fSxcImtcIjp7fSxcImxcIjp7fX19LFwiYlwiOnt9fSddLFxuICAgICAgICAgICAgICAgIFsnYS5iLmonLCAne1wiYVwiOntcImJcIjp7XCJjXCI6WzQsXCJ0ZXN0MVwiLGZhbHNlLG51bGwsbnVsbF0sXCJlXCI6ZmFsc2UsXCJmXCI6W3tcImdcIjpmYWxzZSxcImhcIjozLFwiaVwiOltcInRlc3QyXCJdfV0sXCJrXCI6e30sXCJsXCI6e319fSxcImJcIjp7fX0nXSxcblxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgICBpdCgnLmRlbGV0ZVZpYSgnICsgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIgKyAnICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aGZpbmRlci5kZWxldGVWaWEoYSlcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KG9iamVjdCkpLmlzLmVxdWFsKGIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCcuZ2V0VmlhKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkZXNjcmliZSgnLmdldFZpYSgpJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0LCBcInRlc3QxXCIsIGZhbHNlLCB1bmRlZmluZWQsIHBhcnNlSW50KFwiYVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOiBbXCJ0ZXN0MlwiXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazogKG5ldyBNYXApLnNldCgnbScsIHtuOiAzfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IChuZXcgU2V0KS5hZGQoe246IDR9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbzogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3A6IHtxOiAxLCByOiB0cnVlfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cDoge3E6IDIsIHI6IHRydWV9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwOiB7cTogMywgcjogdHJ1ZX19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3A6IHtxOiA0LCByOiB0cnVlfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cDoge3E6IDUsIHI6IHRydWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiB7YTogMX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OiB7YTogMn0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2OiB7YTogM30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiB7YTogNH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBwYXRoZmluZGVyID0gbmV3IFBhdGhmaW5kZXIob2JqZWN0KTtcblxuXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIFsnYS4qJywgJ1tbXCJiXCIse1wiY1wiOls0LFwidGVzdDFcIixmYWxzZSxudWxsLG51bGxdLFwiZVwiOmZhbHNlLFwiZlwiOlt7XCJnXCI6ZmFsc2UsXCJoXCI6MyxcImlcIjpbXCJ0ZXN0MlwiXX1dLFwialwiOnt9LFwia1wiOnt9LFwibFwiOnt9LFwib1wiOlt7XCJwXCI6e1wicVwiOjEsXCJyXCI6dHJ1ZX19LHtcInBcIjp7XCJxXCI6MixcInJcIjp0cnVlfX0se1wicFwiOntcInFcIjozLFwiclwiOnRydWV9fSx7XCJwXCI6e1wicVwiOjQsXCJyXCI6dHJ1ZX19LHtcInBcIjp7XCJxXCI6NSxcInJcIjp0cnVlfX1dLFwic1wiOntcInRcIjp7XCJhXCI6MX0sXCJ1XCI6e1wiYVwiOjJ9LFwidlwiOntcImFcIjozfSxcInhcIjp7XCJhXCI6NH19fV1dJ10sXG4gICAgICAgICAgICAgICAgICAgIFsnYS5iLnMuKi5hJywgJ1tbXCJ0XCIsMV0sW1widVwiLDJdLFtcInZcIiwzXSxbXCJ4XCIsNF1dJ10sXG4gICAgICAgICAgICAgICAgICAgIFsnYS5iLnMuKicsICdbW1widFwiLHtcImFcIjoxfV0sW1widVwiLHtcImFcIjoyfV0sW1widlwiLHtcImFcIjozfV0sW1wieFwiLHtcImFcIjo0fV1dJ10sXG4gICAgICAgICAgICAgICAgICAgIFsnYS5iLm8uKi5wLnEnLCAnW1tcIjBcIiwxXSxbXCIxXCIsMl0sW1wiMlwiLDNdLFtcIjNcIiw0XSxbXCI0XCIsNV1dJ10sXG4gICAgICAgICAgICAgICAgICAgIFsnYS5iLm8uKi5wLnInLCAnW1tcIjBcIix0cnVlXSxbXCIxXCIsdHJ1ZV0sW1wiMlwiLHRydWVdLFtcIjNcIix0cnVlXSxbXCI0XCIsdHJ1ZV1dJ10sXG4gICAgICAgICAgICAgICAgICAgIFsnYS5iLm8uKi5wJywgJ1tbXCIwXCIse1wicVwiOjEsXCJyXCI6dHJ1ZX1dLFtcIjFcIix7XCJxXCI6MixcInJcIjp0cnVlfV0sW1wiMlwiLHtcInFcIjozLFwiclwiOnRydWV9XSxbXCIzXCIse1wicVwiOjQsXCJyXCI6dHJ1ZX1dLFtcIjRcIix7XCJxXCI6NSxcInJcIjp0cnVlfV1dJ11cbiAgICAgICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICAgICAgICAgIGl0KCcuZ2V0VmlhKCcgKyBhICsgJykgc2hvdWxkIHJlc3VsdCAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHIgPSBwYXRoZmluZGVyLmdldFZpYShhKVxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20ocikpKS5pcy5lcXVhbChiKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJy5nZXRWaWEoKSBzaG91bGQgcmVzdWx0ICcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBwID0gbmV3IFBhdGhmaW5kZXIoe1xuICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2M6IDF9LCB7YzogMn1cbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YzogMSwgZDogZmFsc2V9LCB7YzogMn1cbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgciA9IHAuZ2V0VmlhKFwiKi54LiouY1wiKVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbWFwVG9PYmoobWFwKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB7fVxuICAgICAgICAgICAgICAgICAgICBtYXAuZm9yRWFjaChmdW5jdGlvbiAodiwgaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpba10gPSBtYXBUb09iaih2KVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpba10gPSB2XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ialxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShtYXBUb09iaihyKSkpLmlzLmVxdWFsKCd7XCJhXCI6e1wiMFwiOjEsXCIxXCI6Mn0sXCJiXCI6e1wiMFwiOjEsXCIxXCI6Mn19Jyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJy5nZXRWaWEoYS5iLmwuMC5uKSB3aXRoIG1hcCBzaG91bGQgcmV0dXJuIDQgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChwYXRoZmluZGVyLmdldFZpYSgnYS5iLmwuMC5uJykpLmlzLmVxdWFsKDQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ2EuYi5rLm0ubicsIDNdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmwuMC5uJywgNF0sXG4gICAgICAgICAgICAgICAgWydhLngnLCB1bmRlZmluZWRdLFxuICAgICAgICAgICAgICAgIFsnYS5iLnEnLCB1bmRlZmluZWRdLFxuICAgICAgICAgICAgICAgIFsnYS5iLmMuMScsIFwidGVzdDFcIl0sXG4gICAgICAgICAgICAgICAgWydhLmIuYy4wJywgNF0sXG4gICAgICAgICAgICAgICAgWydhLmIuZCcsIHVuZGVmaW5lZF0sXG4gICAgICAgICAgICAgICAgWydhLmIuZi4wLmcnLCBmYWxzZV0sXG4gICAgICAgICAgICAgICAgWydhLmIuZi4wLmkuMCcsIFwidGVzdDJcIl0sXG4gICAgICAgICAgICAgICAgWydhLmIuZScsIGZhbHNlXSxcbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgICAgICAgICBpdCgnLmdldFZpYSgnICsgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIgKyAnICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHBhdGhmaW5kZXIuZ2V0VmlhKGEpKS5pcy5lcXVhbChiKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsnYS5iLmQuZSddLFxuICAgICAgICAgICAgICAgIFsnYS5iLmQueCddLFxuICAgICAgICAgICAgICAgIFsnYS5iLmwuZS5uJ10sXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgICBpdCgnLmdldFZpYSgnICsgYSArICcpIHNob3VsZCB0aHJvdyBFcnJvciAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBwYXRoZmluZGVyLmdldFZpYShhKSkudG8udGhyb3coRXJyb3IpXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG59KTtcblxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtQaXBlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvcGlwZS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7RW1iZWR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1BpcGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBpZiAoIWdsb2JhbFRoaXNbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbihtID0+IHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzWydjcnlwdG8nXSA9IG5ldyBtLkNyeXB0bygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgIH1cblxuICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdydW4gZGlmZmVyZW50IHBpcGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBbXG4gICAgICAgICAgICBbJ3BhdGg6YiB8IGlmOng6XFxcXCAnLCB7YTogdHJ1ZX0sICcgJ10sICAgLy8gJ1xcXFwgJy5sZW5ndGggXHUyMUE2IDJcbiAgICAgICAgICAgIFsncGF0aDphIHwgaWY6eDpcXFxcICcsIHthOiB0cnVlfSwgJ3gnXSxcbiAgICAgICAgICAgIFsnbm9wJywgJ2FiY2RlZmdoaWprbG1ub3AnLCAnYWJjZGVmZ2hpamtsbW5vcCddLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdQaXBlLnJ1bignICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKS5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGIpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoYyksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IG5ldyBQaXBlKGEpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgciA9IHQucnVuKGIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChyKS50by5iZS5lcWwoYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnbmV3IFBpcGUgc2hvdWxkIGNyZWF0ZSBuZXcgSW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gSW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFBpcGUoJycpKS50by5iZS5pbnN0YW5jZU9mKFBpcGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBJbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgUGlwZSgnaW5kZXg6YXx0b3VwcGVyIHxwcmVmaXg6YScpLnJ1bih7YTogXCJ0ZXN0XCJ9KSkudG8uYmUuZXF1YWwoJ2FURVNUJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnaW5kZXg6YXx0b3VwcGVyIHxwcmVmaXg6YScsIHthOiBcInRlc3RcIn0sICdhVEVTVCddLFxuICAgICAgICAgICAgWydwYXRoOmEuYi5jLmQgfCB0b3VwcGVyIHwgcHJlZml4OkhlbGxvXFxcXCAnLCB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZDogXCJ3b3JsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAnSGVsbG8gV09STEQnXSxcbiAgICAgICAgICAgIFsncGF0aDphLmIuY3xpbmRleDpkfHRvdXBwZXIgfHN1ZmZpeDp4Jywge2E6IHtiOiB7Yzoge2Q6IFwidGVzdFwifX19fSwgJ1RFU1R4J10sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCduZXcgUGlwZSgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKS5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGIpICsgJykgc2hvdWxkIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoYykgKyAnICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IG5ldyBQaXBlKGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0LnJ1bihiKSkudG8uYmUuZXF1YWwoYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ25ldyBQaXBlIGFuZCBsb2NhbGUnLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgICAgICBsZXQgaHRtbDEgPSBgXG48ZGl2IGlkPVwibW9jay10cmFuc2xhdGlvbnNcIj48L2Rpdj5cbjxzY3JpcHQgdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIiBkYXRhLW1vbnN0ZXItcm9sZT1cInRyYW5zbGF0aW9uc1wiPlxuICAgIHtcbiAgICAgICAgXCI1MVwiOiBcInh5elwiLFxuICAgICAgICBcIjUyXCI6IFwiYWJjXCIsXG4gICAgICAgIFwiNTNcIjogXCJkZWZcIlxuICAgIH1cbjwvc2NyaXB0PiAgXG5gO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKGRvbmUpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrLXRyYW5zbGF0aW9ucycpO1xuICAgICAgICAgICAgRW1iZWQuYXNzaWduVHJhbnNsYXRpb25zVG9FbGVtZW50KGVsZW0pLnRoZW4oKG8pID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsncGF0aDpzdGF0dXMgfCB0b3N0cmluZyB8IGkxOG4nLCB7c3RhdHVzOiA1MX0sIFwieHl6XCJdXG5cblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IHBpcGUgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBvYmogPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBleHBlY3RlZCA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIHRyYW5zZm9ybSgnICsgcGlwZSArICcpLnJ1bignICsgSlNPTi5zdHJpbmdpZnkob2JqKSArICcpIHJldHVybiAnICsgSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWQpLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBuZXcgUGlwZShwaXBlKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodC5ydW4ob2JqKSkudG8uYmUuZXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cblxuICAgIH0pXG5cblxufSk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXh0ZW5kfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuXG5jbGFzcyBNb2NrRm9yRXh0ZW5kcyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgfVxufVxuXG5cbmRlc2NyaWJlKCdleHRlbmQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBbXG4gICAgICAgIFtcbiAgICAgICAgICAgJ3tcInRoZWtleVwiOnt9fScse30se3RoZWtleTpuZXcgTW9ja0ZvckV4dGVuZHN9IFxuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICAne1wiYVwiOntcImJcIjpbXX19JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiMVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIjNcIlxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSwgICAgICAgIFtcbiAgICAgICAgICAgICd7XCJhXCI6e1wiYlwiOjEsXCJkXCI6MX19JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IDFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZDogMVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgJ3tcImFcIjp7XCJiXCI6MSxcImRcIjp7XCJ4XCI6W1wiY2FyXCJdLFwiZlwiOnRydWUsXCJnXCI6W119fX0nLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiAxLFxuICAgICAgICAgICAgICAgICAgICBkOiB7eDogW1wiY2FyXCJdfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZzogW11cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIF1cblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBkID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBhID0gZGF0YVxuXG4gICAgICAgIGl0KCcuZXh0ZW5kKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcpIHNob3VsZCByZXN1bHQgaW4gJyArIGQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB4ID0gZXh0ZW5kLmFwcGx5KHRoaXMsIGEpO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KHgpKS5pcy5lcXVhbChkKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbiAgICBbXG5cblxuICAgICAgICBbXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IDEsXG4gICAgICAgICAgICAgICAgICAgIGQ6IFtcImNhclwiXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZzogW11cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7fVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICBdXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGFcblxuICAgICAgICBpdCgnLmV4dGVuZCgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKSBzaG91bGQgdGhyb3cgRXJyb3IgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGV4dGVuZC5hcHBseSh0aGlzLCBhKSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbn0pXG5cblxuXG5kZXNjcmliZSgnZXh0ZW5kIGZ1bmN0aW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZXh0ZW5kIGFuIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgZnJvbSBhbm90aGVyIG9iamVjdCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0geyBhOiAxIH07XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHsgYjogMiB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBleHRlbmQodGFyZ2V0LCBzb3VyY2UpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHsgYTogMSwgYjogMiB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIG5vbi1vYmplY3QgdGFyZ2V0JywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBudWxsO1xuICAgICAgICBjb25zdCBzb3VyY2UgPSB7IGI6IDIgfTtcbiAgICAgICAgZXhwZWN0KCgpID0+IGV4dGVuZCh0YXJnZXQsIHNvdXJjZSkpLnRvLnRocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGZvciBub24tb2JqZWN0IHNvdXJjZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0geyBhOiAxIH07XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IFwibm90IGFuIG9iamVjdFwiO1xuICAgICAgICBleHBlY3QoKCkgPT4gZXh0ZW5kKHRhcmdldCwgc291cmNlKSkudG8udGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGRlZXAgb2JqZWN0IGV4dGVuc2lvbicsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0geyBhOiB7IGI6IDEgfSB9O1xuICAgICAgICBjb25zdCBzb3VyY2UgPSB7IGE6IHsgYzogMiB9LCBkOiAzIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dGVuZCh0YXJnZXQsIHNvdXJjZSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoeyBhOiB7IGI6IDEsIGM6IDIgfSwgZDogMyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGFycmF5IGV4dGVuc2lvbicsICgpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0geyBhOiBbMSwgMl0gfTtcbiAgICAgICAgY29uc3Qgc291cmNlID0geyBhOiBbMywgNF0gfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0ZW5kKHRhcmdldCwgc291cmNlKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7IGE6IFszLCA0XSB9KTtcbiAgICB9KTtcbn0pO1xuXG5cblxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgQWJzdHJhY3RDb25zdHJhaW50IH07XG5cbi8qKlxuICogQ29uc3RyYWludHMgYXJlIHVzZWQgdG8gZGVmaW5lIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBieSB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS5cbiAqXG4gKiBUaGUgdW5pZm9ybSBBUEkgb2YgdGhlIGNvbnN0cmFpbnRzIGFsbG93cyBjaGFpbnMgdG8gYmUgZm9ybWVkLlxuICpcbiAqIFRoZSBhYnN0cmFjdCBjb25zdHJhaW50IGRlZmluZXMgdGhlIGFwaSBmb3IgYWxsIGNvbnN0cmFpbnRzLiBtYWlubHkgdGhlIG1ldGhvZCBpc1ZhbGlkKCkgaXMgZGVmaW5lZC5cbiAqXG4gKiBEZXJpdmVkIGNsYXNzZXMgbXVzdCBpbXBsZW1lbnQgdGhlIG1ldGhvZCBpc1ZhbGlkKCkuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgYWJzdHJhY3QgY29uc3RyYWludFxuICovXG5jbGFzcyBBYnN0cmFjdENvbnN0cmFpbnQgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIHRoaXMgbWV0aG9kIG11c3QgcmV0dXJuIGEgcHJvbWlzZSBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRpc1ZhbGlkKHZhbHVlKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludHMvYWJzdHJhY3QtY29uc3RyYWludFwiKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEFic3RyYWN0Q29uc3RyYWludCB9IGZyb20gXCIuL2Fic3RyYWN0Lm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgSW52YWxpZCB9O1xuXG4vKipcbiAqIENvbnN0cmFpbnRzIGFyZSB1c2VkIHRvIGRlZmluZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYnkgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuXG4gKlxuICogVGhlIHVuaWZvcm0gQVBJIG9mIHRoZSBjb25zdHJhaW50cyBhbGxvd3MgY2hhaW5zIHRvIGJlIGZvcm1lZC5cbiAqXG4gKiBUaGUgaW52YWxpZCBjb25zdHJhaW50IGFsbG93cyBhbiBhbHdheXMgaW52YWxpZCBxdWVyeSB0byBiZSBwZXJmb3JtZWQuIHRoaXMgY29uc3RyYWludCBpcyBtYWlubHkgaW50ZW5kZWQgZm9yIHRlc3RpbmcuXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy9jb25zdHJhaW50cy9pbnZhbGlkLyBBIHNpbXBsZSBleGFtcGxlXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGNvbnN0cmFpbnQgdGhhdCBhbHdheXMgaW52YWxpZFxuICovXG5jbGFzcyBJbnZhbGlkIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJhaW50IHtcblx0LyoqXG5cdCAqIHRoaXMgbWV0aG9kIHJldHVybnMgYSByZWplY3RlZCBwcm9taXNlXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGlzVmFsaWQodmFsdWUpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb25zdHJhaW50cy9pbnZhbGlkXCIpO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtJbnZhbGlkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2ludmFsaWQubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnSW52YWxpZCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcuaXNWYWxpZCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgaXN2YWxpZCA9IG5ldyBJbnZhbGlkKClcblxuICAgICAgICBpdCgnc2hvdWxkIHJlc29sdmUgcHJvbWlzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBpc3ZhbGlkLmlzVmFsaWQoKS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZSkudG8uYmUudW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICJpbXBvcnQge0Jhc2V9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7QWJzdHJhY3RPcGVyYXRvcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9hYnN0cmFjdG9wZXJhdG9yLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuY2xhc3MgQWJzdHJhY3RDb25zdHJhaW50TW9jayBleHRlbmRzIEJhc2Uge1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgaXNWYWxpZCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsdWUpO1xuICAgIH1cbn1cblxuXG5kZXNjcmliZSgnQWJzdHJhY3RPcGVyYXRvcicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIHdoZW4gdGhlIGNvbnN0cmFpbnQgaXMgbm90IGNhbGwgd2l0aCBwYXJhbWV0ZXInLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IEFic3RyYWN0T3BlcmF0b3IoKVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgbm90IGFuIGVycm9yIHdoZW4gdGhlIGNvbnN0cmFpbnQgaXMgbm90IGNhbGwgd2l0aCBwYXJhbWV0ZXInLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IEFic3RyYWN0T3BlcmF0b3IobmV3IEFic3RyYWN0Q29uc3RyYWludE1vY2soKSwgbmV3IEFic3RyYWN0Q29uc3RyYWludE1vY2soKSkgICAgXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICBcblxuICAgIH0pO1xufSk7XG5cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBBYnN0cmFjdENvbnN0cmFpbnQgfSBmcm9tIFwiLi9hYnN0cmFjdC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IEFic3RyYWN0T3BlcmF0b3IgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogT3BlcmF0b3JzIGFsbG93IHlvdSB0byBsaW5rIGNvbnN0cmFpbnRzIHRvZ2V0aGVyLiBmb3IgZXhhbXBsZSwgeW91IGNhbiBjaGVjayB3aGV0aGVyIGEgdmFsdWUgaXNcbiAqIGFuIG9iamVjdCBvciBhbiBhcnJheS4gZWFjaCBvcGVyYXRvciBoYXMgdHdvIG9wZXJhbmRzIHRoYXQgYXJlIGxpbmtlZCB0b2dldGhlci5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBhYnN0cmFjdCBvcGVyYXRvciBjb25zdHJhaW50XG4gKi9cbmNsYXNzIEFic3RyYWN0T3BlcmF0b3IgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cmFpbnQge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtBYnN0cmFjdENvbnN0cmFpbnR9IG9wZXJhbnRBXG5cdCAqIEBwYXJhbSB7QWJzdHJhY3RDb25zdHJhaW50fSBvcGVyYW50QlxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IFwicGFyYW1ldGVycyBtdXN0IGJlIGZyb20gdHlwZSBBYnN0cmFjdENvbnN0cmFpbnRcIlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3BlcmFudEEsIG9wZXJhbnRCKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChcblx0XHRcdCEoXG5cdFx0XHRcdG9wZXJhbnRBIGluc3RhbmNlb2YgQWJzdHJhY3RDb25zdHJhaW50ICYmXG5cdFx0XHRcdG9wZXJhbnRCIGluc3RhbmNlb2YgQWJzdHJhY3RDb25zdHJhaW50XG5cdFx0XHQpXG5cdFx0KSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwicGFyYW1ldGVycyBtdXN0IGJlIGZyb20gdHlwZSBBYnN0cmFjdENvbnN0cmFpbnRcIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5vcGVyYW50QSA9IG9wZXJhbnRBO1xuXHRcdHRoaXMub3BlcmFudEIgPSBvcGVyYW50Qjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludHMvYWJzdHJhY3Qtb3BlcmF0b3JcIik7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBBYnN0cmFjdENvbnN0cmFpbnQgfSBmcm9tIFwiLi9hYnN0cmFjdC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IFZhbGlkIH07XG5cbi8qKlxuICogQ29uc3RyYWludHMgYXJlIHVzZWQgdG8gZGVmaW5lIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBieSB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS5cbiAqXG4gKiBUaGUgdW5pZm9ybSBBUEkgb2YgdGhlIGNvbnN0cmFpbnRzIGFsbG93cyBjaGFpbnMgdG8gYmUgZm9ybWVkLlxuICpcbiAqIFRoZSB2YWxpZCBjb25zdHJhaW50IGFsbG93cyBhbiBhbHdheXMgdmFsaWQgcXVlcnkgdG8gYmUgcGVyZm9ybWVkLiB0aGlzIGNvbnN0cmFpbnQgaXMgbWFpbmx5IGludGVuZGVkIGZvciB0ZXN0aW5nLlxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvY29uc3RyYWludHMvdmFsaWQvIEEgc2ltcGxlIGV4YW1wbGVcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgY29uc3RyYWludCB0aGF0IGFsd2F5cyB2YWxpZFxuICovXG5jbGFzcyBWYWxpZCBleHRlbmRzIEFic3RyYWN0Q29uc3RyYWludCB7XG5cdC8qKlxuXHQgKiB0aGlzIG1ldGhvZCByZXR1cm4gYSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2hlY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGlzVmFsaWQodmFsdWUpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludHMvdmFsaWRcIik7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBBYnN0cmFjdE9wZXJhdG9yIH0gZnJvbSBcIi4vYWJzdHJhY3RvcGVyYXRvci5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IE9yT3BlcmF0b3IgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogVGhlIE9yT3BlcmF0b3IgaXMgdXNlZCB0byBsaW5rIHNldmVyYWwgY29uc3RyYWludHMuIFRoZSBjb25zdHJhaW50IGlzIGZ1bGZpbGxlZCBpZiBvbmUgb2YgdGhlIGNvbnN0cmFpbnRzIGlzIGZ1bGZpbGxlZC5cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvbGlicmFyaWVzL2NvbnN0cmFpbnRzL29yb3BlcmF0b3IvIEEgc2ltcGxlIGV4YW1wbGVcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgb3Igb3BlcmF0b3JcbiAqL1xuY2xhc3MgT3JPcGVyYXRvciBleHRlbmRzIEFic3RyYWN0T3BlcmF0b3Ige1xuXHQvKipcblx0ICogdGhpcyBtZXRob2QgcmV0dXJucyBhIHByb21pc2UgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSBjaGVjay5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0aXNWYWxpZCh2YWx1ZSkge1xuXHRcdHZhciBzZWxmID0gdGhpcztcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRsZXQgYTtcblx0XHRcdGxldCBiO1xuXG5cdFx0XHRzZWxmLm9wZXJhbnRBXG5cdFx0XHRcdC5pc1ZhbGlkKHZhbHVlKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGEgPSBmYWxzZTtcblx0XHRcdFx0XHQvKiogYiBoYXMgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZCBhbmQgd2FzIG5vdCB0cnVlICovXG5cdFx0XHRcdFx0aWYgKGIgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRyZWplY3QoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRzZWxmLm9wZXJhbnRCXG5cdFx0XHRcdC5pc1ZhbGlkKHZhbHVlKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGIgPSBmYWxzZTtcblx0XHRcdFx0XHQvKiogYiBoYXMgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZCBhbmQgd2FzIG5vdCB0cnVlICovXG5cdFx0XHRcdFx0aWYgKGEgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0XHRyZWplY3QoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb25zdHJhaW50cy9vci1vcGVyYXRvclwiKTtcblx0fVxufVxuIiwgImltcG9ydCB7VmFsaWR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvdmFsaWQubWpzXCI7XG5pbXBvcnQge0ludmFsaWR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaW52YWxpZC5tanNcIjtcbmltcG9ydCB7T3JPcGVyYXRvcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9vcm9wZXJhdG9yLm1qc1wiO1xuXG5kZXNjcmliZSgnT3JPcGVyYXRvcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcuaXNWYWxpZCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtuZXcgVmFsaWQoKSwgbmV3IFZhbGlkKCksIHRydWVdLFxuICAgICAgICAgICAgW25ldyBWYWxpZCgpLCBuZXcgSW52YWxpZCgpLCB0cnVlXSxcbiAgICAgICAgICAgIFtuZXcgSW52YWxpZCgpLCBuZXcgVmFsaWQoKSwgdHJ1ZV0sXG4gICAgICAgICAgICBbbmV3IEludmFsaWQoKSwgbmV3IEludmFsaWQoKSwgZmFsc2VdXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdjb25zdHJhaW50LmlzVmFsaWQoKSBzaG91bGQgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGNvbnN0cmFpbnQgPSBuZXcgT3JPcGVyYXRvcihhLCBiKTtcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LmlzVmFsaWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYyA9PT0gdHJ1ZSA/IGRvbmUoKSA6IGRvbmUobmV3IEVycm9yKCkpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYyA9PT0gdHJ1ZSA/IGRvbmUobmV3IEVycm9yKCkpIDogZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG59KTtcblxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RDb25zdHJhaW50IH0gZnJvbSBcIi4vYWJzdHJhY3QubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBJc09iamVjdCB9O1xuXG4vKipcbiAqIENvbnN0cmFpbnRzIGFyZSB1c2VkIHRvIGRlZmluZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYnkgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuXG4gKlxuICogVGhlIHVuaWZvcm0gQVBJIG9mIHRoZSBjb25zdHJhaW50cyBhbGxvd3MgY2hhaW5zIHRvIGJlIGZvcm1lZC5cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvbGlicmFyaWVzL2NvbnN0cmFpbnRzL2lzb2JqZWN0LyBBIHNpbXBsZSBleGFtcGxlXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGNvbnN0cmFpbnQgdG8gY2hlY2sgaWYgYSB2YWx1ZSBpcyBhbiBvYmplY3RcbiAqL1xuY2xhc3MgSXNPYmplY3QgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cmFpbnQge1xuXHQvKipcblx0ICogdGhpcyBtZXRob2QgcmV0dXJucyBhIHByb21pc2UgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSBjaGVjay5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0aXNWYWxpZCh2YWx1ZSkge1xuXHRcdGlmIChpc09iamVjdCh2YWx1ZSkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdCh2YWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbnN0cmFpbnQvaXMtb2JqZWN0XCIpO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtJc09iamVjdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pc29iamVjdC5tanNcIjtcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCdJc09iamVjdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcuaXNWYWxpZCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgY29uc3RyYWludCA9IG5ldyBJc09iamVjdCgpXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXNvbHZlIHByb21pc2UnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3RyYWludC5pc1ZhbGlkKHt9KS50aGVuKHIgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChyKS5pcy5hKCdvYmplY3QnKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcInNob3VsZCBub3QgcmVhY2hlZDogXCIgKyBlKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEFic3RyYWN0T3BlcmF0b3IgfSBmcm9tIFwiLi9hYnN0cmFjdG9wZXJhdG9yLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgQW5kT3BlcmF0b3IgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogVGhlIEFuZE9wZXJhdG9yIGlzIHVzZWQgdG8gbGluayBzZXZlcmFsIGNvbnN0cmFpbnRzLiBUaGUgY29uc3RyYWludCBpcyBmdWxmaWxsZWQgaWYgYWxsIGNvbnN0cmFpbnRzIG9mIHRoZSBvcGVyYXRvcnMgYXJlIGZ1bGZpbGxlZC5cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvbGlicmFyaWVzL2NvbnN0cmFpbnRzL2FuZG9wZXJhdG9yLyBBIHNpbXBsZSBleGFtcGxlXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGFuZCBvcGVyYXRvciBjb25zdHJhaW50XG4gKi9cbmNsYXNzIEFuZE9wZXJhdG9yIGV4dGVuZHMgQWJzdHJhY3RPcGVyYXRvciB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgcHJvbWlzZSBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRpc1ZhbGlkKHZhbHVlKSB7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKFtcblx0XHRcdHRoaXMub3BlcmFudEEuaXNWYWxpZCh2YWx1ZSksXG5cdFx0XHR0aGlzLm9wZXJhbnRCLmlzVmFsaWQodmFsdWUpLFxuXHRcdF0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb25zdHJhaW50cy9hbmQtb3BlcmF0b3JcIik7XG5cdH1cbn1cbiIsICJpbXBvcnQge1ZhbGlkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL3ZhbGlkLm1qc1wiO1xuaW1wb3J0IHtJbnZhbGlkfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2ludmFsaWQubWpzXCI7XG5pbXBvcnQge0FuZE9wZXJhdG9yfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2FuZG9wZXJhdG9yLm1qc1wiO1xuXG5kZXNjcmliZSgnQW5kT3BlcmF0b3InLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbbmV3IFZhbGlkKCksIG5ldyBWYWxpZCgpLCB0cnVlXSxcbiAgICAgICAgICAgIFtuZXcgVmFsaWQoKSwgbmV3IEludmFsaWQoKSwgZmFsc2VdLFxuICAgICAgICAgICAgW25ldyBJbnZhbGlkKCksIG5ldyBWYWxpZCgpLCBmYWxzZV0sXG4gICAgICAgICAgICBbbmV3IEludmFsaWQoKSwgbmV3IEludmFsaWQoKSwgZmFsc2VdXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdjb25zdHJhaW50LmlzVmFsaWQoKSBzaG91bGQgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGNvbnN0cmFpbnQgPSBuZXcgQW5kT3BlcmF0b3IoYSwgYik7XG4gICAgICAgICAgICAgICAgY29uc3RyYWludC5pc1ZhbGlkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGMgPT09IHRydWUgPyBkb25lKCkgOiBkb25lKG5ldyBFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGMgPT09IHRydWUgPyBkb25lKG5ldyBFcnJvcigpKSA6IGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xufSk7XG5cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RDb25zdHJhaW50IH0gZnJvbSBcIi4vYWJzdHJhY3QubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBJc0FycmF5IH07XG5cbi8qKlxuICogQ29uc3RyYWludHMgYXJlIHVzZWQgdG8gZGVmaW5lIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBieSB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS5cbiAqXG4gKiBUaGUgdW5pZm9ybSBBUEkgb2YgdGhlIGNvbnN0cmFpbnRzIGFsbG93cyBjaGFpbnMgdG8gYmUgZm9ybWVkLlxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvY29uc3RyYWludHMvaXNhcnJheS8gQSBzaW1wbGUgZXhhbXBsZVxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBjb25zdHJhaW50IHRvIGNoZWNrIGlmIGEgdmFsdWUgaXMgYW4gYXJyYXlcbiAqL1xuY2xhc3MgSXNBcnJheSBleHRlbmRzIEFic3RyYWN0Q29uc3RyYWludCB7XG5cdC8qKlxuXHQgKiB0aGlzIG1ldGhvZCByZXR1cm5zIGEgcHJvbWlzZSBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRpc1ZhbGlkKHZhbHVlKSB7XG5cdFx0aWYgKGlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb25zdHJhaW50L2lzLWFycmF5XCIpO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtJc0FycmF5fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2lzYXJyYXkubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnSXNBcnJheScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcuaXNWYWxpZCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgY29uc3RyYWludCA9IG5ldyBJc0FycmF5KClcblxuICAgICAgICBpdCgnc2hvdWxkIHJlc29sdmUgcHJvbWlzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50LmlzVmFsaWQoWzEsMiwzXSkudGhlbihyID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3QocikuaXMuYSgnYXJyYXknKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcInNob3VsZCBub3QgcmVhY2hlZDogXCIgKyBlKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgImltcG9ydCB7VmFsaWR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvdmFsaWQubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnVmFsaWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmlzVmFsaWQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGNvbnN0cmFpbnQgPSBuZXcgVmFsaWQoKVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmVzb2x2ZSBwcm9taXNlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnQuaXNWYWxpZCh7fSkudGhlbihyID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcInNob3VsZCBub3QgcmVhY2hlZDogXCIgKyBlKSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Tm9kZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9ub2RlLm1qc1wiO1xuaW1wb3J0IHtOb2RlTGlzdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9ub2RlbGlzdC5tanNcIjtcblxuZGVzY3JpYmUoJ05vZGVMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCcjY29uc3RydWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIGFuIGVtcHR5IE5vZGVMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG5vZGVMaXN0ID0gbmV3IE5vZGVMaXN0KCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChub2RlTGlzdC5zaXplKS50by5lcXVhbCgwKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBjcmVhdGUgYSBOb2RlTGlzdCBmcm9tIGFuIGFycmF5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG5vZGVMaXN0ID0gbmV3IE5vZGVMaXN0KFtcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JyksXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKVxuICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChub2RlTGlzdC5zaXplKS50by5lcXVhbCgzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBjcmVhdGUgYSBOb2RlTGlzdCBmcm9tIGEgTm9kZUxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgbm9kZUxpc3QgPSBuZXcgTm9kZUxpc3QoW1xuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKSxcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JyksXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpXG4gICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgbGV0IG5vZGVMaXN0MiA9IG5ldyBOb2RlTGlzdChub2RlTGlzdCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChub2RlTGlzdDIuc2l6ZSkudG8uZXF1YWwoMyk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICB9KTtcbiAgICBcbiAgICAgXG4gICAgaXQoJ2NyZWF0ZSBOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpKS5pcy5pbnN0YW5jZW9mKE5vZGVMaXN0KTtcbiAgICB9KVxuXG4gICAgaXQoJ2FkZCBOb2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuYWRkKG5ldyBOb2RlKCkpKS50by5iZS5pbnN0YW5jZW9mKE5vZGVMaXN0KTtcbiAgICB9KVxuXG4gICAgaXQoJ3JlbW92ZSBOb2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkucmVtb3ZlKG5ldyBOb2RlKCkpKS50by5iZS5pbnN0YW5jZW9mKE5vZGVMaXN0KTtcbiAgICB9KVxuXG4gICAgaXQoJ2hhcyB1bmtub3duIE5vZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKS5oYXMobmV3IE5vZGUpKS50by5iZS5mYWxzZTtcbiAgICB9KVxuXG4gICAgaXQoJ2hhcyBhZGRlZCBOb2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBuID0gbmV3IE5vZGU7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKS5hZGQobikuaGFzKG4pKS50by5iZS50cnVlO1xuICAgIH0pXG4gICAgXG4gICAgaXQoJ3RvU3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBuID0gbmV3IE5vZGU7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKS5hZGQobmV3IE5vZGUoJ2EnKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnYicpKSkudG9TdHJpbmcoKSkudG8uYmUuZXF1YWwoJ2FcXG4gXHUyNTE0YicpO1xuICAgIH0pXG5cbiAgICBpdCgndGhyb3cgZXhjZXB0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QoKCkgPT4gbmV3IE5vZGVMaXN0KCkuYWRkKDEpKS50by50aHJvdyhFcnJvcik7XG4gICAgfSlcblxuXG59KTsiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0Jhc2V9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7aW5zdGFuY2VTeW1ib2x9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RhbnRzLm1qc1wiO1xuXG5cblxuY2xhc3MgQmFzZURpZmZlcmVudFJlYWxtIGV4dGVuZHMgT2JqZWN0IHtcbiAgICBcblxuICAgIHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcbiAgICAgICAgcmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL2Jhc2VcIik7XG4gICAgfVxuXG5cbn1cblxuY2xhc3MgU3ViY2xhc3MgZXh0ZW5kcyBCYXNlRGlmZmVyZW50UmVhbG0ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG4gICAgICAgIHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9zdWJjbGFzc1wiKTtcbiAgICB9XG59XG5cbmRlc2NyaWJlKCdCYXNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ25ldyBCYXNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdpcyBpbnN0YW5jZSBvZiBCYXNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBCYXNlKS50by5iZS5pbnN0YW5jZU9mKEJhc2UpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgT2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBCYXNlKS50by5iZS5pbnN0YW5jZU9mKE9iamVjdCk7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcbiAgICBcbiAgICBkZXNjcmliZSgnaW5zdGFuY29mJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdpcyBpbnN0YW5jZSBvZiBCYXNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBCYXNlKS50by5iZS5pbnN0YW5jZU9mKEJhc2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzdWJjbGFzcyBpbnN0YW5jZW9mJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAobmV3IFN1YmNsYXNzIGluc3RhbmNlb2YgQmFzZSkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0cnVlKS50by5iZS50cnVlO1xuICAgICAgICAgICAgfSBlbHNlICB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGZhbHNlKS50by5iZS50cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxufSkiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtNZWRpYVR5cGUsIHBhcnNlTWVkaWFUeXBlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL21lZGlhdHlwZS5tanNcIjtcblxuZGVzY3JpYmUoJ0RhdGF1cmwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBbXG4gICAgICAgIFtcIiovKlwiLFwiKlwiLCcqJ10sXG4gICAgICAgIFtcInRleHQvKlwiLFwidGV4dFwiLCcqJ10sXG4gICAgICAgIFtcIiovdGVzdFwiLFwiKlwiLCd0ZXN0J10sXG4gICAgICAgIFtcImltYWdlL3BuZ1wiLCBcImltYWdlXCIsIFwicG5nXCJdLFxuICAgICAgICBbXCJhdWRpby9tcDNcIiwgXCJhdWRpb1wiLCBcIm1wM1wiXSxcbiAgICAgICAgW1widmlkZW8vbXBlZ1wiLCBcInZpZGVvXCIsIFwibXBlZ1wiXSxcbiAgICAgICAgW1widGV4dC9wbGFpblwiLCBcInRleHRcIiwgXCJwbGFpblwiXSxcbiAgICAgICAgW1widGV4dC9odG1sXCIsIFwidGV4dFwiLCBcImh0bWxcIl0sXG4gICAgICAgIFtcInRleHQvaHRtbDtjaGFyc2V0PVVTLUFTQ0lJXCIsIFwidGV4dFwiLCBcImh0bWxcIl0sXG4gICAgICAgIFtcInRleHQvaHRtbDtjaGFyc2V0PVxcXCJVUy1BU0NJSVxcXCJcIiwgXCJ0ZXh0XCIsIFwiaHRtbFwiXSxcblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICBpdCgncGFyc2VNZWRpYVR5cGUoJyArIGEgKyAnKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgZCA9IHBhcnNlTWVkaWFUeXBlKGEpO1xuXG4gICAgICAgICAgICBleHBlY3QoZCkuaXMuaW5zdGFuY2VvZihNZWRpYVR5cGUpO1xuICAgICAgICAgICAgZXhwZWN0KGQudG9TdHJpbmcoKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICBleHBlY3QoZC50eXBlKS50by5iZS5lcXVhbChiKTtcbiAgICAgICAgICAgIGV4cGVjdChkLnN1YnR5cGUpLnRvLmJlLmVxdWFsKGMpO1xuICAgICAgICAgICAgZXhwZWN0KGQucGFyYW1ldGVyKS5pcy5pbnN0YW5jZW9mKE1hcClcbiAgICAgICAgfSlcblxuICAgIH0pO1xuXG4gICAgW1xuICAgICAgICBbXCJ2aWRlby9cIl0sXG4gICAgICAgIFtcInRleHRcIl0sXG4gICAgICAgIFtcIi9tcDNcIl0sXG4gICAgICAgIFtcInRleHQvaHRtbDtjaGFyc2V0VVMtQVNDSUlcIl0sXG4gICAgICAgIFtcInRleHQvaHRtbDtjaGFyc2V0XFxcIlVTLUFTQ0lJXFxcIlwiXSxcblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgaXQoJycgKyBhICsgJyBzaG91bGQgdGhyb3cgZXhjZXB0aW9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBleHBlY3QoKCk9PntwYXJzZU1lZGlhVHlwZShhKX0pLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICBcbiAgICAgICAgfSlcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtUb2tlbkxpc3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvdG9rZW5saXN0Lm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdUb2tlbkxpc3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLnRvU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCB0b2tlbkxpc3QgPSBuZXcgVG9rZW5MaXN0KClcbiAgICAgICAgbGV0IHJlc3VsdCA9IHRva2VuTGlzdC50b1N0cmluZygpO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uYmUuYSgnc3RyaW5nJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzZXQgYW5kIHJlbW92ZSByZXR1cm4gYSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5iZS5hKCdzdHJpbmcnKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnaW5pdCB3aXRoIHN0cmluZyBpdGVyYWJsZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdCgnICsgdHlwZW9mIGEgKyAnKSB0aHJvdyBUeXBlRXJyb3IgJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgdG9rZW5zID0gW1wiYWJjXCIsIFwiZGVmXCIsIFwiZ2hpXCJdXG4gICAgICAgICAgICBsZXQgbGlzdCA9IG5ldyBUb2tlbkxpc3QodG9rZW5zKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwiYWJjIGRlZiBnaGlcIik7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnaW5pdCB3aXRoIGl0ZXJhYmxlIHdpdGhvdXQgc3RyaW5nIHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdCgnICsgdHlwZW9mIGEgKyAnKSB0aHJvdyBUeXBlRXJyb3IgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHRva2VucyA9IFtcImFiY1wiLCA0LCBcImdoaVwiXVxuICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBUb2tlbkxpc3QodG9rZW5zKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdpbml0IHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICAvLyBjdXJyZW50LCBleHBlY3RlZCwgdHlwZXJyb3JcbiAgICAgICAgICAgIFsndGVzdDEnLCBcInRlc3QxXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFsndGVzdDEgdGVzdDInLCBcInRlc3QxIHRlc3QyXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIFwiXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgdW5kZWZpbmVkLCB0cnVlXSwgLy8gTmFOXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFsyLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgW2ZhbHNlLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgW3RydWUsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbNC41LCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgW3t9LCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgW1tcIjFcIiwgXCIyXCIsIFwiM1wiXSwgJzEgMiAzJywgZmFsc2VdLCAvLyBpdGVyYWJsZSBzdHJpbmdzXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2UsIHRydWVdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KCcgKyB0eXBlb2YgYSArICcpIHRocm93IFR5cGVFcnJvciAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgVG9rZW5MaXN0KGEpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnbmV3IFRva2VuTGlzdCgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgVG9rZW5MaXN0KGEpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2l0ZXJhdG9yIHByb3RvY29sJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBsaXN0O1xuICAgICAgICBpdCgnLmFkZCgnICsgXCJzZWNvbmRcIiArICcpIHNob3VsZCByZXR1cm4gVG9rZW5MaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmdldEl0ZXJhdG9yKCkpLnRvLmJlLmFuKCdvYmplY3QnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5hZGQoJyArIFwic2Vjb25kXCIgKyAnKSBzaG91bGQgcmV0dXJuIFRva2VuTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KFsuLi5saXN0XSkudG8uYmUuYW4oJ2FycmF5Jyk7XG4gICAgICAgICAgICBleHBlY3QoWy4uLmxpc3RdKS50by5iZS5hbignYXJyYXknKS50by5pbmNsdWRlKCdzdGFydCcpLnRvLmluY2x1ZGUoJ2VuZCcpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmVudHJpZXMoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbGlzdDtcbiAgICAgICAgaXQoJy5lbnRyaWVzKCkgc2hvdWxkIHJldHVybiBBcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5lbnRyaWVzKCkpLnRvLmJlLmFuKCdhcnJheScpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnLmVudHJpZXMoKSBzaG91bGQgcmV0dXJuIEFycmF5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBlbmRcIikuZW50cmllcygpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QpLnRvLmJlLmFuKCdhcnJheScpLnRvLmluY2x1ZGUoJ3N0YXJ0JykudG8uaW5jbHVkZSgnZW5kJyk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuZm9yRWFjaCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBsaXN0O1xuICAgICAgICBpdCgnLmZvckVhY2goKSBzaG91bGQgaXRlcmF0ZSBvdmVyIHRva2VubGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwiYWFhIGJiYiBjY2MgZGRkIGVlZSBmZmZcIik7XG5cbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBcIlwiXG4gICAgICAgICAgICBsaXN0LmZvckVhY2goKGEpID0+IHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gXCIhXCIgKyBhICsgXCIhXCI7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGEpLnRvLmJlLmFuKCdzdHJpbmcnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkuaXMuZXF1YWwoXCIhYWFhISFiYmIhIWNjYyEhZGRkISFlZWUhIWZmZiFcIilcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5lbnRyaWVzKCkgc2hvdWxkIHJldHVybiBBcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgZW5kXCIpLmVudHJpZXMoKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0KS50by5iZS5hbignYXJyYXknKS50by5pbmNsdWRlKCdzdGFydCcpLnRvLmluY2x1ZGUoJ2VuZCcpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY29udGFpbnMgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgbGlzdFxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChzdGFydCwgbWlkZGxlIGVuZCkgc2hvdWxkIGNvbnRhaW4gbWlkZGxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBtaWRkbGUgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMoJ3N0YXJ0JykpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5jb250YWlucygnbWlkZGxlJykpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5jb250YWlucygnZW5kJykpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5jb250YWlucyhbJ2VuZCcsICdzdGFydCcsICdtaWRkbGUnXSkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KHN0YXJ0LCBtaWRkbGUgZW5kKSBzaG91bGQgbm90IGNvbnRhaW4geHl6JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBtaWRkbGUgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMoJ3h5eicpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKFsnZW5kJywgJ3N0YXJ0JywgJ21pZGRsZScsICd4eXonXSkpLnRvLmJlLmZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChzdGFydCwgbWlkZGxlIGVuZCkgc2hvdWxkIG5vdCBjb250YWluIHVuZGVmaW5lZCBudWxsIE5hTicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgbWlkZGxlIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKHVuZGVmaW5lZCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMocGFyc2VJbnQoXCJhXCIpKSkudG8uYmUuZmFsc2U7IC8vIE5hTlxuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMobnVsbCkpLnRvLmJlLmZhbHNlOyAvLyBOYU5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCd0b2dnbGUgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgbGlzdFxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChzdGFydCBtaWRkbGUgZW5kKS50b2dnbGUobmV3LXZhbHVlKSBzaG91bGQgY29udGFpbiBuZXctdmFsdWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IG1pZGRsZSBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC50b2dnbGUoJ25ldy12YWx1ZScpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwic3RhcnQgbWlkZGxlIGVuZCBuZXctdmFsdWVcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KHN0YXJ0IG1pZGRsZSBlbmQpLnRvZ2dsZShtaWRkbGUpIHNob3VsZCBub3QgY29udGFpbiBtaWRkbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IG1pZGRsZSBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC50b2dnbGUoJ21pZGRsZScpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwic3RhcnQgZW5kXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdCgpLnRvZ2dsZSgpIHNob3VsZCAuLi4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFRva2VuTGlzdChcImFiYyBkZWYgZ2hpXCIpLnRvZ2dsZShcImRlZiB4eXpcIikudG9TdHJpbmcoKSkudG8uZXF1YWwoXCJhYmMgZ2hpIHh5elwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoKS50b2dnbGUoKSBzaG91bGQgLi4uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUb2tlbkxpc3QoXCJhYmMgZGVmIGdoaVwiKS50b2dnbGUoW1wiYWJjXCIsIFwieHl6XCJdKS50b1N0cmluZygpKS50by5lcXVhbChcImRlZiBnaGkgeHl6XCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdCgpLnRvZ2dsZSgpIHNob3VsZCAuLi4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFRva2VuTGlzdChcImFiYyBkZWYgZ2hpXCIpLnRvZ2dsZSh1bmRlZmluZWQpLnRvU3RyaW5nKCkpLnRvLmVxdWFsKFwiYWJjIGRlZiBnaGlcIik7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdtYW5pcHVsYXRlIHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbGlzdFxuXG4gICAgICAgIGl0KCdyZXN1bHQgVG9rZW5MaXN0KFwiJyArIFwic3RhcnRcIiArICdcIikgc2hvdWxkIGJlIFwiJyArIFwic3RhcnRcIiArICdcIicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0XCIpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuYWRkKCcgKyBcInNlY29uZFwiICsgJykgc2hvdWxkIHJldHVybiBUb2tlbkxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0XCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuYWRkKFwic2Vjb25kXCIpKS50by5iZS5hbi5pbnN0YW5jZW9mKFRva2VuTGlzdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuYWRkKCcgKyBcInNlY29uZFwiICsgJykudG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIFwic3RhcnQgc2Vjb25kXCIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmFkZChcInNlY29uZFwiKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IHNlY29uZFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5hZGQoJyArIFwic2Vjb25kIHRoaXJkXCIgKyAnKS50b1N0cmluZygpIHNob3VsZCByZXR1cm4gXCJzdGFydCBzZWNvbmQgdGhpcmRcIiAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0XCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuYWRkKFwic2Vjb25kIHRoaXJkXCIpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwic3RhcnQgc2Vjb25kIHRoaXJkXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnLmFkZCgnICsgXCJbc2Vjb25kLHRoaXJkXVwiICsgJykudG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIFwic3RhcnQgc2Vjb25kIHRoaXJkXCIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmFkZChbXCJzZWNvbmRcIiwgXCJ0aGlyZFwiXSkudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCBzZWNvbmQgdGhpcmRcIik7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgaXQoJy5jbGVhcigpLnRvU3RyaW5nKCkgc2hvdWxkIFwiXCIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmFkZChbXCJzZWNvbmRcIiwgXCJ0aGlyZFwiXSkuY2xlYXIoKS50b1N0cmluZygpKS5pcy5lcXVhbChcIlwiKTtcbiAgICAgICAgfSk7XG5cblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIikucmVtb3ZlKCcgKyBcInNlY29uZFwiICsgJykgc2hvdWxkIHJldHVybiBUb2tlbkxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5yZW1vdmUoXCJzZWNvbmRcIikpLnRvLmJlLmFuLmluc3RhbmNlb2YoVG9rZW5MaXN0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpLnJlbW92ZSgnICsgXCJzZWNvbmRcIiArICcpLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IHRoaXJkIGVuZFwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnJlbW92ZShcInNlY29uZFwiKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IHRoaXJkIGVuZFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpLnJlbW92ZSgnICsgXCJzZWNvbmQgdGhpcmRcIiArICcpLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IGVuZFwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnJlbW92ZShcInNlY29uZCB0aGlyZFwiKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IGVuZFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpLnJlbW92ZSgnICsgXCJbc2Vjb25kLHRoaXJkXVwiICsgJykudG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIFwic3RhcnQgZW5kXCIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QucmVtb3ZlKFtcInNlY29uZFwiLCBcInRoaXJkXCJdKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IGVuZFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpLnJlcGxhY2Uoc2Vjb25kLCB4eXopLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IHh5eiB0aGlyZCBlbmRcIiAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5yZXBsYWNlKFwic2Vjb25kXCIsIFwieHl6XCIpKS50by5iZS5pbnN0YW5jZU9mKFRva2VuTGlzdCk7XG4gICAgICAgICAgICBleHBlY3QobGlzdC50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IHh5eiB0aGlyZCBlbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZXBsYWNlKGVuZCwgeHl6KS50b1N0cmluZygpIHNob3VsZCByZXR1cm4gXCJzdGFydCBzZWNvbmQgdGhpcmQgeHl6XCIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QucmVwbGFjZShcImVuZFwiLCBcInh5elwiKSkudG8uYmUuaW5zdGFuY2VPZihUb2tlbkxpc3QpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCBzZWNvbmQgdGhpcmQgeHl6XCIpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxufSk7XG5cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtleHRlbmR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQge2lzT2JqZWN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHtPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlci5tanNcIjtcblxuaW1wb3J0IHtQcm94eU9ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5cbmRlc2NyaWJlKCdQcm94eU9ic2VydmVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ2NyZWF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBQcm94eU9ic2VydmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG8gPSBuZXcgUHJveHlPYnNlcnZlcih7fSk7XG4gICAgICAgICAgICBleHRlbmQoby5nZXRTdWJqZWN0KCksIHthOiA0fSk7XG4gICAgICAgICAgICBleHBlY3Qoby5nZXRSZWFsU3ViamVjdCgpKS5pcy5lcWwoe2E6IDR9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc2V0U3ViamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gb2JzZXJ2ZXInLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IG8gPSBuZXcgUHJveHlPYnNlcnZlcih7YTogMX0pO1xuICAgICAgICAgICAgZXhwZWN0KG8uZ2V0UmVhbFN1YmplY3QoKSkuaXMuZXFsKHthOiAxfSk7XG4gICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgICAgICBvLmF0dGFjaE9ic2VydmVyKG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHRoaXMpICYmIHRoaXMgaW5zdGFuY2VvZiBQcm94eU9ic2VydmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICAgICAgLy8gb25seSBvbmUgY2hhbmdlIGFzIG5vdGlmeSBydW5zIGxhdGVyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZG9uZShcImNhbGxlZCBmb3IgZXJyb3JcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcInRoaXMgaXMgbm90IFByb3h5T2JzZXJ2ZXJcIikpXG4gICAgICAgICAgICB9KSlcblxuICAgICAgICAgICAgby5nZXRTdWJqZWN0KCkuYyA9IDQ7XG4gICAgICAgICAgICBleHBlY3Qoby5nZXRSZWFsU3ViamVjdCgpKS5pcy5lcWwoe2E6IDEsIGM6IDR9KTtcblxuICAgICAgICAgICAgby5zZXRTdWJqZWN0KHtiOiAyfSk7XG4gICAgICAgICAgICBleHBlY3Qoby5nZXRSZWFsU3ViamVjdCgpKS5pcy5lcWwoe2I6IDJ9KTtcblxuICAgICAgICAgICAgby5nZXRTdWJqZWN0KCkuZCA9IDU7XG4gICAgICAgICAgICBleHBlY3Qoby5nZXRSZWFsU3ViamVjdCgpKS5pcy5lcWwoe2I6IDIsIGQ6IDV9KTtcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NyZWF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBQcm94eU9ic2VydmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG8gPSBuZXcgUHJveHlPYnNlcnZlcih7fSk7XG4gICAgICAgICAgICBleHBlY3QobykuaXMuaW5zdGFuY2VPZihQcm94eU9ic2VydmVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncHJveHkgb2JqZWN0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ1Byb3h5IG9iamVjdHMgc2hvdWxkIG5vdCBiZSByZWNvbW1pdHRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvID0gbmV3IFByb3h5T2JzZXJ2ZXIoe2E6IHtiOiB0cnVlfX0pO1xuICAgICAgICAgICAgby5nZXRTdWJqZWN0KCkuYS5iID0gby5nZXRTdWJqZWN0KCk7XG4gICAgICAgICAgICBvLmdldFN1YmplY3QoKS5hLmIuYS5iID0gZmFsc2U7XG4gICAgICAgICAgICAvL2V4cGVjdChvLmdldFN1YmplY3QoKT09PXAuZ2V0U3ViamVjdCgpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdub3RpZnkgb2JzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgaW5mb3JtIG9ic2VydmVyJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgICAgICAgIC8vIHRoZSBtZXRob2QgaXMgY2FsbGVkIHR3aWNlLCBvbmNlIGZvciBkZWZpbmVQcm9wZXJ0eSBhbmQgZm9yIHNldCB0cmFwXG4gICAgICAgICAgICBsZXQgbyA9IG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdCh0aGlzKSAmJiB0aGlzIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcikge1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudGVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKFwidGhpcyBpcyBub3QgUHJveHlPYnNlcnZlclwiKSlcbiAgICAgICAgICAgIH0sIHRydWUpXG5cbiAgICAgICAgICAgIGxldCByZWFsU3ViamVjdCA9IHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGM6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZDogNVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHAgPSBuZXcgUHJveHlPYnNlcnZlcihyZWFsU3ViamVjdCk7XG4gICAgICAgICAgICBleHBlY3QocCkuaXMuaW5zdGFuY2VPZihQcm94eU9ic2VydmVyKTtcbiAgICAgICAgICAgIGV4cGVjdChwLmF0dGFjaE9ic2VydmVyKG8pKS5pcy5pbnN0YW5jZU9mKFByb3h5T2JzZXJ2ZXIpO1xuXG4gICAgICAgICAgICBsZXQgcyA9IHAuZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgbGV0IHIgPSBwLmdldFJlYWxTdWJqZWN0KCk7XG5cbiAgICAgICAgICAgIHMuYS5kID0gZmFsc2U7XG4gICAgICAgICAgICBzLmEuYi5kID0gMjtcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vb3NzL2xpYnJhcmllcy9qYXZhc2NyaXB0L21vbnN0ZXIvLS9pc3N1ZXMvNDNcbiAgICAgKi9cbiAgICBkZXNjcmliZSgnUmVmbGVjdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnY2hlY2sgUmVmbGVjdC5zZXQoKSB3aXRoIFN1YmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgcjtcblxuICAgICAgICAgICAgY29uc3Qgb2JqID0gKG5ldyBQcm94eU9ic2VydmVyKHt9KSkuZ2V0U3ViamVjdCgpO1xuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgXCJ5ZXMhXCIsXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIFwibm9cIlxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ialsnZGF0YSddID0gdmFsdWVcbiAgICAgICAgICAgICAgICB9KS50by5ub3QudGhyb3coKTtcbiAgICAgICAgICAgICAgICAvL3IgPSBSZWZsZWN0LnNldChvYmosICdkYXRhJywgdmFsdWUpXG4gICAgICAgICAgICAgICAgLy9leHBlY3QocikudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KTtcblxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGhhdCcsIHt0aGF0OiAnY2hlY2tlZDEnfV0sXG4gICAgICAgICAgICBbJ3RoYXQnLCBuZXcgUHJveHkoe3RoYXQ6ICdjaGVja2VkMid9LCB7fSldLFxuICAgICAgICAgICAgWyd0aGF0JywgKG5ldyBQcm94eU9ic2VydmVyKHt0aGF0OiAnY2hlY2tlZDMnfSkpLmdldFJlYWxTdWJqZWN0KCldLFxuICAgICAgICAgICAgWyd0aGF0JywgKG5ldyBQcm94eU9ic2VydmVyKHt0aGF0OiAnY2hlY2tlZDQnfSkpLmdldFN1YmplY3QoKV1cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBrZXkgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2NoZWNrIFJlZmxlY3Quc2V0KCcgKyBrZXkgKyAnLCcgKyBKU09OLnN0cmluZ2lmeSh0YXJnZXQpICsgJykgc2hvdWxkIHdyaXRhYmxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZTtcblxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgXCIxXCIsXG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQsIGtleSlbJ3dyaXRhYmxlJ10sICd3cml0YWJsZSBmb3IgJyArIHZhbHVlICsgJyBzaG91bGQgcmV0dXJuIHRydWUnKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChSZWZsZWN0LnNldCh0YXJnZXQsIGtleSwgdmFsdWUpLCAnc2V0IGZvciAnICsgdmFsdWUgKyAnIHNob3VsZCByZXR1cm4gdHJ1ZScpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LCBrZXkpWyd3cml0YWJsZSddLCAnd3JpdGFibGUgZm9yICcgKyB2YWx1ZSArICcgc2hvdWxkIHJldHVybiB0cnVlJykudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbm90aWZ5IG9ic2VydmVyIHdpdGggY2hhbmdlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgb3JpZ2luYWwsIG9ic2VydmVyLCBwcm94eTtcblxuICAgICAgICBiZWZvcmUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgb3JpZ2luYWwgPSB7fTtcbiAgICAgICAgICAgIHByb3h5ID0gbmV3IFByb3h5T2JzZXJ2ZXIob3JpZ2luYWwpO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnYScsIDQsIEpTT04uc3RyaW5naWZ5KHthOiA0fSldLFxuICAgICAgICAgICAgWydiJywgOSwgSlNPTi5zdHJpbmdpZnkoe2E6IDQsIGI6IDl9KV1cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3NldCBrZXkgJyArIGEgKyAnIHZhbHVlICcgKyBiICsgJyBleHBlY3QgJyArIGMsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgY291bnRlciA9IDA7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeSh0aGlzLmdldFJlYWxTdWJqZWN0KCkpKS5pcy5lcXVhbChjKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIHByb3h5LmF0dGFjaE9ic2VydmVyKG9ic2VydmVyKVxuICAgICAgICAgICAgICAgIGxldCBzdWJqZWN0ID0gcHJveHkuZ2V0U3ViamVjdCgpXG5cbiAgICAgICAgICAgICAgICBzdWJqZWN0W2FdID0gYjtcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbm90aWZ5IG9ic2VydmVyICcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBwcm9taXNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHByb3h5ID0gbmV3IFByb3h5T2JzZXJ2ZXIoe30pO1xuICAgICAgICAgICAgbGV0IG9ic2VydmVyID0gbmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBwcm94eS5hdHRhY2hPYnNlcnZlcihvYnNlcnZlcilcbiAgICAgICAgICAgIGV4cGVjdChwcm94eS5ub3RpZnlPYnNlcnZlcnMoKSkuaXMuaW5zdGFuY2VPZihQcm9taXNlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn0pXG5cbiIsICJpbXBvcnQge1xuICAgIFZlcnNpb25cbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy92ZXJzaW9uLm1qc1wiXG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCdWZXJzaW9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy5jb21wYXJlVG8oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJzEuMi4zJywgJzEuMi4zJywgMF0sXG4gICAgICAgICAgICBbJzEuMi4yJywgJzEuMi4zJywgLTFdLFxuICAgICAgICAgICAgWycyJywgJzIuMC4wJywgMF0sXG4gICAgICAgICAgICBbJzEuMi40JywgJzEuMi4zJywgMV1cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gJyArIGMgKyAnIHdoZW4gdGhlIHZhbHVlICcgKyBhICsgJyBpcyAnICsgYiArICcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBWZXJzaW9uKGEpLmNvbXBhcmVUbyhiKSkudG8uYmUuZXF1YWwoYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudG9TdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJzEuMS4xJywgJzIuMycsIDMsICcxLjIuMyddLFxuICAgICAgICAgICAgWycxLjIuNCcsICcxLjIuMycsIDUsICcxLjEuNSddXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZCA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIHJldHVybiAnICsgZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgVmVyc2lvbihhLCBiLCBjKS50b1N0cmluZygpKS50by5iZS5lcXVhbChkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KVxuXG59KTtcblxuIiwgImltcG9ydCB7Z2V0R2xvYmFsLCBnZXRHbG9iYWxPYmplY3QsIGdldEdsb2JhbEZ1bmN0aW9ufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCdHbG9iYWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVzY3JpYmUoJ2dldEdsb2JhbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBnbG9iYWwgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHQgPSB0eXBlb2YgZ2V0R2xvYmFsKCk7XG4gICAgICAgICAgICBleHBlY3QodCkudG8uYmUuZXF1YWwoJ29iamVjdCcpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ2dldEdsb2JhbEZ1bmN0aW9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGdsb2JhbCBmdW5jdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB0ID0gdHlwZW9mIGdldEdsb2JhbEZ1bmN0aW9uKCdwYXJzZUludCcpO1xuICAgICAgICAgICAgZXhwZWN0KHQpLnRvLmJlLmVxdWFsKCdmdW5jdGlvbicpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ2dldEdsb2JhbE9iamVjdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBnbG9iYWwgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHQgPSB0eXBlb2YgZ2V0R2xvYmFsT2JqZWN0KCdKU09OJyk7XG4gICAgICAgICAgICBleHBlY3QodCkudG8uYmUuZXF1YWwoJ29iamVjdCcpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG59KTtcblxuIiwgImltcG9ydCB7T2JzZXJ2ZXJMaXN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVybGlzdC5tanNcIjtcbmltcG9ydCB7T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnT2JzZXJ2ZXJMaXN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy5hdHRhY2goKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIE9ic2VydmVyTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvYnNlcnZlckxpc3QgPSBuZXcgT2JzZXJ2ZXJMaXN0KClcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBvYnNlcnZlckxpc3QuYXR0YWNoKG5ldyBPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmJlLmluc3RhbmNlT2YoT2JzZXJ2ZXJMaXN0KVxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmRldGFjaCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgT2JzZXJ2ZXJMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVyTGlzdCA9IG5ldyBPYnNlcnZlckxpc3QoKVxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG9ic2VydmVyTGlzdC5kZXRhY2gobmV3IE9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uYmUuaW5zdGFuY2VPZihPYnNlcnZlckxpc3QpXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcubm90aWZ5KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0VmFsdWUgPSBcIlllcyFcIjtcbiAgICAgICAgbGV0IG87XG4gICAgICAgIGxldCBvYnNlcnZlckxpc3Q7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBvID0gbmV3IE9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0VmFsdWVcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBvYnNlcnZlckxpc3QgPSBuZXcgT2JzZXJ2ZXJMaXN0KClcbiAgICAgICAgICAgIG9ic2VydmVyTGlzdC5hdHRhY2gobylcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlb2YgUHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3Qubm90aWZ5KHt9KSkudG8uYmUuaW5zdGFuY2VPZihQcm9taXNlKVxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiAnICsgcmVzdWx0VmFsdWUsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7fVxuXG4gICAgICAgICAgICBvYnNlcnZlckxpc3Qubm90aWZ5KG9iaikudGhlbihyID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3QocikudG8uYmUuYW4oJ2FycmF5JykudGhhdC5pbmNsdWRlcyhyZXN1bHRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuY29udGFpbnMoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbzEgPSBuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICB9KTtcbiAgICAgICAgbGV0IG8yID0gbmV3IE9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBub3QgY29udGFpbiBvMSBhbmQgbzInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgb2JzZXJ2ZXJMaXN0ID0gbmV3IE9ic2VydmVyTGlzdCgpXG5cbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzEpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzIpKS50by5iZS5mYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBjb250YWluIG8yIGFuZCBub3QgbzEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgb2JzZXJ2ZXJMaXN0ID0gbmV3IE9ic2VydmVyTGlzdCgpXG4gICAgICAgICAgICBvYnNlcnZlckxpc3QuYXR0YWNoKG8yKVxuICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyTGlzdC5jb250YWlucyhvMSkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyTGlzdC5jb250YWlucyhvMikpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY29udGFpbiBvMSBhbmQgbm90IG8yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVyTGlzdCA9IG5ldyBPYnNlcnZlckxpc3QoKVxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0LmF0dGFjaChvMSlcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzEpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyTGlzdC5jb250YWlucyhvMikpLnRvLmJlLmZhbHNlO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIGl0KCdzaG91bGQgY29udGFpbiBvMiBhbmQgbzEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgb2JzZXJ2ZXJMaXN0ID0gbmV3IE9ic2VydmVyTGlzdCgpXG4gICAgICAgICAgICBvYnNlcnZlckxpc3QuYXR0YWNoKG8yKS5hdHRhY2gobzEpXG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8xKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzIpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxufSk7XG5cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7ZXF1aXBXaXRoSW50ZXJuYWx9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvaW50ZXJuYWwubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuXG5jbGFzcyBTb21lUmFuZG9tQ2xhc3MxIGV4dGVuZHMgT2JqZWN0IHtcblxuICAgIGRvaXQoKSB7XG4gICAgICAgIHJldHVybiBcImRvbmVcIjtcbiAgICB9XG59XG5cbmNsYXNzIFNvbWVSYW5kb21DbGFzczIgZXh0ZW5kcyBPYmplY3Qge1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGVxdWlwV2l0aEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgZ2V0IGRlZmF1bHRJbnRlcm5hbCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRlc3Q6IFwidGVzdFwiXG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuZGVzY3JpYmUoJ0Jhc2UgaW5qZWN0IHdpdGggb3B0aW9ucycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCduZXcgU29tZVJhbmRvbUNsYXNzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdpcyBpbnN0YW5jZSBvZiBTb21lUmFuZG9tQ2xhc3MxJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBTb21lUmFuZG9tQ2xhc3MyKS5ub3QudG8uYmUuaW5zdGFuY2VPZihTb21lUmFuZG9tQ2xhc3MxKTtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgU29tZVJhbmRvbUNsYXNzMikudG8uYmUuaW5zdGFuY2VPZihTb21lUmFuZG9tQ2xhc3MyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2lzIGluc3RhbmNlIG9mIFNvbWVSYW5kb21DbGFzczInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFNvbWVSYW5kb21DbGFzczEpLnRvLmJlLmluc3RhbmNlT2YoU29tZVJhbmRvbUNsYXNzMSk7XG4gICAgICAgICAgICBleHBlY3QobmV3IFNvbWVSYW5kb21DbGFzczEpLm5vdC50by5iZS5pbnN0YW5jZU9mKFNvbWVSYW5kb21DbGFzczIpO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnRXh0ZW5kcyBTb21lUmFuZG9tQ2xhc3Mgd2l0aCBpbnRlcm5hbHMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2F0dGFjaCBhbmQgbm90aWZ5IGludGVybmFsIG9ic2VydmVyJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBuZXcgU29tZVJhbmRvbUNsYXNzMjtcbiAgICAgICAgICAgIGMuYXR0YWNoSW50ZXJuYWxPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgYy5zZXRJbnRlcm5hbChcInRlc3RcIiwgXCJ0ZXN0XCIpO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdhdHRhY2ggYW5kIHJlbW92ZSBpbnRlcm5hbCBvYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBuZXcgU29tZVJhbmRvbUNsYXNzMjtcblxuXG4gICAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBPYnNlcnZlcigoKSA9PiB7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBleHBlY3QoYy5jb250YWluc0ludGVybmFsT2JzZXJ2ZXIob2JzZXJ2ZXIpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGMuYXR0YWNoSW50ZXJuYWxPYnNlcnZlcihvYnNlcnZlcik7XG4gICAgICAgICAgICBleHBlY3QoYy5jb250YWluc0ludGVybmFsT2JzZXJ2ZXIob2JzZXJ2ZXIpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgYy5kZXRhY2hJbnRlcm5hbE9ic2VydmVyKG9ic2VydmVyKTtcbiAgICAgICAgICAgIGV4cGVjdChjLmNvbnRhaW5zSW50ZXJuYWxPYnNlcnZlcihvYnNlcnZlcikpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwiZ2V0SW50ZXJuYWwgYW5kIHNldEludGVybmFsXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBuZXcgU29tZVJhbmRvbUNsYXNzMjtcbiAgICAgICAgICAgIGV4cGVjdChjLnNldEludGVybmFsKFwidGVzdFwiLCBcInllYWhcIikpLnRvLmJlLmluc3RhbmNlT2YoU29tZVJhbmRvbUNsYXNzMik7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3RcIikpLnRvLmJlLmVxdWFsKFwieWVhaFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJkZWFsIHdpdGggZGVmYXVsdCB2YWx1ZXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgdGVzdENsYXNzID0gY2xhc3MgZXh0ZW5kcyBPYmplY3Qge1xuICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgICAgICAgICBlcXVpcFdpdGhJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGdldCBpbnRlcm5hbERlZmF1bHRzKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVzdDogXCJ4eXpcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIGNvbnN0IGMgPSBuZXcgdGVzdENsYXNzO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0XCIpKS50by5iZS5lcXVhbChcInh5elwiKTtcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdDJcIiwgXCJhYmNcIikpLnRvLmJlLmVxdWFsKFwiYWJjXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChcImRlYWwgd2l0aCBkZWZhdWx0cyBmcm9tIGRlZmF1bHRzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlc3RDbGFzcyA9IGNsYXNzIGV4dGVuZHMgT2JqZWN0IHtcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgZXF1aXBXaXRoSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnZXQgaW50ZXJuYWxEZWZhdWx0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Q6IFwieHl6XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGVzdENsYXNzMiA9IGNsYXNzIGV4dGVuZHMgdGVzdENsYXNzIHtcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgZXF1aXBXaXRoSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBnZXQgaW50ZXJuYWxEZWZhdWx0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmludGVybmFsRGVmYXVsdHMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QyOiBcImFiY1wiXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjID0gbmV3IHRlc3RDbGFzczI7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3RcIikpLnRvLmJlLmVxdWFsKFwieHl6XCIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0MlwiKSkudG8uYmUuZXF1YWwoXCJhYmNcIik7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoXCJzZXQgbXVsdGlwbGUgdmFsdWVzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBuZXcgU29tZVJhbmRvbUNsYXNzMjtcbiAgICAgICAgICAgIGV4cGVjdChjLnNldEludGVybmFscyh7XG4gICAgICAgICAgICAgICAgdGVzdDogXCJ5ZWFoXCIsXG4gICAgICAgICAgICAgICAgdGVzdDI6IFwieWVhaDJcIlxuICAgICAgICAgICAgfSkpLnRvLmJlLmluc3RhbmNlT2YoU29tZVJhbmRvbUNsYXNzMik7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3RcIikpLnRvLmJlLmVxdWFsKFwieWVhaFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdDJcIikpLnRvLmJlLmVxdWFsKFwieWVhaDJcIik7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGMuc2V0SW50ZXJuYWxzKHtcbiAgICAgICAgICAgICAgICB0ZXN0MjogXCJ5ZWFoMi1uZXdcIixcbiAgICAgICAgICAgICAgICB0ZXN0MzogXCJ5ZWFoM1wiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0XCIpKS50by5iZS5lcXVhbChcInllYWhcIik7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3QyXCIpKS50by5iZS5lcXVhbChcInllYWgyLW5ld1wiKTtcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdDNcIikpLnRvLmJlLmVxdWFsKFwieWVhaDNcIik7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSkiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7T2JzZXJ2YWJsZVF1ZXVlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmFibGVxdWV1ZS5tanNcIjtcbmltcG9ydCB7T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5cbmRlc2NyaWJlKCdPYnNlcnZhYmxlUXVldWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVzY3JpYmUoJ09ic2VydmVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgbm90aWZ5JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBxdWV1ZSA9IG5ldyBPYnNlcnZhYmxlUXVldWU7XG4gICAgICAgICAgICBsZXQgbyA9IG5ldyBPYnNlcnZlcigocSkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBxdWV1ZS5hdHRhY2hPYnNlcnZlcihvKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5hZGQoJ2EnKSkudG8uYmUuaW5zdGFuY2VPZihPYnNlcnZhYmxlUXVldWUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn0pIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7cGFyc2VEYXRhVVJMfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2RhdGF1cmwubWpzXCI7XG5cbmRlc2NyaWJlKCdEYXRhdXJsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgW1xuICAgICAgICBbXCIgZGF0YTp0ZXh0L2h0bWwsJTNDaDElM0VIZWxsbyUyQyUyMFdvcmxkISUzQyUyRmgxJTNFXCJdLFxuICAgICAgICBbXCJkYXRhOnRleHQvaHRtbDtjaGFyc2V0PVVTLUFTQ0lJLCUzQ2gxJTNFSGVsbG8hJTNDJTJGaDElM0VcIl0sXG4gICAgICAgIFtcImRhdGE6LEElMjBicmllZiUyMG5vdGVcIiwgJ2RhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PVVTLUFTQ0lJLEElMjBicmllZiUyMG5vdGUnXSxcbiAgICAgICAgW1wiZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQVFNQUFBQWxQVzBpQUFBQUJsQk1WRVVBQUFELy8vK2wyWi9kQUFBQU0wbEVRVlI0bkdQNC81L2gvMStHLzU4WkRyQXozRC9NY0g4eXc4M05ERGVOR2U0VWc5Qzl6d3ozZ1ZMTURBL0E2UDkvQUZHR0Z5ak9YWnRRQUFBQUFFbEZUa1N1UW1DQ1wiXSxcbiAgICAgICAgW1wiIGRhdGE6LEhlbGxvJTJDJTIwV29ybGQhXCIsICdkYXRhOnRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSSxIZWxsbyUyQyUyMFdvcmxkISddLFxuICAgICAgICBbXCIgICBkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFnQUFBQUlCQU1BQUFBMklhTzRBQUFBRlZCTVZFWGs1T1RuNStmdDdlMzE5ZlgyOXZiNStmbi8vLysrR1VtVkFBQUFMVWxFUVZRSUhXTklDbllMWm5BTFRncG1NR1lJRldZSVpUQTJaRkF6VFRGbFNERlZNd1Z5UWhtQXdzWU1BS0RhQnkwYXhYL2lBQUFBQUVsRlRrU3VRbUNDICAgXCJdLFxuICAgICAgICBbXCIgZGF0YTosSGVsbG8gV29ybGQhXCIsICdkYXRhOnRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSSxIZWxsbyUyMFdvcmxkISddLFxuICAgICAgICBbXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFnQUFBQUlCQU1BQUFBMklhTzRBQUFBRlZCTVZFWGs1T1RuNStmdDdlMzE5ZlgyOXZiNStmbi8vLysrR1VtVkFBQUFMVWxFUVZRSUhXTklDbllMWm5BTFRncG1NR1lJRldZSVpUQTJaRkF6VFRGbFNERlZNd1Z5UWhtQXdzWU1BS0RhQnkwYXhYL2lBQUFBQUVsRlRrU3VRbUNDXCJdLFxuICAgICAgICBbXCIgZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCxTR1ZzYkc4c0lGZHZjbXhrSVElM0QlM0RcIl1cblxuXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICBpZiAoYiA9PT0gdW5kZWZpbmVkKSBiID0gYS50cmltKCk7XG5cblxuICAgICAgICBpdCgncGFyc2VEYXRhVVJMKCcgKyBhICsgJyknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGV4cGVjdChwYXJzZURhdGFVUkwoYSkudG9TdHJpbmcoKSkudG8uYmUuZXF1YWwoYik7XG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuICAgIFtcbiAgICAgICAgW1wiZGF0YXhiYXNlNjRcIl0sXG4gICAgICAgIFtcImRhdGE6SGVsbG9Xb3JsZFwiXSxcbiAgICAgICAgW1wiZGF0YTp0ZXh0L2h0bWw7Y2hhcnNldD0sJTNDaDElM0VIZWxsbyElM0MlMkZoMSUzRVwiXSxcbiAgICAgICAgW1wiZGF0YTp0ZXh0L2h0bWw7Y2hhcnNldCwlM0NoMSUzRUhlbGxvISUzQyUyRmgxJTNFXCIsIFwiZGF0YTpiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFBUU1BQUFBbFBXMGlBQUFBQmxCTVZFVUFBQUQvLy8rbDJaL2RBQUFBTTBsRVFWUjRuR1A0LzUvaC8xK0cvNThaRHJBejNEL01jSDh5dzgzTkREZU5HZTRVZzlDOXp3ejNnVkxNREEvQTZQOS9BRkdHRnlqT1hadFFBQUFBQUVsRlRrU3VRbUNDXCJdLFxuICAgICAgICBbXCJcIl0sXG4gICAgICAgIFtcImh0dHA6Ly93aWtpcGVkaWEub3JnXCJdLFxuICAgICAgICBbXCJiYXNlNjRcIl0sXG4gICAgICAgIFtcImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFRQVFNQUFBQWxQVzBpQUFBQUJsQk1WRVVBQUFELy8vK2wyWi9kQUFBQU0wbEVRVlI0bkdQNC81L2gvMStHLzU4WkRyQXozRC9NY0g4eXc4M05ERGVOR2U0VWc5Qzl6d3ozZ1ZMTURBL0E2UDkvQUZHR0Z5ak9YWnRRQUFBQUFFbEZUa1N1UW1DQ1wiXVxuXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXhjZXB0aW9uIHBhcnNlRGF0YVVSTCgnICsgYSArICcpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gcGFyc2VEYXRhVVJMKGEpKS50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuXG59KTsiLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgdG9CaW5hcnksIGZyb21CaW5hcnkgfTtcblxuLyoqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIGZ1bmN0aW9uIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYE1vbnN0ZXIuVHlwZXMudG9CaW5hcnkoKWAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGJpbmFyeVxuICogQHJldHVybiB7U3RyaW5nfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTguMFxuICovXG5mdW5jdGlvbiB0b0JpbmFyeShzdHJpbmcpIHtcblx0Y29uc3QgY29kZVVuaXRzID0gbmV3IFVpbnQxNkFycmF5KHZhbGlkYXRlU3RyaW5nKHN0cmluZykubGVuZ3RoKTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjb2RlVW5pdHMubGVuZ3RoOyBpKyspIHtcblx0XHRjb2RlVW5pdHNbaV0gPSBzdHJpbmcuY2hhckNvZGVBdChpKTtcblx0fVxuXG5cdGNvbnN0IGNoYXJDb2RlcyA9IG5ldyBVaW50OEFycmF5KGNvZGVVbml0cy5idWZmZXIpO1xuXHRsZXQgcmVzdWx0ID0gXCJcIjtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGNoYXJDb2Rlcy5ieXRlTGVuZ3RoOyBpKyspIHtcblx0XHRyZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZXNbaV0pO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIGZ1bmN0aW9uIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYE1vbnN0ZXIuVHlwZXMuZnJvbUJpbmFyeSgpYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYmluYXJ5XG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xOC4wXG4gKi9cbmZ1bmN0aW9uIGZyb21CaW5hcnkoYmluYXJ5KSB7XG5cdGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkodmFsaWRhdGVTdHJpbmcoYmluYXJ5KS5sZW5ndGgpO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Ynl0ZXNbaV0gPSBiaW5hcnkuY2hhckNvZGVBdChpKTtcblx0fVxuXHRjb25zdCBjaGFyQ29kZXMgPSBuZXcgVWludDE2QXJyYXkoYnl0ZXMuYnVmZmVyKTtcblx0bGV0IHJlc3VsdCA9IFwiXCI7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY2hhckNvZGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0cmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGVzW2ldKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7ZnJvbUJpbmFyeSwgdG9CaW5hcnl9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvYmluYXJ5Lm1qc1wiO1xuXG5kZXNjcmliZSgnQmluYXJ5JywgZnVuY3Rpb24gKCkge1xuXG4gICAgW1xuICAgICAgICBbJ2EnLCAnYVxcdTAwMDAnXSxcbiAgICAgICAgWydcdTI2MzknLCAnOSYnXSxcbiAgICAgICAgWydJXHUwMEYxdFx1MDBFQnJuXHUwMEUydGlcdTAwRjRuXHUwMEUwbGl6XHUwMEU2dGlcdTAwRjhuJywgJ0lcXHUwMDAwXHUwMEYxXFx1MDAwMHRcXHUwMDAwXHUwMEVCXFx1MDAwMHJcXHUwMDAwblxcdTAwMDBcdTAwRTJcXHUwMDAwdFxcdTAwMDBpXFx1MDAwMFx1MDBGNFxcdTAwMDBuXFx1MDAwMFx1MDBFMFxcdTAwMDBsXFx1MDAwMGlcXHUwMDAwelxcdTAwMDBcdTAwRTZcXHUwMDAwdFxcdTAwMDBpXFx1MDAwMFx1MDBGOFxcdTAwMDBuXFx1MDAwMCddXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgIGl0KCdmcm9tQmluYXJ5KHRvQmluYXJ5KCcgKyBhICsgJykpIHNob3VsZCB3b3JrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHIgPSB0b0JpbmFyeShhKTtcbiAgICAgICAgICAgIGV4cGVjdChyKS50by5iZS5lcXVhbChiKTtcbiAgICAgICAgICAgIGV4cGVjdChmcm9tQmluYXJ5KHIpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgfSlcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICB9O1xuXG4gICAgbGV0IG9ic2VydmVyID0gbmV3IE9ic2VydmVyKGNhbGxiYWNrKVxuXG4gICAgZGVzY3JpYmUoJy5hZGRUYWcoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJ10sXG4gICAgICAgICAgICBbJ3Rlc3QyJ10sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnYWRkVGFnKCcgKyBhICsgJykgc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIE9ic2VydmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlci5hZGRUYWcoYSkpLmlzLmluc3RhbmNlT2YoT2JzZXJ2ZXIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcucmVtb3ZlVGFnKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MSddLFxuICAgICAgICAgICAgWyd0ZXN0MiddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3JlbW92ZVRhZygnICsgYSArICcpIHNob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBPYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXIucmVtb3ZlVGFnKGEpKS5pcy5pbnN0YW5jZU9mKE9ic2VydmVyKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmhhc1RhZygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCB0cnVlXSxcbiAgICAgICAgICAgIFsndGVzdDInLCB0cnVlXSxcbiAgICAgICAgICAgIFsndGVzdDMnLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ3Rlc3Q0JywgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IHRlbXBPYnNlcnZlciA9IG5ldyBPYnNlcnZlcihjYWxsYmFjaylcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdvYnNlcnZlci5oYXN0VGFnKCcgKyBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgaWYgKGIgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGVtcE9ic2VydmVyLmFkZFRhZyhhKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QodGVtcE9ic2VydmVyLmhhc1RhZyhhKSkuaXMuYmUudHJ1ZVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0ZW1wT2JzZXJ2ZXIuaGFzVGFnKGEpKS5pcy5iZS5mYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy51cGRhdGUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgb2JqID0ge31cbiAgICAgICAgaXQoJ29ic2VydmVyLnVwZGF0ZSgnICsgb2JqICsgJykgaXMgJyArIDEgKyAzICsgNiwgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IHRlbXBPYnNlcnZlciA9IG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBhICsgYiArIGNcbiAgICAgICAgICAgIH0sIDEsIDMsIDYpXG5cblxuICAgICAgICAgICAgdGVtcE9ic2VydmVyLnVwZGF0ZShvYmopLnRoZW4oYSA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGEpLmlzLmVxdWFsKDEgKyAzICsgNilcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdydW4gZnVuY3Rpb24gLnVwZGF0ZSgpIHNldmVyYWwgdGltZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG9iaiA9IHt9XG4gICAgICAgIGl0KCdvYnNlcnZlci51cGRhdGUoJyArIG9iaiArICcpIGlzICcgKyAxICsgMyArIDYsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgICAgICAgIGxldCB0ZW1wT2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICB0ZW1wT2JzZXJ2ZXIudXBkYXRlKG9iaik7XG4gICAgICAgICAgICB0ZW1wT2JzZXJ2ZXIudXBkYXRlKG9iaik7XG4gICAgICAgICAgICB0ZW1wT2JzZXJ2ZXIudXBkYXRlKG9iaik7XG4gICAgICAgICAgICB0ZW1wT2JzZXJ2ZXIudXBkYXRlKG9iaik7XG4gICAgICAgICAgICB0ZW1wT2JzZXJ2ZXIudXBkYXRlKG9iaikudGhlbihfID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmdldFRhZ3MoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbWyd0ZXN0MScsICd0ZXN0MicsICd0ZXN0MycsICd0ZXN0NCddLCA0XSxcbiAgICAgICAgICAgIFtbJ3Rlc3QxJywgJ3Rlc3QxJywgJ3Rlc3QzJywgJ3Rlc3Q0J10sIDNdLCAvLyBkb3VibGUgdGVzdDEgKHNldCBpcyB1bmlxdWV1ZSlcbiAgICAgICAgICAgIFtbJ3Rlc3QxJywgJ3Rlc3QxJywgJ3Rlc3QxJywgJ3Rlc3Q0J10sIDJdLCAvLyBtdWx0aXBsZSB0ZXN0MSAoc2V0IGlzIHVuaXF1ZXVlKVxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IHRlbXBPYnNlcnZlciA9IG5ldyBPYnNlcnZlcihjYWxsYmFjaylcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBtYXggPSBhLmxlbmd0aDsgaSA8IG1heDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGVtcE9ic2VydmVyLmFkZFRhZyhhW2ldKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXQoJ29ic2VydmVyLmdldFRhZ3MoJyArIGEgKyAnKSBpcyBhcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QodGVtcE9ic2VydmVyLmdldFRhZ3MoKSkudG8uYmUuYW4oJ2FycmF5JylcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnb2JzZXJ2ZXIuZ2V0VGFncygnICsgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIgKyBcIiB0YWdzXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QodGVtcE9ic2VydmVyLmdldFRhZ3MoKS5sZW5ndGgpLmlzLmVxdWFsKGIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgZXNjYXBlU3RyaW5nIH07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBwcmVmaXhlcyBhbGwgc3BlY2lhbCBjaGFyYWN0ZXJzIHRoYXQgbWF5IGFwcGVhciBpbiBhIHJlZ2V4IHdpdGggYSBzbGFzaC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVN0cmluZyh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsaWRhdGVTdHJpbmcodmFsdWUpXG5cdFx0LnJlcGxhY2UoL1t8XFxcXHt9KClbXFxdXiQrKj8uXS9nLCBcIlxcXFwkJlwiKVxuXHRcdC5yZXBsYWNlKC8tL2csIFwiXFxcXHgyZFwiKTtcbn1cbiIsICJcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2VzY2FwZVN0cmluZ30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9yZWdleC5tanNcIlxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdlc2NhcGVTdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBwcm9taXNlcy5wdXNoKGluaXRKU0RPTSgpKTtcbiAgICAgICAgaWYoIWdsb2JhbFRoaXNbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbihtID0+IHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzWydjcnlwdG8nXSA9IG5ldyBtLkNyeXB0bygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgIH1cblxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuICAgIFxuICAgIFtcbiAgICAgICAgWyd0ZXN0MScsICd0ZXN0MSddLFxuICAgICAgICBbJyR7JywgJ1xcXFwkXFxcXHsnXSxcbiAgICAgICAgWydpMThueycsICdpMThuXFxcXHsnXSxcbiAgICAgICAgWycvLycsICcvLyddLFxuICAgICAgICBbJ1xcXFwnLCAnXFxcXFxcXFwnXSxcbiAgICAgICBcbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgIGl0KCdlc2NhcGVTdHJpbmcoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoZXNjYXBlU3RyaW5nKGEpKS5pcy5lcXVhbChiKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTtcblxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCdSYW5kb21JRCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGNsYXNzIFJhbmRvbUlEIHt9XG4gICAgXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHByb21pc2VzID0gW11cbiAgICAgICAgaWYoIWdsb2JhbFRoaXNbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbihtID0+IHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzWydjcnlwdG8nXSA9IG5ldyBtLkNyeXB0bygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgIH1cblxuICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9yYW5kb21pZC5tanNcIikudGhlbihtID0+IHtcbiAgICAgICAgICAgIFJhbmRvbUlEID0gbS5SYW5kb21JRDtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KSlcblxuICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG5cbiAgICB9KTsgICAgXG4gICAgXG4gICAgZGVzY3JpYmUoJy50b1N0cmluZygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgaWQgPSBuZXcgUmFuZG9tSUQoKVxuICAgICAgICBsZXQgcmVzdWx0ID0gaWQudG9TdHJpbmcoKTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLmlzLmEoJ3N0cmluZycpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdJRCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG4gICAgICAgIGlmKCFnbG9iYWxUaGlzWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpc1snY3J5cHRvJ10gPSBuZXcgbS5DcnlwdG8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG5cblxuICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG5cbiAgICB9KTsgICAgXG4gICAgXG4gICAgZGVzY3JpYmUoJy50b1N0cmluZygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgaWQgPSBuZXcgSUQoKVxuICAgICAgICBsZXQgcmVzdWx0ID0gaWQudG9TdHJpbmcoKTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLmlzLmEoJ3N0cmluZycpXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IElEKCd0ZXh0MTQyNWlkJykudG9TdHJpbmcoKSkuaXMuZXF1YWwoJ3RleHQxNDI1aWQxJylcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSUQoJ3RleHQxNDI1aWQnKS50b1N0cmluZygpKS5pcy5lcXVhbCgndGV4dDE0MjVpZDInKVxuICAgICAgICAgICAgZXhwZWN0KG5ldyBJRCgndGV4dDE0MjVpZCcpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKCd0ZXh0MTQyNWlkMycpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ1VVSUQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBjbGFzcyBVVUlEIHt9XG4gICAgXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHByb21pc2VzID0gW11cbiAgICAgICAgXG4gICAgICAgIGlmKCFnbG9iYWxUaGlzWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpc1snY3J5cHRvJ10gPSBuZXcgbS5DcnlwdG8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBcbiAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvdXVpZC5tanNcIikudGhlbihtID0+IHtcbiAgICAgICAgICAgIFVVSUQgPSBtLlVVSUQ7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSkpXG4gICAgICAgIFxuICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG5cbiAgICB9KTsgICAgXG4gICAgXG4gICAgZGVzY3JpYmUoJy50b1N0cmluZygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCB1dWlkID0gbmV3IFVVSUQoKVxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHV1aWQudG9TdHJpbmcoKTtcblxuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkuaXMuYSgnc3RyaW5nJylcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQubGVuZ3RoKS5pcy5lcXVhbCgzNilcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Rlc3QgZm9ybWF0JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCB1dWlkID0gbmV3IFVVSUQoKVxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHV1aWQudG9TdHJpbmcoKTtcblxuICAgICAgICAgICAgY29uc3QgcmVnZXhFeHAgPSAvXltBLUZcXGRdezh9LVtBLUZcXGRdezR9LTRbQS1GXFxkXXszfS1bODlBQl1bQS1GXFxkXXszfS1bQS1GXFxkXXsxMn0kL2k7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjAwMDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdSA9IG5ldyBVVUlEKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBjb25zdCByID0gcmVnZXhFeHAudGVzdCh1KTtcblxuICAgICAgICAgICAgICAgIGlmIChyICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoJ25vIHV1aWQgJyArIHUgKyAnID0+ICcgKyByKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtcbiAgICBpc1ByaW1pdGl2ZSxcbiAgICBpc0Jvb2xlYW4sXG4gICAgaXNTdHJpbmcsXG4gICAgaXNPYmplY3QsXG4gICAgaXNBcnJheSxcbiAgICBpc0luc3RhbmNlLFxuICAgIGlzRnVuY3Rpb24sXG4gICAgaXNJdGVyYWJsZSxcbiAgICBpc0ludGVnZXIsXG4gICAgaXNTeW1ib2xcbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9pcy5tanNcIjtcblxuXG5pbXBvcnQge0lEfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2lkLm1qc1wiXG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdJcycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG4gICAgICAgIGlmKCFnbG9iYWxUaGlzWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCJAcGVjdWxpYXIvd2ViY3J5cHRvXCIpLnRoZW4obSA9PiB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsVGhpc1snY3J5cHRvJ10gPSBuZXcgbS5DcnlwdG8oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICB9XG5cblxuICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG5cbiAgICB9KTsgICAgXG4gICAgXG4gICAgZGVzY3JpYmUoJy5pc1ByaW1pdGl2ZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCB0cnVlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgW251bGwsIHRydWVdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCB0cnVlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIHRydWVdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFs0LjUsIHRydWVdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNQcmltaXRpdmUoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc1ByaW1pdGl2ZShhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJy5pc1N5bWJvbCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIHRydWVdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc1N5bWJvbCgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzU3ltYm9sKGEpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuaXNJbnRlZ2VyKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIHRydWVdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmlzSW50ZWdlcignICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzSW50ZWdlcihhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmlzSXRlcmFibGUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIHRydWVdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc0l0ZXJhYmxlKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNJdGVyYWJsZShhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmlzQm9vbGVhbigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIHRydWVdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmlzQm9vbGVhbignICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzQm9vbGVhbihhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmlzU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmlzU3RyaW5nKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNTdHJpbmcoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5pc0luc3RhbmNlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW25ldyBJRCgpLCBJRCwgIHRydWVdLFxuICAgICAgICAgICAgW25ldyBJRCgpLCAoKT0+e30sICBmYWxzZV0sXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc0luc3RhbmNlKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcpIHNob3VsZCByZXR1cm4gJyArIHR5cGVvZiBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzSW5zdGFuY2UoYSwgYikpLmlzLmVxdWFsKGMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmlzSW5zdGFuY2VFeHRlbmRlZCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjbGFzcyBCYXNlIHt9XG4gICAgICAgIGNsYXNzIERlcml2ZWQgZXh0ZW5kcyBCYXNlIHt9XG4gICAgICAgIGZ1bmN0aW9uIEFub3RoZXJDbGFzcygpIHt9XG5cbiAgICAgICAgbGV0IGJhc2VJbnN0YW5jZSA9IG5ldyBCYXNlKCk7XG4gICAgICAgIGxldCBkZXJpdmVkSW5zdGFuY2UgPSBuZXcgRGVyaXZlZCgpO1xuXG4gICAgICAgIC8vIFRlc3QgY2FzZXNcbiAgICAgICAgY29uc3QgY2FzZXMgPSBbXG4gICAgICAgICAgICBbKCkgPT4ge30sIHVuZGVmaW5lZCwgZmFsc2UsXCJmdW5jdGlvbiB2cyB1bmRlZmluZWRcIl0sXG4gICAgICAgICAgICBbbmV3IElEKCksICgpPT57fSwgZmFsc2UsIFwiSUQgaW5zdGFuY2UgdnMgZnVuY3Rpb25cIl0sXG4gICAgICAgICAgICBbbmV3IElEKCksIElELCB0cnVlLCBcIklEIGluc3RhbmNlIHZzIElEXCJdLFxuICAgICAgICAgICAgWyd0ZXN0MScsIHVuZGVmaW5lZCwgZmFsc2UsIFwic3RyaW5nIHZzIHVuZGVmaW5lZFwiXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmFsc2UsIFwidW5kZWZpbmVkIHZzIHVuZGVmaW5lZFwiXSxcbiAgICAgICAgICAgIFtudWxsLCB1bmRlZmluZWQsIGZhbHNlLCBcIm51bGwgdnMgdW5kZWZpbmVkXCJdLFxuICAgICAgICAgICAgWzIsIHVuZGVmaW5lZCwgZmFsc2UsIFwibnVtYmVyIHZzIHVuZGVmaW5lZFwiXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdW5kZWZpbmVkLCBmYWxzZSwgXCJmYWxzZSB2cyB1bmRlZmluZWRcIl0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCB1bmRlZmluZWQsIGZhbHNlLCBcIk5hTiB2cyB1bmRlZmluZWRcIl0sXG4gICAgICAgICAgICBbdHJ1ZSwgdW5kZWZpbmVkLCBmYWxzZSwgXCJ0cnVlIHZzIHVuZGVmaW5lZFwiXSxcbiAgICAgICAgICAgIFs0LjUsIHVuZGVmaW5lZCwgZmFsc2UsIFwiZmxvYXQgdnMgdW5kZWZpbmVkXCJdLFxuICAgICAgICAgICAgW3t9LCB1bmRlZmluZWQsIGZhbHNlLCBcIm9iamVjdCB2cyB1bmRlZmluZWRcIl0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCB1bmRlZmluZWQsIGZhbHNlLCBcImFycmF5IHZzIHVuZGVmaW5lZFwiXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIHVuZGVmaW5lZCwgZmFsc2UsIFwic3ltYm9sIHZzIHVuZGVmaW5lZFwiXSxcbiAgICAgICAgICAgIFtiYXNlSW5zdGFuY2UsIEJhc2UsIHRydWUsIFwiQmFzZSBpbnN0YW5jZSB2cyBCYXNlXCJdLFxuICAgICAgICAgICAgW2Rlcml2ZWRJbnN0YW5jZSwgQmFzZSwgdHJ1ZSwgXCJEZXJpdmVkIGluc3RhbmNlIHZzIEJhc2VcIl0sXG4gICAgICAgICAgICBbZGVyaXZlZEluc3RhbmNlLCBEZXJpdmVkLCB0cnVlLCBcIkRlcml2ZWQgaW5zdGFuY2UgdnMgRGVyaXZlZFwiXSxcbiAgICAgICAgICAgIFtiYXNlSW5zdGFuY2UsIERlcml2ZWQsIGZhbHNlLCBcIkJhc2UgaW5zdGFuY2UgdnMgRGVyaXZlZFwiXSxcbiAgICAgICAgICAgIFtiYXNlSW5zdGFuY2UsIEFub3RoZXJDbGFzcywgZmFsc2UsIFwiQmFzZSBpbnN0YW5jZSB2cyBBbm90aGVyQ2xhc3NcIl0sXG4gICAgICAgICAgICBbZGVyaXZlZEluc3RhbmNlLCAoKT0+e30sIGZhbHNlLCBcIkRlcml2ZWQgaW5zdGFuY2UgdnMgZnVuY3Rpb25cIl0sXG4gICAgICAgICAgICBbbmV3IEFub3RoZXJDbGFzcygpLCBBbm90aGVyQ2xhc3MsIHRydWUsIFwiQW5vdGhlckNsYXNzIGluc3RhbmNlIHZzIEFub3RoZXJDbGFzc1wiXSxcbiAgICAgICAgXTtcblxuICAgICAgICAvLyBBZGRpbmcgcHJvdG90eXBlIG1vZGlmaWNhdGlvbiB0ZXN0XG4gICAgICAgIGxldCBwcm90b01vZGlmaWVkSW5zdGFuY2UgPSBuZXcgQmFzZSgpO1xuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YocHJvdG9Nb2RpZmllZEluc3RhbmNlLCBEZXJpdmVkLnByb3RvdHlwZSk7XG4gICAgICAgIGNhc2VzLnB1c2goXG4gICAgICAgICAgICBbcHJvdG9Nb2RpZmllZEluc3RhbmNlLCBCYXNlLCB0cnVlLCBcIlByb3RvIG1vZGlmaWVkIEJhc2UgaW5zdGFuY2UgdnMgQmFzZVwiXSwgXG4gICAgICAgICAgICBbcHJvdG9Nb2RpZmllZEluc3RhbmNlLCBEZXJpdmVkLCB0cnVlLCBcIlByb3RvIG1vZGlmaWVkIEJhc2UgaW5zdGFuY2UgdnMgRGVyaXZlZFwiXVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJ1bm5pbmcgdGhlIHRlc3RzXG4gICAgICAgIGNhc2VzLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBkYXRhLnNoaWZ0KCk7XG4gICAgICAgICAgICBjb25zdCBiID0gZGF0YS5zaGlmdCgpO1xuICAgICAgICAgICAgY29uc3QgYyA9IGRhdGEuc2hpZnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGQgPSBkYXRhLnNoaWZ0KCk7XG5cbiAgICAgICAgICAgIGl0KCdpc0luc3RhbmNlKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcsIFtGdW5jdGlvbl0pIHNob3VsZCByZXR1cm4gJyArIGMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAoaXNJbnN0YW5jZShhLCBiKSE9PWMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzSW5zdGFuY2UoYSwgYikpLnRvLmVxdWFsKGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCcuaXNPYmplY3QoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCB0cnVlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNPYmplY3QoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc09iamVjdChhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCcuaXNBcnJheSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIHRydWVdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc0FycmF5KCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNBcnJheShhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuaXNGdW5jdGlvbigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIHRydWVdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc0Z1bmN0aW9uKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNGdW5jdGlvbihhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxufSk7XG5cbiIsICJpbXBvcnQge1xuICAgIHZhbGlkYXRlUHJpbWl0aXZlLFxuICAgIHZhbGlkYXRlQm9vbGVhbixcbiAgICB2YWxpZGF0ZVN0cmluZyxcbiAgICB2YWxpZGF0ZU9iamVjdCxcbiAgICB2YWxpZGF0ZUFycmF5LFxuICAgIHZhbGlkYXRlRnVuY3Rpb24sXG4gICAgdmFsaWRhdGVJbnRlZ2VyLFxuICAgIHZhbGlkYXRlSW5zdGFuY2UsXG4gICAgdmFsaWRhdGVJdGVyYWJsZSxcbiAgICB2YWxpZGF0ZVN5bWJvbFxufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qc1wiXG5cbmltcG9ydCB7QmFzZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9iYXNlLm1qc1wiXG5pbXBvcnQge0lEfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2lkLm1qc1wiXG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCd2YWxpZGF0ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVQcmltaXRpdmUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFtudWxsLCB0cnVlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgdHJ1ZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgW3RydWUsIHRydWVdLFxuICAgICAgICAgICAgWzQuNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIHRydWVdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmIChiID09PSBmYWxzZSkge1xuXG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZVByaW1pdGl2ZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gdmFsaWRhdGVQcmltaXRpdmUoYSkpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZVByaW1pdGl2ZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlUHJpbWl0aXZlKGEpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlSW50ZWdlcigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmIChiID09PSBmYWxzZSkge1xuXG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUludGVnZXIoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHZhbGlkYXRlSW50ZWdlcihhKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlSW50ZWdlcignICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlSW50ZWdlcihhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVTeW1ib2woKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVTeW1ib2woJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHZhbGlkYXRlU3ltYm9sKGEpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVTeW1ib2woJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIG5vdCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZVN5bWJvbChhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZUl0ZXJhYmxlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCB0cnVlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVJdGVyYWJsZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVJdGVyYWJsZShhKVxuICAgICAgICAgICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUl0ZXJhYmxlKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVJdGVyYWJsZShhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZUJvb2xlYW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmIChiID09PSBmYWxzZSkge1xuXG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUJvb2xlYW4oJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQm9vbGVhbihhKVxuICAgICAgICAgICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVCb29sZWFuKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVCb29sZWFuKGEpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVTdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVTdHJpbmcoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RyaW5nKGEpXG4gICAgICAgICAgICAgICAgICAgIH0pLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlU3RyaW5nKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVTdHJpbmcoYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVPYmplY3QoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCB0cnVlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVPYmplY3QoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlT2JqZWN0KGEpXG4gICAgICAgICAgICAgICAgICAgIH0pLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlT2JqZWN0KCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVPYmplY3QoYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVJbnN0YW5jZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBPYmplY3RdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgT2JqZWN0XSxcbiAgICAgICAgICAgIFtudWxsLCBPYmplY3RdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIE9iamVjdF0sXG4gICAgICAgICAgICBbMiwgT2JqZWN0XSxcbiAgICAgICAgICAgIFtmYWxzZSwgT2JqZWN0XSxcbiAgICAgICAgICAgIFt0cnVlLCBPYmplY3RdLFxuICAgICAgICAgICAgWzQuNSwgT2JqZWN0XSxcbiAgICAgICAgICAgIFt7fSwgQmFzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBPYmplY3RdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgT2JqZWN0XSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgICAgIGl0KCcudmFsaWRhdGVJbnN0YW5jZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlSW5zdGFuY2UoYSwgYilcbiAgICAgICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVJbnN0YW5jZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFt7fSwgT2JqZWN0LCB0cnVlXSxcbiAgICAgICAgICAgIFtuZXcgQmFzZSwgQmFzZSwgdHJ1ZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUluc3RhbmNlKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZUluc3RhbmNlKGEsIGIpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZUFycmF5KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlQXJyYXkoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlQXJyYXkoYSlcbiAgICAgICAgICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVBcnJheSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlQXJyYXkoYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlRnVuY3Rpb24oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCB0cnVlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVGdW5jdGlvbignICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVGdW5jdGlvbihhKVxuICAgICAgICAgICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUZ1bmN0aW9uKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVGdW5jdGlvbihhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxufSk7XG5cbiIsICJpbXBvcnQge1N0YWNrfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3N0YWNrLm1qc1wiO1xuaW1wb3J0IHtcbiAgICB0eXBlT2Zcbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy90eXBlb2YubWpzXCJcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ3R5cGVPZicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcudHlwZU9mKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW3RydWUsICdib29sZWFuJ10sXG4gICAgICAgICAgICBbbnVsbCwgJ251bGwnXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsICd1bmRlZmluZWQnXSxcbiAgICAgICAgICAgIFtQcm9taXNlLnJlc29sdmUoKSwgJ3Byb21pc2UnXSxcbiAgICAgICAgICAgIFtuZXcgV2Vha01hcCgpLCAnd2Vha21hcCddLFxuICAgICAgICAgICAgW25ldyBNYXAoKSwgJ21hcCddLFxuICAgICAgICAgICAgW05hTiwgJ251bWJlciddLFxuICAgICAgICAgICAgW2Z1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB9LCAnZ2VuZXJhdG9yZnVuY3Rpb24nXSxcbiAgICAgICAgICAgIFs1LCAnbnVtYmVyJ10sXG4gICAgICAgICAgICBbZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgfSwgJ2Z1bmN0aW9uJ10sXG4gICAgICAgICAgICBbL2EvLCAncmVnZXhwJ10sXG4gICAgICAgICAgICBbbmV3IERhdGUoKSwgJ2RhdGUnXSxcbiAgICAgICAgICAgIFt7fSwgJ29iamVjdCddLFxuICAgICAgICAgICAgW1tdLCAnYXJyYXknXSxcbiAgICAgICAgICAgIFsnJywgJ3N0cmluZyddLFxuICAgICAgICAgICAgW25ldyBFcnJvciwgJ2Vycm9yJ10sXG4gICAgICAgICAgICBbbmV3IFN0YWNrLCAnc3RhY2snXVxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gJyArIGIgKyAnIHdoZW4gdGhlIHZhbHVlICcgKyB0eXBlT2YoYSksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QodHlwZU9mKGEpKS50by5iZS5lcXVhbChiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7VW5pcXVlUXVldWV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvdW5pcXVlcXVldWUubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1VuaXF1ZVF1ZXVlJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBxdWV1ZTtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgcXVldWUgPSBuZXcgVW5pcXVlUXVldWU7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdpc0VtcHR5KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2ZpcnN0IGl0IHNob3VsZCBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdhZGQgc2VxdWVuY2UgcGVlayBhbmQgcG9sbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVzdWx0IGEsYSxhLGInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKHthOiAxfSkpLnRvLmJlLmluc3RhbmNlT2YoVW5pcXVlUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKHthOiAyfSkpLnRvLmJlLmluc3RhbmNlT2YoVW5pcXVlUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCh7YTogM30pKS50by5iZS5pbnN0YW5jZU9mKFVuaXF1ZVF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wZWVrKCkpLnRvLmRlZXAuZXF1YWwoe2E6MX0pO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBlZWsoKSkudG8uZGVlcC5lcXVhbCh7YToxfSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucG9sbCgpKS50by5kZWVwLmVxdWFsKHthOjF9KTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wb2xsKCkpLnRvLmRlZXAuZXF1YWwoe2E6Mn0pO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucGVlaygpKS50by5kZWVwLmVxdWFsKHthOjN9KTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wb2xsKCkpLnRvLmRlZXAuZXF1YWwoe2E6M30pO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2FkZCBhbmQgY2xlYXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKHthOiAxfSkpLnRvLmJlLmluc3RhbmNlT2YoVW5pcXVlUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuY2xlYXIoKSkudG8uYmUuaW5zdGFuY2VPZihVbmlxdWVRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG4gICAgXG4gICAgZGVzY3JpYmUoJ2FkZCBubyBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCk9PntxdWV1ZS5hZGQoW10pfSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICAgICAgZXhwZWN0KCgpPT57cXVldWUuYWRkKDEpfSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICAgICAgZXhwZWN0KCgpPT57cXVldWUuYWRkKHRydWUpfSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICAgICAgZXhwZWN0KCgpPT57cXVldWUuYWRkKCl9KS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgICAgICBleHBlY3QoKCk9PntxdWV1ZS5hZGQoU3ltYm9sKFwiMVwiKSl9KS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgICAgICBleHBlY3QoKCk9PntxdWV1ZS5hZGQoZnVuY3Rpb24oKXt9KX0pLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgfSk7XG5cbiAgICB9KVxufSkiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7U3RhY2t9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvc3RhY2subWpzXCI7XG5cblxuZGVzY3JpYmUoJ1N0YWNrJywgZnVuY3Rpb24gKCkge1xuICAgIGxldCBzdGFjaztcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgc3RhY2sgPSBuZXcgU3RhY2s7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdpc0VtcHR5KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2ZpcnN0IGl0IHNob3VsZCBlbXB0eScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdhZGQgc2VxdWVuY2UgcGVlayBhbmQgcHVsbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVzdWx0IGEsYSxhLGInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2sucHVzaCgnYScpKS50by5iZS5pbnN0YW5jZU9mKFN0YWNrKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnB1c2goJ2InKSkudG8uYmUuaW5zdGFuY2VPZihTdGFjayk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2sucHVzaCgnYycpKS50by5iZS5pbnN0YW5jZU9mKFN0YWNrKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5wZWVrKCkpLnRvLmJlLmVxdWFsKCdjJyk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2sucGVlaygpKS50by5iZS5lcXVhbCgnYycpO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnBvcCgpKS50by5iZS5lcXVhbCgnYycpO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnBlZWsoKSkudG8uYmUuZXF1YWwoJ2InKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYWRkIGFuZCBjbGVhcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGVtcHR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5wdXNoKCdhJykpLnRvLmJlLmluc3RhbmNlT2YoU3RhY2spO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2suY2xlYXIoKSkudG8uYmUuaW5zdGFuY2VPZihTdGFjayk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2suaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG59KSIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7QmFzZVdpdGhPcHRpb25zfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanNcIjtcblxuXG5kZXNjcmliZSgnQmFzZVdpdGhPcHRpb25zJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ25ldyBCYXNlV2l0aE9wdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2lzIGluc3RhbmNlIG9mIEJhc2VXaXRoT3B0aW9ucycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZVdpdGhPcHRpb25zKS50by5iZS5pbnN0YW5jZU9mKEJhc2VXaXRoT3B0aW9ucyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdpcyBpbnN0YW5jZSBvZiBPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEJhc2VXaXRoT3B0aW9ucykudG8uYmUuaW5zdGFuY2VPZihPYmplY3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnZ2V0IG9wdGlvbiBpcyB0cnVlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBCYXNlV2l0aE9wdGlvbnMoe2E6IHRydWV9KS5nZXRPcHRpb24oJ2EnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG59KSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge05vZGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7Tm9kZUxpc3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZWxpc3QubWpzXCI7XG5pbXBvcnQge05vZGVSZWN1cnNpdmVJdGVyYXRvcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzXCI7XG5cbmRlc2NyaWJlKCdOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBkZXNjcmliZSgnI2NvbnN0cnVjdG9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhbiBlbXB0eSBOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdCgpO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3Quc2l6ZSkudG8uZXF1YWwoMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIGEgTm9kZUxpc3QgZnJvbSBhbiBhcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdChbXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKSxcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JylcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3Quc2l6ZSkudG8uZXF1YWwoMyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIGEgTm9kZUxpc3QgZnJvbSBhIE5vZGVMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG5vZGVMaXN0ID0gbmV3IE5vZGVMaXN0KFtcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JyksXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKVxuICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIGxldCBub2RlTGlzdDIgPSBuZXcgTm9kZUxpc3Qobm9kZUxpc3QpO1xuXG4gICAgICAgICAgICBleHBlY3Qobm9kZUxpc3QyLnNpemUpLnRvLmVxdWFsKDMpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdjcmVhdGUgTm9kZUxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKSkuaXMuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdhZGQgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLmFkZChuZXcgTm9kZSgpKSkudG8uYmUuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdyZW1vdmUgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLnJlbW92ZShuZXcgTm9kZSgpKSkudG8uYmUuaW5zdGFuY2VvZihOb2RlTGlzdCk7XG4gICAgfSlcblxuICAgIGl0KCdoYXMgdW5rbm93biBOb2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuaGFzKG5ldyBOb2RlKSkudG8uYmUuZmFsc2U7XG4gICAgfSlcblxuICAgIGl0KCdoYXMgYWRkZWQgTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgbiA9IG5ldyBOb2RlO1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuYWRkKG4pLmhhcyhuKSkudG8uYmUudHJ1ZTtcbiAgICB9KVxuXG4gICAgaXQoJ3Rocm93IGV4Y2VwdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBOb2RlTGlzdCgpLmFkZCgxKSkudG8udGhyb3coRXJyb3IpO1xuICAgIH0pXG5cbiAgICBpdCgnY2hlY2sgbGV2ZWwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3Qgcm9vdCA9IG5ldyBOb2RlKCdyb290Jyk7XG5cbiAgICAgICAgY29uc3QgbjEgPSBuZXcgTm9kZSgnbjEnKTtcbiAgICAgICAgY29uc3QgbjIgPSBuZXcgTm9kZSgnbjInKTtcbiAgICAgICAgY29uc3QgbjMgPSBuZXcgTm9kZSgnbjMnKTtcbiAgICAgICAgY29uc3QgbjQgPSBuZXcgTm9kZSgnbjQnKTtcblxuICAgICAgICBjb25zdCBuMTEgPSBuZXcgTm9kZSgnbjExJyk7XG4gICAgICAgIGNvbnN0IG4xMiA9IG5ldyBOb2RlKCduMTInKTtcbiAgICAgICAgY29uc3QgbjEzID0gbmV3IE5vZGUoJ24xMycpO1xuXG4gICAgICAgIGNvbnN0IG4yMSA9IG5ldyBOb2RlKCduMjEnKTtcbiAgICAgICAgY29uc3QgbjIyID0gbmV3IE5vZGUoJ24yMicpO1xuICAgICAgICBjb25zdCBuMjMgPSBuZXcgTm9kZSgnbjIzJyk7XG5cbiAgICAgICAgY29uc3QgbjQxID0gbmV3IE5vZGUoJ240MScpO1xuICAgICAgICBjb25zdCBuNDIgPSBuZXcgTm9kZSgnbjQyJyk7XG5cbiAgICAgICAgY29uc3QgbjQxMSA9IG5ldyBOb2RlKCduNDExJyk7XG4gICAgICAgIGNvbnN0IG40MTIgPSBuZXcgTm9kZSgnbjQxMicpO1xuICAgICAgICBjb25zdCBuNDEzID0gbmV3IE5vZGUoJ240MTMnKTtcblxuICAgICAgICBjb25zdCBuNDEyMSA9IG5ldyBOb2RlKCduNDEyMScpO1xuXG4gICAgICAgIHJvb3QuYXBwZW5kQ2hpbGQobjEpLmFwcGVuZENoaWxkKG4yKS5hcHBlbmRDaGlsZChuMykuYXBwZW5kQ2hpbGQobjQpO1xuICAgICAgICBuMS5hcHBlbmRDaGlsZChuMTEpLmFwcGVuZENoaWxkKG4xMikuYXBwZW5kQ2hpbGQobjEzKTtcbiAgICAgICAgbjIuYXBwZW5kQ2hpbGQobjIxKS5hcHBlbmRDaGlsZChuMjIpLmFwcGVuZENoaWxkKG4yMyk7XG4gICAgICAgIG40LmFwcGVuZENoaWxkKG40MSkuYXBwZW5kQ2hpbGQobjQyKTtcbiAgICAgICAgbjQxLmFwcGVuZENoaWxkKG40MTEpLmFwcGVuZENoaWxkKG40MTIpLmFwcGVuZENoaWxkKG40MTMpO1xuICAgICAgICBuNDEyLmFwcGVuZENoaWxkKG40MTIxKTtcblxuICAgICAgICBsZXQgaXRlcmF0b3IgPSBuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKHJvb3QpO1xuXG4gICAgICAgIGxldCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBleHBlY3QobikudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG4udmFsdWUgKyBcIjpcIiArIG4ubGV2ZWwpO1xuICAgICAgICB9XG5cblxuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFtcbiAgICAgICAgICAgICdyb290OjAnLFxuICAgICAgICAgICAgJ24xOjEnLFxuICAgICAgICAgICAgJ24xMToyJyxcbiAgICAgICAgICAgICduMTI6MicsXG4gICAgICAgICAgICAnbjEzOjInLFxuICAgICAgICAgICAgJ24yOjEnLFxuICAgICAgICAgICAgJ24yMToyJyxcbiAgICAgICAgICAgICduMjI6MicsXG4gICAgICAgICAgICAnbjIzOjInLFxuICAgICAgICAgICAgJ24zOjEnLFxuICAgICAgICAgICAgJ240OjEnLFxuICAgICAgICAgICAgJ240MToyJyxcbiAgICAgICAgICAgICduNDExOjMnLFxuICAgICAgICAgICAgJ240MTI6MycsXG4gICAgICAgICAgICAnbjQxMjE6NCcsXG4gICAgICAgICAgICAnbjQxMzozJyxcbiAgICAgICAgICAgICduNDI6MidcblxuICAgICAgICBdKTtcblxuICAgICAgICBuNDEyMS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnbjQxMjExJykpO1xuXG4gICAgICAgIGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihyb290KTtcbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBpdGVyYXRvcikge1xuICAgICAgICAgICAgZXhwZWN0KG4pLnRvLmJlLmFuLmluc3RhbmNlb2YoTm9kZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuLnZhbHVlICsgXCI6XCIgKyBuLmxldmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoW1xuICAgICAgICAgICAgJ3Jvb3Q6MCcsXG4gICAgICAgICAgICAnbjE6MScsXG4gICAgICAgICAgICAnbjExOjInLFxuICAgICAgICAgICAgJ24xMjoyJyxcbiAgICAgICAgICAgICduMTM6MicsXG4gICAgICAgICAgICAnbjI6MScsXG4gICAgICAgICAgICAnbjIxOjInLFxuICAgICAgICAgICAgJ24yMjoyJyxcbiAgICAgICAgICAgICduMjM6MicsXG4gICAgICAgICAgICAnbjM6MScsXG4gICAgICAgICAgICAnbjQ6MScsXG4gICAgICAgICAgICAnbjQxOjInLFxuICAgICAgICAgICAgJ240MTE6MycsXG4gICAgICAgICAgICAnbjQxMjozJyxcbiAgICAgICAgICAgICduNDEyMTo0JyxcbiAgICAgICAgICAgICduNDEyMTE6NScsXG4gICAgICAgICAgICAnbjQxMzozJyxcbiAgICAgICAgICAgICduNDI6MidcblxuICAgICAgICBdKTtcblxuXG4gICAgICAgIGNvbnN0IGJiID0gbmV3IE5vZGUoJ2JiJykgLy8gYmlnIGJhbmdcblxuICAgICAgICBiYi5hcHBlbmRDaGlsZChyb290KTtcbiAgICAgICAgaXRlcmF0b3IgPSBuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKGJiKTtcblxuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBleHBlY3QobikudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG4udmFsdWUgKyBcIjpcIiArIG4ubGV2ZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChbXG4gICAgICAgICAgICAnYmI6MCcsXG4gICAgICAgICAgICAncm9vdDoxJyxcbiAgICAgICAgICAgICduMToyJyxcbiAgICAgICAgICAgICduMTE6MycsXG4gICAgICAgICAgICAnbjEyOjMnLFxuICAgICAgICAgICAgJ24xMzozJyxcbiAgICAgICAgICAgICduMjoyJyxcbiAgICAgICAgICAgICduMjE6MycsXG4gICAgICAgICAgICAnbjIyOjMnLFxuICAgICAgICAgICAgJ24yMzozJyxcbiAgICAgICAgICAgICduMzoyJyxcbiAgICAgICAgICAgICduNDoyJyxcbiAgICAgICAgICAgICduNDE6MycsXG4gICAgICAgICAgICAnbjQxMTo0JyxcbiAgICAgICAgICAgICduNDEyOjQnLFxuICAgICAgICAgICAgJ240MTIxOjUnLFxuICAgICAgICAgICAgJ240MTIxMTo2JyxcbiAgICAgICAgICAgICduNDEzOjQnLFxuICAgICAgICAgICAgJ240MjozJ1xuXG4gICAgICAgIF0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdMZXZlbHMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ24yIHNob3VsZCBsZXZlbCAyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCBuMCA9IG5ldyBOb2RlKCdhYmMnKTtcblxuICAgICAgICAgICAgY29uc3QgbjEgPSBuZXcgTm9kZSgnZGVmJyk7XG4gICAgICAgICAgICBuMC5hcHBlbmRDaGlsZChuMSlcblxuICAgICAgICAgICAgY29uc3QgbjIgPSBuZXcgTm9kZSgnZ2hpJyk7XG4gICAgICAgICAgICBuMS5hcHBlbmRDaGlsZChuMik7XG5cbiAgICAgICAgICAgIGNvbnN0IG4zID0gbmV3IE5vZGUoJ2prbCcpO1xuICAgICAgICAgICAgbjIuYXBwZW5kQ2hpbGQobjMpO1xuXG4gICAgICAgICAgICBleHBlY3QobjAubGV2ZWwpLnRvLmJlLmVxdWFsKDApO1xuICAgICAgICAgICAgZXhwZWN0KG4xLmxldmVsKS50by5iZS5lcXVhbCgxKTtcbiAgICAgICAgICAgIGV4cGVjdChuMi5sZXZlbCkudG8uYmUuZXF1YWwoMik7XG4gICAgICAgICAgICBleHBlY3QobjMubGV2ZWwpLnRvLmJlLmVxdWFsKDMpO1xuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgndG9TdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIG91dHB1dCBlbXB0eSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbmV3IE5vZGUoKTtcbiAgICAgICAgICAgIGV4cGVjdChub2RlLnRvU3RyaW5nKCkpLmlzLmVxdWFsKCcnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBvdXRwdXQgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgbjAgPSBuZXcgTm9kZSgnYWJjJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG4xID0gbmV3IE5vZGUoJ2RlZicpO1xuICAgICAgICAgICAgbjAuYXBwZW5kQ2hpbGQobjEpXG5cbiAgICAgICAgICAgIGNvbnN0IG4xMSA9IG5ldyBOb2RlKCdnaGknKTtcbiAgICAgICAgICAgIG4wLmFwcGVuZENoaWxkKG4xMSlcblxuICAgICAgICAgICAgY29uc3QgbjIgPSBuZXcgTm9kZSgnamtsJyk7XG4gICAgICAgICAgICBuMS5hcHBlbmRDaGlsZChuMik7XG5cbiAgICAgICAgICAgIGNvbnN0IG4zID0gbmV3IE5vZGUoJ21ubycpO1xuICAgICAgICAgICAgbjEuYXBwZW5kQ2hpbGQobjMpO1xuXG4gICAgICAgICAgICBjb25zdCBuNCA9IG5ldyBOb2RlKCdwcXInKTtcbiAgICAgICAgICAgIG4yLmFwcGVuZENoaWxkKG40KTtcblxuICAgICAgICAgICAgZXhwZWN0KG4yLmxldmVsKS50by5iZS5lcXVhbCgyKVxuXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKG4wLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgLy8gZXhwZWN0KG4wLnRvU3RyaW5nKCkpLmlzLmVxdWFsKCcnKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1F1ZXVlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3F1ZXVlLm1qc1wiO1xuXG5kZXNjcmliZSgnUXVldWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHF1ZXVlO1xuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBxdWV1ZSA9IG5ldyBRdWV1ZTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2lzRW1wdHkoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnZmlyc3QgaXQgc2hvdWxkIGVtcHR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2FkZCBzZXF1ZW5jZSBwZWVrIGFuZCBwb2xsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdyZXN1bHQgYSxhLGEsYicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5hZGQoJ2EnKSkudG8uYmUuaW5zdGFuY2VPZihRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5hZGQoJ2InKSkudG8uYmUuaW5zdGFuY2VPZihRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKCdjJykpLnRvLmJlLmluc3RhbmNlT2YoUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBlZWsoKSkudG8uYmUuZXF1YWwoJ2EnKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wZWVrKCkpLnRvLmJlLmVxdWFsKCdhJyk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucG9sbCgpKS50by5iZS5lcXVhbCgnYScpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBlZWsoKSkudG8uYmUuZXF1YWwoJ2InKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYWRkIGFuZCBjbGVhcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGVtcHR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5hZGQoJ2EnKSkudG8uYmUuaW5zdGFuY2VPZihRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5jbGVhcigpKS50by5iZS5pbnN0YW5jZU9mKFF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuXG4gICAgXG59KSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge05vZGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7Tm9kZUxpc3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZWxpc3QubWpzXCI7XG5pbXBvcnQge05vZGVSZWN1cnNpdmVJdGVyYXRvcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzXCI7XG5cbmRlc2NyaWJlKCdOb2RlUmVjdXJzaXZlSXRlcmF0b3InLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGV4ZXB0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QoKCkgPT4gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcigpKS50by50aHJvdyhFcnJvcilcbiAgICB9KTtcbiAgICBpdCgnc2hvdWxkIGJlIGEgZnVuY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChOb2RlUmVjdXJzaXZlSXRlcmF0b3IpLnRvLmJlLmEoJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJlIGEgY29uc3RydWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKG5ldyBOb2RlKSkudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlUmVjdXJzaXZlSXRlcmF0b3IpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PcGVyYXRvcnMveWllbGRcbiAgICAgKi9cbiAgICBpdCgndW5kZWZpbmVkIHNob3VsZCBub3QgcmVzdWx0IGluIHVuZGVmaW5lZCBub2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3IobmV3IE5vZGUpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIGV4cGVjdChuKS50by5iZS5hbi5pbnN0YW5jZW9mKE5vZGUpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobi52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFt1bmRlZmluZWRdKTtcblxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpdGVyYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBub2RlID1cbiAgICAgICAgICAgIG5ldyBOb2RlKCcxJylcbiAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChcbiAgICAgICAgICAgIChuZXcgTm9kZSgnMicpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMi4xJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCcyLjInKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzIuMycpKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzMnKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzQnKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnNC4xJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCc0LjInKSkpO1xuXG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihub2RlKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBleHBlY3QobikudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG4udmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChbJzEnLCAnMicsICcyLjEnLCAnMi4yJywgJzIuMycsICczJywgJzQnLCAnNC4xJywgJzQuMiddKTtcblxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpdGVyYXRlIG5vZGVsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdCgpO1xuXG4gICAgICAgIG5vZGVMaXN0LmFkZChcbiAgICAgICAgICAgIChuZXcgTm9kZSgnMicpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMi4xJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCcyLjInKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzIuMycpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMycpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnNCcpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCc0LjEnKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzQuMicpKSkpO1xuXG4gICAgICAgIG5vZGVMaXN0LmFkZChuZXcgTm9kZSgneCcpKTtcblxuICAgICAgICBjb25zdCBpdGVyYXRvciA9IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3Iobm9kZUxpc3QpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIGV4cGVjdChuKS50by5iZS5hbi5pbnN0YW5jZW9mKE5vZGUpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobi52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoWycyJywgJzIuMScsICcyLjInLCAnMi4zJywgJzMnLCAnNCcsICc0LjEnLCAnNC4yJywgJ3gnXSk7XG5cbiAgICB9KTtcblxufSk7IiwgIlxuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtmb3JtYXRUaW1lQWdvfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vdGltZS1hZ28ubWpzXCI7XG5cbmRlc2NyaWJlKCdmb3JtYXRUaW1lQWdvJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIFwianVzdCBub3dcIiBmb3IgdGltZXMgbGVzcyB0aGFuIGEgc2Vjb25kIGFnbycsICgpID0+IHtcbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgICAgZXhwZWN0KGZvcm1hdFRpbWVBZ28obm93LCAnZW4nKSkudG8uZXF1YWwoJ2p1c3Qgbm93Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBcImluIDEgc2Vjb25kXCIgZm9yIG9uZSBzZWNvbmQgaW4gdGhlIGZ1dHVyZScsICgpID0+IHtcbiAgICAgICAgY29uc3Qgb25lU2Vjb25kRnV0dXJlID0gbmV3IERhdGUoRGF0ZS5ub3coKSArIDEwMDApO1xuICAgICAgICBleHBlY3QoZm9ybWF0VGltZUFnbyhvbmVTZWNvbmRGdXR1cmUsICdlbicpKS50by5lcXVhbCgnaW4gMSBzZWNvbmQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIFwiMSBzZWNvbmQgYWdvXCIgZm9yIG9uZSBzZWNvbmQgaW4gdGhlIHBhc3QnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9uZVNlY29uZFBhc3QgPSBuZXcgRGF0ZShEYXRlLm5vdygpIC0gMTAwMCk7XG4gICAgICAgIGV4cGVjdChmb3JtYXRUaW1lQWdvKG9uZVNlY29uZFBhc3QsICdlbicpKS50by5lcXVhbCgnMSBzZWNvbmQgYWdvJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBcImluIDEgbWludXRlLCAzMCBzZWNvbmRzXCIgZm9yIDkwIHNlY29uZHMgaW4gdGhlIGZ1dHVyZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgbmluZXR5U2Vjb25kc0Z1dHVyZSA9IG5ldyBEYXRlKERhdGUubm93KCkgKyA5MDAwMCk7XG4gICAgICAgIGV4cGVjdChmb3JtYXRUaW1lQWdvKG5pbmV0eVNlY29uZHNGdXR1cmUsICdlbicpKS50by5lcXVhbCgnaW4gMSBtaW51dGUgYW5kIDMwIHNlY29uZHMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIFwiMSBtaW51dGUsIDMwIHNlY29uZHMgYWdvXCIgZm9yIDkwIHNlY29uZHMgaW4gdGhlIHBhc3QnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG5pbmV0eVNlY29uZHNQYXN0ID0gbmV3IERhdGUoRGF0ZS5ub3coKSAtIDkwMDAwKTtcbiAgICAgICAgZXhwZWN0KGZvcm1hdFRpbWVBZ28obmluZXR5U2Vjb25kc1Bhc3QsICdlbicpKS50by5lcXVhbCgnMSBtaW51dGUgYW5kIDMwIHNlY29uZHMgYWdvJyk7XG4gICAgfSk7XG5cbiAgICAvLyBXZWl0ZXJlIFRlc3RzIGtcdTAwRjZubmVuIGhpbnp1Z2VmXHUwMEZDZ3Qgd2VyZGVuXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCwgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuXG5pbXBvcnQgeyBGb3JtYXR0ZXIgYXMgVGV4dEZvcm1hdHRlciB9IGZyb20gXCIuLi90ZXh0L2Zvcm1hdHRlci5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25zIH0gZnJvbSBcIi4vdHJhbnNsYXRpb25zLm1qc1wiO1xuXG5leHBvcnQgeyBGb3JtYXR0ZXIgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWxUcmFuc2xhdGlvblN5bWJvbCA9IFN5bWJvbChcImludGVybmFsVHJhbnNsYXRpb25cIik7XG5cbi8qKlxuICogVGhlIEZvcm1hdHRlciBleHRlbmRzIHRoZSBUZXh0LkZvcm1hdHRlciB3aXRoIHRoZSBwb3NzaWJpbGl0eSB0byByZXBsYWNlIHRoZSBrZXkgYnkgYSB0cmFuc2xhdGlvbi5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI2LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIEZvcm1hdHRlciBleHRlbmRzIFRleHRGb3JtYXR0ZXIge1xuXHQvKipcblx0ICogRGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBtYXJrZXJzIGFyZSBgJHtgIGFuZCBgfWBcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG9iamVjdFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuXHQgKi9cblx0Y29uc3RydWN0b3Iob2JqZWN0LCB0cmFuc2xhdGlvbiwgb3B0aW9ucykge1xuXHRcdHN1cGVyKG9iamVjdCwgb3B0aW9ucyk7XG5cdFx0dGhpc1tpbnRlcm5hbFRyYW5zbGF0aW9uU3ltYm9sXSA9IHZhbGlkYXRlSW5zdGFuY2UoXG5cdFx0XHR0cmFuc2xhdGlvbixcblx0XHRcdFRyYW5zbGF0aW9ucyxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvaTE4bi9mb3JtYXR0ZXJAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBtYXJrZXJcblx0ICogQHByb3BlcnR5IHthcnJheX0gbWFya2VyLm9wZW49W1wiaTE4bntcIixcIiR7XCJdXG5cdCAqIEBwcm9wZXJ0eSB7YXJyYXl9IG1hcmtlci5jbG9zZT1bXCIke1wiXVxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gcGFyYW1ldGVyXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXJhbWV0ZXIuZGVsaW1pdGVyPVwiOjpcIlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcGFyYW1ldGVyLmFzc2lnbm1lbnQ9XCI9XCJcblx0ICogQHByb3BlcnR5IHtvYmplY3R9IGNhbGxiYWNrc1xuXHQgKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBjYWxsYmFja3MuaTE4bj0oKT0+e31cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0Y2FsbGJhY2tzOiB7XG5cdFx0XHRcdGkxOG46ICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzW2ludGVybmFsVHJhbnNsYXRpb25TeW1ib2xdLmdldFRleHQodmFsaWRhdGVTdHJpbmcodmFsdWUpKTtcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRtYXJrZXI6IHtcblx0XHRcdFx0b3BlbjogW1wiaTE4bntcIiwgXCIke1wiXSxcblx0XHRcdFx0Y2xvc2U6IFtcIn1cIl0sXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7RXJyb3J9IHRvbyBkZWVwIG5lc3Rpbmdcblx0ICogQHRocm93cyB7RXJyb3J9IGtleSBub3QgZm91bmRcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBjbG9zaW5nIG1hcmtlciBpcyBtaXNzaW5nXG5cdCAqL1xuXHRmb3JtYXQodGV4dCkge1xuXHRcdHZhbGlkYXRlU3RyaW5nKHRleHQpO1xuXG5cdFx0Y29uc3Qgb3Blbk1hcmtlciA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wib3BlblwiXT8uWzBdO1xuXHRcdGNvbnN0IGNsb3NlTWFya2VyID0gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJjbG9zZVwiXT8uWzBdO1xuXG5cdFx0aWYgKHRleHQuaW5kZXhPZihvcGVuTWFya2VyKSA9PT0gMCkge1xuXHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKG9wZW5NYXJrZXIubGVuZ3RoKTtcblxuXHRcdFx0aWYgKHRleHQuaW5kZXhPZihjbG9zZU1hcmtlcikgPT09IHRleHQubGVuZ3RoIC0gY2xvc2VNYXJrZXIubGVuZ3RoKSB7XG5cdFx0XHRcdHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCB0ZXh0Lmxlbmd0aCAtIGNsb3NlTWFya2VyLmxlbmd0aCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgY2xvc2luZyBtYXJrZXIgaXMgbWlzc2luZ1wiKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBwYXJ0cyA9IHZhbGlkYXRlU3RyaW5nKHRleHQpLnNwbGl0KFwiOjpcIik7XG5cdFx0Y29uc3QgdHJhbnNsYXRpb25LZXkgPSBwYXJ0cy5zaGlmdCgpLnRyaW0oKTsgLy8ga2V5IHZhbHVlIGRlbGltaXRlclxuXHRcdGNvbnN0IHBhcmFtZXRlciA9IHBhcnRzLmpvaW4oXCI6OlwiKS50cmltKCk7XG5cblx0XHRsZXQgYXNzZW1ibGVkVGV4dCA9IGAke29wZW5NYXJrZXJ9c3RhdGljOiR7dHJhbnNsYXRpb25LZXl9IHwgY2FsbDppMThuYDtcblx0XHRpZiAocGFyYW1ldGVyLmxlbmd0aCA+IDApIHtcblx0XHRcdGFzc2VtYmxlZFRleHQgKz0gYDo6JHtwYXJhbWV0ZXJ9YDtcblx0XHR9XG5cdFx0YXNzZW1ibGVkVGV4dCArPSBjbG9zZU1hcmtlcjtcblx0XHRyZXR1cm4gc3VwZXIuZm9ybWF0KGFzc2VtYmxlZFRleHQpO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Rm9ybWF0dGVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vZm9ybWF0dGVyLm1qc1wiO1xuaW1wb3J0IHtUcmFuc2xhdGlvbnN9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0Zvcm1hdHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdleGFtcGxlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIHdpdGggbWFya2VyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBuZXcgVHJhbnNsYXRpb25zKCdlbicpXG4gICAgICAgICAgICAgICAgLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIHRoZWtleTogXCIke2FuaW1hbH0gaGFzIGVhdGVuIHRoZSAke2Zvb2R9IVwiXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGYgPSBuZXcgRm9ybWF0dGVyKHt9LCB0cmFuc2xhdGlvbnMpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBleHBlY3QoZi5mb3JtYXQoXCJpMThue3RoZWtleTo6YW5pbWFsPWRvZzo6Zm9vZD1jYWtlfVwiKSkudG8uYmUuZXF1YWwoJ2RvZyBoYXMgZWF0ZW4gdGhlIGNha2UhJyk7XG4gICAgICAgICAgICAvLyBcdTIxQTYgZG9nIGhhcyBlYXRlbiB0aGUgY2FrZSEgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnc2hvdWxkIHJ1biB3aXRob3V0IG1hcmtlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zID0gbmV3IFRyYW5zbGF0aW9ucygnZW4nKVxuICAgICAgICAgICAgICAgIC5hc3NpZ25UcmFuc2xhdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICB0aGVrZXk6IFwiJHthbmltYWx9IGhhcyBlYXRlbiB0aGUgJHtmb29kfSFcIlxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBtaXNzaW5nIG1hcmtlclxuICAgICAgICAgICAgZXhwZWN0KG5ldyBGb3JtYXR0ZXIoe30sIHRyYW5zbGF0aW9ucykuZm9ybWF0KFwidGhla2V5OjphbmltYWw9ZG9nOjpmb29kPWNha2VcIikpLnRvLmJlLmVxdWFsKCdkb2cgaGFzIGVhdGVuIHRoZSBjYWtlIScpO1xuICAgICAgICAgICAgLy8gXHUyMUE2IGRvZyBoYXMgZWF0ZW4gdGhlIGNha2UhICAgICAgICAgICAgICAgIFxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnZm9ybWF0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnaTE4bnt0cmFuc2xhdGlvbmtleTo6YT0zOjpiPTV9JywgJ3Rlc3QgaXMgMyBhbmQgNSddLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2Zvcm1hdCAnICsgYSArICcgc2hvdWxkICcgKyBiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBuZXcgVHJhbnNsYXRpb25zKCdkZScpLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9ua2V5OiBcInRlc3QgaXMgJHthfSBhbmQgJHtifVwiXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGV4cGVjdChcbiAgICAgICAgICAgICAgICAgICAgbmV3IEZvcm1hdHRlcih7fSwgdHJhbnNsYXRpb25zKS5mb3JtYXQoYSlcbiAgICAgICAgICAgICAgICApLnRvLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cblxufSlcbjsiLCAiXG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge3BhcnNlTG9jYWxlLCBMb2NhbGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi9sb2NhbGUubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0xvY2FsZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCduZXcgaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgLy8gbGFuZ3VhZ2UsIHJlZ2lvbiwgc2NyaXB0LCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzU2NDYuaHRtbFxuICAgICAgICAgICAgWyd6aCcsIHVuZGVmaW5lZCwgJ0hhbnQnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnemgtSGFudCddLCAvLyB6aC1IYW50IChDaGluZXNlIHdyaXR0ZW4gdXNpbmcgdGhlIFRyYWRpdGlvbmFsIENoaW5lc2Ugc2NyaXB0KVxuICAgICAgICAgICAgWydkZScsICdDSCcsIHVuZGVmaW5lZCwgJzE5MDEnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ2RlLUNILTE5MDEnXSwgIC8vIGRlLUNILTE5MDEgKEdlcm1hbiBhcyB1c2VkIGluIFN3aXR6ZXJsYW5kIHVzaW5nIHRoZSAxOTAxIHZhcmlhbnQgW29ydGhvZ3JhcGh5XSlcbiAgICAgICAgICAgIFsnc2wnLCAnSVQnLCB1bmRlZmluZWQsICduZWRpcycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnc2wtSVQtbmVkaXMnXSwgIC8vIHNsLUlULW5lZGlzIChTbG92ZW5pYW4gYXMgdXNlZCBpbiBJdGFseSwgTmFkaXphIGRpYWxlY3QpXG4gICAgICAgICAgICBbJ2h5JywgJ0lUJywgJ0xhdG4nLCAnYXJldmVsYScsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnaHktTGF0bi1JVC1hcmV2ZWxhJ10sIC8vIGh5LUxhdG4tSVQtYXJldmVsYSAoRWFzdGVybiBBcm1lbmlhbiB3cml0dGVuIGluIExhdGluIHNjcmlwdCwgYXMgdXNlZCBpbiBJdGFseSlcbiAgICAgICAgICAgIFsnemgnLCAnQ04nLCAnSGFucycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICd6aC1IYW5zLUNOJ10sIC8vIHpoLUhhbnMtQ04gKENoaW5lc2Ugd3JpdHRlbiB1c2luZyB0aGUgU2ltcGxpZmllZCBzY3JpcHQgYXMgdXNlZCBpbiAgbWFpbmxhbmQgQ2hpbmEpXG4gICAgICAgICAgICBbJ3NyJywgJ1JTJywgJ0xhdG4nLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnc3ItTGF0bi1SUyddLCAvLyBzci1MYXRuLVJTIChTZXJiaWFuIHdyaXR0ZW4gdXNpbmcgdGhlIExhdGluIHNjcmlwdCBhcyB1c2VkIGluIFNlcmJpYSlcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBlID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGcgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ25ldyBMb2NhbGUoJyArIGEgKyAnLCcgKyBiICsgJywnICsgYyArICcsJyArIGQgKyAnLCcgKyBlICsgJywnICsgZiArICcpIHNob3VsZCByZXR1cm4gJyArIGcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgTG9jYWxlKGEsIGIsIGMsIGQsIGUsIGYpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKGcpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdwYXJzZUxvY2FsZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcblxuICAgICAgICAgICAgLy8gbGFuZ3VhZ2UsIHJlZ2lvbiwgc2NyaXB0LCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZVxuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzU2NDYuaHRtbFxuICAgICAgICAgICAgWyd6aCcsIHVuZGVmaW5lZCwgJ0hhbnQnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnemgtSGFudCddLCAvLyB6aC1IYW50IChDaGluZXNlIHdyaXR0ZW4gdXNpbmcgdGhlIFRyYWRpdGlvbmFsIENoaW5lc2Ugc2NyaXB0KVxuICAgICAgICAgICAgWydkZScsICdDSCcsIHVuZGVmaW5lZCwgJzE5MDEnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ2RlLUNILTE5MDEnXSwgIC8vIGRlLUNILTE5MDEgKEdlcm1hbiBhcyB1c2VkIGluIFN3aXR6ZXJsYW5kIHVzaW5nIHRoZSAxOTAxIHZhcmlhbnQgW29ydGhvZ3JhcGh5XSlcbiAgICAgICAgICAgIFsnc2wnLCAnSVQnLCB1bmRlZmluZWQsICduZWRpcycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnc2wtSVQtbmVkaXMnXSwgIC8vIHNsLUlULW5lZGlzIChTbG92ZW5pYW4gYXMgdXNlZCBpbiBJdGFseSwgTmFkaXphIGRpYWxlY3QpXG4gICAgICAgICAgICBbJ2h5JywgJ0lUJywgJ0xhdG4nLCAnYXJldmVsYScsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnaHktTGF0bi1JVC1hcmV2ZWxhJ10sIC8vIGh5LUxhdG4tSVQtYXJldmVsYSAoRWFzdGVybiBBcm1lbmlhbiB3cml0dGVuIGluIExhdGluIHNjcmlwdCwgYXMgdXNlZCBpbiBJdGFseSlcbiAgICAgICAgICAgIFsnemgnLCAnQ04nLCAnSGFucycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICd6aC1IYW5zLUNOJ10sIC8vIHpoLUhhbnMtQ04gKENoaW5lc2Ugd3JpdHRlbiB1c2luZyB0aGUgU2ltcGxpZmllZCBzY3JpcHQgYXMgdXNlZCBpbiAgbWFpbmxhbmQgQ2hpbmEpXG4gICAgICAgICAgICBbJ3NyJywgJ1JTJywgJ0xhdG4nLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnc3ItTGF0bi1SUyddLCAvLyBzci1MYXRuLVJTIChTZXJiaWFuIHdyaXR0ZW4gdXNpbmcgdGhlIExhdGluIHNjcmlwdCBhcyB1c2VkIGluIFNlcmJpYSlcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBlID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGcgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ25ldyBMb2NhbGUoJyArIGEgKyAnLCcgKyBiICsgJywnICsgYyArICcsJyArIGQgKyAnLCcgKyBlICsgJywnICsgZiArICcpIHNob3VsZCByZXR1cm4gJyArIGcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsZSA9IHBhcnNlTG9jYWxlKGcpXG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS5sb2NhbGVTdHJpbmcpLnRvLmJlLmVxdWFsKGcpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChsb2NhbGUubGFuZ3VhZ2UpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChsb2NhbGUucmVnaW9uKS50by5iZS5lcXVhbChiKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobG9jYWxlLnNjcmlwdCkudG8uYmUuZXF1YWwoYyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS52YXJpYW50cykudG8uYmUuZXF1YWwoZCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS5leHRsYW5nKS50by5iZS5lcXVhbChlKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobG9jYWxlLnByaXZhdGVVc2UpLnRvLmJlLmVxdWFsKGYpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2NhbGUoYSwgYiwgYywgZCwgZSwgZikudG9TdHJpbmcoKSkuaXMuZXF1YWwoZylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtBVFRSSUJVVEVfT0JKRUNUTElOS30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtnZXRMaW5rZWRPYmplY3RzfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtQcm92aWRlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVyLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtnZXREb2N1bWVudFRyYW5zbGF0aW9ucywgVHJhbnNsYXRpb25zfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vdHJhbnNsYXRpb25zLm1qc1wiO1xuXG5kZXNjcmliZSgnUHJvdmlkZXInLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgIGxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG5cbiAgICB9KVxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgfSlcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdQcm92aWRlciBhbmQgRG9tJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL3RyYW5zbGF0aW9uc0BAbGlua1wiKTtcblxuICAgICAgICBpdCgnYXNzaWduVG9FbGVtZW50JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBuZXcgUHJvdmlkZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBwLmFzc2lnblRvRWxlbWVudCh1bmRlZmluZWQsIGVsZW1lbnQpO1xuXG4gICAgICAgICAgICByLnRoZW4oKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX09CSkVDVExJTkspO1xuICAgICAgICAgICAgICAgIGlmIChzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKFwiQXR0cmlidXRlIG5vdCBzZXRcIikpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaSA9IGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbClcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcIk5vIGxpbmtlZCBvYmplY3QgZm91bmRcIikpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBjb3VudGVyID0gMDtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IHYgb2YgaSkge1xuICAgICAgICAgICAgICAgICAgICBjb3VudGVyKys7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ZXIgIT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJObyBsaW5rZWQgb2JqZWN0IGZvdW5kXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGRvY1RyYW5zID0gZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoZWxlbWVudClcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jVHJhbnMpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcblxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBGb3JtYXR0ZXIgfSBmcm9tIFwiLi4vLi4vdGV4dC9mb3JtYXR0ZXIubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBpc0luc3RhbmNlLCBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0LCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IHBhcnNlTG9jYWxlIH0gZnJvbSBcIi4uL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcIi4uL3Byb3ZpZGVyLm1qc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25zIH0gZnJvbSBcIi4uL3RyYW5zbGF0aW9ucy5tanNcIjtcblxuZXhwb3J0IHsgRmV0Y2ggfTtcblxuLyoqXG4gKiBUaGUgZmV0Y2ggcHJvdmlkZXIgcmV0cmlldmVzIGEgSlNPTiBmaWxlIGZyb20gdGhlIGdpdmVuIFVSTCBhbmQgcmV0dXJucyBhIHRyYW5zbGF0aW9uIG9iamVjdC5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uLy4uL2V4YW1wbGUvaTE4bi9wcm92aWRlcnMvZmV0Y2gubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEzLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzMwNjZ9XG4gKiBAdHV0b3JpYWwgaTE4bi1sb2NhbGUtYW5kLWZvcm1hdHRlclxuICovXG5jbGFzcyBGZXRjaCBleHRlbmRzIFByb3ZpZGVyIHtcblx0LyoqXG5cdCAqIEFzIG9wdGlvbnMgdGhlIGtleSBgZmV0Y2hgIGNhbiBiZSBwYXNzZWQuIFRoaXMgY29uZmlnIG9iamVjdCBpcyBwYXNzZWQgdG8gdGhlIGZldGNoIG1ldGhvZCBhcyBpbml0LlxuXHQgKlxuXHQgKiBUaGUgdXJsIG1heSBjb250YWluIHBsYWNlaG9sZGVycyAobGFuZ3VhZ2UsIHNjcmlwdCwgcmVnaW9uLCB2YXJpYW50cywgZXh0bGFuZywgcHJpdmF0ZVVzZSksIHNvIHlvdSBjYW4gc3BlY2lmeSBvbmUgdXJsIGZvciBhbGwgdHJhbnNsYXRpb25zLlxuXHQgKlxuXHQgKiBgYGBcblx0ICogbmV3IEZldGNoKCdodHRwczovL3d3dy5leGFtcGxlLmNvbS9hc3NldHMvJHtsYW5ndWFnZX0uanNvbicpXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBzZWUge0BsaW5rIE1vbnN0ZXIuSTE4bi5Qcm92aWRlcnMuRmV0Y2gjZGVmYXVsdHN9XG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9mZXRjaH1cblx0ICovXG5cdGNvbnN0cnVjdG9yKHVybCwgb3B0aW9ucykge1xuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXG5cdFx0aWYgKGlzSW5zdGFuY2UodXJsLCBVUkwpKSB7XG5cdFx0XHR1cmwgPSB1cmwudG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb25zID0ge307XG5cdFx0fVxuXG5cdFx0dmFsaWRhdGVTdHJpbmcodXJsKTtcblxuXHRcdC8qKlxuXHRcdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfVxuXHRcdCAqL1xuXHRcdHRoaXMudXJsID0gdXJsO1xuXG5cdFx0LyoqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcHJvcGVydHkge09iamVjdH0gb3B0aW9uc1xuXHRcdCAqL1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gZXh0ZW5kKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHRoaXMuZGVmYXVsdHMsXG5cdFx0XHR2YWxpZGF0ZU9iamVjdChvcHRpb25zKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmF1bHRzXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubWV0aG9kPUdFVFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubW9kZT1jb3JzXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jYWNoZT1uby1jYWNoZVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2guY3JlZGVudGlhbHM9b21pdFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gucmVkaXJlY3Q9Zm9sbG93XG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWZlcnJlclBvbGljeT1uby1yZWZlcnJlclxuXHQgKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoXG5cdFx0XHR7XG5cdFx0XHRcdGZldGNoOiB7XG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLCAvLyAqR0VULCBQT1NULCBQVVQsIERFTEVURSwgZXRjLlxuXHRcdFx0XHRcdG1vZGU6IFwiY29yc1wiLCAvLyBuby1jb3JzLCAqY29ycywgc2FtZS1vcmlnaW5cblx0XHRcdFx0XHRjYWNoZTogXCJuby1jYWNoZVwiLCAvLyAqZGVmYXVsdCwgbm8tY2FjaGUsIHJlbG9hZCwgZm9yY2UtY2FjaGUsIG9ubHktaWYtY2FjaGVkXG5cdFx0XHRcdFx0Y3JlZGVudGlhbHM6IFwib21pdFwiLCAvLyBpbmNsdWRlLCAqc2FtZS1vcmlnaW4sIG9taXRcblx0XHRcdFx0XHRyZWRpcmVjdDogXCJmb2xsb3dcIiwgLy8gbWFudWFsLCAqZm9sbG93LCBlcnJvclxuXHRcdFx0XHRcdHJlZmVycmVyUG9saWN5OiBcIm5vLXJlZmVycmVyXCIsIC8vIG5vLXJlZmVycmVyLCAqbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUsIG9yaWdpbiwgb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luLCBzYW1lLW9yaWdpbiwgc3RyaWN0LW9yaWdpbiwgc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbiwgdW5zYWZlLXVybFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtMb2NhbGV8c3RyaW5nfSBsb2NhbGVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGdldFRyYW5zbGF0aW9ucyhsb2NhbGUpIHtcblx0XHRpZiAoaXNTdHJpbmcobG9jYWxlKSkge1xuXHRcdFx0bG9jYWxlID0gcGFyc2VMb2NhbGUobG9jYWxlKTtcblx0XHR9XG5cblx0XHRjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKGxvY2FsZS5nZXRNYXAoKSk7XG5cblx0XHRyZXR1cm4gZ2V0R2xvYmFsRnVuY3Rpb24oXCJmZXRjaFwiKShcblx0XHRcdGZvcm1hdHRlci5mb3JtYXQodGhpcy51cmwpLFxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJmZXRjaFwiLCB7fSksXG5cdFx0KVxuXHRcdFx0LnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5qc29uKCkpXG5cdFx0XHQudGhlbigoZGF0YSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFRyYW5zbGF0aW9ucyhsb2NhbGUpLmFzc2lnblRyYW5zbGF0aW9ucyhkYXRhKTtcblx0XHRcdH0pO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuXG5pbXBvcnQge0ZldGNofSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXJzL2ZldGNoLm1qc1wiO1xuaW1wb3J0IHtUcmFuc2xhdGlvbnN9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5cblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5sZXQgZmV0Y2hSZWZlcmVuY2U7XG5cblxuZGVzY3JpYmUoJ1RyYW5zbGF0aW9uIFByb3ZpZGVyIEZldGNoJywgZnVuY3Rpb24gKCkge1xuXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgIGZldGNoUmVmZXJlbmNlID0gZ2xvYmFsWydmZXRjaCddO1xuICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBqc29uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IFwidGVzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZmV0Y2ggbW9jayBkYXRhIGFuZCBjcmVhdGUgdHJhbnNsYXRpb24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2ZldGNoJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IHAgPSAobmV3IEZldGNoKG5ldyBVUkwoJ2h0dHA6Ly9leGFtcGxlLmNvbScpKSkuZ2V0VHJhbnNsYXRpb25zKCdlbicpO1xuXG4gICAgICAgICAgICBleHBlY3QocCkuaXMuaW5zdGFuY2VvZihQcm9taXNlKTtcblxuICAgICAgICAgICAgcC50aGVuKHIgPT4ge1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHIpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuXG5pbXBvcnQge0VtYmVkfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qc1wiO1xuaW1wb3J0IHtUcmFuc2xhdGlvbnN9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmNvbnN0IGh0bWwxID0gYFxuPHNjcmlwdCBpZD1cInRlbXBsb2NhbGVcIiB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiPlxue1xuICAgICAgICBcImtleVwiOiBcInRyYW5zbGF0aW9uXCJcbn1cbjwvc2NyaXB0PlxuYDtcblxuZGVzY3JpYmUoJ1RyYW5zbGF0aW9uIFByb3ZpZGVyIEVtYmVkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2dldCBtb2NrIGRhdGEgYW5kIGNyZWF0ZSB0cmFuc2xhdGlvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnZW1iZWQnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCBlID0gbmV3IEVtYmVkKCd0ZW1wbG9jYWxlJyk7XG4gICAgICAgICAgICBsZXQgcCA9IGUuZ2V0VHJhbnNsYXRpb25zKCdlbicpO1xuICAgICAgICAgICAgZXhwZWN0KHApLmlzLmluc3RhbmNlb2YoUHJvbWlzZSk7XG5cbiAgICAgICAgICAgIHAudGhlbihyID0+IHtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChyKS5pcy5pbnN0YW5jZW9mKFRyYW5zbGF0aW9ucyk7XG4gXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ID0gci5nZXRUZXh0KCdrZXknKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QodCkuaXMuZXF1YWwoJ3RyYW5zbGF0aW9uJyk7XG5cblxuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtwYXJzZUxvY2FsZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7RW1iZWR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzXCI7XG5pbXBvcnQge1xuICAgIFRyYW5zbGF0aW9ucyxcbiAgICBnZXREb2N1bWVudFRyYW5zbGF0aW9uc1xuICAgIFxufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vdHJhbnNsYXRpb25zLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnVHJhbnNsYXRpb25zJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ0luc3RhbmNlIGFuZCBJbml0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCB0cmFuc2xhdGlvbjtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uID0gbmV3IFRyYW5zbGF0aW9ucyhwYXJzZUxvY2FsZSgnZW4tR0InKSk7XG5cbiAgICAgICAgICAgIHRyYW5zbGF0aW9uLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgdGVzdDE6IFwiYWJjXCIsXG4gICAgICAgICAgICAgICAgdGVzdDI6IHsnb3RoZXInOiAneHl6J31cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdjcmVhdGUgaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFRyYW5zbGF0aW9ucyhwYXJzZUxvY2FsZSgnZW4tR0InKSkpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2luaXQgdHJhbnNsYXRpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHRyYW5zbGF0aW9uLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgdGVzdDE6IFwiYWJjXCIsXG4gICAgICAgICAgICAgICAgdGVzdDI6IHsnb3RoZXInOiAneHl6J31cbiAgICAgICAgICAgIH0pKS5pcy5pbnN0YW5jZW9mKFRyYW5zbGF0aW9ucyk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ2V0VGV4dCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgdHJhbnNsYXRpb247XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICB0cmFuc2xhdGlvbiA9IG5ldyBUcmFuc2xhdGlvbnMocGFyc2VMb2NhbGUoJ2VuLUdCJykpO1xuXG4gICAgICAgICAgICB0cmFuc2xhdGlvbi5hc3NpZ25UcmFuc2xhdGlvbnMoe1xuICAgICAgICAgICAgICAgIHRlc3QxOiBcImFiY1wiLFxuICAgICAgICAgICAgICAgIHRlc3QyOiB7J290aGVyJzogJ3h5eid9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnY3JlYXRlLCBzZXQgYW5kIGdldCBlbi1HQicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCh0cmFuc2xhdGlvbi5nZXRUZXh0KCd0ZXN0MScpKS5pcy5lcXVhbCgnYWJjJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdjcmVhdGUsIHNldCBhbmQgZ2V0ICBlbi1HQiB3aXRoIHBsdXJhbHJ1bGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHRyYW5zbGF0aW9uLmdldFRleHQoJ3Rlc3QyJykpLmlzLmVxdWFsKCd4eXonKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogaW5pdERvY3VtZW50VHJhbnNsYXRpb25cbiAgICAgKi9cblxuICAgIGRlc2NyaWJlKFwidGVzdCBpbml0RG9jdW1lbnRUcmFuc2xhdGlvbiBcIiwgZnVuY3Rpb24gKCkge1xuXG5cbiAgICAgICAgbGV0IGh0bWwxID0gYDxkaXYgaWQ9XCJtb2NrLXRyYW5zbGF0aW9uc1wiPjwvZGl2PlxuICAgIFxuPHNjcmlwdCB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiIGRhdGEtbW9uc3Rlci1yb2xlPVwidHJhbnNsYXRpb25zXCI+XG4gICAge1xuICAgICAgICBcInRlc3QxXCI6IFwiYWJjXCIsXG4gICAgICAgIFwidGVzdDJcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcInh5elwiXG4gICAgICAgIH1cbiAgICB9XG48L3NjcmlwdD5cblxuPHNjcmlwdCB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiIGRhdGEtbW9uc3Rlci1yb2xlPVwidHJhbnNsYXRpb25zXCI+XG4gICAge1xuICAgICAgICBcInRlc3QxXCI6IFwieHl6XCIsXG4gICAgICAgIFwidGVzdDNcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcInh5elwiXG4gICAgICAgIH1cbiAgICB9XG48L3NjcmlwdD4gICAgXG4gICAgXG5gO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIGl0KCdJbml0IHRyYW5zbGF0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2stdHJhbnNsYXRpb25zJyk7XG4gICAgICAgICAgICBFbWJlZC5hc3NpZ25UcmFuc2xhdGlvbnNUb0VsZW1lbnQoZWxlbSkudGhlbigobykgPT4ge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gbm8gZXhjZXB0aW9uIGJlY2F1c2Ugb2YgZGVmYXVsdFxuICAgICAgICAgICAgICAgIGV4cGVjdChnZXREb2N1bWVudFRyYW5zbGF0aW9ucyhlbGVtKS5nZXRUZXh0KCduby1rZXknLCd3aXRoLWRlZmF1bHQnKSlcbiAgICAgICAgICAgICAgICAgICAgLmlzLmVxdWFsKCd3aXRoLWRlZmF1bHQnKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBleHBlY3QoZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoZWxlbSkuZ2V0VGV4dCgndGVzdDEnKSlcbiAgICAgICAgICAgICAgICAgICAgLmlzLmVxdWFsKCd4eXonKTtcblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG5cbn0pOyJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUNBLFdBQVMsV0FBVyxPQUFPO0FBQzFCLFFBQUksVUFBVSxPQUFXLFFBQU87QUFDaEMsUUFBSSxVQUFVLEtBQU0sUUFBTztBQUMzQixXQUFPLE9BQU8sUUFBUSxPQUFPLFFBQVEsTUFBTTtBQUFBLEVBQzVDO0FBY0EsV0FBUyxZQUFZLE9BQU87QUFDM0IsUUFBSUE7QUFFSixRQUFJLFVBQVUsVUFBYSxVQUFVLE1BQU07QUFDMUMsYUFBTztBQUFBLElBQ1I7QUFFQSxJQUFBQSxRQUFPLE9BQU87QUFFZCxRQUNDQSxVQUFTLFlBQ1RBLFVBQVMsWUFDVEEsVUFBUyxhQUNUQSxVQUFTLFVBQ1I7QUFDRCxhQUFPO0FBQUEsSUFDUjtBQUVBLFdBQU87QUFBQSxFQUNSO0FBY0EsV0FBUyxTQUFTLE9BQU87QUFDeEIsV0FBTyxhQUFhLE9BQU8sUUFBUSxPQUFPO0FBQUEsRUFDM0M7QUFjQSxXQUFTLFVBQVUsT0FBTztBQUN6QixRQUFJLFVBQVUsUUFBUSxVQUFVLE9BQU87QUFDdEMsYUFBTztBQUFBLElBQ1I7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQWNBLFdBQVMsU0FBUyxPQUFPO0FBQ3hCLFFBQUksVUFBVSxVQUFhLE9BQU8sVUFBVSxVQUFVO0FBQ3JELGFBQU87QUFBQSxJQUNSO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFjQSxXQUFTLFNBQVMsT0FBTztBQUN4QixRQUFJLFFBQVEsS0FBSyxFQUFHLFFBQU87QUFDM0IsUUFBSSxZQUFZLEtBQUssRUFBRyxRQUFPO0FBRS9CLFFBQUksT0FBTyxVQUFVLFVBQVU7QUFDOUIsYUFBTztBQUFBLElBQ1I7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQWVBLFdBQVMsV0FBVyxPQUFPLFVBQVU7QUFDcEMsUUFBSSxDQUFDLFNBQVMsS0FBSyxFQUFHLFFBQU87QUFDN0IsUUFBSSxDQUFDLFdBQVcsUUFBUSxFQUFHLFFBQU87QUFDbEMsUUFBSSxDQUFDLFNBQVMsZUFBZSxXQUFXLEVBQUcsUUFBTztBQUNsRCxRQUFJLGlCQUFpQixTQUFVLFFBQU87QUFFdEMsUUFBSSxRQUFRLE9BQU8sZUFBZSxLQUFLO0FBQ3ZDLFdBQU8sU0FBUyxNQUFNO0FBQ3JCLFVBQUksVUFBVSxTQUFTLFVBQVcsUUFBTztBQUN6QyxjQUFRLE9BQU8sZUFBZSxLQUFLO0FBQUEsSUFDcEM7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQWVBLFdBQVMsUUFBUSxPQUFPO0FBQ3ZCLFdBQU8sTUFBTSxRQUFRLEtBQUs7QUFBQSxFQUMzQjtBQWNBLFdBQVMsV0FBVyxPQUFPO0FBQzFCLFFBQUksUUFBUSxLQUFLLEVBQUcsUUFBTztBQUMzQixRQUFJLFlBQVksS0FBSyxFQUFHLFFBQU87QUFFL0IsUUFBSSxPQUFPLFVBQVUsWUFBWTtBQUNoQyxhQUFPO0FBQUEsSUFDUjtBQUVBLFdBQU87QUFBQSxFQUNSO0FBY0EsV0FBUyxVQUFVLE9BQU87QUFDekIsV0FBTyxPQUFPLFVBQVUsS0FBSztBQUFBLEVBQzlCO0FBaFBBO0FBQUE7QUFBQTtBQUFBOzs7QUM2REEsV0FBUyxpQkFBaUIsT0FBTztBQUNoQyxRQUFJLENBQUMsV0FBVyxLQUFLLEdBQUc7QUFDdkIsWUFBTSxJQUFJLFVBQVUsdUJBQXVCO0FBQUEsSUFDNUM7QUFDQSxXQUFPO0FBQUEsRUFDUjtBQXVCQSxXQUFTLGtCQUFrQixPQUFPO0FBQ2pDLFFBQUksQ0FBQyxZQUFZLEtBQUssR0FBRztBQUN4QixZQUFNLElBQUksVUFBVSwwQkFBMEI7QUFBQSxJQUMvQztBQUNBLFdBQU87QUFBQSxFQUNSO0FBc0JBLFdBQVMsZ0JBQWdCLE9BQU87QUFDL0IsUUFBSSxDQUFDLFVBQVUsS0FBSyxHQUFHO0FBQ3RCLFlBQU0sSUFBSSxVQUFVLHdCQUF3QjtBQUFBLElBQzdDO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFvQkEsV0FBUyxlQUFlLE9BQU87QUFDOUIsUUFBSSxDQUFDLFNBQVMsS0FBSyxHQUFHO0FBQ3JCLFlBQU0sSUFBSSxVQUFVLHVCQUF1QjtBQUFBLElBQzVDO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFxQkEsV0FBUyxlQUFlLE9BQU87QUFDOUIsUUFBSSxDQUFDLFNBQVMsS0FBSyxHQUFHO0FBQ3JCLFlBQU0sSUFBSSxVQUFVLHVCQUF1QjtBQUFBLElBQzVDO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFzQkEsV0FBUyxpQkFBaUIsT0FBTyxVQUFVO0FBQzFDLFFBQUksQ0FBQyxXQUFXLE9BQU8sUUFBUSxHQUFHO0FBQ2pDLFVBQUksSUFBSTtBQUNSLFVBQUksU0FBUyxRQUFRLEtBQUssV0FBVyxRQUFRLEdBQUc7QUFDL0MsWUFBSSxXQUFXLE1BQU07QUFBQSxNQUN0QjtBQUVBLFVBQUksR0FBRztBQUNOLFlBQUksSUFBSSxDQUFDO0FBQUEsTUFDVjtBQUVBLFlBQU0sSUFBSSxVQUFVLDhCQUE4QixDQUFDLEVBQUU7QUFBQSxJQUN0RDtBQUNBLFdBQU87QUFBQSxFQUNSO0FBb0JBLFdBQVMsY0FBYyxPQUFPO0FBQzdCLFFBQUksQ0FBQyxRQUFRLEtBQUssR0FBRztBQUNwQixZQUFNLElBQUksVUFBVSx1QkFBdUI7QUFBQSxJQUM1QztBQUNBLFdBQU87QUFBQSxFQUNSO0FBb0JBLFdBQVMsZUFBZSxPQUFPO0FBQzlCLFFBQUksQ0FBQyxTQUFTLEtBQUssR0FBRztBQUNyQixZQUFNLElBQUksVUFBVSx3QkFBd0I7QUFBQSxJQUM3QztBQUNBLFdBQU87QUFBQSxFQUNSO0FBcUJBLFdBQVMsaUJBQWlCLE9BQU87QUFDaEMsUUFBSSxDQUFDLFdBQVcsS0FBSyxHQUFHO0FBQ3ZCLFlBQU0sSUFBSSxVQUFVLHlCQUF5QjtBQUFBLElBQzlDO0FBQ0EsV0FBTztBQUFBLEVBQ1I7QUFxQkEsV0FBUyxnQkFBZ0IsT0FBTztBQUMvQixRQUFJLENBQUMsVUFBVSxLQUFLLEdBQUc7QUFDdEIsWUFBTSxJQUFJLFVBQVUseUJBQXlCO0FBQUEsSUFDOUM7QUFDQSxXQUFPO0FBQUEsRUFDUjtBQXRUQTtBQUFBO0FBY0E7QUFBQTtBQUFBOzs7QUMrREEsV0FBUyxZQUFZO0FBQ3BCLFdBQU87QUFBQSxFQUNSO0FBaUNBLFdBQVMsZ0JBQWdCLE1BQU07QUFDOUIsbUJBQWUsSUFBSTtBQUNuQixVQUFNLElBQUksa0JBQWtCLElBQUk7QUFDaEMsUUFBSSxPQUFPLE1BQU07QUFDaEIsWUFBTSxJQUFJLE1BQU0sY0FBYyxJQUFJLGlCQUFpQjtBQUNwRCxtQkFBZSxDQUFDO0FBQ2hCLFdBQU87QUFBQSxFQUNSO0FBK0JBLFdBQVMsa0JBQWtCLE1BQU07QUFDaEMsbUJBQWUsSUFBSTtBQUNuQixVQUFNLElBQUksa0JBQWtCLElBQUk7QUFDaEMsUUFBSSxPQUFPLE1BQU07QUFDaEIsWUFBTSxJQUFJLE1BQU0sZ0JBQWdCLElBQUksaUJBQWlCO0FBQ3RELHFCQUFpQixDQUFDO0FBQ2xCLFdBQU87QUFBQSxFQUNSO0FBN0pBLE1BMEJJO0FBMUJKO0FBQUE7QUFjQTtBQWtCQSxPQUFDLFdBQVk7QUFDWixZQUFJLE9BQU8sZUFBZSxVQUFVO0FBQ25DLDRCQUFrQjtBQUNsQjtBQUFBLFFBQ0Q7QUFFQSxZQUFJLE9BQU8sU0FBUyxhQUFhO0FBQ2hDLDRCQUFrQjtBQUNsQjtBQUFBLFFBQ0QsV0FBVyxPQUFPLFdBQVcsYUFBYTtBQUN6Qyw0QkFBa0I7QUFDbEI7QUFBQSxRQUNEO0FBRUEsZUFBTyxlQUFlLE9BQU8sV0FBVyxlQUFlO0FBQUEsVUFDdEQsS0FBSyxXQUFZO0FBQ2hCLG1CQUFPO0FBQUEsVUFDUjtBQUFBLFVBQ0EsY0FBYztBQUFBLFFBQ2YsQ0FBQztBQUVELFlBQUksT0FBTyxnQkFBZ0IsVUFBVTtBQUNwQyxzQkFBWSxhQUFhO0FBQ3pCLGlCQUFPLE9BQU8sVUFBVTtBQUV4Qiw0QkFBa0I7QUFDbEI7QUFBQSxRQUNEO0FBRUEsWUFBSTtBQUNILDRCQUFrQixTQUFTLGFBQWEsRUFBRTtBQUFBLFFBQzNDLFNBQVMsR0FBRztBQUFBLFFBQUM7QUFFYixjQUFNLElBQUksTUFBTSwwQkFBMEI7QUFBQSxNQUMzQyxHQUFHO0FBQUE7QUFBQTs7O0FDeENILFdBQVMsT0FBTyxPQUFPO0FBQ3RCLFFBQUlDLFFBQU8sQ0FBQyxFQUFFLFNBQVMsS0FBSyxLQUFLLEVBQUUsTUFBTSxlQUFlLEVBQUUsQ0FBQztBQUMzRCxRQUFJLGFBQWFBLE9BQU07QUFDdEIsWUFBTSxPQUFPLE1BQU0sWUFBWTtBQUMvQixVQUFJLE1BQU07QUFDVCxlQUFPLEtBQUssWUFBWTtBQUFBLE1BQ3pCO0FBRUEsWUFBTSxVQUFVLDRCQUE0QjtBQUFBLFFBQzNDLE1BQU0sWUFBWSxTQUFTO0FBQUEsTUFDNUI7QUFDQSxNQUFBQSxRQUFPLFdBQVcsUUFBUSxTQUFTLElBQUksUUFBUSxDQUFDLElBQUk7QUFBQSxJQUNyRDtBQUVBLFdBQU9BLE1BQUssWUFBWTtBQUFBLEVBQ3pCO0FBekNBO0FBQUE7QUFBQTtBQUFBOzs7QUNnQ0EsV0FBUyxVQUFVLE1BQU07QUFDeEIsUUFBSTtBQUNKLFFBQUk7QUFFSixRQUFJLE9BQU8sU0FBUyxZQUFZLEtBQUssQ0FBQyxNQUFNLE1BQU07QUFDakQsWUFBTSxJQUFJLE1BQU0sd0JBQXdCLEtBQUssVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFBQSxJQUNsRTtBQUVBLFNBQUssSUFBSSxHQUFHLElBQUksS0FBSyxRQUFRLEtBQUs7QUFDakMsWUFBTUMsS0FBSSxLQUFLLENBQUM7QUFFaEIsVUFBSSxFQUFFLFNBQVNBLEVBQUMsS0FBSyxRQUFRQSxFQUFDLElBQUk7QUFDakMsY0FBTSxJQUFJLE1BQU0sd0JBQXdCLEtBQUssVUFBVUEsRUFBQyxDQUFDLEVBQUU7QUFBQSxNQUM1RDtBQUVBLFVBQUksTUFBTSxRQUFXO0FBQ3BCLFlBQUlBO0FBQ0o7QUFBQSxNQUNEO0FBRUEsaUJBQVcsS0FBS0EsSUFBRztBQUNsQixjQUFNLElBQUlBLEtBQUksQ0FBQztBQUVmLFlBQUksTUFBTSxJQUFJLENBQUMsR0FBRztBQUNqQjtBQUFBLFFBQ0Q7QUFFQSxZQUFLLFNBQVMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxNQUFNLFlBQWEsUUFBUSxDQUFDLEdBQUc7QUFDMUQsY0FBSSxFQUFFLENBQUMsTUFBTSxRQUFXO0FBQ3ZCLGdCQUFJLFFBQVEsQ0FBQyxHQUFHO0FBQ2YsZ0JBQUUsQ0FBQyxJQUFJLENBQUM7QUFBQSxZQUNULE9BQU87QUFDTixnQkFBRSxDQUFDLElBQUksQ0FBQztBQUFBLFlBQ1Q7QUFBQSxVQUNELE9BQU87QUFDTixnQkFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sT0FBTyxDQUFDLEdBQUc7QUFDL0Isb0JBQU0sSUFBSTtBQUFBLGdCQUNULGtCQUFrQixLQUFLLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJO0FBQUEsa0JBQ3pDLEVBQUUsQ0FBQztBQUFBLGdCQUNKLENBQUMsUUFBUSxLQUFLLFVBQVUsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUM7QUFBQSxjQUN4QztBQUFBLFlBQ0Q7QUFBQSxVQUNEO0FBRUEsY0FBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEdBQUc7QUFDbEIsY0FBRSxDQUFDLElBQUksQ0FBQztBQUNSLGNBQUUsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDO0FBQ2Q7QUFBQSxVQUNEO0FBRUEsWUFBRSxDQUFDLElBQUksT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDO0FBQUEsUUFDdEIsT0FBTztBQUNOLGNBQUksUUFBUSxDQUFDLEdBQUc7QUFDZixjQUFFLEtBQUssQ0FBQztBQUNSO0FBQUEsVUFDRDtBQUNBLFlBQUUsQ0FBQyxJQUFJO0FBQUEsUUFDUjtBQUFBLE1BQ0Q7QUFBQSxJQUNEO0FBRUEsV0FBTztBQUFBLEVBQ1I7QUE5RkE7QUFBQTtBQWNBO0FBQ0E7QUFBQTtBQUFBOzs7QUNmQTtBQUFBO0FBT0EsT0FBQyxXQUFZO0FBQ1g7QUFFQSxZQUFJLEtBQUssVUFBUSxJQUFJO0FBRXJCLGlCQUFTQyxTQUFRLE1BQU0sTUFBTTtBQUMzQixpQkFBTyxRQUFRLENBQUM7QUFDaEIsY0FBSTtBQUVKLGlCQUFPLGVBQWUsTUFBTSxpQkFBaUI7QUFBQSxZQUMzQyxPQUFPO0FBQUEsY0FDTDtBQUFBLFlBQ0Y7QUFBQSxZQUNBLFVBQVU7QUFBQSxZQUNWLFlBQVk7QUFBQSxVQUNkLENBQUM7QUFFRCxpQkFBTyxlQUFlLE1BQU0scUJBQXFCO0FBQUEsWUFDL0MsT0FBTyxDQUFDLENBQUMsS0FBSztBQUFBLFlBQ2QsVUFBVTtBQUFBLFlBQ1YsWUFBWTtBQUFBLFVBQ2QsQ0FBQztBQUVELGlCQUFPLGVBQWUsTUFBTSxpQkFBaUI7QUFBQSxZQUMzQyxPQUFPLEtBQUssTUFBTTtBQUFBLFlBQ2xCLFVBQVU7QUFBQSxZQUNWLFlBQVk7QUFBQSxVQUNkLENBQUM7QUFFRCxjQUFJO0FBQ0YsaUJBQUssS0FBSyxNQUFNLEdBQUcsYUFBYSxJQUFJLENBQUM7QUFBQSxVQUN2QyxTQUFRLEdBQUc7QUFDVCxpQkFBSyxDQUFDO0FBQUEsVUFDUjtBQUVBLGlCQUFPLEtBQUssRUFBRSxFQUFFLFFBQVEsU0FBVSxLQUFLO0FBQ3JDLGlCQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUc7QUFBQSxVQUNwQixHQUFHLElBQUk7QUFBQSxRQUNUO0FBRUEsUUFBQUEsU0FBUSxVQUFVLFVBQVUsU0FBVSxLQUFLO0FBQ3pDLGNBQUksS0FBSyxlQUFlLEdBQUcsR0FBRztBQUM1QixnQkFBSSxLQUFLLG1CQUFtQjtBQUMxQixxQkFBTyxPQUFPLEtBQUssR0FBRyxDQUFDO0FBQUEsWUFDekIsT0FBTztBQUNMLHFCQUFPLEtBQUssR0FBRztBQUFBLFlBQ2pCO0FBQUEsVUFDRjtBQUNBLGlCQUFPO0FBQUEsUUFDVDtBQUVBLFFBQUFBLFNBQVEsVUFBVSxVQUFVLFNBQVUsS0FBSyxLQUFLO0FBQzlDLGNBQUksUUFBUSxRQUFXO0FBQ3JCLGlCQUFLLEdBQUcsSUFBSTtBQUFBLFVBQ2QsV0FBVyxLQUFLLG1CQUFtQjtBQUNqQyxpQkFBSyxHQUFHLElBQUksT0FBTyxHQUFHO0FBQUEsVUFDeEIsT0FBTztBQUNMLGlCQUFLLEdBQUcsSUFBSTtBQUFBLFVBQ2Q7QUFDQSxlQUFLLFdBQVc7QUFBQSxRQUNsQjtBQUVBLFFBQUFBLFNBQVEsVUFBVSxhQUFhLFNBQVUsS0FBSztBQUM1QyxpQkFBTyxLQUFLLEdBQUc7QUFDZixlQUFLLFdBQVc7QUFBQSxRQUNsQjtBQUVBLFFBQUFBLFNBQVEsVUFBVSxRQUFRLFdBQVk7QUFDcEMsY0FBSUMsUUFBTztBQUVYLGlCQUFPLEtBQUtBLEtBQUksRUFBRSxRQUFRLFNBQVUsS0FBSztBQUN2QyxZQUFBQSxNQUFLLEdBQUcsSUFBSTtBQUNaLG1CQUFPQSxNQUFLLEdBQUc7QUFBQSxVQUNqQixDQUFDO0FBQUEsUUFDSDtBQUVBLFFBQUFELFNBQVEsVUFBVSxNQUFNLFNBQVUsR0FBRztBQUNuQyxjQUFJLEtBQUs7QUFDVCxpQkFBTyxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7QUFBQSxRQUM1QjtBQUVBLGVBQU8sZUFBZUEsU0FBUSxXQUFXLFVBQVU7QUFBQSxVQUNqRCxLQUFLLFdBQVc7QUFDZCxtQkFBTyxPQUFPLEtBQUssSUFBSSxFQUFFO0FBQUEsVUFDM0I7QUFBQSxRQUNGLENBQUM7QUFFRCxRQUFBQSxTQUFRLFVBQVUsYUFBYSxXQUFZO0FBQ3pDLGNBQUlDLFFBQU87QUFFWCxjQUFJLENBQUMsS0FBSyxjQUFjLE1BQU07QUFDNUI7QUFBQSxVQUNGO0FBRUEsY0FBSSxLQUFLLGNBQWMsTUFBTTtBQUMzQixpQkFBSyxjQUFjLE9BQU87QUFDMUI7QUFBQSxVQUNGO0FBRUEsZUFBSyxjQUFjLE9BQU87QUFDMUIsYUFBRztBQUFBLFlBQ0QsS0FBSyxjQUFjO0FBQUEsWUFDbkIsS0FBSyxVQUFVLE1BQU0sTUFBTSxLQUFLLGFBQWE7QUFBQSxZQUM3QztBQUFBLFlBQ0EsU0FBVSxHQUFHO0FBQ2IsY0FBQUEsTUFBSyxjQUFjLE9BQU87QUFDMUIsa0JBQUksR0FBRztBQUNMLHdCQUFRLE1BQU0sK0JBQStCQSxNQUFLLGNBQWMsSUFBSTtBQUNwRSx3QkFBUSxNQUFNLENBQUM7QUFDZjtBQUFBLGNBQ0Y7QUFDQSxrQkFBSUEsTUFBSyxjQUFjLE1BQU07QUFDM0IsZ0JBQUFBLE1BQUssY0FBYyxPQUFPO0FBQzFCLGdCQUFBQSxNQUFLLFdBQVc7QUFBQSxjQUNsQjtBQUFBLFlBQ0Y7QUFBQSxVQUFDO0FBQUEsUUFDSDtBQUVBLGVBQU8sZUFBZUQsVUFBUyxVQUFVO0FBQUEsVUFDdkMsT0FBTyxTQUFVLE1BQU0sTUFBTTtBQUMzQixtQkFBTyxJQUFJQSxTQUFRLE1BQU0sSUFBSTtBQUFBLFVBQy9CO0FBQUEsVUFDQSxVQUFVO0FBQUEsVUFDVixZQUFZO0FBQUEsUUFDZCxDQUFDO0FBRUQsZUFBTyxVQUFVQTtBQUFBLE1BQ25CLEdBQUU7QUFBQTtBQUFBOzs7QUN0SUY7QUFBQTtBQUFBO0FBQUEsT0FBQyxTQUFVLFNBQVM7QUFDaEI7QUFFQSxjQUFNLFNBQVMsb0JBQUksUUFBUTtBQUMzQixjQUFNLGNBQWMsb0JBQUksUUFBUTtBQUNoQyxjQUFNLGlCQUFpQixvQkFBSSxRQUFRO0FBQ25DLGNBQU0sZUFBZSxvQkFBSSxRQUFRO0FBQ2pDLGNBQU0sdUJBQXVCLG9CQUFJLFFBQVE7QUFDekMsY0FBTSxXQUFXLG9CQUFJLFFBQVE7QUFDN0IsY0FBTSxpQkFBaUIsb0JBQUksUUFBUTtBQUNuQyxjQUFNLGtCQUFrQixvQkFBSSxRQUFRO0FBQ3BDLGNBQU0sY0FBYyxvQkFBSSxRQUFRO0FBQ2hDLGNBQU0sYUFBYSxvQkFBSSxRQUFRO0FBQy9CLGNBQU0sZ0JBQWdCLG9CQUFJLFFBQVE7QUFDbEMsY0FBTSxzQkFBc0Isb0JBQUksUUFBUTtBQUN4QyxjQUFNLHNCQUFzQixvQkFBSSxRQUFRO0FBQ3hDLGNBQU0sdUJBQXVCLG9CQUFJLFFBQVE7QUFDekMsY0FBTSxxQkFBcUIsb0JBQUksUUFBUTtBQUV2QyxjQUFNLE1BQU07QUFBQSxVQUNSLFlBQVk7QUFBQSxVQUNaLGtCQUFrQjtBQUFBLFVBQ2xCLFVBQVU7QUFBQSxVQUNWLGFBQWE7QUFBQSxVQUNiLGNBQWM7QUFBQSxVQUNkLGNBQWM7QUFBQSxVQUNkLGtCQUFrQjtBQUFBLFVBQ2xCLGFBQWE7QUFBQSxVQUNiLGFBQWE7QUFBQSxVQUNiLGlCQUFpQjtBQUFBLFVBQ2pCLGNBQWM7QUFBQSxVQUNkLGNBQWM7QUFBQSxVQUNkLGNBQWM7QUFBQSxVQUNkLFlBQVk7QUFBQSxVQUNaLGFBQWE7QUFBQSxVQUNiLGtCQUFrQjtBQUFBLFVBQ2xCLFdBQVc7QUFBQSxVQUNYLFdBQVc7QUFBQSxVQUNYLFVBQVU7QUFBQSxVQUNWLFdBQVc7QUFBQSxVQUNYLGVBQWU7QUFBQSxVQUNmLHFCQUFxQjtBQUFBLFVBQ3JCLGlCQUFpQjtBQUFBLFVBQ2pCLGlCQUFpQjtBQUFBLFVBQ2pCLGNBQWM7QUFBQSxVQUNkLGFBQWE7QUFBQSxVQUNiLGNBQWM7QUFBQSxVQUNkLGNBQWM7QUFBQSxVQUNkLGNBQWM7QUFBQSxVQUNkLHFCQUFxQjtBQUFBLFVBQ3JCLGNBQWM7QUFBQSxVQUNkLGNBQWM7QUFBQSxVQUNkLGtCQUFrQjtBQUFBLFVBQ2xCLGFBQWE7QUFBQSxVQUNiLGNBQWM7QUFBQSxVQUNkLGFBQWE7QUFBQSxVQUNiLFVBQVU7QUFBQSxVQUNWLGNBQWM7QUFBQSxVQUNkLGNBQWM7QUFBQSxVQUNkLGNBQWM7QUFBQSxVQUNkLGVBQWU7QUFBQSxVQUNmLE1BQU07QUFBQSxRQUNWO0FBQ0EsY0FBTSxVQUFVLENBQUMsS0FBSyxjQUFjO0FBQ2hDLG1CQUFTLE9BQU8sS0FBSztBQUNqQixzQkFBVSxHQUFHLElBQUk7QUFDakIsZ0JBQUksZUFBZTtBQUNuQixrQkFBTSxnQkFBZ0IsSUFBSSxHQUFHO0FBQzdCLG1CQUFPLGVBQWUsV0FBVyxLQUFLO0FBQUEsY0FDbEMsTUFBTTtBQUNGLHVCQUFPO0FBQUEsY0FDWDtBQUFBLGNBQ0EsSUFBSSxPQUFPO0FBQ1AsK0JBQWU7QUFDZixvQkFBSSxJQUFJLGFBQWE7QUFDakIsc0JBQUksYUFBYSxlQUFlLEtBQUs7QUFBQSxnQkFDekMsT0FDSztBQUNELDZCQUFXLElBQUksS0FBSyxTQUFTO0FBQUEsZ0JBQ2pDO0FBQUEsY0FDSjtBQUFBLFlBQ0osQ0FBQztBQUFBLFVBQ0w7QUFBQSxRQUNKO0FBRUEsaUJBQVMsU0FBUyxNQUFNO0FBQ3BCLGdCQUFNLFlBQVksYUFBYSxJQUFJLElBQUk7QUFDdkMsZ0JBQU0sRUFBRSxLQUFLLElBQUk7QUFDakIsbUJBQVMsTUFBTSxNQUFNLFNBQVM7QUFDOUIscUJBQVcsTUFBTSxVQUFVLE1BQU07QUFBQSxRQUNyQztBQUNBLGNBQU0sZUFBZSxDQUFDLE1BQU0sY0FBYyxVQUFVO0FBQ2hELGdCQUFNLFNBQVMsU0FBUyxpQkFBaUIsTUFBTSxXQUFXLGNBQWM7QUFBQSxZQUNwRSxXQUFXRSxPQUFNO0FBQ2IscUJBQU8sYUFBYSxJQUFJQSxLQUFJLElBQ3hCLFdBQVcsZ0JBQWdCLFdBQVc7QUFBQSxZQUM5QztBQUFBLFVBQ0osQ0FBQztBQUNELGNBQUksVUFBVSxPQUFPLFNBQVM7QUFDOUIsZ0JBQU0sa0JBQW1CLENBQUMsZUFBZSxLQUFLO0FBQzlDLGlCQUFPLFNBQVM7QUFDWixnQkFBSSxRQUFRLHdCQUF3QixpQkFBaUI7QUFDakQsMEJBQVksU0FBUyxLQUFLLFFBQVE7QUFBQSxZQUN0QztBQUNBLHNCQUFVLE9BQU8sU0FBUztBQUFBLFVBQzlCO0FBQUEsUUFDSjtBQUNBLGNBQU0sK0JBQStCLEVBQUUsWUFBWSxNQUFNLGlCQUFpQixDQUFDLFlBQVksTUFBTSxFQUFFO0FBQy9GLGNBQU0seUJBQXlCLHVCQUF1QixJQUFJLElBQUksaUJBQWlCLENBQUMsa0JBQWtCO0FBQzlGLHFCQUFXLFlBQVksZUFBZTtBQUNsQyxrQkFBTSxTQUFTLFNBQVM7QUFDeEIsZ0JBQUksU0FBUyxrQkFBa0IsWUFBWTtBQUN2QyxrQkFBSSxPQUFPLFlBQVksZ0JBQWdCLEdBQUc7QUFDdEMsNEJBQVksUUFBUSxPQUFPLGFBQWEsVUFBVSxDQUFDO0FBQUEsY0FDdkQsV0FDUyxPQUFPLGNBQWMsWUFBWTtBQUN0Qyw2QkFBYSxNQUFNO0FBQUEsY0FDdkI7QUFBQSxZQUNKO0FBQ0EsZ0JBQUksU0FBUyxrQkFBa0IsUUFBUTtBQUNuQyxrQkFBSSxPQUFPLFlBQVksZ0JBQWdCLEdBQUc7QUFDdEMsc0JBQU0sWUFBWSxhQUFhLElBQUksTUFBTTtBQUN6QyxzQkFBTSxRQUFRLFlBQVksSUFBSSxNQUFNO0FBQ3BDLDBCQUFVLGFBQWEsS0FBSztBQUFBLGNBQ2hDO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFBQSxRQUNKLENBQUMsSUFBSSxDQUFDO0FBQ04saUJBQVMsaUJBQWlCLGNBQWM7QUFDcEMsdUJBQWEsUUFBUSxvQkFBa0I7QUFDbkMsa0JBQU0sRUFBRSxZQUFBQyxhQUFZLGFBQWEsSUFBSTtBQUNyQyxrQkFBTSxRQUFRLE1BQU0sS0FBS0EsV0FBVTtBQUNuQyxrQkFBTSxVQUFVLE1BQU0sS0FBSyxZQUFZO0FBQ3ZDLGtCQUFNLFFBQVEsVUFBUTtBQUNsQixrQkFBSUM7QUFDSixrQkFBSSxhQUFhLElBQUksSUFBSSxLQUFLLEtBQUssWUFBWSxnQkFBZ0IsR0FBRztBQUM5RCx5QkFBUyxJQUFJO0FBQUEsY0FDakI7QUFDQSxrQkFBSSxXQUFXLElBQUksSUFBSSxHQUFHO0FBQ3RCLHNCQUFNLFlBQVksV0FBVyxJQUFJLElBQUk7QUFDckMsc0JBQU0sVUFBVSxPQUFPLEtBQUssR0FBRztBQUMvQix3QkFDSyxPQUFPLFNBQU8sVUFBVSxHQUFHLE1BQU0sSUFBSSxFQUNyQyxRQUFRLFNBQU87QUFDaEIsdUJBQUssYUFBYSxJQUFJLEdBQUcsR0FBRyxVQUFVLEdBQUcsQ0FBQztBQUFBLGdCQUM5QyxDQUFDO0FBQ0QsMkJBQVcsT0FBTyxJQUFJO0FBQUEsY0FDMUI7QUFDQSxrQkFBSSxtQkFBbUIsSUFBSSxJQUFJLEdBQUc7QUFDOUIsc0JBQU0sWUFBWSxtQkFBbUIsSUFBSSxJQUFJO0FBQzdDLHFCQUFLLGFBQWEsbUJBQW1CLFVBQVUsU0FBUyxNQUFNLFNBQVMsQ0FBQztBQUN4RSxxQkFBSyxhQUFhLHNCQUFzQixDQUFDLFVBQVUsU0FBUyxPQUFPLFNBQVMsQ0FBQztBQUM3RSxxQkFBSyxhQUFhLGlCQUFpQixDQUFDLFVBQVUsU0FBUyxPQUFPLFNBQVMsQ0FBQztBQUN4RSxtQ0FBbUIsT0FBTyxJQUFJO0FBQUEsY0FDbEM7QUFDQSxrQkFBSSxLQUFLLGNBQWMsUUFBUTtBQUMzQixzQkFBTSxlQUFlLGdCQUFnQixJQUFJLElBQUk7QUFDN0Msc0JBQU0sU0FBUyxTQUFTLGlCQUFpQixNQUFNLFdBQVcsY0FBYztBQUFBLGtCQUNwRSxXQUFXRixPQUFNO0FBQ2IsMkJBQVEsYUFBYSxJQUFJQSxLQUFJLEtBQUtBLE1BQUssWUFBWSxnQkFBZ0IsS0FBSyxFQUFFLGdCQUFnQixhQUFhLElBQUlBLEtBQUksS0FBTSxXQUFXLGdCQUFnQixXQUFXO0FBQUEsa0JBQy9KO0FBQUEsZ0JBQ0osQ0FBQztBQUNELG9CQUFJLFVBQVUsT0FBTyxTQUFTO0FBQzlCLHVCQUFPLFNBQVM7QUFDWiwyQkFBUyxPQUFPO0FBQ2hCLDRCQUFVLE9BQU8sU0FBUztBQUFBLGdCQUM5QjtBQUFBLGNBQ0o7QUFDQSxrQkFBSSxLQUFLLGNBQWMsWUFBWTtBQUMvQixpQkFBQ0UsTUFBSyx1QkFBdUIsYUFBYSxRQUFRQSxRQUFPLFNBQVMsU0FBU0EsSUFBRyxLQUFLLHdCQUF3QixNQUFNLDRCQUE0QjtBQUM3SSw2QkFBYSxNQUFNLElBQUk7QUFBQSxjQUMzQjtBQUFBLFlBQ0osQ0FBQztBQUNELG9CQUFRLFFBQVEsVUFBUTtBQUNwQixvQkFBTSxZQUFZLGFBQWEsSUFBSSxJQUFJO0FBQ3ZDLGtCQUFJLGFBQWEsZUFBZSxJQUFJLFNBQVMsR0FBRztBQUM1QyxtQ0FBbUIsU0FBUztBQUFBLGNBQ2hDO0FBQ0Esa0JBQUksZUFBZSxJQUFJLElBQUksR0FBRztBQUMxQixzQkFBTSxXQUFXLGVBQWUsSUFBSSxJQUFJO0FBQ3hDLHlCQUFTLFdBQVc7QUFBQSxjQUN4QjtBQUFBLFlBQ0osQ0FBQztBQUFBLFVBQ0wsQ0FBQztBQUFBLFFBQ0w7QUFDQSxpQkFBUyx5QkFBeUIsY0FBYztBQUM1Qyx1QkFBYSxRQUFRLGNBQVk7QUFDN0Isa0JBQU0sRUFBRSxhQUFhLElBQUk7QUFDekIseUJBQWEsUUFBUSxVQUFRO0FBQ3pCLG9CQUFNLFdBQVcsb0JBQW9CLElBQUksU0FBUyxNQUFNO0FBQ3hELGtCQUFJLGFBQWEsSUFBSSxJQUFJLEdBQUc7QUFDeEIsaUNBQWlCLElBQUk7QUFBQSxjQUN6QjtBQUNBLHVCQUFTLFdBQVc7QUFBQSxZQUN4QixDQUFDO0FBQUEsVUFDTCxDQUFDO0FBQUEsUUFDTDtBQUNBLGNBQU0sZUFBZSxDQUFDLGFBQWE7QUFDL0IsY0FBSUEsS0FBSTtBQUNSLGdCQUFNLFdBQVcsSUFBSSxpQkFBaUIsd0JBQXdCO0FBQzlELGdCQUFNQSxNQUFLLFdBQVcsUUFBUSxXQUFXLFNBQVMsU0FBUyxPQUFPLGNBQWMsUUFBUUEsUUFBTyxTQUFTLFNBQVNBLElBQUcsVUFDaEgsU0FBUyxRQUNULFNBQVMsTUFBTTtBQUNmLHVCQUFXLFNBQVM7QUFBQSxVQUN4QjtBQUNBLFdBQUMsS0FBSyxTQUFTLGFBQWEsUUFBUSxPQUFPLFNBQVMsU0FBUyxHQUFHLEtBQUssVUFBVSxVQUFVLEVBQUUsV0FBVyxLQUFLLENBQUM7QUFDNUcsOEJBQW9CLElBQUksVUFBVSxRQUFRO0FBQUEsUUFDOUM7QUFDQSwrQkFBdUIsSUFBSSxJQUFJLGlCQUFpQixnQkFBZ0IsSUFBSSxDQUFDO0FBQ3JFLGNBQU0saUJBQWlCO0FBQUEsVUFDbkIsV0FBVztBQUFBLFVBQ1gsU0FBUztBQUFBLFFBQ2I7QUFFQSxjQUFNLGNBQWMsQ0FBQyxLQUFLLGFBQWE7QUFDbkMsY0FBSSxnQkFBZ0Isc0JBQXNCLFFBQVE7QUFDbEQsY0FBSSxVQUFVO0FBQ1YsZ0JBQUksYUFBYSxpQkFBaUIsTUFBTTtBQUFBLFVBQzVDLE9BQ0s7QUFDRCxnQkFBSSxnQkFBZ0IsZUFBZTtBQUFBLFVBQ3ZDO0FBQ0EsY0FBSSxJQUFJLHNCQUFzQjtBQUMxQixnQkFBSSxxQkFBcUIsTUFBTSxLQUFLLENBQUMsUUFBUSxDQUFDO0FBQUEsVUFDbEQ7QUFBQSxRQUNKO0FBQ0EsY0FBTSxxQkFBcUIsQ0FBQyxjQUFjO0FBQ3RDLGdCQUFNLGVBQWUsZUFBZSxJQUFJLFNBQVM7QUFDakQsdUJBQWEsUUFBUSxpQkFBZTtBQUNoQyx3QkFBWSxPQUFPO0FBQUEsVUFDdkIsQ0FBQztBQUNELHlCQUFlLElBQUksV0FBVyxDQUFDLENBQUM7QUFBQSxRQUNwQztBQUNBLGNBQU0sb0JBQW9CLENBQUMsS0FBSyxjQUFjO0FBQzFDLGdCQUFNLFFBQVEsU0FBUyxjQUFjLE9BQU87QUFDNUMsZ0JBQU0sT0FBTztBQUNiLGdCQUFNLE9BQU8sSUFBSSxhQUFhLE1BQU07QUFDcEMsY0FBSSxNQUFNLEtBQUs7QUFDZix5QkFBZSxJQUFJLFNBQVMsRUFBRSxLQUFLLEtBQUs7QUFDeEMsaUJBQU87QUFBQSxRQUNYO0FBQ0EsY0FBTSxVQUFVLENBQUMsS0FBSyxjQUFjO0FBQ2hDLGNBQUlBO0FBQ0oseUJBQWUsSUFBSSxXQUFXLENBQUMsQ0FBQztBQUNoQyxXQUFDQSxNQUFLLHVCQUF1QixhQUFhLFFBQVFBLFFBQU8sU0FBUyxTQUFTQSxJQUFHLEtBQUssd0JBQXdCLEtBQUssNEJBQTRCO0FBQUEsUUFDaEo7QUFDQSxjQUFNLGFBQWEsQ0FBQyxLQUFLLFdBQVc7QUFDaEMsY0FBSSxPQUFPLFFBQVE7QUFDZixrQkFBTSxLQUFLLE1BQU0sRUFBRSxRQUFRLFdBQVMsTUFBTSxpQkFBaUIsU0FBUyxJQUFJLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN4RixnQkFBSSxlQUFlLE9BQU8sQ0FBQyxFQUFFO0FBQzdCLGdCQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSTtBQUNmLDZCQUFlLEdBQUcsT0FBTyxDQUFDLEVBQUUsT0FBTztBQUNuQyxxQkFBTyxDQUFDLEVBQUUsS0FBSztBQUFBLFlBQ25CO0FBQ0EsZ0JBQUksYUFBYSxtQkFBbUIsWUFBWTtBQUFBLFVBQ3BEO0FBQUEsUUFDSjtBQUNBLGNBQU0sa0JBQWtCLENBQUMsU0FBUztBQUM5QixnQkFBTSx3QkFBd0IsTUFBTSxLQUFLLEtBQUssUUFBUSxFQUNqRCxPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsUUFBUSxTQUFTLEdBQUcsS0FBSyxRQUFRLFFBQVEsRUFDdEUsSUFBSSxDQUFDLFlBQVksUUFBUSxTQUFTLEtBQUs7QUFDNUMsZ0JBQU0scUJBQXFCLGdCQUFnQixJQUFJLElBQUksS0FBSyxDQUFDO0FBQ3pELGdCQUFNLHFCQUFxQixNQUFNLEtBQUssa0JBQWtCLEVBQ25ELE9BQU8sYUFBVyxRQUFRLFdBQVcsRUFDckMsSUFBSSxDQUFDLFlBQVksYUFBYSxJQUFJLE9BQU8sRUFBRSxTQUFTLEtBQUs7QUFDOUQsZ0JBQU0sYUFBYSxDQUFDLEdBQUcsdUJBQXVCLEdBQUcsa0JBQWtCLEVBQUUsU0FBUyxLQUFLO0FBQ25GLGVBQUssZ0JBQWdCLHFCQUFxQixVQUFVO0FBQ3BELGVBQUssZ0JBQWdCLG1CQUFtQixDQUFDLFVBQVU7QUFBQSxRQUN2RDtBQUNBLGNBQU0sb0JBQW9CLENBQUMsVUFBVTtBQUNqQywwQkFBZ0IsZUFBZSxNQUFNLE1BQU0sQ0FBQztBQUFBLFFBQ2hEO0FBQ0EsY0FBTSxxQkFBcUIsQ0FBQyxVQUFVO0FBQ2xDLDBCQUFnQixlQUFlLE1BQU0sTUFBTSxDQUFDO0FBQUEsUUFDaEQ7QUFDQSxjQUFNLGtCQUFrQixDQUFDLFNBQVM7QUFDOUIsZ0JBQU0sdUJBQXVCLENBQUMsdUJBQXVCLHNCQUFzQixvQkFBb0IsRUFDMUYsSUFBSSxTQUFPLEdBQUcsR0FBRyxrQkFBa0IsRUFDbkMsSUFBSSxTQUFPLEdBQUcsR0FBRyxlQUFlLEtBQUssS0FBSyxJQUFJLEdBQUcsVUFBVSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFDN0UsS0FBSyxHQUFHO0FBQ2IsZUFBSyxpQkFBaUIsU0FBUyxXQUFTO0FBQ3BDLGtCQUFNLFNBQVMsTUFBTTtBQUNyQixnQkFBSSxPQUFPLFFBQVEsb0JBQW9CLEdBQUc7QUFDdEMsb0JBQU0sV0FBVyxnQkFBZ0IsSUFBSSxJQUFJO0FBQ3pDLGtCQUFJLEtBQUssWUFBWTtBQUNqQjtBQUFBLGNBQ0o7QUFDQSxrQkFBSSxTQUFTLE1BQU07QUFDZixzQkFBTSxRQUFRLE1BQU0sS0FBSyxRQUFRO0FBQ2pDLHNCQUFNLGVBQWUsTUFDaEIsUUFBUSxFQUNSLElBQUksVUFBUTtBQUNiLHdCQUFNLFlBQVksYUFBYSxJQUFJLElBQUk7QUFDdkMseUJBQU8sVUFBVSxlQUFlO0FBQUEsZ0JBQ3BDLENBQUM7QUFDRCxvQkFBSSxhQUFhLFNBQVMsS0FBSyxHQUFHO0FBQzlCLHdCQUFNLGVBQWU7QUFBQSxnQkFDekI7QUFBQSxjQUNKO0FBQUEsWUFDSjtBQUFBLFVBQ0osQ0FBQztBQUFBLFFBQ0w7QUFDQSxjQUFNLG9CQUFvQixDQUFDLFVBQVU7QUFDakMsZ0JBQU0sV0FBVyxnQkFBZ0IsSUFBSSxNQUFNLE1BQU07QUFDakQsY0FBSSxZQUFZLFNBQVMsTUFBTTtBQUMzQixxQkFBUyxRQUFRLGFBQVc7QUFDeEIsa0JBQUksUUFBUSxZQUFZLGtCQUFrQixRQUFRLG1CQUFtQjtBQUNqRSx3QkFBUSxrQkFBa0IsTUFBTSxPQUFPO0FBQUEsY0FDM0M7QUFBQSxZQUNKLENBQUM7QUFBQSxVQUNMO0FBQUEsUUFDSjtBQUNBLGNBQU0sV0FBVyxDQUFDLEtBQUssTUFBTSxjQUFjO0FBQ3ZDLGNBQUksTUFBTTtBQUNOLGtCQUFNLGVBQWUsZ0JBQWdCLElBQUksSUFBSTtBQUM3QyxnQkFBSSxjQUFjO0FBQ2QsMkJBQWEsSUFBSSxHQUFHO0FBQUEsWUFDeEIsT0FDSztBQUNELG9CQUFNLFVBQVUsb0JBQUksSUFBSTtBQUN4QixzQkFBUSxJQUFJLEdBQUc7QUFDZiw4QkFBZ0IsSUFBSSxNQUFNLE9BQU87QUFDakMsOEJBQWdCLElBQUk7QUFDcEIsbUJBQUssaUJBQWlCLFNBQVMsaUJBQWlCO0FBQ2hELG1CQUFLLGlCQUFpQixTQUFTLGlCQUFpQjtBQUNoRCxtQkFBSyxpQkFBaUIsVUFBVSxrQkFBa0I7QUFBQSxZQUN0RDtBQUNBLHFCQUFTLElBQUksTUFBTSxFQUFFLEtBQUssVUFBVSxDQUFDO0FBQ3JDLGdCQUFJLElBQUksWUFBWSxnQkFBZ0IsS0FBSyxJQUFJLHdCQUF3QjtBQUNqRSx5QkFBVyxNQUFNO0FBQ2Isb0JBQUksdUJBQXVCLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQztBQUFBLGNBQ2hELEdBQUcsQ0FBQztBQUFBLFlBQ1I7QUFDQSw0QkFBZ0IsSUFBSTtBQUFBLFVBQ3hCO0FBQUEsUUFDSjtBQUNBLGNBQU0saUJBQWlCLENBQUMsU0FBUztBQUM3QixjQUFJLFNBQVMsS0FBSztBQUNsQixjQUFJLFVBQVUsT0FBTyxZQUFZLFFBQVE7QUFDckMscUJBQVMsZUFBZSxNQUFNO0FBQUEsVUFDbEM7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFDQSxjQUFNLDJCQUEyQixDQUFDLEtBQUssU0FBUyxZQUFZLGlCQUFpQjtBQUN6RSxjQUFJLENBQUMsSUFBSSxZQUFZLGdCQUFnQixHQUFHO0FBQ3BDLGtCQUFNLElBQUksVUFBVSxPQUFPO0FBQUEsVUFDL0I7QUFBQSxRQUNKO0FBQ0EsY0FBTSxxQkFBcUIsQ0FBQyxNQUFNLGFBQWEsV0FBVztBQUN0RCxnQkFBTSxXQUFXLGdCQUFnQixJQUFJLElBQUk7QUFDekMsY0FBSSxZQUFZLFNBQVMsTUFBTTtBQUMzQixxQkFBUyxRQUFRLGFBQVc7QUFDeEIsb0JBQU0sWUFBWSxhQUFhLElBQUksT0FBTztBQUMxQyxvQkFBTSxRQUFRLFVBQVUsTUFBTSxFQUFFO0FBQ2hDLGtCQUFJLENBQUMsT0FBTztBQUNSLDhCQUFjO0FBQUEsY0FDbEI7QUFBQSxZQUNKLENBQUM7QUFBQSxVQUNMO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQ0EsY0FBTSxtQkFBbUIsQ0FBQyxRQUFRO0FBQzlCLGNBQUksSUFBSSxZQUFZLGdCQUFnQixHQUFHO0FBQ25DLGtCQUFNLFlBQVksYUFBYSxJQUFJLEdBQUc7QUFDdEMsa0JBQU0sRUFBRSxRQUFRLEtBQUssSUFBSTtBQUN6Qix1QkFBVyxLQUFLLE1BQU07QUFDdEIscUJBQVMsS0FBSyxNQUFNLFNBQVM7QUFBQSxVQUNqQztBQUFBLFFBQ0o7QUFDQSxpQkFBUyx5QkFBeUI7QUFDOUIsaUJBQU8sT0FBTyxxQkFBcUI7QUFBQSxRQUN2QztBQUFBLFFBRUEsTUFBTSxjQUFjO0FBQUEsVUFDaEIsY0FBYztBQUNWLGlCQUFLLFdBQVc7QUFDaEIsaUJBQUssY0FBYztBQUNuQixpQkFBSyxrQkFBa0I7QUFDdkIsaUJBQUssZ0JBQWdCO0FBQ3JCLGlCQUFLLGlCQUFpQjtBQUN0QixpQkFBSyxlQUFlO0FBQ3BCLGlCQUFLLFVBQVU7QUFDZixpQkFBSyxXQUFXO0FBQ2hCLGlCQUFLLGVBQWU7QUFDcEIsaUJBQUssUUFBUTtBQUNiLGlCQUFLLGVBQWU7QUFDcEIsbUJBQU8sS0FBSyxJQUFJO0FBQUEsVUFDcEI7QUFBQSxRQUNKO0FBQ0EsY0FBTSxXQUFXLENBQUMsbUJBQW1CO0FBQ2pDLHlCQUFlLFdBQVc7QUFDMUIseUJBQWUsY0FBYztBQUM3Qix5QkFBZSxrQkFBa0I7QUFDakMseUJBQWUsZ0JBQWdCO0FBQy9CLHlCQUFlLGlCQUFpQjtBQUNoQyx5QkFBZSxlQUFlO0FBQzlCLHlCQUFlLFVBQVU7QUFDekIseUJBQWUsV0FBVztBQUMxQix5QkFBZSxlQUFlO0FBQzlCLHlCQUFlLFFBQVE7QUFDdkIseUJBQWUsZUFBZTtBQUM5QixpQkFBTztBQUFBLFFBQ1g7QUFDQSxjQUFNLG9CQUFvQixDQUFDLGdCQUFnQixVQUFVLFNBQVM7QUFDMUQseUJBQWUsUUFBUSxRQUFRLFFBQVE7QUFDdkMsaUJBQU8sS0FBSyxRQUFRLEVBQUUsUUFBUSxTQUFPLGVBQWUsR0FBRyxJQUFJLFNBQVMsR0FBRyxDQUFDO0FBQ3hFLGNBQUksTUFBTTtBQUNOLDRCQUFnQixJQUFJO0FBQUEsVUFDeEI7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFDQSxjQUFNLFVBQVUsQ0FBQyxrQkFBa0I7QUFDL0IsY0FBSSxRQUFRO0FBQ1osbUJBQVMsT0FBTyxlQUFlO0FBQzNCLGdCQUFJLFFBQVEsV0FBVyxjQUFjLEdBQUcsTUFBTSxPQUFPO0FBQ2pELHNCQUFRO0FBQUEsWUFDWjtBQUFBLFVBQ0o7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFFQSxjQUFNLGlCQUFpQixvQkFBSSxRQUFRO0FBQ25DLGlCQUFTLFNBQVMsS0FBSyxXQUFXO0FBQzlCLGNBQUksZ0JBQWdCLFdBQVcsSUFBSTtBQUNuQyxjQUFJLElBQUksTUFBTTtBQUNWLGdCQUFJLEtBQUssSUFBSSxTQUFTO0FBQUEsVUFDMUI7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNLHVCQUF1QixJQUFJO0FBQUEsVUFDN0IsV0FBVyxlQUFlO0FBQ3RCLG1CQUFPO0FBQUEsVUFDWDtBQUFBLFVBQ0EsWUFBWSxLQUFLO0FBQ2Isa0JBQU07QUFDTixnQkFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFdBQVcsSUFBSSxRQUFRLFFBQVEsR0FBRyxNQUFNLElBQUk7QUFDekQsb0JBQU0sSUFBSSxVQUFVLHFCQUFxQjtBQUFBLFlBQzdDO0FBQ0EsMkJBQWUsSUFBSSxNQUFNLEdBQUc7QUFBQSxVQUNoQztBQUFBLFVBQ0EsSUFBSSxPQUFPO0FBQ1AsZ0JBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxLQUFLLE9BQU8sVUFBVSxVQUFVO0FBQ2pELG9CQUFNLElBQUksYUFBYSxvRUFBb0UsS0FBSyx3QkFBd0I7QUFBQSxZQUM1SDtBQUNBLGtCQUFNLFNBQVMsTUFBTSxJQUFJLEtBQUs7QUFDOUIsa0JBQU0sTUFBTSxlQUFlLElBQUksSUFBSTtBQUNuQyxrQkFBTSxZQUFZLFFBQVEsS0FBSztBQUMvQixnQkFBSSxJQUFJLGFBQWE7QUFDakIsdUJBQVMsS0FBSyxTQUFTO0FBQUEsWUFDM0IsT0FDSztBQUNELHlCQUFXLE1BQU07QUFDYix5QkFBUyxLQUFLLFNBQVM7QUFBQSxjQUMzQixDQUFDO0FBQUEsWUFDTDtBQUNBLG1CQUFPO0FBQUEsVUFDWDtBQUFBLFVBQ0EsUUFBUTtBQUNKLHFCQUFTLENBQUMsS0FBSyxLQUFLLEtBQUssUUFBUSxHQUFHO0FBQ2hDLG1CQUFLLE9BQU8sS0FBSztBQUFBLFlBQ3JCO0FBQ0Esa0JBQU0sTUFBTTtBQUFBLFVBQ2hCO0FBQUEsVUFDQSxPQUFPLE9BQU87QUFDVixrQkFBTSxTQUFTLE1BQU0sT0FBTyxLQUFLO0FBQ2pDLGtCQUFNLE1BQU0sZUFBZSxJQUFJLElBQUk7QUFDbkMsZ0JBQUksSUFBSSxhQUFhO0FBQ2pCLGtCQUFJLGdCQUFnQixRQUFRLEtBQUssSUFBSSxLQUFLO0FBQzFDLGtCQUFJLElBQUksTUFBTTtBQUNWLG9CQUFJLEtBQUssT0FBTyxRQUFRLEtBQUssRUFBRTtBQUFBLGNBQ25DO0FBQUEsWUFDSixPQUNLO0FBQ0QseUJBQVcsTUFBTTtBQUNiLG9CQUFJLGdCQUFnQixRQUFRLEtBQUssSUFBSSxLQUFLO0FBQzFDLG9CQUFJLElBQUksTUFBTTtBQUNWLHNCQUFJLEtBQUssT0FBTyxRQUFRLEtBQUssRUFBRTtBQUFBLGdCQUNuQztBQUFBLGNBQ0osQ0FBQztBQUFBLFlBQ0w7QUFDQSxtQkFBTztBQUFBLFVBQ1g7QUFBQSxRQUNKO0FBRUEsaUJBQVMsdUJBQXVCLFVBQVUsT0FBTyxNQUFNLEdBQUc7QUFDdEQsY0FBSSxTQUFTLE9BQU8sQ0FBQyxFQUFHLE9BQU0sSUFBSSxVQUFVLCtDQUErQztBQUMzRixjQUFJLE9BQU8sVUFBVSxhQUFhLGFBQWEsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksUUFBUSxFQUFHLE9BQU0sSUFBSSxVQUFVLDBFQUEwRTtBQUNqTCxpQkFBTyxTQUFTLE1BQU0sSUFBSSxTQUFTLE1BQU0sRUFBRSxLQUFLLFFBQVEsSUFBSSxJQUFJLEVBQUUsUUFBUSxNQUFNLElBQUksUUFBUTtBQUFBLFFBQ2hHO0FBQ0EsaUJBQVMsdUJBQXVCLFVBQVUsT0FBTyxPQUFPLE1BQU0sR0FBRztBQUM3RCxjQUFJLFNBQVMsSUFBSyxPQUFNLElBQUksVUFBVSxnQ0FBZ0M7QUFDdEUsY0FBSSxTQUFTLE9BQU8sQ0FBQyxFQUFHLE9BQU0sSUFBSSxVQUFVLCtDQUErQztBQUMzRixjQUFJLE9BQU8sVUFBVSxhQUFhLGFBQWEsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksUUFBUSxFQUFHLE9BQU0sSUFBSSxVQUFVLHlFQUF5RTtBQUNoTCxpQkFBUSxTQUFTLE1BQU0sRUFBRSxLQUFLLFVBQVUsS0FBSyxJQUFJLElBQUksRUFBRSxRQUFRLFFBQVEsTUFBTSxJQUFJLFVBQVUsS0FBSyxHQUFJO0FBQUEsUUFDeEc7QUFFQSxZQUFJO0FBQUEsUUFDSixNQUFNLDJCQUEyQjtBQUFBLFVBQzdCLFlBQVksVUFBVTtBQUNsQixpREFBcUMsSUFBSSxNQUFNLE1BQU07QUFDckQsbUNBQXVCLE1BQU0sc0NBQXNDLFVBQVUsR0FBRztBQUNoRixxQkFBUyxJQUFJLEdBQUcsSUFBSSxTQUFTLFFBQVEsS0FBSztBQUN0QyxrQkFBSSxVQUFVLFNBQVMsQ0FBQztBQUN4QixtQkFBSyxDQUFDLElBQUk7QUFDVixrQkFBSSxRQUFRLGFBQWEsTUFBTSxHQUFHO0FBQzlCLHFCQUFLLFFBQVEsYUFBYSxNQUFNLENBQUMsSUFBSTtBQUFBLGNBQ3pDO0FBQUEsWUFDSjtBQUNBLG1CQUFPLE9BQU8sSUFBSTtBQUFBLFVBQ3RCO0FBQUEsVUFDQSxJQUFJLFNBQVM7QUFDVCxtQkFBTyx1QkFBdUIsTUFBTSxzQ0FBc0MsR0FBRyxFQUFFO0FBQUEsVUFDbkY7QUFBQSxVQUNBLEVBQUUsdUNBQXVDLG9CQUFJLFFBQVEsR0FBRyxPQUFPLFNBQVMsSUFBSTtBQUN4RSxtQkFBTyx1QkFBdUIsTUFBTSxzQ0FBc0MsR0FBRyxFQUFFLE9BQU8sUUFBUSxFQUFFO0FBQUEsVUFDcEc7QUFBQSxVQUNBLEtBQUssR0FBRztBQUNKLG1CQUFPLEtBQUssQ0FBQyxLQUFLLE9BQU8sT0FBTyxLQUFLLENBQUM7QUFBQSxVQUMxQztBQUFBLFVBQ0EsVUFBVSxNQUFNO0FBQ1osbUJBQU8sS0FBSyxJQUFJLEtBQUssT0FBTyxPQUFPLEtBQUssSUFBSTtBQUFBLFVBQ2hEO0FBQUEsUUFDSjtBQUVBLGlCQUFTLHFCQUFxQjtBQUMxQixnQkFBTSxnQkFBZ0IsZ0JBQWdCLFVBQVU7QUFDaEQsMEJBQWdCLFVBQVUsZ0JBQWdCO0FBQzFDLGdCQUFNLGlCQUFpQixnQkFBZ0IsVUFBVTtBQUNqRCwwQkFBZ0IsVUFBVSxpQkFBaUI7QUFDM0MsbUJBQVMseUJBQXlCLE1BQU07QUFDcEMsZ0JBQUksY0FBYyxjQUFjLE1BQU0sTUFBTSxJQUFJO0FBQ2hELG1CQUFPLG1CQUFtQixNQUFNLGFBQWEsZUFBZTtBQUFBLFVBQ2hFO0FBQ0EsbUJBQVMsMEJBQTBCLE1BQU07QUFDckMsZ0JBQUksY0FBYyxlQUFlLE1BQU0sTUFBTSxJQUFJO0FBQ2pELG1CQUFPLG1CQUFtQixNQUFNLGFBQWEsZ0JBQWdCO0FBQUEsVUFDakU7QUFDQSxnQkFBTSxFQUFFLEtBQUFDLEtBQUksSUFBSSxPQUFPLHlCQUF5QixnQkFBZ0IsV0FBVyxVQUFVO0FBQ3JGLGlCQUFPLGVBQWUsZ0JBQWdCLFdBQVcsWUFBWTtBQUFBLFlBQ3pELE9BQU8sTUFBTTtBQUNULG9CQUFNLFdBQVdBLEtBQUksS0FBSyxNQUFNLEdBQUcsSUFBSTtBQUN2QyxvQkFBTSxxQkFBcUIsTUFBTSxLQUFLLGdCQUFnQixJQUFJLElBQUksS0FBSyxDQUFDLENBQUM7QUFDckUsa0JBQUksbUJBQW1CLFdBQVcsR0FBRztBQUNqQyx1QkFBTztBQUFBLGNBQ1g7QUFDQSxvQkFBTSxrQkFBa0IsTUFBTSxLQUFLLFFBQVEsRUFBRSxPQUFPLGtCQUFrQixFQUFFLEtBQUssQ0FBQ0MsSUFBRyxNQUFNO0FBQ25GLG9CQUFJQSxHQUFFLHlCQUF5QjtBQUMzQix5QkFBT0EsR0FBRSx3QkFBd0IsQ0FBQyxJQUFJLElBQUksSUFBSTtBQUFBLGdCQUNsRDtBQUNBLHVCQUFPO0FBQUEsY0FDWCxDQUFDO0FBQ0QscUJBQU8sSUFBSSwyQkFBMkIsZUFBZTtBQUFBLFlBQ3pEO0FBQUEsVUFDSixDQUFDO0FBQUEsUUFDTDtBQUFBLFFBRUEsTUFBTSxpQkFBaUI7QUFBQSxVQUNuQixXQUFXLGVBQWU7QUFDdEIsbUJBQU87QUFBQSxVQUNYO0FBQUEsVUFDQSxZQUFZLEtBQUs7QUFDYixnQkFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFdBQVcsSUFBSSxRQUFRLFFBQVEsR0FBRyxNQUFNLElBQUk7QUFDekQsb0JBQU0sSUFBSSxVQUFVLHFCQUFxQjtBQUFBLFlBQzdDO0FBQ0Esa0JBQU0sV0FBVyxJQUFJLFlBQVk7QUFDakMsa0JBQU0sV0FBVyxJQUFJLGNBQWM7QUFDbkMsaUJBQUssU0FBUyxJQUFJLGVBQWUsR0FBRztBQUNwQyxtQkFBTyxJQUFJLE1BQU0sR0FBRztBQUNwQix3QkFBWSxJQUFJLE1BQU0sUUFBUTtBQUM5Qix5QkFBYSxJQUFJLEtBQUssSUFBSTtBQUMxQixvQkFBUSxLQUFLLElBQUk7QUFDakIsb0JBQVEsS0FBSyxJQUFJO0FBQ2pCLG1CQUFPLEtBQUssSUFBSTtBQUNoQixnQkFBSSxvQkFBb0Isa0JBQWtCO0FBQ3RDLDJCQUFhLFFBQVE7QUFBQSxZQUN6QjtBQUFBLFVBQ0o7QUFBQSxVQUNBLGdCQUFnQjtBQUNaLGtCQUFNLE1BQU0sT0FBTyxJQUFJLElBQUk7QUFDM0IscUNBQXlCLEtBQUssc0hBQXNIO0FBQ3BKLGdCQUFJLENBQUMsS0FBSyxjQUFjO0FBQ3BCLHFCQUFPO0FBQUEsWUFDWDtBQUNBLGtCQUFNLFdBQVcsWUFBWSxJQUFJLElBQUk7QUFDckMsZ0JBQUksQ0FBQyxTQUFTLE9BQU87QUFDakIsb0JBQU0sZ0JBQWdCLElBQUksTUFBTSxXQUFXO0FBQUEsZ0JBQ3ZDLFNBQVM7QUFBQSxnQkFDVCxZQUFZO0FBQUEsZ0JBQ1osVUFBVTtBQUFBLGNBQ2QsQ0FBQztBQUNELGtCQUFJLGNBQWMsYUFBYTtBQUFBLFlBQ25DO0FBQ0EsbUJBQU8sU0FBUztBQUFBLFVBQ3BCO0FBQUEsVUFDQSxJQUFJLE9BQU87QUFDUCxrQkFBTSxNQUFNLE9BQU8sSUFBSSxJQUFJO0FBQzNCLHFDQUF5QixLQUFLLHlIQUF5SDtBQUN2SixnQkFBSTtBQUNKLGdCQUFJLElBQUksWUFBWSxnQkFBZ0IsTUFBTSxNQUFNO0FBQzVDLHFCQUFPLGVBQWUsR0FBRztBQUFBLFlBQzdCO0FBQ0EsbUJBQU87QUFBQSxVQUNYO0FBQUEsVUFDQSxJQUFJLFNBQVM7QUFDVCxrQkFBTSxNQUFNLE9BQU8sSUFBSSxJQUFJO0FBQzNCLHFDQUF5QixLQUFLLDJIQUEySDtBQUN6SixrQkFBTSxLQUFLLElBQUksYUFBYSxJQUFJO0FBQ2hDLGtCQUFNLFdBQVcsSUFBSSxZQUFZO0FBQ2pDLGdCQUFJLFlBQVksSUFBSTtBQUNoQixxQkFBTyxTQUFTLGlCQUFpQixTQUFTLEVBQUUsSUFBSTtBQUFBLFlBQ3BEO0FBQ0EsbUJBQU8sQ0FBQztBQUFBLFVBQ1o7QUFBQSxVQUNBLGlCQUFpQjtBQUNiLGtCQUFNLE1BQU0sT0FBTyxJQUFJLElBQUk7QUFDM0IscUNBQXlCLEtBQUssdUhBQXVIO0FBQ3JKLGdCQUFJLENBQUMsS0FBSyxjQUFjO0FBQ3BCLHFCQUFPO0FBQUEsWUFDWDtBQUNBLGtCQUFNLFFBQVEsS0FBSyxjQUFjO0FBQ2pDLGtCQUFNLFNBQVMsb0JBQW9CLElBQUksSUFBSTtBQUMzQyxnQkFBSSxVQUFVLENBQUMsSUFBSSxZQUFZLGdCQUFnQixHQUFHO0FBQzlDLG9CQUFNLElBQUksYUFBYSx1SEFBdUg7QUFBQSxZQUNsSjtBQUNBLGdCQUFJLENBQUMsU0FBUyxRQUFRO0FBQ2xCLGtCQUFJLE1BQU07QUFDVixxQkFBTyxNQUFNO0FBQUEsWUFDakI7QUFDQSxtQkFBTztBQUFBLFVBQ1g7QUFBQSxVQUNBLGFBQWEsT0FBTztBQUNoQixrQkFBTSxNQUFNLE9BQU8sSUFBSSxJQUFJO0FBQzNCLHFDQUF5QixLQUFLLHFIQUFxSDtBQUNuSiwrQkFBbUIsSUFBSTtBQUN2QixnQkFBSSxTQUFTLFFBQVEsRUFBRSxpQkFBaUIsV0FBVztBQUMvQyxrQkFBSSxJQUFJLGFBQWEsTUFBTSxHQUFHO0FBQzFCLHNCQUFNLGNBQWMsa0JBQWtCLEtBQUssSUFBSTtBQUMvQyw0QkFBWSxRQUFRO0FBQUEsY0FDeEI7QUFBQSxZQUNKLFdBQ1MsU0FBUyxRQUFRLGlCQUFpQixVQUFVO0FBQ2pELG9CQUFNLEtBQUssS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxhQUFhLGFBQWEsTUFBTTtBQUNsRSxvQkFBSSxPQUFPLGtCQUFrQixVQUFVO0FBQ25DLHdCQUFNLGNBQWMsa0JBQWtCLEtBQUssSUFBSTtBQUMvQyw4QkFBWSxPQUFPO0FBQ25CLDhCQUFZLFFBQVE7QUFBQSxnQkFDeEI7QUFBQSxjQUNKLENBQUM7QUFBQSxZQUNMO0FBQ0Esd0JBQVksSUFBSSxLQUFLLEtBQUs7QUFBQSxVQUM5QjtBQUFBLFVBQ0EsWUFBWSxpQkFBaUIsbUJBQW1CLFFBQVE7QUFDcEQsa0JBQU0sTUFBTSxPQUFPLElBQUksSUFBSTtBQUMzQixxQ0FBeUIsS0FBSyxvSEFBb0g7QUFDbEosZ0JBQUksQ0FBQyxpQkFBaUI7QUFDbEIsb0JBQU0sSUFBSSxVQUFVLGlHQUFxRztBQUFBLFlBQzdIO0FBQ0EsZ0NBQW9CLElBQUksTUFBTSxNQUFNO0FBQ3BDLGtCQUFNLFdBQVcsWUFBWSxJQUFJLElBQUk7QUFDckMsa0JBQU0scUJBQXFCLENBQUM7QUFDNUIsdUJBQVcsT0FBTyxpQkFBaUI7QUFDL0IsaUNBQW1CLEdBQUcsSUFBSSxnQkFBZ0IsR0FBRztBQUFBLFlBQ2pEO0FBQ0EsZ0JBQUksT0FBTyxLQUFLLGtCQUFrQixFQUFFLFdBQVcsR0FBRztBQUM5Qyx1QkFBUyxRQUFRO0FBQUEsWUFDckI7QUFDQSxrQkFBTSxRQUFRLE9BQU8sT0FBTyxPQUFPLE9BQU8sQ0FBQyxHQUFHLFFBQVEsR0FBRyxrQkFBa0I7QUFDM0UsbUJBQU8sTUFBTTtBQUNiLGtCQUFNLEVBQUUsTUFBTSxJQUFJLGtCQUFrQixVQUFVLE9BQU8sS0FBSyxJQUFJO0FBQzlELGdCQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFtQjtBQUM5QixvQkFBTSxJQUFJLGFBQWEscUpBQXFKO0FBQUEsWUFDaEw7QUFDQSxpQ0FBcUIsSUFBSSxNQUFNLFFBQVEsS0FBSyxpQkFBaUI7QUFDN0QsZ0JBQUksSUFBSSxhQUFhO0FBQ2pCLGtCQUFJLGdCQUFnQixxQkFBcUIsQ0FBQyxLQUFLO0FBQy9DLGtCQUFJLGdCQUFnQixtQkFBbUIsS0FBSztBQUM1QyxrQkFBSSxhQUFhLGdCQUFnQixHQUFHLENBQUMsS0FBSyxFQUFFO0FBQUEsWUFDaEQsT0FDSztBQUNELGlDQUFtQixJQUFJLEtBQUssSUFBSTtBQUFBLFlBQ3BDO0FBQUEsVUFDSjtBQUFBLFVBQ0EsSUFBSSxhQUFhO0FBQ2Isa0JBQU0sTUFBTSxPQUFPLElBQUksSUFBSTtBQUMzQixrQkFBTSxhQUFhLGNBQWMsSUFBSSxHQUFHO0FBQ3hDLGdCQUFJLFlBQVk7QUFDWixxQkFBTztBQUFBLFlBQ1g7QUFDQSxtQkFBTztBQUFBLFVBQ1g7QUFBQSxVQUNBLElBQUksb0JBQW9CO0FBQ3BCLGtCQUFNLE1BQU0sT0FBTyxJQUFJLElBQUk7QUFDM0IscUNBQXlCLEtBQUssc0lBQXNJO0FBQ3BLLG1CQUFPLHFCQUFxQixJQUFJLElBQUk7QUFBQSxVQUN4QztBQUFBLFVBQ0EsSUFBSSxXQUFXO0FBQ1gsa0JBQU0sTUFBTSxPQUFPLElBQUksSUFBSTtBQUMzQixxQ0FBeUIsS0FBSyw2SEFBNkg7QUFDM0osa0JBQU0sV0FBVyxZQUFZLElBQUksSUFBSTtBQUNyQyxtQkFBTztBQUFBLFVBQ1g7QUFBQSxVQUNBLElBQUksZUFBZTtBQUNmLGtCQUFNLE1BQU0sT0FBTyxJQUFJLElBQUk7QUFDM0IscUNBQXlCLEtBQUssaUlBQWlJO0FBQy9KLGdCQUFLLElBQUksWUFBWSxJQUFJLGFBQWEsVUFBVSxLQUM1QyxJQUFJLGFBQWEsVUFBVSxHQUFHO0FBQzlCLHFCQUFPO0FBQUEsWUFDWDtBQUNBLG1CQUFPO0FBQUEsVUFDWDtBQUFBLFFBQ0o7QUFDQSxpQkFBUyw4QkFBOEI7QUFDbkMsY0FBSSxPQUFPLFdBQVcsZUFBZSxDQUFDLE9BQU8sb0JBQW9CLENBQUMsWUFBWSxVQUFVLGlCQUFpQjtBQUNyRyxtQkFBTztBQUFBLFVBQ1g7QUFBQSxVQUNBLE1BQU0seUNBQXlDLFlBQVk7QUFBQSxZQUN2RCxjQUFjO0FBQ1Ysb0JBQU07QUFDTixtQkFBSyxZQUFZLEtBQUssZ0JBQWdCO0FBQUEsWUFDMUM7QUFBQSxVQUNKO0FBQ0EsZ0JBQU0sYUFBYSx1Q0FBdUMsS0FBSyxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsUUFBUSxZQUFZLEVBQUUsQ0FBQztBQUM1Ryx5QkFBZSxPQUFPLFlBQVksZ0NBQWdDO0FBQ2xFLGdCQUFNLDBCQUEwQixJQUFJLGlDQUFpQztBQUNyRSxpQkFBTztBQUFBLFlBQ0g7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxVQUNKLEVBQUUsTUFBTSxVQUFRLFFBQVEsd0JBQXdCLFNBQVM7QUFBQSxRQUM3RDtBQUNBLFlBQUkseUNBQXlDO0FBQzdDLFlBQUksdUNBQXVDO0FBQzNDLGlCQUFTLDRCQUE0QixpQkFBaUI7QUFDbEQsY0FBSSxzQ0FBc0M7QUFDdEM7QUFBQSxVQUNKO0FBQ0EsaURBQXVDO0FBQ3ZDLGlCQUFPLGlCQUFpQjtBQUN4QixjQUFJLGlCQUFpQjtBQUNqQix3QkFBWSxVQUFVLGtCQUFrQixZQUFhLE1BQU07QUFDdkQsb0JBQU0sWUFBWSxnQkFBZ0IsS0FBSyxNQUFNLElBQUk7QUFDakQsd0JBQVUsU0FBUyxJQUFJLGVBQWUsSUFBSTtBQUMxQyxxQkFBTztBQUFBLFlBQ1g7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUNBLGlCQUFTLDhCQUE4QixzQkFBc0IsTUFBTTtBQUMvRCxjQUFJLHdDQUF3QztBQUN4QztBQUFBLFVBQ0o7QUFDQSxtREFBeUM7QUFDekMsY0FBSSxPQUFPLFdBQVcsYUFBYTtBQUMvQixtQkFBTyxtQkFBbUI7QUFBQSxVQUM5QjtBQUNBLGNBQUksT0FBTywwQkFBMEIsYUFBYTtBQUM5QyxrQkFBTSxTQUFTLHNCQUFzQixVQUFVO0FBQy9DLGtDQUFzQixVQUFVLFNBQVMsU0FBVSxNQUFNLGFBQWFDLFVBQVM7QUFDM0Usa0JBQUksWUFBWSxnQkFBZ0I7QUFDNUIsc0JBQU0sb0JBQW9CLFlBQVksVUFBVTtBQUNoRCw0QkFBWSxVQUFVLG9CQUFvQixXQUFZO0FBQ2xELHNCQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxHQUFHO0FBQ2pDLHlDQUFxQixJQUFJLE1BQU0sSUFBSTtBQUNuQyx3QkFBSSxLQUFLLGFBQWEsVUFBVSxHQUFHO0FBQy9CLGtDQUFZLE1BQU0sSUFBSTtBQUFBLG9CQUMxQjtBQUFBLGtCQUNKO0FBQ0Esc0JBQUkscUJBQXFCLE1BQU07QUFDM0Isc0NBQWtCLE1BQU0sSUFBSTtBQUFBLGtCQUNoQztBQUNBLG1DQUFpQixJQUFJO0FBQUEsZ0JBQ3pCO0FBQUEsY0FDSjtBQUNBLHFCQUFPLEtBQUssTUFBTSxNQUFNLGFBQWFBLFFBQU87QUFBQSxZQUNoRDtBQUFBLFVBQ0o7QUFDQSxjQUFJLE9BQU8sZ0JBQWdCLGFBQWE7QUFDcEMsd0JBQVksVUFBVSxrQkFBa0IsV0FBWTtBQUNoRCxrQkFBSSxDQUFDLEtBQUssU0FBUztBQUNmLHVCQUFPLENBQUM7QUFBQSxjQUNaLFdBQ1MsS0FBSyxRQUFRLFFBQVEsR0FBRyxNQUFNLElBQUk7QUFDdkMsc0JBQU0sSUFBSSxNQUFNLGlIQUFpSDtBQUFBLGNBQ3JJO0FBQ0Esa0JBQUksYUFBYSxJQUFJLElBQUksR0FBRztBQUN4QixzQkFBTSxJQUFJLGFBQWEsc0lBQXNJO0FBQUEsY0FDaks7QUFDQSxxQkFBTyxJQUFJLGlCQUFpQixJQUFJO0FBQUEsWUFDcEM7QUFBQSxVQUNKO0FBQ0EsY0FBSSxPQUFPLFlBQVksYUFBYTtBQUNoQyxnQkFBUyx1QkFBVCxZQUFpQyxNQUFNO0FBQ25DLG9CQUFNLGFBQWEsYUFBYSxNQUFNLE1BQU0sSUFBSTtBQUNoRCw0QkFBYyxJQUFJLE1BQU0sVUFBVTtBQUNsQyxrQkFBSSx1QkFBdUIsR0FBRztBQUMxQixzQkFBTSxXQUFXLElBQUksaUJBQWlCLGdCQUFnQjtBQUN0RCxvQkFBSSxPQUFPLFVBQVU7QUFDakIsMkJBQVMsUUFBUSxNQUFNLGNBQWM7QUFBQSxnQkFDekMsT0FDSztBQUNELDJCQUFTLFFBQVEsWUFBWSxjQUFjO0FBQUEsZ0JBQy9DO0FBQ0EsK0JBQWUsSUFBSSxNQUFNLFFBQVE7QUFBQSxjQUNyQztBQUNBLHFCQUFPO0FBQUEsWUFDWDtBQUNBLGtCQUFNLGVBQWUsUUFBUSxVQUFVO0FBQ3ZDLG9CQUFRLFVBQVUsZUFBZTtBQUFBLFVBQ3JDO0FBQ0EsY0FBSSx1QkFBdUIsS0FBSyxPQUFPLGFBQWEsYUFBYTtBQUM3RCxrQkFBTSxtQkFBbUIsSUFBSSxpQkFBaUIsZ0JBQWdCO0FBQzlELDZCQUFpQixRQUFRLFNBQVMsaUJBQWlCLGNBQWM7QUFBQSxVQUNyRTtBQUNBLGNBQUksT0FBTyxvQkFBb0IsYUFBYTtBQUN4QywrQkFBbUI7QUFBQSxVQUN2QjtBQUNBLGNBQUksdUJBQ0MsT0FBTyxXQUFXLGVBQWUsQ0FBQyxPQUFPLGdCQUFpQjtBQUMzRCx3Q0FBNEI7QUFBQSxVQUNoQztBQUFBLFFBQ0o7QUFFQSxjQUFNLGVBQWUsQ0FBQyxDQUFDLGVBQWU7QUFDdEMsWUFBSSxDQUFDLGNBQWM7QUFDZixjQUFJLENBQUMsNEJBQTRCLEdBQUc7QUFDaEMsMENBQThCLEtBQUs7QUFBQSxVQUN2QyxXQUNTLE9BQU8sV0FBVyxlQUFlLENBQUMsT0FBTyxnQkFBZ0I7QUFDOUQsd0NBQTRCLFlBQVksVUFBVSxlQUFlO0FBQUEsVUFDckU7QUFBQSxRQUNKO0FBRUEsZ0JBQVEsOEJBQThCO0FBQ3RDLGdCQUFRLGdDQUFnQztBQUV4QyxlQUFPLGVBQWUsU0FBUyxjQUFjLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFFNUQsZUFBTztBQUFBLE1BRVgsR0FBRyxDQUFDLENBQUM7QUFBQTtBQUFBOzs7QUM1MEJMO0FBQUE7QUFBQTtBQTJCQSxVQUFNLG9CQUFvQjtBQUMxQixVQUFNQyx5QkFBTixNQUFNLHVCQUFzQjtBQUFBLFFBQ3hCLE9BQU8sY0FBYyxNQUFNO0FBQ3ZCLGlCQUFPLE9BQU8sVUFBVSxTQUFTLEtBQUssSUFBSSxNQUFNO0FBQUEsUUFDcEQ7QUFBQSxRQUNBLE9BQU8sY0FBYyxNQUFNO0FBQ3ZCLGNBQUksS0FBSyxjQUFjLElBQUksR0FBRztBQUMxQixtQkFBTztBQUFBLFVBQ1g7QUFDQSxjQUFJLEtBQUssZUFBZSxLQUFLLE9BQU8sWUFBWTtBQUM1QyxtQkFBTyxLQUFLO0FBQUEsVUFDaEI7QUFDQSxjQUFJLEtBQUssZUFBZSxLQUFLLEtBQUssZUFBZSxLQUFLLE9BQU8sWUFBWTtBQUNyRSxtQkFBTyxLQUFLO0FBQUEsVUFDaEI7QUFDQSxpQkFBTyxLQUFLLGFBQWEsS0FBSyxNQUFNLEVBQy9CLE1BQU0sS0FBSyxZQUFZLEtBQUssYUFBYSxLQUFLLFVBQVUsRUFDeEQ7QUFBQSxRQUNUO0FBQUEsUUFDQSxPQUFPLGFBQWEsTUFBTTtBQUN0QixpQkFBTyxLQUFLLE9BQU8sTUFBTSxVQUFVO0FBQUEsUUFDdkM7QUFBQSxRQUNBLE9BQU8sT0FBTyxNQUFNQyxPQUFNO0FBQ3RCLGNBQUksS0FBSyxnQkFBZ0JBLE9BQU07QUFDM0IsbUJBQU87QUFBQSxVQUNYO0FBQ0EsY0FBSSxLQUFLLGNBQWMsSUFBSSxHQUFHO0FBQzFCLG1CQUFPLElBQUlBLE1BQUssSUFBSTtBQUFBLFVBQ3hCO0FBQ0EsY0FBSSxLQUFLLGtCQUFrQixJQUFJLEdBQUc7QUFDOUIsbUJBQU8sSUFBSUEsTUFBSyxLQUFLLFFBQVEsS0FBSyxZQUFZLEtBQUssVUFBVTtBQUFBLFVBQ2pFO0FBQ0EsZ0JBQU0sSUFBSSxVQUFVLHNFQUFzRTtBQUFBLFFBQzlGO0FBQUEsUUFDQSxPQUFPLGVBQWUsTUFBTTtBQUN4QixpQkFBTyxLQUFLLGtCQUFrQixJQUFJLEtBQzNCLEtBQUssY0FBYyxJQUFJO0FBQUEsUUFDbEM7QUFBQSxRQUNBLE9BQU8sa0JBQWtCLE1BQU07QUFDM0IsaUJBQU8sWUFBWSxPQUFPLElBQUksS0FDdEIsUUFBUSxLQUFLLGNBQWMsS0FBSyxNQUFNO0FBQUEsUUFDbEQ7QUFBQSxRQUNBLE9BQU8sUUFBUUMsSUFBRyxHQUFHO0FBQ2pCLGdCQUFNLFFBQVEsdUJBQXNCLGFBQWFBLEVBQUM7QUFDbEQsZ0JBQU0sUUFBUSx1QkFBc0IsYUFBYSxDQUFDO0FBQ2xELGNBQUksTUFBTSxXQUFXLE1BQU0sWUFBWTtBQUNuQyxtQkFBTztBQUFBLFVBQ1g7QUFDQSxtQkFBUyxJQUFJLEdBQUcsSUFBSSxNQUFNLFFBQVEsS0FBSztBQUNuQyxnQkFBSSxNQUFNLENBQUMsTUFBTSxNQUFNLENBQUMsR0FBRztBQUN2QixxQkFBTztBQUFBLFlBQ1g7QUFBQSxVQUNKO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxPQUFPLFVBQVUsTUFBTTtBQUNuQixjQUFJO0FBQ0osY0FBSSxNQUFNLFFBQVEsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxhQUFhLFdBQVc7QUFDMUQsc0JBQVUsS0FBSyxDQUFDO0FBQUEsVUFDcEIsV0FDUyxNQUFNLFFBQVEsS0FBSyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsYUFBYSxVQUFVO0FBQzVELHNCQUFVLEtBQUssQ0FBQztBQUFBLFVBQ3BCLE9BQ0s7QUFDRCxnQkFBSSxLQUFLLEtBQUssU0FBUyxDQUFDLGFBQWEsVUFBVTtBQUMzQyx3QkFBVSxLQUFLLE1BQU0sR0FBRyxLQUFLLFNBQVMsQ0FBQztBQUFBLFlBQzNDLE9BQ0s7QUFDRCx3QkFBVTtBQUFBLFlBQ2Q7QUFBQSxVQUNKO0FBQ0EsY0FBSUMsUUFBTztBQUNYLHFCQUFXLFVBQVUsU0FBUztBQUMxQixZQUFBQSxTQUFRLE9BQU87QUFBQSxVQUNuQjtBQUNBLGdCQUFNLE1BQU0sSUFBSSxXQUFXQSxLQUFJO0FBQy9CLGNBQUlDLFVBQVM7QUFDYixxQkFBVyxVQUFVLFNBQVM7QUFDMUIsa0JBQU0sT0FBTyxLQUFLLGFBQWEsTUFBTTtBQUNyQyxnQkFBSSxJQUFJLE1BQU1BLE9BQU07QUFDcEIsWUFBQUEsV0FBVSxLQUFLO0FBQUEsVUFDbkI7QUFDQSxjQUFJLEtBQUssS0FBSyxTQUFTLENBQUMsYUFBYSxVQUFVO0FBQzNDLG1CQUFPLEtBQUssT0FBTyxLQUFLLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQztBQUFBLFVBQ2pEO0FBQ0EsaUJBQU8sSUFBSTtBQUFBLFFBQ2Y7QUFBQSxNQUNKO0FBRUEsVUFBTSxjQUFjO0FBQ3BCLFVBQU0sWUFBWTtBQUNsQixVQUFNLGVBQWU7QUFDckIsVUFBTSxrQkFBa0I7QUFDeEIsVUFBTSxnQkFBTixNQUFvQjtBQUFBLFFBQ2hCLE9BQU8sV0FBVyxNQUFNO0FBQ3BCLGdCQUFNLElBQUksU0FBUyxtQkFBbUIsSUFBSSxDQUFDO0FBQzNDLGdCQUFNLFlBQVksSUFBSSxXQUFXLEVBQUUsTUFBTTtBQUN6QyxtQkFBUyxJQUFJLEdBQUcsSUFBSSxFQUFFLFFBQVEsS0FBSztBQUMvQixzQkFBVSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUM7QUFBQSxVQUNqQztBQUNBLGlCQUFPLFVBQVU7QUFBQSxRQUNyQjtBQUFBLFFBQ0EsT0FBTyxTQUFTLFFBQVE7QUFDcEIsZ0JBQU0sTUFBTUosdUJBQXNCLGFBQWEsTUFBTTtBQUNyRCxjQUFJLGdCQUFnQjtBQUNwQixtQkFBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLFFBQVEsS0FBSztBQUNqQyw2QkFBaUIsT0FBTyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQUEsVUFDL0M7QUFDQSxnQkFBTSxnQkFBZ0IsbUJBQW1CLE9BQU8sYUFBYSxDQUFDO0FBQzlELGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFDQSxVQUFNLGlCQUFOLE1BQXFCO0FBQUEsUUFDakIsT0FBTyxTQUFTLFFBQVEsZUFBZSxPQUFPO0FBQzFDLGdCQUFNLGNBQWNBLHVCQUFzQixjQUFjLE1BQU07QUFDOUQsZ0JBQU0sV0FBVyxJQUFJLFNBQVMsV0FBVztBQUN6QyxjQUFJLE1BQU07QUFDVixtQkFBUyxJQUFJLEdBQUcsSUFBSSxZQUFZLFlBQVksS0FBSyxHQUFHO0FBQ2hELGtCQUFNLE9BQU8sU0FBUyxVQUFVLEdBQUcsWUFBWTtBQUMvQyxtQkFBTyxPQUFPLGFBQWEsSUFBSTtBQUFBLFVBQ25DO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxPQUFPLFdBQVcsTUFBTSxlQUFlLE9BQU87QUFDMUMsZ0JBQU0sTUFBTSxJQUFJLFlBQVksS0FBSyxTQUFTLENBQUM7QUFDM0MsZ0JBQU0sV0FBVyxJQUFJLFNBQVMsR0FBRztBQUNqQyxtQkFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLFFBQVEsS0FBSztBQUNsQyxxQkFBUyxVQUFVLElBQUksR0FBRyxLQUFLLFdBQVcsQ0FBQyxHQUFHLFlBQVk7QUFBQSxVQUM5RDtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFDQSxVQUFNSyxXQUFOLE1BQU0sU0FBUTtBQUFBLFFBQ1YsT0FBTyxNQUFNLE1BQU07QUFDZixpQkFBTyxPQUFPLFNBQVMsZUFDaEIsVUFBVSxLQUFLLElBQUk7QUFBQSxRQUM5QjtBQUFBLFFBQ0EsT0FBTyxTQUFTLE1BQU07QUFDbEIsaUJBQU8sT0FBTyxTQUFTLGVBQ2hCLGFBQWEsS0FBSyxJQUFJO0FBQUEsUUFDakM7QUFBQSxRQUNBLE9BQU8sWUFBWSxNQUFNO0FBQ3JCLGlCQUFPLE9BQU8sU0FBUyxlQUNoQixnQkFBZ0IsS0FBSyxJQUFJO0FBQUEsUUFDcEM7QUFBQSxRQUNBLE9BQU8sU0FBUyxRQUFRLE1BQU0sUUFBUTtBQUNsQyxnQkFBTSxNQUFNTCx1QkFBc0IsYUFBYSxNQUFNO0FBQ3JELGtCQUFRLElBQUksWUFBWSxHQUFHO0FBQUEsWUFDdkIsS0FBSztBQUNELHFCQUFPLEtBQUssYUFBYSxHQUFHO0FBQUEsWUFDaEMsS0FBSztBQUNELHFCQUFPLEtBQUssU0FBUyxHQUFHO0FBQUEsWUFDNUIsS0FBSztBQUNELHFCQUFPLEtBQUssTUFBTSxHQUFHO0FBQUEsWUFDekIsS0FBSztBQUNELHFCQUFPLEtBQUssU0FBUyxHQUFHO0FBQUEsWUFDNUIsS0FBSztBQUNELHFCQUFPLEtBQUssWUFBWSxHQUFHO0FBQUEsWUFDL0IsS0FBSztBQUNELHFCQUFPLGVBQWUsU0FBUyxLQUFLLElBQUk7QUFBQSxZQUM1QyxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0QscUJBQU8sZUFBZSxTQUFTLEdBQUc7QUFBQSxZQUN0QztBQUNJLG9CQUFNLElBQUksTUFBTSw2QkFBNkIsR0FBRyxHQUFHO0FBQUEsVUFDM0Q7QUFBQSxRQUNKO0FBQUEsUUFDQSxPQUFPLFdBQVcsS0FBSyxNQUFNLFFBQVE7QUFDakMsY0FBSSxDQUFDLEtBQUs7QUFDTixtQkFBTyxJQUFJLFlBQVksQ0FBQztBQUFBLFVBQzVCO0FBQ0Esa0JBQVEsSUFBSSxZQUFZLEdBQUc7QUFBQSxZQUN2QixLQUFLO0FBQ0QscUJBQU8sS0FBSyxlQUFlLEdBQUc7QUFBQSxZQUNsQyxLQUFLO0FBQ0QscUJBQU8sS0FBSyxXQUFXLEdBQUc7QUFBQSxZQUM5QixLQUFLO0FBQ0QscUJBQU8sS0FBSyxRQUFRLEdBQUc7QUFBQSxZQUMzQixLQUFLO0FBQ0QscUJBQU8sS0FBSyxXQUFXLEdBQUc7QUFBQSxZQUM5QixLQUFLO0FBQ0QscUJBQU8sS0FBSyxjQUFjLEdBQUc7QUFBQSxZQUNqQyxLQUFLO0FBQ0QscUJBQU8sZUFBZSxXQUFXLEtBQUssSUFBSTtBQUFBLFlBQzlDLEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFDRCxxQkFBTyxlQUFlLFdBQVcsR0FBRztBQUFBLFlBQ3hDO0FBQ0ksb0JBQU0sSUFBSSxNQUFNLDZCQUE2QixHQUFHLEdBQUc7QUFBQSxVQUMzRDtBQUFBLFFBQ0o7QUFBQSxRQUNBLE9BQU8sU0FBUyxRQUFRO0FBQ3BCLGdCQUFNLE1BQU1BLHVCQUFzQixhQUFhLE1BQU07QUFDckQsY0FBSSxPQUFPLFNBQVMsYUFBYTtBQUM3QixrQkFBTSxTQUFTLEtBQUssU0FBUyxLQUFLLFFBQVE7QUFDMUMsbUJBQU8sS0FBSyxNQUFNO0FBQUEsVUFDdEIsT0FDSztBQUNELG1CQUFPLE9BQU8sS0FBSyxHQUFHLEVBQUUsU0FBUyxRQUFRO0FBQUEsVUFDN0M7QUFBQSxRQUNKO0FBQUEsUUFDQSxPQUFPLFdBQVcsUUFBUTtBQUN0QixnQkFBTSxZQUFZLEtBQUssYUFBYSxNQUFNO0FBQzFDLGNBQUksQ0FBQyxXQUFXO0FBQ1osbUJBQU8sSUFBSSxZQUFZLENBQUM7QUFBQSxVQUM1QjtBQUNBLGNBQUksQ0FBQyxTQUFRLFNBQVMsU0FBUyxHQUFHO0FBQzlCLGtCQUFNLElBQUksVUFBVSw2Q0FBNkM7QUFBQSxVQUNyRTtBQUNBLGNBQUksT0FBTyxTQUFTLGFBQWE7QUFDN0IsbUJBQU8sS0FBSyxXQUFXLEtBQUssU0FBUyxDQUFDO0FBQUEsVUFDMUMsT0FDSztBQUNELG1CQUFPLElBQUksV0FBVyxPQUFPLEtBQUssV0FBVyxRQUFRLENBQUMsRUFBRTtBQUFBLFVBQzVEO0FBQUEsUUFDSjtBQUFBLFFBQ0EsT0FBTyxjQUFjLFdBQVc7QUFDNUIsZ0JBQU0sWUFBWSxLQUFLLGFBQWEsU0FBUztBQUM3QyxjQUFJLENBQUMsV0FBVztBQUNaLG1CQUFPLElBQUksWUFBWSxDQUFDO0FBQUEsVUFDNUI7QUFDQSxjQUFJLENBQUMsU0FBUSxZQUFZLFNBQVMsR0FBRztBQUNqQyxrQkFBTSxJQUFJLFVBQVUsK0NBQStDO0FBQUEsVUFDdkU7QUFDQSxpQkFBTyxLQUFLLFdBQVcsS0FBSyxjQUFjLFVBQVUsUUFBUSxPQUFPLEdBQUcsRUFBRSxRQUFRLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFBQSxRQUNoRztBQUFBLFFBQ0EsT0FBTyxZQUFZLE1BQU07QUFDckIsaUJBQU8sS0FBSyxTQUFTLElBQUksRUFBRSxRQUFRLE9BQU8sR0FBRyxFQUFFLFFBQVEsT0FBTyxHQUFHLEVBQUUsUUFBUSxPQUFPLEVBQUU7QUFBQSxRQUN4RjtBQUFBLFFBQ0EsT0FBTyxlQUFlLE1BQU0sV0FBVyxTQUFRLHVCQUF1QjtBQUNsRSxrQkFBUSxVQUFVO0FBQUEsWUFDZCxLQUFLO0FBQ0QscUJBQU8sS0FBSyxXQUFXLElBQUk7QUFBQSxZQUMvQixLQUFLO0FBQ0QscUJBQU8sY0FBYyxXQUFXLElBQUk7QUFBQSxZQUN4QyxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0QscUJBQU8sZUFBZSxXQUFXLElBQUk7QUFBQSxZQUN6QyxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0QscUJBQU8sZUFBZSxXQUFXLE1BQU0sSUFBSTtBQUFBLFlBQy9DO0FBQ0ksb0JBQU0sSUFBSSxNQUFNLDZCQUE2QixRQUFRLEdBQUc7QUFBQSxVQUNoRTtBQUFBLFFBQ0o7QUFBQSxRQUNBLE9BQU8sYUFBYSxRQUFRLFdBQVcsU0FBUSx1QkFBdUI7QUFDbEUsa0JBQVEsVUFBVTtBQUFBLFlBQ2QsS0FBSztBQUNELHFCQUFPLEtBQUssU0FBUyxNQUFNO0FBQUEsWUFDL0IsS0FBSztBQUNELHFCQUFPLGNBQWMsU0FBUyxNQUFNO0FBQUEsWUFDeEMsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUNELHFCQUFPLGVBQWUsU0FBUyxNQUFNO0FBQUEsWUFDekMsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUNELHFCQUFPLGVBQWUsU0FBUyxRQUFRLElBQUk7QUFBQSxZQUMvQztBQUNJLG9CQUFNLElBQUksTUFBTSw2QkFBNkIsUUFBUSxHQUFHO0FBQUEsVUFDaEU7QUFBQSxRQUNKO0FBQUEsUUFDQSxPQUFPLFdBQVcsTUFBTTtBQUNwQixnQkFBTSxlQUFlLEtBQUs7QUFDMUIsZ0JBQU0sYUFBYSxJQUFJLFdBQVcsWUFBWTtBQUM5QyxtQkFBUyxJQUFJLEdBQUcsSUFBSSxjQUFjLEtBQUs7QUFDbkMsdUJBQVcsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDO0FBQUEsVUFDckM7QUFDQSxpQkFBTyxXQUFXO0FBQUEsUUFDdEI7QUFBQSxRQUNBLE9BQU8sU0FBUyxRQUFRO0FBQ3BCLGdCQUFNLE1BQU1BLHVCQUFzQixhQUFhLE1BQU07QUFDckQsY0FBSSxNQUFNO0FBQ1YsbUJBQVMsSUFBSSxHQUFHLElBQUksSUFBSSxRQUFRLEtBQUs7QUFDakMsbUJBQU8sT0FBTyxhQUFhLElBQUksQ0FBQyxDQUFDO0FBQUEsVUFDckM7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLE9BQU8sTUFBTSxRQUFRO0FBQ2pCLGdCQUFNLE1BQU1BLHVCQUFzQixhQUFhLE1BQU07QUFDckQsY0FBSSxTQUFTO0FBQ2IsZ0JBQU0sTUFBTSxJQUFJO0FBQ2hCLG1CQUFTLElBQUksR0FBRyxJQUFJLEtBQUssS0FBSztBQUMxQixrQkFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixnQkFBSSxPQUFPLElBQUk7QUFDWCx3QkFBVTtBQUFBLFlBQ2Q7QUFDQSxzQkFBVSxLQUFLLFNBQVMsRUFBRTtBQUFBLFVBQzlCO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxPQUFPLFFBQVEsV0FBVztBQUN0QixjQUFJLFlBQVksS0FBSyxhQUFhLFNBQVM7QUFDM0MsY0FBSSxDQUFDLFdBQVc7QUFDWixtQkFBTyxJQUFJLFlBQVksQ0FBQztBQUFBLFVBQzVCO0FBQ0EsY0FBSSxDQUFDLFNBQVEsTUFBTSxTQUFTLEdBQUc7QUFDM0Isa0JBQU0sSUFBSSxVQUFVLHlDQUF5QztBQUFBLFVBQ2pFO0FBQ0EsY0FBSSxVQUFVLFNBQVMsR0FBRztBQUN0Qix3QkFBWSxJQUFJLFNBQVM7QUFBQSxVQUM3QjtBQUNBLGdCQUFNLE1BQU0sSUFBSSxXQUFXLFVBQVUsU0FBUyxDQUFDO0FBQy9DLG1CQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxJQUFJLElBQUksR0FBRztBQUM3QyxrQkFBTSxJQUFJLFVBQVUsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNsQyxnQkFBSSxJQUFJLENBQUMsSUFBSSxTQUFTLEdBQUcsRUFBRTtBQUFBLFVBQy9CO0FBQ0EsaUJBQU8sSUFBSTtBQUFBLFFBQ2Y7QUFBQSxRQUNBLE9BQU8sY0FBYyxRQUFRLGVBQWUsT0FBTztBQUMvQyxpQkFBTyxlQUFlLFNBQVMsUUFBUSxZQUFZO0FBQUEsUUFDdkQ7QUFBQSxRQUNBLE9BQU8sZ0JBQWdCLE1BQU0sZUFBZSxPQUFPO0FBQy9DLGlCQUFPLGVBQWUsV0FBVyxNQUFNLFlBQVk7QUFBQSxRQUN2RDtBQUFBLFFBQ0EsT0FBTyxjQUFjLFFBQVE7QUFDekIsZ0JBQU0sV0FBVyxJQUFLLE9BQU8sU0FBUztBQUN0QyxjQUFJLFdBQVcsR0FBRztBQUNkLHFCQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsS0FBSztBQUMvQix3QkFBVTtBQUFBLFlBQ2Q7QUFBQSxVQUNKO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxPQUFPLGFBQWEsTUFBTTtBQUN0QixrQkFBUSxTQUFTLFFBQVEsU0FBUyxTQUFTLFNBQVMsS0FBSyxRQUFRLGNBQWMsRUFBRSxNQUFNO0FBQUEsUUFDM0Y7QUFBQSxNQUNKO0FBQ0EsTUFBQUssU0FBUSx3QkFBd0I7QUFFaEMsZUFBUyxPQUFPLFdBQVcsU0FBUztBQUNoQyxjQUFNLE1BQU0sVUFBVSxDQUFDO0FBQ3ZCLGlCQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQ3ZDLGdCQUFNLE1BQU0sVUFBVSxDQUFDO0FBQ3ZCLHFCQUFXLFFBQVEsS0FBSztBQUNwQixnQkFBSSxJQUFJLElBQUksSUFBSSxJQUFJO0FBQUEsVUFDeEI7QUFBQSxRQUNKO0FBQ0EsZUFBTztBQUFBLE1BQ1g7QUFDQSxlQUFTQyxZQUFXLEtBQUs7QUFDckIsY0FBTSxrQkFBa0IsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRSxPQUFPLENBQUMsTUFBTSxRQUFRLE9BQU8sR0FBRztBQUMzRixjQUFNLE1BQU0sSUFBSSxXQUFXLGVBQWU7QUFDMUMsWUFBSSxhQUFhO0FBQ2pCLFlBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxXQUFXLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxRQUFRO0FBQ3JELHFCQUFXLFNBQVMsS0FBSztBQUNyQixnQkFBSSxZQUFZLElBQUk7QUFBQSxVQUN4QjtBQUFBLFFBQ0osQ0FBQztBQUNELGVBQU8sSUFBSTtBQUFBLE1BQ2Y7QUFDQSxlQUFTLFFBQVEsUUFBUSxRQUFRO0FBQzdCLFlBQUksRUFBRSxVQUFVLFNBQVM7QUFDckIsaUJBQU87QUFBQSxRQUNYO0FBQ0EsWUFBSSxPQUFPLGVBQWUsT0FBTyxZQUFZO0FBQ3pDLGlCQUFPO0FBQUEsUUFDWDtBQUNBLGNBQU0sS0FBSyxJQUFJLFdBQVcsTUFBTTtBQUNoQyxjQUFNLEtBQUssSUFBSSxXQUFXLE1BQU07QUFDaEMsaUJBQVMsSUFBSSxHQUFHLElBQUksT0FBTyxZQUFZLEtBQUs7QUFDeEMsY0FBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRztBQUNqQixtQkFBTztBQUFBLFVBQ1g7QUFBQSxRQUNKO0FBQ0EsZUFBTztBQUFBLE1BQ1g7QUFFQSxjQUFRLHdCQUF3Qk47QUFDaEMsY0FBUSxVQUFVSztBQUNsQixjQUFRLFNBQVM7QUFDakIsY0FBUSxVQUFVQztBQUNsQixjQUFRLFVBQVU7QUFBQTtBQUFBOzs7QUMzVmxCLFdBQVMsYUFBYSxhQUFhLFdBQVc7QUFDMUMsUUFBSSxTQUFTO0FBQ2IsUUFBSSxZQUFZLFdBQVcsR0FBRztBQUMxQixhQUFPLFlBQVksQ0FBQztBQUFBLElBQ3hCO0FBQ0EsYUFBUyxJQUFLLFlBQVksU0FBUyxHQUFJLEtBQUssR0FBRyxLQUFLO0FBQ2hELGdCQUFVLFlBQWEsWUFBWSxTQUFTLElBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxHQUFHLFlBQVksQ0FBQztBQUFBLElBQ25GO0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUFDQSxXQUFTLFdBQVcsT0FBTyxNQUFNLFdBQVksSUFBSztBQUM5QyxVQUFNLG1CQUFtQjtBQUN6QixRQUFJLGdCQUFnQjtBQUNwQixRQUFJLFNBQVM7QUFDYixRQUFJLFVBQVUsS0FBSyxJQUFJLEdBQUcsSUFBSTtBQUM5QixhQUFTLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSztBQUN4QixVQUFJLFFBQVEsU0FBUztBQUNqQixZQUFJO0FBQ0osWUFBSSxtQkFBbUIsR0FBRztBQUN0QixtQkFBUyxJQUFJLFlBQVksQ0FBQztBQUMxQixtQkFBUztBQUFBLFFBQ2IsT0FDSztBQUNELGNBQUksbUJBQW1CLEdBQUc7QUFDdEIsbUJBQVEsSUFBSSxZQUFZLENBQUM7QUFBQSxVQUM3QjtBQUNBLG1CQUFTLElBQUksWUFBWSxnQkFBZ0I7QUFDekMsbUJBQVM7QUFBQSxRQUNiO0FBQ0EsY0FBTSxVQUFVLElBQUksV0FBVyxNQUFNO0FBQ3JDLGlCQUFTLElBQUssSUFBSSxHQUFJLEtBQUssR0FBRyxLQUFLO0FBQy9CLGdCQUFNLFFBQVEsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJO0FBQ2xDLGtCQUFRLFNBQVMsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLGdCQUFnQixLQUFLO0FBQzFELDJCQUFrQixRQUFRLFNBQVMsSUFBSSxDQUFDLElBQUs7QUFBQSxRQUNqRDtBQUNBLGVBQU87QUFBQSxNQUNYO0FBQ0EsaUJBQVcsS0FBSyxJQUFJLEdBQUcsSUFBSTtBQUFBLElBQy9CO0FBQ0EsV0FBTyxJQUFJLFlBQVksQ0FBQztBQUFBLEVBQzVCO0FBZUEsV0FBUyxrQkFBa0IsT0FBTztBQUM5QixRQUFJLGVBQWU7QUFDbkIsUUFBSSxhQUFhO0FBQ2pCLGVBQVcsUUFBUSxPQUFPO0FBQ3RCLHNCQUFnQixLQUFLO0FBQUEsSUFDekI7QUFDQSxVQUFNLFNBQVMsSUFBSSxZQUFZLFlBQVk7QUFDM0MsVUFBTSxVQUFVLElBQUksV0FBVyxNQUFNO0FBQ3JDLGVBQVcsUUFBUSxPQUFPO0FBQ3RCLGNBQVEsSUFBSSxNQUFNLFVBQVU7QUFDNUIsb0JBQWMsS0FBSztBQUFBLElBQ3ZCO0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUFDQSxXQUFTLGVBQWU7QUFDcEIsVUFBTSxNQUFNLElBQUksV0FBVyxLQUFLLFFBQVE7QUFDeEMsUUFBSSxLQUFLLFNBQVMsY0FBYyxHQUFHO0FBQy9CLFlBQU0sYUFBYyxJQUFJLENBQUMsTUFBTSxPQUFVLElBQUksQ0FBQyxJQUFJO0FBQ2xELFlBQU0sYUFBYyxJQUFJLENBQUMsTUFBTSxNQUFXLElBQUksQ0FBQyxJQUFJLFNBQVU7QUFDN0QsVUFBSSxjQUFjLFlBQVk7QUFDMUIsYUFBSyxTQUFTLEtBQUssd0JBQXdCO0FBQUEsTUFDL0M7QUFBQSxJQUNKO0FBQ0EsVUFBTSxlQUFlLElBQUksWUFBWSxLQUFLLFNBQVMsVUFBVTtBQUM3RCxVQUFNLGFBQWEsSUFBSSxXQUFXLFlBQVk7QUFDOUMsYUFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLFNBQVMsWUFBWSxLQUFLO0FBQy9DLGlCQUFXLENBQUMsSUFBSTtBQUFBLElBQ3BCO0FBQ0EsZUFBVyxDQUFDLElBQUssSUFBSSxDQUFDLElBQUk7QUFDMUIsVUFBTSxTQUFTLGFBQWEsWUFBWSxDQUFDO0FBQ3pDLFVBQU0saUJBQWlCLElBQUksWUFBWSxLQUFLLFNBQVMsVUFBVTtBQUMvRCxVQUFNLGVBQWUsSUFBSSxXQUFXLGNBQWM7QUFDbEQsYUFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLFNBQVMsWUFBWSxLQUFLO0FBQy9DLG1CQUFhLENBQUMsSUFBSSxJQUFJLENBQUM7QUFBQSxJQUMzQjtBQUNBLGlCQUFhLENBQUMsS0FBSztBQUNuQixVQUFNLFdBQVcsYUFBYSxjQUFjLENBQUM7QUFDN0MsV0FBUSxXQUFXO0FBQUEsRUFDdkI7QUFDQSxXQUFTLGFBQWEsT0FBTztBQUN6QixVQUFNLFdBQVksUUFBUSxJQUFNLFFBQVMsS0FBTztBQUNoRCxRQUFJLFNBQVM7QUFDYixhQUFTLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSztBQUN4QixVQUFJLFlBQVksUUFBUTtBQUNwQixZQUFJLFFBQVEsR0FBRztBQUNYLGdCQUFNLFdBQVcsU0FBUztBQUMxQixnQkFBTUMsVUFBUyxXQUFXLFVBQVUsR0FBRyxDQUFDO0FBQ3hDLGdCQUFNQyxXQUFVLElBQUksV0FBV0QsT0FBTTtBQUNyQyxVQUFBQyxTQUFRLENBQUMsS0FBSztBQUNkLGlCQUFPRDtBQUFBLFFBQ1g7QUFDQSxZQUFJLFNBQVMsV0FBVyxVQUFVLEdBQUcsQ0FBQztBQUN0QyxZQUFJLFVBQVUsSUFBSSxXQUFXLE1BQU07QUFDbkMsWUFBSSxRQUFRLENBQUMsSUFBSSxLQUFNO0FBQ25CLGdCQUFNLFVBQVUsT0FBTyxNQUFNLENBQUM7QUFDOUIsZ0JBQU0sV0FBVyxJQUFJLFdBQVcsT0FBTztBQUN2QyxtQkFBUyxJQUFJLFlBQVksT0FBTyxhQUFhLENBQUM7QUFDOUMsb0JBQVUsSUFBSSxXQUFXLE1BQU07QUFDL0IsbUJBQVMsSUFBSSxHQUFHLElBQUksUUFBUSxZQUFZLEtBQUs7QUFDekMsb0JBQVEsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDO0FBQUEsVUFDL0I7QUFDQSxrQkFBUSxDQUFDLElBQUk7QUFBQSxRQUNqQjtBQUNBLGVBQU87QUFBQSxNQUNYO0FBQ0EsZ0JBQVUsS0FBSyxJQUFJLEdBQUcsQ0FBQztBQUFBLElBQzNCO0FBQ0EsV0FBUSxJQUFJLFlBQVksQ0FBQztBQUFBLEVBQzdCO0FBQ0EsV0FBUyxjQUFjLGNBQWMsY0FBYztBQUMvQyxRQUFJLGFBQWEsZUFBZSxhQUFhLFlBQVk7QUFDckQsYUFBTztBQUFBLElBQ1g7QUFDQSxVQUFNLFFBQVEsSUFBSSxXQUFXLFlBQVk7QUFDekMsVUFBTSxRQUFRLElBQUksV0FBVyxZQUFZO0FBQ3pDLGFBQVMsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRLEtBQUs7QUFDbkMsVUFBSSxNQUFNLENBQUMsTUFBTSxNQUFNLENBQUMsR0FBRztBQUN2QixlQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0o7QUFDQSxXQUFPO0FBQUEsRUFDWDtBQUNBLFdBQVMsVUFBVSxhQUFhLFlBQVk7QUFDeEMsVUFBTSxNQUFNLFlBQVksU0FBUyxFQUFFO0FBQ25DLFFBQUksYUFBYSxJQUFJLFFBQVE7QUFDekIsYUFBTztBQUFBLElBQ1g7QUFDQSxVQUFNLE1BQU0sYUFBYSxJQUFJO0FBQzdCLFVBQU0sVUFBVSxJQUFJLE1BQU0sR0FBRztBQUM3QixhQUFTLElBQUksR0FBRyxJQUFJLEtBQUssS0FBSztBQUMxQixjQUFRLENBQUMsSUFBSTtBQUFBLElBQ2pCO0FBQ0EsVUFBTSxnQkFBZ0IsUUFBUSxLQUFLLEVBQUU7QUFDckMsV0FBTyxjQUFjLE9BQU8sR0FBRztBQUFBLEVBQ25DO0FBeE1BLE1BcVVNO0FBclVOO0FBQUE7QUFxVUEsTUFBTSxPQUFPLEtBQUssSUFBSSxDQUFDO0FBQUE7QUFBQTs7O0FDclV2QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUFBRTtBQUFBLElBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZUFBQUM7QUFBQSxJQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFxQ0EsV0FBUyxlQUFlO0FBQ3BCLFFBQUksT0FBTyxXQUFXLGFBQWE7QUFDL0IsWUFBTSxJQUFJLE1BQU0sbUVBQW1FO0FBQUEsSUFDdkY7QUFBQSxFQUNKO0FBQ0EsV0FBUyxPQUFPLFNBQVM7QUFDckIsUUFBSSxlQUFlO0FBQ25CLFFBQUksYUFBYTtBQUNqQixhQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsUUFBUSxLQUFLO0FBQ3JDLFlBQU0sU0FBUyxRQUFRLENBQUM7QUFDeEIsc0JBQWdCLE9BQU87QUFBQSxJQUMzQjtBQUNBLFVBQU0sVUFBVSxJQUFJLFdBQVcsWUFBWTtBQUMzQyxhQUFTLElBQUksR0FBRyxJQUFJLFFBQVEsUUFBUSxLQUFLO0FBQ3JDLFlBQU0sU0FBUyxRQUFRLENBQUM7QUFDeEIsY0FBUSxJQUFJLElBQUksV0FBVyxNQUFNLEdBQUcsVUFBVTtBQUM5QyxvQkFBYyxPQUFPO0FBQUEsSUFDekI7QUFDQSxXQUFPLFFBQVE7QUFBQSxFQUNuQjtBQUNBLFdBQVMsa0JBQWtCLFdBQVcsYUFBYSxhQUFhLGFBQWE7QUFDekUsUUFBSSxFQUFFLHVCQUF1QixhQUFhO0FBQ3RDLGdCQUFVLFFBQVE7QUFDbEIsYUFBTztBQUFBLElBQ1g7QUFDQSxRQUFJLENBQUMsWUFBWSxZQUFZO0FBQ3pCLGdCQUFVLFFBQVE7QUFDbEIsYUFBTztBQUFBLElBQ1g7QUFDQSxRQUFJLGNBQWMsR0FBRztBQUNqQixnQkFBVSxRQUFRO0FBQ2xCLGFBQU87QUFBQSxJQUNYO0FBQ0EsUUFBSSxjQUFjLEdBQUc7QUFDakIsZ0JBQVUsUUFBUTtBQUNsQixhQUFPO0FBQUEsSUFDWDtBQUNBLFFBQUssWUFBWSxhQUFhLGNBQWMsY0FBZSxHQUFHO0FBQzFELGdCQUFVLFFBQVE7QUFDbEIsYUFBTztBQUFBLElBQ1g7QUFDQSxXQUFPO0FBQUEsRUFDWDtBQWlDQSxXQUFTLFNBQVMsV0FBVztBQUN6QixRQUFJQztBQUNKLFdBQU9BLE1BQUssTUFBTSxhQUFhLFVBQVU7QUFBQSxNQUNqQyxlQUFlLE1BQU07QUFDakIsWUFBSUE7QUFDSixjQUFNLEdBQUcsSUFBSTtBQUNiLGNBQU0sU0FBUyxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQzNCLGFBQUssYUFBYUEsTUFBSyxPQUFPLGVBQWUsUUFBUUEsUUFBTyxTQUFTQSxNQUFLO0FBQzFFLGFBQUssZUFBZSxPQUFPLFdBQXFCLGdDQUFzQixhQUFhLE9BQU8sUUFBUSxJQUFJO0FBQUEsTUFDMUc7QUFBQSxNQUNBLElBQUksV0FBVztBQUNYLGVBQU8sS0FBSyxhQUFhLE1BQU0sRUFBRTtBQUFBLE1BQ3JDO0FBQUEsTUFDQSxJQUFJLFNBQVMsT0FBTztBQUNoQixhQUFLLGVBQWUsSUFBSSxXQUFXLEtBQUs7QUFBQSxNQUM1QztBQUFBLE1BQ0EsUUFBUSxhQUFhLGFBQWEsYUFBYTtBQUMzQyxjQUFNLE9BQU8sdUJBQXVCLGNBQWMsSUFBSSxXQUFXLFdBQVcsSUFBSTtBQUNoRixZQUFJLENBQUMsa0JBQWtCLE1BQU0sTUFBTSxhQUFhLFdBQVcsR0FBRztBQUMxRCxpQkFBTztBQUFBLFFBQ1g7QUFDQSxjQUFNLFlBQVksY0FBYztBQUNoQyxhQUFLLGVBQWUsS0FBSyxTQUFTLGFBQWEsU0FBUztBQUN4RCxZQUFJLENBQUMsS0FBSyxhQUFhLFFBQVE7QUFDM0IsZUFBSyxTQUFTLEtBQUssb0JBQW9CO0FBQ3ZDLGlCQUFPO0FBQUEsUUFDWDtBQUNBLGFBQUssY0FBYztBQUNuQixlQUFPO0FBQUEsTUFDWDtBQUFBLE1BQ0EsTUFBTSxXQUFXLE9BQU87QUFDcEIsWUFBSSxDQUFDLEtBQUssV0FBVztBQUNqQixlQUFLLFFBQVE7QUFDYixpQkFBTztBQUFBLFFBQ1g7QUFDQSxZQUFJLFVBQVU7QUFDVixpQkFBTyxJQUFJLFlBQVksS0FBSyxhQUFhLFVBQVU7QUFBQSxRQUN2RDtBQUNBLGVBQVEsS0FBSyxhQUFhLGVBQWUsS0FBSyxhQUFhLE9BQU8sYUFDNUQsS0FBSyxhQUFhLFNBQ2xCLEtBQUssYUFBYSxNQUFNLEVBQUU7QUFBQSxNQUNwQztBQUFBLE1BQ0EsU0FBUztBQUNMLGVBQU87QUFBQSxVQUNILEdBQUcsTUFBTSxPQUFPO0FBQUEsVUFDaEIsV0FBVyxLQUFLO0FBQUEsVUFDaEIsVUFBb0Isa0JBQVEsTUFBTSxLQUFLLFlBQVk7QUFBQSxRQUN2RDtBQUFBLE1BQ0o7QUFBQSxJQUNKLEdBQ0FBLElBQUcsT0FBTyxZQUNWQTtBQUFBLEVBQ1I7QUE4WUEsV0FBUyxzQkFBc0IsV0FBVztBQUN0QyxRQUFJLHFCQUFxQixVQUFVLGFBQWE7QUFDNUMsaUJBQVcsU0FBUyxVQUFVLFdBQVcsT0FBTztBQUM1QyxZQUFJLHNCQUFzQixLQUFLLEdBQUc7QUFDOUIsb0JBQVUsU0FBUyxtQkFBbUI7QUFBQSxRQUMxQztBQUFBLE1BQ0o7QUFBQSxJQUNKO0FBQ0EsV0FBTyxDQUFDLENBQUMsVUFBVSxTQUFTO0FBQUEsRUFDaEM7QUF5REEsV0FBUyxnQkFBZ0IsYUFBYSxTQUFTO0FBQzNDLFFBQUksdUJBQXVCLFNBQVM7QUFDaEMsYUFBTztBQUFBLElBQ1g7QUFDQSxVQUFNLFlBQVksSUFBSSxRQUFRO0FBQzlCLGNBQVUsVUFBVSxZQUFZO0FBQ2hDLGNBQVUsV0FBVyxZQUFZO0FBQ2pDLGNBQVUsV0FBVyxZQUFZO0FBQ2pDLGNBQVUsd0JBQXdCLFlBQVk7QUFDOUMsV0FBTztBQUFBLEVBQ1g7QUFDQSxXQUFTLGFBQWEsYUFBYSxjQUFjLEdBQUcsY0FBYyxZQUFZLFFBQVE7QUFDbEYsVUFBTSxpQkFBaUI7QUFDdkIsUUFBSSxlQUFlLElBQUksVUFBVSxDQUFDLEdBQUcsVUFBVTtBQUMvQyxVQUFNLFlBQVksSUFBSSxlQUFlO0FBQ3JDLFFBQUksQ0FBQyxrQkFBa0IsV0FBVyxhQUFhLGFBQWEsV0FBVyxHQUFHO0FBQ3RFLG1CQUFhLFFBQVEsVUFBVTtBQUMvQixhQUFPO0FBQUEsUUFDSCxRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsTUFDWjtBQUFBLElBQ0o7QUFDQSxVQUFNLFlBQVksWUFBWSxTQUFTLGFBQWEsY0FBYyxXQUFXO0FBQzdFLFFBQUksQ0FBQyxVQUFVLFFBQVE7QUFDbkIsbUJBQWEsUUFBUTtBQUNyQixhQUFPO0FBQUEsUUFDSCxRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsTUFDWjtBQUFBLElBQ0o7QUFDQSxRQUFJLGVBQWUsYUFBYSxRQUFRLFFBQVEsYUFBYSxhQUFhLFdBQVc7QUFDckYsUUFBSSxhQUFhLFFBQVEsU0FBUyxRQUFRO0FBQ3RDLG1CQUFhLFNBQVMsT0FBTyxhQUFhLFFBQVEsUUFBUTtBQUFBLElBQzlEO0FBQ0EsUUFBSSxpQkFBaUIsSUFBSTtBQUNyQixtQkFBYSxRQUFRLGFBQWEsUUFBUTtBQUMxQyxhQUFPO0FBQUEsUUFDSCxRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsTUFDWjtBQUFBLElBQ0o7QUFDQSxrQkFBYztBQUNkLG1CQUFlLGFBQWEsUUFBUTtBQUNwQyxtQkFBZSxhQUFhLFNBQVMsUUFBUSxhQUFhLGFBQWEsV0FBVztBQUNsRixRQUFJLGFBQWEsU0FBUyxTQUFTLFFBQVE7QUFDdkMsbUJBQWEsU0FBUyxPQUFPLGFBQWEsU0FBUyxRQUFRO0FBQUEsSUFDL0Q7QUFDQSxRQUFJLGlCQUFpQixJQUFJO0FBQ3JCLG1CQUFhLFFBQVEsYUFBYSxTQUFTO0FBQzNDLGFBQU87QUFBQSxRQUNILFFBQVE7QUFBQSxRQUNSLFFBQVE7QUFBQSxNQUNaO0FBQUEsSUFDSjtBQUNBLGtCQUFjO0FBQ2QsbUJBQWUsYUFBYSxTQUFTO0FBQ3JDLFFBQUksQ0FBQyxhQUFhLFFBQVEsaUJBQ3RCLGFBQWEsU0FBUyxrQkFBa0I7QUFDeEMsbUJBQWEsUUFBUTtBQUNyQixhQUFPO0FBQUEsUUFDSCxRQUFRO0FBQUEsUUFDUixRQUFRO0FBQUEsTUFDWjtBQUFBLElBQ0o7QUFDQSxRQUFJLGNBQWM7QUFDbEIsWUFBUSxhQUFhLFFBQVEsVUFBVTtBQUFBLE1BQ25DLEtBQUs7QUFDRCxZQUFLLGFBQWEsUUFBUSxhQUFhLE1BQ2xDLGFBQWEsUUFBUSxjQUFjLE9BQVE7QUFDNUMsdUJBQWEsUUFBUTtBQUNyQixpQkFBTztBQUFBLFlBQ0gsUUFBUTtBQUFBLFlBQ1IsUUFBUTtBQUFBLFVBQ1o7QUFBQSxRQUNKO0FBQ0EsZ0JBQVEsYUFBYSxRQUFRLFdBQVc7QUFBQSxVQUNwQyxLQUFLO0FBQ0QsZ0JBQUssYUFBYSxRQUFRLGlCQUNyQixhQUFhLFNBQVMsU0FBUyxHQUFJO0FBQ3BDLDJCQUFhLFFBQVE7QUFDckIscUJBQU87QUFBQSxnQkFDSCxRQUFRO0FBQUEsZ0JBQ1IsUUFBUTtBQUFBLGNBQ1o7QUFBQSxZQUNKO0FBQ0EsMEJBQWMsVUFBVTtBQUN4QjtBQUFBLFVBQ0osS0FBSztBQUNELDBCQUFjLFVBQVU7QUFDeEI7QUFBQSxVQUNKLEtBQUs7QUFDRCwwQkFBYyxVQUFVO0FBQ3hCO0FBQUEsVUFDSixLQUFLO0FBQ0QsMEJBQWMsVUFBVTtBQUN4QjtBQUFBLFVBQ0osS0FBSztBQUNELDBCQUFjLFVBQVU7QUFDeEI7QUFBQSxVQUNKLEtBQUs7QUFDRCwwQkFBYyxVQUFVO0FBQ3hCO0FBQUEsVUFDSixLQUFLO0FBQ0QsMEJBQWMsVUFBVTtBQUN4QjtBQUFBLFVBQ0osS0FBSztBQUNELDBCQUFjLFVBQVU7QUFDeEI7QUFBQSxVQUNKLEtBQUs7QUFDRCwwQkFBYyxVQUFVO0FBQ3hCO0FBQUEsVUFDSixLQUFLO0FBQ0QsMEJBQWMsVUFBVTtBQUN4QjtBQUFBLFVBQ0osS0FBSztBQUNELDBCQUFjLFVBQVU7QUFDeEI7QUFBQSxVQUNKLEtBQUs7QUFDRCx5QkFBYSxRQUFRO0FBQ3JCLG1CQUFPO0FBQUEsY0FDSCxRQUFRO0FBQUEsY0FDUixRQUFRO0FBQUEsWUFDWjtBQUFBLFVBQ0osS0FBSztBQUNELDBCQUFjLFVBQVU7QUFDeEI7QUFBQSxVQUNKLEtBQUs7QUFDRCwwQkFBYyxVQUFVO0FBQ3hCO0FBQUEsVUFDSixLQUFLO0FBQ0QsMEJBQWMsVUFBVTtBQUN4QjtBQUFBLFVBQ0osS0FBSztBQUNELDBCQUFjLFVBQVU7QUFDeEI7QUFBQSxVQUNKLEtBQUs7QUFDRCwwQkFBYyxVQUFVO0FBQ3hCO0FBQUEsVUFDSixLQUFLO0FBQ0QsMEJBQWMsVUFBVTtBQUN4QjtBQUFBLFVBQ0osS0FBSztBQUNELDBCQUFjLFVBQVU7QUFDeEI7QUFBQSxVQUNKLEtBQUs7QUFDRCwwQkFBYyxVQUFVO0FBQ3hCO0FBQUEsVUFDSixLQUFLO0FBQ0QsMEJBQWMsVUFBVTtBQUN4QjtBQUFBLFVBQ0osS0FBSztBQUNELDBCQUFjLFVBQVU7QUFDeEI7QUFBQSxVQUNKLEtBQUs7QUFDRCwwQkFBYyxVQUFVO0FBQ3hCO0FBQUEsVUFDSixLQUFLO0FBQ0QsMEJBQWMsVUFBVTtBQUN4QjtBQUFBLFVBQ0osS0FBSztBQUNELDBCQUFjLFVBQVU7QUFDeEI7QUFBQSxVQUNKLEtBQUs7QUFDRCwwQkFBYyxVQUFVO0FBQ3hCO0FBQUEsVUFDSixLQUFLO0FBQ0QsMEJBQWMsVUFBVTtBQUN4QjtBQUFBLFVBQ0osS0FBSztBQUNELDBCQUFjLFVBQVU7QUFDeEI7QUFBQSxVQUNKLEtBQUs7QUFDRCwwQkFBYyxVQUFVO0FBQ3hCO0FBQUEsVUFDSixLQUFLO0FBQ0QsMEJBQWMsVUFBVTtBQUN4QjtBQUFBLFVBQ0osS0FBSztBQUNELDBCQUFjLFVBQVU7QUFDeEI7QUFBQSxVQUNKLFNBQVM7QUFDTCxrQkFBTSxZQUFZLGFBQWEsUUFBUSxnQkFDakMsSUFBSSxVQUFVLFlBQVksSUFDMUIsSUFBSSxVQUFVLFVBQVU7QUFDOUIsc0JBQVUsVUFBVSxhQUFhO0FBQ2pDLHNCQUFVLFdBQVcsYUFBYTtBQUNsQyxzQkFBVSxXQUFXLGFBQWE7QUFDbEMsMkJBQWU7QUFBQSxVQUNuQjtBQUFBLFFBQ0o7QUFDQTtBQUFBLE1BQ0osS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsS0FBSztBQUFBLE1BQ0wsU0FBUztBQUNMLHNCQUFjLGFBQWEsUUFBUSxnQkFDN0IsVUFBVSxjQUNWLFVBQVU7QUFBQSxNQUNwQjtBQUFBLElBQ0o7QUFDQSxtQkFBZSxnQkFBZ0IsY0FBYyxXQUFXO0FBQ3hELG1CQUFlLGFBQWEsUUFBUSxhQUFhLGFBQWEsYUFBYSxTQUFTLG1CQUFtQixjQUFjLGFBQWEsU0FBUyxNQUFNO0FBQ2pKLGlCQUFhLHdCQUF3QixZQUFZLFNBQVMsZ0JBQWdCLGlCQUFpQixhQUFhLFdBQVc7QUFDbkgsV0FBTztBQUFBLE1BQ0gsUUFBUTtBQUFBLE1BQ1IsUUFBUTtBQUFBLElBQ1o7QUFBQSxFQUNKO0FBQ0EsV0FBUyxRQUFRLGFBQWE7QUFDMUIsUUFBSSxDQUFDLFlBQVksWUFBWTtBQUN6QixZQUFNLFNBQVMsSUFBSSxVQUFVLENBQUMsR0FBRyxVQUFVO0FBQzNDLGFBQU8sUUFBUTtBQUNmLGFBQU87QUFBQSxRQUNILFFBQVE7QUFBQSxRQUNSO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFDQSxXQUFPLGFBQXVCLGdDQUFzQixhQUFhLFdBQVcsRUFBRSxNQUFNLEdBQUcsR0FBRyxZQUFZLFVBQVU7QUFBQSxFQUNwSDtBQUVBLFdBQVMsU0FBUyxrQkFBa0IsUUFBUTtBQUN4QyxRQUFJLGtCQUFrQjtBQUNsQixhQUFPO0FBQUEsSUFDWDtBQUNBLFdBQU87QUFBQSxFQUNYO0FBd2ZBLFdBQVMsUUFBUSxPQUFPLFFBQVE7QUFDNUIsVUFBTSxJQUFJLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQztBQUM1QixVQUFNLFlBQVksSUFBSSxXQUFXLEtBQUs7QUFDdEMsVUFBTSxhQUFhLElBQUksV0FBVyxNQUFNO0FBQ3hDLFFBQUksZ0JBQWdCLFVBQVUsTUFBTSxDQUFDO0FBQ3JDLFVBQU0sc0JBQXNCLGNBQWMsU0FBUztBQUNuRCxVQUFNLGlCQUFpQixXQUFXLE1BQU0sQ0FBQztBQUN6QyxVQUFNLHVCQUF1QixlQUFlLFNBQVM7QUFDckQsUUFBSSxRQUFRO0FBQ1osVUFBTUMsT0FBTyx1QkFBdUIsc0JBQXVCLHNCQUFzQjtBQUNqRixRQUFJLFVBQVU7QUFDZCxhQUFTLElBQUlBLE1BQUssS0FBSyxHQUFHLEtBQUssV0FBVztBQUN0QyxjQUFRLE1BQU07QUFBQSxRQUNWLEtBQU0sVUFBVSxlQUFlO0FBQzNCLGtCQUFRLGNBQWMsc0JBQXNCLE9BQU8sSUFBSSxlQUFlLHVCQUF1QixPQUFPLElBQUksRUFBRSxDQUFDO0FBQzNHO0FBQUEsUUFDSjtBQUNJLGtCQUFRLGNBQWMsc0JBQXNCLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFBQSxNQUNsRTtBQUNBLFFBQUUsQ0FBQyxJQUFJLFFBQVE7QUFDZixjQUFRLE1BQU07QUFBQSxRQUNWLEtBQU0sV0FBVyxjQUFjO0FBQzNCLDBCQUF3QixlQUFlLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsYUFBYTtBQUNsRjtBQUFBLFFBQ0o7QUFDSSx3QkFBYyxzQkFBc0IsT0FBTyxJQUFJLFFBQVE7QUFBQSxNQUMvRDtBQUFBLElBQ0o7QUFDQSxRQUFJLEVBQUUsQ0FBQyxJQUFJO0FBQ1Asc0JBQXdCLGVBQWUsR0FBRyxhQUFhO0FBQzNELFdBQU87QUFBQSxFQUNYO0FBQ0EsV0FBUyxPQUFPLEdBQUc7QUFDZixRQUFJLEtBQUssUUFBUSxRQUFRO0FBQ3JCLGVBQVMsSUFBSSxRQUFRLFFBQVEsS0FBSyxHQUFHLEtBQUs7QUFDdEMsY0FBTSxJQUFJLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQztBQUM1QixZQUFJLFNBQVUsUUFBUSxJQUFJLENBQUMsRUFBRyxNQUFNLENBQUM7QUFDckMsaUJBQVMsSUFBSyxPQUFPLFNBQVMsR0FBSSxLQUFLLEdBQUcsS0FBSztBQUMzQyxnQkFBTSxXQUFXLElBQUksV0FBVyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6RCxZQUFFLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSTtBQUNyQixpQkFBTyxDQUFDLElBQUksU0FBUyxDQUFDLElBQUk7QUFBQSxRQUM5QjtBQUNBLFlBQUksRUFBRSxDQUFDLElBQUk7QUFDUCxtQkFBaUIsZUFBZSxHQUFHLE1BQU07QUFDN0MsZ0JBQVEsS0FBSyxNQUFNO0FBQUEsTUFDdkI7QUFBQSxJQUNKO0FBQ0EsV0FBTyxRQUFRLENBQUM7QUFBQSxFQUNwQjtBQUNBLFdBQVMsUUFBUSxPQUFPLFFBQVE7QUFDNUIsUUFBSSxJQUFJO0FBQ1IsVUFBTSxZQUFZLElBQUksV0FBVyxLQUFLO0FBQ3RDLFVBQU0sYUFBYSxJQUFJLFdBQVcsTUFBTTtBQUN4QyxVQUFNLGdCQUFnQixVQUFVLE1BQU0sQ0FBQztBQUN2QyxVQUFNLHNCQUFzQixjQUFjLFNBQVM7QUFDbkQsVUFBTSxpQkFBaUIsV0FBVyxNQUFNLENBQUM7QUFDekMsVUFBTSx1QkFBdUIsZUFBZSxTQUFTO0FBQ3JELFFBQUk7QUFDSixRQUFJLFVBQVU7QUFDZCxhQUFTLElBQUksc0JBQXNCLEtBQUssR0FBRyxLQUFLLFdBQVc7QUFDdkQsY0FBUSxjQUFjLHNCQUFzQixPQUFPLElBQUksZUFBZSx1QkFBdUIsT0FBTyxJQUFJO0FBQ3hHLGNBQVEsTUFBTTtBQUFBLFFBQ1YsS0FBTSxRQUFRO0FBQ1YsY0FBSTtBQUNKLHdCQUFjLHNCQUFzQixPQUFPLElBQUksUUFBUTtBQUN2RDtBQUFBLFFBQ0o7QUFDSSxjQUFJO0FBQ0osd0JBQWMsc0JBQXNCLE9BQU8sSUFBSTtBQUFBLE1BQ3ZEO0FBQUEsSUFDSjtBQUNBLFFBQUksSUFBSSxHQUFHO0FBQ1AsZUFBUyxJQUFLLHNCQUFzQix1QkFBdUIsR0FBSSxLQUFLLEdBQUcsS0FBSyxXQUFXO0FBQ25GLGdCQUFRLGNBQWMsc0JBQXNCLE9BQU8sSUFBSTtBQUN2RCxZQUFJLFFBQVEsR0FBRztBQUNYLGNBQUk7QUFDSix3QkFBYyxzQkFBc0IsT0FBTyxJQUFJLFFBQVE7QUFBQSxRQUMzRCxPQUNLO0FBQ0QsY0FBSTtBQUNKLHdCQUFjLHNCQUFzQixPQUFPLElBQUk7QUFDL0M7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLElBQ0o7QUFDQSxXQUFPLGNBQWMsTUFBTTtBQUFBLEVBQy9CO0FBbTFDQSxXQUFTLGNBQWMsTUFBTSxXQUFXLGFBQWE7QUFDakQsUUFBSSx1QkFBdUIsUUFBUTtBQUMvQixlQUFTLElBQUksR0FBRyxJQUFJLFlBQVksTUFBTSxRQUFRLEtBQUs7QUFDL0MsY0FBTSxTQUFTLGNBQWMsTUFBTSxXQUFXLFlBQVksTUFBTSxDQUFDLENBQUM7QUFDbEUsWUFBSSxPQUFPLFVBQVU7QUFDakIsaUJBQU87QUFBQSxZQUNILFVBQVU7QUFBQSxZQUNWLFFBQVE7QUFBQSxVQUNaO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQTtBQUNJLGNBQU0sVUFBVTtBQUFBLFVBQ1osVUFBVTtBQUFBLFVBQ1YsUUFBUTtBQUFBLFlBQ0osT0FBTztBQUFBLFVBQ1g7QUFBQSxRQUNKO0FBQ0EsWUFBSSxZQUFZLGVBQWUsSUFBSTtBQUMvQixrQkFBUSxPQUFPLFlBQVk7QUFDL0IsZUFBTztBQUFBLE1BQ1g7QUFBQSxJQUNKO0FBQ0EsUUFBSSx1QkFBdUIsS0FBSztBQUM1QixVQUFJLFlBQVksZUFBZSxJQUFJO0FBQy9CLGFBQUssWUFBWSxJQUFJLElBQUk7QUFDN0IsYUFBTztBQUFBLFFBQ0gsVUFBVTtBQUFBLFFBQ1YsUUFBUTtBQUFBLE1BQ1o7QUFBQSxJQUNKO0FBQ0EsUUFBSyxnQkFBZ0IsV0FBWSxPQUFPO0FBQ3BDLGFBQU87QUFBQSxRQUNILFVBQVU7QUFBQSxRQUNWLFFBQVEsRUFBRSxPQUFPLG9CQUFvQjtBQUFBLE1BQ3pDO0FBQUEsSUFDSjtBQUNBLFFBQUsscUJBQXFCLFdBQVksT0FBTztBQUN6QyxhQUFPO0FBQUEsUUFDSCxVQUFVO0FBQUEsUUFDVixRQUFRLEVBQUUsT0FBTyxtQkFBbUI7QUFBQSxNQUN4QztBQUFBLElBQ0o7QUFDQSxRQUFLLHVCQUF1QixXQUFZLE9BQU87QUFDM0MsYUFBTztBQUFBLFFBQ0gsVUFBVTtBQUFBLFFBQ1YsUUFBUSxFQUFFLE9BQU8scUJBQXFCO0FBQUEsTUFDMUM7QUFBQSxJQUNKO0FBQ0EsUUFBSyxZQUFZLGdCQUFpQixPQUFPO0FBQ3JDLGFBQU87QUFBQSxRQUNILFVBQVU7QUFBQSxRQUNWLFFBQVEsRUFBRSxPQUFPLHFCQUFxQjtBQUFBLE1BQzFDO0FBQUEsSUFDSjtBQUNBLFFBQUssWUFBWSxZQUFZLFlBQWEsT0FBTztBQUM3QyxhQUFPO0FBQUEsUUFDSCxVQUFVO0FBQUEsUUFDVixRQUFRLEVBQUUsT0FBTyxxQkFBcUI7QUFBQSxNQUMxQztBQUFBLElBQ0o7QUFDQSxRQUFLLFVBQVUsWUFBWSxZQUFhLE9BQU87QUFDM0MsYUFBTztBQUFBLFFBQ0gsVUFBVTtBQUFBLFFBQ1YsUUFBUSxFQUFFLE9BQU8scUJBQXFCO0FBQUEsTUFDMUM7QUFBQSxJQUNKO0FBQ0EsVUFBTSxZQUFZLFlBQVksUUFBUSxNQUFNLEtBQUs7QUFDakQsUUFBSSxVQUFVLGVBQWUsR0FBRztBQUM1QixhQUFPO0FBQUEsUUFDSCxVQUFVO0FBQUEsUUFDVixRQUFRLEVBQUUsT0FBTywwQ0FBMEM7QUFBQSxNQUMvRDtBQUFBLElBQ0o7QUFDQSxVQUFNLGdCQUFnQixZQUFZLFFBQVEsUUFBUSxXQUFXLEdBQUcsVUFBVSxVQUFVO0FBQ3BGLFFBQUksa0JBQWtCLElBQUk7QUFDdEIsYUFBTztBQUFBLFFBQ0gsVUFBVTtBQUFBLFFBQ1YsUUFBUSxFQUFFLE9BQU8sMENBQTBDO0FBQUEsTUFDL0Q7QUFBQSxJQUNKO0FBQ0EsUUFBSSxZQUFZLFFBQVEsZUFBZSxTQUFTLE1BQU0sT0FBTztBQUN6RCxhQUFPO0FBQUEsUUFDSCxVQUFVO0FBQUEsUUFDVixRQUFRLEVBQUUsT0FBTyxxQkFBcUI7QUFBQSxNQUMxQztBQUFBLElBQ0o7QUFDQSxRQUFJLFlBQVksUUFBUSxhQUFhLFVBQVUsUUFBUSxVQUFVO0FBQzdELGFBQU87QUFBQSxRQUNILFVBQVU7QUFBQSxRQUNWLFFBQVE7QUFBQSxNQUNaO0FBQUEsSUFDSjtBQUNBLFFBQUksWUFBWSxRQUFRLGVBQWUsVUFBVSxNQUFNLE9BQU87QUFDMUQsYUFBTztBQUFBLFFBQ0gsVUFBVTtBQUFBLFFBQ1YsUUFBUSxFQUFFLE9BQU8scUJBQXFCO0FBQUEsTUFDMUM7QUFBQSxJQUNKO0FBQ0EsUUFBSSxZQUFZLFFBQVEsY0FBYyxVQUFVLFFBQVEsV0FBVztBQUMvRCxhQUFPO0FBQUEsUUFDSCxVQUFVO0FBQUEsUUFDVixRQUFRO0FBQUEsTUFDWjtBQUFBLElBQ0o7QUFDQSxRQUFJLFlBQVksUUFBUSxlQUFlLGNBQWMsTUFBTSxPQUFPO0FBQzlELGFBQU87QUFBQSxRQUNILFVBQVU7QUFBQSxRQUNWLFFBQVEsRUFBRSxPQUFPLHFCQUFxQjtBQUFBLE1BQzFDO0FBQUEsSUFDSjtBQUNBLFFBQUksWUFBWSxRQUFRLGtCQUFrQixVQUFVLFFBQVEsZUFBZTtBQUN2RSxhQUFPO0FBQUEsUUFDSCxVQUFVO0FBQUEsUUFDVixRQUFRO0FBQUEsTUFDWjtBQUFBLElBQ0o7QUFDQSxRQUFJLEVBQUUsZUFBZSxZQUFZLFVBQVU7QUFDdkMsYUFBTztBQUFBLFFBQ0gsVUFBVTtBQUFBLFFBQ1YsUUFBUSxFQUFFLE9BQU8scUJBQXFCO0FBQUEsTUFDMUM7QUFBQSxJQUNKO0FBQ0EsUUFBSSxZQUFZLFFBQVEsY0FBYyxVQUFVLFFBQVEsV0FBVztBQUMvRCxhQUFPO0FBQUEsUUFDSCxVQUFVO0FBQUEsUUFDVixRQUFRO0FBQUEsTUFDWjtBQUFBLElBQ0o7QUFDQSxRQUFJLFlBQVksUUFBUSxXQUFXO0FBQy9CLFVBQUssa0JBQWtCLFlBQVksWUFBYSxPQUFPO0FBQ25ELGVBQU87QUFBQSxVQUNILFVBQVU7QUFBQSxVQUNWLFFBQVEsRUFBRSxPQUFPLHFCQUFxQjtBQUFBLFFBQzFDO0FBQUEsTUFDSjtBQUNBLFlBQU0sYUFBYSxZQUFZLFFBQVE7QUFDdkMsWUFBTSxXQUFXLFVBQVUsUUFBUTtBQUNuQyxVQUFJLFdBQVcsV0FBVyxTQUFTLFFBQVE7QUFDdkMsZUFBTztBQUFBLFVBQ0gsVUFBVTtBQUFBLFVBQ1YsUUFBUTtBQUFBLFFBQ1o7QUFBQSxNQUNKO0FBQ0EsZUFBUyxJQUFJLEdBQUcsSUFBSSxXQUFXLFFBQVEsS0FBSztBQUN4QyxZQUFJLFdBQVcsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxHQUFHO0FBQy9CLGlCQUFPO0FBQUEsWUFDSCxVQUFVO0FBQUEsWUFDVixRQUFRO0FBQUEsVUFDWjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFDSjtBQUNBLFFBQUksWUFBWSxNQUFNO0FBQ2xCLGtCQUFZLE9BQU8sWUFBWSxLQUFLLFFBQVEsY0FBYyxZQUFZO0FBQ3RFLFVBQUksWUFBWTtBQUNaLGFBQUssWUFBWSxJQUFJLElBQUk7QUFBQSxJQUNqQztBQUNBLFFBQUksdUJBQXVCLFVBQVUsYUFBYTtBQUM5QyxVQUFJLFlBQVk7QUFDaEIsVUFBSSxTQUFTO0FBQUEsUUFDVCxVQUFVO0FBQUEsUUFDVixRQUFRO0FBQUEsVUFDSixPQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFDQSxVQUFJLFlBQVksWUFBWSxXQUFXLE1BQU07QUFDN0MsVUFBSSxZQUFZLEdBQUc7QUFDZixZQUFJLFlBQVksV0FBVyxNQUFNLENBQUMsYUFBYSxVQUFVO0FBQ3JELHNCQUFZLFVBQVUsV0FBVyxNQUFNO0FBQUEsUUFDM0M7QUFBQSxNQUNKO0FBQ0EsVUFBSSxjQUFjLEdBQUc7QUFDakIsZUFBTztBQUFBLFVBQ0gsVUFBVTtBQUFBLFVBQ1YsUUFBUTtBQUFBLFFBQ1o7QUFBQSxNQUNKO0FBQ0EsVUFBSyxVQUFVLFdBQVcsTUFBTSxXQUFXLEtBQ3RDLFlBQVksV0FBVyxNQUFNLFdBQVcsR0FBSTtBQUM3QyxZQUFJLFlBQVk7QUFDaEIsaUJBQVMsSUFBSSxHQUFHLElBQUksWUFBWSxXQUFXLE1BQU0sUUFBUTtBQUNyRCxzQkFBWSxjQUFjLFlBQVksV0FBVyxNQUFNLENBQUMsRUFBRSxZQUFZO0FBQzFFLFlBQUksV0FBVztBQUNYLGlCQUFPO0FBQUEsWUFDSCxVQUFVO0FBQUEsWUFDVixRQUFRO0FBQUEsVUFDWjtBQUFBLFFBQ0o7QUFDQSxZQUFJLFlBQVksTUFBTTtBQUNsQixzQkFBWSxPQUFPLFlBQVksS0FBSyxRQUFRLGNBQWMsWUFBWTtBQUN0RSxjQUFJLFlBQVk7QUFDWixtQkFBTyxLQUFLLFlBQVksSUFBSTtBQUFBLFFBQ3BDO0FBQ0EsYUFBSyxRQUFRO0FBQ2IsZUFBTztBQUFBLFVBQ0gsVUFBVTtBQUFBLFVBQ1YsUUFBUTtBQUFBLFFBQ1o7QUFBQSxNQUNKO0FBQ0EsZUFBUyxJQUFJLEdBQUcsSUFBSSxXQUFXLEtBQUs7QUFDaEMsWUFBSyxJQUFJLGFBQWMsVUFBVSxXQUFXLE1BQU0sUUFBUTtBQUN0RCxjQUFJLFlBQVksV0FBVyxNQUFNLENBQUMsRUFBRSxhQUFhLE9BQU87QUFDcEQsa0JBQU0sVUFBVTtBQUFBLGNBQ1osVUFBVTtBQUFBLGNBQ1YsUUFBUTtBQUFBLFlBQ1o7QUFDQSxpQkFBSyxRQUFRO0FBQ2IsZ0JBQUksWUFBWSxNQUFNO0FBQ2xCLDBCQUFZLE9BQU8sWUFBWSxLQUFLLFFBQVEsY0FBYyxZQUFZO0FBQ3RFLGtCQUFJLFlBQVksTUFBTTtBQUNsQix1QkFBTyxLQUFLLFlBQVksSUFBSTtBQUM1Qix3QkFBUSxPQUFPLFlBQVk7QUFBQSxjQUMvQjtBQUFBLFlBQ0o7QUFDQSxtQkFBTztBQUFBLFVBQ1g7QUFBQSxRQUNKLE9BQ0s7QUFDRCxjQUFJLFlBQVksV0FBVyxNQUFNLENBQUMsYUFBYSxVQUFVO0FBQ3JELHFCQUFTLGNBQWMsTUFBTSxVQUFVLFdBQVcsTUFBTSxDQUFDLEdBQUcsWUFBWSxXQUFXLE1BQU0sQ0FBQyxFQUFFLEtBQUs7QUFDakcsZ0JBQUksT0FBTyxhQUFhLE9BQU87QUFDM0Isa0JBQUksWUFBWSxXQUFXLE1BQU0sQ0FBQyxFQUFFO0FBQ2hDO0FBQUEsbUJBQ0M7QUFDRCxvQkFBSSxZQUFZLE1BQU07QUFDbEIsOEJBQVksT0FBTyxZQUFZLEtBQUssUUFBUSxjQUFjLFlBQVk7QUFDdEUsc0JBQUksWUFBWTtBQUNaLDJCQUFPLEtBQUssWUFBWSxJQUFJO0FBQUEsZ0JBQ3BDO0FBQ0EsdUJBQU87QUFBQSxjQUNYO0FBQUEsWUFDSjtBQUNBLGdCQUFLLFFBQVEsWUFBWSxXQUFXLE1BQU0sQ0FBQyxLQUFPLFlBQVksV0FBVyxNQUFNLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBSTtBQUNoRyxrQkFBSSxZQUFZLENBQUM7QUFDakIsa0JBQUssU0FBUyxZQUFZLFdBQVcsTUFBTSxDQUFDLEtBQU8sWUFBWSxXQUFXLE1BQU0sQ0FBQyxFQUFFO0FBQy9FLDRCQUFZO0FBQUE7QUFFWiw0QkFBWTtBQUNoQixrQkFBSSxPQUFPLFVBQVUsWUFBWSxXQUFXLE1BQU0sQ0FBQyxFQUFFLElBQUksTUFBTTtBQUMzRCwwQkFBVSxZQUFZLFdBQVcsTUFBTSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUM7QUFDdkQsd0JBQVUsWUFBWSxXQUFXLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLFVBQVUsV0FBVyxNQUFNLENBQUMsQ0FBQztBQUFBLFlBQ3RGO0FBQUEsVUFDSixPQUNLO0FBQ0QscUJBQVMsY0FBYyxNQUFNLFVBQVUsV0FBVyxNQUFNLElBQUksU0FBUyxHQUFHLFlBQVksV0FBVyxNQUFNLENBQUMsQ0FBQztBQUN2RyxnQkFBSSxPQUFPLGFBQWEsT0FBTztBQUMzQixrQkFBSSxZQUFZLFdBQVcsTUFBTSxDQUFDLEVBQUU7QUFDaEM7QUFBQSxtQkFDQztBQUNELG9CQUFJLFlBQVksTUFBTTtBQUNsQiw4QkFBWSxPQUFPLFlBQVksS0FBSyxRQUFRLGNBQWMsWUFBWTtBQUN0RSxzQkFBSSxZQUFZO0FBQ1osMkJBQU8sS0FBSyxZQUFZLElBQUk7QUFBQSxnQkFDcEM7QUFDQSx1QkFBTztBQUFBLGNBQ1g7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQ0EsVUFBSSxPQUFPLGFBQWEsT0FBTztBQUMzQixjQUFNLFVBQVU7QUFBQSxVQUNaLFVBQVU7QUFBQSxVQUNWLFFBQVE7QUFBQSxRQUNaO0FBQ0EsWUFBSSxZQUFZLE1BQU07QUFDbEIsc0JBQVksT0FBTyxZQUFZLEtBQUssUUFBUSxjQUFjLFlBQVk7QUFDdEUsY0FBSSxZQUFZLE1BQU07QUFDbEIsbUJBQU8sS0FBSyxZQUFZLElBQUk7QUFDNUIsb0JBQVEsT0FBTyxZQUFZO0FBQUEsVUFDL0I7QUFBQSxRQUNKO0FBQ0EsZUFBTztBQUFBLE1BQ1g7QUFDQSxhQUFPO0FBQUEsUUFDSCxVQUFVO0FBQUEsUUFDVixRQUFRO0FBQUEsTUFDWjtBQUFBLElBQ0o7QUFDQSxRQUFJLFlBQVksbUJBQ1gsa0JBQWtCLFVBQVUsWUFBYTtBQUMxQyxZQUFNLE9BQU8sYUFBYSxVQUFVLFdBQVcsWUFBWTtBQUMzRCxVQUFJLEtBQUssV0FBVyxJQUFJO0FBQ3BCLGNBQU0sVUFBVTtBQUFBLFVBQ1osVUFBVTtBQUFBLFVBQ1YsUUFBUSxLQUFLO0FBQUEsUUFDakI7QUFDQSxZQUFJLFlBQVksTUFBTTtBQUNsQixzQkFBWSxPQUFPLFlBQVksS0FBSyxRQUFRLGNBQWMsWUFBWTtBQUN0RSxjQUFJLFlBQVksTUFBTTtBQUNsQixtQkFBTyxLQUFLLFlBQVksSUFBSTtBQUM1QixvQkFBUSxPQUFPLFlBQVk7QUFBQSxVQUMvQjtBQUFBLFFBQ0o7QUFDQSxlQUFPO0FBQUEsTUFDWDtBQUNBLGFBQU8sY0FBYyxNQUFNLEtBQUssUUFBUSxZQUFZLGVBQWU7QUFBQSxJQUN2RTtBQUNBLFdBQU87QUFBQSxNQUNILFVBQVU7QUFBQSxNQUNWLFFBQVE7QUFBQSxJQUNaO0FBQUEsRUFDSjtBQUNBLFdBQVMsYUFBYSxhQUFhLGFBQWE7QUFDNUMsUUFBSyx1QkFBdUIsV0FBWSxPQUFPO0FBQzNDLGFBQU87QUFBQSxRQUNILFVBQVU7QUFBQSxRQUNWLFFBQVEsRUFBRSxPQUFPLDBCQUEwQjtBQUFBLE1BQy9DO0FBQUEsSUFDSjtBQUNBLFVBQU0sT0FBTyxhQUF1QixnQ0FBc0IsYUFBYSxXQUFXLENBQUM7QUFDbkYsUUFBSSxLQUFLLFdBQVcsSUFBSTtBQUNwQixhQUFPO0FBQUEsUUFDSCxVQUFVO0FBQUEsUUFDVixRQUFRLEtBQUs7QUFBQSxNQUNqQjtBQUFBLElBQ0o7QUFDQSxXQUFPLGNBQWMsS0FBSyxRQUFRLEtBQUssUUFBUSxXQUFXO0FBQUEsRUFDOUQ7QUFyakdBLE1Ba0NBLFdBK0NNLFlBWUEsU0FDQSxjQUNBLE1BQ0EsZ0JBQ0EsYUFDQSxVQUNBLFdBQ0EsWUFDQSxnQkFDQSxVQUNBLFFBQ0EsT0FDQSxjQUNBLGNBQ0EsWUFDQSxxQkFDQSxtQkFDQSxpQkF3REEsZ0JBNEJBLFlBVUEsMEJBNEtBLGtCQW1HQSxXQUVBLFdBZ0dBLGlCQWtDQSwwQkFRRixNQUNFLFdBOE9BLDRCQWtFRixNQUNFLGFBdUNBLDZCQVVGLE1BQ0UsY0FhRixNQUNFLE1BMENBLHdCQWlERixNQUNFSCxVQXNCQSw0QkFtREYsTUFDRSxhQXFFQSwwQkEyRkYsTUFDRSxXQTRDRixNQXdGRSx3QkEySUYsTUFDRSxTQTBERixNQUNFLFlBYUEsb0JBbUhBLGlDQStIRixNQUNFLGtCQTRCQSw0QkFpRkEseUNBc0ZGLE1BQ0UsMEJBNEJGLE1BQ0UsVUFhRixNQUNFQyxNQWFBLHVCQWVBLDZCQUlBLHdCQWlCQSwyQkFrQkYsTUFDRSxZQWFBLDBCQVlGLE1BQ0UsV0FhQSxnQ0E2QkYsTUFDRSxpQkFhRixNQUNFLGVBYUYsTUFDRSxpQkFhRixNQUNFLGVBYUYsTUFDRSxnQkFhRixNQUNFLFdBYUYsTUFDRSxlQWFGLE1BQ0UsZUFhRixNQUNFLGVBYUYsTUFDRSxpQkFhRixNQUNFLFNBaUdGLE1BQ0UsaUJBcUxGLE1BQ0UsTUFhRixNQUNFLFdBYUYsTUFDRSxVQWFGLE1BQ0UsVUFhRixJQUNFLE1BYUEsS0FPQSxRQU9BLFVBUUE7QUFsdUZOO0FBQUE7QUFrQ0Esa0JBQTJCO0FBQzNCO0FBOENBLE1BQU0sYUFBTixNQUFpQjtBQUFBLFFBQ2IsY0FBYztBQUNWLGVBQUssUUFBUSxDQUFDO0FBQUEsUUFDbEI7QUFBQSxRQUNBLE1BQU0sS0FBSztBQUNQLGVBQUssTUFBTSxLQUFLLEdBQUc7QUFBQSxRQUN2QjtBQUFBLFFBQ0EsUUFBUTtBQUNKLGlCQUFPLE9BQU8sS0FBSyxLQUFLO0FBQUEsUUFDNUI7QUFBQSxNQUNKO0FBRUEsTUFBTSxVQUFVLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsTUFBTSxlQUFlO0FBQ3JCLE1BQU0sT0FBTztBQUNiLE1BQU0saUJBQWlCO0FBQ3ZCLE1BQU0sY0FBYztBQUNwQixNQUFNLFdBQVc7QUFDakIsTUFBTSxZQUFZO0FBQ2xCLE1BQU0sYUFBYTtBQUNuQixNQUFNLGlCQUFpQjtBQUN2QixNQUFNLFdBQVc7QUFDakIsTUFBTSxTQUFTO0FBQ2YsTUFBTSxRQUFRO0FBQ2QsTUFBTSxlQUFlO0FBQ3JCLE1BQU0sZUFBZSxJQUFJLFlBQVksQ0FBQztBQUN0QyxNQUFNLGFBQWEsSUFBSSxXQUFXLENBQUM7QUFDbkMsTUFBTSxzQkFBc0I7QUFDNUIsTUFBTSxvQkFBb0I7QUFDMUIsTUFBTSxrQkFBa0I7QUF3RHhCLE1BQU0saUJBQU4sTUFBcUI7QUFBQSxRQUNqQixZQUFZLEVBQUUsY0FBYyxHQUFHLFFBQVEsY0FBYyxXQUFXLENBQUMsR0FBRyxvQkFBb0IsV0FBWSxJQUFJLENBQUMsR0FBRztBQUN4RyxlQUFLLGNBQWM7QUFDbkIsZUFBSyxRQUFRO0FBQ2IsZUFBSyxXQUFXO0FBQ2hCLGVBQUssd0JBQWtDLGdDQUFzQixhQUFhLGlCQUFpQjtBQUFBLFFBQy9GO0FBQUEsUUFDQSxPQUFPLFlBQVk7QUFDZixpQkFBTyxLQUFLO0FBQUEsUUFDaEI7QUFBQSxRQUNBLElBQUksb0JBQW9CO0FBQ3BCLGlCQUFPLEtBQUssc0JBQXNCLE1BQU0sRUFBRTtBQUFBLFFBQzlDO0FBQUEsUUFDQSxJQUFJLGtCQUFrQixPQUFPO0FBQ3pCLGVBQUssd0JBQXdCLElBQUksV0FBVyxLQUFLO0FBQUEsUUFDckQ7QUFBQSxRQUNBLFNBQVM7QUFDTCxpQkFBTztBQUFBLFlBQ0gsV0FBVyxLQUFLLFlBQVk7QUFBQSxZQUM1QixhQUFhLEtBQUs7QUFBQSxZQUNsQixPQUFPLEtBQUs7QUFBQSxZQUNaLFVBQVUsS0FBSztBQUFBLFlBQ2YsbUJBQTZCLGtCQUFRLE1BQU0sS0FBSyxxQkFBcUI7QUFBQSxVQUN6RTtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQ0EscUJBQWUsT0FBTztBQUV0QixNQUFNLGFBQU4sY0FBeUIsZUFBZTtBQUFBLFFBQ3BDLFFBQVEsYUFBYSxhQUFhLGFBQWE7QUFDM0MsZ0JBQU0sVUFBVSw2RUFBNkU7QUFBQSxRQUNqRztBQUFBLFFBQ0EsTUFBTSxVQUFVLFFBQVE7QUFDcEIsZ0JBQU0sVUFBVSw2RUFBNkU7QUFBQSxRQUNqRztBQUFBLE1BQ0o7QUFDQSxpQkFBVyxPQUFPO0FBRWxCLE1BQU0sMkJBQU4sY0FBdUMsU0FBUyxjQUFjLEVBQUU7QUFBQSxRQUM1RCxZQUFZLEVBQUUsVUFBVSxDQUFDLEVBQUcsSUFBSSxDQUFDLEdBQUc7QUFDaEMsY0FBSUMsS0FBSSxJQUFJLElBQUk7QUFDaEIsZ0JBQU07QUFDTixjQUFJLFNBQVM7QUFDVCxpQkFBSyxhQUFhQSxNQUFLLFFBQVEsZUFBZSxRQUFRQSxRQUFPLFNBQVNBLE1BQUs7QUFDM0UsaUJBQUssZUFBZSxRQUFRLFdBQXFCLGdDQUFzQixhQUFhLFFBQVEsUUFBUSxJQUFJO0FBQ3hHLGlCQUFLLFlBQVksS0FBSyxRQUFRLGNBQWMsUUFBUSxPQUFPLFNBQVMsS0FBSztBQUN6RSxpQkFBSyxhQUFhLEtBQUssUUFBUSxlQUFlLFFBQVEsT0FBTyxTQUFTLEtBQUs7QUFDM0UsaUJBQUssaUJBQWlCLEtBQUssUUFBUSxtQkFBbUIsUUFBUSxPQUFPLFNBQVMsS0FBSztBQUFBLFVBQ3ZGLE9BQ0s7QUFDRCxpQkFBSyxXQUFXO0FBQ2hCLGlCQUFLLFlBQVk7QUFDakIsaUJBQUssZ0JBQWdCO0FBQUEsVUFDekI7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNLFdBQVcsT0FBTztBQUNwQixjQUFJLGFBQWE7QUFDakIsa0JBQVEsS0FBSyxVQUFVO0FBQUEsWUFDbkIsS0FBSztBQUNELDRCQUFjO0FBQ2Q7QUFBQSxZQUNKLEtBQUs7QUFDRCw0QkFBYztBQUNkO0FBQUEsWUFDSixLQUFLO0FBQ0QsNEJBQWM7QUFDZDtBQUFBLFlBQ0osS0FBSztBQUNELDRCQUFjO0FBQ2Q7QUFBQSxZQUNKO0FBQ0ksbUJBQUssUUFBUTtBQUNiLHFCQUFPO0FBQUEsVUFDZjtBQUNBLGNBQUksS0FBSztBQUNMLDBCQUFjO0FBQ2xCLGNBQUksS0FBSyxZQUFZLE1BQU0sQ0FBQyxLQUFLLFdBQVc7QUFDeEMsa0JBQU1FLFdBQVUsSUFBSSxXQUFXLENBQUM7QUFDaEMsZ0JBQUksQ0FBQyxVQUFVO0FBQ1gsa0JBQUksU0FBUyxLQUFLO0FBQ2xCLHdCQUFVO0FBQ1YsNEJBQWM7QUFDZCxjQUFBQSxTQUFRLENBQUMsSUFBSTtBQUFBLFlBQ2pCO0FBQ0EsbUJBQU9BLFNBQVE7QUFBQSxVQUNuQjtBQUNBLGNBQUksQ0FBQyxLQUFLLFdBQVc7QUFDakIsa0JBQU0sYUFBcUIsV0FBVyxLQUFLLFdBQVcsQ0FBQztBQUN2RCxrQkFBTSxjQUFjLElBQUksV0FBVyxVQUFVO0FBQzdDLGtCQUFNQyxRQUFPLFdBQVc7QUFDeEIsa0JBQU1ELFdBQVUsSUFBSSxXQUFXQyxRQUFPLENBQUM7QUFDdkMsWUFBQUQsU0FBUSxDQUFDLElBQUssYUFBYTtBQUMzQixnQkFBSSxDQUFDLFVBQVU7QUFDWCx1QkFBUyxJQUFJLEdBQUcsSUFBS0MsUUFBTyxHQUFJO0FBQzVCLGdCQUFBRCxTQUFRLElBQUksQ0FBQyxJQUFJLFlBQVksQ0FBQyxJQUFJO0FBQ3RDLGNBQUFBLFNBQVFDLEtBQUksSUFBSSxZQUFZQSxRQUFPLENBQUM7QUFBQSxZQUN4QztBQUNBLG1CQUFPRCxTQUFRO0FBQUEsVUFDbkI7QUFDQSxnQkFBTSxVQUFVLElBQUksV0FBVyxLQUFLLGFBQWEsYUFBYSxDQUFDO0FBQy9ELGtCQUFRLENBQUMsSUFBSyxhQUFhO0FBQzNCLGNBQUksQ0FBQyxVQUFVO0FBQ1gsa0JBQU0sVUFBVSxLQUFLO0FBQ3JCLHFCQUFTLElBQUksR0FBRyxJQUFLLFFBQVEsU0FBUyxHQUFJO0FBQ3RDLHNCQUFRLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJO0FBQ2xDLG9CQUFRLEtBQUssYUFBYSxVQUFVLElBQUksUUFBUSxRQUFRLFNBQVMsQ0FBQztBQUFBLFVBQ3RFO0FBQ0EsaUJBQU8sUUFBUTtBQUFBLFFBQ25CO0FBQUEsUUFDQSxRQUFRLGFBQWEsYUFBYSxhQUFhO0FBQzNDLGdCQUFNLFlBQXNCLGdDQUFzQixhQUFhLFdBQVc7QUFDMUUsY0FBSSxDQUFDLGtCQUFrQixNQUFNLFdBQVcsYUFBYSxXQUFXLEdBQUc7QUFDL0QsbUJBQU87QUFBQSxVQUNYO0FBQ0EsZ0JBQU0sWUFBWSxVQUFVLFNBQVMsYUFBYSxjQUFjLFdBQVc7QUFDM0UsY0FBSSxVQUFVLFdBQVcsR0FBRztBQUN4QixpQkFBSyxRQUFRO0FBQ2IsbUJBQU87QUFBQSxVQUNYO0FBQ0EsZ0JBQU0sZUFBZSxVQUFVLENBQUMsSUFBSTtBQUNwQyxrQkFBUSxjQUFjO0FBQUEsWUFDbEIsS0FBSztBQUNELG1CQUFLLFdBQVk7QUFDakI7QUFBQSxZQUNKLEtBQUs7QUFDRCxtQkFBSyxXQUFZO0FBQ2pCO0FBQUEsWUFDSixLQUFLO0FBQ0QsbUJBQUssV0FBWTtBQUNqQjtBQUFBLFlBQ0osS0FBSztBQUNELG1CQUFLLFdBQVk7QUFDakI7QUFBQSxZQUNKO0FBQ0ksbUJBQUssUUFBUTtBQUNiLHFCQUFPO0FBQUEsVUFDZjtBQUNBLGVBQUssaUJBQWlCLFVBQVUsQ0FBQyxJQUFJLFFBQVU7QUFDL0MsZUFBSyxZQUFZO0FBQ2pCLGdCQUFNLGdCQUFnQixVQUFVLENBQUMsSUFBSTtBQUNyQyxjQUFJLGtCQUFrQixJQUFNO0FBQ3hCLGlCQUFLLFlBQWE7QUFDbEIsaUJBQUssY0FBYztBQUFBLFVBQ3ZCLE9BQ0s7QUFDRCxnQkFBSSxRQUFRO0FBQ1osZ0JBQUkscUJBQXFCLEtBQUssZUFBZSxJQUFJLFdBQVcsR0FBRztBQUMvRCxnQkFBSSwyQkFBMkI7QUFDL0IsbUJBQU8sVUFBVSxLQUFLLElBQUksS0FBTTtBQUM1QixpQ0FBbUIsUUFBUSxDQUFDLElBQUksVUFBVSxLQUFLLElBQUk7QUFDbkQ7QUFDQSxrQkFBSSxTQUFTLFVBQVUsUUFBUTtBQUMzQixxQkFBSyxRQUFRO0FBQ2IsdUJBQU87QUFBQSxjQUNYO0FBQ0Esa0JBQUksVUFBVSwwQkFBMEI7QUFDcEMsNENBQTRCO0FBQzVCLHNCQUFNRSxrQkFBaUIsSUFBSSxXQUFXLHdCQUF3QjtBQUM5RCx5QkFBUyxJQUFJLEdBQUcsSUFBSSxtQkFBbUIsUUFBUTtBQUMzQyxrQkFBQUEsZ0JBQWUsQ0FBQyxJQUFJLG1CQUFtQixDQUFDO0FBQzVDLHFDQUFxQixLQUFLLGVBQWUsSUFBSSxXQUFXLHdCQUF3QjtBQUFBLGNBQ3BGO0FBQUEsWUFDSjtBQUNBLGlCQUFLLGNBQWUsUUFBUTtBQUM1QiwrQkFBbUIsUUFBUSxDQUFDLElBQUksVUFBVSxLQUFLLElBQUk7QUFDbkQsa0JBQU0saUJBQWlCLElBQUksV0FBVyxLQUFLO0FBQzNDLHFCQUFTLElBQUksR0FBRyxJQUFJLE9BQU87QUFDdkIsNkJBQWUsQ0FBQyxJQUFJLG1CQUFtQixDQUFDO0FBQzVDLGlDQUFxQixLQUFLLGVBQWUsSUFBSSxXQUFXLEtBQUs7QUFDN0QsK0JBQW1CLElBQUksY0FBYztBQUNyQyxnQkFBSSxLQUFLLGVBQWU7QUFDcEIsbUJBQUssWUFBb0IsYUFBYSxvQkFBb0IsQ0FBQztBQUFBLGlCQUMxRDtBQUNELG1CQUFLLFlBQVk7QUFDakIsbUJBQUssU0FBUyxLQUFLLHdDQUF3QztBQUFBLFlBQy9EO0FBQUEsVUFDSjtBQUNBLGNBQU0sS0FBSyxhQUFhLEtBQ25CLEtBQUssZUFBZ0I7QUFDdEIsb0JBQVEsS0FBSyxXQUFXO0FBQUEsY0FDcEIsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUNELHFCQUFLLFFBQVE7QUFDYix1QkFBTztBQUFBLFlBQ2Y7QUFBQSxVQUNKO0FBQ0EsaUJBQVEsY0FBYyxLQUFLO0FBQUEsUUFDL0I7QUFBQSxRQUNBLFNBQVM7QUFDTCxpQkFBTztBQUFBLFlBQ0gsR0FBRyxNQUFNLE9BQU87QUFBQSxZQUNoQixVQUFVLEtBQUs7QUFBQSxZQUNmLFdBQVcsS0FBSztBQUFBLFlBQ2hCLGVBQWUsS0FBSztBQUFBLFVBQ3hCO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQSwrQkFBeUIsT0FBTztBQUVoQyxNQUFNLG1CQUFOLGNBQStCLGVBQWU7QUFBQSxRQUMxQyxZQUFZLEVBQUUsV0FBVyxDQUFDLEVBQUcsSUFBSSxDQUFDLEdBQUc7QUFDakMsY0FBSUosS0FBSSxJQUFJO0FBQ1osZ0JBQU07QUFDTixlQUFLLG9CQUFvQkEsTUFBSyxTQUFTLHNCQUFzQixRQUFRQSxRQUFPLFNBQVNBLE1BQUs7QUFDMUYsZUFBSyxnQkFBZ0IsS0FBSyxTQUFTLGtCQUFrQixRQUFRLE9BQU8sU0FBUyxLQUFLO0FBQ2xGLGVBQUssVUFBVSxLQUFLLFNBQVMsWUFBWSxRQUFRLE9BQU8sU0FBUyxLQUFLO0FBQUEsUUFDMUU7QUFBQSxRQUNBLFFBQVEsYUFBYSxhQUFhLGFBQWE7QUFDM0MsZ0JBQU0sT0FBaUIsZ0NBQXNCLGFBQWEsV0FBVztBQUNyRSxjQUFJLENBQUMsa0JBQWtCLE1BQU0sTUFBTSxhQUFhLFdBQVcsR0FBRztBQUMxRCxtQkFBTztBQUFBLFVBQ1g7QUFDQSxnQkFBTSxZQUFZLEtBQUssU0FBUyxhQUFhLGNBQWMsV0FBVztBQUN0RSxjQUFJLFVBQVUsV0FBVyxHQUFHO0FBQ3hCLGlCQUFLLFFBQVE7QUFDYixtQkFBTztBQUFBLFVBQ1g7QUFDQSxjQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQU07QUFDdkIsaUJBQUssUUFBUTtBQUNiLG1CQUFPO0FBQUEsVUFDWDtBQUNBLGVBQUssbUJBQW1CLFVBQVUsQ0FBQyxNQUFNO0FBQ3pDLGNBQUksS0FBSyxrQkFBa0I7QUFDdkIsaUJBQUssY0FBYztBQUNuQixtQkFBUSxjQUFjLEtBQUs7QUFBQSxVQUMvQjtBQUNBLGVBQUssZUFBZSxDQUFDLEVBQUUsVUFBVSxDQUFDLElBQUk7QUFDdEMsY0FBSSxLQUFLLGlCQUFpQixPQUFPO0FBQzdCLGlCQUFLLFNBQVUsVUFBVSxDQUFDO0FBQzFCLGlCQUFLLGNBQWM7QUFDbkIsbUJBQVEsY0FBYyxLQUFLO0FBQUEsVUFDL0I7QUFDQSxnQkFBTSxRQUFRLFVBQVUsQ0FBQyxJQUFJO0FBQzdCLGNBQUksUUFBUSxHQUFHO0FBQ1gsaUJBQUssUUFBUTtBQUNiLG1CQUFPO0FBQUEsVUFDWDtBQUNBLGNBQUssUUFBUSxJQUFLLFVBQVUsUUFBUTtBQUNoQyxpQkFBSyxRQUFRO0FBQ2IsbUJBQU87QUFBQSxVQUNYO0FBQ0EsZ0JBQU0sWUFBWSxjQUFjO0FBQ2hDLGdCQUFNLG1CQUFtQixLQUFLLFNBQVMsV0FBVyxZQUFZLEtBQUs7QUFDbkUsY0FBSSxpQkFBaUIsUUFBUSxDQUFDLE1BQU07QUFDaEMsaUJBQUssU0FBUyxLQUFLLGdDQUFnQztBQUN2RCxlQUFLLFNBQWlCLGFBQWEsa0JBQWtCLENBQUM7QUFDdEQsY0FBSSxLQUFLLGdCQUFpQixLQUFLLFVBQVU7QUFDckMsaUJBQUssU0FBUyxLQUFLLHVDQUF1QztBQUM5RCxlQUFLLGNBQWMsUUFBUTtBQUMzQixpQkFBUSxjQUFjLEtBQUs7QUFBQSxRQUMvQjtBQUFBLFFBQ0EsTUFBTSxXQUFXLE9BQU87QUFDcEIsY0FBSTtBQUNKLGNBQUk7QUFDSixjQUFJLEtBQUssU0FBUztBQUNkLGlCQUFLLGVBQWU7QUFDeEIsY0FBSSxLQUFLLGtCQUFrQjtBQUN2QixxQkFBUyxJQUFJLFlBQVksQ0FBQztBQUMxQixnQkFBSSxhQUFhLE9BQU87QUFDcEIsd0JBQVUsSUFBSSxXQUFXLE1BQU07QUFDL0Isc0JBQVEsQ0FBQyxJQUFJO0FBQUEsWUFDakI7QUFDQSxtQkFBTztBQUFBLFVBQ1g7QUFDQSxjQUFJLEtBQUssY0FBYztBQUNuQixrQkFBTSxhQUFxQixXQUFXLEtBQUssUUFBUSxDQUFDO0FBQ3BELGdCQUFJLFdBQVcsYUFBYSxLQUFLO0FBQzdCLG1CQUFLLFFBQVE7QUFDYixxQkFBUTtBQUFBLFlBQ1o7QUFDQSxxQkFBUyxJQUFJLFlBQVksV0FBVyxhQUFhLENBQUM7QUFDbEQsZ0JBQUk7QUFDQSxxQkFBTztBQUNYLGtCQUFNLGNBQWMsSUFBSSxXQUFXLFVBQVU7QUFDN0Msc0JBQVUsSUFBSSxXQUFXLE1BQU07QUFDL0Isb0JBQVEsQ0FBQyxJQUFJLFdBQVcsYUFBYTtBQUNyQyxxQkFBUyxJQUFJLEdBQUcsSUFBSSxXQUFXLFlBQVk7QUFDdkMsc0JBQVEsSUFBSSxDQUFDLElBQUksWUFBWSxDQUFDO0FBQ2xDLG1CQUFPO0FBQUEsVUFDWDtBQUNBLG1CQUFTLElBQUksWUFBWSxDQUFDO0FBQzFCLGNBQUksYUFBYSxPQUFPO0FBQ3BCLHNCQUFVLElBQUksV0FBVyxNQUFNO0FBQy9CLG9CQUFRLENBQUMsSUFBSSxLQUFLO0FBQUEsVUFDdEI7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLFNBQVM7QUFDTCxpQkFBTztBQUFBLFlBQ0gsR0FBRyxNQUFNLE9BQU87QUFBQSxZQUNoQixrQkFBa0IsS0FBSztBQUFBLFlBQ3ZCLGNBQWMsS0FBSztBQUFBLFlBQ25CLFFBQVEsS0FBSztBQUFBLFVBQ2pCO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQSx1QkFBaUIsT0FBTztBQUV4QixNQUFNLFlBQVksQ0FBQztBQUVuQixNQUFNLFlBQU4sY0FBd0IsZUFBZTtBQUFBLFFBQ25DLFlBQVksRUFBRSxPQUFPLGNBQWMsV0FBVyxPQUFPLGlCQUFpQixHQUFHLFdBQVcsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCO0FBQ3hHLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxPQUFPO0FBQ1osZUFBSyxXQUFXO0FBQ2hCLGNBQUksaUJBQWlCO0FBQ2pCLGlCQUFLLGtCQUFrQjtBQUFBLFVBQzNCO0FBQ0EsZUFBSyxVQUFVLElBQUkseUJBQXlCLFVBQVU7QUFDdEQsZUFBSyxXQUFXLElBQUksaUJBQWlCLFVBQVU7QUFDL0MsZUFBSyxhQUFhLGlCQUFpQixJQUFJLGVBQWUsVUFBVSxJQUFJLElBQUksV0FBVyxVQUFVO0FBQUEsUUFDakc7QUFBQSxRQUNBLFFBQVEsYUFBYSxhQUFhLGFBQWE7QUFDM0MsZ0JBQU0sZUFBZSxLQUFLLFdBQVcsUUFBUSxhQUFhLGFBQWMsS0FBSyxTQUFTLG1CQUFvQixjQUFjLEtBQUssU0FBUyxNQUFNO0FBQzVJLGNBQUksaUJBQWlCLElBQUk7QUFDckIsaUJBQUssUUFBUSxLQUFLLFdBQVc7QUFDN0IsbUJBQU87QUFBQSxVQUNYO0FBQ0EsY0FBSSxDQUFDLEtBQUssUUFBUSxNQUFNO0FBQ3BCLGlCQUFLLGVBQWUsS0FBSyxRQUFRO0FBQ3JDLGNBQUksQ0FBQyxLQUFLLFNBQVMsTUFBTTtBQUNyQixpQkFBSyxlQUFlLEtBQUssU0FBUztBQUN0QyxjQUFJLENBQUMsS0FBSyxXQUFXLE1BQU07QUFDdkIsaUJBQUssZUFBZSxLQUFLLFdBQVc7QUFDeEMsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxNQUFNLFVBQVUsUUFBUTtBQUNwQixnQkFBTSxVQUFVLFVBQVUsSUFBSSxXQUFXO0FBQ3pDLGNBQUksQ0FBQyxRQUFRO0FBQ1Qsa0NBQXNCLElBQUk7QUFBQSxVQUM5QjtBQUNBLGdCQUFNLGFBQWEsS0FBSyxRQUFRLE1BQU0sUUFBUTtBQUM5QyxrQkFBUSxNQUFNLFVBQVU7QUFDeEIsY0FBSSxLQUFLLFNBQVMsa0JBQWtCO0FBQ2hDLG9CQUFRLE1BQU0sSUFBSSxXQUFXLENBQUMsR0FBSSxDQUFDLEVBQUUsTUFBTTtBQUMzQyxpQkFBSyxXQUFXLE1BQU0sVUFBVSxPQUFPO0FBQ3ZDLG9CQUFRLE1BQU0sSUFBSSxZQUFZLENBQUMsQ0FBQztBQUFBLFVBQ3BDLE9BQ0s7QUFDRCxrQkFBTSxnQkFBZ0IsS0FBSyxXQUFXLE1BQU0sUUFBUTtBQUNwRCxpQkFBSyxTQUFTLFNBQVMsY0FBYztBQUNyQyxrQkFBTSxjQUFjLEtBQUssU0FBUyxNQUFNLFFBQVE7QUFDaEQsb0JBQVEsTUFBTSxXQUFXO0FBQ3pCLG9CQUFRLE1BQU0sYUFBYTtBQUFBLFVBQy9CO0FBQ0EsY0FBSSxDQUFDLFFBQVE7QUFDVCxtQkFBTyxRQUFRLE1BQU07QUFBQSxVQUN6QjtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsU0FBUztBQUNMLGdCQUFNLFNBQVM7QUFBQSxZQUNYLEdBQUcsTUFBTSxPQUFPO0FBQUEsWUFDaEIsU0FBUyxLQUFLLFFBQVEsT0FBTztBQUFBLFlBQzdCLFVBQVUsS0FBSyxTQUFTLE9BQU87QUFBQSxZQUMvQixZQUFZLEtBQUssV0FBVyxPQUFPO0FBQUEsWUFDbkMsTUFBTSxLQUFLO0FBQUEsWUFDWCxVQUFVLEtBQUs7QUFBQSxVQUNuQjtBQUNBLGNBQUksS0FBSztBQUNMLG1CQUFPLGtCQUFrQixLQUFLLGdCQUFnQixPQUFPO0FBQ3pELGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsU0FBUyxXQUFXLFNBQVM7QUFDekIsY0FBSSxhQUFhLFNBQVM7QUFDdEIsbUJBQU8sS0FBSyxnQkFBZ0I7QUFBQSxVQUNoQztBQUNBLGlCQUFpQixrQkFBUSxNQUFNLEtBQUssTUFBTSxDQUFDO0FBQUEsUUFDL0M7QUFBQSxRQUNBLGtCQUFrQjtBQUNkLGlCQUFPLEdBQUcsS0FBSyxZQUFZLElBQUksTUFBZ0Isa0JBQVEsTUFBTSxLQUFLLFdBQVcscUJBQXFCLENBQUM7QUFBQSxRQUN2RztBQUFBLFFBQ0EsUUFBUSxPQUFPO0FBQ1gsY0FBSSxTQUFTLE9BQU87QUFDaEIsbUJBQU87QUFBQSxVQUNYO0FBQ0EsY0FBSSxFQUFFLGlCQUFpQixLQUFLLGNBQWM7QUFDdEMsbUJBQU87QUFBQSxVQUNYO0FBQ0EsZ0JBQU0sVUFBVSxLQUFLLE1BQU07QUFDM0IsZ0JBQU0sV0FBVyxNQUFNLE1BQU07QUFDN0IsaUJBQWUsY0FBYyxTQUFTLFFBQVE7QUFBQSxRQUNsRDtBQUFBLE1BQ0o7QUFDQSxnQkFBVSxPQUFPO0FBWWpCLE1BQU0sa0JBQU4sY0FBOEIsVUFBVTtBQUFBLFFBQ3BDLFlBQVksRUFBRSxRQUFRLGNBQWMsR0FBRyxXQUFXLElBQUksQ0FBQyxHQUFHLHNCQUFzQjtBQUM1RSxnQkFBTSxZQUFZLG9CQUFvQjtBQUN0QyxjQUFJLE9BQU87QUFDUCxpQkFBSyxXQUFXLEtBQUs7QUFBQSxVQUN6QjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFdBQVc7QUFDUCxpQkFBTyxLQUFLLFdBQVc7QUFBQSxRQUMzQjtBQUFBLFFBQ0EsU0FBUyxPQUFPO0FBQ1osZUFBSyxXQUFXLFFBQVE7QUFBQSxRQUM1QjtBQUFBLFFBQ0EsUUFBUSxhQUFhLGFBQWEsYUFBYTtBQUMzQyxnQkFBTSxlQUFlLEtBQUssV0FBVyxRQUFRLGFBQWEsYUFBYyxLQUFLLFNBQVMsbUJBQW9CLGNBQWMsS0FBSyxTQUFTLE1BQU07QUFDNUksY0FBSSxpQkFBaUIsSUFBSTtBQUNyQixpQkFBSyxRQUFRLEtBQUssV0FBVztBQUM3QixtQkFBTztBQUFBLFVBQ1g7QUFDQSxlQUFLLFdBQVcsS0FBSyxXQUFXLFlBQVk7QUFDNUMsY0FBSSxDQUFDLEtBQUssUUFBUSxNQUFNO0FBQ3BCLGlCQUFLLGVBQWUsS0FBSyxRQUFRO0FBQ3JDLGNBQUksQ0FBQyxLQUFLLFNBQVMsTUFBTTtBQUNyQixpQkFBSyxlQUFlLEtBQUssU0FBUztBQUN0QyxjQUFJLENBQUMsS0FBSyxXQUFXLE1BQU07QUFDdkIsaUJBQUssZUFBZSxLQUFLLFdBQVc7QUFDeEMsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxrQkFBa0I7QUFDZCxpQkFBTyxHQUFHLEtBQUssWUFBWSxJQUFJLE9BQU8sS0FBSyxXQUFXLEtBQUs7QUFBQSxRQUMvRDtBQUFBLE1BQ0o7QUFDQSxzQkFBZ0IsT0FBTztBQUV2QixNQUFNLDJCQUFOLGNBQXVDLFNBQVMsVUFBVSxFQUFFO0FBQUEsUUFDeEQsWUFBWSxFQUFFLFlBQVksTUFBTSxHQUFHLFdBQVcsSUFBSSxDQUFDLEdBQUc7QUFDbEQsZ0JBQU0sVUFBVTtBQUNoQixlQUFLLFlBQVk7QUFBQSxRQUNyQjtBQUFBLE1BQ0o7QUFDQSwrQkFBeUIsT0FBTztBQUdoQyxNQUFNLFlBQU4sY0FBd0IsVUFBVTtBQUFBLFFBQzlCLFlBQVksYUFBYSxDQUFDLEdBQUc7QUFDekIsZ0JBQU0sWUFBWSx3QkFBd0I7QUFDMUMsZUFBSyxRQUFRLGdCQUFnQjtBQUFBLFFBQ2pDO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFDUCxPQUFDLE1BQU07QUFDSCxrQkFBVSxZQUFZO0FBQUEsTUFDMUIsR0FBRztBQUNILGdCQUFVLE9BQU87QUFvT2pCLE1BQU0sNkJBQU4sY0FBeUMsV0FBVztBQUFBLFFBQ2hELFlBQVksRUFBRSxRQUFRLENBQUMsR0FBRyxtQkFBbUIsT0FBTyxHQUFHLFdBQVcsSUFBSSxDQUFDLEdBQUc7QUFDdEUsZ0JBQU0sVUFBVTtBQUNoQixlQUFLLFFBQVE7QUFDYixlQUFLLG1CQUFtQjtBQUFBLFFBQzVCO0FBQUEsUUFDQSxRQUFRLGFBQWEsYUFBYSxhQUFhO0FBQzNDLGdCQUFNLE9BQWlCLGdDQUFzQixhQUFhLFdBQVc7QUFDckUsY0FBSSxDQUFDLGtCQUFrQixNQUFNLE1BQU0sYUFBYSxXQUFXLEdBQUc7QUFDMUQsbUJBQU87QUFBQSxVQUNYO0FBQ0EsZUFBSyx3QkFBd0IsS0FBSyxTQUFTLGFBQWEsY0FBYyxXQUFXO0FBQ2pGLGNBQUksS0FBSyxzQkFBc0IsV0FBVyxHQUFHO0FBQ3pDLGlCQUFLLFNBQVMsS0FBSyxvQkFBb0I7QUFDdkMsbUJBQU87QUFBQSxVQUNYO0FBQ0EsY0FBSSxnQkFBZ0I7QUFDcEIsaUJBQU8sU0FBUyxLQUFLLGtCQUFrQixXQUFXLElBQUksR0FBRztBQUNyRCxrQkFBTSxlQUFlLGFBQWEsTUFBTSxlQUFlLFdBQVc7QUFDbEUsZ0JBQUksYUFBYSxXQUFXLElBQUk7QUFDNUIsbUJBQUssUUFBUSxhQUFhLE9BQU87QUFDakMsbUJBQUssU0FBUyxPQUFPLGFBQWEsT0FBTyxRQUFRO0FBQ2pELHFCQUFPO0FBQUEsWUFDWDtBQUNBLDRCQUFnQixhQUFhO0FBQzdCLGlCQUFLLGVBQWUsYUFBYSxPQUFPO0FBQ3hDLDJCQUFlLGFBQWEsT0FBTztBQUNuQyxpQkFBSyxNQUFNLEtBQUssYUFBYSxNQUFNO0FBQ25DLGdCQUFJLEtBQUssb0JBQW9CLGFBQWEsT0FBTyxZQUFZLFNBQVMscUJBQXFCO0FBQ3ZGO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFDQSxjQUFJLEtBQUssa0JBQWtCO0FBQ3ZCLGdCQUFJLEtBQUssTUFBTSxLQUFLLE1BQU0sU0FBUyxDQUFDLEVBQUUsWUFBWSxTQUFTLHFCQUFxQjtBQUM1RSxtQkFBSyxNQUFNLElBQUk7QUFBQSxZQUNuQixPQUNLO0FBQ0QsbUJBQUssU0FBUyxLQUFLLCtCQUErQjtBQUFBLFlBQ3REO0FBQUEsVUFDSjtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsTUFBTSxVQUFVLFFBQVE7QUFDcEIsZ0JBQU0sVUFBVSxVQUFVLElBQUksV0FBVztBQUN6QyxtQkFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLE1BQU0sUUFBUSxLQUFLO0FBQ3hDLGlCQUFLLE1BQU0sQ0FBQyxFQUFFLE1BQU0sVUFBVSxPQUFPO0FBQUEsVUFDekM7QUFDQSxjQUFJLENBQUMsUUFBUTtBQUNULG1CQUFPLFFBQVEsTUFBTTtBQUFBLFVBQ3pCO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxTQUFTO0FBQ0wsZ0JBQU0sU0FBUztBQUFBLFlBQ1gsR0FBRyxNQUFNLE9BQU87QUFBQSxZQUNoQixrQkFBa0IsS0FBSztBQUFBLFlBQ3ZCLE9BQU8sQ0FBQztBQUFBLFVBQ1o7QUFDQSxxQkFBVyxTQUFTLEtBQUssT0FBTztBQUM1QixtQkFBTyxNQUFNLEtBQUssTUFBTSxPQUFPLENBQUM7QUFBQSxVQUNwQztBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFDQSxpQ0FBMkIsT0FBTztBQUdsQyxNQUFNLGNBQU4sY0FBMEIsVUFBVTtBQUFBLFFBQ2hDLFlBQVksYUFBYSxDQUFDLEdBQUc7QUFDekIsZ0JBQU0sWUFBWSwwQkFBMEI7QUFDNUMsZUFBSyxRQUFRLGdCQUFnQjtBQUFBLFFBQ2pDO0FBQUEsUUFDQSxRQUFRLGFBQWEsYUFBYSxhQUFhO0FBQzNDLGVBQUssV0FBVyxtQkFBbUIsS0FBSyxTQUFTO0FBQ2pELGdCQUFNLGVBQWUsS0FBSyxXQUFXLFFBQVEsYUFBYSxhQUFjLEtBQUssU0FBUyxtQkFBb0IsY0FBYyxLQUFLLFNBQVMsTUFBTTtBQUM1SSxjQUFJLGlCQUFpQixJQUFJO0FBQ3JCLGlCQUFLLFFBQVEsS0FBSyxXQUFXO0FBQzdCLG1CQUFPO0FBQUEsVUFDWDtBQUNBLGNBQUksQ0FBQyxLQUFLLFFBQVEsTUFBTTtBQUNwQixpQkFBSyxlQUFlLEtBQUssUUFBUTtBQUNyQyxjQUFJLENBQUMsS0FBSyxTQUFTLE1BQU07QUFDckIsaUJBQUssZUFBZSxLQUFLLFNBQVM7QUFDdEMsY0FBSSxDQUFDLEtBQUssV0FBVyxNQUFNO0FBQ3ZCLGlCQUFLLGVBQWUsS0FBSyxXQUFXO0FBQ3hDLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0Esa0JBQWtCO0FBQ2QsZ0JBQU0sU0FBUyxDQUFDO0FBQ2hCLHFCQUFXLFNBQVMsS0FBSyxXQUFXLE9BQU87QUFDdkMsbUJBQU8sS0FBSyxNQUFNLFNBQVMsT0FBTyxFQUFFLE1BQU0sSUFBSSxFQUFFLElBQUksT0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDO0FBQUEsVUFDakY7QUFDQSxnQkFBTSxZQUFZLEtBQUssUUFBUSxhQUFhLElBQ3RDLElBQUksS0FBSyxRQUFRLFNBQVMsTUFDMUIsS0FBSyxZQUFZO0FBQ3ZCLGlCQUFPLE9BQU8sU0FDUixHQUFHLFNBQVM7QUFBQSxFQUFPLE9BQU8sS0FBSyxJQUFJLENBQUMsS0FDcEMsR0FBRyxTQUFTO0FBQUEsUUFDdEI7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUNQLE9BQUMsTUFBTTtBQUNILGtCQUFVLGNBQWM7QUFBQSxNQUM1QixHQUFHO0FBQ0gsa0JBQVksT0FBTztBQUVuQixNQUFNLDhCQUFOLGNBQTBDLFdBQVc7QUFBQSxRQUNqRCxRQUFRLGFBQWEsYUFBYSxhQUFhO0FBQzNDLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsTUFBTSxVQUFVO0FBQ1osaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUNBLGtDQUE0QixXQUFXO0FBR3ZDLE1BQU0sZUFBTixjQUEyQixVQUFVO0FBQUEsUUFDakMsWUFBWSxhQUFhLENBQUMsR0FBRztBQUN6QixnQkFBTSxZQUFZLDJCQUEyQjtBQUM3QyxlQUFLLFFBQVEsV0FBVztBQUN4QixlQUFLLFFBQVEsWUFBWTtBQUFBLFFBQzdCO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFDUCxPQUFDLE1BQU07QUFDSCxrQkFBVSxlQUFlO0FBQUEsTUFDN0IsR0FBRztBQUNILG1CQUFhLE9BQU87QUFHcEIsTUFBTSxPQUFOLGNBQW1CLFVBQVU7QUFBQSxRQUN6QixZQUFZLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGdCQUFNLFlBQVksVUFBVTtBQUM1QixlQUFLLFFBQVEsV0FBVztBQUN4QixlQUFLLFFBQVEsWUFBWTtBQUFBLFFBQzdCO0FBQUEsUUFDQSxRQUFRLGFBQWEsYUFBYSxhQUFhO0FBQzNDLGNBQUksS0FBSyxTQUFTLFNBQVM7QUFDdkIsaUJBQUssU0FBUyxLQUFLLDhDQUE4QztBQUNyRSxjQUFJLENBQUMsS0FBSyxRQUFRLE1BQU07QUFDcEIsaUJBQUssZUFBZSxLQUFLLFFBQVE7QUFDckMsY0FBSSxDQUFDLEtBQUssU0FBUyxNQUFNO0FBQ3JCLGlCQUFLLGVBQWUsS0FBSyxTQUFTO0FBQ3RDLGVBQUssZUFBZTtBQUNwQixjQUFLLGNBQWMsY0FBZSxZQUFZLFlBQVk7QUFDdEQsaUJBQUssUUFBUTtBQUNiLG1CQUFPO0FBQUEsVUFDWDtBQUNBLGlCQUFRLGNBQWM7QUFBQSxRQUMxQjtBQUFBLFFBQ0EsTUFBTSxVQUFVLFFBQVE7QUFDcEIsZ0JBQU0sU0FBUyxJQUFJLFlBQVksQ0FBQztBQUNoQyxjQUFJLENBQUMsVUFBVTtBQUNYLGtCQUFNLFVBQVUsSUFBSSxXQUFXLE1BQU07QUFDckMsb0JBQVEsQ0FBQyxJQUFJO0FBQ2Isb0JBQVEsQ0FBQyxJQUFJO0FBQUEsVUFDakI7QUFDQSxjQUFJLFFBQVE7QUFDUixtQkFBTyxNQUFNLE1BQU07QUFBQSxVQUN2QjtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0Esa0JBQWtCO0FBQ2QsaUJBQU8sR0FBRyxLQUFLLFlBQVksSUFBSTtBQUFBLFFBQ25DO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFDUCxPQUFDLE1BQU07QUFDSCxrQkFBVSxPQUFPO0FBQUEsTUFDckIsR0FBRztBQUNILFdBQUssT0FBTztBQUVaLE1BQU0seUJBQU4sY0FBcUMsU0FBUyxVQUFVLEVBQUU7QUFBQSxRQUN0RCxZQUFZLEVBQUUsT0FBTyxHQUFHLFdBQVcsSUFBSSxDQUFDLEdBQUc7QUFDdkMsZ0JBQU0sVUFBVTtBQUNoQixjQUFJLFdBQVcsVUFBVTtBQUNyQixpQkFBSyxlQUF5QixnQ0FBc0IsYUFBYSxXQUFXLFFBQVE7QUFBQSxVQUN4RixPQUNLO0FBQ0QsaUJBQUssZUFBZSxJQUFJLFdBQVcsQ0FBQztBQUFBLFVBQ3hDO0FBQ0EsY0FBSSxPQUFPO0FBQ1AsaUJBQUssUUFBUTtBQUFBLFVBQ2pCO0FBQUEsUUFDSjtBQUFBLFFBQ0EsSUFBSSxRQUFRO0FBQ1IscUJBQVcsU0FBUyxLQUFLLGNBQWM7QUFDbkMsZ0JBQUksUUFBUSxHQUFHO0FBQ1gscUJBQU87QUFBQSxZQUNYO0FBQUEsVUFDSjtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsSUFBSSxNQUFNLE9BQU87QUFDYixlQUFLLGFBQWEsQ0FBQyxJQUFJLFFBQVEsTUFBTztBQUFBLFFBQzFDO0FBQUEsUUFDQSxRQUFRLGFBQWEsYUFBYSxhQUFhO0FBQzNDLGdCQUFNLFlBQXNCLGdDQUFzQixhQUFhLFdBQVc7QUFDMUUsY0FBSSxDQUFDLGtCQUFrQixNQUFNLFdBQVcsYUFBYSxXQUFXLEdBQUc7QUFDL0QsbUJBQU87QUFBQSxVQUNYO0FBQ0EsZUFBSyxlQUFlLFVBQVUsU0FBUyxhQUFhLGNBQWMsV0FBVztBQUM3RSxjQUFJLGNBQWM7QUFDZCxpQkFBSyxTQUFTLEtBQUssNENBQTRDO0FBQ25FLGVBQUssWUFBWTtBQUNqQixVQUFRLGFBQWEsS0FBSyxJQUFJO0FBQzlCLGVBQUssY0FBYztBQUNuQixpQkFBUSxjQUFjO0FBQUEsUUFDMUI7QUFBQSxRQUNBLFFBQVE7QUFDSixpQkFBTyxLQUFLLGFBQWEsTUFBTTtBQUFBLFFBQ25DO0FBQUEsUUFDQSxTQUFTO0FBQ0wsaUJBQU87QUFBQSxZQUNILEdBQUcsTUFBTSxPQUFPO0FBQUEsWUFDaEIsT0FBTyxLQUFLO0FBQUEsVUFDaEI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUNBLDZCQUF1QixPQUFPO0FBRzlCLE1BQU1GLFdBQU4sY0FBc0IsVUFBVTtBQUFBLFFBQzVCLFlBQVksYUFBYSxDQUFDLEdBQUc7QUFDekIsZ0JBQU0sWUFBWSxzQkFBc0I7QUFDeEMsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLFFBQ0EsV0FBVztBQUNQLGlCQUFPLEtBQUssV0FBVztBQUFBLFFBQzNCO0FBQUEsUUFDQSxTQUFTLE9BQU87QUFDWixlQUFLLFdBQVcsUUFBUTtBQUFBLFFBQzVCO0FBQUEsUUFDQSxrQkFBa0I7QUFDZCxpQkFBTyxHQUFHLEtBQUssWUFBWSxJQUFJLE1BQU0sS0FBSyxRQUFRO0FBQUEsUUFDdEQ7QUFBQSxNQUNKO0FBQ0EsYUFBT0E7QUFDUCxPQUFDLE1BQU07QUFDSCxrQkFBVSxVQUFVO0FBQUEsTUFDeEIsR0FBRztBQUNILE1BQUFBLFNBQVEsT0FBTztBQUVmLE1BQU0sNkJBQU4sY0FBeUMsU0FBUywwQkFBMEIsRUFBRTtBQUFBLFFBQzFFLFlBQVksRUFBRSxnQkFBZ0IsT0FBTyxHQUFHLFdBQVcsSUFBSSxDQUFDLEdBQUc7QUFDdkQsZ0JBQU0sVUFBVTtBQUNoQixlQUFLLGdCQUFnQjtBQUFBLFFBQ3pCO0FBQUEsUUFDQSxRQUFRLGFBQWEsYUFBYSxhQUFhO0FBQzNDLGNBQUksZUFBZTtBQUNuQixjQUFJLEtBQUssZUFBZTtBQUNwQixpQkFBSyxZQUFZO0FBQ2pCLDJCQUFlLDJCQUEyQixVQUFVLFFBQVEsS0FBSyxNQUFNLGFBQWEsYUFBYSxXQUFXO0FBQzVHLGdCQUFJLGlCQUFpQjtBQUNqQixxQkFBTztBQUNYLHFCQUFTLElBQUksR0FBRyxJQUFJLEtBQUssTUFBTSxRQUFRLEtBQUs7QUFDeEMsb0JBQU0sbUJBQW1CLEtBQUssTUFBTSxDQUFDLEVBQUUsWUFBWTtBQUNuRCxrQkFBSSxxQkFBcUIscUJBQXFCO0FBQzFDLG9CQUFJLEtBQUs7QUFDTDtBQUFBLHFCQUNDO0FBQ0QsdUJBQUssUUFBUTtBQUNiLHlCQUFPO0FBQUEsZ0JBQ1g7QUFBQSxjQUNKO0FBQ0Esa0JBQUkscUJBQXFCLG1CQUFtQjtBQUN4QyxxQkFBSyxRQUFRO0FBQ2IsdUJBQU87QUFBQSxjQUNYO0FBQUEsWUFDSjtBQUFBLFVBQ0osT0FDSztBQUNELGlCQUFLLFlBQVk7QUFDakIsMkJBQWUsTUFBTSxRQUFRLGFBQWEsYUFBYSxXQUFXO0FBQ2xFLGlCQUFLLGNBQWM7QUFBQSxVQUN2QjtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsTUFBTSxVQUFVLFFBQVE7QUFDcEIsY0FBSSxLQUFLO0FBQ0wsbUJBQU8sMkJBQTJCLFVBQVUsTUFBTSxLQUFLLE1BQU0sVUFBVSxNQUFNO0FBQ2pGLGlCQUFPLFdBQ0QsSUFBSSxZQUFZLEtBQUssYUFBYSxVQUFVLElBQzVDLEtBQUssYUFBYSxNQUFNLEVBQUU7QUFBQSxRQUNwQztBQUFBLFFBQ0EsU0FBUztBQUNMLGlCQUFPO0FBQUEsWUFDSCxHQUFHLE1BQU0sT0FBTztBQUFBLFlBQ2hCLGVBQWUsS0FBSztBQUFBLFVBQ3hCO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQSxpQ0FBMkIsT0FBTztBQUdsQyxNQUFNLGNBQU4sTUFBTSxxQkFBb0IsVUFBVTtBQUFBLFFBQ2hDLFlBQVksRUFBRSxVQUFVLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxHQUFHLFdBQVcsSUFBSSxDQUFDLEdBQUc7QUFDN0QsY0FBSSxJQUFJO0FBQ1IsV0FBQyxLQUFLLFdBQVcsbUJBQW1CLFFBQVEsT0FBTyxTQUFTLEtBQU0sV0FBVyxnQkFBZ0IsQ0FBQyxHQUFHLEtBQUssV0FBVyxXQUFXLFFBQVEsT0FBTyxTQUFTLFNBQVMsR0FBRztBQUNoSyxnQkFBTTtBQUFBLFlBQ0YsU0FBUztBQUFBLGNBQ0wsZUFBZSxXQUFXO0FBQUEsY0FDMUIsR0FBRztBQUFBLFlBQ1A7QUFBQSxZQUNBLFVBQVU7QUFBQSxjQUNOLEdBQUc7QUFBQSxjQUNILGtCQUFrQixDQUFDLENBQUMsV0FBVztBQUFBLFlBQ25DO0FBQUEsWUFDQSxHQUFHO0FBQUEsVUFDUCxHQUFHLDBCQUEwQjtBQUM3QixlQUFLLFFBQVEsV0FBVztBQUN4QixlQUFLLFFBQVEsWUFBWTtBQUFBLFFBQzdCO0FBQUEsUUFDQSxRQUFRLGFBQWEsYUFBYSxhQUFhO0FBQzNDLGVBQUssV0FBVyxnQkFBZ0IsS0FBSyxRQUFRO0FBQzdDLGVBQUssV0FBVyxtQkFBbUIsS0FBSyxTQUFTO0FBQ2pELGNBQUksZ0JBQWdCLEdBQUc7QUFDbkIsZ0JBQUksS0FBSyxRQUFRLE1BQU0sV0FBVztBQUM5QixtQkFBSyxlQUFlLEtBQUssUUFBUTtBQUNyQyxnQkFBSSxLQUFLLFNBQVMsTUFBTSxXQUFXO0FBQy9CLG1CQUFLLGVBQWUsS0FBSyxTQUFTO0FBQ3RDLG1CQUFPO0FBQUEsVUFDWDtBQUNBLGNBQUksQ0FBQyxLQUFLLFdBQVcsZUFBZTtBQUNoQyxrQkFBTSxPQUFPLHVCQUF1QixjQUFjLElBQUksV0FBVyxXQUFXLElBQUk7QUFDaEYsa0JBQU0sTUFBTSxLQUFLLFNBQVMsYUFBYSxjQUFjLFdBQVc7QUFDaEUsZ0JBQUk7QUFDQSxrQkFBSSxJQUFJLFlBQVk7QUFDaEIsc0JBQU0sTUFBTSxhQUFhLEtBQUssR0FBRyxJQUFJLFVBQVU7QUFDL0Msb0JBQUksSUFBSSxXQUFXLE1BQU0sSUFBSSxXQUFXLGFBQWE7QUFDakQsdUJBQUssV0FBVyxRQUFRLENBQUMsSUFBSSxNQUFNO0FBQUEsZ0JBQ3ZDO0FBQUEsY0FDSjtBQUFBLFlBQ0osU0FDTyxHQUFHO0FBQUEsWUFDVjtBQUFBLFVBQ0o7QUFDQSxpQkFBTyxNQUFNLFFBQVEsYUFBYSxhQUFhLFdBQVc7QUFBQSxRQUM5RDtBQUFBLFFBQ0Esa0JBQWtCO0FBQ2QsY0FBSSxLQUFLLFdBQVcsaUJBQWtCLEtBQUssV0FBVyxTQUFTLEtBQUssV0FBVyxNQUFNLFFBQVM7QUFDMUYsbUJBQU8sWUFBWSxVQUFVLGdCQUFnQixLQUFLLElBQUk7QUFBQSxVQUMxRDtBQUNBLGlCQUFPLEdBQUcsS0FBSyxZQUFZLElBQUksTUFBZ0Isa0JBQVEsTUFBTSxLQUFLLFdBQVcsWUFBWSxDQUFDO0FBQUEsUUFDOUY7QUFBQSxRQUNBLFdBQVc7QUFDUCxjQUFJLENBQUMsS0FBSyxRQUFRLGVBQWU7QUFDN0IsbUJBQU8sS0FBSyxXQUFXLGFBQWEsTUFBTSxFQUFFO0FBQUEsVUFDaEQ7QUFDQSxnQkFBTSxRQUFRLENBQUM7QUFDZixxQkFBVyxXQUFXLEtBQUssV0FBVyxPQUFPO0FBQ3pDLGdCQUFJLG1CQUFtQixjQUFhO0FBQ2hDLG9CQUFNLEtBQUssUUFBUSxXQUFXLFlBQVk7QUFBQSxZQUM5QztBQUFBLFVBQ0o7QUFDQSxpQkFBaUIsZ0NBQXNCLE9BQU8sS0FBSztBQUFBLFFBQ3ZEO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFDUCxPQUFDLE1BQU07QUFDSCxrQkFBVSxjQUFjO0FBQUEsTUFDNUIsR0FBRztBQUNILGtCQUFZLE9BQU87QUFFbkIsTUFBTSwyQkFBTixjQUF1QyxTQUFTLDBCQUEwQixFQUFFO0FBQUEsUUFDeEUsWUFBWSxFQUFFLGFBQWEsR0FBRyxnQkFBZ0IsT0FBTyxHQUFHLFdBQVcsSUFBSSxDQUFDLEdBQUc7QUFDdkUsZ0JBQU0sVUFBVTtBQUNoQixlQUFLLGFBQWE7QUFDbEIsZUFBSyxnQkFBZ0I7QUFDckIsZUFBSyxjQUFjLEtBQUssYUFBYTtBQUFBLFFBQ3pDO0FBQUEsUUFDQSxRQUFRLGFBQWEsYUFBYSxhQUFhO0FBQzNDLGNBQUksQ0FBQyxhQUFhO0FBQ2QsbUJBQU87QUFBQSxVQUNYO0FBQ0EsY0FBSSxlQUFlO0FBQ25CLGNBQUksS0FBSyxlQUFlO0FBQ3BCLDJCQUFlLDJCQUEyQixVQUFVLFFBQVEsS0FBSyxNQUFNLGFBQWEsYUFBYSxXQUFXO0FBQzVHLGdCQUFJLGlCQUFpQjtBQUNqQixxQkFBTztBQUNYLHVCQUFXLFNBQVMsS0FBSyxPQUFPO0FBQzVCLG9CQUFNLG1CQUFtQixNQUFNLFlBQVk7QUFDM0Msa0JBQUkscUJBQXFCLHFCQUFxQjtBQUMxQyxvQkFBSSxLQUFLO0FBQ0w7QUFBQSxxQkFDQztBQUNELHVCQUFLLFFBQVE7QUFDYix5QkFBTztBQUFBLGdCQUNYO0FBQUEsY0FDSjtBQUNBLGtCQUFJLHFCQUFxQixpQkFBaUI7QUFDdEMscUJBQUssUUFBUTtBQUNiLHVCQUFPO0FBQUEsY0FDWDtBQUNBLG9CQUFNLGFBQWEsTUFBTTtBQUN6QixrQkFBSyxLQUFLLGFBQWEsS0FBTyxXQUFXLGFBQWEsR0FBSTtBQUN0RCxxQkFBSyxRQUFRO0FBQ2IsdUJBQU87QUFBQSxjQUNYO0FBQ0EsbUJBQUssYUFBYSxXQUFXO0FBQUEsWUFDakM7QUFDQSxtQkFBTztBQUFBLFVBQ1g7QUFDQSxnQkFBTSxZQUFzQixnQ0FBc0IsYUFBYSxXQUFXO0FBQzFFLGNBQUksQ0FBQyxrQkFBa0IsTUFBTSxXQUFXLGFBQWEsV0FBVyxHQUFHO0FBQy9ELG1CQUFPO0FBQUEsVUFDWDtBQUNBLGdCQUFNLFlBQVksVUFBVSxTQUFTLGFBQWEsY0FBYyxXQUFXO0FBQzNFLGVBQUssYUFBYSxVQUFVLENBQUM7QUFDN0IsY0FBSSxLQUFLLGFBQWEsR0FBRztBQUNyQixpQkFBSyxRQUFRO0FBQ2IsbUJBQU87QUFBQSxVQUNYO0FBQ0EsY0FBSSxDQUFDLEtBQUssWUFBWTtBQUNsQixrQkFBTSxNQUFNLFVBQVUsU0FBUyxDQUFDO0FBQ2hDLGdCQUFJO0FBQ0Esa0JBQUksSUFBSSxZQUFZO0FBQ2hCLHNCQUFNLE1BQU0sYUFBYSxLQUFLLEdBQUcsSUFBSSxVQUFVO0FBQy9DLG9CQUFJLElBQUksV0FBVyxNQUFNLElBQUksV0FBWSxjQUFjLEdBQUk7QUFDdkQsdUJBQUssUUFBUSxDQUFDLElBQUksTUFBTTtBQUFBLGdCQUM1QjtBQUFBLGNBQ0o7QUFBQSxZQUNKLFNBQ08sR0FBRztBQUFBLFlBQ1Y7QUFBQSxVQUNKO0FBQ0EsZUFBSyxlQUFlLFVBQVUsU0FBUyxDQUFDO0FBQ3hDLGVBQUssY0FBYyxVQUFVO0FBQzdCLGlCQUFRLGNBQWM7QUFBQSxRQUMxQjtBQUFBLFFBQ0EsTUFBTSxVQUFVLFFBQVE7QUFDcEIsY0FBSSxLQUFLLGVBQWU7QUFDcEIsbUJBQU8sMkJBQTJCLFVBQVUsTUFBTSxLQUFLLE1BQU0sVUFBVSxNQUFNO0FBQUEsVUFDakY7QUFDQSxjQUFJLFVBQVU7QUFDVixtQkFBTyxJQUFJLFlBQVksS0FBSyxhQUFhLGFBQWEsQ0FBQztBQUFBLFVBQzNEO0FBQ0EsY0FBSSxDQUFDLEtBQUssYUFBYSxZQUFZO0FBQy9CLG1CQUFPO0FBQUEsVUFDWDtBQUNBLGdCQUFNLFVBQVUsSUFBSSxXQUFXLEtBQUssYUFBYSxTQUFTLENBQUM7QUFDM0Qsa0JBQVEsQ0FBQyxJQUFJLEtBQUs7QUFDbEIsa0JBQVEsSUFBSSxLQUFLLGNBQWMsQ0FBQztBQUNoQyxpQkFBTyxRQUFRO0FBQUEsUUFDbkI7QUFBQSxRQUNBLFNBQVM7QUFDTCxpQkFBTztBQUFBLFlBQ0gsR0FBRyxNQUFNLE9BQU87QUFBQSxZQUNoQixZQUFZLEtBQUs7QUFBQSxZQUNqQixlQUFlLEtBQUs7QUFBQSxVQUN4QjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQ0EsK0JBQXlCLE9BQU87QUFHaEMsTUFBTSxZQUFOLGNBQXdCLFVBQVU7QUFBQSxRQUM5QixZQUFZLEVBQUUsVUFBVSxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsR0FBRyxXQUFXLElBQUksQ0FBQyxHQUFHO0FBQzdELGNBQUksSUFBSTtBQUNSLFdBQUMsS0FBSyxXQUFXLG1CQUFtQixRQUFRLE9BQU8sU0FBUyxLQUFNLFdBQVcsZ0JBQWdCLENBQUMsR0FBRyxLQUFLLFdBQVcsV0FBVyxRQUFRLE9BQU8sU0FBUyxTQUFTLEdBQUc7QUFDaEssZ0JBQU07QUFBQSxZQUNGLFNBQVM7QUFBQSxjQUNMLGVBQWUsV0FBVztBQUFBLGNBQzFCLEdBQUc7QUFBQSxZQUNQO0FBQUEsWUFDQSxVQUFVO0FBQUEsY0FDTixHQUFHO0FBQUEsY0FDSCxrQkFBa0IsQ0FBQyxDQUFDLFdBQVc7QUFBQSxZQUNuQztBQUFBLFlBQ0EsR0FBRztBQUFBLFVBQ1AsR0FBRyx3QkFBd0I7QUFDM0IsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLFFBQ0EsUUFBUSxhQUFhLGFBQWEsYUFBYTtBQUMzQyxlQUFLLFdBQVcsZ0JBQWdCLEtBQUssUUFBUTtBQUM3QyxlQUFLLFdBQVcsbUJBQW1CLEtBQUssU0FBUztBQUNqRCxpQkFBTyxNQUFNLFFBQVEsYUFBYSxhQUFhLFdBQVc7QUFBQSxRQUM5RDtBQUFBLFFBQ0Esa0JBQWtCO0FBQ2QsY0FBSSxLQUFLLFdBQVcsaUJBQWtCLEtBQUssV0FBVyxTQUFTLEtBQUssV0FBVyxNQUFNLFFBQVM7QUFDMUYsbUJBQU8sWUFBWSxVQUFVLGdCQUFnQixLQUFLLElBQUk7QUFBQSxVQUMxRCxPQUNLO0FBQ0Qsa0JBQU0sT0FBTyxDQUFDO0FBQ2Qsa0JBQU0sV0FBVyxLQUFLLFdBQVc7QUFDakMsdUJBQVcsUUFBUSxVQUFVO0FBQ3pCLG1CQUFLLEtBQUssS0FBSyxTQUFTLENBQUMsRUFBRSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQUEsWUFDL0M7QUFDQSxrQkFBTSxVQUFVLEtBQUssS0FBSyxFQUFFO0FBQzVCLG1CQUFPLEdBQUcsS0FBSyxZQUFZLElBQUksTUFBTSxRQUFRLFVBQVUsR0FBRyxRQUFRLFNBQVMsS0FBSyxXQUFXLFVBQVUsQ0FBQztBQUFBLFVBQzFHO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQ1AsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsWUFBWTtBQUFBLE1BQzFCLEdBQUc7QUFDSCxnQkFBVSxPQUFPO0FBMEZqQixNQUFNLHlCQUFOLGNBQXFDLFNBQVMsVUFBVSxFQUFFO0FBQUEsUUFDdEQsWUFBWSxFQUFFLE9BQU8sR0FBRyxXQUFXLElBQUksQ0FBQyxHQUFHO0FBQ3ZDLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxZQUFZO0FBQ2pCLGNBQUksV0FBVyxVQUFVO0FBQ3JCLGlCQUFLLFlBQVk7QUFBQSxVQUNyQjtBQUNBLGNBQUksVUFBVSxRQUFXO0FBQ3JCLGlCQUFLLFdBQVc7QUFBQSxVQUNwQjtBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWM7QUFDVixjQUFJLEtBQUssYUFBYSxVQUFVLEdBQUc7QUFDL0IsaUJBQUssU0FBUyxLQUFLLHdDQUF3QztBQUMzRCxpQkFBSyxZQUFZO0FBQ2pCLGlCQUFLLFlBQVk7QUFBQSxVQUNyQixPQUNLO0FBQ0QsaUJBQUssWUFBWTtBQUNqQixnQkFBSSxLQUFLLGFBQWEsU0FBUyxHQUFHO0FBQzlCLG1CQUFLLFlBQW9CLGFBQWEsS0FBSyxJQUFJO0FBQUEsWUFDbkQ7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLFFBQ0EsSUFBSSxTQUFTLEdBQUc7QUFDWixlQUFLLFlBQVk7QUFDakIsZUFBSyxZQUFZO0FBQ2pCLGVBQUssZUFBZSxJQUFJLFdBQW1CLGFBQWEsQ0FBQyxDQUFDO0FBQUEsUUFDOUQ7QUFBQSxRQUNBLElBQUksV0FBVztBQUNYLGlCQUFPLEtBQUs7QUFBQSxRQUNoQjtBQUFBLFFBQ0EsUUFBUSxhQUFhLGFBQWEsYUFBYSxpQkFBaUIsR0FBRztBQUMvRCxnQkFBTU8sVUFBUyxLQUFLLFFBQVEsYUFBYSxhQUFhLFdBQVc7QUFDakUsY0FBSUEsWUFBVztBQUNYLG1CQUFPQTtBQUNYLGdCQUFNLE9BQU8sS0FBSztBQUNsQixjQUFLLEtBQUssQ0FBQyxNQUFNLE1BQVcsS0FBSyxDQUFDLElBQUksU0FBVSxHQUFJO0FBQ2hELGlCQUFLLGVBQWUsS0FBSyxTQUFTLENBQUM7QUFBQSxVQUN2QyxPQUNLO0FBQ0QsZ0JBQUksbUJBQW1CLEdBQUc7QUFDdEIsa0JBQUksS0FBSyxTQUFTLGdCQUFnQjtBQUM5QixvQkFBSyxpQkFBaUIsS0FBSyxTQUFVO0FBQ2pDLG1DQUFpQixLQUFLLFNBQVM7QUFDbkMscUJBQUssZUFBZSxLQUFLLFNBQVMsaUJBQWlCLEtBQUssTUFBTTtBQUFBLGNBQ2xFO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFDQSxpQkFBT0E7QUFBQSxRQUNYO0FBQUEsUUFDQSxNQUFNLFdBQVcsT0FBTztBQUNwQixnQkFBTSxPQUFPLEtBQUs7QUFDbEIsa0JBQVEsTUFBTTtBQUFBLFlBQ1YsTUFBTyxLQUFLLENBQUMsSUFBSSxTQUFVO0FBQ3ZCO0FBQ0ksc0JBQU0sY0FBYyxJQUFJLFdBQVcsS0FBSyxhQUFhLFNBQVMsQ0FBQztBQUMvRCw0QkFBWSxDQUFDLElBQUk7QUFDakIsNEJBQVksSUFBSSxNQUFNLENBQUM7QUFDdkIscUJBQUssZUFBZTtBQUFBLGNBQ3hCO0FBQ0E7QUFBQSxZQUNKLE1BQU8sS0FBSyxDQUFDLE1BQU0sTUFBVyxLQUFLLENBQUMsSUFBSSxTQUFVO0FBQzlDO0FBQ0kscUJBQUssZUFBZSxLQUFLLGFBQWEsU0FBUyxDQUFDO0FBQUEsY0FDcEQ7QUFDQTtBQUFBLFVBQ1I7QUFDQSxpQkFBTyxLQUFLLE1BQU0sUUFBUTtBQUFBLFFBQzlCO0FBQUEsUUFDQSxRQUFRLGFBQWEsYUFBYSxhQUFhO0FBQzNDLGdCQUFNLGVBQWUsTUFBTSxRQUFRLGFBQWEsYUFBYSxXQUFXO0FBQ3hFLGNBQUksaUJBQWlCLElBQUk7QUFDckIsbUJBQU87QUFBQSxVQUNYO0FBQ0EsZUFBSyxZQUFZO0FBQ2pCLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsTUFBTSxVQUFVO0FBQ1osaUJBQU8sV0FDRCxJQUFJLFlBQVksS0FBSyxhQUFhLE1BQU0sSUFDeEMsS0FBSyxhQUFhLE1BQU0sRUFBRTtBQUFBLFFBQ3BDO0FBQUEsUUFDQSxTQUFTO0FBQ0wsaUJBQU87QUFBQSxZQUNILEdBQUcsTUFBTSxPQUFPO0FBQUEsWUFDaEIsVUFBVSxLQUFLO0FBQUEsVUFDbkI7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXO0FBQ1AsZ0JBQU0sV0FBWSxLQUFLLGFBQWEsU0FBUyxJQUFLO0FBQ2xELGNBQUksU0FBUyxJQUFJLFdBQVksS0FBSyxhQUFhLFNBQVMsSUFBSyxDQUFDO0FBQzlELGNBQUksWUFBWTtBQUNoQixjQUFJO0FBQ0osZ0JBQU0sV0FBVyxLQUFLO0FBQ3RCLGNBQUksU0FBUztBQUNiLGNBQUlDLFFBQU87QUFDWCxtQkFBUyxhQUFjLFNBQVMsYUFBYSxHQUFJLGNBQWMsR0FBRyxjQUFjO0FBQzVFLDBCQUFjLFNBQVMsVUFBVTtBQUNqQyxxQkFBUyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUs7QUFDeEIsbUJBQUssY0FBYyxPQUFPLEdBQUc7QUFDekIsd0JBQVEsV0FBVztBQUFBLGtCQUNmLEtBQUs7QUFDRCw2QkFBUyxRQUFRLE9BQU8sU0FBUyxHQUFHLE1BQU07QUFDMUMsNkJBQVM7QUFDVDtBQUFBLGtCQUNKO0FBQ0ksNkJBQVMsUUFBUSxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQUEsZ0JBQ2xEO0FBQUEsY0FDSjtBQUNBO0FBQ0EsOEJBQWdCO0FBQUEsWUFDcEI7QUFBQSxVQUNKO0FBQ0EsbUJBQVMsSUFBSSxHQUFHLElBQUksT0FBTyxRQUFRLEtBQUs7QUFDcEMsZ0JBQUksT0FBTyxDQUFDO0FBQ1IsY0FBQUEsUUFBTztBQUNYLGdCQUFJQTtBQUNBLHdCQUFVLGFBQWEsT0FBTyxPQUFPLENBQUMsQ0FBQztBQUFBLFVBQy9DO0FBQ0EsY0FBSUEsVUFBUztBQUNULHNCQUFVLGFBQWEsT0FBTyxDQUFDO0FBQ25DLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQ1AsNkJBQXVCLE9BQU87QUFDOUIsT0FBQyxNQUFNO0FBQ0gsZUFBTyxlQUFlLEtBQUssV0FBVyxZQUFZO0FBQUEsVUFDOUMsS0FBSyxTQUFVLEdBQUc7QUFDZCxpQkFBSyxlQUFlLElBQUksV0FBVyxDQUFDO0FBQ3BDLGlCQUFLLFlBQVk7QUFBQSxVQUNyQjtBQUFBLFVBQ0EsS0FBSyxXQUFZO0FBQ2IsbUJBQU8sS0FBSyxhQUFhLE1BQU0sRUFBRTtBQUFBLFVBQ3JDO0FBQUEsUUFDSixDQUFDO0FBQUEsTUFDTCxHQUFHO0FBR0gsTUFBTSxVQUFOLE1BQU0saUJBQWdCLFVBQVU7QUFBQSxRQUM1QixZQUFZLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGdCQUFNLFlBQVksc0JBQXNCO0FBQ3hDLGVBQUssUUFBUSxXQUFXO0FBQ3hCLGVBQUssUUFBUSxZQUFZO0FBQUEsUUFDN0I7QUFBQSxRQUNBLFdBQVc7QUFDUCx1QkFBYTtBQUNiLGlCQUFPLE9BQU8sS0FBSyxXQUFXLFNBQVMsQ0FBQztBQUFBLFFBQzVDO0FBQUEsUUFDQSxPQUFPLFdBQVcsT0FBTztBQUNyQix1QkFBYTtBQUNiLGdCQUFNLGNBQWMsT0FBTyxLQUFLO0FBQ2hDLGdCQUFNLFNBQVMsSUFBSSxXQUFXO0FBQzlCLGdCQUFNQyxPQUFNLFlBQVksU0FBUyxFQUFFLEVBQUUsUUFBUSxNQUFNLEVBQUU7QUFDckQsZ0JBQU0sT0FBTyxJQUFJLFdBQXFCLGtCQUFRLFFBQVFBLElBQUcsQ0FBQztBQUMxRCxjQUFJLGNBQWMsR0FBRztBQUNqQixrQkFBTSxRQUFRLElBQUksV0FBVyxLQUFLLFVBQVUsS0FBSyxDQUFDLElBQUksTUFBTyxJQUFJLEVBQUU7QUFDbkUsa0JBQU0sQ0FBQyxLQUFLO0FBQ1osa0JBQU0sV0FBVyxPQUFPLEtBQWUsa0JBQVEsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUM3RCxrQkFBTSxZQUFZLFdBQVc7QUFDN0Isa0JBQU0sU0FBbUIsZ0NBQXNCLGFBQXVCLGtCQUFRLFFBQVEsVUFBVSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQzdHLG1CQUFPLENBQUMsS0FBSztBQUNiLG1CQUFPLE1BQU0sTUFBTTtBQUFBLFVBQ3ZCLE9BQ0s7QUFDRCxnQkFBSSxLQUFLLENBQUMsSUFBSSxLQUFNO0FBQ2hCLHFCQUFPLE1BQU0sSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFBQSxZQUNwQztBQUNBLG1CQUFPLE1BQU0sSUFBSTtBQUFBLFVBQ3JCO0FBQ0EsZ0JBQU0sTUFBTSxJQUFJLFNBQVE7QUFBQSxZQUNwQixVQUFVLE9BQU8sTUFBTTtBQUFBLFVBQzNCLENBQUM7QUFDRCxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLGVBQWU7QUFDWCxnQkFBTSxVQUFVLElBQUksU0FBUSxFQUFFLFVBQVUsS0FBSyxXQUFXLGFBQWEsQ0FBQztBQUN0RSxrQkFBUSxXQUFXLE1BQU07QUFDekIsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxpQkFBaUI7QUFDYixpQkFBTyxJQUFJLFNBQVE7QUFBQSxZQUNmLFVBQVUsS0FBSyxXQUFXLGFBQWEsQ0FBQyxNQUFNLElBQ3hDLEtBQUssV0FBVyxhQUFhLFNBQVMsQ0FBQyxJQUN2QyxLQUFLLFdBQVc7QUFBQSxVQUMxQixDQUFDO0FBQUEsUUFDTDtBQUFBLFFBQ0Esa0JBQWtCO0FBQ2QsaUJBQU8sR0FBRyxLQUFLLFlBQVksSUFBSSxNQUFNLEtBQUssV0FBVyxTQUFTLENBQUM7QUFBQSxRQUNuRTtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQ1AsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsVUFBVTtBQUFBLE1BQ3hCLEdBQUc7QUFDSCxjQUFRLE9BQU87QUFHZixNQUFNLGFBQU4sY0FBeUIsUUFBUTtBQUFBLFFBQzdCLFlBQVksYUFBYSxDQUFDLEdBQUc7QUFDekIsZ0JBQU0sVUFBVTtBQUNoQixlQUFLLFFBQVEsV0FBVztBQUN4QixlQUFLLFFBQVEsWUFBWTtBQUFBLFFBQzdCO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFDUCxPQUFDLE1BQU07QUFDSCxrQkFBVSxhQUFhO0FBQUEsTUFDM0IsR0FBRztBQUNILGlCQUFXLE9BQU87QUFFbEIsTUFBTSxxQkFBTixjQUFpQyxTQUFTLFVBQVUsRUFBRTtBQUFBLFFBQ2xELFlBQVksRUFBRSxXQUFXLElBQUksYUFBYSxPQUFPLEdBQUcsV0FBVyxJQUFJLENBQUMsR0FBRztBQUNuRSxnQkFBTSxVQUFVO0FBQ2hCLGVBQUssV0FBVztBQUNoQixlQUFLLGFBQWE7QUFBQSxRQUN0QjtBQUFBLFFBQ0EsUUFBUSxhQUFhLGFBQWEsYUFBYTtBQUMzQyxjQUFJLENBQUMsYUFBYTtBQUNkLG1CQUFPO0FBQUEsVUFDWDtBQUNBLGdCQUFNLFlBQXNCLGdDQUFzQixhQUFhLFdBQVc7QUFDMUUsY0FBSSxDQUFDLGtCQUFrQixNQUFNLFdBQVcsYUFBYSxXQUFXLEdBQUc7QUFDL0QsbUJBQU87QUFBQSxVQUNYO0FBQ0EsZ0JBQU0sWUFBWSxVQUFVLFNBQVMsYUFBYSxjQUFjLFdBQVc7QUFDM0UsZUFBSyxlQUFlLElBQUksV0FBVyxXQUFXO0FBQzlDLG1CQUFTLElBQUksR0FBRyxJQUFJLGFBQWEsS0FBSztBQUNsQyxpQkFBSyxhQUFhLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSTtBQUN0QyxpQkFBSztBQUNMLGlCQUFLLFVBQVUsQ0FBQyxJQUFJLFNBQVU7QUFDMUI7QUFBQSxVQUNSO0FBQ0EsZ0JBQU0sV0FBVyxJQUFJLFdBQVcsS0FBSyxXQUFXO0FBQ2hELG1CQUFTLElBQUksR0FBRyxJQUFJLEtBQUssYUFBYSxLQUFLO0FBQ3ZDLHFCQUFTLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQztBQUFBLFVBQ3JDO0FBQ0EsZUFBSyxlQUFlO0FBQ3BCLGVBQUssVUFBVSxLQUFLLGNBQWMsQ0FBQyxJQUFJLFNBQVUsR0FBTTtBQUNuRCxpQkFBSyxRQUFRO0FBQ2IsbUJBQU87QUFBQSxVQUNYO0FBQ0EsY0FBSSxLQUFLLGFBQWEsQ0FBQyxNQUFNO0FBQ3pCLGlCQUFLLFNBQVMsS0FBSyx3Q0FBd0M7QUFDL0QsY0FBSSxLQUFLLGVBQWU7QUFDcEIsaUJBQUssV0FBbUIsYUFBYSxLQUFLLGNBQWMsQ0FBQztBQUFBLGVBQ3hEO0FBQ0QsaUJBQUssWUFBWTtBQUNqQixpQkFBSyxTQUFTLEtBQUssb0NBQW9DO0FBQUEsVUFDM0Q7QUFDQSxpQkFBUSxjQUFjLEtBQUs7QUFBQSxRQUMvQjtBQUFBLFFBQ0EsSUFBSSxZQUFZLE9BQU87QUFDbkIsdUJBQWE7QUFDYixjQUFJLE9BQU8sT0FBTyxLQUFLLEVBQUUsU0FBUyxDQUFDO0FBQ25DLGlCQUFPLEtBQUssU0FBUyxHQUFHO0FBQ3BCLG1CQUFPLE1BQU07QUFBQSxVQUNqQjtBQUNBLGdCQUFNLFFBQVEsSUFBSSxXQUFXLEtBQUssU0FBUyxDQUFDO0FBQzVDLG1CQUFTLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQ25DLGtCQUFNLENBQUMsSUFBSSxTQUFTLEtBQUssTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxJQUFJLE1BQU0sU0FBUyxNQUFPO0FBQUEsVUFDMUY7QUFDQSxlQUFLLFFBQVEsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNO0FBQUEsUUFDOUM7QUFBQSxRQUNBLE1BQU0sVUFBVTtBQUNaLGNBQUksS0FBSyxXQUFXO0FBQ2hCLGdCQUFJO0FBQ0EscUJBQVEsSUFBSSxZQUFZLEtBQUssYUFBYSxVQUFVO0FBQ3hELGtCQUFNLFVBQVUsS0FBSztBQUNyQixrQkFBTUwsV0FBVSxJQUFJLFdBQVcsS0FBSyxXQUFXO0FBQy9DLHFCQUFTLElBQUksR0FBRyxJQUFLLEtBQUssY0FBYyxHQUFJO0FBQ3hDLGNBQUFBLFNBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJO0FBQzlCLFlBQUFBLFNBQVEsS0FBSyxjQUFjLENBQUMsSUFBSSxRQUFRLEtBQUssY0FBYyxDQUFDO0FBQzVELG1CQUFPQSxTQUFRO0FBQUEsVUFDbkI7QUFDQSxnQkFBTSxhQUFxQixXQUFXLEtBQUssVUFBVSxDQUFDO0FBQ3RELGNBQUksV0FBVyxlQUFlLEdBQUc7QUFDN0IsaUJBQUssUUFBUTtBQUNiLG1CQUFPO0FBQUEsVUFDWDtBQUNBLGdCQUFNLFVBQVUsSUFBSSxXQUFXLFdBQVcsVUFBVTtBQUNwRCxjQUFJLENBQUMsVUFBVTtBQUNYLGtCQUFNLGNBQWMsSUFBSSxXQUFXLFVBQVU7QUFDN0Msa0JBQU0sTUFBTSxXQUFXLGFBQWE7QUFDcEMscUJBQVMsSUFBSSxHQUFHLElBQUksS0FBSztBQUNyQixzQkFBUSxDQUFDLElBQUksWUFBWSxDQUFDLElBQUk7QUFDbEMsb0JBQVEsR0FBRyxJQUFJLFlBQVksR0FBRztBQUFBLFVBQ2xDO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxXQUFXO0FBQ1AsY0FBSSxTQUFTO0FBQ2IsY0FBSSxLQUFLO0FBQ0wscUJBQW1CLGtCQUFRLE1BQU0sS0FBSyxZQUFZO0FBQUEsZUFDakQ7QUFDRCxnQkFBSSxLQUFLLFlBQVk7QUFDakIsa0JBQUksV0FBVyxLQUFLO0FBQ3BCLGtCQUFJLEtBQUssWUFBWTtBQUNqQix5QkFBUztBQUFBLG1CQUNSO0FBQ0Qsb0JBQUksS0FBSyxZQUFZLElBQUk7QUFDckIsMkJBQVM7QUFDVCw4QkFBWTtBQUFBLGdCQUNoQixPQUNLO0FBQ0QsMkJBQVM7QUFDVCw4QkFBWTtBQUFBLGdCQUNoQjtBQUFBLGNBQ0o7QUFDQSx3QkFBVSxTQUFTLFNBQVM7QUFBQSxZQUNoQztBQUVJLHVCQUFTLEtBQUssU0FBUyxTQUFTO0FBQUEsVUFDeEM7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLFNBQVM7QUFDTCxpQkFBTztBQUFBLFlBQ0gsR0FBRyxNQUFNLE9BQU87QUFBQSxZQUNoQixVQUFVLEtBQUs7QUFBQSxZQUNmLFlBQVksS0FBSztBQUFBLFVBQ3JCO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFDQSx5QkFBbUIsT0FBTztBQUUxQixNQUFNLGtDQUFOLGNBQThDLFdBQVc7QUFBQSxRQUNyRCxZQUFZLEVBQUUsUUFBUSxjQUFjLEdBQUcsV0FBVyxJQUFJLENBQUMsR0FBRztBQUN0RCxnQkFBTSxVQUFVO0FBQ2hCLGVBQUssUUFBUSxDQUFDO0FBQ2QsY0FBSSxPQUFPO0FBQ1AsaUJBQUssV0FBVyxLQUFLO0FBQUEsVUFDekI7QUFBQSxRQUNKO0FBQUEsUUFDQSxRQUFRLGFBQWEsYUFBYSxhQUFhO0FBQzNDLGNBQUksZUFBZTtBQUNuQixpQkFBTyxjQUFjLEdBQUc7QUFDcEIsa0JBQU0sV0FBVyxJQUFJLG1CQUFtQjtBQUN4QywyQkFBZSxTQUFTLFFBQVEsYUFBYSxjQUFjLFdBQVc7QUFDdEUsZ0JBQUksaUJBQWlCLElBQUk7QUFDckIsbUJBQUssY0FBYztBQUNuQixtQkFBSyxRQUFRLFNBQVM7QUFDdEIscUJBQU87QUFBQSxZQUNYO0FBQ0EsZ0JBQUksS0FBSyxNQUFNLFdBQVc7QUFDdEIsdUJBQVMsYUFBYTtBQUMxQixpQkFBSyxlQUFlLFNBQVM7QUFDN0IsMkJBQWUsU0FBUztBQUN4QixpQkFBSyxNQUFNLEtBQUssUUFBUTtBQUFBLFVBQzVCO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxNQUFNLFVBQVU7QUFDWixnQkFBTSxhQUFhLENBQUM7QUFDcEIsbUJBQVMsSUFBSSxHQUFHLElBQUksS0FBSyxNQUFNLFFBQVEsS0FBSztBQUN4QyxrQkFBTSxXQUFXLEtBQUssTUFBTSxDQUFDLEVBQUUsTUFBTSxRQUFRO0FBQzdDLGdCQUFJLFNBQVMsZUFBZSxHQUFHO0FBQzNCLG1CQUFLLFFBQVEsS0FBSyxNQUFNLENBQUMsRUFBRTtBQUMzQixxQkFBTztBQUFBLFlBQ1g7QUFDQSx1QkFBVyxLQUFLLFFBQVE7QUFBQSxVQUM1QjtBQUNBLGlCQUFPLE9BQU8sVUFBVTtBQUFBLFFBQzVCO0FBQUEsUUFDQSxXQUFXLFFBQVE7QUFDZixlQUFLLFFBQVEsQ0FBQztBQUNkLGNBQUksT0FBTztBQUNYLGNBQUksT0FBTztBQUNYLGNBQUksTUFBTTtBQUNWLGNBQUlJLFFBQU87QUFDWCxhQUFHO0FBQ0MsbUJBQU8sT0FBTyxRQUFRLEtBQUssSUFBSTtBQUMvQixnQkFBSSxTQUFTO0FBQ1Qsb0JBQU0sT0FBTyxVQUFVLElBQUk7QUFBQTtBQUUzQixvQkFBTSxPQUFPLFVBQVUsTUFBTSxJQUFJO0FBQ3JDLG1CQUFPLE9BQU87QUFDZCxnQkFBSUEsT0FBTTtBQUNOLG9CQUFNLFdBQVcsS0FBSyxNQUFNLENBQUM7QUFDN0Isa0JBQUksT0FBTztBQUNYLHNCQUFRLFNBQVMsVUFBVTtBQUFBLGdCQUN2QixLQUFLO0FBQ0Q7QUFBQSxnQkFDSixLQUFLO0FBQ0QseUJBQU87QUFDUDtBQUFBLGdCQUNKLEtBQUs7QUFDRCx5QkFBTztBQUNQO0FBQUEsZ0JBQ0o7QUFDSSx1QkFBSyxRQUFRLENBQUM7QUFDZDtBQUFBLGNBQ1I7QUFDQSxvQkFBTSxZQUFZLFNBQVMsS0FBSyxFQUFFO0FBQ2xDLGtCQUFJLE1BQU0sU0FBUztBQUNmO0FBQ0osdUJBQVMsV0FBVyxZQUFZO0FBQ2hDLGNBQUFBLFFBQU87QUFBQSxZQUNYLE9BQ0s7QUFDRCxvQkFBTSxXQUFXLElBQUksbUJBQW1CO0FBQ3hDLGtCQUFJLE1BQU0sT0FBTyxrQkFBa0I7QUFDL0IsNkJBQWE7QUFDYixzQkFBTSxXQUFXLE9BQU8sR0FBRztBQUMzQix5QkFBUyxjQUFjO0FBQUEsY0FDM0IsT0FDSztBQUNELHlCQUFTLFdBQVcsU0FBUyxLQUFLLEVBQUU7QUFDcEMsb0JBQUksTUFBTSxTQUFTLFFBQVE7QUFDdkI7QUFBQSxjQUNSO0FBQ0Esa0JBQUksQ0FBQyxLQUFLLE1BQU0sUUFBUTtBQUNwQix5QkFBUyxhQUFhO0FBQ3RCLGdCQUFBQSxRQUFPO0FBQUEsY0FDWDtBQUNBLG1CQUFLLE1BQU0sS0FBSyxRQUFRO0FBQUEsWUFDNUI7QUFBQSxVQUNKLFNBQVMsU0FBUztBQUFBLFFBQ3RCO0FBQUEsUUFDQSxXQUFXO0FBQ1AsY0FBSSxTQUFTO0FBQ2IsY0FBSSxZQUFZO0FBQ2hCLG1CQUFTLElBQUksR0FBRyxJQUFJLEtBQUssTUFBTSxRQUFRLEtBQUs7QUFDeEMsd0JBQVksS0FBSyxNQUFNLENBQUMsRUFBRTtBQUMxQixnQkFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLEVBQUUsU0FBUztBQUNwQyxnQkFBSSxNQUFNO0FBQ04sdUJBQVMsR0FBRyxNQUFNO0FBQ3RCLGdCQUFJLFdBQVc7QUFDWCx1QkFBUyxJQUFJLE1BQU07QUFDbkIsa0JBQUksS0FBSyxNQUFNLENBQUMsRUFBRTtBQUNkLHlCQUFTLE1BQU0sTUFBTTtBQUFBO0FBRXJCLDBCQUFVO0FBQUEsWUFDbEI7QUFFSSx3QkFBVTtBQUFBLFVBQ2xCO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxTQUFTO0FBQ0wsZ0JBQU0sU0FBUztBQUFBLFlBQ1gsR0FBRyxNQUFNLE9BQU87QUFBQSxZQUNoQixPQUFPLEtBQUssU0FBUztBQUFBLFlBQ3JCLFVBQVUsQ0FBQztBQUFBLFVBQ2Y7QUFDQSxtQkFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLE1BQU0sUUFBUSxLQUFLO0FBQ3hDLG1CQUFPLFNBQVMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQztBQUFBLFVBQy9DO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUNBLHNDQUFnQyxPQUFPO0FBR3ZDLE1BQU0sbUJBQU4sY0FBK0IsVUFBVTtBQUFBLFFBQ3JDLFlBQVksYUFBYSxDQUFDLEdBQUc7QUFDekIsZ0JBQU0sWUFBWSwrQkFBK0I7QUFDakQsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLFFBQ0EsV0FBVztBQUNQLGlCQUFPLEtBQUssV0FBVyxTQUFTO0FBQUEsUUFDcEM7QUFBQSxRQUNBLFNBQVMsT0FBTztBQUNaLGVBQUssV0FBVyxXQUFXLEtBQUs7QUFBQSxRQUNwQztBQUFBLFFBQ0Esa0JBQWtCO0FBQ2QsaUJBQU8sR0FBRyxLQUFLLFlBQVksSUFBSSxNQUFNLEtBQUssV0FBVyxTQUFTLEtBQUssT0FBTztBQUFBLFFBQzlFO0FBQUEsUUFDQSxTQUFTO0FBQ0wsaUJBQU87QUFBQSxZQUNILEdBQUcsTUFBTSxPQUFPO0FBQUEsWUFDaEIsT0FBTyxLQUFLLFNBQVM7QUFBQSxVQUN6QjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUNQLE9BQUMsTUFBTTtBQUNILGtCQUFVLG1CQUFtQjtBQUFBLE1BQ2pDLEdBQUc7QUFDSCx1QkFBaUIsT0FBTztBQUV4QixNQUFNLDZCQUFOLGNBQXlDLFNBQVMsY0FBYyxFQUFFO0FBQUEsUUFDOUQsWUFBWSxFQUFFLFdBQVcsR0FBRyxHQUFHLFdBQVcsSUFBSSxDQUFDLEdBQUc7QUFDOUMsZ0JBQU0sVUFBVTtBQUNoQixlQUFLLFdBQVc7QUFBQSxRQUNwQjtBQUFBLFFBQ0EsUUFBUSxhQUFhLGFBQWEsYUFBYTtBQUMzQyxjQUFJLGdCQUFnQjtBQUNoQixtQkFBTztBQUNYLGdCQUFNLFlBQXNCLGdDQUFzQixhQUFhLFdBQVc7QUFDMUUsY0FBSSxDQUFDLGtCQUFrQixNQUFNLFdBQVcsYUFBYSxXQUFXO0FBQzVELG1CQUFPO0FBQ1gsZ0JBQU0sWUFBWSxVQUFVLFNBQVMsYUFBYSxjQUFjLFdBQVc7QUFDM0UsZUFBSyxlQUFlLElBQUksV0FBVyxXQUFXO0FBQzlDLG1CQUFTLElBQUksR0FBRyxJQUFJLGFBQWEsS0FBSztBQUNsQyxpQkFBSyxhQUFhLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSTtBQUN0QyxpQkFBSztBQUNMLGlCQUFLLFVBQVUsQ0FBQyxJQUFJLFNBQVU7QUFDMUI7QUFBQSxVQUNSO0FBQ0EsZ0JBQU0sV0FBVyxJQUFJLFdBQVcsS0FBSyxXQUFXO0FBQ2hELG1CQUFTLElBQUksR0FBRyxJQUFJLEtBQUssYUFBYTtBQUNsQyxxQkFBUyxDQUFDLElBQUksS0FBSyxhQUFhLENBQUM7QUFDckMsZUFBSyxlQUFlO0FBQ3BCLGVBQUssVUFBVSxLQUFLLGNBQWMsQ0FBQyxJQUFJLFNBQVUsR0FBTTtBQUNuRCxpQkFBSyxRQUFRO0FBQ2IsbUJBQU87QUFBQSxVQUNYO0FBQ0EsY0FBSSxLQUFLLGFBQWEsQ0FBQyxNQUFNO0FBQ3pCLGlCQUFLLFNBQVMsS0FBSyx3Q0FBd0M7QUFDL0QsY0FBSSxLQUFLLGVBQWU7QUFDcEIsaUJBQUssV0FBbUIsYUFBYSxLQUFLLGNBQWMsQ0FBQztBQUFBLGVBQ3hEO0FBQ0QsaUJBQUssWUFBWTtBQUNqQixpQkFBSyxTQUFTLEtBQUssb0NBQW9DO0FBQUEsVUFDM0Q7QUFDQSxpQkFBUSxjQUFjLEtBQUs7QUFBQSxRQUMvQjtBQUFBLFFBQ0EsTUFBTSxVQUFVO0FBQ1osY0FBSSxLQUFLLFdBQVc7QUFDaEIsZ0JBQUk7QUFDQSxxQkFBUSxJQUFJLFlBQVksS0FBSyxhQUFhLFVBQVU7QUFDeEQsa0JBQU0sVUFBVSxLQUFLO0FBQ3JCLGtCQUFNSixXQUFVLElBQUksV0FBVyxLQUFLLFdBQVc7QUFDL0MscUJBQVMsSUFBSSxHQUFHLElBQUssS0FBSyxjQUFjLEdBQUk7QUFDeEMsY0FBQUEsU0FBUSxDQUFDLElBQUksUUFBUSxDQUFDLElBQUk7QUFDOUIsWUFBQUEsU0FBUSxLQUFLLGNBQWMsQ0FBQyxJQUFJLFFBQVEsS0FBSyxjQUFjLENBQUM7QUFDNUQsbUJBQU9BLFNBQVE7QUFBQSxVQUNuQjtBQUNBLGdCQUFNLGFBQXFCLFdBQVcsS0FBSyxVQUFVLENBQUM7QUFDdEQsY0FBSSxXQUFXLGVBQWUsR0FBRztBQUM3QixpQkFBSyxRQUFRO0FBQ2IsbUJBQU87QUFBQSxVQUNYO0FBQ0EsZ0JBQU0sVUFBVSxJQUFJLFdBQVcsV0FBVyxVQUFVO0FBQ3BELGNBQUksQ0FBQyxVQUFVO0FBQ1gsa0JBQU0sY0FBYyxJQUFJLFdBQVcsVUFBVTtBQUM3QyxrQkFBTSxNQUFNLFdBQVcsYUFBYTtBQUNwQyxxQkFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLO0FBQ3JCLHNCQUFRLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSTtBQUNsQyxvQkFBUSxHQUFHLElBQUksWUFBWSxHQUFHO0FBQUEsVUFDbEM7QUFDQSxpQkFBTyxRQUFRO0FBQUEsUUFDbkI7QUFBQSxRQUNBLFdBQVc7QUFDUCxjQUFJLFNBQVM7QUFDYixjQUFJLEtBQUs7QUFDTCxxQkFBbUIsa0JBQVEsTUFBTSxLQUFLLFlBQVk7QUFBQSxlQUNqRDtBQUNELHFCQUFTLEtBQUssU0FBUyxTQUFTO0FBQUEsVUFDcEM7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLFNBQVM7QUFDTCxpQkFBTztBQUFBLFlBQ0gsR0FBRyxNQUFNLE9BQU87QUFBQSxZQUNoQixVQUFVLEtBQUs7QUFBQSxVQUNuQjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQ0EsaUNBQTJCLE9BQU87QUFFbEMsTUFBTSwwQ0FBTixjQUFzRCxXQUFXO0FBQUEsUUFDN0QsWUFBWSxFQUFFLFFBQVEsY0FBYyxHQUFHLFdBQVcsSUFBSSxDQUFDLEdBQUc7QUFDdEQsZ0JBQU0sVUFBVTtBQUNoQixlQUFLLFFBQVEsQ0FBQztBQUNkLGNBQUksT0FBTztBQUNQLGlCQUFLLFdBQVcsS0FBSztBQUFBLFVBQ3pCO0FBQUEsUUFDSjtBQUFBLFFBQ0EsUUFBUSxhQUFhLGFBQWEsYUFBYTtBQUMzQyxjQUFJLGVBQWU7QUFDbkIsaUJBQU8sY0FBYyxHQUFHO0FBQ3BCLGtCQUFNLFdBQVcsSUFBSSwyQkFBMkI7QUFDaEQsMkJBQWUsU0FBUyxRQUFRLGFBQWEsY0FBYyxXQUFXO0FBQ3RFLGdCQUFJLGlCQUFpQixJQUFJO0FBQ3JCLG1CQUFLLGNBQWM7QUFDbkIsbUJBQUssUUFBUSxTQUFTO0FBQ3RCLHFCQUFPO0FBQUEsWUFDWDtBQUNBLGlCQUFLLGVBQWUsU0FBUztBQUM3QiwyQkFBZSxTQUFTO0FBQ3hCLGlCQUFLLE1BQU0sS0FBSyxRQUFRO0FBQUEsVUFDNUI7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLE1BQU0sVUFBVSxRQUFRO0FBQ3BCLGdCQUFNLGFBQWEsQ0FBQztBQUNwQixtQkFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLE1BQU0sUUFBUSxLQUFLO0FBQ3hDLGtCQUFNLFdBQVcsS0FBSyxNQUFNLENBQUMsRUFBRSxNQUFNLFFBQVE7QUFDN0MsZ0JBQUksU0FBUyxlQUFlLEdBQUc7QUFDM0IsbUJBQUssUUFBUSxLQUFLLE1BQU0sQ0FBQyxFQUFFO0FBQzNCLHFCQUFPO0FBQUEsWUFDWDtBQUNBLHVCQUFXLEtBQUssUUFBUTtBQUFBLFVBQzVCO0FBQ0EsaUJBQU8sT0FBTyxVQUFVO0FBQUEsUUFDNUI7QUFBQSxRQUNBLFdBQVcsUUFBUTtBQUNmLGVBQUssUUFBUSxDQUFDO0FBQ2QsY0FBSSxPQUFPO0FBQ1gsY0FBSSxPQUFPO0FBQ1gsY0FBSSxNQUFNO0FBQ1YsYUFBRztBQUNDLG1CQUFPLE9BQU8sUUFBUSxLQUFLLElBQUk7QUFDL0IsZ0JBQUksU0FBUztBQUNULG9CQUFNLE9BQU8sVUFBVSxJQUFJO0FBQUE7QUFFM0Isb0JBQU0sT0FBTyxVQUFVLE1BQU0sSUFBSTtBQUNyQyxtQkFBTyxPQUFPO0FBQ2Qsa0JBQU0sV0FBVyxJQUFJLDJCQUEyQjtBQUNoRCxxQkFBUyxXQUFXLFNBQVMsS0FBSyxFQUFFO0FBQ3BDLGdCQUFJLE1BQU0sU0FBUyxRQUFRO0FBQ3ZCLHFCQUFPO0FBQ1gsaUJBQUssTUFBTSxLQUFLLFFBQVE7QUFBQSxVQUM1QixTQUFTLFNBQVM7QUFDbEIsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxXQUFXO0FBQ1AsY0FBSSxTQUFTO0FBQ2IsY0FBSSxZQUFZO0FBQ2hCLG1CQUFTLElBQUksR0FBRyxJQUFJLEtBQUssTUFBTSxRQUFRLEtBQUs7QUFDeEMsd0JBQVksS0FBSyxNQUFNLENBQUMsRUFBRTtBQUMxQixnQkFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLEVBQUUsU0FBUztBQUNwQyxnQkFBSSxNQUFNO0FBQ04sdUJBQVMsR0FBRyxNQUFNO0FBQ3RCLGdCQUFJLFdBQVc7QUFDWCx1QkFBUyxJQUFJLE1BQU07QUFDbkIsd0JBQVU7QUFBQSxZQUNkO0FBRUksd0JBQVU7QUFBQSxVQUNsQjtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsU0FBUztBQUNMLGdCQUFNLFNBQVM7QUFBQSxZQUNYLEdBQUcsTUFBTSxPQUFPO0FBQUEsWUFDaEIsT0FBTyxLQUFLLFNBQVM7QUFBQSxZQUNyQixVQUFVLENBQUM7QUFBQSxVQUNmO0FBQ0EsbUJBQVMsSUFBSSxHQUFHLElBQUksS0FBSyxNQUFNLFFBQVE7QUFDbkMsbUJBQU8sU0FBUyxLQUFLLEtBQUssTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDO0FBQy9DLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFDQSw4Q0FBd0MsT0FBTztBQUcvQyxNQUFNLDJCQUFOLGNBQXVDLFVBQVU7QUFBQSxRQUM3QyxZQUFZLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGdCQUFNLFlBQVksdUNBQXVDO0FBQ3pELGVBQUssUUFBUSxXQUFXO0FBQ3hCLGVBQUssUUFBUSxZQUFZO0FBQUEsUUFDN0I7QUFBQSxRQUNBLFdBQVc7QUFDUCxpQkFBTyxLQUFLLFdBQVcsU0FBUztBQUFBLFFBQ3BDO0FBQUEsUUFDQSxTQUFTLE9BQU87QUFDWixlQUFLLFdBQVcsV0FBVyxLQUFLO0FBQUEsUUFDcEM7QUFBQSxRQUNBLGtCQUFrQjtBQUNkLGlCQUFPLEdBQUcsS0FBSyxZQUFZLElBQUksTUFBTSxLQUFLLFdBQVcsU0FBUyxLQUFLLE9BQU87QUFBQSxRQUM5RTtBQUFBLFFBQ0EsU0FBUztBQUNMLGlCQUFPO0FBQUEsWUFDSCxHQUFHLE1BQU0sT0FBTztBQUFBLFlBQ2hCLE9BQU8sS0FBSyxTQUFTO0FBQUEsVUFDekI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFDUCxPQUFDLE1BQU07QUFDSCxrQkFBVSwyQkFBMkI7QUFBQSxNQUN6QyxHQUFHO0FBQ0gsK0JBQXlCLE9BQU87QUFHaEMsTUFBTSxXQUFOLGNBQXVCLFlBQVk7QUFBQSxRQUMvQixZQUFZLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQ1AsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsV0FBVztBQUFBLE1BQ3pCLEdBQUc7QUFDSCxlQUFTLE9BQU87QUFHaEIsTUFBTUgsT0FBTixjQUFrQixZQUFZO0FBQUEsUUFDMUIsWUFBWSxhQUFhLENBQUMsR0FBRztBQUN6QixnQkFBTSxVQUFVO0FBQ2hCLGVBQUssUUFBUSxXQUFXO0FBQ3hCLGVBQUssUUFBUSxZQUFZO0FBQUEsUUFDN0I7QUFBQSxNQUNKO0FBQ0EsYUFBT0E7QUFDUCxPQUFDLE1BQU07QUFDSCxrQkFBVSxNQUFNO0FBQUEsTUFDcEIsR0FBRztBQUNILE1BQUFBLEtBQUksT0FBTztBQUVYLE1BQU0sd0JBQU4sY0FBb0MsU0FBUyxVQUFVLEVBQUU7QUFBQSxRQUNyRCxZQUFZLEVBQUUsR0FBRyxXQUFXLElBQUksQ0FBQyxHQUFHO0FBQ2hDLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxZQUFZO0FBQ2pCLGVBQUssUUFBUTtBQUFBLFFBQ2pCO0FBQUEsUUFDQSxTQUFTO0FBQ0wsaUJBQU87QUFBQSxZQUNILEdBQUcsTUFBTSxPQUFPO0FBQUEsWUFDaEIsT0FBTyxLQUFLO0FBQUEsVUFDaEI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUNBLDRCQUFzQixPQUFPO0FBRTdCLE1BQU0sOEJBQU4sY0FBMEMsc0JBQXNCO0FBQUEsTUFDaEU7QUFDQSxrQ0FBNEIsT0FBTztBQUVuQyxNQUFNLHlCQUFOLGNBQXFDLGdCQUFnQjtBQUFBLFFBQ2pELFlBQVksRUFBRSxHQUFHLFdBQVcsSUFBSSxDQUFDLEdBQUc7QUFDaEMsZ0JBQU0sWUFBWSwyQkFBMkI7QUFBQSxRQUNqRDtBQUFBLFFBQ0EsV0FBVyxhQUFhO0FBQ3BCLGVBQUssV0FBVyxRQUFRLE9BQU8sYUFBYSxNQUFNLE1BQWdCLGdDQUFzQixhQUFhLFdBQVcsQ0FBQztBQUFBLFFBQ3JIO0FBQUEsUUFDQSxXQUFXLGFBQWE7QUFDcEIsZ0JBQU0sU0FBUyxZQUFZO0FBQzNCLGdCQUFNLE9BQU8sS0FBSyxXQUFXLGVBQWUsSUFBSSxXQUFXLE1BQU07QUFDakUsbUJBQVMsSUFBSSxHQUFHLElBQUksUUFBUTtBQUN4QixpQkFBSyxDQUFDLElBQUksWUFBWSxXQUFXLENBQUM7QUFDdEMsZUFBSyxXQUFXLFFBQVE7QUFBQSxRQUM1QjtBQUFBLE1BQ0o7QUFDQSw2QkFBdUIsT0FBTztBQUU5QixNQUFNLDRCQUFOLGNBQXdDLHVCQUF1QjtBQUFBLFFBQzNELFdBQVcsYUFBYTtBQUNwQixlQUFLLFdBQVcsZUFBeUIsZ0NBQXNCLGFBQWEsV0FBVztBQUN2RixjQUFJO0FBQ0EsaUJBQUssV0FBVyxRQUFrQixrQkFBUSxhQUFhLFdBQVc7QUFBQSxVQUN0RSxTQUNPLElBQUk7QUFDUCxpQkFBSyxTQUFTLEtBQUssc0NBQXNDLEVBQUUsb0JBQW9CO0FBQy9FLGlCQUFLLFdBQVcsUUFBa0Isa0JBQVEsU0FBUyxXQUFXO0FBQUEsVUFDbEU7QUFBQSxRQUNKO0FBQUEsUUFDQSxXQUFXLGFBQWE7QUFDcEIsZUFBSyxXQUFXLGVBQWUsSUFBSSxXQUFxQixrQkFBUSxlQUFlLFdBQVcsQ0FBQztBQUMzRixlQUFLLFdBQVcsUUFBUTtBQUFBLFFBQzVCO0FBQUEsTUFDSjtBQUNBLGdDQUEwQixPQUFPO0FBR2pDLE1BQU0sYUFBTixjQUF5QiwwQkFBMEI7QUFBQSxRQUMvQyxZQUFZLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQ1AsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsYUFBYTtBQUFBLE1BQzNCLEdBQUc7QUFDSCxpQkFBVyxPQUFPO0FBRWxCLE1BQU0sMkJBQU4sY0FBdUMsdUJBQXVCO0FBQUEsUUFDMUQsV0FBVyxhQUFhO0FBQ3BCLGVBQUssV0FBVyxRQUFrQixrQkFBUSxjQUFjLFdBQVc7QUFDbkUsZUFBSyxXQUFXLGVBQXlCLGdDQUFzQixhQUFhLFdBQVc7QUFBQSxRQUMzRjtBQUFBLFFBQ0EsV0FBVyxhQUFhO0FBQ3BCLGVBQUssV0FBVyxRQUFRO0FBQ3hCLGVBQUssV0FBVyxlQUFlLElBQUksV0FBcUIsa0JBQVEsZ0JBQWdCLFdBQVcsQ0FBQztBQUFBLFFBQ2hHO0FBQUEsTUFDSjtBQUNBLCtCQUF5QixPQUFPO0FBR2hDLE1BQU0sWUFBTixjQUF3Qix5QkFBeUI7QUFBQSxRQUM3QyxZQUFZLEVBQUUsR0FBRyxXQUFXLElBQUksQ0FBQyxHQUFHO0FBQ2hDLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQ1AsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsWUFBWTtBQUFBLE1BQzFCLEdBQUc7QUFDSCxnQkFBVSxPQUFPO0FBRWpCLE1BQU0saUNBQU4sY0FBNkMsdUJBQXVCO0FBQUEsUUFDaEUsV0FBVyxhQUFhO0FBQ3BCLGdCQUFNLGFBQWEsWUFBWSxPQUFPLFdBQVcsSUFBSSxZQUFZLE1BQU0sRUFBRSxTQUFTLFlBQVksTUFBTSxDQUFDO0FBQ3JHLGdCQUFNLFlBQVksSUFBSSxXQUFXLFVBQVU7QUFDM0MsbUJBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxRQUFRLEtBQUssR0FBRztBQUMxQyxzQkFBVSxDQUFDLElBQUksVUFBVSxJQUFJLENBQUM7QUFDOUIsc0JBQVUsSUFBSSxDQUFDLElBQUksVUFBVSxJQUFJLENBQUM7QUFDbEMsc0JBQVUsSUFBSSxDQUFDLElBQUk7QUFDbkIsc0JBQVUsSUFBSSxDQUFDLElBQUk7QUFBQSxVQUN2QjtBQUNBLGVBQUssV0FBVyxRQUFRLE9BQU8sYUFBYSxNQUFNLE1BQU0sSUFBSSxZQUFZLFVBQVUsQ0FBQztBQUFBLFFBQ3ZGO0FBQUEsUUFDQSxXQUFXLGFBQWE7QUFDcEIsZ0JBQU0sWUFBWSxZQUFZO0FBQzlCLGdCQUFNLGVBQWUsS0FBSyxXQUFXLGVBQWUsSUFBSSxXQUFXLFlBQVksQ0FBQztBQUNoRixtQkFBUyxJQUFJLEdBQUcsSUFBSSxXQUFXLEtBQUs7QUFDaEMsa0JBQU0sVUFBa0IsV0FBVyxZQUFZLFdBQVcsQ0FBQyxHQUFHLENBQUM7QUFDL0Qsa0JBQU0sV0FBVyxJQUFJLFdBQVcsT0FBTztBQUN2QyxnQkFBSSxTQUFTLFNBQVM7QUFDbEI7QUFDSixrQkFBTSxNQUFNLElBQUksU0FBUztBQUN6QixxQkFBUyxJQUFLLFNBQVMsU0FBUyxHQUFJLEtBQUssR0FBRztBQUN4QywyQkFBYSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksU0FBUyxDQUFDO0FBQUEsVUFDbEQ7QUFDQSxlQUFLLFdBQVcsUUFBUTtBQUFBLFFBQzVCO0FBQUEsTUFDSjtBQUNBLHFDQUErQixPQUFPO0FBR3RDLE1BQU0sa0JBQU4sY0FBOEIsK0JBQStCO0FBQUEsUUFDekQsWUFBWSxFQUFFLEdBQUcsV0FBVyxJQUFJLENBQUMsR0FBRztBQUNoQyxnQkFBTSxVQUFVO0FBQ2hCLGVBQUssUUFBUSxXQUFXO0FBQ3hCLGVBQUssUUFBUSxZQUFZO0FBQUEsUUFDN0I7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUNQLE9BQUMsTUFBTTtBQUNILGtCQUFVLGtCQUFrQjtBQUFBLE1BQ2hDLEdBQUc7QUFDSCxzQkFBZ0IsT0FBTztBQUd2QixNQUFNLGdCQUFOLGNBQTRCLHVCQUF1QjtBQUFBLFFBQy9DLFlBQVksYUFBYSxDQUFDLEdBQUc7QUFDekIsZ0JBQU0sVUFBVTtBQUNoQixlQUFLLFFBQVEsV0FBVztBQUN4QixlQUFLLFFBQVEsWUFBWTtBQUFBLFFBQzdCO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFDUCxPQUFDLE1BQU07QUFDSCxrQkFBVSxnQkFBZ0I7QUFBQSxNQUM5QixHQUFHO0FBQ0gsb0JBQWMsT0FBTztBQUdyQixNQUFNLGtCQUFOLGNBQThCLHVCQUF1QjtBQUFBLFFBQ2pELFlBQVksYUFBYSxDQUFDLEdBQUc7QUFDekIsZ0JBQU0sVUFBVTtBQUNoQixlQUFLLFFBQVEsV0FBVztBQUN4QixlQUFLLFFBQVEsWUFBWTtBQUFBLFFBQzdCO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFDUCxPQUFDLE1BQU07QUFDSCxrQkFBVSxrQkFBa0I7QUFBQSxNQUNoQyxHQUFHO0FBQ0gsc0JBQWdCLE9BQU87QUFHdkIsTUFBTSxnQkFBTixjQUE0Qix1QkFBdUI7QUFBQSxRQUMvQyxZQUFZLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQ1AsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsZ0JBQWdCO0FBQUEsTUFDOUIsR0FBRztBQUNILG9CQUFjLE9BQU87QUFHckIsTUFBTSxpQkFBTixjQUE2Qix1QkFBdUI7QUFBQSxRQUNoRCxZQUFZLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQ1AsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsaUJBQWlCO0FBQUEsTUFDL0IsR0FBRztBQUNILHFCQUFlLE9BQU87QUFHdEIsTUFBTSxZQUFOLGNBQXdCLHVCQUF1QjtBQUFBLFFBQzNDLFlBQVksYUFBYSxDQUFDLEdBQUc7QUFDekIsZ0JBQU0sVUFBVTtBQUNoQixlQUFLLFFBQVEsV0FBVztBQUN4QixlQUFLLFFBQVEsWUFBWTtBQUFBLFFBQzdCO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFDUCxPQUFDLE1BQU07QUFDSCxrQkFBVSxZQUFZO0FBQUEsTUFDMUIsR0FBRztBQUNILGdCQUFVLE9BQU87QUFHakIsTUFBTSxnQkFBTixjQUE0Qix1QkFBdUI7QUFBQSxRQUMvQyxZQUFZLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQ1AsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsZ0JBQWdCO0FBQUEsTUFDOUIsR0FBRztBQUNILG9CQUFjLE9BQU87QUFHckIsTUFBTSxnQkFBTixjQUE0Qix1QkFBdUI7QUFBQSxRQUMvQyxZQUFZLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQ1AsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsZ0JBQWdCO0FBQUEsTUFDOUIsR0FBRztBQUNILG9CQUFjLE9BQU87QUFHckIsTUFBTSxnQkFBTixjQUE0Qix1QkFBdUI7QUFBQSxRQUMvQyxZQUFZLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQ1AsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsZ0JBQWdCO0FBQUEsTUFDOUIsR0FBRztBQUNILG9CQUFjLE9BQU87QUFHckIsTUFBTSxrQkFBTixjQUE4Qix1QkFBdUI7QUFBQSxRQUNqRCxZQUFZLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQ1AsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsa0JBQWtCO0FBQUEsTUFDaEMsR0FBRztBQUNILHNCQUFnQixPQUFPO0FBR3ZCLE1BQU0sVUFBTixjQUFzQixjQUFjO0FBQUEsUUFDaEMsWUFBWSxFQUFFLE9BQU8sV0FBVyxHQUFHLFdBQVcsSUFBSSxDQUFDLEdBQUc7QUFDbEQsZ0JBQU0sVUFBVTtBQUNoQixlQUFLLE9BQU87QUFDWixlQUFLLFFBQVE7QUFDYixlQUFLLE1BQU07QUFDWCxlQUFLLE9BQU87QUFDWixlQUFLLFNBQVM7QUFDZCxlQUFLLFNBQVM7QUFDZCxjQUFJLE9BQU87QUFDUCxpQkFBSyxXQUFXLEtBQUs7QUFDckIsaUJBQUssV0FBVyxlQUFlLElBQUksV0FBVyxNQUFNLE1BQU07QUFDMUQscUJBQVMsSUFBSSxHQUFHLElBQUksTUFBTSxRQUFRO0FBQzlCLG1CQUFLLFdBQVcsYUFBYSxDQUFDLElBQUksTUFBTSxXQUFXLENBQUM7QUFBQSxVQUM1RDtBQUNBLGNBQUksV0FBVztBQUNYLGlCQUFLLFNBQVMsU0FBUztBQUN2QixpQkFBSyxXQUFXLGVBQWUsSUFBSSxXQUFXLEtBQUssU0FBUyxDQUFDO0FBQUEsVUFDakU7QUFDQSxlQUFLLFFBQVEsV0FBVztBQUN4QixlQUFLLFFBQVEsWUFBWTtBQUFBLFFBQzdCO0FBQUEsUUFDQSxXQUFXLGFBQWE7QUFDcEIsZUFBSyxXQUFXLE9BQU8sYUFBYSxNQUFNLE1BQWdCLGdDQUFzQixhQUFhLFdBQVcsQ0FBQyxDQUFDO0FBQUEsUUFDOUc7QUFBQSxRQUNBLFdBQVc7QUFDUCxnQkFBTSxNQUFNLEtBQUssU0FBUztBQUMxQixnQkFBTSxTQUFTLElBQUksWUFBWSxJQUFJLE1BQU07QUFDekMsZ0JBQU0sT0FBTyxJQUFJLFdBQVcsTUFBTTtBQUNsQyxtQkFBUyxJQUFJLEdBQUcsSUFBSSxJQUFJLFFBQVE7QUFDNUIsaUJBQUssQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDO0FBQzlCLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsU0FBUyxXQUFXO0FBQ2hCLGVBQUssT0FBTyxVQUFVLGVBQWU7QUFDckMsZUFBSyxRQUFRLFVBQVUsWUFBWSxJQUFJO0FBQ3ZDLGVBQUssTUFBTSxVQUFVLFdBQVc7QUFDaEMsZUFBSyxPQUFPLFVBQVUsWUFBWTtBQUNsQyxlQUFLLFNBQVMsVUFBVSxjQUFjO0FBQ3RDLGVBQUssU0FBUyxVQUFVLGNBQWM7QUFBQSxRQUMxQztBQUFBLFFBQ0EsU0FBUztBQUNMLGlCQUFRLElBQUksS0FBSyxLQUFLLElBQUksS0FBSyxNQUFNLEtBQUssUUFBUSxHQUFHLEtBQUssS0FBSyxLQUFLLE1BQU0sS0FBSyxRQUFRLEtBQUssTUFBTSxDQUFDO0FBQUEsUUFDdkc7QUFBQSxRQUNBLFdBQVcsYUFBYTtBQUNwQixnQkFBTSxTQUFTO0FBQ2YsZ0JBQU0sY0FBYyxPQUFPLEtBQUssV0FBVztBQUMzQyxjQUFJLGdCQUFnQixNQUFNO0FBQ3RCLGlCQUFLLFFBQVE7QUFDYjtBQUFBLFVBQ0o7QUFDQSxnQkFBTSxPQUFPLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRTtBQUN4QyxjQUFJLFFBQVE7QUFDUixpQkFBSyxPQUFPLE9BQU87QUFBQTtBQUVuQixpQkFBSyxPQUFPLE1BQU87QUFDdkIsZUFBSyxRQUFRLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRTtBQUN4QyxlQUFLLE1BQU0sU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFO0FBQ3RDLGVBQUssT0FBTyxTQUFTLFlBQVksQ0FBQyxHQUFHLEVBQUU7QUFDdkMsZUFBSyxTQUFTLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRTtBQUN6QyxlQUFLLFNBQVMsU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFO0FBQUEsUUFDN0M7QUFBQSxRQUNBLFNBQVMsV0FBVyxPQUFPO0FBQ3ZCLGNBQUksYUFBYSxPQUFPO0FBQ3BCLGtCQUFNLGNBQWMsSUFBSSxNQUFNLENBQUM7QUFDL0Isd0JBQVksQ0FBQyxJQUFZLFVBQVksS0FBSyxPQUFPLE1BQVMsS0FBSyxPQUFPLE9BQVMsS0FBSyxPQUFPLEtBQVEsQ0FBQztBQUNwRyx3QkFBWSxDQUFDLElBQVksVUFBVSxLQUFLLE9BQU8sQ0FBQztBQUNoRCx3QkFBWSxDQUFDLElBQVksVUFBVSxLQUFLLEtBQUssQ0FBQztBQUM5Qyx3QkFBWSxDQUFDLElBQVksVUFBVSxLQUFLLE1BQU0sQ0FBQztBQUMvQyx3QkFBWSxDQUFDLElBQVksVUFBVSxLQUFLLFFBQVEsQ0FBQztBQUNqRCx3QkFBWSxDQUFDLElBQVksVUFBVSxLQUFLLFFBQVEsQ0FBQztBQUNqRCx3QkFBWSxDQUFDLElBQUk7QUFDakIsbUJBQU8sWUFBWSxLQUFLLEVBQUU7QUFBQSxVQUM5QjtBQUNBLGlCQUFPLE1BQU0sU0FBUyxRQUFRO0FBQUEsUUFDbEM7QUFBQSxRQUNBLGtCQUFrQjtBQUNkLGlCQUFPLEdBQUcsS0FBSyxZQUFZLElBQUksTUFBTSxLQUFLLE9BQU8sRUFBRSxZQUFZLENBQUM7QUFBQSxRQUNwRTtBQUFBLFFBQ0EsU0FBUztBQUNMLGlCQUFPO0FBQUEsWUFDSCxHQUFHLE1BQU0sT0FBTztBQUFBLFlBQ2hCLE1BQU0sS0FBSztBQUFBLFlBQ1gsT0FBTyxLQUFLO0FBQUEsWUFDWixLQUFLLEtBQUs7QUFBQSxZQUNWLE1BQU0sS0FBSztBQUFBLFlBQ1gsUUFBUSxLQUFLO0FBQUEsWUFDYixRQUFRLEtBQUs7QUFBQSxVQUNqQjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQ0EsYUFBTztBQUNQLE9BQUMsTUFBTTtBQUNILGtCQUFVLFVBQVU7QUFBQSxNQUN4QixHQUFHO0FBQ0gsY0FBUSxPQUFPO0FBR2YsTUFBTSxrQkFBTixjQUE4QixRQUFRO0FBQUEsUUFDbEMsWUFBWSxhQUFhLENBQUMsR0FBRztBQUN6QixjQUFJO0FBQ0osZ0JBQU0sVUFBVTtBQUNoQixXQUFDLEtBQUssS0FBSyxpQkFBaUIsUUFBUSxPQUFPLFNBQVMsS0FBTSxLQUFLLGNBQWM7QUFDN0UsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLFFBQ0EsU0FBUyxXQUFXO0FBQ2hCLGdCQUFNLFNBQVMsU0FBUztBQUN4QixlQUFLLGNBQWMsVUFBVSxtQkFBbUI7QUFBQSxRQUNwRDtBQUFBLFFBQ0EsU0FBUztBQUNMLGlCQUFRLElBQUksS0FBSyxLQUFLLElBQUksS0FBSyxNQUFNLEtBQUssUUFBUSxHQUFHLEtBQUssS0FBSyxLQUFLLE1BQU0sS0FBSyxRQUFRLEtBQUssUUFBUSxLQUFLLFdBQVcsQ0FBQztBQUFBLFFBQ3pIO0FBQUEsUUFDQSxXQUFXLGFBQWE7QUFDcEIsY0FBSSxRQUFRO0FBQ1osY0FBSSxhQUFhO0FBQ2pCLGNBQUksaUJBQWlCO0FBQ3JCLGNBQUksZUFBZTtBQUNuQixjQUFJO0FBQ0osY0FBSSxpQkFBaUI7QUFDckIsY0FBSSxtQkFBbUI7QUFDdkIsY0FBSSxZQUFZLFlBQVksU0FBUyxDQUFDLE1BQU0sS0FBSztBQUM3Qyx5QkFBYSxZQUFZLFVBQVUsR0FBRyxZQUFZLFNBQVMsQ0FBQztBQUM1RCxvQkFBUTtBQUFBLFVBQ1osT0FDSztBQUNELGtCQUFNLFNBQVMsSUFBSSxPQUFPLFlBQVksWUFBWSxTQUFTLENBQUMsQ0FBQztBQUM3RCxnQkFBSSxNQUFNLE9BQU8sUUFBUSxDQUFDO0FBQ3RCLG9CQUFNLElBQUksTUFBTSxtQ0FBbUM7QUFDdkQseUJBQWE7QUFBQSxVQUNqQjtBQUNBLGNBQUksT0FBTztBQUNQLGdCQUFJLFdBQVcsUUFBUSxHQUFHLE1BQU07QUFDNUIsb0JBQU0sSUFBSSxNQUFNLG1DQUFtQztBQUN2RCxnQkFBSSxXQUFXLFFBQVEsR0FBRyxNQUFNO0FBQzVCLG9CQUFNLElBQUksTUFBTSxtQ0FBbUM7QUFBQSxVQUMzRCxPQUNLO0FBQ0QsZ0JBQUksYUFBYTtBQUNqQixnQkFBSSxxQkFBcUIsV0FBVyxRQUFRLEdBQUc7QUFDL0MsZ0JBQUksbUJBQW1CO0FBQ3ZCLGdCQUFJLHVCQUF1QixJQUFJO0FBQzNCLG1DQUFxQixXQUFXLFFBQVEsR0FBRztBQUMzQywyQkFBYTtBQUFBLFlBQ2pCO0FBQ0EsZ0JBQUksdUJBQXVCLElBQUk7QUFDM0IsaUNBQW1CLFdBQVcsVUFBVSxxQkFBcUIsQ0FBQztBQUM5RCwyQkFBYSxXQUFXLFVBQVUsR0FBRyxrQkFBa0I7QUFDdkQsa0JBQUssaUJBQWlCLFdBQVcsS0FBTyxpQkFBaUIsV0FBVztBQUNoRSxzQkFBTSxJQUFJLE1BQU0sbUNBQW1DO0FBQ3ZELGtCQUFJLFNBQVMsU0FBUyxpQkFBaUIsVUFBVSxHQUFHLENBQUMsR0FBRyxFQUFFO0FBQzFELGtCQUFJLE1BQU0sT0FBTyxRQUFRLENBQUM7QUFDdEIsc0JBQU0sSUFBSSxNQUFNLG1DQUFtQztBQUN2RCwrQkFBaUIsYUFBYTtBQUM5QixrQkFBSSxpQkFBaUIsV0FBVyxHQUFHO0FBQy9CLHlCQUFTLFNBQVMsaUJBQWlCLFVBQVUsR0FBRyxDQUFDLEdBQUcsRUFBRTtBQUN0RCxvQkFBSSxNQUFNLE9BQU8sUUFBUSxDQUFDO0FBQ3RCLHdCQUFNLElBQUksTUFBTSxtQ0FBbUM7QUFDdkQsbUNBQW1CLGFBQWE7QUFBQSxjQUNwQztBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQ0EsY0FBSSx3QkFBd0IsV0FBVyxRQUFRLEdBQUc7QUFDbEQsY0FBSSwwQkFBMEI7QUFDMUIsb0NBQXdCLFdBQVcsUUFBUSxHQUFHO0FBQ2xELGNBQUksMEJBQTBCLElBQUk7QUFDOUIsa0JBQU0sb0JBQW9CLElBQUksT0FBTyxJQUFJLFdBQVcsVUFBVSxxQkFBcUIsQ0FBQyxFQUFFO0FBQ3RGLGdCQUFJLE1BQU0sa0JBQWtCLFFBQVEsQ0FBQztBQUNqQyxvQkFBTSxJQUFJLE1BQU0sbUNBQW1DO0FBQ3ZELDJCQUFlLGtCQUFrQixRQUFRO0FBQ3pDLDZCQUFpQixXQUFXLFVBQVUsR0FBRyxxQkFBcUI7QUFBQSxVQUNsRTtBQUVJLDZCQUFpQjtBQUNyQixrQkFBUSxNQUFNO0FBQUEsWUFDVixLQUFNLGVBQWUsV0FBVztBQUM1Qix1QkFBUztBQUNULGtCQUFJLDBCQUEwQjtBQUMxQixzQkFBTSxJQUFJLE1BQU0sbUNBQW1DO0FBQ3ZEO0FBQUEsWUFDSixLQUFNLGVBQWUsV0FBVztBQUM1Qix1QkFBUztBQUNULGtCQUFJLDBCQUEwQixJQUFJO0FBQzlCLG9CQUFJLGlCQUFpQixLQUFLO0FBQzFCLHFCQUFLLFNBQVMsS0FBSyxNQUFNLGNBQWM7QUFDdkMsaUNBQWlCLE1BQU0saUJBQWlCLEtBQUs7QUFDN0MscUJBQUssU0FBUyxLQUFLLE1BQU0sY0FBYztBQUN2QyxpQ0FBaUIsT0FBUSxpQkFBaUIsS0FBSztBQUMvQyxxQkFBSyxjQUFjLEtBQUssTUFBTSxjQUFjO0FBQUEsY0FDaEQ7QUFDQTtBQUFBLFlBQ0osS0FBTSxlQUFlLFdBQVc7QUFDNUIsdUJBQVM7QUFDVCxrQkFBSSwwQkFBMEIsSUFBSTtBQUM5QixvQkFBSSxpQkFBaUIsS0FBSztBQUMxQixxQkFBSyxTQUFTLEtBQUssTUFBTSxjQUFjO0FBQ3ZDLGlDQUFpQixPQUFRLGlCQUFpQixLQUFLO0FBQy9DLHFCQUFLLGNBQWMsS0FBSyxNQUFNLGNBQWM7QUFBQSxjQUNoRDtBQUNBO0FBQUEsWUFDSixLQUFNLGVBQWUsV0FBVztBQUM1Qix1QkFBUztBQUNULGtCQUFJLDBCQUEwQixJQUFJO0FBQzlCLHNCQUFNLGlCQUFpQixNQUFPO0FBQzlCLHFCQUFLLGNBQWMsS0FBSyxNQUFNLGNBQWM7QUFBQSxjQUNoRDtBQUNBO0FBQUEsWUFDSjtBQUNJLG9CQUFNLElBQUksTUFBTSxtQ0FBbUM7QUFBQSxVQUMzRDtBQUNBLGdCQUFNLGNBQWMsT0FBTyxLQUFLLGNBQWM7QUFDOUMsY0FBSSxnQkFBZ0I7QUFDaEIsa0JBQU0sSUFBSSxNQUFNLG1DQUFtQztBQUN2RCxtQkFBUyxJQUFJLEdBQUcsSUFBSSxZQUFZLFFBQVEsS0FBSztBQUN6QyxvQkFBUSxHQUFHO0FBQUEsY0FDUCxLQUFLO0FBQ0QscUJBQUssT0FBTyxTQUFTLFlBQVksQ0FBQyxHQUFHLEVBQUU7QUFDdkM7QUFBQSxjQUNKLEtBQUs7QUFDRCxxQkFBSyxRQUFRLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRTtBQUN4QztBQUFBLGNBQ0osS0FBSztBQUNELHFCQUFLLE1BQU0sU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFO0FBQ3RDO0FBQUEsY0FDSixLQUFLO0FBQ0QscUJBQUssT0FBTyxTQUFTLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSTtBQUMzQztBQUFBLGNBQ0osS0FBSztBQUNELHFCQUFLLFNBQVMsU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFLElBQUk7QUFDN0M7QUFBQSxjQUNKLEtBQUs7QUFDRCxxQkFBSyxTQUFTLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRTtBQUN6QztBQUFBLGNBQ0o7QUFDSSxzQkFBTSxJQUFJLE1BQU0sbUNBQW1DO0FBQUEsWUFDM0Q7QUFBQSxVQUNKO0FBQ0EsY0FBSSxVQUFVLE9BQU87QUFDakIsa0JBQU0sV0FBVyxJQUFJLEtBQUssS0FBSyxNQUFNLEtBQUssT0FBTyxLQUFLLEtBQUssS0FBSyxNQUFNLEtBQUssUUFBUSxLQUFLLFFBQVEsS0FBSyxXQUFXO0FBQ2hILGlCQUFLLE9BQU8sU0FBUyxlQUFlO0FBQ3BDLGlCQUFLLFFBQVEsU0FBUyxZQUFZO0FBQ2xDLGlCQUFLLE1BQU0sU0FBUyxVQUFVO0FBQzlCLGlCQUFLLE9BQU8sU0FBUyxZQUFZO0FBQ2pDLGlCQUFLLFNBQVMsU0FBUyxjQUFjO0FBQ3JDLGlCQUFLLFNBQVMsU0FBUyxjQUFjO0FBQ3JDLGlCQUFLLGNBQWMsU0FBUyxtQkFBbUI7QUFBQSxVQUNuRDtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVMsV0FBVyxPQUFPO0FBQ3ZCLGNBQUksYUFBYSxPQUFPO0FBQ3BCLGtCQUFNLGNBQWMsQ0FBQztBQUNyQix3QkFBWSxLQUFhLFVBQVUsS0FBSyxNQUFNLENBQUMsQ0FBQztBQUNoRCx3QkFBWSxLQUFhLFVBQVUsS0FBSyxPQUFPLENBQUMsQ0FBQztBQUNqRCx3QkFBWSxLQUFhLFVBQVUsS0FBSyxLQUFLLENBQUMsQ0FBQztBQUMvQyx3QkFBWSxLQUFhLFVBQVUsS0FBSyxNQUFNLENBQUMsQ0FBQztBQUNoRCx3QkFBWSxLQUFhLFVBQVUsS0FBSyxRQUFRLENBQUMsQ0FBQztBQUNsRCx3QkFBWSxLQUFhLFVBQVUsS0FBSyxRQUFRLENBQUMsQ0FBQztBQUNsRCxnQkFBSSxLQUFLLGdCQUFnQixHQUFHO0FBQ3hCLDBCQUFZLEtBQUssR0FBRztBQUNwQiwwQkFBWSxLQUFhLFVBQVUsS0FBSyxhQUFhLENBQUMsQ0FBQztBQUFBLFlBQzNEO0FBQ0Esd0JBQVksS0FBSyxHQUFHO0FBQ3BCLG1CQUFPLFlBQVksS0FBSyxFQUFFO0FBQUEsVUFDOUI7QUFDQSxpQkFBTyxNQUFNLFNBQVMsUUFBUTtBQUFBLFFBQ2xDO0FBQUEsUUFDQSxTQUFTO0FBQ0wsaUJBQU87QUFBQSxZQUNILEdBQUcsTUFBTSxPQUFPO0FBQUEsWUFDaEIsYUFBYSxLQUFLO0FBQUEsVUFDdEI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFDUCxPQUFDLE1BQU07QUFDSCxrQkFBVSxrQkFBa0I7QUFBQSxNQUNoQyxHQUFHO0FBQ0gsc0JBQWdCLE9BQU87QUFHdkIsTUFBTSxPQUFOLGNBQW1CLFdBQVc7QUFBQSxRQUMxQixZQUFZLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQ1AsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsT0FBTztBQUFBLE1BQ3JCLEdBQUc7QUFDSCxXQUFLLE9BQU87QUFHWixNQUFNLFlBQU4sY0FBd0IsV0FBVztBQUFBLFFBQy9CLFlBQVksYUFBYSxDQUFDLEdBQUc7QUFDekIsZ0JBQU0sVUFBVTtBQUNoQixlQUFLLFFBQVEsV0FBVztBQUN4QixlQUFLLFFBQVEsWUFBWTtBQUFBLFFBQzdCO0FBQUEsTUFDSjtBQUNBLGFBQU87QUFDUCxPQUFDLE1BQU07QUFDSCxrQkFBVSxZQUFZO0FBQUEsTUFDMUIsR0FBRztBQUNILGdCQUFVLE9BQU87QUFHakIsTUFBTSxXQUFOLGNBQXVCLFdBQVc7QUFBQSxRQUM5QixZQUFZLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQ1AsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsV0FBVztBQUFBLE1BQ3pCLEdBQUc7QUFDSCxlQUFTLE9BQU87QUFHaEIsTUFBTSxXQUFOLGNBQXVCLFdBQVc7QUFBQSxRQUM5QixZQUFZLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLE1BQ0o7QUFDQSxhQUFPO0FBQ1AsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsV0FBVztBQUFBLE1BQ3pCLEdBQUc7QUFDSCxlQUFTLE9BQU87QUFHaEIsTUFBTSxPQUFOLGNBQW1CLFdBQVc7QUFBQSxRQUMxQixZQUFZLGFBQWEsQ0FBQyxHQUFHO0FBQ3pCLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxRQUFRLFdBQVc7QUFDeEIsZUFBSyxRQUFRLFlBQVk7QUFBQSxRQUM3QjtBQUFBLE1BQ0o7QUFDQSxXQUFLO0FBQ0wsT0FBQyxNQUFNO0FBQ0gsa0JBQVUsT0FBTztBQUFBLE1BQ3JCLEdBQUc7QUFDSCxXQUFLLE9BQU87QUFFWixNQUFNLE1BQU4sTUFBVTtBQUFBLFFBQ04sWUFBWSxFQUFFLE9BQU8sY0FBYyxXQUFXLE1BQU8sSUFBSSxDQUFDLEdBQUc7QUFDekQsZUFBSyxPQUFPO0FBQ1osZUFBSyxXQUFXO0FBQUEsUUFDcEI7QUFBQSxNQUNKO0FBRUEsTUFBTSxTQUFOLGNBQXFCLElBQUk7QUFBQSxRQUNyQixZQUFZLEVBQUUsUUFBUSxDQUFDLEdBQUcsR0FBRyxXQUFXLElBQUksQ0FBQyxHQUFHO0FBQzVDLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxRQUFRO0FBQUEsUUFDakI7QUFBQSxNQUNKO0FBRUEsTUFBTSxXQUFOLGNBQXVCLElBQUk7QUFBQSxRQUN2QixZQUFZLEVBQUUsUUFBUSxJQUFJLElBQUksR0FBRyxRQUFRLE9BQU8sR0FBRyxXQUFXLElBQUksQ0FBQyxHQUFHO0FBQ2xFLGdCQUFNLFVBQVU7QUFDaEIsZUFBSyxRQUFRO0FBQ2IsZUFBSyxRQUFRO0FBQUEsUUFDakI7QUFBQSxNQUNKO0FBRUEsTUFBTSxVQUFOLE1BQWM7QUFBQSxRQUNWLFlBQVksRUFBRSxPQUFPLFdBQVcsSUFBSSxDQUFDLEdBQUc7QUFDcEMsZUFBSyxXQUFxQixnQ0FBc0IsYUFBYSxJQUFJO0FBQUEsUUFDckU7QUFBQSxRQUNBLElBQUksT0FBTztBQUNQLGlCQUFPLEtBQUssU0FBUyxNQUFNLEVBQUU7QUFBQSxRQUNqQztBQUFBLFFBQ0EsSUFBSSxLQUFLLE9BQU87QUFDWixlQUFLLFdBQXFCLGdDQUFzQixhQUFhLEtBQUs7QUFBQSxRQUN0RTtBQUFBLFFBQ0EsUUFBUSxhQUFhLGFBQWEsYUFBYTtBQUMzQyxnQkFBTSxZQUFZLGNBQWM7QUFDaEMsZUFBSyxXQUFxQixnQ0FBc0IsYUFBYSxXQUFXLEVBQUUsU0FBUyxhQUFhLFNBQVM7QUFDekcsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxNQUFNLFVBQVU7QUFDWixpQkFBTyxLQUFLLFNBQVMsTUFBTSxFQUFFO0FBQUEsUUFDakM7QUFBQSxNQUNKO0FBQUE7QUFBQTs7O0FDcHZGQSxNQUFXLGNBTUE7QUFOWDtBQUFBO0FBQ0EsT0FBQyxTQUFVUyxlQUFjO0FBQ3JCLFFBQUFBLGNBQWFBLGNBQWEsVUFBVSxJQUFJLENBQUMsSUFBSTtBQUM3QyxRQUFBQSxjQUFhQSxjQUFhLEtBQUssSUFBSSxDQUFDLElBQUk7QUFDeEMsUUFBQUEsY0FBYUEsY0FBYSxRQUFRLElBQUksQ0FBQyxJQUFJO0FBQUEsTUFDL0MsR0FBRyxpQkFBaUIsZUFBZSxDQUFDLEVBQUU7QUFFdEMsT0FBQyxTQUFVQyxlQUFjO0FBQ3JCLFFBQUFBLGNBQWFBLGNBQWEsS0FBSyxJQUFJLENBQUMsSUFBSTtBQUN4QyxRQUFBQSxjQUFhQSxjQUFhLFNBQVMsSUFBSSxDQUFDLElBQUk7QUFDNUMsUUFBQUEsY0FBYUEsY0FBYSxhQUFhLElBQUksQ0FBQyxJQUFJO0FBQ2hELFFBQUFBLGNBQWFBLGNBQWEsV0FBVyxJQUFJLENBQUMsSUFBSTtBQUM5QyxRQUFBQSxjQUFhQSxjQUFhLFNBQVMsSUFBSSxDQUFDLElBQUk7QUFDNUMsUUFBQUEsY0FBYUEsY0FBYSxZQUFZLElBQUksQ0FBQyxJQUFJO0FBQy9DLFFBQUFBLGNBQWFBLGNBQWEsa0JBQWtCLElBQUksQ0FBQyxJQUFJO0FBQ3JELFFBQUFBLGNBQWFBLGNBQWEsWUFBWSxJQUFJLENBQUMsSUFBSTtBQUMvQyxRQUFBQSxjQUFhQSxjQUFhLFdBQVcsSUFBSSxDQUFDLElBQUk7QUFDOUMsUUFBQUEsY0FBYUEsY0FBYSxpQkFBaUIsSUFBSSxFQUFFLElBQUk7QUFDckQsUUFBQUEsY0FBYUEsY0FBYSxlQUFlLElBQUksRUFBRSxJQUFJO0FBQ25ELFFBQUFBLGNBQWFBLGNBQWEsaUJBQWlCLElBQUksRUFBRSxJQUFJO0FBQ3JELFFBQUFBLGNBQWFBLGNBQWEsZUFBZSxJQUFJLEVBQUUsSUFBSTtBQUNuRCxRQUFBQSxjQUFhQSxjQUFhLGdCQUFnQixJQUFJLEVBQUUsSUFBSTtBQUNwRCxRQUFBQSxjQUFhQSxjQUFhLFdBQVcsSUFBSSxFQUFFLElBQUk7QUFDL0MsUUFBQUEsY0FBYUEsY0FBYSxlQUFlLElBQUksRUFBRSxJQUFJO0FBQ25ELFFBQUFBLGNBQWFBLGNBQWEsZUFBZSxJQUFJLEVBQUUsSUFBSTtBQUNuRCxRQUFBQSxjQUFhQSxjQUFhLGVBQWUsSUFBSSxFQUFFLElBQUk7QUFDbkQsUUFBQUEsY0FBYUEsY0FBYSxpQkFBaUIsSUFBSSxFQUFFLElBQUk7QUFDckQsUUFBQUEsY0FBYUEsY0FBYSxTQUFTLElBQUksRUFBRSxJQUFJO0FBQzdDLFFBQUFBLGNBQWFBLGNBQWEsaUJBQWlCLElBQUksRUFBRSxJQUFJO0FBQ3JELFFBQUFBLGNBQWFBLGNBQWEsTUFBTSxJQUFJLEVBQUUsSUFBSTtBQUMxQyxRQUFBQSxjQUFhQSxjQUFhLFdBQVcsSUFBSSxFQUFFLElBQUk7QUFDL0MsUUFBQUEsY0FBYUEsY0FBYSxVQUFVLElBQUksRUFBRSxJQUFJO0FBQzlDLFFBQUFBLGNBQWFBLGNBQWEsVUFBVSxJQUFJLEVBQUUsSUFBSTtBQUM5QyxRQUFBQSxjQUFhQSxjQUFhLE1BQU0sSUFBSSxFQUFFLElBQUk7QUFDMUMsUUFBQUEsY0FBYUEsY0FBYSxNQUFNLElBQUksRUFBRSxJQUFJO0FBQUEsTUFDOUMsR0FBRyxpQkFBaUIsZUFBZSxDQUFDLEVBQUU7QUFBQTtBQUFBOzs7QUNuQ3RDLE1BQ0E7QUFEQTtBQUFBO0FBQUE7QUFDQSx5QkFBc0M7QUFBQTtBQUFBOzs7QUNEdEMsTUFDQUM7QUFEQTtBQUFBO0FBQUE7QUFDQSxNQUFBQSxvQkFBc0M7QUFBQTtBQUFBOzs7QUNEdEM7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBOzs7QUNxREEsV0FBUyxzQkFBc0IsVUFBVTtBQUNyQyxXQUFPO0FBQUEsTUFDSCxTQUFTLENBQUMsVUFBVSxNQUFNLFdBQVc7QUFBQSxNQUNyQyxPQUFPLENBQUMsVUFBVSxJQUFJLFNBQVMsRUFBRSxNQUFNLENBQUM7QUFBQSxJQUM1QztBQUFBLEVBQ0o7QUEyQk8sV0FBUyxpQkFBaUJDLE9BQU07QUFDbkMsWUFBUUEsT0FBTTtBQUFBLE1BQ1YsS0FBSyxhQUFhO0FBQ2QsZUFBTztBQUFBLE1BQ1gsS0FBSyxhQUFhO0FBQ2QsZUFBTztBQUFBLE1BQ1gsS0FBSyxhQUFhO0FBQ2QsZUFBTztBQUFBLE1BQ1gsS0FBSyxhQUFhO0FBQ2QsZUFBTztBQUFBLE1BQ1gsS0FBSyxhQUFhO0FBQ2QsZUFBTztBQUFBLE1BQ1gsS0FBSyxhQUFhO0FBQ2QsZUFBTztBQUFBLE1BQ1gsS0FBSyxhQUFhO0FBQ2QsZUFBTztBQUFBLE1BQ1gsS0FBSyxhQUFhO0FBQ2QsZUFBTztBQUFBLE1BQ1gsS0FBSyxhQUFhO0FBQ2QsZUFBTztBQUFBLE1BQ1gsS0FBSyxhQUFhO0FBQ2QsZUFBTztBQUFBLE1BQ1gsS0FBSyxhQUFhO0FBQ2QsZUFBTztBQUFBLE1BQ1gsS0FBSyxhQUFhO0FBQ2QsZUFBTztBQUFBLE1BQ1gsS0FBSyxhQUFhO0FBQ2QsZUFBTztBQUFBLE1BQ1gsS0FBSyxhQUFhO0FBQ2QsZUFBTztBQUFBLE1BQ1gsS0FBSyxhQUFhO0FBQ2QsZUFBTztBQUFBLE1BQ1gsS0FBSyxhQUFhO0FBQ2QsZUFBTztBQUFBLE1BQ1gsS0FBSyxhQUFhO0FBQ2QsZUFBTztBQUFBLE1BQ1gsS0FBSyxhQUFhO0FBQ2QsZUFBTztBQUFBLE1BQ1gsS0FBSyxhQUFhO0FBQ2QsZUFBTztBQUFBLE1BQ1gsS0FBSyxhQUFhO0FBQ2QsZUFBTztBQUFBLE1BQ1gsS0FBSyxhQUFhO0FBQ2QsZUFBTztBQUFBLE1BQ1gsS0FBSyxhQUFhO0FBQ2QsZUFBTztBQUFBLE1BQ1g7QUFDSSxlQUFPO0FBQUEsSUFDZjtBQUFBLEVBQ0o7QUF2SUEsTUFHYSxpQkFhQSxxQkFNQSx3QkFZQSx1QkFJQSw4QkFJQSxxQkFJQSx5QkFjQSx3QkFDQSx1QkFDQSw2QkFDQSwyQkFDQSw2QkFDQSwyQkFDQSw0QkFDQSx1QkFDQSwyQkFDQSwyQkFDQSwyQkFDQSw2QkFDQSxxQkFJQSw2QkFJQTtBQWhGYjtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ08sTUFBTSxrQkFBa0I7QUFBQSxRQUMzQixTQUFTLENBQUMsVUFBVSxpQkFBd0IsT0FBTyxPQUFPLE1BQU07QUFBQSxRQUNoRSxPQUFPLENBQUMsVUFBVTtBQUNkLGNBQUksVUFBVSxNQUFNO0FBQ2hCLG1CQUFPLElBQVcsS0FBSztBQUFBLFVBQzNCO0FBQ0EsZ0JBQU0sU0FBZ0IsUUFBUSxLQUFLO0FBQ25DLGNBQUksT0FBTyxPQUFPLE9BQU87QUFDckIsa0JBQU0sSUFBSSxNQUFNLE9BQU8sT0FBTyxLQUFLO0FBQUEsVUFDdkM7QUFDQSxpQkFBTyxPQUFPO0FBQUEsUUFDbEI7QUFBQSxNQUNKO0FBQ08sTUFBTSxzQkFBc0I7QUFBQSxRQUMvQixTQUFTLENBQUMsVUFBVSxNQUFNLFdBQVcsYUFBYSxjQUFjLElBQzFELE1BQU0sV0FBVyxTQUFTLElBQzFCLE1BQU0sV0FBVztBQUFBLFFBQ3ZCLE9BQU8sQ0FBQyxVQUFVLElBQVcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFBQSxNQUMxRDtBQUNPLE1BQU0seUJBQXlCO0FBQUEsUUFDbEMsU0FBUyxDQUFDLFVBQVUsTUFBTSxXQUFXO0FBQUEsUUFDckMsT0FBTyxDQUFDLFVBQVUsSUFBVyxXQUFXLEVBQUUsTUFBTSxDQUFDO0FBQUEsTUFDckQ7QUFTTyxNQUFNLHdCQUF3QjtBQUFBLFFBQ2pDLFNBQVMsQ0FBQyxVQUFVLE1BQU0sV0FBVztBQUFBLFFBQ3JDLE9BQU8sQ0FBQyxVQUFVLElBQVcsVUFBVSxFQUFFLFVBQVUsTUFBTSxDQUFDO0FBQUEsTUFDOUQ7QUFDTyxNQUFNLCtCQUErQjtBQUFBLFFBQ3hDLFNBQVMsQ0FBQyxVQUFVLE1BQU0sV0FBVyxTQUFTO0FBQUEsUUFDOUMsT0FBTyxDQUFDLFVBQVUsSUFBVyxpQkFBaUIsRUFBRSxNQUFNLENBQUM7QUFBQSxNQUMzRDtBQUNPLE1BQU0sc0JBQXNCO0FBQUEsUUFDL0IsU0FBUyxDQUFDLFVBQVUsTUFBTSxXQUFXO0FBQUEsUUFDckMsT0FBTyxDQUFDLFVBQVUsSUFBV0MsU0FBUSxFQUFFLE1BQU0sQ0FBQztBQUFBLE1BQ2xEO0FBQ08sTUFBTSwwQkFBMEI7QUFBQSxRQUNuQyxTQUFTLENBQUMsVUFBVSxNQUFNLFdBQVc7QUFBQSxRQUNyQyxPQUFPLENBQUMsVUFBVSxJQUFXLFlBQVksRUFBRSxVQUFVLE1BQU0sQ0FBQztBQUFBLE1BQ2hFO0FBV08sTUFBTSx5QkFBeUIsc0JBQTZCLFVBQVU7QUFDdEUsTUFBTSx3QkFBd0Isc0JBQTZCLFNBQVM7QUFDcEUsTUFBTSw4QkFBOEIsc0JBQTZCLGVBQWU7QUFDaEYsTUFBTSw0QkFBNEIsc0JBQTZCLGFBQWE7QUFDNUUsTUFBTSw4QkFBOEIsc0JBQTZCLGVBQWU7QUFDaEYsTUFBTSw0QkFBNEIsc0JBQTZCLGFBQWE7QUFDNUUsTUFBTSw2QkFBNkIsc0JBQTZCLGNBQWM7QUFDOUUsTUFBTSx3QkFBd0Isc0JBQTZCLFNBQVM7QUFDcEUsTUFBTSw0QkFBNEIsc0JBQTZCLGFBQWE7QUFDNUUsTUFBTSw0QkFBNEIsc0JBQTZCLGFBQWE7QUFDNUUsTUFBTSw0QkFBNEIsc0JBQTZCLGFBQWE7QUFDNUUsTUFBTSw4QkFBOEIsc0JBQTZCLGVBQWU7QUFDaEYsTUFBTSxzQkFBc0I7QUFBQSxRQUMvQixTQUFTLENBQUMsVUFBVSxNQUFNLE9BQU87QUFBQSxRQUNqQyxPQUFPLENBQUMsVUFBVSxJQUFXLFFBQVEsRUFBRSxXQUFXLE1BQU0sQ0FBQztBQUFBLE1BQzdEO0FBQ08sTUFBTSw4QkFBOEI7QUFBQSxRQUN2QyxTQUFTLENBQUMsVUFBVSxNQUFNLE9BQU87QUFBQSxRQUNqQyxPQUFPLENBQUMsVUFBVSxJQUFXLGdCQUFnQixFQUFFLFdBQVcsTUFBTSxDQUFDO0FBQUEsTUFDckU7QUFDTyxNQUFNLG1CQUFtQjtBQUFBLFFBQzVCLFNBQVMsTUFBTTtBQUFBLFFBQ2YsT0FBTyxNQUFNO0FBQ1QsaUJBQU8sSUFBVyxLQUFLO0FBQUEsUUFDM0I7QUFBQSxNQUNKO0FBQUE7QUFBQTs7O0FDckZPLFdBQVMsY0FBYyxRQUFRO0FBQ2xDLFFBQUksT0FBTyxXQUFXLGNBQWMsT0FBTyxXQUFXO0FBQ2xELFVBQUksT0FBTyxVQUFVLFNBQVMsT0FBTyxVQUFVLFNBQVM7QUFDcEQsZUFBTztBQUFBLE1BQ1gsT0FDSztBQUNELGVBQU8sY0FBYyxPQUFPLFNBQVM7QUFBQSxNQUN6QztBQUFBLElBQ0osT0FDSztBQUNELGFBQU8sQ0FBQyxFQUFFLFVBQVUsT0FBTyxXQUFXLFlBQVksV0FBVyxVQUFVLGFBQWE7QUFBQSxJQUN4RjtBQUFBLEVBQ0o7QUFDTyxXQUFTLGNBQWMsUUFBUTtBQUNsQyxRQUFJQztBQUNKLFFBQUksUUFBUTtBQUNSLFlBQU0sUUFBUSxPQUFPLGVBQWUsTUFBTTtBQUMxQyxZQUFNQSxNQUFLLFVBQVUsUUFBUSxVQUFVLFNBQVMsU0FBUyxNQUFNLGVBQWUsUUFBUUEsUUFBTyxTQUFTLFNBQVNBLElBQUcsaUJBQWlCLE9BQU87QUFDdEksZUFBTztBQUFBLE1BQ1g7QUFDQSxhQUFPLGNBQWMsS0FBSztBQUFBLElBQzlCO0FBQ0EsV0FBTztBQUFBLEVBQ1g7QUFDTyxXQUFTLGFBQWEsUUFBUSxRQUFRO0FBQ3pDLFFBQUksRUFBRSxVQUFVLFNBQVM7QUFDckIsYUFBTztBQUFBLElBQ1g7QUFDQSxRQUFJLE9BQU8sZUFBZSxPQUFPLFlBQVk7QUFDekMsYUFBTztBQUFBLElBQ1g7QUFDQSxVQUFNLEtBQUssSUFBSSxXQUFXLE1BQU07QUFDaEMsVUFBTSxLQUFLLElBQUksV0FBVyxNQUFNO0FBQ2hDLGFBQVMsSUFBSSxHQUFHLElBQUksT0FBTyxZQUFZLEtBQUs7QUFDeEMsVUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRztBQUNqQixlQUFPO0FBQUEsTUFDWDtBQUFBLElBQ0o7QUFDQSxXQUFPO0FBQUEsRUFDWDtBQXZDQTtBQUFBO0FBQUE7QUFBQTs7O0FDQUEsTUFHYTtBQUhiO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDTyxNQUFNLG1CQUFOLE1BQXVCO0FBQUEsUUFDMUIsY0FBYztBQUNWLGVBQUssUUFBUSxvQkFBSSxRQUFRO0FBQUEsUUFDN0I7QUFBQSxRQUNBLElBQUksUUFBUTtBQUNSLGlCQUFPLEtBQUssTUFBTSxJQUFJLE1BQU07QUFBQSxRQUNoQztBQUFBLFFBQ0EsSUFBSSxRQUFRLGNBQWMsT0FBTztBQUM3QixnQkFBTSxTQUFTLEtBQUssTUFBTSxJQUFJLE1BQU07QUFDcEMsY0FBSSxDQUFDLFFBQVE7QUFDVCxrQkFBTSxJQUFJLE1BQU0sMEJBQTBCLE9BQU8sVUFBVSxZQUFZLElBQUksVUFBVTtBQUFBLFVBQ3pGO0FBQ0EsY0FBSSxlQUFlLENBQUMsT0FBTyxRQUFRO0FBQy9CLGtCQUFNLElBQUksTUFBTSxXQUFXLE9BQU8sVUFBVSxZQUFZLElBQUksZ0VBQWdFO0FBQUEsVUFDaEk7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLE1BQU0sUUFBUTtBQUNWLGdCQUFNLFNBQVMsS0FBSyxJQUFJLE1BQU07QUFDOUIsY0FBSSxDQUFDLE9BQU8sUUFBUTtBQUNoQixtQkFBTyxTQUFTLEtBQUssT0FBTyxRQUFRLElBQUk7QUFBQSxVQUM1QztBQUFBLFFBQ0o7QUFBQSxRQUNBLGNBQWMsUUFBUTtBQUNsQixnQkFBTSxTQUFTO0FBQUEsWUFDWCxNQUFNLGFBQWE7QUFBQSxZQUNuQixPQUFPLENBQUM7QUFBQSxVQUNaO0FBQ0EsZ0JBQU0sZUFBZSxLQUFLLGlCQUFpQixNQUFNO0FBQ2pELGNBQUksY0FBYztBQUNkLG1CQUFPLE9BQU8sUUFBUSxZQUFZO0FBQ2xDLG1CQUFPLFFBQVEsT0FBTyxPQUFPLENBQUMsR0FBRyxPQUFPLE9BQU8sYUFBYSxLQUFLO0FBQUEsVUFDckU7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLE9BQU8sUUFBUSxVQUFVO0FBQ3JCLGdCQUFNLFNBQVMsS0FBSyxNQUFNLElBQUksTUFBTSxLQUFLLEtBQUssY0FBYyxNQUFNO0FBQ2xFLGdCQUFNLFlBQVksQ0FBQztBQUNuQixxQkFBVyxPQUFPLE9BQU8sT0FBTztBQUM1QixrQkFBTSxPQUFPLE9BQU8sTUFBTSxHQUFHO0FBQzdCLGtCQUFNLE9BQU8sV0FBVyxNQUFNO0FBQzlCLGdCQUFJO0FBQ0osZ0JBQUksT0FBUSxLQUFLLFNBQVUsVUFBVTtBQUNqQyxvQkFBTSxlQUFlLGFBQWEsS0FBSyxJQUFJO0FBQzNDLG9CQUFNLFdBQVcsaUJBQU8sWUFBWTtBQUNwQyxrQkFBSSxDQUFDLFVBQVU7QUFDWCxzQkFBTSxJQUFJLE1BQU0sa0NBQWtDLFlBQVksR0FBRztBQUFBLGNBQ3JFO0FBQ0EseUJBQVcsSUFBSSxTQUFTLEVBQUUsS0FBSyxDQUFDO0FBQUEsWUFDcEMsV0FDUyxjQUFjLEtBQUssSUFBSSxHQUFHO0FBQy9CLG9CQUFNLFdBQVcsSUFBSSxLQUFLLEtBQUs7QUFDL0IseUJBQVcsU0FBUyxTQUFTLElBQUk7QUFBQSxZQUNyQyxXQUNTLEtBQUssVUFBVTtBQUNwQixvQkFBTSxhQUFhLEtBQUssSUFBSSxLQUFLLElBQUk7QUFDckMsa0JBQUksV0FBVyxTQUFTLGFBQWEsUUFBUTtBQUN6QywyQkFBVyxJQUFXLElBQUksRUFBRSxLQUFLLENBQUM7QUFBQSxjQUN0QyxPQUNLO0FBQ0QsMkJBQVcsS0FBSyxPQUFPLEtBQUssTUFBTSxLQUFLO0FBQ3ZDLHlCQUFTLE9BQU87QUFBQSxjQUNwQjtBQUFBLFlBQ0osT0FDSztBQUNELHlCQUFXLElBQVcsSUFBSSxFQUFFLEtBQUssQ0FBQztBQUFBLFlBQ3RDO0FBQ0Esa0JBQU0sV0FBVyxDQUFDLENBQUMsS0FBSyxZQUFZLEtBQUssaUJBQWlCO0FBQzFELGdCQUFJLEtBQUssVUFBVTtBQUNmLHVCQUFTLE9BQU87QUFDaEIsb0JBQU0sWUFBWSxLQUFLLGFBQWEsUUFDdkJDLE9BQ0E7QUFDYix5QkFBVyxJQUFJLFVBQVU7QUFBQSxnQkFDckIsTUFBTTtBQUFBLGdCQUNOLE9BQU87QUFBQSxrQkFDSCxJQUFXLFNBQVM7QUFBQSxvQkFDaEI7QUFBQSxvQkFDQSxPQUFPO0FBQUEsa0JBQ1gsQ0FBQztBQUFBLGdCQUNMO0FBQUEsY0FDSixDQUFDO0FBQUEsWUFDTDtBQUNBLGdCQUFJLEtBQUssWUFBWSxRQUFRLEtBQUssWUFBWSxRQUFXO0FBQ3JELGtCQUFJLEtBQUssVUFBVTtBQUNmLG9CQUFJLE9BQU8sS0FBSyxTQUFTLFlBQVksY0FBYyxLQUFLLElBQUksR0FBRztBQUMzRCx3QkFBTSxZQUFZLEtBQUssV0FDVixjQUNBO0FBQ2IsNEJBQVUsS0FBSyxJQUFJLFVBQVU7QUFBQSxvQkFDekI7QUFBQSxvQkFDQTtBQUFBLG9CQUNBLFNBQVM7QUFBQSxzQkFDTCxVQUFVO0FBQUEsc0JBQ1YsV0FBVyxLQUFLO0FBQUEsb0JBQ3BCO0FBQUEsa0JBQ0osQ0FBQyxDQUFDO0FBQUEsZ0JBQ04sT0FDSztBQUNELHVCQUFLLE1BQU0sS0FBSyxJQUFJO0FBQ3BCLHdCQUFNLGFBQWEsQ0FBQyxDQUFDLEtBQUs7QUFDMUIsc0JBQUksUUFBUSxDQUFDLGFBQ1AsS0FBSyxJQUFJLEtBQUssTUFBTSxJQUFJLEVBQUUsU0FDMUI7QUFDTiwwQkFBUSxnQkFBZ0IsUUFBUSxNQUFNLFdBQVcsUUFBUSxNQUFNO0FBQy9ELDRCQUFVLEtBQUssSUFBVyxZQUFZO0FBQUEsb0JBQ2xDLE1BQU0sQ0FBQyxhQUFhLE9BQU87QUFBQSxvQkFDM0I7QUFBQSxvQkFDQSxTQUFTO0FBQUEsc0JBQ0wsVUFBVTtBQUFBLHNCQUNWLFdBQVcsS0FBSztBQUFBLG9CQUNwQjtBQUFBLG9CQUNBO0FBQUEsa0JBQ0osQ0FBQyxDQUFDO0FBQUEsZ0JBQ047QUFBQSxjQUNKLE9BQ0s7QUFDRCwwQkFBVSxLQUFLLElBQVcsWUFBWTtBQUFBLGtCQUNsQztBQUFBLGtCQUNBLFNBQVM7QUFBQSxvQkFDTCxVQUFVO0FBQUEsb0JBQ1YsV0FBVyxLQUFLO0FBQUEsa0JBQ3BCO0FBQUEsa0JBQ0EsT0FBTyxDQUFDLFFBQVE7QUFBQSxnQkFDcEIsQ0FBQyxDQUFDO0FBQUEsY0FDTjtBQUFBLFlBQ0osT0FDSztBQUNELHVCQUFTLFdBQVc7QUFDcEIsd0JBQVUsS0FBSyxRQUFRO0FBQUEsWUFDM0I7QUFBQSxVQUNKO0FBQ0Esa0JBQVEsT0FBTyxNQUFNO0FBQUEsWUFDakIsS0FBSyxhQUFhO0FBQ2QscUJBQU8sSUFBVyxTQUFTLEVBQUUsT0FBTyxXQUFXLE1BQU0sR0FBRyxDQUFDO0FBQUEsWUFDN0QsS0FBSyxhQUFhO0FBQ2QscUJBQU8sSUFBV0EsS0FBSSxFQUFFLE9BQU8sV0FBVyxNQUFNLEdBQUcsQ0FBQztBQUFBLFlBQ3hELEtBQUssYUFBYTtBQUNkLHFCQUFPLElBQVcsT0FBTyxFQUFFLE9BQU8sV0FBVyxNQUFNLEdBQUcsQ0FBQztBQUFBLFlBQzNEO0FBQ0ksb0JBQU0sSUFBSSxNQUFNLDhCQUE4QjtBQUFBLFVBQ3REO0FBQUEsUUFDSjtBQUFBLFFBQ0EsSUFBSSxRQUFRLFFBQVE7QUFDaEIsZUFBSyxNQUFNLElBQUksUUFBUSxNQUFNO0FBQzdCLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsaUJBQWlCLFFBQVE7QUFDckIsZ0JBQU0sU0FBUyxPQUFPLGVBQWUsTUFBTTtBQUMzQyxjQUFJLFFBQVE7QUFDUixrQkFBTSxTQUFTLEtBQUssTUFBTSxJQUFJLE1BQU07QUFDcEMsbUJBQU8sVUFBVSxLQUFLLGlCQUFpQixNQUFNO0FBQUEsVUFDakQ7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNKO0FBQUE7QUFBQTs7O0FDOUpBLE1BQ2E7QUFEYjtBQUFBO0FBQUE7QUFDTyxNQUFNLGdCQUFnQixJQUFJLGlCQUFpQjtBQUFBO0FBQUE7OztBQ0RsRCxNQUdhLFNBY0E7QUFqQmI7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNPLE1BQU0sVUFBVSxDQUFDQyxhQUFZLENBQUMsV0FBVztBQUM1QyxZQUFJO0FBQ0osWUFBSSxDQUFDLGNBQWMsSUFBSSxNQUFNLEdBQUc7QUFDNUIsbUJBQVMsY0FBYyxjQUFjLE1BQU07QUFDM0Msd0JBQWMsSUFBSSxRQUFRLE1BQU07QUFBQSxRQUNwQyxPQUNLO0FBQ0QsbUJBQVMsY0FBYyxJQUFJLE1BQU07QUFBQSxRQUNyQztBQUNBLGVBQU8sT0FBTyxRQUFRQSxRQUFPO0FBQUEsTUFDakM7QUFJTyxNQUFNLFVBQVUsQ0FBQ0EsYUFBWSxDQUFDLFFBQVEsZ0JBQWdCO0FBQ3pELFlBQUk7QUFDSixZQUFJLENBQUMsY0FBYyxJQUFJLE9BQU8sV0FBVyxHQUFHO0FBQ3hDLG1CQUFTLGNBQWMsY0FBYyxPQUFPLFdBQVc7QUFDdkQsd0JBQWMsSUFBSSxPQUFPLGFBQWEsTUFBTTtBQUFBLFFBQ2hELE9BQ0s7QUFDRCxtQkFBUyxjQUFjLElBQUksT0FBTyxXQUFXO0FBQUEsUUFDakQ7QUFDQSxjQUFNLGNBQWMsT0FBTyxPQUFPLENBQUMsR0FBR0EsUUFBTztBQUM3QyxZQUFJLE9BQU8sWUFBWSxTQUFTLFlBQVksQ0FBQyxZQUFZLFdBQVc7QUFDaEUsZ0JBQU1DLG9CQUE4QixpQkFBaUJELFNBQVEsSUFBSTtBQUNqRSxjQUFJLENBQUNDLG1CQUFrQjtBQUNuQixrQkFBTSxJQUFJLE1BQU0sOENBQThDLFdBQVcsUUFBUSxPQUFPLFlBQVksSUFBSSxFQUFFO0FBQUEsVUFDOUc7QUFDQSxzQkFBWSxZQUFZQTtBQUFBLFFBQzVCO0FBQ0EsZUFBTyxNQUFNLFdBQVcsSUFBSTtBQUFBLE1BQ2hDO0FBQUE7QUFBQTs7O0FDbkNBLE1BQWE7QUFBYjtBQUFBO0FBQU8sTUFBTSwyQkFBTixjQUF1QyxNQUFNO0FBQUEsUUFDaEQsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLFVBQVUsQ0FBQztBQUFBLFFBQ3BCO0FBQUEsTUFDSjtBQUFBO0FBQUE7OztBQ0xBO0FBQUE7QUFBQTtBQUFBO0FBQUE7OztBQ0FBLE1BTWE7QUFOYjtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTSxZQUFOLE1BQWdCO0FBQUEsUUFDbkIsT0FBTyxNQUFNLE1BQU0sUUFBUTtBQUN2QixnQkFBTSxhQUFvQixRQUFRLElBQUk7QUFDdEMsY0FBSSxXQUFXLE9BQU8sT0FBTztBQUN6QixrQkFBTSxJQUFJLE1BQU0sV0FBVyxPQUFPLEtBQUs7QUFBQSxVQUMzQztBQUNBLGdCQUFNLE1BQU0sS0FBSyxRQUFRLFdBQVcsUUFBUSxNQUFNO0FBQ2xELGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsT0FBTyxRQUFRLFlBQVksUUFBUTtBQUMvQixjQUFJQztBQUNKLGNBQUk7QUFDQSxnQkFBSSxjQUFjLE1BQU0sR0FBRztBQUN2QixvQkFBTSxRQUFRLElBQUksT0FBTztBQUN6QixxQkFBTyxNQUFNLFFBQVEsVUFBVTtBQUFBLFlBQ25DO0FBQ0Esa0JBQU0sU0FBUyxjQUFjLElBQUksTUFBTTtBQUN2QywwQkFBYyxNQUFNLE1BQU07QUFDMUIsZ0JBQUksZUFBZSxPQUFPO0FBQzFCLGdCQUFJLFdBQVcsZ0JBQXVCLGVBQWUsT0FBTyxTQUFTLGFBQWEsUUFBUTtBQUN0Riw2QkFBZSxJQUFXLFlBQVk7QUFBQSxnQkFDbEMsU0FBUztBQUFBLGtCQUNMLFVBQVU7QUFBQSxrQkFDVixXQUFXLFdBQVcsUUFBUTtBQUFBLGdCQUNsQztBQUFBLGdCQUNBLE9BQU8sT0FBTyxPQUFPLFdBQVc7QUFBQSxjQUNwQyxDQUFDO0FBQ0QseUJBQVcsT0FBTyxPQUFPLE9BQU87QUFDNUIsdUJBQU8sV0FBVyxHQUFHO0FBQUEsY0FDekI7QUFBQSxZQUNKO0FBQ0Esa0JBQU0scUJBQTRCLGNBQWMsQ0FBQyxHQUFHLFlBQVksWUFBWTtBQUM1RSxnQkFBSSxDQUFDLG1CQUFtQixVQUFVO0FBQzlCLG9CQUFNLElBQUkseUJBQXlCLDBCQUEwQixPQUFPLElBQUksaUJBQWlCLG1CQUFtQixPQUFPLEtBQUssRUFBRTtBQUFBLFlBQzlIO0FBQ0Esa0JBQU0sTUFBTSxJQUFJLE9BQU87QUFDdkIsZ0JBQUksY0FBYyxNQUFNLEdBQUc7QUFDdkIsa0JBQUksRUFBRSxXQUFXLFdBQVcsY0FBYyxNQUFNLFFBQVEsV0FBVyxXQUFXLEtBQUssSUFBSTtBQUNuRixzQkFBTSxJQUFJLE1BQU0sZ0ZBQWdGO0FBQUEsY0FDcEc7QUFDQSxvQkFBTSxXQUFXLE9BQU87QUFDeEIsa0JBQUksT0FBTyxhQUFhLFVBQVU7QUFDOUIsc0JBQU0sWUFBdUIsaUJBQWlCLFFBQVE7QUFDdEQsb0JBQUksQ0FBQyxXQUFXO0FBQ1osd0JBQU0sSUFBSSxNQUFNLGtEQUFrRCxPQUFPLElBQUksY0FBYztBQUFBLGdCQUMvRjtBQUNBLHVCQUFPLE9BQU8sS0FBSyxXQUFXLFdBQVcsT0FBTyxDQUFDLFlBQVksVUFBVSxRQUFRLE9BQU8sQ0FBQztBQUFBLGNBQzNGLE9BQ0s7QUFDRCx1QkFBTyxPQUFPLEtBQUssV0FBVyxXQUFXLE9BQU8sQ0FBQyxZQUFZLEtBQUssUUFBUSxTQUFTLFFBQVEsQ0FBQztBQUFBLGNBQ2hHO0FBQUEsWUFDSjtBQUNBLHVCQUFXLE9BQU8sT0FBTyxPQUFPO0FBQzVCLG9CQUFNLGtCQUFrQixtQkFBbUIsT0FBTyxHQUFHO0FBQ3JELGtCQUFJLENBQUMsaUJBQWlCO0FBQ2xCO0FBQUEsY0FDSjtBQUNBLG9CQUFNLGFBQWEsT0FBTyxNQUFNLEdBQUc7QUFDbkMsb0JBQU0saUJBQWlCLFdBQVc7QUFDbEMsa0JBQUksT0FBTyxtQkFBbUIsWUFBWSxjQUFjLGNBQWMsR0FBRztBQUNyRSxzQkFBTSxhQUFhQSxNQUFLLFdBQVcsZUFBZSxRQUFRQSxRQUFPLFNBQVNBLE1BQU0sY0FBYyxjQUFjLElBQ3RHLElBQUksZUFBZSxJQUNuQjtBQUNOLG9CQUFJLENBQUMsV0FBVztBQUNaLHdCQUFNLElBQUksTUFBTSxvQkFBb0I7QUFBQSxnQkFDeEM7QUFDQSxvQkFBSSxXQUFXLFVBQVU7QUFDckIsc0JBQUksV0FBVyxVQUFVO0FBQ3JCLDBCQUFNLFlBQVksV0FBVyxhQUFhLGFBQzdCLFdBQ0FDO0FBQ2IsMEJBQU0sVUFBVSxJQUFJLFVBQVU7QUFDOUIsNEJBQVEsYUFBYSxnQkFBZ0I7QUFDckMsMEJBQU0sYUFBb0IsUUFBUSxRQUFRLE1BQU0sS0FBSyxDQUFDO0FBQ3RELHdCQUFJLFdBQVcsV0FBVyxJQUFJO0FBQzFCLDRCQUFNLElBQUksTUFBTSxnQ0FBZ0MsV0FBVyxPQUFPLEtBQUssRUFBRTtBQUFBLG9CQUM3RTtBQUNBLHdCQUFJLEVBQUUsV0FBVyxXQUFXLE9BQU8sY0FBYyxNQUFNLFFBQVEsV0FBVyxPQUFPLFdBQVcsS0FBSyxJQUFJO0FBQ2pHLDRCQUFNLElBQUksTUFBTSxnRkFBZ0Y7QUFBQSxvQkFDcEc7QUFDQSwwQkFBTSxRQUFRLFdBQVcsT0FBTyxXQUFXO0FBQzNDLHdCQUFJLEdBQUcsSUFBSSxNQUFNLEtBQUssT0FBTyxDQUFDLFlBQVksVUFBVSxRQUFRLE9BQU8sQ0FBQztBQUFBLGtCQUN4RSxPQUNLO0FBQ0Qsd0JBQUksR0FBRyxJQUFJLE1BQU0sS0FBSyxpQkFBaUIsQ0FBQyxZQUFZLFVBQVUsUUFBUSxPQUFPLENBQUM7QUFBQSxrQkFDbEY7QUFBQSxnQkFDSixPQUNLO0FBQ0Qsc0JBQUksUUFBUTtBQUNaLHNCQUFJLFdBQVcsVUFBVTtBQUNyQix3QkFBSTtBQUNKLHdCQUFJLGNBQWMsY0FBYyxHQUFHO0FBQy9CLGdDQUFVLElBQUksZUFBZSxFQUFFLFNBQVMsRUFBRTtBQUFBLG9CQUM5QyxPQUNLO0FBQ0QsNEJBQU0sZUFBZSxhQUFhLGNBQWM7QUFDaEQsNEJBQU0sV0FBVyxpQkFBTyxZQUFZO0FBQ3BDLDBCQUFJLENBQUMsVUFBVTtBQUNYLDhCQUFNLElBQUksTUFBTSxlQUFlLFlBQVksNEJBQTRCO0FBQUEsc0JBQzNFO0FBQ0EsZ0NBQVUsSUFBSSxTQUFTO0FBQUEsb0JBQzNCO0FBQ0EsNEJBQVEsYUFBYSxNQUFNO0FBQzNCLDRCQUFlLFFBQVEsUUFBUSxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQUEsa0JBQ2pEO0FBQ0Esc0JBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQUEsZ0JBQ3RDO0FBQUEsY0FDSixPQUNLO0FBQ0Qsb0JBQUksV0FBVyxVQUFVO0FBQ3JCLHNCQUFJLENBQUMsTUFBTSxRQUFRLGVBQWUsR0FBRztBQUNqQywwQkFBTSxJQUFJLE1BQU0sdUZBQXVGO0FBQUEsa0JBQzNHO0FBQ0Esc0JBQUksR0FBRyxJQUFJLE1BQU0sS0FBSyxpQkFBaUIsQ0FBQyxZQUFZLEtBQUssUUFBUSxTQUFTLGNBQWMsQ0FBQztBQUFBLGdCQUM3RixPQUNLO0FBQ0Qsc0JBQUksR0FBRyxJQUFJLEtBQUssUUFBUSxpQkFBaUIsY0FBYztBQUFBLGdCQUMzRDtBQUFBLGNBQ0o7QUFBQSxZQUNKO0FBQ0EsbUJBQU87QUFBQSxVQUNYLFNBQ08sT0FBTztBQUNWLGdCQUFJLGlCQUFpQiwwQkFBMEI7QUFDM0Msb0JBQU0sUUFBUSxLQUFLLE9BQU8sSUFBSTtBQUFBLFlBQ2xDO0FBQ0Esa0JBQU07QUFBQSxVQUNWO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFBQTtBQUFBOzs7QUN2SUEsTUFLYTtBQUxiO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTSxnQkFBTixNQUFNLGVBQWM7QUFBQSxRQUN2QixPQUFPLFVBQVUsS0FBSztBQUNsQixjQUFJLGVBQXNCLFdBQVc7QUFDakMsbUJBQU8sSUFBSSxNQUFNLEtBQUs7QUFBQSxVQUMxQjtBQUNBLGlCQUFPLEtBQUssTUFBTSxHQUFHLEVBQUUsTUFBTSxLQUFLO0FBQUEsUUFDdEM7QUFBQSxRQUNBLE9BQU8sTUFBTSxLQUFLO0FBQ2QsY0FBSSxPQUFPLE9BQU8sUUFBUSxZQUFZLGNBQWMsR0FBRyxHQUFHO0FBQ3RELG1CQUFPLElBQUksTUFBTTtBQUFBLFVBQ3JCO0FBQ0EsY0FBSSxFQUFFLE9BQU8sT0FBTyxRQUFRLFdBQVc7QUFDbkMsa0JBQU0sSUFBSSxVQUFVLHVDQUF1QztBQUFBLFVBQy9EO0FBQ0EsZ0JBQU0sU0FBUyxJQUFJO0FBQ25CLGdCQUFNLFNBQVMsY0FBYyxJQUFJLE1BQU07QUFDdkMsd0JBQWMsTUFBTSxNQUFNO0FBQzFCLGNBQUksWUFBWSxDQUFDO0FBQ2pCLGNBQUksT0FBTyxVQUFVO0FBQ2pCLGdCQUFJLENBQUMsTUFBTSxRQUFRLEdBQUcsR0FBRztBQUNyQixvQkFBTSxJQUFJLFVBQVUsc0NBQXNDO0FBQUEsWUFDOUQ7QUFDQSxnQkFBSSxPQUFPLE9BQU8sYUFBYSxVQUFVO0FBQ3JDLG9CQUFNLFlBQXVCLGlCQUFpQixPQUFPLFFBQVE7QUFDN0Qsa0JBQUksQ0FBQyxXQUFXO0FBQ1osc0JBQU0sSUFBSSxNQUFNLGtEQUFrRCxPQUFPLElBQUksY0FBYztBQUFBLGNBQy9GO0FBQ0EsMEJBQVksSUFBSSxJQUFJLENBQUMsTUFBTSxVQUFVLE1BQU0sQ0FBQyxDQUFDO0FBQUEsWUFDakQsT0FDSztBQUNELDBCQUFZLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxVQUFVLEVBQUUsTUFBTSxPQUFPLFNBQVMsR0FBRyxNQUFNLFFBQVEsQ0FBQyxDQUFDO0FBQUEsWUFDekY7QUFBQSxVQUNKLE9BQ0s7QUFDRCx1QkFBVyxPQUFPLE9BQU8sT0FBTztBQUM1QixvQkFBTSxhQUFhLE9BQU8sTUFBTSxHQUFHO0FBQ25DLG9CQUFNLFVBQVUsSUFBSSxHQUFHO0FBQ3ZCLGtCQUFJLFlBQVksVUFDVCxXQUFXLGlCQUFpQixXQUMzQixPQUFPLFdBQVcsaUJBQWlCLFlBQVksT0FBTyxZQUFZLFlBQy9ELGFBQWEsS0FBSyxVQUFVLFdBQVcsWUFBWSxHQUFHLEtBQUssVUFBVSxPQUFPLENBQUMsR0FBSTtBQUN4RjtBQUFBLGNBQ0o7QUFDQSxvQkFBTSxXQUFXLGVBQWMsVUFBVSxZQUFZLEtBQUssUUFBUSxPQUFPO0FBQ3pFLGtCQUFJLE9BQU8sV0FBVyxZQUFZLFVBQVU7QUFDeEMsb0JBQUksV0FBVyxVQUFVO0FBQ3JCLHNCQUFJLENBQUMsV0FBVyxhQUNSLE9BQU8sV0FBVyxTQUFTLFlBQVksY0FBYyxXQUFXLElBQUksSUFBSTtBQUM1RSwwQkFBTSxRQUFRLENBQUM7QUFDZiwwQkFBTSxXQUFXLG9CQUEyQixPQUFPLFNBQVMsd0JBQXdCLFNBQVMsV0FBVyxNQUFNO0FBQzlHLDhCQUFVLEtBQUssSUFBVyxVQUFVO0FBQUEsc0JBQ2hDLFVBQVUsV0FBVztBQUFBLHNCQUNyQixTQUFTO0FBQUEsd0JBQ0wsVUFBVTtBQUFBLHdCQUNWLFdBQVcsV0FBVztBQUFBLHNCQUMxQjtBQUFBLHNCQUNBLEdBQUc7QUFBQSxvQkFDUCxDQUFDLENBQUM7QUFBQSxrQkFDTixPQUNLO0FBQ0QsOEJBQVUsS0FBSyxJQUFXLFlBQVk7QUFBQSxzQkFDbEMsVUFBVSxXQUFXO0FBQUEsc0JBQ3JCLFNBQVM7QUFBQSx3QkFDTCxVQUFVO0FBQUEsd0JBQ1YsV0FBVyxXQUFXO0FBQUEsc0JBQzFCO0FBQUEsc0JBQ0EsT0FBTyxTQUFTLFdBQVc7QUFBQSxvQkFDL0IsQ0FBQyxDQUFDO0FBQUEsa0JBQ047QUFBQSxnQkFDSixPQUNLO0FBQ0QsNEJBQVUsS0FBSyxJQUFXLFlBQVk7QUFBQSxvQkFDbEMsVUFBVSxXQUFXO0FBQUEsb0JBQ3JCLFNBQVM7QUFBQSxzQkFDTCxVQUFVO0FBQUEsc0JBQ1YsV0FBVyxXQUFXO0FBQUEsb0JBQzFCO0FBQUEsb0JBQ0EsT0FBTyxDQUFDLFFBQVE7QUFBQSxrQkFDcEIsQ0FBQyxDQUFDO0FBQUEsZ0JBQ047QUFBQSxjQUNKLFdBQ1MsV0FBVyxVQUFVO0FBQzFCLDRCQUFZLFVBQVUsT0FBTyxRQUFRO0FBQUEsY0FDekMsT0FDSztBQUNELDBCQUFVLEtBQUssUUFBUTtBQUFBLGNBQzNCO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFDQSxjQUFJO0FBQ0osa0JBQVEsT0FBTyxNQUFNO0FBQUEsWUFDakIsS0FBSyxhQUFhO0FBQ2QsMEJBQVksSUFBVyxTQUFTLEVBQUUsT0FBTyxVQUFVLENBQUM7QUFDcEQ7QUFBQSxZQUNKLEtBQUssYUFBYTtBQUNkLDBCQUFZLElBQVdDLEtBQUksRUFBRSxPQUFPLFVBQVUsQ0FBQztBQUMvQztBQUFBLFlBQ0osS0FBSyxhQUFhO0FBQ2Qsa0JBQUksQ0FBQyxVQUFVLENBQUMsR0FBRztBQUNmLHNCQUFNLElBQUksTUFBTSxXQUFXLE9BQU8sSUFBSSwyQ0FBMkM7QUFBQSxjQUNyRjtBQUNBLDBCQUFZLFVBQVUsQ0FBQztBQUN2QjtBQUFBLFVBQ1I7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLE9BQU8sVUFBVSxZQUFZLEtBQUssUUFBUSxTQUFTO0FBQy9DLGNBQUk7QUFDSixjQUFJLE9BQVEsV0FBVyxTQUFVLFVBQVU7QUFDdkMsa0JBQU0sWUFBWSxXQUFXO0FBQzdCLGdCQUFJLENBQUMsV0FBVztBQUNaLG9CQUFNLElBQUksTUFBTSxhQUFhLEdBQUcscUNBQXFDLGFBQWEsV0FBVyxJQUFJLENBQUMsZUFBZSxPQUFPLElBQUksR0FBRztBQUFBLFlBQ25JO0FBQ0EsZ0JBQUksV0FBVyxVQUFVO0FBQ3JCLGtCQUFJLENBQUMsTUFBTSxRQUFRLE9BQU8sR0FBRztBQUN6QixzQkFBTSxJQUFJLFVBQVUsOENBQThDO0FBQUEsY0FDdEU7QUFDQSxvQkFBTSxRQUFRLE1BQU0sS0FBSyxTQUFTLENBQUMsWUFBWSxVQUFVLE1BQU0sT0FBTyxDQUFDO0FBQ3ZFLG9CQUFNLFlBQVksV0FBVyxhQUFhLGFBQzdCLFdBQ0FBO0FBQ2IseUJBQVcsSUFBSSxVQUFVO0FBQUEsZ0JBQ3JCLE9BQU87QUFBQSxjQUNYLENBQUM7QUFBQSxZQUNMLE9BQ0s7QUFDRCx5QkFBVyxVQUFVLE1BQU0sT0FBTztBQUFBLFlBQ3RDO0FBQUEsVUFDSixPQUNLO0FBQ0QsZ0JBQUksV0FBVyxVQUFVO0FBQ3JCLGtCQUFJLENBQUMsTUFBTSxRQUFRLE9BQU8sR0FBRztBQUN6QixzQkFBTSxJQUFJLFVBQVUsOENBQThDO0FBQUEsY0FDdEU7QUFDQSxvQkFBTSxRQUFRLE1BQU0sS0FBSyxTQUFTLENBQUMsWUFBWSxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQ2xFLG9CQUFNLFlBQVksV0FBVyxhQUFhLGFBQzdCLFdBQ0FBO0FBQ2IseUJBQVcsSUFBSSxVQUFVO0FBQUEsZ0JBQ3JCLE9BQU87QUFBQSxjQUNYLENBQUM7QUFBQSxZQUNMLE9BQ0s7QUFDRCx5QkFBVyxLQUFLLE1BQU0sT0FBTztBQUFBLFlBQ2pDO0FBQUEsVUFDSjtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFBQTtBQUFBOzs7QUN6SkE7QUFBQTtBQUFBO0FBQUE7OztBQ0FBLE1BQ0FDLG1CQUdhO0FBSmI7QUFBQTtBQUFBO0FBQ0EsTUFBQUEsb0JBQXNDO0FBQ3RDO0FBQ0E7QUFDTyxNQUFNLGFBQU4sTUFBTSxZQUFXO0FBQUEsUUFDcEIsT0FBTyxVQUFVLEtBQUs7QUFDbEIsaUJBQU8sY0FBYyxVQUFVLEdBQUc7QUFBQSxRQUN0QztBQUFBLFFBQ0EsT0FBTyxNQUFNLE1BQU0sUUFBUTtBQUN2QixpQkFBTyxVQUFVLE1BQU0sTUFBTSxNQUFNO0FBQUEsUUFDdkM7QUFBQSxRQUNBLE9BQU8sU0FBUyxNQUFNO0FBQ2xCLGdCQUFNLE1BQU0sd0NBQXNCLGVBQWUsSUFBSSxJQUMvQyx3Q0FBc0IsY0FBYyxJQUFJLElBQ3hDLFlBQVcsVUFBVSxJQUFJO0FBQy9CLGdCQUFNLE1BQWEsUUFBUSxHQUFHO0FBQzlCLGNBQUksSUFBSSxXQUFXLElBQUk7QUFDbkIsa0JBQU0sSUFBSSxNQUFNLDZCQUE2QixJQUFJLE9BQU8sS0FBSyxFQUFFO0FBQUEsVUFDbkU7QUFDQSxpQkFBTyxJQUFJLE9BQU8sU0FBUztBQUFBLFFBQy9CO0FBQUEsTUFDSjtBQUFBO0FBQUE7OztBQ3JCQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTs7O0FDOENPLFdBQVMsV0FBVyxZQUFZLFFBQVEsS0FBSyxNQUFNO0FBQ3hELFFBQUksSUFBSSxVQUFVLFFBQVEsSUFBSSxJQUFJLElBQUksU0FBUyxTQUFTLE9BQU8sT0FBTyxPQUFPLHlCQUF5QixRQUFRLEdBQUcsSUFBSSxNQUFNO0FBQzNILFFBQUksT0FBTyxZQUFZLFlBQVksT0FBTyxRQUFRLGFBQWEsV0FBWSxLQUFJLFFBQVEsU0FBUyxZQUFZLFFBQVEsS0FBSyxJQUFJO0FBQUEsUUFDeEgsVUFBUyxJQUFJLFdBQVcsU0FBUyxHQUFHLEtBQUssR0FBRyxJQUFLLEtBQUksSUFBSSxXQUFXLENBQUMsRUFBRyxNQUFLLElBQUksSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxHQUFHLE1BQU07QUFDaEosV0FBTyxJQUFJLEtBQUssS0FBSyxPQUFPLGVBQWUsUUFBUSxLQUFLLENBQUMsR0FBRztBQUFBLEVBQzlEO0FBM0RBO0FBQUE7QUFBQTtBQUFBOzs7QUNxREEsV0FBUyxVQUFVLE9BQU9DLE9BQU07QUFDNUIsWUFBUUEsT0FBTTtBQUFBLE1BQ1YsS0FBSyxjQUFjO0FBQ2YsZUFBTyxPQUFPLFVBQVU7QUFBQSxNQUM1QixLQUFLLGNBQWM7QUFDZixlQUFPLE9BQU8sVUFBVTtBQUFBLE1BQzVCLEtBQUssY0FBYztBQUNmLGVBQU8sT0FBTyxVQUFVO0FBQUEsSUFDaEM7QUFDQSxXQUFPO0FBQUEsRUFDWDtBQUNBLFdBQVMsbUJBQW1CLE9BQU9BLE9BQU07QUFDckMsUUFBSSxDQUFDLFVBQVUsT0FBT0EsS0FBSSxHQUFHO0FBQ3pCLFlBQU0sSUFBSSxVQUFVLGlCQUFpQixjQUFjQSxLQUFJLENBQUMsRUFBRTtBQUFBLElBQzlEO0FBQUEsRUFDSjtBQUNBLFdBQVNDLGVBQWMsUUFBUTtBQUMzQixRQUFJLFVBQVUsT0FBTyxXQUFXO0FBQzVCLFVBQUksT0FBTyxVQUFVLFVBQVUsT0FBTyxVQUFVLFVBQVU7QUFDdEQsZUFBTztBQUFBLE1BQ1gsT0FDSztBQUNELGVBQU9BLGVBQWMsT0FBTyxTQUFTO0FBQUEsTUFDekM7QUFBQSxJQUNKLE9BQ0s7QUFDRCxhQUFPLENBQUMsRUFBRSxVQUFVLE9BQU8sVUFBVSxPQUFPO0FBQUEsSUFDaEQ7QUFBQSxFQUNKO0FBa1ZBLFdBQVMsZUFBZSxNQUFNO0FBQzFCLFVBQU0sY0FBYyxDQUFDO0FBQ3JCLFFBQUksS0FBSyxTQUFTO0FBQ2Qsa0JBQVksS0FBSyxJQUFJLGtCQUFrQixLQUFLLE9BQU8sQ0FBQztBQUFBLElBQ3hEO0FBQ0EsUUFBSSxLQUFLLFNBQVMsY0FBYyxVQUFVLEtBQUssU0FBUyxjQUFjLEtBQUs7QUFDdkUsVUFBSSxLQUFLLGlCQUFpQixVQUFhLEtBQUssaUJBQWlCLFFBQVc7QUFDcEUsb0JBQVksS0FBSyxJQUFJLG9CQUFvQixLQUFLLGNBQWMsS0FBSyxZQUFZLENBQUM7QUFBQSxNQUNsRjtBQUNBLFVBQUksS0FBSyxpQkFBaUIsVUFBYSxLQUFLLGlCQUFpQixRQUFXO0FBQ3BFLG9CQUFZLEtBQUssSUFBSSxvQkFBb0IsS0FBSyxjQUFjLEtBQUssWUFBWSxDQUFDO0FBQUEsTUFDbEY7QUFDQSxVQUFJLEtBQUssZ0JBQWdCLFFBQVc7QUFDaEMsb0JBQVksS0FBSyxJQUFJLHNCQUFzQixLQUFLLFdBQVcsQ0FBQztBQUFBLE1BQ2hFO0FBQUEsSUFDSjtBQUNBLFFBQUksS0FBSyxTQUFTLGNBQWMsVUFBVSxLQUFLLFlBQVksS0FBSyxTQUFTLGNBQWMsS0FBSztBQUN4RixVQUFJLEtBQUssV0FBVyxVQUFhLEtBQUssY0FBYyxVQUFhLEtBQUssY0FBYyxRQUFXO0FBQzNGLG9CQUFZLEtBQUssSUFBSSxpQkFBaUIsS0FBSyxRQUFRLEtBQUssV0FBVyxLQUFLLFNBQVMsQ0FBQztBQUFBLE1BQ3RGO0FBQUEsSUFDSjtBQUNBLFdBQU87QUFBQSxFQUNYO0FBemJBLE1BSU0sV0FVQSxnQkFPQSxhQU1BLGlCQUdBLGlCQU9BLFVBUUYsZUFzQ0UsbUJBeUNBLGdCQUNBQyxnQkFFQSxtQkFlQSxxQkFlQSxxQkFlQSxrQkEwQkEsdUJBWUEsZUE4QkEsZ0JBd0ZBLFlBa0hBO0FBMWJOLE1BQUFDLGlCQUFBO0FBQUE7QUFJQSxNQUFNLFlBQU4sY0FBd0IsTUFBTTtBQUFBLFFBQzFCLFlBQVksU0FBUyxZQUFZO0FBQzdCLGdCQUFNLGFBQ0EsR0FBRyxPQUFPLGdEQUNWLE9BQU87QUFDYixlQUFLLFVBQVU7QUFDZixlQUFLLGFBQWE7QUFBQSxRQUN0QjtBQUFBLE1BQ0o7QUFFQSxNQUFNLGlCQUFOLGNBQTZCLFVBQVU7QUFBQSxRQUNuQyxZQUFZLFFBQVEsU0FBUyxZQUFZO0FBQ3JDLGdCQUFNLFNBQVMsVUFBVTtBQUN6QixlQUFLLFNBQVM7QUFBQSxRQUNsQjtBQUFBLE1BQ0o7QUFFQSxNQUFNLGNBQU4sY0FBMEIsZUFBZTtBQUFBLFFBQ3JDLFlBQVksUUFBUSxTQUFTLFlBQVk7QUFDckMsZ0JBQU0sUUFBUSwwQkFBMEIsT0FBTyxPQUFPLElBQUksYUFBYSxPQUFPLElBQUksVUFBVTtBQUFBLFFBQ2hHO0FBQUEsTUFDSjtBQUVBLE1BQU0sa0JBQU4sY0FBOEIsVUFBVTtBQUFBLE1BQ3hDO0FBRUEsTUFBTSxrQkFBTixjQUE4QixVQUFVO0FBQUEsUUFDcEMsWUFBWSxZQUFZLFNBQVMsWUFBWTtBQUN6QyxnQkFBTSx3QkFBd0IsVUFBVSxhQUFhLE9BQU8sSUFBSSxVQUFVO0FBQzFFLGVBQUssYUFBYTtBQUFBLFFBQ3RCO0FBQUEsTUFDSjtBQUVBLE1BQU0sV0FBTixjQUF1QixZQUFZO0FBQUEsUUFDL0IsWUFBWSxRQUFRLE1BQU0sU0FBUyxDQUFDLEdBQUc7QUFDbkMsZ0JBQU0sUUFBUSxtQ0FBbUM7QUFDakQsZUFBSyxPQUFPO0FBQ1osZUFBSyxTQUFTO0FBQUEsUUFDbEI7QUFBQSxNQUNKO0FBR0EsT0FBQyxTQUFVQyxnQkFBZTtBQUN0QixRQUFBQSxlQUFjQSxlQUFjLEtBQUssSUFBSSxDQUFDLElBQUk7QUFDMUMsUUFBQUEsZUFBY0EsZUFBYyxTQUFTLElBQUksQ0FBQyxJQUFJO0FBQzlDLFFBQUFBLGVBQWNBLGVBQWMsUUFBUSxJQUFJLENBQUMsSUFBSTtBQUM3QyxRQUFBQSxlQUFjQSxlQUFjLFFBQVEsSUFBSSxDQUFDLElBQUk7QUFBQSxNQUNqRCxHQUFHLGtCQUFrQixnQkFBZ0IsQ0FBQyxFQUFFO0FBZ0N4QyxNQUFNLG9CQUFOLE1BQXdCO0FBQUEsUUFDcEIsY0FBYztBQUNWLGVBQUssUUFBUSxvQkFBSSxJQUFJO0FBQUEsUUFDekI7QUFBQSxRQUNBLElBQUksUUFBUTtBQUNSLGlCQUFPLEtBQUssTUFBTSxJQUFJLE1BQU0sS0FBSyxDQUFDLENBQUMsS0FBSyxpQkFBaUIsTUFBTTtBQUFBLFFBQ25FO0FBQUEsUUFDQSxJQUFJLFFBQVE7QUFDUixnQkFBTSxTQUFTLEtBQUssTUFBTSxJQUFJLE1BQU0sS0FBSyxLQUFLLGlCQUFpQixNQUFNO0FBQ3JFLGNBQUksQ0FBQyxRQUFRO0FBQ1Qsa0JBQU0sSUFBSSxNQUFNLHNDQUFzQztBQUFBLFVBQzFEO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxPQUFPLFFBQVE7QUFDWCxnQkFBTSxTQUFTLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDM0IsZ0JBQU0sZUFBZSxLQUFLLGlCQUFpQixNQUFNO0FBQ2pELGNBQUksY0FBYztBQUNkLG1CQUFPLE9BQU8sUUFBUSxZQUFZO0FBQ2xDLG1CQUFPLFFBQVEsQ0FBQztBQUNoQix1QkFBVyxRQUFRLGFBQWEsT0FBTztBQUNuQyxxQkFBTyxNQUFNLElBQUksSUFBSSxPQUFPLE9BQU8sQ0FBQyxHQUFHLGFBQWEsTUFBTSxJQUFJLENBQUM7QUFBQSxZQUNuRTtBQUFBLFVBQ0o7QUFDQSxpQkFBTyxTQUFTO0FBQ2hCLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsSUFBSSxRQUFRLFFBQVE7QUFDaEIsZUFBSyxNQUFNLElBQUksUUFBUSxNQUFNO0FBQzdCLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsaUJBQWlCLFFBQVE7QUFDckIsZ0JBQU0sU0FBUyxPQUFPO0FBQ3RCLGNBQUksUUFBUTtBQUNSLGtCQUFNLFNBQVMsS0FBSyxNQUFNLElBQUksTUFBTTtBQUNwQyxtQkFBTyxVQUFVLEtBQUssaUJBQWlCLE1BQU07QUFBQSxVQUNqRDtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFFQSxNQUFNLGlCQUFpQjtBQUN2QixNQUFNRixpQkFBZ0IsSUFBSSxrQkFBa0I7QUFFNUMsTUFBTSxvQkFBTixNQUF3QjtBQUFBLFFBQ3BCLFlBQVksU0FBUztBQUNqQixlQUFLLFVBQVUsSUFBSSxPQUFPLE9BQU87QUFBQSxRQUNyQztBQUFBLFFBQ0EsU0FBUyxPQUFPO0FBQ1osZ0JBQU0sVUFBVSxJQUFJLE9BQU8sS0FBSyxRQUFRLFFBQVEsS0FBSyxRQUFRLEtBQUs7QUFDbEUsY0FBSSxPQUFPLFVBQVUsVUFBVTtBQUMzQixrQkFBTSxJQUFJLGdCQUFnQiwrQkFBK0I7QUFBQSxVQUM3RDtBQUNBLGNBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxHQUFHO0FBQ3RCLGtCQUFNLElBQUksZ0JBQWdCLG1DQUFtQyxRQUFRLFNBQVMsQ0FBQyxHQUFHO0FBQUEsVUFDdEY7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLE1BQU0sc0JBQU4sTUFBMEI7QUFBQSxRQUN0QixZQUFZRyxPQUFNLE9BQU8sV0FBV0MsT0FBTSxPQUFPLFdBQVc7QUFDeEQsZUFBSyxNQUFNRDtBQUNYLGVBQUssTUFBTUM7QUFBQSxRQUNmO0FBQUEsUUFDQSxTQUFTLE9BQU87QUFDWiw2QkFBbUIsT0FBTyxjQUFjLE1BQU07QUFDOUMsY0FBSSxFQUFFLEtBQUssT0FBTyxTQUFTLFNBQVMsS0FBSyxNQUFNO0FBQzNDLGtCQUFNRCxPQUFNLEtBQUssUUFBUSxPQUFPLFlBQVksUUFBUSxLQUFLO0FBQ3pELGtCQUFNQyxPQUFNLEtBQUssUUFBUSxPQUFPLFlBQVksUUFBUSxLQUFLO0FBQ3pELGtCQUFNLElBQUksZ0JBQWdCLG9DQUFvQ0QsSUFBRyxJQUFJQyxJQUFHLEdBQUc7QUFBQSxVQUMvRTtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsTUFBTSxzQkFBTixNQUEwQjtBQUFBLFFBQ3RCLFlBQVlELE9BQU0sT0FBTyxXQUFXQyxPQUFNLE9BQU8sV0FBVztBQUN4RCxlQUFLLE1BQU1EO0FBQ1gsZUFBSyxNQUFNQztBQUFBLFFBQ2Y7QUFBQSxRQUNBLFNBQVMsT0FBTztBQUNaLDZCQUFtQixPQUFPLGNBQWMsTUFBTTtBQUM5QyxjQUFJLEVBQUUsS0FBSyxNQUFNLFNBQVMsUUFBUSxLQUFLLE1BQU07QUFDekMsa0JBQU1ELE9BQU0sS0FBSyxRQUFRLE9BQU8sWUFBWSxRQUFRLEtBQUs7QUFDekQsa0JBQU1DLE9BQU0sS0FBSyxRQUFRLE9BQU8sWUFBWSxRQUFRLEtBQUs7QUFDekQsa0JBQU0sSUFBSSxnQkFBZ0Isb0NBQW9DRCxJQUFHLElBQUlDLElBQUcsR0FBRztBQUFBLFVBQy9FO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNLG1CQUFOLE1BQXVCO0FBQUEsUUFDbkIsWUFBWSxRQUFRLFdBQVcsV0FBVztBQUN0QyxlQUFLLFNBQVM7QUFDZCxlQUFLLFlBQVk7QUFDakIsZUFBSyxZQUFZO0FBQUEsUUFDckI7QUFBQSxRQUNBLFNBQVMsT0FBTztBQUNaLGNBQUksS0FBSyxXQUFXLFFBQVc7QUFDM0IsZ0JBQUksTUFBTSxXQUFXLEtBQUssUUFBUTtBQUM5QixvQkFBTSxJQUFJLGdCQUFnQixnQ0FBZ0MsS0FBSyxNQUFNLEdBQUc7QUFBQSxZQUM1RTtBQUNBO0FBQUEsVUFDSjtBQUNBLGNBQUksS0FBSyxjQUFjLFFBQVc7QUFDOUIsZ0JBQUksTUFBTSxTQUFTLEtBQUssV0FBVztBQUMvQixvQkFBTSxJQUFJLGdCQUFnQixrQ0FBa0MsS0FBSyxTQUFTLEdBQUc7QUFBQSxZQUNqRjtBQUFBLFVBQ0o7QUFDQSxjQUFJLEtBQUssY0FBYyxRQUFXO0FBQzlCLGdCQUFJLE1BQU0sU0FBUyxLQUFLLFdBQVc7QUFDL0Isb0JBQU0sSUFBSSxnQkFBZ0Isa0NBQWtDLEtBQUssU0FBUyxHQUFHO0FBQUEsWUFDakY7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNLHdCQUFOLE1BQTRCO0FBQUEsUUFDeEIsWUFBWSxhQUFhO0FBQ3JCLGVBQUssY0FBYztBQUFBLFFBQ3ZCO0FBQUEsUUFDQSxTQUFTLE9BQU87QUFDWiw2QkFBbUIsT0FBTyxjQUFjLE1BQU07QUFDOUMsY0FBSSxDQUFDLEtBQUssWUFBWSxTQUFTLEtBQUssR0FBRztBQUNuQyxrQkFBTSxJQUFJLGdCQUFnQix3QkFBd0IsS0FBSyxZQUFZLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRTtBQUFBLFVBQ3hHO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNLGdCQUFOLE1BQW9CO0FBQUEsUUFDaEIsT0FBTyxZQUFZLE1BQU0sWUFBWTtBQUNqQyxnQkFBTSxTQUFTLE1BQU0sUUFBUSxJQUFJLElBQUksT0FBTyxDQUFDLElBQUk7QUFDakQscUJBQVcsU0FBUyxRQUFRO0FBQ3hCLHVCQUFXLGNBQWMsV0FBVyxhQUFhO0FBQzdDLGtCQUFJLHNCQUFzQixvQkFBb0IsV0FBVyxVQUFVO0FBQy9ELDJCQUFXLFNBQVMsSUFBSTtBQUFBLGNBQzVCLE9BQ0s7QUFDRCwyQkFBVyxTQUFTLEtBQUs7QUFBQSxjQUM3QjtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLFFBQ0EsT0FBTyxXQUFXLE9BQU8sWUFBWTtBQUNqQyxjQUFJLFdBQVcsWUFBWSxDQUFDLE1BQU0sUUFBUSxLQUFLLEdBQUc7QUFDOUMsa0JBQU0sSUFBSSxVQUFVLHFCQUFxQjtBQUFBLFVBQzdDO0FBQ0EsY0FBSSxPQUFPLFdBQVcsU0FBUyxVQUFVO0FBQ3JDLGtCQUFNLFNBQVMsTUFBTSxRQUFRLEtBQUssSUFBSSxRQUFRLENBQUMsS0FBSztBQUNwRCx1QkFBVyxLQUFLLFFBQVE7QUFDcEIsaUNBQW1CLEdBQUcsV0FBVyxJQUFJO0FBQUEsWUFDekM7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLFFBQ0EsT0FBTyxnQkFBZ0IsUUFBUSxPQUFPLGdCQUFnQjtBQUNsRCxpQkFBTyxFQUFFLEdBQUcsT0FBTyxNQUFNLGNBQWMsR0FBRyxHQUFHLE9BQU8sTUFBTSxJQUFJLEVBQUU7QUFBQSxRQUNwRTtBQUFBLE1BQ0o7QUFFQSxNQUFNLGlCQUFOLGNBQTZCLGNBQWM7QUFBQSxRQUN2QyxPQUFPLFVBQVUsS0FBS0MsVUFBUyxVQUFVLE9BQU87QUFDNUMsZ0JBQU0sT0FBTyxLQUFLLE9BQU8sS0FBS0EsUUFBTztBQUNyQyxpQkFBTyxLQUFLLFVBQVUsTUFBTSxVQUFVLEtBQUs7QUFBQSxRQUMvQztBQUFBLFFBQ0EsT0FBTyxPQUFPLEtBQUtBLFdBQVUsQ0FBQyxHQUFHO0FBQzdCLGNBQUk7QUFDSixjQUFJLGVBQWVBLFNBQVE7QUFDM0IsZ0JBQU0sYUFBYUEsU0FBUSxjQUFjO0FBQ3pDLGNBQUlOLGVBQWMsR0FBRyxHQUFHO0FBQ3BCLG1CQUFPLElBQUksT0FBTztBQUFBLFVBQ3RCO0FBQ0EsY0FBSSxNQUFNLFFBQVEsR0FBRyxHQUFHO0FBQ3BCLGtCQUFNLENBQUM7QUFDUCx1QkFBVyxRQUFRLEtBQUs7QUFDcEIsa0JBQUksS0FBSyxLQUFLLE9BQU8sTUFBTU0sUUFBTyxDQUFDO0FBQUEsWUFDdkM7QUFBQSxVQUNKLFdBQ1MsT0FBTyxRQUFRLFVBQVU7QUFDOUIsZ0JBQUksZ0JBQWdCLENBQUNMLGVBQWMsSUFBSSxZQUFZLEdBQUc7QUFDbEQsb0JBQU0sSUFBSSxVQUFVLDRDQUE0QztBQUFBLFlBQ3BFO0FBQ0EsMkJBQWdCLGdCQUFnQixJQUFJO0FBQ3BDLGdCQUFJQSxlQUFjLElBQUksWUFBWSxHQUFHO0FBQ2pDLG9CQUFNLFNBQVNBLGVBQWMsSUFBSSxZQUFZO0FBQzdDLG9CQUFNLENBQUM7QUFDUCxvQkFBTSxjQUFjLEtBQUssZ0JBQWdCLFFBQVEsVUFBVTtBQUMzRCx5QkFBVyxPQUFPLGFBQWE7QUFDM0Isb0JBQUk7QUFDQSx3QkFBTSxPQUFPLFlBQVksR0FBRztBQUM1Qix3QkFBTSxVQUFVLElBQUksR0FBRztBQUN2QixzQkFBSTtBQUNKLHNCQUFLLEtBQUssWUFBWSxZQUFZLFVBQzFCLEtBQUssaUJBQWlCLFVBQWEsWUFBWSxLQUFLLGNBQWU7QUFDdkU7QUFBQSxrQkFDSjtBQUNBLHNCQUFJLENBQUMsS0FBSyxZQUFZLFlBQVksUUFBVztBQUN6QywwQkFBTSxJQUFJLGdCQUFnQixhQUFhLE1BQU0sYUFBYSxHQUFHLGdCQUFnQjtBQUFBLGtCQUNqRjtBQUNBLHNCQUFJLE9BQU8sS0FBSyxTQUFTLFVBQVU7QUFDL0Isd0JBQUksS0FBSyxXQUFXO0FBQ2hCLDBCQUFJLEtBQUssVUFBVTtBQUNmLGdDQUFRLFFBQVEsSUFBSSxDQUFDLE9BQU8sS0FBSyxVQUFVLE9BQU8sSUFBSSxHQUFHLENBQUM7QUFBQSxzQkFDOUQsT0FDSztBQUNELGdDQUFRLEtBQUssVUFBVSxPQUFPLFNBQVMsR0FBRztBQUFBLHNCQUM5QztBQUFBLG9CQUNKLE9BQ0s7QUFDRCw4QkFBUTtBQUFBLG9CQUNaO0FBQUEsa0JBQ0osT0FDSztBQUNELHdCQUFJLEtBQUssVUFBVTtBQUNmLDhCQUFRLFFBQVEsSUFBSSxDQUFDLE9BQU8sS0FBSyxPQUFPLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztBQUFBLG9CQUMvRCxPQUNLO0FBQ0QsOEJBQVEsS0FBSyxPQUFPLFNBQVMsRUFBRSxXQUFXLENBQUM7QUFBQSxvQkFDL0M7QUFBQSxrQkFDSjtBQUNBLHVCQUFLLFdBQVcsT0FBTyxJQUFJO0FBQzNCLHVCQUFLLFlBQVksT0FBTyxJQUFJO0FBQzVCLHNCQUFJLEtBQUssUUFBUSxHQUFHLElBQUk7QUFBQSxnQkFDNUIsU0FDTyxHQUFHO0FBQ04sc0JBQUksYUFBYSxpQkFBaUI7QUFDOUIsMEJBQU07QUFBQSxrQkFDVixPQUNLO0FBQ0QsMEJBQU0sSUFBSSxnQkFBZ0IsT0FBTyxPQUFPLE1BQU0sYUFBYSxHQUFHLGVBQWUsRUFBRSxPQUFPLElBQUksQ0FBQztBQUFBLGtCQUMvRjtBQUFBLGdCQUNKO0FBQUEsY0FDSjtBQUFBLFlBQ0osT0FDSztBQUNELG9CQUFNLENBQUM7QUFDUCx5QkFBVyxPQUFPLEtBQUs7QUFDbkIsb0JBQUksR0FBRyxJQUFJLEtBQUssT0FBTyxJQUFJLEdBQUcsR0FBRyxFQUFFLFdBQVcsQ0FBQztBQUFBLGNBQ25EO0FBQUEsWUFDSjtBQUFBLFVBQ0osT0FDSztBQUNELGtCQUFNO0FBQUEsVUFDVjtBQUNBLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFFQSxNQUFNLGFBQU4sTUFBTSxvQkFBbUIsY0FBYztBQUFBLFFBQ25DLE9BQU8sTUFBTSxNQUFNSyxVQUFTO0FBQ3hCLGdCQUFNLE1BQU0sS0FBSyxNQUFNLElBQUk7QUFDM0IsaUJBQU8sS0FBSyxTQUFTLEtBQUtBLFFBQU87QUFBQSxRQUNyQztBQUFBLFFBQ0EsT0FBTyxTQUFTLFFBQVFBLFVBQVM7QUFDN0IsZ0JBQU0sZUFBZUEsU0FBUTtBQUM3QixnQkFBTSxhQUFhQSxTQUFRLGNBQWM7QUFDekMsZ0JBQU0sTUFBTSxJQUFJLGFBQWE7QUFDN0IsY0FBSU4sZUFBYyxHQUFHLEdBQUc7QUFDcEIsbUJBQU8sSUFBSSxTQUFTLE1BQU07QUFBQSxVQUM5QjtBQUNBLGdCQUFNLFNBQVNDLGVBQWMsSUFBSSxZQUFZO0FBQzdDLGdCQUFNLGNBQWMsS0FBSyxnQkFBZ0IsUUFBUSxVQUFVO0FBQzNELGdCQUFNLFlBQVksQ0FBQztBQUNuQixjQUFJSyxTQUFRLGtCQUFrQixDQUFDLE1BQU0sUUFBUSxNQUFNLEdBQUc7QUFDbEQsd0JBQVcsb0JBQW9CLFFBQVEsYUFBYSxNQUFNO0FBQUEsVUFDOUQ7QUFDQSxxQkFBVyxPQUFPLGFBQWE7QUFDM0IsZ0JBQUk7QUFDQSxvQkFBTSxPQUFPLFlBQVksR0FBRztBQUM1QixvQkFBTSxPQUFPLEtBQUssUUFBUTtBQUMxQixvQkFBTSxRQUFRLE9BQU8sSUFBSTtBQUN6QixrQkFBSSxVQUFVLFdBQWMsS0FBSyxZQUFZLEtBQUssaUJBQWlCLFNBQVk7QUFDM0U7QUFBQSxjQUNKO0FBQ0Esa0JBQUksQ0FBQyxLQUFLLFlBQVksVUFBVSxRQUFXO0FBQ3ZDLHNCQUFNLElBQUksWUFBWSxRQUFRLGFBQWEsSUFBSSxnQkFBZ0I7QUFBQSxjQUNuRTtBQUNBLG1CQUFLLFdBQVcsT0FBTyxJQUFJO0FBQzNCLG1CQUFLLFlBQVksT0FBTyxJQUFJO0FBQzVCLGtCQUFJLE9BQVEsS0FBSyxTQUFVLFVBQVU7QUFDakMsb0JBQUksS0FBSyxXQUFXO0FBQ2hCLHNCQUFJLEtBQUssVUFBVTtBQUNmLHdCQUFJLEdBQUcsSUFBSSxNQUFNLElBQUksQ0FBQyxPQUFPLEtBQUssVUFBVSxTQUFTLElBQUksR0FBRyxDQUFDO0FBQUEsa0JBQ2pFLE9BQ0s7QUFDRCx3QkFBSSxHQUFHLElBQUksS0FBSyxVQUFVLFNBQVMsT0FBTyxHQUFHO0FBQUEsa0JBQ2pEO0FBQUEsZ0JBQ0osT0FDSztBQUNELHNCQUFJLEdBQUcsSUFBSTtBQUFBLGdCQUNmO0FBQUEsY0FDSixPQUNLO0FBQ0Qsc0JBQU0sYUFBYTtBQUFBLGtCQUNmLEdBQUdBO0FBQUEsa0JBQ0gsY0FBYyxLQUFLO0FBQUEsa0JBQ25CO0FBQUEsZ0JBQ0o7QUFDQSxvQkFBSSxLQUFLLFVBQVU7QUFDZixzQkFBSSxHQUFHLElBQUksTUFBTSxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxVQUFVLENBQUM7QUFBQSxnQkFDOUQsT0FDSztBQUNELHNCQUFJLEdBQUcsSUFBSSxLQUFLLFNBQVMsT0FBTyxVQUFVO0FBQUEsZ0JBQzlDO0FBQUEsY0FDSjtBQUFBLFlBQ0osU0FDTyxHQUFHO0FBQ04sa0JBQUksRUFBRSxhQUFhLGNBQWM7QUFDN0Isb0JBQUksSUFBSSxZQUFZLFFBQVEsYUFBYSxHQUFHLGVBQWUsRUFBRSxPQUFPLElBQUksQ0FBQztBQUFBLGNBQzdFO0FBQ0Esa0JBQUlBLFNBQVEsZUFBZTtBQUN2QiwwQkFBVSxHQUFHLElBQUk7QUFBQSxjQUNyQixPQUNLO0FBQ0Qsc0JBQU07QUFBQSxjQUNWO0FBQUEsWUFDSjtBQUFBLFVBQ0o7QUFDQSxnQkFBTSxPQUFPLE9BQU8sS0FBSyxTQUFTO0FBQ2xDLGNBQUksS0FBSyxRQUFRO0FBQ2Isa0JBQU0sSUFBSSxTQUFTLFFBQVEsTUFBTSxTQUFTO0FBQUEsVUFDOUM7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLE9BQU8sb0JBQW9CLFFBQVEsYUFBYSxRQUFRO0FBQ3BELGdCQUFNLFlBQVksT0FBTyxLQUFLLE1BQU07QUFDcEMsZ0JBQU0sY0FBYyxPQUFPLEtBQUssV0FBVztBQUMzQyxnQkFBTSxPQUFPLENBQUM7QUFDZCxxQkFBVyxPQUFPLFdBQVc7QUFDekIsZ0JBQUksWUFBWSxRQUFRLEdBQUcsTUFBTSxJQUFJO0FBQ2pDLG1CQUFLLEtBQUssR0FBRztBQUFBLFlBQ2pCO0FBQUEsVUFDSjtBQUNBLGNBQUksS0FBSyxRQUFRO0FBQ2Isa0JBQU0sSUFBSSxTQUFTLFFBQVEsSUFBSTtBQUFBLFVBQ25DO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUF5QkEsTUFBTSxXQUFXLENBQUNBLFdBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxnQkFBZ0I7QUFDeEQsY0FBTSxlQUFlLHVCQUF1QixXQUFXLGdCQUFnQixPQUFPLFlBQVksSUFBSTtBQUM5RixZQUFJO0FBQ0osWUFBSSxDQUFDTCxlQUFjLElBQUksT0FBTyxXQUFXLEdBQUc7QUFDeEMsbUJBQVNBLGVBQWMsT0FBTyxPQUFPLFdBQVc7QUFDaEQsVUFBQUEsZUFBYyxJQUFJLE9BQU8sYUFBYSxNQUFNO0FBQUEsUUFDaEQsT0FDSztBQUNELG1CQUFTQSxlQUFjLElBQUksT0FBTyxXQUFXO0FBQzdDLGNBQUksT0FBTyxXQUFXLE9BQU8sYUFBYTtBQUN0QyxxQkFBU0EsZUFBYyxPQUFPLE9BQU8sV0FBVztBQUNoRCxZQUFBQSxlQUFjLElBQUksT0FBTyxhQUFhLE1BQU07QUFBQSxVQUNoRDtBQUFBLFFBQ0o7QUFDQSxjQUFNLGdCQUFnQjtBQUFBLFVBQ2xCLE1BQU0sY0FBYztBQUFBLFVBQ3BCLGFBQWEsQ0FBQztBQUFBLFFBQ2xCO0FBQ0EsY0FBTSxjQUFjLE9BQU8sT0FBTyxlQUFlSyxRQUFPO0FBQ3hELG9CQUFZLGNBQWMsZUFBZSxXQUFXO0FBQ3BELFlBQUksT0FBTyxZQUFZLFNBQVMsVUFBVTtBQUN0QyxjQUFJLENBQUNMLGVBQWMsSUFBSSxZQUFZLElBQUksS0FBSyxDQUFDRCxlQUFjLFlBQVksSUFBSSxHQUFHO0FBQzFFLGtCQUFNLElBQUksTUFBTSxHQUFHLFlBQVksdUNBQXVDO0FBQUEsVUFDMUU7QUFBQSxRQUNKO0FBQ0EsWUFBSTtBQUNKLFlBQUksTUFBTSxRQUFRTSxTQUFRLE1BQU0sR0FBRztBQUMvQix3QkFBY0EsU0FBUTtBQUFBLFFBQzFCLE9BQ0s7QUFDRCx3QkFBYyxDQUFDQSxTQUFRLFVBQVUsY0FBYztBQUFBLFFBQ25EO0FBQ0EsbUJBQVcsY0FBYyxhQUFhO0FBQ2xDLGNBQUksQ0FBQyxPQUFPLE1BQU0sVUFBVSxHQUFHO0FBQzNCLG1CQUFPLE1BQU0sVUFBVSxJQUFJLENBQUM7QUFBQSxVQUNoQztBQUNBLGdCQUFNLGNBQWMsT0FBTyxNQUFNLFVBQVU7QUFDM0Msc0JBQVksV0FBVyxJQUFJO0FBQUEsUUFDL0I7QUFBQSxNQUNKO0FBQUE7QUFBQTs7O0FDcFlBLFdBQVMsTUFBTSxNQUFNO0FBQ2pCLFdBQU8sT0FBTyxTQUFTLFlBQVksU0FBUztBQUFBLEVBQ2hEO0FBL0ZBLE1BSUFDLG1CQUNBQSxtQkFNTSxhQUdBLGdCQUdBLDJCQU1BLGdCQUdBLHVCQU1BLGNBaUVBLGdCQWtNQSxhQW9CQSxnQkFpQkEsaUJBaUJBLGdCQXdCQSxnQkFRQSxnQkErQkEsZUFRQSxhQThCQSxhQTZCQSxnQkFXQSxnQkFvQkEsaUJBaUJBLGtCQWVBLGVBaUJBLFdBQ0EsV0FpQkEsY0F3QkEsZ0JBUUEsZUFZRkMsbUJBY0UscUJBaUJBLGdCQW9CQSxlQWFBLG1DQUtBLGdDQXFCQSxlQW9EQSxjQWVGLGFBMENFLGNBMENBLG1DQWtCRixTQUtFLFNBd0VBLGdCQXFDQSxrQkFNRixjQXlCQSxhQTRCQSxpQkFVRSxhQUNBLGlCQUNBLGFBQ0EsYUFDQSxhQUNBLGNBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsbUJBQ0EsVUFDQSxRQUNBLFdBQ0EsU0FFRixTQTBDRSxVQWtEQSxnQkFjQSxpQkFXQSxjQW9DQSxnQkE4QkEsY0EyQkEsZUFzQkEsa0JBUUEsa0JBUUEsUUFhQSxpQkFpQ0EsY0FNQSx3QkFDQTtBQXoyQ047QUFBQTtBQUlBLE1BQUFELG9CQUF3RDtBQUN4RCxNQUFBQSxvQkFBc0M7QUFDdEM7QUFDQTtBQUNBLE1BQUFFO0FBQ0E7QUFFQSxNQUFNLGNBQU4sY0FBMEIsTUFBTTtBQUFBLE1BQ2hDO0FBRUEsTUFBTSxpQkFBTixjQUE2QixZQUFZO0FBQUEsTUFDekM7QUFFQSxNQUFNLDRCQUFOLGNBQXdDLFlBQVk7QUFBQSxRQUNoRCxZQUFZLFlBQVk7QUFDcEIsZ0JBQU0sMEJBQTBCLGFBQWEsR0FBRyxVQUFVLEtBQUssRUFBRSxFQUFFO0FBQUEsUUFDdkU7QUFBQSxNQUNKO0FBRUEsTUFBTSxpQkFBTixjQUE2QixZQUFZO0FBQUEsTUFDekM7QUFFQSxNQUFNLHdCQUFOLGNBQW9DLFlBQVk7QUFBQSxRQUM1QyxZQUFZLFVBQVU7QUFDbEIsZ0JBQU0sR0FBRyxRQUFRLDZCQUE2QjtBQUFBLFFBQ2xEO0FBQUEsTUFDSjtBQUVBLE1BQU0sZUFBTixNQUFtQjtBQUFBLFFBQ2YsT0FBTyxjQUFjLEtBQUs7QUFDdEIsZ0JBQU0sU0FBUyxJQUNWLFFBQVEsMkJBQTJCLEVBQUUsRUFDckMsUUFBUSxNQUFNLEVBQUUsRUFDaEIsUUFBUSxNQUFNLEVBQUU7QUFDckIsaUJBQU8sMEJBQVEsV0FBVyxNQUFNO0FBQUEsUUFDcEM7QUFBQSxRQUNBLE9BQU8sYUFBYSxLQUFLO0FBQ3JCLGdCQUFNLFFBQVEsS0FBSyxjQUFjLEdBQUc7QUFDcEMsaUJBQU8sSUFBSSxXQUFXLEtBQUs7QUFBQSxRQUMvQjtBQUFBLFFBQ0EsT0FBTyxpQkFBaUIsUUFBUSxLQUFLO0FBQ2pDLGdCQUFNLFNBQVMsMEJBQVEsU0FBUyxNQUFNO0FBQ3RDLGNBQUk7QUFDSixjQUFJQyxVQUFTO0FBQ2IsZ0JBQU0sT0FBTyxDQUFDO0FBQ2QsaUJBQU9BLFVBQVMsT0FBTyxRQUFRO0FBQzNCLHFCQUFTLE9BQU8sTUFBTUEsU0FBUUEsVUFBUyxFQUFFO0FBQ3pDLGdCQUFJLE9BQU8sUUFBUTtBQUNmLG1CQUFLLEtBQUssTUFBTTtBQUFBLFlBQ3BCLE9BQ0s7QUFDRDtBQUFBLFlBQ0o7QUFDQSxZQUFBQSxXQUFVO0FBQUEsVUFDZDtBQUNBLGdCQUFNLGVBQWUsSUFBSSxZQUFZO0FBQ3JDLGlCQUFPLGNBQWMsWUFBWTtBQUFBLEVBQVUsS0FBSyxLQUFLLElBQUksQ0FBQztBQUFBLFdBQWMsWUFBWTtBQUFBLFFBQ3hGO0FBQUEsUUFDQSxPQUFPLE1BQU0sTUFBTTtBQUNmLGlCQUFPLDBEQUEwRCxLQUFLLElBQUk7QUFBQSxRQUM5RTtBQUFBLFFBQ0EsT0FBTyxXQUFXLEtBQUs7QUFDbkIsY0FBSSxDQUFDLEtBQUssTUFBTSxHQUFHLEdBQUc7QUFDbEIsa0JBQU0sSUFBSSxNQUFNLCtDQUErQztBQUFBLFVBQ25FO0FBQ0EsZ0JBQU0sTUFBTSx1QkFBdUIsS0FBSyxHQUFHO0FBQzNDLGNBQUksQ0FBQyxLQUFLO0FBQ04sa0JBQU0sSUFBSSxNQUFNLHlCQUF5QjtBQUFBLFVBQzdDO0FBQ0EsaUJBQU8sSUFBSSxDQUFDO0FBQUEsUUFDaEI7QUFBQSxRQUNBLE9BQU8sV0FBVyxLQUFLLFNBQVM7QUFDNUIsZ0JBQU0sTUFBTSxLQUFLLFdBQVcsR0FBRztBQUMvQixpQkFBTyxRQUFRLFlBQVksTUFBTSxJQUFJLFlBQVk7QUFBQSxRQUNyRDtBQUFBLFFBQ0EsT0FBTyxjQUFjLEtBQUs7QUFDdEIsaUJBQU8sS0FBSyxXQUFXLEtBQUssYUFBYTtBQUFBLFFBQzdDO0FBQUEsUUFDQSxPQUFPLHFCQUFxQixLQUFLO0FBQzdCLGlCQUFPLEtBQUssV0FBVyxLQUFLLHFCQUFxQjtBQUFBLFFBQ3JEO0FBQUEsUUFDQSxPQUFPLE1BQU0sS0FBSztBQUNkLGlCQUFPLEtBQUssV0FBVyxLQUFLLFVBQVU7QUFBQSxRQUMxQztBQUFBLFFBQ0EsT0FBTyxZQUFZLEtBQUs7QUFDcEIsaUJBQU8sS0FBSyxXQUFXLEtBQUssWUFBWTtBQUFBLFFBQzVDO0FBQUEsTUFDSjtBQU1BLE1BQU0saUJBQU4sTUFBcUI7QUFBQSxRQUNqQixNQUFNLFVBQVUsTUFBTTtBQUNsQixlQUFLLFlBQVksTUFBTSxNQUFNLElBQUk7QUFDakMsaUJBQU8sS0FBSyxTQUFTLE1BQU0sTUFBTSxJQUFJO0FBQUEsUUFDekM7QUFBQSxRQUNBLFlBQVksV0FBVyxPQUFPO0FBQzFCLGVBQUssbUJBQW1CLFNBQVM7QUFBQSxRQUNyQztBQUFBLFFBQ0EsTUFBTSxTQUFTLFlBQVksT0FBTztBQUM5QixnQkFBTSxJQUFJLDBCQUEwQixRQUFRO0FBQUEsUUFDaEQ7QUFBQSxRQUNBLE1BQU0sZUFBZSxNQUFNO0FBQ3ZCLGVBQUssaUJBQWlCLE1BQU0sTUFBTSxJQUFJO0FBQ3RDLGlCQUFPLEtBQUssY0FBYyxNQUFNLE1BQU0sSUFBSTtBQUFBLFFBQzlDO0FBQUEsUUFDQSxpQkFBaUIsV0FBVyxjQUFjLGNBQWMsT0FBTztBQUMzRCxlQUFLLG1CQUFtQixTQUFTO0FBQ2pDLGVBQUssdUJBQXVCLFNBQVM7QUFDckMsY0FBSSxFQUFFLGFBQWEsVUFBVSxTQUFTO0FBQ2xDLGtCQUFNLElBQUksVUFBVSw2Q0FBNkM7QUFBQSxVQUNyRTtBQUNBLGNBQUk7QUFDSixjQUFJLE1BQU0sUUFBUSxLQUFLLE1BQU0sR0FBRztBQUM1Qiw0QkFBZ0IsS0FBSztBQUFBLFVBQ3pCLE9BQ0s7QUFDRCw0QkFBZ0IsS0FBSyxPQUFPLFdBQVcsT0FBTyxLQUFLLE9BQU8sU0FBUztBQUFBLFVBQ3ZFO0FBQ0EsZUFBSyxlQUFlLFdBQVcsYUFBYTtBQUFBLFFBQ2hEO0FBQUEsUUFDQSx1QkFBdUIsWUFBWTtBQUFBLFFBQ25DO0FBQUEsUUFDQSxNQUFNLGNBQWMsWUFBWSxjQUFjLGVBQWUsT0FBTztBQUNoRSxnQkFBTSxJQUFJLDBCQUEwQixhQUFhO0FBQUEsUUFDckQ7QUFBQSxRQUNBLE1BQU0sUUFBUSxNQUFNO0FBQ2hCLGVBQUssVUFBVSxNQUFNLE1BQU0sSUFBSTtBQUMvQixpQkFBTyxLQUFLLE9BQU8sTUFBTSxNQUFNLElBQUk7QUFBQSxRQUN2QztBQUFBLFFBQ0EsVUFBVSxXQUFXLEtBQUssVUFBVSxPQUFPO0FBQ3ZDLGVBQUssbUJBQW1CLFNBQVM7QUFDakMsZUFBSyxxQkFBcUIsU0FBUztBQUNuQyxlQUFLLGVBQWUsS0FBSyxNQUFNO0FBQUEsUUFDbkM7QUFBQSxRQUNBLE1BQU0sT0FBTyxZQUFZLE1BQU0sVUFBVSxPQUFPO0FBQzVDLGdCQUFNLElBQUksMEJBQTBCLE1BQU07QUFBQSxRQUM5QztBQUFBLFFBQ0EsTUFBTSxVQUFVLE1BQU07QUFDbEIsZUFBSyxZQUFZLE1BQU0sTUFBTSxJQUFJO0FBQ2pDLGlCQUFPLEtBQUssU0FBUyxNQUFNLE1BQU0sSUFBSTtBQUFBLFFBQ3pDO0FBQUEsUUFDQSxZQUFZLFdBQVcsS0FBSyxZQUFZLFVBQVUsT0FBTztBQUNyRCxlQUFLLG1CQUFtQixTQUFTO0FBQ2pDLGVBQUsscUJBQXFCLFNBQVM7QUFDbkMsZUFBSyxlQUFlLEtBQUssUUFBUTtBQUFBLFFBQ3JDO0FBQUEsUUFDQSxNQUFNLFNBQVMsWUFBWSxNQUFNLFlBQVksVUFBVSxPQUFPO0FBQzFELGdCQUFNLElBQUksMEJBQTBCLFFBQVE7QUFBQSxRQUNoRDtBQUFBLFFBQ0EsTUFBTSxXQUFXLE1BQU07QUFDbkIsZUFBSyxhQUFhLE1BQU0sTUFBTSxJQUFJO0FBQ2xDLGlCQUFPLEtBQUssVUFBVSxNQUFNLE1BQU0sSUFBSTtBQUFBLFFBQzFDO0FBQUEsUUFDQSxhQUFhLFdBQVcsS0FBSyxPQUFPQyxXQUFVLENBQUMsTUFBTSxPQUFPO0FBQ3hELGVBQUssbUJBQW1CLFNBQVM7QUFDakMsZUFBSyxxQkFBcUIsU0FBUztBQUNuQyxlQUFLLGVBQWUsS0FBS0EsU0FBUSxXQUFXLFlBQVksTUFBTTtBQUFBLFFBQ2xFO0FBQUEsUUFDQSxNQUFNLFVBQVUsWUFBWSxNQUFNLFVBQVUsT0FBTztBQUMvQyxnQkFBTSxJQUFJLDBCQUEwQixTQUFTO0FBQUEsUUFDakQ7QUFBQSxRQUNBLE1BQU0sV0FBVyxNQUFNO0FBQ25CLGVBQUssYUFBYSxNQUFNLE1BQU0sSUFBSTtBQUNsQyxpQkFBTyxLQUFLLFVBQVUsTUFBTSxNQUFNLElBQUk7QUFBQSxRQUMxQztBQUFBLFFBQ0EsYUFBYSxXQUFXLEtBQUssT0FBT0EsV0FBVSxDQUFDLE1BQU0sT0FBTztBQUN4RCxlQUFLLG1CQUFtQixTQUFTO0FBQ2pDLGVBQUsscUJBQXFCLFNBQVM7QUFDbkMsZUFBSyxlQUFlLEtBQUtBLFNBQVEsV0FBVyxZQUFZLE1BQU07QUFBQSxRQUNsRTtBQUFBLFFBQ0EsTUFBTSxVQUFVLFlBQVksTUFBTSxVQUFVLE9BQU87QUFDL0MsZ0JBQU0sSUFBSSwwQkFBMEIsU0FBUztBQUFBLFFBQ2pEO0FBQUEsUUFDQSxNQUFNLGNBQWMsTUFBTTtBQUN0QixlQUFLLGdCQUFnQixNQUFNLE1BQU0sSUFBSTtBQUNyQyxpQkFBTyxLQUFLLGFBQWEsTUFBTSxNQUFNLElBQUk7QUFBQSxRQUM3QztBQUFBLFFBQ0EsZ0JBQWdCLFdBQVcsU0FBUyxRQUFRQSxXQUFVLENBQUMsTUFBTSxPQUFPO0FBQ2hFLGVBQUssbUJBQW1CLFNBQVM7QUFDakMsZUFBSyxxQkFBcUIsU0FBUztBQUNuQyxlQUFLLGVBQWUsU0FBU0EsU0FBUSxXQUFXLGVBQWUsTUFBTTtBQUNyRSxjQUFJLFNBQVMsTUFBTSxHQUFHO0FBQ2xCLGtCQUFNLElBQUksZUFBZSw4QkFBOEI7QUFBQSxVQUMzRDtBQUFBLFFBQ0o7QUFBQSxRQUNBLE1BQU0sYUFBYSxZQUFZLFVBQVUsWUFBWSxPQUFPO0FBQ3hELGdCQUFNLElBQUksMEJBQTBCLFlBQVk7QUFBQSxRQUNwRDtBQUFBLFFBQ0EsTUFBTSxhQUFhLE1BQU07QUFDckIsZUFBSyxlQUFlLE1BQU0sTUFBTSxJQUFJO0FBQ3BDLGlCQUFPLEtBQUssWUFBWSxNQUFNLE1BQU0sSUFBSTtBQUFBLFFBQzVDO0FBQUEsUUFDQSxlQUFlQyxTQUFRLFFBQVEsT0FBTztBQUNsQyxlQUFLLGVBQWVBLE9BQU07QUFDMUIsZUFBSyxlQUFlLEdBQUc7QUFDdkIsY0FBSSxDQUFDLElBQUksYUFBYTtBQUNsQixrQkFBTSxJQUFJLFlBQVkseUJBQXlCO0FBQUEsVUFDbkQ7QUFBQSxRQUNKO0FBQUEsUUFDQSxNQUFNLFlBQVksU0FBUyxTQUFTLE9BQU87QUFDdkMsZ0JBQU0sSUFBSSwwQkFBMEIsV0FBVztBQUFBLFFBQ25EO0FBQUEsUUFDQSxNQUFNLGFBQWEsTUFBTTtBQUNyQixlQUFLLGVBQWUsTUFBTSxNQUFNLElBQUk7QUFDcEMsaUJBQU8sS0FBSyxZQUFZLE1BQU0sTUFBTSxJQUFJO0FBQUEsUUFDNUM7QUFBQSxRQUNBLGVBQWVBLFNBQVEsU0FBUyxXQUFXLGNBQWMsY0FBYyxPQUFPO0FBQzFFLGVBQUssZUFBZUEsT0FBTTtBQUMxQixlQUFLLGFBQWFBLFNBQVEsT0FBTztBQUNqQyxlQUFLLG1CQUFtQixTQUFTO0FBQ2pDLGVBQUssa0JBQWtCLFNBQVM7QUFDaEMsY0FBSSxNQUFNLFFBQVEsS0FBSyxNQUFNLEdBQUc7QUFDNUIsaUJBQUssZUFBZSxXQUFXLEtBQUssTUFBTTtBQUFBLFVBQzlDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsTUFBTSxZQUFZLFNBQVMsVUFBVSxZQUFZLGNBQWMsZUFBZSxPQUFPO0FBQ2pGLGdCQUFNLElBQUksMEJBQTBCLFdBQVc7QUFBQSxRQUNuRDtBQUFBLFFBQ0EsbUJBQW1CLFdBQVc7QUFDMUIsY0FBSSxVQUFVLEtBQUssWUFBWSxNQUFNLEtBQUssS0FBSyxZQUFZLEdBQUc7QUFDMUQsa0JBQU0sSUFBSSxlQUFlLG1CQUFtQjtBQUFBLFVBQ2hEO0FBQUEsUUFDSjtBQUFBLFFBQ0EscUJBQXFCLFlBQVk7QUFBQSxRQUNqQztBQUFBLFFBQ0Esc0JBQXNCLFlBQVk7QUFBQSxRQUNsQztBQUFBLFFBQ0EsZUFBZSxRQUFRLFNBQVM7QUFDNUIscUJBQVcsU0FBUyxRQUFRO0FBQ3hCLGdCQUFJLFFBQVEsUUFBUSxLQUFLLE1BQU0sSUFBSTtBQUMvQixvQkFBTSxJQUFJLFVBQVUsb0RBQW9EO0FBQUEsWUFDNUU7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLFFBQ0EsZUFBZSxLQUFLLFVBQVU7QUFDMUIsZUFBSyxtQkFBbUIsSUFBSSxTQUFTO0FBQ3JDLGNBQUksWUFBWSxJQUFJLE9BQU8sUUFBUSxRQUFRLE1BQU0sSUFBSTtBQUNqRCxrQkFBTSxJQUFJLFlBQVksc0NBQXNDO0FBQUEsVUFDaEU7QUFBQSxRQUNKO0FBQUEsUUFDQSxzQkFBc0IsTUFBTSxVQUFVO0FBQ2xDLGNBQUksRUFBRSxZQUFZLE9BQU87QUFDckIsa0JBQU0sSUFBSSxzQkFBc0IsUUFBUTtBQUFBLFVBQzVDO0FBQUEsUUFDSjtBQUFBLFFBQ0EsbUJBQW1CLFdBQVcsZ0JBQWdCO0FBQzFDLHFCQUFXLFFBQVEsZ0JBQWdCO0FBQy9CLGdCQUFJLEtBQUssWUFBWSxNQUFNLFVBQVUsS0FBSyxZQUFZLEdBQUc7QUFDckQ7QUFBQSxZQUNKO0FBQUEsVUFDSjtBQUNBLGdCQUFNLElBQUksZUFBZSx3QkFBd0IsZUFBZSxLQUFLLElBQUksQ0FBQyxFQUFFO0FBQUEsUUFDaEY7QUFBQSxRQUNBLGtCQUFrQixZQUFZO0FBQUEsUUFDOUI7QUFBQSxRQUNBLGVBQWVBLFNBQVE7QUFDbkIsa0JBQVFBLFNBQVE7QUFBQSxZQUNaLEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFBQSxZQUNMLEtBQUs7QUFDRDtBQUFBLFlBQ0o7QUFDSSxvQkFBTSxJQUFJLFVBQVUsb0VBQW9FO0FBQUEsVUFDaEc7QUFBQSxRQUNKO0FBQUEsUUFDQSxhQUFhQSxTQUFRLFNBQVM7QUFDMUIsY0FBSSxDQUFDLFNBQVM7QUFDVixrQkFBTSxJQUFJLFVBQVUsb0RBQW9EO0FBQUEsVUFDNUU7QUFDQSxjQUFJQSxZQUFXLE9BQU87QUFDbEIsZ0JBQUksQ0FBQyxNQUFNLE9BQU8sR0FBRztBQUNqQixvQkFBTSxJQUFJLFVBQVUsOEJBQThCO0FBQUEsWUFDdEQ7QUFBQSxVQUNKLFdBQ1MsQ0FBQyx3Q0FBc0IsZUFBZSxPQUFPLEdBQUc7QUFDckQsa0JBQU0sSUFBSSxVQUFVLGdEQUFnRDtBQUFBLFVBQ3hFO0FBQUEsUUFDSjtBQUFBLFFBQ0EsWUFBWSxNQUFNO0FBQ2QsaUJBQU8sd0NBQXNCLGNBQWMsSUFBSTtBQUFBLFFBQ25EO0FBQUEsTUFDSjtBQUVBLE1BQU0sY0FBTixjQUEwQixlQUFlO0FBQUEsUUFDckMsdUJBQXVCLFdBQVc7QUFDOUIsZUFBSyxzQkFBc0IsV0FBVyxRQUFRO0FBQzlDLGNBQUksT0FBTyxVQUFVLFdBQVcsVUFBVTtBQUN0QyxrQkFBTSxJQUFJLFVBQVUsK0JBQStCO0FBQUEsVUFDdkQ7QUFDQSxrQkFBUSxVQUFVLFFBQVE7QUFBQSxZQUN0QixLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQUEsWUFDTCxLQUFLO0FBQ0Q7QUFBQSxZQUNKO0FBQ0ksb0JBQU0sSUFBSSxVQUFVLGtDQUFrQztBQUFBLFVBQzlEO0FBQUEsUUFDSjtBQUFBLFFBQ0Esc0JBQXNCLFdBQVc7QUFDN0IsZUFBSyx1QkFBdUIsU0FBUztBQUFBLFFBQ3pDO0FBQUEsTUFDSjtBQUVBLE1BQU0saUJBQU4sY0FBNkIsWUFBWTtBQUFBLFFBQ3JDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxPQUFPO0FBQ1osZUFBSyxTQUFTLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVztBQUFBLFFBQy9EO0FBQUEsUUFDQSxxQkFBcUIsV0FBVztBQUM1QixlQUFLLHNCQUFzQixXQUFXLElBQUk7QUFDMUMsY0FBSSxFQUFFLFVBQVUsY0FBYyxlQUFlLFlBQVksT0FBTyxVQUFVLEVBQUUsSUFBSTtBQUM1RSxrQkFBTSxJQUFJLFVBQVUsdURBQXVEO0FBQUEsVUFDL0U7QUFDQSxjQUFJLFVBQVUsR0FBRyxlQUFlLElBQUk7QUFDaEMsa0JBQU0sSUFBSSxVQUFVLCtCQUErQjtBQUFBLFVBQ3ZEO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNLGtCQUFOLGNBQThCLFlBQVk7QUFBQSxRQUN0QyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUNaLGVBQUssU0FBUyxDQUFDLFFBQVEsUUFBUTtBQUFBLFFBQ25DO0FBQUEsUUFDQSxxQkFBcUIsV0FBVztBQUM1QixlQUFLLHNCQUFzQixXQUFXLFFBQVE7QUFDOUMsY0FBSSxPQUFPLFVBQVUsV0FBVyxVQUFVO0FBQ3RDLGtCQUFNLElBQUksVUFBVSx5QkFBeUI7QUFBQSxVQUNqRDtBQUNBLGNBQUksVUFBVSxTQUFTLEdBQUc7QUFDdEIsa0JBQU0sSUFBSSxlQUFlLDZCQUE2QjtBQUFBLFVBQzFEO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNLGlCQUFOLGNBQTZCLFlBQVk7QUFBQSxRQUNyQyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUNaLGVBQUssU0FBUyxDQUFDLFdBQVcsV0FBVyxXQUFXLFdBQVc7QUFBQSxRQUMvRDtBQUFBLFFBQ0EscUJBQXFCLFdBQVc7QUFDNUIsZUFBSyxzQkFBc0IsV0FBVyxTQUFTO0FBQy9DLGNBQUksRUFBRSxVQUFVLG1CQUFtQixlQUFlLFlBQVksT0FBTyxVQUFVLE9BQU8sSUFBSTtBQUN0RixrQkFBTSxJQUFJLFVBQVUsNERBQTREO0FBQUEsVUFDcEY7QUFDQSxjQUFJLFVBQVUsUUFBUSxlQUFlLElBQUk7QUFDckMsa0JBQU0sSUFBSSxVQUFVLCtCQUErQjtBQUFBLFVBQ3ZEO0FBQ0EsZUFBSyxzQkFBc0IsV0FBVyxRQUFRO0FBQzlDLGNBQUksT0FBTyxVQUFVLFdBQVcsVUFBVTtBQUN0QyxrQkFBTSxJQUFJLFVBQVUseUJBQXlCO0FBQUEsVUFDakQ7QUFDQSxjQUFJLFVBQVUsU0FBUyxHQUFHO0FBQ3RCLGtCQUFNLElBQUksZUFBZSw2QkFBNkI7QUFBQSxVQUMxRDtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsTUFBTSxpQkFBTixjQUE2QixZQUFZO0FBQUEsUUFDckMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFDWixlQUFLLFNBQVMsQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXO0FBQUEsUUFDL0Q7QUFBQSxNQUNKO0FBRUEsTUFBTSxpQkFBTixjQUE2QixZQUFZO0FBQUEsUUFDckMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFDWixlQUFLLFNBQVMsQ0FBQyxXQUFXLFdBQVcsV0FBVyxXQUFXO0FBQUEsUUFDL0Q7QUFBQSxRQUNBLHFCQUFxQixXQUFXO0FBQzVCLGNBQUlDO0FBQ0osZUFBSyxzQkFBc0IsV0FBVyxJQUFJO0FBQzFDLGNBQUksRUFBRSxVQUFVLGNBQWMsZUFBZSxZQUFZLE9BQU8sVUFBVSxFQUFFLElBQUk7QUFDNUUsa0JBQU0sSUFBSSxVQUFVLHVEQUF1RDtBQUFBLFVBQy9FO0FBQ0EsY0FBSSxVQUFVLEdBQUcsYUFBYSxHQUFHO0FBQzdCLGtCQUFNLElBQUksZUFBZSx5REFBeUQ7QUFBQSxVQUN0RjtBQUNBLFdBQUNBLE1BQUssVUFBVSxlQUFlLFFBQVFBLFFBQU8sU0FBU0EsTUFBTSxVQUFVLFlBQVk7QUFDbkYsa0JBQVEsVUFBVSxXQUFXO0FBQUEsWUFDekIsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUFBLFlBQ0wsS0FBSztBQUNEO0FBQUEsWUFDSjtBQUNJLG9CQUFNLElBQUksZUFBZSw0REFBNEQ7QUFBQSxVQUM3RjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsTUFBTSxnQkFBTixjQUE0QixZQUFZO0FBQUEsUUFDcEMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFDWixlQUFLLFNBQVMsQ0FBQyxXQUFXLFdBQVc7QUFBQSxRQUN6QztBQUFBLE1BQ0o7QUFFQSxNQUFNLGNBQU4sY0FBMEIsZUFBZTtBQUFBLFFBQ3JDLGNBQWM7QUFDVixnQkFBTSxHQUFHLFNBQVM7QUFDbEIsZUFBSyxTQUFTLENBQUMsV0FBVyxXQUFXLFdBQVcsV0FBVztBQUFBLFFBQy9EO0FBQUEsUUFDQSxxQkFBcUIsV0FBVztBQUM1QixjQUFJLEtBQUssUUFBUTtBQUNiLGlCQUFLLHNCQUFzQixXQUFXLElBQUk7QUFDMUMsZ0JBQUksRUFBRSxVQUFVLGNBQWMsZUFBZSxZQUFZLE9BQU8sVUFBVSxFQUFFLElBQUk7QUFDNUUsb0JBQU0sSUFBSSxVQUFVLHVEQUF1RDtBQUFBLFlBQy9FO0FBQ0EsZ0JBQUksVUFBVSxHQUFHLGVBQWUsS0FBSyxRQUFRO0FBQ3pDLG9CQUFNLElBQUksVUFBVSx3QkFBd0IsS0FBSyxNQUFNLFFBQVE7QUFBQSxZQUNuRTtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsUUFDQSx1QkFBdUIsV0FBVztBQUM5QixlQUFLLHNCQUFzQixXQUFXLFFBQVE7QUFDOUMsY0FBSSxPQUFPLFVBQVUsV0FBVyxVQUFVO0FBQ3RDLGtCQUFNLElBQUksVUFBVSwrQkFBK0I7QUFBQSxVQUN2RDtBQUNBLGNBQUksVUFBVSxXQUFXLEtBQUssYUFBYTtBQUN2QyxrQkFBTSxJQUFJLGVBQWUsNkJBQTZCLEtBQUssV0FBVyxFQUFFO0FBQUEsVUFDNUU7QUFBQSxRQUNKO0FBQUEsUUFDQSxzQkFBc0IsV0FBVztBQUM3QixlQUFLLHVCQUF1QixTQUFTO0FBQUEsUUFDekM7QUFBQSxNQUNKO0FBRUEsTUFBTSxjQUFOLGNBQTBCLGVBQWU7QUFBQSxRQUNyQyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssaUJBQWlCLENBQUMsU0FBUyxXQUFXLFdBQVcsU0FBUztBQUFBLFFBQ25FO0FBQUEsUUFDQSx1QkFBdUIsV0FBVztBQUM5QixlQUFLLHNCQUFzQixXQUFXLE1BQU07QUFDNUMsZUFBSyxtQkFBbUIsVUFBVSxNQUFNLEtBQUssY0FBYztBQUMzRCxlQUFLLHNCQUFzQixXQUFXLGdCQUFnQjtBQUN0RCxjQUFJLEVBQUUsVUFBVSxrQkFBa0IsVUFBVSwwQkFBMEIsYUFBYTtBQUMvRSxrQkFBTSxJQUFJLFVBQVUsNkNBQTZDO0FBQUEsVUFDckU7QUFDQSxnQkFBTSxpQkFBaUIsMEJBQVEsU0FBUyxVQUFVLGNBQWM7QUFDaEUsY0FBSSxFQUFFLG1CQUFtQixVQUFVLG1CQUFtQixTQUFTO0FBQzNELGtCQUFNLElBQUksVUFBVSx3Q0FBd0M7QUFBQSxVQUNoRTtBQUNBLGVBQUssc0JBQXNCLFdBQVcsZUFBZTtBQUNyRCxjQUFJLFVBQVUsZ0JBQWdCLEtBQ3ZCLFVBQVUsZ0JBQWdCLE9BQzFCLFVBQVUsZ0JBQWdCLE9BQU87QUFDcEMsa0JBQU0sSUFBSSxVQUFVLHlFQUF5RTtBQUFBLFVBQ2pHO0FBQUEsUUFDSjtBQUFBLFFBQ0Esa0JBQWtCLFdBQVc7QUFDekIsZUFBSyxzQkFBc0IsV0FBVyxNQUFNO0FBQzVDLGVBQUssbUJBQW1CLFVBQVUsTUFBTSxLQUFLLGNBQWM7QUFBQSxRQUMvRDtBQUFBLE1BQ0o7QUFFQSxNQUFNLGlCQUFOLGNBQTZCLFlBQVk7QUFBQSxRQUNyQyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUNaLGVBQUssU0FBUztBQUFBLFlBQ1YsWUFBWSxDQUFDLE1BQU07QUFBQSxZQUNuQixXQUFXLENBQUMsUUFBUTtBQUFBLFVBQ3hCO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNLGlCQUFOLGNBQTZCLFlBQVk7QUFBQSxRQUNyQyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUNaLGVBQUssU0FBUztBQUFBLFlBQ1YsWUFBWSxDQUFDLE1BQU07QUFBQSxZQUNuQixXQUFXLENBQUMsUUFBUTtBQUFBLFVBQ3hCO0FBQUEsUUFDSjtBQUFBLFFBQ0EscUJBQXFCLFdBQVc7QUFDNUIsZUFBSyxzQkFBc0IsV0FBVyxZQUFZO0FBQ2xELGNBQUksT0FBTyxVQUFVLGVBQWUsVUFBVTtBQUMxQyxrQkFBTSxJQUFJLFVBQVUsNkJBQTZCO0FBQUEsVUFDckQ7QUFDQSxjQUFJLFVBQVUsYUFBYSxHQUFHO0FBQzFCLGtCQUFNLElBQUksV0FBVyxxQ0FBcUM7QUFBQSxVQUM5RDtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsTUFBTSxrQkFBTixjQUE4QixZQUFZO0FBQUEsUUFDdEMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFDWixlQUFLLFNBQVM7QUFBQSxZQUNWLFlBQVksQ0FBQyxXQUFXLFdBQVc7QUFBQSxZQUNuQyxXQUFXLENBQUMsV0FBVyxTQUFTO0FBQUEsVUFDcEM7QUFBQSxRQUNKO0FBQUEsUUFDQSxxQkFBcUIsV0FBVztBQUM1QixjQUFJLFVBQVUsU0FDUCxFQUFFLFVBQVUsaUJBQWlCLGVBQWUsWUFBWSxPQUFPLFVBQVUsS0FBSyxJQUFJO0FBQ3JGLGtCQUFNLElBQUksVUFBVSwwREFBMEQ7QUFBQSxVQUNsRjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsTUFBTSxtQkFBTixjQUErQixlQUFlO0FBQUEsUUFDMUMsdUJBQXVCLFdBQVc7QUFDOUIsZUFBSyxzQkFBc0IsV0FBVyxZQUFZO0FBQ2xELGVBQUssZ0JBQWdCLFVBQVUsVUFBVTtBQUFBLFFBQzdDO0FBQUEsUUFDQSxnQkFBZ0IsWUFBWTtBQUN4QixxQkFBVyxRQUFRLEtBQUssYUFBYTtBQUNqQyxnQkFBSSxLQUFLLFlBQVksTUFBTSxXQUFXLFlBQVksR0FBRztBQUNqRDtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQ0EsZ0JBQU0sSUFBSSxlQUFlLDhCQUE4QixLQUFLLFlBQVksS0FBSyxJQUFJLENBQUMsRUFBRTtBQUFBLFFBQ3hGO0FBQUEsTUFDSjtBQUVBLE1BQU0sZ0JBQU4sY0FBNEIsaUJBQWlCO0FBQUEsUUFDekMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFDWixlQUFLLGlCQUFpQixDQUFDLFNBQVMsV0FBVyxXQUFXLFNBQVM7QUFDL0QsZUFBSyxTQUFTO0FBQUEsWUFDVixZQUFZLENBQUMsTUFBTTtBQUFBLFlBQ25CLFdBQVcsQ0FBQyxRQUFRO0FBQUEsVUFDeEI7QUFDQSxlQUFLLGNBQWMsQ0FBQyxTQUFTLFNBQVMsU0FBUyxPQUFPO0FBQUEsUUFDMUQ7QUFBQSxRQUNBLHFCQUFxQixXQUFXO0FBQzVCLGVBQUssc0JBQXNCLFdBQVcsTUFBTTtBQUM1QyxlQUFLLG1CQUFtQixVQUFVLE1BQU0sS0FBSyxjQUFjO0FBQUEsUUFDL0Q7QUFBQSxNQUNKO0FBRUEsTUFBTSxZQUFZLENBQUMsVUFBVSxXQUFXLFFBQVE7QUFDaEQsTUFBTSxZQUFOLE1BQWdCO0FBQUEsUUFDWixPQUFPLE9BQU8sV0FBV0MsT0FBTSxhQUFhLFFBQVE7QUFDaEQsZ0JBQU0sTUFBTSxJQUFJLEtBQUs7QUFDckIsY0FBSSxZQUFZO0FBQ2hCLGNBQUksT0FBT0E7QUFDWCxjQUFJLGNBQWM7QUFDbEIsY0FBSSxTQUFTO0FBQ2IsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxPQUFPLFVBQVUsTUFBTTtBQUNuQixpQkFBTyxVQUFVLFFBQVEsSUFBSSxNQUFNO0FBQUEsUUFDdkM7QUFBQSxRQUNBLEtBQUssT0FBTyxXQUFXLElBQUk7QUFDdkIsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUVBLE1BQU0sZUFBTixjQUEyQixpQkFBaUI7QUFBQSxRQUN4QyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUNaLGVBQUssU0FBUztBQUFBLFlBQ1YsWUFBWSxDQUFDLGNBQWMsV0FBVztBQUFBLFlBQ3RDLFdBQVcsQ0FBQztBQUFBLFVBQ2hCO0FBQ0EsZUFBSyxjQUFjLENBQUMsU0FBUyxTQUFTLFNBQVMsT0FBTztBQUFBLFFBQzFEO0FBQUEsUUFDQSxxQkFBcUIsV0FBVztBQUM1QixlQUFLLHNCQUFzQixXQUFXLFFBQVE7QUFDOUMsY0FBSSxFQUFFLFVBQVUsa0JBQWtCLFlBQVk7QUFDMUMsa0JBQU0sSUFBSSxVQUFVLDRCQUE0QjtBQUFBLFVBQ3BEO0FBQ0EsY0FBSSxVQUFVLE9BQU8sU0FBUyxVQUFVO0FBQ3BDLGtCQUFNLElBQUksZUFBZSw2QkFBNkI7QUFBQSxVQUMxRDtBQUNBLGNBQUksVUFBVSxPQUFPLFVBQVUsU0FBUyxLQUFLLE1BQU07QUFDL0Msa0JBQU0sSUFBSSxlQUFlLGtCQUFrQixLQUFLLElBQUksTUFBTTtBQUFBLFVBQzlEO0FBQUEsUUFDSjtBQUFBLE1BQ0o7QUFFQSxNQUFNLGlCQUFOLGNBQTZCLGFBQWE7QUFBQSxRQUN0QyxjQUFjO0FBQ1YsZ0JBQU0sR0FBRyxTQUFTO0FBQ2xCLGVBQUssT0FBTztBQUNaLGVBQUssY0FBYyxDQUFDLFVBQVUsTUFBTTtBQUFBLFFBQ3hDO0FBQUEsTUFDSjtBQUVBLE1BQU0sZ0JBQU4sY0FBNEIsaUJBQWlCO0FBQUEsUUFDekMsY0FBYztBQUNWLGdCQUFNLEdBQUcsU0FBUztBQUNsQixlQUFLLE9BQU87QUFDWixlQUFLLFNBQVM7QUFBQSxZQUNWLFlBQVksQ0FBQyxNQUFNO0FBQUEsWUFDbkIsV0FBVyxDQUFDLFFBQVE7QUFBQSxVQUN4QjtBQUNBLGVBQUssY0FBYyxDQUFDLFdBQVcsT0FBTztBQUFBLFFBQzFDO0FBQUEsTUFDSjtBQUVBLE1BQUlOLG9CQUFtQixNQUFNQSxrQkFBaUI7QUFBQSxRQUMxQyxZQUFZLE9BQU87QUFDZixjQUFJLE9BQU87QUFDUCxpQkFBSyxRQUFRO0FBQUEsVUFDakI7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUNBLGlCQUFXO0FBQUEsUUFDUCxRQUFRLEVBQUUsTUFBTSxhQUFhLGlCQUFpQixDQUFDO0FBQUEsTUFDbkQsR0FBR0Esa0JBQWlCLFdBQVcsU0FBUyxNQUFNO0FBQzlDLE1BQUFBLG9CQUFtQixXQUFXO0FBQUEsUUFDMUIsUUFBUSxFQUFFLE1BQU0sYUFBYSxPQUFPLENBQUM7QUFBQSxNQUN6QyxHQUFHQSxpQkFBZ0I7QUFFbkIsTUFBTSxzQkFBTixNQUEwQjtBQUFBLFFBQ3RCLFlBQVksUUFBUTtBQUNoQixpQkFBTyxPQUFPLE1BQU0sTUFBTTtBQUFBLFFBQzlCO0FBQUEsTUFDSjtBQUNBLGlCQUFXO0FBQUEsUUFDUCxRQUFRO0FBQUEsVUFDSixNQUFNLGFBQWE7QUFBQSxRQUN2QixDQUFDO0FBQUEsTUFDTCxHQUFHLG9CQUFvQixXQUFXLGFBQWEsTUFBTTtBQUNyRCxpQkFBVztBQUFBLFFBQ1AsUUFBUTtBQUFBLFVBQ0osTUFBTSxhQUFhO0FBQUEsVUFDbkIsVUFBVTtBQUFBLFFBQ2QsQ0FBQztBQUFBLE1BQ0wsR0FBRyxvQkFBb0IsV0FBVyxjQUFjLE1BQU07QUFFdEQsTUFBTSxpQkFBTixNQUFxQjtBQUFBLFFBQ2pCLGNBQWM7QUFDVixlQUFLLFVBQVU7QUFDZixlQUFLLHNCQUFzQixJQUFJLG9CQUFvQjtBQUNuRCxlQUFLLGFBQWEsSUFBSSxZQUFZLENBQUM7QUFBQSxRQUN2QztBQUFBLE1BQ0o7QUFDQSxpQkFBVztBQUFBLFFBQ1AsUUFBUSxFQUFFLE1BQU0sYUFBYSxRQUFRLENBQUM7QUFBQSxNQUMxQyxHQUFHLGVBQWUsV0FBVyxXQUFXLE1BQU07QUFDOUMsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQUEsTUFDekMsR0FBRyxlQUFlLFdBQVcsdUJBQXVCLE1BQU07QUFDMUQsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLGFBQWEsWUFBWSxDQUFDO0FBQUEsTUFDOUMsR0FBRyxlQUFlLFdBQVcsY0FBYyxNQUFNO0FBQ2pELGlCQUFXO0FBQUEsUUFDUCxRQUFRLEVBQUUsTUFBTSxhQUFhLEtBQUssVUFBVSxLQUFLLENBQUM7QUFBQSxNQUN0RCxHQUFHLGVBQWUsV0FBVyxjQUFjLE1BQU07QUFFakQsTUFBTSxnQkFBTixNQUFvQjtBQUFBLFFBQ2hCLGNBQWM7QUFDVixlQUFLLHFCQUFxQixJQUFJLG9CQUFvQjtBQUNsRCxlQUFLLFlBQVksSUFBSSxZQUFZLENBQUM7QUFBQSxRQUN0QztBQUFBLE1BQ0o7QUFDQSxpQkFBVztBQUFBLFFBQ1AsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFBQSxNQUN6QyxHQUFHLGNBQWMsV0FBVyxzQkFBc0IsTUFBTTtBQUN4RCxpQkFBVztBQUFBLFFBQ1AsUUFBUSxFQUFFLE1BQU0sYUFBYSxVQUFVLENBQUM7QUFBQSxNQUM1QyxHQUFHLGNBQWMsV0FBVyxhQUFhLE1BQU07QUFFL0MsTUFBTSxvQ0FBb0M7QUFBQSxRQUN0QyxVQUFVLENBQUMsVUFBVSwwQkFBUSxjQUFjLEtBQUs7QUFBQSxRQUNoRCxRQUFRLENBQUMsVUFBVSwwQkFBUSxZQUFZLElBQUksV0FBVyxLQUFLLENBQUM7QUFBQSxNQUNoRTtBQUVBLE1BQU0saUNBQWlDO0FBQUEsUUFDbkMsU0FBUyxDQUFDLFVBQVU7QUFDaEIsZ0JBQU0sV0FBVyxNQUFNLFdBQVc7QUFDbEMsaUJBQU8sQ0FBRSxJQUFJLFdBQVcsUUFBUSxFQUFFLENBQUMsSUFDN0IsTUFBTSxXQUFXLFNBQVMsTUFBTSxDQUFDLElBQ2pDLE1BQU0sV0FBVztBQUFBLFFBQzNCO0FBQUEsUUFDQSxPQUFPLENBQUMsVUFBVTtBQUNkLGdCQUFNLFdBQVcsSUFBSSxXQUFXLEtBQUssRUFBRSxDQUFDLElBQUksVUFDdEMsMkJBQVEsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxLQUFLLElBQ3pDO0FBQ04saUJBQU8sSUFBUyxRQUFRLEVBQUUsU0FBUyxDQUFDO0FBQUEsUUFDeEM7QUFBQSxNQUNKO0FBUUEsTUFBTSxnQkFBTixNQUFvQjtBQUFBLFFBQ2hCLGNBQWM7QUFDVixlQUFLLFVBQVU7QUFDZixlQUFLLFVBQVUsSUFBSSxZQUFZLENBQUM7QUFDaEMsZUFBSyxpQkFBaUIsSUFBSSxZQUFZLENBQUM7QUFDdkMsZUFBSyxrQkFBa0IsSUFBSSxZQUFZLENBQUM7QUFDeEMsZUFBSyxTQUFTLElBQUksWUFBWSxDQUFDO0FBQy9CLGVBQUssU0FBUyxJQUFJLFlBQVksQ0FBQztBQUMvQixlQUFLLFlBQVksSUFBSSxZQUFZLENBQUM7QUFDbEMsZUFBSyxZQUFZLElBQUksWUFBWSxDQUFDO0FBQ2xDLGVBQUssY0FBYyxJQUFJLFlBQVksQ0FBQztBQUFBLFFBQ3hDO0FBQUEsTUFDSjtBQUNBLGlCQUFXO0FBQUEsUUFDUCxRQUFRLEVBQUUsTUFBTSxhQUFhLFNBQVMsV0FBVyxvQkFBb0IsQ0FBQztBQUFBLE1BQzFFLEdBQUcsY0FBYyxXQUFXLFdBQVcsTUFBTTtBQUM3QyxpQkFBVztBQUFBLFFBQ1AsUUFBUSxFQUFFLE1BQU0sYUFBYSxTQUFTLFdBQVcsK0JBQStCLENBQUM7QUFBQSxRQUNqRixTQUFTLEVBQUUsTUFBTSxLQUFLLFdBQVcsa0NBQWtDLENBQUM7QUFBQSxNQUN4RSxHQUFHLGNBQWMsV0FBVyxXQUFXLE1BQU07QUFDN0MsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLGFBQWEsU0FBUyxXQUFXLCtCQUErQixDQUFDO0FBQUEsUUFDakYsU0FBUyxFQUFFLE1BQU0sS0FBSyxXQUFXLGtDQUFrQyxDQUFDO0FBQUEsTUFDeEUsR0FBRyxjQUFjLFdBQVcsa0JBQWtCLE1BQU07QUFDcEQsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLGFBQWEsU0FBUyxXQUFXLCtCQUErQixDQUFDO0FBQUEsUUFDakYsU0FBUyxFQUFFLE1BQU0sS0FBSyxXQUFXLGtDQUFrQyxDQUFDO0FBQUEsTUFDeEUsR0FBRyxjQUFjLFdBQVcsbUJBQW1CLE1BQU07QUFDckQsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLGFBQWEsU0FBUyxXQUFXLCtCQUErQixDQUFDO0FBQUEsUUFDakYsU0FBUyxFQUFFLE1BQU0sS0FBSyxXQUFXLGtDQUFrQyxDQUFDO0FBQUEsTUFDeEUsR0FBRyxjQUFjLFdBQVcsVUFBVSxNQUFNO0FBQzVDLGlCQUFXO0FBQUEsUUFDUCxRQUFRLEVBQUUsTUFBTSxhQUFhLFNBQVMsV0FBVywrQkFBK0IsQ0FBQztBQUFBLFFBQ2pGLFNBQVMsRUFBRSxNQUFNLEtBQUssV0FBVyxrQ0FBa0MsQ0FBQztBQUFBLE1BQ3hFLEdBQUcsY0FBYyxXQUFXLFVBQVUsTUFBTTtBQUM1QyxpQkFBVztBQUFBLFFBQ1AsUUFBUSxFQUFFLE1BQU0sYUFBYSxTQUFTLFdBQVcsK0JBQStCLENBQUM7QUFBQSxRQUNqRixTQUFTLEVBQUUsTUFBTSxNQUFNLFdBQVcsa0NBQWtDLENBQUM7QUFBQSxNQUN6RSxHQUFHLGNBQWMsV0FBVyxhQUFhLE1BQU07QUFDL0MsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLGFBQWEsU0FBUyxXQUFXLCtCQUErQixDQUFDO0FBQUEsUUFDakYsU0FBUyxFQUFFLE1BQU0sTUFBTSxXQUFXLGtDQUFrQyxDQUFDO0FBQUEsTUFDekUsR0FBRyxjQUFjLFdBQVcsYUFBYSxNQUFNO0FBQy9DLGlCQUFXO0FBQUEsUUFDUCxRQUFRLEVBQUUsTUFBTSxhQUFhLFNBQVMsV0FBVywrQkFBK0IsQ0FBQztBQUFBLFFBQ2pGLFNBQVMsRUFBRSxNQUFNLE1BQU0sV0FBVyxrQ0FBa0MsQ0FBQztBQUFBLE1BQ3pFLEdBQUcsY0FBYyxXQUFXLGVBQWUsTUFBTTtBQUNqRCxpQkFBVztBQUFBLFFBQ1AsUUFBUSxFQUFFLE1BQU0sYUFBYSxLQUFLLFVBQVUsS0FBSyxDQUFDO0FBQUEsTUFDdEQsR0FBRyxjQUFjLFdBQVcsbUJBQW1CLE1BQU07QUFFckQsTUFBTSxlQUFOLE1BQW1CO0FBQUEsUUFDZixjQUFjO0FBQ1YsZUFBSyxVQUFVLElBQUksWUFBWSxDQUFDO0FBQ2hDLGVBQUssaUJBQWlCLElBQUksWUFBWSxDQUFDO0FBQUEsUUFDM0M7QUFBQSxNQUNKO0FBQ0EsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLGFBQWEsU0FBUyxXQUFXLCtCQUErQixDQUFDO0FBQUEsUUFDakYsU0FBUyxFQUFFLE1BQU0sS0FBSyxXQUFXLGtDQUFrQyxDQUFDO0FBQUEsTUFDeEUsR0FBRyxhQUFhLFdBQVcsV0FBVyxNQUFNO0FBQzVDLGlCQUFXO0FBQUEsUUFDUCxRQUFRLEVBQUUsTUFBTSxhQUFhLFNBQVMsV0FBVywrQkFBK0IsQ0FBQztBQUFBLFFBQ2pGLFNBQVMsRUFBRSxNQUFNLEtBQUssV0FBVyxrQ0FBa0MsQ0FBQztBQUFBLE1BQ3hFLEdBQUcsYUFBYSxXQUFXLGtCQUFrQixNQUFNO0FBRW5ELE1BQUksY0FBYyxNQUFNTyxhQUFZO0FBQUEsUUFDaEMsWUFBWSxPQUFPO0FBQ2YsZUFBSyxRQUFRLElBQUksWUFBWSxDQUFDO0FBQzlCLGNBQUksT0FBTztBQUNQLGlCQUFLLFFBQVE7QUFBQSxVQUNqQjtBQUFBLFFBQ0o7QUFBQSxRQUNBLFNBQVM7QUFDTCxjQUFJLFFBQVEsSUFBSSxXQUFXLEtBQUssS0FBSztBQUNyQyxjQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQU07QUFDbkIsa0JBQU0sSUFBSSxZQUFZLHdFQUF3RTtBQUFBLFVBQ2xHO0FBQ0Esa0JBQVEsSUFBSSxXQUFXLEtBQUssTUFBTSxNQUFNLENBQUMsQ0FBQztBQUMxQyxnQkFBTUMsUUFBTyxNQUFNLFNBQVM7QUFDNUIsZ0JBQU1OLFVBQVM7QUFDZixnQkFBTSxPQUFPO0FBQUEsWUFDVCxHQUFHLDBCQUFRLFlBQVksTUFBTSxPQUFPLE1BQU1BLFNBQVFBLFVBQVNNLEtBQUksQ0FBQztBQUFBLFlBQ2hFLEdBQUcsMEJBQVEsWUFBWSxNQUFNLE9BQU8sTUFBTU4sVUFBU00sT0FBTU4sVUFBU00sUUFBT0EsS0FBSSxDQUFDO0FBQUEsVUFDbEY7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLFNBQVMsTUFBTTtBQUNYLGNBQUksRUFBRSxPQUFPLE9BQU87QUFDaEIsa0JBQU0sSUFBSSxNQUFNLDhCQUE4QjtBQUFBLFVBQ2xEO0FBQ0EsY0FBSSxFQUFFLE9BQU8sT0FBTztBQUNoQixrQkFBTSxJQUFJLE1BQU0sOEJBQThCO0FBQUEsVUFDbEQ7QUFDQSxnQkFBTSxJQUFJLDBCQUFRLGNBQWMsS0FBSyxDQUFDO0FBQ3RDLGdCQUFNLElBQUksMEJBQVEsY0FBYyxLQUFLLENBQUM7QUFDdEMsZ0JBQU0sWUFBUSwyQkFBUSxJQUFJLFdBQVcsQ0FBQyxDQUFJLENBQUMsRUFBRSxRQUFRLEdBQUcsQ0FBQztBQUN6RCxlQUFLLFFBQVEsSUFBSSxXQUFXLEtBQUssRUFBRTtBQUNuQyxpQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNKO0FBQ0EsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLGFBQWEsWUFBWSxDQUFDO0FBQUEsTUFDOUMsR0FBRyxZQUFZLFdBQVcsU0FBUyxNQUFNO0FBQ3pDLG9CQUFjLFdBQVc7QUFBQSxRQUNyQixRQUFRLEVBQUUsTUFBTSxhQUFhLE9BQU8sQ0FBQztBQUFBLE1BQ3pDLEdBQUcsV0FBVztBQUVkLE1BQU0sZUFBTixNQUFtQjtBQUFBLFFBQ2YsY0FBYztBQUNWLGVBQUssVUFBVTtBQUNmLGVBQUssYUFBYSxJQUFJLFlBQVksQ0FBQztBQUFBLFFBQ3ZDO0FBQUEsUUFDQSxTQUFTLE1BQU07QUFDWCxjQUFJLEVBQUUsT0FBTyxPQUFPO0FBQ2hCLGtCQUFNLElBQUksTUFBTSw4QkFBOEI7QUFBQSxVQUNsRDtBQUNBLGVBQUssYUFBYSwwQkFBUSxjQUFjLEtBQUssQ0FBQztBQUM5QyxjQUFJLE9BQU8sTUFBTTtBQUNiLGtCQUFNLFlBQVksSUFBSSxZQUFZO0FBQ2xDLHNCQUFVLFNBQVMsSUFBSTtBQUN2QixrQkFBTSxNQUFNLGNBQWMsTUFBTSxTQUFTO0FBQ3pDLGdCQUFJLGNBQWMsSUFBSSxZQUFZO0FBQzlCLG1CQUFLLFlBQVksSUFBSSxXQUFXO0FBQUEsWUFDcEM7QUFBQSxVQUNKO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxTQUFTO0FBQ0wsZ0JBQU0sTUFBTSxDQUFDO0FBQ2IsY0FBSSxJQUFJLDBCQUFRLFlBQVksS0FBSyxVQUFVO0FBQzNDLGNBQUksS0FBSyxXQUFXO0FBQ2hCLG1CQUFPLE9BQU8sS0FBSyxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUUsT0FBTyxDQUFDO0FBQUEsVUFDL0Q7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNKO0FBQ0EsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLGFBQWEsU0FBUyxXQUFXLG9CQUFvQixDQUFDO0FBQUEsTUFDMUUsR0FBRyxhQUFhLFdBQVcsV0FBVyxNQUFNO0FBQzVDLGlCQUFXO0FBQUEsUUFDUCxRQUFRLEVBQUUsTUFBTSxhQUFhLFlBQVksQ0FBQztBQUFBLE1BQzlDLEdBQUcsYUFBYSxXQUFXLGNBQWMsTUFBTTtBQUMvQyxpQkFBVztBQUFBLFFBQ1AsUUFBUSxFQUFFLFNBQVMsR0FBRyxNQUFNLGFBQWEsS0FBSyxVQUFVLEtBQUssQ0FBQztBQUFBLE1BQ2xFLEdBQUcsYUFBYSxXQUFXLGNBQWMsTUFBTTtBQUMvQyxpQkFBVztBQUFBLFFBQ1AsUUFBUSxFQUFFLFNBQVMsR0FBRyxNQUFNLGFBQWEsV0FBVyxVQUFVLEtBQUssQ0FBQztBQUFBLE1BQ3hFLEdBQUcsYUFBYSxXQUFXLGFBQWEsTUFBTTtBQUU5QyxNQUFNLG9DQUFvQztBQUFBLFFBQ3RDLFNBQVMsQ0FBQyxVQUFVO0FBQ2hCLGdCQUFNLFFBQVEsSUFBSSxXQUFXLE1BQU0sV0FBVyxRQUFRO0FBQ3RELGlCQUFRLE1BQU0sQ0FBQyxNQUFNLElBQ2YsTUFBTSxPQUFPLE1BQU0sQ0FBQyxJQUNwQixNQUFNO0FBQUEsUUFDaEI7QUFBQSxRQUNBLE9BQU8sQ0FBQyxVQUFVO0FBQ2QsZ0JBQU0sUUFBUSxJQUFJLFdBQVcsS0FBSztBQUNsQyxjQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUs7QUFDaEIsa0JBQU0sV0FBVyxJQUFJLFdBQVcsTUFBTSxTQUFTLENBQUM7QUFDaEQscUJBQVMsSUFBSSxPQUFPLENBQUM7QUFDckIsbUJBQU8sSUFBUyxRQUFRLEVBQUUsVUFBVSxTQUFTLE9BQU8sQ0FBQztBQUFBLFVBQ3pEO0FBQ0EsaUJBQU8sSUFBUyxRQUFRLEVBQUUsVUFBVSxNQUFNLENBQUM7QUFBQSxRQUMvQztBQUFBLE1BQ0o7QUFFQSxNQUFJLFVBQXVCLHVCQUFPLE9BQU87QUFBQSxRQUN2QyxXQUFXO0FBQUEsUUFDWDtBQUFBLE1BQ0YsQ0FBQztBQUVELE1BQU0sVUFBTixNQUFjO0FBQUEsUUFDVixPQUFPLFlBQVksTUFBTSxXQUFXO0FBQ2hDLGdCQUFNLE9BQU8sd0NBQXNCLGFBQWEsSUFBSTtBQUNwRCxjQUFLLEtBQUssV0FBVyxLQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUk7QUFDeEMsa0JBQU0sSUFBSSxNQUFNLDBDQUEwQztBQUFBLFVBQzlEO0FBQ0EsZ0JBQU0sS0FBSyxLQUFLLFNBQVMsS0FBSztBQUM5QixjQUFJLE1BQU8sS0FBSyxLQUFLLFlBQVksQ0FBQyxHQUFJO0FBQ2xDLGtCQUFNLElBQUksTUFBTSxpQ0FBaUM7QUFBQSxVQUNyRDtBQUNBLGdCQUFNLEtBQUssS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzlCLGdCQUFNLEtBQUssS0FBSyxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQztBQUN0QyxpQkFBTyxFQUFFLEdBQUcsSUFBSSxHQUFHLEdBQUc7QUFBQSxRQUMxQjtBQUFBLFFBQ0EsT0FBTyxZQUFZLE9BQU8sV0FBVztBQUNqQyxnQkFBTUEsUUFBTyxLQUFLLEtBQUssWUFBWSxDQUFDO0FBQ3BDLGNBQUksTUFBTSxFQUFFLGVBQWVBLFNBQVEsTUFBTSxFQUFFLGVBQWVBLE9BQU07QUFDNUQsa0JBQU0sSUFBSSxNQUFNLGlEQUFpRDtBQUFBLFVBQ3JFO0FBQ0EsZ0JBQU0sSUFBSSx3Q0FBc0IsYUFBYSxNQUFNLENBQUM7QUFDcEQsZ0JBQU0sSUFBSSx3Q0FBc0IsYUFBYSxNQUFNLENBQUM7QUFDcEQsZ0JBQU0sTUFBTSxJQUFJLFdBQVdBLFFBQU8sSUFBSSxDQUFDO0FBQ3ZDLGNBQUksQ0FBQyxJQUFJO0FBQ1QsY0FBSSxJQUFJLEdBQUcsQ0FBQztBQUNaLGNBQUksSUFBSSxHQUFHQSxRQUFPLENBQUM7QUFDbkIsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxPQUFPLFFBQVEsV0FBVztBQUN0QixpQkFBTyxLQUFLLEtBQUssWUFBWSxDQUFDO0FBQUEsUUFDbEM7QUFBQSxRQUNBLE9BQU8sZ0JBQWdCLFdBQVcsV0FBVztBQUN6QyxnQkFBTUEsUUFBTyxLQUFLLFFBQVEsU0FBUztBQUNuQyxnQkFBTSxJQUFJLHdDQUFzQixhQUFhLFVBQVUsQ0FBQztBQUN4RCxnQkFBTSxJQUFJLHdDQUFzQixhQUFhLFVBQVUsQ0FBQztBQUN4RCxnQkFBTSxNQUFNLElBQUksV0FBV0EsUUFBTyxDQUFDO0FBQ25DLGNBQUksSUFBSSxLQUFLLFNBQVMsR0FBR0EsS0FBSSxDQUFDO0FBQzlCLGNBQUksSUFBSSxLQUFLLFNBQVMsR0FBR0EsS0FBSSxHQUFHQSxLQUFJO0FBQ3BDLGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EsT0FBTyxnQkFBZ0IsTUFBTSxXQUFXO0FBQ3BDLGdCQUFNQSxRQUFPLEtBQUssUUFBUSxTQUFTO0FBQ25DLGdCQUFNLE9BQU8sd0NBQXNCLGFBQWEsSUFBSTtBQUNwRCxjQUFJLEtBQUssV0FBWUEsUUFBTyxHQUFJO0FBQzVCLGtCQUFNLElBQUksTUFBTSxpQ0FBaUM7QUFBQSxVQUNyRDtBQUNBLGdCQUFNLElBQUksS0FBSyxNQUFNLEdBQUdBLEtBQUk7QUFDNUIsZ0JBQU0sSUFBSSxLQUFLLE1BQU1BLEtBQUk7QUFDekIsaUJBQU87QUFBQSxZQUNILEdBQUcsS0FBSyxVQUFVLENBQUM7QUFBQSxZQUNuQixHQUFHLEtBQUssVUFBVSxDQUFDO0FBQUEsVUFDdkI7QUFBQSxRQUNKO0FBQUEsUUFDQSxPQUFPLFVBQVUsTUFBTTtBQUNuQixjQUFJLElBQUk7QUFDUixpQkFBUSxJQUFJLEtBQUssU0FBUyxLQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUk7QUFDN0M7QUFBQSxVQUNKO0FBQ0EsY0FBSSxNQUFNLEdBQUc7QUFDVCxtQkFBTztBQUFBLFVBQ1g7QUFDQSxpQkFBTyxLQUFLLE1BQU0sR0FBRyxLQUFLLE1BQU07QUFBQSxRQUNwQztBQUFBLFFBQ0EsT0FBTyxTQUFTLE1BQU1BLE9BQU07QUFDeEIsY0FBSUEsVUFBUyxLQUFLLFFBQVE7QUFDdEIsbUJBQU87QUFBQSxVQUNYO0FBQ0EsZ0JBQU0sTUFBTSxJQUFJLFdBQVdBLEtBQUk7QUFDL0IsY0FBSSxJQUFJLE1BQU1BLFFBQU8sS0FBSyxNQUFNO0FBQ2hDLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFFQSxNQUFNLGlCQUFOLE1BQU0sZ0JBQWU7QUFBQSxRQUNqQixjQUFjO0FBQ1YsZUFBSyxJQUFJLElBQUksWUFBWSxDQUFDO0FBQzFCLGVBQUssSUFBSSxJQUFJLFlBQVksQ0FBQztBQUFBLFFBQzlCO0FBQUEsUUFDQSxPQUFPLHVCQUF1QixPQUFPO0FBQ2pDLGdCQUFNLFlBQVksTUFBTSxhQUFhO0FBQ3JDLGdCQUFNLFFBQVEsUUFBUSxnQkFBZ0IsT0FBTyxZQUFZLENBQUM7QUFDMUQsZ0JBQU0sY0FBYyxJQUFJLGdCQUFlO0FBQ3ZDLHNCQUFZLElBQUksd0NBQXNCLGNBQWMsTUFBTSxDQUFDO0FBQzNELHNCQUFZLElBQUksd0NBQXNCLGNBQWMsTUFBTSxDQUFDO0FBQzNELGlCQUFPO0FBQUEsUUFDWDtBQUFBLFFBQ0EscUJBQXFCLFdBQVc7QUFDNUIsY0FBSSxDQUFDLFdBQVc7QUFDWixrQkFBTSxpQkFBaUIsS0FBSyxJQUFJLEtBQUssRUFBRSxZQUFZLEtBQUssRUFBRSxVQUFVO0FBQ3BFLGdCQUFJLGtCQUFrQixJQUFJO0FBQ3RCLDBCQUFZO0FBQUEsWUFDaEIsV0FDUyxrQkFBa0IsSUFBSTtBQUMzQiwwQkFBWTtBQUFBLFlBQ2hCLE9BQ0s7QUFDRCwwQkFBWTtBQUFBLFlBQ2hCO0FBQUEsVUFDSjtBQUNBLGdCQUFNLFlBQVksUUFBUSxnQkFBZ0IsTUFBTSxTQUFTO0FBQ3pELGlCQUFPLFVBQVU7QUFBQSxRQUNyQjtBQUFBLE1BQ0o7QUFDQSxpQkFBVztBQUFBLFFBQ1AsUUFBUSxFQUFFLE1BQU0sYUFBYSxTQUFTLFdBQVcsa0NBQWtDLENBQUM7QUFBQSxNQUN4RixHQUFHLGVBQWUsV0FBVyxLQUFLLE1BQU07QUFDeEMsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLGFBQWEsU0FBUyxXQUFXLGtDQUFrQyxDQUFDO0FBQUEsTUFDeEYsR0FBRyxlQUFlLFdBQVcsS0FBSyxNQUFNO0FBRXhDLE1BQU0sbUJBQU4sY0FBK0IsZUFBZTtBQUFBLE1BQzlDO0FBQ0EsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxTQUFTLEdBQUcsVUFBVSxNQUFNLE1BQU0sYUFBYSxXQUFXLFVBQVUsS0FBSyxDQUFDO0FBQUEsTUFDeEYsR0FBRyxpQkFBaUIsV0FBVyxhQUFhLE1BQU07QUFFbEQsTUFBSSxlQUFlLE1BQU1DLGNBQWE7QUFBQSxRQUNsQyxjQUFjO0FBQ1YsZUFBSyxRQUFRLElBQUksWUFBWSxDQUFDO0FBQUEsUUFDbEM7QUFBQSxRQUNBLFNBQVMsTUFBTTtBQUNYLGNBQUksQ0FBQyxLQUFLLEdBQUc7QUFDVCxrQkFBTSxJQUFJLE1BQU0sOEJBQThCO0FBQUEsVUFDbEQ7QUFDQSxlQUFLLFFBQVEsMEJBQVEsY0FBYyxLQUFLLENBQUM7QUFDekMsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxTQUFTO0FBQ0wsZ0JBQU0sTUFBTTtBQUFBLFlBQ1IsR0FBRywwQkFBUSxZQUFZLEtBQUssS0FBSztBQUFBLFVBQ3JDO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUNBLGlCQUFXO0FBQUEsUUFDUCxRQUFRLEVBQUUsTUFBTSxhQUFhLFlBQVksQ0FBQztBQUFBLE1BQzlDLEdBQUcsYUFBYSxXQUFXLFNBQVMsTUFBTTtBQUMxQyxxQkFBZSxXQUFXO0FBQUEsUUFDdEIsUUFBUSxFQUFFLE1BQU0sYUFBYSxPQUFPLENBQUM7QUFBQSxNQUN6QyxHQUFHLFlBQVk7QUFFZixNQUFJLGNBQWMsTUFBTUMsYUFBWTtBQUFBLFFBQ2hDLFlBQVksT0FBTztBQUNmLGVBQUssUUFBUSxJQUFJLFlBQVksQ0FBQztBQUM5QixjQUFJLE9BQU87QUFDUCxpQkFBSyxRQUFRO0FBQUEsVUFDakI7QUFBQSxRQUNKO0FBQUEsUUFDQSxTQUFTO0FBQ0wsZ0JBQU0sT0FBTztBQUFBLFlBQ1QsR0FBRywwQkFBUSxZQUFZLEtBQUssS0FBSztBQUFBLFVBQ3JDO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsUUFDQSxTQUFTLE1BQU07QUFDWCxjQUFJLEVBQUUsT0FBTyxPQUFPO0FBQ2hCLGtCQUFNLElBQUksTUFBTSw4QkFBOEI7QUFBQSxVQUNsRDtBQUNBLGVBQUssUUFBUSwwQkFBUSxjQUFjLEtBQUssQ0FBQztBQUN6QyxpQkFBTztBQUFBLFFBQ1g7QUFBQSxNQUNKO0FBQ0EsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLGFBQWEsVUFBVSxDQUFDO0FBQUEsTUFDNUMsR0FBRyxZQUFZLFdBQVcsU0FBUyxNQUFNO0FBQ3pDLG9CQUFjLFdBQVc7QUFBQSxRQUNyQixRQUFRLEVBQUUsTUFBTSxhQUFhLE9BQU8sQ0FBQztBQUFBLE1BQ3pDLEdBQUcsV0FBVztBQUVkLE1BQUksa0JBQWtCLE1BQU1DLGlCQUFnQjtBQUFBLE1BQzVDO0FBQ0EsaUJBQVc7QUFBQSxRQUNQLFFBQVEsRUFBRSxNQUFNLGFBQWEsWUFBWSxDQUFDO0FBQUEsUUFDMUMsU0FBUyxFQUFFLE1BQU0sY0FBYyxRQUFRLFdBQVcsa0NBQWtDLENBQUM7QUFBQSxNQUN6RixHQUFHLGdCQUFnQixXQUFXLEtBQUssTUFBTTtBQUN6Qyx3QkFBa0IsV0FBVztBQUFBLFFBQ3pCLFFBQVEsRUFBRSxNQUFNLGFBQWEsT0FBTyxDQUFDO0FBQUEsTUFDekMsR0FBRyxlQUFlO0FBRWxCLE1BQU0sY0FBYztBQUNwQixNQUFNLGtCQUFrQjtBQUN4QixNQUFNLGNBQWMsR0FBRyxlQUFlO0FBQ3RDLE1BQU0sY0FBYyxHQUFHLGVBQWU7QUFDdEMsTUFBTSxjQUFjLEdBQUcsZUFBZTtBQUN0QyxNQUFNLGVBQWU7QUFDckIsTUFBTSxvQkFBb0IsR0FBRyxZQUFZO0FBQ3pDLE1BQU0sb0JBQW9CLEdBQUcsWUFBWTtBQUN6QyxNQUFNLG9CQUFvQixHQUFHLFlBQVk7QUFDekMsTUFBTSxvQkFBb0IsR0FBRyxZQUFZO0FBQ3pDLE1BQU0sb0JBQW9CLEdBQUcsWUFBWTtBQUN6QyxNQUFNLG9CQUFvQixHQUFHLFlBQVk7QUFDekMsTUFBTSxvQkFBb0IsR0FBRyxZQUFZO0FBQ3pDLE1BQU0sb0JBQW9CLEdBQUcsWUFBWTtBQUN6QyxNQUFNLG9CQUFvQixHQUFHLFlBQVk7QUFDekMsTUFBTSxvQkFBb0IsR0FBRyxZQUFZO0FBQ3pDLE1BQU0sb0JBQW9CLEdBQUcsWUFBWTtBQUN6QyxNQUFNLG9CQUFvQixHQUFHLFlBQVk7QUFDekMsTUFBTSxvQkFBb0IsR0FBRyxZQUFZO0FBQ3pDLE1BQU0sb0JBQW9CLEdBQUcsWUFBWTtBQUN6QyxNQUFNLFdBQVc7QUFDakIsTUFBTSxTQUFTO0FBQ2YsTUFBTSxZQUFZO0FBQ2xCLE1BQU0sVUFBVTtBQUVoQixNQUFJLFVBQXVCLHVCQUFPLE9BQU87QUFBQSxRQUN2QyxXQUFXO0FBQUEsUUFDWDtBQUFBLFFBQ0EsSUFBSSxrQkFBbUI7QUFBRSxpQkFBTztBQUFBLFFBQWlCO0FBQUEsUUFDakQ7QUFBQSxRQUNBO0FBQUEsUUFDQSxJQUFJLGNBQWU7QUFBRSxpQkFBTztBQUFBLFFBQWE7QUFBQSxRQUN6QyxJQUFJLGVBQWdCO0FBQUUsaUJBQU87QUFBQSxRQUFjO0FBQUEsUUFDM0MsSUFBSSxjQUFlO0FBQUUsaUJBQU87QUFBQSxRQUFhO0FBQUEsUUFDekMsSUFBSSxtQkFBb0I7QUFBRSxpQkFBT1g7QUFBQSxRQUFrQjtBQUFBLFFBQ25EO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0EsWUFBWTtBQUFBLFFBQ1o7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BQ0YsQ0FBQztBQUVELE1BQU0sV0FBTixNQUFlO0FBQUEsUUFDWCxjQUFjO0FBQUEsUUFBRTtBQUFBLFFBQ2hCLE9BQU8sU0FBUyxNQUFNO0FBQ2xCLGdCQUFNLE1BQU0sSUFBSUEsa0JBQWlCO0FBQ2pDLGNBQUksUUFBUSxLQUFLO0FBQ2pCLGdCQUFNLE1BQU0sV0FBVyxVQUFVLEdBQUc7QUFDcEMsZUFBSyxNQUFNLEtBQUs7QUFBQSxZQUNaLEdBQUc7QUFBQSxZQUNIO0FBQUEsVUFDSixDQUFDO0FBQ0QsZUFBSyxNQUFNLEtBQUssS0FBSyxJQUFJO0FBQUEsUUFDN0I7QUFBQSxRQUNBLE9BQU8sS0FBSyxVQUFVO0FBQ2xCLHFCQUFXLFNBQVMsWUFBWTtBQUNoQyxxQkFBVyxRQUFRLEtBQUssT0FBTztBQUMzQixnQkFBSSxLQUFLLEtBQUssWUFBWSxNQUFNLFlBQVksS0FBSyxHQUFHLFlBQVksTUFBTSxVQUFVO0FBQzVFLHFCQUFPO0FBQUEsWUFDWDtBQUFBLFVBQ0o7QUFDQSxpQkFBTztBQUFBLFFBQ1g7QUFBQSxRQUNBLE9BQU8sSUFBSSxVQUFVO0FBQ2pCLGdCQUFNLE1BQU0sS0FBSyxLQUFLLFFBQVE7QUFDOUIsY0FBSSxDQUFDLEtBQUs7QUFDTixrQkFBTSxJQUFJLE1BQU0sK0JBQStCLFFBQVEsR0FBRztBQUFBLFVBQzlEO0FBQ0EsaUJBQU87QUFBQSxRQUNYO0FBQUEsTUFDSjtBQUNBLGVBQVMsUUFBUSxDQUFDO0FBQ2xCLGVBQVMsUUFBUSxDQUFDO0FBQ2xCLGVBQVMsU0FBUyxFQUFFLE1BQU0sU0FBUyxJQUFJLGFBQWEsTUFBTSxJQUFJLENBQUM7QUFDL0QsZUFBUyxTQUFTLEVBQUUsTUFBTSxTQUFTLElBQUksYUFBYSxNQUFNLElBQUksQ0FBQztBQUMvRCxlQUFTLFNBQVMsRUFBRSxNQUFNLFNBQVMsSUFBSSxhQUFhLE1BQU0sSUFBSSxDQUFDO0FBQy9ELGVBQVMsU0FBUyxFQUFFLE1BQU0sU0FBUyxJQUFJLGFBQWEsTUFBTSxJQUFJLENBQUM7QUFDL0QsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsSUFBSSxtQkFBbUIsTUFBTSxJQUFJLENBQUM7QUFDL0UsZUFBUyxTQUFTLEVBQUUsTUFBTSxtQkFB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LGNBQ04sS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsTUFBTTtBQUFBLGNBQ04sT0FBTztBQUFBLFlBQ1I7QUFBQSxZQUNBLFFBQVE7QUFBQSxjQUNQLE1BQU07QUFBQSxjQUNOLEtBQUs7QUFBQSxjQUNMLEtBQUs7QUFBQSxjQUNMLEtBQUs7QUFBQSxjQUNMLE1BQU07QUFBQSxjQUNOLE9BQU87QUFBQSxZQUNSO0FBQUEsWUFDQSxRQUFRO0FBQUEsY0FDUCxNQUFNO0FBQUEsY0FDTixLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxNQUFNO0FBQUEsY0FDTixPQUFPO0FBQUEsWUFDUjtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUEsUUFFQSxJQUFJO0FBQUEsVUFDSCxVQUFVO0FBQUEsWUFDVCxJQUFJLENBQUMsVUFBVSxNQUFNLEtBQUs7QUFBQSxZQUMxQixNQUFNLENBQUMsVUFBVSxVQUFVLEtBQUs7QUFBQSxZQUNoQyxRQUFRLENBQUMsVUFBVSxRQUFRLEtBQUs7QUFBQSxZQUNoQyxTQUFTLE1BQU07QUFBQSxVQUNoQjtBQUFBLFVBQ0EsT0FBTztBQUFBLFlBQ04sS0FBSztBQUFBLGNBQ0osTUFBTTtBQUFBLGNBQ04sS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsTUFBTTtBQUFBLGNBQ04sT0FBTztBQUFBLFlBQ1I7QUFBQSxZQUNBLE1BQU07QUFBQSxjQUNMLE1BQU07QUFBQSxjQUNOLEtBQUs7QUFBQSxjQUNMLEtBQUs7QUFBQSxjQUNMLEtBQUs7QUFBQSxjQUNMLE1BQU07QUFBQSxjQUNOLE9BQU87QUFBQSxZQUNSO0FBQUEsWUFDQSxRQUFRO0FBQUEsY0FDUCxNQUFNO0FBQUEsY0FDTixLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxNQUFNO0FBQUEsY0FDTixPQUFPO0FBQUEsWUFDUjtBQUFBLFlBQ0EsUUFBUTtBQUFBLGNBQ1AsTUFBTTtBQUFBLGNBQ04s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SztBQUFBLGNBQ0wsTUFBTTtBQUFBLGNBQ04sT0FBTztBQUFBLFlBQ1I7QUFBQSxZQUNBLFFBQVE7QUFBQSxjQUNQLE1BQU07QUFBQSxjQUNOLEtBQUs7QUFBQSxjQUNMLEtBQUs7QUFBQSxjQUNMLEtBQUs7QUFBQSxjQUNMLE1BQU07QUFBQSxjQUNOLE9BQU87QUFBQSxZQUNSO0FBQUEsWUFDQSxRQUFRO0FBQUEsY0FDUCxNQUFNO0FBQUEsY0FDTixLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxNQUFNO0FBQUEsY0FDTixPQUFPO0FBQUEsWUFDUjtBQUFBLFVBQ0Q7QUFBQSxRQUNEO0FBQUEsUUFFQSxJQUFJO0FBQUEsVUFDSCxVQUFVO0FBQUEsWUFDVCxJQUFJLENBQUMsVUFBVSxNQUFNLEtBQUs7QUFBQSxZQUMxQixNQUFNLENBQUMsVUFBVSxTQUFNLEtBQUs7QUFBQSxZQUM1QixRQUFRLENBQUMsVUFBVSxNQUFNLEtBQUs7QUFBQSxZQUM5QixTQUFTLE1BQU07QUFBQSxVQUNoQjtBQUFBLFVBQ0EsT0FBTztBQUFBLFlBQ04sS0FBSztBQUFBLGNBQ0osTUFBTTtBQUFBLGNBQ04sS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsTUFBTTtBQUFBLGNBQ04sT0FBTztBQUFBLFlBQ1I7QUFBQSxZQUNBLE1BQU07QUFBQSxjQUNMLE1BQU07QUFBQSxjQUNOLEtBQUs7QUFBQSxjQUNMLEtBQUs7QUFBQSxjQUNMLEtBQUs7QUFBQSxjQUNMLE1BQU07QUFBQSxjQUNOLE9BQU87QUFBQSxZQUNSO0FBQUEsWUFDQSxRQUFRO0FBQUEsY0FDUCxNQUFNO0FBQUEsY0FDTixLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxNQUFNO0FBQUEsY0FDTixPQUFPO0FBQUEsWUFDUjtBQUFBLFlBQ0EsUUFBUTtBQUFBLGNBQ1AsTUFBTTtBQUFBLGNBQ04sS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFBLGNBQ0wsS0FBSztBQUFB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O0FBQUEsUUFDSTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLFFBQ0ksQ0FBQztBQUFBLFFBQ0Q7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFBQSxNQUVBO0FBQUEsUUFDSTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxNQUNKO0FBQUEsTUFFQTtBQUFBLFFBQ0k7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsTUFDSjtBQUFBLE1BRUE7QUFBQSxRQUNJO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFBQSxNQUVBO0FBQUEsUUFDSTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsVUFDSSxHQUFHO0FBQUEsVUFDSCxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLFFBQ0k7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQSxDQUFDO0FBQUEsUUFDRDtBQUFBLE1BQ0o7QUFBQSxNQUNBO0FBQUEsUUFDSTtBQUFBLFVBQ0ksR0FBRztBQUFBLFFBQ1A7QUFBQSxRQUNBO0FBQUEsVUFDSSxHQUFHO0FBQUEsUUFDUDtBQUFBLFFBQ0E7QUFBQSxNQUNKO0FBQUEsTUFDQTtBQUFBLFFBQ0ksQ0FBQztBQUFBLFFBQ0Q7QUFBQSxVQUNJLEdBQUc7QUFBQSxRQUNQO0FBQUEsUUFDQTtBQUFBLE1BQ0o7QUFBQSxNQUFHO0FBQUEsUUFDSCxDQUFDO0FBQUEsUUFDRCxFQUFDLEdBQUcsT0FBUztBQUFBLFFBQ2I7QUFBQSxNQUNKO0FBQUEsSUFHQSxFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFVBQUlJLEtBQUksS0FBSyxNQUFNO0FBQ25CLFVBQUksSUFBSSxLQUFLLE1BQU07QUFDbkIsVUFBSSxJQUFJLEtBQUssTUFBTTtBQUduQixTQUFHLHdCQUF3QixHQUFHLFdBQVk7QUFDdEMsWUFBSSxJQUFJLEtBQUtBLElBQUcsQ0FBQztBQUNqQixlQUFPLEtBQUssVUFBVSxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUFBLE1BQ3hDLENBQUM7QUFBQSxJQUdMLENBQUM7QUFBQSxFQUVMLENBQUM7OztBQzdPRDtBQUNBO0FBR0EsV0FBUyxhQUFhLFdBQVk7QUFHOUIsYUFBUywwQ0FBMEMsV0FBWTtBQUUzRCxTQUFHLHNCQUFzQixXQUFZO0FBRWpDLGNBQU0sVUFBVSxLQUFLLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBMEJyQztBQUVVLFlBQUk7QUFDQSxvQkFBVSxTQUFTLGFBQWEsTUFBTSxXQUFXO0FBQUEsUUFDckQsU0FBUyxPQUFPO0FBQ1osaUJBQU8sS0FBSyxFQUFFLEdBQUcsR0FBRyxXQUFXLEtBQUs7QUFBQSxRQUN4QztBQUFBLE1BS0osQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUdELGFBQVMsV0FBVyxXQUFZO0FBRTVCLFNBQUcsc0JBQXNCLFdBQVk7QUFFakMsY0FBTSxVQUFVO0FBQUEsVUFDWixTQUFTO0FBQUEsWUFDTCxLQUFLO0FBQUEsY0FDRCxJQUFJO0FBQUEsY0FDSixNQUFNO0FBQUEsY0FDTixRQUFRO0FBQUEsWUFFWjtBQUFBLFlBQ0EsS0FBSztBQUFBLGNBQ0QsSUFBSTtBQUFBLGNBQ0osTUFBTTtBQUFBLGNBQ04sUUFBUTtBQUFBLFlBQ1o7QUFBQSxZQUNBLEtBQUs7QUFBQSxjQUNELElBQUk7QUFBQSxjQUNKLE1BQU07QUFBQSxjQUNOLFFBQVE7QUFBQSxZQUNaO0FBQUEsWUFDQSxLQUFLO0FBQUEsY0FDRCxJQUFJO0FBQUEsY0FDSixNQUFNO0FBQUEsY0FDTixRQUFRO0FBQUEsWUFDWjtBQUFBLFlBQ0EsS0FBSztBQUFBLGNBQ0QsSUFBSTtBQUFBLGNBQ0osTUFBTTtBQUFBLGNBQ04sUUFBUTtBQUFBLFlBQ1o7QUFBQSxZQUNBLEtBQUs7QUFBQSxjQUNELElBQUk7QUFBQSxjQUNKLE1BQU07QUFBQSxjQUNOLFFBQVE7QUFBQSxZQUNaO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFFQSxjQUFNLFFBQVEsVUFBVSxTQUFTLGFBQWEsTUFBTSxRQUFRO0FBRTVELGVBQU8sS0FBSyxFQUFFLEdBQUcsR0FBRyxXQUFXQyxTQUFRO0FBQ3ZDLGVBQU8sTUFBTSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFDL0IsZUFBTyxNQUFNLFNBQVMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLGdTQUF3UTtBQUFBLE1BR2pULENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxhQUFTLGVBQWUsV0FBWTtBQUVoQyxVQUFJLE9BQU87QUFBQSxRQUNQLFNBQVM7QUFBQSxVQUNMLEtBQUs7QUFBQSxZQUNELElBQUk7QUFBQSxZQUNKLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxVQUVaO0FBQUEsVUFDQSxLQUFLO0FBQUEsWUFDRCxJQUFJO0FBQUEsWUFDSixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDWjtBQUFBLFVBQ0EsS0FBSztBQUFBLFlBQ0QsSUFBSTtBQUFBLFlBQ0osTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFVBQ1o7QUFBQSxVQUNBLEtBQUs7QUFBQSxZQUNELElBQUk7QUFBQSxZQUNKLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxVQUNaO0FBQUEsVUFDQSxLQUFLO0FBQUEsWUFDRCxJQUFJO0FBQUEsWUFDSixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDWjtBQUFBLFVBQ0EsS0FBSztBQUFBLFlBQ0QsSUFBSTtBQUFBLFlBQ0osTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFVBQ1o7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUVBLFNBQUcsZ0NBQWdDLFdBQVk7QUFDM0MsZUFBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsV0FBV0EsU0FBUTtBQUFBLE1BQ3ZELENBQUM7QUFFRDtBQUFBLFFBQ0ksQ0FBQyxNQUFNLGFBQWEsb1pBQTJYO0FBQUEsUUFDL1ksQ0FBQyxNQUFNLEtBQUssRUFBRTtBQUFBLFFBQ2QsQ0FBQyxNQUFNLGFBQWEsb1pBQTJYO0FBQUEsTUFDblosRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQyxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsV0FBRyxlQUFlLEtBQUssVUFBVUEsRUFBQyxJQUFJLE1BQU0sS0FBSyxVQUFVLENBQUMsSUFBSSxxQkFBcUIsS0FBSyxVQUFVLENBQUMsSUFBSSxLQUFLLFdBQVk7QUFDdEgsY0FBSSxXQUFXLFVBQVVBLElBQUcsR0FBRyxNQUFNLFFBQVE7QUFDN0MsaUJBQU8sU0FBUyxTQUFTLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQUEsUUFDM0MsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBR0wsQ0FBQztBQUVELGFBQVMsc0JBQXNCLFdBQVk7QUFXdkMsVUFBSSxPQUFPO0FBQUEsUUFDUCxTQUFTO0FBQUEsVUFDTCxLQUFLO0FBQUEsWUFDRCxJQUFJO0FBQUEsWUFDSixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDWjtBQUFBLFVBQ0EsS0FBSztBQUFBLFlBQ0QsSUFBSTtBQUFBLFlBQ0osTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFVBQ1o7QUFBQSxVQUNBLEtBQUs7QUFBQSxZQUNELElBQUk7QUFBQSxZQUNKLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxVQUNaO0FBQUEsVUFDQSxLQUFLO0FBQUEsWUFDRCxJQUFJO0FBQUEsWUFDSixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDWjtBQUFBLFVBQ0EsS0FBSztBQUFBLFlBQ0QsSUFBSTtBQUFBLFlBQ0osTUFBTTtBQUFBLFlBQ04sU0FBUztBQUFBLFlBQ1QsUUFBUTtBQUFBLFVBQ1o7QUFBQSxVQUNBLEtBQUs7QUFBQSxZQUNELElBQUk7QUFBQSxZQUNKLE1BQU07QUFBQSxZQUNOLFNBQVM7QUFBQSxZQUNULFFBQVE7QUFBQSxVQUNaO0FBQUEsVUFDQSxLQUFLO0FBQUEsWUFDRCxJQUFJO0FBQUEsWUFDSixNQUFNO0FBQUEsWUFDTixTQUFTO0FBQUEsWUFDVCxRQUFRO0FBQUEsVUFDWjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsU0FBRyxnQ0FBZ0MsV0FBWTtBQUMzQyxlQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRyxXQUFXRCxTQUFRO0FBQUEsTUFDdkQsQ0FBQztBQUVEO0FBQUEsUUFDSSxDQUFDLE1BQU0sYUFBYSxrY0FBOGE7QUFBQSxRQUNsYyxDQUFDLE1BQU0sS0FBSyxFQUFFO0FBQUEsTUFDbEIsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQyxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsV0FBRyxlQUFlLEtBQUssVUFBVUEsRUFBQyxJQUFJLE1BQU0sS0FBSyxVQUFVLENBQUMsSUFBSSxxQkFBcUIsS0FBSyxVQUFVLENBQUMsSUFBSSxLQUFLLFdBQVk7QUFDdEgsY0FBSSxXQUFXLFVBQVVBLElBQUcsR0FBRyxNQUFNLFVBQVU7QUFBQSxZQUMzQyxnQkFBZ0IsQ0FBQyxHQUFHO0FBQUEsVUFDeEIsQ0FBQztBQUVELGlCQUFPLFNBQVMsU0FBUyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUFBLFFBRTdDLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUdMLENBQUM7QUFBQSxFQU1MLENBQUM7OztBQ2pRRDtBQUVBLFdBQVMsY0FBYyxXQUFZO0FBRS9CLFFBQUksbUJBQW1CLFNBQVUsR0FBRztBQUNoQyxVQUFJLGFBQWEsS0FBSztBQUNsQixZQUFJLE9BQU8sWUFBWSxDQUFDO0FBQ3hCLFlBQUksYUFBYSxPQUFPO0FBQ3BCLGNBQUksRUFBRSxJQUFJLENBQUMsTUFBTTtBQUNiLG1CQUFPLGlCQUFpQixDQUFDO0FBQUEsVUFDN0IsQ0FBQztBQUFBLFFBQ0wsV0FBVyxPQUFPLE1BQU0sVUFBVTtBQUM5QixxQkFBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLE9BQU8sUUFBUSxDQUFDLEdBQUc7QUFDcEMsY0FBRSxDQUFDLElBQUksaUJBQWlCLENBQUM7QUFBQSxVQUM3QjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBRUEsYUFBTztBQUFBLElBQ1g7QUFHQSxhQUFTLGdDQUFnQyxXQUFZO0FBQ2pELFVBQUksSUFBSTtBQUVSLGlCQUFXLFdBQVk7QUFDbkIsY0FBTTtBQUFBLFVBQ0YsR0FBRztBQUFBLFlBQ0M7QUFBQSxjQUNJLEdBQUc7QUFBQSxnQkFDQztBQUFBLGtCQUNJLEdBQUc7QUFBQSxnQkFDUDtBQUFBLGdCQUNBO0FBQUEsa0JBQ0ksR0FBRztBQUFBLGdCQUNQO0FBQUEsY0FDSjtBQUFBLGNBQ0EsR0FBRztBQUFBLFlBRVA7QUFBQSxZQUNBO0FBQUEsY0FDSSxHQUFHO0FBQUEsZ0JBQ0M7QUFBQSxrQkFDSSxHQUFHO0FBQUEsZ0JBQ1A7QUFBQSxnQkFDQTtBQUFBLGtCQUNJLEdBQUc7QUFBQSxnQkFDUDtBQUFBLGNBQ0o7QUFBQSxjQUNBLEdBQUc7QUFBQSxZQUNQO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFDQSxhQUFLLElBQUksV0FBVyxHQUFHO0FBQUEsTUFDM0IsQ0FBQztBQUVEO0FBQUEsUUFDSSxDQUFDLFdBQVcsK0VBQStFO0FBQUEsUUFDM0YsQ0FBQyxTQUFTLCtEQUErRDtBQUFBLFFBQ3pFLENBQUMsU0FBUywyQkFBMkI7QUFBQSxRQUNyQyxDQUFDLFNBQVMsMkJBQTJCO0FBQUEsTUFDekMsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQyxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBR25CLFdBQUcsYUFBYUEsS0FBSSx3QkFBd0IsR0FBRyxXQUFZO0FBRXZELGNBQUksSUFBSSxHQUFHLE9BQU9BLEVBQUM7QUFDbkIsY0FBSSxJQUFJLGlCQUFpQixDQUFDO0FBQzFCLGlCQUFPLEtBQUssVUFBVSxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUFBLFFBRXhDLENBQUM7QUFBQSxNQUVMLENBQUM7QUFBQSxJQUdMLENBQUM7QUFHRCxhQUFTLGFBQWEsV0FBWTtBQUU5QixVQUFJLFlBQVk7QUFBQSxNQUdoQixNQUFNLEVBQUU7QUFBQSxRQUNKLElBQUksSUFBSTtBQUNKLGlCQUFPO0FBQUEsUUFDWDtBQUFBLE1BQ0o7QUFFQSxpQkFBVyxNQUFNO0FBRWIsaUJBQVM7QUFBQSxVQUNMLEdBQUc7QUFBQSxZQUNDLEdBQUc7QUFBQSxjQUNDLEdBQUc7QUFBQSxnQkFDQztBQUFBLGdCQUFHO0FBQUEsZ0JBQVM7QUFBQSxnQkFBTztBQUFBLGdCQUFXLFNBQVMsR0FBRztBQUFBLGNBQzlDO0FBQUEsY0FDQSxHQUFHO0FBQUEsY0FDSCxHQUFHO0FBQUEsY0FDSCxHQUFHO0FBQUEsZ0JBQ0M7QUFBQSxrQkFDSSxHQUFHO0FBQUEsa0JBQ0gsR0FBRztBQUFBLGtCQUNILEdBQUcsQ0FBQyxPQUFPO0FBQUEsZ0JBQ2Y7QUFBQSxjQUNKO0FBQUEsY0FDQSxHQUFHLENBQUM7QUFBQSxjQUNKLElBQUksb0JBQUksT0FBSyxJQUFJLEtBQUssRUFBQyxHQUFHLEVBQUMsQ0FBQztBQUFBLGNBQzVCLElBQUksb0JBQUksT0FBSyxJQUFJLEVBQUMsR0FBRyxFQUFDLENBQUM7QUFBQSxZQUMzQjtBQUFBLFVBQ0o7QUFBQSxVQUNBLEdBQUcsSUFBSTtBQUFBLFFBQ1g7QUFFQSxxQkFBYSxJQUFJLFdBQVcsTUFBTTtBQUFBLE1BR3RDLENBQUM7QUFFRCxlQUFTLHFCQUFxQixXQUFZO0FBRXRDO0FBQUEsVUFDSSxDQUFDLEVBQUU7QUFBQSxVQUNILENBQUMsTUFBUztBQUFBLFVBQ1YsQ0FBQyxJQUFJO0FBQUEsVUFDTCxDQUFDLE1BQU07QUFBQSxRQUNYLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFFdEIsY0FBSUEsS0FBSSxLQUFLLE1BQU07QUFDbkIsY0FBSSxRQUFRLE9BQU9BO0FBQ25CLGNBQUlBLE9BQU0sS0FBTSxTQUFRO0FBR3hCLGFBQUcsUUFBUSx1QkFBdUIsV0FBWTtBQUUxQyxtQkFBTyxNQUFNO0FBQ1Qsa0JBQUksV0FBV0EsRUFBQztBQUFBLFlBQ3BCLENBQUMsRUFBRSxHQUFHLE1BQU0sS0FBSztBQUFBLFVBQ3JCLENBQUM7QUFBQSxRQUNMLENBQUM7QUFBQSxNQUNMLENBQUM7QUFFRCxlQUFTLGNBQWMsV0FBWTtBQUUvQixZQUFJLElBQUk7QUFFUixtQkFBVyxXQUFZO0FBQ25CLGdCQUFNLENBQUM7QUFDUCxlQUFLLElBQUksV0FBVyxHQUFHO0FBQUEsUUFDM0IsQ0FBQztBQUVEO0FBQUEsVUFDSSxDQUFDLGFBQWEsTUFBTSw0QkFBNEI7QUFBQSxVQUNoRCxDQUFDLFdBQVcsTUFBTSwwQkFBMEI7QUFBQSxVQUM1QyxDQUFDLFdBQVcsTUFBTSx5Q0FBeUM7QUFBQSxVQUMzRCxDQUFDLFNBQVMsTUFBTSx3QkFBd0I7QUFBQSxRQUM1QyxFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLGNBQUlBLEtBQUksS0FBSyxNQUFNO0FBQ25CLGNBQUksSUFBSSxLQUFLLE1BQU07QUFDbkIsY0FBSSxJQUFJLEtBQUssTUFBTTtBQUduQixhQUFHLGFBQWFBLEtBQUksT0FBTyxJQUFJLHdCQUF3QixHQUFHLFdBQVk7QUFDbEUsZUFBRyxPQUFPQSxJQUFHLENBQUM7QUFDZCxtQkFBTyxLQUFLLFVBQVUsR0FBRyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFBQSxVQUMxQyxDQUFDO0FBQUEsUUFHTCxDQUFDO0FBQUEsTUFFTCxDQUFDO0FBRUQsZUFBUyxhQUFhLFdBQVk7QUFFOUIsWUFBSUE7QUFDSixZQUFJO0FBQ0osWUFBSTtBQUVKLG1CQUFXLFdBQVk7QUFDbkIsVUFBQUEsS0FBSTtBQUNKLGNBQUk7QUFDSixjQUFJO0FBQUEsUUFDUixDQUFDO0FBRUQsV0FBRyxhQUFhQSxLQUFJLE9BQU8sSUFBSSw4QkFBOEIsV0FBWTtBQUNyRSxpQkFBTyxXQUFXLE9BQU9BLElBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxXQUFXLFVBQVU7QUFBQSxRQUM1RCxDQUFDO0FBRUQsV0FBRyxhQUFhQSxLQUFJLE9BQU8sSUFBSSwwQkFBMEIsV0FBWTtBQUNqRSxxQkFBVyxPQUFPQSxJQUFHLENBQUM7QUFDdEIsaUJBQU8sS0FBSyxVQUFVLE1BQU0sQ0FBQyxFQUFFLEdBQUcsTUFBTSxzSUFBc0k7QUFBQSxRQUNsTCxDQUFDO0FBRUQsV0FBRyxhQUFhLElBQUksT0FBTyxJQUFJLDBCQUEwQixXQUFZO0FBQ2pFLHFCQUFXLE9BQU8sR0FBRyxDQUFDO0FBQ3RCLGlCQUFPLEtBQUssVUFBVSxNQUFNLENBQUMsRUFBRSxHQUFHLE1BQU0sNElBQTRJO0FBQUEsUUFDeEwsQ0FBQztBQUFBLE1BRUwsQ0FBQztBQUdELGVBQVMsYUFBYSxXQUFZO0FBQzlCO0FBQUEsVUFDSSxDQUFDLFdBQVcsSUFBSTtBQUFBLFVBQ2hCLENBQUMsT0FBTyxJQUFJO0FBQUEsVUFDWixDQUFDLFNBQVMsS0FBSztBQUFBLFVBQ2YsQ0FBQyxPQUFPLEtBQUs7QUFBQSxVQUNiLENBQUMsU0FBUyxLQUFLO0FBQUEsVUFDZixDQUFDLFdBQVcsSUFBSTtBQUFBLFVBQ2hCLENBQUMsU0FBUyxJQUFJO0FBQUEsVUFDZCxDQUFDLGFBQWEsSUFBSTtBQUFBLFVBQ2xCLENBQUMsZUFBZSxJQUFJO0FBQUEsVUFDcEIsQ0FBQyxlQUFlLEtBQUs7QUFBQSxVQUNyQixDQUFDLFNBQVMsSUFBSTtBQUFBLFFBQ2xCLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFFdEIsY0FBSUEsS0FBSSxLQUFLLE1BQU07QUFDbkIsY0FBSSxJQUFJLEtBQUssTUFBTTtBQUduQixhQUFHLGFBQWFBLEtBQUkscUJBQXFCLElBQUksS0FBSyxXQUFZO0FBQzFELG1CQUFPLFdBQVcsT0FBT0EsRUFBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFBQSxVQUMzQyxDQUFDO0FBQUEsUUFHTCxDQUFDO0FBQUEsTUFHTCxDQUFDO0FBRUQsZUFBUyxnQkFBZ0IsV0FBWTtBQUNqQztBQUFBLFVBQ0ksQ0FBQyxTQUFTLGlIQUFpSDtBQUFBLFVBQzNILENBQUMsU0FBUyxxRkFBcUY7QUFBQSxVQUMvRixDQUFDLFNBQVMsb0hBQW9IO0FBQUEsUUFFbEksRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixjQUFJQSxLQUFJLEtBQUssTUFBTTtBQUNuQixjQUFJLElBQUksS0FBSyxNQUFNO0FBRW5CLGFBQUcsZ0JBQWdCQSxLQUFJLHFCQUFxQixJQUFJLEtBQUssV0FBWTtBQUM3RCx1QkFBVyxVQUFVQSxFQUFDO0FBQ3RCLG1CQUFPLEtBQUssVUFBVSxNQUFNLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUFBLFVBQzdDLENBQUM7QUFBQSxRQUNMLENBQUM7QUFBQSxNQUNMLENBQUM7QUFFRCxlQUFTLGFBQWEsV0FBWTtBQUM5QixpQkFBUyxhQUFhLFdBQVk7QUFHOUIscUJBQVcsV0FBWTtBQUVuQixxQkFBUztBQUFBLGNBQ0wsR0FBRztBQUFBLGdCQUNDLEdBQUc7QUFBQSxrQkFDQyxHQUFHO0FBQUEsb0JBQ0M7QUFBQSxvQkFBRztBQUFBLG9CQUFTO0FBQUEsb0JBQU87QUFBQSxvQkFBVyxTQUFTLEdBQUc7QUFBQSxrQkFDOUM7QUFBQSxrQkFDQSxHQUFHO0FBQUEsa0JBQ0gsR0FBRztBQUFBLGtCQUNILEdBQUc7QUFBQSxvQkFDQztBQUFBLHNCQUNJLEdBQUc7QUFBQSxzQkFDSCxHQUFHO0FBQUEsc0JBQ0gsR0FBRyxDQUFDLE9BQU87QUFBQSxvQkFDZjtBQUFBLGtCQUNKO0FBQUEsa0JBQ0EsR0FBRyxDQUFDO0FBQUEsa0JBQ0osSUFBSSxvQkFBSSxPQUFLLElBQUksS0FBSyxFQUFDLEdBQUcsRUFBQyxDQUFDO0FBQUEsa0JBQzVCLElBQUksb0JBQUksT0FBSyxJQUFJLEVBQUMsR0FBRyxFQUFDLENBQUM7QUFBQSxrQkFDdkIsR0FBRztBQUFBLG9CQUNDLEVBQUMsR0FBRyxFQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUksRUFBQztBQUFBLG9CQUNuQixFQUFDLEdBQUcsRUFBQyxHQUFHLEdBQUcsR0FBRyxLQUFJLEVBQUM7QUFBQSxvQkFDbkIsRUFBQyxHQUFHLEVBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSSxFQUFDO0FBQUEsb0JBQ25CLEVBQUMsR0FBRyxFQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUksRUFBQztBQUFBLG9CQUNuQixFQUFDLEdBQUcsRUFBQyxHQUFHLEdBQUcsR0FBRyxLQUFJLEVBQUM7QUFBQSxrQkFDdkI7QUFBQSxrQkFDQSxHQUFHO0FBQUEsb0JBQ0MsR0FBRyxFQUFDLEdBQUcsRUFBQztBQUFBLG9CQUNSLEdBQUcsRUFBQyxHQUFHLEVBQUM7QUFBQSxvQkFDUixHQUFHLEVBQUMsR0FBRyxFQUFDO0FBQUEsb0JBQ1IsR0FBRyxFQUFDLEdBQUcsRUFBQztBQUFBLGtCQUNaO0FBQUEsZ0JBQ0o7QUFBQSxjQUNKO0FBQUEsWUFDSjtBQUVBLHlCQUFhLElBQUksV0FBVyxNQUFNO0FBQUEsVUFHdEMsQ0FBQztBQUVEO0FBQUEsWUFDSSxDQUFDLE9BQU8sK1JBQStSO0FBQUEsWUFDdlMsQ0FBQyxhQUFhLG1DQUFtQztBQUFBLFlBQ2pELENBQUMsV0FBVywyREFBMkQ7QUFBQSxZQUN2RSxDQUFDLGVBQWUsMkNBQTJDO0FBQUEsWUFDM0QsQ0FBQyxlQUFlLDBEQUEwRDtBQUFBLFlBQzFFLENBQUMsYUFBYSxzSEFBc0g7QUFBQSxVQUN4SSxFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLGdCQUFJQSxLQUFJLEtBQUssTUFBTTtBQUNuQixnQkFBSSxJQUFJLEtBQUssTUFBTTtBQUVuQixlQUFHLGFBQWFBLEtBQUkscUJBQXFCLEdBQUcsV0FBWTtBQUNwRCxrQkFBSSxJQUFJLFdBQVcsT0FBT0EsRUFBQztBQUMzQixxQkFBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFBQSxZQUNwRCxDQUFDO0FBQUEsVUFFTCxDQUFDO0FBQUEsUUFFTCxDQUFDO0FBRUQsV0FBRyw0QkFBNEIsV0FBWTtBQUV2QyxjQUFJLElBQUksSUFBSSxXQUFXO0FBQUEsWUFDbkIsR0FBRztBQUFBLGNBQ0MsR0FBRztBQUFBLGdCQUNDLEVBQUMsR0FBRyxFQUFDO0FBQUEsZ0JBQUcsRUFBQyxHQUFHLEVBQUM7QUFBQSxjQUNqQjtBQUFBLGNBQ0EsR0FBRztBQUFBLFlBQ1A7QUFBQSxZQUNBLEdBQUc7QUFBQSxjQUNDLEdBQUc7QUFBQSxnQkFDQyxFQUFDLEdBQUcsR0FBRyxHQUFHLE1BQUs7QUFBQSxnQkFBRyxFQUFDLEdBQUcsRUFBQztBQUFBLGNBQzNCO0FBQUEsY0FDQSxHQUFHO0FBQUEsWUFDUDtBQUFBLFVBQ0osQ0FBQztBQUVELGNBQUksSUFBSSxFQUFFLE9BQU8sU0FBUztBQUUxQixtQkFBUyxTQUFTLEtBQUs7QUFDbkIsZ0JBQUksTUFBTSxDQUFDO0FBQ1gsZ0JBQUksUUFBUSxTQUFVLEdBQUcsR0FBRztBQUN4QixrQkFBSSxhQUFhLEtBQUs7QUFDbEIsb0JBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUFBLGNBQ3ZCLE9BQU87QUFDSCxvQkFBSSxDQUFDLElBQUk7QUFBQSxjQUNiO0FBQUEsWUFFSixDQUFDO0FBQ0QsbUJBQU87QUFBQSxVQUNYO0FBRUEsaUJBQU8sS0FBSyxVQUFVLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sdUNBQXVDO0FBQUEsUUFDeEYsQ0FBQztBQUVELFdBQUcsZ0RBQWdELFdBQVk7QUFDM0QsaUJBQU8sV0FBVyxPQUFPLFdBQVcsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQUEsUUFDckQsQ0FBQztBQUVEO0FBQUEsVUFDSSxDQUFDLGFBQWEsQ0FBQztBQUFBLFVBQ2YsQ0FBQyxhQUFhLENBQUM7QUFBQSxVQUNmLENBQUMsT0FBTyxNQUFTO0FBQUEsVUFDakIsQ0FBQyxTQUFTLE1BQVM7QUFBQSxVQUNuQixDQUFDLFdBQVcsT0FBTztBQUFBLFVBQ25CLENBQUMsV0FBVyxDQUFDO0FBQUEsVUFDYixDQUFDLFNBQVMsTUFBUztBQUFBLFVBQ25CLENBQUMsYUFBYSxLQUFLO0FBQUEsVUFDbkIsQ0FBQyxlQUFlLE9BQU87QUFBQSxVQUN2QixDQUFDLFNBQVMsS0FBSztBQUFBLFFBQ25CLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFFdEIsY0FBSUEsS0FBSSxLQUFLLE1BQU07QUFDbkIsY0FBSSxJQUFJLEtBQUssTUFBTTtBQUduQixhQUFHLGFBQWFBLEtBQUkscUJBQXFCLElBQUksS0FBSyxXQUFZO0FBQzFELG1CQUFPLFdBQVcsT0FBT0EsRUFBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFBQSxVQUMzQyxDQUFDO0FBQUEsUUFHTCxDQUFDO0FBRUQ7QUFBQSxVQUNJLENBQUMsU0FBUztBQUFBLFVBQ1YsQ0FBQyxTQUFTO0FBQUEsVUFDVixDQUFDLFdBQVc7QUFBQSxRQUNoQixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLGNBQUlBLEtBQUksS0FBSyxNQUFNO0FBRW5CLGFBQUcsYUFBYUEsS0FBSSx5QkFBeUIsV0FBWTtBQUNyRCxtQkFBTyxNQUFNLFdBQVcsT0FBT0EsRUFBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLEtBQUs7QUFBQSxVQUNyRCxDQUFDO0FBQUEsUUFFTCxDQUFDO0FBQUEsTUFFTCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBQUEsRUFDTCxDQUFDOzs7QUMvWUQ7QUFFQTtBQUdBLFdBQVMsUUFBUSxXQUFZO0FBRXpCLFdBQU8sU0FBVSxNQUFNO0FBRW5CLFVBQUksV0FBVyxDQUFDO0FBQ2hCLFVBQUksQ0FBQyxXQUFXLFFBQVEsR0FBRztBQUN2QixpQkFBUyxLQUFLLDBFQUE4QixLQUFLLE9BQUs7QUFDbEQscUJBQVcsUUFBUSxJQUFJLElBQUksRUFBRSxPQUFPO0FBQ3BDLGlCQUFPO0FBQUEsUUFDWCxDQUFDLENBQUM7QUFBQSxNQUNOO0FBRUEsY0FBUSxJQUFJLFFBQVEsRUFBRSxLQUFLLE1BQU07QUFDN0IsYUFBSztBQUFBLE1BQ1QsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUVELGFBQVMsdUJBQXVCLFdBQVk7QUFDeEM7QUFBQSxRQUNJLENBQUMscUJBQXFCLEVBQUMsR0FBRyxLQUFJLEdBQUcsR0FBRztBQUFBO0FBQUEsUUFDcEMsQ0FBQyxxQkFBcUIsRUFBQyxHQUFHLEtBQUksR0FBRyxHQUFHO0FBQUEsUUFDcEMsQ0FBQyxPQUFPLG9CQUFvQixrQkFBa0I7QUFBQSxNQUVsRCxFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUlDLEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFDbkIsWUFBSSxJQUFJLEtBQUssTUFBTTtBQUVuQixXQUFHLGNBQWMsS0FBSyxVQUFVQSxFQUFDLElBQUksV0FBVyxLQUFLLFVBQVUsQ0FBQyxJQUFJLHFCQUFxQixLQUFLLFVBQVUsQ0FBQyxHQUFHLFdBQVk7QUFDcEgsY0FBSSxJQUFJLElBQUksS0FBS0EsRUFBQztBQUVsQixnQkFBTSxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBQ2pCLGlCQUFPLENBQUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQUEsUUFDekIsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBR0wsQ0FBQztBQUdELGFBQVMsdUNBQXVDLFdBQVk7QUFFeEQsU0FBRywwQkFBMEIsV0FBWTtBQUNyQyxlQUFPLElBQUksS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxJQUFJO0FBQUEsTUFDOUMsQ0FBQztBQUVELFNBQUcsMEJBQTBCLFdBQVk7QUFDckMsZUFBTyxJQUFJLEtBQUssMkJBQTJCLEVBQUUsSUFBSSxFQUFDLEdBQUcsT0FBTSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxPQUFPO0FBQUEsTUFDdEYsQ0FBQztBQUVEO0FBQUEsUUFDSSxDQUFDLDZCQUE2QixFQUFDLEdBQUcsT0FBTSxHQUFHLE9BQU87QUFBQSxRQUNsRCxDQUFDLDRDQUE0QztBQUFBLFVBQ3pDLEdBQUc7QUFBQSxZQUNDLEdBQUc7QUFBQSxjQUNDLEdBQUc7QUFBQSxnQkFDQyxHQUFHO0FBQUEsY0FDUDtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSixHQUFHLGFBQWE7QUFBQSxRQUNoQixDQUFDLHdDQUF3QyxFQUFDLEdBQUcsRUFBQyxHQUFHLEVBQUMsR0FBRyxFQUFDLEdBQUcsT0FBTSxFQUFDLEVBQUMsRUFBQyxHQUFHLE9BQU87QUFBQSxNQUNoRixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUlBLEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFDbkIsWUFBSSxJQUFJLEtBQUssTUFBTTtBQUVuQixXQUFHLGNBQWMsS0FBSyxVQUFVQSxFQUFDLElBQUksV0FBVyxLQUFLLFVBQVUsQ0FBQyxJQUFJLHFCQUFxQixLQUFLLFVBQVUsQ0FBQyxJQUFJLEtBQUssV0FBWTtBQUMxSCxjQUFJLElBQUksSUFBSSxLQUFLQSxFQUFDO0FBQ2xCLGlCQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQUEsUUFDbEMsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBR0wsQ0FBQztBQUVELGFBQVMsdUJBQXVCLFdBQVk7QUFHeEMsVUFBSUMsVUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdaLGlCQUFXLENBQUMsU0FBUztBQUNqQixZQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsY0FBTSxZQUFZQTtBQUNsQixZQUFJLE9BQU8sU0FBUyxlQUFlLG1CQUFtQjtBQUN0RCxjQUFNLDRCQUE0QixJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU07QUFDaEQsZUFBSztBQUFBLFFBQ1QsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNO0FBQ1osZUFBSyxDQUFDO0FBQUEsUUFDVixDQUFDO0FBQUEsTUFHTCxDQUFDO0FBRUQsZ0JBQVUsTUFBTTtBQUNaLFlBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxjQUFNLFlBQVk7QUFBQSxNQUN0QixDQUFDO0FBRUQsYUFBTyxTQUFVLE1BQU07QUFDbkIsa0JBQVUsRUFBRSxLQUFLLE1BQU07QUFDbkIsZUFBSztBQUFBLFFBQ1QsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUVEO0FBQUEsUUFDSSxDQUFDLGlDQUFpQyxFQUFDLFFBQVEsR0FBRSxHQUFHLEtBQUs7QUFBQSxNQUd6RCxFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUksT0FBTyxLQUFLLE1BQU07QUFDdEIsWUFBSSxNQUFNLEtBQUssTUFBTTtBQUNyQixZQUFJLFdBQVcsS0FBSyxNQUFNO0FBRTFCLFdBQUcsc0JBQXNCLE9BQU8sV0FBVyxLQUFLLFVBQVUsR0FBRyxJQUFJLGNBQWMsS0FBSyxVQUFVLFFBQVEsR0FBRyxXQUFZO0FBQ2pILGNBQUksSUFBSSxJQUFJLEtBQUssSUFBSTtBQUNyQixpQkFBTyxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sUUFBUTtBQUFBLFFBQzNDLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUdMLENBQUM7QUFBQSxFQUdMLENBQUM7OztBQy9JRDtBQUlBLE1BQU0saUJBQU4sTUFBcUI7QUFBQSxJQUNqQixjQUFjO0FBQUEsSUFDZDtBQUFBLEVBQ0o7QUFHQSxXQUFTLFVBQVUsV0FBWTtBQUUzQjtBQUFBLE1BQ0k7QUFBQSxRQUNHO0FBQUEsUUFBZ0IsQ0FBQztBQUFBLFFBQUUsRUFBQyxRQUFPLElBQUksaUJBQWM7QUFBQSxNQUNoRDtBQUFBLE1BQ0E7QUFBQSxRQUNJO0FBQUEsUUFDQTtBQUFBLFVBQ0ksR0FBRztBQUFBLFlBQ0MsR0FBRztBQUFBLGNBQ0M7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0o7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUFBLFFBQ0E7QUFBQSxVQUNJLEdBQUc7QUFBQSxZQUNDLEdBQUcsQ0FBQztBQUFBLFVBQ1I7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLE1BQVU7QUFBQSxRQUNOO0FBQUEsUUFDQTtBQUFBLFVBQ0ksR0FBRztBQUFBLFlBQ0MsR0FBRztBQUFBLFVBQ1A7QUFBQSxRQUNKO0FBQUEsUUFDQTtBQUFBLFVBQ0ksR0FBRztBQUFBLFlBQ0MsR0FBRztBQUFBLFVBQ1A7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLE1BRUE7QUFBQSxRQUNJO0FBQUEsUUFDQSxDQUFDO0FBQUEsUUFDRDtBQUFBLFVBQ0ksR0FBRztBQUFBLFlBQ0MsR0FBRztBQUFBLFlBQ0gsR0FBRyxFQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUM7QUFBQSxVQUNsQjtBQUFBLFFBQ0o7QUFBQSxRQUNBO0FBQUEsVUFDSSxHQUFHO0FBQUEsWUFDQyxHQUFHO0FBQUEsY0FDQyxHQUFHO0FBQUEsY0FDSCxHQUFHLENBQUM7QUFBQSxZQUNSO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFBQSxNQUNKO0FBQUEsSUFFSixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFVBQUksSUFBSSxLQUFLLE1BQU07QUFDbkIsVUFBSUMsS0FBSTtBQUVSLFNBQUcsYUFBYSxLQUFLLFVBQVVBLEVBQUMsSUFBSSx3QkFBd0IsR0FBRyxXQUFZO0FBQ3ZFLFlBQUksSUFBSSxPQUFPLE1BQU0sTUFBTUEsRUFBQztBQUM1QixlQUFPLEtBQUssVUFBVSxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUFBLE1BQ3hDLENBQUM7QUFBQSxJQUdMLENBQUM7QUFHRDtBQUFBLE1BR0k7QUFBQSxRQUNJLENBQUM7QUFBQSxRQUNEO0FBQUEsVUFDSSxHQUFHO0FBQUEsWUFDQyxHQUFHO0FBQUEsWUFDSCxHQUFHLENBQUMsS0FBSztBQUFBLFVBQ2I7QUFBQSxRQUNKO0FBQUEsUUFDQTtBQUFBLFVBQ0ksR0FBRztBQUFBLFlBQ0MsR0FBRztBQUFBLGNBQ0MsR0FBRztBQUFBLGNBQ0gsR0FBRyxDQUFDO0FBQUEsWUFDUjtBQUFBLFVBQ0o7QUFBQSxRQUNKO0FBQUEsTUFDSjtBQUFBLE1BQ0E7QUFBQSxRQUNJO0FBQUEsVUFDSSxHQUFHLENBQUM7QUFBQSxRQUNSO0FBQUEsUUFDQTtBQUFBLFVBQ0ksR0FBRyxDQUFDO0FBQUEsUUFDUjtBQUFBLE1BQ0o7QUFBQSxJQUVKLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFFdEIsVUFBSUEsS0FBSTtBQUVSLFNBQUcsYUFBYSxLQUFLLFVBQVVBLEVBQUMsSUFBSSx5QkFBeUIsV0FBWTtBQUNyRSxlQUFPLE1BQU0sT0FBTyxNQUFNLE1BQU1BLEVBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxLQUFLO0FBQUEsTUFDdEQsQ0FBQztBQUFBLElBR0wsQ0FBQztBQUFBLEVBRUwsQ0FBQztBQUlELFdBQVMsbUJBQW1CLE1BQU07QUFDOUIsT0FBRywrREFBK0QsTUFBTTtBQUNwRSxZQUFNLFNBQVMsRUFBRSxHQUFHLEVBQUU7QUFDdEIsWUFBTSxTQUFTLEVBQUUsR0FBRyxFQUFFO0FBQ3RCLFlBQU0sU0FBUyxPQUFPLFFBQVEsTUFBTTtBQUNwQyxhQUFPLE1BQU0sRUFBRSxHQUFHLEtBQUssTUFBTSxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUFBLElBQy9DLENBQUM7QUFFRCxPQUFHLCtDQUErQyxNQUFNO0FBQ3BELFlBQU0sU0FBUztBQUNmLFlBQU0sU0FBUyxFQUFFLEdBQUcsRUFBRTtBQUN0QixhQUFPLE1BQU0sT0FBTyxRQUFRLE1BQU0sQ0FBQyxFQUFFLEdBQUcsTUFBTTtBQUFBLElBQ2xELENBQUM7QUFFRCxPQUFHLCtDQUErQyxNQUFNO0FBQ3BELFlBQU0sU0FBUyxFQUFFLEdBQUcsRUFBRTtBQUN0QixZQUFNLFNBQVM7QUFDZixhQUFPLE1BQU0sT0FBTyxRQUFRLE1BQU0sQ0FBQyxFQUFFLEdBQUcsTUFBTTtBQUFBLElBQ2xELENBQUM7QUFFRCxPQUFHLHVDQUF1QyxNQUFNO0FBQzVDLFlBQU0sU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUM3QixZQUFNLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFO0FBQ25DLFlBQU0sU0FBUyxPQUFPLFFBQVEsTUFBTTtBQUNwQyxhQUFPLE1BQU0sRUFBRSxHQUFHLEtBQUssTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFBQSxJQUM1RCxDQUFDO0FBRUQsT0FBRyxpQ0FBaUMsTUFBTTtBQUN0QyxZQUFNLFNBQVMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDM0IsWUFBTSxTQUFTLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzNCLFlBQU0sU0FBUyxPQUFPLFFBQVEsTUFBTTtBQUNwQyxhQUFPLE1BQU0sRUFBRSxHQUFHLEtBQUssTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQUEsSUFDOUMsQ0FBQztBQUFBLEVBQ0wsQ0FBQzs7O0FDaEpEO0FBQ0E7QUFrQkEsTUFBTSxxQkFBTixjQUFpQyxLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFPckMsUUFBUSxPQUFPO0FBQ2QsYUFBTyxRQUFRLE9BQU8sS0FBSztBQUFBLElBQzVCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT0EsWUFBWSxjQUFjLElBQUk7QUFDN0IsYUFBTyxPQUFPLElBQUksa0RBQWtEO0FBQUEsSUFDckU7QUFBQSxFQUNEOzs7QUNyQ0E7QUFpQkEsTUFBTSxVQUFOLGNBQXNCLG1CQUFtQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT3hDLFFBQVEsT0FBTztBQUNkLGFBQU8sUUFBUSxPQUFPLEtBQUs7QUFBQSxJQUM1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU9BLFlBQVksY0FBYyxJQUFJO0FBQzdCLGFBQU8sT0FBTyxJQUFJLHNDQUFzQztBQUFBLElBQ3pEO0FBQUEsRUFDRDs7O0FDaERBLFdBQVMsV0FBVyxXQUFZO0FBRTVCLGFBQVMsY0FBYyxXQUFZO0FBQy9CLFVBQUksVUFBVSxJQUFJLFFBQVE7QUFFMUIsU0FBRywwQkFBMEIsU0FBVSxNQUFNO0FBQ3pDLGdCQUFRLFFBQVEsRUFBRSxNQUFNLE9BQUs7QUFDekIsaUJBQU8sQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNoQixlQUFLO0FBQUEsUUFDVCxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBQUEsRUFFTCxDQUFDOzs7QUNqQkQ7OztBQ2VBO0FBZ0JBLE1BQU0sbUJBQU4sY0FBK0IsbUJBQW1CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFPakQsWUFBWSxVQUFVLFVBQVU7QUFDL0IsWUFBTTtBQUVOLFVBQ0MsRUFDQyxvQkFBb0Isc0JBQ3BCLG9CQUFvQixxQkFFcEI7QUFDRCxjQUFNLElBQUksVUFBVSxpREFBaUQ7QUFBQSxNQUN0RTtBQUVBLFdBQUssV0FBVztBQUNoQixXQUFLLFdBQVc7QUFBQSxJQUNqQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU9BLFlBQVksY0FBYyxJQUFJO0FBQzdCLGFBQU8sT0FBTyxJQUFJLGdEQUFnRDtBQUFBLElBQ25FO0FBQUEsRUFDRDs7O0FEMURBLE1BQU0seUJBQU4sY0FBcUMsS0FBSztBQUFBLElBRXRDLGNBQWM7QUFDVixZQUFNO0FBQUEsSUFDVjtBQUFBLElBRUEsUUFBUSxPQUFPO0FBQ1gsYUFBTyxRQUFRLE9BQU8sS0FBSztBQUFBLElBQy9CO0FBQUEsRUFDSjtBQUdBLFdBQVMsb0JBQW9CLFdBQVk7QUFDckMsT0FBRyx3RUFBd0UsU0FBVSxNQUFNO0FBQ3ZGLFVBQUk7QUFDQSxZQUFJLGlCQUFpQjtBQUFBLE1BQ3pCLFNBQVMsR0FBRztBQUNSLGFBQUs7QUFBQSxNQUNUO0FBQUEsSUFDSixDQUFDO0FBRUQsT0FBRyw0RUFBNEUsU0FBVSxNQUFNO0FBRTNGLFVBQUk7QUFDQSxjQUFNLElBQUksSUFBSSxpQkFBaUIsSUFBSSx1QkFBdUIsR0FBRyxJQUFJLHVCQUF1QixDQUFDO0FBQUEsTUFDN0YsU0FBUyxHQUFHO0FBQ1IsYUFBSztBQUFBLE1BQ1Q7QUFBQSxJQUlKLENBQUM7QUFBQSxFQUNMLENBQUM7OztBRXJCRDtBQWlCQSxNQUFNLFFBQU4sY0FBb0IsbUJBQW1CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFPdEMsUUFBUSxPQUFPO0FBQ2QsYUFBTyxRQUFRLFFBQVEsS0FBSztBQUFBLElBQzdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT0EsWUFBWSxjQUFjLElBQUk7QUFDN0IsYUFBTyxPQUFPLElBQUksb0NBQW9DO0FBQUEsSUFDdkQ7QUFBQSxFQUNEOzs7QUNwQ0E7QUFpQkEsTUFBTSxhQUFOLGNBQXlCLGlCQUFpQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT3pDLFFBQVEsT0FBTztBQUNkLFVBQUlDLFFBQU87QUFFWCxhQUFPLElBQUksUUFBUSxTQUFVLFNBQVMsUUFBUTtBQUM3QyxZQUFJQztBQUNKLFlBQUk7QUFFSixRQUFBRCxNQUFLLFNBQ0gsUUFBUSxLQUFLLEVBQ2IsS0FBSyxXQUFZO0FBQ2pCLGtCQUFRO0FBQUEsUUFDVCxDQUFDLEVBQ0EsTUFBTSxXQUFZO0FBQ2xCLFVBQUFDLEtBQUk7QUFFSixjQUFJLE1BQU0sT0FBTztBQUNoQixtQkFBTztBQUFBLFVBQ1I7QUFBQSxRQUNELENBQUM7QUFFRixRQUFBRCxNQUFLLFNBQ0gsUUFBUSxLQUFLLEVBQ2IsS0FBSyxXQUFZO0FBQ2pCLGtCQUFRO0FBQUEsUUFDVCxDQUFDLEVBQ0EsTUFBTSxXQUFZO0FBQ2xCLGNBQUk7QUFFSixjQUFJQyxPQUFNLE9BQU87QUFDaEIsbUJBQU87QUFBQSxVQUNSO0FBQUEsUUFDRCxDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQUEsSUFDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU9BLFlBQVksY0FBYyxJQUFJO0FBQzdCLGFBQU8sT0FBTyxJQUFJLDBDQUEwQztBQUFBLElBQzdEO0FBQUEsRUFDRDs7O0FDOUVBLFdBQVMsY0FBYyxXQUFZO0FBRS9CLGFBQVMsY0FBYyxXQUFZO0FBRS9CO0FBQUEsUUFDSSxDQUFDLElBQUksTUFBTSxHQUFHLElBQUksTUFBTSxHQUFHLElBQUk7QUFBQSxRQUMvQixDQUFDLElBQUksTUFBTSxHQUFHLElBQUksUUFBUSxHQUFHLElBQUk7QUFBQSxRQUNqQyxDQUFDLElBQUksUUFBUSxHQUFHLElBQUksTUFBTSxHQUFHLElBQUk7QUFBQSxRQUNqQyxDQUFDLElBQUksUUFBUSxHQUFHLElBQUksUUFBUSxHQUFHLEtBQUs7QUFBQSxNQUN4QyxFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUlDLEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFDbkIsWUFBSSxJQUFJLEtBQUssTUFBTTtBQUVuQixXQUFHLHdDQUF3QyxHQUFHLFNBQVUsTUFBTTtBQUUxRCxjQUFJLGFBQWEsSUFBSSxXQUFXQSxJQUFHLENBQUM7QUFDcEMscUJBQVcsUUFBUSxFQUFFLEtBQUssTUFBTTtBQUM1QixrQkFBTSxPQUFPLEtBQUssSUFBSSxLQUFLLElBQUksTUFBTSxDQUFDO0FBQUEsVUFDMUMsQ0FBQyxFQUFFLE1BQU0sTUFBTTtBQUNYLGtCQUFNLE9BQU8sS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUs7QUFBQSxVQUMxQyxDQUFDO0FBQUEsUUFFTCxDQUFDO0FBQUEsTUFFTCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBQUEsRUFDTCxDQUFDOzs7QUNuQkQ7QUFFQTtBQWVBLE1BQU0sV0FBTixjQUF1QixtQkFBbUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU96QyxRQUFRLE9BQU87QUFDZCxVQUFJLFNBQVMsS0FBSyxHQUFHO0FBQ3BCLGVBQU8sUUFBUSxRQUFRLEtBQUs7QUFBQSxNQUM3QjtBQUVBLGFBQU8sUUFBUSxPQUFPLEtBQUs7QUFBQSxJQUM1QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU9BLFlBQVksY0FBYyxJQUFJO0FBQzdCLGFBQU8sT0FBTyxJQUFJLHVDQUF1QztBQUFBLElBQzFEO0FBQUEsRUFDRDs7O0FDbkRBLFdBQVMsWUFBWSxXQUFZO0FBRTdCLGFBQVMsY0FBYyxXQUFZO0FBQy9CLFVBQUksYUFBYSxJQUFJLFNBQVM7QUFFOUIsU0FBRywwQkFBMEIsU0FBVSxNQUFNO0FBQ3pDLG1CQUFXLFFBQVEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxPQUFLO0FBQzdCLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUTtBQUN2QixlQUFLO0FBQUEsUUFDVCxDQUFDLEVBQUUsTUFBTSxPQUFLO0FBQ1YsZUFBSyxJQUFJLE1BQU0seUJBQXlCLENBQUMsQ0FBQztBQUFBLFFBQzlDLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUVMLENBQUM7QUFBQSxFQUVMLENBQUM7OztBQ0pEO0FBaUJBLE1BQU0sY0FBTixjQUEwQixpQkFBaUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU8xQyxRQUFRLE9BQU87QUFDZCxhQUFPLFFBQVEsSUFBSTtBQUFBLFFBQ2xCLEtBQUssU0FBUyxRQUFRLEtBQUs7QUFBQSxRQUMzQixLQUFLLFNBQVMsUUFBUSxLQUFLO0FBQUEsTUFDNUIsQ0FBQztBQUFBLElBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixhQUFPLE9BQU8sSUFBSSwyQ0FBMkM7QUFBQSxJQUM5RDtBQUFBLEVBQ0Q7OztBQ2xEQSxXQUFTLGVBQWUsV0FBWTtBQUVoQyxhQUFTLGNBQWMsV0FBWTtBQUUvQjtBQUFBLFFBQ0ksQ0FBQyxJQUFJLE1BQU0sR0FBRyxJQUFJLE1BQU0sR0FBRyxJQUFJO0FBQUEsUUFDL0IsQ0FBQyxJQUFJLE1BQU0sR0FBRyxJQUFJLFFBQVEsR0FBRyxLQUFLO0FBQUEsUUFDbEMsQ0FBQyxJQUFJLFFBQVEsR0FBRyxJQUFJLE1BQU0sR0FBRyxLQUFLO0FBQUEsUUFDbEMsQ0FBQyxJQUFJLFFBQVEsR0FBRyxJQUFJLFFBQVEsR0FBRyxLQUFLO0FBQUEsTUFDeEMsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQyxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsV0FBRyx3Q0FBd0MsR0FBRyxTQUFVLE1BQU07QUFFMUQsY0FBSSxhQUFhLElBQUksWUFBWUEsSUFBRyxDQUFDO0FBQ3JDLHFCQUFXLFFBQVEsRUFBRSxLQUFLLE1BQU07QUFDNUIsa0JBQU0sT0FBTyxLQUFLLElBQUksS0FBSyxJQUFJLE1BQU0sQ0FBQztBQUFBLFVBQzFDLENBQUMsRUFBRSxNQUFNLE1BQU07QUFDWCxrQkFBTSxPQUFPLEtBQUssSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLO0FBQUEsVUFDMUMsQ0FBQztBQUFBLFFBRUwsQ0FBQztBQUFBLE1BRUwsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUFBLEVBQ0wsQ0FBQzs7O0FDbkJEO0FBRUE7QUFlQSxNQUFNLFVBQU4sY0FBc0IsbUJBQW1CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFPeEMsUUFBUSxPQUFPO0FBQ2QsVUFBSSxRQUFRLEtBQUssR0FBRztBQUNuQixlQUFPLFFBQVEsUUFBUSxLQUFLO0FBQUEsTUFDN0I7QUFFQSxhQUFPLFFBQVEsT0FBTyxLQUFLO0FBQUEsSUFDNUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixhQUFPLE9BQU8sSUFBSSxzQ0FBc0M7QUFBQSxJQUN6RDtBQUFBLEVBQ0Q7OztBQ25EQSxXQUFTLFdBQVcsV0FBWTtBQUU1QixhQUFTLGNBQWMsV0FBWTtBQUMvQixVQUFJLGFBQWEsSUFBSSxRQUFRO0FBRTdCLFNBQUcsMEJBQTBCLFNBQVUsTUFBTTtBQUN6QyxtQkFBVyxRQUFRLENBQUMsR0FBRSxHQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssT0FBSztBQUNsQyxpQkFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU87QUFDdEIsZUFBSztBQUFBLFFBQ1QsQ0FBQyxFQUFFLE1BQU0sT0FBSztBQUNWLGVBQUssSUFBSSxNQUFNLHlCQUF5QixDQUFDLENBQUM7QUFBQSxRQUM5QyxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBQUEsRUFFTCxDQUFDOzs7QUNoQkQsV0FBUyxTQUFTLFdBQVk7QUFFMUIsYUFBUyxjQUFjLFdBQVk7QUFDL0IsVUFBSSxhQUFhLElBQUksTUFBTTtBQUUzQixTQUFHLDBCQUEwQixTQUFVLE1BQU07QUFDekMsbUJBQVcsUUFBUSxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQUs7QUFDN0IsZUFBSztBQUFBLFFBQ1QsQ0FBQyxFQUFFLE1BQU0sT0FBSztBQUNWLGVBQUssSUFBSSxNQUFNLHlCQUF5QixDQUFDLENBQUM7QUFBQSxRQUM5QyxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBQUEsRUFFTCxDQUFDOzs7QUNmRDtBQUNBO0FBRUEsV0FBUyxZQUFZLFdBQVk7QUFDN0IsYUFBUyxnQkFBZ0IsV0FBWTtBQUNqQyxTQUFHLG1DQUFtQyxXQUFZO0FBQzlDLFlBQUksV0FBVyxJQUFJQyxVQUFTO0FBRTVCLGVBQU8sU0FBUyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFBQSxNQUNwQyxDQUFDO0FBRUQsU0FBRywwQ0FBMEMsV0FBWTtBQUNyRCxZQUFJLFdBQVcsSUFBSUEsVUFBUztBQUFBLFVBQ3hCLElBQUlDLE1BQUssS0FBSztBQUFBLFVBQ2QsSUFBSUEsTUFBSyxLQUFLO0FBQUEsVUFDZCxJQUFJQSxNQUFLLEtBQUs7QUFBQSxRQUNsQixDQUFDO0FBRUQsZUFBTyxTQUFTLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUFBLE1BQ3BDLENBQUM7QUFFRCxTQUFHLDRDQUE0QyxXQUFZO0FBQ3ZELFlBQUksV0FBVyxJQUFJRCxVQUFTO0FBQUEsVUFDeEIsSUFBSUMsTUFBSyxLQUFLO0FBQUEsVUFDZCxJQUFJQSxNQUFLLEtBQUs7QUFBQSxVQUNkLElBQUlBLE1BQUssS0FBSztBQUFBLFFBQ2xCLENBQUM7QUFFRCxZQUFJLFlBQVksSUFBSUQsVUFBUyxRQUFRO0FBRXJDLGVBQU8sVUFBVSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFBQSxNQUNyQyxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBR0QsT0FBRyxtQkFBbUIsV0FBWTtBQUM5QixhQUFPLElBQUlBLFVBQVMsQ0FBQyxFQUFFLEdBQUcsV0FBV0EsU0FBUTtBQUFBLElBQ2pELENBQUM7QUFFRCxPQUFHLFlBQVksV0FBWTtBQUN2QixhQUFPLElBQUlBLFVBQVMsRUFBRSxJQUFJLElBQUlDLE1BQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLFdBQVdELFNBQVE7QUFBQSxJQUNwRSxDQUFDO0FBRUQsT0FBRyxlQUFlLFdBQVk7QUFDMUIsYUFBTyxJQUFJQSxVQUFTLEVBQUUsT0FBTyxJQUFJQyxNQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxXQUFXRCxTQUFRO0FBQUEsSUFDdkUsQ0FBQztBQUVELE9BQUcsb0JBQW9CLFdBQVk7QUFDL0IsYUFBTyxJQUFJQSxVQUFTLEVBQUUsSUFBSSxJQUFJQyxPQUFJLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFBQSxJQUMvQyxDQUFDO0FBRUQsT0FBRyxrQkFBa0IsV0FBWTtBQUM3QixZQUFNLElBQUksSUFBSUE7QUFDZCxhQUFPLElBQUlELFVBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUFBLElBQy9DLENBQUM7QUFFRCxPQUFHLFlBQVksV0FBWTtBQUN2QixZQUFNLElBQUksSUFBSUM7QUFDZCxhQUFPLElBQUlELFVBQVMsRUFBRSxJQUFJLElBQUlDLE1BQUssR0FBRyxFQUFFLFlBQVksSUFBSUEsTUFBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLGFBQVE7QUFBQSxJQUN4RyxDQUFDO0FBRUQsT0FBRyxtQkFBbUIsV0FBWTtBQUM5QixhQUFPLE1BQU0sSUFBSUQsVUFBUyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLEtBQUs7QUFBQSxJQUN0RCxDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUNuRUQ7QUFDQTtBQUlBLE1BQU0scUJBQU4sY0FBaUMsT0FBTztBQUFBLElBR3BDLFlBQVksY0FBYyxJQUFJO0FBQzFCLGFBQU8sT0FBTyxJQUFJLDZCQUE2QjtBQUFBLElBQ25EO0FBQUEsRUFHSjtBQUVBLE1BQU0sV0FBTixjQUF1QixtQkFBbUI7QUFBQSxJQUN0QyxjQUFjO0FBQ1YsWUFBTTtBQUFBLElBQ1Y7QUFBQSxJQUNBLFlBQVksY0FBYyxJQUFJO0FBQzFCLGFBQU8sT0FBTyxJQUFJLGlDQUFpQztBQUFBLElBQ3ZEO0FBQUEsRUFDSjtBQUVBLFdBQVMsUUFBUSxXQUFZO0FBRXpCLGFBQVMsWUFBWSxXQUFZO0FBRTdCLFNBQUcsdUJBQXVCLFdBQVk7QUFDbEMsZUFBTyxJQUFJLE1BQUksRUFBRSxHQUFHLEdBQUcsV0FBVyxJQUFJO0FBQUEsTUFDMUMsQ0FBQztBQUVELFNBQUcseUJBQXlCLFdBQVk7QUFDcEMsZUFBTyxJQUFJLE1BQUksRUFBRSxHQUFHLEdBQUcsV0FBVyxNQUFNO0FBQUEsTUFDNUMsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUVELGFBQVMsYUFBYSxXQUFZO0FBRTlCLFNBQUcsdUJBQXVCLFdBQVk7QUFDbEMsZUFBTyxJQUFJLE1BQUksRUFBRSxHQUFHLEdBQUcsV0FBVyxJQUFJO0FBQUEsTUFDMUMsQ0FBQztBQUVELFNBQUcsdUJBQXVCLFdBQVk7QUFFbEMsWUFBSSxJQUFJLHNCQUFvQixNQUFNO0FBQzlCLGlCQUFPLElBQUksRUFBRSxHQUFHLEdBQUc7QUFBQSxRQUN2QixPQUFRO0FBQ0osaUJBQU8sS0FBSyxFQUFFLEdBQUcsR0FBRztBQUFBLFFBQ3hCO0FBQUEsTUFJSixDQUFDO0FBQUEsSUFHTCxDQUFDO0FBQUEsRUFFTCxDQUFDOzs7QUMzREQ7QUFFQSxXQUFTLFdBQVcsV0FBWTtBQUU1QjtBQUFBLE1BQ0ksQ0FBQyxPQUFNLEtBQUksR0FBRztBQUFBLE1BQ2QsQ0FBQyxVQUFTLFFBQU8sR0FBRztBQUFBLE1BQ3BCLENBQUMsVUFBUyxLQUFJLE1BQU07QUFBQSxNQUNwQixDQUFDLGFBQWEsU0FBUyxLQUFLO0FBQUEsTUFDNUIsQ0FBQyxhQUFhLFNBQVMsS0FBSztBQUFBLE1BQzVCLENBQUMsY0FBYyxTQUFTLE1BQU07QUFBQSxNQUM5QixDQUFDLGNBQWMsUUFBUSxPQUFPO0FBQUEsTUFDOUIsQ0FBQyxhQUFhLFFBQVEsTUFBTTtBQUFBLE1BQzVCLENBQUMsOEJBQThCLFFBQVEsTUFBTTtBQUFBLE1BQzdDLENBQUMsZ0NBQWtDLFFBQVEsTUFBTTtBQUFBLElBRXJELEVBQUUsUUFBUSxTQUFVLE1BQU07QUFFdEIsVUFBSUUsS0FBSSxLQUFLLE1BQU07QUFDbkIsVUFBSSxJQUFJLEtBQUssTUFBTTtBQUNuQixVQUFJLElBQUksS0FBSyxNQUFNO0FBR25CLFNBQUcsb0JBQW9CQSxLQUFJLEtBQUssV0FBWTtBQUV4QyxjQUFNLElBQUksZUFBZUEsRUFBQztBQUUxQixlQUFPLENBQUMsRUFBRSxHQUFHLFdBQVcsU0FBUztBQUNqQyxlQUFPLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU1BLEVBQUM7QUFDbEMsZUFBTyxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQzVCLGVBQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUMvQixlQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsV0FBVyxHQUFHO0FBQUEsTUFDekMsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUVEO0FBQUEsTUFDSSxDQUFDLFFBQVE7QUFBQSxNQUNULENBQUMsTUFBTTtBQUFBLE1BQ1AsQ0FBQyxNQUFNO0FBQUEsTUFDUCxDQUFDLDJCQUEyQjtBQUFBLE1BQzVCLENBQUMsNkJBQStCO0FBQUEsSUFFcEMsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixVQUFJQSxLQUFJLEtBQUssTUFBTTtBQUVuQixTQUFHLEtBQUtBLEtBQUksMkJBQTJCLFdBQVk7QUFFL0MsZUFBTyxNQUFJO0FBQUMseUJBQWVBLEVBQUM7QUFBQSxRQUFDLENBQUMsRUFBRSxNQUFNLFNBQVM7QUFBQSxNQUVuRCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUMxREQ7QUFHQSxXQUFTLGFBQWEsV0FBWTtBQUU5QixhQUFTLGVBQWUsV0FBWTtBQUNoQyxVQUFJLFlBQVksSUFBSSxVQUFVO0FBQzlCLFVBQUksU0FBUyxVQUFVLFNBQVM7QUFFaEMsU0FBRywwQkFBMEIsV0FBWTtBQUNyQyxlQUFPLE1BQU0sRUFBRSxHQUFHLEdBQUcsRUFBRSxRQUFRO0FBQUEsTUFDbkMsQ0FBQztBQUVELFNBQUcsa0NBQWtDLFdBQVk7QUFDN0MsZUFBTyxNQUFNLEVBQUUsR0FBRyxHQUFHLEVBQUUsUUFBUTtBQUFBLE1BQ25DLENBQUM7QUFBQSxJQUdMLENBQUM7QUFHRCxhQUFTLDZCQUE2QixXQUFZO0FBRTlDLFNBQUcsbUJBQW1CLE9BQU8sSUFBSSxzQkFBc0IsV0FBWTtBQUUvRCxZQUFJLFNBQVMsQ0FBQyxPQUFPLE9BQU8sS0FBSztBQUNqQyxZQUFJLE9BQU8sSUFBSSxVQUFVLE1BQU07QUFDL0IsZUFBTyxLQUFLLFNBQVMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxhQUFhO0FBQUEsTUFDbEQsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUVELGFBQVMsNENBQTRDLFdBQVk7QUFFN0QsU0FBRyxtQkFBbUIsT0FBTyxJQUFJLHNCQUFzQixXQUFZO0FBQy9ELFlBQUksU0FBUyxDQUFDLE9BQU8sR0FBRyxLQUFLO0FBQzdCLGVBQU8sTUFBTSxJQUFJLFVBQVUsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLFNBQVM7QUFBQSxNQUMxRCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBRUQsYUFBUyxlQUFlLFdBQVk7QUFFaEM7QUFBQTtBQUFBLFFBRUksQ0FBQyxTQUFTLFNBQVMsS0FBSztBQUFBLFFBQ3hCLENBQUMsZUFBZSxlQUFlLEtBQUs7QUFBQSxRQUNwQyxDQUFDLFFBQVcsSUFBSSxLQUFLO0FBQUEsUUFDckIsQ0FBQyxNQUFNLFFBQVcsSUFBSTtBQUFBLFFBQ3RCLENBQUMsU0FBUyxHQUFHLEdBQUcsUUFBVyxJQUFJO0FBQUE7QUFBQSxRQUMvQixDQUFDLE1BQU07QUFBQSxRQUNQLEdBQUcsUUFBVyxJQUFJO0FBQUEsUUFDbEIsQ0FBQyxHQUFHLFFBQVcsSUFBSTtBQUFBLFFBQ25CLENBQUMsT0FBTyxRQUFXLElBQUk7QUFBQSxRQUN2QixDQUFDLE1BQU0sUUFBVyxJQUFJO0FBQUEsUUFDdEIsQ0FBQyxLQUFLLFFBQVcsSUFBSTtBQUFBLFFBQ3JCLENBQUMsQ0FBQyxHQUFHLFFBQVcsSUFBSTtBQUFBLFFBQ3BCLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRyxHQUFHLFNBQVMsS0FBSztBQUFBO0FBQUEsUUFDaEMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsUUFBVyxJQUFJO0FBQUEsUUFDM0IsQ0FBQyxPQUFPLEtBQUssR0FBRyxPQUFPLElBQUk7QUFBQSxNQUMvQixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUlDLEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFDbkIsWUFBSSxJQUFJLEtBQUssTUFBTTtBQUVuQixZQUFJLE1BQU0sTUFBTTtBQUNaLGFBQUcsbUJBQW1CLE9BQU9BLEtBQUksc0JBQXNCLFdBQVk7QUFDL0QsbUJBQU8sTUFBTSxJQUFJLFVBQVVBLEVBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxTQUFTO0FBQUEsVUFDckQsQ0FBQztBQUFBLFFBQ0wsT0FBTztBQUNILGFBQUcsbUJBQW1CLE9BQU9BLEtBQUkscUJBQXFCLEdBQUcsV0FBWTtBQUNqRSxtQkFBTyxJQUFJLFVBQVVBLEVBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUFBLFVBQ2xELENBQUM7QUFBQSxRQUVMO0FBQUEsTUFFSixDQUFDO0FBQUEsSUFFTCxDQUFDO0FBRUQsYUFBUyxxQkFBcUIsV0FBWTtBQUV0QyxVQUFJO0FBQ0osU0FBRyx3Q0FBa0QsV0FBWTtBQUM3RCxlQUFPLElBQUksVUFBVSxPQUFPO0FBQzVCLGVBQU8sS0FBSyxZQUFZLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxRQUFRO0FBQUEsTUFDaEQsQ0FBQztBQUVELFNBQUcsd0NBQWtELFdBQVk7QUFDN0QsZUFBTyxJQUFJLFVBQVUsV0FBVztBQUNoQyxlQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxPQUFPO0FBQ2xDLGVBQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLE9BQU8sRUFBRSxHQUFHLFFBQVEsT0FBTyxFQUFFLEdBQUcsUUFBUSxLQUFLO0FBQUEsTUFDNUUsQ0FBQztBQUFBLElBR0wsQ0FBQztBQUVELGFBQVMsY0FBYyxXQUFZO0FBRS9CLFVBQUk7QUFDSixTQUFHLGtDQUFrQyxXQUFZO0FBQzdDLGVBQU8sSUFBSSxVQUFVLE9BQU87QUFDNUIsZUFBTyxLQUFLLFFBQVEsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLE9BQU87QUFBQSxNQUMzQyxDQUFDO0FBRUQsU0FBRyxrQ0FBa0MsV0FBWTtBQUM3QyxlQUFPLElBQUksVUFBVSxXQUFXLEVBQUUsUUFBUTtBQUMxQyxlQUFPLElBQUksRUFBRSxHQUFHLEdBQUcsR0FBRyxPQUFPLEVBQUUsR0FBRyxRQUFRLE9BQU8sRUFBRSxHQUFHLFFBQVEsS0FBSztBQUFBLE1BQ3ZFLENBQUM7QUFBQSxJQUdMLENBQUM7QUFFRCxhQUFTLGNBQWMsV0FBWTtBQUUvQixVQUFJO0FBQ0osU0FBRyw0Q0FBNEMsV0FBWTtBQUN2RCxlQUFPLElBQUksVUFBVSx5QkFBeUI7QUFFOUMsWUFBSSxTQUFTO0FBQ2IsYUFBSyxRQUFRLENBQUNBLE9BQU07QUFDaEIsb0JBQVUsTUFBTUEsS0FBSTtBQUNwQixpQkFBT0EsRUFBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLFFBQVE7QUFBQSxRQUMvQixDQUFDO0FBQ0QsZUFBTyxNQUFNLEVBQUUsR0FBRyxNQUFNLGdDQUFnQztBQUFBLE1BQzVELENBQUM7QUFFRCxTQUFHLGtDQUFrQyxXQUFZO0FBQzdDLGVBQU8sSUFBSSxVQUFVLFdBQVcsRUFBRSxRQUFRO0FBQzFDLGVBQU8sSUFBSSxFQUFFLEdBQUcsR0FBRyxHQUFHLE9BQU8sRUFBRSxHQUFHLFFBQVEsT0FBTyxFQUFFLEdBQUcsUUFBUSxLQUFLO0FBQUEsTUFDdkUsQ0FBQztBQUFBLElBR0wsQ0FBQztBQUVELGFBQVMsbUJBQW1CLFdBQVk7QUFDcEMsVUFBSTtBQUNKLFNBQUcsMERBQTBELFdBQVk7QUFDckUsZUFBTyxJQUFJLFVBQVUsa0JBQWtCO0FBQ3ZDLGVBQU8sS0FBSyxTQUFTLE9BQU8sQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNyQyxlQUFPLEtBQUssU0FBUyxRQUFRLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDdEMsZUFBTyxLQUFLLFNBQVMsS0FBSyxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ25DLGVBQU8sS0FBSyxTQUFTLENBQUMsT0FBTyxTQUFTLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsTUFDNUQsQ0FBQztBQUVELFNBQUcsMkRBQTJELFdBQVk7QUFDdEUsZUFBTyxJQUFJLFVBQVUsa0JBQWtCO0FBQ3ZDLGVBQU8sS0FBSyxTQUFTLEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNuQyxlQUFPLEtBQUssU0FBUyxDQUFDLE9BQU8sU0FBUyxVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsTUFDbkUsQ0FBQztBQUVELFNBQUcsMEVBQTBFLFdBQVk7QUFDckYsZUFBTyxJQUFJLFVBQVUsa0JBQWtCO0FBQ3ZDLGVBQU8sS0FBSyxTQUFTLE1BQVMsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUN2QyxlQUFPLEtBQUssU0FBUyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQzNDLGVBQU8sS0FBSyxTQUFTLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUFBLE1BQ3RDLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxhQUFTLGlCQUFpQixXQUFZO0FBQ2xDLFVBQUk7QUFDSixTQUFHLDhFQUE4RSxXQUFZO0FBQ3pGLGVBQU8sSUFBSSxVQUFVLGtCQUFrQjtBQUN2QyxlQUFPLEtBQUssT0FBTyxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxNQUFNLDRCQUE0QjtBQUFBLE1BQ3JGLENBQUM7QUFFRCxTQUFHLDRFQUE0RSxXQUFZO0FBQ3ZGLGVBQU8sSUFBSSxVQUFVLGtCQUFrQjtBQUN2QyxlQUFPLEtBQUssT0FBTyxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxNQUFNLFdBQVc7QUFBQSxNQUNqRSxDQUFDO0FBRUQsU0FBRyx1Q0FBdUMsV0FBWTtBQUNsRCxlQUFPLElBQUksVUFBVSxhQUFhLEVBQUUsT0FBTyxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxNQUFNLGFBQWE7QUFBQSxNQUM1RixDQUFDO0FBRUQsU0FBRyx1Q0FBdUMsV0FBWTtBQUNsRCxlQUFPLElBQUksVUFBVSxhQUFhLEVBQUUsT0FBTyxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxNQUFNLGFBQWE7QUFBQSxNQUNqRyxDQUFDO0FBRUQsU0FBRyx1Q0FBdUMsV0FBWTtBQUNsRCxlQUFPLElBQUksVUFBVSxhQUFhLEVBQUUsT0FBTyxNQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxNQUFNLGFBQWE7QUFBQSxNQUM1RixDQUFDO0FBQUEsSUFFTCxDQUFDO0FBRUQsYUFBUyxxQkFBcUIsV0FBWTtBQUV0QyxVQUFJO0FBRUosU0FBRywrQ0FBbUUsV0FBWTtBQUM5RSxlQUFPLElBQUksVUFBVSxPQUFPO0FBQzVCLGVBQU8sS0FBSyxTQUFTLENBQUMsRUFBRSxHQUFHLE1BQU0sT0FBTztBQUFBLE1BQzVDLENBQUM7QUFFRCxTQUFHLHdDQUFrRCxXQUFZO0FBQzdELGVBQU8sSUFBSSxVQUFVLE9BQU87QUFDNUIsZUFBTyxLQUFLLElBQUksUUFBUSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsV0FBVyxTQUFTO0FBQUEsTUFDNUQsQ0FBQztBQUVELFNBQUcseURBQW1FLFdBQVk7QUFDOUUsZUFBTyxJQUFJLFVBQVUsT0FBTztBQUM1QixlQUFPLEtBQUssSUFBSSxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxNQUFNLGNBQWM7QUFBQSxNQUNqRSxDQUFDO0FBRUQsU0FBRyxxRUFBK0UsV0FBWTtBQUMxRixlQUFPLElBQUksVUFBVSxPQUFPO0FBQzVCLGVBQU8sS0FBSyxJQUFJLGNBQWMsRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLE1BQU0sb0JBQW9CO0FBQUEsTUFDN0UsQ0FBQztBQUVELFNBQUcsdUVBQWlGLFdBQVk7QUFDNUYsZUFBTyxJQUFJLFVBQVUsT0FBTztBQUM1QixlQUFPLEtBQUssSUFBSSxDQUFDLFVBQVUsT0FBTyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxNQUFNLG9CQUFvQjtBQUFBLE1BQ2xGLENBQUM7QUFHRCxTQUFHLGtDQUFrQyxXQUFZO0FBQzdDLGVBQU8sSUFBSSxVQUFVLE9BQU87QUFDNUIsZUFBTyxLQUFLLElBQUksQ0FBQyxVQUFVLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRTtBQUFBLE1BQ3hFLENBQUM7QUFHRCxTQUFHLGtGQUE0RixXQUFZO0FBQ3ZHLGVBQU8sSUFBSSxVQUFVLHdCQUF3QjtBQUM3QyxlQUFPLEtBQUssT0FBTyxRQUFRLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxXQUFXLFNBQVM7QUFBQSxNQUMvRCxDQUFDO0FBRUQsU0FBRyxzR0FBZ0gsV0FBWTtBQUMzSCxlQUFPLElBQUksVUFBVSx3QkFBd0I7QUFDN0MsZUFBTyxLQUFLLE9BQU8sUUFBUSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxpQkFBaUI7QUFBQSxNQUN2RSxDQUFDO0FBRUQsU0FBRyxzR0FBZ0gsV0FBWTtBQUMzSCxlQUFPLElBQUksVUFBVSx3QkFBd0I7QUFDN0MsZUFBTyxLQUFLLE9BQU8sY0FBYyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxXQUFXO0FBQUEsTUFDdkUsQ0FBQztBQUVELFNBQUcsd0dBQWtILFdBQVk7QUFDN0gsZUFBTyxJQUFJLFVBQVUsd0JBQXdCO0FBQzdDLGVBQU8sS0FBSyxPQUFPLENBQUMsVUFBVSxPQUFPLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLE1BQU0sV0FBVztBQUFBLE1BQzVFLENBQUM7QUFFRCxTQUFHLGdIQUFnSCxXQUFZO0FBQzNILGVBQU8sSUFBSSxVQUFVLHdCQUF3QjtBQUM3QyxlQUFPLEtBQUssUUFBUSxVQUFVLEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBRyxXQUFXLFNBQVM7QUFDaEUsZUFBTyxLQUFLLFNBQVMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxxQkFBcUI7QUFBQSxNQUMxRCxDQUFDO0FBRUQsU0FBRyxnSEFBZ0gsV0FBWTtBQUMzSCxlQUFPLElBQUksVUFBVSx3QkFBd0I7QUFDN0MsZUFBTyxLQUFLLFFBQVEsT0FBTyxLQUFLLENBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxTQUFTO0FBQzdELGVBQU8sS0FBSyxTQUFTLENBQUMsRUFBRSxHQUFHLE1BQU0sd0JBQXdCO0FBQUEsTUFDN0QsQ0FBQztBQUFBLElBR0wsQ0FBQztBQUFBLEVBR0wsQ0FBQzs7O0FDbFFEO0FBQ0E7QUFDQTtBQUVBO0FBRUEsV0FBUyxpQkFBaUIsV0FBWTtBQUVsQyxhQUFTLFVBQVUsV0FBWTtBQUMzQixTQUFHLDBDQUEwQyxXQUFZO0FBQ3JELFlBQUksSUFBSSxJQUFJLGNBQWMsQ0FBQyxDQUFDO0FBQzVCLGVBQU8sRUFBRSxXQUFXLEdBQUcsRUFBQyxHQUFHLEVBQUMsQ0FBQztBQUM3QixlQUFPLEVBQUUsZUFBZSxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUMsR0FBRyxFQUFDLENBQUM7QUFBQSxNQUM1QyxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsYUFBUyxjQUFjLFdBQVk7QUFDL0IsU0FBRyx1QkFBdUIsU0FBVSxNQUFNO0FBQ3RDLFlBQUksSUFBSSxJQUFJLGNBQWMsRUFBQyxHQUFHLEVBQUMsQ0FBQztBQUNoQyxlQUFPLEVBQUUsZUFBZSxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUMsR0FBRyxFQUFDLENBQUM7QUFDeEMsWUFBSSxVQUFVO0FBQ2QsVUFBRSxlQUFlLElBQUksU0FBUyxXQUFZO0FBQ3RDLGNBQUksU0FBUyxJQUFJLEtBQUssZ0JBQWdCLGVBQWU7QUFDakQ7QUFFQSxnQkFBSSxZQUFZLEdBQUc7QUFDZixtQkFBSztBQUNMO0FBQUEsWUFDSjtBQUNBLGlCQUFLLGtCQUFrQjtBQUN2QjtBQUFBLFVBQ0o7QUFFQSxlQUFLLElBQUksTUFBTSwyQkFBMkIsQ0FBQztBQUFBLFFBQy9DLENBQUMsQ0FBQztBQUVGLFVBQUUsV0FBVyxFQUFFLElBQUk7QUFDbkIsZUFBTyxFQUFFLGVBQWUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUMsQ0FBQztBQUU5QyxVQUFFLFdBQVcsRUFBQyxHQUFHLEVBQUMsQ0FBQztBQUNuQixlQUFPLEVBQUUsZUFBZSxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUMsR0FBRyxFQUFDLENBQUM7QUFFeEMsVUFBRSxXQUFXLEVBQUUsSUFBSTtBQUNuQixlQUFPLEVBQUUsZUFBZSxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUMsR0FBRyxHQUFHLEdBQUcsRUFBQyxDQUFDO0FBQUEsTUFHbEQsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMsVUFBVSxXQUFZO0FBQzNCLFNBQUcsMENBQTBDLFdBQVk7QUFDckQsWUFBSSxJQUFJLElBQUksY0FBYyxDQUFDLENBQUM7QUFDNUIsZUFBTyxDQUFDLEVBQUUsR0FBRyxXQUFXLGFBQWE7QUFBQSxNQUN6QyxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsYUFBUyxpQkFBaUIsV0FBWTtBQUNsQyxTQUFHLDJDQUEyQyxXQUFZO0FBQ3RELFlBQUksSUFBSSxJQUFJLGNBQWMsRUFBQyxHQUFHLEVBQUMsR0FBRyxLQUFJLEVBQUMsQ0FBQztBQUN4QyxVQUFFLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXO0FBQ2xDLFVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUk7QUFBQSxNQUU3QixDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsYUFBUyxtQkFBbUIsV0FBWTtBQUNwQyxTQUFHLDBCQUEwQixTQUFVLE1BQU07QUFDekMsWUFBSSxVQUFVO0FBRWQsWUFBSSxJQUFJLElBQUksU0FBUyxTQUFVQyxJQUFHO0FBQzlCLGNBQUksU0FBUyxJQUFJLEtBQUssZ0JBQWdCLGVBQWU7QUFDakQ7QUFDQSxnQkFBSSxZQUFZLEdBQUc7QUFDZixtQkFBSztBQUFBLFlBQ1Q7QUFDQTtBQUFBLFVBQ0o7QUFFQSxlQUFLLElBQUksTUFBTSwyQkFBMkIsQ0FBQztBQUFBLFFBQy9DLEdBQUcsSUFBSTtBQUVQLFlBQUksY0FBYztBQUFBLFVBQ2QsR0FBRztBQUFBLFlBQ0MsR0FBRztBQUFBLGNBQ0MsR0FBRztBQUFBLFlBQ1A7QUFBQSxZQUNBLEdBQUc7QUFBQSxVQUNQO0FBQUEsUUFDSjtBQUVBLFlBQUksSUFBSSxJQUFJLGNBQWMsV0FBVztBQUNyQyxlQUFPLENBQUMsRUFBRSxHQUFHLFdBQVcsYUFBYTtBQUNyQyxlQUFPLEVBQUUsZUFBZSxDQUFDLENBQUMsRUFBRSxHQUFHLFdBQVcsYUFBYTtBQUV2RCxZQUFJLElBQUksRUFBRSxXQUFXO0FBQ3JCLFlBQUksSUFBSSxFQUFFLGVBQWU7QUFFekIsVUFBRSxFQUFFLElBQUk7QUFDUixVQUFFLEVBQUUsRUFBRSxJQUFJO0FBQUEsTUFFZCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBS0QsYUFBUyxXQUFXLFdBQVk7QUFFNUIsU0FBRyxvQ0FBb0MsV0FBWTtBQUMvQyxZQUFJO0FBRUosY0FBTSxNQUFPLElBQUksY0FBYyxDQUFDLENBQUMsRUFBRyxXQUFXO0FBRS9DO0FBQUEsVUFDSTtBQUFBLFVBQ0E7QUFBQSxVQUNBO0FBQUEsUUFDSixFQUFFLFFBQVEsU0FBVSxPQUFPO0FBQ3ZCLGlCQUFPLE1BQU07QUFDVCxnQkFBSSxNQUFNLElBQUk7QUFBQSxVQUNsQixDQUFDLEVBQUUsR0FBRyxJQUFJLE1BQU07QUFBQSxRQUdwQixDQUFDO0FBQUEsTUFHTCxDQUFDO0FBR0Q7QUFBQSxRQUNJLENBQUMsUUFBUSxFQUFDLE1BQU0sV0FBVSxDQUFDO0FBQUEsUUFDM0IsQ0FBQyxRQUFRLElBQUksTUFBTSxFQUFDLE1BQU0sV0FBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQUEsUUFDMUMsQ0FBQyxRQUFTLElBQUksY0FBYyxFQUFDLE1BQU0sV0FBVSxDQUFDLEVBQUcsZUFBZSxDQUFDO0FBQUEsUUFDakUsQ0FBQyxRQUFTLElBQUksY0FBYyxFQUFDLE1BQU0sV0FBVSxDQUFDLEVBQUcsV0FBVyxDQUFDO0FBQUEsTUFDakUsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJLE1BQU0sS0FBSyxNQUFNO0FBQ3JCLFlBQUksU0FBUyxLQUFLLE1BQU07QUFFeEIsV0FBRyx1QkFBdUIsTUFBTSxNQUFNLEtBQUssVUFBVSxNQUFNLElBQUkscUJBQXFCLFdBQVk7QUFDNUYsY0FBSTtBQUVKO0FBQUEsWUFDSTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0osRUFBRSxRQUFRLFNBQVUsUUFBUTtBQUN4QixtQkFBTyxRQUFRO0FBQUEsY0FDWDtBQUFBLGNBQVE7QUFBQSxZQUFHLEVBQUUsVUFBVSxHQUFHLGtCQUFrQixRQUFRLHFCQUFxQixFQUFFLEdBQUcsR0FBRztBQUVyRixtQkFBTyxRQUFRLElBQUksUUFBUSxLQUFLLEtBQUssR0FBRyxhQUFhLFFBQVEscUJBQXFCLEVBQUUsR0FBRyxHQUFHO0FBRTFGLG1CQUFPLFFBQVE7QUFBQSxjQUNYO0FBQUEsY0FBUTtBQUFBLFlBQUcsRUFBRSxVQUFVLEdBQUcsa0JBQWtCLFFBQVEscUJBQXFCLEVBQUUsR0FBRyxHQUFHO0FBQUEsVUFFekYsQ0FBQztBQUFBLFFBQ0wsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBR0wsQ0FBQztBQUVELGFBQVMsZ0NBQWdDLFdBQVk7QUFFakQsVUFBSSxVQUFVLFVBQVU7QUFFeEIsYUFBTyxXQUFZO0FBQ2YsbUJBQVcsQ0FBQztBQUNaLGdCQUFRLElBQUksY0FBYyxRQUFRO0FBQUEsTUFFdEMsQ0FBQztBQUVEO0FBQUEsUUFDSSxDQUFDLEtBQUssR0FBRyxLQUFLLFVBQVUsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDO0FBQUEsUUFDL0IsQ0FBQyxLQUFLLEdBQUcsS0FBSyxVQUFVLEVBQUMsR0FBRyxHQUFHLEdBQUcsRUFBQyxDQUFDLENBQUM7QUFBQSxNQUN6QyxFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUlBLEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFDbkIsWUFBSSxJQUFJLEtBQUssTUFBTTtBQUVuQixXQUFHLGFBQWFBLEtBQUksWUFBWSxJQUFJLGFBQWEsR0FBRyxTQUFVLE1BQU07QUFFaEUsY0FBSSxVQUFVO0FBQ2QscUJBQVcsSUFBSSxTQUFTLFdBQVk7QUFDaEM7QUFDQSxtQkFBTyxLQUFLLFVBQVUsS0FBSyxlQUFlLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQ3hELGdCQUFJLFlBQVksR0FBRztBQUNmLG1CQUFLLGVBQWUsUUFBUTtBQUM1QixtQkFBSztBQUFBLFlBQ1Q7QUFBQSxVQUNKLENBQUM7QUFFRCxnQkFBTSxlQUFlLFFBQVE7QUFDN0IsY0FBSSxVQUFVLE1BQU0sV0FBVztBQUUvQixrQkFBUUEsRUFBQyxJQUFJO0FBQUEsUUFFakIsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMsb0JBQW9CLFdBQVk7QUFFckMsU0FBRyx5QkFBeUIsV0FBWTtBQUNwQyxZQUFJLFFBQVEsSUFBSSxjQUFjLENBQUMsQ0FBQztBQUNoQyxZQUFJLFdBQVcsSUFBSSxTQUFTLFdBQVk7QUFBQSxRQUN4QyxDQUFDO0FBQ0QsY0FBTSxlQUFlLFFBQVE7QUFDN0IsZUFBTyxNQUFNLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxXQUFXLE9BQU87QUFBQSxNQUN6RCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBQUEsRUFFTCxDQUFDOzs7QUNwTkQsV0FBUyxXQUFXLFdBQVk7QUFFNUIsYUFBUyxnQkFBZ0IsV0FBWTtBQUVqQztBQUFBLFFBQ0ksQ0FBQyxTQUFTLFNBQVMsQ0FBQztBQUFBLFFBQ3BCLENBQUMsU0FBUyxTQUFTLEVBQUU7QUFBQSxRQUNyQixDQUFDLEtBQUssU0FBUyxDQUFDO0FBQUEsUUFDaEIsQ0FBQyxTQUFTLFNBQVMsQ0FBQztBQUFBLE1BQ3hCLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFFdEIsWUFBSUMsS0FBSSxLQUFLLE1BQU07QUFDbkIsWUFBSSxJQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBRW5CLFdBQUcsbUJBQW1CLElBQUkscUJBQXFCQSxLQUFJLFNBQVMsR0FBUSxXQUFZO0FBQzVFLGlCQUFPLElBQUksUUFBUUEsRUFBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUFBLFFBQ3JELENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUVMLENBQUM7QUFFRCxhQUFTLGVBQWUsV0FBWTtBQUVoQztBQUFBLFFBQ0ksQ0FBQyxTQUFTLE9BQU8sR0FBRyxPQUFPO0FBQUEsUUFDM0IsQ0FBQyxTQUFTLFNBQVMsR0FBRyxPQUFPO0FBQUEsTUFDakMsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQSxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFDbkIsWUFBSSxJQUFJLEtBQUssTUFBTTtBQUVuQixXQUFHLG1CQUFtQixHQUFHLFdBQVk7QUFDakMsaUJBQU8sSUFBSSxRQUFRQSxJQUFHLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFBQSxRQUN6RCxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBQUEsRUFFTCxDQUFDOzs7QUM5Q0Q7QUFHQSxXQUFTLFVBQVUsV0FBWTtBQUMzQixhQUFTLGFBQWEsV0FBWTtBQUU5QixTQUFHLCtCQUErQixXQUFZO0FBQzFDLFlBQUksSUFBSSxPQUFPLFVBQVU7QUFDekIsZUFBTyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sUUFBUTtBQUFBLE1BQ2xDLENBQUM7QUFBQSxJQUVMLENBQUM7QUFDRCxhQUFTLHFCQUFxQixXQUFZO0FBRXRDLFNBQUcsaUNBQWlDLFdBQVk7QUFDNUMsWUFBSSxJQUFJLE9BQU8sa0JBQWtCLFVBQVU7QUFDM0MsZUFBTyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sVUFBVTtBQUFBLE1BQ3BDLENBQUM7QUFBQSxJQUVMLENBQUM7QUFDRCxhQUFTLG1CQUFtQixXQUFZO0FBRXBDLFNBQUcsK0JBQStCLFdBQVk7QUFDMUMsWUFBSSxJQUFJLE9BQU8sZ0JBQWdCLE1BQU07QUFDckMsZUFBTyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sUUFBUTtBQUFBLE1BQ2xDLENBQUM7QUFBQSxJQUVMLENBQUM7QUFBQSxFQUNMLENBQUM7OztBQzVCRDtBQUNBO0FBR0EsV0FBUyxnQkFBZ0IsV0FBWTtBQUVqQyxhQUFTLGFBQWEsV0FBWTtBQUU5QixTQUFHLHlDQUF5QyxXQUFZO0FBQ3BELFlBQUksZUFBZSxJQUFJLGFBQWE7QUFDcEMsWUFBSSxTQUFTLGFBQWEsT0FBTyxJQUFJLFNBQVMsTUFBTTtBQUFBLFFBQ3BELENBQUMsQ0FBQztBQUNGLGVBQU8sTUFBTSxFQUFFLEdBQUcsR0FBRyxXQUFXLFlBQVk7QUFBQSxNQUNoRCxDQUFDO0FBQUEsSUFHTCxDQUFDO0FBRUQsYUFBUyxhQUFhLFdBQVk7QUFFOUIsU0FBRyx5Q0FBeUMsV0FBWTtBQUNwRCxZQUFJLGVBQWUsSUFBSSxhQUFhO0FBQ3BDLFlBQUksU0FBUyxhQUFhLE9BQU8sSUFBSSxTQUFTLE1BQU07QUFBQSxRQUNwRCxDQUFDLENBQUM7QUFDRixlQUFPLE1BQU0sRUFBRSxHQUFHLEdBQUcsV0FBVyxZQUFZO0FBQUEsTUFDaEQsQ0FBQztBQUFBLElBR0wsQ0FBQztBQUVELGFBQVMsYUFBYSxXQUFZO0FBRTlCLFlBQU0sY0FBYztBQUNwQixVQUFJO0FBQ0osVUFBSTtBQUVKLGlCQUFXLE1BQU07QUFDYixZQUFJLElBQUksU0FBUyxNQUFNO0FBQ25CLGlCQUFPO0FBQUEsUUFDWCxDQUFDO0FBRUQsdUJBQWUsSUFBSSxhQUFhO0FBQ2hDLHFCQUFhLE9BQU8sQ0FBQztBQUFBLE1BRXpCLENBQUM7QUFFRCxTQUFHLDZCQUE2QixXQUFZO0FBQ3hDLGVBQU8sYUFBYSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLFdBQVcsT0FBTztBQUFBLE1BQzVELENBQUM7QUFFRCxTQUFHLG1CQUFtQixhQUFhLFNBQVUsTUFBTTtBQUUvQyxZQUFJLE1BQU0sQ0FBQztBQUVYLHFCQUFhLE9BQU8sR0FBRyxFQUFFLEtBQUssT0FBSztBQUMvQixpQkFBTyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsT0FBTyxFQUFFLEtBQUssU0FBUyxXQUFXO0FBQ3JELGVBQUs7QUFBQSxRQUNULENBQUMsRUFBRSxNQUFNLE9BQUs7QUFDVixlQUFLLElBQUksTUFBTSxDQUFDLENBQUM7QUFBQSxRQUNyQixDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFHTCxDQUFDO0FBRUQsYUFBUyxlQUFlLFdBQVk7QUFFaEMsVUFBSSxLQUFLLElBQUksU0FBUyxNQUFNO0FBQUEsTUFDNUIsQ0FBQztBQUNELFVBQUksS0FBSyxJQUFJLFNBQVMsTUFBTTtBQUFBLE1BQzVCLENBQUM7QUFFRCxTQUFHLGdDQUFnQyxXQUFZO0FBQzNDLFlBQUksZUFBZSxJQUFJLGFBQWE7QUFFcEMsZUFBTyxhQUFhLFNBQVMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ3hDLGVBQU8sYUFBYSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUFBLE1BQzVDLENBQUM7QUFFRCxTQUFHLGdDQUFnQyxXQUFZO0FBQzNDLFlBQUksZUFBZSxJQUFJLGFBQWE7QUFDcEMscUJBQWEsT0FBTyxFQUFFO0FBQ3RCLGVBQU8sYUFBYSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUN4QyxlQUFPLGFBQWEsU0FBUyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFBQSxNQUM1QyxDQUFDO0FBRUQsU0FBRyxnQ0FBZ0MsV0FBWTtBQUMzQyxZQUFJLGVBQWUsSUFBSSxhQUFhO0FBQ3BDLHFCQUFhLE9BQU8sRUFBRTtBQUN0QixlQUFPLGFBQWEsU0FBUyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDeEMsZUFBTyxhQUFhLFNBQVMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsTUFDNUMsQ0FBQztBQUdELFNBQUcsNEJBQTRCLFdBQVk7QUFDdkMsWUFBSSxlQUFlLElBQUksYUFBYTtBQUNwQyxxQkFBYSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUU7QUFDakMsZUFBTyxhQUFhLFNBQVMsRUFBRSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ3hDLGVBQU8sYUFBYSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUFBLE1BQzVDLENBQUM7QUFBQSxJQUdMLENBQUM7QUFBQSxFQUdMLENBQUM7OztBQ3RHRDtBQUNBO0FBRUEsTUFBTSxtQkFBTixjQUErQixPQUFPO0FBQUEsSUFFbEMsT0FBTztBQUNILGFBQU87QUFBQSxJQUNYO0FBQUEsRUFDSjtBQUVBLE1BQU0sbUJBQU4sY0FBK0IsT0FBTztBQUFBLElBRWxDLGNBQWM7QUFDVixZQUFNO0FBQ04sd0JBQWtCLEtBQUssSUFBSTtBQUFBLElBQy9CO0FBQUEsSUFFQSxJQUFJLGtCQUFrQjtBQUNsQixhQUFPO0FBQUEsUUFDSCxNQUFNO0FBQUEsTUFDVjtBQUFBLElBQ0o7QUFBQSxFQUVKO0FBRUEsV0FBUyw0QkFBNEIsV0FBWTtBQUU3QyxhQUFTLHVCQUF1QixXQUFZO0FBRXhDLFNBQUcsbUNBQW1DLFdBQVk7QUFDOUMsZUFBTyxJQUFJLGtCQUFnQixFQUFFLElBQUksR0FBRyxHQUFHLFdBQVcsZ0JBQWdCO0FBQ2xFLGVBQU8sSUFBSSxrQkFBZ0IsRUFBRSxHQUFHLEdBQUcsV0FBVyxnQkFBZ0I7QUFBQSxNQUNsRSxDQUFDO0FBRUQsU0FBRyxtQ0FBbUMsV0FBWTtBQUM5QyxlQUFPLElBQUksa0JBQWdCLEVBQUUsR0FBRyxHQUFHLFdBQVcsZ0JBQWdCO0FBQzlELGVBQU8sSUFBSSxrQkFBZ0IsRUFBRSxJQUFJLEdBQUcsR0FBRyxXQUFXLGdCQUFnQjtBQUFBLE1BQ3RFLENBQUM7QUFBQSxJQUVMLENBQUM7QUFFRCxhQUFTLDBDQUEwQyxXQUFZO0FBRTNELFNBQUcsdUNBQXVDLFNBQVUsTUFBTTtBQUN0RCxjQUFNLElBQUksSUFBSTtBQUNkLFVBQUUsdUJBQXVCLElBQUksU0FBUyxNQUFNO0FBQ3hDLGVBQUs7QUFBQSxRQUNULENBQUMsQ0FBQztBQUVGLFVBQUUsWUFBWSxRQUFRLE1BQU07QUFBQSxNQUVoQyxDQUFDO0FBRUQsU0FBRyx1Q0FBdUMsV0FBWTtBQUNsRCxjQUFNLElBQUksSUFBSTtBQUdkLGNBQU0sV0FBVyxJQUFJLFNBQVMsTUFBTTtBQUFBLFFBRXBDLENBQUM7QUFFRCxlQUFPLEVBQUUseUJBQXlCLFFBQVEsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUNuRCxVQUFFLHVCQUF1QixRQUFRO0FBQ2pDLGVBQU8sRUFBRSx5QkFBeUIsUUFBUSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQ25ELFVBQUUsdUJBQXVCLFFBQVE7QUFDakMsZUFBTyxFQUFFLHlCQUF5QixRQUFRLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFBQSxNQUV2RCxDQUFDO0FBRUQsU0FBRywrQkFBK0IsV0FBWTtBQUMxQyxjQUFNLElBQUksSUFBSTtBQUNkLGVBQU8sRUFBRSxZQUFZLFFBQVEsTUFBTSxDQUFDLEVBQUUsR0FBRyxHQUFHLFdBQVcsZ0JBQWdCO0FBQ3ZFLGVBQU8sRUFBRSxZQUFZLE1BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLE1BQU07QUFBQSxNQUNwRCxDQUFDO0FBRUQsU0FBRyw0QkFBNEIsV0FBWTtBQUN2QyxjQUFNLFlBQVksY0FBYyxPQUFPO0FBQUEsVUFDbkMsY0FBYztBQUNWLGtCQUFNO0FBQ04sOEJBQWtCLEtBQUssSUFBSTtBQUFBLFVBQy9CO0FBQUEsVUFFQSxJQUFJLG1CQUFtQjtBQUNuQixtQkFBTztBQUFBLGNBQ0gsTUFBTTtBQUFBLFlBQ1Y7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUdBLGNBQU0sSUFBSSxJQUFJO0FBQ2QsZUFBTyxFQUFFLFlBQVksTUFBTSxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sS0FBSztBQUMvQyxlQUFPLEVBQUUsWUFBWSxTQUFTLEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLEtBQUs7QUFBQSxNQUMzRCxDQUFDO0FBRUQsU0FBRyxvQ0FBb0MsV0FBWTtBQUMvQyxjQUFNLFlBQVksY0FBYyxPQUFPO0FBQUEsVUFDbkMsY0FBYztBQUNWLGtCQUFNO0FBQ04sOEJBQWtCLEtBQUssSUFBSTtBQUFBLFVBQy9CO0FBQUEsVUFFQSxJQUFJLG1CQUFtQjtBQUNuQixtQkFBTztBQUFBLGNBQ0gsTUFBTTtBQUFBLFlBQ1Y7QUFBQSxVQUNKO0FBQUEsUUFDSjtBQUVBLGNBQU0sYUFBYSxjQUFjLFVBQVU7QUFBQSxVQUN2QyxjQUFjO0FBQ1Ysa0JBQU07QUFDTiw4QkFBa0IsS0FBSyxJQUFJO0FBQUEsVUFDL0I7QUFBQSxVQUVBLElBQUksbUJBQW1CO0FBQ25CLG1CQUFPLE9BQU8sT0FBTyxDQUFDLEdBQUcsTUFBTSxrQkFBa0I7QUFBQSxjQUM3QyxPQUFPO0FBQUEsWUFDWCxDQUFDO0FBQUEsVUFDTDtBQUFBLFFBQ0o7QUFFQSxjQUFNLElBQUksSUFBSTtBQUNkLGVBQU8sRUFBRSxZQUFZLE1BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLEtBQUs7QUFDL0MsZUFBTyxFQUFFLFlBQVksT0FBTyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sS0FBSztBQUFBLE1BQ3BELENBQUM7QUFFRCxTQUFHLHVCQUF1QixXQUFZO0FBQ2xDLGNBQU0sSUFBSSxJQUFJO0FBQ2QsZUFBTyxFQUFFLGFBQWE7QUFBQSxVQUNsQixNQUFNO0FBQUEsVUFDTixPQUFPO0FBQUEsUUFDWCxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxnQkFBZ0I7QUFDckMsZUFBTyxFQUFFLFlBQVksTUFBTSxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sTUFBTTtBQUNoRCxlQUFPLEVBQUUsWUFBWSxPQUFPLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxPQUFPO0FBRWxELFVBQUUsYUFBYTtBQUFBLFVBQ1gsT0FBTztBQUFBLFVBQ1AsT0FBTztBQUFBLFFBQ1gsQ0FBQztBQUVELGVBQU8sRUFBRSxZQUFZLE1BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLE1BQU07QUFDaEQsZUFBTyxFQUFFLFlBQVksT0FBTyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sV0FBVztBQUN0RCxlQUFPLEVBQUUsWUFBWSxPQUFPLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxPQUFPO0FBQUEsTUFDdEQsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUFBLEVBR0wsQ0FBQzs7O0FDdEpEO0FBRUEsV0FBUyxtQkFBbUIsV0FBWTtBQUNwQyxhQUFTLFlBQVksV0FBWTtBQUU3QixTQUFHLGlCQUFpQixTQUFVLE1BQU07QUFDaEMsWUFBSSxRQUFRLElBQUk7QUFDaEIsWUFBSSxJQUFJLElBQUksU0FBUyxDQUFDLE1BQU07QUFDeEIsZUFBSztBQUFBLFFBQ1QsQ0FBQztBQUNELGNBQU0sZUFBZSxDQUFDO0FBQ3RCLGVBQU8sTUFBTSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxXQUFXLGVBQWU7QUFBQSxNQUMzRCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBQUEsRUFDTCxDQUFDOzs7QUNiRDtBQUVBLFdBQVMsV0FBVyxXQUFZO0FBRTVCO0FBQUEsTUFDSSxDQUFDLHNEQUFzRDtBQUFBLE1BQ3ZELENBQUMsMkRBQTJEO0FBQUEsTUFDNUQsQ0FBQywwQkFBMEIsbURBQW1EO0FBQUEsTUFDOUUsQ0FBQyxnTUFBZ007QUFBQSxNQUNqTSxDQUFDLDRCQUE0QixvREFBb0Q7QUFBQSxNQUNqRixDQUFDLGtOQUFrTjtBQUFBLE1BQ25OLENBQUMsdUJBQXVCLGlEQUFpRDtBQUFBLE1BQ3pFLENBQUMsNE1BQTRNO0FBQUEsTUFDN00sQ0FBQyxrREFBa0Q7QUFBQSxJQUd2RCxFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFVBQUlDLEtBQUksS0FBSyxNQUFNO0FBQ25CLFVBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsVUFBSSxNQUFNLE9BQVcsS0FBSUEsR0FBRSxLQUFLO0FBR2hDLFNBQUcsa0JBQWtCQSxLQUFJLEtBQUssV0FBWTtBQUV0QyxlQUFPLGFBQWFBLEVBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQUEsTUFDcEQsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUVEO0FBQUEsTUFDSSxDQUFDLGFBQWE7QUFBQSxNQUNkLENBQUMsaUJBQWlCO0FBQUEsTUFDbEIsQ0FBQyxtREFBbUQ7QUFBQSxNQUNwRCxDQUFDLG9EQUFvRCxzTEFBc0w7QUFBQSxNQUMzTyxDQUFDLEVBQUU7QUFBQSxNQUNILENBQUMsc0JBQXNCO0FBQUEsTUFDdkIsQ0FBQyxRQUFRO0FBQUEsTUFDVCxDQUFDLDBLQUEwSztBQUFBLElBRS9LLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFFdEIsVUFBSUEsS0FBSSxLQUFLLE1BQU07QUFHbkIsU0FBRyx5Q0FBeUNBLEtBQUksS0FBSyxXQUFZO0FBRTdELGVBQU8sTUFBTSxhQUFhQSxFQUFDLENBQUMsRUFBRSxNQUFNLFNBQVM7QUFBQSxNQUNqRCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUMzQ0Q7QUFhQSxXQUFTLFNBQVMsUUFBUTtBQUN6QixVQUFNLFlBQVksSUFBSSxZQUFZLGVBQWUsTUFBTSxFQUFFLE1BQU07QUFDL0QsYUFBUyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsS0FBSztBQUMxQyxnQkFBVSxDQUFDLElBQUksT0FBTyxXQUFXLENBQUM7QUFBQSxJQUNuQztBQUVBLFVBQU0sWUFBWSxJQUFJLFdBQVcsVUFBVSxNQUFNO0FBQ2pELFFBQUksU0FBUztBQUViLGFBQVMsSUFBSSxHQUFHLElBQUksVUFBVSxZQUFZLEtBQUs7QUFDOUMsZ0JBQVUsT0FBTyxhQUFhLFVBQVUsQ0FBQyxDQUFDO0FBQUEsSUFDM0M7QUFFQSxXQUFPO0FBQUEsRUFDUjtBQVdBLFdBQVMsV0FBVyxRQUFRO0FBQzNCLFVBQU0sUUFBUSxJQUFJLFdBQVcsZUFBZSxNQUFNLEVBQUUsTUFBTTtBQUMxRCxhQUFTLElBQUksR0FBRyxJQUFJLE1BQU0sUUFBUSxLQUFLO0FBQ3RDLFlBQU0sQ0FBQyxJQUFJLE9BQU8sV0FBVyxDQUFDO0FBQUEsSUFDL0I7QUFDQSxVQUFNLFlBQVksSUFBSSxZQUFZLE1BQU0sTUFBTTtBQUM5QyxRQUFJLFNBQVM7QUFDYixhQUFTLElBQUksR0FBRyxJQUFJLFVBQVUsUUFBUSxLQUFLO0FBQzFDLGdCQUFVLE9BQU8sYUFBYSxVQUFVLENBQUMsQ0FBQztBQUFBLElBQzNDO0FBQ0EsV0FBTztBQUFBLEVBQ1I7OztBQzFEQSxXQUFTLFVBQVUsV0FBWTtBQUUzQjtBQUFBLE1BQ0ksQ0FBQyxLQUFLLEtBQVM7QUFBQSxNQUNmLENBQUMsVUFBSyxJQUFJO0FBQUEsTUFDVixDQUFDLDZDQUF3QixtRkFBOEk7QUFBQSxJQUUzSyxFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFVBQUlDLEtBQUksS0FBSyxNQUFNO0FBQ25CLFVBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsU0FBRyx5QkFBeUJBLEtBQUksa0JBQWtCLFdBQVk7QUFDMUQsWUFBSSxJQUFJLFNBQVNBLEVBQUM7QUFDbEIsZUFBTyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN2QixlQUFPLFdBQVcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU1BLEVBQUM7QUFBQSxNQUN2QyxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUN4QkQ7QUFHQSxXQUFTLFlBQVksV0FBWTtBQUU3QixRQUFJLFdBQVcsV0FBWTtBQUFBLElBQzNCO0FBRUEsUUFBSSxXQUFXLElBQUksU0FBUyxRQUFRO0FBRXBDLGFBQVMsYUFBYSxXQUFZO0FBRTlCO0FBQUEsUUFDSSxDQUFDLE9BQU87QUFBQSxRQUNSLENBQUMsT0FBTztBQUFBLE1BQ1osRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQyxLQUFJLEtBQUssTUFBTTtBQUVuQixXQUFHLFlBQVlBLEtBQUksdUNBQXVDLFdBQVk7QUFDbEUsaUJBQU8sU0FBUyxPQUFPQSxFQUFDLENBQUMsRUFBRSxHQUFHLFdBQVcsUUFBUTtBQUFBLFFBQ3JELENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUVMLENBQUM7QUFFRCxhQUFTLGdCQUFnQixXQUFZO0FBRWpDO0FBQUEsUUFDSSxDQUFDLE9BQU87QUFBQSxRQUNSLENBQUMsT0FBTztBQUFBLE1BQ1osRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQSxLQUFJLEtBQUssTUFBTTtBQUVuQixXQUFHLGVBQWVBLEtBQUksdUNBQXVDLFdBQVk7QUFDckUsaUJBQU8sU0FBUyxVQUFVQSxFQUFDLENBQUMsRUFBRSxHQUFHLFdBQVcsUUFBUTtBQUFBLFFBQ3hELENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUVMLENBQUM7QUFFRCxhQUFTLGFBQWEsV0FBWTtBQUU5QjtBQUFBLFFBQ0ksQ0FBQyxTQUFTLElBQUk7QUFBQSxRQUNkLENBQUMsU0FBUyxJQUFJO0FBQUEsUUFDZCxDQUFDLFNBQVMsS0FBSztBQUFBLFFBQ2YsQ0FBQyxTQUFTLEtBQUs7QUFBQSxNQUNuQixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUksZUFBZSxJQUFJLFNBQVMsUUFBUTtBQUV4QyxZQUFJQSxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBRW5CLFdBQUcsc0JBQXNCQSxLQUFJLHFCQUFxQixHQUFHLFdBQVk7QUFFN0QsY0FBSSxNQUFNLE1BQU07QUFDWix5QkFBYSxPQUFPQSxFQUFDO0FBQ3JCLG1CQUFPLGFBQWEsT0FBT0EsRUFBQyxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsVUFDekMsT0FBTztBQUNILG1CQUFPLGFBQWEsT0FBT0EsRUFBQyxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsVUFDekM7QUFBQSxRQUNKLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUVMLENBQUM7QUFFRCxhQUFTLGFBQWEsV0FBWTtBQUU5QixVQUFJLE1BQU0sQ0FBQztBQUNYLFNBQUcscUJBQXFCLE1BQU0sWUFBcUIsU0FBVSxNQUFNO0FBRS9ELFlBQUksZUFBZSxJQUFJLFNBQVMsU0FBVUEsSUFBRyxHQUFHLEdBQUc7QUFDL0MsaUJBQU9BLEtBQUksSUFBSTtBQUFBLFFBQ25CLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFHVixxQkFBYSxPQUFPLEdBQUcsRUFBRSxLQUFLLENBQUFBLE9BQUs7QUFDL0IsaUJBQU9BLEVBQUMsRUFBRSxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDNUIsZUFBSztBQUFBLFFBQ1QsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUVELGFBQVMsd0NBQXdDLFdBQVk7QUFFekQsVUFBSSxNQUFNLENBQUM7QUFDWCxTQUFHLHFCQUFxQixNQUFNLFlBQXFCLFNBQVUsTUFBTTtBQUUvRCxZQUFJLFVBQVU7QUFDZCxZQUFJLGVBQWUsSUFBSSxTQUFTLFNBQVVBLElBQUcsR0FBRyxHQUFHO0FBQy9DO0FBQUEsUUFDSixDQUFDO0FBRUQscUJBQWEsT0FBTyxHQUFHO0FBQ3ZCLHFCQUFhLE9BQU8sR0FBRztBQUN2QixxQkFBYSxPQUFPLEdBQUc7QUFDdkIscUJBQWEsT0FBTyxHQUFHO0FBQ3ZCLHFCQUFhLE9BQU8sR0FBRyxFQUFFLEtBQUssT0FBSztBQUMvQixlQUFLO0FBQUEsUUFDVCxDQUFDO0FBQUEsTUFFTCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBRUQsYUFBUyxjQUFjLFdBQVk7QUFFL0I7QUFBQSxRQUNJLENBQUMsQ0FBQyxTQUFTLFNBQVMsU0FBUyxPQUFPLEdBQUcsQ0FBQztBQUFBLFFBQ3hDLENBQUMsQ0FBQyxTQUFTLFNBQVMsU0FBUyxPQUFPLEdBQUcsQ0FBQztBQUFBO0FBQUEsUUFDeEMsQ0FBQyxDQUFDLFNBQVMsU0FBUyxTQUFTLE9BQU8sR0FBRyxDQUFDO0FBQUE7QUFBQSxNQUM1QyxFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUksZUFBZSxJQUFJLFNBQVMsUUFBUTtBQUV4QyxZQUFJQSxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBRW5CLGlCQUFTLElBQUksR0FBR0MsT0FBTUQsR0FBRSxRQUFRLElBQUlDLE1BQUssS0FBSztBQUMxQyx1QkFBYSxPQUFPRCxHQUFFLENBQUMsQ0FBQztBQUFBLFFBQzVCO0FBRUEsV0FBRyxzQkFBc0JBLEtBQUksY0FBYyxXQUFZO0FBQ25ELGlCQUFPLGFBQWEsUUFBUSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsT0FBTztBQUFBLFFBQ25ELENBQUM7QUFFRCxXQUFHLHNCQUFzQkEsS0FBSSxxQkFBcUIsSUFBSSxTQUFTLFdBQVk7QUFDdkUsaUJBQU8sYUFBYSxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQUEsUUFDcEQsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUFBLEVBRUwsQ0FBQzs7O0FDN0hEO0FBY0EsV0FBUyxhQUFhLE9BQU87QUFDNUIsV0FBTyxlQUFlLEtBQUssRUFDekIsUUFBUSx1QkFBdUIsTUFBTSxFQUNyQyxRQUFRLE1BQU0sT0FBTztBQUFBLEVBQ3hCOzs7QUMxQkEsV0FBUyxnQkFBZ0IsV0FBWTtBQUVqQyxXQUFPLFNBQVUsTUFBTTtBQUVuQixVQUFJLFdBQVcsQ0FBQztBQUNoQixlQUFTLEtBQUssVUFBVSxDQUFDO0FBQ3pCLFVBQUcsQ0FBQyxXQUFXLFFBQVEsR0FBRztBQUN0QixpQkFBUyxLQUFLLDBFQUE4QixLQUFLLE9BQUs7QUFDbEQscUJBQVcsUUFBUSxJQUFJLElBQUksRUFBRSxPQUFPO0FBQ3BDLGlCQUFPO0FBQUEsUUFDWCxDQUFDLENBQUM7QUFBQSxNQUNOO0FBR0EsY0FBUSxJQUFJLFFBQVEsRUFBRSxLQUFLLE1BQU07QUFDN0IsYUFBSztBQUFBLE1BQ1QsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUVEO0FBQUEsTUFDSSxDQUFDLFNBQVMsT0FBTztBQUFBLE1BQ2pCLENBQUMsTUFBTSxRQUFRO0FBQUEsTUFDZixDQUFDLFNBQVMsU0FBUztBQUFBLE1BQ25CLENBQUMsTUFBTSxJQUFJO0FBQUEsTUFDWCxDQUFDLE1BQU0sTUFBTTtBQUFBLElBRWpCLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFFdEIsVUFBSUUsS0FBSSxLQUFLLE1BQU07QUFDbkIsVUFBSSxJQUFJLEtBQUssTUFBTTtBQUVuQixTQUFHLGtCQUFrQkEsS0FBSSxxQkFBcUIsR0FBRyxXQUFZO0FBQ3pELGVBQU8sYUFBYUEsRUFBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFBQSxNQUN0QyxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUMxQ0QsV0FBUyxZQUFZLFdBQVk7QUFBQSxJQUU3QixNQUFNQyxVQUFTO0FBQUEsSUFBQztBQUVoQixXQUFPLFNBQVUsTUFBTTtBQUVuQixVQUFJLFdBQVcsQ0FBQztBQUNoQixVQUFHLENBQUMsV0FBVyxRQUFRLEdBQUc7QUFDdEIsaUJBQVMsS0FBSywwRUFBOEIsS0FBSyxPQUFLO0FBQ2xELHFCQUFXLFFBQVEsSUFBSSxJQUFJLEVBQUUsT0FBTztBQUNwQyxpQkFBTztBQUFBLFFBQ1gsQ0FBQyxDQUFDO0FBQUEsTUFDTjtBQUVBLGVBQVMsS0FBSyxrRUFBNkMsS0FBSyxPQUFLO0FBQ2pFLFFBQUFBLFlBQVcsRUFBRTtBQUNiLGVBQU87QUFBQSxNQUNYLENBQUMsQ0FBQztBQUVGLGNBQVEsSUFBSSxRQUFRLEVBQUUsS0FBSyxNQUFNO0FBQzdCLGFBQUs7QUFBQSxNQUNULENBQUM7QUFBQSxJQUVMLENBQUM7QUFFRCxhQUFTLGVBQWUsV0FBWTtBQUNoQyxVQUFJLEtBQUssSUFBSUEsVUFBUztBQUN0QixVQUFJLFNBQVMsR0FBRyxTQUFTO0FBRXpCLFNBQUcsMEJBQTBCLFdBQVk7QUFDckMsZUFBTyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVE7QUFBQSxNQUNoQyxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBQUEsRUFFTCxDQUFDOzs7QUNyQ0Q7QUFJQSxXQUFTLE1BQU0sV0FBWTtBQUV2QixXQUFPLFNBQVUsTUFBTTtBQUVuQixVQUFJLFdBQVcsQ0FBQztBQUNoQixVQUFHLENBQUMsV0FBVyxRQUFRLEdBQUc7QUFDdEIsaUJBQVMsS0FBSywwRUFBOEIsS0FBSyxPQUFLO0FBQ2xELHFCQUFXLFFBQVEsSUFBSSxJQUFJLEVBQUUsT0FBTztBQUNwQyxpQkFBTztBQUFBLFFBQ1gsQ0FBQyxDQUFDO0FBQUEsTUFDTjtBQUdBLGNBQVEsSUFBSSxRQUFRLEVBQUUsS0FBSyxNQUFNO0FBQzdCLGFBQUs7QUFBQSxNQUNULENBQUM7QUFBQSxJQUVMLENBQUM7QUFFRCxhQUFTLGVBQWUsV0FBWTtBQUNoQyxVQUFJLEtBQUssSUFBSSxHQUFHO0FBQ2hCLFVBQUksU0FBUyxHQUFHLFNBQVM7QUFFekIsU0FBRywwQkFBMEIsV0FBWTtBQUNyQyxlQUFPLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUTtBQUFBLE1BQ2hDLENBQUM7QUFFRCxTQUFHLDBCQUEwQixXQUFZO0FBQ3JDLGVBQU8sSUFBSSxHQUFHLFlBQVksRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLE1BQU0sYUFBYTtBQUM5RCxlQUFPLElBQUksR0FBRyxZQUFZLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxNQUFNLGFBQWE7QUFDOUQsZUFBTyxJQUFJLEdBQUcsWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxhQUFhO0FBQUEsTUFDbEUsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUFBLEVBRUwsQ0FBQzs7O0FDckNELFdBQVMsUUFBUSxXQUFZO0FBQUEsSUFFekIsTUFBTUMsTUFBSztBQUFBLElBQUM7QUFFWixXQUFPLFNBQVUsTUFBTTtBQUVuQixVQUFJLFdBQVcsQ0FBQztBQUVoQixVQUFHLENBQUMsV0FBVyxRQUFRLEdBQUc7QUFDdEIsaUJBQVMsS0FBSywwRUFBOEIsS0FBSyxPQUFLO0FBQ2xELHFCQUFXLFFBQVEsSUFBSSxJQUFJLEVBQUUsT0FBTztBQUNwQyxpQkFBTztBQUFBLFFBQ1gsQ0FBQyxDQUFDO0FBQUEsTUFDTjtBQUdBLGVBQVMsS0FBSywwREFBeUMsS0FBSyxPQUFLO0FBQzdELFFBQUFBLFFBQU8sRUFBRTtBQUNULGVBQU87QUFBQSxNQUNYLENBQUMsQ0FBQztBQUVGLGNBQVEsSUFBSSxRQUFRLEVBQUUsS0FBSyxNQUFNO0FBQzdCLGFBQUs7QUFBQSxNQUNULENBQUM7QUFBQSxJQUVMLENBQUM7QUFFRCxhQUFTLGVBQWUsV0FBWTtBQUNoQyxTQUFHLDBCQUEwQixXQUFZO0FBQ3JDLFlBQUksT0FBTyxJQUFJQSxNQUFLO0FBQ3BCLFlBQUksU0FBUyxLQUFLLFNBQVM7QUFFM0IsZUFBTyxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVE7QUFDNUIsZUFBTyxPQUFPLE1BQU0sRUFBRSxHQUFHLE1BQU0sRUFBRTtBQUFBLE1BQ3JDLENBQUM7QUFFRCxTQUFHLGVBQWUsU0FBVSxNQUFNO0FBQzlCLFlBQUksT0FBTyxJQUFJQSxNQUFLO0FBQ3BCLFlBQUksU0FBUyxLQUFLLFNBQVM7QUFFM0IsY0FBTSxXQUFXO0FBRWpCLGlCQUFTLElBQUksR0FBRyxJQUFJLEtBQU0sS0FBSztBQUMzQixnQkFBTSxJQUFJLElBQUlBLE1BQUssRUFBRSxTQUFTO0FBQzlCLGdCQUFNLElBQUksU0FBUyxLQUFLLENBQUM7QUFFekIsY0FBSSxNQUFNLE1BQU07QUFDWixpQkFBSyxhQUFhLElBQUksU0FBUyxDQUFDO0FBQ2hDO0FBQUEsVUFDSjtBQUFBLFFBQ0o7QUFFQSxhQUFLO0FBQUEsTUFFVCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBQUEsRUFFTCxDQUFDOzs7QUM1REQ7QUFjQTtBQUtBLFdBQVMsTUFBTSxXQUFZO0FBRXZCLFdBQU8sU0FBVSxNQUFNO0FBRW5CLFVBQUksV0FBVyxDQUFDO0FBQ2hCLFVBQUcsQ0FBQyxXQUFXLFFBQVEsR0FBRztBQUN0QixpQkFBUyxLQUFLLDBFQUE4QixLQUFLLE9BQUs7QUFDbEQscUJBQVcsUUFBUSxJQUFJLElBQUksRUFBRSxPQUFPO0FBQ3BDLGlCQUFPO0FBQUEsUUFDWCxDQUFDLENBQUM7QUFBQSxNQUNOO0FBR0EsY0FBUSxJQUFJLFFBQVEsRUFBRSxLQUFLLE1BQU07QUFDN0IsYUFBSztBQUFBLE1BQ1QsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUVELGFBQVMsa0JBQWtCLFdBQVk7QUFFbkM7QUFBQSxRQUNJLENBQUMsU0FBUyxJQUFJO0FBQUEsUUFDZCxDQUFDLFFBQVcsSUFBSTtBQUFBLFFBQ2hCLENBQUMsTUFBTSxJQUFJO0FBQUEsUUFDWCxDQUFDLE1BQU07QUFBQSxRQUNQLEdBQUcsS0FBSztBQUFBLFFBQ1IsQ0FBQyxHQUFHLElBQUk7QUFBQSxRQUNSLENBQUMsU0FBUyxHQUFHLEdBQUcsSUFBSTtBQUFBLFFBQ3BCLENBQUMsT0FBTyxJQUFJO0FBQUEsUUFDWixDQUFDLE1BQU0sSUFBSTtBQUFBLFFBQ1gsQ0FBQyxLQUFLLElBQUk7QUFBQSxRQUNWLENBQUMsQ0FBQyxHQUFHLEtBQUs7QUFBQSxRQUNWLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUs7QUFBQSxRQUNqQixDQUFDLE9BQU8sS0FBSyxHQUFHLElBQUk7QUFBQSxNQUN4QixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUlDLEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsV0FBRyxvQkFBb0IsT0FBT0EsS0FBSSxxQkFBcUIsR0FBRyxXQUFZO0FBQ2xFLGlCQUFPLFlBQVlBLEVBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQUEsUUFDckMsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBR0wsQ0FBQztBQUNELGFBQVMsZUFBZSxXQUFZO0FBRWhDO0FBQUEsUUFDSSxDQUFDLFNBQVMsS0FBSztBQUFBLFFBQ2YsQ0FBQyxRQUFXLEtBQUs7QUFBQSxRQUNqQixDQUFDLE1BQU0sS0FBSztBQUFBLFFBQ1osQ0FBQyxNQUFNO0FBQUEsUUFDUCxHQUFHLEtBQUs7QUFBQSxRQUNSLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDVCxDQUFDLFNBQVMsR0FBRyxHQUFHLEtBQUs7QUFBQSxRQUNyQixDQUFDLE9BQU8sS0FBSztBQUFBLFFBQ2IsQ0FBQyxNQUFNLEtBQUs7QUFBQSxRQUNaLENBQUMsS0FBSyxLQUFLO0FBQUEsUUFDWCxDQUFDLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDVixDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDakIsQ0FBQyxPQUFPLEtBQUssR0FBRyxJQUFJO0FBQUEsTUFDeEIsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQSxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBRW5CLFdBQUcsaUJBQWlCLE9BQU9BLEtBQUkscUJBQXFCLEdBQUcsV0FBWTtBQUMvRCxpQkFBTyxTQUFTQSxFQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUFBLFFBQ2xDLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUdMLENBQUM7QUFFRCxhQUFTLGdCQUFnQixXQUFZO0FBRWpDO0FBQUEsUUFDSSxDQUFDLFNBQVMsS0FBSztBQUFBLFFBQ2YsQ0FBQyxRQUFXLEtBQUs7QUFBQSxRQUNqQixDQUFDLE1BQU0sS0FBSztBQUFBLFFBQ1osQ0FBQyxNQUFNO0FBQUEsUUFDUCxHQUFHLEtBQUs7QUFBQSxRQUNSLENBQUMsR0FBRyxJQUFJO0FBQUEsUUFDUixDQUFDLFNBQVMsR0FBRyxHQUFHLEtBQUs7QUFBQSxRQUNyQixDQUFDLE9BQU8sS0FBSztBQUFBLFFBQ2IsQ0FBQyxNQUFNLEtBQUs7QUFBQSxRQUNaLENBQUMsS0FBSyxLQUFLO0FBQUEsUUFDWCxDQUFDLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDVixDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDakIsQ0FBQyxPQUFPLEtBQUssR0FBRyxLQUFLO0FBQUEsTUFDekIsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQSxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBRW5CLFdBQUcsa0JBQWtCLE9BQU9BLEtBQUkscUJBQXFCLEdBQUcsV0FBWTtBQUNoRSxpQkFBTyxVQUFVQSxFQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUFBLFFBQ25DLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUdMLENBQUM7QUFFRCxhQUFTLGlCQUFpQixXQUFZO0FBRWxDO0FBQUEsUUFDSSxDQUFDLFNBQVMsSUFBSTtBQUFBLFFBQ2QsQ0FBQyxRQUFXLEtBQUs7QUFBQSxRQUNqQixDQUFDLE1BQU0sS0FBSztBQUFBLFFBQ1osQ0FBQyxNQUFNO0FBQUEsUUFDUCxHQUFHLEtBQUs7QUFBQSxRQUNSLENBQUMsU0FBUyxHQUFHLEdBQUcsS0FBSztBQUFBLFFBQ3JCLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDVCxDQUFDLE9BQU8sS0FBSztBQUFBLFFBQ2IsQ0FBQyxNQUFNLEtBQUs7QUFBQSxRQUNaLENBQUMsS0FBSyxLQUFLO0FBQUEsUUFDWCxDQUFDLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDVixDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJO0FBQUEsUUFDaEIsQ0FBQyxPQUFPLEtBQUssR0FBRyxLQUFLO0FBQUEsTUFDekIsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQSxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBRW5CLFdBQUcsbUJBQW1CLE9BQU9BLEtBQUkscUJBQXFCLEdBQUcsV0FBWTtBQUNqRSxpQkFBTyxXQUFXQSxFQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUFBLFFBQ3BDLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUdMLENBQUM7QUFFRCxhQUFTLGdCQUFnQixXQUFZO0FBRWpDO0FBQUEsUUFDSSxDQUFDLFNBQVMsS0FBSztBQUFBLFFBQ2YsQ0FBQyxRQUFXLEtBQUs7QUFBQSxRQUNqQixDQUFDLE1BQU0sS0FBSztBQUFBLFFBQ1osQ0FBQyxNQUFNO0FBQUEsUUFDUCxHQUFHLEtBQUs7QUFBQSxRQUNSLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDVCxDQUFDLE9BQU8sSUFBSTtBQUFBLFFBQ1osQ0FBQyxTQUFTLEdBQUcsR0FBRyxLQUFLO0FBQUEsUUFDckIsQ0FBQyxNQUFNLElBQUk7QUFBQSxRQUNYLENBQUMsS0FBSyxLQUFLO0FBQUEsUUFDWCxDQUFDLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDVixDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDakIsQ0FBQyxPQUFPLEtBQUssR0FBRyxLQUFLO0FBQUEsTUFDekIsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQSxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBRW5CLFdBQUcsa0JBQWtCLE9BQU9BLEtBQUkscUJBQXFCLEdBQUcsV0FBWTtBQUNoRSxpQkFBTyxVQUFVQSxFQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUFBLFFBQ25DLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUdMLENBQUM7QUFFRCxhQUFTLGVBQWUsV0FBWTtBQUVoQztBQUFBLFFBQ0ksQ0FBQyxTQUFTLElBQUk7QUFBQSxRQUNkLENBQUMsUUFBVyxLQUFLO0FBQUEsUUFDakIsQ0FBQyxNQUFNLEtBQUs7QUFBQSxRQUNaLENBQUMsTUFBTTtBQUFBLFFBQ1AsR0FBRyxLQUFLO0FBQUEsUUFDUixDQUFDLEdBQUcsS0FBSztBQUFBLFFBQ1QsQ0FBQyxPQUFPLEtBQUs7QUFBQSxRQUNiLENBQUMsU0FBUyxHQUFHLEdBQUcsS0FBSztBQUFBLFFBQ3JCLENBQUMsTUFBTSxLQUFLO0FBQUEsUUFDWixDQUFDLEtBQUssS0FBSztBQUFBLFFBQ1gsQ0FBQyxDQUFDLEdBQUcsS0FBSztBQUFBLFFBQ1YsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSztBQUFBLFFBQ2pCLENBQUMsT0FBTyxLQUFLLEdBQUcsS0FBSztBQUFBLE1BQ3pCLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFFdEIsWUFBSUEsS0FBSSxLQUFLLE1BQU07QUFDbkIsWUFBSSxJQUFJLEtBQUssTUFBTTtBQUVuQixXQUFHLGlCQUFpQixPQUFPQSxLQUFJLHFCQUFxQixHQUFHLFdBQVk7QUFDL0QsaUJBQU8sU0FBU0EsRUFBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFBQSxRQUNsQyxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFHTCxDQUFDO0FBRUQsYUFBUyxpQkFBaUIsV0FBWTtBQUVsQztBQUFBLFFBQ0ksQ0FBQyxJQUFJLEdBQUcsR0FBRyxJQUFLLElBQUk7QUFBQSxRQUNwQixDQUFDLElBQUksR0FBRyxHQUFHLE1BQUk7QUFBQSxRQUFDLEdBQUksS0FBSztBQUFBLFFBQ3pCLENBQUMsU0FBUyxRQUFXLEtBQUs7QUFBQSxRQUMxQixDQUFDLFFBQVcsUUFBVyxLQUFLO0FBQUEsUUFDNUIsQ0FBQyxNQUFNLFFBQVcsS0FBSztBQUFBLFFBQ3ZCLENBQUMsTUFBTTtBQUFBLFFBQ1AsR0FBRyxRQUFXLEtBQUs7QUFBQSxRQUNuQixDQUFDLEdBQUcsUUFBVyxLQUFLO0FBQUEsUUFDcEIsQ0FBQyxPQUFPLFFBQVcsS0FBSztBQUFBLFFBQ3hCLENBQUMsU0FBUyxHQUFHLEdBQUcsUUFBVyxLQUFLO0FBQUEsUUFDaEMsQ0FBQyxNQUFNLFFBQVcsS0FBSztBQUFBLFFBQ3ZCLENBQUMsS0FBSyxRQUFXLEtBQUs7QUFBQSxRQUN0QixDQUFDLENBQUMsR0FBRyxRQUFXLEtBQUs7QUFBQSxRQUNyQixDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxRQUFXLEtBQUs7QUFBQSxRQUM1QixDQUFDLE9BQU8sS0FBSyxHQUFHLFFBQVcsS0FBSztBQUFBLE1BQ3BDLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFFdEIsWUFBSUEsS0FBSSxLQUFLLE1BQU07QUFDbkIsWUFBSSxJQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBRW5CLFdBQUcsbUJBQW1CLEtBQUssVUFBVUEsRUFBQyxJQUFJLHFCQUFxQixPQUFPLEdBQUcsV0FBWTtBQUNqRixpQkFBTyxXQUFXQSxJQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQUEsUUFDdkMsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMseUJBQXlCLFdBQVk7QUFBQSxNQUMxQyxNQUFNQyxNQUFLO0FBQUEsTUFBQztBQUFBLE1BQ1osTUFBTSxnQkFBZ0JBLE1BQUs7QUFBQSxNQUFDO0FBQzVCLGVBQVMsZUFBZTtBQUFBLE1BQUM7QUFFekIsVUFBSSxlQUFlLElBQUlBLE1BQUs7QUFDNUIsVUFBSSxrQkFBa0IsSUFBSSxRQUFRO0FBR2xDLFlBQU0sUUFBUTtBQUFBLFFBQ1YsQ0FBQyxNQUFNO0FBQUEsUUFBQyxHQUFHLFFBQVcsT0FBTSx1QkFBdUI7QUFBQSxRQUNuRCxDQUFDLElBQUksR0FBRyxHQUFHLE1BQUk7QUFBQSxRQUFDLEdBQUcsT0FBTyx5QkFBeUI7QUFBQSxRQUNuRCxDQUFDLElBQUksR0FBRyxHQUFHLElBQUksTUFBTSxtQkFBbUI7QUFBQSxRQUN4QyxDQUFDLFNBQVMsUUFBVyxPQUFPLHFCQUFxQjtBQUFBLFFBQ2pELENBQUMsUUFBVyxRQUFXLE9BQU8sd0JBQXdCO0FBQUEsUUFDdEQsQ0FBQyxNQUFNLFFBQVcsT0FBTyxtQkFBbUI7QUFBQSxRQUM1QyxDQUFDLEdBQUcsUUFBVyxPQUFPLHFCQUFxQjtBQUFBLFFBQzNDLENBQUMsT0FBTyxRQUFXLE9BQU8sb0JBQW9CO0FBQUEsUUFDOUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxRQUFXLE9BQU8sa0JBQWtCO0FBQUEsUUFDcEQsQ0FBQyxNQUFNLFFBQVcsT0FBTyxtQkFBbUI7QUFBQSxRQUM1QyxDQUFDLEtBQUssUUFBVyxPQUFPLG9CQUFvQjtBQUFBLFFBQzVDLENBQUMsQ0FBQyxHQUFHLFFBQVcsT0FBTyxxQkFBcUI7QUFBQSxRQUM1QyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxRQUFXLE9BQU8sb0JBQW9CO0FBQUEsUUFDbEQsQ0FBQyxPQUFPLEtBQUssR0FBRyxRQUFXLE9BQU8scUJBQXFCO0FBQUEsUUFDdkQsQ0FBQyxjQUFjQSxPQUFNLE1BQU0sdUJBQXVCO0FBQUEsUUFDbEQsQ0FBQyxpQkFBaUJBLE9BQU0sTUFBTSwwQkFBMEI7QUFBQSxRQUN4RCxDQUFDLGlCQUFpQixTQUFTLE1BQU0sNkJBQTZCO0FBQUEsUUFDOUQsQ0FBQyxjQUFjLFNBQVMsT0FBTywwQkFBMEI7QUFBQSxRQUN6RCxDQUFDLGNBQWMsY0FBYyxPQUFPLCtCQUErQjtBQUFBLFFBQ25FLENBQUMsaUJBQWlCLE1BQUk7QUFBQSxRQUFDLEdBQUcsT0FBTyw4QkFBOEI7QUFBQSxRQUMvRCxDQUFDLElBQUksYUFBYSxHQUFHLGNBQWMsTUFBTSx1Q0FBdUM7QUFBQSxNQUNwRjtBQUdBLFVBQUksd0JBQXdCLElBQUlBLE1BQUs7QUFDckMsYUFBTyxlQUFlLHVCQUF1QixRQUFRLFNBQVM7QUFDOUQsWUFBTTtBQUFBLFFBQ0YsQ0FBQyx1QkFBdUJBLE9BQU0sTUFBTSxzQ0FBc0M7QUFBQSxRQUMxRSxDQUFDLHVCQUF1QixTQUFTLE1BQU0seUNBQXlDO0FBQUEsTUFDcEY7QUFHQSxZQUFNLFFBQVEsU0FBVSxNQUFNO0FBQzFCLGNBQU1ELEtBQUksS0FBSyxNQUFNO0FBQ3JCLGNBQU0sSUFBSSxLQUFLLE1BQU07QUFDckIsY0FBTSxJQUFJLEtBQUssTUFBTTtBQUNyQixjQUFNLElBQUksS0FBSyxNQUFNO0FBRXJCLFdBQUcsZ0JBQWdCLEtBQUssVUFBVUEsRUFBQyxJQUFJLGlDQUFpQyxHQUFHLFdBQVk7QUFFbkYsY0FBSSxXQUFXQSxJQUFHLENBQUMsTUFBSSxHQUFHO0FBQ3RCLG9CQUFRLElBQUksQ0FBQztBQUFBLFVBQ2pCO0FBRUEsaUJBQU8sV0FBV0EsSUFBRyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUFBLFFBQ3ZDLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxhQUFTLGVBQWUsV0FBWTtBQUVoQztBQUFBLFFBQ0ksQ0FBQyxTQUFTLEtBQUs7QUFBQSxRQUNmLENBQUMsUUFBVyxLQUFLO0FBQUEsUUFDakIsQ0FBQyxNQUFNLEtBQUs7QUFBQSxRQUNaLENBQUMsTUFBTTtBQUFBLFFBQ1AsR0FBRyxLQUFLO0FBQUEsUUFDUixDQUFDLEdBQUcsS0FBSztBQUFBLFFBQ1QsQ0FBQyxPQUFPLEtBQUs7QUFBQSxRQUNiLENBQUMsU0FBUyxHQUFHLEdBQUcsS0FBSztBQUFBLFFBQ3JCLENBQUMsTUFBTSxLQUFLO0FBQUEsUUFDWixDQUFDLEtBQUssS0FBSztBQUFBLFFBQ1gsQ0FBQyxDQUFDLEdBQUcsSUFBSTtBQUFBLFFBQ1QsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSztBQUFBLFFBQ2pCLENBQUMsT0FBTyxLQUFLLEdBQUcsS0FBSztBQUFBLE1BQ3pCLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFFdEIsWUFBSUEsS0FBSSxLQUFLLE1BQU07QUFDbkIsWUFBSSxJQUFJLEtBQUssTUFBTTtBQUVuQixXQUFHLGlCQUFpQixLQUFLLFVBQVVBLEVBQUMsSUFBSSxxQkFBcUIsR0FBRyxXQUFZO0FBQ3hFLGlCQUFPLFNBQVNBLEVBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQUEsUUFDbEMsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBR0wsQ0FBQztBQUdELGFBQVMsY0FBYyxXQUFZO0FBRS9CO0FBQUEsUUFDSSxDQUFDLFNBQVMsS0FBSztBQUFBLFFBQ2YsQ0FBQyxRQUFXLEtBQUs7QUFBQSxRQUNqQixDQUFDLE1BQU0sS0FBSztBQUFBLFFBQ1osQ0FBQyxNQUFNO0FBQUEsUUFDUCxHQUFHLEtBQUs7QUFBQSxRQUNSLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDVCxDQUFDLE9BQU8sS0FBSztBQUFBLFFBQ2IsQ0FBQyxTQUFTLEdBQUcsR0FBRyxLQUFLO0FBQUEsUUFDckIsQ0FBQyxNQUFNLEtBQUs7QUFBQSxRQUNaLENBQUMsS0FBSyxLQUFLO0FBQUEsUUFDWCxDQUFDLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDVixDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJO0FBQUEsUUFDaEIsQ0FBQyxPQUFPLEtBQUssR0FBRyxLQUFLO0FBQUEsTUFDekIsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQSxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBRW5CLFdBQUcsZ0JBQWdCLE9BQU9BLEtBQUkscUJBQXFCLEdBQUcsV0FBWTtBQUM5RCxpQkFBTyxRQUFRQSxFQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUFBLFFBQ2pDLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUNMLENBQUM7QUFFRCxhQUFTLGlCQUFpQixXQUFZO0FBRWxDO0FBQUEsUUFDSSxDQUFDLFNBQVMsS0FBSztBQUFBLFFBQ2YsQ0FBQyxRQUFXLEtBQUs7QUFBQSxRQUNqQixDQUFDLE1BQU0sS0FBSztBQUFBLFFBQ1osQ0FBQyxNQUFNO0FBQUEsUUFDUCxHQUFHLElBQUk7QUFBQSxRQUNQLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDVCxDQUFDLE9BQU8sS0FBSztBQUFBLFFBQ2IsQ0FBQyxTQUFTLEdBQUcsR0FBRyxLQUFLO0FBQUEsUUFDckIsQ0FBQyxNQUFNLEtBQUs7QUFBQSxRQUNaLENBQUMsS0FBSyxLQUFLO0FBQUEsUUFDWCxDQUFDLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDVixDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDakIsQ0FBQyxPQUFPLEtBQUssR0FBRyxLQUFLO0FBQUEsTUFDekIsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQSxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBRW5CLFdBQUcsbUJBQW1CLE9BQU9BLEtBQUkscUJBQXFCLEdBQUcsV0FBWTtBQUNqRSxpQkFBTyxXQUFXQSxFQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUFBLFFBQ3BDLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUNMLENBQUM7QUFBQSxFQUVMLENBQUM7OztBQ2hZRDtBQWFBO0FBQ0E7QUFJQSxXQUFTLFlBQVksV0FBWTtBQUU3QixhQUFTLHdCQUF3QixXQUFZO0FBRXpDO0FBQUEsUUFDSSxDQUFDLFNBQVMsSUFBSTtBQUFBLFFBQ2QsQ0FBQyxRQUFXLElBQUk7QUFBQSxRQUNoQixDQUFDLE1BQU0sSUFBSTtBQUFBLFFBQ1gsQ0FBQyxNQUFNO0FBQUEsUUFDUCxHQUFHLEtBQUs7QUFBQSxRQUNSLENBQUMsR0FBRyxJQUFJO0FBQUEsUUFDUixDQUFDLE9BQU8sSUFBSTtBQUFBLFFBQ1osQ0FBQyxNQUFNLElBQUk7QUFBQSxRQUNYLENBQUMsS0FBSyxJQUFJO0FBQUEsUUFDVixDQUFDLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDVixDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDakIsQ0FBQyxPQUFPLEtBQUssR0FBRyxJQUFJO0FBQUEsTUFDeEIsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJRSxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBRW5CLFlBQUksTUFBTSxPQUFPO0FBRWIsYUFBRyx3QkFBd0IsT0FBT0EsS0FBSSxrQ0FBa0MsR0FBRyxXQUFZO0FBQ25GLG1CQUFPLE1BQU0sa0JBQWtCQSxFQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sU0FBUztBQUFBLFVBQ3pELENBQUM7QUFBQSxRQUVMLE9BQU87QUFDSCxhQUFHLHdCQUF3QixPQUFPQSxLQUFJLHNDQUFzQyxHQUFHLFdBQVk7QUFDdkYsbUJBQU8sa0JBQWtCQSxFQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTUEsRUFBQztBQUFBLFVBQzlDLENBQUM7QUFBQSxRQUNMO0FBQUEsTUFFSixDQUFDO0FBQUEsSUFHTCxDQUFDO0FBRUQsYUFBUyxzQkFBc0IsV0FBWTtBQUV2QztBQUFBLFFBQ0ksQ0FBQyxTQUFTLEtBQUs7QUFBQSxRQUNmLENBQUMsUUFBVyxLQUFLO0FBQUEsUUFDakIsQ0FBQyxNQUFNLEtBQUs7QUFBQSxRQUNaLENBQUMsTUFBTTtBQUFBLFFBQ1AsR0FBRyxLQUFLO0FBQUEsUUFDUixDQUFDLEdBQUcsSUFBSTtBQUFBLFFBQ1IsQ0FBQyxPQUFPLEtBQUs7QUFBQSxRQUNiLENBQUMsTUFBTSxLQUFLO0FBQUEsUUFDWixDQUFDLEtBQUssS0FBSztBQUFBLFFBQ1gsQ0FBQyxDQUFDLEdBQUcsS0FBSztBQUFBLFFBQ1YsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSztBQUFBLFFBQ2pCLENBQUMsT0FBTyxLQUFLLEdBQUcsS0FBSztBQUFBLE1BQ3pCLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFFdEIsWUFBSUEsS0FBSSxLQUFLLE1BQU07QUFDbkIsWUFBSSxJQUFJLEtBQUssTUFBTTtBQUVuQixZQUFJLE1BQU0sT0FBTztBQUViLGFBQUcsc0JBQXNCLE9BQU9BLEtBQUksa0NBQWtDLEdBQUcsV0FBWTtBQUNqRixtQkFBTyxNQUFNLGdCQUFnQkEsRUFBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLFNBQVM7QUFBQSxVQUN2RCxDQUFDO0FBQUEsUUFFTCxPQUFPO0FBQ0gsYUFBRyxzQkFBc0IsT0FBT0EsS0FBSSxzQ0FBc0MsR0FBRyxXQUFZO0FBQ3JGLG1CQUFPLGdCQUFnQkEsRUFBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU1BLEVBQUM7QUFBQSxVQUM1QyxDQUFDO0FBQUEsUUFDTDtBQUFBLE1BRUosQ0FBQztBQUFBLElBR0wsQ0FBQztBQUVELGFBQVMscUJBQXFCLFdBQVk7QUFFdEM7QUFBQSxRQUNJLENBQUMsU0FBUyxLQUFLO0FBQUEsUUFDZixDQUFDLFFBQVcsS0FBSztBQUFBLFFBQ2pCLENBQUMsTUFBTSxLQUFLO0FBQUEsUUFDWixDQUFDLE1BQU07QUFBQSxRQUNQLEdBQUcsS0FBSztBQUFBLFFBQ1IsQ0FBQyxHQUFHLEtBQUs7QUFBQSxRQUNULENBQUMsT0FBTyxLQUFLO0FBQUEsUUFDYixDQUFDLE1BQU0sS0FBSztBQUFBLFFBQ1osQ0FBQyxLQUFLLEtBQUs7QUFBQSxRQUNYLENBQUMsQ0FBQyxHQUFHLEtBQUs7QUFBQSxRQUNWLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUs7QUFBQSxRQUNqQixDQUFDLE9BQU8sS0FBSyxHQUFHLElBQUk7QUFBQSxNQUN4QixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUlBLEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsWUFBSSxNQUFNLE9BQU87QUFFYixhQUFHLHFCQUFxQixPQUFPQSxLQUFJLGtDQUFrQyxHQUFHLFdBQVk7QUFDaEYsbUJBQU8sTUFBTSxlQUFlQSxFQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sU0FBUztBQUFBLFVBQ3RELENBQUM7QUFBQSxRQUVMLE9BQU87QUFDSCxhQUFHLHFCQUFxQixPQUFPQSxLQUFJLHNDQUFzQyxHQUFHLFdBQVk7QUFDcEYsbUJBQU8sZUFBZUEsRUFBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU1BLEVBQUM7QUFBQSxVQUMzQyxDQUFDO0FBQUEsUUFDTDtBQUFBLE1BRUosQ0FBQztBQUFBLElBR0wsQ0FBQztBQUVELGFBQVMsdUJBQXVCLFdBQVk7QUFFeEM7QUFBQSxRQUNJLENBQUMsU0FBUyxJQUFJO0FBQUEsUUFDZCxDQUFDLFFBQVcsS0FBSztBQUFBLFFBQ2pCLENBQUMsTUFBTSxLQUFLO0FBQUEsUUFDWixDQUFDLE1BQU07QUFBQSxRQUNQLEdBQUcsS0FBSztBQUFBLFFBQ1IsQ0FBQyxHQUFHLEtBQUs7QUFBQSxRQUNULENBQUMsT0FBTyxLQUFLO0FBQUEsUUFDYixDQUFDLE1BQU0sS0FBSztBQUFBLFFBQ1osQ0FBQyxLQUFLLEtBQUs7QUFBQSxRQUNYLENBQUMsQ0FBQyxHQUFHLEtBQUs7QUFBQSxRQUNWLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUk7QUFBQSxRQUNoQixDQUFDLE9BQU8sS0FBSyxHQUFHLEtBQUs7QUFBQSxNQUN6QixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUlBLEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsWUFBSSxNQUFNLE9BQU87QUFFYixhQUFHLHVCQUF1QixPQUFPQSxLQUFJLGtDQUFrQyxHQUFHLFdBQVk7QUFDbEYsbUJBQU8sTUFBTTtBQUNULCtCQUFpQkEsRUFBQztBQUFBLFlBQ3RCLENBQUMsRUFBRSxHQUFHLE1BQU0sU0FBUztBQUNyQjtBQUFBLFVBQ0osQ0FBQztBQUFBLFFBRUwsT0FBTztBQUNILGFBQUcsdUJBQXVCLE9BQU9BLEtBQUksc0NBQXNDLEdBQUcsV0FBWTtBQUN0RixtQkFBTyxpQkFBaUJBLEVBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNQSxFQUFDO0FBQUEsVUFDN0MsQ0FBQztBQUFBLFFBQ0w7QUFBQSxNQUVKLENBQUM7QUFBQSxJQUdMLENBQUM7QUFFRCxhQUFTLHNCQUFzQixXQUFZO0FBRXZDO0FBQUEsUUFDSSxDQUFDLFNBQVMsS0FBSztBQUFBLFFBQ2YsQ0FBQyxRQUFXLEtBQUs7QUFBQSxRQUNqQixDQUFDLE1BQU0sS0FBSztBQUFBLFFBQ1osQ0FBQyxNQUFNO0FBQUEsUUFDUCxHQUFHLEtBQUs7QUFBQSxRQUNSLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDVCxDQUFDLE9BQU8sSUFBSTtBQUFBLFFBQ1osQ0FBQyxNQUFNLElBQUk7QUFBQSxRQUNYLENBQUMsS0FBSyxLQUFLO0FBQUEsUUFDWCxDQUFDLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDVixDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDakIsQ0FBQyxPQUFPLEtBQUssR0FBRyxLQUFLO0FBQUEsTUFDekIsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQSxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBRW5CLFlBQUksTUFBTSxPQUFPO0FBRWIsYUFBRyxzQkFBc0IsT0FBT0EsS0FBSSxrQ0FBa0MsR0FBRyxXQUFZO0FBQ2pGLG1CQUFPLE1BQU07QUFDVCw4QkFBZ0JBLEVBQUM7QUFBQSxZQUNyQixDQUFDLEVBQUUsR0FBRyxNQUFNLFNBQVM7QUFBQSxVQUN6QixDQUFDO0FBQUEsUUFFTCxPQUFPO0FBQ0gsYUFBRyxzQkFBc0IsT0FBT0EsS0FBSSxzQ0FBc0MsR0FBRyxXQUFZO0FBQ3JGLG1CQUFPLGdCQUFnQkEsRUFBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU1BLEVBQUM7QUFBQSxVQUM1QyxDQUFDO0FBQUEsUUFDTDtBQUFBLE1BR0osQ0FBQztBQUFBLElBR0wsQ0FBQztBQUVELGFBQVMscUJBQXFCLFdBQVk7QUFFdEM7QUFBQSxRQUNJLENBQUMsU0FBUyxJQUFJO0FBQUEsUUFDZCxDQUFDLFFBQVcsS0FBSztBQUFBLFFBQ2pCLENBQUMsTUFBTSxLQUFLO0FBQUEsUUFDWixDQUFDLE1BQU07QUFBQSxRQUNQLEdBQUcsS0FBSztBQUFBLFFBQ1IsQ0FBQyxHQUFHLEtBQUs7QUFBQSxRQUNULENBQUMsT0FBTyxLQUFLO0FBQUEsUUFDYixDQUFDLE1BQU0sS0FBSztBQUFBLFFBQ1osQ0FBQyxLQUFLLEtBQUs7QUFBQSxRQUNYLENBQUMsQ0FBQyxHQUFHLEtBQUs7QUFBQSxRQUNWLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUs7QUFBQSxRQUNqQixDQUFDLE9BQU8sS0FBSyxHQUFHLEtBQUs7QUFBQSxNQUN6QixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUlBLEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsWUFBSSxNQUFNLE9BQU87QUFFYixhQUFHLHFCQUFxQixPQUFPQSxLQUFJLGtDQUFrQyxHQUFHLFdBQVk7QUFDaEYsbUJBQU8sTUFBTTtBQUNULDZCQUFlQSxFQUFDO0FBQUEsWUFDcEIsQ0FBQyxFQUFFLEdBQUcsTUFBTSxTQUFTO0FBQ3JCO0FBQUEsVUFDSixDQUFDO0FBQUEsUUFFTCxPQUFPO0FBQ0gsYUFBRyxxQkFBcUIsT0FBT0EsS0FBSSxzQ0FBc0MsR0FBRyxXQUFZO0FBQ3BGLG1CQUFPLGVBQWVBLEVBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNQSxFQUFDO0FBQUEsVUFDM0MsQ0FBQztBQUFBLFFBQ0w7QUFBQSxNQUVKLENBQUM7QUFBQSxJQUdMLENBQUM7QUFFRCxhQUFTLHFCQUFxQixXQUFZO0FBRXRDO0FBQUEsUUFDSSxDQUFDLFNBQVMsS0FBSztBQUFBLFFBQ2YsQ0FBQyxRQUFXLEtBQUs7QUFBQSxRQUNqQixDQUFDLE1BQU0sS0FBSztBQUFBLFFBQ1osQ0FBQyxNQUFNO0FBQUEsUUFDUCxHQUFHLEtBQUs7QUFBQSxRQUNSLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDVCxDQUFDLE9BQU8sS0FBSztBQUFBLFFBQ2IsQ0FBQyxNQUFNLEtBQUs7QUFBQSxRQUNaLENBQUMsS0FBSyxLQUFLO0FBQUEsUUFDWCxDQUFDLENBQUMsR0FBRyxJQUFJO0FBQUEsUUFDVCxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLO0FBQUEsUUFDakIsQ0FBQyxPQUFPLEtBQUssR0FBRyxLQUFLO0FBQUEsTUFDekIsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQSxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBRW5CLFlBQUksTUFBTSxPQUFPO0FBRWIsYUFBRyxxQkFBcUIsT0FBT0EsS0FBSSxrQ0FBa0MsR0FBRyxXQUFZO0FBQ2hGLG1CQUFPLE1BQU07QUFDVCw2QkFBZUEsRUFBQztBQUFBLFlBQ3BCLENBQUMsRUFBRSxHQUFHLE1BQU0sU0FBUztBQUNyQjtBQUFBLFVBQ0osQ0FBQztBQUFBLFFBRUwsT0FBTztBQUNILGFBQUcscUJBQXFCLE9BQU9BLEtBQUksc0NBQXNDLEdBQUcsV0FBWTtBQUNwRixtQkFBTyxlQUFlQSxFQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTUEsRUFBQztBQUFBLFVBQzNDLENBQUM7QUFBQSxRQUNMO0FBQUEsTUFFSixDQUFDO0FBQUEsSUFHTCxDQUFDO0FBRUQsYUFBUyx1QkFBdUIsV0FBWTtBQUV4QztBQUFBLFFBQ0ksQ0FBQyxTQUFTLE1BQU07QUFBQSxRQUNoQixDQUFDLFFBQVcsTUFBTTtBQUFBLFFBQ2xCLENBQUMsTUFBTSxNQUFNO0FBQUEsUUFDYixDQUFDLE1BQU07QUFBQSxRQUNQLEdBQUcsTUFBTTtBQUFBLFFBQ1QsQ0FBQyxHQUFHLE1BQU07QUFBQSxRQUNWLENBQUMsT0FBTyxNQUFNO0FBQUEsUUFDZCxDQUFDLE1BQU0sTUFBTTtBQUFBLFFBQ2IsQ0FBQyxLQUFLLE1BQU07QUFBQSxRQUNaLENBQUMsQ0FBQyxHQUFHLElBQUk7QUFBQSxRQUNULENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07QUFBQSxRQUNsQixDQUFDLE9BQU8sS0FBSyxHQUFHLE1BQU07QUFBQSxNQUMxQixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUlBLEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFHbkIsV0FBRyx1QkFBdUIsT0FBT0EsS0FBSSxpQ0FBa0MsV0FBWTtBQUMvRSxpQkFBTyxNQUFNO0FBQ1QsNkJBQWlCQSxJQUFHLENBQUM7QUFBQSxVQUN6QixDQUFDLEVBQUUsR0FBRyxNQUFNLFNBQVM7QUFDckI7QUFBQSxRQUNKLENBQUM7QUFBQSxNQUVMLENBQUM7QUFBQSxJQUdMLENBQUM7QUFFRCxhQUFTLHVCQUF1QixXQUFZO0FBRXhDO0FBQUEsUUFDSSxDQUFDLENBQUMsR0FBRyxRQUFRLElBQUk7QUFBQSxRQUNqQixDQUFDLElBQUksUUFBTSxNQUFNLElBQUk7QUFBQSxNQUN6QixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUlBLEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsV0FBRyx1QkFBdUIsT0FBT0EsS0FBSSxxQ0FBc0MsV0FBWTtBQUNuRixpQkFBTyxpQkFBaUJBLElBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU1BLEVBQUM7QUFBQSxRQUNoRCxDQUFDO0FBQUEsTUFFTCxDQUFDO0FBQUEsSUFHTCxDQUFDO0FBR0QsYUFBUyxvQkFBb0IsV0FBWTtBQUVyQztBQUFBLFFBQ0ksQ0FBQyxTQUFTLEtBQUs7QUFBQSxRQUNmLENBQUMsUUFBVyxLQUFLO0FBQUEsUUFDakIsQ0FBQyxNQUFNLEtBQUs7QUFBQSxRQUNaLENBQUMsTUFBTTtBQUFBLFFBQ1AsR0FBRyxLQUFLO0FBQUEsUUFDUixDQUFDLEdBQUcsS0FBSztBQUFBLFFBQ1QsQ0FBQyxPQUFPLEtBQUs7QUFBQSxRQUNiLENBQUMsTUFBTSxLQUFLO0FBQUEsUUFDWixDQUFDLEtBQUssS0FBSztBQUFBLFFBQ1gsQ0FBQyxDQUFDLEdBQUcsS0FBSztBQUFBLFFBQ1YsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSTtBQUFBLFFBQ2hCLENBQUMsT0FBTyxLQUFLLEdBQUcsS0FBSztBQUFBLE1BQ3pCLEVBQUUsUUFBUSxTQUFVLE1BQU07QUFFdEIsWUFBSUEsS0FBSSxLQUFLLE1BQU07QUFDbkIsWUFBSSxJQUFJLEtBQUssTUFBTTtBQUVuQixZQUFJLE1BQU0sT0FBTztBQUViLGFBQUcsb0JBQW9CLE9BQU9BLEtBQUksa0NBQWtDLEdBQUcsV0FBWTtBQUMvRSxtQkFBTyxNQUFNO0FBQ1QsNEJBQWNBLEVBQUM7QUFBQSxZQUNuQixDQUFDLEVBQUUsR0FBRyxNQUFNLFNBQVM7QUFDckI7QUFBQSxVQUNKLENBQUM7QUFBQSxRQUVMLE9BQU87QUFDSCxhQUFHLG9CQUFvQixPQUFPQSxLQUFJLHNDQUFzQyxHQUFHLFdBQVk7QUFDbkYsbUJBQU8sY0FBY0EsRUFBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU1BLEVBQUM7QUFBQSxVQUMxQyxDQUFDO0FBQUEsUUFDTDtBQUFBLE1BR0osQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMsdUJBQXVCLFdBQVk7QUFFeEM7QUFBQSxRQUNJLENBQUMsU0FBUyxLQUFLO0FBQUEsUUFDZixDQUFDLFFBQVcsS0FBSztBQUFBLFFBQ2pCLENBQUMsTUFBTSxLQUFLO0FBQUEsUUFDWixDQUFDLE1BQU07QUFBQSxRQUNQLEdBQUcsSUFBSTtBQUFBLFFBQ1AsQ0FBQyxHQUFHLEtBQUs7QUFBQSxRQUNULENBQUMsT0FBTyxLQUFLO0FBQUEsUUFDYixDQUFDLE1BQU0sS0FBSztBQUFBLFFBQ1osQ0FBQyxLQUFLLEtBQUs7QUFBQSxRQUNYLENBQUMsQ0FBQyxHQUFHLEtBQUs7QUFBQSxRQUNWLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUs7QUFBQSxRQUNqQixDQUFDLE9BQU8sS0FBSyxHQUFHLEtBQUs7QUFBQSxNQUN6QixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUlBLEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsWUFBSSxNQUFNLE9BQU87QUFFYixhQUFHLHVCQUF1QixPQUFPQSxLQUFJLGtDQUFrQyxHQUFHLFdBQVk7QUFDbEYsbUJBQU8sTUFBTTtBQUNULCtCQUFpQkEsRUFBQztBQUFBLFlBQ3RCLENBQUMsRUFBRSxHQUFHLE1BQU0sU0FBUztBQUNyQjtBQUFBLFVBQ0osQ0FBQztBQUFBLFFBRUwsT0FBTztBQUNILGFBQUcsdUJBQXVCLE9BQU9BLEtBQUksc0NBQXNDLEdBQUcsV0FBWTtBQUN0RixtQkFBTyxpQkFBaUJBLEVBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNQSxFQUFDO0FBQUEsVUFDN0MsQ0FBQztBQUFBLFFBQ0w7QUFBQSxNQUdKLENBQUM7QUFBQSxJQUNMLENBQUM7QUFBQSxFQUVMLENBQUM7OztBQ3RhRDtBQUNBO0FBTUEsV0FBUyxVQUFVLFdBQVk7QUFFM0IsYUFBUyxhQUFhLFdBQVk7QUFFOUI7QUFBQSxRQUNJLENBQUMsTUFBTSxTQUFTO0FBQUEsUUFDaEIsQ0FBQyxNQUFNLE1BQU07QUFBQSxRQUNiLENBQUMsUUFBVyxXQUFXO0FBQUEsUUFDdkIsQ0FBQyxRQUFRLFFBQVEsR0FBRyxTQUFTO0FBQUEsUUFDN0IsQ0FBQyxvQkFBSSxRQUFRLEdBQUcsU0FBUztBQUFBLFFBQ3pCLENBQUMsb0JBQUksSUFBSSxHQUFHLEtBQUs7QUFBQSxRQUNqQixDQUFDLEtBQUssUUFBUTtBQUFBLFFBQ2QsQ0FBQyxhQUFhO0FBQUEsUUFDZCxHQUFHLG1CQUFtQjtBQUFBLFFBQ3RCLENBQUMsR0FBRyxRQUFRO0FBQUEsUUFDWixDQUFDLFdBQVk7QUFBQSxRQUNiLEdBQUcsVUFBVTtBQUFBLFFBQ2IsQ0FBQyxLQUFLLFFBQVE7QUFBQSxRQUNkLENBQUMsb0JBQUksS0FBSyxHQUFHLE1BQU07QUFBQSxRQUNuQixDQUFDLENBQUMsR0FBRyxRQUFRO0FBQUEsUUFDYixDQUFDLENBQUMsR0FBRyxPQUFPO0FBQUEsUUFDWixDQUFDLElBQUksUUFBUTtBQUFBLFFBQ2IsQ0FBQyxJQUFJLFNBQU8sT0FBTztBQUFBLFFBQ25CLENBQUMsSUFBSSxTQUFPLE9BQU87QUFBQSxNQUV2QixFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUlDLEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFFbkIsV0FBRyxtQkFBbUIsSUFBSSxxQkFBcUIsT0FBT0EsRUFBQyxHQUFHLFdBQVk7QUFDbEUsaUJBQU8sT0FBT0EsRUFBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUFBLFFBQ25DLENBQUM7QUFBQSxNQUNMLENBQUM7QUFBQSxJQUVMLENBQUM7QUFBQSxFQUdMLENBQUM7OztBQzVDRDtBQUdBLFdBQVMsZUFBZSxXQUFZO0FBQ2hDLFFBQUk7QUFDSixlQUFXLE1BQU07QUFDYixjQUFRLElBQUk7QUFBQSxJQUNoQixDQUFDO0FBRUQsYUFBUyxhQUFhLFdBQVk7QUFFOUIsU0FBRyx5QkFBeUIsV0FBWTtBQUNwQyxlQUFPLE1BQU0sUUFBUSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsTUFDbEMsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUVELGFBQVMsOEJBQThCLFdBQVk7QUFFL0MsU0FBRyxrQkFBa0IsV0FBWTtBQUM3QixlQUFPLE1BQU0sSUFBSSxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxXQUFXO0FBQ3RELGVBQU8sTUFBTSxRQUFRLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDOUIsZUFBTyxNQUFNLElBQUksRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLFdBQVcsV0FBVztBQUN0RCxlQUFPLE1BQU0sSUFBSSxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxXQUFXO0FBQ3RELGVBQU8sTUFBTSxLQUFLLENBQUMsRUFBRSxHQUFHLEtBQUssTUFBTSxFQUFDLEdBQUUsRUFBQyxDQUFDO0FBQ3hDLGVBQU8sTUFBTSxLQUFLLENBQUMsRUFBRSxHQUFHLEtBQUssTUFBTSxFQUFDLEdBQUUsRUFBQyxDQUFDO0FBQ3hDLGVBQU8sTUFBTSxLQUFLLENBQUMsRUFBRSxHQUFHLEtBQUssTUFBTSxFQUFDLEdBQUUsRUFBQyxDQUFDO0FBQ3hDLGVBQU8sTUFBTSxLQUFLLENBQUMsRUFBRSxHQUFHLEtBQUssTUFBTSxFQUFDLEdBQUUsRUFBQyxDQUFDO0FBQ3hDLGVBQU8sTUFBTSxRQUFRLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDOUIsZUFBTyxNQUFNLEtBQUssQ0FBQyxFQUFFLEdBQUcsS0FBSyxNQUFNLEVBQUMsR0FBRSxFQUFDLENBQUM7QUFDeEMsZUFBTyxNQUFNLEtBQUssQ0FBQyxFQUFFLEdBQUcsS0FBSyxNQUFNLEVBQUMsR0FBRSxFQUFDLENBQUM7QUFDeEMsZUFBTyxNQUFNLFFBQVEsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUFBLE1BQ2xDLENBQUM7QUFBQSxJQUVMLENBQUM7QUFFRCxhQUFTLGlCQUFpQixXQUFZO0FBRWxDLFNBQUcsZ0JBQWdCLFdBQVk7QUFDM0IsZUFBTyxNQUFNLFFBQVEsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUM5QixlQUFPLE1BQU0sSUFBSSxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxXQUFXO0FBQ3RELGVBQU8sTUFBTSxRQUFRLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDOUIsZUFBTyxNQUFNLE1BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRyxXQUFXLFdBQVc7QUFDbEQsZUFBTyxNQUFNLFFBQVEsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUFBLE1BQ2xDLENBQUM7QUFBQSxJQUVMLENBQUM7QUFFRCxhQUFTLGlCQUFpQixXQUFZO0FBQ2xDLFNBQUcsc0JBQXNCLFdBQVk7QUFDakMsZUFBTyxNQUFJO0FBQUMsZ0JBQU0sSUFBSSxDQUFDLENBQUM7QUFBQSxRQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sU0FBUztBQUM5QyxlQUFPLE1BQUk7QUFBQyxnQkFBTSxJQUFJLENBQUM7QUFBQSxRQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sU0FBUztBQUM3QyxlQUFPLE1BQUk7QUFBQyxnQkFBTSxJQUFJLElBQUk7QUFBQSxRQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sU0FBUztBQUNoRCxlQUFPLE1BQUk7QUFBQyxnQkFBTSxJQUFJO0FBQUEsUUFBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLFNBQVM7QUFDNUMsZUFBTyxNQUFJO0FBQUMsZ0JBQU0sSUFBSSxPQUFPLEdBQUcsQ0FBQztBQUFBLFFBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxTQUFTO0FBQ3ZELGVBQU8sTUFBSTtBQUFDLGdCQUFNLElBQUksV0FBVTtBQUFBLFVBQUMsQ0FBQztBQUFBLFFBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxTQUFTO0FBQUEsTUFDNUQsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUFBLEVBQ0wsQ0FBQzs7O0FDM0REO0FBR0EsV0FBUyxTQUFTLFdBQVk7QUFDMUIsUUFBSTtBQUNKLGVBQVcsTUFBTTtBQUNiLGNBQVEsSUFBSTtBQUFBLElBQ2hCLENBQUM7QUFFRCxhQUFTLGFBQWEsV0FBWTtBQUU5QixTQUFHLHlCQUF5QixXQUFZO0FBQ3BDLGVBQU8sTUFBTSxRQUFRLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFBQSxNQUNsQyxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBRUQsYUFBUyw4QkFBOEIsV0FBWTtBQUUvQyxTQUFHLGtCQUFrQixXQUFZO0FBQzdCLGVBQU8sTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxXQUFXLEtBQUs7QUFDOUMsZUFBTyxNQUFNLFFBQVEsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUM5QixlQUFPLE1BQU0sS0FBSyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxLQUFLO0FBQzlDLGVBQU8sTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxXQUFXLEtBQUs7QUFDOUMsZUFBTyxNQUFNLEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLEdBQUc7QUFDcEMsZUFBTyxNQUFNLEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLEdBQUc7QUFDcEMsZUFBTyxNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLEdBQUc7QUFDbkMsZUFBTyxNQUFNLEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLEdBQUc7QUFDcEMsZUFBTyxNQUFNLFFBQVEsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUFBLE1BQ2xDLENBQUM7QUFBQSxJQUVMLENBQUM7QUFFRCxhQUFTLGlCQUFpQixXQUFZO0FBRWxDLFNBQUcsZ0JBQWdCLFdBQVk7QUFDM0IsZUFBTyxNQUFNLFFBQVEsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUM5QixlQUFPLE1BQU0sS0FBSyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxLQUFLO0FBQzlDLGVBQU8sTUFBTSxRQUFRLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDOUIsZUFBTyxNQUFNLE1BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRyxXQUFXLEtBQUs7QUFDNUMsZUFBTyxNQUFNLFFBQVEsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUFBLE1BQ2xDLENBQUM7QUFBQSxJQUVMLENBQUM7QUFBQSxFQUNMLENBQUM7OztBQzFDRDtBQUdBLFdBQVMsbUJBQW1CLFdBQVk7QUFFcEMsYUFBUyx1QkFBdUIsV0FBWTtBQUV4QyxTQUFHLGtDQUFrQyxXQUFZO0FBQzdDLGVBQU8sSUFBSSxpQkFBZSxFQUFFLEdBQUcsR0FBRyxXQUFXLGVBQWU7QUFBQSxNQUNoRSxDQUFDO0FBRUQsU0FBRyx5QkFBeUIsV0FBWTtBQUNwQyxlQUFPLElBQUksaUJBQWUsRUFBRSxHQUFHLEdBQUcsV0FBVyxNQUFNO0FBQUEsTUFDdkQsQ0FBQztBQUVELFNBQUcsc0JBQXNCLFdBQVk7QUFDakMsZUFBTyxJQUFJLGdCQUFnQixFQUFDLEdBQUcsS0FBSSxDQUFDLEVBQUUsVUFBVSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFBQSxNQUNoRSxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBQUEsRUFFTCxDQUFDOzs7QUNyQkQ7QUFDQTtBQUNBO0FBRUEsV0FBUyxZQUFZLFdBQVk7QUFDN0IsYUFBUyxnQkFBZ0IsV0FBWTtBQUNqQyxTQUFHLG1DQUFtQyxXQUFZO0FBQzlDLFlBQUksV0FBVyxJQUFJQyxVQUFTO0FBRTVCLGVBQU8sU0FBUyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFBQSxNQUNwQyxDQUFDO0FBRUQsU0FBRywwQ0FBMEMsV0FBWTtBQUNyRCxZQUFJLFdBQVcsSUFBSUEsVUFBUztBQUFBLFVBQ3hCLElBQUlDLE1BQUssS0FBSztBQUFBLFVBQ2QsSUFBSUEsTUFBSyxLQUFLO0FBQUEsVUFDZCxJQUFJQSxNQUFLLEtBQUs7QUFBQSxRQUNsQixDQUFDO0FBRUQsZUFBTyxTQUFTLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQztBQUFBLE1BQ3BDLENBQUM7QUFFRCxTQUFHLDRDQUE0QyxXQUFZO0FBQ3ZELFlBQUksV0FBVyxJQUFJRCxVQUFTO0FBQUEsVUFDeEIsSUFBSUMsTUFBSyxLQUFLO0FBQUEsVUFDZCxJQUFJQSxNQUFLLEtBQUs7QUFBQSxVQUNkLElBQUlBLE1BQUssS0FBSztBQUFBLFFBQ2xCLENBQUM7QUFFRCxZQUFJLFlBQVksSUFBSUQsVUFBUyxRQUFRO0FBRXJDLGVBQU8sVUFBVSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFBQSxNQUNyQyxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBRUQsT0FBRyxtQkFBbUIsV0FBWTtBQUM5QixhQUFPLElBQUlBLFVBQVMsQ0FBQyxFQUFFLEdBQUcsV0FBV0EsU0FBUTtBQUFBLElBQ2pELENBQUM7QUFFRCxPQUFHLFlBQVksV0FBWTtBQUN2QixhQUFPLElBQUlBLFVBQVMsRUFBRSxJQUFJLElBQUlDLE1BQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLFdBQVdELFNBQVE7QUFBQSxJQUNwRSxDQUFDO0FBRUQsT0FBRyxlQUFlLFdBQVk7QUFDMUIsYUFBTyxJQUFJQSxVQUFTLEVBQUUsT0FBTyxJQUFJQyxNQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxXQUFXRCxTQUFRO0FBQUEsSUFDdkUsQ0FBQztBQUVELE9BQUcsb0JBQW9CLFdBQVk7QUFDL0IsYUFBTyxJQUFJQSxVQUFTLEVBQUUsSUFBSSxJQUFJQyxPQUFJLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFBQSxJQUMvQyxDQUFDO0FBRUQsT0FBRyxrQkFBa0IsV0FBWTtBQUM3QixZQUFNLElBQUksSUFBSUE7QUFDZCxhQUFPLElBQUlELFVBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRztBQUFBLElBQy9DLENBQUM7QUFFRCxPQUFHLG1CQUFtQixXQUFZO0FBQzlCLGFBQU8sTUFBTSxJQUFJQSxVQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sS0FBSztBQUFBLElBQ3RELENBQUM7QUFFRCxPQUFHLGVBQWUsV0FBWTtBQUUxQixZQUFNLE9BQU8sSUFBSUMsTUFBSyxNQUFNO0FBRTVCLFlBQU0sS0FBSyxJQUFJQSxNQUFLLElBQUk7QUFDeEIsWUFBTSxLQUFLLElBQUlBLE1BQUssSUFBSTtBQUN4QixZQUFNLEtBQUssSUFBSUEsTUFBSyxJQUFJO0FBQ3hCLFlBQU0sS0FBSyxJQUFJQSxNQUFLLElBQUk7QUFFeEIsWUFBTSxNQUFNLElBQUlBLE1BQUssS0FBSztBQUMxQixZQUFNLE1BQU0sSUFBSUEsTUFBSyxLQUFLO0FBQzFCLFlBQU0sTUFBTSxJQUFJQSxNQUFLLEtBQUs7QUFFMUIsWUFBTSxNQUFNLElBQUlBLE1BQUssS0FBSztBQUMxQixZQUFNLE1BQU0sSUFBSUEsTUFBSyxLQUFLO0FBQzFCLFlBQU0sTUFBTSxJQUFJQSxNQUFLLEtBQUs7QUFFMUIsWUFBTSxNQUFNLElBQUlBLE1BQUssS0FBSztBQUMxQixZQUFNLE1BQU0sSUFBSUEsTUFBSyxLQUFLO0FBRTFCLFlBQU0sT0FBTyxJQUFJQSxNQUFLLE1BQU07QUFDNUIsWUFBTSxPQUFPLElBQUlBLE1BQUssTUFBTTtBQUM1QixZQUFNLE9BQU8sSUFBSUEsTUFBSyxNQUFNO0FBRTVCLFlBQU0sUUFBUSxJQUFJQSxNQUFLLE9BQU87QUFFOUIsV0FBSyxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQUU7QUFDbkUsU0FBRyxZQUFZLEdBQUcsRUFBRSxZQUFZLEdBQUcsRUFBRSxZQUFZLEdBQUc7QUFDcEQsU0FBRyxZQUFZLEdBQUcsRUFBRSxZQUFZLEdBQUcsRUFBRSxZQUFZLEdBQUc7QUFDcEQsU0FBRyxZQUFZLEdBQUcsRUFBRSxZQUFZLEdBQUc7QUFDbkMsVUFBSSxZQUFZLElBQUksRUFBRSxZQUFZLElBQUksRUFBRSxZQUFZLElBQUk7QUFDeEQsV0FBSyxZQUFZLEtBQUs7QUFFdEIsVUFBSSxXQUFXLElBQUksc0JBQXNCLElBQUk7QUFFN0MsVUFBSSxTQUFTLENBQUM7QUFDZCxpQkFBVyxLQUFLLFVBQVU7QUFDdEIsZUFBTyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsV0FBV0EsS0FBSTtBQUNsQyxlQUFPLEtBQUssRUFBRSxRQUFRLE1BQU0sRUFBRSxLQUFLO0FBQUEsTUFDdkM7QUFHQSxhQUFPLE1BQU0sRUFBRSxHQUFHLEtBQUssTUFBTTtBQUFBLFFBQ3pCO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BRUosQ0FBQztBQUVELFlBQU0sWUFBWSxJQUFJQSxNQUFLLFFBQVEsQ0FBQztBQUVwQyxpQkFBVyxJQUFJLHNCQUFzQixJQUFJO0FBQ3pDLGVBQVMsQ0FBQztBQUNWLGlCQUFXLEtBQUssVUFBVTtBQUN0QixlQUFPLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxXQUFXQSxLQUFJO0FBQ2xDLGVBQU8sS0FBSyxFQUFFLFFBQVEsTUFBTSxFQUFFLEtBQUs7QUFBQSxNQUN2QztBQUVBLGFBQU8sTUFBTSxFQUFFLEdBQUcsS0FBSyxNQUFNO0FBQUEsUUFDekI7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLE1BRUosQ0FBQztBQUdELFlBQU0sS0FBSyxJQUFJQSxNQUFLLElBQUk7QUFFeEIsU0FBRyxZQUFZLElBQUk7QUFDbkIsaUJBQVcsSUFBSSxzQkFBc0IsRUFBRTtBQUV2QyxlQUFTLENBQUM7QUFDVixpQkFBVyxLQUFLLFVBQVU7QUFDdEIsZUFBTyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsV0FBV0EsS0FBSTtBQUNsQyxlQUFPLEtBQUssRUFBRSxRQUFRLE1BQU0sRUFBRSxLQUFLO0FBQUEsTUFDdkM7QUFFQSxhQUFPLE1BQU0sRUFBRSxHQUFHLEtBQUssTUFBTTtBQUFBLFFBQ3pCO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFFSixDQUFDO0FBQUEsSUFFTCxDQUFDO0FBRUQsYUFBUyxVQUFVLFdBQVk7QUFFM0IsU0FBRyxxQkFBcUIsV0FBWTtBQUVoQyxjQUFNLEtBQUssSUFBSUEsTUFBSyxLQUFLO0FBRXpCLGNBQU0sS0FBSyxJQUFJQSxNQUFLLEtBQUs7QUFDekIsV0FBRyxZQUFZLEVBQUU7QUFFakIsY0FBTSxLQUFLLElBQUlBLE1BQUssS0FBSztBQUN6QixXQUFHLFlBQVksRUFBRTtBQUVqQixjQUFNLEtBQUssSUFBSUEsTUFBSyxLQUFLO0FBQ3pCLFdBQUcsWUFBWSxFQUFFO0FBRWpCLGVBQU8sR0FBRyxLQUFLLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUM5QixlQUFPLEdBQUcsS0FBSyxFQUFFLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDOUIsZUFBTyxHQUFHLEtBQUssRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQzlCLGVBQU8sR0FBRyxLQUFLLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUFBLE1BRWxDLENBQUM7QUFBQSxJQUNMLENBQUM7QUFHRCxhQUFTLGNBQWMsV0FBWTtBQUUvQixTQUFHLDhCQUE4QixXQUFZO0FBQ3pDLGNBQU0sT0FBTyxJQUFJQSxNQUFLO0FBQ3RCLGVBQU8sS0FBSyxTQUFTLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRTtBQUFBLE1BQ3ZDLENBQUM7QUFFRCxTQUFHLHdCQUF3QixXQUFZO0FBQ25DLGNBQU0sS0FBSyxJQUFJQSxNQUFLLEtBQUs7QUFFekIsY0FBTSxLQUFLLElBQUlBLE1BQUssS0FBSztBQUN6QixXQUFHLFlBQVksRUFBRTtBQUVqQixjQUFNLE1BQU0sSUFBSUEsTUFBSyxLQUFLO0FBQzFCLFdBQUcsWUFBWSxHQUFHO0FBRWxCLGNBQU0sS0FBSyxJQUFJQSxNQUFLLEtBQUs7QUFDekIsV0FBRyxZQUFZLEVBQUU7QUFFakIsY0FBTSxLQUFLLElBQUlBLE1BQUssS0FBSztBQUN6QixXQUFHLFlBQVksRUFBRTtBQUVqQixjQUFNLEtBQUssSUFBSUEsTUFBSyxLQUFLO0FBQ3pCLFdBQUcsWUFBWSxFQUFFO0FBRWpCLGVBQU8sR0FBRyxLQUFLLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUFBLE1BSWxDLENBQUM7QUFBQSxJQUNMLENBQUM7QUFBQSxFQUdMLENBQUM7OztBQzFQRDtBQUVBLFdBQVMsU0FBUyxXQUFZO0FBQzFCLFFBQUk7QUFDSixlQUFXLE1BQU07QUFDYixjQUFRLElBQUk7QUFBQSxJQUNoQixDQUFDO0FBRUQsYUFBUyxhQUFhLFdBQVk7QUFFOUIsU0FBRyx5QkFBeUIsV0FBWTtBQUNwQyxlQUFPLE1BQU0sUUFBUSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQUEsTUFDbEMsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUVELGFBQVMsOEJBQThCLFdBQVk7QUFFL0MsU0FBRyxrQkFBa0IsV0FBWTtBQUM3QixlQUFPLE1BQU0sSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxLQUFLO0FBQzdDLGVBQU8sTUFBTSxRQUFRLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDOUIsZUFBTyxNQUFNLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLFdBQVcsS0FBSztBQUM3QyxlQUFPLE1BQU0sSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxLQUFLO0FBQzdDLGVBQU8sTUFBTSxLQUFLLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxHQUFHO0FBQ3BDLGVBQU8sTUFBTSxLQUFLLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxHQUFHO0FBQ3BDLGVBQU8sTUFBTSxLQUFLLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxHQUFHO0FBQ3BDLGVBQU8sTUFBTSxLQUFLLENBQUMsRUFBRSxHQUFHLEdBQUcsTUFBTSxHQUFHO0FBQ3BDLGVBQU8sTUFBTSxRQUFRLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFBQSxNQUNsQyxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBRUQsYUFBUyxpQkFBaUIsV0FBWTtBQUVsQyxTQUFHLGdCQUFnQixXQUFZO0FBQzNCLGVBQU8sTUFBTSxRQUFRLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFDOUIsZUFBTyxNQUFNLElBQUksR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLFdBQVcsS0FBSztBQUM3QyxlQUFPLE1BQU0sUUFBUSxDQUFDLEVBQUUsR0FBRyxHQUFHO0FBQzlCLGVBQU8sTUFBTSxNQUFNLENBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxLQUFLO0FBQzVDLGVBQU8sTUFBTSxRQUFRLENBQUMsRUFBRSxHQUFHLEdBQUc7QUFBQSxNQUNsQyxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBQUEsRUFJTCxDQUFDOzs7QUM1Q0Q7QUFDQTtBQUNBO0FBRUEsV0FBUyx5QkFBeUIsV0FBWTtBQUUxQyxPQUFHLHlCQUF5QixXQUFZO0FBQ3BDLGFBQU8sTUFBTSxJQUFJLHNCQUFzQixDQUFDLEVBQUUsR0FBRyxNQUFNLEtBQUs7QUFBQSxJQUM1RCxDQUFDO0FBQ0QsT0FBRyx3QkFBd0IsV0FBWTtBQUNuQyxhQUFPLHFCQUFxQixFQUFFLEdBQUcsR0FBRyxFQUFFLFVBQVU7QUFBQSxJQUNwRCxDQUFDO0FBRUQsT0FBRywyQkFBMkIsV0FBWTtBQUN0QyxhQUFPLElBQUksc0JBQXNCLElBQUlDLE9BQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLFdBQVcscUJBQXFCO0FBQUEsSUFDekYsQ0FBQztBQUtELE9BQUcsaURBQWlELFdBQVk7QUFDNUQsWUFBTSxXQUFXLElBQUksc0JBQXNCLElBQUlBLE9BQUk7QUFFbkQsWUFBTSxTQUFTLENBQUM7QUFDaEIsaUJBQVcsS0FBSyxVQUFVO0FBQ3RCLGVBQU8sQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLFdBQVdBLEtBQUk7QUFDbEMsZUFBTyxLQUFLLEVBQUUsS0FBSztBQUFBLE1BQ3ZCO0FBRUEsYUFBTyxNQUFNLEVBQUUsR0FBRyxLQUFLLE1BQU0sQ0FBQyxNQUFTLENBQUM7QUFBQSxJQUU1QyxDQUFDO0FBRUQsT0FBRyxrQkFBa0IsV0FBWTtBQUM3QixZQUFNLE9BQ0YsSUFBSUEsTUFBSyxHQUFHO0FBQ2hCLFdBQUs7QUFBQSxRQUNBLElBQUlBLE1BQUssR0FBRyxFQUFHLFlBQVksSUFBSUEsTUFBSyxLQUFLLENBQUMsRUFBRSxZQUFZLElBQUlBLE1BQUssS0FBSyxDQUFDLEVBQUUsWUFBWSxJQUFJQSxNQUFLLEtBQUssQ0FBQztBQUFBLE1BQUMsRUFBRSxZQUFZLElBQUlBLE1BQUssR0FBRyxDQUFDLEVBQUUsWUFBWSxJQUFJQSxNQUFLLEdBQUcsRUFBRSxZQUFZLElBQUlBLE1BQUssS0FBSyxDQUFDLEVBQUUsWUFBWSxJQUFJQSxNQUFLLEtBQUssQ0FBQyxDQUFDO0FBRTFOLFlBQU0sV0FBVyxJQUFJLHNCQUFzQixJQUFJO0FBRS9DLFlBQU0sU0FBUyxDQUFDO0FBQ2hCLGlCQUFXLEtBQUssVUFBVTtBQUN0QixlQUFPLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxXQUFXQSxLQUFJO0FBQ2xDLGVBQU8sS0FBSyxFQUFFLEtBQUs7QUFBQSxNQUN2QjtBQUVBLGFBQU8sTUFBTSxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsS0FBSyxLQUFLLE9BQU8sT0FBTyxPQUFPLEtBQUssS0FBSyxPQUFPLEtBQUssQ0FBQztBQUFBLElBRXhGLENBQUM7QUFFRCxPQUFHLDJCQUEyQixXQUFZO0FBQ3RDLFlBQU0sV0FBVyxJQUFJQyxVQUFTO0FBRTlCLGVBQVM7QUFBQSxRQUNKLElBQUlELE1BQUssR0FBRyxFQUFHLFlBQVksSUFBSUEsTUFBSyxLQUFLLENBQUMsRUFBRSxZQUFZLElBQUlBLE1BQUssS0FBSyxDQUFDLEVBQUUsWUFBWSxJQUFJQSxNQUFLLEtBQUssQ0FBQyxFQUFFLFlBQVksSUFBSUEsTUFBSyxHQUFHLENBQUMsRUFBRSxZQUFZLElBQUlBLE1BQUssR0FBRyxFQUFFLFlBQVksSUFBSUEsTUFBSyxLQUFLLENBQUMsRUFBRSxZQUFZLElBQUlBLE1BQUssS0FBSyxDQUFDLENBQUM7QUFBQSxNQUFDO0FBRTFOLGVBQVMsSUFBSSxJQUFJQSxNQUFLLEdBQUcsQ0FBQztBQUUxQixZQUFNLFdBQVcsSUFBSSxzQkFBc0IsUUFBUTtBQUVuRCxZQUFNLFNBQVMsQ0FBQztBQUNoQixpQkFBVyxLQUFLLFVBQVU7QUFDdEIsZUFBTyxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUcsV0FBV0EsS0FBSTtBQUNsQyxlQUFPLEtBQUssRUFBRSxLQUFLO0FBQUEsTUFDdkI7QUFFQSxhQUFPLE1BQU0sRUFBRSxHQUFHLEtBQUssTUFBTSxDQUFDLEtBQUssT0FBTyxPQUFPLE9BQU8sS0FBSyxLQUFLLE9BQU8sT0FBTyxHQUFHLENBQUM7QUFBQSxJQUV4RixDQUFDO0FBQUEsRUFFTCxDQUFDOzs7QUN2RUQ7QUFFQSxXQUFTLGlCQUFpQixNQUFNO0FBQzVCLE9BQUcsdURBQXVELE1BQU07QUFDNUQsWUFBTSxNQUFNLG9CQUFJLEtBQUs7QUFDckIsYUFBTyxjQUFjLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLFVBQVU7QUFBQSxJQUN4RCxDQUFDO0FBRUQsT0FBRyxzREFBc0QsTUFBTTtBQUMzRCxZQUFNLGtCQUFrQixJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksR0FBSTtBQUNsRCxhQUFPLGNBQWMsaUJBQWlCLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxhQUFhO0FBQUEsSUFDdkUsQ0FBQztBQUVELE9BQUcscURBQXFELE1BQU07QUFDMUQsWUFBTSxnQkFBZ0IsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEdBQUk7QUFDaEQsYUFBTyxjQUFjLGVBQWUsSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFNLGNBQWM7QUFBQSxJQUN0RSxDQUFDO0FBRUQsT0FBRyxrRUFBa0UsTUFBTTtBQUN2RSxZQUFNLHNCQUFzQixJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksR0FBSztBQUN2RCxhQUFPLGNBQWMscUJBQXFCLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSw0QkFBNEI7QUFBQSxJQUMxRixDQUFDO0FBRUQsT0FBRyxpRUFBaUUsTUFBTTtBQUN0RSxZQUFNLG9CQUFvQixJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksR0FBSztBQUNyRCxhQUFPLGNBQWMsbUJBQW1CLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSw2QkFBNkI7QUFBQSxJQUN6RixDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUNsQkQ7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQVFBLE1BQU0sNEJBQTRCLE9BQU8scUJBQXFCO0FBUzlELE1BQU1FLGFBQU4sY0FBd0IsVUFBYztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT3JDLFlBQVksUUFBUSxhQUFhQyxVQUFTO0FBQ3pDLFlBQU0sUUFBUUEsUUFBTztBQUNyQixXQUFLLHlCQUF5QixJQUFJO0FBQUEsUUFDakM7QUFBQSxRQUNBO0FBQUEsTUFDRDtBQUFBLElBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFPQSxZQUFZLGNBQWMsSUFBSTtBQUM3QixhQUFPLE9BQU8sSUFBSSwyQ0FBMkM7QUFBQSxJQUM5RDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFZQSxJQUFJLFdBQVc7QUFDZCxhQUFPLE9BQU8sQ0FBQyxHQUFHLE1BQU0sVUFBVTtBQUFBLFFBQ2pDLFdBQVc7QUFBQSxVQUNWLE1BQU0sQ0FBQyxVQUFVO0FBQ2hCLG1CQUFPLEtBQUsseUJBQXlCLEVBQUUsUUFBUSxlQUFlLEtBQUssQ0FBQztBQUFBLFVBQ3JFO0FBQUEsUUFDRDtBQUFBLFFBQ0EsUUFBUTtBQUFBLFVBQ1AsTUFBTSxDQUFDLFNBQVMsSUFBSTtBQUFBLFVBQ3BCLE9BQU8sQ0FBQyxHQUFHO0FBQUEsUUFDWjtBQUFBLE1BQ0QsQ0FBQztBQUFBLElBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQVdBLE9BQU8sTUFBTTtBQUNaLHFCQUFlLElBQUk7QUFFbkIsWUFBTSxhQUFhLEtBQUssY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQztBQUM3RCxZQUFNLGNBQWMsS0FBSyxjQUFjLEVBQUUsUUFBUSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBRS9ELFVBQUksS0FBSyxRQUFRLFVBQVUsTUFBTSxHQUFHO0FBQ25DLGVBQU8sS0FBSyxVQUFVLFdBQVcsTUFBTTtBQUV2QyxZQUFJLEtBQUssUUFBUSxXQUFXLE1BQU0sS0FBSyxTQUFTLFlBQVksUUFBUTtBQUNuRSxpQkFBTyxLQUFLLFVBQVUsR0FBRyxLQUFLLFNBQVMsWUFBWSxNQUFNO0FBQUEsUUFDMUQsT0FBTztBQUNOLGdCQUFNLElBQUksTUFBTSwrQkFBK0I7QUFBQSxRQUNoRDtBQUFBLE1BQ0Q7QUFFQSxZQUFNLFFBQVEsZUFBZSxJQUFJLEVBQUUsTUFBTSxJQUFJO0FBQzdDLFlBQU0saUJBQWlCLE1BQU0sTUFBTSxFQUFFLEtBQUs7QUFDMUMsWUFBTSxZQUFZLE1BQU0sS0FBSyxJQUFJLEVBQUUsS0FBSztBQUV4QyxVQUFJLGdCQUFnQixHQUFHLFVBQVUsVUFBVSxjQUFjO0FBQ3pELFVBQUksVUFBVSxTQUFTLEdBQUc7QUFDekIseUJBQWlCLEtBQUssU0FBUztBQUFBLE1BQ2hDO0FBQ0EsdUJBQWlCO0FBQ2pCLGFBQU8sTUFBTSxPQUFPLGFBQWE7QUFBQSxJQUNsQztBQUFBLEVBQ0Q7OztBQ3RIQTtBQUdBLFdBQVMsYUFBYSxXQUFZO0FBRTlCLGFBQVMsV0FBVyxXQUFZO0FBRTVCLFNBQUcsMEJBQTBCLFdBQVk7QUFFckMsY0FBTUMsZ0JBQWUsSUFBSSxhQUFhLElBQUksRUFDckMsbUJBQW1CO0FBQUEsVUFDaEIsUUFBUTtBQUFBLFFBQ1osQ0FBQztBQUVMLGNBQU0sSUFBSSxJQUFJQyxXQUFVLENBQUMsR0FBR0QsYUFBWTtBQUV4QyxlQUFPLEVBQUUsT0FBTyxxQ0FBcUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLHlCQUF5QjtBQUFBLE1BR2pHLENBQUM7QUFFRCxTQUFHLDZCQUE2QixXQUFZO0FBRXhDLGNBQU1BLGdCQUFlLElBQUksYUFBYSxJQUFJLEVBQ3JDLG1CQUFtQjtBQUFBLFVBQ2hCLFFBQVE7QUFBQSxRQUNaLENBQUM7QUFHTCxlQUFPLElBQUlDLFdBQVUsQ0FBQyxHQUFHRCxhQUFZLEVBQUUsT0FBTywrQkFBK0IsQ0FBQyxFQUFFLEdBQUcsR0FBRyxNQUFNLHlCQUF5QjtBQUFBLE1BR3pILENBQUM7QUFBQSxJQUNMLENBQUM7QUFHRCxhQUFTLFVBQVUsV0FBWTtBQUUzQjtBQUFBLFFBQ0ksQ0FBQyxrQ0FBa0MsaUJBQWlCO0FBQUEsTUFFeEQsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJRSxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBRW5CLFdBQUcsWUFBWUEsS0FBSSxhQUFhLEdBQUcsV0FBWTtBQUUzQyxnQkFBTUYsZ0JBQWUsSUFBSSxhQUFhLElBQUksRUFBRSxtQkFBbUI7QUFBQSxZQUMzRCxnQkFBZ0I7QUFBQSxVQUNwQixDQUFDO0FBRUQ7QUFBQSxZQUNJLElBQUlDLFdBQVUsQ0FBQyxHQUFHRCxhQUFZLEVBQUUsT0FBT0UsRUFBQztBQUFBLFVBQzVDLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFBQSxRQUNoQixDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFHTCxDQUFDO0FBQUEsRUFHTCxDQUFDOzs7QUM3REQ7QUFHQSxXQUFTLFVBQVUsV0FBWTtBQUUzQixhQUFTLGdCQUFnQixXQUFZO0FBRWpDO0FBQUE7QUFBQTtBQUFBLFFBR0ksQ0FBQyxNQUFNLFFBQVcsUUFBUSxRQUFXLFFBQVcsUUFBVyxTQUFTO0FBQUE7QUFBQSxRQUNwRSxDQUFDLE1BQU0sTUFBTSxRQUFXLFFBQVEsUUFBVyxRQUFXLFlBQVk7QUFBQTtBQUFBLFFBQ2xFLENBQUMsTUFBTSxNQUFNLFFBQVcsU0FBUyxRQUFXLFFBQVcsYUFBYTtBQUFBO0FBQUEsUUFDcEUsQ0FBQyxNQUFNLE1BQU0sUUFBUSxXQUFXLFFBQVcsUUFBVyxvQkFBb0I7QUFBQTtBQUFBLFFBQzFFLENBQUMsTUFBTSxNQUFNLFFBQVEsUUFBVyxRQUFXLFFBQVcsWUFBWTtBQUFBO0FBQUEsUUFDbEUsQ0FBQyxNQUFNLE1BQU0sUUFBUSxRQUFXLFFBQVcsUUFBVyxZQUFZO0FBQUE7QUFBQSxNQUV0RSxFQUFFLFFBQVEsU0FBVSxNQUFNO0FBRXRCLFlBQUlDLEtBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFDbkIsWUFBSSxJQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFDbkIsWUFBSSxJQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBRW5CLFdBQUcsZ0JBQWdCQSxLQUFJLE1BQU0sSUFBSSxNQUFNLElBQUksTUFBTSxJQUFJLE1BQU0sSUFBSSxNQUFNLElBQUkscUJBQXFCLEdBQUcsV0FBWTtBQUV6RyxpQkFBTyxJQUFJLE9BQU9BLElBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFBQSxRQUM5RCxDQUFDO0FBQUEsTUFDTCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBRUQsYUFBUyxpQkFBaUIsV0FBWTtBQUVsQztBQUFBO0FBQUE7QUFBQSxRQUlJLENBQUMsTUFBTSxRQUFXLFFBQVEsUUFBVyxRQUFXLFFBQVcsU0FBUztBQUFBO0FBQUEsUUFDcEUsQ0FBQyxNQUFNLE1BQU0sUUFBVyxRQUFRLFFBQVcsUUFBVyxZQUFZO0FBQUE7QUFBQSxRQUNsRSxDQUFDLE1BQU0sTUFBTSxRQUFXLFNBQVMsUUFBVyxRQUFXLGFBQWE7QUFBQTtBQUFBLFFBQ3BFLENBQUMsTUFBTSxNQUFNLFFBQVEsV0FBVyxRQUFXLFFBQVcsb0JBQW9CO0FBQUE7QUFBQSxRQUMxRSxDQUFDLE1BQU0sTUFBTSxRQUFRLFFBQVcsUUFBVyxRQUFXLFlBQVk7QUFBQTtBQUFBLFFBQ2xFLENBQUMsTUFBTSxNQUFNLFFBQVEsUUFBVyxRQUFXLFFBQVcsWUFBWTtBQUFBO0FBQUEsTUFFdEUsRUFBRSxRQUFRLFNBQVUsTUFBTTtBQUV0QixZQUFJQSxLQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFDbkIsWUFBSSxJQUFJLEtBQUssTUFBTTtBQUNuQixZQUFJLElBQUksS0FBSyxNQUFNO0FBQ25CLFlBQUksSUFBSSxLQUFLLE1BQU07QUFDbkIsWUFBSSxJQUFJLEtBQUssTUFBTTtBQUVuQixXQUFHLGdCQUFnQkEsS0FBSSxNQUFNLElBQUksTUFBTSxJQUFJLE1BQU0sSUFBSSxNQUFNLElBQUksTUFBTSxJQUFJLHFCQUFxQixHQUFHLFdBQVk7QUFFekcsZ0JBQU0sU0FBUyxZQUFZLENBQUM7QUFDNUIsaUJBQU8sT0FBTyxZQUFZLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxpQkFBTyxPQUFPLFFBQVEsRUFBRSxHQUFHLEdBQUcsTUFBTUEsRUFBQztBQUNyQyxpQkFBTyxPQUFPLE1BQU0sRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ25DLGlCQUFPLE9BQU8sTUFBTSxFQUFFLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDbkMsaUJBQU8sT0FBTyxRQUFRLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNyQyxpQkFBTyxPQUFPLE9BQU8sRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLGlCQUFPLE9BQU8sVUFBVSxFQUFFLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFFdkMsaUJBQU8sSUFBSSxPQUFPQSxJQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQUEsUUFDOUQsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUFBLEVBR0wsQ0FBQzs7O0FDOUVELEVBQUFDO0FBQ0E7QUFDQTtBQUVBO0FBRUEsV0FBUyxZQUFZLFdBQVk7QUFHN0IsUUFBSUMsVUFBUTtBQUFBO0FBQUE7QUFBQTtBQUtaLGVBQVcsTUFBTTtBQUNiLFVBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxZQUFNLFlBQVlBO0FBQUEsSUFHdEIsQ0FBQztBQUVELGNBQVUsTUFBTTtBQUNaLFVBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxZQUFNLFlBQVk7QUFBQSxJQUN0QixDQUFDO0FBRUQsV0FBTyxTQUFVLE1BQU07QUFDbkIsZ0JBQVUsRUFBRSxLQUFLLE1BQU07QUFDbkIsYUFBSztBQUFBLE1BQ1QsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUVELGFBQVMsb0JBQW9CLFdBQVk7QUFFckMsWUFBTUMsMEJBQXlCLE9BQU8sSUFBSSwwQ0FBMEM7QUFFcEYsU0FBRyxtQkFBbUIsU0FBVSxNQUFNO0FBQ2xDLGNBQU0sVUFBVSxTQUFTLGVBQWUsT0FBTztBQUMvQyxjQUFNLElBQUksSUFBSSxTQUFTO0FBQ3ZCLGNBQU0sSUFBSSxFQUFFLGdCQUFnQixRQUFXLE9BQU87QUFFOUMsVUFBRSxLQUFLLENBQUMsTUFBTTtBQUNWLGdCQUFNLElBQUksUUFBUSxhQUFhLG9CQUFvQjtBQUNuRCxjQUFJLE1BQU0sTUFBTTtBQUNaLGlCQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUNuQztBQUFBLFVBQ0o7QUFFQSxnQkFBTSxJQUFJLGlCQUFpQixTQUFTQSx1QkFBc0I7QUFDMUQsY0FBSSxNQUFNLE1BQU07QUFDWixpQkFBSyxJQUFJLE1BQU0sd0JBQXdCLENBQUM7QUFDeEM7QUFBQSxVQUNKO0FBQ0EsY0FBSSxVQUFVO0FBRWQsbUJBQVMsS0FBSyxHQUFHO0FBQ2I7QUFBQSxVQUNKO0FBRUEsY0FBSSxZQUFZLEdBQUc7QUFDZixpQkFBSyxJQUFJLE1BQU0sd0JBQXdCLENBQUM7QUFDeEM7QUFBQSxVQUNKO0FBRUEsZ0JBQU0sV0FBVyx3QkFBd0IsT0FBTztBQUNoRCxpQkFBTyxRQUFRLEVBQUUsR0FBRyxXQUFXLFlBQVk7QUFHM0MsZUFBSztBQUFBLFFBQ1QsQ0FBQyxFQUFFLE1BQU0sT0FBSyxLQUFLLENBQUMsQ0FBQztBQUFBLE1BRXpCLENBQUM7QUFBQSxJQUVMLENBQUM7QUFBQSxFQUdMLENBQUM7OztBQy9ERDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFjQSxNQUFNLFFBQU4sY0FBb0IsU0FBUztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFjNUIsWUFBWSxLQUFLQyxVQUFTO0FBQ3pCLFlBQU1BLFFBQU87QUFFYixVQUFJLFdBQVcsS0FBSyxHQUFHLEdBQUc7QUFDekIsY0FBTSxJQUFJLFNBQVM7QUFBQSxNQUNwQjtBQUVBLFVBQUlBLGFBQVksUUFBVztBQUMxQixRQUFBQSxXQUFVLENBQUM7QUFBQSxNQUNaO0FBRUEscUJBQWUsR0FBRztBQUtsQixXQUFLLE1BQU07QUFNWCxXQUFLLGNBQWMsSUFBSTtBQUFBLFFBQ3RCLENBQUM7QUFBQSxRQUNELE1BQU07QUFBQSxRQUNOLEtBQUs7QUFBQSxRQUNMLGVBQWVBLFFBQU87QUFBQSxNQUN2QjtBQUFBLElBQ0Q7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBZUEsSUFBSSxXQUFXO0FBQ2QsYUFBTztBQUFBLFFBQ047QUFBQSxVQUNDLE9BQU87QUFBQSxZQUNOLFFBQVE7QUFBQTtBQUFBLFlBQ1IsTUFBTTtBQUFBO0FBQUEsWUFDTixPQUFPO0FBQUE7QUFBQSxZQUNQLGFBQWE7QUFBQTtBQUFBLFlBQ2IsVUFBVTtBQUFBO0FBQUEsWUFDVixnQkFBZ0I7QUFBQTtBQUFBLFVBQ2pCO0FBQUEsUUFDRDtBQUFBLFFBQ0EsTUFBTTtBQUFBLE1BQ1A7QUFBQSxJQUNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBT0EsZ0JBQWdCLFFBQVE7QUFDdkIsVUFBSSxTQUFTLE1BQU0sR0FBRztBQUNyQixpQkFBUyxZQUFZLE1BQU07QUFBQSxNQUM1QjtBQUVBLFlBQU0sWUFBWSxJQUFJLFVBQVUsT0FBTyxPQUFPLENBQUM7QUFFL0MsYUFBTyxrQkFBa0IsT0FBTztBQUFBLFFBQy9CLFVBQVUsT0FBTyxLQUFLLEdBQUc7QUFBQSxRQUN6QixLQUFLLFVBQVUsU0FBUyxDQUFDLENBQUM7QUFBQSxNQUMzQixFQUNFLEtBQUssQ0FBQyxhQUFhLFNBQVMsS0FBSyxDQUFDLEVBQ2xDLEtBQUssQ0FBQyxTQUFTO0FBQ2YsZUFBTyxJQUFJLGFBQWEsTUFBTSxFQUFFLG1CQUFtQixJQUFJO0FBQUEsTUFDeEQsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNEOzs7QUM5SEE7QUFDQTtBQUdBLE1BQU1DLFdBQVMsVUFBVTtBQUN6QixNQUFJQztBQUdKLFdBQVMsOEJBQThCLFdBQVk7QUFHL0MsY0FBVSxNQUFNO0FBQ1osTUFBQUQsU0FBTyxPQUFPLElBQUlDO0FBQUEsSUFDdEIsQ0FBQztBQUVELGVBQVcsTUFBTTtBQUViLE1BQUFBLGtCQUFpQkQsU0FBTyxPQUFPO0FBQy9CLE1BQUFBLFNBQU8sT0FBTyxJQUFJLFNBQVUsS0FBS0UsVUFBUztBQUN0QyxlQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUNwQyxrQkFBUTtBQUFBLFlBQ0osTUFBTSxXQUFZO0FBQ2QscUJBQU87QUFBQSxnQkFDSCxHQUFHO0FBQUEsY0FDUDtBQUFBLFlBQ0o7QUFBQSxVQUNKLENBQUM7QUFBQSxRQUNMLENBQUM7QUFBQSxNQUVMO0FBQUEsSUFFSixDQUFDO0FBRUQsYUFBUywwQ0FBMEMsV0FBWTtBQUUzRCxTQUFHLFNBQVMsU0FBVSxNQUFNO0FBRXhCLFlBQUksSUFBSyxJQUFJLE1BQU0sSUFBSSxJQUFJLG9CQUFvQixDQUFDLEVBQUcsZ0JBQWdCLElBQUk7QUFFdkUsZUFBTyxDQUFDLEVBQUUsR0FBRyxXQUFXLE9BQU87QUFFL0IsVUFBRSxLQUFLLE9BQUs7QUFFUixjQUFJO0FBQ0EsbUJBQU8sQ0FBQyxFQUFFLEdBQUcsV0FBVyxZQUFZO0FBQ3BDLGlCQUFLO0FBQUEsVUFDVCxTQUFTLEdBQUc7QUFDUixpQkFBSyxDQUFDO0FBQUEsVUFDVjtBQUFBLFFBR0osQ0FBQyxFQUFFLE1BQU0sT0FBSztBQUNWLGVBQUssQ0FBQztBQUFBLFFBQ1YsQ0FBQztBQUFBLE1BRUwsQ0FBQztBQUFBLElBRUwsQ0FBQztBQUFBLEVBR0wsQ0FBQzs7O0FDN0REO0FBQ0E7QUFDQTtBQUlBLE1BQU1DLFdBQVMsVUFBVTtBQUV6QixNQUFNQyxVQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBUWQsV0FBUyw4QkFBOEIsV0FBWTtBQUUvQyxXQUFPLFNBQVUsTUFBTTtBQUNuQixnQkFBVSxFQUFFLEtBQUssTUFBTTtBQUNuQixhQUFLO0FBQUEsTUFDVCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBR0QsY0FBVSxNQUFNO0FBQ1osVUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLFlBQU0sWUFBWTtBQUFBLElBQ3RCLENBQUM7QUFFRCxlQUFXLE1BQU07QUFDYixVQUFJLFFBQVEsU0FBUyxlQUFlLE9BQU87QUFDM0MsWUFBTSxZQUFZQTtBQUFBLElBRXRCLENBQUM7QUFFRCxhQUFTLHdDQUF3QyxXQUFZO0FBRXpELFNBQUcsU0FBUyxTQUFVLE1BQU07QUFFeEIsY0FBTSxJQUFJLElBQUksTUFBTSxZQUFZO0FBQ2hDLFlBQUksSUFBSSxFQUFFLGdCQUFnQixJQUFJO0FBQzlCLGVBQU8sQ0FBQyxFQUFFLEdBQUcsV0FBVyxPQUFPO0FBRS9CLFVBQUUsS0FBSyxPQUFLO0FBRVIsY0FBSTtBQUNBLG1CQUFPLENBQUMsRUFBRSxHQUFHLFdBQVcsWUFBWTtBQUVwQyxnQkFBSSxJQUFJLEVBQUUsUUFBUSxLQUFLO0FBQ3ZCLG1CQUFPLENBQUMsRUFBRSxHQUFHLE1BQU0sYUFBYTtBQUdoQyxpQkFBSztBQUFBLFVBQ1QsU0FBU0MsSUFBRztBQUNSLGlCQUFLQSxFQUFDO0FBQUEsVUFDVjtBQUFBLFFBR0osQ0FBQyxFQUFFLE1BQU0sQ0FBQUEsT0FBSztBQUNWLGVBQUtBLEVBQUM7QUFBQSxRQUNWLENBQUM7QUFBQSxNQUVMLENBQUM7QUFBQSxJQUVMLENBQUM7QUFBQSxFQUdMLENBQUM7OztBQ3RFRDtBQUNBO0FBQ0E7QUFPQSxXQUFTLGdCQUFnQixXQUFZO0FBRWpDLGFBQVMscUJBQXFCLFdBQVk7QUFFdEMsVUFBSTtBQUVKLGlCQUFXLE1BQU07QUFDYixzQkFBYyxJQUFJLGFBQWEsWUFBWSxPQUFPLENBQUM7QUFFbkQsb0JBQVksbUJBQW1CO0FBQUEsVUFDM0IsT0FBTztBQUFBLFVBQ1AsT0FBTyxFQUFDLFNBQVMsTUFBSztBQUFBLFFBQzFCLENBQUM7QUFBQSxNQUNMLENBQUM7QUFFRCxTQUFHLG1CQUFtQixXQUFZO0FBQzlCLGVBQU8sSUFBSSxhQUFhLFlBQVksT0FBTyxDQUFDLENBQUMsRUFBRSxHQUFHLFdBQVcsWUFBWTtBQUFBLE1BQzdFLENBQUM7QUFFRCxTQUFHLHFCQUFxQixXQUFZO0FBQ2hDLGVBQU8sWUFBWSxtQkFBbUI7QUFBQSxVQUNsQyxPQUFPO0FBQUEsVUFDUCxPQUFPLEVBQUMsU0FBUyxNQUFLO0FBQUEsUUFDMUIsQ0FBQyxDQUFDLEVBQUUsR0FBRyxXQUFXLFlBQVk7QUFBQSxNQUNsQyxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBRUQsYUFBUyxXQUFXLFdBQVk7QUFFNUIsVUFBSTtBQUVKLGlCQUFXLE1BQU07QUFDYixzQkFBYyxJQUFJLGFBQWEsWUFBWSxPQUFPLENBQUM7QUFFbkQsb0JBQVksbUJBQW1CO0FBQUEsVUFDM0IsT0FBTztBQUFBLFVBQ1AsT0FBTyxFQUFDLFNBQVMsTUFBSztBQUFBLFFBQzFCLENBQUM7QUFBQSxNQUNMLENBQUM7QUFFRCxTQUFHLDZCQUE2QixXQUFZO0FBQ3hDLGVBQU8sWUFBWSxRQUFRLE9BQU8sQ0FBQyxFQUFFLEdBQUcsTUFBTSxLQUFLO0FBQUEsTUFDdkQsQ0FBQztBQUVELFNBQUcsK0NBQStDLFdBQVk7QUFDMUQsZUFBTyxZQUFZLFFBQVEsT0FBTyxDQUFDLEVBQUUsR0FBRyxNQUFNLEtBQUs7QUFBQSxNQUN2RCxDQUFDO0FBQUEsSUFFTCxDQUFDO0FBTUQsYUFBUyxpQ0FBaUMsV0FBWTtBQUdsRCxVQUFJQyxVQUFRO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXNCWixpQkFBVyxNQUFNO0FBQ2IsWUFBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBQzNDLGNBQU0sWUFBWUE7QUFBQSxNQUV0QixDQUFDO0FBRUQsZ0JBQVUsTUFBTTtBQUNaLFlBQUksUUFBUSxTQUFTLGVBQWUsT0FBTztBQUMzQyxjQUFNLFlBQVk7QUFBQSxNQUN0QixDQUFDO0FBRUQsYUFBTyxTQUFVLE1BQU07QUFDbkIsa0JBQVUsRUFBRSxLQUFLLE1BQU07QUFDbkIsZUFBSztBQUFBLFFBQ1QsQ0FBQztBQUFBLE1BQ0wsQ0FBQztBQUdELFNBQUcscUJBQXFCLFNBQVUsTUFBTTtBQUVwQyxZQUFJLE9BQU8sU0FBUyxlQUFlLG1CQUFtQjtBQUN0RCxjQUFNLDRCQUE0QixJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU07QUFFaEQsY0FBSSxRQUFRLFNBQVMsZUFBZSxPQUFPO0FBRzNDLGlCQUFPLHdCQUF3QixJQUFJLEVBQUUsUUFBUSxVQUFTLGNBQWMsQ0FBQyxFQUNoRSxHQUFHLE1BQU0sY0FBYztBQUU1QixpQkFBTyx3QkFBd0IsSUFBSSxFQUFFLFFBQVEsT0FBTyxDQUFDLEVBQ2hELEdBQUcsTUFBTSxLQUFLO0FBRW5CLGVBQUs7QUFBQSxRQUVULENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTTtBQUNkLGVBQUssQ0FBQztBQUFBLFFBQ1IsQ0FBQztBQUFBLE1BR0wsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUFBLEVBR0wsQ0FBQzsiLAogICJuYW1lcyI6IFsidHlwZSIsICJ0eXBlIiwgImEiLCAiU3RvcmFnZSIsICJzZWxmIiwgIm5vZGUiLCAiYWRkZWROb2RlcyIsICJfYSIsICJnZXQiLCAiYSIsICJvcHRpb25zIiwgIkJ1ZmZlclNvdXJjZUNvbnZlcnRlciIsICJ0eXBlIiwgImEiLCAic2l6ZSIsICJvZmZzZXQiLCAiQ29udmVydCIsICJjb21iaW5lIiwgInJldEJ1ZiIsICJyZXRWaWV3IiwgIkJvb2xlYW4iLCAiU2V0IiwgIl9hIiwgIm1heCIsICJyZXRWaWV3IiwgInNpemUiLCAidGVtcEJ1ZmZlclZpZXciLCAib2Zmc2V0IiwgImZsYWciLCAiaGV4IiwgIkFzblR5cGVUeXBlcyIsICJBc25Qcm9wVHlwZXMiLCAiaW1wb3J0X3B2dHN1dGlscyIsICJ0eXBlIiwgIkJvb2xlYW4iLCAiX2EiLCAiU2V0IiwgIm9wdGlvbnMiLCAiZGVmYXVsdENvbnZlcnRlciIsICJfYSIsICJTZXQiLCAiU2V0IiwgImltcG9ydF9wdnRzdXRpbHMiLCAidHlwZSIsICJpc0NvbnZlcnRpYmxlIiwgInNjaGVtYVN0b3JhZ2UiLCAiaW5pdF9pbmRleF9lcyIsICJKc29uUHJvcFR5cGVzIiwgIm1pbiIsICJtYXgiLCAib3B0aW9ucyIsICJpbXBvcnRfcHZ0c3V0aWxzIiwgIk9iamVjdElkZW50aWZpZXIiLCAiaW5pdF9pbmRleF9lcyIsICJvZmZzZXQiLCAib3B0aW9ucyIsICJmb3JtYXQiLCAiX2EiLCAidHlwZSIsICJFY1B1YmxpY0tleSIsICJzaXplIiwgIkVkUHJpdmF0ZUtleSIsICJFZFB1YmxpY0tleSIsICJDdXJ2ZVByaXZhdGVLZXkiLCAibGVuIiwgImkiLCAic3RhcnQiLCAiZW5kIiwgImxlbjIiLCAib2Zmc2V0IiwgIkJ1ZmZlciIsICJpc0luc3RhbmNlIiwgInNpemUiLCAiYSIsICJjb25jYXQiLCAic3RhcnQiLCAiZW5kIiwgInRvU3RyaW5nIiwgImluc3BlY3QiLCAibWF4IiwgInJlYWQiLCAiaSIsICJvZmZzZXQiLCAid3JpdGUiLCAiYnl0ZUxlbmd0aCIsICJtaW4iLCAidHlwZSIsICJDcnlwdG8iLCAiQnVmZmVyJDEiLCAiYSIsICJjcnlwdG8iLCAic3RhcnQiLCAiZW5kIiwgInByb2Nlc3MiLCAiaW1wb3J0X3B2dHN1dGlscyIsICJDcnlwdG9LZXkiLCAiQWVzQ2JjUHJvdmlkZXIiLCAiQWVzQ21hY1Byb3ZpZGVyIiwgIkFlc0N0clByb3ZpZGVyIiwgIkFlc0djbVByb3ZpZGVyIiwgIkFlc0t3UHJvdmlkZXIiLCAiQWVzRWNiUHJvdmlkZXIiLCAiUnNhUHJpdmF0ZUtleSIsICJSc2FQdWJsaWNLZXkiLCAiUnNhU3NhUHJvdmlkZXIiLCAiUnNhUHNzUHJvdmlkZXIiLCAiUnNhT2FlcFByb3ZpZGVyIiwgIkVjUHJpdmF0ZUtleSIsICJFY1B1YmxpY0tleSIsICJFY2RzYVByb3ZpZGVyIiwgIkVjZGhQcm92aWRlciIsICJFZFByaXZhdGVLZXkiLCAiRWRQdWJsaWNLZXkiLCAiRWREc2FQcm92aWRlciIsICJFY2RoRXNQcm92aWRlciIsICJFZDI1NTE5UHJvdmlkZXIiLCAiWDI1NTE5UHJvdmlkZXIiLCAiUGJrZGYyUHJvdmlkZXIiLCAiSG1hY1Byb3ZpZGVyIiwgIkhrZGZQcm92aWRlciIsICJTaGFrZTEyOFByb3ZpZGVyIiwgIlNoYWtlMjU2UHJvdmlkZXIiLCAiU3VidGxlQ3J5cHRvIiwgImluaXRfaW5kZXhfZXMiLCAiZm9ybWF0IiwgIm9wdGlvbnMiLCAiaGFzaCIsICJ0eXBlIiwgIl9hIiwgImluaXRfZW51bXMiLCAibmFtZSIsICJzdHlsZSIsICJnZXRDb21wdXRlZFN0eWxlIiwgImdldENvbXB1dGVkU3R5bGUiLCAid2luZG93IiwgIm1pbiIsICJtYXgiLCAib3B0aW9ucyIsICJwb3BwZXJPZmZzZXRzIiwgIm1pbiIsICJtYXgiLCAib2Zmc2V0IiwgImVmZmVjdCIsICJpbml0X2VudW1zIiwgInRvUGFkZGluZ09iamVjdCIsICJwb3BwZXIiLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJvcHRpb25zIiwgImluaXRfZW51bXMiLCAiZWZmZWN0IiwgIm9wdGlvbnMiLCAid2luZG93IiwgImhhc2giLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJnZXRDb21wdXRlZFN0eWxlIiwgImNsaXBwaW5nUGFyZW50cyIsICJnZXRDb21wdXRlZFN0eWxlIiwgImluaXRfZW51bXMiLCAicmVmZXJlbmNlIiwgImluaXRfZW51bXMiLCAib3B0aW9ucyIsICJwb3BwZXJPZmZzZXRzIiwgIm9mZnNldCIsICJpbml0X2VudW1zIiwgIm9wdGlvbnMiLCAicGxhY2VtZW50cyIsICJwbGFjZW1lbnQiLCAiYSIsICJpbml0X2VudW1zIiwgIm9wdGlvbnMiLCAicGxhY2VtZW50cyIsICJwbGFjZW1lbnQiLCAiX2xvb3AiLCAiX2kiLCAiY2hlY2tzIiwgImluaXRfZW51bXMiLCAiaGlkZSIsICJpbml0X2VudW1zIiwgIm9mZnNldCIsICJvcHRpb25zIiwgImluaXRfZW51bXMiLCAib3B0aW9ucyIsICJwb3BwZXJPZmZzZXRzIiwgIm9mZnNldCIsICJtaW4iLCAibWF4IiwgImluaXRfZW51bXMiLCAiaW5pdF9lbnVtcyIsICJmbiIsICJtZXJnZWQiLCAiZGVmYXVsdE1vZGlmaWVycyIsICJjcmVhdGVQb3BwZXIiLCAicmVmZXJlbmNlIiwgInBvcHBlciIsICJvcHRpb25zIiwgImZuIiwgInN0YXRlIiwgImVmZmVjdCIsICJub29wRm4iLCAiaW5pdF9lbnVtcyIsICJzeW1ib2wiLCAiaW5pdCIsICJhIiwgImluaXRfY29uc3RhbnRzIiwgInN5bWJvbCIsICJpbml0X2NvbnN0YW50cyIsICJkb2N1bWVudCIsICJnZXRXaW5kb3ciLCAid2luZG93IiwgImRvY3VtZW50IiwgImluaXRfbG9jYWxlIiwgIm5hdmlnYXRvciIsICJvcHRpb25zIiwgImluaXRfbG9jYWxlIiwgInRyYW5zbGF0aW9ucyIsICJpbml0X2NvbnN0YW50cyIsICJ0cmFuc2xhdGlvbnMiLCAiY29uc29sZSIsICJ0cmFuc2xhdGlvbnMiLCAiY29uY2F0IiwgInN0YXJ0IiwgImVuZCIsICJvcHRpb25zIiwgInNldCIsICJ0b2dnbGUiLCAiaW5pdF9sb2NhbGUiLCAiREVMSU1JVEVSIiwgIm9wdGlvbnMiLCAidHlwZSIsICJhIiwgImludGVybmFsIiwgInNlbGYiLCAiZG9jdW1lbnQiLCAiaW5pdF9jb25zdGFudHMiLCAiZG9jdW1lbnQiLCAiSFRNTFRlbXBsYXRlRWxlbWVudCIsICJEb2N1bWVudEZyYWdtZW50IiwgIkRvY3VtZW50IiwgImluaXRfY29uc3RhbnRzIiwgImEiLCAidHlwZSIsICJkaWZmIiwgImdldE9wZXJhdG9yIiwgInR5cGUiLCAiZG9jdW1lbnQiLCAib3B0aW9ucyIsICJ2YWx1ZSIsICJ0eXBlIiwgImUiLCAiaSIsICJzeW1ib2wiLCAiY29uZmlnIiwgImluaXRfY29uc3RhbnRzIiwgImdldFdpbmRvdyIsICJvcHRpb25zIiwgIm9wdGlvbnMiLCAic2VsZiIsICJmbGFnIiwgIm9wdGlvbnMiLCAiY3VzdG9tRWxlbWVudHMiLCAiaW5pdF9jb25zdGFudHMiLCAidHJhbnNsYXRpb25zIiwgIm1pbiIsICJtYXgiLCAiZ2xvYmFsUmVmZXJlbmNlIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfY29uc3RhbnRzIiwgIm9wdGlvbnMiLCAidCIsICJpbml0X3RoZW1lIiwgImluaXRfY29uc3RhbnRzIiwgIm9wdGlvbnMiLCAiaW5pdF9wb3BwZXIiLCAidHlwZSIsICJzZWxmIiwgIm9wdGlvbnMiLCAic2hvdyIsICJyZWZlcmVuY2UiLCAiZ2V0V2luZG93IiwgImluaXRfdGFicyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X3RoZW1lIiwgImluaXRfcG9wcGVyIiwgImRvY3VtZW50IiwgImluaXRfY29uc3RhbnRzIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJjb250cm9sRWxlbWVudFN5bWJvbCIsICJpbml0RXZlbnRIYW5kbGVyIiwgImdldFRlbXBsYXRlIiwgImluaXRfbWVzc2FnZSIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiY29udHJvbEVsZW1lbnRTeW1ib2wiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9ub3RpZnkiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9tZXNzYWdlIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJpbml0RXZlbnRIYW5kbGVyIiwgInNlbGYiLCAibWluIiwgIm1heCIsICJhcHBseSIsICJnZXRUZW1wbGF0ZSIsICJpbml0X3NwbGl0X3BhbmVsIiwgImluaXRfbm90aWZ5IiwgImluaXRfY29uc3RhbnRzIiwgImF0dGFjaFJlc2l6ZU9ic2VydmVyIiwgInJlc2l6ZU9ic2VydmVyU3ltYm9sIiwgInRpbWVyQ2FsbGJhY2tTeW1ib2wiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImluaXRFdmVudEhhbmRsZXIiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9wYW5lbCIsICJvcHRpb25zIiwgIm9ic2VydmVyIiwgImxvYWRDb250ZW50IiwgImdldFRlbXBsYXRlIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRFdmVudEhhbmRsZXIiLCAic2VsZiIsICJ0eXBlIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJnZXRUZW1wbGF0ZSIsICJpbml0X2J1dHRvbiIsICJpbml0X2NvbnN0YW50cyIsICJvcHRpb25zIiwgImluaXRfY29uc3RhbnRzIiwgImludGVybmFsU3ltYm9sIiwgImdldFRlbXBsYXRlIiwgImluaXRfc3RhdGVfYnV0dG9uIiwgImluaXRfYnV0dG9uIiwgInN0eWxlcyIsICJhIiwgInN0YXJ0IiwgImVuZCIsICJtYXgiLCAibWluIiwgImdldE9wcG9zaXRlUGxhY2VtZW50IiwgInJlY3RUb0NsaWVudFJlY3QiLCAicGxhY2VtZW50cyIsICJyb3VuZCIsICJyZWZlcmVuY2UiLCAiZGV0ZWN0T3ZlcmZsb3ciLCAib3B0aW9ucyIsICJwbGF0Zm9ybSIsICJyZWN0VG9DbGllbnRSZWN0IiwgImFycm93IiwgImZsaXAiLCAib2Zmc2V0IiwgImNvbmZpZyIsICJmbiIsICJtaW4iLCAibWF4IiwgInBsYWNlbWVudHMiLCAiYWxpZ25tZW50IiwgImEiLCAiZ2V0T3Bwb3NpdGVQbGFjZW1lbnQiLCAic2lkZXMiLCAic2lkZSIsICJwbGFjZW1lbnQiLCAib3ZlcmZsb3ciLCAieCIsICJ5IiwgImFwcGx5IiwgImdldE5vZGVOYW1lIiwgImlzTm9kZSIsICJnZXRXaW5kb3ciLCAiZ2V0RG9jdW1lbnRFbGVtZW50IiwgImlzRWxlbWVudCIsICJpc0hUTUxFbGVtZW50IiwgImlzU2hhZG93Um9vdCIsICJnZXRDb21wdXRlZFN0eWxlIiwgImlzVGFibGVFbGVtZW50IiwgImdldENvbnRhaW5pbmdCbG9jayIsICJnZXRQYXJlbnROb2RlIiwgImdldE5vZGVTY3JvbGwiLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJpc0hUTUxFbGVtZW50IiwgInJvdW5kIiwgImlzRWxlbWVudCIsICJnZXRXaW5kb3ciLCAiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwgImxlZnQiLCAidG9wIiwgInJlY3RUb0NsaWVudFJlY3QiLCAiZ2V0V2luZG93U2Nyb2xsQmFyWCIsICJnZXROb2RlU2Nyb2xsIiwgImdldERvY3VtZW50RWxlbWVudCIsICJnZXROb2RlTmFtZSIsICJnZXREb2N1bWVudFJlY3QiLCAibWF4IiwgImdldFZpZXdwb3J0UmVjdCIsICJnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdCIsICJnZXRQYXJlbnROb2RlIiwgImdldENsaXBwaW5nUmVjdCIsICJtaW4iLCAiZ2V0VHJ1ZU9mZnNldFBhcmVudCIsICJnZXRPZmZzZXRQYXJlbnQiLCAiaXNUYWJsZUVsZW1lbnQiLCAiZ2V0Q29udGFpbmluZ0Jsb2NrIiwgIm9wdGlvbnMiLCAicmVmZXJlbmNlIiwgImRldGVjdE92ZXJmbG93IiwgIm9mZnNldCIsICJhdXRvUGxhY2VtZW50IiwgInNoaWZ0IiwgImZsaXAiLCAic2l6ZSIsICJhcnJvdyIsICJjb21wdXRlUG9zaXRpb24iLCAib3B0aW9ucyIsICJjb25maWciLCAiZm4iLCAiZmxpcCIsICJzaGlmdCIsICJsaW5lIiwgImF1dG9QbGFjZW1lbnQiLCAiZGV0ZWN0T3ZlcmZsb3ciLCAiYXJyb3ciLCAic2l6ZSIsICJvZmZzZXQiLCAiY29tcHV0ZVBvc2l0aW9uIiwgIngiLCAieSIsICJpbml0X2NvbnN0YW50cyIsICJwb3BwZXJFbGVtZW50U3ltYm9sIiwgInNlbGYiLCAiaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzIiwgIm9wdGlvbnMiLCAiYXR0YWNoUmVzaXplT2JzZXJ2ZXIiLCAicmVzaXplT2JzZXJ2ZXJTeW1ib2wiLCAidGltZXJDYWxsYmFja1N5bWJvbCIsICJkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIiLCAib2JzZXJ2ZXIiLCAicnVuIiwgInNob3ciLCAiaGlkZSIsICJpbml0T3B0aW9uT2JzZXJ2ZXIiLCAidHJhbnNsYXRpb25zIiwgIm1heCIsICJzdHlsZXMiLCAiY29udHJvbEVsZW1lbnRTeW1ib2wiLCAiZm9jdXNGaWx0ZXIiLCAidHlwZSIsICJhIiwgImdsb2JhbCIsICJpbml0RXZlbnRIYW5kbGVyIiwgImNsb3NlRXZlbnRIYW5kbGVyIiwgImVsZW1lbnQiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImNvbnRhaW5lckVsZW1lbnRTeW1ib2wiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9zZWxlY3QiLCAiaW5pdF9jb25zdGFudHMiLCAiZG9jdW1lbnQiLCAiZmxhZyIsICJpbml0X3BvcHBlciIsICJpbml0X2NvbnN0YW50cyIsICJpbml0RXZlbnRIYW5kbGVyIiwgImNsb3NlRXZlbnRIYW5kbGVyIiwgImhpZGUiLCAiYnV0dG9uRWxlbWVudFN5bWJvbCIsICJhdHRhY2hSZXNpemVPYnNlcnZlciIsICJyZXNpemVPYnNlcnZlclN5bWJvbCIsICJ0aW1lckNhbGxiYWNrU3ltYm9sIiwgInVwZGF0ZVBvcHBlciIsICJkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIiLCAic2VsZiIsICJwb3BwZXJFbGVtZW50U3ltYm9sIiwgImNvbnRyb2xFbGVtZW50U3ltYm9sIiwgInNob3ciLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImdldFRlbXBsYXRlIiwgImluaXRfcG9wcGVyIiwgImluaXRfY29uc3RhbnRzIiwgImRvY3VtZW50IiwgInR5cGUiLCAiUG9wcGVyIiwgImluaXRfcG9wcGVyIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRFdmVudEhhbmRsZXIiLCAiY2xvc2VFdmVudEhhbmRsZXIiLCAiYXR0YWNoUmVzaXplT2JzZXJ2ZXIiLCAicmVzaXplT2JzZXJ2ZXJTeW1ib2wiLCAidGltZXJDYWxsYmFja1N5bWJvbCIsICJ1cGRhdGVQb3BwZXIiLCAiZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyIiwgInBvcHBlckVsZW1lbnRTeW1ib2wiLCAiY29udHJvbEVsZW1lbnRTeW1ib2wiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImJ1dHRvbkVsZW1lbnRTeW1ib2wiLCAiYXJyb3dFbGVtZW50U3ltYm9sIiwgImdldFRlbXBsYXRlIiwgImluaXRfcG9wcGVyX2J1dHRvbiIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X3BvcHBlciIsICJpbml0X2J1dHRvbiIsICJQb3BwZXIiLCAic3R5bGVzIiwgImRvY3VtZW50IiwgInR5cGUiLCAib3B0aW9ucyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0RXZlbnRIYW5kbGVyQnlNb2RlIiwgImJ1dHRvbkVsZW1lbnRTeW1ib2wiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImdldFRlbXBsYXRlIiwgImluaXRfbWVzc2FnZV9zdGF0ZV9idXR0b24iLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9wb3BwZXIiLCAiaW5pdF9zdGF0ZV9idXR0b24iLCAiUG9wcGVyIiwgInN0eWxlcyIsICJvcHRpb25zIiwgInR5cGUiLCAic2VsZiIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9jb25maXJtX2J1dHRvbiIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2J1dHRvbiIsICJpbml0X3BvcHBlcl9idXR0b24iLCAiaW5pdF9tZXNzYWdlX3N0YXRlX2J1dHRvbiIsICJzdHlsZXMiLCAiTm9kZUxpc3QiLCAiTm9kZSIsICJzZWxmIiwgIk5vZGUiLCAiTm9kZUxpc3QiLCAib3B0aW9ucyIsICJOb2RlIiwgIk5vZGVMaXN0IiwgIk5vZGVMaXN0IiwgIk5vZGUiLCAiaW5pdF9jb25zdGFudHMiLCAiaGFuZGxlT3B0aW9uS2V5Ym9hcmRFdmVudHMiLCAiTm9kZSIsICJpbml0RXZlbnRIYW5kbGVyIiwgImEiLCAia2V5RXZlbnRIYW5kbGVyIiwgImluaXRPcHRpb25zRnJvbUFyZ3VtZW50cyIsICJvcHRpb25zIiwgImdldFRlbXBsYXRlIiwgImluaXRfdHJlZV9zZWxlY3QiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9zZWxlY3QiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgInN3aXRjaEVsZW1lbnRTeW1ib2wiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJzZWxmIiwgImdldFRlbXBsYXRlIiwgImluaXRfdG9nZ2xlX3N3aXRjaCIsICJpbml0X2NvbnN0YW50cyIsICJnZXRXaW5kb3ciLCAiVGVtcGxhdGUiLCAiaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzIiwgIm9wdGlvbnMiLCAiaW5pdEludGVyc2VjdGlvbk9ic2VydmVyIiwgImludGVyc2VjdGlvbk9ic2VydmVyV2FzSW5pdGlhbGl6ZWQiLCAib2JzZXJ2ZXIiLCAibG9hZENvbnRlbnQiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF90ZW1wbGF0ZSIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJvcHRpb25zIiwgInRyYW5zbGF0aW9ucyIsICJkb2N1bWVudCIsICJ3aW5kb3ciLCAiZ2V0V2luZG93IiwgIm9wdGlvbnMiLCAib3B0aW9ucyIsICJwYXJzZU9wdGlvbnNKU09OIiwgIktFWV9ET0NVTUVOVCIsICJpbml0X2NvbnN0YW50cyIsICJvcHRpb25zIiwgInNlbGYiLCAiZG9jdW1lbnQiLCAiS0VZX0RPQ1VNRU5UIiwgImFwcGVuZFRvRG9jdW1lbnQiLCAiaW5pdF9jb25zdGFudHMiLCAic2VsZiIsICJjcmVhdGVFbGVtZW50IiwgImRvY3VtZW50IiwgIktFWV9ET0NVTUVOVCIsICJpbml0X2NvbnN0YW50cyIsICJjcmVhdGVFbGVtZW50IiwgImRvY3VtZW50IiwgIktFWV9ET0NVTUVOVCIsICJpbml0X2NvbnN0YW50cyIsICJ0eXBlIiwgIm9wdGlvbnMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAid2luZG93IiwgImdldFdpbmRvdyIsICJ2ZXJzaW9uIiwgImV2ZW50IiwgImdldFRlbXBsYXRlIiwgImluaXRfY29uZmlnX21hbmFnZXIiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImluaXRFdmVudEhhbmRsZXIiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9ob3N0IiwgImluaXRfbm90aWZ5IiwgImluaXRfbG9jYWxlIiwgImluaXRfY29uZmlnX21hbmFnZXIiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgIm92ZXJsYXlFbGVtZW50U3ltYm9sIiwgImluaXRFdmVudEhhbmRsZXIiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9vdmVybGF5IiwgImluaXRfbm90aWZ5IiwgImluaXRfY29uc3RhbnRzIiwgImdldFdpbmRvdyIsICJpbml0X3V0aWwiLCAiaW5pdF9jb25zdGFudHMiLCAiQVRUUklCVVRFX0JVVFRPTl9MQUJFTCIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJyZXNpemVPYnNlcnZlclN5bWJvbCIsICJpbml0RXZlbnRIYW5kbGVyIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJjb250cm9sRWxlbWVudFN5bWJvbCIsICJkb2N1bWVudCIsICJ0aW1lckNhbGxiYWNrU3ltYm9sIiwgImdldFRlbXBsYXRlIiwgImluaXRfY29sbGFwc2UiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9ob3N0IiwgImluaXRfdXRpbCIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiYnV0dG9uRWxlbWVudFN5bWJvbCIsICJpbml0RXZlbnRIYW5kbGVyIiwgIkFUVFJJQlVURV9CVVRUT05fTEFCRUwiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9kZXRhaWxzIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfdXRpbCIsICJpbml0X2NvbGxhcHNlIiwgIkRldGFpbHMiLCAiaW5pdF9kZXRhaWxzIiwgImludGVybmFsQ291bnRlciIsICJfX2RlZlByb3AiLCAiX19nZXRPd25Qcm9wTmFtZXMiLCAiX19jb21tb25KUyIsICJfX3JlcXVpcmUiLCAiX19leHBvcnQiLCAiaXNOYU4yIiwgIm9wdGlvbnMiLCAiZW5kIiwgInNpemUiLCAiaXNOYU4iLCAiZXNjYXBlIiwgImlzUHJpbWl0aXZlIiwgImZuIiwgImEiLCAiaXNPYmplY3QiLCAic3RhcnQiLCAiY29udGFpbnMiLCAiZmxhZyIsICJpc0hUTUxFbGVtZW50IiwgImNvbnRhaW5zIiwgIm9wdGlvbnMiLCAid2luZG93IiwgIlN0b3JhZ2UiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJUYWJzIiwgIkNyeXB0byIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgIkNyeXB0byIsICJTcGxpdFNjcmVlbiIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgIlNwbGl0U2NyZWVuIiwgIkNyeXB0byIsICJnbG9iYWwiLCAib3B0aW9ucyIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgIlJlbG9hZCIsICJ2aWV3cG9ydCIsICJmZXRjaFJlZmVyZW5jZSIsICJvcHRpb25zIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiU3RhdGVCdXR0b24iLCAib3B0aW9ucyIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImh0bWwyIiwgIlNlbGVjdCIsICJvcHRpb25zIiwgImUiLCAiYSIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImh0bWwyIiwgIkNvbmZpcm1CdXR0b24iLCAib3B0aW9ucyIsICJwYXJzZU9wdGlvbnNKU09OIiwgInNlbGYiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJodG1sMiIsICJUcmVlU2VsZWN0IiwgImZldGNoUmVmZXJlbmNlIiwgIm9wdGlvbnMiLCAiZSIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImh0bWwyIiwgIkJ1dHRvbiIsICJvcHRpb25zIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiaHRtbDIiLCAiVG9nZ2xlU3dpdGNoIiwgImV4cGVjdCIsICJnbG9iYWwiLCAibW9ja2ludGVyc2VjdGlvbm9ic2VydmVyIiwgImh0bWwxIiwgIlRlbXBsYXRlIiwgInZpZXdwb3J0IiwgImZldGNoUmVmZXJlbmNlIiwgIm9wdGlvbnMiLCAiZXhwZWN0IiwgIk1lc3NhZ2UiLCAiZXhwZWN0IiwgIk5vdGlmeSIsICJOb3RpZnkiLCAiZXhwZWN0IiwgIm11dGF0aW9ub2JzZXJ2ZXIiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImluaXRfdXRpbCIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImEiLCAib3B0aW9ucyIsICJzdGFydCIsICJlbmQiLCAib3B0aW9ucyIsICJyYW5kb20iLCAiYSIsICJtYXgiLCAiYSIsICJkaWZmIiwgImEiLCAiYSIsICJhIiwgImNvbnNvbGUiLCAiYSIsICJhIiwgImhhbmRsZXIiLCAiTWVzc2FnZSIsICJzZWxmIiwgIk1lc3NhZ2UiLCAib3B0aW9ucyIsICJpc05vZGUiLCAiTWVzc2FnZSIsICJNZXNzYWdlIiwgInZlcnNpb24iLCAiYSIsICJtb25zdGVyVmVyc2lvbiIsICJnZXRXaW5kb3ciLCAiZ2V0V2luZG93IiwgImluaXQiLCAiZXhwZWN0IiwgImV4cGVjdCIsICJleHBlY3QiLCAiZXhwZWN0IiwgImV4cGVjdCIsICJleHBlY3QiLCAiZmV0Y2hSZWZlcmVuY2UiLCAibXV0YXRpb25vYnNlcnZlciIsICJhZGRlZE5vZGVzIiwgIm9wdGlvbnMiLCAiZXhwZWN0IiwgImUiLCAib3B0aW9ucyIsICJpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzIiwgImdsb2JhbCIsICJhIiwgImV4cGVjdCIsICJodG1sMSIsICJodG1sMiIsICJVcGRhdGVyIiwgIm9wdGlvbnMiLCAidiIsICJhIiwgImluaXRfbG9jYWxlIiwgImEiLCAiZXhwZWN0IiwgImh0bWwxIiwgImh0bWwyIiwgIkN1c3RvbUVsZW1lbnQiLCAicmVnaXN0ZXJDdXN0b21FbGVtZW50IiwgImRvY3VtZW50IiwgImFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50IiwgIm9wdGlvbnMiLCAiYSIsICJzZXQiLCAidiIsICJ3aW5kb3dSZWFkeSIsICJkb21SZWFkeSIsICJnZXRXaW5kb3ciLCAiYSIsICJleHBlY3QiLCAiQ3VzdG9tRWxlbWVudCIsICJyZWdpc3RlckN1c3RvbUVsZW1lbnQiLCAiZG9jdW1lbnQiLCAiY29udHJvbCIsICJodG1sMSIsICJodG1sMiIsICJodG1sMyIsICJzeW1ib2wiLCAiYSIsICJSZXNvdXJjZSIsICJmZXRjaFJlZmVyZW5jZSIsICJvcHRpb25zIiwgImV4cGVjdCIsICJodG1sMSIsICJDdXN0b21Db250cm9sIiwgInJlZ2lzdGVyQ3VzdG9tRWxlbWVudCIsICJkb2N1bWVudCIsICJtIiwgImluaXRfY29uc3RhbnRzIiwgImEiLCAib3B0aW9ucyIsICJkb0RpZmYiLCAidHlwZSIsICJXZWJDb25uZWN0IiwgIm9wdGlvbnMiLCAiTWVzc2FnZSIsICJ0ZXN0VXJsIiwgIldlYkNvbm5lY3QiLCAiY2xvbmUiLCAib3B0aW9ucyIsICJpbml0IiwgImZldGNoRGF0YSIsICJyZWFkIiwgIndyaXRlIiwgImZldGNoUmVmZXJlbmNlIiwgIm9wdGlvbnMiLCAicmVzb2x2ZSIsICJyZWplY3QiLCAiaSIsICJhIiwgImluaXRfbG9jYWxlIiwgImlzTm9kZSIsICJhIiwgImIiLCAiYyIsICJodG1sMSIsICJhIiwgIk5vZGVMaXN0IiwgImEiLCAiYSIsICJhIiwgImh0bWwxIiwgImEiLCAic2VsZiIsICJhIiwgImEiLCAiYSIsICJOb2RlTGlzdCIsICJOb2RlIiwgImEiLCAiYSIsICJhIiwgImEiLCAiYSIsICJhIiwgImEiLCAibWF4IiwgImEiLCAiUmFuZG9tSUQiLCAiVVVJRCIsICJhIiwgIkJhc2UiLCAiYSIsICJhIiwgIk5vZGVMaXN0IiwgIk5vZGUiLCAiTm9kZSIsICJOb2RlTGlzdCIsICJGb3JtYXR0ZXIiLCAib3B0aW9ucyIsICJ0cmFuc2xhdGlvbnMiLCAiRm9ybWF0dGVyIiwgImEiLCAiYSIsICJpbml0X2NvbnN0YW50cyIsICJodG1sMSIsICJ0cmFuc2xhdGlvbnNMaW5rU3ltYm9sIiwgIm9wdGlvbnMiLCAiZ2xvYmFsIiwgImZldGNoUmVmZXJlbmNlIiwgIm9wdGlvbnMiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImUiLCAiaHRtbDEiXQp9Cg==
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc291cmNlL2NvbnN0YW50cy5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL2lzLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy90eXBlb2YubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2V4dGVuZC5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2RvbS1zdG9yYWdlQDIuMS4wL25vZGVfbW9kdWxlcy9kb20tc3RvcmFnZS9saWIvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2VsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsQDEuMy4xMi9ub2RlX21vZHVsZXMvZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGwvZGlzdC9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vcHZ0c3V0aWxzQDEuMy42L25vZGVfbW9kdWxlcy9wdnRzdXRpbHMvYnVpbGQvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3B2dXRpbHNAMS4xLjMvbm9kZV9tb2R1bGVzL3B2dXRpbHMvYnVpbGQvdXRpbHMuZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2FzbjFqc0AzLjAuNS9ub2RlX21vZHVsZXMvYXNuMWpzL2J1aWxkL2luZGV4LmVzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjE1L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2VudW1zLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjE1L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3R5cGVzL2JpdF9zdHJpbmcuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTUvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvdHlwZXMvb2N0ZXRfc3RyaW5nLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjE1L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3R5cGVzL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjE1L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2NvbnZlcnRlcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTUvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvaGVscGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjE1L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L3NjaGVtYS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy4xNS9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9zdG9yYWdlLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjE1L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2RlY29yYXRvcnMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTUvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvZXJyb3JzL3NjaGVtYV92YWxpZGF0aW9uLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjE1L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2Vycm9ycy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy4xNS9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9wYXJzZXIuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTUvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvc2VyaWFsaXplci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBlY3VsaWFyK2FzbjEtc2NoZW1hQDIuMy4xNS9ub2RlX21vZHVsZXMvQHBlY3VsaWFyL2FzbjEtc2NoZW1hL2J1aWxkL2VzMjAxNS9vYmplY3RzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrYXNuMS1zY2hlbWFAMi4zLjE1L25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvYXNuMS1zY2hlbWEvYnVpbGQvZXMyMDE1L2NvbnZlcnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BwZWN1bGlhcithc24xLXNjaGVtYUAyLjMuMTUvbm9kZV9tb2R1bGVzL0BwZWN1bGlhci9hc24xLXNjaGVtYS9idWlsZC9lczIwMTUvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3RzbGliQDIuOC4xL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIranNvbi1zY2hlbWFAMS4xLjEyL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvanNvbi1zY2hlbWEvYnVpbGQvaW5kZXguZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3dlYmNyeXB0by1jb3JlQDEuOC4xL25vZGVfbW9kdWxlcy93ZWJjcnlwdG8tY29yZS9idWlsZC93ZWJjcnlwdG8tY29yZS5lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vYmFzZTY0LWpzQDEuNS4xL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2llZWU3NTRAMS4yLjEvbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2J1ZmZlckA1LjcuMS9ub2RlX21vZHVsZXMvYnVmZmVyL2luZGV4LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcGVjdWxpYXIrd2ViY3J5cHRvQDEuNS4wL25vZGVfbW9kdWxlcy9AcGVjdWxpYXIvd2ViY3J5cHRvL2J1aWxkL3dlYmNyeXB0by5lcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZW51bXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvdy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2luc3RhbmNlT2YuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWF0aC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdXNlckFnZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNMYXlvdXRWaWV3cG9ydC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9jb250YWlucy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFBhcmVudE5vZGUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvd2l0aGluLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsQmFyWC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFZpZXdwb3J0UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50UmVjdC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzU2Nyb2xsUGFyZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0U2Nyb2xsUGFyZW50LmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZXRlY3RPdmVyZmxvdy5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvaGlkZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL29mZnNldC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEFsdEF4aXMuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9pbmRleC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZVNjcm9sbC5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZWJvdW5jZS5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VCeU5hbWUuanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0Bwb3BwZXJqcytjb3JlQDIuMTEuOC9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2NyZWF0ZVBvcHBlci5qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHBvcHBlcmpzK2NvcmVAMi4xMS44L25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AcG9wcGVyanMrY29yZUAyLjExLjgvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9pbmRleC5qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvYmFzZS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3N0YWNrLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9wYXRoZmluZGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdG9rZW5saXN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2NvbnN0YW50cy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9hdHRyaWJ1dGVzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL2Nsb25lLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi9sb2NhbGUubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vbG9jYWxlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL3RpbWUtYWdvLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS90cmFuc2Zvcm1lci5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvcGlwZS5tanMiLCAiLi4vLi4vc291cmNlL3RleHQvZm9ybWF0dGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvbWVkaWF0eXBlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvZGF0YXVybC5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3F1ZXVlLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvdW5pcXVlcXVldWUubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlci5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVybGlzdC5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vdGhlbWUubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vdGVtcGxhdGUubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RpZmYubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL3RyaW1zcGFjZXMubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vZXZlbnRzLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3VwZGF0ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vc2xvdHRlZC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS91dGlsL2V4dHJhY3Qta2V5cy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS91dGlsL2luaXQtb3B0aW9ucy1mcm9tLWF0dHJpYnV0ZXMubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vdXRpbC9zZXQtb3B0aW9uLWZyb20tYXR0cmlidXRlLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWVsZW1lbnQubWpzIiwgIi4uLy4uL3NvdXJjZS9tYXRoL3JhbmRvbS5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL3Byb2Nlc3NpbmcvY2FsbGJhY2subWpzIiwgIi4uLy4uL3NvdXJjZS91dGlsL3Byb2Nlc3NpbmcubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vY29uc3RhbnRzLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3R5bGVzaGVldC90YWJzLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3V0aWwvZmV0Y2gubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL3N0eWxlc2hlZXQvdGhlbWUubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdXRpbC9wb3BwZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC90YWJzLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvc3R5bGVzaGVldC9tZXNzYWdlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvbWVzc2FnZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbm90aWZ5L3N0eWxlc2hlZXQvbm90aWZ5Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ub3RpZnkvbm90aWZ5Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3R5bGVzaGVldC9zcGxpdC1wYW5lbC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbGF5b3V0L3NwbGl0LXBhbmVsLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3R5bGVzaGVldC9wYW5lbC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbGF5b3V0L3BhbmVsLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3JlbG9hZC5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9jdXN0b21jb250cm9sLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvYnV0dG9uLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9zdHlsZXNoZWV0L3JpcHBsZS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3R5bGVzaGVldC9zdGF0ZS1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdHlwZXMvc3RhdGUubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc3RhdGUtYnV0dG9uLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9idWlsZG1hcC5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmbG9hdGluZy11aSt1dGlsc0AwLjIuOC9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL3V0aWxzL2Rpc3QvZmxvYXRpbmctdWkudXRpbHMubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmxvYXRpbmctdWkrY29yZUAxLjYuOC9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2NvcmUvZGlzdC9mbG9hdGluZy11aS5jb3JlLm1qcyIsICIuLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQGZsb2F0aW5nLXVpK3V0aWxzQDAuMi44L25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5kb20ubWpzIiwgIi4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmxvYXRpbmctdWkrZG9tQDEuNi4xMi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2RvbS9kaXN0L2Zsb2F0aW5nLXVpLmRvbS5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS91dGlsL2Zsb2F0aW5nLXVpLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvc2VsZWN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3NlbGVjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbGF5b3V0L3N0eWxlc2hlZXQvcG9wcGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvcG9wcGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3BvcHBlci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L3BvcHBlci1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vcG9wcGVyLWJ1dHRvbi5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L2NvbmZpcm0tYnV0dG9uLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvbWVzc2FnZS1zdGF0ZS1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vbWVzc2FnZS1zdGF0ZS1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vY29uZmlybS1idXR0b24ubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9ub2RlbGlzdC5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL25vZGUubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2J1aWxkdHJlZS5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL25vZGVyZWN1cnNpdmVpdGVyYXRvci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9zdHlsZXNoZWV0L3RyZWUtc2VsZWN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3RyZWUtc2VsZWN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0eWxlc2hlZXQvdG9nZ2xlLXN3aXRjaC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90b2dnbGUtc3dpdGNoLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3RlbXBsYXRlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L3N0eWxlc2hlZXQvaG9zdC5tanMiLCAiLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3JlYWR5Lm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2ZvY3VzbWFuYWdlci5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL2ludGVybmFsLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL2RhdGEubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2UvbGluay5tanMiLCAiLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS9saW5rL3N0eWxlc2hlZXQubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2Uvc2NyaXB0Lm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlbWFuYWdlci5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9zdHlsZXNoZWV0L2NvbmZpZy1tYW5hZ2VyLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L2NvbmZpZy1tYW5hZ2VyLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L2hvc3QubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3Qvc3R5bGVzaGVldC9vdmVybGF5Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L292ZXJsYXkubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3QvdXRpbC5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbGF5b3V0L3N0eWxlc2hlZXQvZGV0YWlscy5tanMiLCAiLi4vLi4vc291cmNlL2NvbXBvbmVudHMvaG9zdC9jb25zdGFudHMubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9zdHlsZXNoZWV0L2NvbGxhcHNlLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvY29sbGFwc2UubWpzIiwgIi4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2xheW91dC9kZXRhaWxzLm1qcyIsICIuLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L2RldGFpbHMubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9yYW5kb21pZC5tanMiLCAiLi4vLi4vc291cmNlL3R5cGVzL3V1aWQubWpzIiwgInByZXBhcmUuanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9sYXlvdXQvdGFicy5tanMiLCAiLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NoYWlANS4xLjIvbm9kZV9tb2R1bGVzL2NoYWkvY2hhaS5qcyIsICIuLi91dGlsL2NoYWktZG9tLm1qcyIsICIuLi91dGlsL2pzZG9tLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2xheW91dC9zbGl0LXBhbmVsLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2xheW91dC9wYW5lbC5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3JlbG9hZC5tanMiLCAiLi4vdXRpbC9pbnRlcnNlY3Rpb24tbW9jay5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3N0YXRlLWJ1dHRvbi5tanMiLCAiLi4vdXRpbC9yZXNpemUtb2JzZXJ2ZXIubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvZm9ybS9jb25maXJtLWJ1dHRvbi5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL2Zvcm0ubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2UubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3RyZWUtc2VsZWN0Lm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2Zvcm0vYnV0dG9uLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2Zvcm0vdG9nZ2xlLXN3aXRjaC5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9mb3JtL3RlbXBsYXRlLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL25vdGlmeS9tZXNzYWdlLm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL25vdGlmeS9ub3RpZnkubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvaG9zdC9ob3N0Lm1qcyIsICIuLi9jYXNlcy9jb21wb25lbnRzL2hvc3Qvb3ZlcmxheS5tanMiLCAiLi4vY2FzZXMvY29tcG9uZW50cy9ob3N0L3V0aWwubWpzIiwgIi4uL2Nhc2VzL2NvbXBvbmVudHMvaG9zdC9kZXRhaWxzLm1qcyIsICIuLi9jYXNlcy90ZXh0L2Zvcm1hdHRlci5tanMiLCAiLi4vLi4vc291cmNlL3RleHQvZ2VuZXJhdGUtcmFuZ2UtY29tcGFyaXNvbi1leHByZXNzaW9uLm1qcyIsICIuLi9jYXNlcy90ZXh0L3V0aWwubWpzIiwgIi4uLy4uL3NvdXJjZS90ZXh0L2JyYWNrZXRlZC1rZXktdmFsdWUtaGFzaC5tanMiLCAiLi4vY2FzZXMvdGV4dC9icmFja2V0ZWQta2V5LXZhbHVlLWhhc2gubWpzIiwgIi4uL2Nhc2VzL21hdGgvcmFuZG9tLm1qcyIsICIuLi9jYXNlcy91dGlsL3RyaW1zcGFjZXMubWpzIiwgIi4uL2Nhc2VzL3V0aWwvcHJvY2Vzc2luZy5tanMiLCAiLi4vY2FzZXMvdXRpbC9kZWFkbWFuc3N3aXRjaC5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvY29tcGFyYXRvci5tanMiLCAiLi4vY2FzZXMvdXRpbC9jb21wYXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvdXRpbC9mcmVlemUubWpzIiwgIi4uL2Nhc2VzL3V0aWwvZnJlZXplLm1qcyIsICIuLi9jYXNlcy91dGlsL2Nsb25lLm1qcyIsICIuLi8uLi9zb3VyY2UvbG9nZ2luZy9oYW5kbGVyL2NvbnNvbGUubWpzIiwgIi4uLy4uL3NvdXJjZS9sb2dnaW5nL2hhbmRsZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9sb2dnaW5nL2xvZ2VudHJ5Lm1qcyIsICIuLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dnZXIubWpzIiwgIi4uL2Nhc2VzL2xvZ2dpbmcvaGFuZGxlci9jb25zb2xlLm1qcyIsICIuLi9jYXNlcy9sb2dnaW5nL2xvZ2dlci5tanMiLCAiLi4vY2FzZXMvbG9nZ2luZy9oYW5kbGVyLm1qcyIsICIuLi9jYXNlcy9sb2dnaW5nL2xvZ2VudHJ5Lm1qcyIsICIuLi8uLi9zb3VyY2UvbmV0L3dlYmNvbm5lY3QubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZhYmxlcXVldWUubWpzIiwgIi4uLy4uL3NvdXJjZS9uZXQvd2ViY29ubmVjdC9tZXNzYWdlLm1qcyIsICIuLi9jYXNlcy9uZXQvd2ViY29ubmVjdC5tanMiLCAiLi4vdXRpbC93ZWJzb2NrZXQubWpzIiwgIi4uL2Nhc2VzL25ldC93ZWJjb25uZWN0L21lc3NhZ2UubWpzIiwgIi4uLy4uL3NvdXJjZS90eXBlcy92ZXJzaW9uLm1qcyIsICIuLi9jYXNlcy9tb25zdGVyLm1qcyIsICIuLi8uLi9zb3VyY2UvZG9tL2RpbWVuc2lvbi5tanMiLCAiLi4vY2FzZXMvZG9tL2RpbWVuc2lvbi5tanMiLCAiLi4vLi4vc291cmNlL3V0aWwvcnVudGltZS5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlL2xpbmsvc3R5bGVzaGVldC5tanMiLCAiLi4vdXRpbC9jbGVhbnVwZG9tLm1qcyIsICIuLi9jYXNlcy9kb20vcmVzb3VyY2UvbGluay5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlL3NjcmlwdC5tanMiLCAiLi4vY2FzZXMvZG9tL3Jlc291cmNlL2RhdGEubWpzIiwgIi4uL2Nhc2VzL2RvbS91dGlsL2luaXQtb3B0aW9ucy1mcm9tLWF0dHJpYnV0ZXMubWpzIiwgIi4uL2Nhc2VzL2RvbS91dGlsL2V4dHJhY3Qta2V5cy5tanMiLCAiLi4vLi4vc291cmNlL2RvbS93b3JrZXIvZmFjdG9yeS5tanMiLCAiLi4vY2FzZXMvZG9tL3dvcmtlci9mYWN0b3J5Lm1qcyIsICIuLi9jYXNlcy9kb20vdXBkYXRlci5tanMiLCAiLi4vY2FzZXMvZG9tL2xvY2FsZS5tanMiLCAiLi4vY2FzZXMvZG9tL3RoZW1lLm1qcyIsICIuLi9jYXNlcy9kb20vY3VzdG9tZWxlbWVudC5tanMiLCAiLi4vY2FzZXMvZG9tL2ZvY3VzbWFuYWdlci5tanMiLCAiLi4vY2FzZXMvZG9tL2ZpbmQubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZWFkeS5tanMiLCAiLi4vY2FzZXMvZG9tL3V0aWwubWpzIiwgIi4uL2Nhc2VzL2RvbS9jdXN0b21lbGVtZW50LWluaXRmcm9tc2NyaXB0aG9zdC5tanMiLCAiLi4vY2FzZXMvZG9tL3Nsb3R0ZWQtbm9kZXMubWpzIiwgIi4uL2Nhc2VzL2RvbS9hdHRyaWJ1dGVzLm1qcyIsICIuLi9jYXNlcy9kb20vcmVzb3VyY2UubWpzIiwgIi4uL2Nhc2VzL2RvbS9yZXNvdXJjZW1hbmFnZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9kb20vYXNzZW1ibGVyLm1qcyIsICIuLi9jYXNlcy9kb20vYXNzZW1ibGVyLm1qcyIsICIuLi9jYXNlcy9kb20vY3VzdG9tY29udHJvbC5tanMiLCAiLi4vY2FzZXMvZG9tL3RlbXBsYXRlLm1qcyIsICIuLi9jYXNlcy9kb20vZXZlbnRzLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL2RvbS5tanMiLCAiLi4vY2FzZXMvZGF0YS9kYXRhc291cmNlL2RvbS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL2xvY2Fsc3RvcmFnZS5tanMiLCAiLi4vdXRpbC9sb2NhbHN0b3JhZ2UubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL2xvY2Fsc3RvcmFnZS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL3Nlc3Npb25zdG9yYWdlLm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9zZXNzaW9uc3RvcmFnZS5tanMiLCAiLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3dlYmNvbm5lY3QubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvd2Vic29ja2V0Lm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpLm1qcyIsICIuLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpL3dyaXRlZXJyb3IubWpzIiwgIi4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3Jlc3RhcGkvZGF0YS1mZXRjaC1lcnJvci5tanMiLCAiLi4vY2FzZXMvZGF0YS9kYXRhc291cmNlL3NlcnZlci9yZXN0YXBpLm1qcyIsICIuLi9jYXNlcy9kYXRhL2RhdGFzb3VyY2UubWpzIiwgIi4uL2Nhc2VzL2RhdGEvYnVpbGRtYXAubWpzIiwgIi4uL2Nhc2VzL2RhdGEvdHJhbnNmb3JtZXIubWpzIiwgIi4uL2Nhc2VzL2RhdGEvZGlmZi5tanMiLCAiLi4vY2FzZXMvZGF0YS9idWlsZHRyZWUubWpzIiwgIi4uL2Nhc2VzL2RhdGEvcGF0aGZpbmRlci5tanMiLCAiLi4vY2FzZXMvZGF0YS9waXBlLm1qcyIsICIuLi9jYXNlcy9kYXRhL2V4dGVuZC5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2Fic3RyYWN0Lm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaW52YWxpZC5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9pbnZhbGlkLm1qcyIsICIuLi9jYXNlcy9jb25zdHJhaW50L2Fic3RyYWN0b3BlcmF0b3IubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9hYnN0cmFjdG9wZXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvdmFsaWQubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9vcm9wZXJhdG9yLm1qcyIsICIuLi9jYXNlcy9jb25zdHJhaW50L29yb3BlcmF0b3IubWpzIiwgIi4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pc29iamVjdC5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9pc29iamVjdC5tanMiLCAiLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2FuZG9wZXJhdG9yLm1qcyIsICIuLi9jYXNlcy9jb25zdHJhaW50L2FuZG9wZXJhdG9yLm1qcyIsICIuLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaXNhcnJheS5tanMiLCAiLi4vY2FzZXMvY29uc3RyYWludC9pc2FycmF5Lm1qcyIsICIuLi9jYXNlcy9jb25zdHJhaW50L3ZhbGlkLm1qcyIsICIuLi9jYXNlcy90eXBlcy9ub2RlbGlzdC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvYmFzZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvbWVkaWF0eXBlLm1qcyIsICIuLi9jYXNlcy90eXBlcy90b2tlbmxpc3QubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3ZlcnNpb24ubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2dsb2JhbC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvb2JzZXJ2ZXJsaXN0Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9pbnRlcm5hbC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvb2JzZXJ2YWJsZXF1ZXVlLm1qcyIsICIuLi9jYXNlcy90eXBlcy9kYXRhdXJsLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvYmluYXJ5Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9iaW5hcnkubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL29ic2VydmVyLm1qcyIsICIuLi8uLi9zb3VyY2UvdHlwZXMvcmVnZXgubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3JlZ2V4Lm1qcyIsICIuLi9jYXNlcy90eXBlcy9yYW5kb21pZC5tanMiLCAiLi4vY2FzZXMvdHlwZXMvaWQubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL3V1aWQubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2lzLm1qcyIsICIuLi9jYXNlcy90eXBlcy92YWxpZGF0ZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvdHlwZW9mLm1qcyIsICIuLi9jYXNlcy90eXBlcy91bmlxdWVxdWV1ZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvc3RhY2subWpzIiwgIi4uL2Nhc2VzL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanMiLCAiLi4vY2FzZXMvdHlwZXMvbm9kZS5tanMiLCAiLi4vY2FzZXMvdHlwZXMvcXVldWUubWpzIiwgIi4uL2Nhc2VzL3R5cGVzL25vZGVyZWN1cnNpdmVpdGVyYXRvci5tanMiLCAiLi4vY2FzZXMvaTE4bi90aW1lLWFnby5tanMiLCAiLi4vLi4vc291cmNlL2kxOG4vZm9ybWF0dGVyLm1qcyIsICIuLi9jYXNlcy9pMThuL2Zvcm1hdHRlci5tanMiLCAiLi4vY2FzZXMvaTE4bi9sb2NhbGUubWpzIiwgIi4uL2Nhc2VzL2kxOG4vcHJvdmlkZXIubWpzIiwgIi4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVycy9mZXRjaC5tanMiLCAiLi4vY2FzZXMvaTE4bi9wcm92aWRlcnMvZmV0Y2gubWpzIiwgIi4uL2Nhc2VzL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qcyIsICIuLi9jYXNlcy9pMThuL3RyYW5zbGF0aW9ucy5tanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmV4cG9ydCB7XG5cdGludGVybmFsU3ltYm9sLFxuXHRpbnRlcm5hbFN0YXRlU3ltYm9sLFxuXHRpbnN0YW5jZVN5bWJvbCxcblx0cHJveHlJbnN0YW5jZU1hcmtlcixcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqL1xuY29uc3QgaW50ZXJuYWxTeW1ib2wgPSBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pbnRlcm5hbFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBpbnRlcm5hbFN0YXRlU3ltYm9sID0gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvc3RhdGVcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGluc3RhbmNlU3ltYm9sID0gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvaW5zdGFuY2VcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHByb3h5SW5zdGFuY2VNYXJrZXIgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvcHJveHktaW5zdGFuY2UtbWFya2VyXCIsXG4pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IHByb3h5SW5zdGFuY2VNYXJrZXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQge1xuXHRpc0l0ZXJhYmxlLFxuXHRpc1ByaW1pdGl2ZSxcblx0aXNTeW1ib2wsXG5cdGlzQm9vbGVhbixcblx0aXNTdHJpbmcsXG5cdGlzT2JqZWN0LFxuXHRpc0luc3RhbmNlLFxuXHRpc0FycmF5LFxuXHRpc0Z1bmN0aW9uLFxuXHRpc0ludGVnZXIsXG5cdGlzUHJveHksXG59O1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBQcm94eS5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNQcm94eSh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWU/Lltwcm94eUluc3RhbmNlTWFya2VyXSA9PT0gcHJveHlJbnN0YW5jZU1hcmtlcjtcbn1cblxuLyoqXG4gKiBXaXRoIHRoaXMgZnVuY3Rpb24geW91IGNhbiBjaGVjayBpZiBhIHZhbHVlIGlzIGl0ZXJhYmxlLlxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIFlvdSBjYW4gY2FsbCB0aGUgbWV0aG9kIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYE1vbnN0ZXIuVHlwZXMuaXNQcmltaXRpdmUoKWAuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTEubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGlzSXRlcmFibGUodmFsdWUpIHtcblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHJldHVybiB0eXBlb2YgdmFsdWU/LltTeW1ib2wuaXRlcmF0b3JdID09PSBcImZ1bmN0aW9uXCI7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZhbHVlIHBhc3NlZCBpcyBhIHByaW1pdGl2ZSAoc3RyaW5nLCBudW1iZXIsIGJvb2xlYW4sIE5hTiwgdW5kZWZpbmVkLCBudWxsIG9yIHN5bWJvbClcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtMi5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWUpIHtcblx0dmFyIHR5cGU7XG5cblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHR5cGUgPSB0eXBlb2YgdmFsdWU7XG5cblx0aWYgKFxuXHRcdHR5cGUgPT09IFwic3RyaW5nXCIgfHxcblx0XHR0eXBlID09PSBcIm51bWJlclwiIHx8XG5cdFx0dHlwZSA9PT0gXCJib29sZWFuXCIgfHxcblx0XHR0eXBlID09PSBcInN5bWJvbFwiXG5cdCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBzeW1ib2xcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtMy5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0cmV0dXJuIFwic3ltYm9sXCIgPT09IHR5cGVvZiB2YWx1ZSA/IHRydWUgOiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgYm9vbGVhbi5cbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtNC5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlKSB7XG5cdGlmICh2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gZmFsc2UpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgc3RyaW5nXG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTUubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgb2JqZWN0XG4gKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCBpbiB0aGUgbGlicmFyeSB0byBoYXZlIGNvbnNpc3RlbnQgbmFtZXMuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL2lzLTYubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG5cdGlmIChpc0FycmF5KHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoaXNQcmltaXRpdmUodmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYSBvYmplY3QgYW5kIGluc3RhbmNlIG9mIGluc3RhbmNlLlxuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gdGhlIGxpYnJhcnkgdG8gaGF2ZSBjb25zaXN0ZW50IG5hbWVzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy9pcy03Lm1qc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHsqfSBpbnN0YW5jZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBpc0luc3RhbmNlKHZhbHVlLCBpbnN0YW5jZSkge1xuXHRpZiAoIWlzT2JqZWN0KHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIWlzRnVuY3Rpb24oaW5zdGFuY2UpKSByZXR1cm4gZmFsc2U7XG5cdGlmICghaW5zdGFuY2UuaGFzT3duUHJvcGVydHkoXCJwcm90b3R5cGVcIikpIHJldHVybiBmYWxzZTtcblx0aWYgKHZhbHVlIGluc3RhbmNlb2YgaW5zdGFuY2UpIHJldHVybiB0cnVlO1xuXG5cdGxldCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG5cdHdoaWxlIChwcm90byAhPSBudWxsKSB7XG5cdFx0aWYgKHByb3RvID09PSBpbnN0YW5jZS5wcm90b3R5cGUpIHJldHVybiB0cnVlO1xuXHRcdHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgYXJyYXlcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtOC5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZGUvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvaXNBcnJheVxuICovXG5mdW5jdGlvbiBpc0FycmF5KHZhbHVlKSB7XG5cdHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciB0aGUgdmFsdWUgcGFzc2VkIGlzIGEgZnVuY3Rpb25cbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtOS5tanNcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuXHRpZiAoaXNBcnJheSh2YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0aWYgKGlzUHJpbWl0aXZlKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXG5cdGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHRoZSB2YWx1ZSBwYXNzZWQgaXMgYW4gaW50ZWdlci5cbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIHRoZSBsaWJyYXJ5IHRvIGhhdmUgY29uc2lzdGVudCBuYW1lcy5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvaXMtMTAubWpzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS40LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuXHRyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0aXNBcnJheSxcblx0aXNCb29sZWFuLFxuXHRpc0Z1bmN0aW9uLFxuXHRpc0luc3RhbmNlLFxuXHRpc0ludGVnZXIsXG5cdGlzSXRlcmFibGUsXG5cdGlzT2JqZWN0LFxuXHRpc1ByaW1pdGl2ZSxcblx0aXNTdHJpbmcsXG5cdGlzU3ltYm9sLFxufSBmcm9tIFwiLi9pcy5tanNcIjtcblxuZXhwb3J0IHtcblx0dmFsaWRhdGVJdGVyYWJsZSxcblx0dmFsaWRhdGVQcmltaXRpdmUsXG5cdHZhbGlkYXRlQm9vbGVhbixcblx0dmFsaWRhdGVTdHJpbmcsXG5cdHZhbGlkYXRlT2JqZWN0LFxuXHR2YWxpZGF0ZUluc3RhbmNlLFxuXHR2YWxpZGF0ZUFycmF5LFxuXHR2YWxpZGF0ZVN5bWJvbCxcblx0dmFsaWRhdGVGdW5jdGlvbixcblx0dmFsaWRhdGVJbnRlZ2VyLFxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgcHJpbWl0aXZlIHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzUHJpbWl0aXZlKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlSXRlcmFibGV9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUl0ZXJhYmxlKCcyJykpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUl0ZXJhYmxlKFtdKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHByaW1pdGl2ZVxuICogQHNlZSB7QGxpbmsgaXNQcmltaXRpdmV9XG4gKiBAc2VlIHtAbGluayBNb25zdGVyLlR5cGVzLmlzUHJpbWl0aXZlfVxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5UeXBlcyNpc1ByaW1pdGl2ZX1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVJdGVyYWJsZSh2YWx1ZSkge1xuXHRpZiAoIWlzSXRlcmFibGUodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBpdGVyYWJsZVwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIHByaW1pdGl2ZSB0eXBlLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc1ByaW1pdGl2ZSgpIGV4Y2VwdCB0aGF0IGEgVHlwZUVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZVByaW1pdGl2ZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlUHJpbWl0aXZlKCcyJykpICAvLyBcdTIxQTYgdmFsdWVcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlUHJpbWl0aXZlKFtdKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBwcmltaXRpdmVcbiAqIEBzZWUge0BsaW5rIGlzUHJpbWl0aXZlfVxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5UeXBlcy5pc1ByaW1pdGl2ZX1cbiAqIEBzZWUge0BsaW5rIE1vbnN0ZXIuVHlwZXMjaXNQcmltaXRpdmV9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUHJpbWl0aXZlKHZhbHVlKSB7XG5cdGlmICghaXNQcmltaXRpdmUodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhIHByaW1pdGl2ZVwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIGJvb2xlYW4gdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNCb29sZWFuKCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlQm9vbGVhbn0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQm9vbGVhbihmYWxzZSkpICAvLyBcdTIxQTYgdmFsdWVcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQm9vbGVhbignMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVCb29sZWFuKFtdKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9ICB2YWx1ZSBpcyBub3QgcHJpbWl0aXZlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQm9vbGVhbih2YWx1ZSkge1xuXHRpZiAoIWlzQm9vbGVhbih2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGEgYm9vbGVhblwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIHN0cmluZyB0eXBlLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc1N0cmluZygpIGV4Y2VwdCB0aGF0IGEgVHlwZUVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHt2YWxpZGF0ZVN0cmluZ30gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlU3RyaW5nKCcyJykpICAvLyBcdTIxQTYgdmFsdWVcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlU3RyaW5nKFtdKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTdHJpbmcodmFsdWUpIHtcblx0aWYgKCFpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGEgc3RyaW5nXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgb2JqZWN0IHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzT2JqZWN0KCkgZXhjZXB0IHRoYXQgYSBUeXBlRXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3ZhbGlkYXRlT2JqZWN0fSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy92YWxpZGF0ZS5tanMnO1xuICogY29uc29sZS5sb2codmFsaWRhdGVPYmplY3Qoe30pKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZU9iamVjdCgnMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVPYmplY3QoW10pKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZU9iamVjdCh2YWx1ZSkge1xuXHRpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYSBvYmplY3RcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBvYmplY3QgaW5zdGFuY2UuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVJbnN0YW5jZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW5zdGFuY2Uoe30sIE9iamVjdCkpIC8vIFx1MjFBNiB2YWx1ZVxuICogY29uc29sZS5sb2codmFsaWRhdGVJbnN0YW5jZSgnMicsIE9iamVjdCkpIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW5zdGFuY2UoW10sIE9iamVjdCkpIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IGluc3RhbmNlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUluc3RhbmNlKHZhbHVlLCBpbnN0YW5jZSkge1xuXHRpZiAoIWlzSW5zdGFuY2UodmFsdWUsIGluc3RhbmNlKSkge1xuXHRcdGxldCBuID0gXCJcIjtcblx0XHRpZiAoaXNPYmplY3QoaW5zdGFuY2UpIHx8IGlzRnVuY3Rpb24oaW5zdGFuY2UpKSB7XG5cdFx0XHRuID0gaW5zdGFuY2U/LltcIm5hbWVcIl07XG5cdFx0fVxuXG5cdFx0aWYgKG4pIHtcblx0XHRcdG4gPSBgICR7bn1gO1xuXHRcdH1cblxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoYHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiR7bn1gKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIGFycmF5IHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzQXJyYXkoKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVBcnJheX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQXJyYXkoJzInKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlQXJyYXkoW10pKSAgLy8gXHUyMUE2IHZhbHVlXG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGFycmF5XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQXJyYXkodmFsdWUpIHtcblx0aWYgKCFpc0FycmF5KHZhbHVlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ2YWx1ZSBpcyBub3QgYW4gYXJyYXlcIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBtYXRjaGVzIHRoZSBzeW1ib2wgdHlwZS4gdGhpcyBmdW5jdGlvbiBpcyBpZGVudGljYWwgdG8gaXNTeW1ib2woKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVTeW1ib2x9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qcyc7XG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZVN5bWJvbCgnMicpKSAgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVTeW1ib2woKSkgIC8vIFx1MjFBNiB2YWx1ZVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBzeW1ib2xcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTeW1ib2wodmFsdWUpIHtcblx0aWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGFuIHN5bWJvbFwiKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2hlY2tzIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIGZ1bmN0aW9uIHR5cGUuIHRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIGlzRnVuY3Rpb24oKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVGdW5jdGlvbn0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlRnVuY3Rpb24oKCk9Pnt9KSkgLy8gXHUyMUE2IHZhbHVlXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUZ1bmN0aW9uKCcyJykpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUZ1bmN0aW9uKFtdKSkgIC8vIFx1MjFBNiBUeXBlRXJyb3JcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uKHZhbHVlKSB7XG5cdGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cIik7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdHlwZSBpcyBhbiBpbnRlZ2VyLiB0aGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byBpc0ludGVnZXIoKSBleGNlcHQgdGhhdCBhIFR5cGVFcnJvciBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7dmFsaWRhdGVGdW5jdGlvbn0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzJztcbiAqIGNvbnNvbGUubG9nKHZhbGlkYXRlSW50ZWdlcih0cnVlKSkgLy8gXHUyMUE2IFR5cGVFcnJvclxuICogY29uc29sZS5sb2codmFsaWRhdGVJbnRlZ2VyKCcyJykpICAvLyBcdTIxQTYgVHlwZUVycm9yXG4gKiBjb25zb2xlLmxvZyh2YWxpZGF0ZUludGVnZXIoMikpICAvLyBcdTIxQTYgdmFsdWVcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUludGVnZXIodmFsdWUpIHtcblx0aWYgKCFpc0ludGVnZXIodmFsdWUpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXCIpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHR2YWxpZGF0ZUZ1bmN0aW9uLFxuXHR2YWxpZGF0ZU9iamVjdCxcblx0dmFsaWRhdGVTdHJpbmcsXG59IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBnZXRHbG9iYWwsIGdldEdsb2JhbE9iamVjdCwgZ2V0R2xvYmFsRnVuY3Rpb24gfTtcblxuLyoqXG4gKiBAdHlwZSB7b2JqZWN0fVxuICogQHByaXZhdGVcbiAqL1xubGV0IGdsb2JhbFJlZmVyZW5jZTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGVudmlyb25tZW50LlxuICovXG4oZnVuY3Rpb24gKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09IFwib2JqZWN0XCIpIHtcblx0XHRnbG9iYWxSZWZlcmVuY2UgPSBnbG9iYWxUaGlzO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdGdsb2JhbFJlZmVyZW5jZSA9IHNlbGY7XG5cdFx0cmV0dXJuO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRnbG9iYWxSZWZlcmVuY2UgPSB3aW5kb3c7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdC5wcm90b3R5cGUsIFwiX19tb25zdGVyX19cIiwge1xuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fSxcblx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdH0pO1xuXG5cdGlmICh0eXBlb2YgX19tb25zdGVyX18gPT09IFwib2JqZWN0XCIpIHtcblx0XHRfX21vbnN0ZXJfXy5nbG9iYWxUaGlzID0gX19tb25zdGVyX187XG5cdFx0ZGVsZXRlIE9iamVjdC5wcm90b3R5cGUuX19tb25zdGVyX187XG5cblx0XHRnbG9iYWxSZWZlcmVuY2UgPSBnbG9iYWxUaGlzO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRyeSB7XG5cdFx0Z2xvYmFsUmVmZXJlbmNlID0gRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xuXHR9IGNhdGNoIChlKSB7fVxuXG5cdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGVudmlyb25tZW50LlwiKTtcbn0pKCk7XG5cbi8qKlxuICogUmV0dXJuIGdsb2JhbFRoaXNcbiAqXG4gKiBJZiBnbG9iYWxUaGlzIGlzIG5vdCBhdmFpbGFibGUsIGl0IHdpbGwgYmUgcG9seWZpbGxlZFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAcmV0dXJuIHtvYmplY3R9IGdsb2JhbFRoaXNcbiAqL1xuZnVuY3Rpb24gZ2V0R2xvYmFsKCkge1xuXHRyZXR1cm4gZ2xvYmFsUmVmZXJlbmNlO1xufVxuXG4vKipcbiAqIFJldHVybiBnbG9iYWwgb2JqZWN0IG9yIHRocm93IEVycm9yXG4gKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy5nZXRHbG9iYWxPYmplY3QoKWAuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7TW9uc3Rlcn0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvbW9uc3Rlci5tanMnO1xuICogTW9uc3Rlci5UeXBlcy5nZXRHbG9iYWxPYmplY3QoJ2RvY3VtZW50JylcbiAqIC8vIFx1MjFBNiB7IH1cbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhbHNvIGludGVncmF0ZSB0aGlzIGZ1bmN0aW9uIGluZGl2aWR1YWxseS5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtnZXRHbG9iYWxPYmplY3R9IGZyb20gJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQHNjaHVrYWkvbW9uc3RlckAxLjMwLjAvZGlzdC9tb2R1bGVzL3R5cGVzL2dsb2JhbC5tanMnO1xuICogZ2V0R2xvYmFsT2JqZWN0KCdkb2N1bWVudCcpXG4gKiAvLyBcdTIxQTYgeyB9XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybiB7b2JqZWN0fVxuICogQHRocm93cyB7RXJyb3J9IHRoZSBvYmplY3QgaXMgbm90IGRlZmluZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRHbG9iYWxPYmplY3QobmFtZSkge1xuXHR2YWxpZGF0ZVN0cmluZyhuYW1lKTtcblx0Y29uc3QgbyA9IGdsb2JhbFJlZmVyZW5jZT8uW25hbWVdO1xuXHRpZiAodHlwZW9mIG8gPT09IFwidW5kZWZpbmVkXCIpXG5cdFx0dGhyb3cgbmV3IEVycm9yKGB0aGUgb2JqZWN0ICR7bmFtZX0gaXMgbm90IGRlZmluZWRgKTtcblx0dmFsaWRhdGVPYmplY3Qobyk7XG5cdHJldHVybiBvO1xufVxuXG4vKipcbiAqIFJldHVybiBnbG9iYWwgZnVuY3Rpb24gb3IgdGhyb3cgRXJyb3JcbiAqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIG1ldGhvZCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLlR5cGVzLmdldEdsb2JhbEZ1bmN0aW9uKClgLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge01vbnN0ZXJ9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL21vbnN0ZXIubWpzJztcbiAqIGNvbnNvbGUubG9nKE1vbnN0ZXIuVHlwZXMuZ2V0R2xvYmFsRnVuY3Rpb24oJ3BhcnNlSW50JykpIC8vIFx1MjFBNiBmIHBhcnNlSW50KCkgeyB9XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWxzbyBpbnRlZ3JhdGUgdGhpcyBmdW5jdGlvbiBpbmRpdmlkdWFsbHkuXG4gKlxuICogYGBgXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7Z2V0R2xvYmFsRnVuY3Rpb259IGZyb20gJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQHNjaHVrYWkvbW9uc3RlckAxLjMwLjAvZGlzdC9tb2R1bGVzL3R5cGVzL2dsb2JhbC5tanMnO1xuICogY29uc29sZS5sb2coZ2V0R2xvYmFsRnVuY3Rpb24oJ3BhcnNlSW50JykpIC8vIFx1MjFBNiBmIHBhcnNlSW50KCkgeyB9XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHJldHVybiB7b2JqZWN0fVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuICogQHRocm93cyB7RXJyb3J9IHRoZSBmdW5jdGlvbiBpcyBub3QgZGVmaW5lZFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0R2xvYmFsRnVuY3Rpb24obmFtZSkge1xuXHR2YWxpZGF0ZVN0cmluZyhuYW1lKTtcblx0Y29uc3QgZiA9IGdsb2JhbFJlZmVyZW5jZT8uW25hbWVdO1xuXHRpZiAodHlwZW9mIGYgPT09IFwidW5kZWZpbmVkXCIpXG5cdFx0dGhyb3cgbmV3IEVycm9yKGB0aGUgZnVuY3Rpb24gJHtuYW1lfSBpcyBub3QgZGVmaW5lZGApO1xuXHR2YWxpZGF0ZUZ1bmN0aW9uKGYpO1xuXHRyZXR1cm4gZjtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5leHBvcnQgeyB0eXBlT2YgfTtcblxuLyoqXG4gKiBUaGUgYnVpbHQtaW4gdHlwZW9mIG1ldGhvZCBpcyBrbm93biB0byBoYXZlIHNvbWUgaGlzdG9yaWNhbCB3ZWFrbmVzc2VzLiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIHByb3ZpZGUgYSBiZXR0ZXIgYW5kIG1vcmUgYWNjdXJhdGUgcmVzdWx0LlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBwcmltaXRpdmVcbiAqL1xuZnVuY3Rpb24gdHlwZU9mKHZhbHVlKSB7XG5cdGxldCB0eXBlID0ge30udG9TdHJpbmcuY2FsbCh2YWx1ZSkubWF0Y2goL1xccyhbYS16QS1aXSspLylbMV07XG5cdGlmIChcIk9iamVjdFwiID09PSB0eXBlKSB7XG5cdFx0Y29uc3QgbmFtZSA9IHZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG5cdFx0aWYgKG5hbWUpIHtcblx0XHRcdHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVzdWx0cyA9IC9eKGNsYXNzfGZ1bmN0aW9uKVxccysoXFx3KykvLmV4ZWMoXG5cdFx0XHR2YWx1ZS5jb25zdHJ1Y3Rvci50b1N0cmluZygpLFxuXHRcdCk7XG5cdFx0dHlwZSA9IHJlc3VsdHMgJiYgcmVzdWx0cy5sZW5ndGggPiAyID8gcmVzdWx0c1syXSA6IFwiXCI7XG5cdH1cblxuXHRyZXR1cm4gdHlwZS50b0xvd2VyQ2FzZSgpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdHlwZU9mIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVvZi5tanNcIjtcblxuZXhwb3J0IHsgZXh0ZW5kIH07XG5cbi8qKlxuICogRXh0ZW5kIGNvcGllcyBhbGwgZW51bWVyYWJsZSBvd24gcHJvcGVydGllcyBmcm9tIG9uZSBvclxuICogbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhIHRhcmdldCBvYmplY3QuIEl0IHJldHVybnMgdGhlIG1vZGlmaWVkIHRhcmdldCBvYmplY3QuXG4gKlxuICogQHJldHVybiB7b2JqZWN0fVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFyZ3VtZW50XG4gKiBAdGhyb3dzIHtFcnJvcn0gdHlwZSBtaXNtYXRjaFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFyZ3VtZW50XG4gKiBAcGFyYW0gYXJnc1xuICovXG5mdW5jdGlvbiBleHRlbmQoLi4uYXJncykge1xuXHRsZXQgbztcblx0bGV0IGk7XG5cblx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGFyZ3VtZW50ICR7SlNPTi5zdHJpbmdpZnkoYXJnc1swXSl9YCk7XG5cdH1cblxuXHRmb3IgKGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGEgPSBhcmdzW2ldO1xuXG5cdFx0aWYgKCEoaXNPYmplY3QoYSkgfHwgaXNBcnJheShhKSkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgYXJndW1lbnQgJHtKU09OLnN0cmluZ2lmeShhKX1gKTtcblx0XHR9XG5cblx0XHRpZiAobyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvID0gYTtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgayBpbiBhKSB7XG5cdFx0XHRjb25zdCB2ID0gYT8uW2tdO1xuXG5cdFx0XHRpZiAoayBpbiBvICYmIHYgPT09IG8/LltrXSkge1xuXHRcdFx0XHQvLyBrIGluIG8gaXMgZm9yIHRoZSBjYXNlIG9mIHVuZGVmaW5lZFxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKChpc09iamVjdCh2KSAmJiB0eXBlT2YodikgPT09IFwib2JqZWN0XCIpIHx8IGlzQXJyYXkodikpIHtcblx0XHRcdFx0aWYgKG9ba10gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlmIChpc0FycmF5KHYpKSB7XG5cdFx0XHRcdFx0XHRvW2tdID0gW107XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG9ba10gPSB7fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVPZihvW2tdKSAhPT0gdHlwZU9mKHYpKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0XHRcdGB0eXBlIG1pc21hdGNoOiAke0pTT04uc3RyaW5naWZ5KG9ba10pfSgke3R5cGVPZihcblx0XHRcdFx0XHRcdFx0XHRvW2tdLFxuXHRcdFx0XHRcdFx0XHQpfSkgIT0gJHtKU09OLnN0cmluZ2lmeSh2KX0oJHt0eXBlT2Yodil9KWAsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChpc0FycmF5KG9ba10pKSB7XG5cdFx0XHRcdFx0b1trXSA9IFtdO1xuXHRcdFx0XHRcdG9ba10ucHVzaCguLi52KTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG9ba10gPSBleHRlbmQob1trXSwgdik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAoaXNBcnJheShvKSkge1xuXHRcdFx0XHRcdG8ucHVzaCh2KTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRvW2tdID0gdjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbztcbn1cbiIsICIvLyBodHRwOi8vd3d3LnJhamRlZXBkLmNvbS9hcnRpY2xlcy9jaHJvbWUvbG9jYWxzdHJnL0xvY2FsU3RvcmFnZVNhbXBsZS5odG1cblxuLy8gTk9URTpcbi8vIHRoaXMgdmFyaWVzIGZyb20gYWN0dWFsIGxvY2FsU3RvcmFnZSBpbiBzb21lIHN1YnRsZSB3YXlzXG5cbi8vIGFsc28sIHRoZXJlIGlzIG5vIHBlcnNpc3RlbmNlXG4vLyBUT0RPIHBlcnNpc3RcbihmdW5jdGlvbiAoKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5cbiAgZnVuY3Rpb24gU3RvcmFnZShwYXRoLCBvcHRzKSB7XG4gICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgdmFyIGRiO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfX19wcml2X2JrX19fJywge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgcGF0aDogcGF0aFxuICAgICAgfVxuICAgICwgd3JpdGFibGU6IGZhbHNlXG4gICAgLCBlbnVtZXJhYmxlOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfX19wcml2X3N0cmljdF9fXycsIHtcbiAgICAgIHZhbHVlOiAhIW9wdHMuc3RyaWN0XG4gICAgLCB3cml0YWJsZTogZmFsc2VcbiAgICAsIGVudW1lcmFibGU6IGZhbHNlXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19fX3ByaXZfd3NfX18nLCB7XG4gICAgICB2YWx1ZTogb3B0cy53cyB8fCAnICAnXG4gICAgLCB3cml0YWJsZTogZmFsc2VcbiAgICAsIGVudW1lcmFibGU6IGZhbHNlXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgZGIgPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYXRoKSk7XG4gICAgfSBjYXRjaChlKSB7XG4gICAgICBkYiA9IHt9O1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKGRiKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHRoaXNba2V5XSA9IGRiW2tleV07XG4gICAgfSwgdGhpcyk7XG4gIH1cblxuICBTdG9yYWdlLnByb3RvdHlwZS5nZXRJdGVtID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgIGlmICh0aGlzLl9fX3ByaXZfc3RyaWN0X19fKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcodGhpc1trZXldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIFN0b3JhZ2UucHJvdG90eXBlLnNldEl0ZW0gPSBmdW5jdGlvbiAoa2V5LCB2YWwpIHtcbiAgICBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXNba2V5XSA9IG51bGw7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9fX3ByaXZfc3RyaWN0X19fKSB7XG4gICAgICB0aGlzW2tleV0gPSBTdHJpbmcodmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trZXldID0gdmFsO1xuICAgIH1cbiAgICB0aGlzLl9fX3NhdmVfX18oKTtcbiAgfTtcblxuICBTdG9yYWdlLnByb3RvdHlwZS5yZW1vdmVJdGVtID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgdGhpcy5fX19zYXZlX19fKCk7XG4gIH07XG5cbiAgU3RvcmFnZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIC8vIGZpbHRlcnMgb3V0IHByb3RvdHlwZSBrZXlzXG4gICAgT2JqZWN0LmtleXMoc2VsZikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBzZWxmW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICBkZWxldGUgc2VsZltrZXldO1xuICAgIH0pO1xuICB9O1xuXG4gIFN0b3JhZ2UucHJvdG90eXBlLmtleSA9IGZ1bmN0aW9uIChpKSB7XG4gICAgaSA9IGkgfHwgMDtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcylbaV07XG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0b3JhZ2UucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcykubGVuZ3RoO1xuICAgIH1cbiAgfSk7XG5cbiAgU3RvcmFnZS5wcm90b3R5cGUuX19fc2F2ZV9fXyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBpZiAoIXRoaXMuX19fcHJpdl9ia19fXy5wYXRoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX19fcHJpdl9ia19fXy5sb2NrKSB7XG4gICAgICB0aGlzLl9fX3ByaXZfYmtfX18ud2FpdCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fX19wcml2X2JrX19fLmxvY2sgPSB0cnVlO1xuICAgIGZzLndyaXRlRmlsZShcbiAgICAgIHRoaXMuX19fcHJpdl9ia19fXy5wYXRoXG4gICAgLCBKU09OLnN0cmluZ2lmeSh0aGlzLCBudWxsLCB0aGlzLl9fX3ByaXZfd3NfX18pXG4gICAgLCAndXRmOCdcbiAgICAsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBzZWxmLl9fX3ByaXZfYmtfX18ubG9jayA9IGZhbHNlO1xuICAgICAgaWYgKGUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQ291bGQgbm90IHdyaXRlIHRvIGRhdGFiYXNlJywgc2VsZi5fX19wcml2X2JrX19fLnBhdGgpO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoc2VsZi5fX19wcml2X2JrX19fLndhaXQpIHtcbiAgICAgICAgc2VsZi5fX19wcml2X2JrX19fLndhaXQgPSBmYWxzZTtcbiAgICAgICAgc2VsZi5fX19zYXZlX19fKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0b3JhZ2UsICdjcmVhdGUnLCB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIChwYXRoLCBvcHRzKSB7XG4gICAgICByZXR1cm4gbmV3IFN0b3JhZ2UocGF0aCwgb3B0cyk7XG4gICAgfVxuICAsIHdyaXRhYmxlOiBmYWxzZVxuICAsIGVudW1lcmFibGU6IGZhbHNlXG4gIH0pO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gU3RvcmFnZTtcbn0oKSk7XG4iLCAiKGZ1bmN0aW9uIChleHBvcnRzKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgY29uc3QgcmVmTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCB2YWxpZGl0eU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgaGlkZGVuSW5wdXRNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IGludGVybmFsc01hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgdmFsaWRhdGlvbk1lc3NhZ2VNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IGZvcm1zTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCBzaGFkb3dIb3N0c01hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgZm9ybUVsZW1lbnRzTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBjb25zdCByZWZWYWx1ZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgdXBncmFkZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3Qgc2hhZG93Um9vdE1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgdmFsaWRhdGlvbkFuY2hvck1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgZG9jdW1lbnRGcmFnbWVudE1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgY29uc3QgY29ubmVjdGVkQ2FsbGJhY2tNYXAgPSBuZXcgV2Vha01hcCgpO1xuICAgIGNvbnN0IHZhbGlkaXR5VXBncmFkZU1hcCA9IG5ldyBXZWFrTWFwKCk7XG5cbiAgICBjb25zdCBhb20gPSB7XG4gICAgICAgIGFyaWFBdG9taWM6ICdhcmlhLWF0b21pYycsXG4gICAgICAgIGFyaWFBdXRvQ29tcGxldGU6ICdhcmlhLWF1dG9jb21wbGV0ZScsXG4gICAgICAgIGFyaWFCdXN5OiAnYXJpYS1idXN5JyxcbiAgICAgICAgYXJpYUNoZWNrZWQ6ICdhcmlhLWNoZWNrZWQnLFxuICAgICAgICBhcmlhQ29sQ291bnQ6ICdhcmlhLWNvbGNvdW50JyxcbiAgICAgICAgYXJpYUNvbEluZGV4OiAnYXJpYS1jb2xpbmRleCcsXG4gICAgICAgIGFyaWFDb2xJbmRleFRleHQ6ICdhcmlhLWNvbGluZGV4dGV4dCcsXG4gICAgICAgIGFyaWFDb2xTcGFuOiAnYXJpYS1jb2xzcGFuJyxcbiAgICAgICAgYXJpYUN1cnJlbnQ6ICdhcmlhLWN1cnJlbnQnLFxuICAgICAgICBhcmlhRGVzY3JpcHRpb246ICdhcmlhLWRlc2NyaXB0aW9uJyxcbiAgICAgICAgYXJpYURpc2FibGVkOiAnYXJpYS1kaXNhYmxlZCcsXG4gICAgICAgIGFyaWFFeHBhbmRlZDogJ2FyaWEtZXhwYW5kZWQnLFxuICAgICAgICBhcmlhSGFzUG9wdXA6ICdhcmlhLWhhc3BvcHVwJyxcbiAgICAgICAgYXJpYUhpZGRlbjogJ2FyaWEtaGlkZGVuJyxcbiAgICAgICAgYXJpYUludmFsaWQ6ICdhcmlhLWludmFsaWQnLFxuICAgICAgICBhcmlhS2V5U2hvcnRjdXRzOiAnYXJpYS1rZXlzaG9ydGN1dHMnLFxuICAgICAgICBhcmlhTGFiZWw6ICdhcmlhLWxhYmVsJyxcbiAgICAgICAgYXJpYUxldmVsOiAnYXJpYS1sZXZlbCcsXG4gICAgICAgIGFyaWFMaXZlOiAnYXJpYS1saXZlJyxcbiAgICAgICAgYXJpYU1vZGFsOiAnYXJpYS1tb2RhbCcsXG4gICAgICAgIGFyaWFNdWx0aUxpbmU6ICdhcmlhLW11bHRpbGluZScsXG4gICAgICAgIGFyaWFNdWx0aVNlbGVjdGFibGU6ICdhcmlhLW11bHRpc2VsZWN0YWJsZScsXG4gICAgICAgIGFyaWFPcmllbnRhdGlvbjogJ2FyaWEtb3JpZW50YXRpb24nLFxuICAgICAgICBhcmlhUGxhY2Vob2xkZXI6ICdhcmlhLXBsYWNlaG9sZGVyJyxcbiAgICAgICAgYXJpYVBvc0luU2V0OiAnYXJpYS1wb3NpbnNldCcsXG4gICAgICAgIGFyaWFQcmVzc2VkOiAnYXJpYS1wcmVzc2VkJyxcbiAgICAgICAgYXJpYVJlYWRPbmx5OiAnYXJpYS1yZWFkb25seScsXG4gICAgICAgIGFyaWFSZWxldmFudDogJ2FyaWEtcmVsZXZhbnQnLFxuICAgICAgICBhcmlhUmVxdWlyZWQ6ICdhcmlhLXJlcXVpcmVkJyxcbiAgICAgICAgYXJpYVJvbGVEZXNjcmlwdGlvbjogJ2FyaWEtcm9sZWRlc2NyaXB0aW9uJyxcbiAgICAgICAgYXJpYVJvd0NvdW50OiAnYXJpYS1yb3djb3VudCcsXG4gICAgICAgIGFyaWFSb3dJbmRleDogJ2FyaWEtcm93aW5kZXgnLFxuICAgICAgICBhcmlhUm93SW5kZXhUZXh0OiAnYXJpYS1yb3dpbmRleHRleHQnLFxuICAgICAgICBhcmlhUm93U3BhbjogJ2FyaWEtcm93c3BhbicsXG4gICAgICAgIGFyaWFTZWxlY3RlZDogJ2FyaWEtc2VsZWN0ZWQnLFxuICAgICAgICBhcmlhU2V0U2l6ZTogJ2FyaWEtc2V0c2l6ZScsXG4gICAgICAgIGFyaWFTb3J0OiAnYXJpYS1zb3J0JyxcbiAgICAgICAgYXJpYVZhbHVlTWF4OiAnYXJpYS12YWx1ZW1heCcsXG4gICAgICAgIGFyaWFWYWx1ZU1pbjogJ2FyaWEtdmFsdWVtaW4nLFxuICAgICAgICBhcmlhVmFsdWVOb3c6ICdhcmlhLXZhbHVlbm93JyxcbiAgICAgICAgYXJpYVZhbHVlVGV4dDogJ2FyaWEtdmFsdWV0ZXh0JyxcbiAgICAgICAgcm9sZTogJ3JvbGUnXG4gICAgfTtcbiAgICBjb25zdCBpbml0QW9tID0gKHJlZiwgaW50ZXJuYWxzKSA9PiB7XG4gICAgICAgIGZvciAobGV0IGtleSBpbiBhb20pIHtcbiAgICAgICAgICAgIGludGVybmFsc1trZXldID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBjbG9zdXJlVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IGFvbVtrZXldO1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGludGVybmFscywga2V5LCB7XG4gICAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xvc3VyZVZhbHVlO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsb3N1cmVWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVmLmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVNYXAuc2V0KHJlZiwgaW50ZXJuYWxzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGluaXROb2RlKG5vZGUpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gaW50ZXJuYWxzTWFwLmdldChub2RlKTtcbiAgICAgICAgY29uc3QgeyBmb3JtIH0gPSBpbnRlcm5hbHM7XG4gICAgICAgIGluaXRGb3JtKG5vZGUsIGZvcm0sIGludGVybmFscyk7XG4gICAgICAgIGluaXRMYWJlbHMobm9kZSwgaW50ZXJuYWxzLmxhYmVscyk7XG4gICAgfVxuICAgIGNvbnN0IHdhbGtGaWVsZHNldCA9IChub2RlLCBmaXJzdFJlbmRlciA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIobm9kZSwgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQsIHtcbiAgICAgICAgICAgIGFjY2VwdE5vZGUobm9kZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbHNNYXAuaGFzKG5vZGUpID9cbiAgICAgICAgICAgICAgICAgICAgTm9kZUZpbHRlci5GSUxURVJfQUNDRVBUIDogTm9kZUZpbHRlci5GSUxURVJfU0tJUDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBjdXJyZW50ID0gd2Fsa2VyLm5leHROb2RlKCk7XG4gICAgICAgIGNvbnN0IGlzQ2FsbE5lY2Vzc2FyeSA9ICghZmlyc3RSZW5kZXIgfHwgbm9kZS5kaXNhYmxlZCk7XG4gICAgICAgIHdoaWxlIChjdXJyZW50KSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudC5mb3JtRGlzYWJsZWRDYWxsYmFjayAmJiBpc0NhbGxOZWNlc3NhcnkpIHtcbiAgICAgICAgICAgICAgICBzZXREaXNhYmxlZChjdXJyZW50LCBub2RlLmRpc2FibGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnQgPSB3YWxrZXIubmV4dE5vZGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZGlzYWJsZWRPck5hbWVPYnNlcnZlckNvbmZpZyA9IHsgYXR0cmlidXRlczogdHJ1ZSwgYXR0cmlidXRlRmlsdGVyOiBbJ2Rpc2FibGVkJywgJ25hbWUnXSB9O1xuICAgIGNvbnN0IGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXIgPSBtdXRhdGlvbk9ic2VydmVyRXhpc3RzKCkgPyBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zTGlzdCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9uc0xpc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IG11dGF0aW9uLnRhcmdldDtcbiAgICAgICAgICAgIGlmIChtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09PSAnZGlzYWJsZWQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldC5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBzZXREaXNhYmxlZCh0YXJnZXQsIHRhcmdldC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXJnZXQubG9jYWxOYW1lID09PSAnZmllbGRzZXQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHdhbGtGaWVsZHNldCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lID09PSAnbmFtZScpIHtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZWZWYWx1ZU1hcC5nZXQodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxzLnNldEZvcm1WYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSkgOiB7fTtcbiAgICBmdW5jdGlvbiBvYnNlcnZlckNhbGxiYWNrKG11dGF0aW9uTGlzdCkge1xuICAgICAgICBtdXRhdGlvbkxpc3QuZm9yRWFjaChtdXRhdGlvblJlY29yZCA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGFkZGVkTm9kZXMsIHJlbW92ZWROb2RlcyB9ID0gbXV0YXRpb25SZWNvcmQ7XG4gICAgICAgICAgICBjb25zdCBhZGRlZCA9IEFycmF5LmZyb20oYWRkZWROb2Rlcyk7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkID0gQXJyYXkuZnJvbShyZW1vdmVkTm9kZXMpO1xuICAgICAgICAgICAgYWRkZWQuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgaWYgKGludGVybmFsc01hcC5oYXMobm9kZSkgJiYgbm9kZS5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSkge1xuICAgICAgICAgICAgICAgICAgICBpbml0Tm9kZShub2RlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHVwZ3JhZGVNYXAuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IHVwZ3JhZGVNYXAuZ2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhb21LZXlzID0gT2JqZWN0LmtleXMoYW9tKTtcbiAgICAgICAgICAgICAgICAgICAgYW9tS2V5c1xuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihrZXkgPT4gaW50ZXJuYWxzW2tleV0gIT09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYW9tW2tleV0sIGludGVybmFsc1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVNYXAuZGVsZXRlKG5vZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodmFsaWRpdHlVcGdyYWRlTWFwLmhhcyhub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSB2YWxpZGl0eVVwZ3JhZGVNYXAuZ2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnaW50ZXJuYWxzLXZhbGlkJywgaW50ZXJuYWxzLnZhbGlkaXR5LnZhbGlkLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnaW50ZXJuYWxzLWludmFsaWQnLCAoIWludGVybmFscy52YWxpZGl0eS52YWxpZCkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdhcmlhLWludmFsaWQnLCAoIWludGVybmFscy52YWxpZGl0eS52YWxpZCkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkaXR5VXBncmFkZU1hcC5kZWxldGUobm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChub2RlLmxvY2FsTmFtZSA9PT0gJ2Zvcm0nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1FbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIobm9kZSwgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdE5vZGUobm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaW50ZXJuYWxzTWFwLmhhcyhub2RlKSAmJiBub2RlLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddICYmICEoZm9ybUVsZW1lbnRzICYmIGZvcm1FbGVtZW50cy5oYXMobm9kZSkpKSA/IE5vZGVGaWx0ZXIuRklMVEVSX0FDQ0VQVCA6IE5vZGVGaWx0ZXIuRklMVEVSX1NLSVA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudCA9IHdhbGtlci5uZXh0Tm9kZSgpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdE5vZGUoY3VycmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gd2Fsa2VyLm5leHROb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWxOYW1lID09PSAnZmllbGRzZXQnKSB7XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXIub2JzZXJ2ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwoZGlzYWJsZWRPck5hbWVPYnNlcnZlciwgbm9kZSwgZGlzYWJsZWRPck5hbWVPYnNlcnZlckNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIHdhbGtGaWVsZHNldChub2RlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlbW92ZWQuZm9yRWFjaChub2RlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbHMgPSBpbnRlcm5hbHNNYXAuZ2V0KG5vZGUpO1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHMgJiYgaGlkZGVuSW5wdXRNYXAuZ2V0KGludGVybmFscykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlSGlkZGVuSW5wdXRzKGludGVybmFscyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzaGFkb3dIb3N0c01hcC5oYXMobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBzaGFkb3dIb3N0c01hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZyYWdtZW50T2JzZXJ2ZXJDYWxsYmFjayhtdXRhdGlvbkxpc3QpIHtcbiAgICAgICAgbXV0YXRpb25MaXN0LmZvckVhY2gobXV0YXRpb24gPT4ge1xuICAgICAgICAgICAgY29uc3QgeyByZW1vdmVkTm9kZXMgfSA9IG11dGF0aW9uO1xuICAgICAgICAgICAgcmVtb3ZlZE5vZGVzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBkb2N1bWVudEZyYWdtZW50TWFwLmdldChtdXRhdGlvbi50YXJnZXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHNNYXAuaGFzKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZ3JhZGVJbnRlcm5hbHMobm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgZGVmZXJVcGdyYWRlID0gKGZyYWdtZW50KSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnJhZ21lbnRPYnNlcnZlckNhbGxiYWNrKTtcbiAgICAgICAgaWYgKCgoX2EgPSB3aW5kb3cgPT09IG51bGwgfHwgd2luZG93ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aW5kb3cuU2hhZHlET00pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pblVzZSkgJiZcbiAgICAgICAgICAgIGZyYWdtZW50Lm1vZGUgJiZcbiAgICAgICAgICAgIGZyYWdtZW50Lmhvc3QpIHtcbiAgICAgICAgICAgIGZyYWdtZW50ID0gZnJhZ21lbnQuaG9zdDtcbiAgICAgICAgfVxuICAgICAgICAoX2IgPSBvYnNlcnZlci5vYnNlcnZlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChvYnNlcnZlciwgZnJhZ21lbnQsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICAgICAgICBkb2N1bWVudEZyYWdtZW50TWFwLnNldChmcmFnbWVudCwgb2JzZXJ2ZXIpO1xuICAgIH07XG4gICAgbXV0YXRpb25PYnNlcnZlckV4aXN0cygpID8gbmV3IE11dGF0aW9uT2JzZXJ2ZXIob2JzZXJ2ZXJDYWxsYmFjaykgOiB7fTtcbiAgICBjb25zdCBvYnNlcnZlckNvbmZpZyA9IHtcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfTtcblxuICAgIGNvbnN0IHNldERpc2FibGVkID0gKHJlZiwgZGlzYWJsZWQpID0+IHtcbiAgICAgICAgcmVmLnRvZ2dsZUF0dHJpYnV0ZSgnaW50ZXJuYWxzLWRpc2FibGVkJywgZGlzYWJsZWQpO1xuICAgICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVmLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWYuZm9ybURpc2FibGVkQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJlZi5mb3JtRGlzYWJsZWRDYWxsYmFjay5hcHBseShyZWYsIFtkaXNhYmxlZF0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW1vdmVIaWRkZW5JbnB1dHMgPSAoaW50ZXJuYWxzKSA9PiB7XG4gICAgICAgIGNvbnN0IGhpZGRlbklucHV0cyA9IGhpZGRlbklucHV0TWFwLmdldChpbnRlcm5hbHMpO1xuICAgICAgICBoaWRkZW5JbnB1dHMuZm9yRWFjaChoaWRkZW5JbnB1dCA9PiB7XG4gICAgICAgICAgICBoaWRkZW5JbnB1dC5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGhpZGRlbklucHV0TWFwLnNldChpbnRlcm5hbHMsIFtdKTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZUhpZGRlbklucHV0ID0gKHJlZiwgaW50ZXJuYWxzKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgaW5wdXQudHlwZSA9ICdoaWRkZW4nO1xuICAgICAgICBpbnB1dC5uYW1lID0gcmVmLmdldEF0dHJpYnV0ZSgnbmFtZScpO1xuICAgICAgICByZWYuYWZ0ZXIoaW5wdXQpO1xuICAgICAgICBoaWRkZW5JbnB1dE1hcC5nZXQoaW50ZXJuYWxzKS5wdXNoKGlucHV0KTtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH07XG4gICAgY29uc3QgaW5pdFJlZiA9IChyZWYsIGludGVybmFscykgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGhpZGRlbklucHV0TWFwLnNldChpbnRlcm5hbHMsIFtdKTtcbiAgICAgICAgKF9hID0gZGlzYWJsZWRPck5hbWVPYnNlcnZlci5vYnNlcnZlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChkaXNhYmxlZE9yTmFtZU9ic2VydmVyLCByZWYsIGRpc2FibGVkT3JOYW1lT2JzZXJ2ZXJDb25maWcpO1xuICAgIH07XG4gICAgY29uc3QgaW5pdExhYmVscyA9IChyZWYsIGxhYmVscykgPT4ge1xuICAgICAgICBpZiAobGFiZWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgQXJyYXkuZnJvbShsYWJlbHMpLmZvckVhY2gobGFiZWwgPT4gbGFiZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZWYuY2xpY2suYmluZChyZWYpKSk7XG4gICAgICAgICAgICBsZXQgZmlyc3RMYWJlbElkID0gbGFiZWxzWzBdLmlkO1xuICAgICAgICAgICAgaWYgKCFsYWJlbHNbMF0uaWQpIHtcbiAgICAgICAgICAgICAgICBmaXJzdExhYmVsSWQgPSBgJHtsYWJlbHNbMF0uaHRtbEZvcn1fTGFiZWxgO1xuICAgICAgICAgICAgICAgIGxhYmVsc1swXS5pZCA9IGZpcnN0TGFiZWxJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlZi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIGZpcnN0TGFiZWxJZCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHNldEZvcm1WYWxpZGl0eSA9IChmb3JtKSA9PiB7XG4gICAgICAgIGNvbnN0IG5hdGl2ZUNvbnRyb2xWYWxpZGl0eSA9IEFycmF5LmZyb20oZm9ybS5lbGVtZW50cylcbiAgICAgICAgICAgIC5maWx0ZXIoKGVsZW1lbnQpID0+ICFlbGVtZW50LnRhZ05hbWUuaW5jbHVkZXMoJy0nKSAmJiBlbGVtZW50LnZhbGlkaXR5KVxuICAgICAgICAgICAgLm1hcCgoZWxlbWVudCkgPT4gZWxlbWVudC52YWxpZGl0eS52YWxpZCk7XG4gICAgICAgIGNvbnN0IHBvbHlmaWxsZWRFbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQoZm9ybSkgfHwgW107XG4gICAgICAgIGNvbnN0IHBvbHlmaWxsZWRWYWxpZGl0eSA9IEFycmF5LmZyb20ocG9seWZpbGxlZEVsZW1lbnRzKVxuICAgICAgICAgICAgLmZpbHRlcihjb250cm9sID0+IGNvbnRyb2wuaXNDb25uZWN0ZWQpXG4gICAgICAgICAgICAubWFwKChjb250cm9sKSA9PiBpbnRlcm5hbHNNYXAuZ2V0KGNvbnRyb2wpLnZhbGlkaXR5LnZhbGlkKTtcbiAgICAgICAgY29uc3QgaGFzSW52YWxpZCA9IFsuLi5uYXRpdmVDb250cm9sVmFsaWRpdHksIC4uLnBvbHlmaWxsZWRWYWxpZGl0eV0uaW5jbHVkZXMoZmFsc2UpO1xuICAgICAgICBmb3JtLnRvZ2dsZUF0dHJpYnV0ZSgnaW50ZXJuYWxzLWludmFsaWQnLCBoYXNJbnZhbGlkKTtcbiAgICAgICAgZm9ybS50b2dnbGVBdHRyaWJ1dGUoJ2ludGVybmFscy12YWxpZCcsICFoYXNJbnZhbGlkKTtcbiAgICB9O1xuICAgIGNvbnN0IGZvcm1JbnB1dENhbGxiYWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHNldEZvcm1WYWxpZGl0eShmaW5kUGFyZW50Rm9ybShldmVudC50YXJnZXQpKTtcbiAgICB9O1xuICAgIGNvbnN0IGZvcm1DaGFuZ2VDYWxsYmFjayA9IChldmVudCkgPT4ge1xuICAgICAgICBzZXRGb3JtVmFsaWRpdHkoZmluZFBhcmVudEZvcm0oZXZlbnQudGFyZ2V0KSk7XG4gICAgfTtcbiAgICBjb25zdCB3aXJlU3VibWl0TG9naWMgPSAoZm9ybSkgPT4ge1xuICAgICAgICBjb25zdCBzdWJtaXRCdXR0b25TZWxlY3RvciA9IFsnYnV0dG9uW3R5cGU9c3VibWl0XScsICdpbnB1dFt0eXBlPXN1Ym1pdF0nLCAnYnV0dG9uOm5vdChbdHlwZV0pJ11cbiAgICAgICAgICAgIC5tYXAoc2VsID0+IGAke3NlbH06bm90KFtkaXNhYmxlZF0pYClcbiAgICAgICAgICAgIC5tYXAoc2VsID0+IGAke3NlbH06bm90KFtmb3JtXSkke2Zvcm0uaWQgPyBgLCR7c2VsfVtmb3JtPScke2Zvcm0uaWR9J11gIDogJyd9YClcbiAgICAgICAgICAgIC5qb2luKCcsJyk7XG4gICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBldmVudCA9PiB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgICAgICBpZiAodGFyZ2V0LmNsb3Nlc3Qoc3VibWl0QnV0dG9uU2VsZWN0b3IpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBmb3JtRWxlbWVudHNNYXAuZ2V0KGZvcm0pO1xuICAgICAgICAgICAgICAgIGlmIChmb3JtLm5vVmFsaWRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudHMuc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IEFycmF5LmZyb20oZWxlbWVudHMpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGl0eUxpc3QgPSBub2Rlc1xuICAgICAgICAgICAgICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChub2RlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxzLnJlcG9ydFZhbGlkaXR5KCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRpdHlMaXN0LmluY2x1ZGVzKGZhbHNlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBmb3JtUmVzZXRDYWxsYmFjayA9IChldmVudCkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IGZvcm1FbGVtZW50c01hcC5nZXQoZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgaWYgKGVsZW1lbnRzICYmIGVsZW1lbnRzLnNpemUpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuY29uc3RydWN0b3IuZm9ybUFzc29jaWF0ZWQgJiYgZWxlbWVudC5mb3JtUmVzZXRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZvcm1SZXNldENhbGxiYWNrLmFwcGx5KGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBpbml0Rm9ybSA9IChyZWYsIGZvcm0sIGludGVybmFscykgPT4ge1xuICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgY29uc3QgZm9ybUVsZW1lbnRzID0gZm9ybUVsZW1lbnRzTWFwLmdldChmb3JtKTtcbiAgICAgICAgICAgIGlmIChmb3JtRWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBmb3JtRWxlbWVudHMuYWRkKHJlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbml0U2V0ID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgICAgIGluaXRTZXQuYWRkKHJlZik7XG4gICAgICAgICAgICAgICAgZm9ybUVsZW1lbnRzTWFwLnNldChmb3JtLCBpbml0U2V0KTtcbiAgICAgICAgICAgICAgICB3aXJlU3VibWl0TG9naWMoZm9ybSk7XG4gICAgICAgICAgICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCdyZXNldCcsIGZvcm1SZXNldENhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZm9ybUlucHV0Q2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgZm9ybUNoYW5nZUNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvcm1zTWFwLnNldChmb3JtLCB7IHJlZiwgaW50ZXJuYWxzIH0pO1xuICAgICAgICAgICAgaWYgKHJlZi5jb25zdHJ1Y3RvclsnZm9ybUFzc29jaWF0ZWQnXSAmJiByZWYuZm9ybUFzc29jaWF0ZWRDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWYuZm9ybUFzc29jaWF0ZWRDYWxsYmFjay5hcHBseShyZWYsIFtmb3JtXSk7XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRGb3JtVmFsaWRpdHkoZm9ybSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZpbmRQYXJlbnRGb3JtID0gKGVsZW0pID0+IHtcbiAgICAgICAgbGV0IHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcbiAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQudGFnTmFtZSAhPT0gJ0ZPUk0nKSB7XG4gICAgICAgICAgICBwYXJlbnQgPSBmaW5kUGFyZW50Rm9ybShwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfTtcbiAgICBjb25zdCB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQgPSAocmVmLCBtZXNzYWdlLCBFcnJvclR5cGUgPSBET01FeGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKCFyZWYuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvclR5cGUobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG92ZXJyaWRlRm9ybU1ldGhvZCA9IChmb3JtLCByZXR1cm5WYWx1ZSwgbWV0aG9kKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZm9ybUVsZW1lbnRzTWFwLmdldChmb3JtKTtcbiAgICAgICAgaWYgKGVsZW1lbnRzICYmIGVsZW1lbnRzLnNpemUpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxzID0gaW50ZXJuYWxzTWFwLmdldChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZCA9IGludGVybmFsc1ttZXRob2RdKCk7XG4gICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICB9O1xuICAgIGNvbnN0IHVwZ3JhZGVJbnRlcm5hbHMgPSAocmVmKSA9PiB7XG4gICAgICAgIGlmIChyZWYuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10pIHtcbiAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGludGVybmFsc01hcC5nZXQocmVmKTtcbiAgICAgICAgICAgIGNvbnN0IHsgbGFiZWxzLCBmb3JtIH0gPSBpbnRlcm5hbHM7XG4gICAgICAgICAgICBpbml0TGFiZWxzKHJlZiwgbGFiZWxzKTtcbiAgICAgICAgICAgIGluaXRGb3JtKHJlZiwgZm9ybSwgaW50ZXJuYWxzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZnVuY3Rpb24gbXV0YXRpb25PYnNlcnZlckV4aXN0cygpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBNdXRhdGlvbk9ic2VydmVyICE9PSAndW5kZWZpbmVkJztcbiAgICB9XG5cbiAgICBjbGFzcyBWYWxpZGl0eVN0YXRlIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICB0aGlzLmJhZElucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbUVycm9yID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnBhdHRlcm5NaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yYW5nZU92ZXJmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJhbmdlVW5kZXJmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnN0ZXBNaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50b29Mb25nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRvb1Nob3J0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnR5cGVNaXNtYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy52YWxpZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnZhbHVlTWlzc2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgT2JqZWN0LnNlYWwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc2V0VmFsaWQgPSAodmFsaWRpdHlPYmplY3QpID0+IHtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QuYmFkSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QuY3VzdG9tRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QucGF0dGVybk1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnJhbmdlT3ZlcmZsb3cgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QucmFuZ2VVbmRlcmZsb3cgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3Quc3RlcE1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnRvb0xvbmcgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudG9vU2hvcnQgPSBmYWxzZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudHlwZU1pc21hdGNoID0gZmFsc2U7XG4gICAgICAgIHZhbGlkaXR5T2JqZWN0LnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgdmFsaWRpdHlPYmplY3QudmFsdWVNaXNzaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiB2YWxpZGl0eU9iamVjdDtcbiAgICB9O1xuICAgIGNvbnN0IHJlY29uY2lsZVZhbGlkaXR5ID0gKHZhbGlkaXR5T2JqZWN0LCBuZXdTdGF0ZSwgZm9ybSkgPT4ge1xuICAgICAgICB2YWxpZGl0eU9iamVjdC52YWxpZCA9IGlzVmFsaWQobmV3U3RhdGUpO1xuICAgICAgICBPYmplY3Qua2V5cyhuZXdTdGF0ZSkuZm9yRWFjaChrZXkgPT4gdmFsaWRpdHlPYmplY3Rba2V5XSA9IG5ld1N0YXRlW2tleV0pO1xuICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgc2V0Rm9ybVZhbGlkaXR5KGZvcm0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZGl0eU9iamVjdDtcbiAgICB9O1xuICAgIGNvbnN0IGlzVmFsaWQgPSAodmFsaWRpdHlTdGF0ZSkgPT4ge1xuICAgICAgICBsZXQgdmFsaWQgPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdmFsaWRpdHlTdGF0ZSkge1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gJ3ZhbGlkJyAmJiB2YWxpZGl0eVN0YXRlW2tleV0gIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgfTtcblxuICAgIGNvbnN0IGN1c3RvbVN0YXRlTWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICBmdW5jdGlvbiBhZGRTdGF0ZShyZWYsIHN0YXRlTmFtZSkge1xuICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKHN0YXRlTmFtZSwgdHJ1ZSk7XG4gICAgICAgIGlmIChyZWYucGFydCkge1xuICAgICAgICAgICAgcmVmLnBhcnQuYWRkKHN0YXRlTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xhc3MgQ3VzdG9tU3RhdGVTZXQgZXh0ZW5kcyBTZXQge1xuICAgICAgICBzdGF0aWMgZ2V0IGlzUG9seWZpbGxlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdG9yKHJlZikge1xuICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgIGlmICghcmVmIHx8ICFyZWYudGFnTmFtZSB8fCByZWYudGFnTmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSWxsZWdhbCBjb25zdHJ1Y3RvcicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3VzdG9tU3RhdGVNYXAuc2V0KHRoaXMsIHJlZik7XG4gICAgICAgIH1cbiAgICAgICAgYWRkKHN0YXRlKSB7XG4gICAgICAgICAgICBpZiAoIS9eLS0vLnRlc3Qoc3RhdGUpIHx8IHR5cGVvZiBzdGF0ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGBGYWlsZWQgdG8gZXhlY3V0ZSAnYWRkJyBvbiAnQ3VzdG9tU3RhdGVTZXQnOiBUaGUgc3BlY2lmaWVkIHZhbHVlICR7c3RhdGV9IG11c3Qgc3RhcnQgd2l0aCAnLS0nLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3VwZXIuYWRkKHN0YXRlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IGN1c3RvbVN0YXRlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlTmFtZSA9IGBzdGF0ZSR7c3RhdGV9YDtcbiAgICAgICAgICAgIGlmIChyZWYuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBhZGRTdGF0ZShyZWYsIHN0YXRlTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUocmVmLCBzdGF0ZU5hbWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBjbGVhcigpIHtcbiAgICAgICAgICAgIGZvciAobGV0IFtlbnRyeV0gb2YgdGhpcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZShlbnRyeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdXBlci5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGRlbGV0ZShzdGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3VwZXIuZGVsZXRlKHN0YXRlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IGN1c3RvbVN0YXRlTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGlmIChyZWYuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKGBzdGF0ZSR7c3RhdGV9YCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChyZWYucGFydCkge1xuICAgICAgICAgICAgICAgICAgICByZWYucGFydC5yZW1vdmUoYHN0YXRlJHtzdGF0ZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVmLnRvZ2dsZUF0dHJpYnV0ZShgc3RhdGUke3N0YXRlfWAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZi5wYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYucGFydC5yZW1vdmUoYHN0YXRlJHtzdGF0ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XG4gICAgICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XG4gICAgICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICAgICAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XG4gICAgICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICAgICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cztcbiAgICBjbGFzcyBIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbiB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRzKSB7XG4gICAgICAgICAgICBfSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb25fZWxlbWVudHMuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cywgZWxlbWVudHMsIFwiZlwiKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGVsZW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgIHRoaXNbaV0gPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnbmFtZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ25hbWUnKV0gPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIE9iamVjdC5mcmVlemUodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cywgXCJmXCIpLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBbKF9IVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbl9lbGVtZW50cyA9IG5ldyBXZWFrTWFwKCksIFN5bWJvbC5pdGVyYXRvcildKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0hUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9uX2VsZW1lbnRzLCBcImZcIilbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW0oaSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbaV0gPT0gbnVsbCA/IG51bGwgOiB0aGlzW2ldO1xuICAgICAgICB9XG4gICAgICAgIG5hbWVkSXRlbShuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1tuYW1lXSA9PSBudWxsID8gbnVsbCA6IHRoaXNbbmFtZV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXRjaEZvcm1Qcm90b3R5cGUoKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrVmFsaWRpdHkgPSBIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLmNoZWNrVmFsaWRpdHk7XG4gICAgICAgIEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUuY2hlY2tWYWxpZGl0eSA9IGNoZWNrVmFsaWRpdHlPdmVycmlkZTtcbiAgICAgICAgY29uc3QgcmVwb3J0VmFsaWRpdHkgPSBIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnJlcG9ydFZhbGlkaXR5O1xuICAgICAgICBIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLnJlcG9ydFZhbGlkaXR5ID0gcmVwb3J0VmFsaWRpdHlPdmVycmlkZTtcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tWYWxpZGl0eU92ZXJyaWRlKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IGNoZWNrVmFsaWRpdHkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVGb3JtTWV0aG9kKHRoaXMsIHJldHVyblZhbHVlLCAnY2hlY2tWYWxpZGl0eScpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJlcG9ydFZhbGlkaXR5T3ZlcnJpZGUoLi4uYXJncykge1xuICAgICAgICAgICAgbGV0IHJldHVyblZhbHVlID0gcmVwb3J0VmFsaWRpdHkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgICAgICByZXR1cm4gb3ZlcnJpZGVGb3JtTWV0aG9kKHRoaXMsIHJldHVyblZhbHVlLCAncmVwb3J0VmFsaWRpdHknKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGdldCB9ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihIVE1MRm9ybUVsZW1lbnQucHJvdG90eXBlLCAnZWxlbWVudHMnKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxGb3JtRWxlbWVudC5wcm90b3R5cGUsICdlbGVtZW50cycsIHtcbiAgICAgICAgICAgIGdldCguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBnZXQuY2FsbCh0aGlzLCAuLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2x5ZmlsbGVkRWxlbWVudHMgPSBBcnJheS5mcm9tKGZvcm1FbGVtZW50c01hcC5nZXQodGhpcykgfHwgW10pO1xuICAgICAgICAgICAgICAgIGlmIChwb2x5ZmlsbGVkRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50cztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JkZXJlZEVsZW1lbnRzID0gQXJyYXkuZnJvbShlbGVtZW50cykuY29uY2F0KHBvbHlmaWxsZWRFbGVtZW50cykuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYikgJiAyID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24ob3JkZXJlZEVsZW1lbnRzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIEVsZW1lbnRJbnRlcm5hbHMge1xuICAgICAgICBzdGF0aWMgZ2V0IGlzUG9seWZpbGxlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdG9yKHJlZikge1xuICAgICAgICAgICAgaWYgKCFyZWYgfHwgIXJlZi50YWdOYW1lIHx8IHJlZi50YWdOYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIGNvbnN0cnVjdG9yJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByb290Tm9kZSA9IHJlZi5nZXRSb290Tm9kZSgpO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRpdHkgPSBuZXcgVmFsaWRpdHlTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZXMgPSBuZXcgQ3VzdG9tU3RhdGVTZXQocmVmKTtcbiAgICAgICAgICAgIHJlZk1hcC5zZXQodGhpcywgcmVmKTtcbiAgICAgICAgICAgIHZhbGlkaXR5TWFwLnNldCh0aGlzLCB2YWxpZGl0eSk7XG4gICAgICAgICAgICBpbnRlcm5hbHNNYXAuc2V0KHJlZiwgdGhpcyk7XG4gICAgICAgICAgICBpbml0QW9tKHJlZiwgdGhpcyk7XG4gICAgICAgICAgICBpbml0UmVmKHJlZiwgdGhpcyk7XG4gICAgICAgICAgICBPYmplY3Quc2VhbCh0aGlzKTtcbiAgICAgICAgICAgIGlmIChyb290Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgICAgICAgICAgICBkZWZlclVwZ3JhZGUocm9vdE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNoZWNrVmFsaWRpdHkoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byBleGVjdXRlICdjaGVja1ZhbGlkaXR5JyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMud2lsbFZhbGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWxpZGl0eSA9IHZhbGlkaXR5TWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGlmICghdmFsaWRpdHkudmFsaWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGl0eUV2ZW50ID0gbmV3IEV2ZW50KCdpbnZhbGlkJywge1xuICAgICAgICAgICAgICAgICAgICBidWJibGVzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmVmLmRpc3BhdGNoRXZlbnQodmFsaWRpdHlFdmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRpdHkudmFsaWQ7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGZvcm0oKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byByZWFkIHRoZSAnZm9ybScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBsZXQgZm9ybTtcbiAgICAgICAgICAgIGlmIChyZWYuY29uc3RydWN0b3JbJ2Zvcm1Bc3NvY2lhdGVkJ10gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBmb3JtID0gZmluZFBhcmVudEZvcm0ocmVmKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmb3JtO1xuICAgICAgICB9XG4gICAgICAgIGdldCBsYWJlbHMoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byByZWFkIHRoZSAnbGFiZWxzJyBwcm9wZXJ0eSBmcm9tICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHRhcmdldCBlbGVtZW50IGlzIG5vdCBhIGZvcm0tYXNzb2NpYXRlZCBjdXN0b20gZWxlbWVudC5gKTtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gcmVmLmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgICAgIGNvbnN0IGhvc3RSb290ID0gcmVmLmdldFJvb3ROb2RlKCk7XG4gICAgICAgICAgICBpZiAoaG9zdFJvb3QgJiYgaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaG9zdFJvb3QucXVlcnlTZWxlY3RvckFsbChgW2Zvcj1cIiR7aWR9XCJdYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgcmVwb3J0VmFsaWRpdHkoKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byBleGVjdXRlICdyZXBvcnRWYWxpZGl0eScgb24gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgaWYgKCF0aGlzLndpbGxWYWxpZGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdmFsaWQgPSB0aGlzLmNoZWNrVmFsaWRpdHkoKTtcbiAgICAgICAgICAgIGNvbnN0IGFuY2hvciA9IHZhbGlkYXRpb25BbmNob3JNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgaWYgKGFuY2hvciAmJiAhcmVmLmNvbnN0cnVjdG9yWydmb3JtQXNzb2NpYXRlZCddKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihgRmFpbGVkIHRvIGV4ZWN1dGUgJ3JlcG9ydFZhbGlkaXR5JyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXZhbGlkICYmIGFuY2hvcikge1xuICAgICAgICAgICAgICAgIHJlZi5mb2N1cygpO1xuICAgICAgICAgICAgICAgIGFuY2hvci5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIHNldEZvcm1WYWx1ZSh2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0Rm9ybVZhbHVlJyBvbiAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICByZW1vdmVIaWRkZW5JbnB1dHModGhpcyk7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZi5nZXRBdHRyaWJ1dGUoJ25hbWUnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoaWRkZW5JbnB1dCA9IGNyZWF0ZUhpZGRlbklucHV0KHJlZiwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbklucHV0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgQXJyYXkuZnJvbSh2YWx1ZSkucmV2ZXJzZSgpLmZvckVhY2goKFtmb3JtRGF0YUtleSwgZm9ybURhdGFWYWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmb3JtRGF0YVZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlkZGVuSW5wdXQgPSBjcmVhdGVIaWRkZW5JbnB1dChyZWYsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuSW5wdXQubmFtZSA9IGZvcm1EYXRhS2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuSW5wdXQudmFsdWUgPSBmb3JtRGF0YVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWZWYWx1ZU1hcC5zZXQocmVmLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VmFsaWRpdHkodmFsaWRpdHlDaGFuZ2VzLCB2YWxpZGF0aW9uTWVzc2FnZSwgYW5jaG9yKSB7XG4gICAgICAgICAgICBjb25zdCByZWYgPSByZWZNYXAuZ2V0KHRoaXMpO1xuICAgICAgICAgICAgdGhyb3dJZk5vdEZvcm1Bc3NvY2lhdGVkKHJlZiwgYEZhaWxlZCB0byBleGVjdXRlICdzZXRWYWxpZGl0eScgb24gJ0VsZW1lbnRJbnRlcm5hbHMnOiBUaGUgdGFyZ2V0IGVsZW1lbnQgaXMgbm90IGEgZm9ybS1hc3NvY2lhdGVkIGN1c3RvbSBlbGVtZW50LmApO1xuICAgICAgICAgICAgaWYgKCF2YWxpZGl0eUNoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gZXhlY3V0ZSBcXCdzZXRWYWxpZGl0eVxcJyBvbiBcXCdFbGVtZW50SW50ZXJuYWxzXFwnOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSAwIHByZXNlbnQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWxpZGF0aW9uQW5jaG9yTWFwLnNldCh0aGlzLCBhbmNob3IpO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRpdHkgPSB2YWxpZGl0eU1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGl0eUNoYW5nZXNPYmogPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHZhbGlkaXR5Q2hhbmdlcykge1xuICAgICAgICAgICAgICAgIHZhbGlkaXR5Q2hhbmdlc09ialtrZXldID0gdmFsaWRpdHlDaGFuZ2VzW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXModmFsaWRpdHlDaGFuZ2VzT2JqKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBzZXRWYWxpZCh2YWxpZGl0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjaGVjayA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdmFsaWRpdHkpLCB2YWxpZGl0eUNoYW5nZXNPYmopO1xuICAgICAgICAgICAgZGVsZXRlIGNoZWNrLnZhbGlkO1xuICAgICAgICAgICAgY29uc3QgeyB2YWxpZCB9ID0gcmVjb25jaWxlVmFsaWRpdHkodmFsaWRpdHksIGNoZWNrLCB0aGlzLmZvcm0pO1xuICAgICAgICAgICAgaWYgKCF2YWxpZCAmJiAhdmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGBGYWlsZWQgdG8gZXhlY3V0ZSAnc2V0VmFsaWRpdHknIG9uICdFbGVtZW50SW50ZXJuYWxzJzogVGhlIHNlY29uZCBhcmd1bWVudCBzaG91bGQgbm90IGJlIGVtcHR5IGlmIG9uZSBvciBtb3JlIGZsYWdzIGluIHRoZSBmaXJzdCBhcmd1bWVudCBhcmUgdHJ1ZS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbGlkYXRpb25NZXNzYWdlTWFwLnNldCh0aGlzLCB2YWxpZCA/ICcnIDogdmFsaWRhdGlvbk1lc3NhZ2UpO1xuICAgICAgICAgICAgaWYgKHJlZi5pc0Nvbm5lY3RlZCkge1xuICAgICAgICAgICAgICAgIHJlZi50b2dnbGVBdHRyaWJ1dGUoJ2ludGVybmFscy1pbnZhbGlkJywgIXZhbGlkKTtcbiAgICAgICAgICAgICAgICByZWYudG9nZ2xlQXR0cmlidXRlKCdpbnRlcm5hbHMtdmFsaWQnLCB2YWxpZCk7XG4gICAgICAgICAgICAgICAgcmVmLnNldEF0dHJpYnV0ZSgnYXJpYS1pbnZhbGlkJywgYCR7IXZhbGlkfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsaWRpdHlVcGdyYWRlTWFwLnNldChyZWYsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldCBzaGFkb3dSb290KCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBzaGFkb3dSb290TWFwLmdldChyZWYpO1xuICAgICAgICAgICAgaWYgKHNoYWRvd1Jvb3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIHJlYWQgdGhlICd2YWxpZGF0aW9uTWVzc2FnZScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGlvbk1lc3NhZ2VNYXAuZ2V0KHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGdldCB2YWxpZGl0eSgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZiA9IHJlZk1hcC5nZXQodGhpcyk7XG4gICAgICAgICAgICB0aHJvd0lmTm90Rm9ybUFzc29jaWF0ZWQocmVmLCBgRmFpbGVkIHRvIHJlYWQgdGhlICd2YWxpZGl0eScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGl0eSA9IHZhbGlkaXR5TWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGl0eTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgd2lsbFZhbGlkYXRlKCkge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gcmVmTWFwLmdldCh0aGlzKTtcbiAgICAgICAgICAgIHRocm93SWZOb3RGb3JtQXNzb2NpYXRlZChyZWYsIGBGYWlsZWQgdG8gcmVhZCB0aGUgJ3dpbGxWYWxpZGF0ZScgcHJvcGVydHkgZnJvbSAnRWxlbWVudEludGVybmFscyc6IFRoZSB0YXJnZXQgZWxlbWVudCBpcyBub3QgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuYCk7XG4gICAgICAgICAgICBpZiAoKHJlZi5kaXNhYmxlZCB8fCByZWYuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKSB8fFxuICAgICAgICAgICAgICAgIHJlZi5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc0VsZW1lbnRJbnRlcm5hbHNTdXBwb3J0ZWQoKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhd2luZG93LkVsZW1lbnRJbnRlcm5hbHMgfHwgIUhUTUxFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hJbnRlcm5hbHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjbGFzcyBFbGVtZW50SW50ZXJuYWxzRmVhdHVyZURldGVjdGlvbiBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbHMgPSB0aGlzLmF0dGFjaEludGVybmFscygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJhbmRvbU5hbWUgPSBgZWxlbWVudC1pbnRlcm5hbHMtZmVhdHVyZS1kZXRlY3Rpb24tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBsYWNlKC9bXmEtel0rL2csICcnKX1gO1xuICAgICAgICBjdXN0b21FbGVtZW50cy5kZWZpbmUocmFuZG9tTmFtZSwgRWxlbWVudEludGVybmFsc0ZlYXR1cmVEZXRlY3Rpb24pO1xuICAgICAgICBjb25zdCBmZWF0dXJlRGV0ZWN0aW9uRWxlbWVudCA9IG5ldyBFbGVtZW50SW50ZXJuYWxzRmVhdHVyZURldGVjdGlvbigpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ3NoYWRvd1Jvb3QnLFxuICAgICAgICAgICAgJ2Zvcm0nLFxuICAgICAgICAgICAgJ3dpbGxWYWxpZGF0ZScsXG4gICAgICAgICAgICAndmFsaWRpdHknLFxuICAgICAgICAgICAgJ3ZhbGlkYXRpb25NZXNzYWdlJyxcbiAgICAgICAgICAgICdsYWJlbHMnLFxuICAgICAgICAgICAgJ3NldEZvcm1WYWx1ZScsXG4gICAgICAgICAgICAnc2V0VmFsaWRpdHknLFxuICAgICAgICAgICAgJ2NoZWNrVmFsaWRpdHknLFxuICAgICAgICAgICAgJ3JlcG9ydFZhbGlkaXR5J1xuICAgICAgICBdLmV2ZXJ5KHByb3AgPT4gcHJvcCBpbiBmZWF0dXJlRGV0ZWN0aW9uRWxlbWVudC5pbnRlcm5hbHMpO1xuICAgIH1cbiAgICBsZXQgaGFzRWxlbWVudEludGVybmFsc1BvbHlmaWxsQmVlbkFwcGxpZWQgPSBmYWxzZTtcbiAgICBsZXQgaGFzQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbEJlZW5BcHBsaWVkID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gZm9yY2VDdXN0b21TdGF0ZVNldFBvbHlmaWxsKGF0dGFjaEludGVybmFscykge1xuICAgICAgICBpZiAoaGFzQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbEJlZW5BcHBsaWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaGFzQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbEJlZW5BcHBsaWVkID0gdHJ1ZTtcbiAgICAgICAgd2luZG93LkN1c3RvbVN0YXRlU2V0ID0gQ3VzdG9tU3RhdGVTZXQ7XG4gICAgICAgIGlmIChhdHRhY2hJbnRlcm5hbHMpIHtcbiAgICAgICAgICAgIEhUTUxFbGVtZW50LnByb3RvdHlwZS5hdHRhY2hJbnRlcm5hbHMgPSBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGludGVybmFscyA9IGF0dGFjaEludGVybmFscy5jYWxsKHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIGludGVybmFscy5zdGF0ZXMgPSBuZXcgQ3VzdG9tU3RhdGVTZXQodGhpcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFscztcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZm9yY2VFbGVtZW50SW50ZXJuYWxzUG9seWZpbGwoZm9yY2VDdXN0b21TdGF0ZVNldCA9IHRydWUpIHtcbiAgICAgICAgaWYgKGhhc0VsZW1lbnRJbnRlcm5hbHNQb2x5ZmlsbEJlZW5BcHBsaWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaGFzRWxlbWVudEludGVybmFsc1BvbHlmaWxsQmVlbkFwcGxpZWQgPSB0cnVlO1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHdpbmRvdy5FbGVtZW50SW50ZXJuYWxzID0gRWxlbWVudEludGVybmFscztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIEN1c3RvbUVsZW1lbnRSZWdpc3RyeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmluZSA9IEN1c3RvbUVsZW1lbnRSZWdpc3RyeS5wcm90b3R5cGUuZGVmaW5lO1xuICAgICAgICAgICAgQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5LnByb3RvdHlwZS5kZWZpbmUgPSBmdW5jdGlvbiAobmFtZSwgY29uc3RydWN0b3IsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29uc3RydWN0b3IuZm9ybUFzc29jaWF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29ubmVjdGVkQ2FsbGJhY2sgPSBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29ubmVjdGVkQ2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25uZWN0ZWRDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29ubmVjdGVkQ2FsbGJhY2tNYXAuaGFzKHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGVkQ2FsbGJhY2tNYXAuc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXREaXNhYmxlZCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29ubmVjdGVkQ2FsbGJhY2sgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3RlZENhbGxiYWNrLmFwcGx5KHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdXBncmFkZUludGVybmFscyh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmaW5lLmNhbGwodGhpcywgbmFtZSwgY29uc3RydWN0b3IsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgSFRNTEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaEludGVybmFscyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGFnTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudGFnTmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGV4ZWN1dGUgJ2F0dGFjaEludGVybmFscycgb24gJ0hUTUxFbGVtZW50JzogVW5hYmxlIHRvIGF0dGFjaCBFbGVtZW50SW50ZXJuYWxzIHRvIG5vbi1jdXN0b20gZWxlbWVudHMuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHNNYXAuaGFzKHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oYERPTUV4Y2VwdGlvbjogRmFpbGVkIHRvIGV4ZWN1dGUgJ2F0dGFjaEludGVybmFscycgb24gJ0hUTUxFbGVtZW50JzogRWxlbWVudEludGVybmFscyBmb3IgdGhlIHNwZWNpZmllZCBlbGVtZW50IHdhcyBhbHJlYWR5IGF0dGFjaGVkLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVsZW1lbnRJbnRlcm5hbHModGhpcyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uIGF0dGFjaFNoYWRvd09ic2VydmVyKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaGFkb3dSb290ID0gYXR0YWNoU2hhZG93LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICAgICAgICAgIHNoYWRvd1Jvb3RNYXAuc2V0KHRoaXMsIHNoYWRvd1Jvb3QpO1xuICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbk9ic2VydmVyRXhpc3RzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihvYnNlcnZlckNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5TaGFkeURPTSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLCBvYnNlcnZlckNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5vYnNlcnZlKHNoYWRvd1Jvb3QsIG9ic2VydmVyQ29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzaGFkb3dIb3N0c01hcC5zZXQodGhpcywgb2JzZXJ2ZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc2hhZG93Um9vdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaFNoYWRvdyA9IEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvdztcbiAgICAgICAgICAgIEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaFNoYWRvdyA9IGF0dGFjaFNoYWRvd09ic2VydmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtdXRhdGlvbk9ic2VydmVyRXhpc3RzKCkgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG9ic2VydmVyQ2FsbGJhY2spO1xuICAgICAgICAgICAgZG9jdW1lbnRPYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgb2JzZXJ2ZXJDb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgSFRNTEZvcm1FbGVtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcGF0Y2hGb3JtUHJvdG90eXBlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcmNlQ3VzdG9tU3RhdGVTZXQgfHxcbiAgICAgICAgICAgICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmICF3aW5kb3cuQ3VzdG9tU3RhdGVTZXQpKSB7XG4gICAgICAgICAgICBmb3JjZUN1c3RvbVN0YXRlU2V0UG9seWZpbGwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGlzQ2VQb2x5ZmlsbCA9ICEhY3VzdG9tRWxlbWVudHMucG9seWZpbGxXcmFwRmx1c2hDYWxsYmFjaztcbiAgICBpZiAoIWlzQ2VQb2x5ZmlsbCkge1xuICAgICAgICBpZiAoIWlzRWxlbWVudEludGVybmFsc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgICAgICBmb3JjZUVsZW1lbnRJbnRlcm5hbHNQb2x5ZmlsbChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhd2luZG93LkN1c3RvbVN0YXRlU2V0KSB7XG4gICAgICAgICAgICBmb3JjZUN1c3RvbVN0YXRlU2V0UG9seWZpbGwoSFRNTEVsZW1lbnQucHJvdG90eXBlLmF0dGFjaEludGVybmFscyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnRzLmZvcmNlQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbCA9IGZvcmNlQ3VzdG9tU3RhdGVTZXRQb2x5ZmlsbDtcbiAgICBleHBvcnRzLmZvcmNlRWxlbWVudEludGVybmFsc1BvbHlmaWxsID0gZm9yY2VFbGVtZW50SW50ZXJuYWxzUG9seWZpbGw7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4gICAgcmV0dXJuIGV4cG9ydHM7XG5cbn0pKHt9KTtcbiIsICIvKiFcbiAqIE1JVCBMaWNlbnNlXG4gKiBcbiAqIENvcHlyaWdodCAoYykgMjAxNy0yMDI0IFBlY3VsaWFyIFZlbnR1cmVzLCBMTENcbiAqIFxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICogXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKiBcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBBUlJBWV9CVUZGRVJfTkFNRSA9IFwiW29iamVjdCBBcnJheUJ1ZmZlcl1cIjtcbmNsYXNzIEJ1ZmZlclNvdXJjZUNvbnZlcnRlciB7XG4gICAgc3RhdGljIGlzQXJyYXlCdWZmZXIoZGF0YSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRhdGEpID09PSBBUlJBWV9CVUZGRVJfTkFNRTtcbiAgICB9XG4gICAgc3RhdGljIHRvQXJyYXlCdWZmZXIoZGF0YSkge1xuICAgICAgICBpZiAodGhpcy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YS5ieXRlTGVuZ3RoID09PSBkYXRhLmJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGEuYnl0ZU9mZnNldCA9PT0gMCAmJiBkYXRhLmJ5dGVMZW5ndGggPT09IGRhdGEuYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50b1VpbnQ4QXJyYXkoZGF0YS5idWZmZXIpXG4gICAgICAgICAgICAuc2xpY2UoZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVPZmZzZXQgKyBkYXRhLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICAuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgdG9VaW50OEFycmF5KGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9WaWV3KGRhdGEsIFVpbnQ4QXJyYXkpO1xuICAgIH1cbiAgICBzdGF0aWMgdG9WaWV3KGRhdGEsIHR5cGUpIHtcbiAgICAgICAgaWYgKGRhdGEuY29uc3RydWN0b3IgPT09IHR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzQXJyYXlCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgdHlwZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyB0eXBlKGRhdGEuYnVmZmVyLCBkYXRhLmJ5dGVPZmZzZXQsIGRhdGEuYnl0ZUxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBwcm92aWRlZCB2YWx1ZSBpcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNCdWZmZXJTb3VyY2UoZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKVxuICAgICAgICAgICAgfHwgdGhpcy5pc0FycmF5QnVmZmVyKGRhdGEpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkge1xuICAgICAgICByZXR1cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpXG4gICAgICAgICAgICB8fCAoZGF0YSAmJiB0aGlzLmlzQXJyYXlCdWZmZXIoZGF0YS5idWZmZXIpKTtcbiAgICB9XG4gICAgc3RhdGljIGlzRXF1YWwoYSwgYikge1xuICAgICAgICBjb25zdCBhVmlldyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYSk7XG4gICAgICAgIGNvbnN0IGJWaWV3ID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShiKTtcbiAgICAgICAgaWYgKGFWaWV3Lmxlbmd0aCAhPT0gYlZpZXcuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYVZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhVmlld1tpXSAhPT0gYlZpZXdbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHN0YXRpYyBjb25jYXQoLi4uYXJncykge1xuICAgICAgICBsZXQgYnVmZmVycztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnc1swXSkgJiYgIShhcmdzWzFdIGluc3RhbmNlb2YgRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICBidWZmZXJzID0gYXJnc1swXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZ3NbMF0pICYmIGFyZ3NbMV0gaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgYnVmZmVycyA9IGFyZ3NbMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoYXJnc1thcmdzLmxlbmd0aCAtIDFdIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBidWZmZXJzID0gYXJncy5zbGljZSgwLCBhcmdzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnVmZmVycyA9IGFyZ3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNpemUgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiBidWZmZXJzKSB7XG4gICAgICAgICAgICBzaXplICs9IGJ1ZmZlci5ieXRlTGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHNpemUpO1xuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBidWZmZXIgb2YgYnVmZmVycykge1xuICAgICAgICAgICAgY29uc3QgdmlldyA9IHRoaXMudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgICAgICByZXMuc2V0KHZpZXcsIG9mZnNldCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gdmlldy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3NbYXJncy5sZW5ndGggLSAxXSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b1ZpZXcocmVzLCBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXMuYnVmZmVyO1xuICAgIH1cbn1cblxuY29uc3QgU1RSSU5HX1RZUEUgPSBcInN0cmluZ1wiO1xuY29uc3QgSEVYX1JFR0VYID0gL15bMC05YS1mXFxzXSskL2k7XG5jb25zdCBCQVNFNjRfUkVHRVggPSAvXig/OltBLVphLXowLTkrL117NH0pKig/OltBLVphLXowLTkrL117Mn09PXxbQS1aYS16MC05Ky9dezN9PSk/JC87XG5jb25zdCBCQVNFNjRVUkxfUkVHRVggPSAvXlthLXpBLVowLTktX10rJC87XG5jbGFzcyBVdGY4Q29udmVydGVyIHtcbiAgICBzdGF0aWMgZnJvbVN0cmluZyh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IHMgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodGV4dCkpO1xuICAgICAgICBjb25zdCB1aW50QXJyYXkgPSBuZXcgVWludDhBcnJheShzLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdWludEFycmF5W2ldID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1aW50QXJyYXkuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgdG9TdHJpbmcoYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgbGV0IGVuY29kZWRTdHJpbmcgPSBcIlwiO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZW5jb2RlZFN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVjb2RlZFN0cmluZyA9IGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoZW5jb2RlZFN0cmluZykpO1xuICAgICAgICByZXR1cm4gZGVjb2RlZFN0cmluZztcbiAgICB9XG59XG5jbGFzcyBVdGYxNkNvbnZlcnRlciB7XG4gICAgc3RhdGljIHRvU3RyaW5nKGJ1ZmZlciwgbGl0dGxlRW5kaWFuID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihidWZmZXIpO1xuICAgICAgICBjb25zdCBkYXRhVmlldyA9IG5ldyBEYXRhVmlldyhhcnJheUJ1ZmZlcik7XG4gICAgICAgIGxldCByZXMgPSBcIlwiO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5QnVmZmVyLmJ5dGVMZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgY29kZSA9IGRhdGFWaWV3LmdldFVpbnQxNihpLCBsaXR0bGVFbmRpYW4pO1xuICAgICAgICAgICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGZyb21TdHJpbmcodGV4dCwgbGl0dGxlRW5kaWFuID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IEFycmF5QnVmZmVyKHRleHQubGVuZ3RoICogMik7XG4gICAgICAgIGNvbnN0IGRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KHJlcyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZGF0YVZpZXcuc2V0VWludDE2KGkgKiAyLCB0ZXh0LmNoYXJDb2RlQXQoaSksIGxpdHRsZUVuZGlhbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59XG5jbGFzcyBDb252ZXJ0IHtcbiAgICBzdGF0aWMgaXNIZXgoZGF0YSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09IFNUUklOR19UWVBFXG4gICAgICAgICAgICAmJiBIRVhfUkVHRVgudGVzdChkYXRhKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQmFzZTY0KGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSBTVFJJTkdfVFlQRVxuICAgICAgICAgICAgJiYgQkFTRTY0X1JFR0VYLnRlc3QoZGF0YSk7XG4gICAgfVxuICAgIHN0YXRpYyBpc0Jhc2U2NFVybChkYXRhKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gU1RSSU5HX1RZUEVcbiAgICAgICAgICAgICYmIEJBU0U2NFVSTF9SRUdFWC50ZXN0KGRhdGEpO1xuICAgIH1cbiAgICBzdGF0aWMgVG9TdHJpbmcoYnVmZmVyLCBlbmMgPSBcInV0ZjhcIikge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIHN3aXRjaCAoZW5jLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGY4XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVG9VdGY4U3RyaW5nKGJ1Zik7XG4gICAgICAgICAgICBjYXNlIFwiYmluYXJ5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVG9CaW5hcnkoYnVmKTtcbiAgICAgICAgICAgIGNhc2UgXCJoZXhcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Ub0hleChidWYpO1xuICAgICAgICAgICAgY2FzZSBcImJhc2U2NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRvQmFzZTY0KGJ1Zik7XG4gICAgICAgICAgICBjYXNlIFwiYmFzZTY0dXJsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuVG9CYXNlNjRVcmwoYnVmKTtcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmxlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLnRvU3RyaW5nKGJ1ZiwgdHJ1ZSk7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmJlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLnRvU3RyaW5nKGJ1Zik7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlIG9mIGVuY29kaW5nICcke2VuY30nYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIEZyb21TdHJpbmcoc3RyLCBlbmMgPSBcInV0ZjhcIikge1xuICAgICAgICBpZiAoIXN0cikge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGVuYy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwidXRmOFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21VdGY4U3RyaW5nKHN0cik7XG4gICAgICAgICAgICBjYXNlIFwiYmluYXJ5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUJpbmFyeShzdHIpO1xuICAgICAgICAgICAgY2FzZSBcImhleFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21IZXgoc3RyKTtcbiAgICAgICAgICAgIGNhc2UgXCJiYXNlNjRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tQmFzZTY0KHN0cik7XG4gICAgICAgICAgICBjYXNlIFwiYmFzZTY0dXJsXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuRnJvbUJhc2U2NFVybChzdHIpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2bGVcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIuZnJvbVN0cmluZyhzdHIsIHRydWUpO1xuICAgICAgICAgICAgY2FzZSBcInV0ZjE2XCI6XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZiZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci5mcm9tU3RyaW5nKHN0cik7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0eXBlIG9mIGVuY29kaW5nICcke2VuY30nYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIFRvQmFzZTY0KGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGlmICh0eXBlb2YgYnRvYSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgY29uc3QgYmluYXJ5ID0gdGhpcy5Ub1N0cmluZyhidWYsIFwiYmluYXJ5XCIpO1xuICAgICAgICAgICAgcmV0dXJuIGJ0b2EoYmluYXJ5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShidWYpLnRvU3RyaW5nKFwiYmFzZTY0XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tQmFzZTY0KGJhc2U2NCkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdFN0cmluZyhiYXNlNjQpO1xuICAgICAgICBpZiAoIWZvcm1hdHRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUNvbnZlcnQuaXNCYXNlNjQoZm9ybWF0dGVkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50ICdiYXNlNjRUZXh0JyBpcyBub3QgQmFzZTY0IGVuY29kZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhdG9iICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5Gcm9tQmluYXJ5KGF0b2IoZm9ybWF0dGVkKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmZyb20oZm9ybWF0dGVkLCBcImJhc2U2NFwiKSkuYnVmZmVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tQmFzZTY0VXJsKGJhc2U2NHVybCkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdFN0cmluZyhiYXNlNjR1cmwpO1xuICAgICAgICBpZiAoIWZvcm1hdHRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIUNvbnZlcnQuaXNCYXNlNjRVcmwoZm9ybWF0dGVkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50ICdiYXNlNjR1cmwnIGlzIG5vdCBCYXNlNjRVcmwgZW5jb2RlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5Gcm9tQmFzZTY0KHRoaXMuQmFzZTY0UGFkZGluZyhmb3JtYXR0ZWQucmVwbGFjZSgvXFwtL2csIFwiK1wiKS5yZXBsYWNlKC9cXF8vZywgXCIvXCIpKSk7XG4gICAgfVxuICAgIHN0YXRpYyBUb0Jhc2U2NFVybChkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLlRvQmFzZTY0KGRhdGEpLnJlcGxhY2UoL1xcKy9nLCBcIi1cIikucmVwbGFjZSgvXFwvL2csIFwiX1wiKS5yZXBsYWNlKC9cXD0vZywgXCJcIik7XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tVXRmOFN0cmluZyh0ZXh0LCBlbmNvZGluZyA9IENvbnZlcnQuREVGQVVMVF9VVEY4X0VOQ09ESU5HKSB7XG4gICAgICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhc2NpaVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkZyb21CaW5hcnkodGV4dCk7XG4gICAgICAgICAgICBjYXNlIFwidXRmOFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGY4Q29udmVydGVyLmZyb21TdHJpbmcodGV4dCk7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmJlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLmZyb21TdHJpbmcodGV4dCk7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZsZVwiOlxuICAgICAgICAgICAgY2FzZSBcInVzYzJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIuZnJvbVN0cmluZyh0ZXh0LCB0cnVlKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHR5cGUgb2YgZW5jb2RpbmcgJyR7ZW5jb2Rpbmd9J2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBUb1V0ZjhTdHJpbmcoYnVmZmVyLCBlbmNvZGluZyA9IENvbnZlcnQuREVGQVVMVF9VVEY4X0VOQ09ESU5HKSB7XG4gICAgICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhc2NpaVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLlRvQmluYXJ5KGJ1ZmZlcik7XG4gICAgICAgICAgICBjYXNlIFwidXRmOFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBVdGY4Q29udmVydGVyLnRvU3RyaW5nKGJ1ZmZlcik7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ1dGYxNmJlXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLnRvU3RyaW5nKGJ1ZmZlcik7XG4gICAgICAgICAgICBjYXNlIFwidXRmMTZsZVwiOlxuICAgICAgICAgICAgY2FzZSBcInVzYzJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRmMTZDb252ZXJ0ZXIudG9TdHJpbmcoYnVmZmVyLCB0cnVlKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHR5cGUgb2YgZW5jb2RpbmcgJyR7ZW5jb2Rpbmd9J2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tQmluYXJ5KHRleHQpIHtcbiAgICAgICAgY29uc3Qgc3RyaW5nTGVuZ3RoID0gdGV4dC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHJlc3VsdFZpZXcgPSBuZXcgVWludDhBcnJheShzdHJpbmdMZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZ0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXN1bHRWaWV3W2ldID0gdGV4dC5jaGFyQ29kZUF0KGkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRWaWV3LmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIFRvQmluYXJ5KGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGxldCByZXMgPSBcIlwiO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgVG9IZXgoYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XG4gICAgICAgIGNvbnN0IGxlbiA9IGJ1Zi5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGJ5dGUgPSBidWZbaV07XG4gICAgICAgICAgICBpZiAoYnl0ZSA8IDE2KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IFwiMFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0ICs9IGJ5dGUudG9TdHJpbmcoMTYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tSGV4KGhleFN0cmluZykge1xuICAgICAgICBsZXQgZm9ybWF0dGVkID0gdGhpcy5mb3JtYXRTdHJpbmcoaGV4U3RyaW5nKTtcbiAgICAgICAgaWYgKCFmb3JtYXR0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFDb252ZXJ0LmlzSGV4KGZvcm1hdHRlZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCAnaGV4U3RyaW5nJyBpcyBub3QgSEVYIGVuY29kZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdHRlZC5sZW5ndGggJSAyKSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWQgPSBgMCR7Zm9ybWF0dGVkfWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZm9ybWF0dGVkLmxlbmd0aCAvIDIpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvcm1hdHRlZC5sZW5ndGg7IGkgPSBpICsgMikge1xuICAgICAgICAgICAgY29uc3QgYyA9IGZvcm1hdHRlZC5zbGljZShpLCBpICsgMik7XG4gICAgICAgICAgICByZXNbaSAvIDJdID0gcGFyc2VJbnQoYywgMTYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXMuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgVG9VdGYxNlN0cmluZyhidWZmZXIsIGxpdHRsZUVuZGlhbiA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBVdGYxNkNvbnZlcnRlci50b1N0cmluZyhidWZmZXIsIGxpdHRsZUVuZGlhbik7XG4gICAgfVxuICAgIHN0YXRpYyBGcm9tVXRmMTZTdHJpbmcodGV4dCwgbGl0dGxlRW5kaWFuID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIFV0ZjE2Q29udmVydGVyLmZyb21TdHJpbmcodGV4dCwgbGl0dGxlRW5kaWFuKTtcbiAgICB9XG4gICAgc3RhdGljIEJhc2U2NFBhZGRpbmcoYmFzZTY0KSB7XG4gICAgICAgIGNvbnN0IHBhZENvdW50ID0gNCAtIChiYXNlNjQubGVuZ3RoICUgNCk7XG4gICAgICAgIGlmIChwYWRDb3VudCA8IDQpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFkQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgIGJhc2U2NCArPSBcIj1cIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmFzZTY0O1xuICAgIH1cbiAgICBzdGF0aWMgZm9ybWF0U3RyaW5nKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIChkYXRhID09PSBudWxsIHx8IGRhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRhdGEucmVwbGFjZSgvW1xcblxcclxcdCBdL2csIFwiXCIpKSB8fCBcIlwiO1xuICAgIH1cbn1cbkNvbnZlcnQuREVGQVVMVF9VVEY4X0VOQ09ESU5HID0gXCJ1dGY4XCI7XG5cbmZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIC4uLnNvdXJjZXMpIHtcbiAgICBjb25zdCByZXMgPSBhcmd1bWVudHNbMF07XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb2JqID0gYXJndW1lbnRzW2ldO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICByZXNbcHJvcF0gPSBvYmpbcHJvcF07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIGNvbWJpbmUoLi4uYnVmKSB7XG4gICAgY29uc3QgdG90YWxCeXRlTGVuZ3RoID0gYnVmLm1hcCgoaXRlbSkgPT4gaXRlbS5ieXRlTGVuZ3RoKS5yZWR1Y2UoKHByZXYsIGN1cikgPT4gcHJldiArIGN1cik7XG4gICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkodG90YWxCeXRlTGVuZ3RoKTtcbiAgICBsZXQgY3VycmVudFBvcyA9IDA7XG4gICAgYnVmLm1hcCgoaXRlbSkgPT4gbmV3IFVpbnQ4QXJyYXkoaXRlbSkpLmZvckVhY2goKGFycikgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0yIG9mIGFycikge1xuICAgICAgICAgICAgcmVzW2N1cnJlbnRQb3MrK10gPSBpdGVtMjtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXMuYnVmZmVyO1xufVxuZnVuY3Rpb24gaXNFcXVhbChieXRlczEsIGJ5dGVzMikge1xuICAgIGlmICghKGJ5dGVzMSAmJiBieXRlczIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGJ5dGVzMS5ieXRlTGVuZ3RoICE9PSBieXRlczIuYnl0ZUxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGIxID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMxKTtcbiAgICBjb25zdCBiMiA9IG5ldyBVaW50OEFycmF5KGJ5dGVzMik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlczEuYnl0ZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChiMVtpXSAhPT0gYjJbaV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0cy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXI7XG5leHBvcnRzLkNvbnZlcnQgPSBDb252ZXJ0O1xuZXhwb3J0cy5hc3NpZ24gPSBhc3NpZ247XG5leHBvcnRzLmNvbWJpbmUgPSBjb21iaW5lO1xuZXhwb3J0cy5pc0VxdWFsID0gaXNFcXVhbDtcbiIsICIvKiFcbiBDb3B5cmlnaHQgKGMpIFBlY3VsaWFyIFZlbnR1cmVzLCBMTENcbiovXG5cbmZ1bmN0aW9uIGdldFVUQ0RhdGUoZGF0ZSkge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpICsgKGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKSk7XHJcbn1cclxuZnVuY3Rpb24gZ2V0UGFyYW1ldGVyc1ZhbHVlKHBhcmFtZXRlcnMsIG5hbWUsIGRlZmF1bHRWYWx1ZSkge1xyXG4gICAgdmFyIF9hO1xyXG4gICAgaWYgKChwYXJhbWV0ZXJzIGluc3RhbmNlb2YgT2JqZWN0KSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChfYSA9IHBhcmFtZXRlcnNbbmFtZV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGRlZmF1bHRWYWx1ZTtcclxufVxyXG5mdW5jdGlvbiBidWZmZXJUb0hleENvZGVzKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCA9IDAsIGlucHV0TGVuZ3RoID0gKGlucHV0QnVmZmVyLmJ5dGVMZW5ndGggLSBpbnB1dE9mZnNldCksIGluc2VydFNwYWNlID0gZmFsc2UpIHtcclxuICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIChuZXcgVWludDhBcnJheShpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkpIHtcclxuICAgICAgICBjb25zdCBzdHIgPSBpdGVtLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgIGlmIChzdHIubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBcIjBcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0ICs9IHN0cjtcclxuICAgICAgICBpZiAoaW5zZXJ0U3BhY2UpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IFwiIFwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQudHJpbSgpO1xyXG59XHJcbmZ1bmN0aW9uIGNoZWNrQnVmZmVyUGFyYW1zKGJhc2VCbG9jaywgaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgaWYgKCEoaW5wdXRCdWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRCdWZmZXIgbXVzdCBiZSBcXFwiQXJyYXlCdWZmZXJcXFwiXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKCFpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0QnVmZmVyIGhhcyB6ZXJvIGxlbmd0aFwiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dE9mZnNldCA8IDApIHtcclxuICAgICAgICBiYXNlQmxvY2suZXJyb3IgPSBcIldyb25nIHBhcmFtZXRlcjogaW5wdXRPZmZzZXQgbGVzcyB0aGFuIHplcm9cIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRMZW5ndGggPCAwKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0TGVuZ3RoIGxlc3MgdGhhbiB6ZXJvXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKChpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoIC0gaW5wdXRPZmZzZXQgLSBpbnB1dExlbmd0aCkgPCAwKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJFbmQgb2YgaW5wdXQgcmVhY2hlZCBiZWZvcmUgbWVzc2FnZSB3YXMgZnVsbHkgZGVjb2RlZCAoaW5jb25zaXN0ZW50IG9mZnNldCBhbmQgbGVuZ3RoIHZhbHVlcylcIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiB1dGlsRnJvbUJhc2UoaW5wdXRCdWZmZXIsIGlucHV0QmFzZSkge1xyXG4gICAgbGV0IHJlc3VsdCA9IDA7XHJcbiAgICBpZiAoaW5wdXRCdWZmZXIubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0QnVmZmVyWzBdO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IChpbnB1dEJ1ZmZlci5sZW5ndGggLSAxKTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICByZXN1bHQgKz0gaW5wdXRCdWZmZXJbKGlucHV0QnVmZmVyLmxlbmd0aCAtIDEpIC0gaV0gKiBNYXRoLnBvdygyLCBpbnB1dEJhc2UgKiBpKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuZnVuY3Rpb24gdXRpbFRvQmFzZSh2YWx1ZSwgYmFzZSwgcmVzZXJ2ZWQgPSAoLTEpKSB7XHJcbiAgICBjb25zdCBpbnRlcm5hbFJlc2VydmVkID0gcmVzZXJ2ZWQ7XHJcbiAgICBsZXQgaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xyXG4gICAgbGV0IHJlc3VsdCA9IDA7XHJcbiAgICBsZXQgYmlnZ2VzdCA9IE1hdGgucG93KDIsIGJhc2UpO1xyXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCA4OyBpKyspIHtcclxuICAgICAgICBpZiAodmFsdWUgPCBiaWdnZXN0KSB7XHJcbiAgICAgICAgICAgIGxldCByZXRCdWY7XHJcbiAgICAgICAgICAgIGlmIChpbnRlcm5hbFJlc2VydmVkIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKGkpO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbFJlc2VydmVkIDwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAobmV3IEFycmF5QnVmZmVyKDApKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcihpbnRlcm5hbFJlc2VydmVkKTtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGludGVybmFsUmVzZXJ2ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAoaSAtIDEpOyBqID49IDA7IGotLSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYmFzaXMgPSBNYXRoLnBvdygyLCBqICogYmFzZSk7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W3Jlc3VsdCAtIGogLSAxXSA9IE1hdGguZmxvb3IoaW50ZXJuYWxWYWx1ZSAvIGJhc2lzKTtcclxuICAgICAgICAgICAgICAgIGludGVybmFsVmFsdWUgLT0gKHJldFZpZXdbcmVzdWx0IC0gaiAtIDFdKSAqIGJhc2lzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXRCdWY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJpZ2dlc3QgKj0gTWF0aC5wb3coMiwgYmFzZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IEFycmF5QnVmZmVyKDApO1xyXG59XHJcbmZ1bmN0aW9uIHV0aWxDb25jYXRCdWYoLi4uYnVmZmVycykge1xyXG4gICAgbGV0IG91dHB1dExlbmd0aCA9IDA7XHJcbiAgICBsZXQgcHJldkxlbmd0aCA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IGJ1ZmZlciBvZiBidWZmZXJzKSB7XHJcbiAgICAgICAgb3V0cHV0TGVuZ3RoICs9IGJ1ZmZlci5ieXRlTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKG91dHB1dExlbmd0aCk7XHJcbiAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgIGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHtcclxuICAgICAgICByZXRWaWV3LnNldChuZXcgVWludDhBcnJheShidWZmZXIpLCBwcmV2TGVuZ3RoKTtcclxuICAgICAgICBwcmV2TGVuZ3RoICs9IGJ1ZmZlci5ieXRlTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldEJ1ZjtcclxufVxyXG5mdW5jdGlvbiB1dGlsQ29uY2F0VmlldyguLi52aWV3cykge1xyXG4gICAgbGV0IG91dHB1dExlbmd0aCA9IDA7XHJcbiAgICBsZXQgcHJldkxlbmd0aCA9IDA7XHJcbiAgICBmb3IgKGNvbnN0IHZpZXcgb2Ygdmlld3MpIHtcclxuICAgICAgICBvdXRwdXRMZW5ndGggKz0gdmlldy5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIob3V0cHV0TGVuZ3RoKTtcclxuICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgZm9yIChjb25zdCB2aWV3IG9mIHZpZXdzKSB7XHJcbiAgICAgICAgcmV0Vmlldy5zZXQodmlldywgcHJldkxlbmd0aCk7XHJcbiAgICAgICAgcHJldkxlbmd0aCArPSB2aWV3Lmxlbmd0aDtcclxuICAgIH1cclxuICAgIHJldHVybiByZXRWaWV3O1xyXG59XHJcbmZ1bmN0aW9uIHV0aWxEZWNvZGVUQygpIHtcclxuICAgIGNvbnN0IGJ1ZiA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWVIZXgpO1xyXG4gICAgaWYgKHRoaXMudmFsdWVIZXguYnl0ZUxlbmd0aCA+PSAyKSB7XHJcbiAgICAgICAgY29uc3QgY29uZGl0aW9uMSA9IChidWZbMF0gPT09IDB4RkYpICYmIChidWZbMV0gJiAweDgwKTtcclxuICAgICAgICBjb25zdCBjb25kaXRpb24yID0gKGJ1ZlswXSA9PT0gMHgwMCkgJiYgKChidWZbMV0gJiAweDgwKSA9PT0gMHgwMCk7XHJcbiAgICAgICAgaWYgKGNvbmRpdGlvbjEgfHwgY29uZGl0aW9uMikge1xyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJOZWVkbGVzc2x5IGxvbmcgZm9ybWF0XCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGJpZ0ludEJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4LmJ5dGVMZW5ndGgpO1xyXG4gICAgY29uc3QgYmlnSW50VmlldyA9IG5ldyBVaW50OEFycmF5KGJpZ0ludEJ1ZmZlcik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWVIZXguYnl0ZUxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgYmlnSW50Vmlld1tpXSA9IDA7XHJcbiAgICB9XHJcbiAgICBiaWdJbnRWaWV3WzBdID0gKGJ1ZlswXSAmIDB4ODApO1xyXG4gICAgY29uc3QgYmlnSW50ID0gdXRpbEZyb21CYXNlKGJpZ0ludFZpZXcsIDgpO1xyXG4gICAgY29uc3Qgc21hbGxJbnRCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleC5ieXRlTGVuZ3RoKTtcclxuICAgIGNvbnN0IHNtYWxsSW50VmlldyA9IG5ldyBVaW50OEFycmF5KHNtYWxsSW50QnVmZmVyKTtcclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy52YWx1ZUhleC5ieXRlTGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBzbWFsbEludFZpZXdbal0gPSBidWZbal07XHJcbiAgICB9XHJcbiAgICBzbWFsbEludFZpZXdbMF0gJj0gMHg3RjtcclxuICAgIGNvbnN0IHNtYWxsSW50ID0gdXRpbEZyb21CYXNlKHNtYWxsSW50VmlldywgOCk7XHJcbiAgICByZXR1cm4gKHNtYWxsSW50IC0gYmlnSW50KTtcclxufVxyXG5mdW5jdGlvbiB1dGlsRW5jb2RlVEModmFsdWUpIHtcclxuICAgIGNvbnN0IG1vZFZhbHVlID0gKHZhbHVlIDwgMCkgPyAodmFsdWUgKiAoLTEpKSA6IHZhbHVlO1xyXG4gICAgbGV0IGJpZ0ludCA9IDEyODtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgaWYgKG1vZFZhbHVlIDw9IGJpZ0ludCkge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzbWFsbEludCA9IGJpZ0ludCAtIG1vZFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0QnVmID0gdXRpbFRvQmFzZShzbWFsbEludCwgOCwgaSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbMF0gfD0gMHg4MDtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXRCdWY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHJldEJ1ZiA9IHV0aWxUb0Jhc2UobW9kVmFsdWUsIDgsIGkpO1xyXG4gICAgICAgICAgICBsZXQgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgIGlmIChyZXRWaWV3WzBdICYgMHg4MCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcEJ1ZiA9IHJldEJ1Zi5zbGljZSgwKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGVtcEJ1Zik7XHJcbiAgICAgICAgICAgICAgICByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIocmV0QnVmLmJ5dGVMZW5ndGggKyAxKTtcclxuICAgICAgICAgICAgICAgIHJldFZpZXcgPSBuZXcgVWludDhBcnJheShyZXRCdWYpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCB0ZW1wQnVmLmJ5dGVMZW5ndGg7IGsrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldFZpZXdbayArIDFdID0gdGVtcFZpZXdba107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3WzBdID0gMHgwMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgIH1cclxuICAgICAgICBiaWdJbnQgKj0gTWF0aC5wb3coMiwgOCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKG5ldyBBcnJheUJ1ZmZlcigwKSk7XHJcbn1cclxuZnVuY3Rpb24gaXNFcXVhbEJ1ZmZlcihpbnB1dEJ1ZmZlcjEsIGlucHV0QnVmZmVyMikge1xyXG4gICAgaWYgKGlucHV0QnVmZmVyMS5ieXRlTGVuZ3RoICE9PSBpbnB1dEJ1ZmZlcjIuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZpZXcxID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXRCdWZmZXIxKTtcclxuICAgIGNvbnN0IHZpZXcyID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXRCdWZmZXIyKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmlldzEubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZiAodmlldzFbaV0gIT09IHZpZXcyW2ldKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5mdW5jdGlvbiBwYWROdW1iZXIoaW5wdXROdW1iZXIsIGZ1bGxMZW5ndGgpIHtcclxuICAgIGNvbnN0IHN0ciA9IGlucHV0TnVtYmVyLnRvU3RyaW5nKDEwKTtcclxuICAgIGlmIChmdWxsTGVuZ3RoIDwgc3RyLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGlmID0gZnVsbExlbmd0aCAtIHN0ci5sZW5ndGg7XHJcbiAgICBjb25zdCBwYWRkaW5nID0gbmV3IEFycmF5KGRpZik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpZjsgaSsrKSB7XHJcbiAgICAgICAgcGFkZGluZ1tpXSA9IFwiMFwiO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcGFkZGluZ1N0cmluZyA9IHBhZGRpbmcuam9pbihcIlwiKTtcclxuICAgIHJldHVybiBwYWRkaW5nU3RyaW5nLmNvbmNhdChzdHIpO1xyXG59XHJcbmNvbnN0IGJhc2U2NFRlbXBsYXRlID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVwiO1xyXG5jb25zdCBiYXNlNjRVcmxUZW1wbGF0ZSA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXz1cIjtcclxuZnVuY3Rpb24gdG9CYXNlNjQoaW5wdXQsIHVzZVVybFRlbXBsYXRlID0gZmFsc2UsIHNraXBQYWRkaW5nID0gZmFsc2UsIHNraXBMZWFkaW5nWmVyb3MgPSBmYWxzZSkge1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgbGV0IGZsYWcxID0gMDtcclxuICAgIGxldCBmbGFnMiA9IDA7XHJcbiAgICBsZXQgb3V0cHV0ID0gXCJcIjtcclxuICAgIGNvbnN0IHRlbXBsYXRlID0gKHVzZVVybFRlbXBsYXRlKSA/IGJhc2U2NFVybFRlbXBsYXRlIDogYmFzZTY0VGVtcGxhdGU7XHJcbiAgICBpZiAoc2tpcExlYWRpbmdaZXJvcykge1xyXG4gICAgICAgIGxldCBub25aZXJvUG9zaXRpb24gPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQoaSkgIT09IDApIHtcclxuICAgICAgICAgICAgICAgIG5vblplcm9Qb3NpdGlvbiA9IGk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpbnB1dCA9IGlucHV0LnNsaWNlKG5vblplcm9Qb3NpdGlvbik7XHJcbiAgICB9XHJcbiAgICB3aGlsZSAoaSA8IGlucHV0Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGNocjEgPSBpbnB1dC5jaGFyQ29kZUF0KGkrKyk7XHJcbiAgICAgICAgaWYgKGkgPj0gaW5wdXQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZsYWcxID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2hyMiA9IGlucHV0LmNoYXJDb2RlQXQoaSsrKTtcclxuICAgICAgICBpZiAoaSA+PSBpbnB1dC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZmxhZzIgPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjaHIzID0gaW5wdXQuY2hhckNvZGVBdChpKyspO1xyXG4gICAgICAgIGNvbnN0IGVuYzEgPSBjaHIxID4+IDI7XHJcbiAgICAgICAgY29uc3QgZW5jMiA9ICgoY2hyMSAmIDB4MDMpIDw8IDQpIHwgKGNocjIgPj4gNCk7XHJcbiAgICAgICAgbGV0IGVuYzMgPSAoKGNocjIgJiAweDBGKSA8PCAyKSB8IChjaHIzID4+IDYpO1xyXG4gICAgICAgIGxldCBlbmM0ID0gY2hyMyAmIDB4M0Y7XHJcbiAgICAgICAgaWYgKGZsYWcxID09PSAxKSB7XHJcbiAgICAgICAgICAgIGVuYzMgPSBlbmM0ID0gNjQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZmxhZzIgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIGVuYzQgPSA2NDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2tpcFBhZGRpbmcpIHtcclxuICAgICAgICAgICAgaWYgKGVuYzMgPT09IDY0KSB7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gYCR7dGVtcGxhdGUuY2hhckF0KGVuYzEpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzIpfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZW5jNCA9PT0gNjQpIHtcclxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gYCR7dGVtcGxhdGUuY2hhckF0KGVuYzEpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzIpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzMpfWA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gYCR7dGVtcGxhdGUuY2hhckF0KGVuYzEpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzIpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzMpfSR7dGVtcGxhdGUuY2hhckF0KGVuYzQpfWA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG91dHB1dCArPSBgJHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMSl9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMil9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jMyl9JHt0ZW1wbGF0ZS5jaGFyQXQoZW5jNCl9YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3V0cHV0O1xyXG59XHJcbmZ1bmN0aW9uIGZyb21CYXNlNjQoaW5wdXQsIHVzZVVybFRlbXBsYXRlID0gZmFsc2UsIGN1dFRhaWxaZXJvcyA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCB0ZW1wbGF0ZSA9ICh1c2VVcmxUZW1wbGF0ZSkgPyBiYXNlNjRVcmxUZW1wbGF0ZSA6IGJhc2U2NFRlbXBsYXRlO1xyXG4gICAgZnVuY3Rpb24gaW5kZXhPZih0b1NlYXJjaCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjQ7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGVtcGxhdGUuY2hhckF0KGkpID09PSB0b1NlYXJjaClcclxuICAgICAgICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gNjQ7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiB0ZXN0KGluY29taW5nKSB7XHJcbiAgICAgICAgcmV0dXJuICgoaW5jb21pbmcgPT09IDY0KSA/IDB4MDAgOiBpbmNvbWluZyk7XHJcbiAgICB9XHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBsZXQgb3V0cHV0ID0gXCJcIjtcclxuICAgIHdoaWxlIChpIDwgaW5wdXQubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgZW5jMSA9IGluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpO1xyXG4gICAgICAgIGNvbnN0IGVuYzIgPSAoaSA+PSBpbnB1dC5sZW5ndGgpID8gMHgwMCA6IGluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpO1xyXG4gICAgICAgIGNvbnN0IGVuYzMgPSAoaSA+PSBpbnB1dC5sZW5ndGgpID8gMHgwMCA6IGluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpO1xyXG4gICAgICAgIGNvbnN0IGVuYzQgPSAoaSA+PSBpbnB1dC5sZW5ndGgpID8gMHgwMCA6IGluZGV4T2YoaW5wdXQuY2hhckF0KGkrKykpO1xyXG4gICAgICAgIGNvbnN0IGNocjEgPSAodGVzdChlbmMxKSA8PCAyKSB8ICh0ZXN0KGVuYzIpID4+IDQpO1xyXG4gICAgICAgIGNvbnN0IGNocjIgPSAoKHRlc3QoZW5jMikgJiAweDBGKSA8PCA0KSB8ICh0ZXN0KGVuYzMpID4+IDIpO1xyXG4gICAgICAgIGNvbnN0IGNocjMgPSAoKHRlc3QoZW5jMykgJiAweDAzKSA8PCA2KSB8IHRlc3QoZW5jNCk7XHJcbiAgICAgICAgb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyMSk7XHJcbiAgICAgICAgaWYgKGVuYzMgIT09IDY0KSB7XHJcbiAgICAgICAgICAgIG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW5jNCAhPT0gNjQpIHtcclxuICAgICAgICAgICAgb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hyMyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGN1dFRhaWxaZXJvcykge1xyXG4gICAgICAgIGNvbnN0IG91dHB1dExlbmd0aCA9IG91dHB1dC5sZW5ndGg7XHJcbiAgICAgICAgbGV0IG5vblplcm9TdGFydCA9ICgtMSk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IChvdXRwdXRMZW5ndGggLSAxKTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgaWYgKG91dHB1dC5jaGFyQ29kZUF0KGkpICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBub25aZXJvU3RhcnQgPSBpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5vblplcm9TdGFydCAhPT0gKC0xKSkge1xyXG4gICAgICAgICAgICBvdXRwdXQgPSBvdXRwdXQuc2xpY2UoMCwgbm9uWmVyb1N0YXJ0ICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvdXRwdXQgPSBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvdXRwdXQ7XHJcbn1cclxuZnVuY3Rpb24gYXJyYXlCdWZmZXJUb1N0cmluZyhidWZmZXIpIHtcclxuICAgIGxldCByZXN1bHRTdHJpbmcgPSBcIlwiO1xyXG4gICAgY29uc3QgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XHJcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygdmlldykge1xyXG4gICAgICAgIHJlc3VsdFN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdFN0cmluZztcclxufVxyXG5mdW5jdGlvbiBzdHJpbmdUb0FycmF5QnVmZmVyKHN0cikge1xyXG4gICAgY29uc3Qgc3RyaW5nTGVuZ3RoID0gc3RyLmxlbmd0aDtcclxuICAgIGNvbnN0IHJlc3VsdEJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihzdHJpbmdMZW5ndGgpO1xyXG4gICAgY29uc3QgcmVzdWx0VmlldyA9IG5ldyBVaW50OEFycmF5KHJlc3VsdEJ1ZmZlcik7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZ0xlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgcmVzdWx0Vmlld1tpXSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdEJ1ZmZlcjtcclxufVxyXG5jb25zdCBsb2cyID0gTWF0aC5sb2coMik7XHJcbmZ1bmN0aW9uIG5lYXJlc3RQb3dlck9mMihsZW5ndGgpIHtcclxuICAgIGNvbnN0IGJhc2UgPSAoTWF0aC5sb2cobGVuZ3RoKSAvIGxvZzIpO1xyXG4gICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGJhc2UpO1xyXG4gICAgY29uc3Qgcm91bmQgPSBNYXRoLnJvdW5kKGJhc2UpO1xyXG4gICAgcmV0dXJuICgoZmxvb3IgPT09IHJvdW5kKSA/IGZsb29yIDogcm91bmQpO1xyXG59XHJcbmZ1bmN0aW9uIGNsZWFyUHJvcHMob2JqZWN0LCBwcm9wc0FycmF5KSB7XHJcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHNBcnJheSkge1xyXG4gICAgICAgIGRlbGV0ZSBvYmplY3RbcHJvcF07XHJcbiAgICB9XHJcbn1cblxuZXhwb3J0IHsgYXJyYXlCdWZmZXJUb1N0cmluZywgYnVmZmVyVG9IZXhDb2RlcywgY2hlY2tCdWZmZXJQYXJhbXMsIGNsZWFyUHJvcHMsIGZyb21CYXNlNjQsIGdldFBhcmFtZXRlcnNWYWx1ZSwgZ2V0VVRDRGF0ZSwgaXNFcXVhbEJ1ZmZlciwgbmVhcmVzdFBvd2VyT2YyLCBwYWROdW1iZXIsIHN0cmluZ1RvQXJyYXlCdWZmZXIsIHRvQmFzZTY0LCB1dGlsQ29uY2F0QnVmLCB1dGlsQ29uY2F0VmlldywgdXRpbERlY29kZVRDLCB1dGlsRW5jb2RlVEMsIHV0aWxGcm9tQmFzZSwgdXRpbFRvQmFzZSB9O1xuIiwgIi8qIVxuICogQ29weXJpZ2h0IChjKSAyMDE0LCBHTU8gR2xvYmFsU2lnblxuICogQ29weXJpZ2h0IChjKSAyMDE1LTIwMjIsIFBlY3VsaWFyIFZlbnR1cmVzXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogXG4gKiBBdXRob3IgMjAxNC0yMDE5LCBZdXJ5IFN0cm96aGV2c2t5XG4gKiBcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sXG4gKiBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKiBcbiAqICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzXG4gKiAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICogXG4gKiAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICogICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3JcbiAqICAgb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqIFxuICogKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tXG4gKiAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uXG4gKiBcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiIEFORFxuICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SXG4gKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUztcbiAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTlxuICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTXG4gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqIFxuICovXG5cbmltcG9ydCAqIGFzIHB2dHN1dGlscyBmcm9tICdwdnRzdXRpbHMnO1xuaW1wb3J0ICogYXMgcHZ1dGlscyBmcm9tICdwdnV0aWxzJztcblxuZnVuY3Rpb24gYXNzZXJ0QmlnSW50KCkge1xyXG4gICAgaWYgKHR5cGVvZiBCaWdJbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCaWdJbnQgaXMgbm90IGRlZmluZWQuIFlvdXIgZW52aXJvbm1lbnQgZG9lc24ndCBpbXBsZW1lbnQgQmlnSW50LlwiKTtcclxuICAgIH1cclxufVxyXG5mdW5jdGlvbiBjb25jYXQoYnVmZmVycykge1xyXG4gICAgbGV0IG91dHB1dExlbmd0aCA9IDA7XHJcbiAgICBsZXQgcHJldkxlbmd0aCA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1ZmZlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBidWZmZXIgPSBidWZmZXJzW2ldO1xyXG4gICAgICAgIG91dHB1dExlbmd0aCArPSBidWZmZXIuYnl0ZUxlbmd0aDtcclxuICAgIH1cclxuICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShvdXRwdXRMZW5ndGgpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyID0gYnVmZmVyc1tpXTtcclxuICAgICAgICByZXRWaWV3LnNldChuZXcgVWludDhBcnJheShidWZmZXIpLCBwcmV2TGVuZ3RoKTtcclxuICAgICAgICBwcmV2TGVuZ3RoICs9IGJ1ZmZlci5ieXRlTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG59XHJcbmZ1bmN0aW9uIGNoZWNrQnVmZmVyUGFyYW1zKGJhc2VCbG9jaywgaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgaWYgKCEoaW5wdXRCdWZmZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dEJ1ZmZlciBtdXN0IGJlICdVaW50OEFycmF5J1wiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICghaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dEJ1ZmZlciBoYXMgemVybyBsZW5ndGhcIjtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRPZmZzZXQgPCAwKSB7XHJcbiAgICAgICAgYmFzZUJsb2NrLmVycm9yID0gXCJXcm9uZyBwYXJhbWV0ZXI6IGlucHV0T2Zmc2V0IGxlc3MgdGhhbiB6ZXJvXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0TGVuZ3RoIDwgMCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiV3JvbmcgcGFyYW1ldGVyOiBpbnB1dExlbmd0aCBsZXNzIHRoYW4gemVyb1wiO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICgoaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCAtIGlucHV0T2Zmc2V0IC0gaW5wdXRMZW5ndGgpIDwgMCkge1xyXG4gICAgICAgIGJhc2VCbG9jay5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWQgKGluY29uc2lzdGVudCBvZmZzZXQgYW5kIGxlbmd0aCB2YWx1ZXMpXCI7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cblxuY2xhc3MgVmlld1dyaXRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICB9XHJcbiAgICB3cml0ZShidWYpIHtcclxuICAgICAgICB0aGlzLml0ZW1zLnB1c2goYnVmKTtcclxuICAgIH1cclxuICAgIGZpbmFsKCkge1xyXG4gICAgICAgIHJldHVybiBjb25jYXQodGhpcy5pdGVtcyk7XHJcbiAgICB9XHJcbn1cblxuY29uc3QgcG93ZXJzMiA9IFtuZXcgVWludDhBcnJheShbMV0pXTtcclxuY29uc3QgZGlnaXRzU3RyaW5nID0gXCIwMTIzNDU2Nzg5XCI7XHJcbmNvbnN0IE5BTUUgPSBcIm5hbWVcIjtcclxuY29uc3QgVkFMVUVfSEVYX1ZJRVcgPSBcInZhbHVlSGV4Vmlld1wiO1xyXG5jb25zdCBJU19IRVhfT05MWSA9IFwiaXNIZXhPbmx5XCI7XHJcbmNvbnN0IElEX0JMT0NLID0gXCJpZEJsb2NrXCI7XHJcbmNvbnN0IFRBR19DTEFTUyA9IFwidGFnQ2xhc3NcIjtcclxuY29uc3QgVEFHX05VTUJFUiA9IFwidGFnTnVtYmVyXCI7XHJcbmNvbnN0IElTX0NPTlNUUlVDVEVEID0gXCJpc0NvbnN0cnVjdGVkXCI7XHJcbmNvbnN0IEZST01fQkVSID0gXCJmcm9tQkVSXCI7XHJcbmNvbnN0IFRPX0JFUiA9IFwidG9CRVJcIjtcclxuY29uc3QgTE9DQUwgPSBcImxvY2FsXCI7XHJcbmNvbnN0IEVNUFRZX1NUUklORyA9IFwiXCI7XHJcbmNvbnN0IEVNUFRZX0JVRkZFUiA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcclxuY29uc3QgRU1QVFlfVklFVyA9IG5ldyBVaW50OEFycmF5KDApO1xyXG5jb25zdCBFTkRfT0ZfQ09OVEVOVF9OQU1FID0gXCJFbmRPZkNvbnRlbnRcIjtcclxuY29uc3QgT0NURVRfU1RSSU5HX05BTUUgPSBcIk9DVEVUIFNUUklOR1wiO1xyXG5jb25zdCBCSVRfU1RSSU5HX05BTUUgPSBcIkJJVCBTVFJJTkdcIjtcblxuZnVuY3Rpb24gSGV4QmxvY2soQmFzZUNsYXNzKSB7XHJcbiAgICB2YXIgX2E7XHJcbiAgICByZXR1cm4gX2EgPSBjbGFzcyBTb21lIGV4dGVuZHMgQmFzZUNsYXNzIHtcclxuICAgICAgICAgICAgY29uc3RydWN0b3IoLi4uYXJncykge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9hO1xyXG4gICAgICAgICAgICAgICAgc3VwZXIoLi4uYXJncyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBhcmdzWzBdIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSAoX2EgPSBwYXJhbXMuaXNIZXhPbmx5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gcGFyYW1zLnZhbHVlSGV4ID8gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkocGFyYW1zLnZhbHVlSGV4KSA6IEVNUFRZX1ZJRVc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ2V0IHZhbHVlSGV4KCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldCB2YWx1ZUhleCh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3ID0gaW5wdXRCdWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciA/IG5ldyBVaW50OEFycmF5KGlucHV0QnVmZmVyKSA6IGlucHV0QnVmZmVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCB2aWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kTGVuZ3RoID0gaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aDtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgZW5kTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiWmVybyBidWZmZXIgbGVuZ3RoXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBpbnB1dExlbmd0aDtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmRMZW5ndGg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdG9CRVIoc2l6ZU9ubHkgPSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzSGV4T25seSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkZsYWcgJ2lzSGV4T25seScgaXMgbm90IHNldCwgYWJvcnRcIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCA9PT0gdGhpcy52YWx1ZUhleFZpZXcuYnVmZmVyLmJ5dGVMZW5ndGgpXHJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnZhbHVlSGV4Vmlldy5idWZmZXJcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRvSlNPTigpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgICAgICAgICAgaXNIZXhPbmx5OiB0aGlzLmlzSGV4T25seSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUhleDogcHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy52YWx1ZUhleFZpZXcpLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgX2EuTkFNRSA9IFwiaGV4QmxvY2tcIixcclxuICAgICAgICBfYTtcclxufVxuXG5jbGFzcyBMb2NhbEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGJsb2NrTGVuZ3RoID0gMCwgZXJyb3IgPSBFTVBUWV9TVFJJTkcsIHdhcm5pbmdzID0gW10sIHZhbHVlQmVmb3JlRGVjb2RlID0gRU1QVFlfVklFVywgfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IGJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcclxuICAgICAgICB0aGlzLndhcm5pbmdzID0gd2FybmluZ3M7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJlZm9yZURlY29kZVZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheSh2YWx1ZUJlZm9yZURlY29kZSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgYmxvY2tOYW1lKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLk5BTUU7XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsdWVCZWZvcmVEZWNvZGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVCZWZvcmVEZWNvZGVWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgc2V0IHZhbHVlQmVmb3JlRGVjb2RlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJlZm9yZURlY29kZVZpZXcgPSBuZXcgVWludDhBcnJheSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYmxvY2tOYW1lOiB0aGlzLmNvbnN0cnVjdG9yLk5BTUUsXHJcbiAgICAgICAgICAgIGJsb2NrTGVuZ3RoOiB0aGlzLmJsb2NrTGVuZ3RoLFxyXG4gICAgICAgICAgICBlcnJvcjogdGhpcy5lcnJvcixcclxuICAgICAgICAgICAgd2FybmluZ3M6IHRoaXMud2FybmluZ3MsXHJcbiAgICAgICAgICAgIHZhbHVlQmVmb3JlRGVjb2RlOiBwdnRzdXRpbHMuQ29udmVydC5Ub0hleCh0aGlzLnZhbHVlQmVmb3JlRGVjb2RlVmlldyksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbEJhc2VCbG9jay5OQU1FID0gXCJiYXNlQmxvY2tcIjtcblxuY2xhc3MgVmFsdWVCbG9jayBleHRlbmRzIExvY2FsQmFzZUJsb2NrIHtcclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIHRocm93IFR5cGVFcnJvcihcIlVzZXIgbmVlZCB0byBtYWtlIGEgc3BlY2lmaWMgZnVuY3Rpb24gaW4gYSBjbGFzcyB3aGljaCBleHRlbmRzICdWYWx1ZUJsb2NrJ1wiKTtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5LCB3cml0ZXIpIHtcclxuICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJVc2VyIG5lZWQgdG8gbWFrZSBhIHNwZWNpZmljIGZ1bmN0aW9uIGluIGEgY2xhc3Mgd2hpY2ggZXh0ZW5kcyAnVmFsdWVCbG9jaydcIik7XHJcbiAgICB9XHJcbn1cclxuVmFsdWVCbG9jay5OQU1FID0gXCJ2YWx1ZUJsb2NrXCI7XG5cbmNsYXNzIExvY2FsSWRlbnRpZmljYXRpb25CbG9jayBleHRlbmRzIEhleEJsb2NrKExvY2FsQmFzZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGlkQmxvY2sgPSB7fSwgfSA9IHt9KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgaWYgKGlkQmxvY2spIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSAoX2EgPSBpZEJsb2NrLmlzSGV4T25seSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gaWRCbG9jay52YWx1ZUhleCA/IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlkQmxvY2sudmFsdWVIZXgpIDogRU1QVFlfVklFVztcclxuICAgICAgICAgICAgdGhpcy50YWdDbGFzcyA9IChfYiA9IGlkQmxvY2sudGFnQ2xhc3MpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IC0xO1xyXG4gICAgICAgICAgICB0aGlzLnRhZ051bWJlciA9IChfYyA9IGlkQmxvY2sudGFnTnVtYmVyKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAtMTtcclxuICAgICAgICAgICAgdGhpcy5pc0NvbnN0cnVjdGVkID0gKF9kID0gaWRCbG9jay5pc0NvbnN0cnVjdGVkKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFnQ2xhc3MgPSAtMTtcclxuICAgICAgICAgICAgdGhpcy50YWdOdW1iZXIgPSAtMTtcclxuICAgICAgICAgICAgdGhpcy5pc0NvbnN0cnVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkgPSBmYWxzZSkge1xyXG4gICAgICAgIGxldCBmaXJzdE9jdGV0ID0gMDtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMudGFnQ2xhc3MpIHtcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgZmlyc3RPY3RldCB8PSAweDAwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgIGZpcnN0T2N0ZXQgfD0gMHg0MDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgICAgICAgICBmaXJzdE9jdGV0IHw9IDB4ODA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgICAgICAgICAgZmlyc3RPY3RldCB8PSAweEMwO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJVbmtub3duIHRhZyBjbGFzc1wiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXNDb25zdHJ1Y3RlZClcclxuICAgICAgICAgICAgZmlyc3RPY3RldCB8PSAweDIwO1xyXG4gICAgICAgIGlmICh0aGlzLnRhZ051bWJlciA8IDMxICYmICF0aGlzLmlzSGV4T25seSkge1xyXG4gICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoMSk7XHJcbiAgICAgICAgICAgIGlmICghc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgICAgIGxldCBudW1iZXIgPSB0aGlzLnRhZ051bWJlcjtcclxuICAgICAgICAgICAgICAgIG51bWJlciAmPSAweDFGO1xyXG4gICAgICAgICAgICAgICAgZmlyc3RPY3RldCB8PSBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3WzBdID0gZmlyc3RPY3RldDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5pc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZEJ1ZiA9IHB2dXRpbHMudXRpbFRvQmFzZSh0aGlzLnRhZ051bWJlciwgNyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZW5jb2RlZEJ1Zik7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSBlbmNvZGVkQnVmLmJ5dGVMZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheShzaXplICsgMSk7XHJcbiAgICAgICAgICAgIHJldFZpZXdbMF0gPSAoZmlyc3RPY3RldCB8IDB4MUYpO1xyXG4gICAgICAgICAgICBpZiAoIXNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IChzaXplIC0gMSk7IGkrKylcclxuICAgICAgICAgICAgICAgICAgICByZXRWaWV3W2kgKyAxXSA9IGVuY29kZWRWaWV3W2ldIHwgMHg4MDtcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbc2l6ZV0gPSBlbmNvZGVkVmlld1tzaXplIC0gMV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCArIDEpO1xyXG4gICAgICAgIHJldFZpZXdbMF0gPSAoZmlyc3RPY3RldCB8IDB4MUYpO1xyXG4gICAgICAgIGlmICghc2l6ZU9ubHkpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VyVmlldyA9IHRoaXMudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IChjdXJWaWV3Lmxlbmd0aCAtIDEpOyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W2kgKyAxXSA9IGN1clZpZXdbaV0gfCAweDgwO1xyXG4gICAgICAgICAgICByZXRWaWV3W3RoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGhdID0gY3VyVmlld1tjdXJWaWV3Lmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0Vmlldy5idWZmZXI7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBpbnB1dFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCBpbnB1dFZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpbnRCdWZmZXIgPSBpbnB1dFZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGlmIChpbnRCdWZmZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlplcm8gYnVmZmVyIGxlbmd0aFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRhZ0NsYXNzTWFzayA9IGludEJ1ZmZlclswXSAmIDB4QzA7XHJcbiAgICAgICAgc3dpdGNoICh0YWdDbGFzc01hc2spIHtcclxuICAgICAgICAgICAgY2FzZSAweDAwOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50YWdDbGFzcyA9ICgxKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDB4NDA6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ0NsYXNzID0gKDIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMHg4MDpcclxuICAgICAgICAgICAgICAgIHRoaXMudGFnQ2xhc3MgPSAoMyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAweEMwOlxyXG4gICAgICAgICAgICAgICAgdGhpcy50YWdDbGFzcyA9ICg0KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiVW5rbm93biB0YWcgY2xhc3NcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0NvbnN0cnVjdGVkID0gKGludEJ1ZmZlclswXSAmIDB4MjApID09PSAweDIwO1xyXG4gICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgdGFnTnVtYmVyTWFzayA9IGludEJ1ZmZlclswXSAmIDB4MUY7XHJcbiAgICAgICAgaWYgKHRhZ051bWJlck1hc2sgIT09IDB4MUYpIHtcclxuICAgICAgICAgICAgdGhpcy50YWdOdW1iZXIgPSAodGFnTnVtYmVyTWFzayk7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGNvdW50ID0gMTtcclxuICAgICAgICAgICAgbGV0IGludFRhZ051bWJlckJ1ZmZlciA9IHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoMjU1KTtcclxuICAgICAgICAgICAgbGV0IHRhZ051bWJlckJ1ZmZlck1heExlbmd0aCA9IDI1NTtcclxuICAgICAgICAgICAgd2hpbGUgKGludEJ1ZmZlcltjb3VudF0gJiAweDgwKSB7XHJcbiAgICAgICAgICAgICAgICBpbnRUYWdOdW1iZXJCdWZmZXJbY291bnQgLSAxXSA9IGludEJ1ZmZlcltjb3VudF0gJiAweDdGO1xyXG4gICAgICAgICAgICAgICAgY291bnQrKztcclxuICAgICAgICAgICAgICAgIGlmIChjb3VudCA+PSBpbnRCdWZmZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWRcIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoY291bnQgPT09IHRhZ051bWJlckJ1ZmZlck1heExlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhZ051bWJlckJ1ZmZlck1heExlbmd0aCArPSAyNTU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVtcEJ1ZmZlclZpZXcgPSBuZXcgVWludDhBcnJheSh0YWdOdW1iZXJCdWZmZXJNYXhMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW50VGFnTnVtYmVyQnVmZmVyLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQnVmZmVyVmlld1tpXSA9IGludFRhZ051bWJlckJ1ZmZlcltpXTtcclxuICAgICAgICAgICAgICAgICAgICBpbnRUYWdOdW1iZXJCdWZmZXIgPSB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHRhZ051bWJlckJ1ZmZlck1heExlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IChjb3VudCArIDEpO1xyXG4gICAgICAgICAgICBpbnRUYWdOdW1iZXJCdWZmZXJbY291bnQgLSAxXSA9IGludEJ1ZmZlcltjb3VudF0gJiAweDdGO1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wQnVmZmVyVmlldyA9IG5ldyBVaW50OEFycmF5KGNvdW50KTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgdGVtcEJ1ZmZlclZpZXdbaV0gPSBpbnRUYWdOdW1iZXJCdWZmZXJbaV07XHJcbiAgICAgICAgICAgIGludFRhZ051bWJlckJ1ZmZlciA9IHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoY291bnQpO1xyXG4gICAgICAgICAgICBpbnRUYWdOdW1iZXJCdWZmZXIuc2V0KHRlbXBCdWZmZXJWaWV3KTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYmxvY2tMZW5ndGggPD0gOSlcclxuICAgICAgICAgICAgICAgIHRoaXMudGFnTnVtYmVyID0gcHZ1dGlscy51dGlsRnJvbUJhc2UoaW50VGFnTnVtYmVyQnVmZmVyLCA3KTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJUYWcgdG9vIGxvbmcsIHJlcHJlc2VudGVkIGFzIGhleC1jb2RlZFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKCh0aGlzLnRhZ0NsYXNzID09PSAxKSkgJiZcclxuICAgICAgICAgICAgKHRoaXMuaXNDb25zdHJ1Y3RlZCkpIHtcclxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLnRhZ051bWJlcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgY2FzZSA1OlxyXG4gICAgICAgICAgICAgICAgY2FzZSA2OlxyXG4gICAgICAgICAgICAgICAgY2FzZSA5OlxyXG4gICAgICAgICAgICAgICAgY2FzZSAxMzpcclxuICAgICAgICAgICAgICAgIGNhc2UgMTQ6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDIzOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAyNDpcclxuICAgICAgICAgICAgICAgIGNhc2UgMzE6XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMyOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAzMzpcclxuICAgICAgICAgICAgICAgIGNhc2UgMzQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiQ29uc3RydWN0ZWQgZW5jb2RpbmcgdXNlZCBmb3IgcHJpbWl0aXZlIHR5cGVcIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB0YWdDbGFzczogdGhpcy50YWdDbGFzcyxcclxuICAgICAgICAgICAgdGFnTnVtYmVyOiB0aGlzLnRhZ051bWJlcixcclxuICAgICAgICAgICAgaXNDb25zdHJ1Y3RlZDogdGhpcy5pc0NvbnN0cnVjdGVkLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxJZGVudGlmaWNhdGlvbkJsb2NrLk5BTUUgPSBcImlkZW50aWZpY2F0aW9uQmxvY2tcIjtcblxuY2xhc3MgTG9jYWxMZW5ndGhCbG9jayBleHRlbmRzIExvY2FsQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgbGVuQmxvY2sgPSB7fSwgfSA9IHt9KSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYiwgX2M7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmlzSW5kZWZpbml0ZUZvcm0gPSAoX2EgPSBsZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZTtcclxuICAgICAgICB0aGlzLmxvbmdGb3JtVXNlZCA9IChfYiA9IGxlbkJsb2NrLmxvbmdGb3JtVXNlZCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSAoX2MgPSBsZW5CbG9jay5sZW5ndGgpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IDA7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBjb25zdCB2aWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgdmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGludEJ1ZmZlciA9IHZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGlmIChpbnRCdWZmZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlplcm8gYnVmZmVyIGxlbmd0aFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbnRCdWZmZXJbMF0gPT09IDB4RkYpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiTGVuZ3RoIGJsb2NrIDB4RkYgaXMgcmVzZXJ2ZWQgYnkgc3RhbmRhcmRcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzSW5kZWZpbml0ZUZvcm0gPSBpbnRCdWZmZXJbMF0gPT09IDB4ODA7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbmRlZmluaXRlRm9ybSkge1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gMTtcclxuICAgICAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvbmdGb3JtVXNlZCA9ICEhKGludEJ1ZmZlclswXSAmIDB4ODApO1xyXG4gICAgICAgIGlmICh0aGlzLmxvbmdGb3JtVXNlZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5sZW5ndGggPSAoaW50QnVmZmVyWzBdKTtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IDE7XHJcbiAgICAgICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyB0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY291bnQgPSBpbnRCdWZmZXJbMF0gJiAweDdGO1xyXG4gICAgICAgIGlmIChjb3VudCA+IDgpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiVG9vIGJpZyBpbnRlZ2VyXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChjb3VudCArIDEpID4gaW50QnVmZmVyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFbmQgb2YgaW5wdXQgcmVhY2hlZCBiZWZvcmUgbWVzc2FnZSB3YXMgZnVsbHkgZGVjb2RlZFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGxlbk9mZnNldCA9IGlucHV0T2Zmc2V0ICsgMTtcclxuICAgICAgICBjb25zdCBsZW5ndGhCdWZmZXJWaWV3ID0gdmlldy5zdWJhcnJheShsZW5PZmZzZXQsIGxlbk9mZnNldCArIGNvdW50KTtcclxuICAgICAgICBpZiAobGVuZ3RoQnVmZmVyVmlld1tjb3VudCAtIDFdID09PSAweDAwKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJOZWVkbGVzc2x5IGxvbmcgZW5jb2RlZCBsZW5ndGhcIik7XHJcbiAgICAgICAgdGhpcy5sZW5ndGggPSBwdnV0aWxzLnV0aWxGcm9tQmFzZShsZW5ndGhCdWZmZXJWaWV3LCA4KTtcclxuICAgICAgICBpZiAodGhpcy5sb25nRm9ybVVzZWQgJiYgKHRoaXMubGVuZ3RoIDw9IDEyNykpXHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlVubmVjZXNzYXJ5IHVzYWdlIG9mIGxvbmcgbGVuZ3RoIGZvcm1cIik7XHJcbiAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IGNvdW50ICsgMTtcclxuICAgICAgICByZXR1cm4gKGlucHV0T2Zmc2V0ICsgdGhpcy5ibG9ja0xlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSA9IGZhbHNlKSB7XHJcbiAgICAgICAgbGV0IHJldEJ1ZjtcclxuICAgICAgICBsZXQgcmV0VmlldztcclxuICAgICAgICBpZiAodGhpcy5sZW5ndGggPiAxMjcpXHJcbiAgICAgICAgICAgIHRoaXMubG9uZ0Zvcm1Vc2VkID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5pc0luZGVmaW5pdGVGb3JtKSB7XHJcbiAgICAgICAgICAgIHJldEJ1ZiA9IG5ldyBBcnJheUJ1ZmZlcigxKTtcclxuICAgICAgICAgICAgaWYgKHNpemVPbmx5ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHJldEJ1Zik7XHJcbiAgICAgICAgICAgICAgICByZXRWaWV3WzBdID0gMHg4MDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5sb25nRm9ybVVzZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgZW5jb2RlZEJ1ZiA9IHB2dXRpbHMudXRpbFRvQmFzZSh0aGlzLmxlbmd0aCwgOCk7XHJcbiAgICAgICAgICAgIGlmIChlbmNvZGVkQnVmLmJ5dGVMZW5ndGggPiAxMjcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlRvbyBiaWcgbGVuZ3RoXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKEVNUFRZX0JVRkZFUik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0QnVmID0gbmV3IEFycmF5QnVmZmVyKGVuY29kZWRCdWYuYnl0ZUxlbmd0aCArIDEpO1xyXG4gICAgICAgICAgICBpZiAoc2l6ZU9ubHkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkVmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYpO1xyXG4gICAgICAgICAgICByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgcmV0Vmlld1swXSA9IGVuY29kZWRCdWYuYnl0ZUxlbmd0aCB8IDB4ODA7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W2kgKyAxXSA9IGVuY29kZWRWaWV3W2ldO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIoMSk7XHJcbiAgICAgICAgaWYgKHNpemVPbmx5ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgcmV0Vmlld1swXSA9IHRoaXMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBpc0luZGVmaW5pdGVGb3JtOiB0aGlzLmlzSW5kZWZpbml0ZUZvcm0sXHJcbiAgICAgICAgICAgIGxvbmdGb3JtVXNlZDogdGhpcy5sb25nRm9ybVVzZWQsXHJcbiAgICAgICAgICAgIGxlbmd0aDogdGhpcy5sZW5ndGgsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbExlbmd0aEJsb2NrLk5BTUUgPSBcImxlbmd0aEJsb2NrXCI7XG5cbmNvbnN0IHR5cGVTdG9yZSA9IHt9O1xuXG5jbGFzcyBCYXNlQmxvY2sgZXh0ZW5kcyBMb2NhbEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IG5hbWUgPSBFTVBUWV9TVFJJTkcsIG9wdGlvbmFsID0gZmFsc2UsIHByaW1pdGl2ZVNjaGVtYSwgLi4ucGFyYW1ldGVycyB9ID0ge30sIHZhbHVlQmxvY2tUeXBlKSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLm9wdGlvbmFsID0gb3B0aW9uYWw7XHJcbiAgICAgICAgaWYgKHByaW1pdGl2ZVNjaGVtYSkge1xyXG4gICAgICAgICAgICB0aGlzLnByaW1pdGl2ZVNjaGVtYSA9IHByaW1pdGl2ZVNjaGVtYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrID0gbmV3IExvY2FsSWRlbnRpZmljYXRpb25CbG9jayhwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmxlbkJsb2NrID0gbmV3IExvY2FsTGVuZ3RoQmxvY2socGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrID0gdmFsdWVCbG9ja1R5cGUgPyBuZXcgdmFsdWVCbG9ja1R5cGUocGFyYW1ldGVycykgOiBuZXcgVmFsdWVCbG9jayhwYXJhbWV0ZXJzKTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdE9mZnNldCA9IHRoaXMudmFsdWVCbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgKHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSkgPyBpbnB1dExlbmd0aCA6IHRoaXMubGVuQmxvY2subGVuZ3RoKTtcclxuICAgICAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yID0gdGhpcy52YWx1ZUJsb2NrLmVycm9yO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuaWRCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5pZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy5sZW5CbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMudmFsdWVCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy52YWx1ZUJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgY29uc3QgX3dyaXRlciA9IHdyaXRlciB8fCBuZXcgVmlld1dyaXRlcigpO1xyXG4gICAgICAgIGlmICghd3JpdGVyKSB7XHJcbiAgICAgICAgICAgIHByZXBhcmVJbmRlZmluaXRlRm9ybSh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaWRCbG9ja0J1ZiA9IHRoaXMuaWRCbG9jay50b0JFUihzaXplT25seSk7XHJcbiAgICAgICAgX3dyaXRlci53cml0ZShpZEJsb2NrQnVmKTtcclxuICAgICAgICBpZiAodGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtKSB7XHJcbiAgICAgICAgICAgIF93cml0ZXIud3JpdGUobmV3IFVpbnQ4QXJyYXkoWzB4ODBdKS5idWZmZXIpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudG9CRVIoc2l6ZU9ubHksIF93cml0ZXIpO1xyXG4gICAgICAgICAgICBfd3JpdGVyLndyaXRlKG5ldyBBcnJheUJ1ZmZlcigyKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUJsb2NrQnVmID0gdGhpcy52YWx1ZUJsb2NrLnRvQkVSKHNpemVPbmx5KTtcclxuICAgICAgICAgICAgdGhpcy5sZW5CbG9jay5sZW5ndGggPSB2YWx1ZUJsb2NrQnVmLmJ5dGVMZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbkJsb2NrQnVmID0gdGhpcy5sZW5CbG9jay50b0JFUihzaXplT25seSk7XHJcbiAgICAgICAgICAgIF93cml0ZXIud3JpdGUobGVuQmxvY2tCdWYpO1xyXG4gICAgICAgICAgICBfd3JpdGVyLndyaXRlKHZhbHVlQmxvY2tCdWYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXdyaXRlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gX3dyaXRlci5maW5hbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIGlkQmxvY2s6IHRoaXMuaWRCbG9jay50b0pTT04oKSxcclxuICAgICAgICAgICAgbGVuQmxvY2s6IHRoaXMubGVuQmxvY2sudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlQmxvY2s6IHRoaXMudmFsdWVCbG9jay50b0pTT04oKSxcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxyXG4gICAgICAgICAgICBvcHRpb25hbDogdGhpcy5vcHRpb25hbCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICh0aGlzLnByaW1pdGl2ZVNjaGVtYSlcclxuICAgICAgICAgICAgb2JqZWN0LnByaW1pdGl2ZVNjaGVtYSA9IHRoaXMucHJpbWl0aXZlU2NoZW1hLnRvSlNPTigpO1xyXG4gICAgICAgIHJldHVybiBvYmplY3Q7XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZyhlbmNvZGluZyA9IFwiYXNjaWlcIikge1xyXG4gICAgICAgIGlmIChlbmNvZGluZyA9PT0gXCJhc2NpaVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9uQXNjaWlFbmNvZGluZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy50b0JFUigpKTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7cHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy52YWx1ZUJsb2NrLnZhbHVlQmVmb3JlRGVjb2RlVmlldyl9YDtcclxuICAgIH1cclxuICAgIGlzRXF1YWwob3RoZXIpIHtcclxuICAgICAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvcikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0aGlzUmF3ID0gdGhpcy50b0JFUigpO1xyXG4gICAgICAgIGNvbnN0IG90aGVyUmF3ID0gb3RoZXIudG9CRVIoKTtcclxuICAgICAgICByZXR1cm4gcHZ1dGlscy5pc0VxdWFsQnVmZmVyKHRoaXNSYXcsIG90aGVyUmF3KTtcclxuICAgIH1cclxufVxyXG5CYXNlQmxvY2suTkFNRSA9IFwiQmFzZUJsb2NrXCI7XHJcbmZ1bmN0aW9uIHByZXBhcmVJbmRlZmluaXRlRm9ybShiYXNlQmxvY2spIHtcclxuICAgIGlmIChiYXNlQmxvY2sgaW5zdGFuY2VvZiB0eXBlU3RvcmUuQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGJhc2VCbG9jay52YWx1ZUJsb2NrLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGlmIChwcmVwYXJlSW5kZWZpbml0ZUZvcm0odmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICBiYXNlQmxvY2subGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gISFiYXNlQmxvY2subGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybTtcclxufVxuXG5jbGFzcyBCYXNlU3RyaW5nQmxvY2sgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSA9IEVNUFRZX1NUUklORywgLi4ucGFyYW1ldGVycyB9ID0ge30sIHN0cmluZ1ZhbHVlQmxvY2tUeXBlKSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgc3RyaW5nVmFsdWVCbG9ja1R5cGUpO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldFZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlQmxvY2sudmFsdWU7XHJcbiAgICB9XHJcbiAgICBzZXRWYWx1ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0T2Zmc2V0ID0gdGhpcy52YWx1ZUJsb2NrLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCAodGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtKSA/IGlucHV0TGVuZ3RoIDogdGhpcy5sZW5CbG9jay5sZW5ndGgpO1xyXG4gICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnZhbHVlQmxvY2suZXJyb3I7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZnJvbUJ1ZmZlcih0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3KTtcclxuICAgICAgICBpZiAoIXRoaXMuaWRCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5pZEJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy5sZW5CbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICBpZiAoIXRoaXMudmFsdWVCbG9jay5lcnJvci5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy52YWx1ZUJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAnJHt0aGlzLnZhbHVlQmxvY2sudmFsdWV9J2A7XHJcbiAgICB9XHJcbn1cclxuQmFzZVN0cmluZ0Jsb2NrLk5BTUUgPSBcIkJhc2VTdHJpbmdCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbFByaW1pdGl2ZVZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IGlzSGV4T25seSA9IHRydWUsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pc0hleE9ubHkgPSBpc0hleE9ubHk7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxQcmltaXRpdmVWYWx1ZUJsb2NrLk5BTUUgPSBcIlByaW1pdGl2ZVZhbHVlQmxvY2tcIjtcblxudmFyIF9hJHc7XHJcbmNsYXNzIFByaW1pdGl2ZSBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbFByaW1pdGl2ZVZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay5pc0NvbnN0cnVjdGVkID0gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuX2EkdyA9IFByaW1pdGl2ZTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5QcmltaXRpdmUgPSBfYSR3O1xyXG59KSgpO1xyXG5QcmltaXRpdmUuTkFNRSA9IFwiUFJJTUlUSVZFXCI7XG5cbmZ1bmN0aW9uIGxvY2FsQ2hhbmdlVHlwZShpbnB1dE9iamVjdCwgbmV3VHlwZSkge1xyXG4gICAgaWYgKGlucHV0T2JqZWN0IGluc3RhbmNlb2YgbmV3VHlwZSkge1xyXG4gICAgICAgIHJldHVybiBpbnB1dE9iamVjdDtcclxuICAgIH1cclxuICAgIGNvbnN0IG5ld09iamVjdCA9IG5ldyBuZXdUeXBlKCk7XHJcbiAgICBuZXdPYmplY3QuaWRCbG9jayA9IGlucHV0T2JqZWN0LmlkQmxvY2s7XHJcbiAgICBuZXdPYmplY3QubGVuQmxvY2sgPSBpbnB1dE9iamVjdC5sZW5CbG9jaztcclxuICAgIG5ld09iamVjdC53YXJuaW5ncyA9IGlucHV0T2JqZWN0Lndhcm5pbmdzO1xyXG4gICAgbmV3T2JqZWN0LnZhbHVlQmVmb3JlRGVjb2RlVmlldyA9IGlucHV0T2JqZWN0LnZhbHVlQmVmb3JlRGVjb2RlVmlldztcclxuICAgIHJldHVybiBuZXdPYmplY3Q7XHJcbn1cclxuZnVuY3Rpb24gbG9jYWxGcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCA9IDAsIGlucHV0TGVuZ3RoID0gaW5wdXRCdWZmZXIubGVuZ3RoKSB7XHJcbiAgICBjb25zdCBpbmNvbWluZ09mZnNldCA9IGlucHV0T2Zmc2V0O1xyXG4gICAgbGV0IHJldHVybk9iamVjdCA9IG5ldyBCYXNlQmxvY2soe30sIFZhbHVlQmxvY2spO1xyXG4gICAgY29uc3QgYmFzZUJsb2NrID0gbmV3IExvY2FsQmFzZUJsb2NrKCk7XHJcbiAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKGJhc2VCbG9jaywgaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpIHtcclxuICAgICAgICByZXR1cm5PYmplY3QuZXJyb3IgPSBiYXNlQmxvY2suZXJyb3I7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW50QnVmZmVyID0gaW5wdXRCdWZmZXIuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgaWYgKCFpbnRCdWZmZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gXCJaZXJvIGJ1ZmZlciBsZW5ndGhcIjtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBsZXQgcmVzdWx0T2Zmc2V0ID0gcmV0dXJuT2JqZWN0LmlkQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgIGlmIChyZXR1cm5PYmplY3QuaWRCbG9jay53YXJuaW5ncy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm5PYmplY3Qud2FybmluZ3MuY29uY2F0KHJldHVybk9iamVjdC5pZEJsb2NrLndhcm5pbmdzKTtcclxuICAgIH1cclxuICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gcmV0dXJuT2JqZWN0LmlkQmxvY2suZXJyb3I7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaW5wdXRPZmZzZXQgPSByZXN1bHRPZmZzZXQ7XHJcbiAgICBpbnB1dExlbmd0aCAtPSByZXR1cm5PYmplY3QuaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgIHJlc3VsdE9mZnNldCA9IHJldHVybk9iamVjdC5sZW5CbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpO1xyXG4gICAgaWYgKHJldHVybk9iamVjdC5sZW5CbG9jay53YXJuaW5ncy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm5PYmplY3Qud2FybmluZ3MuY29uY2F0KHJldHVybk9iamVjdC5sZW5CbG9jay53YXJuaW5ncyk7XHJcbiAgICB9XHJcbiAgICBpZiAocmVzdWx0T2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IHJldHVybk9iamVjdC5sZW5CbG9jay5lcnJvcjtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpbnB1dE9mZnNldCA9IHJlc3VsdE9mZnNldDtcclxuICAgIGlucHV0TGVuZ3RoIC09IHJldHVybk9iamVjdC5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgIGlmICghcmV0dXJuT2JqZWN0LmlkQmxvY2suaXNDb25zdHJ1Y3RlZCAmJlxyXG4gICAgICAgIHJldHVybk9iamVjdC5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtKSB7XHJcbiAgICAgICAgcmV0dXJuT2JqZWN0LmVycm9yID0gXCJJbmRlZmluaXRlIGxlbmd0aCBmb3JtIHVzZWQgZm9yIHByaW1pdGl2ZSBlbmNvZGluZyBmb3JtXCI7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb2Zmc2V0OiAtMSxcclxuICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgbGV0IG5ld0FTTjFUeXBlID0gQmFzZUJsb2NrO1xyXG4gICAgc3dpdGNoIChyZXR1cm5PYmplY3QuaWRCbG9jay50YWdDbGFzcykge1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgaWYgKChyZXR1cm5PYmplY3QuaWRCbG9jay50YWdOdW1iZXIgPj0gMzcpICYmXHJcbiAgICAgICAgICAgICAgICAocmV0dXJuT2JqZWN0LmlkQmxvY2suaXNIZXhPbmx5ID09PSBmYWxzZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IFwiVU5JVkVSU0FMIDM3IGFuZCB1cHBlciB0YWdzIGFyZSByZXNlcnZlZCBieSBBU04uMSBzdGFuZGFyZFwiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN3aXRjaCAocmV0dXJuT2JqZWN0LmlkQmxvY2sudGFnTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChyZXR1cm5PYmplY3QuaWRCbG9jay5pc0NvbnN0cnVjdGVkKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAocmV0dXJuT2JqZWN0LmxlbkJsb2NrLmxlbmd0aCA+IDApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IFwiVHlwZSBbVU5JVkVSU0FMIDBdIGlzIHJlc2VydmVkXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByZXR1cm5PYmplY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuRW5kT2ZDb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkJvb2xlYW47XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuSW50ZWdlcjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5CaXRTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuT2N0ZXRTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuTnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5PYmplY3RJZGVudGlmaWVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMDpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5FbnVtZXJhdGVkO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5VdGY4U3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxMzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5SZWxhdGl2ZU9iamVjdElkZW50aWZpZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE0OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlRJTUU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE1OlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybk9iamVjdC5lcnJvciA9IFwiW1VOSVZFUlNBTCAxNV0gaXMgcmVzZXJ2ZWQgYnkgQVNOLjEgc3RhbmRhcmRcIjtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IC0xLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJldHVybk9iamVjdFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE2OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlNlcXVlbmNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxNzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5TZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE4OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLk51bWVyaWNTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE5OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLlByaW50YWJsZVN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjA6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVGVsZXRleFN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjE6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVmlkZW90ZXhTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDIyOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLklBNVN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjM6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuVVRDVGltZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjQ6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuR2VuZXJhbGl6ZWRUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyNTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5HcmFwaGljU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyNjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5WaXNpYmxlU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyNzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5HZW5lcmFsU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyODpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5Vbml2ZXJzYWxTdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI5OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkNoYXJhY3RlclN0cmluZztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMzA6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSB0eXBlU3RvcmUuQm1wU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzMTpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5EQVRFO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzMjpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5UaW1lT2ZEYXk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDMzOlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0FTTjFUeXBlID0gdHlwZVN0b3JlLkRhdGVUaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzNDpcclxuICAgICAgICAgICAgICAgICAgICBuZXdBU04xVHlwZSA9IHR5cGVTdG9yZS5EdXJhdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdPYmplY3QgPSByZXR1cm5PYmplY3QuaWRCbG9jay5pc0NvbnN0cnVjdGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IHR5cGVTdG9yZS5Db25zdHJ1Y3RlZCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbmV3IHR5cGVTdG9yZS5QcmltaXRpdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICBuZXdPYmplY3QuaWRCbG9jayA9IHJldHVybk9iamVjdC5pZEJsb2NrO1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld09iamVjdC5sZW5CbG9jayA9IHJldHVybk9iamVjdC5sZW5CbG9jaztcclxuICAgICAgICAgICAgICAgICAgICBuZXdPYmplY3Qud2FybmluZ3MgPSByZXR1cm5PYmplY3Qud2FybmluZ3M7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuT2JqZWN0ID0gbmV3T2JqZWN0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICBjYXNlIDM6XHJcbiAgICAgICAgY2FzZSA0OlxyXG4gICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgICAgbmV3QVNOMVR5cGUgPSByZXR1cm5PYmplY3QuaWRCbG9jay5pc0NvbnN0cnVjdGVkXHJcbiAgICAgICAgICAgICAgICA/IHR5cGVTdG9yZS5Db25zdHJ1Y3RlZFxyXG4gICAgICAgICAgICAgICAgOiB0eXBlU3RvcmUuUHJpbWl0aXZlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybk9iamVjdCA9IGxvY2FsQ2hhbmdlVHlwZShyZXR1cm5PYmplY3QsIG5ld0FTTjFUeXBlKTtcclxuICAgIHJlc3VsdE9mZnNldCA9IHJldHVybk9iamVjdC5mcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgcmV0dXJuT2JqZWN0LmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm0gPyBpbnB1dExlbmd0aCA6IHJldHVybk9iamVjdC5sZW5CbG9jay5sZW5ndGgpO1xyXG4gICAgcmV0dXJuT2JqZWN0LnZhbHVlQmVmb3JlRGVjb2RlVmlldyA9IGlucHV0QnVmZmVyLnN1YmFycmF5KGluY29taW5nT2Zmc2V0LCBpbmNvbWluZ09mZnNldCArIHJldHVybk9iamVjdC5ibG9ja0xlbmd0aCk7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG9mZnNldDogcmVzdWx0T2Zmc2V0LFxyXG4gICAgICAgIHJlc3VsdDogcmV0dXJuT2JqZWN0XHJcbiAgICB9O1xyXG59XHJcbmZ1bmN0aW9uIGZyb21CRVIoaW5wdXRCdWZmZXIpIHtcclxuICAgIGlmICghaW5wdXRCdWZmZXIuYnl0ZUxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBCYXNlQmxvY2soe30sIFZhbHVlQmxvY2spO1xyXG4gICAgICAgIHJlc3VsdC5lcnJvciA9IFwiSW5wdXQgYnVmZmVyIGhhcyB6ZXJvIGxlbmd0aFwiO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9mZnNldDogLTEsXHJcbiAgICAgICAgICAgIHJlc3VsdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbG9jYWxGcm9tQkVSKHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKS5zbGljZSgpLCAwLCBpbnB1dEJ1ZmZlci5ieXRlTGVuZ3RoKTtcclxufVxuXG5mdW5jdGlvbiBjaGVja0xlbihpbmRlZmluaXRlTGVuZ3RoLCBsZW5ndGgpIHtcclxuICAgIGlmIChpbmRlZmluaXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIDE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGVuZ3RoO1xyXG59XHJcbmNsYXNzIExvY2FsQ29uc3RydWN0ZWRWYWx1ZUJsb2NrIGV4dGVuZHMgVmFsdWVCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlID0gW10sIGlzSW5kZWZpbml0ZUZvcm0gPSBmYWxzZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5pc0luZGVmaW5pdGVGb3JtID0gaXNJbmRlZmluaXRlRm9ybTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCB2aWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUJlZm9yZURlY29kZVZpZXcgPSB2aWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZUJlZm9yZURlY29kZVZpZXcubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlplcm8gYnVmZmVyIGxlbmd0aFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgY3VycmVudE9mZnNldCA9IGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIHdoaWxlIChjaGVja0xlbih0aGlzLmlzSW5kZWZpbml0ZUZvcm0sIGlucHV0TGVuZ3RoKSA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgcmV0dXJuT2JqZWN0ID0gbG9jYWxGcm9tQkVSKHZpZXcsIGN1cnJlbnRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgaWYgKHJldHVybk9iamVjdC5vZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gcmV0dXJuT2JqZWN0LnJlc3VsdC5lcnJvcjtcclxuICAgICAgICAgICAgICAgIHRoaXMud2FybmluZ3MuY29uY2F0KHJldHVybk9iamVjdC5yZXN1bHQud2FybmluZ3MpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN1cnJlbnRPZmZzZXQgPSByZXR1cm5PYmplY3Qub2Zmc2V0O1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoICs9IHJldHVybk9iamVjdC5yZXN1bHQuYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIGlucHV0TGVuZ3RoIC09IHJldHVybk9iamVjdC5yZXN1bHQuYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChyZXR1cm5PYmplY3QucmVzdWx0KTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNJbmRlZmluaXRlRm9ybSAmJiByZXR1cm5PYmplY3QucmVzdWx0LmNvbnN0cnVjdG9yLk5BTUUgPT09IEVORF9PRl9DT05URU5UX05BTUUpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzSW5kZWZpbml0ZUZvcm0pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVbdGhpcy52YWx1ZS5sZW5ndGggLSAxXS5jb25zdHJ1Y3Rvci5OQU1FID09PSBFTkRfT0ZfQ09OVEVOVF9OQU1FKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlLnBvcCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiTm8gRW5kT2ZDb250ZW50IGJsb2NrIGVuY29kZWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgY29uc3QgX3dyaXRlciA9IHdyaXRlciB8fCBuZXcgVmlld1dyaXRlcigpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlW2ldLnRvQkVSKHNpemVPbmx5LCBfd3JpdGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF3cml0ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIF93cml0ZXIuZmluYWwoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICBjb25zdCBvYmplY3QgPSB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICBpc0luZGVmaW5pdGVGb3JtOiB0aGlzLmlzSW5kZWZpbml0ZUZvcm0sXHJcbiAgICAgICAgICAgIHZhbHVlOiBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdGhpcy52YWx1ZSkge1xyXG4gICAgICAgICAgICBvYmplY3QudmFsdWUucHVzaCh2YWx1ZS50b0pTT04oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmplY3Q7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2suTkFNRSA9IFwiQ29uc3RydWN0ZWRWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSR2O1xyXG5jbGFzcyBDb25zdHJ1Y3RlZCBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLmlzQ29uc3RydWN0ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmlzSW5kZWZpbml0ZUZvcm0gPSB0aGlzLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm07XHJcbiAgICAgICAgY29uc3QgcmVzdWx0T2Zmc2V0ID0gdGhpcy52YWx1ZUJsb2NrLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCAodGhpcy5sZW5CbG9jay5pc0luZGVmaW5pdGVGb3JtKSA/IGlucHV0TGVuZ3RoIDogdGhpcy5sZW5CbG9jay5sZW5ndGgpO1xyXG4gICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnZhbHVlQmxvY2suZXJyb3I7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5pZEJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmlkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxlbkJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmxlbkJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIGlmICghdGhpcy52YWx1ZUJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLnZhbHVlQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMudmFsdWVCbG9jay52YWx1ZSkge1xyXG4gICAgICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZS50b1N0cmluZyhcImFzY2lpXCIpLnNwbGl0KFwiXFxuXCIpLm1hcChvID0+IGAgICR7b31gKS5qb2luKFwiXFxuXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYmxvY2tOYW1lID0gdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID09PSAzXHJcbiAgICAgICAgICAgID8gYFske3RoaXMuaWRCbG9jay50YWdOdW1iZXJ9XWBcclxuICAgICAgICAgICAgOiB0aGlzLmNvbnN0cnVjdG9yLk5BTUU7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5sZW5ndGhcclxuICAgICAgICAgICAgPyBgJHtibG9ja05hbWV9IDpcXG4ke3ZhbHVlcy5qb2luKFwiXFxuXCIpfWBcclxuICAgICAgICAgICAgOiBgJHtibG9ja05hbWV9IDpgO1xyXG4gICAgfVxyXG59XHJcbl9hJHYgPSBDb25zdHJ1Y3RlZDtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5Db25zdHJ1Y3RlZCA9IF9hJHY7XHJcbn0pKCk7XHJcbkNvbnN0cnVjdGVkLk5BTUUgPSBcIkNPTlNUUlVDVEVEXCI7XG5cbmNsYXNzIExvY2FsRW5kT2ZDb250ZW50VmFsdWVCbG9jayBleHRlbmRzIFZhbHVlQmxvY2sge1xyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0T2Zmc2V0O1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgfVxyXG59XHJcbkxvY2FsRW5kT2ZDb250ZW50VmFsdWVCbG9jay5vdmVycmlkZSA9IFwiRW5kT2ZDb250ZW50VmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkdTtcclxuY2xhc3MgRW5kT2ZDb250ZW50IGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsRW5kT2ZDb250ZW50VmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMDtcclxuICAgIH1cclxufVxyXG5fYSR1ID0gRW5kT2ZDb250ZW50O1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkVuZE9mQ29udGVudCA9IF9hJHU7XHJcbn0pKCk7XHJcbkVuZE9mQ29udGVudC5OQU1FID0gRU5EX09GX0NPTlRFTlRfTkFNRTtcblxudmFyIF9hJHQ7XHJcbmNsYXNzIE51bGwgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gNTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGlmICh0aGlzLmxlbkJsb2NrLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIk5vbi16ZXJvIGxlbmd0aCBvZiB2YWx1ZSBibG9jayBmb3IgTnVsbCB0eXBlXCIpO1xyXG4gICAgICAgIGlmICghdGhpcy5pZEJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmlkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxlbkJsb2NrLmVycm9yLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmxlbkJsb2NrLmJsb2NrTGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gaW5wdXRMZW5ndGg7XHJcbiAgICAgICAgaWYgKChpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKSA+IGlucHV0QnVmZmVyLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWQgKGluY29uc2lzdGVudCBvZmZzZXQgYW5kIGxlbmd0aCB2YWx1ZXMpXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5LCB3cml0ZXIpIHtcclxuICAgICAgICBjb25zdCByZXRCdWYgPSBuZXcgQXJyYXlCdWZmZXIoMik7XHJcbiAgICAgICAgaWYgKCFzaXplT25seSkge1xyXG4gICAgICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocmV0QnVmKTtcclxuICAgICAgICAgICAgcmV0Vmlld1swXSA9IDB4MDU7XHJcbiAgICAgICAgICAgIHJldFZpZXdbMV0gPSAweDAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAod3JpdGVyKSB7XHJcbiAgICAgICAgICAgIHdyaXRlci53cml0ZShyZXRCdWYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0QnVmO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9YDtcclxuICAgIH1cclxufVxyXG5fYSR0ID0gTnVsbDtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5OdWxsID0gX2EkdDtcclxufSkoKTtcclxuTnVsbC5OQU1FID0gXCJOVUxMXCI7XG5cbmNsYXNzIExvY2FsQm9vbGVhblZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIGlmIChwYXJhbWV0ZXJzLnZhbHVlSGV4KSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkocGFyYW1ldGVycy52YWx1ZUhleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGdldCB2YWx1ZSgpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IG9jdGV0IG9mIHRoaXMudmFsdWVIZXhWaWV3KSB7XHJcbiAgICAgICAgICAgIGlmIChvY3RldCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHNldCB2YWx1ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3WzBdID0gdmFsdWUgPyAweEZGIDogMHgwMDtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGlucHV0VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIGlucHV0VmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gaW5wdXRWaWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBpZiAoaW5wdXRMZW5ndGggPiAxKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJCb29sZWFuIHZhbHVlIGVuY29kZWQgaW4gbW9yZSB0aGVuIDEgb2N0ZXRcIik7XHJcbiAgICAgICAgdGhpcy5pc0hleE9ubHkgPSB0cnVlO1xyXG4gICAgICAgIHB2dXRpbHMudXRpbERlY29kZVRDLmNhbGwodGhpcyk7XHJcbiAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IGlucHV0TGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0JFUigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUhleFZpZXcuc2xpY2UoKTtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbEJvb2xlYW5WYWx1ZUJsb2NrLk5BTUUgPSBcIkJvb2xlYW5WYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRzO1xyXG5jbGFzcyBCb29sZWFuIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsQm9vbGVhblZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDE7XHJcbiAgICB9XHJcbiAgICBnZXRWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUJsb2NrLnZhbHVlO1xyXG4gICAgfVxyXG4gICAgc2V0VmFsdWUodmFsdWUpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7dGhpcy5nZXRWYWx1ZX1gO1xyXG4gICAgfVxyXG59XHJcbl9hJHMgPSBCb29sZWFuO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkJvb2xlYW4gPSBfYSRzO1xyXG59KSgpO1xyXG5Cb29sZWFuLk5BTUUgPSBcIkJPT0xFQU5cIjtcblxuY2xhc3MgTG9jYWxPY3RldFN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyBpc0NvbnN0cnVjdGVkID0gZmFsc2UsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pc0NvbnN0cnVjdGVkID0gaXNDb25zdHJ1Y3RlZDtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGxldCByZXN1bHRPZmZzZXQgPSAwO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmVzdWx0T2Zmc2V0ID0gTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2sucHJvdG90eXBlLmZyb21CRVIuY2FsbCh0aGlzLCBpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRCbG9ja05hbWUgPSB0aGlzLnZhbHVlW2ldLmNvbnN0cnVjdG9yLk5BTUU7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJsb2NrTmFtZSA9PT0gRU5EX09GX0NPTlRFTlRfTkFNRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSW5kZWZpbml0ZUZvcm0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJFbmRPZkNvbnRlbnQgaXMgdW5leHBlY3RlZCwgT0NURVQgU1RSSU5HIG1heSBjb25zaXN0cyBvZiBPQ1RFVCBTVFJJTkdzIG9ubHlcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QmxvY2tOYW1lICE9PSBPQ1RFVF9TVFJJTkdfTkFNRSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIk9DVEVUIFNUUklORyBtYXkgY29uc2lzdHMgb2YgT0NURVQgU1RSSU5HcyBvbmx5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgICAgIHJlc3VsdE9mZnNldCA9IHN1cGVyLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSBpbnB1dExlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5LCB3cml0ZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0NvbnN0cnVjdGVkKVxyXG4gICAgICAgICAgICByZXR1cm4gTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2sucHJvdG90eXBlLnRvQkVSLmNhbGwodGhpcywgc2l6ZU9ubHksIHdyaXRlcik7XHJcbiAgICAgICAgcmV0dXJuIHNpemVPbmx5XHJcbiAgICAgICAgICAgID8gbmV3IEFycmF5QnVmZmVyKHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGgpXHJcbiAgICAgICAgICAgIDogdGhpcy52YWx1ZUhleFZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIGlzQ29uc3RydWN0ZWQ6IHRoaXMuaXNDb25zdHJ1Y3RlZCxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsT2N0ZXRTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIk9jdGV0U3RyaW5nVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkcjtcclxuY2xhc3MgT2N0ZXRTdHJpbmcgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyBpZEJsb2NrID0ge30sIGxlbkJsb2NrID0ge30sIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgdmFyIF9iLCBfYztcclxuICAgICAgICAoX2IgPSBwYXJhbWV0ZXJzLmlzQ29uc3RydWN0ZWQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IChwYXJhbWV0ZXJzLmlzQ29uc3RydWN0ZWQgPSAhISgoX2MgPSBwYXJhbWV0ZXJzLnZhbHVlKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSk7XHJcbiAgICAgICAgc3VwZXIoe1xyXG4gICAgICAgICAgICBpZEJsb2NrOiB7XHJcbiAgICAgICAgICAgICAgICBpc0NvbnN0cnVjdGVkOiBwYXJhbWV0ZXJzLmlzQ29uc3RydWN0ZWQsXHJcbiAgICAgICAgICAgICAgICAuLi5pZEJsb2NrLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBsZW5CbG9jazoge1xyXG4gICAgICAgICAgICAgICAgLi4ubGVuQmxvY2ssXHJcbiAgICAgICAgICAgICAgICBpc0luZGVmaW5pdGVGb3JtOiAhIXBhcmFtZXRlcnMuaXNJbmRlZmluaXRlRm9ybSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLi4ucGFyYW1ldGVycyxcclxuICAgICAgICB9LCBMb2NhbE9jdGV0U3RyaW5nVmFsdWVCbG9jayk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gNDtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5pc0NvbnN0cnVjdGVkID0gdGhpcy5pZEJsb2NrLmlzQ29uc3RydWN0ZWQ7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmlzSW5kZWZpbml0ZUZvcm0gPSB0aGlzLmxlbkJsb2NrLmlzSW5kZWZpbml0ZUZvcm07XHJcbiAgICAgICAgaWYgKGlucHV0TGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlkQmxvY2suZXJyb3IubGVuZ3RoID09PSAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSB0aGlzLmlkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmxlbkJsb2NrLmVycm9yLmxlbmd0aCA9PT0gMClcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggKz0gdGhpcy5sZW5CbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICAgICAgcmV0dXJuIGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMudmFsdWVCbG9jay5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZpZXcgPSBpbnB1dEJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyID8gbmV3IFVpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpIDogaW5wdXRCdWZmZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1ZiA9IHZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGJ1Zi5ieXRlTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNuID0gbG9jYWxGcm9tQkVSKGJ1ZiwgMCwgYnVmLmJ5dGVMZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhc24ub2Zmc2V0ICE9PSAtMSAmJiBhc24ub2Zmc2V0ID09PSBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBbYXNuLnJlc3VsdF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBvbkFzY2lpRW5jb2RpbmcoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVCbG9jay5pc0NvbnN0cnVjdGVkIHx8ICh0aGlzLnZhbHVlQmxvY2sudmFsdWUgJiYgdGhpcy52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIENvbnN0cnVjdGVkLnByb3RvdHlwZS5vbkFzY2lpRW5jb2RpbmcuY2FsbCh0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRX0gOiAke3B2dHN1dGlscy5Db252ZXJ0LlRvSGV4KHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcpfWA7XHJcbiAgICB9XHJcbiAgICBnZXRWYWx1ZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaWRCbG9jay5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LnNsaWNlKCkuYnVmZmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBhcnJheSA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgY29udGVudCBvZiB0aGlzLnZhbHVlQmxvY2sudmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBPY3RldFN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgYXJyYXkucHVzaChjb250ZW50LnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci5jb25jYXQoYXJyYXkpO1xyXG4gICAgfVxyXG59XHJcbl9hJHIgPSBPY3RldFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5PY3RldFN0cmluZyA9IF9hJHI7XHJcbn0pKCk7XHJcbk9jdGV0U3RyaW5nLk5BTUUgPSBPQ1RFVF9TVFJJTkdfTkFNRTtcblxuY2xhc3MgTG9jYWxCaXRTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdW51c2VkQml0cyA9IDAsIGlzQ29uc3RydWN0ZWQgPSBmYWxzZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnVudXNlZEJpdHMgPSB1bnVzZWRCaXRzO1xyXG4gICAgICAgIHRoaXMuaXNDb25zdHJ1Y3RlZCA9IGlzQ29uc3RydWN0ZWQ7XHJcbiAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IHRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGg7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBpZiAoIWlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHJlc3VsdE9mZnNldCA9IC0xO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICAgICAgcmVzdWx0T2Zmc2V0ID0gTG9jYWxDb25zdHJ1Y3RlZFZhbHVlQmxvY2sucHJvdG90eXBlLmZyb21CRVIuY2FsbCh0aGlzLCBpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0T2Zmc2V0O1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHRoaXMudmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRCbG9ja05hbWUgPSB2YWx1ZS5jb25zdHJ1Y3Rvci5OQU1FO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCbG9ja05hbWUgPT09IEVORF9PRl9DT05URU5UX05BTUUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0luZGVmaW5pdGVGb3JtKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kT2ZDb250ZW50IGlzIHVuZXhwZWN0ZWQsIEJJVCBTVFJJTkcgbWF5IGNvbnNpc3RzIG9mIEJJVCBTVFJJTkdzIG9ubHlcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QmxvY2tOYW1lICE9PSBCSVRfU1RSSU5HX05BTUUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gXCJCSVQgU1RSSU5HIG1heSBjb25zaXN0cyBvZiBCSVQgU1RSSU5HcyBvbmx5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVCbG9jayA9IHZhbHVlLnZhbHVlQmxvY2s7XHJcbiAgICAgICAgICAgICAgICBpZiAoKHRoaXMudW51c2VkQml0cyA+IDApICYmICh2YWx1ZUJsb2NrLnVudXNlZEJpdHMgPiAwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlVzaW5nIG9mIFxcXCJ1bnVzZWQgYml0c1xcXCIgaW5zaWRlIGNvbnN0cnVjdGl2ZSBCSVQgU1RSSU5HIGFsbG93ZWQgZm9yIGxlYXN0IG9uZSBvbmx5XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy51bnVzZWRCaXRzID0gdmFsdWVCbG9jay51bnVzZWRCaXRzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlucHV0VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgICAgICBpZiAoIWNoZWNrQnVmZmVyUGFyYW1zKHRoaXMsIGlucHV0VmlldywgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGludEJ1ZmZlciA9IGlucHV0Vmlldy5zdWJhcnJheShpbnB1dE9mZnNldCwgaW5wdXRPZmZzZXQgKyBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgdGhpcy51bnVzZWRCaXRzID0gaW50QnVmZmVyWzBdO1xyXG4gICAgICAgIGlmICh0aGlzLnVudXNlZEJpdHMgPiA3KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIlVudXNlZCBiaXRzIGZvciBCaXRTdHJpbmcgbXVzdCBiZSBpbiByYW5nZSAwLTdcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMudW51c2VkQml0cykge1xyXG4gICAgICAgICAgICBjb25zdCBidWYgPSBpbnRCdWZmZXIuc3ViYXJyYXkoMSk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYnVmLmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc24gPSBsb2NhbEZyb21CRVIoYnVmLCAwLCBidWYuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFzbi5vZmZzZXQgIT09IC0xICYmIGFzbi5vZmZzZXQgPT09IChpbnB1dExlbmd0aCAtIDEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBbYXNuLnJlc3VsdF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBpbnRCdWZmZXIuc3ViYXJyYXkoMSk7XHJcbiAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCA9IGludEJ1ZmZlci5sZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHRvQkVSKHNpemVPbmx5LCB3cml0ZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0NvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBMb2NhbENvbnN0cnVjdGVkVmFsdWVCbG9jay5wcm90b3R5cGUudG9CRVIuY2FsbCh0aGlzLCBzaXplT25seSwgd3JpdGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCArIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCArIDEpO1xyXG4gICAgICAgIHJldFZpZXdbMF0gPSB0aGlzLnVudXNlZEJpdHM7XHJcbiAgICAgICAgcmV0Vmlldy5zZXQodGhpcy52YWx1ZUhleFZpZXcsIDEpO1xyXG4gICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdW51c2VkQml0czogdGhpcy51bnVzZWRCaXRzLFxyXG4gICAgICAgICAgICBpc0NvbnN0cnVjdGVkOiB0aGlzLmlzQ29uc3RydWN0ZWQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbEJpdFN0cmluZ1ZhbHVlQmxvY2suTkFNRSA9IFwiQml0U3RyaW5nVmFsdWVCbG9ja1wiO1xuXG52YXIgX2EkcTtcclxuY2xhc3MgQml0U3RyaW5nIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgaWRCbG9jayA9IHt9LCBsZW5CbG9jayA9IHt9LCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHZhciBfYiwgX2M7XHJcbiAgICAgICAgKF9iID0gcGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAocGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkID0gISEoKF9jID0gcGFyYW1ldGVycy52YWx1ZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCkpO1xyXG4gICAgICAgIHN1cGVyKHtcclxuICAgICAgICAgICAgaWRCbG9jazoge1xyXG4gICAgICAgICAgICAgICAgaXNDb25zdHJ1Y3RlZDogcGFyYW1ldGVycy5pc0NvbnN0cnVjdGVkLFxyXG4gICAgICAgICAgICAgICAgLi4uaWRCbG9jayxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbGVuQmxvY2s6IHtcclxuICAgICAgICAgICAgICAgIC4uLmxlbkJsb2NrLFxyXG4gICAgICAgICAgICAgICAgaXNJbmRlZmluaXRlRm9ybTogISFwYXJhbWV0ZXJzLmlzSW5kZWZpbml0ZUZvcm0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIC4uLnBhcmFtZXRlcnMsXHJcbiAgICAgICAgfSwgTG9jYWxCaXRTdHJpbmdWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAzO1xyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmlzQ29uc3RydWN0ZWQgPSB0aGlzLmlkQmxvY2suaXNDb25zdHJ1Y3RlZDtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2suaXNJbmRlZmluaXRlRm9ybSA9IHRoaXMubGVuQmxvY2suaXNJbmRlZmluaXRlRm9ybTtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZUJsb2NrLmlzQ29uc3RydWN0ZWQgfHwgKHRoaXMudmFsdWVCbG9jay52YWx1ZSAmJiB0aGlzLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gQ29uc3RydWN0ZWQucHJvdG90eXBlLm9uQXNjaWlFbmNvZGluZy5jYWxsKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgYml0cyA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUhleCA9IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgYnl0ZSBvZiB2YWx1ZUhleCkge1xyXG4gICAgICAgICAgICAgICAgYml0cy5wdXNoKGJ5dGUudG9TdHJpbmcoMikucGFkU3RhcnQoOCwgXCIwXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBiaXRzU3RyID0gYml0cy5qb2luKFwiXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7Yml0c1N0ci5zdWJzdHJpbmcoMCwgYml0c1N0ci5sZW5ndGggLSB0aGlzLnZhbHVlQmxvY2sudW51c2VkQml0cyl9YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuX2EkcSA9IEJpdFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5CaXRTdHJpbmcgPSBfYSRxO1xyXG59KSgpO1xyXG5CaXRTdHJpbmcuTkFNRSA9IEJJVF9TVFJJTkdfTkFNRTtcblxudmFyIF9hJHA7XHJcbmZ1bmN0aW9uIHZpZXdBZGQoZmlyc3QsIHNlY29uZCkge1xyXG4gICAgY29uc3QgYyA9IG5ldyBVaW50OEFycmF5KFswXSk7XHJcbiAgICBjb25zdCBmaXJzdFZpZXcgPSBuZXcgVWludDhBcnJheShmaXJzdCk7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoc2Vjb25kKTtcclxuICAgIGxldCBmaXJzdFZpZXdDb3B5ID0gZmlyc3RWaWV3LnNsaWNlKDApO1xyXG4gICAgY29uc3QgZmlyc3RWaWV3Q29weUxlbmd0aCA9IGZpcnN0Vmlld0NvcHkubGVuZ3RoIC0gMTtcclxuICAgIGNvbnN0IHNlY29uZFZpZXdDb3B5ID0gc2Vjb25kVmlldy5zbGljZSgwKTtcclxuICAgIGNvbnN0IHNlY29uZFZpZXdDb3B5TGVuZ3RoID0gc2Vjb25kVmlld0NvcHkubGVuZ3RoIC0gMTtcclxuICAgIGxldCB2YWx1ZSA9IDA7XHJcbiAgICBjb25zdCBtYXggPSAoc2Vjb25kVmlld0NvcHlMZW5ndGggPCBmaXJzdFZpZXdDb3B5TGVuZ3RoKSA/IGZpcnN0Vmlld0NvcHlMZW5ndGggOiBzZWNvbmRWaWV3Q29weUxlbmd0aDtcclxuICAgIGxldCBjb3VudGVyID0gMDtcclxuICAgIGZvciAobGV0IGkgPSBtYXg7IGkgPj0gMDsgaS0tLCBjb3VudGVyKyspIHtcclxuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcclxuICAgICAgICAgICAgY2FzZSAoY291bnRlciA8IHNlY29uZFZpZXdDb3B5Lmxlbmd0aCk6XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdICsgc2Vjb25kVmlld0NvcHlbc2Vjb25kVmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSArIGNbMF07XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gKyBjWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjWzBdID0gdmFsdWUgLyAxMDtcclxuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcclxuICAgICAgICAgICAgY2FzZSAoY291bnRlciA+PSBmaXJzdFZpZXdDb3B5Lmxlbmd0aCk6XHJcbiAgICAgICAgICAgICAgICBmaXJzdFZpZXdDb3B5ID0gcHZ1dGlscy51dGlsQ29uY2F0VmlldyhuZXcgVWludDhBcnJheShbdmFsdWUgJSAxMF0pLCBmaXJzdFZpZXdDb3B5KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gPSB2YWx1ZSAlIDEwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChjWzBdID4gMClcclxuICAgICAgICBmaXJzdFZpZXdDb3B5ID0gcHZ1dGlscy51dGlsQ29uY2F0VmlldyhjLCBmaXJzdFZpZXdDb3B5KTtcclxuICAgIHJldHVybiBmaXJzdFZpZXdDb3B5O1xyXG59XHJcbmZ1bmN0aW9uIHBvd2VyMihuKSB7XHJcbiAgICBpZiAobiA+PSBwb3dlcnMyLmxlbmd0aCkge1xyXG4gICAgICAgIGZvciAobGV0IHAgPSBwb3dlcnMyLmxlbmd0aDsgcCA8PSBuOyBwKyspIHtcclxuICAgICAgICAgICAgY29uc3QgYyA9IG5ldyBVaW50OEFycmF5KFswXSk7XHJcbiAgICAgICAgICAgIGxldCBkaWdpdHMgPSAocG93ZXJzMltwIC0gMV0pLnNsaWNlKDApO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gKGRpZ2l0cy5sZW5ndGggLSAxKTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gbmV3IFVpbnQ4QXJyYXkoWyhkaWdpdHNbaV0gPDwgMSkgKyBjWzBdXSk7XHJcbiAgICAgICAgICAgICAgICBjWzBdID0gbmV3VmFsdWVbMF0gLyAxMDtcclxuICAgICAgICAgICAgICAgIGRpZ2l0c1tpXSA9IG5ld1ZhbHVlWzBdICUgMTA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNbMF0gPiAwKVxyXG4gICAgICAgICAgICAgICAgZGlnaXRzID0gcHZ1dGlscy51dGlsQ29uY2F0VmlldyhjLCBkaWdpdHMpO1xyXG4gICAgICAgICAgICBwb3dlcnMyLnB1c2goZGlnaXRzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcG93ZXJzMltuXTtcclxufVxyXG5mdW5jdGlvbiB2aWV3U3ViKGZpcnN0LCBzZWNvbmQpIHtcclxuICAgIGxldCBiID0gMDtcclxuICAgIGNvbnN0IGZpcnN0VmlldyA9IG5ldyBVaW50OEFycmF5KGZpcnN0KTtcclxuICAgIGNvbnN0IHNlY29uZFZpZXcgPSBuZXcgVWludDhBcnJheShzZWNvbmQpO1xyXG4gICAgY29uc3QgZmlyc3RWaWV3Q29weSA9IGZpcnN0Vmlldy5zbGljZSgwKTtcclxuICAgIGNvbnN0IGZpcnN0Vmlld0NvcHlMZW5ndGggPSBmaXJzdFZpZXdDb3B5Lmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3Q29weSA9IHNlY29uZFZpZXcuc2xpY2UoMCk7XHJcbiAgICBjb25zdCBzZWNvbmRWaWV3Q29weUxlbmd0aCA9IHNlY29uZFZpZXdDb3B5Lmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgdmFsdWU7XHJcbiAgICBsZXQgY291bnRlciA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gc2Vjb25kVmlld0NvcHlMZW5ndGg7IGkgPj0gMDsgaS0tLCBjb3VudGVyKyspIHtcclxuICAgICAgICB2YWx1ZSA9IGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdIC0gc2Vjb25kVmlld0NvcHlbc2Vjb25kVmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSAtIGI7XHJcbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgKHZhbHVlIDwgMCk6XHJcbiAgICAgICAgICAgICAgICBiID0gMTtcclxuICAgICAgICAgICAgICAgIGZpcnN0Vmlld0NvcHlbZmlyc3RWaWV3Q29weUxlbmd0aCAtIGNvdW50ZXJdID0gdmFsdWUgKyAxMDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYiA9IDA7XHJcbiAgICAgICAgICAgICAgICBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChiID4gMCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAoZmlyc3RWaWV3Q29weUxlbmd0aCAtIHNlY29uZFZpZXdDb3B5TGVuZ3RoICsgMSk7IGkgPj0gMDsgaS0tLCBjb3VudGVyKyspIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSAtIGI7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA8IDApIHtcclxuICAgICAgICAgICAgICAgIGIgPSAxO1xyXG4gICAgICAgICAgICAgICAgZmlyc3RWaWV3Q29weVtmaXJzdFZpZXdDb3B5TGVuZ3RoIC0gY291bnRlcl0gPSB2YWx1ZSArIDEwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYiA9IDA7XHJcbiAgICAgICAgICAgICAgICBmaXJzdFZpZXdDb3B5W2ZpcnN0Vmlld0NvcHlMZW5ndGggLSBjb3VudGVyXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmlyc3RWaWV3Q29weS5zbGljZSgpO1xyXG59XHJcbmNsYXNzIExvY2FsSW50ZWdlclZhbHVlQmxvY2sgZXh0ZW5kcyBIZXhCbG9jayhWYWx1ZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlLCAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlRGVjID0gMDtcclxuICAgICAgICBpZiAocGFyYW1ldGVycy52YWx1ZUhleCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlSGV4KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVEZWMgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzZXRWYWx1ZUhleCgpIHtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZUhleFZpZXcubGVuZ3RoID49IDQpIHtcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiVG9vIGJpZyBJbnRlZ2VyIGZvciBkZWNvZGluZywgaGV4IG9ubHlcIik7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5fdmFsdWVEZWMgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hleE9ubHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlRGVjID0gcHZ1dGlscy51dGlsRGVjb2RlVEMuY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHNldCB2YWx1ZURlYyh2KSB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWVEZWMgPSB2O1xyXG4gICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShwdnV0aWxzLnV0aWxFbmNvZGVUQyh2KSk7XHJcbiAgICB9XHJcbiAgICBnZXQgdmFsdWVEZWMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlRGVjO1xyXG4gICAgfVxyXG4gICAgZnJvbURFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoLCBleHBlY3RlZExlbmd0aCA9IDApIHtcclxuICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gLTEpXHJcbiAgICAgICAgICAgIHJldHVybiBvZmZzZXQ7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IHRoaXMudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgIGlmICgodmlld1swXSA9PT0gMHgwMCkgJiYgKCh2aWV3WzFdICYgMHg4MCkgIT09IDApKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdmlldy5zdWJhcnJheSgxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChleHBlY3RlZExlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHZpZXcubGVuZ3RoIDwgZXhwZWN0ZWRMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKGV4cGVjdGVkTGVuZ3RoIC0gdmlldy5sZW5ndGgpID4gMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRMZW5ndGggPSB2aWV3Lmxlbmd0aCArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSB2aWV3LnN1YmFycmF5KGV4cGVjdGVkTGVuZ3RoIC0gdmlldy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0RFUihzaXplT25seSA9IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3QgdmlldyA9IHRoaXMudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgIHN3aXRjaCAodHJ1ZSkge1xyXG4gICAgICAgICAgICBjYXNlICgodmlld1swXSAmIDB4ODApICE9PSAwKTpcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkVmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWVIZXhWaWV3Lmxlbmd0aCArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRWaWV3WzBdID0gMHgwMDtcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkVmlldy5zZXQodmlldywgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXcgPSB1cGRhdGVkVmlldztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICgodmlld1swXSA9PT0gMHgwMCkgJiYgKCh2aWV3WzFdICYgMHg4MCkgPT09IDApKTpcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHRoaXMudmFsdWVIZXhWaWV3LnN1YmFycmF5KDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnRvQkVSKHNpemVPbmx5KTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdE9mZnNldCA9IHN1cGVyLmZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZUhleCgpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSkge1xyXG4gICAgICAgIHJldHVybiBzaXplT25seVxyXG4gICAgICAgICAgICA/IG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGgpXHJcbiAgICAgICAgICAgIDogdGhpcy52YWx1ZUhleFZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlRGVjOiB0aGlzLnZhbHVlRGVjLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZygpIHtcclxuICAgICAgICBjb25zdCBmaXJzdEJpdCA9ICh0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGggKiA4KSAtIDE7XHJcbiAgICAgICAgbGV0IGRpZ2l0cyA9IG5ldyBVaW50OEFycmF5KCh0aGlzLnZhbHVlSGV4Vmlldy5sZW5ndGggKiA4KSAvIDMpO1xyXG4gICAgICAgIGxldCBiaXROdW1iZXIgPSAwO1xyXG4gICAgICAgIGxldCBjdXJyZW50Qnl0ZTtcclxuICAgICAgICBjb25zdCBhc24xVmlldyA9IHRoaXMudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgICAgIGxldCBmbGFnID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgYnl0ZU51bWJlciA9IChhc24xVmlldy5ieXRlTGVuZ3RoIC0gMSk7IGJ5dGVOdW1iZXIgPj0gMDsgYnl0ZU51bWJlci0tKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRCeXRlID0gYXNuMVZpZXdbYnl0ZU51bWJlcl07XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgODsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKGN1cnJlbnRCeXRlICYgMSkgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGJpdE51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGZpcnN0Qml0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRzID0gdmlld1N1Yihwb3dlcjIoYml0TnVtYmVyKSwgZGlnaXRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiLVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHMgPSB2aWV3QWRkKGRpZ2l0cywgcG93ZXIyKGJpdE51bWJlcikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJpdE51bWJlcisrO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudEJ5dGUgPj49IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaWdpdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGRpZ2l0c1tpXSlcclxuICAgICAgICAgICAgICAgIGZsYWcgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoZmxhZylcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBkaWdpdHNTdHJpbmcuY2hhckF0KGRpZ2l0c1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmbGFnID09PSBmYWxzZSlcclxuICAgICAgICAgICAgcmVzdWx0ICs9IGRpZ2l0c1N0cmluZy5jaGFyQXQoMCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG5fYSRwID0gTG9jYWxJbnRlZ2VyVmFsdWVCbG9jaztcclxuTG9jYWxJbnRlZ2VyVmFsdWVCbG9jay5OQU1FID0gXCJJbnRlZ2VyVmFsdWVCbG9ja1wiO1xyXG4oKCkgPT4ge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9hJHAucHJvdG90eXBlLCBcInZhbHVlSGV4XCIsIHtcclxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodik7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVIZXgoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUhleFZpZXcuc2xpY2UoKS5idWZmZXI7XHJcbiAgICAgICAgfSxcclxuICAgIH0pO1xyXG59KSgpO1xuXG52YXIgX2EkbztcclxuY2xhc3MgSW50ZWdlciBleHRlbmRzIEJhc2VCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzLCBMb2NhbEludGVnZXJWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyO1xyXG4gICAgfVxyXG4gICAgdG9CaWdJbnQoKSB7XHJcbiAgICAgICAgYXNzZXJ0QmlnSW50KCk7XHJcbiAgICAgICAgcmV0dXJuIEJpZ0ludCh0aGlzLnZhbHVlQmxvY2sudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZnJvbUJpZ0ludCh2YWx1ZSkge1xyXG4gICAgICAgIGFzc2VydEJpZ0ludCgpO1xyXG4gICAgICAgIGNvbnN0IGJpZ0ludFZhbHVlID0gQmlnSW50KHZhbHVlKTtcclxuICAgICAgICBjb25zdCB3cml0ZXIgPSBuZXcgVmlld1dyaXRlcigpO1xyXG4gICAgICAgIGNvbnN0IGhleCA9IGJpZ0ludFZhbHVlLnRvU3RyaW5nKDE2KS5yZXBsYWNlKC9eLS8sIFwiXCIpO1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgVWludDhBcnJheShwdnRzdXRpbHMuQ29udmVydC5Gcm9tSGV4KGhleCkpO1xyXG4gICAgICAgIGlmIChiaWdJbnRWYWx1ZSA8IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZmlyc3QgPSBuZXcgVWludDhBcnJheSh2aWV3Lmxlbmd0aCArICh2aWV3WzBdICYgMHg4MCA/IDEgOiAwKSk7XHJcbiAgICAgICAgICAgIGZpcnN0WzBdIHw9IDB4ODA7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SW50ID0gQmlnSW50KGAweCR7cHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgoZmlyc3QpfWApO1xyXG4gICAgICAgICAgICBjb25zdCBzZWNvbmRJbnQgPSBmaXJzdEludCArIGJpZ0ludFZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShwdnRzdXRpbHMuQ29udmVydC5Gcm9tSGV4KHNlY29uZEludC50b1N0cmluZygxNikpKTtcclxuICAgICAgICAgICAgc2Vjb25kWzBdIHw9IDB4ODA7XHJcbiAgICAgICAgICAgIHdyaXRlci53cml0ZShzZWNvbmQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHZpZXdbMF0gJiAweDgwKSB7XHJcbiAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGUobmV3IFVpbnQ4QXJyYXkoWzBdKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd3JpdGVyLndyaXRlKHZpZXcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXMgPSBuZXcgSW50ZWdlcih7XHJcbiAgICAgICAgICAgIHZhbHVlSGV4OiB3cml0ZXIuZmluYWwoKSxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG4gICAgY29udmVydFRvREVSKCkge1xyXG4gICAgICAgIGNvbnN0IGludGVnZXIgPSBuZXcgSW50ZWdlcih7IHZhbHVlSGV4OiB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3IH0pO1xyXG4gICAgICAgIGludGVnZXIudmFsdWVCbG9jay50b0RFUigpO1xyXG4gICAgICAgIHJldHVybiBpbnRlZ2VyO1xyXG4gICAgfVxyXG4gICAgY29udmVydEZyb21ERVIoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRlZ2VyKHtcclxuICAgICAgICAgICAgdmFsdWVIZXg6IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXdbMF0gPT09IDBcclxuICAgICAgICAgICAgICAgID8gdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldy5zdWJhcnJheSgxKVxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHt0aGlzLnZhbHVlQmxvY2sudG9TdHJpbmcoKX1gO1xyXG4gICAgfVxyXG59XHJcbl9hJG8gPSBJbnRlZ2VyO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkludGVnZXIgPSBfYSRvO1xyXG59KSgpO1xyXG5JbnRlZ2VyLk5BTUUgPSBcIklOVEVHRVJcIjtcblxudmFyIF9hJG47XHJcbmNsYXNzIEVudW1lcmF0ZWQgZXh0ZW5kcyBJbnRlZ2VyIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDEwO1xyXG4gICAgfVxyXG59XHJcbl9hJG4gPSBFbnVtZXJhdGVkO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkVudW1lcmF0ZWQgPSBfYSRuO1xyXG59KSgpO1xyXG5FbnVtZXJhdGVkLk5BTUUgPSBcIkVOVU1FUkFURURcIjtcblxuY2xhc3MgTG9jYWxTaWRWYWx1ZUJsb2NrIGV4dGVuZHMgSGV4QmxvY2soVmFsdWVCbG9jaykge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZURlYyA9IC0xLCBpc0ZpcnN0U2lkID0gZmFsc2UsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZURlYyA9IHZhbHVlRGVjO1xyXG4gICAgICAgIHRoaXMuaXNGaXJzdFNpZCA9IGlzRmlyc3RTaWQ7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBpZiAoIWlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW5wdXRWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIGlmICghY2hlY2tCdWZmZXJQYXJhbXModGhpcywgaW5wdXRWaWV3LCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaW50QnVmZmVyID0gaW5wdXRWaWV3LnN1YmFycmF5KGlucHV0T2Zmc2V0LCBpbnB1dE9mZnNldCArIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KGlucHV0TGVuZ3RoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZUhleFZpZXdbaV0gPSBpbnRCdWZmZXJbaV0gJiAweDdGO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoKys7XHJcbiAgICAgICAgICAgIGlmICgoaW50QnVmZmVyW2ldICYgMHg4MCkgPT09IDB4MDApXHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGVtcFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYmxvY2tMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0ZW1wVmlld1tpXSA9IHRoaXMudmFsdWVIZXhWaWV3W2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlSGV4VmlldyA9IHRlbXBWaWV3O1xyXG4gICAgICAgIGlmICgoaW50QnVmZmVyW3RoaXMuYmxvY2tMZW5ndGggLSAxXSAmIDB4ODApICE9PSAweDAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVuZCBvZiBpbnB1dCByZWFjaGVkIGJlZm9yZSBtZXNzYWdlIHdhcyBmdWxseSBkZWNvZGVkXCI7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudmFsdWVIZXhWaWV3WzBdID09PSAweDAwKVxyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goXCJOZWVkbGVzc2x5IGxvbmcgZm9ybWF0IG9mIFNJRCBlbmNvZGluZ1wiKTtcclxuICAgICAgICBpZiAodGhpcy5ibG9ja0xlbmd0aCA8PSA4KVxyXG4gICAgICAgICAgICB0aGlzLnZhbHVlRGVjID0gcHZ1dGlscy51dGlsRnJvbUJhc2UodGhpcy52YWx1ZUhleFZpZXcsIDcpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIlRvbyBiaWcgU0lEIGZvciBkZWNvZGluZywgaGV4IG9ubHlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoaW5wdXRPZmZzZXQgKyB0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgIH1cclxuICAgIHNldCB2YWx1ZUJpZ0ludCh2YWx1ZSkge1xyXG4gICAgICAgIGFzc2VydEJpZ0ludCgpO1xyXG4gICAgICAgIGxldCBiaXRzID0gQmlnSW50KHZhbHVlKS50b1N0cmluZygyKTtcclxuICAgICAgICB3aGlsZSAoYml0cy5sZW5ndGggJSA3KSB7XHJcbiAgICAgICAgICAgIGJpdHMgPSBcIjBcIiArIGJpdHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYml0cy5sZW5ndGggLyA3KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGJ5dGVzW2ldID0gcGFyc2VJbnQoYml0cy5zbGljZShpICogNywgaSAqIDcgKyA3KSwgMikgKyAoaSArIDEgPCBieXRlcy5sZW5ndGggPyAweDgwIDogMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZnJvbUJFUihieXRlcy5idWZmZXIsIDAsIGJ5dGVzLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzSGV4T25seSkge1xyXG4gICAgICAgICAgICBpZiAoc2l6ZU9ubHkpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKG5ldyBBcnJheUJ1ZmZlcih0aGlzLnZhbHVlSGV4Vmlldy5ieXRlTGVuZ3RoKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1clZpZXcgPSB0aGlzLnZhbHVlSGV4VmlldztcclxuICAgICAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICh0aGlzLmJsb2NrTGVuZ3RoIC0gMSk7IGkrKylcclxuICAgICAgICAgICAgICAgIHJldFZpZXdbaV0gPSBjdXJWaWV3W2ldIHwgMHg4MDtcclxuICAgICAgICAgICAgcmV0Vmlld1t0aGlzLmJsb2NrTGVuZ3RoIC0gMV0gPSBjdXJWaWV3W3RoaXMuYmxvY2tMZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBlbmNvZGVkQnVmID0gcHZ1dGlscy51dGlsVG9CYXNlKHRoaXMudmFsdWVEZWMsIDcpO1xyXG4gICAgICAgIGlmIChlbmNvZGVkQnVmLmJ5dGVMZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRXJyb3IgZHVyaW5nIGVuY29kaW5nIFNJRCB2YWx1ZVwiO1xyXG4gICAgICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoKTtcclxuICAgICAgICBpZiAoIXNpemVPbmx5KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoZW5jb2RlZEJ1Zik7XHJcbiAgICAgICAgICAgIGNvbnN0IGxlbiA9IGVuY29kZWRCdWYuYnl0ZUxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W2ldID0gZW5jb2RlZFZpZXdbaV0gfCAweDgwO1xyXG4gICAgICAgICAgICByZXRWaWV3W2xlbl0gPSBlbmNvZGVkVmlld1tsZW5dO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0VmlldztcclxuICAgIH1cclxuICAgIHRvU3RyaW5nKCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBcIlwiO1xyXG4gICAgICAgIGlmICh0aGlzLmlzSGV4T25seSlcclxuICAgICAgICAgICAgcmVzdWx0ID0gcHZ0c3V0aWxzLkNvbnZlcnQuVG9IZXgodGhpcy52YWx1ZUhleFZpZXcpO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0ZpcnN0U2lkKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc2lkVmFsdWUgPSB0aGlzLnZhbHVlRGVjO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVEZWMgPD0gMzkpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gXCIwLlwiO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVEZWMgPD0gNzkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gXCIxLlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWRWYWx1ZSAtPSA0MDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFwiMi5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2lkVmFsdWUgLT0gODA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNpZFZhbHVlLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy52YWx1ZURlYy50b1N0cmluZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSlNPTigpLFxyXG4gICAgICAgICAgICB2YWx1ZURlYzogdGhpcy52YWx1ZURlYyxcclxuICAgICAgICAgICAgaXNGaXJzdFNpZDogdGhpcy5pc0ZpcnN0U2lkLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuTG9jYWxTaWRWYWx1ZUJsb2NrLk5BTUUgPSBcInNpZEJsb2NrXCI7XG5cbmNsYXNzIExvY2FsT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2sgZXh0ZW5kcyBWYWx1ZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUgPSBFTVBUWV9TVFJJTkcsIC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFtdO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGxldCByZXN1bHRPZmZzZXQgPSBpbnB1dE9mZnNldDtcclxuICAgICAgICB3aGlsZSAoaW5wdXRMZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpZEJsb2NrID0gbmV3IExvY2FsU2lkVmFsdWVCbG9jaygpO1xyXG4gICAgICAgICAgICByZXN1bHRPZmZzZXQgPSBzaWRCbG9jay5mcm9tQkVSKGlucHV0QnVmZmVyLCByZXN1bHRPZmZzZXQsIGlucHV0TGVuZ3RoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdE9mZnNldCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGggPSAwO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IHNpZEJsb2NrLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdE9mZnNldDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZS5sZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgICAgICBzaWRCbG9jay5pc0ZpcnN0U2lkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSBzaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICAgICAgaW5wdXRMZW5ndGggLT0gc2lkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChzaWRCbG9jayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSkge1xyXG4gICAgICAgIGNvbnN0IHJldEJ1ZmZlcnMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVCdWYgPSB0aGlzLnZhbHVlW2ldLnRvQkVSKHNpemVPbmx5KTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlQnVmLmJ5dGVMZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLnZhbHVlW2ldLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXRCdWZmZXJzLnB1c2godmFsdWVCdWYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY29uY2F0KHJldEJ1ZmZlcnMpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICAgICAgbGV0IHBvczEgPSAwO1xyXG4gICAgICAgIGxldCBwb3MyID0gMDtcclxuICAgICAgICBsZXQgc2lkID0gXCJcIjtcclxuICAgICAgICBsZXQgZmxhZyA9IGZhbHNlO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgcG9zMiA9IHN0cmluZy5pbmRleE9mKFwiLlwiLCBwb3MxKTtcclxuICAgICAgICAgICAgaWYgKHBvczIgPT09IC0xKVxyXG4gICAgICAgICAgICAgICAgc2lkID0gc3RyaW5nLnN1YnN0cmluZyhwb3MxKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgc2lkID0gc3RyaW5nLnN1YnN0cmluZyhwb3MxLCBwb3MyKTtcclxuICAgICAgICAgICAgcG9zMSA9IHBvczIgKyAxO1xyXG4gICAgICAgICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2lkQmxvY2sgPSB0aGlzLnZhbHVlWzBdO1xyXG4gICAgICAgICAgICAgICAgbGV0IHBsdXMgPSAwO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChzaWRCbG9jay52YWx1ZURlYykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVzID0gNDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGx1cyA9IDgwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFNJRCA9IHBhcnNlSW50KHNpZCwgMTApO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKHBhcnNlZFNJRCkpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgc2lkQmxvY2sudmFsdWVEZWMgPSBwYXJzZWRTSUQgKyBwbHVzO1xyXG4gICAgICAgICAgICAgICAgZmxhZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2lkQmxvY2sgPSBuZXcgTG9jYWxTaWRWYWx1ZUJsb2NrKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2lkID4gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHtcclxuICAgICAgICAgICAgICAgICAgICBhc3NlcnRCaWdJbnQoKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWRWYWx1ZSA9IEJpZ0ludChzaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNpZEJsb2NrLnZhbHVlQmlnSW50ID0gc2lkVmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzaWRCbG9jay52YWx1ZURlYyA9IHBhcnNlSW50KHNpZCwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihzaWRCbG9jay52YWx1ZURlYykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBzaWRCbG9jay5pc0ZpcnN0U2lkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBmbGFnID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChzaWRCbG9jayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IHdoaWxlIChwb3MyICE9PSAtMSk7XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZygpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gXCJcIjtcclxuICAgICAgICBsZXQgaXNIZXhPbmx5ID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlzSGV4T25seSA9IHRoaXMudmFsdWVbaV0uaXNIZXhPbmx5O1xyXG4gICAgICAgICAgICBsZXQgc2lkU3RyID0gdGhpcy52YWx1ZVtpXS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBpZiAoaSAhPT0gMClcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGAke3Jlc3VsdH0uYDtcclxuICAgICAgICAgICAgaWYgKGlzSGV4T25seSkge1xyXG4gICAgICAgICAgICAgICAgc2lkU3RyID0gYHske3NpZFN0cn19YDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlW2ldLmlzRmlyc3RTaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYDIueyR7c2lkU3RyfSAtIDgwfWA7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNpZFN0cjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2lkU3RyO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gICAgdG9KU09OKCkge1xyXG4gICAgICAgIGNvbnN0IG9iamVjdCA9IHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIHNpZEFycmF5OiBbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBvYmplY3Quc2lkQXJyYXkucHVzaCh0aGlzLnZhbHVlW2ldLnRvSlNPTigpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcclxuICAgIH1cclxufVxyXG5Mb2NhbE9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrLk5BTUUgPSBcIk9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRtO1xyXG5jbGFzcyBPYmplY3RJZGVudGlmaWVyIGV4dGVuZHMgQmFzZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsT2JqZWN0SWRlbnRpZmllclZhbHVlQmxvY2spO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDY7XHJcbiAgICB9XHJcbiAgICBnZXRWYWx1ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICBzZXRWYWx1ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay5mcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgIH1cclxuICAgIG9uQXNjaWlFbmNvZGluZygpIHtcclxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfSA6ICR7dGhpcy52YWx1ZUJsb2NrLnRvU3RyaW5nKCkgfHwgXCJlbXB0eVwifWA7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmdldFZhbHVlKCksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5fYSRtID0gT2JqZWN0SWRlbnRpZmllcjtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5PYmplY3RJZGVudGlmaWVyID0gX2EkbTtcclxufSkoKTtcclxuT2JqZWN0SWRlbnRpZmllci5OQU1FID0gXCJPQkpFQ1QgSURFTlRJRklFUlwiO1xuXG5jbGFzcyBMb2NhbFJlbGF0aXZlU2lkVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKExvY2FsQmFzZUJsb2NrKSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IHZhbHVlRGVjID0gMCwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlRGVjID0gdmFsdWVEZWM7XHJcbiAgICB9XHJcbiAgICBmcm9tQkVSKGlucHV0QnVmZmVyLCBpbnB1dE9mZnNldCwgaW5wdXRMZW5ndGgpIHtcclxuICAgICAgICBpZiAoaW5wdXRMZW5ndGggPT09IDApXHJcbiAgICAgICAgICAgIHJldHVybiBpbnB1dE9mZnNldDtcclxuICAgICAgICBjb25zdCBpbnB1dFZpZXcgPSBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgaWYgKCFjaGVja0J1ZmZlclBhcmFtcyh0aGlzLCBpbnB1dFZpZXcsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkpXHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICBjb25zdCBpbnRCdWZmZXIgPSBpbnB1dFZpZXcuc3ViYXJyYXkoaW5wdXRPZmZzZXQsIGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXRMZW5ndGgpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRMZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlSGV4Vmlld1tpXSA9IGludEJ1ZmZlcltpXSAmIDB4N0Y7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2tMZW5ndGgrKztcclxuICAgICAgICAgICAgaWYgKChpbnRCdWZmZXJbaV0gJiAweDgwKSA9PT0gMHgwMClcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0ZW1wVmlldyA9IG5ldyBVaW50OEFycmF5KHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ibG9ja0xlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB0ZW1wVmlld1tpXSA9IHRoaXMudmFsdWVIZXhWaWV3W2ldO1xyXG4gICAgICAgIHRoaXMudmFsdWVIZXhWaWV3ID0gdGVtcFZpZXc7XHJcbiAgICAgICAgaWYgKChpbnRCdWZmZXJbdGhpcy5ibG9ja0xlbmd0aCAtIDFdICYgMHg4MCkgIT09IDB4MDApIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IFwiRW5kIG9mIGlucHV0IHJlYWNoZWQgYmVmb3JlIG1lc3NhZ2Ugd2FzIGZ1bGx5IGRlY29kZWRcIjtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy52YWx1ZUhleFZpZXdbMF0gPT09IDB4MDApXHJcbiAgICAgICAgICAgIHRoaXMud2FybmluZ3MucHVzaChcIk5lZWRsZXNzbHkgbG9uZyBmb3JtYXQgb2YgU0lEIGVuY29kaW5nXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLmJsb2NrTGVuZ3RoIDw9IDgpXHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVEZWMgPSBwdnV0aWxzLnV0aWxGcm9tQmFzZSh0aGlzLnZhbHVlSGV4VmlldywgNyk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIZXhPbmx5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy53YXJuaW5ncy5wdXNoKFwiVG9vIGJpZyBTSUQgZm9yIGRlY29kaW5nLCBoZXggb25seVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChpbnB1dE9mZnNldCArIHRoaXMuYmxvY2tMZW5ndGgpO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICBpZiAodGhpcy5pc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgaWYgKHNpemVPbmx5KVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChuZXcgQXJyYXlCdWZmZXIodGhpcy52YWx1ZUhleFZpZXcuYnl0ZUxlbmd0aCkpO1xyXG4gICAgICAgICAgICBjb25zdCBjdXJWaWV3ID0gdGhpcy52YWx1ZUhleFZpZXc7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldFZpZXcgPSBuZXcgVWludDhBcnJheSh0aGlzLmJsb2NrTGVuZ3RoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAodGhpcy5ibG9ja0xlbmd0aCAtIDEpOyBpKyspXHJcbiAgICAgICAgICAgICAgICByZXRWaWV3W2ldID0gY3VyVmlld1tpXSB8IDB4ODA7XHJcbiAgICAgICAgICAgIHJldFZpZXdbdGhpcy5ibG9ja0xlbmd0aCAtIDFdID0gY3VyVmlld1t0aGlzLmJsb2NrTGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIHJldHVybiByZXRWaWV3LmJ1ZmZlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZW5jb2RlZEJ1ZiA9IHB2dXRpbHMudXRpbFRvQmFzZSh0aGlzLnZhbHVlRGVjLCA3KTtcclxuICAgICAgICBpZiAoZW5jb2RlZEJ1Zi5ieXRlTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIkVycm9yIGR1cmluZyBlbmNvZGluZyBTSUQgdmFsdWVcIjtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0JVRkZFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmV0VmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYuYnl0ZUxlbmd0aCk7XHJcbiAgICAgICAgaWYgKCFzaXplT25seSkge1xyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkVmlldyA9IG5ldyBVaW50OEFycmF5KGVuY29kZWRCdWYpO1xyXG4gICAgICAgICAgICBjb25zdCBsZW4gPSBlbmNvZGVkQnVmLmJ5dGVMZW5ndGggLSAxO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKVxyXG4gICAgICAgICAgICAgICAgcmV0Vmlld1tpXSA9IGVuY29kZWRWaWV3W2ldIHwgMHg4MDtcclxuICAgICAgICAgICAgcmV0Vmlld1tsZW5dID0gZW5jb2RlZFZpZXdbbGVuXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldFZpZXcuYnVmZmVyO1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNIZXhPbmx5KVxyXG4gICAgICAgICAgICByZXN1bHQgPSBwdnRzdXRpbHMuQ29udmVydC5Ub0hleCh0aGlzLnZhbHVlSGV4Vmlldyk7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMudmFsdWVEZWMudG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWVEZWM6IHRoaXMudmFsdWVEZWMsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbFJlbGF0aXZlU2lkVmFsdWVCbG9jay5OQU1FID0gXCJyZWxhdGl2ZVNpZEJsb2NrXCI7XG5cbmNsYXNzIExvY2FsUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9jayBleHRlbmRzIFZhbHVlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSA9IEVNUFRZX1NUUklORywgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gW107XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbVN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnJvbUJFUihpbnB1dEJ1ZmZlciwgaW5wdXRPZmZzZXQsIGlucHV0TGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdE9mZnNldCA9IGlucHV0T2Zmc2V0O1xyXG4gICAgICAgIHdoaWxlIChpbnB1dExlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3Qgc2lkQmxvY2sgPSBuZXcgTG9jYWxSZWxhdGl2ZVNpZFZhbHVlQmxvY2soKTtcclxuICAgICAgICAgICAgcmVzdWx0T2Zmc2V0ID0gc2lkQmxvY2suZnJvbUJFUihpbnB1dEJ1ZmZlciwgcmVzdWx0T2Zmc2V0LCBpbnB1dExlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrTGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBzaWRCbG9jay5lcnJvcjtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5ibG9ja0xlbmd0aCArPSBzaWRCbG9jay5ibG9ja0xlbmd0aDtcclxuICAgICAgICAgICAgaW5wdXRMZW5ndGggLT0gc2lkQmxvY2suYmxvY2tMZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChzaWRCbG9jayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHRPZmZzZXQ7XHJcbiAgICB9XHJcbiAgICB0b0JFUihzaXplT25seSwgd3JpdGVyKSB7XHJcbiAgICAgICAgY29uc3QgcmV0QnVmZmVycyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZUJ1ZiA9IHRoaXMudmFsdWVbaV0udG9CRVIoc2l6ZU9ubHkpO1xyXG4gICAgICAgICAgICBpZiAodmFsdWVCdWYuYnl0ZUxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IHRoaXMudmFsdWVbaV0uZXJyb3I7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFlfQlVGRkVSO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldEJ1ZmZlcnMucHVzaCh2YWx1ZUJ1Zik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25jYXQocmV0QnVmZmVycyk7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKHN0cmluZykge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbXTtcclxuICAgICAgICBsZXQgcG9zMSA9IDA7XHJcbiAgICAgICAgbGV0IHBvczIgPSAwO1xyXG4gICAgICAgIGxldCBzaWQgPSBcIlwiO1xyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgcG9zMiA9IHN0cmluZy5pbmRleE9mKFwiLlwiLCBwb3MxKTtcclxuICAgICAgICAgICAgaWYgKHBvczIgPT09IC0xKVxyXG4gICAgICAgICAgICAgICAgc2lkID0gc3RyaW5nLnN1YnN0cmluZyhwb3MxKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgc2lkID0gc3RyaW5nLnN1YnN0cmluZyhwb3MxLCBwb3MyKTtcclxuICAgICAgICAgICAgcG9zMSA9IHBvczIgKyAxO1xyXG4gICAgICAgICAgICBjb25zdCBzaWRCbG9jayA9IG5ldyBMb2NhbFJlbGF0aXZlU2lkVmFsdWVCbG9jaygpO1xyXG4gICAgICAgICAgICBzaWRCbG9jay52YWx1ZURlYyA9IHBhcnNlSW50KHNpZCwgMTApO1xyXG4gICAgICAgICAgICBpZiAoaXNOYU4oc2lkQmxvY2sudmFsdWVEZWMpKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUucHVzaChzaWRCbG9jayk7XHJcbiAgICAgICAgfSB3aGlsZSAocG9zMiAhPT0gLTEpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGlzSGV4T25seSA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpc0hleE9ubHkgPSB0aGlzLnZhbHVlW2ldLmlzSGV4T25seTtcclxuICAgICAgICAgICAgbGV0IHNpZFN0ciA9IHRoaXMudmFsdWVbaV0udG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgaWYgKGkgIT09IDApXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBgJHtyZXN1bHR9LmA7XHJcbiAgICAgICAgICAgIGlmIChpc0hleE9ubHkpIHtcclxuICAgICAgICAgICAgICAgIHNpZFN0ciA9IGB7JHtzaWRTdHJ9fWA7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc2lkU3RyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzaWRTdHI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgc2lkQXJyYXk6IFtdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBvYmplY3Quc2lkQXJyYXkucHVzaCh0aGlzLnZhbHVlW2ldLnRvSlNPTigpKTtcclxuICAgICAgICByZXR1cm4gb2JqZWN0O1xyXG4gICAgfVxyXG59XHJcbkxvY2FsUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyVmFsdWVCbG9jay5OQU1FID0gXCJSZWxhdGl2ZU9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrXCI7XG5cbnZhciBfYSRsO1xyXG5jbGFzcyBSZWxhdGl2ZU9iamVjdElkZW50aWZpZXIgZXh0ZW5kcyBCYXNlQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycywgTG9jYWxSZWxhdGl2ZU9iamVjdElkZW50aWZpZXJWYWx1ZUJsb2NrKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxMztcclxuICAgIH1cclxuICAgIGdldFZhbHVlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlQmxvY2sudG9TdHJpbmcoKTtcclxuICAgIH1cclxuICAgIHNldFZhbHVlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLmZyb21TdHJpbmcodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHt0aGlzLnZhbHVlQmxvY2sudG9TdHJpbmcoKSB8fCBcImVtcHR5XCJ9YDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZ2V0VmFsdWUoKSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbl9hJGwgPSBSZWxhdGl2ZU9iamVjdElkZW50aWZpZXI7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyID0gX2EkbDtcclxufSkoKTtcclxuUmVsYXRpdmVPYmplY3RJZGVudGlmaWVyLk5BTUUgPSBcIlJlbGF0aXZlT2JqZWN0SWRlbnRpZmllclwiO1xuXG52YXIgX2EkaztcclxuY2xhc3MgU2VxdWVuY2UgZXh0ZW5kcyBDb25zdHJ1Y3RlZCB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxNjtcclxuICAgIH1cclxufVxyXG5fYSRrID0gU2VxdWVuY2U7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuU2VxdWVuY2UgPSBfYSRrO1xyXG59KSgpO1xyXG5TZXF1ZW5jZS5OQU1FID0gXCJTRVFVRU5DRVwiO1xuXG52YXIgX2EkajtcclxuY2xhc3MgU2V0IGV4dGVuZHMgQ29uc3RydWN0ZWQge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMTc7XHJcbiAgICB9XHJcbn1cclxuX2EkaiA9IFNldDtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5TZXQgPSBfYSRqO1xyXG59KSgpO1xyXG5TZXQuTkFNRSA9IFwiU0VUXCI7XG5cbmNsYXNzIExvY2FsU3RyaW5nVmFsdWVCbG9jayBleHRlbmRzIEhleEJsb2NrKFZhbHVlQmxvY2spIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlzSGV4T25seSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IEVNUFRZX1NUUklORztcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5Mb2NhbFN0cmluZ1ZhbHVlQmxvY2suTkFNRSA9IFwiU3RyaW5nVmFsdWVCbG9ja1wiO1xuXG5jbGFzcyBMb2NhbFNpbXBsZVN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBMb2NhbFN0cmluZ1ZhbHVlQmxvY2sge1xyXG59XHJcbkxvY2FsU2ltcGxlU3RyaW5nVmFsdWVCbG9jay5OQU1FID0gXCJTaW1wbGVTdHJpbmdWYWx1ZUJsb2NrXCI7XG5cbmNsYXNzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sgZXh0ZW5kcyBCYXNlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IoeyAuLi5wYXJhbWV0ZXJzIH0gPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMsIExvY2FsU2ltcGxlU3RyaW5nVmFsdWVCbG9jayk7XHJcbiAgICB9XHJcbiAgICBmcm9tQnVmZmVyKGlucHV0QnVmZmVyKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcikpO1xyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhpbnB1dFN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHN0ckxlbiA9IGlucHV0U3RyaW5nLmxlbmd0aDtcclxuICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IG5ldyBVaW50OEFycmF5KHN0ckxlbik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJMZW47IGkrKylcclxuICAgICAgICAgICAgdmlld1tpXSA9IGlucHV0U3RyaW5nLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gaW5wdXRTdHJpbmc7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxTaW1wbGVTdHJpbmdCbG9jay5OQU1FID0gXCJTSU1QTEUgU1RSSU5HXCI7XG5cbmNsYXNzIExvY2FsVXRmOFN0cmluZ1ZhbHVlQmxvY2sgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGZyb21CdWZmZXIoaW5wdXRCdWZmZXIpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IHB2dHN1dGlscy5Db252ZXJ0LlRvVXRmOFN0cmluZyhpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChleCkge1xyXG4gICAgICAgICAgICB0aGlzLndhcm5pbmdzLnB1c2goYEVycm9yIGR1cmluZyBcImRlY29kZVVSSUNvbXBvbmVudFwiOiAke2V4fSwgdXNpbmcgcmF3IHN0cmluZ2ApO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBwdnRzdXRpbHMuQ29udmVydC5Ub0JpbmFyeShpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZnJvbVN0cmluZyhpbnB1dFN0cmluZykge1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShwdnRzdXRpbHMuQ29udmVydC5Gcm9tVXRmOFN0cmluZyhpbnB1dFN0cmluZykpO1xyXG4gICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZSA9IGlucHV0U3RyaW5nO1xyXG4gICAgfVxyXG59XHJcbkxvY2FsVXRmOFN0cmluZ1ZhbHVlQmxvY2suTkFNRSA9IFwiVXRmOFN0cmluZ1ZhbHVlQmxvY2tcIjtcblxudmFyIF9hJGk7XHJcbmNsYXNzIFV0ZjhTdHJpbmcgZXh0ZW5kcyBMb2NhbFV0ZjhTdHJpbmdWYWx1ZUJsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDEyO1xyXG4gICAgfVxyXG59XHJcbl9hJGkgPSBVdGY4U3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLlV0ZjhTdHJpbmcgPSBfYSRpO1xyXG59KSgpO1xyXG5VdGY4U3RyaW5nLk5BTUUgPSBcIlVURjhTdHJpbmdcIjtcblxuY2xhc3MgTG9jYWxCbXBTdHJpbmdWYWx1ZUJsb2NrIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBmcm9tQnVmZmVyKGlucHV0QnVmZmVyKSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gcHZ0c3V0aWxzLkNvbnZlcnQuVG9VdGYxNlN0cmluZyhpbnB1dEJ1ZmZlcik7XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKTtcclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoaW5wdXRTdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBpbnB1dFN0cmluZztcclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkocHZ0c3V0aWxzLkNvbnZlcnQuRnJvbVV0ZjE2U3RyaW5nKGlucHV0U3RyaW5nKSk7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxCbXBTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIkJtcFN0cmluZ1ZhbHVlQmxvY2tcIjtcblxudmFyIF9hJGg7XHJcbmNsYXNzIEJtcFN0cmluZyBleHRlbmRzIExvY2FsQm1wU3RyaW5nVmFsdWVCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMzA7XHJcbiAgICB9XHJcbn1cclxuX2EkaCA9IEJtcFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5CbXBTdHJpbmcgPSBfYSRoO1xyXG59KSgpO1xyXG5CbXBTdHJpbmcuTkFNRSA9IFwiQk1QU3RyaW5nXCI7XG5cbmNsYXNzIExvY2FsVW5pdmVyc2FsU3RyaW5nVmFsdWVCbG9jayBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgZnJvbUJ1ZmZlcihpbnB1dEJ1ZmZlcikge1xyXG4gICAgICAgIGNvbnN0IGNvcHlCdWZmZXIgPSBBcnJheUJ1ZmZlci5pc1ZpZXcoaW5wdXRCdWZmZXIpID8gaW5wdXRCdWZmZXIuc2xpY2UoKS5idWZmZXIgOiBpbnB1dEJ1ZmZlci5zbGljZSgwKTtcclxuICAgICAgICBjb25zdCB2YWx1ZVZpZXcgPSBuZXcgVWludDhBcnJheShjb3B5QnVmZmVyKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlVmlldy5sZW5ndGg7IGkgKz0gNCkge1xyXG4gICAgICAgICAgICB2YWx1ZVZpZXdbaV0gPSB2YWx1ZVZpZXdbaSArIDNdO1xyXG4gICAgICAgICAgICB2YWx1ZVZpZXdbaSArIDFdID0gdmFsdWVWaWV3W2kgKyAyXTtcclxuICAgICAgICAgICAgdmFsdWVWaWV3W2kgKyAyXSA9IDB4MDA7XHJcbiAgICAgICAgICAgIHZhbHVlVmlld1tpICsgM10gPSAweDAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIG5ldyBVaW50MzJBcnJheShjb3B5QnVmZmVyKSk7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKGlucHV0U3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyTGVuZ3RoID0gaW5wdXRTdHJpbmcubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlSGV4VmlldyA9IHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheShzdHJMZW5ndGggKiA0KTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ckxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvZGVCdWYgPSBwdnV0aWxzLnV0aWxUb0Jhc2UoaW5wdXRTdHJpbmcuY2hhckNvZGVBdChpKSwgOCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvZGVWaWV3ID0gbmV3IFVpbnQ4QXJyYXkoY29kZUJ1Zik7XHJcbiAgICAgICAgICAgIGlmIChjb2RlVmlldy5sZW5ndGggPiA0KVxyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGRpZiA9IDQgLSBjb2RlVmlldy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAoY29kZVZpZXcubGVuZ3RoIC0gMSk7IGogPj0gMDsgai0tKVxyXG4gICAgICAgICAgICAgICAgdmFsdWVIZXhWaWV3W2kgKiA0ICsgaiArIGRpZl0gPSBjb2RlVmlld1tqXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlID0gaW5wdXRTdHJpbmc7XHJcbiAgICB9XHJcbn1cclxuTG9jYWxVbml2ZXJzYWxTdHJpbmdWYWx1ZUJsb2NrLk5BTUUgPSBcIlVuaXZlcnNhbFN0cmluZ1ZhbHVlQmxvY2tcIjtcblxudmFyIF9hJGc7XHJcbmNsYXNzIFVuaXZlcnNhbFN0cmluZyBleHRlbmRzIExvY2FsVW5pdmVyc2FsU3RyaW5nVmFsdWVCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7IC4uLnBhcmFtZXRlcnMgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjg7XHJcbiAgICB9XHJcbn1cclxuX2EkZyA9IFVuaXZlcnNhbFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5Vbml2ZXJzYWxTdHJpbmcgPSBfYSRnO1xyXG59KSgpO1xyXG5Vbml2ZXJzYWxTdHJpbmcuTkFNRSA9IFwiVW5pdmVyc2FsU3RyaW5nXCI7XG5cbnZhciBfYSRmO1xyXG5jbGFzcyBOdW1lcmljU3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxODtcclxuICAgIH1cclxufVxyXG5fYSRmID0gTnVtZXJpY1N0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5OdW1lcmljU3RyaW5nID0gX2EkZjtcclxufSkoKTtcclxuTnVtZXJpY1N0cmluZy5OQU1FID0gXCJOdW1lcmljU3RyaW5nXCI7XG5cbnZhciBfYSRlO1xyXG5jbGFzcyBQcmludGFibGVTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDE5O1xyXG4gICAgfVxyXG59XHJcbl9hJGUgPSBQcmludGFibGVTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuUHJpbnRhYmxlU3RyaW5nID0gX2EkZTtcclxufSkoKTtcclxuUHJpbnRhYmxlU3RyaW5nLk5BTUUgPSBcIlByaW50YWJsZVN0cmluZ1wiO1xuXG52YXIgX2EkZDtcclxuY2xhc3MgVGVsZXRleFN0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjA7XHJcbiAgICB9XHJcbn1cclxuX2EkZCA9IFRlbGV0ZXhTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVGVsZXRleFN0cmluZyA9IF9hJGQ7XHJcbn0pKCk7XHJcblRlbGV0ZXhTdHJpbmcuTkFNRSA9IFwiVGVsZXRleFN0cmluZ1wiO1xuXG52YXIgX2EkYztcclxuY2xhc3MgVmlkZW90ZXhTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDIxO1xyXG4gICAgfVxyXG59XHJcbl9hJGMgPSBWaWRlb3RleFN0cmluZztcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5WaWRlb3RleFN0cmluZyA9IF9hJGM7XHJcbn0pKCk7XHJcblZpZGVvdGV4U3RyaW5nLk5BTUUgPSBcIlZpZGVvdGV4U3RyaW5nXCI7XG5cbnZhciBfYSRiO1xyXG5jbGFzcyBJQTVTdHJpbmcgZXh0ZW5kcyBMb2NhbFNpbXBsZVN0cmluZ0Jsb2NrIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDIyO1xyXG4gICAgfVxyXG59XHJcbl9hJGIgPSBJQTVTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuSUE1U3RyaW5nID0gX2EkYjtcclxufSkoKTtcclxuSUE1U3RyaW5nLk5BTUUgPSBcIklBNVN0cmluZ1wiO1xuXG52YXIgX2EkYTtcclxuY2xhc3MgR3JhcGhpY1N0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjU7XHJcbiAgICB9XHJcbn1cclxuX2EkYSA9IEdyYXBoaWNTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuR3JhcGhpY1N0cmluZyA9IF9hJGE7XHJcbn0pKCk7XHJcbkdyYXBoaWNTdHJpbmcuTkFNRSA9IFwiR3JhcGhpY1N0cmluZ1wiO1xuXG52YXIgX2EkOTtcclxuY2xhc3MgVmlzaWJsZVN0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjY7XHJcbiAgICB9XHJcbn1cclxuX2EkOSA9IFZpc2libGVTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVmlzaWJsZVN0cmluZyA9IF9hJDk7XHJcbn0pKCk7XHJcblZpc2libGVTdHJpbmcuTkFNRSA9IFwiVmlzaWJsZVN0cmluZ1wiO1xuXG52YXIgX2EkODtcclxuY2xhc3MgR2VuZXJhbFN0cmluZyBleHRlbmRzIExvY2FsU2ltcGxlU3RyaW5nQmxvY2sge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjc7XHJcbiAgICB9XHJcbn1cclxuX2EkOCA9IEdlbmVyYWxTdHJpbmc7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuR2VuZXJhbFN0cmluZyA9IF9hJDg7XHJcbn0pKCk7XHJcbkdlbmVyYWxTdHJpbmcuTkFNRSA9IFwiR2VuZXJhbFN0cmluZ1wiO1xuXG52YXIgX2EkNztcclxuY2xhc3MgQ2hhcmFjdGVyU3RyaW5nIGV4dGVuZHMgTG9jYWxTaW1wbGVTdHJpbmdCbG9jayB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyOTtcclxuICAgIH1cclxufVxyXG5fYSQ3ID0gQ2hhcmFjdGVyU3RyaW5nO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkNoYXJhY3RlclN0cmluZyA9IF9hJDc7XHJcbn0pKCk7XHJcbkNoYXJhY3RlclN0cmluZy5OQU1FID0gXCJDaGFyYWN0ZXJTdHJpbmdcIjtcblxudmFyIF9hJDY7XHJcbmNsYXNzIFVUQ1RpbWUgZXh0ZW5kcyBWaXNpYmxlU3RyaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUsIHZhbHVlRGF0ZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnllYXIgPSAwO1xyXG4gICAgICAgIHRoaXMubW9udGggPSAwO1xyXG4gICAgICAgIHRoaXMuZGF5ID0gMDtcclxuICAgICAgICB0aGlzLmhvdXIgPSAwO1xyXG4gICAgICAgIHRoaXMubWludXRlID0gMDtcclxuICAgICAgICB0aGlzLnNlY29uZCA9IDA7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbVN0cmluZyh2YWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVCbG9jay52YWx1ZUhleFZpZXcgPSBuZXcgVWludDhBcnJheSh2YWx1ZS5sZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlld1tpXSA9IHZhbHVlLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh2YWx1ZURhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcm9tRGF0ZSh2YWx1ZURhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy50b0J1ZmZlcigpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMjM7XHJcbiAgICB9XHJcbiAgICBmcm9tQnVmZmVyKGlucHV0QnVmZmVyKSB7XHJcbiAgICAgICAgdGhpcy5mcm9tU3RyaW5nKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoaW5wdXRCdWZmZXIpKSk7XHJcbiAgICB9XHJcbiAgICB0b0J1ZmZlcigpIHtcclxuICAgICAgICBjb25zdCBzdHIgPSB0aGlzLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgY29uc3QgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHN0ci5sZW5ndGgpO1xyXG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICB2aWV3W2ldID0gc3RyLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcclxuICAgIH1cclxuICAgIGZyb21EYXRlKGlucHV0RGF0ZSkge1xyXG4gICAgICAgIHRoaXMueWVhciA9IGlucHV0RGF0ZS5nZXRVVENGdWxsWWVhcigpO1xyXG4gICAgICAgIHRoaXMubW9udGggPSBpbnB1dERhdGUuZ2V0VVRDTW9udGgoKSArIDE7XHJcbiAgICAgICAgdGhpcy5kYXkgPSBpbnB1dERhdGUuZ2V0VVRDRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuaG91ciA9IGlucHV0RGF0ZS5nZXRVVENIb3VycygpO1xyXG4gICAgICAgIHRoaXMubWludXRlID0gaW5wdXREYXRlLmdldFVUQ01pbnV0ZXMoKTtcclxuICAgICAgICB0aGlzLnNlY29uZCA9IGlucHV0RGF0ZS5nZXRVVENTZWNvbmRzKCk7XHJcbiAgICB9XHJcbiAgICB0b0RhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIChuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsIHRoaXMubW9udGggLSAxLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQpKSk7XHJcbiAgICB9XHJcbiAgICBmcm9tU3RyaW5nKGlucHV0U3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgcGFyc2VyID0gLyhcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KVovaWc7XHJcbiAgICAgICAgY29uc3QgcGFyc2VyQXJyYXkgPSBwYXJzZXIuZXhlYyhpbnB1dFN0cmluZyk7XHJcbiAgICAgICAgaWYgKHBhcnNlckFycmF5ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZUludChwYXJzZXJBcnJheVsxXSwgMTApO1xyXG4gICAgICAgIGlmICh5ZWFyID49IDUwKVxyXG4gICAgICAgICAgICB0aGlzLnllYXIgPSAxOTAwICsgeWVhcjtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMueWVhciA9IDIwMDAgKyB5ZWFyO1xyXG4gICAgICAgIHRoaXMubW9udGggPSBwYXJzZUludChwYXJzZXJBcnJheVsyXSwgMTApO1xyXG4gICAgICAgIHRoaXMuZGF5ID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbM10sIDEwKTtcclxuICAgICAgICB0aGlzLmhvdXIgPSBwYXJzZUludChwYXJzZXJBcnJheVs0XSwgMTApO1xyXG4gICAgICAgIHRoaXMubWludXRlID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbNV0sIDEwKTtcclxuICAgICAgICB0aGlzLnNlY29uZCA9IHBhcnNlSW50KHBhcnNlckFycmF5WzZdLCAxMCk7XHJcbiAgICB9XHJcbiAgICB0b1N0cmluZyhlbmNvZGluZyA9IFwiaXNvXCIpIHtcclxuICAgICAgICBpZiAoZW5jb2RpbmcgPT09IFwiaXNvXCIpIHtcclxuICAgICAgICAgICAgY29uc3Qgb3V0cHV0QXJyYXkgPSBuZXcgQXJyYXkoNyk7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5WzBdID0gcHZ1dGlscy5wYWROdW1iZXIoKCh0aGlzLnllYXIgPCAyMDAwKSA/ICh0aGlzLnllYXIgLSAxOTAwKSA6ICh0aGlzLnllYXIgLSAyMDAwKSksIDIpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVsxXSA9IHB2dXRpbHMucGFkTnVtYmVyKHRoaXMubW9udGgsIDIpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVsyXSA9IHB2dXRpbHMucGFkTnVtYmVyKHRoaXMuZGF5LCAyKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbM10gPSBwdnV0aWxzLnBhZE51bWJlcih0aGlzLmhvdXIsIDIpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheVs0XSA9IHB2dXRpbHMucGFkTnVtYmVyKHRoaXMubWludXRlLCAyKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXlbNV0gPSBwdnV0aWxzLnBhZE51bWJlcih0aGlzLnNlY29uZCwgMik7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5WzZdID0gXCJaXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXRBcnJheS5qb2luKFwiXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3VwZXIudG9TdHJpbmcoZW5jb2RpbmcpO1xyXG4gICAgfVxyXG4gICAgb25Bc2NpaUVuY29kaW5nKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9IDogJHt0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCl9YDtcclxuICAgIH1cclxuICAgIHRvSlNPTigpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAuLi5zdXBlci50b0pTT04oKSxcclxuICAgICAgICAgICAgeWVhcjogdGhpcy55ZWFyLFxyXG4gICAgICAgICAgICBtb250aDogdGhpcy5tb250aCxcclxuICAgICAgICAgICAgZGF5OiB0aGlzLmRheSxcclxuICAgICAgICAgICAgaG91cjogdGhpcy5ob3VyLFxyXG4gICAgICAgICAgICBtaW51dGU6IHRoaXMubWludXRlLFxyXG4gICAgICAgICAgICBzZWNvbmQ6IHRoaXMuc2Vjb25kLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuX2EkNiA9IFVUQ1RpbWU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVVRDVGltZSA9IF9hJDY7XHJcbn0pKCk7XHJcblVUQ1RpbWUuTkFNRSA9IFwiVVRDVGltZVwiO1xuXG52YXIgX2EkNTtcclxuY2xhc3MgR2VuZXJhbGl6ZWRUaW1lIGV4dGVuZHMgVVRDVGltZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICB2YXIgX2I7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgKF9iID0gdGhpcy5taWxsaXNlY29uZCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogKHRoaXMubWlsbGlzZWNvbmQgPSAwKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAyNDtcclxuICAgIH1cclxuICAgIGZyb21EYXRlKGlucHV0RGF0ZSkge1xyXG4gICAgICAgIHN1cGVyLmZyb21EYXRlKGlucHV0RGF0ZSk7XHJcbiAgICAgICAgdGhpcy5taWxsaXNlY29uZCA9IGlucHV0RGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtcclxuICAgIH1cclxuICAgIHRvRGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gKG5ldyBEYXRlKERhdGUuVVRDKHRoaXMueWVhciwgdGhpcy5tb250aCAtIDEsIHRoaXMuZGF5LCB0aGlzLmhvdXIsIHRoaXMubWludXRlLCB0aGlzLnNlY29uZCwgdGhpcy5taWxsaXNlY29uZCkpKTtcclxuICAgIH1cclxuICAgIGZyb21TdHJpbmcoaW5wdXRTdHJpbmcpIHtcclxuICAgICAgICBsZXQgaXNVVEMgPSBmYWxzZTtcclxuICAgICAgICBsZXQgdGltZVN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGRhdGVUaW1lU3RyaW5nID0gXCJcIjtcclxuICAgICAgICBsZXQgZnJhY3Rpb25QYXJ0ID0gMDtcclxuICAgICAgICBsZXQgcGFyc2VyO1xyXG4gICAgICAgIGxldCBob3VyRGlmZmVyZW5jZSA9IDA7XHJcbiAgICAgICAgbGV0IG1pbnV0ZURpZmZlcmVuY2UgPSAwO1xyXG4gICAgICAgIGlmIChpbnB1dFN0cmluZ1tpbnB1dFN0cmluZy5sZW5ndGggLSAxXSA9PT0gXCJaXCIpIHtcclxuICAgICAgICAgICAgdGltZVN0cmluZyA9IGlucHV0U3RyaW5nLnN1YnN0cmluZygwLCBpbnB1dFN0cmluZy5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgaXNVVEMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gbmV3IE51bWJlcihpbnB1dFN0cmluZ1tpbnB1dFN0cmluZy5sZW5ndGggLSAxXSk7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihudW1iZXIudmFsdWVPZigpKSlcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgdGltZVN0cmluZyA9IGlucHV0U3RyaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNVVEMpIHtcclxuICAgICAgICAgICAgaWYgKHRpbWVTdHJpbmcuaW5kZXhPZihcIitcIikgIT09IC0xKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICBpZiAodGltZVN0cmluZy5pbmRleE9mKFwiLVwiKSAhPT0gLTEpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgbXVsdGlwbGllciA9IDE7XHJcbiAgICAgICAgICAgIGxldCBkaWZmZXJlbmNlUG9zaXRpb24gPSB0aW1lU3RyaW5nLmluZGV4T2YoXCIrXCIpO1xyXG4gICAgICAgICAgICBsZXQgZGlmZmVyZW5jZVN0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgICAgIGlmIChkaWZmZXJlbmNlUG9zaXRpb24gPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBkaWZmZXJlbmNlUG9zaXRpb24gPSB0aW1lU3RyaW5nLmluZGV4T2YoXCItXCIpO1xyXG4gICAgICAgICAgICAgICAgbXVsdGlwbGllciA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkaWZmZXJlbmNlUG9zaXRpb24gIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBkaWZmZXJlbmNlU3RyaW5nID0gdGltZVN0cmluZy5zdWJzdHJpbmcoZGlmZmVyZW5jZVBvc2l0aW9uICsgMSk7XHJcbiAgICAgICAgICAgICAgICB0aW1lU3RyaW5nID0gdGltZVN0cmluZy5zdWJzdHJpbmcoMCwgZGlmZmVyZW5jZVBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgIGlmICgoZGlmZmVyZW5jZVN0cmluZy5sZW5ndGggIT09IDIpICYmIChkaWZmZXJlbmNlU3RyaW5nLmxlbmd0aCAhPT0gNCkpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgbGV0IG51bWJlciA9IHBhcnNlSW50KGRpZmZlcmVuY2VTdHJpbmcuc3Vic3RyaW5nKDAsIDIpLCAxMCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obnVtYmVyLnZhbHVlT2YoKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgaG91ckRpZmZlcmVuY2UgPSBtdWx0aXBsaWVyICogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRpZmZlcmVuY2VTdHJpbmcubGVuZ3RoID09PSA0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyID0gcGFyc2VJbnQoZGlmZmVyZW5jZVN0cmluZy5zdWJzdHJpbmcoMiwgNCksIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4obnVtYmVyLnZhbHVlT2YoKSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgICAgICAgICBtaW51dGVEaWZmZXJlbmNlID0gbXVsdGlwbGllciAqIG51bWJlcjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZnJhY3Rpb25Qb2ludFBvc2l0aW9uID0gdGltZVN0cmluZy5pbmRleE9mKFwiLlwiKTtcclxuICAgICAgICBpZiAoZnJhY3Rpb25Qb2ludFBvc2l0aW9uID09PSAtMSlcclxuICAgICAgICAgICAgZnJhY3Rpb25Qb2ludFBvc2l0aW9uID0gdGltZVN0cmluZy5pbmRleE9mKFwiLFwiKTtcclxuICAgICAgICBpZiAoZnJhY3Rpb25Qb2ludFBvc2l0aW9uICE9PSAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCBmcmFjdGlvblBhcnRDaGVjayA9IG5ldyBOdW1iZXIoYDAke3RpbWVTdHJpbmcuc3Vic3RyaW5nKGZyYWN0aW9uUG9pbnRQb3NpdGlvbil9YCk7XHJcbiAgICAgICAgICAgIGlmIChpc05hTihmcmFjdGlvblBhcnRDaGVjay52YWx1ZU9mKCkpKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICBmcmFjdGlvblBhcnQgPSBmcmFjdGlvblBhcnRDaGVjay52YWx1ZU9mKCk7XHJcbiAgICAgICAgICAgIGRhdGVUaW1lU3RyaW5nID0gdGltZVN0cmluZy5zdWJzdHJpbmcoMCwgZnJhY3Rpb25Qb2ludFBvc2l0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBkYXRlVGltZVN0cmluZyA9IHRpbWVTdHJpbmc7XHJcbiAgICAgICAgc3dpdGNoICh0cnVlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgKGRhdGVUaW1lU3RyaW5nLmxlbmd0aCA9PT0gOCk6XHJcbiAgICAgICAgICAgICAgICBwYXJzZXIgPSAvKFxcZHs0fSkoXFxkezJ9KShcXGR7Mn0pL2lnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiAhPT0gLTEpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgaW5wdXQgc3RyaW5nIGZvciBjb252ZXJzaW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgKGRhdGVUaW1lU3RyaW5nLmxlbmd0aCA9PT0gMTApOlxyXG4gICAgICAgICAgICAgICAgcGFyc2VyID0gLyhcXGR7NH0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pL2lnO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZyYWN0aW9uUG9pbnRQb3NpdGlvbiAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZnJhY3Rpb25SZXN1bHQgPSA2MCAqIGZyYWN0aW9uUGFydDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbnV0ZSA9IE1hdGguZmxvb3IoZnJhY3Rpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uUmVzdWx0ID0gNjAgKiAoZnJhY3Rpb25SZXN1bHQgLSB0aGlzLm1pbnV0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWNvbmQgPSBNYXRoLmZsb29yKGZyYWN0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICBmcmFjdGlvblJlc3VsdCA9IDEwMDAgKiAoZnJhY3Rpb25SZXN1bHQgLSB0aGlzLnNlY29uZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taWxsaXNlY29uZCA9IE1hdGguZmxvb3IoZnJhY3Rpb25SZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgKGRhdGVUaW1lU3RyaW5nLmxlbmd0aCA9PT0gMTIpOlxyXG4gICAgICAgICAgICAgICAgcGFyc2VyID0gLyhcXGR7NH0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkvaWc7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnJhY3Rpb25Qb2ludFBvc2l0aW9uICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmcmFjdGlvblJlc3VsdCA9IDYwICogZnJhY3Rpb25QYXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vjb25kID0gTWF0aC5mbG9vcihmcmFjdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb25SZXN1bHQgPSAxMDAwICogKGZyYWN0aW9uUmVzdWx0IC0gdGhpcy5zZWNvbmQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWlsbGlzZWNvbmQgPSBNYXRoLmZsb29yKGZyYWN0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIChkYXRlVGltZVN0cmluZy5sZW5ndGggPT09IDE0KTpcclxuICAgICAgICAgICAgICAgIHBhcnNlciA9IC8oXFxkezR9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkvaWc7XHJcbiAgICAgICAgICAgICAgICBpZiAoZnJhY3Rpb25Qb2ludFBvc2l0aW9uICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZyYWN0aW9uUmVzdWx0ID0gMTAwMCAqIGZyYWN0aW9uUGFydDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbGxpc2Vjb25kID0gTWF0aC5mbG9vcihmcmFjdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcGFyc2VyQXJyYXkgPSBwYXJzZXIuZXhlYyhkYXRlVGltZVN0cmluZyk7XHJcbiAgICAgICAgaWYgKHBhcnNlckFycmF5ID09PSBudWxsKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBpbnB1dCBzdHJpbmcgZm9yIGNvbnZlcnNpb25cIik7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDE7IGogPCBwYXJzZXJBcnJheS5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGopIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIgPSBwYXJzZUludChwYXJzZXJBcnJheVtqXSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGggPSBwYXJzZUludChwYXJzZXJBcnJheVtqXSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF5ID0gcGFyc2VJbnQocGFyc2VyQXJyYXlbal0sIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhvdXIgPSBwYXJzZUludChwYXJzZXJBcnJheVtqXSwgMTApICsgaG91ckRpZmZlcmVuY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taW51dGUgPSBwYXJzZUludChwYXJzZXJBcnJheVtqXSwgMTApICsgbWludXRlRGlmZmVyZW5jZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNjpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY29uZCA9IHBhcnNlSW50KHBhcnNlckFycmF5W2pdLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIldyb25nIGlucHV0IHN0cmluZyBmb3IgY29udmVyc2lvblwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNVVEMgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXBEYXRlID0gbmV3IERhdGUodGhpcy55ZWFyLCB0aGlzLm1vbnRoLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQsIHRoaXMubWlsbGlzZWNvbmQpO1xyXG4gICAgICAgICAgICB0aGlzLnllYXIgPSB0ZW1wRGF0ZS5nZXRVVENGdWxsWWVhcigpO1xyXG4gICAgICAgICAgICB0aGlzLm1vbnRoID0gdGVtcERhdGUuZ2V0VVRDTW9udGgoKTtcclxuICAgICAgICAgICAgdGhpcy5kYXkgPSB0ZW1wRGF0ZS5nZXRVVENEYXkoKTtcclxuICAgICAgICAgICAgdGhpcy5ob3VyID0gdGVtcERhdGUuZ2V0VVRDSG91cnMoKTtcclxuICAgICAgICAgICAgdGhpcy5taW51dGUgPSB0ZW1wRGF0ZS5nZXRVVENNaW51dGVzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2Vjb25kID0gdGVtcERhdGUuZ2V0VVRDU2Vjb25kcygpO1xyXG4gICAgICAgICAgICB0aGlzLm1pbGxpc2Vjb25kID0gdGVtcERhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdG9TdHJpbmcoZW5jb2RpbmcgPSBcImlzb1wiKSB7XHJcbiAgICAgICAgaWYgKGVuY29kaW5nID09PSBcImlzb1wiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dEFycmF5ID0gW107XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy55ZWFyLCA0KSk7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy5tb250aCwgMikpO1xyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMuZGF5LCAyKSk7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy5ob3VyLCAyKSk7XHJcbiAgICAgICAgICAgIG91dHB1dEFycmF5LnB1c2gocHZ1dGlscy5wYWROdW1iZXIodGhpcy5taW51dGUsIDIpKTtcclxuICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChwdnV0aWxzLnBhZE51bWJlcih0aGlzLnNlY29uZCwgMikpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5taWxsaXNlY29uZCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0QXJyYXkucHVzaChcIi5cIik7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKHB2dXRpbHMucGFkTnVtYmVyKHRoaXMubWlsbGlzZWNvbmQsIDMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvdXRwdXRBcnJheS5wdXNoKFwiWlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dEFycmF5LmpvaW4oXCJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdXBlci50b1N0cmluZyhlbmNvZGluZyk7XHJcbiAgICB9XHJcbiAgICB0b0pTT04oKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uc3VwZXIudG9KU09OKCksXHJcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kOiB0aGlzLm1pbGxpc2Vjb25kLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbn1cclxuX2EkNSA9IEdlbmVyYWxpemVkVGltZTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5HZW5lcmFsaXplZFRpbWUgPSBfYSQ1O1xyXG59KSgpO1xyXG5HZW5lcmFsaXplZFRpbWUuTkFNRSA9IFwiR2VuZXJhbGl6ZWRUaW1lXCI7XG5cbnZhciBfYSQ0O1xyXG5jbGFzcyBEQVRFIGV4dGVuZHMgVXRmOFN0cmluZyB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAzMTtcclxuICAgIH1cclxufVxyXG5fYSQ0ID0gREFURTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5EQVRFID0gX2EkNDtcclxufSkoKTtcclxuREFURS5OQU1FID0gXCJEQVRFXCI7XG5cbnZhciBfYSQzO1xyXG5jbGFzcyBUaW1lT2ZEYXkgZXh0ZW5kcyBVdGY4U3RyaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDMyO1xyXG4gICAgfVxyXG59XHJcbl9hJDMgPSBUaW1lT2ZEYXk7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVGltZU9mRGF5ID0gX2EkMztcclxufSkoKTtcclxuVGltZU9mRGF5Lk5BTUUgPSBcIlRpbWVPZkRheVwiO1xuXG52YXIgX2EkMjtcclxuY2xhc3MgRGF0ZVRpbWUgZXh0ZW5kcyBVdGY4U3RyaW5nIHtcclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdDbGFzcyA9IDE7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ051bWJlciA9IDMzO1xyXG4gICAgfVxyXG59XHJcbl9hJDIgPSBEYXRlVGltZTtcclxuKCgpID0+IHtcclxuICAgIHR5cGVTdG9yZS5EYXRlVGltZSA9IF9hJDI7XHJcbn0pKCk7XHJcbkRhdGVUaW1lLk5BTUUgPSBcIkRhdGVUaW1lXCI7XG5cbnZhciBfYSQxO1xyXG5jbGFzcyBEdXJhdGlvbiBleHRlbmRzIFV0ZjhTdHJpbmcge1xyXG4gICAgY29uc3RydWN0b3IocGFyYW1ldGVycyA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIocGFyYW1ldGVycyk7XHJcbiAgICAgICAgdGhpcy5pZEJsb2NrLnRhZ0NsYXNzID0gMTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnTnVtYmVyID0gMzQ7XHJcbiAgICB9XHJcbn1cclxuX2EkMSA9IER1cmF0aW9uO1xyXG4oKCkgPT4ge1xyXG4gICAgdHlwZVN0b3JlLkR1cmF0aW9uID0gX2EkMTtcclxufSkoKTtcclxuRHVyYXRpb24uTkFNRSA9IFwiRHVyYXRpb25cIjtcblxudmFyIF9hO1xyXG5jbGFzcyBUSU1FIGV4dGVuZHMgVXRmOFN0cmluZyB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLmlkQmxvY2sudGFnQ2xhc3MgPSAxO1xyXG4gICAgICAgIHRoaXMuaWRCbG9jay50YWdOdW1iZXIgPSAxNDtcclxuICAgIH1cclxufVxyXG5fYSA9IFRJTUU7XHJcbigoKSA9PiB7XHJcbiAgICB0eXBlU3RvcmUuVElNRSA9IF9hO1xyXG59KSgpO1xyXG5USU1FLk5BTUUgPSBcIlRJTUVcIjtcblxuY2xhc3MgQW55IHtcclxuICAgIGNvbnN0cnVjdG9yKHsgbmFtZSA9IEVNUFRZX1NUUklORywgb3B0aW9uYWwgPSBmYWxzZSwgfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLm9wdGlvbmFsID0gb3B0aW9uYWw7XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgQ2hvaWNlIGV4dGVuZHMgQW55IHtcclxuICAgIGNvbnN0cnVjdG9yKHsgdmFsdWUgPSBbXSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgUmVwZWF0ZWQgZXh0ZW5kcyBBbnkge1xyXG4gICAgY29uc3RydWN0b3IoeyB2YWx1ZSA9IG5ldyBBbnkoKSwgbG9jYWwgPSBmYWxzZSwgLi4ucGFyYW1ldGVycyB9ID0ge30pIHtcclxuICAgICAgICBzdXBlcihwYXJhbWV0ZXJzKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5sb2NhbCA9IGxvY2FsO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIFJhd0RhdGEge1xyXG4gICAgY29uc3RydWN0b3IoeyBkYXRhID0gRU1QVFlfVklFVyB9ID0ge30pIHtcclxuICAgICAgICB0aGlzLmRhdGFWaWV3ID0gcHZ0c3V0aWxzLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBnZXQgZGF0YSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhVmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgIH1cclxuICAgIHNldCBkYXRhKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhVmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHZhbHVlKTtcclxuICAgIH1cclxuICAgIGZyb21CRVIoaW5wdXRCdWZmZXIsIGlucHV0T2Zmc2V0LCBpbnB1dExlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGVuZExlbmd0aCA9IGlucHV0T2Zmc2V0ICsgaW5wdXRMZW5ndGg7XHJcbiAgICAgICAgdGhpcy5kYXRhVmlldyA9IHB2dHN1dGlscy5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGlucHV0QnVmZmVyKS5zdWJhcnJheShpbnB1dE9mZnNldCwgZW5kTGVuZ3RoKTtcclxuICAgICAgICByZXR1cm4gZW5kTGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgdG9CRVIoc2l6ZU9ubHkpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhVmlldy5zbGljZSgpLmJ1ZmZlcjtcclxuICAgIH1cclxufVxuXG5mdW5jdGlvbiBjb21wYXJlU2NoZW1hKHJvb3QsIGlucHV0RGF0YSwgaW5wdXRTY2hlbWEpIHtcclxuICAgIGlmIChpbnB1dFNjaGVtYSBpbnN0YW5jZW9mIENob2ljZSkge1xyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaW5wdXRTY2hlbWEudmFsdWUubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29tcGFyZVNjaGVtYShyb290LCBpbnB1dERhdGEsIGlucHV0U2NoZW1hLnZhbHVlW2pdKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC52ZXJpZmllZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zdCBfcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IFwiV3JvbmcgdmFsdWVzIGZvciBDaG9pY2UgdHlwZVwiXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEuaGFzT3duUHJvcGVydHkoTkFNRSkpXHJcbiAgICAgICAgICAgICAgICBfcmVzdWx0Lm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lO1xyXG4gICAgICAgICAgICByZXR1cm4gX3Jlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEgaW5zdGFuY2VvZiBBbnkpIHtcclxuICAgICAgICBpZiAoaW5wdXRTY2hlbWEuaGFzT3duUHJvcGVydHkoTkFNRSkpXHJcbiAgICAgICAgICAgIHJvb3RbaW5wdXRTY2hlbWEubmFtZV0gPSBpbnB1dERhdGE7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoKHJvb3QgaW5zdGFuY2VvZiBPYmplY3QpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIHJvb3Qgb2JqZWN0XCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoKGlucHV0RGF0YSBpbnN0YW5jZW9mIE9iamVjdCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgZGF0YVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKChpbnB1dFNjaGVtYSBpbnN0YW5jZW9mIE9iamVjdCkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoKElEX0JMT0NLIGluIGlucHV0U2NoZW1hKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICgoRlJPTV9CRVIgaW4gaW5wdXRTY2hlbWEuaWRCbG9jaykgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoKFRPX0JFUiBpbiBpbnB1dFNjaGVtYS5pZEJsb2NrKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IGVuY29kZWRJZCA9IGlucHV0U2NoZW1hLmlkQmxvY2sudG9CRVIoZmFsc2UpO1xyXG4gICAgaWYgKGVuY29kZWRJZC5ieXRlTGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiRXJyb3IgZW5jb2RpbmcgaWRCbG9jayBmb3IgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZWNvZGVkT2Zmc2V0ID0gaW5wdXRTY2hlbWEuaWRCbG9jay5mcm9tQkVSKGVuY29kZWRJZCwgMCwgZW5jb2RlZElkLmJ5dGVMZW5ndGgpO1xyXG4gICAgaWYgKGRlY29kZWRPZmZzZXQgPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiRXJyb3IgZGVjb2RpbmcgaWRCbG9jayBmb3IgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay5oYXNPd25Qcm9wZXJ0eShUQUdfQ0xBU1MpID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2sudGFnQ2xhc3MgIT09IGlucHV0RGF0YS5pZEJsb2NrLnRhZ0NsYXNzKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2suaGFzT3duUHJvcGVydHkoVEFHX05VTUJFUikgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHsgZXJyb3I6IFwiV3JvbmcgQVNOLjEgc2NoZW1hXCIgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay50YWdOdW1iZXIgIT09IGlucHV0RGF0YS5pZEJsb2NrLnRhZ051bWJlcikge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLmhhc093blByb3BlcnR5KElTX0NPTlNUUlVDVEVEKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWFcIiB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChpbnB1dFNjaGVtYS5pZEJsb2NrLmlzQ29uc3RydWN0ZWQgIT09IGlucHV0RGF0YS5pZEJsb2NrLmlzQ29uc3RydWN0ZWQpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoIShJU19IRVhfT05MWSBpbiBpbnB1dFNjaGVtYS5pZEJsb2NrKSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLmlkQmxvY2suaXNIZXhPbmx5ICE9PSBpbnB1dERhdGEuaWRCbG9jay5pc0hleE9ubHkpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoaW5wdXRTY2hlbWEuaWRCbG9jay5pc0hleE9ubHkpIHtcclxuICAgICAgICBpZiAoKFZBTFVFX0hFWF9WSUVXIGluIGlucHV0U2NoZW1hLmlkQmxvY2spID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiB7IGVycm9yOiBcIldyb25nIEFTTi4xIHNjaGVtYVwiIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hVmlldyA9IGlucHV0U2NoZW1hLmlkQmxvY2sudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgIGNvbnN0IGFzbjFWaWV3ID0gaW5wdXREYXRhLmlkQmxvY2sudmFsdWVIZXhWaWV3O1xyXG4gICAgICAgIGlmIChzY2hlbWFWaWV3Lmxlbmd0aCAhPT0gYXNuMVZpZXcubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY2hlbWFWaWV3Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChzY2hlbWFWaWV3W2ldICE9PSBhc24xVmlld1sxXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICBpbnB1dFNjaGVtYS5uYW1lID0gaW5wdXRTY2hlbWEubmFtZS5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCBFTVBUWV9TVFJJTkcpO1xyXG4gICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKVxyXG4gICAgICAgICAgICByb290W2lucHV0U2NoZW1hLm5hbWVdID0gaW5wdXREYXRhO1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hIGluc3RhbmNlb2YgdHlwZVN0b3JlLkNvbnN0cnVjdGVkKSB7XHJcbiAgICAgICAgbGV0IGFkbWlzc2lvbiA9IDA7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHtcclxuICAgICAgICAgICAgICAgIGVycm9yOiBcIlVua25vd24gZXJyb3JcIixcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGV0IG1heExlbmd0aCA9IGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoO1xyXG4gICAgICAgIGlmIChtYXhMZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdIGluc3RhbmNlb2YgUmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgIG1heExlbmd0aCA9IGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWF4TGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aCA9PT0gMCkgJiZcclxuICAgICAgICAgICAgKGlucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWUubGVuZ3RoICE9PSAwKSkge1xyXG4gICAgICAgICAgICBsZXQgX29wdGlvbmFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgX29wdGlvbmFsID0gX29wdGlvbmFsICYmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlW2ldLm9wdGlvbmFsIHx8IGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKF9vcHRpb25hbCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICB2ZXJpZmllZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdFtpbnB1dFNjaGVtYS5uYW1lXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByb290LmVycm9yID0gXCJJbmNvbnNpc3RlbnQgb2JqZWN0IGxlbmd0aFwiO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4TGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKChpIC0gYWRtaXNzaW9uKSA+PSBpbnB1dERhdGEudmFsdWVCbG9jay52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlW2ldLm9wdGlvbmFsID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF9yZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiByb290XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICByb290LmVycm9yID0gXCJJbmNvbnNpc3RlbnQgbGVuZ3RoIGJldHdlZW4gQVNOLjEgZGF0YSBhbmQgc2NoZW1hXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290W2lucHV0U2NoZW1hLm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc3VsdC5uYW1lID0gaW5wdXRTY2hlbWEubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Jlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdIGluc3RhbmNlb2YgUmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wYXJlU2NoZW1hKHJvb3QsIGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlW2ldLCBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnZlcmlmaWVkID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS5vcHRpb25hbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkbWlzc2lvbisrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RbaW5wdXRTY2hlbWEubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoTkFNRSBpbiBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdKSAmJiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS5uYW1lLmxlbmd0aCA+IDApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnJheVJvb3QgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChMT0NBTCBpbiBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlWzBdKSAmJiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS5sb2NhbCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVJvb3QgPSBpbnB1dERhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5Um9vdCA9IHJvb3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJyYXlSb290W2lucHV0U2NoZW1hLnZhbHVlQmxvY2sudmFsdWVbMF0ubmFtZV0gPT09IFwidW5kZWZpbmVkXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVJvb3RbaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS5uYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVJvb3RbaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVswXS5uYW1lXS5wdXNoKGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjb21wYXJlU2NoZW1hKHJvb3QsIGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlW2kgLSBhZG1pc3Npb25dLCBpbnB1dFNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnZlcmlmaWVkID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEudmFsdWVCbG9jay52YWx1ZVtpXS5vcHRpb25hbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkbWlzc2lvbisrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RbaW5wdXRTY2hlbWEubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXN1bHQudmVyaWZpZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IF9yZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKGlucHV0U2NoZW1hLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGlucHV0U2NoZW1hLm5hbWUgPSBpbnB1dFNjaGVtYS5uYW1lLnJlcGxhY2UoL15cXHMrfFxccyskL2csIEVNUFRZX1NUUklORyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290W2lucHV0U2NoZW1hLm5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIF9yZXN1bHQubmFtZSA9IGlucHV0U2NoZW1hLm5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIF9yZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiB0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHJvb3RcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGlucHV0U2NoZW1hLnByaW1pdGl2ZVNjaGVtYSAmJlxyXG4gICAgICAgIChWQUxVRV9IRVhfVklFVyBpbiBpbnB1dERhdGEudmFsdWVCbG9jaykpIHtcclxuICAgICAgICBjb25zdCBhc24xID0gbG9jYWxGcm9tQkVSKGlucHV0RGF0YS52YWx1ZUJsb2NrLnZhbHVlSGV4Vmlldyk7XHJcbiAgICAgICAgaWYgKGFzbjEub2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCBfcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgdmVyaWZpZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiBhc24xLnJlc3VsdFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAoaW5wdXRTY2hlbWEubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgaW5wdXRTY2hlbWEubmFtZSA9IGlucHV0U2NoZW1hLm5hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgRU1QVFlfU1RSSU5HKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFNjaGVtYS5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvb3RbaW5wdXRTY2hlbWEubmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgX3Jlc3VsdC5uYW1lID0gaW5wdXRTY2hlbWEubmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gX3Jlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVTY2hlbWEocm9vdCwgYXNuMS5yZXN1bHQsIGlucHV0U2NoZW1hLnByaW1pdGl2ZVNjaGVtYSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIHZlcmlmaWVkOiB0cnVlLFxyXG4gICAgICAgIHJlc3VsdDogcm9vdFxyXG4gICAgfTtcclxufVxyXG5mdW5jdGlvbiB2ZXJpZnlTY2hlbWEoaW5wdXRCdWZmZXIsIGlucHV0U2NoZW1hKSB7XHJcbiAgICBpZiAoKGlucHV0U2NoZW1hIGluc3RhbmNlb2YgT2JqZWN0KSA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2ZXJpZmllZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJlc3VsdDogeyBlcnJvcjogXCJXcm9uZyBBU04uMSBzY2hlbWEgdHlwZVwiIH1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXNuMSA9IGxvY2FsRnJvbUJFUihwdnRzdXRpbHMuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShpbnB1dEJ1ZmZlcikpO1xyXG4gICAgaWYgKGFzbjEub2Zmc2V0ID09PSAtMSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZlcmlmaWVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVzdWx0OiBhc24xLnJlc3VsdFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29tcGFyZVNjaGVtYShhc24xLnJlc3VsdCwgYXNuMS5yZXN1bHQsIGlucHV0U2NoZW1hKTtcclxufVxuXG5leHBvcnQgeyBBbnksIEJhc2VCbG9jaywgQmFzZVN0cmluZ0Jsb2NrLCBCaXRTdHJpbmcsIEJtcFN0cmluZywgQm9vbGVhbiwgQ2hhcmFjdGVyU3RyaW5nLCBDaG9pY2UsIENvbnN0cnVjdGVkLCBEQVRFLCBEYXRlVGltZSwgRHVyYXRpb24sIEVuZE9mQ29udGVudCwgRW51bWVyYXRlZCwgR2VuZXJhbFN0cmluZywgR2VuZXJhbGl6ZWRUaW1lLCBHcmFwaGljU3RyaW5nLCBIZXhCbG9jaywgSUE1U3RyaW5nLCBJbnRlZ2VyLCBOdWxsLCBOdW1lcmljU3RyaW5nLCBPYmplY3RJZGVudGlmaWVyLCBPY3RldFN0cmluZywgUHJpbWl0aXZlLCBQcmludGFibGVTdHJpbmcsIFJhd0RhdGEsIFJlbGF0aXZlT2JqZWN0SWRlbnRpZmllciwgUmVwZWF0ZWQsIFNlcXVlbmNlLCBTZXQsIFRJTUUsIFRlbGV0ZXhTdHJpbmcsIFRpbWVPZkRheSwgVVRDVGltZSwgVW5pdmVyc2FsU3RyaW5nLCBVdGY4U3RyaW5nLCBWYWx1ZUJsb2NrLCBWaWRlb3RleFN0cmluZywgVmlld1dyaXRlciwgVmlzaWJsZVN0cmluZywgY29tcGFyZVNjaGVtYSwgZnJvbUJFUiwgdmVyaWZ5U2NoZW1hIH07XG4iLCAiZXhwb3J0IHZhciBBc25UeXBlVHlwZXM7XG4oZnVuY3Rpb24gKEFzblR5cGVUeXBlcykge1xuICAgIEFzblR5cGVUeXBlc1tBc25UeXBlVHlwZXNbXCJTZXF1ZW5jZVwiXSA9IDBdID0gXCJTZXF1ZW5jZVwiO1xuICAgIEFzblR5cGVUeXBlc1tBc25UeXBlVHlwZXNbXCJTZXRcIl0gPSAxXSA9IFwiU2V0XCI7XG4gICAgQXNuVHlwZVR5cGVzW0FzblR5cGVUeXBlc1tcIkNob2ljZVwiXSA9IDJdID0gXCJDaG9pY2VcIjtcbn0pKEFzblR5cGVUeXBlcyB8fCAoQXNuVHlwZVR5cGVzID0ge30pKTtcbmV4cG9ydCB2YXIgQXNuUHJvcFR5cGVzO1xuKGZ1bmN0aW9uIChBc25Qcm9wVHlwZXMpIHtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiQW55XCJdID0gMV0gPSBcIkFueVwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJCb29sZWFuXCJdID0gMl0gPSBcIkJvb2xlYW5cIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiT2N0ZXRTdHJpbmdcIl0gPSAzXSA9IFwiT2N0ZXRTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiQml0U3RyaW5nXCJdID0gNF0gPSBcIkJpdFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJJbnRlZ2VyXCJdID0gNV0gPSBcIkludGVnZXJcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiRW51bWVyYXRlZFwiXSA9IDZdID0gXCJFbnVtZXJhdGVkXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIk9iamVjdElkZW50aWZpZXJcIl0gPSA3XSA9IFwiT2JqZWN0SWRlbnRpZmllclwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJVdGY4U3RyaW5nXCJdID0gOF0gPSBcIlV0ZjhTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiQm1wU3RyaW5nXCJdID0gOV0gPSBcIkJtcFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJVbml2ZXJzYWxTdHJpbmdcIl0gPSAxMF0gPSBcIlVuaXZlcnNhbFN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJOdW1lcmljU3RyaW5nXCJdID0gMTFdID0gXCJOdW1lcmljU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlByaW50YWJsZVN0cmluZ1wiXSA9IDEyXSA9IFwiUHJpbnRhYmxlU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlRlbGV0ZXhTdHJpbmdcIl0gPSAxM10gPSBcIlRlbGV0ZXhTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVmlkZW90ZXhTdHJpbmdcIl0gPSAxNF0gPSBcIlZpZGVvdGV4U3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIklBNVN0cmluZ1wiXSA9IDE1XSA9IFwiSUE1U3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkdyYXBoaWNTdHJpbmdcIl0gPSAxNl0gPSBcIkdyYXBoaWNTdHJpbmdcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiVmlzaWJsZVN0cmluZ1wiXSA9IDE3XSA9IFwiVmlzaWJsZVN0cmluZ1wiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJHZW5lcmFsU3RyaW5nXCJdID0gMThdID0gXCJHZW5lcmFsU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIkNoYXJhY3RlclN0cmluZ1wiXSA9IDE5XSA9IFwiQ2hhcmFjdGVyU3RyaW5nXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlVUQ1RpbWVcIl0gPSAyMF0gPSBcIlVUQ1RpbWVcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiR2VuZXJhbGl6ZWRUaW1lXCJdID0gMjFdID0gXCJHZW5lcmFsaXplZFRpbWVcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiREFURVwiXSA9IDIyXSA9IFwiREFURVwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJUaW1lT2ZEYXlcIl0gPSAyM10gPSBcIlRpbWVPZkRheVwiO1xuICAgIEFzblByb3BUeXBlc1tBc25Qcm9wVHlwZXNbXCJEYXRlVGltZVwiXSA9IDI0XSA9IFwiRGF0ZVRpbWVcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiRHVyYXRpb25cIl0gPSAyNV0gPSBcIkR1cmF0aW9uXCI7XG4gICAgQXNuUHJvcFR5cGVzW0FzblByb3BUeXBlc1tcIlRJTUVcIl0gPSAyNl0gPSBcIlRJTUVcIjtcbiAgICBBc25Qcm9wVHlwZXNbQXNuUHJvcFR5cGVzW1wiTnVsbFwiXSA9IDI3XSA9IFwiTnVsbFwiO1xufSkoQXNuUHJvcFR5cGVzIHx8IChBc25Qcm9wVHlwZXMgPSB7fSkpO1xuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgeyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgfSBmcm9tIFwicHZ0c3V0aWxzXCI7XG5leHBvcnQgY2xhc3MgQml0U3RyaW5nIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJhbXMsIHVudXNlZEJpdHMgPSAwKSB7XG4gICAgICAgIHRoaXMudW51c2VkQml0cyA9IDA7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1zID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mcm9tTnVtYmVyKHBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2UocGFyYW1zKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudW51c2VkQml0cyA9IHVudXNlZEJpdHM7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJVbnN1cHBvcnRlZCB0eXBlIG9mICdwYXJhbXMnIGFyZ3VtZW50IGZvciBCaXRTdHJpbmdcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnJvbUFTTihhc24pIHtcbiAgICAgICAgaWYgKCEoYXNuIGluc3RhbmNlb2YgYXNuMWpzLkJpdFN0cmluZykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCAnYXNuJyBpcyBub3QgaW5zdGFuY2Ugb2YgQVNOLjEgQml0U3RyaW5nXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudW51c2VkQml0cyA9IGFzbi52YWx1ZUJsb2NrLnVudXNlZEJpdHM7XG4gICAgICAgIHRoaXMudmFsdWUgPSBhc24udmFsdWVCbG9jay52YWx1ZUhleDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRvQVNOKCkge1xuICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5CaXRTdHJpbmcoeyB1bnVzZWRCaXRzOiB0aGlzLnVudXNlZEJpdHMsIHZhbHVlSGV4OiB0aGlzLnZhbHVlIH0pO1xuICAgIH1cbiAgICB0b1NjaGVtYShuYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgYXNuMWpzLkJpdFN0cmluZyh7IG5hbWUgfSk7XG4gICAgfVxuICAgIHRvTnVtYmVyKCkge1xuICAgICAgICBsZXQgcmVzID0gXCJcIjtcbiAgICAgICAgY29uc3QgdWludEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkodGhpcy52YWx1ZSk7XG4gICAgICAgIGZvciAoY29uc3Qgb2N0ZXQgb2YgdWludEFycmF5KSB7XG4gICAgICAgICAgICByZXMgKz0gb2N0ZXQudG9TdHJpbmcoMikucGFkU3RhcnQoOCwgXCIwXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJlcyA9IHJlcy5zcGxpdChcIlwiKS5yZXZlcnNlKCkuam9pbihcIlwiKTtcbiAgICAgICAgaWYgKHRoaXMudW51c2VkQml0cykge1xuICAgICAgICAgICAgcmVzID0gcmVzLnNsaWNlKHRoaXMudW51c2VkQml0cykucGFkU3RhcnQodGhpcy51bnVzZWRCaXRzLCBcIjBcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHJlcywgMik7XG4gICAgfVxuICAgIGZyb21OdW1iZXIodmFsdWUpIHtcbiAgICAgICAgbGV0IGJpdHMgPSB2YWx1ZS50b1N0cmluZygyKTtcbiAgICAgICAgY29uc3Qgb2N0ZXRTaXplID0gKGJpdHMubGVuZ3RoICsgNykgPj4gMztcbiAgICAgICAgdGhpcy51bnVzZWRCaXRzID0gKG9jdGV0U2l6ZSA8PCAzKSAtIGJpdHMubGVuZ3RoO1xuICAgICAgICBjb25zdCBvY3RldHMgPSBuZXcgVWludDhBcnJheShvY3RldFNpemUpO1xuICAgICAgICBiaXRzID0gYml0c1xuICAgICAgICAgICAgLnBhZFN0YXJ0KG9jdGV0U2l6ZSA8PCAzLCBcIjBcIilcbiAgICAgICAgICAgIC5zcGxpdChcIlwiKVxuICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgLmpvaW4oXCJcIik7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IG9jdGV0U2l6ZSkge1xuICAgICAgICAgICAgb2N0ZXRzW2luZGV4XSA9IHBhcnNlSW50KGJpdHMuc2xpY2UoaW5kZXggPDwgMywgKGluZGV4IDw8IDMpICsgOCksIDIpO1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gb2N0ZXRzLmJ1ZmZlcjtcbiAgICB9XG59XG4iLCAiaW1wb3J0ICogYXMgYXNuMWpzIGZyb20gXCJhc24xanNcIjtcbmltcG9ydCB7IEJ1ZmZlclNvdXJjZUNvbnZlcnRlciB9IGZyb20gXCJwdnRzdXRpbHNcIjtcbmV4cG9ydCBjbGFzcyBPY3RldFN0cmluZyB7XG4gICAgZ2V0IGJ5dGVMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RoO1xuICAgIH1cbiAgICBnZXQgYnl0ZU9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKHBhcmFtKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFyYW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKHBhcmFtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2UocGFyYW0pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihwYXJhbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHBhcmFtKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkocGFyYW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnJvbUFTTihhc24pIHtcbiAgICAgICAgaWYgKCEoYXNuIGluc3RhbmNlb2YgYXNuMWpzLk9jdGV0U3RyaW5nKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50ICdhc24nIGlzIG5vdCBpbnN0YW5jZSBvZiBBU04uMSBPY3RldFN0cmluZ1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJ1ZmZlciA9IGFzbi52YWx1ZUJsb2NrLnZhbHVlSGV4O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdG9BU04oKSB7XG4gICAgICAgIHJldHVybiBuZXcgYXNuMWpzLk9jdGV0U3RyaW5nKHsgdmFsdWVIZXg6IHRoaXMuYnVmZmVyIH0pO1xuICAgIH1cbiAgICB0b1NjaGVtYShuYW1lKSB7XG4gICAgICAgIHJldHVybiBuZXcgYXNuMWpzLk9jdGV0U3RyaW5nKHsgbmFtZSB9KTtcbiAgICB9XG59XG4iLCAiZXhwb3J0ICogZnJvbSBcIi4vYml0X3N0cmluZ1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vb2N0ZXRfc3RyaW5nXCI7XG4iLCAiaW1wb3J0ICogYXMgYXNuMWpzIGZyb20gXCJhc24xanNcIjtcbmltcG9ydCB7IEFzblByb3BUeXBlcyB9IGZyb20gXCIuL2VudW1zXCI7XG5pbXBvcnQgeyBPY3RldFN0cmluZyB9IGZyb20gXCIuL3R5cGVzL2luZGV4XCI7XG5leHBvcnQgY29uc3QgQXNuQW55Q29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUgaW5zdGFuY2VvZiBhc24xanMuTnVsbCA/IG51bGwgOiB2YWx1ZS52YWx1ZUJlZm9yZURlY29kZVZpZXcsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgYXNuMWpzLk51bGwoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY2hlbWEgPSBhc24xanMuZnJvbUJFUih2YWx1ZSk7XG4gICAgICAgIGlmIChzY2hlbWEucmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc2NoZW1hLnJlc3VsdC5lcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjaGVtYS5yZXN1bHQ7XG4gICAgfSxcbn07XG5leHBvcnQgY29uc3QgQXNuSW50ZWdlckNvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LmJ5dGVMZW5ndGggPj0gNFxuICAgICAgICA/IHZhbHVlLnZhbHVlQmxvY2sudG9TdHJpbmcoKVxuICAgICAgICA6IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVEZWMsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5JbnRlZ2VyKHsgdmFsdWU6ICt2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuRW51bWVyYXRlZENvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVEZWMsXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5FbnVtZXJhdGVkKHsgdmFsdWUgfSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuSW50ZWdlcih7IHZhbHVlSGV4OiB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuSW50ZWdlckJpZ0ludENvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnRvQmlnSW50KCksXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gYXNuMWpzLkludGVnZXIuZnJvbUJpZ0ludCh2YWx1ZSksXG59O1xuZXhwb3J0IGNvbnN0IEFzbkJpdFN0cmluZ0NvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXhWaWV3LFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuQml0U3RyaW5nKHsgdmFsdWVIZXg6IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25PYmplY3RJZGVudGlmaWVyQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay50b1N0cmluZygpLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IG5ldyBhc24xanMuT2JqZWN0SWRlbnRpZmllcih7IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25Cb29sZWFuQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudmFsdWVCbG9jay52YWx1ZSxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLkJvb2xlYW4oeyB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuT2N0ZXRTdHJpbmdDb252ZXJ0ZXIgPSB7XG4gICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4VmlldyxcbiAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgYXNuMWpzLk9jdGV0U3RyaW5nKHsgdmFsdWVIZXg6IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25Db25zdHJ1Y3RlZE9jdGV0U3RyaW5nQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gbmV3IE9jdGV0U3RyaW5nKHZhbHVlLmdldFZhbHVlKCkpLFxuICAgIHRvQVNOOiAodmFsdWUpID0+IHZhbHVlLnRvQVNOKCksXG59O1xuZnVuY3Rpb24gY3JlYXRlU3RyaW5nQ29udmVydGVyKEFzbjFUeXBlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZnJvbUFTTjogKHZhbHVlKSA9PiB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlLFxuICAgICAgICB0b0FTTjogKHZhbHVlKSA9PiBuZXcgQXNuMVR5cGUoeyB2YWx1ZSB9KSxcbiAgICB9O1xufVxuZXhwb3J0IGNvbnN0IEFzblV0ZjhTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLlV0ZjhTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzbkJtcFN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuQm1wU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25Vbml2ZXJzYWxTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLlVuaXZlcnNhbFN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuTnVtZXJpY1N0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuTnVtZXJpY1N0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuUHJpbnRhYmxlU3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5QcmludGFibGVTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzblRlbGV0ZXhTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLlRlbGV0ZXhTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzblZpZGVvdGV4U3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5WaWRlb3RleFN0cmluZyk7XG5leHBvcnQgY29uc3QgQXNuSUE1U3RyaW5nQ29udmVydGVyID0gY3JlYXRlU3RyaW5nQ29udmVydGVyKGFzbjFqcy5JQTVTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzbkdyYXBoaWNTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLkdyYXBoaWNTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzblZpc2libGVTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLlZpc2libGVTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzbkdlbmVyYWxTdHJpbmdDb252ZXJ0ZXIgPSBjcmVhdGVTdHJpbmdDb252ZXJ0ZXIoYXNuMWpzLkdlbmVyYWxTdHJpbmcpO1xuZXhwb3J0IGNvbnN0IEFzbkNoYXJhY3RlclN0cmluZ0NvbnZlcnRlciA9IGNyZWF0ZVN0cmluZ0NvbnZlcnRlcihhc24xanMuQ2hhcmFjdGVyU3RyaW5nKTtcbmV4cG9ydCBjb25zdCBBc25VVENUaW1lQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudG9EYXRlKCksXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5VVENUaW1lKHsgdmFsdWVEYXRlOiB2YWx1ZSB9KSxcbn07XG5leHBvcnQgY29uc3QgQXNuR2VuZXJhbGl6ZWRUaW1lQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4gdmFsdWUudG9EYXRlKCksXG4gICAgdG9BU046ICh2YWx1ZSkgPT4gbmV3IGFzbjFqcy5HZW5lcmFsaXplZFRpbWUoeyB2YWx1ZURhdGU6IHZhbHVlIH0pLFxufTtcbmV4cG9ydCBjb25zdCBBc25OdWxsQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICgpID0+IG51bGwsXG4gICAgdG9BU046ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuTnVsbCgpO1xuICAgIH0sXG59O1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRDb252ZXJ0ZXIodHlwZSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5Bbnk6XG4gICAgICAgICAgICByZXR1cm4gQXNuQW55Q29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5CaXRTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuQml0U3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5CbXBTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuQm1wU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5Cb29sZWFuOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkJvb2xlYW5Db252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkNoYXJhY3RlclN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25DaGFyYWN0ZXJTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkVudW1lcmF0ZWQ6XG4gICAgICAgICAgICByZXR1cm4gQXNuRW51bWVyYXRlZENvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuR2VuZXJhbFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25HZW5lcmFsU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5HZW5lcmFsaXplZFRpbWU6XG4gICAgICAgICAgICByZXR1cm4gQXNuR2VuZXJhbGl6ZWRUaW1lQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5HcmFwaGljU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbkdyYXBoaWNTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLklBNVN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25JQTVTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLkludGVnZXI6XG4gICAgICAgICAgICByZXR1cm4gQXNuSW50ZWdlckNvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuTnVsbDpcbiAgICAgICAgICAgIHJldHVybiBBc25OdWxsQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5OdW1lcmljU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzbk51bWVyaWNTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLk9iamVjdElkZW50aWZpZXI6XG4gICAgICAgICAgICByZXR1cm4gQXNuT2JqZWN0SWRlbnRpZmllckNvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuT2N0ZXRTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuT2N0ZXRTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlByaW50YWJsZVN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBBc25QcmludGFibGVTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlRlbGV0ZXhTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuVGVsZXRleFN0cmluZ0NvbnZlcnRlcjtcbiAgICAgICAgY2FzZSBBc25Qcm9wVHlwZXMuVVRDVGltZTpcbiAgICAgICAgICAgIHJldHVybiBBc25VVENUaW1lQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5Vbml2ZXJzYWxTdHJpbmc6XG4gICAgICAgICAgICByZXR1cm4gQXNuVW5pdmVyc2FsU3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5VdGY4U3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzblV0ZjhTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGNhc2UgQXNuUHJvcFR5cGVzLlZpZGVvdGV4U3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzblZpZGVvdGV4U3RyaW5nQ29udmVydGVyO1xuICAgICAgICBjYXNlIEFzblByb3BUeXBlcy5WaXNpYmxlU3RyaW5nOlxuICAgICAgICAgICAgcmV0dXJuIEFzblZpc2libGVTdHJpbmdDb252ZXJ0ZXI7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGlzQ29udmVydGlibGUodGFyZ2V0KSB7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09IFwiZnVuY3Rpb25cIiAmJiB0YXJnZXQucHJvdG90eXBlKSB7XG4gICAgICAgIGlmICh0YXJnZXQucHJvdG90eXBlLnRvQVNOICYmIHRhcmdldC5wcm90b3R5cGUuZnJvbUFTTikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNDb252ZXJ0aWJsZSh0YXJnZXQucHJvdG90eXBlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuICEhKHRhcmdldCAmJiB0eXBlb2YgdGFyZ2V0ID09PSBcIm9iamVjdFwiICYmIFwidG9BU05cIiBpbiB0YXJnZXQgJiYgXCJmcm9tQVNOXCIgaW4gdGFyZ2V0KTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gaXNUeXBlT2ZBcnJheSh0YXJnZXQpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpO1xuICAgICAgICBpZiAoKChfYSA9IHByb3RvID09PSBudWxsIHx8IHByb3RvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcm90by5wcm90b3R5cGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb25zdHJ1Y3RvcikgPT09IEFycmF5KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNUeXBlT2ZBcnJheShwcm90byk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0FycmF5RXF1YWwoYnl0ZXMxLCBieXRlczIpIHtcbiAgICBpZiAoIShieXRlczEgJiYgYnl0ZXMyKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChieXRlczEuYnl0ZUxlbmd0aCAhPT0gYnl0ZXMyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBiMSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzMSk7XG4gICAgY29uc3QgYjIgPSBuZXcgVWludDhBcnJheShieXRlczIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMxLmJ5dGVMZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYjFbaV0gIT09IGIyW2ldKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4iLCAiaW1wb3J0ICogYXMgYXNuMWpzIGZyb20gXCJhc24xanNcIjtcbmltcG9ydCB7IEFzblByb3BUeXBlcywgQXNuVHlwZVR5cGVzIH0gZnJvbSBcIi4vZW51bXNcIjtcbmltcG9ydCB7IGlzQ29udmVydGlibGUgfSBmcm9tIFwiLi9oZWxwZXJcIjtcbmV4cG9ydCBjbGFzcyBBc25TY2hlbWFTdG9yYWdlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IG5ldyBXZWFrTWFwKCk7XG4gICAgfVxuICAgIGhhcyh0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXMuaGFzKHRhcmdldCk7XG4gICAgfVxuICAgIGdldCh0YXJnZXQsIGNoZWNrU2NoZW1hID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5pdGVtcy5nZXQodGFyZ2V0KTtcbiAgICAgICAgaWYgKCFzY2hlbWEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBzY2hlbWEgZm9yICcke3RhcmdldC5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZX0nIHRhcmdldGApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja1NjaGVtYSAmJiAhc2NoZW1hLnNjaGVtYSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTY2hlbWEgJyR7dGFyZ2V0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lfScgZG9lc24ndCBjb250YWluIEFTTi4xIHNjaGVtYS4gQ2FsbCAnQXNuU2NoZW1hU3RvcmFnZS5jYWNoZScuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9XG4gICAgY2FjaGUodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuZ2V0KHRhcmdldCk7XG4gICAgICAgIGlmICghc2NoZW1hLnNjaGVtYSkge1xuICAgICAgICAgICAgc2NoZW1hLnNjaGVtYSA9IHRoaXMuY3JlYXRlKHRhcmdldCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY3JlYXRlRGVmYXVsdCh0YXJnZXQpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0ge1xuICAgICAgICAgICAgdHlwZTogQXNuVHlwZVR5cGVzLlNlcXVlbmNlLFxuICAgICAgICAgICAgaXRlbXM6IHt9LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBwYXJlbnRTY2hlbWEgPSB0aGlzLmZpbmRQYXJlbnRTY2hlbWEodGFyZ2V0KTtcbiAgICAgICAgaWYgKHBhcmVudFNjaGVtYSkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIHBhcmVudFNjaGVtYSk7XG4gICAgICAgICAgICBzY2hlbWEuaXRlbXMgPSBPYmplY3QuYXNzaWduKHt9LCBzY2hlbWEuaXRlbXMsIHBhcmVudFNjaGVtYS5pdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjaGVtYTtcbiAgICB9XG4gICAgY3JlYXRlKHRhcmdldCwgdXNlTmFtZXMpIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5pdGVtcy5nZXQodGFyZ2V0KSB8fCB0aGlzLmNyZWF0ZURlZmF1bHQodGFyZ2V0KTtcbiAgICAgICAgY29uc3QgYXNuMVZhbHVlID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYS5pdGVtcykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHNjaGVtYS5pdGVtc1trZXldO1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IHVzZU5hbWVzID8ga2V5IDogXCJcIjtcbiAgICAgICAgICAgIGxldCBhc24xSXRlbTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbS50eXBlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgQXNuMVR5cGVOYW1lID0gQXNuUHJvcFR5cGVzW2l0ZW0udHlwZV07XG4gICAgICAgICAgICAgICAgY29uc3QgQXNuMVR5cGUgPSBhc24xanNbQXNuMVR5cGVOYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAoIUFzbjFUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBBU04xIGNsYXNzIGJ5IG5hbWUgJyR7QXNuMVR5cGVOYW1lfSdgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBuZXcgQXNuMVR5cGUoeyBuYW1lIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNDb252ZXJ0aWJsZShpdGVtLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgaXRlbS50eXBlKCk7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBpbnN0YW5jZS50b1NjaGVtYShuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW0ub3B0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2NoZW1hID0gdGhpcy5nZXQoaXRlbS50eXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbVNjaGVtYS50eXBlID09PSBBc25UeXBlVHlwZXMuQ2hvaWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzbjFJdGVtID0gbmV3IGFzbjFqcy5BbnkoeyBuYW1lIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSB0aGlzLmNyZWF0ZShpdGVtLnR5cGUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgYXNuMUl0ZW0ubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBuZXcgYXNuMWpzLkFueSh7IG5hbWUgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvcHRpb25hbCA9ICEhaXRlbS5vcHRpb25hbCB8fCBpdGVtLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGl0ZW0ucmVwZWF0ZWQpIHtcbiAgICAgICAgICAgICAgICBhc24xSXRlbS5uYW1lID0gXCJcIjtcbiAgICAgICAgICAgICAgICBjb25zdCBDb250YWluZXIgPSBpdGVtLnJlcGVhdGVkID09PSBcInNldFwiID8gYXNuMWpzLlNldCA6IGFzbjFqcy5TZXF1ZW5jZTtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IG5ldyBDb250YWluZXIoe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGFzbjFqcy5SZXBlYXRlZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYXNuMUl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtLmNvbnRleHQgIT09IG51bGwgJiYgaXRlbS5jb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pbXBsaWNpdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0udHlwZSA9PT0gXCJudW1iZXJcIiB8fCBpc0NvbnZlcnRpYmxlKGl0ZW0udHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lciA9IGl0ZW0ucmVwZWF0ZWQgPyBhc24xanMuQ29uc3RydWN0ZWQgOiBhc24xanMuUHJpbWl0aXZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNuMVZhbHVlLnB1c2gobmV3IENvbnRhaW5lcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdOdW1iZXI6IGl0ZW0uY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZShpdGVtLnR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNSZXBlYXRlZCA9ICEhaXRlbS5yZXBlYXRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9ICFpc1JlcGVhdGVkID8gdGhpcy5nZXQoaXRlbS50eXBlLCB0cnVlKS5zY2hlbWEgOiBhc24xSXRlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInZhbHVlQmxvY2tcIiBpbiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKG5ldyBhc24xanMuQ29uc3RydWN0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICFpc1JlcGVhdGVkID8gbmFtZSA6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRCbG9jazoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBpdGVtLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKG5ldyBhc24xanMuQ29uc3RydWN0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBpdGVtLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFthc24xSXRlbV0sXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc24xSXRlbS5vcHRpb25hbCA9IG9wdGlvbmFsO1xuICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKGFzbjFJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHNjaGVtYS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEFzblR5cGVUeXBlcy5TZXF1ZW5jZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5TZXF1ZW5jZSh7IHZhbHVlOiBhc24xVmFsdWUsIG5hbWU6IFwiXCIgfSk7XG4gICAgICAgICAgICBjYXNlIEFzblR5cGVUeXBlcy5TZXQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBhc24xanMuU2V0KHsgdmFsdWU6IGFzbjFWYWx1ZSwgbmFtZTogXCJcIiB9KTtcbiAgICAgICAgICAgIGNhc2UgQXNuVHlwZVR5cGVzLkNob2ljZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGFzbjFqcy5DaG9pY2UoeyB2YWx1ZTogYXNuMVZhbHVlLCBuYW1lOiBcIlwiIH0pO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIEFTTjEgdHlwZSBpbiB1c2VgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXQodGFyZ2V0LCBzY2hlbWEpIHtcbiAgICAgICAgdGhpcy5pdGVtcy5zZXQodGFyZ2V0LCBzY2hlbWEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZmluZFBhcmVudFNjaGVtYSh0YXJnZXQpIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldCk7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuaXRlbXMuZ2V0KHBhcmVudCk7XG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hIHx8IHRoaXMuZmluZFBhcmVudFNjaGVtYShwYXJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBBc25TY2hlbWFTdG9yYWdlIH0gZnJvbSBcIi4vc2NoZW1hXCI7XG5leHBvcnQgY29uc3Qgc2NoZW1hU3RvcmFnZSA9IG5ldyBBc25TY2hlbWFTdG9yYWdlKCk7XG4iLCAiaW1wb3J0ICogYXMgY29udmVydGVycyBmcm9tIFwiLi9jb252ZXJ0ZXJzXCI7XG5pbXBvcnQgeyBBc25UeXBlVHlwZXMgfSBmcm9tIFwiLi9lbnVtc1wiO1xuaW1wb3J0IHsgc2NoZW1hU3RvcmFnZSB9IGZyb20gXCIuL3N0b3JhZ2VcIjtcbmV4cG9ydCBjb25zdCBBc25UeXBlID0gKG9wdGlvbnMpID0+ICh0YXJnZXQpID0+IHtcbiAgICBsZXQgc2NoZW1hO1xuICAgIGlmICghc2NoZW1hU3RvcmFnZS5oYXModGFyZ2V0KSkge1xuICAgICAgICBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmNyZWF0ZURlZmF1bHQodGFyZ2V0KTtcbiAgICAgICAgc2NoZW1hU3RvcmFnZS5zZXQodGFyZ2V0LCBzY2hlbWEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5nZXQodGFyZ2V0KTtcbiAgICB9XG4gICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIG9wdGlvbnMpO1xufTtcbmV4cG9ydCBjb25zdCBBc25DaG9pY2VUeXBlID0gKCkgPT4gQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5DaG9pY2UgfSk7XG5leHBvcnQgY29uc3QgQXNuU2V0VHlwZSA9IChvcHRpb25zKSA9PiBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLlNldCwgLi4ub3B0aW9ucyB9KTtcbmV4cG9ydCBjb25zdCBBc25TZXF1ZW5jZVR5cGUgPSAob3B0aW9ucykgPT4gQXNuVHlwZSh7IHR5cGU6IEFzblR5cGVUeXBlcy5TZXF1ZW5jZSwgLi4ub3B0aW9ucyB9KTtcbmV4cG9ydCBjb25zdCBBc25Qcm9wID0gKG9wdGlvbnMpID0+ICh0YXJnZXQsIHByb3BlcnR5S2V5KSA9PiB7XG4gICAgbGV0IHNjaGVtYTtcbiAgICBpZiAoIXNjaGVtYVN0b3JhZ2UuaGFzKHRhcmdldC5jb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5jcmVhdGVEZWZhdWx0KHRhcmdldC5jb25zdHJ1Y3Rvcik7XG4gICAgICAgIHNjaGVtYVN0b3JhZ2Uuc2V0KHRhcmdldC5jb25zdHJ1Y3Rvciwgc2NoZW1hKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVN0b3JhZ2UuZ2V0KHRhcmdldC5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICAgIGNvbnN0IGNvcHlPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyk7XG4gICAgaWYgKHR5cGVvZiBjb3B5T3B0aW9ucy50eXBlID09PSBcIm51bWJlclwiICYmICFjb3B5T3B0aW9ucy5jb252ZXJ0ZXIpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdENvbnZlcnRlciA9IGNvbnZlcnRlcnMuZGVmYXVsdENvbnZlcnRlcihvcHRpb25zLnR5cGUpO1xuICAgICAgICBpZiAoIWRlZmF1bHRDb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBkZWZhdWx0IGNvbnZlcnRlciBmb3IgcHJvcGVydHkgJyR7cHJvcGVydHlLZXl9JyBvZiAke3RhcmdldC5jb25zdHJ1Y3Rvci5uYW1lfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvcHlPcHRpb25zLmNvbnZlcnRlciA9IGRlZmF1bHRDb252ZXJ0ZXI7XG4gICAgfVxuICAgIHNjaGVtYS5pdGVtc1twcm9wZXJ0eUtleV0gPSBjb3B5T3B0aW9ucztcbn07XG4iLCAiZXhwb3J0IGNsYXNzIEFzblNjaGVtYVZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5zY2hlbWFzID0gW107XG4gICAgfVxufVxuIiwgImV4cG9ydCAqIGZyb20gXCIuL3NjaGVtYV92YWxpZGF0aW9uXCI7XG4iLCAiaW1wb3J0ICogYXMgYXNuMWpzIGZyb20gXCJhc24xanNcIjtcbmltcG9ydCB7IEFzblByb3BUeXBlcywgQXNuVHlwZVR5cGVzIH0gZnJvbSBcIi4vZW51bXNcIjtcbmltcG9ydCAqIGFzIGNvbnZlcnRlcnMgZnJvbSBcIi4vY29udmVydGVyc1wiO1xuaW1wb3J0IHsgQXNuU2NoZW1hVmFsaWRhdGlvbkVycm9yIH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5pbXBvcnQgeyBpc0NvbnZlcnRpYmxlLCBpc1R5cGVPZkFycmF5IH0gZnJvbSBcIi4vaGVscGVyXCI7XG5pbXBvcnQgeyBzY2hlbWFTdG9yYWdlIH0gZnJvbSBcIi4vc3RvcmFnZVwiO1xuZXhwb3J0IGNsYXNzIEFzblBhcnNlciB7XG4gICAgc3RhdGljIHBhcnNlKGRhdGEsIHRhcmdldCkge1xuICAgICAgICBjb25zdCBhc24xUGFyc2VkID0gYXNuMWpzLmZyb21CRVIoZGF0YSk7XG4gICAgICAgIGlmIChhc24xUGFyc2VkLnJlc3VsdC5lcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFzbjFQYXJzZWQucmVzdWx0LmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSB0aGlzLmZyb21BU04oYXNuMVBhcnNlZC5yZXN1bHQsIHRhcmdldCk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tQVNOKGFzbjFTY2hlbWEsIHRhcmdldCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoaXNDb252ZXJ0aWJsZSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBuZXcgdGFyZ2V0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmZyb21BU04oYXNuMVNjaGVtYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmdldCh0YXJnZXQpO1xuICAgICAgICAgICAgc2NoZW1hU3RvcmFnZS5jYWNoZSh0YXJnZXQpO1xuICAgICAgICAgICAgbGV0IHRhcmdldFNjaGVtYSA9IHNjaGVtYS5zY2hlbWE7XG4gICAgICAgICAgICBpZiAoYXNuMVNjaGVtYS5jb25zdHJ1Y3RvciA9PT0gYXNuMWpzLkNvbnN0cnVjdGVkICYmIHNjaGVtYS50eXBlICE9PSBBc25UeXBlVHlwZXMuQ2hvaWNlKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0U2NoZW1hID0gbmV3IGFzbjFqcy5Db25zdHJ1Y3RlZCh7XG4gICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBhc24xU2NoZW1hLmlkQmxvY2sudGFnTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogc2NoZW1hLnNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYS5pdGVtcykge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgYXNuMVNjaGVtYVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFzbjFDb21wYXJlZFNjaGVtYSA9IGFzbjFqcy5jb21wYXJlU2NoZW1hKHt9LCBhc24xU2NoZW1hLCB0YXJnZXRTY2hlbWEpO1xuICAgICAgICAgICAgaWYgKCFhc24xQ29tcGFyZWRTY2hlbWEudmVyaWZpZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNuU2NoZW1hVmFsaWRhdGlvbkVycm9yKGBEYXRhIGRvZXMgbm90IG1hdGNoIHRvICR7dGFyZ2V0Lm5hbWV9IEFTTjEgc2NoZW1hLiAke2FzbjFDb21wYXJlZFNjaGVtYS5yZXN1bHQuZXJyb3J9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXMgPSBuZXcgdGFyZ2V0KCk7XG4gICAgICAgICAgICBpZiAoaXNUeXBlT2ZBcnJheSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoXCJ2YWx1ZVwiIGluIGFzbjFTY2hlbWEudmFsdWVCbG9jayAmJiBBcnJheS5pc0FycmF5KGFzbjFTY2hlbWEudmFsdWVCbG9jay52YWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBpdGVtcyBmcm9tIHRoZSBBU04uMSBwYXJzZWQgdmFsdWUuIEFTTi4xIG9iamVjdCBpcyBub3QgY29uc3RydWN0ZWQuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1UeXBlID0gc2NoZW1hLml0ZW1UeXBlO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbVR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udmVydGVyID0gY29udmVydGVycy5kZWZhdWx0Q29udmVydGVyKGl0ZW1UeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGdldCBkZWZhdWx0IGNvbnZlcnRlciBmb3IgYXJyYXkgaXRlbSBvZiAke3RhcmdldC5uYW1lfSBBU04xIHNjaGVtYWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQuZnJvbShhc24xU2NoZW1hLnZhbHVlQmxvY2sudmFsdWUsIChlbGVtZW50KSA9PiBjb252ZXJ0ZXIuZnJvbUFTTihlbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmZyb20oYXNuMVNjaGVtYS52YWx1ZUJsb2NrLnZhbHVlLCAoZWxlbWVudCkgPT4gdGhpcy5mcm9tQVNOKGVsZW1lbnQsIGl0ZW1UeXBlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNuMVNjaGVtYVZhbHVlID0gYXNuMUNvbXBhcmVkU2NoZW1hLnJlc3VsdFtrZXldO1xuICAgICAgICAgICAgICAgIGlmICghYXNuMVNjaGVtYVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFJdGVtID0gc2NoZW1hLml0ZW1zW2tleV07XG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hSXRlbVR5cGUgPSBzY2hlbWFJdGVtLnR5cGU7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWFJdGVtVHlwZSA9PT0gXCJudW1iZXJcIiB8fCBpc0NvbnZlcnRpYmxlKHNjaGVtYUl0ZW1UeXBlKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZXIgPSAoX2EgPSBzY2hlbWFJdGVtLmNvbnZlcnRlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKGlzQ29udmVydGlibGUoc2NoZW1hSXRlbVR5cGUpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBzY2hlbWFJdGVtVHlwZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnZlcnRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29udmVydGVyIGlzIGVtcHR5XCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLnJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5pbXBsaWNpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lciA9IHNjaGVtYUl0ZW0ucmVwZWF0ZWQgPT09IFwic2VxdWVuY2VcIiA/IGFzbjFqcy5TZXF1ZW5jZSA6IGFzbjFqcy5TZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3SXRlbSA9IG5ldyBDb250YWluZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtLnZhbHVlQmxvY2sgPSBhc24xU2NoZW1hVmFsdWUudmFsdWVCbG9jaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdJdGVtQXNuID0gYXNuMWpzLmZyb21CRVIobmV3SXRlbS50b0JFUihmYWxzZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdJdGVtQXNuLm9mZnNldCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcGFyc2UgdGhlIGNoaWxkIGl0ZW0uICR7bmV3SXRlbUFzbi5yZXN1bHQuZXJyb3J9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKFwidmFsdWVcIiBpbiBuZXdJdGVtQXNuLnJlc3VsdC52YWx1ZUJsb2NrICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkobmV3SXRlbUFzbi5yZXN1bHQudmFsdWVCbG9jay52YWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgaXRlbXMgZnJvbSB0aGUgQVNOLjEgcGFyc2VkIHZhbHVlLiBBU04uMSBvYmplY3QgaXMgbm90IGNvbnN0cnVjdGVkLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBuZXdJdGVtQXNuLnJlc3VsdC52YWx1ZUJsb2NrLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1trZXldID0gQXJyYXkuZnJvbSh2YWx1ZSwgKGVsZW1lbnQpID0+IGNvbnZlcnRlci5mcm9tQVNOKGVsZW1lbnQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc1trZXldID0gQXJyYXkuZnJvbShhc24xU2NoZW1hVmFsdWUsIChlbGVtZW50KSA9PiBjb252ZXJ0ZXIuZnJvbUFTTihlbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBhc24xU2NoZW1hVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5pbXBsaWNpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdJdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0NvbnZlcnRpYmxlKHNjaGVtYUl0ZW1UeXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtID0gbmV3IHNjaGVtYUl0ZW1UeXBlKCkudG9TY2hlbWEoXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBc24xVHlwZU5hbWUgPSBBc25Qcm9wVHlwZXNbc2NoZW1hSXRlbVR5cGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBc24xVHlwZSA9IGFzbjFqc1tBc24xVHlwZU5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFzbjFUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgJyR7QXNuMVR5cGVOYW1lfScgY2xhc3MgZnJvbSBhc24xanMgbW9kdWxlYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3SXRlbSA9IG5ldyBBc24xVHlwZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJdGVtLnZhbHVlQmxvY2sgPSB2YWx1ZS52YWx1ZUJsb2NrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXNuMWpzLmZyb21CRVIobmV3SXRlbS50b0JFUihmYWxzZSkpLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc1trZXldID0gY29udmVydGVyLmZyb21BU04odmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5yZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGFzbjFTY2hlbWFWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZ2V0IGxpc3Qgb2YgaXRlbXMgZnJvbSB0aGUgQVNOLjEgcGFyc2VkIHZhbHVlLiBBU04uMSB2YWx1ZSBzaG91bGQgYmUgaXRlcmFibGUuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzW2tleV0gPSBBcnJheS5mcm9tKGFzbjFTY2hlbWFWYWx1ZSwgKGVsZW1lbnQpID0+IHRoaXMuZnJvbUFTTihlbGVtZW50LCBzY2hlbWFJdGVtVHlwZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzW2tleV0gPSB0aGlzLmZyb21BU04oYXNuMVNjaGVtYVZhbHVlLCBzY2hlbWFJdGVtVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQXNuU2NoZW1hVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgZXJyb3Iuc2NoZW1hcy5wdXNoKHRhcmdldC5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgKiBhcyBjb252ZXJ0ZXJzIGZyb20gXCIuL2NvbnZlcnRlcnNcIjtcbmltcG9ydCB7IEFzblByb3BUeXBlcywgQXNuVHlwZVR5cGVzIH0gZnJvbSBcIi4vZW51bXNcIjtcbmltcG9ydCB7IGlzQ29udmVydGlibGUsIGlzQXJyYXlFcXVhbCB9IGZyb20gXCIuL2hlbHBlclwiO1xuaW1wb3J0IHsgc2NoZW1hU3RvcmFnZSB9IGZyb20gXCIuL3N0b3JhZ2VcIjtcbmV4cG9ydCBjbGFzcyBBc25TZXJpYWxpemVyIHtcbiAgICBzdGF0aWMgc2VyaWFsaXplKG9iaikge1xuICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgYXNuMWpzLkJhc2VCbG9jaykge1xuICAgICAgICAgICAgcmV0dXJuIG9iai50b0JFUihmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMudG9BU04ob2JqKS50b0JFUihmYWxzZSk7XG4gICAgfVxuICAgIHN0YXRpYyB0b0FTTihvYmopIHtcbiAgICAgICAgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiICYmIGlzQ29udmVydGlibGUob2JqKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9iai50b0FTTigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghKG9iaiAmJiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlBhcmFtZXRlciAxIHNob3VsZCBiZSB0eXBlIG9mIE9iamVjdC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gb2JqLmNvbnN0cnVjdG9yO1xuICAgICAgICBjb25zdCBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmdldCh0YXJnZXQpO1xuICAgICAgICBzY2hlbWFTdG9yYWdlLmNhY2hlKHRhcmdldCk7XG4gICAgICAgIGxldCBhc24xVmFsdWUgPSBbXTtcbiAgICAgICAgaWYgKHNjaGVtYS5pdGVtVHlwZSkge1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGFyYW1ldGVyIDEgc2hvdWxkIGJlIHR5cGUgb2YgQXJyYXkuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEuaXRlbVR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZXIgPSBjb252ZXJ0ZXJzLmRlZmF1bHRDb252ZXJ0ZXIoc2NoZW1hLml0ZW1UeXBlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnZlcnRlcikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBnZXQgZGVmYXVsdCBjb252ZXJ0ZXIgZm9yIGFycmF5IGl0ZW0gb2YgJHt0YXJnZXQubmFtZX0gQVNOMSBzY2hlbWFgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXNuMVZhbHVlID0gb2JqLm1hcCgobykgPT4gY29udmVydGVyLnRvQVNOKG8pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFzbjFWYWx1ZSA9IG9iai5tYXAoKG8pID0+IHRoaXMudG9Bc25JdGVtKHsgdHlwZTogc2NoZW1hLml0ZW1UeXBlIH0sIFwiW11cIiwgdGFyZ2V0LCBvKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFJdGVtID0gc2NoZW1hLml0ZW1zW2tleV07XG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqUHJvcCA9IG9ialtrZXldO1xuICAgICAgICAgICAgICAgIGlmIChvYmpQcm9wID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hSXRlbS5kZWZhdWx0VmFsdWUgPT09IG9ialByb3AgfHxcbiAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBzY2hlbWFJdGVtLmRlZmF1bHRWYWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIG9ialByb3AgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQXJyYXlFcXVhbCh0aGlzLnNlcmlhbGl6ZShzY2hlbWFJdGVtLmRlZmF1bHRWYWx1ZSksIHRoaXMuc2VyaWFsaXplKG9ialByb3ApKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGFzbjFJdGVtID0gQXNuU2VyaWFsaXplci50b0Fzbkl0ZW0oc2NoZW1hSXRlbSwga2V5LCB0YXJnZXQsIG9ialByb3ApO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2NoZW1hSXRlbS5jb250ZXh0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLmltcGxpY2l0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYUl0ZW0ucmVwZWF0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIHNjaGVtYUl0ZW0udHlwZSA9PT0gXCJudW1iZXJcIiB8fCBpc0NvbnZlcnRpYmxlKHNjaGVtYUl0ZW0udHlwZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS52YWx1ZUhleCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFJdGVtIGluc3RhbmNlb2YgYXNuMWpzLk51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYXNuMUl0ZW0udmFsdWVCZWZvcmVEZWNvZGVWaWV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFzbjFJdGVtLnZhbHVlQmxvY2sudG9CRVIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgYXNuMWpzLlByaW1pdGl2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsOiBzY2hlbWFJdGVtLm9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEJsb2NrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdDbGFzczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogc2NoZW1hSXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUucHVzaChuZXcgYXNuMWpzLkNvbnN0cnVjdGVkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWw6IHNjaGVtYUl0ZW0ub3B0aW9uYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0NsYXNzOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnTnVtYmVyOiBzY2hlbWFJdGVtLmNvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhc24xSXRlbS52YWx1ZUJsb2NrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKG5ldyBhc24xanMuQ29uc3RydWN0ZWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsOiBzY2hlbWFJdGVtLm9wdGlvbmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkQmxvY2s6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnQ2xhc3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ051bWJlcjogc2NoZW1hSXRlbS5jb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFthc24xSXRlbV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hSXRlbS5yZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBhc24xVmFsdWUgPSBhc24xVmFsdWUuY29uY2F0KGFzbjFJdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFzbjFWYWx1ZS5wdXNoKGFzbjFJdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFzblNjaGVtYTtcbiAgICAgICAgc3dpdGNoIChzY2hlbWEudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBBc25UeXBlVHlwZXMuU2VxdWVuY2U6XG4gICAgICAgICAgICAgICAgYXNuU2NoZW1hID0gbmV3IGFzbjFqcy5TZXF1ZW5jZSh7IHZhbHVlOiBhc24xVmFsdWUgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFzblR5cGVUeXBlcy5TZXQ6XG4gICAgICAgICAgICAgICAgYXNuU2NoZW1hID0gbmV3IGFzbjFqcy5TZXQoeyB2YWx1ZTogYXNuMVZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBc25UeXBlVHlwZXMuQ2hvaWNlOlxuICAgICAgICAgICAgICAgIGlmICghYXNuMVZhbHVlWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU2NoZW1hICcke3RhcmdldC5uYW1lfScgaGFzIHdyb25nIGRhdGEuIENob2ljZSBjYW5ub3QgYmUgZW1wdHkuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFzblNjaGVtYSA9IGFzbjFWYWx1ZVswXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXNuU2NoZW1hO1xuICAgIH1cbiAgICBzdGF0aWMgdG9Bc25JdGVtKHNjaGVtYUl0ZW0sIGtleSwgdGFyZ2V0LCBvYmpQcm9wKSB7XG4gICAgICAgIGxldCBhc24xSXRlbTtcbiAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWFJdGVtLnR5cGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlciA9IHNjaGVtYUl0ZW0uY29udmVydGVyO1xuICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3BlcnR5ICcke2tleX0nIGRvZXNuJ3QgaGF2ZSBjb252ZXJ0ZXIgZm9yIHR5cGUgJHtBc25Qcm9wVHlwZXNbc2NoZW1hSXRlbS50eXBlXX0gaW4gc2NoZW1hICcke3RhcmdldC5uYW1lfSdgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzY2hlbWFJdGVtLnJlcGVhdGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9ialByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ29ialByb3AnIHNob3VsZCBiZSB0eXBlIG9mIEFycmF5LlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBBcnJheS5mcm9tKG9ialByb3AsIChlbGVtZW50KSA9PiBjb252ZXJ0ZXIudG9BU04oZWxlbWVudCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lciA9IHNjaGVtYUl0ZW0ucmVwZWF0ZWQgPT09IFwic2VxdWVuY2VcIiA/IGFzbjFqcy5TZXF1ZW5jZSA6IGFzbjFqcy5TZXQ7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBuZXcgQ29udGFpbmVyKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1zLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXNuMUl0ZW0gPSBjb252ZXJ0ZXIudG9BU04ob2JqUHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoc2NoZW1hSXRlbS5yZXBlYXRlZCkge1xuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmpQcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGFyYW1ldGVyICdvYmpQcm9wJyBzaG91bGQgYmUgdHlwZSBvZiBBcnJheS5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gQXJyYXkuZnJvbShvYmpQcm9wLCAoZWxlbWVudCkgPT4gdGhpcy50b0FTTihlbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyID0gc2NoZW1hSXRlbS5yZXBlYXRlZCA9PT0gXCJzZXF1ZW5jZVwiID8gYXNuMWpzLlNlcXVlbmNlIDogYXNuMWpzLlNldDtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IG5ldyBDb250YWluZXIoe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc24xSXRlbSA9IHRoaXMudG9BU04ob2JqUHJvcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFzbjFJdGVtO1xuICAgIH1cbn1cbiIsICJleHBvcnQgY2xhc3MgQXNuQXJyYXkgZXh0ZW5kcyBBcnJheSB7XG4gICAgY29uc3RydWN0b3IoaXRlbXMgPSBbXSkge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1zID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBzdXBlcihpdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwgImltcG9ydCAqIGFzIGFzbjFqcyBmcm9tIFwiYXNuMWpzXCI7XG5pbXBvcnQgeyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgfSBmcm9tIFwicHZ0c3V0aWxzXCI7XG5pbXBvcnQgeyBBc25QYXJzZXIgfSBmcm9tIFwiLi9wYXJzZXJcIjtcbmltcG9ydCB7IEFzblNlcmlhbGl6ZXIgfSBmcm9tIFwiLi9zZXJpYWxpemVyXCI7XG5leHBvcnQgY2xhc3MgQXNuQ29udmVydCB7XG4gICAgc3RhdGljIHNlcmlhbGl6ZShvYmopIHtcbiAgICAgICAgcmV0dXJuIEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKG9iaik7XG4gICAgfVxuICAgIHN0YXRpYyBwYXJzZShkYXRhLCB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIEFzblBhcnNlci5wYXJzZShkYXRhLCB0YXJnZXQpO1xuICAgIH1cbiAgICBzdGF0aWMgdG9TdHJpbmcoZGF0YSkge1xuICAgICAgICBjb25zdCBidWYgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2UoZGF0YSlcbiAgICAgICAgICAgID8gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSlcbiAgICAgICAgICAgIDogQXNuQ29udmVydC5zZXJpYWxpemUoZGF0YSk7XG4gICAgICAgIGNvbnN0IGFzbiA9IGFzbjFqcy5mcm9tQkVSKGJ1Zik7XG4gICAgICAgIGlmIChhc24ub2Zmc2V0ID09PSAtMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgZGVjb2RlIEFTTi4xIGRhdGEuICR7YXNuLnJlc3VsdC5lcnJvcn1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXNuLnJlc3VsdC50b1N0cmluZygpO1xuICAgIH1cbn1cbiIsICJleHBvcnQgKiBmcm9tIFwiLi9jb252ZXJ0ZXJzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlcy9pbmRleFwiO1xuZXhwb3J0IHsgQXNuUHJvcCwgQXNuVHlwZSwgQXNuQ2hvaWNlVHlwZSwgQXNuU2VxdWVuY2VUeXBlLCBBc25TZXRUeXBlIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuZXhwb3J0IHsgQXNuVHlwZVR5cGVzLCBBc25Qcm9wVHlwZXMgfSBmcm9tIFwiLi9lbnVtc1wiO1xuZXhwb3J0IHsgQXNuUGFyc2VyIH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5leHBvcnQgeyBBc25TZXJpYWxpemVyIH0gZnJvbSBcIi4vc2VyaWFsaXplclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZXJyb3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9vYmplY3RzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb252ZXJ0XCI7XG4iLCAiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xuICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xuICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHQ7XG4gIH1cbiAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgIHRbcF0gPSBzW3BdO1xuICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgIH1cbiAgcmV0dXJuIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xuICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbiBleHBlY3RlZFwiKTsgcmV0dXJuIGY7IH1cbiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcbiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XG4gIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pO1xuICB2YXIgXywgZG9uZSA9IGZhbHNlO1xuICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGNvbnRleHQgPSB7fTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XG4gICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWRcIik7IGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGYgfHwgbnVsbCkpOyB9O1xuICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XG4gICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChfID0gYWNjZXB0KHJlc3VsdCkpIHtcbiAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XG4gICAgICB9XG4gIH1cbiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xuICBkb25lID0gdHJ1ZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3J1bkluaXRpYWxpemVycyh0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlKSB7XG4gIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWUgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcsIHZhbHVlKSA6IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcpO1xuICB9XG4gIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NldEZ1bmN0aW9uTmFtZShmLCBuYW1lLCBwcmVmaXgpIHtcbiAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xuICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gIHRyeSB7XG4gICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gIH1cbiAgcmV0dXJuIGFyO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcbiAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXG4gICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcbiAgICAgICAgICByW2tdID0gYVtqXTtcbiAgcmV0dXJuIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xuICB2YXIgaSwgcDtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcbiAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cbiAgcmV0dXJuIGNvb2tlZDtcbn07XG5cbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn07XG5cbnZhciBvd25LZXlzID0gZnVuY3Rpb24obykge1xuICBvd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICB2YXIgYXIgPSBbXTtcbiAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgIHJldHVybiBhcjtcbiAgfTtcbiAgcmV0dXJuIG93bktleXMobyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xuICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IG93bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XG4gIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcbiAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XG4gIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZShlbnYsIHZhbHVlLCBhc3luYykge1xuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHZvaWQgMCkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWQuXCIpO1xuICAgIHZhciBkaXNwb3NlLCBpbm5lcjtcbiAgICBpZiAoYXN5bmMpIHtcbiAgICAgIGlmICghU3ltYm9sLmFzeW5jRGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0Rpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdO1xuICAgIH1cbiAgICBpZiAoZGlzcG9zZSA9PT0gdm9pZCAwKSB7XG4gICAgICBpZiAoIVN5bWJvbC5kaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmRpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5kaXNwb3NlXTtcbiAgICAgIGlmIChhc3luYykgaW5uZXIgPSBkaXNwb3NlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRpc3Bvc2UgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBub3QgZGlzcG9zYWJsZS5cIik7XG4gICAgaWYgKGlubmVyKSBkaXNwb3NlID0gZnVuY3Rpb24oKSB7IHRyeSB7IGlubmVyLmNhbGwodGhpcyk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpOyB9IH07XG4gICAgZW52LnN0YWNrLnB1c2goeyB2YWx1ZTogdmFsdWUsIGRpc3Bvc2U6IGRpc3Bvc2UsIGFzeW5jOiBhc3luYyB9KTtcbiAgfVxuICBlbHNlIGlmIChhc3luYykge1xuICAgIGVudi5zdGFjay5wdXNoKHsgYXN5bmM6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgX1N1cHByZXNzZWRFcnJvciA9IHR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2Rpc3Bvc2VSZXNvdXJjZXMoZW52KSB7XG4gIGZ1bmN0aW9uIGZhaWwoZSkge1xuICAgIGVudi5lcnJvciA9IGVudi5oYXNFcnJvciA/IG5ldyBfU3VwcHJlc3NlZEVycm9yKGUsIGVudi5lcnJvciwgXCJBbiBlcnJvciB3YXMgc3VwcHJlc3NlZCBkdXJpbmcgZGlzcG9zYWwuXCIpIDogZTtcbiAgICBlbnYuaGFzRXJyb3IgPSB0cnVlO1xuICB9XG4gIHZhciByLCBzID0gMDtcbiAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICB3aGlsZSAociA9IGVudi5zdGFjay5wb3AoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFyLmFzeW5jICYmIHMgPT09IDEpIHJldHVybiBzID0gMCwgZW52LnN0YWNrLnB1c2gociksIFByb21pc2UucmVzb2x2ZSgpLnRoZW4obmV4dCk7XG4gICAgICAgIGlmIChyLmRpc3Bvc2UpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gci5kaXNwb3NlLmNhbGwoci52YWx1ZSk7XG4gICAgICAgICAgaWYgKHIuYXN5bmMpIHJldHVybiBzIHw9IDIsIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4obmV4dCwgZnVuY3Rpb24oZSkgeyBmYWlsKGUpOyByZXR1cm4gbmV4dCgpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHMgfD0gMTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGZhaWwoZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzID09PSAxKSByZXR1cm4gZW52Lmhhc0Vycm9yID8gUHJvbWlzZS5yZWplY3QoZW52LmVycm9yKSA6IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIGlmIChlbnYuaGFzRXJyb3IpIHRocm93IGVudi5lcnJvcjtcbiAgfVxuICByZXR1cm4gbmV4dCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24ocGF0aCwgcHJlc2VydmVKc3gpIHtcbiAgaWYgKHR5cGVvZiBwYXRoID09PSBcInN0cmluZ1wiICYmIC9eXFwuXFwuP1xcLy8udGVzdChwYXRoKSkge1xuICAgICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvXFwuKHRzeCkkfCgoPzpcXC5kKT8pKCg/OlxcLlteLi9dKz8pPylcXC4oW2NtXT8pdHMkL2ksIGZ1bmN0aW9uIChtLCB0c3gsIGQsIGV4dCwgY20pIHtcbiAgICAgICAgICByZXR1cm4gdHN4ID8gcHJlc2VydmVKc3ggPyBcIi5qc3hcIiA6IFwiLmpzXCIgOiBkICYmICghZXh0IHx8ICFjbSkgPyBtIDogKGQgKyBleHQgKyBcIi5cIiArIGNtLnRvTG93ZXJDYXNlKCkgKyBcImpzXCIpO1xuICAgICAgfSk7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19leHRlbmRzLFxuICBfX2Fzc2lnbixcbiAgX19yZXN0LFxuICBfX2RlY29yYXRlLFxuICBfX3BhcmFtLFxuICBfX2VzRGVjb3JhdGUsXG4gIF9fcnVuSW5pdGlhbGl6ZXJzLFxuICBfX3Byb3BLZXksXG4gIF9fc2V0RnVuY3Rpb25OYW1lLFxuICBfX21ldGFkYXRhLFxuICBfX2F3YWl0ZXIsXG4gIF9fZ2VuZXJhdG9yLFxuICBfX2NyZWF0ZUJpbmRpbmcsXG4gIF9fZXhwb3J0U3RhcixcbiAgX192YWx1ZXMsXG4gIF9fcmVhZCxcbiAgX19zcHJlYWQsXG4gIF9fc3ByZWFkQXJyYXlzLFxuICBfX3NwcmVhZEFycmF5LFxuICBfX2F3YWl0LFxuICBfX2FzeW5jR2VuZXJhdG9yLFxuICBfX2FzeW5jRGVsZWdhdG9yLFxuICBfX2FzeW5jVmFsdWVzLFxuICBfX21ha2VUZW1wbGF0ZU9iamVjdCxcbiAgX19pbXBvcnRTdGFyLFxuICBfX2ltcG9ydERlZmF1bHQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRHZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRTZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRJbixcbiAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2UsXG4gIF9fZGlzcG9zZVJlc291cmNlcyxcbiAgX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24sXG59O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDIwLCBQZWN1bGlhciBWZW50dXJlcywgQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqL1xuXG5jbGFzcyBKc29uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBpbm5lckVycm9yKSB7XHJcbiAgICAgICAgc3VwZXIoaW5uZXJFcnJvclxyXG4gICAgICAgICAgICA/IGAke21lc3NhZ2V9LiBTZWUgdGhlIGlubmVyIGV4Y2VwdGlvbiBmb3IgbW9yZSBkZXRhaWxzLmBcclxuICAgICAgICAgICAgOiBtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xyXG4gICAgICAgIHRoaXMuaW5uZXJFcnJvciA9IGlubmVyRXJyb3I7XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgVHJhbnNmb3JtRXJyb3IgZXh0ZW5kcyBKc29uRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3Ioc2NoZW1hLCBtZXNzYWdlLCBpbm5lckVycm9yKSB7XHJcbiAgICAgICAgc3VwZXIobWVzc2FnZSwgaW5uZXJFcnJvcik7XHJcbiAgICAgICAgdGhpcy5zY2hlbWEgPSBzY2hlbWE7XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgUGFyc2VyRXJyb3IgZXh0ZW5kcyBUcmFuc2Zvcm1FcnJvciB7XHJcbiAgICBjb25zdHJ1Y3RvcihzY2hlbWEsIG1lc3NhZ2UsIGlubmVyRXJyb3IpIHtcclxuICAgICAgICBzdXBlcihzY2hlbWEsIGBKU09OIGRvZXNuJ3QgbWF0Y2ggdG8gJyR7c2NoZW1hLnRhcmdldC5uYW1lfScgc2NoZW1hLiAke21lc3NhZ2V9YCwgaW5uZXJFcnJvcik7XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgSnNvbkVycm9yIHtcclxufVxuXG5jbGFzcyBTZXJpYWxpemVyRXJyb3IgZXh0ZW5kcyBKc29uRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3Ioc2NoZW1hTmFtZSwgbWVzc2FnZSwgaW5uZXJFcnJvcikge1xyXG4gICAgICAgIHN1cGVyKGBDYW5ub3Qgc2VyaWFsaXplIGJ5ICcke3NjaGVtYU5hbWV9JyBzY2hlbWEuICR7bWVzc2FnZX1gLCBpbm5lckVycm9yKTtcclxuICAgICAgICB0aGlzLnNjaGVtYU5hbWUgPSBzY2hlbWFOYW1lO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIEtleUVycm9yIGV4dGVuZHMgUGFyc2VyRXJyb3Ige1xyXG4gICAgY29uc3RydWN0b3Ioc2NoZW1hLCBrZXlzLCBlcnJvcnMgPSB7fSkge1xyXG4gICAgICAgIHN1cGVyKHNjaGVtYSwgXCJTb21lIGtleXMgZG9lc24ndCBtYXRjaCB0byBzY2hlbWFcIik7XHJcbiAgICAgICAgdGhpcy5rZXlzID0ga2V5cztcclxuICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcclxuICAgIH1cclxufVxuXG52YXIgSnNvblByb3BUeXBlcztcclxuKGZ1bmN0aW9uIChKc29uUHJvcFR5cGVzKSB7XHJcbiAgICBKc29uUHJvcFR5cGVzW0pzb25Qcm9wVHlwZXNbXCJBbnlcIl0gPSAwXSA9IFwiQW55XCI7XHJcbiAgICBKc29uUHJvcFR5cGVzW0pzb25Qcm9wVHlwZXNbXCJCb29sZWFuXCJdID0gMV0gPSBcIkJvb2xlYW5cIjtcclxuICAgIEpzb25Qcm9wVHlwZXNbSnNvblByb3BUeXBlc1tcIk51bWJlclwiXSA9IDJdID0gXCJOdW1iZXJcIjtcclxuICAgIEpzb25Qcm9wVHlwZXNbSnNvblByb3BUeXBlc1tcIlN0cmluZ1wiXSA9IDNdID0gXCJTdHJpbmdcIjtcclxufSkoSnNvblByb3BUeXBlcyB8fCAoSnNvblByb3BUeXBlcyA9IHt9KSk7XG5cbmZ1bmN0aW9uIGNoZWNrVHlwZSh2YWx1ZSwgdHlwZSkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgY2FzZSBKc29uUHJvcFR5cGVzLkJvb2xlYW46XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiO1xyXG4gICAgICAgIGNhc2UgSnNvblByb3BUeXBlcy5OdW1iZXI6XHJcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCI7XHJcbiAgICAgICAgY2FzZSBKc29uUHJvcFR5cGVzLlN0cmluZzpcclxuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIjtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcbmZ1bmN0aW9uIHRocm93SWZUeXBlSXNXcm9uZyh2YWx1ZSwgdHlwZSkge1xyXG4gICAgaWYgKCFjaGVja1R5cGUodmFsdWUsIHR5cGUpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVmFsdWUgbXVzdCBiZSAke0pzb25Qcm9wVHlwZXNbdHlwZV19YCk7XHJcbiAgICB9XHJcbn1cclxuZnVuY3Rpb24gaXNDb252ZXJ0aWJsZSh0YXJnZXQpIHtcclxuICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LnByb3RvdHlwZSkge1xyXG4gICAgICAgIGlmICh0YXJnZXQucHJvdG90eXBlLnRvSlNPTiAmJiB0YXJnZXQucHJvdG90eXBlLmZyb21KU09OKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGlzQ29udmVydGlibGUodGFyZ2V0LnByb3RvdHlwZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuICEhKHRhcmdldCAmJiB0YXJnZXQudG9KU09OICYmIHRhcmdldC5mcm9tSlNPTik7XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgSnNvblNjaGVtYVN0b3JhZ2Uge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IG5ldyBNYXAoKTtcclxuICAgIH1cclxuICAgIGhhcyh0YXJnZXQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5oYXModGFyZ2V0KSB8fCAhIXRoaXMuZmluZFBhcmVudFNjaGVtYSh0YXJnZXQpO1xyXG4gICAgfVxyXG4gICAgZ2V0KHRhcmdldCkge1xyXG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuaXRlbXMuZ2V0KHRhcmdldCkgfHwgdGhpcy5maW5kUGFyZW50U2NoZW1hKHRhcmdldCk7XHJcbiAgICAgICAgaWYgKCFzY2hlbWEpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGdldCBzY2hlbWEgZm9yIGN1cnJlbnQgdGFyZ2V0XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2NoZW1hO1xyXG4gICAgfVxyXG4gICAgY3JlYXRlKHRhcmdldCkge1xyXG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHsgbmFtZXM6IHt9IH07XHJcbiAgICAgICAgY29uc3QgcGFyZW50U2NoZW1hID0gdGhpcy5maW5kUGFyZW50U2NoZW1hKHRhcmdldCk7XHJcbiAgICAgICAgaWYgKHBhcmVudFNjaGVtYSkge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNjaGVtYSwgcGFyZW50U2NoZW1hKTtcclxuICAgICAgICAgICAgc2NoZW1hLm5hbWVzID0ge307XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBwYXJlbnRTY2hlbWEubmFtZXMpIHtcclxuICAgICAgICAgICAgICAgIHNjaGVtYS5uYW1lc1tuYW1lXSA9IE9iamVjdC5hc3NpZ24oe30sIHBhcmVudFNjaGVtYS5uYW1lc1tuYW1lXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgc2NoZW1hLnRhcmdldCA9IHRhcmdldDtcclxuICAgICAgICByZXR1cm4gc2NoZW1hO1xyXG4gICAgfVxyXG4gICAgc2V0KHRhcmdldCwgc2NoZW1hKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5zZXQodGFyZ2V0LCBzY2hlbWEpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG4gICAgZmluZFBhcmVudFNjaGVtYSh0YXJnZXQpIHtcclxuICAgICAgICBjb25zdCBwYXJlbnQgPSB0YXJnZXQuX19wcm90b19fO1xyXG4gICAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5pdGVtcy5nZXQocGFyZW50KTtcclxuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYSB8fCB0aGlzLmZpbmRQYXJlbnRTY2hlbWEocGFyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbn1cblxuY29uc3QgREVGQVVMVF9TQ0hFTUEgPSBcImRlZmF1bHRcIjtcclxuY29uc3Qgc2NoZW1hU3RvcmFnZSA9IG5ldyBKc29uU2NoZW1hU3RvcmFnZSgpO1xuXG5jbGFzcyBQYXR0ZXJuVmFsaWRhdGlvbiB7XHJcbiAgICBjb25zdHJ1Y3RvcihwYXR0ZXJuKSB7XHJcbiAgICAgICAgdGhpcy5wYXR0ZXJuID0gbmV3IFJlZ0V4cChwYXR0ZXJuKTtcclxuICAgIH1cclxuICAgIHZhbGlkYXRlKHZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAodGhpcy5wYXR0ZXJuLnNvdXJjZSwgdGhpcy5wYXR0ZXJuLmZsYWdzKTtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXCJJbmNvbWluZyB2YWx1ZSBtdXN0IGJlIHN0cmluZ1wiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFwYXR0ZXJuLmV4ZWModmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFZhbHVlIGRvZXNuJ3QgbWF0Y2ggdG8gcGF0dGVybiAnJHtwYXR0ZXJuLnRvU3RyaW5nKCl9J2ApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5jbGFzcyBJbmNsdXNpdmVWYWxpZGF0aW9uIHtcclxuICAgIGNvbnN0cnVjdG9yKG1pbiA9IE51bWJlci5NSU5fVkFMVUUsIG1heCA9IE51bWJlci5NQVhfVkFMVUUpIHtcclxuICAgICAgICB0aGlzLm1pbiA9IG1pbjtcclxuICAgICAgICB0aGlzLm1heCA9IG1heDtcclxuICAgIH1cclxuICAgIHZhbGlkYXRlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhyb3dJZlR5cGVJc1dyb25nKHZhbHVlLCBKc29uUHJvcFR5cGVzLk51bWJlcik7XHJcbiAgICAgICAgaWYgKCEodGhpcy5taW4gPD0gdmFsdWUgJiYgdmFsdWUgPD0gdGhpcy5tYXgpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pbiA9IHRoaXMubWluID09PSBOdW1iZXIuTUlOX1ZBTFVFID8gXCJNSU5cIiA6IHRoaXMubWluO1xyXG4gICAgICAgICAgICBjb25zdCBtYXggPSB0aGlzLm1heCA9PT0gTnVtYmVyLk1BWF9WQUxVRSA/IFwiTUFYXCIgOiB0aGlzLm1heDtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVmFsdWUgZG9lc24ndCBtYXRjaCB0byBkaWFwYXNvbiBbJHttaW59LCR7bWF4fV1gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgRXhjbHVzaXZlVmFsaWRhdGlvbiB7XHJcbiAgICBjb25zdHJ1Y3RvcihtaW4gPSBOdW1iZXIuTUlOX1ZBTFVFLCBtYXggPSBOdW1iZXIuTUFYX1ZBTFVFKSB7XHJcbiAgICAgICAgdGhpcy5taW4gPSBtaW47XHJcbiAgICAgICAgdGhpcy5tYXggPSBtYXg7XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRocm93SWZUeXBlSXNXcm9uZyh2YWx1ZSwgSnNvblByb3BUeXBlcy5OdW1iZXIpO1xyXG4gICAgICAgIGlmICghKHRoaXMubWluIDwgdmFsdWUgJiYgdmFsdWUgPCB0aGlzLm1heCkpIHtcclxuICAgICAgICAgICAgY29uc3QgbWluID0gdGhpcy5taW4gPT09IE51bWJlci5NSU5fVkFMVUUgPyBcIk1JTlwiIDogdGhpcy5taW47XHJcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IHRoaXMubWF4ID09PSBOdW1iZXIuTUFYX1ZBTFVFID8gXCJNQVhcIiA6IHRoaXMubWF4O1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBWYWx1ZSBkb2Vzbid0IG1hdGNoIHRvIGRpYXBhc29uICgke21pbn0sJHttYXh9KWApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5jbGFzcyBMZW5ndGhWYWxpZGF0aW9uIHtcclxuICAgIGNvbnN0cnVjdG9yKGxlbmd0aCwgbWluTGVuZ3RoLCBtYXhMZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmxlbmd0aCA9IGxlbmd0aDtcclxuICAgICAgICB0aGlzLm1pbkxlbmd0aCA9IG1pbkxlbmd0aDtcclxuICAgICAgICB0aGlzLm1heExlbmd0aCA9IG1heExlbmd0aDtcclxuICAgIH1cclxuICAgIHZhbGlkYXRlKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCAhPT0gdGhpcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFZhbHVlIGxlbmd0aCBtdXN0IGJlIGV4YWN0bHkgJHt0aGlzLmxlbmd0aH0uYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5taW5MZW5ndGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoIDwgdGhpcy5taW5MZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFZhbHVlIGxlbmd0aCBtdXN0IGJlIG1vcmUgdGhhbiAke3RoaXMubWluTGVuZ3RofS5gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tYXhMZW5ndGggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gdGhpcy5tYXhMZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYFZhbHVlIGxlbmd0aCBtdXN0IGJlIGxlc3MgdGhhbiAke3RoaXMubWF4TGVuZ3RofS5gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxuXG5jbGFzcyBFbnVtZXJhdGlvblZhbGlkYXRpb24ge1xyXG4gICAgY29uc3RydWN0b3IoZW51bWVyYXRpb24pIHtcclxuICAgICAgICB0aGlzLmVudW1lcmF0aW9uID0gZW51bWVyYXRpb247XHJcbiAgICB9XHJcbiAgICB2YWxpZGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIHRocm93SWZUeXBlSXNXcm9uZyh2YWx1ZSwgSnNvblByb3BUeXBlcy5TdHJpbmcpO1xyXG4gICAgICAgIGlmICghdGhpcy5lbnVtZXJhdGlvbi5pbmNsdWRlcyh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgVmFsdWUgbXVzdCBiZSBvbmUgb2YgJHt0aGlzLmVudW1lcmF0aW9uLm1hcCgodikgPT4gYCcke3Z9J2ApLmpvaW4oXCIsIFwiKX1gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgSnNvblRyYW5zZm9ybSB7XHJcbiAgICBzdGF0aWMgY2hlY2tWYWx1ZXMoZGF0YSwgc2NoZW1hSXRlbSkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkoZGF0YSkgPyBkYXRhIDogW2RhdGFdO1xyXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbiBvZiBzY2hlbWFJdGVtLnZhbGlkYXRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvbiBpbnN0YW5jZW9mIExlbmd0aFZhbGlkYXRpb24gJiYgc2NoZW1hSXRlbS5yZXBlYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb24udmFsaWRhdGUoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uLnZhbGlkYXRlKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0YXRpYyBjaGVja1R5cGVzKHZhbHVlLCBzY2hlbWFJdGVtKSB7XHJcbiAgICAgICAgaWYgKHNjaGVtYUl0ZW0ucmVwZWF0ZWQgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJWYWx1ZSBtdXN0IGJlIEFycmF5XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIHNjaGVtYUl0ZW0udHlwZSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIHZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgdGhyb3dJZlR5cGVJc1dyb25nKHYsIHNjaGVtYUl0ZW0udHlwZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZ2V0U2NoZW1hQnlOYW1lKHNjaGVtYSwgbmFtZSA9IERFRkFVTFRfU0NIRU1BKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4uc2NoZW1hLm5hbWVzW0RFRkFVTFRfU0NIRU1BXSwgLi4uc2NoZW1hLm5hbWVzW25hbWVdIH07XHJcbiAgICB9XHJcbn1cblxuY2xhc3MgSnNvblNlcmlhbGl6ZXIgZXh0ZW5kcyBKc29uVHJhbnNmb3JtIHtcclxuICAgIHN0YXRpYyBzZXJpYWxpemUob2JqLCBvcHRpb25zLCByZXBsYWNlciwgc3BhY2UpIHtcclxuICAgICAgICBjb25zdCBqc29uID0gdGhpcy50b0pTT04ob2JqLCBvcHRpb25zKTtcclxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoanNvbiwgcmVwbGFjZXIsIHNwYWNlKTtcclxuICAgIH1cclxuICAgIHN0YXRpYyB0b0pTT04ob2JqLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICBsZXQgcmVzO1xyXG4gICAgICAgIGxldCB0YXJnZXRTY2hlbWEgPSBvcHRpb25zLnRhcmdldFNjaGVtYTtcclxuICAgICAgICBjb25zdCBzY2hlbWFOYW1lID0gb3B0aW9ucy5zY2hlbWFOYW1lIHx8IERFRkFVTFRfU0NIRU1BO1xyXG4gICAgICAgIGlmIChpc0NvbnZlcnRpYmxlKG9iaikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9iai50b0pTT04oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xyXG4gICAgICAgICAgICByZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG9iaikge1xyXG4gICAgICAgICAgICAgICAgcmVzLnB1c2godGhpcy50b0pTT04oaXRlbSwgb3B0aW9ucykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgaWYgKHRhcmdldFNjaGVtYSAmJiAhc2NoZW1hU3RvcmFnZS5oYXModGFyZ2V0U2NoZW1hKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpzb25FcnJvcihcIkNhbm5vdCBnZXQgc2NoZW1hIGZvciBgdGFyZ2V0U2NoZW1hYCBwYXJhbVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0YXJnZXRTY2hlbWEgPSAodGFyZ2V0U2NoZW1hIHx8IG9iai5jb25zdHJ1Y3Rvcik7XHJcbiAgICAgICAgICAgIGlmIChzY2hlbWFTdG9yYWdlLmhhcyh0YXJnZXRTY2hlbWEpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmdldCh0YXJnZXRTY2hlbWEpO1xyXG4gICAgICAgICAgICAgICAgcmVzID0ge307XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lZFNjaGVtYSA9IHRoaXMuZ2V0U2NoZW1hQnlOYW1lKHNjaGVtYSwgc2NoZW1hTmFtZSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBuYW1lZFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBuYW1lZFNjaGVtYVtrZXldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvYmpJdGVtID0gb2JqW2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpdGVtLm9wdGlvbmFsICYmIG9iakl0ZW0gPT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChpdGVtLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIG9iakl0ZW0gPT09IGl0ZW0uZGVmYXVsdFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtLm9wdGlvbmFsICYmIG9iakl0ZW0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6ZXJFcnJvcih0YXJnZXRTY2hlbWEubmFtZSwgYFByb3BlcnR5ICcke2tleX0nIGlzIHJlcXVpcmVkLmApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbS50eXBlID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb252ZXJ0ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5yZXBlYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG9iakl0ZW0ubWFwKChlbCkgPT4gaXRlbS5jb252ZXJ0ZXIudG9KU09OKGVsLCBvYmopKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaXRlbS5jb252ZXJ0ZXIudG9KU09OKG9iakl0ZW0sIG9iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBvYmpJdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0ucmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG9iakl0ZW0ubWFwKChlbCkgPT4gdGhpcy50b0pTT04oZWwsIHsgc2NoZW1hTmFtZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMudG9KU09OKG9iakl0ZW0sIHsgc2NoZW1hTmFtZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrVHlwZXModmFsdWUsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrVmFsdWVzKHZhbHVlLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzW2l0ZW0ubmFtZSB8fCBrZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgU2VyaWFsaXplckVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6ZXJFcnJvcihzY2hlbWEudGFyZ2V0Lm5hbWUsIGBQcm9wZXJ0eSAnJHtrZXl9JyBpcyB3cm9uZy4gJHtlLm1lc3NhZ2V9YCwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc1trZXldID0gdGhpcy50b0pTT04ob2JqW2tleV0sIHsgc2NoZW1hTmFtZSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmVzID0gb2JqO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG59XG5cbmNsYXNzIEpzb25QYXJzZXIgZXh0ZW5kcyBKc29uVHJhbnNmb3JtIHtcclxuICAgIHN0YXRpYyBwYXJzZShkYXRhLCBvcHRpb25zKSB7XHJcbiAgICAgICAgY29uc3Qgb2JqID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5mcm9tSlNPTihvYmosIG9wdGlvbnMpO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGZyb21KU09OKHRhcmdldCwgb3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IHRhcmdldFNjaGVtYSA9IG9wdGlvbnMudGFyZ2V0U2NoZW1hO1xyXG4gICAgICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBvcHRpb25zLnNjaGVtYU5hbWUgfHwgREVGQVVMVF9TQ0hFTUE7XHJcbiAgICAgICAgY29uc3Qgb2JqID0gbmV3IHRhcmdldFNjaGVtYSgpO1xyXG4gICAgICAgIGlmIChpc0NvbnZlcnRpYmxlKG9iaikpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9iai5mcm9tSlNPTih0YXJnZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmdldCh0YXJnZXRTY2hlbWEpO1xyXG4gICAgICAgIGNvbnN0IG5hbWVkU2NoZW1hID0gdGhpcy5nZXRTY2hlbWFCeU5hbWUoc2NoZW1hLCBzY2hlbWFOYW1lKTtcclxuICAgICAgICBjb25zdCBrZXlFcnJvcnMgPSB7fTtcclxuICAgICAgICBpZiAob3B0aW9ucy5zdHJpY3RQcm9wZXJ0eSAmJiAhQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7XHJcbiAgICAgICAgICAgIEpzb25QYXJzZXIuY2hlY2tTdHJpY3RQcm9wZXJ0eSh0YXJnZXQsIG5hbWVkU2NoZW1hLCBzY2hlbWEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBuYW1lZFNjaGVtYSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IG5hbWVkU2NoZW1hW2tleV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gaXRlbS5uYW1lIHx8IGtleTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0W25hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgKGl0ZW0ub3B0aW9uYWwgfHwgaXRlbS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICghaXRlbS5vcHRpb25hbCAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFBhcnNlckVycm9yKHNjaGVtYSwgYFByb3BlcnR5ICcke25hbWV9JyBpcyByZXF1aXJlZC5gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tUeXBlcyh2YWx1ZSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrVmFsdWVzKHZhbHVlLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGl0ZW0udHlwZSkgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb252ZXJ0ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0ucmVwZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWUubWFwKChlbCkgPT4gaXRlbS5jb252ZXJ0ZXIuZnJvbUpTT04oZWwsIG9iaikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSBpdGVtLmNvbnZlcnRlci5mcm9tSlNPTih2YWx1ZSwgb2JqKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdPcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRTY2hlbWE6IGl0ZW0udHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLnJlcGVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWUubWFwKChlbCkgPT4gdGhpcy5mcm9tSlNPTihlbCwgbmV3T3B0aW9ucykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqW2tleV0gPSB0aGlzLmZyb21KU09OKHZhbHVlLCBuZXdPcHRpb25zKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBQYXJzZXJFcnJvcikpIHtcclxuICAgICAgICAgICAgICAgICAgICBlID0gbmV3IFBhcnNlckVycm9yKHNjaGVtYSwgYFByb3BlcnR5ICcke2tleX0nIGlzIHdyb25nLiAke2UubWVzc2FnZX1gLCBlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnN0cmljdEFsbEtleXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXlFcnJvcnNba2V5XSA9IGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhrZXlFcnJvcnMpO1xyXG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgS2V5RXJyb3Ioc2NoZW1hLCBrZXlzLCBrZXlFcnJvcnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIGNoZWNrU3RyaWN0UHJvcGVydHkodGFyZ2V0LCBuYW1lZFNjaGVtYSwgc2NoZW1hKSB7XHJcbiAgICAgICAgY29uc3QganNvblByb3BzID0gT2JqZWN0LmtleXModGFyZ2V0KTtcclxuICAgICAgICBjb25zdCBzY2hlbWFQcm9wcyA9IE9iamVjdC5rZXlzKG5hbWVkU2NoZW1hKTtcclxuICAgICAgICBjb25zdCBrZXlzID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YganNvblByb3BzKSB7XHJcbiAgICAgICAgICAgIGlmIChzY2hlbWFQcm9wcy5pbmRleE9mKGtleSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoa2V5cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEtleUVycm9yKHNjaGVtYSwga2V5cyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XG5cbmZ1bmN0aW9uIGdldFZhbGlkYXRpb25zKGl0ZW0pIHtcclxuICAgIGNvbnN0IHZhbGlkYXRpb25zID0gW107XHJcbiAgICBpZiAoaXRlbS5wYXR0ZXJuKSB7XHJcbiAgICAgICAgdmFsaWRhdGlvbnMucHVzaChuZXcgUGF0dGVyblZhbGlkYXRpb24oaXRlbS5wYXR0ZXJuKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoaXRlbS50eXBlID09PSBKc29uUHJvcFR5cGVzLk51bWJlciB8fCBpdGVtLnR5cGUgPT09IEpzb25Qcm9wVHlwZXMuQW55KSB7XHJcbiAgICAgICAgaWYgKGl0ZW0ubWluSW5jbHVzaXZlICE9PSB1bmRlZmluZWQgfHwgaXRlbS5tYXhJbmNsdXNpdmUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0aW9ucy5wdXNoKG5ldyBJbmNsdXNpdmVWYWxpZGF0aW9uKGl0ZW0ubWluSW5jbHVzaXZlLCBpdGVtLm1heEluY2x1c2l2ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbS5taW5FeGNsdXNpdmUgIT09IHVuZGVmaW5lZCB8fCBpdGVtLm1heEV4Y2x1c2l2ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2gobmV3IEV4Y2x1c2l2ZVZhbGlkYXRpb24oaXRlbS5taW5FeGNsdXNpdmUsIGl0ZW0ubWF4RXhjbHVzaXZlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtLmVudW1lcmF0aW9uICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbnMucHVzaChuZXcgRW51bWVyYXRpb25WYWxpZGF0aW9uKGl0ZW0uZW51bWVyYXRpb24pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoaXRlbS50eXBlID09PSBKc29uUHJvcFR5cGVzLlN0cmluZyB8fCBpdGVtLnJlcGVhdGVkIHx8IGl0ZW0udHlwZSA9PT0gSnNvblByb3BUeXBlcy5BbnkpIHtcclxuICAgICAgICBpZiAoaXRlbS5sZW5ndGggIT09IHVuZGVmaW5lZCB8fCBpdGVtLm1pbkxlbmd0aCAhPT0gdW5kZWZpbmVkIHx8IGl0ZW0ubWF4TGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdmFsaWRhdGlvbnMucHVzaChuZXcgTGVuZ3RoVmFsaWRhdGlvbihpdGVtLmxlbmd0aCwgaXRlbS5taW5MZW5ndGgsIGl0ZW0ubWF4TGVuZ3RoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbGlkYXRpb25zO1xyXG59XHJcbmNvbnN0IEpzb25Qcm9wID0gKG9wdGlvbnMgPSB7fSkgPT4gKHRhcmdldCwgcHJvcGVydHlLZXkpID0+IHtcclxuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGBDYW5ub3Qgc2V0IHR5cGUgZm9yICR7cHJvcGVydHlLZXl9IHByb3BlcnR5IG9mICR7dGFyZ2V0LmNvbnN0cnVjdG9yLm5hbWV9IHNjaGVtYWA7XHJcbiAgICBsZXQgc2NoZW1hO1xyXG4gICAgaWYgKCFzY2hlbWFTdG9yYWdlLmhhcyh0YXJnZXQuY29uc3RydWN0b3IpKSB7XHJcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5jcmVhdGUodGFyZ2V0LmNvbnN0cnVjdG9yKTtcclxuICAgICAgICBzY2hlbWFTdG9yYWdlLnNldCh0YXJnZXQuY29uc3RydWN0b3IsIHNjaGVtYSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBzY2hlbWEgPSBzY2hlbWFTdG9yYWdlLmdldCh0YXJnZXQuY29uc3RydWN0b3IpO1xyXG4gICAgICAgIGlmIChzY2hlbWEudGFyZ2V0ICE9PSB0YXJnZXQuY29uc3RydWN0b3IpIHtcclxuICAgICAgICAgICAgc2NoZW1hID0gc2NoZW1hU3RvcmFnZS5jcmVhdGUodGFyZ2V0LmNvbnN0cnVjdG9yKTtcclxuICAgICAgICAgICAgc2NoZW1hU3RvcmFnZS5zZXQodGFyZ2V0LmNvbnN0cnVjdG9yLCBzY2hlbWEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGRlZmF1bHRTY2hlbWEgPSB7XHJcbiAgICAgICAgdHlwZTogSnNvblByb3BUeXBlcy5BbnksXHJcbiAgICAgICAgdmFsaWRhdGlvbnM6IFtdLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IGNvcHlPcHRpb25zID0gT2JqZWN0LmFzc2lnbihkZWZhdWx0U2NoZW1hLCBvcHRpb25zKTtcclxuICAgIGNvcHlPcHRpb25zLnZhbGlkYXRpb25zID0gZ2V0VmFsaWRhdGlvbnMoY29weU9wdGlvbnMpO1xyXG4gICAgaWYgKHR5cGVvZiBjb3B5T3B0aW9ucy50eXBlICE9PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgaWYgKCFzY2hlbWFTdG9yYWdlLmhhcyhjb3B5T3B0aW9ucy50eXBlKSAmJiAhaXNDb252ZXJ0aWJsZShjb3B5T3B0aW9ucy50eXBlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZXJyb3JNZXNzYWdlfS4gQXNzaWduaW5nIHR5cGUgZG9lc24ndCBoYXZlIHNjaGVtYS5gKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgc2NoZW1hTmFtZXM7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLnNjaGVtYSkpIHtcclxuICAgICAgICBzY2hlbWFOYW1lcyA9IG9wdGlvbnMuc2NoZW1hO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgc2NoZW1hTmFtZXMgPSBbb3B0aW9ucy5zY2hlbWEgfHwgREVGQVVMVF9TQ0hFTUFdO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCBzY2hlbWFOYW1lIG9mIHNjaGVtYU5hbWVzKSB7XHJcbiAgICAgICAgaWYgKCFzY2hlbWEubmFtZXNbc2NoZW1hTmFtZV0pIHtcclxuICAgICAgICAgICAgc2NoZW1hLm5hbWVzW3NjaGVtYU5hbWVdID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG5hbWVkU2NoZW1hID0gc2NoZW1hLm5hbWVzW3NjaGVtYU5hbWVdO1xyXG4gICAgICAgIG5hbWVkU2NoZW1hW3Byb3BlcnR5S2V5XSA9IGNvcHlPcHRpb25zO1xyXG4gICAgfVxyXG59O1xuXG5leHBvcnQgeyBKc29uRXJyb3IsIEpzb25QYXJzZXIsIEpzb25Qcm9wLCBKc29uUHJvcFR5cGVzLCBKc29uU2VyaWFsaXplciwgS2V5RXJyb3IsIFBhcnNlckVycm9yLCBTZXJpYWxpemVyRXJyb3IsIFRyYW5zZm9ybUVycm9yLCBWYWxpZGF0aW9uRXJyb3IgfTtcbiIsICIvKiFcbiBDb3B5cmlnaHQgKGMpIFBlY3VsaWFyIFZlbnR1cmVzLCBMTENcbiovXG5cbmltcG9ydCB7IENvbnZlcnQsIEJ1ZmZlclNvdXJjZUNvbnZlcnRlciwgY29tYmluZSB9IGZyb20gJ3B2dHN1dGlscyc7XG5leHBvcnQgeyBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIgfSBmcm9tICdwdnRzdXRpbHMnO1xuaW1wb3J0IHsgQXNuUHJvcCwgQXNuUHJvcFR5cGVzLCBBc25UeXBlLCBBc25UeXBlVHlwZXMsIEFzbkludGVnZXJDb252ZXJ0ZXIsIEFzblNlcmlhbGl6ZXIsIEFzbkNvbnZlcnQgfSBmcm9tICdAcGVjdWxpYXIvYXNuMS1zY2hlbWEnO1xuaW1wb3J0IHsgX19kZWNvcmF0ZSB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IEpzb25Qcm9wLCBKc29uUHJvcFR5cGVzIH0gZnJvbSAnQHBlY3VsaWFyL2pzb24tc2NoZW1hJztcbmltcG9ydCAqIGFzIGFzbjEgZnJvbSAnYXNuMWpzJztcblxuY2xhc3MgQ3J5cHRvRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG59XG5cbmNsYXNzIEFsZ29yaXRobUVycm9yIGV4dGVuZHMgQ3J5cHRvRXJyb3Ige1xufVxuXG5jbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yIGV4dGVuZHMgQ3J5cHRvRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1ldGhvZE5hbWUpIHtcbiAgICAgICAgc3VwZXIoYFVuc3VwcG9ydGVkIG9wZXJhdGlvbjogJHttZXRob2ROYW1lID8gYCR7bWV0aG9kTmFtZX1gIDogXCJcIn1gKTtcbiAgICB9XG59XG5cbmNsYXNzIE9wZXJhdGlvbkVycm9yIGV4dGVuZHMgQ3J5cHRvRXJyb3Ige1xufVxuXG5jbGFzcyBSZXF1aXJlZFByb3BlcnR5RXJyb3IgZXh0ZW5kcyBDcnlwdG9FcnJvciB7XG4gICAgY29uc3RydWN0b3IocHJvcE5hbWUpIHtcbiAgICAgICAgc3VwZXIoYCR7cHJvcE5hbWV9OiBNaXNzaW5nIHJlcXVpcmVkIHByb3BlcnR5YCk7XG4gICAgfVxufVxuXG5jbGFzcyBQZW1Db252ZXJ0ZXIge1xuICAgIHN0YXRpYyB0b0FycmF5QnVmZmVyKHBlbSkge1xuICAgICAgICBjb25zdCBiYXNlNjQgPSBwZW1cbiAgICAgICAgICAgIC5yZXBsYWNlKC8tezV9KEJFR0lOfEVORCkgLiotezV9L2csIFwiXCIpXG4gICAgICAgICAgICAucmVwbGFjZShcIlxcclwiLCBcIlwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoXCJcXG5cIiwgXCJcIik7XG4gICAgICAgIHJldHVybiBDb252ZXJ0LkZyb21CYXNlNjQoYmFzZTY0KTtcbiAgICB9XG4gICAgc3RhdGljIHRvVWludDhBcnJheShwZW0pIHtcbiAgICAgICAgY29uc3QgYnl0ZXMgPSB0aGlzLnRvQXJyYXlCdWZmZXIocGVtKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ5dGVzKTtcbiAgICB9XG4gICAgc3RhdGljIGZyb21CdWZmZXJTb3VyY2UoYnVmZmVyLCB0YWcpIHtcbiAgICAgICAgY29uc3QgYmFzZTY0ID0gQ29udmVydC5Ub0Jhc2U2NChidWZmZXIpO1xuICAgICAgICBsZXQgc2xpY2VkO1xuICAgICAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAgICAgY29uc3Qgcm93cyA9IFtdO1xuICAgICAgICB3aGlsZSAob2Zmc2V0IDwgYmFzZTY0Lmxlbmd0aCkge1xuICAgICAgICAgICAgc2xpY2VkID0gYmFzZTY0LnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgNjQpO1xuICAgICAgICAgICAgaWYgKHNsaWNlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByb3dzLnB1c2goc2xpY2VkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2Zmc2V0ICs9IDY0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwcGVyQ2FzZVRhZyA9IHRhZy50b1VwcGVyQ2FzZSgpO1xuICAgICAgICByZXR1cm4gYC0tLS0tQkVHSU4gJHt1cHBlckNhc2VUYWd9LS0tLS1cXG4ke3Jvd3Muam9pbihcIlxcblwiKX1cXG4tLS0tLUVORCAke3VwcGVyQ2FzZVRhZ30tLS0tLWA7XG4gICAgfVxuICAgIHN0YXRpYyBpc1BFTShkYXRhKSB7XG4gICAgICAgIHJldHVybiAvLS0tLS1CRUdJTiAuKy0tLS0tW0EtWmEtejAtOSsvKz1cXHNcXG5dKy0tLS0tRU5EIC4rLS0tLS0vaS50ZXN0KGRhdGEpO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0VGFnTmFtZShwZW0pIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzUEVNKHBlbSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJhZCBwYXJhbWV0ZXIuIEluY29taW5nIGRhdGEgaXMgbm90IHJpZ2h0IFBFTVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSAvLS0tLS1CRUdJTiAoLispLS0tLS0vLmV4ZWMocGVtKTtcbiAgICAgICAgaWYgKCFyZXMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgdGFnIGZyb20gUEVNXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNbMV07XG4gICAgfVxuICAgIHN0YXRpYyBoYXNUYWdOYW1lKHBlbSwgdGFnTmFtZSkge1xuICAgICAgICBjb25zdCB0YWcgPSB0aGlzLmdldFRhZ05hbWUocGVtKTtcbiAgICAgICAgcmV0dXJuIHRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gdGFnLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIHN0YXRpYyBpc0NlcnRpZmljYXRlKHBlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNUYWdOYW1lKHBlbSwgXCJjZXJ0aWZpY2F0ZVwiKTtcbiAgICB9XG4gICAgc3RhdGljIGlzQ2VydGlmaWNhdGVSZXF1ZXN0KHBlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNUYWdOYW1lKHBlbSwgXCJjZXJ0aWZpY2F0ZSByZXF1ZXN0XCIpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNDUkwocGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc1RhZ05hbWUocGVtLCBcIng1MDkgY3JsXCIpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNQdWJsaWNLZXkocGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc1RhZ05hbWUocGVtLCBcInB1YmxpYyBrZXlcIik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc0pXSyhkYXRhKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiICYmIFwia3R5XCIgaW4gZGF0YTtcbn1cblxuY2xhc3MgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGFzeW5jIGRpZ2VzdCguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tEaWdlc3QuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uRGlnZXN0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja0RpZ2VzdChhbGdvcml0aG0sIF9kYXRhKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbGdvcml0aG1OYW1lKGFsZ29yaXRobSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGlnZXN0KF9hbGdvcml0aG0sIF9kYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiZGlnZXN0XCIpO1xuICAgIH1cbiAgICBhc3luYyBnZW5lcmF0ZUtleSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tHZW5lcmF0ZUtleS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25HZW5lcmF0ZUtleS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tHZW5lcmF0ZUtleShhbGdvcml0aG0sIF9leHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5fYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKTtcbiAgICAgICAgaWYgKCEoa2V5VXNhZ2VzICYmIGtleVVzYWdlcy5sZW5ndGgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBVc2FnZXMgY2Fubm90IGJlIGVtcHR5IHdoZW4gY3JlYXRpbmcgYSBrZXkuYCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFsbG93ZWRVc2FnZXM7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMudXNhZ2VzKSkge1xuICAgICAgICAgICAgYWxsb3dlZFVzYWdlcyA9IHRoaXMudXNhZ2VzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYWxsb3dlZFVzYWdlcyA9IHRoaXMudXNhZ2VzLnByaXZhdGVLZXkuY29uY2F0KHRoaXMudXNhZ2VzLnB1YmxpY0tleSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja0tleVVzYWdlcyhrZXlVc2FnZXMsIGFsbG93ZWRVc2FnZXMpO1xuICAgIH1cbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKF9hbGdvcml0aG0pIHtcbiAgICB9XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShfYWxnb3JpdGhtLCBfZXh0cmFjdGFibGUsIF9rZXlVc2FnZXMsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiZ2VuZXJhdGVLZXlcIik7XG4gICAgfVxuICAgIGFzeW5jIHNpZ24oLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrU2lnbi5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25TaWduLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja1NpZ24oYWxnb3JpdGhtLCBrZXksIF9kYXRhLCAuLi5fYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5LCBcInNpZ25cIik7XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihfYWxnb3JpdGhtLCBfa2V5LCBfZGF0YSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJzaWduXCIpO1xuICAgIH1cbiAgICBhc3luYyB2ZXJpZnkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrVmVyaWZ5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vblZlcmlmeS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tWZXJpZnkoYWxnb3JpdGhtLCBrZXksIF9zaWduYXR1cmUsIF9kYXRhLCAuLi5fYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5LCBcInZlcmlmeVwiKTtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoX2FsZ29yaXRobSwgX2tleSwgX3NpZ25hdHVyZSwgX2RhdGEsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwidmVyaWZ5XCIpO1xuICAgIH1cbiAgICBhc3luYyBlbmNyeXB0KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0VuY3J5cHQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uRW5jcnlwdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tFbmNyeXB0KGFsZ29yaXRobSwga2V5LCBfZGF0YSwgb3B0aW9ucyA9IHt9LCAuLi5fYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtTmFtZShhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSk7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5LCBvcHRpb25zLmtleVVzYWdlID8gXCJlbmNyeXB0XCIgOiB2b2lkIDApO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoX2FsZ29yaXRobSwgX2tleSwgX2RhdGEsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkVycm9yKFwiZW5jcnlwdFwiKTtcbiAgICB9XG4gICAgYXN5bmMgZGVjcnlwdCguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tEZWNyeXB0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkRlY3J5cHQuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfVxuICAgIGNoZWNrRGVjcnlwdChhbGdvcml0aG0sIGtleSwgX2RhdGEsIG9wdGlvbnMgPSB7fSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSwgb3B0aW9ucy5rZXlVc2FnZSA/IFwiZGVjcnlwdFwiIDogdm9pZCAwKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KF9hbGdvcml0aG0sIF9rZXksIF9kYXRhLCAuLi5fYXJncykge1xuICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvcihcImRlY3J5cHRcIik7XG4gICAgfVxuICAgIGFzeW5jIGRlcml2ZUJpdHMoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrRGVyaXZlQml0cy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub25EZXJpdmVCaXRzLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja0Rlcml2ZUJpdHMoYWxnb3JpdGhtLCBiYXNlS2V5LCBsZW5ndGgsIG9wdGlvbnMgPSB7fSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGJhc2VLZXksIG9wdGlvbnMua2V5VXNhZ2UgPyBcImRlcml2ZUJpdHNcIiA6IHZvaWQgMCk7XG4gICAgICAgIGlmIChsZW5ndGggJSA4ICE9PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uRXJyb3IoXCJsZW5ndGg6IElzIG5vdCBtdWx0aXBsZSBvZiA4XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhfYWxnb3JpdGhtLCBfYmFzZUtleSwgX2xlbmd0aCwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJkZXJpdmVCaXRzXCIpO1xuICAgIH1cbiAgICBhc3luYyBleHBvcnRLZXkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrRXhwb3J0S2V5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5vbkV4cG9ydEtleS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgY2hlY2tFeHBvcnRLZXkoZm9ybWF0LCBrZXksIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tLZXlGb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIWtleS5leHRyYWN0YWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENyeXB0b0Vycm9yKFwia2V5OiBJcyBub3QgZXh0cmFjdGFibGVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoX2Zvcm1hdCwgX2tleSwgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJleHBvcnRLZXlcIik7XG4gICAgfVxuICAgIGFzeW5jIGltcG9ydEtleSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tJbXBvcnRLZXkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLm9uSW1wb3J0S2V5LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja0ltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgX2V4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLl9hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tLZXlGb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgdGhpcy5jaGVja0tleURhdGEoZm9ybWF0LCBrZXlEYXRhKTtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoYWxnb3JpdGhtKTtcbiAgICAgICAgdGhpcy5jaGVja0ltcG9ydFBhcmFtcyhhbGdvcml0aG0pO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnVzYWdlcykpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tLZXlVc2FnZXMoa2V5VXNhZ2VzLCB0aGlzLnVzYWdlcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoX2Zvcm1hdCwgX2tleURhdGEsIF9hbGdvcml0aG0sIF9leHRyYWN0YWJsZSwgX2tleVVzYWdlcywgLi4uX2FyZ3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXJyb3IoXCJpbXBvcnRLZXlcIik7XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtTmFtZShhbGdvcml0aG0pIHtcbiAgICAgICAgaWYgKGFsZ29yaXRobS5uYW1lLnRvTG93ZXJDYXNlKCkgIT09IHRoaXMubmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQWxnb3JpdGhtRXJyb3IoXCJVbnJlY29nbml6ZWQgbmFtZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhfYWxnb3JpdGhtKSB7XG4gICAgfVxuICAgIGNoZWNrRGVyaXZlZEtleVBhcmFtcyhfYWxnb3JpdGhtKSB7XG4gICAgfVxuICAgIGNoZWNrS2V5VXNhZ2VzKHVzYWdlcywgYWxsb3dlZCkge1xuICAgICAgICBmb3IgKGNvbnN0IHVzYWdlIG9mIHVzYWdlcykge1xuICAgICAgICAgICAgaWYgKGFsbG93ZWQuaW5kZXhPZih1c2FnZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjcmVhdGUgYSBrZXkgdXNpbmcgdGhlIHNwZWNpZmllZCBrZXkgdXNhZ2VzXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsZ29yaXRobU5hbWUoa2V5LmFsZ29yaXRobSk7XG4gICAgICAgIGlmIChrZXlVc2FnZSAmJiBrZXkudXNhZ2VzLmluZGV4T2Yoa2V5VXNhZ2UpID09PSAtMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENyeXB0b0Vycm9yKGBrZXkgZG9lcyBub3QgbWF0Y2ggdGhhdCBvZiBvcGVyYXRpb25gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja1JlcXVpcmVkUHJvcGVydHkoZGF0YSwgcHJvcE5hbWUpIHtcbiAgICAgICAgaWYgKCEocHJvcE5hbWUgaW4gZGF0YSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSZXF1aXJlZFByb3BlcnR5RXJyb3IocHJvcE5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrSGFzaEFsZ29yaXRobShhbGdvcml0aG0sIGhhc2hBbGdvcml0aG1zKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBoYXNoQWxnb3JpdGhtcykge1xuICAgICAgICAgICAgaWYgKGl0ZW0udG9Mb3dlckNhc2UoKSA9PT0gYWxnb3JpdGhtLm5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uRXJyb3IoYGhhc2g6IE11c3QgYmUgb25lIG9mICR7aGFzaEFsZ29yaXRobXMuam9pbihcIiwgXCIpfWApO1xuICAgIH1cbiAgICBjaGVja0ltcG9ydFBhcmFtcyhfYWxnb3JpdGhtKSB7XG4gICAgfVxuICAgIGNoZWNrS2V5Rm9ybWF0KGZvcm1hdCkge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOlxuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiZm9ybWF0OiBJcyBpbnZhbGlkIHZhbHVlLiBNdXN0IGJlICdqd2snLCAncmF3JywgJ3Nwa2knLCBvciAncGtjczgnXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrS2V5RGF0YShmb3JtYXQsIGtleURhdGEpIHtcbiAgICAgICAgaWYgKCFrZXlEYXRhKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5RGF0YTogQ2Fubm90IGJlIGVtcHR5IG9uIGVtcHR5IG9uIGtleSBpbXBvcnRpbmdcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJqd2tcIikge1xuICAgICAgICAgICAgaWYgKCFpc0pXSyhrZXlEYXRhKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXlEYXRhOiBJcyBub3QgSnNvbldlYlRva2VuXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2Uoa2V5RGF0YSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXlEYXRhOiBJcyBub3QgQXJyYXlCdWZmZXJWaWV3IG9yIEFycmF5QnVmZmVyXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByZXBhcmVEYXRhKGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgQWVzUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImxlbmd0aFwiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhbGdvcml0aG0ubGVuZ3RoICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibGVuZ3RoOiBJcyBub3Qgb2YgdHlwZSBOdW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDEyODpcbiAgICAgICAgICAgIGNhc2UgMTkyOlxuICAgICAgICAgICAgY2FzZSAyNTY6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJsZW5ndGg6IE11c3QgYmUgMTI4LCAxOTIsIG9yIDI1NlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0Rlcml2ZWRLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pO1xuICAgIH1cbn1cblxuY2xhc3MgQWVzQ2JjUHJvdmlkZXIgZXh0ZW5kcyBBZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQUVTLUNCQ1wiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCIsIFwid3JhcEtleVwiLCBcInVud3JhcEtleVwiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJpdlwiKTtcbiAgICAgICAgaWYgKCEoYWxnb3JpdGhtLml2IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGFsZ29yaXRobS5pdikpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXY6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5pdi5ieXRlTGVuZ3RoICE9PSAxNikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIml2OiBNdXN0IGhhdmUgbGVuZ3RoIDE2IGJ5dGVzXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNDbWFjUHJvdmlkZXIgZXh0ZW5kcyBBZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiQUVTLUNNQUNcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJzaWduXCIsIFwidmVyaWZ5XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImxlbmd0aFwiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhbGdvcml0aG0ubGVuZ3RoICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibGVuZ3RoOiBJcyBub3QgYSBOdW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uRXJyb3IoXCJsZW5ndGg6IE11c3QgYmUgbW9yZSB0aGFuIDBcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFlc0N0clByb3ZpZGVyIGV4dGVuZHMgQWVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkFFUy1DVFJcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJlbmNyeXB0XCIsIFwiZGVjcnlwdFwiLCBcIndyYXBLZXlcIiwgXCJ1bndyYXBLZXlcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiY291bnRlclwiKTtcbiAgICAgICAgaWYgKCEoYWxnb3JpdGhtLmNvdW50ZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoYWxnb3JpdGhtLmNvdW50ZXIpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImNvdW50ZXI6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5jb3VudGVyLmJ5dGVMZW5ndGggIT09IDE2KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiaXY6IE11c3QgaGF2ZSBsZW5ndGggMTYgYnl0ZXNcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImxlbmd0aFwiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhbGdvcml0aG0ubGVuZ3RoICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibGVuZ3RoOiBJcyBub3QgYSBOdW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uRXJyb3IoXCJsZW5ndGg6IE11c3QgYmUgbW9yZSB0aGFuIDBcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFlc0VjYlByb3ZpZGVyIGV4dGVuZHMgQWVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkFFUy1FQ0JcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJlbmNyeXB0XCIsIFwiZGVjcnlwdFwiLCBcIndyYXBLZXlcIiwgXCJ1bndyYXBLZXlcIl07XG4gICAgfVxufVxuXG5jbGFzcyBBZXNHY21Qcm92aWRlciBleHRlbmRzIEFlc1Byb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJBRVMtR0NNXCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIiwgXCJ3cmFwS2V5XCIsIFwidW53cmFwS2V5XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaXZcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5pdiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhhbGdvcml0aG0uaXYpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIml2OiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0uaXYuYnl0ZUxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihcIml2OiBNdXN0IGhhdmUgbGVuZ3RoIG1vcmUgdGhhbiAwIGFuZCBsZXNzIHRoYW4gMl42NCAtIDFcIik7XG4gICAgICAgIH1cbiAgICAgICAgKF9hID0gYWxnb3JpdGhtLnRhZ0xlbmd0aCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKGFsZ29yaXRobS50YWdMZW5ndGggPSAxMjgpO1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS50YWdMZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMzI6XG4gICAgICAgICAgICBjYXNlIDY0OlxuICAgICAgICAgICAgY2FzZSA5NjpcbiAgICAgICAgICAgIGNhc2UgMTA0OlxuICAgICAgICAgICAgY2FzZSAxMTI6XG4gICAgICAgICAgICBjYXNlIDEyMDpcbiAgICAgICAgICAgIGNhc2UgMTI4OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uRXJyb3IoXCJ0YWdMZW5ndGg6IE11c3QgYmUgb25lIG9mIDMyLCA2NCwgOTYsIDEwNCwgMTEyLCAxMjAgb3IgMTI4XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBBZXNLd1Byb3ZpZGVyIGV4dGVuZHMgQWVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkFFUy1LV1wiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcIndyYXBLZXlcIiwgXCJ1bndyYXBLZXlcIl07XG4gICAgfVxufVxuXG5jbGFzcyBEZXNQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXCJlbmNyeXB0XCIsIFwiZGVjcnlwdFwiLCBcIndyYXBLZXlcIiwgXCJ1bndyYXBLZXlcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICBpZiAodGhpcy5pdlNpemUpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJpdlwiKTtcbiAgICAgICAgICAgIGlmICghKGFsZ29yaXRobS5pdiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyhhbGdvcml0aG0uaXYpKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpdjogSXMgbm90IG9mIHR5cGUgJyhBcnJheUJ1ZmZlciBvciBBcnJheUJ1ZmZlclZpZXcpJ1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbGdvcml0aG0uaXYuYnl0ZUxlbmd0aCAhPT0gdGhpcy5pdlNpemUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBpdjogTXVzdCBoYXZlIGxlbmd0aCAke3RoaXMuaXZTaXplfSBieXRlc2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJsZW5ndGhcIik7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLmxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbm90IG9mIHR5cGUgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0ubGVuZ3RoICE9PSB0aGlzLmtleVNpemVCaXRzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uRXJyb3IoYGFsZ29yaXRobS5sZW5ndGg6IE11c3QgYmUgJHt0aGlzLmtleVNpemVCaXRzfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrRGVyaXZlZEtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSk7XG4gICAgfVxufVxuXG5jbGFzcyBSc2FQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5oYXNoQWxnb3JpdGhtcyA9IFtcIlNIQS0xXCIsIFwiU0hBLTI1NlwiLCBcIlNIQS0zODRcIiwgXCJTSEEtNTEyXCJdO1xuICAgIH1cbiAgICBjaGVja0dlbmVyYXRlS2V5UGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwicHVibGljRXhwb25lbnRcIik7XG4gICAgICAgIGlmICghKGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCAmJiBhbGdvcml0aG0ucHVibGljRXhwb25lbnQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInB1YmxpY0V4cG9uZW50OiBNaXNzaW5nIG9yIG5vdCBhIFVpbnQ4QXJyYXlcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHVibGljRXhwb25lbnQgPSBDb252ZXJ0LlRvQmFzZTY0KGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCk7XG4gICAgICAgIGlmICghKHB1YmxpY0V4cG9uZW50ID09PSBcIkF3PT1cIiB8fCBwdWJsaWNFeHBvbmVudCA9PT0gXCJBUUFCXCIpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicHVibGljRXhwb25lbnQ6IE11c3QgYmUgWzNdIG9yIFsxLDAsMV1cIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcIm1vZHVsdXNMZW5ndGhcIik7XG4gICAgICAgIGlmIChhbGdvcml0aG0ubW9kdWx1c0xlbmd0aCAlIDhcbiAgICAgICAgICAgIHx8IGFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoIDwgMjU2XG4gICAgICAgICAgICB8fCBhbGdvcml0aG0ubW9kdWx1c0xlbmd0aCA+IDE2Mzg0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIG1vZHVsdXMgbGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4IGJpdHMgYW5kID49IDI1NiBhbmQgPD0gMTYzODRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tJbXBvcnRQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJoYXNoXCIpO1xuICAgICAgICB0aGlzLmNoZWNrSGFzaEFsZ29yaXRobShhbGdvcml0aG0uaGFzaCwgdGhpcy5oYXNoQWxnb3JpdGhtcyk7XG4gICAgfVxufVxuXG5jbGFzcyBSc2FTc2FQcm92aWRlciBleHRlbmRzIFJzYVByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJSU0FTU0EtUEtDUzEtdjFfNVwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcInNpZ25cIl0sXG4gICAgICAgICAgICBwdWJsaWNLZXk6IFtcInZlcmlmeVwiXSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmNsYXNzIFJzYVBzc1Byb3ZpZGVyIGV4dGVuZHMgUnNhUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlJTQS1QU1NcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJzaWduXCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXCJ2ZXJpZnlcIl0sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwic2FsdExlbmd0aFwiKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhbGdvcml0aG0uc2FsdExlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInNhbHRMZW5ndGg6IElzIG5vdCBhIE51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLnNhbHRMZW5ndGggPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNhbHRMZW5ndGg6IE11c3QgYmUgcG9zaXRpdmUgbnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBSc2FPYWVwUHJvdmlkZXIgZXh0ZW5kcyBSc2FQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiUlNBLU9BRVBcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJkZWNyeXB0XCIsIFwidW53cmFwS2V5XCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXCJlbmNyeXB0XCIsIFwid3JhcEtleVwiXSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIGlmIChhbGdvcml0aG0ubGFiZWxcbiAgICAgICAgICAgICYmICEoYWxnb3JpdGhtLmxhYmVsIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgQXJyYXlCdWZmZXIuaXNWaWV3KGFsZ29yaXRobS5sYWJlbCkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibGFiZWw6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEVsbGlwdGljUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY2hlY2tHZW5lcmF0ZUtleVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcIm5hbWVkQ3VydmVcIik7XG4gICAgICAgIHRoaXMuY2hlY2tOYW1lZEN1cnZlKGFsZ29yaXRobS5uYW1lZEN1cnZlKTtcbiAgICB9XG4gICAgY2hlY2tOYW1lZEN1cnZlKG5hbWVkQ3VydmUpIHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMubmFtZWRDdXJ2ZXMpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLnRvTG93ZXJDYXNlKCkgPT09IG5hbWVkQ3VydmUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uRXJyb3IoYG5hbWVkQ3VydmU6IE11c3QgYmUgb25lIG9mICR7dGhpcy5uYW1lZEN1cnZlcy5qb2luKFwiLCBcIil9YCk7XG4gICAgfVxufVxuXG5jbGFzcyBFY2RzYVByb3ZpZGVyIGV4dGVuZHMgRWxsaXB0aWNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiRUNEU0FcIjtcbiAgICAgICAgdGhpcy5oYXNoQWxnb3JpdGhtcyA9IFtcIlNIQS0xXCIsIFwiU0hBLTI1NlwiLCBcIlNIQS0zODRcIiwgXCJTSEEtNTEyXCJdO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcInNpZ25cIl0sXG4gICAgICAgICAgICBwdWJsaWNLZXk6IFtcInZlcmlmeVwiXSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5uYW1lZEN1cnZlcyA9IFtcIlAtMjU2XCIsIFwiUC0zODRcIiwgXCJQLTUyMVwiLCBcIkstMjU2XCJdO1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcImhhc2hcIik7XG4gICAgICAgIHRoaXMuY2hlY2tIYXNoQWxnb3JpdGhtKGFsZ29yaXRobS5oYXNoLCB0aGlzLmhhc2hBbGdvcml0aG1zKTtcbiAgICB9XG59XG5cbmNvbnN0IEtFWV9UWVBFUyA9IFtcInNlY3JldFwiLCBcInByaXZhdGVcIiwgXCJwdWJsaWNcIl07XG5jbGFzcyBDcnlwdG9LZXkge1xuICAgIHN0YXRpYyBjcmVhdGUoYWxnb3JpdGhtLCB0eXBlLCBleHRyYWN0YWJsZSwgdXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyB0aGlzKCk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIGtleS50eXBlID0gdHlwZTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSB1c2FnZXM7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBpc0tleVR5cGUoZGF0YSkge1xuICAgICAgICByZXR1cm4gS0VZX1RZUEVTLmluZGV4T2YoZGF0YSkgIT09IC0xO1xuICAgIH1cbiAgICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgICAgIHJldHVybiBcIkNyeXB0b0tleVwiO1xuICAgIH1cbn1cblxuY2xhc3MgRWNkaFByb3ZpZGVyIGV4dGVuZHMgRWxsaXB0aWNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiRUNESFwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcImRlcml2ZUJpdHNcIiwgXCJkZXJpdmVLZXlcIl0sXG4gICAgICAgICAgICBwdWJsaWNLZXk6IFtdLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm5hbWVkQ3VydmVzID0gW1wiUC0yNTZcIiwgXCJQLTM4NFwiLCBcIlAtNTIxXCIsIFwiSy0yNTZcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwicHVibGljXCIpO1xuICAgICAgICBpZiAoIShhbGdvcml0aG0ucHVibGljIGluc3RhbmNlb2YgQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInB1YmxpYzogSXMgbm90IGEgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGdvcml0aG0ucHVibGljLnR5cGUgIT09IFwicHVibGljXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPcGVyYXRpb25FcnJvcihcInB1YmxpYzogSXMgbm90IGEgcHVibGljIGtleVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxnb3JpdGhtLnB1YmxpYy5hbGdvcml0aG0ubmFtZSAhPT0gdGhpcy5uYW1lKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT3BlcmF0aW9uRXJyb3IoYHB1YmxpYzogSXMgbm90ICR7dGhpcy5uYW1lfSBrZXlgKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgRWNkaEVzUHJvdmlkZXIgZXh0ZW5kcyBFY2RoUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkVDREgtRVNcIjtcbiAgICAgICAgdGhpcy5uYW1lZEN1cnZlcyA9IFtcIlgyNTUxOVwiLCBcIlg0NDhcIl07XG4gICAgfVxufVxuXG5jbGFzcyBFZERzYVByb3ZpZGVyIGV4dGVuZHMgRWxsaXB0aWNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiRWREU0FcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBbXCJzaWduXCJdLFxuICAgICAgICAgICAgcHVibGljS2V5OiBbXCJ2ZXJpZnlcIl0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubmFtZWRDdXJ2ZXMgPSBbXCJFZDI1NTE5XCIsIFwiRWQ0NDhcIl07XG4gICAgfVxufVxuXG5sZXQgT2JqZWN0SWRlbnRpZmllciA9IGNsYXNzIE9iamVjdElkZW50aWZpZXIge1xuICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuT2JqZWN0SWRlbnRpZmllciB9KVxuXSwgT2JqZWN0SWRlbnRpZmllci5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbk9iamVjdElkZW50aWZpZXIgPSBfX2RlY29yYXRlKFtcbiAgICBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLkNob2ljZSB9KVxuXSwgT2JqZWN0SWRlbnRpZmllcik7XG5cbmNsYXNzIEFsZ29yaXRobUlkZW50aWZpZXIge1xuICAgIGNvbnN0cnVjdG9yKHBhcmFtcykge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIHBhcmFtcyk7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7XG4gICAgICAgIHR5cGU6IEFzblByb3BUeXBlcy5PYmplY3RJZGVudGlmaWVyLFxuICAgIH0pXG5dLCBBbGdvcml0aG1JZGVudGlmaWVyLnByb3RvdHlwZSwgXCJhbGdvcml0aG1cIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3Aoe1xuICAgICAgICB0eXBlOiBBc25Qcm9wVHlwZXMuQW55LFxuICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICB9KVxuXSwgQWxnb3JpdGhtSWRlbnRpZmllci5wcm90b3R5cGUsIFwicGFyYW1ldGVyc1wiLCB2b2lkIDApO1xuXG5jbGFzcyBQcml2YXRlS2V5SW5mbyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IDA7XG4gICAgICAgIHRoaXMucHJpdmF0ZUtleUFsZ29yaXRobSA9IG5ldyBBbGdvcml0aG1JZGVudGlmaWVyKCk7XG4gICAgICAgIHRoaXMucHJpdmF0ZUtleSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIgfSlcbl0sIFByaXZhdGVLZXlJbmZvLnByb3RvdHlwZSwgXCJ2ZXJzaW9uXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQWxnb3JpdGhtSWRlbnRpZmllciB9KVxuXSwgUHJpdmF0ZUtleUluZm8ucHJvdG90eXBlLCBcInByaXZhdGVLZXlBbGdvcml0aG1cIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuT2N0ZXRTdHJpbmcgfSlcbl0sIFByaXZhdGVLZXlJbmZvLnByb3RvdHlwZSwgXCJwcml2YXRlS2V5XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkFueSwgb3B0aW9uYWw6IHRydWUgfSlcbl0sIFByaXZhdGVLZXlJbmZvLnByb3RvdHlwZSwgXCJhdHRyaWJ1dGVzXCIsIHZvaWQgMCk7XG5cbmNsYXNzIFB1YmxpY0tleUluZm8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnB1YmxpY0tleUFsZ29yaXRobSA9IG5ldyBBbGdvcml0aG1JZGVudGlmaWVyKCk7XG4gICAgICAgIHRoaXMucHVibGljS2V5ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBbGdvcml0aG1JZGVudGlmaWVyIH0pXG5dLCBQdWJsaWNLZXlJbmZvLnByb3RvdHlwZSwgXCJwdWJsaWNLZXlBbGdvcml0aG1cIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuQml0U3RyaW5nIH0pXG5dLCBQdWJsaWNLZXlJbmZvLnByb3RvdHlwZSwgXCJwdWJsaWNLZXlcIiwgdm9pZCAwKTtcblxuY29uc3QgSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyID0ge1xuICAgIGZyb21KU09OOiAodmFsdWUpID0+IENvbnZlcnQuRnJvbUJhc2U2NFVybCh2YWx1ZSksXG4gICAgdG9KU09OOiAodmFsdWUpID0+IENvbnZlcnQuVG9CYXNlNjRVcmwobmV3IFVpbnQ4QXJyYXkodmFsdWUpKSxcbn07XG5cbmNvbnN0IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciA9IHtcbiAgICBmcm9tQVNOOiAodmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWVIZXggPSB2YWx1ZS52YWx1ZUJsb2NrLnZhbHVlSGV4O1xuICAgICAgICByZXR1cm4gIShuZXcgVWludDhBcnJheSh2YWx1ZUhleClbMF0pXG4gICAgICAgICAgICA/IHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXguc2xpY2UoMSlcbiAgICAgICAgICAgIDogdmFsdWUudmFsdWVCbG9jay52YWx1ZUhleDtcbiAgICB9LFxuICAgIHRvQVNOOiAodmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWVIZXggPSBuZXcgVWludDhBcnJheSh2YWx1ZSlbMF0gPiAxMjdcbiAgICAgICAgICAgID8gY29tYmluZShuZXcgVWludDhBcnJheShbMF0pLmJ1ZmZlciwgdmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlO1xuICAgICAgICByZXR1cm4gbmV3IGFzbjEuSW50ZWdlcih7IHZhbHVlSGV4IH0pO1xuICAgIH0sXG59O1xuXG52YXIgaW5kZXgkMyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlcixcbiAgSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXJcbn0pO1xuXG5jbGFzcyBSc2FQcml2YXRlS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy52ZXJzaW9uID0gMDtcbiAgICAgICAgdGhpcy5tb2R1bHVzID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLnB1YmxpY0V4cG9uZW50ID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLnByaXZhdGVFeHBvbmVudCA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5wcmltZTEgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMucHJpbWUyID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLmV4cG9uZW50MSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5leHBvbmVudDIgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIHRoaXMuY29lZmZpY2llbnQgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcInZlcnNpb25cIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcIm5cIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcIm1vZHVsdXNcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImVcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcInB1YmxpY0V4cG9uZW50XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJkXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwcml2YXRlRXhwb25lbnRcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcInBcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVByaXZhdGVLZXkucHJvdG90eXBlLCBcInByaW1lMVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJBcnJheUJ1ZmZlckNvbnZlcnRlciB9KSxcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwicVwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicHJpbWUyXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJkcFwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwiZXhwb25lbnQxXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJkcVwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwiZXhwb25lbnQyXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJxaVwiLCBjb252ZXJ0ZXI6IEpzb25CYXNlNjRVcmxBcnJheUJ1ZmZlckNvbnZlcnRlciB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwiY29lZmZpY2llbnRcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuQW55LCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgUnNhUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwib3RoZXJQcmltZUluZm9zXCIsIHZvaWQgMCk7XG5cbmNsYXNzIFJzYVB1YmxpY0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMubW9kdWx1cyA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgdGhpcy5wdWJsaWNFeHBvbmVudCA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlckFycmF5QnVmZmVyQ29udmVydGVyIH0pLFxuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJuXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBSc2FQdWJsaWNLZXkucHJvdG90eXBlLCBcIm1vZHVsdXNcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSksXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImVcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQXJyYXlCdWZmZXJDb252ZXJ0ZXIgfSlcbl0sIFJzYVB1YmxpY0tleS5wcm90b3R5cGUsIFwicHVibGljRXhwb25lbnRcIiwgdm9pZCAwKTtcblxubGV0IEVjUHVibGljS2V5ID0gY2xhc3MgRWNQdWJsaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgbGV0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkodGhpcy52YWx1ZSk7XG4gICAgICAgIGlmIChieXRlc1swXSAhPT0gMHgwNCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENyeXB0b0Vycm9yKFwiV3JvbmcgRUNQb2ludC4gQ3VycmVudCB2ZXJzaW9uIHN1cHBvcnRzIG9ubHkgVW5jb21wcmVzc2VkICgweDA0KSBwb2ludFwiKTtcbiAgICAgICAgfVxuICAgICAgICBieXRlcyA9IG5ldyBVaW50OEFycmF5KHRoaXMudmFsdWUuc2xpY2UoMSkpO1xuICAgICAgICBjb25zdCBzaXplID0gYnl0ZXMubGVuZ3RoIC8gMjtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gMDtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIHg6IENvbnZlcnQuVG9CYXNlNjRVcmwoYnl0ZXMuYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgc2l6ZSkpLFxuICAgICAgICAgICAgeTogQ29udmVydC5Ub0Jhc2U2NFVybChieXRlcy5idWZmZXIuc2xpY2Uob2Zmc2V0ICsgc2l6ZSwgb2Zmc2V0ICsgc2l6ZSArIHNpemUpKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCEoXCJ4XCIgaW4ganNvbikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIng6IE1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEoXCJ5XCIgaW4ganNvbikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInk6IE1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeCA9IENvbnZlcnQuRnJvbUJhc2U2NFVybChqc29uLngpO1xuICAgICAgICBjb25zdCB5ID0gQ29udmVydC5Gcm9tQmFzZTY0VXJsKGpzb24ueSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29tYmluZShuZXcgVWludDhBcnJheShbMHgwNF0pLmJ1ZmZlciwgeCwgeSk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgVWludDhBcnJheSh2YWx1ZSkuYnVmZmVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59O1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5PY3RldFN0cmluZyB9KVxuXSwgRWNQdWJsaWNLZXkucHJvdG90eXBlLCBcInZhbHVlXCIsIHZvaWQgMCk7XG5FY1B1YmxpY0tleSA9IF9fZGVjb3JhdGUoW1xuICAgIEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuQ2hvaWNlIH0pXG5dLCBFY1B1YmxpY0tleSk7XG5cbmNsYXNzIEVjUHJpdmF0ZUtleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudmVyc2lvbiA9IDE7XG4gICAgICAgIHRoaXMucHJpdmF0ZUtleSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIShcImRcIiBpbiBqc29uKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZDogTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByaXZhdGVLZXkgPSBDb252ZXJ0LkZyb21CYXNlNjRVcmwoanNvbi5kKTtcbiAgICAgICAgaWYgKFwieFwiIGluIGpzb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBFY1B1YmxpY0tleSgpO1xuICAgICAgICAgICAgcHVibGljS2V5LmZyb21KU09OKGpzb24pO1xuICAgICAgICAgICAgY29uc3QgYXNuID0gQXNuU2VyaWFsaXplci50b0FTTihwdWJsaWNLZXkpO1xuICAgICAgICAgICAgaWYgKFwidmFsdWVIZXhcIiBpbiBhc24udmFsdWVCbG9jaykge1xuICAgICAgICAgICAgICAgIHRoaXMucHVibGljS2V5ID0gYXNuLnZhbHVlQmxvY2sudmFsdWVIZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3QgandrID0ge307XG4gICAgICAgIGp3ay5kID0gQ29udmVydC5Ub0Jhc2U2NFVybCh0aGlzLnByaXZhdGVLZXkpO1xuICAgICAgICBpZiAodGhpcy5wdWJsaWNLZXkpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oandrLCBuZXcgRWNQdWJsaWNLZXkodGhpcy5wdWJsaWNLZXkpLnRvSlNPTigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gandrO1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuSW50ZWdlciwgY29udmVydGVyOiBBc25JbnRlZ2VyQ29udmVydGVyIH0pXG5dLCBFY1ByaXZhdGVLZXkucHJvdG90eXBlLCBcInZlcnNpb25cIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuT2N0ZXRTdHJpbmcgfSlcbl0sIEVjUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwicHJpdmF0ZUtleVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IGNvbnRleHQ6IDAsIHR5cGU6IEFzblByb3BUeXBlcy5BbnksIG9wdGlvbmFsOiB0cnVlIH0pXG5dLCBFY1ByaXZhdGVLZXkucHJvdG90eXBlLCBcInBhcmFtZXRlcnNcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyBjb250ZXh0OiAxLCB0eXBlOiBBc25Qcm9wVHlwZXMuQml0U3RyaW5nLCBvcHRpb25hbDogdHJ1ZSB9KVxuXSwgRWNQcml2YXRlS2V5LnByb3RvdHlwZSwgXCJwdWJsaWNLZXlcIiwgdm9pZCAwKTtcblxuY29uc3QgQXNuSW50ZWdlcldpdGhvdXRQYWRkaW5nQ29udmVydGVyID0ge1xuICAgIGZyb21BU046ICh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KHZhbHVlLnZhbHVlQmxvY2sudmFsdWVIZXgpO1xuICAgICAgICByZXR1cm4gKGJ5dGVzWzBdID09PSAwKVxuICAgICAgICAgICAgPyBieXRlcy5idWZmZXIuc2xpY2UoMSlcbiAgICAgICAgICAgIDogYnl0ZXMuYnVmZmVyO1xuICAgIH0sXG4gICAgdG9BU046ICh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KHZhbHVlKTtcbiAgICAgICAgaWYgKGJ5dGVzWzBdID4gMTI3KSB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IG5ldyBVaW50OEFycmF5KGJ5dGVzLmxlbmd0aCArIDEpO1xuICAgICAgICAgICAgbmV3VmFsdWUuc2V0KGJ5dGVzLCAxKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgYXNuMS5JbnRlZ2VyKHsgdmFsdWVIZXg6IG5ld1ZhbHVlLmJ1ZmZlciB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IGFzbjEuSW50ZWdlcih7IHZhbHVlSGV4OiB2YWx1ZSB9KTtcbiAgICB9LFxufTtcblxudmFyIGluZGV4JDIgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgQXNuSW50ZWdlcldpdGhvdXRQYWRkaW5nQ29udmVydGVyOiBBc25JbnRlZ2VyV2l0aG91dFBhZGRpbmdDb252ZXJ0ZXJcbn0pO1xuXG5jbGFzcyBFY1V0aWxzIHtcbiAgICBzdGF0aWMgZGVjb2RlUG9pbnQoZGF0YSwgcG9pbnRTaXplKSB7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGRhdGEpO1xuICAgICAgICBpZiAoKHZpZXcubGVuZ3RoID09PSAwKSB8fCAodmlld1swXSAhPT0gNCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk9ubHkgdW5jb21wcmVzc2VkIHBvaW50IGZvcm1hdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbiA9ICh2aWV3Lmxlbmd0aCAtIDEpIC8gMjtcbiAgICAgICAgaWYgKG4gIT09IChNYXRoLmNlaWwocG9pbnRTaXplIC8gOCkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb2ludCBkb2VzIG5vdCBtYXRjaCBmaWVsZCBzaXplXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHhiID0gdmlldy5zbGljZSgxLCBuICsgMSk7XG4gICAgICAgIGNvbnN0IHliID0gdmlldy5zbGljZShuICsgMSwgbiArIDEgKyBuKTtcbiAgICAgICAgcmV0dXJuIHsgeDogeGIsIHk6IHliIH07XG4gICAgfVxuICAgIHN0YXRpYyBlbmNvZGVQb2ludChwb2ludCwgcG9pbnRTaXplKSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSBNYXRoLmNlaWwocG9pbnRTaXplIC8gOCk7XG4gICAgICAgIGlmIChwb2ludC54LmJ5dGVMZW5ndGggIT09IHNpemUgfHwgcG9pbnQueS5ieXRlTGVuZ3RoICE9PSBzaXplKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJYLFkgY29vcmRpbmF0ZXMgZG9uJ3QgbWF0Y2ggcG9pbnQgc2l6ZSBjcml0ZXJpYVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB4ID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShwb2ludC54KTtcbiAgICAgICAgY29uc3QgeSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkocG9pbnQueSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KHNpemUgKiAyICsgMSk7XG4gICAgICAgIHJlc1swXSA9IDQ7XG4gICAgICAgIHJlcy5zZXQoeCwgMSk7XG4gICAgICAgIHJlcy5zZXQoeSwgc2l6ZSArIDEpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0U2l6ZShwb2ludFNpemUpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbChwb2ludFNpemUgLyA4KTtcbiAgICB9XG4gICAgc3RhdGljIGVuY29kZVNpZ25hdHVyZShzaWduYXR1cmUsIHBvaW50U2l6ZSkge1xuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5nZXRTaXplKHBvaW50U2l6ZSk7XG4gICAgICAgIGNvbnN0IHIgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KHNpZ25hdHVyZS5yKTtcbiAgICAgICAgY29uc3QgcyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoc2lnbmF0dXJlLnMpO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShzaXplICogMik7XG4gICAgICAgIHJlcy5zZXQodGhpcy5wYWRTdGFydChyLCBzaXplKSk7XG4gICAgICAgIHJlcy5zZXQodGhpcy5wYWRTdGFydChzLCBzaXplKSwgc2l6ZSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBkZWNvZGVTaWduYXR1cmUoZGF0YSwgcG9pbnRTaXplKSB7XG4gICAgICAgIGNvbnN0IHNpemUgPSB0aGlzLmdldFNpemUocG9pbnRTaXplKTtcbiAgICAgICAgY29uc3QgdmlldyA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b1VpbnQ4QXJyYXkoZGF0YSk7XG4gICAgICAgIGlmICh2aWV3Lmxlbmd0aCAhPT0gKHNpemUgKiAyKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW5jb3JyZWN0IHNpemUgb2YgdGhlIHNpZ25hdHVyZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByID0gdmlldy5zbGljZSgwLCBzaXplKTtcbiAgICAgICAgY29uc3QgcyA9IHZpZXcuc2xpY2Uoc2l6ZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByOiB0aGlzLnRyaW1TdGFydChyKSxcbiAgICAgICAgICAgIHM6IHRoaXMudHJpbVN0YXJ0KHMpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgdHJpbVN0YXJ0KGRhdGEpIHtcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICB3aGlsZSAoKGkgPCBkYXRhLmxlbmd0aCAtIDEpICYmIChkYXRhW2ldID09PSAwKSkge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YS5zbGljZShpLCBkYXRhLmxlbmd0aCk7XG4gICAgfVxuICAgIHN0YXRpYyBwYWRTdGFydChkYXRhLCBzaXplKSB7XG4gICAgICAgIGlmIChzaXplID09PSBkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoc2l6ZSk7XG4gICAgICAgIHJlcy5zZXQoZGF0YSwgc2l6ZSAtIGRhdGEubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG59XG5cbmNsYXNzIEVjRHNhU2lnbmF0dXJlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yID0gbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICB0aGlzLnMgPSBuZXcgQXJyYXlCdWZmZXIoMCk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tV2ViQ3J5cHRvU2lnbmF0dXJlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHBvaW50U2l6ZSA9IHZhbHVlLmJ5dGVMZW5ndGggLyAyO1xuICAgICAgICBjb25zdCBwb2ludCA9IEVjVXRpbHMuZGVjb2RlU2lnbmF0dXJlKHZhbHVlLCBwb2ludFNpemUgKiA4KTtcbiAgICAgICAgY29uc3QgZWNTaWduYXR1cmUgPSBuZXcgRWNEc2FTaWduYXR1cmUoKTtcbiAgICAgICAgZWNTaWduYXR1cmUuciA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHBvaW50LnIpO1xuICAgICAgICBlY1NpZ25hdHVyZS5zID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIocG9pbnQucyk7XG4gICAgICAgIHJldHVybiBlY1NpZ25hdHVyZTtcbiAgICB9XG4gICAgdG9XZWJDcnlwdG9TaWduYXR1cmUocG9pbnRTaXplKSB7XG4gICAgICAgIGlmICghcG9pbnRTaXplKSB7XG4gICAgICAgICAgICBjb25zdCBtYXhQb2ludExlbmd0aCA9IE1hdGgubWF4KHRoaXMuci5ieXRlTGVuZ3RoLCB0aGlzLnMuYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICBpZiAobWF4UG9pbnRMZW5ndGggPD0gMzIpIHtcbiAgICAgICAgICAgICAgICBwb2ludFNpemUgPSAyNTY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtYXhQb2ludExlbmd0aCA8PSA0OCkge1xuICAgICAgICAgICAgICAgIHBvaW50U2l6ZSA9IDM4NDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBvaW50U2l6ZSA9IDUyMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBFY1V0aWxzLmVuY29kZVNpZ25hdHVyZSh0aGlzLCBwb2ludFNpemUpO1xuICAgICAgICByZXR1cm4gc2lnbmF0dXJlLmJ1ZmZlcjtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLkludGVnZXIsIGNvbnZlcnRlcjogQXNuSW50ZWdlcldpdGhvdXRQYWRkaW5nQ29udmVydGVyIH0pXG5dLCBFY0RzYVNpZ25hdHVyZS5wcm90b3R5cGUsIFwiclwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5JbnRlZ2VyLCBjb252ZXJ0ZXI6IEFzbkludGVnZXJXaXRob3V0UGFkZGluZ0NvbnZlcnRlciB9KVxuXSwgRWNEc2FTaWduYXR1cmUucHJvdG90eXBlLCBcInNcIiwgdm9pZCAwKTtcblxuY2xhc3MgT25lQXN5bW1ldHJpY0tleSBleHRlbmRzIFByaXZhdGVLZXlJbmZvIHtcbn1cbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyBjb250ZXh0OiAxLCBpbXBsaWNpdDogdHJ1ZSwgdHlwZTogQXNuUHJvcFR5cGVzLkJpdFN0cmluZywgb3B0aW9uYWw6IHRydWUgfSlcbl0sIE9uZUFzeW1tZXRyaWNLZXkucHJvdG90eXBlLCBcInB1YmxpY0tleVwiLCB2b2lkIDApO1xuXG5sZXQgRWRQcml2YXRlS2V5ID0gY2xhc3MgRWRQcml2YXRlS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIWpzb24uZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZDogTWlzc2luZyByZXF1aXJlZCBwcm9wZXJ0eVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gQ29udmVydC5Gcm9tQmFzZTY0VXJsKGpzb24uZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGp3ayA9IHtcbiAgICAgICAgICAgIGQ6IENvbnZlcnQuVG9CYXNlNjRVcmwodGhpcy52YWx1ZSksXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBqd2s7XG4gICAgfVxufTtcbl9fZGVjb3JhdGUoW1xuICAgIEFzblByb3AoeyB0eXBlOiBBc25Qcm9wVHlwZXMuT2N0ZXRTdHJpbmcgfSlcbl0sIEVkUHJpdmF0ZUtleS5wcm90b3R5cGUsIFwidmFsdWVcIiwgdm9pZCAwKTtcbkVkUHJpdmF0ZUtleSA9IF9fZGVjb3JhdGUoW1xuICAgIEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuQ2hvaWNlIH0pXG5dLCBFZFByaXZhdGVLZXkpO1xuXG5sZXQgRWRQdWJsaWNLZXkgPSBjbGFzcyBFZFB1YmxpY0tleSB7XG4gICAgY29uc3RydWN0b3IodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAgeDogQ29udmVydC5Ub0Jhc2U2NFVybCh0aGlzLnZhbHVlKSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCEoXCJ4XCIgaW4ganNvbikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIng6IE1pc3NpbmcgcmVxdWlyZWQgcHJvcGVydHlcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IENvbnZlcnQuRnJvbUJhc2U2NFVybChqc29uLngpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59O1xuX19kZWNvcmF0ZShbXG4gICAgQXNuUHJvcCh7IHR5cGU6IEFzblByb3BUeXBlcy5CaXRTdHJpbmcgfSlcbl0sIEVkUHVibGljS2V5LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuRWRQdWJsaWNLZXkgPSBfX2RlY29yYXRlKFtcbiAgICBBc25UeXBlKHsgdHlwZTogQXNuVHlwZVR5cGVzLkNob2ljZSB9KVxuXSwgRWRQdWJsaWNLZXkpO1xuXG5sZXQgQ3VydmVQcml2YXRlS2V5ID0gY2xhc3MgQ3VydmVQcml2YXRlS2V5IHtcbn07XG5fX2RlY29yYXRlKFtcbiAgICBBc25Qcm9wKHsgdHlwZTogQXNuUHJvcFR5cGVzLk9jdGV0U3RyaW5nIH0pLFxuICAgIEpzb25Qcm9wKHsgdHlwZTogSnNvblByb3BUeXBlcy5TdHJpbmcsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybEFycmF5QnVmZmVyQ29udmVydGVyIH0pXG5dLCBDdXJ2ZVByaXZhdGVLZXkucHJvdG90eXBlLCBcImRcIiwgdm9pZCAwKTtcbkN1cnZlUHJpdmF0ZUtleSA9IF9fZGVjb3JhdGUoW1xuICAgIEFzblR5cGUoeyB0eXBlOiBBc25UeXBlVHlwZXMuQ2hvaWNlIH0pXG5dLCBDdXJ2ZVByaXZhdGVLZXkpO1xuXG5jb25zdCBpZFNlY3AyNTZyMSA9IFwiMS4yLjg0MC4xMDA0NS4zLjEuN1wiO1xuY29uc3QgaWRFbGxpcHRpY0N1cnZlID0gXCIxLjMuMTMyLjBcIjtcbmNvbnN0IGlkU2VjcDM4NHIxID0gYCR7aWRFbGxpcHRpY0N1cnZlfS4zNGA7XG5jb25zdCBpZFNlY3A1MjFyMSA9IGAke2lkRWxsaXB0aWNDdXJ2ZX0uMzVgO1xuY29uc3QgaWRTZWNwMjU2azEgPSBgJHtpZEVsbGlwdGljQ3VydmV9LjEwYDtcbmNvbnN0IGlkVmVyc2lvbk9uZSA9IFwiMS4zLjM2LjMuMy4yLjguMS4xXCI7XG5jb25zdCBpZEJyYWlucG9vbFAxNjByMSA9IGAke2lkVmVyc2lvbk9uZX0uMWA7XG5jb25zdCBpZEJyYWlucG9vbFAxNjB0MSA9IGAke2lkVmVyc2lvbk9uZX0uMmA7XG5jb25zdCBpZEJyYWlucG9vbFAxOTJyMSA9IGAke2lkVmVyc2lvbk9uZX0uM2A7XG5jb25zdCBpZEJyYWlucG9vbFAxOTJ0MSA9IGAke2lkVmVyc2lvbk9uZX0uNGA7XG5jb25zdCBpZEJyYWlucG9vbFAyMjRyMSA9IGAke2lkVmVyc2lvbk9uZX0uNWA7XG5jb25zdCBpZEJyYWlucG9vbFAyMjR0MSA9IGAke2lkVmVyc2lvbk9uZX0uNmA7XG5jb25zdCBpZEJyYWlucG9vbFAyNTZyMSA9IGAke2lkVmVyc2lvbk9uZX0uN2A7XG5jb25zdCBpZEJyYWlucG9vbFAyNTZ0MSA9IGAke2lkVmVyc2lvbk9uZX0uOGA7XG5jb25zdCBpZEJyYWlucG9vbFAzMjByMSA9IGAke2lkVmVyc2lvbk9uZX0uOWA7XG5jb25zdCBpZEJyYWlucG9vbFAzMjB0MSA9IGAke2lkVmVyc2lvbk9uZX0uMTBgO1xuY29uc3QgaWRCcmFpbnBvb2xQMzg0cjEgPSBgJHtpZFZlcnNpb25PbmV9LjExYDtcbmNvbnN0IGlkQnJhaW5wb29sUDM4NHQxID0gYCR7aWRWZXJzaW9uT25lfS4xMmA7XG5jb25zdCBpZEJyYWlucG9vbFA1MTJyMSA9IGAke2lkVmVyc2lvbk9uZX0uMTNgO1xuY29uc3QgaWRCcmFpbnBvb2xQNTEydDEgPSBgJHtpZFZlcnNpb25PbmV9LjE0YDtcbmNvbnN0IGlkWDI1NTE5ID0gXCIxLjMuMTAxLjExMFwiO1xuY29uc3QgaWRYNDQ4ID0gXCIxLjMuMTAxLjExMVwiO1xuY29uc3QgaWRFZDI1NTE5ID0gXCIxLjMuMTAxLjExMlwiO1xuY29uc3QgaWRFZDQ0OCA9IFwiMS4zLjEwMS4xMTNcIjtcblxudmFyIGluZGV4JDEgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgQWxnb3JpdGhtSWRlbnRpZmllcjogQWxnb3JpdGhtSWRlbnRpZmllcixcbiAgZ2V0IEN1cnZlUHJpdmF0ZUtleSAoKSB7IHJldHVybiBDdXJ2ZVByaXZhdGVLZXk7IH0sXG4gIEVjRHNhU2lnbmF0dXJlOiBFY0RzYVNpZ25hdHVyZSxcbiAgRWNQcml2YXRlS2V5OiBFY1ByaXZhdGVLZXksXG4gIGdldCBFY1B1YmxpY0tleSAoKSB7IHJldHVybiBFY1B1YmxpY0tleTsgfSxcbiAgZ2V0IEVkUHJpdmF0ZUtleSAoKSB7IHJldHVybiBFZFByaXZhdGVLZXk7IH0sXG4gIGdldCBFZFB1YmxpY0tleSAoKSB7IHJldHVybiBFZFB1YmxpY0tleTsgfSxcbiAgZ2V0IE9iamVjdElkZW50aWZpZXIgKCkgeyByZXR1cm4gT2JqZWN0SWRlbnRpZmllcjsgfSxcbiAgT25lQXN5bW1ldHJpY0tleTogT25lQXN5bW1ldHJpY0tleSxcbiAgUHJpdmF0ZUtleUluZm86IFByaXZhdGVLZXlJbmZvLFxuICBQdWJsaWNLZXlJbmZvOiBQdWJsaWNLZXlJbmZvLFxuICBSc2FQcml2YXRlS2V5OiBSc2FQcml2YXRlS2V5LFxuICBSc2FQdWJsaWNLZXk6IFJzYVB1YmxpY0tleSxcbiAgY29udmVydGVyczogaW5kZXgkMixcbiAgaWRCcmFpbnBvb2xQMTYwcjE6IGlkQnJhaW5wb29sUDE2MHIxLFxuICBpZEJyYWlucG9vbFAxNjB0MTogaWRCcmFpbnBvb2xQMTYwdDEsXG4gIGlkQnJhaW5wb29sUDE5MnIxOiBpZEJyYWlucG9vbFAxOTJyMSxcbiAgaWRCcmFpbnBvb2xQMTkydDE6IGlkQnJhaW5wb29sUDE5MnQxLFxuICBpZEJyYWlucG9vbFAyMjRyMTogaWRCcmFpbnBvb2xQMjI0cjEsXG4gIGlkQnJhaW5wb29sUDIyNHQxOiBpZEJyYWlucG9vbFAyMjR0MSxcbiAgaWRCcmFpbnBvb2xQMjU2cjE6IGlkQnJhaW5wb29sUDI1NnIxLFxuICBpZEJyYWlucG9vbFAyNTZ0MTogaWRCcmFpbnBvb2xQMjU2dDEsXG4gIGlkQnJhaW5wb29sUDMyMHIxOiBpZEJyYWlucG9vbFAzMjByMSxcbiAgaWRCcmFpbnBvb2xQMzIwdDE6IGlkQnJhaW5wb29sUDMyMHQxLFxuICBpZEJyYWlucG9vbFAzODRyMTogaWRCcmFpbnBvb2xQMzg0cjEsXG4gIGlkQnJhaW5wb29sUDM4NHQxOiBpZEJyYWlucG9vbFAzODR0MSxcbiAgaWRCcmFpbnBvb2xQNTEycjE6IGlkQnJhaW5wb29sUDUxMnIxLFxuICBpZEJyYWlucG9vbFA1MTJ0MTogaWRCcmFpbnBvb2xQNTEydDEsXG4gIGlkRWQyNTUxOTogaWRFZDI1NTE5LFxuICBpZEVkNDQ4OiBpZEVkNDQ4LFxuICBpZEVsbGlwdGljQ3VydmU6IGlkRWxsaXB0aWNDdXJ2ZSxcbiAgaWRTZWNwMjU2azE6IGlkU2VjcDI1NmsxLFxuICBpZFNlY3AyNTZyMTogaWRTZWNwMjU2cjEsXG4gIGlkU2VjcDM4NHIxOiBpZFNlY3AzODRyMSxcbiAgaWRTZWNwNTIxcjE6IGlkU2VjcDUyMXIxLFxuICBpZFZlcnNpb25PbmU6IGlkVmVyc2lvbk9uZSxcbiAgaWRYMjU1MTk6IGlkWDI1NTE5LFxuICBpZFg0NDg6IGlkWDQ0OFxufSk7XG5cbmNsYXNzIEVjQ3VydmVzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuICAgIHN0YXRpYyByZWdpc3RlcihpdGVtKSB7XG4gICAgICAgIGNvbnN0IG9pZCA9IG5ldyBPYmplY3RJZGVudGlmaWVyKCk7XG4gICAgICAgIG9pZC52YWx1ZSA9IGl0ZW0uaWQ7XG4gICAgICAgIGNvbnN0IHJhdyA9IEFzbkNvbnZlcnQuc2VyaWFsaXplKG9pZCk7XG4gICAgICAgIHRoaXMuaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgcmF3LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uYW1lcy5wdXNoKGl0ZW0ubmFtZSk7XG4gICAgfVxuICAgIHN0YXRpYyBmaW5kKG5hbWVPcklkKSB7XG4gICAgICAgIG5hbWVPcklkID0gbmFtZU9ySWQudG9VcHBlckNhc2UoKTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLm5hbWUudG9VcHBlckNhc2UoKSA9PT0gbmFtZU9ySWQgfHwgaXRlbS5pZC50b1VwcGVyQ2FzZSgpID09PSBuYW1lT3JJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0KG5hbWVPcklkKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuZmluZChuYW1lT3JJZCk7XG4gICAgICAgIGlmICghcmVzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIEVDIG5hbWVkIGN1cnZlICcke25hbWVPcklkfSdgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbn1cbkVjQ3VydmVzLml0ZW1zID0gW107XG5FY0N1cnZlcy5uYW1lcyA9IFtdO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcIlAtMjU2XCIsIGlkOiBpZFNlY3AyNTZyMSwgc2l6ZTogMjU2IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcIlAtMzg0XCIsIGlkOiBpZFNlY3AzODRyMSwgc2l6ZTogMzg0IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcIlAtNTIxXCIsIGlkOiBpZFNlY3A1MjFyMSwgc2l6ZTogNTIxIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcIkstMjU2XCIsIGlkOiBpZFNlY3AyNTZrMSwgc2l6ZTogMjU2IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAxNjByMVwiLCBpZDogaWRCcmFpbnBvb2xQMTYwcjEsIHNpemU6IDE2MCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMTYwdDFcIiwgaWQ6IGlkQnJhaW5wb29sUDE2MHQxLCBzaXplOiAxNjAgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDE5MnIxXCIsIGlkOiBpZEJyYWlucG9vbFAxOTJyMSwgc2l6ZTogMTkyIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAxOTJ0MVwiLCBpZDogaWRCcmFpbnBvb2xQMTkydDEsIHNpemU6IDE5MiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMjI0cjFcIiwgaWQ6IGlkQnJhaW5wb29sUDIyNHIxLCBzaXplOiAyMjQgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDIyNHQxXCIsIGlkOiBpZEJyYWlucG9vbFAyMjR0MSwgc2l6ZTogMjI0IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAyNTZyMVwiLCBpZDogaWRCcmFpbnBvb2xQMjU2cjEsIHNpemU6IDI1NiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMjU2dDFcIiwgaWQ6IGlkQnJhaW5wb29sUDI1NnQxLCBzaXplOiAyNTYgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDMyMHIxXCIsIGlkOiBpZEJyYWlucG9vbFAzMjByMSwgc2l6ZTogMzIwIH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFAzMjB0MVwiLCBpZDogaWRCcmFpbnBvb2xQMzIwdDEsIHNpemU6IDMyMCB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQMzg0cjFcIiwgaWQ6IGlkQnJhaW5wb29sUDM4NHIxLCBzaXplOiAzODQgfSk7XG5FY0N1cnZlcy5yZWdpc3Rlcih7IG5hbWU6IFwiYnJhaW5wb29sUDM4NHQxXCIsIGlkOiBpZEJyYWlucG9vbFAzODR0MSwgc2l6ZTogMzg0IH0pO1xuRWNDdXJ2ZXMucmVnaXN0ZXIoeyBuYW1lOiBcImJyYWlucG9vbFA1MTJyMVwiLCBpZDogaWRCcmFpbnBvb2xQNTEycjEsIHNpemU6IDUxMiB9KTtcbkVjQ3VydmVzLnJlZ2lzdGVyKHsgbmFtZTogXCJicmFpbnBvb2xQNTEydDFcIiwgaWQ6IGlkQnJhaW5wb29sUDUxMnQxLCBzaXplOiA1MTIgfSk7XG5cbmNsYXNzIFgyNTUxOVByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlgyNTUxOVwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IFtcImRlcml2ZUtleVwiLCBcImRlcml2ZUJpdHNcIl0sXG4gICAgICAgICAgICBwdWJsaWNLZXk6IFtdLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjaGVja0FsZ29yaXRobVBhcmFtcyhhbGdvcml0aG0pIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcInB1YmxpY1wiKTtcbiAgICB9XG59XG5cbmNsYXNzIEVkMjU1MTlQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFZDI1NTE5XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wic2lnblwiXSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogW1widmVyaWZ5XCJdLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuY2xhc3MgSG1hY1Byb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkhNQUNcIjtcbiAgICAgICAgdGhpcy5oYXNoQWxnb3JpdGhtcyA9IFtcIlNIQS0xXCIsIFwiU0hBLTI1NlwiLCBcIlNIQS0zODRcIiwgXCJTSEEtNTEyXCJdO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcInNpZ25cIiwgXCJ2ZXJpZnlcIl07XG4gICAgfVxuICAgIGdldERlZmF1bHRMZW5ndGgoYWxnTmFtZSkge1xuICAgICAgICBzd2l0Y2ggKGFsZ05hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0xXCI6XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTI1NlwiOlxuICAgICAgICAgICAgY2FzZSBcIlNIQS0zODRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtNTEyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDUxMjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFsZ29yaXRobSBuYW1lICcke2FsZ05hbWV9J2ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJoYXNoXCIpO1xuICAgICAgICB0aGlzLmNoZWNrSGFzaEFsZ29yaXRobShhbGdvcml0aG0uaGFzaCwgdGhpcy5oYXNoQWxnb3JpdGhtcyk7XG4gICAgICAgIGlmIChcImxlbmd0aFwiIGluIGFsZ29yaXRobSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhbGdvcml0aG0ubGVuZ3RoICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbm90IGEgTnVtYmVyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsZ29yaXRobS5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJsZW5ndGg6IE51bWJlciBpcyBvdXQgb2YgcmFuZ2VcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tJbXBvcnRQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJoYXNoXCIpO1xuICAgICAgICB0aGlzLmNoZWNrSGFzaEFsZ29yaXRobShhbGdvcml0aG0uaGFzaCwgdGhpcy5oYXNoQWxnb3JpdGhtcyk7XG4gICAgfVxufVxuXG5jbGFzcyBQYmtkZjJQcm92aWRlciBleHRlbmRzIFByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJQQktERjJcIjtcbiAgICAgICAgdGhpcy5oYXNoQWxnb3JpdGhtcyA9IFtcIlNIQS0xXCIsIFwiU0hBLTI1NlwiLCBcIlNIQS0zODRcIiwgXCJTSEEtNTEyXCJdO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtcImRlcml2ZUJpdHNcIiwgXCJkZXJpdmVLZXlcIl07XG4gICAgfVxuICAgIGNoZWNrQWxnb3JpdGhtUGFyYW1zKGFsZ29yaXRobSkge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwiaGFzaFwiKTtcbiAgICAgICAgdGhpcy5jaGVja0hhc2hBbGdvcml0aG0oYWxnb3JpdGhtLmhhc2gsIHRoaXMuaGFzaEFsZ29yaXRobXMpO1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwic2FsdFwiKTtcbiAgICAgICAgaWYgKCEoYWxnb3JpdGhtLnNhbHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoYWxnb3JpdGhtLnNhbHQpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcInNhbHQ6IElzIG5vdCBvZiB0eXBlICcoQXJyYXlCdWZmZXIgb3IgQXJyYXlCdWZmZXJWaWV3KSdcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkUHJvcGVydHkoYWxnb3JpdGhtLCBcIml0ZXJhdGlvbnNcIik7XG4gICAgICAgIGlmICh0eXBlb2YgYWxnb3JpdGhtLml0ZXJhdGlvbnMgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRpb25zOiBJcyBub3QgYSBOdW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsZ29yaXRobS5pdGVyYXRpb25zIDwgMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIml0ZXJhdGlvbnM6IElzIGxlc3MgdGhhbiAxXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5hcmdzKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5hcmdzKTtcbiAgICAgICAgaWYgKGV4dHJhY3RhYmxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJleHRyYWN0YWJsZTogTXVzdCBiZSAnZmFsc2UnXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBIa2RmUHJvdmlkZXIgZXh0ZW5kcyBQcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiSEtERlwiO1xuICAgICAgICB0aGlzLmhhc2hBbGdvcml0aG1zID0gW1wiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIl07XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW1wiZGVyaXZlS2V5XCIsIFwiZGVyaXZlQml0c1wiXTtcbiAgICB9XG4gICAgY2hlY2tBbGdvcml0aG1QYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJoYXNoXCIpO1xuICAgICAgICB0aGlzLmNoZWNrSGFzaEFsZ29yaXRobShhbGdvcml0aG0uaGFzaCwgdGhpcy5oYXNoQWxnb3JpdGhtcyk7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJzYWx0XCIpO1xuICAgICAgICBpZiAoIUJ1ZmZlclNvdXJjZUNvbnZlcnRlci5pc0J1ZmZlclNvdXJjZShhbGdvcml0aG0uc2FsdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJzYWx0OiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJpbmZvXCIpO1xuICAgICAgICBpZiAoIUJ1ZmZlclNvdXJjZUNvbnZlcnRlci5pc0J1ZmZlclNvdXJjZShhbGdvcml0aG0uaW5mbykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJzYWx0OiBJcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyknXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoZWNrSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5hcmdzKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5hcmdzKTtcbiAgICAgICAgaWYgKGV4dHJhY3RhYmxlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJleHRyYWN0YWJsZTogTXVzdCBiZSAnZmFsc2UnXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZVByb3ZpZGVyIGV4dGVuZHMgUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgICAgICB0aGlzLmRlZmF1bHRMZW5ndGggPSAwO1xuICAgIH1cbiAgICBkaWdlc3QoLi4uYXJncykge1xuICAgICAgICBhcmdzWzBdID0geyBsZW5ndGg6IHRoaXMuZGVmYXVsdExlbmd0aCwgLi4uYXJnc1swXSB9O1xuICAgICAgICByZXR1cm4gc3VwZXIuZGlnZXN0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgICBjaGVja0RpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tEaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gYWxnb3JpdGhtLmxlbmd0aCB8fCAwO1xuICAgICAgICBpZiAodHlwZW9mIGxlbmd0aCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImxlbmd0aDogSXMgbm90IGEgTnVtYmVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsZW5ndGggPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibGVuZ3RoOiBJcyBuZWdhdGl2ZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgU2hha2UxMjhQcm92aWRlciBleHRlbmRzIFNoYWtlUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcInNoYWtlMTI4XCI7XG4gICAgICAgIHRoaXMuZGVmYXVsdExlbmd0aCA9IDE2O1xuICAgIH1cbn1cblxuY2xhc3MgU2hha2UyNTZQcm92aWRlciBleHRlbmRzIFNoYWtlUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcInNoYWtlMjU2XCI7XG4gICAgICAgIHRoaXMuZGVmYXVsdExlbmd0aCA9IDMyO1xuICAgIH1cbn1cblxuY2xhc3MgQ3J5cHRvIHtcbiAgICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgICAgIHJldHVybiBcIkNyeXB0b1wiO1xuICAgIH1cbiAgICByYW5kb21VVUlEKCkge1xuICAgICAgICBjb25zdCBiID0gdGhpcy5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTYpKTtcbiAgICAgICAgYls2XSA9IChiWzZdICYgMHgwZikgfCAweDQwO1xuICAgICAgICBiWzhdID0gKGJbOF0gJiAweDNmKSB8IDB4ODA7XG4gICAgICAgIGNvbnN0IHV1aWQgPSBDb252ZXJ0LlRvSGV4KGIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHVybiBgJHt1dWlkLnN1YnN0cmluZygwLCA4KX0tJHt1dWlkLnN1YnN0cmluZyg4LCAxMil9LSR7dXVpZC5zdWJzdHJpbmcoMTIsIDE2KX0tJHt1dWlkLnN1YnN0cmluZygxNiwgMjApfS0ke3V1aWQuc3Vic3RyaW5nKDIwKX1gO1xuICAgIH1cbn1cblxuY2xhc3MgUHJvdmlkZXJTdG9yYWdlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IHt9O1xuICAgIH1cbiAgICBnZXQoYWxnb3JpdGhtTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtc1thbGdvcml0aG1OYW1lLnRvTG93ZXJDYXNlKCldIHx8IG51bGw7XG4gICAgfVxuICAgIHNldChwcm92aWRlcikge1xuICAgICAgICB0aGlzLml0ZW1zW3Byb3ZpZGVyLm5hbWUudG9Mb3dlckNhc2UoKV0gPSBwcm92aWRlcjtcbiAgICB9XG4gICAgcmVtb3ZlQXQoYWxnb3JpdGhtTmFtZSkge1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0KGFsZ29yaXRobU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGlmIChwcm92aWRlcikge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuaXRlbXNbYWxnb3JpdGhtTmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3ZpZGVyO1xuICAgIH1cbiAgICBoYXMobmFtZSkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmdldChuYW1lKTtcbiAgICB9XG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuaXRlbXMpLmxlbmd0aDtcbiAgICB9XG4gICAgZ2V0IGFsZ29yaXRobXMoKSB7XG4gICAgICAgIGNvbnN0IGFsZ29yaXRobXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5pdGVtcykge1xuICAgICAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLml0ZW1zW2tleV07XG4gICAgICAgICAgICBhbGdvcml0aG1zLnB1c2gocHJvdmlkZXIubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFsZ29yaXRobXMuc29ydCgpO1xuICAgIH1cbn1cblxuY29uc3Qga2V5Rm9ybWF0TWFwID0ge1xuICAgIFwiandrXCI6IFtcInByaXZhdGVcIiwgXCJwdWJsaWNcIiwgXCJzZWNyZXRcIl0sXG4gICAgXCJwa2NzOFwiOiBbXCJwcml2YXRlXCJdLFxuICAgIFwic3BraVwiOiBbXCJwdWJsaWNcIl0sXG4gICAgXCJyYXdcIjogW1wic2VjcmV0XCIsIFwicHVibGljXCJdXG59O1xuY29uc3Qgc291cmNlQnVmZmVyS2V5Rm9ybWF0cyA9IFtcInBrY3M4XCIsIFwic3BraVwiLCBcInJhd1wiXTtcbmNsYXNzIFN1YnRsZUNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzID0gbmV3IFByb3ZpZGVyU3RvcmFnZSgpO1xuICAgIH1cbiAgICBzdGF0aWMgaXNIYXNoZWRBbGdvcml0aG0oZGF0YSkge1xuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgICAgICAgJiYgdHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCJcbiAgICAgICAgICAgICYmIFwibmFtZVwiIGluIGRhdGFcbiAgICAgICAgICAgICYmIFwiaGFzaFwiIGluIGRhdGFcbiAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgOiBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgICAgICByZXR1cm4gXCJTdWJ0bGVDcnlwdG9cIjtcbiAgICB9XG4gICAgYXN5bmMgZGlnZXN0KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDIsIFwiZGlnZXN0XCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBkYXRhLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWREYXRhID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZGlnZXN0KHByZXBhcmVkQWxnb3JpdGhtLCBwcmVwYXJlZERhdGEsIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGdlbmVyYXRlS2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDMsIFwiZ2VuZXJhdGVLZXlcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmdlbmVyYXRlS2V5KHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgc2lnbiguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAzLCBcInNpZ25cIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGtleSwgZGF0YSwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWREYXRhID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuc2lnbih7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGtleSwgcHJlcGFyZWREYXRhLCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyB2ZXJpZnkoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgNCwgXCJ2ZXJpZnlcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShrZXkpO1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERhdGEgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihkYXRhKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRTaWduYXR1cmUgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihzaWduYXR1cmUpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLnZlcmlmeSh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGtleSwgcHJlcGFyZWRTaWduYXR1cmUsIHByZXBhcmVkRGF0YSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgZW5jcnlwdCguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCAzLCBcImVuY3J5cHRcIik7XG4gICAgICAgIGNvbnN0IFthbGdvcml0aG0sIGtleSwgZGF0YSwgLi4ucGFyYW1zXSA9IGFyZ3M7XG4gICAgICAgIHRoaXMuY2hlY2tDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWREYXRhID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoZGF0YSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihwcmVwYXJlZEFsZ29yaXRobS5uYW1lKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvdmlkZXIuZW5jcnlwdCh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIGtleSwgcHJlcGFyZWREYXRhLCB7IGtleVVzYWdlOiB0cnVlIH0sIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGRlY3J5cHQoLi4uYXJncykge1xuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRBcmd1bWVudHMoYXJncywgMywgXCJkZWNyeXB0XCIpO1xuICAgICAgICBjb25zdCBbYWxnb3JpdGhtLCBrZXksIGRhdGEsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSk7XG4gICAgICAgIGNvbnN0IHByZXBhcmVkRGF0YSA9IEJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGRhdGEpO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IHRoaXMuZ2V0UHJvdmlkZXIocHJlcGFyZWRBbGdvcml0aG0ubmFtZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLmRlY3J5cHQoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCBrZXksIHByZXBhcmVkRGF0YSwgeyBrZXlVc2FnZTogdHJ1ZSB9LCAuLi5wYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBhc3luYyBkZXJpdmVCaXRzKC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDMsIFwiZGVyaXZlQml0c1wiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwgYmFzZUtleSwgbGVuZ3RoLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgdGhpcy5jaGVja0NyeXB0b0tleShiYXNlS2V5KTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5kZXJpdmVCaXRzKHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgYmFzZUtleSwgbGVuZ3RoLCB7IGtleVVzYWdlOiB0cnVlIH0sIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGRlcml2ZUtleSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCA1LCBcImRlcml2ZUtleVwiKTtcbiAgICAgICAgY29uc3QgW2FsZ29yaXRobSwgYmFzZUtleSwgZGVyaXZlZEtleVR5cGUsIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMsIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERlcml2ZWRLZXlUeXBlID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKGRlcml2ZWRLZXlUeXBlKTtcbiAgICAgICAgY29uc3QgaW1wb3J0UHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkRGVyaXZlZEtleVR5cGUubmFtZSk7XG4gICAgICAgIGltcG9ydFByb3ZpZGVyLmNoZWNrRGVyaXZlZEtleVBhcmFtcyhwcmVwYXJlZERlcml2ZWRLZXlUeXBlKTtcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBwcm92aWRlci5jaGVja0NyeXB0b0tleShiYXNlS2V5LCBcImRlcml2ZUtleVwiKTtcbiAgICAgICAgY29uc3QgZGVyaXZlZEJpdHMgPSBhd2FpdCBwcm92aWRlci5kZXJpdmVCaXRzKHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgYmFzZUtleSwgZGVyaXZlZEtleVR5cGUubGVuZ3RoIHx8IDUxMiwgeyBrZXlVc2FnZTogZmFsc2UgfSwgLi4ucGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0S2V5KFwicmF3XCIsIGRlcml2ZWRCaXRzLCBkZXJpdmVkS2V5VHlwZSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4ucGFyYW1zKTtcbiAgICB9XG4gICAgYXN5bmMgZXhwb3J0S2V5KC4uLmFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQXJndW1lbnRzKGFyZ3MsIDIsIFwiZXhwb3J0S2V5XCIpO1xuICAgICAgICBjb25zdCBbZm9ybWF0LCBrZXksIC4uLnBhcmFtc10gPSBhcmdzO1xuICAgICAgICB0aGlzLmNoZWNrQ3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICgha2V5Rm9ybWF0TWFwW2Zvcm1hdF0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGtleUZvcm1hdCBhcmd1bWVudFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWtleUZvcm1hdE1hcFtmb3JtYXRdLmluY2x1ZGVzKGtleS50eXBlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcIlRoZSBrZXkgaXMgbm90IG9mIHRoZSBleHBlY3RlZCB0eXBlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGhpcy5nZXRQcm92aWRlcihrZXkuYWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm92aWRlci5leHBvcnRLZXkoZm9ybWF0LCBrZXksIC4uLnBhcmFtcyk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGFzeW5jIGltcG9ydEtleSguLi5hcmdzKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCA1LCBcImltcG9ydEtleVwiKTtcbiAgICAgICAgY29uc3QgW2Zvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5wYXJhbXNdID0gYXJncztcbiAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB0aGlzLnByZXBhcmVBbGdvcml0aG0oYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImp3a1wiKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGtleURhdGEgIT09IFwib2JqZWN0XCIgfHwgIWtleURhdGEua3R5KSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIktleSBkYXRhIG11c3QgYmUgYW4gb2JqZWN0IGZvciBKV0sgaW1wb3J0XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNvdXJjZUJ1ZmZlcktleUZvcm1hdHMuaW5jbHVkZXMoZm9ybWF0KSkge1xuICAgICAgICAgICAgaWYgKCFCdWZmZXJTb3VyY2VDb252ZXJ0ZXIuaXNCdWZmZXJTb3VyY2Uoa2V5RGF0YSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiS2V5IGRhdGEgbXVzdCBiZSBhIEJ1ZmZlclNvdXJjZSBmb3Igbm9uLUpXSyBmb3JtYXRzXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBwcm92aWRlZCB2YWx1ZSBpcyBub3Qgb2YgdHlwZSAnKEFycmF5QnVmZmVyIG9yIEFycmF5QnVmZmVyVmlldyBvciBKc29uV2ViS2V5KSdcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3ZpZGVyLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4ucHJlcGFyZWRBbGdvcml0aG0sIG5hbWU6IHByb3ZpZGVyLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4ucGFyYW1zKTtcbiAgICB9XG4gICAgYXN5bmMgd3JhcEtleShmb3JtYXQsIGtleSwgd3JhcHBpbmdLZXksIHdyYXBBbGdvcml0aG0sIC4uLmFyZ3MpIHtcbiAgICAgICAgbGV0IGtleURhdGEgPSBhd2FpdCB0aGlzLmV4cG9ydEtleShmb3JtYXQsIGtleSwgLi4uYXJncyk7XG4gICAgICAgIGlmIChmb3JtYXQgPT09IFwiandrXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeShrZXlEYXRhKTtcbiAgICAgICAgICAgIGtleURhdGEgPSBDb252ZXJ0LkZyb21VdGY4U3RyaW5nKGpzb24pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZXBhcmVkQWxnb3JpdGhtID0gdGhpcy5wcmVwYXJlQWxnb3JpdGhtKHdyYXBBbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERhdGEgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihrZXlEYXRhKTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICByZXR1cm4gcHJvdmlkZXIuZW5jcnlwdCh7IC4uLnByZXBhcmVkQWxnb3JpdGhtLCBuYW1lOiBwcm92aWRlci5uYW1lIH0sIHdyYXBwaW5nS2V5LCBwcmVwYXJlZERhdGEsIHsga2V5VXNhZ2U6IGZhbHNlIH0sIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBhc3luYyB1bndyYXBLZXkoZm9ybWF0LCB3cmFwcGVkS2V5LCB1bndyYXBwaW5nS2V5LCB1bndyYXBBbGdvcml0aG0sIHVud3JhcHBlZEtleUFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgLi4uYXJncykge1xuICAgICAgICBjb25zdCBwcmVwYXJlZEFsZ29yaXRobSA9IHRoaXMucHJlcGFyZUFsZ29yaXRobSh1bndyYXBBbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBwcmVwYXJlZERhdGEgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcih3cmFwcGVkS2V5KTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLmdldFByb3ZpZGVyKHByZXBhcmVkQWxnb3JpdGhtLm5hbWUpO1xuICAgICAgICBsZXQga2V5RGF0YSA9IGF3YWl0IHByb3ZpZGVyLmRlY3J5cHQoeyAuLi5wcmVwYXJlZEFsZ29yaXRobSwgbmFtZTogcHJvdmlkZXIubmFtZSB9LCB1bndyYXBwaW5nS2V5LCBwcmVwYXJlZERhdGEsIHsga2V5VXNhZ2U6IGZhbHNlIH0sIC4uLmFyZ3MpO1xuICAgICAgICBpZiAoZm9ybWF0ID09PSBcImp3a1wiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGtleURhdGEgPSBKU09OLnBhcnNlKENvbnZlcnQuVG9VdGY4U3RyaW5nKGtleURhdGEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgVHlwZUVycm9yKFwid3JhcHBlZEtleTogSXMgbm90IGEgSlNPTlwiKTtcbiAgICAgICAgICAgICAgICBlcnJvci5pbnRlcm5hbCA9IGU7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgdW53cmFwcGVkS2V5QWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCAuLi5hcmdzKTtcbiAgICB9XG4gICAgY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhhcmdzLCBzaXplLCBtZXRob2ROYW1lKSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IHNpemUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEZhaWxlZCB0byBleGVjdXRlICcke21ldGhvZE5hbWV9JyBvbiAnU3VidGxlQ3J5cHRvJzogJHtzaXplfSBhcmd1bWVudHMgcmVxdWlyZWQsIGJ1dCBvbmx5ICR7YXJncy5sZW5ndGh9IHByZXNlbnRgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcmVwYXJlQWxnb3JpdGhtKGFsZ29yaXRobSkge1xuICAgICAgICBpZiAodHlwZW9mIGFsZ29yaXRobSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBhbGdvcml0aG0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChTdWJ0bGVDcnlwdG8uaXNIYXNoZWRBbGdvcml0aG0oYWxnb3JpdGhtKSkge1xuICAgICAgICAgICAgY29uc3QgcHJlcGFyZWRBbGdvcml0aG0gPSB7IC4uLmFsZ29yaXRobSB9O1xuICAgICAgICAgICAgcHJlcGFyZWRBbGdvcml0aG0uaGFzaCA9IHRoaXMucHJlcGFyZUFsZ29yaXRobShhbGdvcml0aG0uaGFzaCk7XG4gICAgICAgICAgICByZXR1cm4gcHJlcGFyZWRBbGdvcml0aG07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgLi4uYWxnb3JpdGhtIH07XG4gICAgfVxuICAgIGdldFByb3ZpZGVyKG5hbWUpIHtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0aGlzLnByb3ZpZGVycy5nZXQobmFtZSk7XG4gICAgICAgIGlmICghcHJvdmlkZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBbGdvcml0aG1FcnJvcihcIlVucmVjb2duaXplZCBuYW1lXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm92aWRlcjtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbnN0YW5jZW9mIENyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEtleSBpcyBub3Qgb2YgdHlwZSAnQ3J5cHRvS2V5J2ApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG52YXIgaW5kZXggPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgY29udmVydGVyczogaW5kZXgkM1xufSk7XG5cbmNvbnN0IFJFUVVJUkVEX0ZJRUxEUyA9IFtcImNydlwiLCBcImVcIiwgXCJrXCIsIFwia3R5XCIsIFwiblwiLCBcInhcIiwgXCJ5XCJdO1xuY2xhc3MgSndrVXRpbHMge1xuICAgIHN0YXRpYyBhc3luYyB0aHVtYnByaW50KGhhc2gsIGp3aywgY3J5cHRvKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmZvcm1hdChqd2ssIHRydWUpO1xuICAgICAgICByZXR1cm4gY3J5cHRvLnN1YnRsZS5kaWdlc3QoaGFzaCwgQ29udmVydC5Gcm9tQmluYXJ5KEpTT04uc3RyaW5naWZ5KGRhdGEpKSk7XG4gICAgfVxuICAgIHN0YXRpYyBmb3JtYXQoandrLCByZW1vdmUgPSBmYWxzZSkge1xuICAgICAgICBsZXQgcmVzID0gT2JqZWN0LmVudHJpZXMoandrKTtcbiAgICAgICAgaWYgKHJlbW92ZSkge1xuICAgICAgICAgICAgcmVzID0gcmVzLmZpbHRlcihvID0+IFJFUVVJUkVEX0ZJRUxEUy5pbmNsdWRlcyhvWzBdKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gcmVzLnNvcnQoKFtrZXlBXSwgW2tleUJdKSA9PiBrZXlBID4ga2V5QiA/IDEgOiBrZXlBIDwga2V5QiA/IC0xIDogMCk7XG4gICAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMocmVzKTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IEFlc0NiY1Byb3ZpZGVyLCBBZXNDbWFjUHJvdmlkZXIsIEFlc0N0clByb3ZpZGVyLCBBZXNFY2JQcm92aWRlciwgQWVzR2NtUHJvdmlkZXIsIEFlc0t3UHJvdmlkZXIsIEFlc1Byb3ZpZGVyLCBBbGdvcml0aG1FcnJvciwgQ3J5cHRvLCBDcnlwdG9FcnJvciwgQ3J5cHRvS2V5LCBEZXNQcm92aWRlciwgRWNDdXJ2ZXMsIEVjVXRpbHMsIEVjZGhFc1Byb3ZpZGVyLCBFY2RoUHJvdmlkZXIsIEVjZHNhUHJvdmlkZXIsIEVkMjU1MTlQcm92aWRlciwgRWREc2FQcm92aWRlciwgRWxsaXB0aWNQcm92aWRlciwgSGtkZlByb3ZpZGVyLCBIbWFjUHJvdmlkZXIsIEp3a1V0aWxzLCBPcGVyYXRpb25FcnJvciwgUGJrZGYyUHJvdmlkZXIsIFBlbUNvbnZlcnRlciwgUHJvdmlkZXJDcnlwdG8sIFByb3ZpZGVyU3RvcmFnZSwgUmVxdWlyZWRQcm9wZXJ0eUVycm9yLCBSc2FPYWVwUHJvdmlkZXIsIFJzYVByb3ZpZGVyLCBSc2FQc3NQcm92aWRlciwgUnNhU3NhUHJvdmlkZXIsIFNoYWtlMTI4UHJvdmlkZXIsIFNoYWtlMjU2UHJvdmlkZXIsIFNoYWtlUHJvdmlkZXIsIFN1YnRsZUNyeXB0bywgVW5zdXBwb3J0ZWRPcGVyYXRpb25FcnJvciwgWDI1NTE5UHJvdmlkZXIsIGluZGV4JDEgYXMgYXNuMSwgaXNKV0ssIGluZGV4IGFzIGpzb24gfTtcbiIsICIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG4vLyBTdXBwb3J0IGRlY29kaW5nIFVSTC1zYWZlIGJhc2U2NCBzdHJpbmdzLCBhcyBOb2RlLmpzIGRvZXMuXG4vLyBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NCNVUkxfYXBwbGljYXRpb25zXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBnZXRMZW5zIChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcblxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gVHJpbSBvZmYgZXh0cmEgYnl0ZXMgYWZ0ZXIgcGxhY2Vob2xkZXIgYnl0ZXMgYXJlIGZvdW5kXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JlYXRnYW1taXQvYmFzZTY0LWpzL2lzc3Vlcy80MlxuICB2YXIgdmFsaWRMZW4gPSBiNjQuaW5kZXhPZignPScpXG4gIGlmICh2YWxpZExlbiA9PT0gLTEpIHZhbGlkTGVuID0gbGVuXG5cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IHZhbGlkTGVuID09PSBsZW5cbiAgICA/IDBcbiAgICA6IDQgLSAodmFsaWRMZW4gJSA0KVxuXG4gIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl1cbn1cblxuLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gX2J5dGVMZW5ndGggKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikge1xuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cblxuICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKVxuXG4gIHZhciBjdXJCeXRlID0gMFxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgdmFyIGxlbiA9IHBsYWNlSG9sZGVyc0xlbiA+IDBcbiAgICA/IHZhbGlkTGVuIC0gNFxuICAgIDogdmFsaWRMZW5cblxuICB2YXIgaVxuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTgpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCAxMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHxcbiAgICAgIHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMyldXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDE2KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAyKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMSkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxMCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDQpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiAxMiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDYgJiAweDNGXSArXG4gICAgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9XG4gICAgICAoKHVpbnQ4W2ldIDw8IDE2KSAmIDB4RkYwMDAwKSArXG4gICAgICAoKHVpbnQ4W2kgKyAxXSA8PCA4KSAmIDB4RkYwMCkgK1xuICAgICAgKHVpbnQ4W2kgKyAyXSAmIDB4RkYpXG4gICAgb3V0cHV0LnB1c2godHJpcGxldFRvQmFzZTY0KHRtcCkpXG4gIH1cbiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBmcm9tQnl0ZUFycmF5ICh1aW50OCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW4gPSB1aW50OC5sZW5ndGhcbiAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4gJSAzIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsodWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKSkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAyXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdICtcbiAgICAgICc9PSdcbiAgICApXG4gIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikge1xuICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArIHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMTBdICtcbiAgICAgIGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXSArXG4gICAgICAnPSdcbiAgICApXG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cbiIsICIvKiEgaWVlZTc1NC4gQlNELTMtQ2xhdXNlIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqL1xuZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSAoZSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSAobSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICgodmFsdWUgKiBjKSAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwgIi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBiYXNlNjQgPSByZXF1aXJlKCdiYXNlNjQtanMnKVxudmFyIGllZWU3NTQgPSByZXF1aXJlKCdpZWVlNzU0JylcbnZhciBjdXN0b21JbnNwZWN0U3ltYm9sID1cbiAgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbFsnZm9yJ10gPT09ICdmdW5jdGlvbicpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZG90LW5vdGF0aW9uXG4gICAgPyBTeW1ib2xbJ2ZvciddKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZG90LW5vdGF0aW9uXG4gICAgOiBudWxsXG5cbmV4cG9ydHMuQnVmZmVyID0gQnVmZmVyXG5leHBvcnRzLlNsb3dCdWZmZXIgPSBTbG93QnVmZmVyXG5leHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTID0gNTBcblxudmFyIEtfTUFYX0xFTkdUSCA9IDB4N2ZmZmZmZmZcbmV4cG9ydHMua01heExlbmd0aCA9IEtfTUFYX0xFTkdUSFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBQcmludCB3YXJuaW5nIGFuZCByZWNvbW1lbmQgdXNpbmcgYGJ1ZmZlcmAgdjQueCB3aGljaCBoYXMgYW4gT2JqZWN0XG4gKiAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBXZSByZXBvcnQgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBpZiB0aGUgYXJlIG5vdCBzdWJjbGFzc2FibGVcbiAqIHVzaW5nIF9fcHJvdG9fXy4gRmlyZWZveCA0LTI5IGxhY2tzIHN1cHBvcnQgZm9yIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBgVWludDhBcnJheWBcbiAqIChTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOCkuIElFIDEwIGxhY2tzIHN1cHBvcnRcbiAqIGZvciBfX3Byb3RvX18gYW5kIGhhcyBhIGJ1Z2d5IHR5cGVkIGFycmF5IGltcGxlbWVudGF0aW9uLlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICBjb25zb2xlLmVycm9yKFxuICAgICdUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgJyArXG4gICAgJ2BidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuJ1xuICApXG59XG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgLy8gQ2FuIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkP1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIHZhciBwcm90byA9IHsgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9IH1cbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YocHJvdG8sIFVpbnQ4QXJyYXkucHJvdG90eXBlKVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihhcnIsIHByb3RvKVxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgJ3BhcmVudCcsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcykpIHJldHVybiB1bmRlZmluZWRcbiAgICByZXR1cm4gdGhpcy5idWZmZXJcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlci5wcm90b3R5cGUsICdvZmZzZXQnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHRoaXMpKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgcmV0dXJuIHRoaXMuYnl0ZU9mZnNldFxuICB9XG59KVxuXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAobGVuZ3RoID4gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyBsZW5ndGggKyAnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJylcbiAgfVxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVmLCBCdWZmZXIucHJvdG90eXBlKVxuICByZXR1cm4gYnVmXG59XG5cbi8qKlxuICogVGhlIEJ1ZmZlciBjb25zdHJ1Y3RvciByZXR1cm5zIGluc3RhbmNlcyBvZiBgVWludDhBcnJheWAgdGhhdCBoYXZlIHRoZWlyXG4gKiBwcm90b3R5cGUgY2hhbmdlZCB0byBgQnVmZmVyLnByb3RvdHlwZWAuIEZ1cnRoZXJtb3JlLCBgQnVmZmVyYCBpcyBhIHN1YmNsYXNzIG9mXG4gKiBgVWludDhBcnJheWAsIHNvIHRoZSByZXR1cm5lZCBpbnN0YW5jZXMgd2lsbCBoYXZlIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBtZXRob2RzXG4gKiBhbmQgdGhlIGBVaW50OEFycmF5YCBtZXRob2RzLiBTcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3b3JrcyBhcyBleHBlY3RlZCAtLSBpdFxuICogcmV0dXJucyBhIHNpbmdsZSBvY3RldC5cbiAqXG4gKiBUaGUgYFVpbnQ4QXJyYXlgIHByb3RvdHlwZSByZW1haW5zIHVubW9kaWZpZWQuXG4gKi9cblxuZnVuY3Rpb24gQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUoYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuZnVuY3Rpb24gZnJvbSAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5Vmlldyh2YWx1ZSlcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCAnICtcbiAgICAgICdvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB2YWx1ZSlcbiAgICApXG4gIH1cblxuICBpZiAoaXNJbnN0YW5jZSh2YWx1ZSwgQXJyYXlCdWZmZXIpIHx8XG4gICAgICAodmFsdWUgJiYgaXNJbnN0YW5jZSh2YWx1ZS5idWZmZXIsIEFycmF5QnVmZmVyKSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgKGlzSW5zdGFuY2UodmFsdWUsIFNoYXJlZEFycmF5QnVmZmVyKSB8fFxuICAgICAgKHZhbHVlICYmIGlzSW5zdGFuY2UodmFsdWUuYnVmZmVyLCBTaGFyZWRBcnJheUJ1ZmZlcikpKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcidcbiAgICApXG4gIH1cblxuICB2YXIgdmFsdWVPZiA9IHZhbHVlLnZhbHVlT2YgJiYgdmFsdWUudmFsdWVPZigpXG4gIGlmICh2YWx1ZU9mICE9IG51bGwgJiYgdmFsdWVPZiAhPT0gdmFsdWUpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWVPZiwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgdmFyIGIgPSBmcm9tT2JqZWN0KHZhbHVlKVxuICBpZiAoYikgcmV0dXJuIGJcblxuICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvUHJpbWl0aXZlICE9IG51bGwgJiZcbiAgICAgIHR5cGVvZiB2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFxuICAgICAgdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSgnc3RyaW5nJyksIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aFxuICAgIClcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksICcgK1xuICAgICdvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB2YWx1ZSlcbiAgKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbi8vIE5vdGU6IENoYW5nZSBwcm90b3R5cGUgKmFmdGVyKiBCdWZmZXIuZnJvbSBpcyBkZWZpbmVkIHRvIHdvcmthcm91bmQgQ2hyb21lIGJ1Zzpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvMTQ4XG5PYmplY3Quc2V0UHJvdG90eXBlT2YoQnVmZmVyLnByb3RvdHlwZSwgVWludDhBcnJheS5wcm90b3R5cGUpXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoQnVmZmVyLCBVaW50OEFycmF5KVxuXG5mdW5jdGlvbiBhc3NlcnRTaXplIChzaXplKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyJylcbiAgfSBlbHNlIGlmIChzaXplIDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInICsgc2l6ZSArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldGVkIGFzIGEgc3RhcnQgb2Zmc2V0LlxuICAgIHJldHVybiB0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnXG4gICAgICA/IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwsIGVuY29kaW5nKVxuICAgICAgOiBjcmVhdGVCdWZmZXIoc2l6ZSkuZmlsbChmaWxsKVxuICB9XG4gIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiBhbGxvYyhzaXplWywgZmlsbFssIGVuY29kaW5nXV0pXG4gKiovXG5CdWZmZXIuYWxsb2MgPSBmdW5jdGlvbiAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGFsbG9jKHNpemUsIGZpbGwsIGVuY29kaW5nKVxufVxuXG5mdW5jdGlvbiBhbGxvY1Vuc2FmZSAoc2l6ZSkge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSA8IDAgPyAwIDogY2hlY2tlZChzaXplKSB8IDApXG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUoc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUoc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAoc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gIH1cblxuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpXG5cbiAgdmFyIGFjdHVhbCA9IGJ1Zi53cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuXG4gIGlmIChhY3R1YWwgIT09IGxlbmd0aCkge1xuICAgIC8vIFdyaXRpbmcgYSBoZXggc3RyaW5nLCBmb3IgZXhhbXBsZSwgdGhhdCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMgd2lsbFxuICAgIC8vIGNhdXNlIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IGludmFsaWQgY2hhcmFjdGVyIHRvIGJlIGlnbm9yZWQuIChlLmcuXG4gICAgLy8gJ2FieHhjZCcgd2lsbCBiZSB0cmVhdGVkIGFzICdhYicpXG4gICAgYnVmID0gYnVmLnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZSAoYXJyYXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMFxuICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgIGJ1ZltpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlWaWV3IChhcnJheVZpZXcpIHtcbiAgaWYgKGlzSW5zdGFuY2UoYXJyYXlWaWV3LCBVaW50OEFycmF5KSkge1xuICAgIHZhciBjb3B5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlWaWV3KVxuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIoY29weS5idWZmZXIsIGNvcHkuYnl0ZU9mZnNldCwgY29weS5ieXRlTGVuZ3RoKVxuICB9XG4gIHJldHVybiBmcm9tQXJyYXlMaWtlKGFycmF5Vmlldylcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyIChhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcIm9mZnNldFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wibGVuZ3RoXCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIHZhciBidWZcbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihidWYsIEJ1ZmZlci5wcm90b3R5cGUpXG5cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0IChvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgdmFyIGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW4pXG5cbiAgICBpZiAoYnVmLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGJ1ZlxuICAgIH1cblxuICAgIG9iai5jb3B5KGJ1ZiwgMCwgMCwgbGVuKVxuICAgIHJldHVybiBidWZcbiAgfVxuXG4gIGlmIChvYmoubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIG9iai5sZW5ndGggIT09ICdudW1iZXInIHx8IG51bWJlcklzTmFOKG9iai5sZW5ndGgpKSB7XG4gICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKDApXG4gICAgfVxuICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKG9iailcbiAgfVxuXG4gIGlmIChvYmoudHlwZSA9PT0gJ0J1ZmZlcicgJiYgQXJyYXkuaXNBcnJheShvYmouZGF0YSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5TGlrZShvYmouZGF0YSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja2VkIChsZW5ndGgpIHtcbiAgLy8gTm90ZTogY2Fubm90IHVzZSBgbGVuZ3RoIDwgS19NQVhfTEVOR1RIYCBoZXJlIGJlY2F1c2UgdGhhdCBmYWlscyB3aGVuXG4gIC8vIGxlbmd0aCBpcyBOYU4gKHdoaWNoIGlzIG90aGVyd2lzZSBjb2VyY2VkIHRvIHplcm8uKVxuICBpZiAobGVuZ3RoID49IEtfTUFYX0xFTkdUSCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplOiAweCcgKyBLX01BWF9MRU5HVEgudG9TdHJpbmcoMTYpICsgJyBieXRlcycpXG4gIH1cbiAgcmV0dXJuIGxlbmd0aCB8IDBcbn1cblxuZnVuY3Rpb24gU2xvd0J1ZmZlciAobGVuZ3RoKSB7XG4gIGlmICgrbGVuZ3RoICE9IGxlbmd0aCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGVxZXFlcVxuICAgIGxlbmd0aCA9IDBcbiAgfVxuICByZXR1cm4gQnVmZmVyLmFsbG9jKCtsZW5ndGgpXG59XG5cbkJ1ZmZlci5pc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyIChiKSB7XG4gIHJldHVybiBiICE9IG51bGwgJiYgYi5faXNCdWZmZXIgPT09IHRydWUgJiZcbiAgICBiICE9PSBCdWZmZXIucHJvdG90eXBlIC8vIHNvIEJ1ZmZlci5pc0J1ZmZlcihCdWZmZXIucHJvdG90eXBlKSB3aWxsIGJlIGZhbHNlXG59XG5cbkJ1ZmZlci5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAoYSwgYikge1xuICBpZiAoaXNJbnN0YW5jZShhLCBVaW50OEFycmF5KSkgYSA9IEJ1ZmZlci5mcm9tKGEsIGEub2Zmc2V0LCBhLmJ5dGVMZW5ndGgpXG4gIGlmIChpc0luc3RhbmNlKGIsIFVpbnQ4QXJyYXkpKSBiID0gQnVmZmVyLmZyb20oYiwgYi5vZmZzZXQsIGIuYnl0ZUxlbmd0aClcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwiYnVmMVwiLCBcImJ1ZjJcIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheSdcbiAgICApXG4gIH1cblxuICBpZiAoYSA9PT0gYikgcmV0dXJuIDBcblxuICB2YXIgeCA9IGEubGVuZ3RoXG4gIHZhciB5ID0gYi5sZW5ndGhcblxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gTWF0aC5taW4oeCwgeSk7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSB7XG4gICAgICB4ID0gYVtpXVxuICAgICAgeSA9IGJbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG5CdWZmZXIuaXNFbmNvZGluZyA9IGZ1bmN0aW9uIGlzRW5jb2RpbmcgKGVuY29kaW5nKSB7XG4gIHN3aXRjaCAoU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnaGV4JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgY2FzZSAnYmluYXJ5JzpcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgIGNhc2UgJ3VjczInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5CdWZmZXIuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0IChsaXN0LCBsZW5ndGgpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGxpc3QpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBCdWZmZXIuYWxsb2MoMClcbiAgfVxuXG4gIHZhciBpXG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGxlbmd0aCA9IDBcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgICAgbGVuZ3RoICs9IGxpc3RbaV0ubGVuZ3RoXG4gICAgfVxuICB9XG5cbiAgdmFyIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW5ndGgpXG4gIHZhciBwb3MgPSAwXG4gIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIGJ1ZiA9IGxpc3RbaV1cbiAgICBpZiAoaXNJbnN0YW5jZShidWYsIFVpbnQ4QXJyYXkpKSB7XG4gICAgICBpZiAocG9zICsgYnVmLmxlbmd0aCA+IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgQnVmZmVyLmZyb20oYnVmKS5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoXG4gICAgICAgICAgYnVmZmVyLFxuICAgICAgICAgIGJ1ZixcbiAgICAgICAgICBwb3NcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICAgIH0gZWxzZSB7XG4gICAgICBidWYuY29weShidWZmZXIsIHBvcylcbiAgICB9XG4gICAgcG9zICs9IGJ1Zi5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbiAgfVxuICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KHN0cmluZykgfHwgaXNJbnN0YW5jZShzdHJpbmcsIEFycmF5QnVmZmVyKSkge1xuICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgb3IgQXJyYXlCdWZmZXIuICcgK1xuICAgICAgJ1JlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBzdHJpbmdcbiAgICApXG4gIH1cblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbXVzdE1hdGNoID0gKGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSA9PT0gdHJ1ZSlcbiAgaWYgKCFtdXN0TWF0Y2ggJiYgbGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB7XG4gICAgICAgICAgcmV0dXJuIG11c3RNYXRjaCA/IC0xIDogdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgfVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJjaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoaXMgcHJvcGVydHkgaXMgdXNlZCBieSBgQnVmZmVyLmlzQnVmZmVyYCAoYW5kIHRoZSBgaXMtYnVmZmVyYCBucG0gcGFja2FnZSlcbi8vIHRvIGRldGVjdCBhIEJ1ZmZlciBpbnN0YW5jZS4gSXQncyBub3QgcG9zc2libGUgdG8gdXNlIGBpbnN0YW5jZW9mIEJ1ZmZlcmBcbi8vIHJlbGlhYmx5IGluIGEgYnJvd3NlcmlmeSBjb250ZXh0IGJlY2F1c2UgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgZGlmZmVyZW50XG4vLyBjb3BpZXMgb2YgdGhlICdidWZmZXInIHBhY2thZ2UgaW4gdXNlLiBUaGlzIG1ldGhvZCB3b3JrcyBldmVuIGZvciBCdWZmZXJcbi8vIGluc3RhbmNlcyB0aGF0IHdlcmUgY3JlYXRlZCBmcm9tIGFub3RoZXIgY29weSBvZiB0aGUgYGJ1ZmZlcmAgcGFja2FnZS5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzE1NFxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgdmFyIGkgPSBiW25dXG4gIGJbbl0gPSBiW21dXG4gIGJbbV0gPSBpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2ID0gZnVuY3Rpb24gc3dhcDE2ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KVxuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZyA9IEJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmdcblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICB2YXIgc3RyID0gJydcbiAgdmFyIG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgc3RyID0gdGhpcy50b1N0cmluZygnaGV4JywgMCwgbWF4KS5yZXBsYWNlKC8oLnsyfSkvZywgJyQxICcpLnRyaW0oKVxuICBpZiAodGhpcy5sZW5ndGggPiBtYXgpIHN0ciArPSAnIC4uLiAnXG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5pZiAoY3VzdG9tSW5zcGVjdFN5bWJvbCkge1xuICBCdWZmZXIucHJvdG90eXBlW2N1c3RvbUluc3BlY3RTeW1ib2xdID0gQnVmZmVyLnByb3RvdHlwZS5pbnNwZWN0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmIChpc0luc3RhbmNlKHRhcmdldCwgVWludDhBcnJheSkpIHtcbiAgICB0YXJnZXQgPSBCdWZmZXIuZnJvbSh0YXJnZXQsIHRhcmdldC5vZmZzZXQsIHRhcmdldC5ieXRlTGVuZ3RoKVxuICB9XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInRhcmdldFwiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuICcgK1xuICAgICAgJ1JlY2VpdmVkIHR5cGUgJyArICh0eXBlb2YgdGFyZ2V0KVxuICAgIClcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIHZhciB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICB2YXIgeSA9IGVuZCAtIHN0YXJ0XG4gIHZhciBsZW4gPSBNYXRoLm1pbih4LCB5KVxuXG4gIHZhciB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICB2YXIgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgLy8gQ29lcmNlIHRvIE51bWJlci5cbiAgaWYgKG51bWJlcklzTmFOKGJ5dGVPZmZzZXQpKSB7XG4gICAgLy8gYnl0ZU9mZnNldDogaXQgaXQncyB1bmRlZmluZWQsIG51bGwsIE5hTiwgXCJmb29cIiwgZXRjLCBzZWFyY2ggd2hvbGUgYnVmZmVyXG4gICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiAoYnVmZmVyLmxlbmd0aCAtIDEpXG4gIH1cblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldDogbmVnYXRpdmUgb2Zmc2V0cyBzdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICBpZiAoYnl0ZU9mZnNldCA8IDApIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoICsgYnl0ZU9mZnNldFxuICBpZiAoYnl0ZU9mZnNldCA+PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgaWYgKGRpcikgcmV0dXJuIC0xXG4gICAgZWxzZSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCAtIDFcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGlmIChkaXIpIGJ5dGVPZmZzZXQgPSAwXG4gICAgZWxzZSByZXR1cm4gLTFcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSB2YWxcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgfVxuXG4gIC8vIEZpbmFsbHksIHNlYXJjaCBlaXRoZXIgaW5kZXhPZiAoaWYgZGlyIGlzIHRydWUpIG9yIGxhc3RJbmRleE9mXG4gIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsKSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogbG9va2luZyBmb3IgZW1wdHkgc3RyaW5nL2J1ZmZlciBhbHdheXMgZmFpbHNcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAweEZGIC8vIFNlYXJjaCBmb3IgYSBieXRlIHZhbHVlIFswLTI1NV1cbiAgICBpZiAodHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmIChkaXIpIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgW3ZhbF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIHZhciBpbmRleFNpemUgPSAxXG4gIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIHZhciB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIHZhciBpXG4gIGlmIChkaXIpIHtcbiAgICB2YXIgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuXG4gIGlmIChsZW5ndGggPiBzdHJMZW4gLyAyKSB7XG4gICAgbGVuZ3RoID0gc3RyTGVuIC8gMlxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgcGFyc2VkID0gcGFyc2VJbnQoc3RyaW5nLnN1YnN0cihpICogMiwgMiksIDE2KVxuICAgIGlmIChudW1iZXJJc05hTihwYXJzZWQpKSByZXR1cm4gaVxuICAgIGJ1ZltvZmZzZXQgKyBpXSA9IHBhcnNlZFxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIHV0ZjhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjhUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGFzY2lpV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihhc2NpaVRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoID4+PiAwXG4gICAgICBpZiAoZW5jb2RpbmcgPT09IHVuZGVmaW5lZCkgZW5jb2RpbmcgPSAndXRmOCdcbiAgICB9IGVsc2Uge1xuICAgICAgZW5jb2RpbmcgPSBsZW5ndGhcbiAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGFzY2lpV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRilcbiAgICAgID8gNFxuICAgICAgOiAoZmlyc3RCeXRlID4gMHhERilcbiAgICAgICAgICA/IDNcbiAgICAgICAgICA6IChmaXJzdEJ5dGUgPiAweEJGKVxuICAgICAgICAgICAgICA/IDJcbiAgICAgICAgICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IGhleFNsaWNlTG9va3VwVGFibGVbYnVmW2ldXVxuICB9XG4gIHJldHVybiBvdXRcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGJ5dGVzID0gYnVmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHZhciByZXMgPSAnJ1xuICAvLyBJZiBieXRlcy5sZW5ndGggaXMgb2RkLCB0aGUgbGFzdCA4IGJpdHMgbXVzdCBiZSBpZ25vcmVkIChzYW1lIGFzIG5vZGUuanMpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoIC0gMTsgaSArPSAyKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0gKyAoYnl0ZXNbaSArIDFdICogMjU2KSlcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICB2YXIgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKVxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YobmV3QnVmLCBCdWZmZXIucHJvdG90eXBlKVxuXG4gIHJldHVybiBuZXdCdWZcbn1cblxuLypcbiAqIE5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYnVmZmVyIGlzbid0IHRyeWluZyB0byB3cml0ZSBvdXQgb2YgYm91bmRzLlxuICovXG5mdW5jdGlvbiBjaGVja09mZnNldCAob2Zmc2V0LCBleHQsIGxlbmd0aCkge1xuICBpZiAoKG9mZnNldCAlIDEpICE9PSAwIHx8IG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdvZmZzZXQgaXMgbm90IHVpbnQnKVxuICBpZiAob2Zmc2V0ICsgZXh0ID4gbGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCcpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnRMRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludEJFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQ4ID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQxNkxFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDE2QkUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkUgPSBmdW5jdGlvbiByZWFkVUludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MzJMRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQzMkJFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdICogMHgxMDAwMDAwKSArXG4gICAgKCh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgIHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdKSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10gPDwgMjQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnRMRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnRCRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQ4ID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50OCA9IGZ1bmN0aW9uIHdyaXRlVUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDE2TEUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQxNkJFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MzJMRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDMyQkUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgKDggKiBieXRlTGVuZ3RoKSAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgKyAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50OCA9IGZ1bmN0aW9uIHdyaXRlSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlcicpXG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVXNlIGJ1aWx0LWluIHdoZW4gYXZhaWxhYmxlLCBtaXNzaW5nIGZyb20gSUUxMVxuICAgIHRoaXMuY29weVdpdGhpbih0YXJnZXRTdGFydCwgc3RhcnQsIGVuZClcbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZCksXG4gICAgICB0YXJnZXRTdGFydFxuICAgIClcbiAgfVxuXG4gIHJldHVybiBsZW5cbn1cblxuLy8gVXNhZ2U6XG4vLyAgICBidWZmZXIuZmlsbChudW1iZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKGJ1ZmZlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoc3RyaW5nWywgb2Zmc2V0WywgZW5kXV1bLCBlbmNvZGluZ10pXG5CdWZmZXIucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbiBmaWxsICh2YWwsIHN0YXJ0LCBlbmQsIGVuY29kaW5nKSB7XG4gIC8vIEhhbmRsZSBzdHJpbmcgY2FzZXM6XG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIGlmICh0eXBlb2Ygc3RhcnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IHN0YXJ0XG4gICAgICBzdGFydCA9IDBcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZW5kID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBlbmRcbiAgICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gICAgfVxuICAgIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2VuY29kaW5nIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJyAmJiAhQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgfVxuICAgIGlmICh2YWwubGVuZ3RoID09PSAxKSB7XG4gICAgICB2YXIgY29kZSA9IHZhbC5jaGFyQ29kZUF0KDApXG4gICAgICBpZiAoKGVuY29kaW5nID09PSAndXRmOCcgJiYgY29kZSA8IDEyOCkgfHxcbiAgICAgICAgICBlbmNvZGluZyA9PT0gJ2xhdGluMScpIHtcbiAgICAgICAgLy8gRmFzdCBwYXRoOiBJZiBgdmFsYCBmaXRzIGludG8gYSBzaW5nbGUgYnl0ZSwgdXNlIHRoYXQgbnVtZXJpYyB2YWx1ZS5cbiAgICAgICAgdmFsID0gY29kZVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdib29sZWFuJykge1xuICAgIHZhbCA9IE51bWJlcih2YWwpXG4gIH1cblxuICAvLyBJbnZhbGlkIHJhbmdlcyBhcmUgbm90IHNldCB0byBhIGRlZmF1bHQsIHNvIGNhbiByYW5nZSBjaGVjayBlYXJseS5cbiAgaWYgKHN0YXJ0IDwgMCB8fCB0aGlzLmxlbmd0aCA8IHN0YXJ0IHx8IHRoaXMubGVuZ3RoIDwgZW5kKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ091dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXJ0ID0gc3RhcnQgPj4+IDBcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyB0aGlzLmxlbmd0aCA6IGVuZCA+Pj4gMFxuXG4gIGlmICghdmFsKSB2YWwgPSAwXG5cbiAgdmFyIGlcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgdGhpc1tpXSA9IHZhbFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgYnl0ZXMgPSBCdWZmZXIuaXNCdWZmZXIodmFsKVxuICAgICAgPyB2YWxcbiAgICAgIDogQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgICB2YXIgbGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgaWYgKGxlbiA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlIFwiJyArIHZhbCArXG4gICAgICAgICdcIiBpcyBpbnZhbGlkIGZvciBhcmd1bWVudCBcInZhbHVlXCInKVxuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgZW5kIC0gc3RhcnQ7ICsraSkge1xuICAgICAgdGhpc1tpICsgc3RhcnRdID0gYnl0ZXNbaSAlIGxlbl1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09XG5cbnZhciBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXisvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHRha2VzIGVxdWFsIHNpZ25zIGFzIGVuZCBvZiB0aGUgQmFzZTY0IGVuY29kaW5nXG4gIHN0ciA9IHN0ci5zcGxpdCgnPScpWzBdXG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHIudHJpbSgpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgdmFyIGNvZGVQb2ludFxuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcbiAgdmFyIGJ5dGVzID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgdmFyIGMsIGhpLCBsb1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgIGhpID0gYyA+PiA4XG4gICAgbG8gPSBjICUgMjU2XG4gICAgYnl0ZUFycmF5LnB1c2gobG8pXG4gICAgYnl0ZUFycmF5LnB1c2goaGkpXG4gIH1cblxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMgKHN0cikge1xuICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbi8vIEFycmF5QnVmZmVyIG9yIFVpbnQ4QXJyYXkgb2JqZWN0cyBmcm9tIG90aGVyIGNvbnRleHRzIChpLmUuIGlmcmFtZXMpIGRvIG5vdCBwYXNzXG4vLyB0aGUgYGluc3RhbmNlb2ZgIGNoZWNrIGJ1dCB0aGV5IHNob3VsZCBiZSB0cmVhdGVkIGFzIG9mIHRoYXQgdHlwZS5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzE2NlxuZnVuY3Rpb24gaXNJbnN0YW5jZSAob2JqLCB0eXBlKSB7XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiB0eXBlIHx8XG4gICAgKG9iaiAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3RvciAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3Rvci5uYW1lICE9IG51bGwgJiZcbiAgICAgIG9iai5jb25zdHJ1Y3Rvci5uYW1lID09PSB0eXBlLm5hbWUpXG59XG5mdW5jdGlvbiBudW1iZXJJc05hTiAob2JqKSB7XG4gIC8vIEZvciBJRTExIHN1cHBvcnRcbiAgcmV0dXJuIG9iaiAhPT0gb2JqIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59XG5cbi8vIENyZWF0ZSBsb29rdXAgdGFibGUgZm9yIGB0b1N0cmluZygnaGV4JylgXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8yMTlcbnZhciBoZXhTbGljZUxvb2t1cFRhYmxlID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFscGhhYmV0ID0gJzAxMjM0NTY3ODlhYmNkZWYnXG4gIHZhciB0YWJsZSA9IG5ldyBBcnJheSgyNTYpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgIHZhciBpMTYgPSBpICogMTZcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgIHRhYmxlW2kxNiArIGpdID0gYWxwaGFiZXRbaV0gKyBhbHBoYWJldFtqXVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGFibGVcbn0pKClcbiIsICIvKiFcbiBDb3B5cmlnaHQgKGMpIFBlY3VsaWFyIFZlbnR1cmVzLCBMTENcbiovXG5cbmltcG9ydCAqIGFzIGNvcmUgZnJvbSAnd2ViY3J5cHRvLWNvcmUnO1xuaW1wb3J0IHsgQnVmZmVyU291cmNlQ29udmVydGVyIGFzIEJ1ZmZlclNvdXJjZUNvbnZlcnRlciQxIH0gZnJvbSAnd2ViY3J5cHRvLWNvcmUnO1xuZXhwb3J0IHsgQ3J5cHRvS2V5IH0gZnJvbSAnd2ViY3J5cHRvLWNvcmUnO1xuaW1wb3J0IHsgQnVmZmVyIGFzIEJ1ZmZlciQxIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIHByb2Nlc3MgZnJvbSAncHJvY2Vzcyc7XG5pbXBvcnQgeyBfX2RlY29yYXRlIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgSnNvblByb3AsIEpzb25Qcm9wVHlwZXMsIEpzb25TZXJpYWxpemVyLCBKc29uUGFyc2VyIH0gZnJvbSAnQHBlY3VsaWFyL2pzb24tc2NoZW1hJztcbmltcG9ydCB7IENvbnZlcnQsIEJ1ZmZlclNvdXJjZUNvbnZlcnRlciB9IGZyb20gJ3B2dHN1dGlscyc7XG5pbXBvcnQgeyBBc25QYXJzZXIsIEFzblNlcmlhbGl6ZXIsIEFzbkNvbnZlcnQgfSBmcm9tICdAcGVjdWxpYXIvYXNuMS1zY2hlbWEnO1xuXG5jb25zdCBKc29uQmFzZTY0VXJsQ29udmVydGVyID0ge1xuICAgIGZyb21KU09OOiAodmFsdWUpID0+IEJ1ZmZlciQxLmZyb20oQ29udmVydC5Gcm9tQmFzZTY0VXJsKHZhbHVlKSksXG4gICAgdG9KU09OOiAodmFsdWUpID0+IENvbnZlcnQuVG9CYXNlNjRVcmwodmFsdWUpLFxufTtcblxuY2xhc3MgQ3J5cHRvS2V5IGV4dGVuZHMgY29yZS5DcnlwdG9LZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmRhdGEgPSBCdWZmZXIkMS5hbGxvYygwKTtcbiAgICAgICAgdGhpcy5hbGdvcml0aG0gPSB7IG5hbWU6IFwiXCIgfTtcbiAgICAgICAgdGhpcy5leHRyYWN0YWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInNlY3JldFwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgICAgICB0aGlzLmt0eSA9IFwib2N0XCI7XG4gICAgICAgIHRoaXMuYWxnID0gXCJcIjtcbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IG5hbWU6IFwiZXh0XCIsIHR5cGU6IEpzb25Qcm9wVHlwZXMuQm9vbGVhbiwgb3B0aW9uYWw6IHRydWUgfSlcbl0sIENyeXB0b0tleS5wcm90b3R5cGUsIFwiZXh0cmFjdGFibGVcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJrZXlfb3BzXCIsIHR5cGU6IEpzb25Qcm9wVHlwZXMuU3RyaW5nLCByZXBlYXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUgfSlcbl0sIENyeXB0b0tleS5wcm90b3R5cGUsIFwidXNhZ2VzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBKc29uUHJvcCh7IHR5cGU6IEpzb25Qcm9wVHlwZXMuU3RyaW5nIH0pXG5dLCBDcnlwdG9LZXkucHJvdG90eXBlLCBcImt0eVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgSnNvblByb3AoeyB0eXBlOiBKc29uUHJvcFR5cGVzLlN0cmluZywgb3B0aW9uYWw6IHRydWUgfSlcbl0sIENyeXB0b0tleS5wcm90b3R5cGUsIFwiYWxnXCIsIHZvaWQgMCk7XG5cbmNsYXNzIFN5bW1ldHJpY0tleSBleHRlbmRzIENyeXB0b0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMua3R5ID0gXCJvY3RcIjtcbiAgICAgICAgdGhpcy50eXBlID0gXCJzZWNyZXRcIjtcbiAgICB9XG59XG5cbmNsYXNzIEFzeW1tZXRyaWNLZXkgZXh0ZW5kcyBDcnlwdG9LZXkge1xufVxuXG5jbGFzcyBBZXNDcnlwdG9LZXkgZXh0ZW5kcyBTeW1tZXRyaWNLZXkge1xuICAgIGdldCBhbGcoKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5hbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNCQ1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUNCQ2A7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUNUUlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUNUUmA7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUdDTVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUdDTWA7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUtXXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBJHt0aGlzLmFsZ29yaXRobS5sZW5ndGh9S1dgO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DTUFDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBBJHt0aGlzLmFsZ29yaXRobS5sZW5ndGh9Q01BQ2A7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUVDQlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBgQSR7dGhpcy5hbGdvcml0aG0ubGVuZ3RofUVDQmA7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLkFsZ29yaXRobUVycm9yKFwiVW5zdXBwb3J0ZWQgYWxnb3JpdGhtIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0IGFsZyh2YWx1ZSkge1xuICAgIH1cbn1cbl9fZGVjb3JhdGUoW1xuICAgIEpzb25Qcm9wKHsgbmFtZTogXCJrXCIsIGNvbnZlcnRlcjogSnNvbkJhc2U2NFVybENvbnZlcnRlciB9KVxuXSwgQWVzQ3J5cHRvS2V5LnByb3RvdHlwZSwgXCJkYXRhXCIsIHZvaWQgMCk7XG5cbmNsYXNzIEFlc0NyeXB0byB7XG4gICAgc3RhdGljIGFzeW5jIGdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgQWVzQ3J5cHRvS2V5KCk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICBrZXkuZGF0YSA9IGNyeXB0by5yYW5kb21CeXRlcyhhbGdvcml0aG0ubGVuZ3RoID4+IDMpO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImtleTogSXMgbm90IEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpzb25TZXJpYWxpemVyLnRvSlNPTihrZXkpO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShrZXkuZGF0YSkuYnVmZmVyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJyBvciAncmF3J1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGxldCBrZXk7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBBZXNDcnlwdG9LZXkgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgICAgICAgICAga2V5ID0gbmV3IEFlc0NyeXB0b0tleSgpO1xuICAgICAgICAgICAgICAgIGtleS5kYXRhID0gQnVmZmVyJDEuZnJvbShrZXlEYXRhKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycgb3IgJ3JhdydcIik7XG4gICAgICAgIH1cbiAgICAgICAga2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAga2V5LmFsZ29yaXRobS5sZW5ndGggPSBrZXkuZGF0YS5sZW5ndGggPDwgMztcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHN3aXRjaCAoa2V5LmFsZ29yaXRobS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMTI4OlxuICAgICAgICAgICAgY2FzZSAxOTI6XG4gICAgICAgICAgICBjYXNlIDI1NjpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJrZXlEYXRhOiBJcyB3cm9uZyBrZXkgbGVuZ3RoXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmNyeXB0QWVzQ0JDKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtQ1RSXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdEFlc0NUUihhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUdDTVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHRBZXNHQ00oYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1LV1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHRBZXNLVyhhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUVDQlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuY3J5cHRBZXNFQ0IoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluc3RhbmNlb2YgQWVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwia2V5OiBJcyBub3QgQWVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0QWVzQ0JDKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJBRVMtQ1RSXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdEFlc0NUUihhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUdDTVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHRBZXNHQ00oYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgY2FzZSBcIkFFUy1LV1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHRBZXNLVyhhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiQUVTLUVDQlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY3J5cHRBZXNFQ0IoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHRBZXNDQkMoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGBhZXMtJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0tY2JjYCwga2V5LmRhdGEsIG5ldyBVaW50OEFycmF5KGFsZ29yaXRobS5pdikpO1xuICAgICAgICBsZXQgZW5jID0gY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZW5jID0gQnVmZmVyJDEuY29uY2F0KFtlbmMsIGNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdEFlc0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KGBhZXMtJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0tY2JjYCwga2V5LmRhdGEsIG5ldyBVaW50OEFycmF5KGFsZ29yaXRobS5pdikpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBkZWMgPSBCdWZmZXIkMS5jb25jYXQoW2RlYywgZGVjaXBoZXIuZmluYWwoKV0pO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGVjKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0QWVzQ1RSKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihgYWVzLSR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LWN0cmAsIGtleS5kYXRhLCBCdWZmZXIkMS5mcm9tKGFsZ29yaXRobS5jb3VudGVyKSk7XG4gICAgICAgIGxldCBlbmMgPSBjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBlbmMgPSBCdWZmZXIkMS5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0QWVzQ1RSKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1jdHJgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLmNvdW50ZXIpKTtcbiAgICAgICAgbGV0IGRlYyA9IGRlY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZGVjID0gQnVmZmVyJDEuY29uY2F0KFtkZWMsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdEFlc0dDTShhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1nY21gLCBrZXkuZGF0YSwgQnVmZmVyJDEuZnJvbShhbGdvcml0aG0uaXYpLCB7XG4gICAgICAgICAgICBhdXRoVGFnTGVuZ3RoOiAoYWxnb3JpdGhtLnRhZ0xlbmd0aCB8fCAxMjgpID4+IDMsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoYWxnb3JpdGhtLmFkZGl0aW9uYWxEYXRhKSB7XG4gICAgICAgICAgICBjaXBoZXIuc2V0QUFEKEJ1ZmZlciQxLmZyb20oYWxnb3JpdGhtLmFkZGl0aW9uYWxEYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGVuYyA9IGNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGVuYyA9IEJ1ZmZlciQxLmNvbmNhdChbZW5jLCBjaXBoZXIuZmluYWwoKSwgY2lwaGVyLmdldEF1dGhUYWcoKV0pO1xuICAgICAgICBjb25zdCByZXMgPSBuZXcgVWludDhBcnJheShlbmMpLmJ1ZmZlcjtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHRBZXNHQ00oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgdGFnTGVuZ3RoID0gKGFsZ29yaXRobS50YWdMZW5ndGggfHwgMTI4KSA+PiAzO1xuICAgICAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KGBhZXMtJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0tZ2NtYCwga2V5LmRhdGEsIG5ldyBVaW50OEFycmF5KGFsZ29yaXRobS5pdiksIHtcbiAgICAgICAgICAgIGF1dGhUYWdMZW5ndGg6IHRhZ0xlbmd0aCxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVuYyA9IGRhdGEuc2xpY2UoMCwgZGF0YS5sZW5ndGggLSB0YWdMZW5ndGgpO1xuICAgICAgICBjb25zdCB0YWcgPSBkYXRhLnNsaWNlKGRhdGEubGVuZ3RoIC0gdGFnTGVuZ3RoKTtcbiAgICAgICAgaWYgKGFsZ29yaXRobS5hZGRpdGlvbmFsRGF0YSkge1xuICAgICAgICAgICAgZGVjaXBoZXIuc2V0QUFEKEJ1ZmZlciQxLmZyb20oYWxnb3JpdGhtLmFkZGl0aW9uYWxEYXRhKSk7XG4gICAgICAgIH1cbiAgICAgICAgZGVjaXBoZXIuc2V0QXV0aFRhZyh0YWcpO1xuICAgICAgICBsZXQgZGVjID0gZGVjaXBoZXIudXBkYXRlKGVuYyk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlciQxLmNvbmNhdChbZGVjLCBkZWNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkZWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHRBZXNLVyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoYGlkLWFlcyR7a2V5LmFsZ29yaXRobS5sZW5ndGh9LXdyYXBgLCBrZXkuZGF0YSwgdGhpcy5BRVNfS1dfSVYpO1xuICAgICAgICBsZXQgZW5jID0gY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZW5jID0gQnVmZmVyJDEuY29uY2F0KFtlbmMsIGNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShlbmMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHRBZXNLVyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KGBpZC1hZXMke2tleS5hbGdvcml0aG0ubGVuZ3RofS13cmFwYCwga2V5LmRhdGEsIHRoaXMuQUVTX0tXX0lWKTtcbiAgICAgICAgbGV0IGRlYyA9IGRlY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZGVjID0gQnVmZmVyJDEuY29uY2F0KFtkZWMsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdEFlc0VDQihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoYGFlcy0ke2tleS5hbGdvcml0aG0ubGVuZ3RofS1lY2JgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoMCkpO1xuICAgICAgICBsZXQgZW5jID0gY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZW5jID0gQnVmZmVyJDEuY29uY2F0KFtlbmMsIGNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IG5ldyBVaW50OEFycmF5KGVuYykuYnVmZmVyO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVjcnlwdEFlc0VDQihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KGBhZXMtJHtrZXkuYWxnb3JpdGhtLmxlbmd0aH0tZWNiYCwga2V5LmRhdGEsIG5ldyBVaW50OEFycmF5KDApKTtcbiAgICAgICAgbGV0IGRlYyA9IGRlY2lwaGVyLnVwZGF0ZShkYXRhKTtcbiAgICAgICAgZGVjID0gQnVmZmVyJDEuY29uY2F0KFtkZWMsIGRlY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbn1cbkFlc0NyeXB0by5BRVNfS1dfSVYgPSBCdWZmZXIkMS5mcm9tKFwiQTZBNkE2QTZBNkE2QTZBNlwiLCBcImhleFwiKTtcblxuY29uc3Qga2V5U3RvcmFnZSA9IG5ldyBXZWFrTWFwKCk7XG5mdW5jdGlvbiBnZXRDcnlwdG9LZXkoa2V5KSB7XG4gICAgY29uc3QgcmVzID0ga2V5U3RvcmFnZS5nZXQoa2V5KTtcbiAgICBpZiAoIXJlcykge1xuICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcIkNhbm5vdCBnZXQgQ3J5cHRvS2V5IGZyb20gc2VjdXJlIHN0b3JhZ2VcIik7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBzZXRDcnlwdG9LZXkodmFsdWUpIHtcbiAgICBjb25zdCBrZXkgPSBjb3JlLkNyeXB0b0tleS5jcmVhdGUodmFsdWUuYWxnb3JpdGhtLCB2YWx1ZS50eXBlLCB2YWx1ZS5leHRyYWN0YWJsZSwgdmFsdWUudXNhZ2VzKTtcbiAgICBPYmplY3QuZnJlZXplKGtleSk7XG4gICAga2V5U3RvcmFnZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgcmV0dXJuIGtleTtcbn1cblxuY2xhc3MgQWVzQ2JjUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkFlc0NiY1Byb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY29uc3QgemVybyA9IEJ1ZmZlciQxLmZyb20oWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdKTtcbmNvbnN0IHJiID0gQnVmZmVyJDEuZnJvbShbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1XSk7XG5jb25zdCBibG9ja1NpemUgPSAxNjtcbmZ1bmN0aW9uIGJpdFNoaWZ0TGVmdChidWZmZXIpIHtcbiAgICBjb25zdCBzaGlmdGVkID0gQnVmZmVyJDEuYWxsb2MoYnVmZmVyLmxlbmd0aCk7XG4gICAgY29uc3QgbGFzdCA9IGJ1ZmZlci5sZW5ndGggLSAxO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsYXN0OyBpbmRleCsrKSB7XG4gICAgICAgIHNoaWZ0ZWRbaW5kZXhdID0gYnVmZmVyW2luZGV4XSA8PCAxO1xuICAgICAgICBpZiAoYnVmZmVyW2luZGV4ICsgMV0gJiAweDgwKSB7XG4gICAgICAgICAgICBzaGlmdGVkW2luZGV4XSArPSAweDAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNoaWZ0ZWRbbGFzdF0gPSBidWZmZXJbbGFzdF0gPDwgMTtcbiAgICByZXR1cm4gc2hpZnRlZDtcbn1cbmZ1bmN0aW9uIHhvcihhLCBiKSB7XG4gICAgY29uc3QgbGVuZ3RoID0gTWF0aC5taW4oYS5sZW5ndGgsIGIubGVuZ3RoKTtcbiAgICBjb25zdCBvdXRwdXQgPSBCdWZmZXIkMS5hbGxvYyhsZW5ndGgpO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgb3V0cHV0W2luZGV4XSA9IGFbaW5kZXhdIF4gYltpbmRleF07XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59XG5mdW5jdGlvbiBhZXMoa2V5LCBtZXNzYWdlKSB7XG4gICAgY29uc3QgY2lwaGVyID0gY3J5cHRvLmNyZWF0ZUNpcGhlcml2KGBhZXMke2tleS5sZW5ndGggPDwgM31gLCBrZXksIHplcm8pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGNpcGhlci51cGRhdGUobWVzc2FnZSk7XG4gICAgY2lwaGVyLmZpbmFsKCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldE1lc3NhZ2VCbG9jayhtZXNzYWdlLCBibG9ja0luZGV4KSB7XG4gICAgY29uc3QgYmxvY2sgPSBCdWZmZXIkMS5hbGxvYyhibG9ja1NpemUpO1xuICAgIGNvbnN0IHN0YXJ0ID0gYmxvY2tJbmRleCAqIGJsb2NrU2l6ZTtcbiAgICBjb25zdCBlbmQgPSBzdGFydCArIGJsb2NrU2l6ZTtcbiAgICBtZXNzYWdlLmNvcHkoYmxvY2ssIDAsIHN0YXJ0LCBlbmQpO1xuICAgIHJldHVybiBibG9jaztcbn1cbmZ1bmN0aW9uIGdldFBhZGRlZE1lc3NhZ2VCbG9jayhtZXNzYWdlLCBibG9ja0luZGV4KSB7XG4gICAgY29uc3QgYmxvY2sgPSBCdWZmZXIkMS5hbGxvYyhibG9ja1NpemUpO1xuICAgIGNvbnN0IHN0YXJ0ID0gYmxvY2tJbmRleCAqIGJsb2NrU2l6ZTtcbiAgICBjb25zdCBlbmQgPSBtZXNzYWdlLmxlbmd0aDtcbiAgICBibG9jay5maWxsKDApO1xuICAgIG1lc3NhZ2UuY29weShibG9jaywgMCwgc3RhcnQsIGVuZCk7XG4gICAgYmxvY2tbZW5kIC0gc3RhcnRdID0gMHg4MDtcbiAgICByZXR1cm4gYmxvY2s7XG59XG5mdW5jdGlvbiBnZW5lcmF0ZVN1YmtleXMoa2V5KSB7XG4gICAgY29uc3QgbCA9IGFlcyhrZXksIHplcm8pO1xuICAgIGxldCBzdWJrZXkxID0gYml0U2hpZnRMZWZ0KGwpO1xuICAgIGlmIChsWzBdICYgMHg4MCkge1xuICAgICAgICBzdWJrZXkxID0geG9yKHN1YmtleTEsIHJiKTtcbiAgICB9XG4gICAgbGV0IHN1YmtleTIgPSBiaXRTaGlmdExlZnQoc3Via2V5MSk7XG4gICAgaWYgKHN1YmtleTFbMF0gJiAweDgwKSB7XG4gICAgICAgIHN1YmtleTIgPSB4b3Ioc3Via2V5MiwgcmIpO1xuICAgIH1cbiAgICByZXR1cm4geyBzdWJrZXkxLCBzdWJrZXkyIH07XG59XG5mdW5jdGlvbiBhZXNDbWFjKGtleSwgbWVzc2FnZSkge1xuICAgIGNvbnN0IHN1YmtleXMgPSBnZW5lcmF0ZVN1YmtleXMoa2V5KTtcbiAgICBsZXQgYmxvY2tDb3VudCA9IE1hdGguY2VpbChtZXNzYWdlLmxlbmd0aCAvIGJsb2NrU2l6ZSk7XG4gICAgbGV0IGxhc3RCbG9ja0NvbXBsZXRlRmxhZztcbiAgICBsZXQgbGFzdEJsb2NrO1xuICAgIGlmIChibG9ja0NvdW50ID09PSAwKSB7XG4gICAgICAgIGJsb2NrQ291bnQgPSAxO1xuICAgICAgICBsYXN0QmxvY2tDb21wbGV0ZUZsYWcgPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxhc3RCbG9ja0NvbXBsZXRlRmxhZyA9IChtZXNzYWdlLmxlbmd0aCAlIGJsb2NrU2l6ZSA9PT0gMCk7XG4gICAgfVxuICAgIGNvbnN0IGxhc3RCbG9ja0luZGV4ID0gYmxvY2tDb3VudCAtIDE7XG4gICAgaWYgKGxhc3RCbG9ja0NvbXBsZXRlRmxhZykge1xuICAgICAgICBsYXN0QmxvY2sgPSB4b3IoZ2V0TWVzc2FnZUJsb2NrKG1lc3NhZ2UsIGxhc3RCbG9ja0luZGV4KSwgc3Via2V5cy5zdWJrZXkxKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxhc3RCbG9jayA9IHhvcihnZXRQYWRkZWRNZXNzYWdlQmxvY2sobWVzc2FnZSwgbGFzdEJsb2NrSW5kZXgpLCBzdWJrZXlzLnN1YmtleTIpO1xuICAgIH1cbiAgICBsZXQgeCA9IHplcm87XG4gICAgbGV0IHk7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxhc3RCbG9ja0luZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIHkgPSB4b3IoeCwgZ2V0TWVzc2FnZUJsb2NrKG1lc3NhZ2UsIGluZGV4KSk7XG4gICAgICAgIHggPSBhZXMoa2V5LCB5KTtcbiAgICB9XG4gICAgeSA9IHhvcihsYXN0QmxvY2ssIHgpO1xuICAgIHJldHVybiBhZXMoa2V5LCB5KTtcbn1cbmNsYXNzIEFlc0NtYWNQcm92aWRlciBleHRlbmRzIGNvcmUuQWVzQ21hY1Byb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYWVzQ21hYyhnZXRDcnlwdG9LZXkoa2V5KS5kYXRhLCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHJlc3VsdCkuYnVmZmVyO1xuICAgIH1cbiAgICBhc3luYyBvblZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZTIgPSBhd2FpdCB0aGlzLnNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gQnVmZmVyJDEuZnJvbShzaWduYXR1cmUpLmNvbXBhcmUoQnVmZmVyJDEuZnJvbShzaWduYXR1cmUyKSkgPT09IDA7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzQ3RyUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkFlc0N0clByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzR2NtUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkFlc0djbVByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBBZXNDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbGVuZ3RoOiBhbGdvcml0aG0ubGVuZ3RoLFxuICAgICAgICB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvbkVuY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5lbmNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZGVjcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZXhwb3J0S2V5KGZvcm1hdCwgZ2V0Q3J5cHRvS2V5KGtleSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBBZXNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyBuYW1lOiBhbGdvcml0aG0ubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShyZXMpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEFlc0NyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEFlc0NyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgQWVzS3dQcm92aWRlciBleHRlbmRzIGNvcmUuQWVzS3dQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgQWVzQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDogYWxnb3JpdGhtLmxlbmd0aCxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkocmVzKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEFlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IGFsZ29yaXRobS5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KHJlcyk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEFlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEFlc0VjYlByb3ZpZGVyIGV4dGVuZHMgY29yZS5BZXNFY2JQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgQWVzQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDogYWxnb3JpdGhtLmxlbmd0aCxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBBZXNDcnlwdG8uZW5jcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmRlY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gQWVzQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgQWVzQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgbmFtZTogYWxnb3JpdGhtLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkocmVzKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBBZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBBZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIERlc0NyeXB0b0tleSBleHRlbmRzIFN5bW1ldHJpY0tleSB7XG4gICAgZ2V0IGFsZygpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJERVMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBERVMtQ0JDYDtcbiAgICAgICAgICAgIGNhc2UgXCJERVMtRURFMy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gYDNERVMtQ0JDYDtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQWxnb3JpdGhtRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGdvcml0aG0gbmFtZVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXQgYWxnKHZhbHVlKSB7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImtcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQ29udmVydGVyIH0pXG5dLCBEZXNDcnlwdG9LZXkucHJvdG90eXBlLCBcImRhdGFcIiwgdm9pZCAwKTtcblxuY2xhc3MgRGVzQ3J5cHRvIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBEZXNDcnlwdG9LZXkoKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIGtleS5kYXRhID0gY3J5cHRvLnJhbmRvbUJ5dGVzKGFsZ29yaXRobS5sZW5ndGggPj4gMyk7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBleHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIHJldHVybiBKc29uU2VyaWFsaXplci50b0pTT04oa2V5KTtcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoa2V5LmRhdGEpLmJ1ZmZlcjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycgb3IgJ3JhdydcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBsZXQga2V5O1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihrZXlEYXRhLCB7IHRhcmdldFNjaGVtYTogRGVzQ3J5cHRvS2V5IH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOlxuICAgICAgICAgICAgICAgIGtleSA9IG5ldyBEZXNDcnlwdG9LZXkoKTtcbiAgICAgICAgICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlciQxLmZyb20oa2V5RGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snIG9yICdyYXcnXCIpO1xuICAgICAgICB9XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJERVMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdERlc0NCQyhhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBjYXNlIFwiREVTLUVERTMtQ0JDXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdERlc0VERTNDQkMoYWxnb3JpdGhtLCBrZXksIEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluc3RhbmNlb2YgRGVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwia2V5OiBJcyBub3QgRGVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIkRFUy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0RGVzQ0JDKGFsZ29yaXRobSwga2V5LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgICAgIGNhc2UgXCJERVMtRURFMy1DQkNcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0RGVzRURFM0NCQyhhbGdvcml0aG0sIGtleSwgQnVmZmVyJDEuZnJvbShkYXRhKSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZW5jcnlwdERlc0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjaXBoZXIgPSBjcnlwdG8uY3JlYXRlQ2lwaGVyaXYoYGRlcy1jYmNgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGxldCBlbmMgPSBjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBlbmMgPSBCdWZmZXIkMS5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0RGVzQ0JDKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGRlY2lwaGVyID0gY3J5cHRvLmNyZWF0ZURlY2lwaGVyaXYoYGRlcy1jYmNgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlciQxLmNvbmNhdChbZGVjLCBkZWNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkZWMpLmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGVuY3J5cHREZXNFREUzQ0JDKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNpcGhlciA9IGNyeXB0by5jcmVhdGVDaXBoZXJpdihgZGVzLWVkZTMtY2JjYCwga2V5LmRhdGEsIEJ1ZmZlciQxLmZyb20oYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGxldCBlbmMgPSBjaXBoZXIudXBkYXRlKGRhdGEpO1xuICAgICAgICBlbmMgPSBCdWZmZXIkMS5jb25jYXQoW2VuYywgY2lwaGVyLmZpbmFsKCldKTtcbiAgICAgICAgY29uc3QgcmVzID0gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBkZWNyeXB0RGVzRURFM0NCQyhhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBkZWNpcGhlciA9IGNyeXB0by5jcmVhdGVEZWNpcGhlcml2KGBkZXMtZWRlMy1jYmNgLCBrZXkuZGF0YSwgbmV3IFVpbnQ4QXJyYXkoYWxnb3JpdGhtLml2KSk7XG4gICAgICAgIGxldCBkZWMgPSBkZWNpcGhlci51cGRhdGUoZGF0YSk7XG4gICAgICAgIGRlYyA9IEJ1ZmZlciQxLmNvbmNhdChbZGVjLCBkZWNpcGhlci5maW5hbCgpXSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkZWMpLmJ1ZmZlcjtcbiAgICB9XG59XG5cbmNsYXNzIERlc0NiY1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5EZXNQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMua2V5U2l6ZUJpdHMgPSA2NDtcbiAgICAgICAgdGhpcy5pdlNpemUgPSA4O1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkRFUy1DQkNcIjtcbiAgICB9XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgRGVzQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDogdGhpcy5rZXlTaXplQml0cyxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25FbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBEZXNDcnlwdG8uZW5jcnlwdChhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRGVzQ3J5cHRvLmRlY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gRGVzQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgRGVzQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgbmFtZTogdGhpcy5uYW1lLCBsZW5ndGg6IHRoaXMua2V5U2l6ZUJpdHMgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIGlmIChrZXkuZGF0YS5sZW5ndGggIT09ICh0aGlzLmtleVNpemVCaXRzID4+IDMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImtleURhdGE6IFdyb25nIGtleSBzaXplXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBEZXNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgYSBEZXNDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIERlc0VkZTNDYmNQcm92aWRlciBleHRlbmRzIGNvcmUuRGVzUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLmtleVNpemVCaXRzID0gMTkyO1xuICAgICAgICB0aGlzLml2U2l6ZSA9IDg7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiREVTLUVERTMtQ0JDXCI7XG4gICAgfVxuICAgIGFzeW5jIG9uR2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IERlc0NyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBsZW5ndGg6IHRoaXMua2V5U2l6ZUJpdHMsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRGVzQ3J5cHRvLmVuY3J5cHQoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5kZWNyeXB0KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIERlc0NyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IERlc0NyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IG5hbWU6IHRoaXMubmFtZSwgbGVuZ3RoOiB0aGlzLmtleVNpemVCaXRzIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICBpZiAoa2V5LmRhdGEubGVuZ3RoICE9PSAodGhpcy5rZXlTaXplQml0cyA+PiAzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJrZXlEYXRhOiBXcm9uZyBrZXkgc2l6ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgRGVzQ3J5cHRvS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IGEgRGVzQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXRKd2tBbGdvcml0aG0oYWxnb3JpdGhtKSB7XG4gICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgIGNhc2UgXCJSU0EtT0FFUFwiOiB7XG4gICAgICAgICAgICBjb25zdCBtZFNpemUgPSAvKFxcZCspJC8uZXhlYyhhbGdvcml0aG0uaGFzaC5uYW1lKVsxXTtcbiAgICAgICAgICAgIHJldHVybiBgUlNBLU9BRVAke21kU2l6ZSAhPT0gXCIxXCIgPyBgLSR7bWRTaXplfWAgOiBcIlwifWA7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIlJTQVNTQS1QS0NTMS1WMV81XCI6XG4gICAgICAgICAgICByZXR1cm4gYFJTJHsvKFxcZCspJC8uZXhlYyhhbGdvcml0aG0uaGFzaC5uYW1lKVsxXX1gO1xuICAgICAgICBjYXNlIFwiUlNBLVBTU1wiOlxuICAgICAgICAgICAgcmV0dXJuIGBQUyR7LyhcXGQrKSQvLmV4ZWMoYWxnb3JpdGhtLmhhc2gubmFtZSlbMV19YDtcbiAgICAgICAgY2FzZSBcIlJTQS1QS0NTMVwiOlxuICAgICAgICAgICAgcmV0dXJuIGBSUzFgO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhUHJpdmF0ZUtleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInByaXZhdGVcIjtcbiAgICB9XG4gICAgZ2V0S2V5KCkge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKHRoaXMuZGF0YSwgY29yZS5hc24xLlByaXZhdGVLZXlJbmZvKTtcbiAgICAgICAgcmV0dXJuIEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnByaXZhdGVLZXksIGNvcmUuYXNuMS5Sc2FQcml2YXRlS2V5KTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSgpO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAga3R5OiBcIlJTQVwiLFxuICAgICAgICAgICAgYWxnOiBnZXRKd2tBbGdvcml0aG0odGhpcy5hbGdvcml0aG0pLFxuICAgICAgICAgICAga2V5X29wczogdGhpcy51c2FnZXMsXG4gICAgICAgICAgICBleHQ6IHRoaXMuZXh0cmFjdGFibGUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGpzb24sIEpzb25TZXJpYWxpemVyLnRvSlNPTihrZXkpKTtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBjb25zdCBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGpzb24sIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuUnNhUHJpdmF0ZUtleSB9KTtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IFwiMS4yLjg0MC4xMTM1NDkuMS4xLjFcIjtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBudWxsO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXkgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXkpO1xuICAgICAgICB0aGlzLmRhdGEgPSBCdWZmZXIkMS5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICB9XG59XG5cbmNsYXNzIFJzYVB1YmxpY0tleSBleHRlbmRzIEFzeW1tZXRyaWNLZXkge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSBcInB1YmxpY1wiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wdWJsaWNLZXksIGNvcmUuYXNuMS5Sc2FQdWJsaWNLZXkpO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0S2V5KCk7XG4gICAgICAgIGNvbnN0IGpzb24gPSB7XG4gICAgICAgICAgICBrdHk6IFwiUlNBXCIsXG4gICAgICAgICAgICBhbGc6IGdldEp3a0FsZ29yaXRobSh0aGlzLmFsZ29yaXRobSksXG4gICAgICAgICAgICBrZXlfb3BzOiB0aGlzLnVzYWdlcyxcbiAgICAgICAgICAgIGV4dDogdGhpcy5leHRyYWN0YWJsZSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oanNvbiwgSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSkpO1xuICAgIH1cbiAgICBmcm9tSlNPTihqc29uKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oanNvbiwgeyB0YXJnZXRTY2hlbWE6IGNvcmUuYXNuMS5Sc2FQdWJsaWNLZXkgfSk7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlB1YmxpY0tleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjExMzU0OS4xLjEuMVwiO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gbnVsbDtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXkgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXkpO1xuICAgICAgICB0aGlzLmRhdGEgPSBCdWZmZXIkMS5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICB9XG59XG5cbmNsYXNzIFJzYUNyeXB0byB7XG4gICAgc3RhdGljIGFzeW5jIGdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gbmV3IFJzYVByaXZhdGVLZXkoKTtcbiAgICAgICAgcHJpdmF0ZUtleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIHByaXZhdGVLZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAgcHJpdmF0ZUtleS51c2FnZXMgPSBrZXlVc2FnZXMuZmlsdGVyKCh1c2FnZSkgPT4gdGhpcy5wcml2YXRlS2V5VXNhZ2VzLmluZGV4T2YodXNhZ2UpICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IHB1YmxpY0tleSA9IG5ldyBSc2FQdWJsaWNLZXkoKTtcbiAgICAgICAgcHVibGljS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHVibGljS2V5LmV4dHJhY3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgcHVibGljS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnB1YmxpY0tleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBwdWJsaWNFeHBvbmVudCA9IEJ1ZmZlciQxLmNvbmNhdChbXG4gICAgICAgICAgICBCdWZmZXIkMS5hbGxvYyg0IC0gYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50LmJ5dGVMZW5ndGgsIDApLFxuICAgICAgICAgICAgQnVmZmVyJDEuZnJvbShhbGdvcml0aG0ucHVibGljRXhwb25lbnQpLFxuICAgICAgICBdKS5yZWFkSW50MzJCRSgwKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IGNyeXB0by5nZW5lcmF0ZUtleVBhaXJTeW5jKFwicnNhXCIsIHtcbiAgICAgICAgICAgIG1vZHVsdXNMZW5ndGg6IGFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoLFxuICAgICAgICAgICAgcHVibGljRXhwb25lbnQsXG4gICAgICAgICAgICBwdWJsaWNLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNwa2lcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcml2YXRlS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJwa2NzOFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHByaXZhdGVLZXkuZGF0YSA9IGtleXMucHJpdmF0ZUtleTtcbiAgICAgICAgcHVibGljS2V5LmRhdGEgPSBrZXlzLnB1YmxpY0tleTtcbiAgICAgICAgY29uc3QgcmVzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleSxcbiAgICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpzb25TZXJpYWxpemVyLnRvSlNPTihrZXkpO1xuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShrZXkuZGF0YSkuYnVmZmVyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3BrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBqd2sgPSBrZXlEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChqd2suZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuUnNhUHJpdmF0ZUtleSB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuUnNhUHVibGljS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHVibGljS2V5LCBjb3JlLmFzbjEuUnNhUHVibGljS2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnByaXZhdGVLZXksIGNvcmUuYXNuMS5Sc2FQcml2YXRlS2V5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdwa2NzOCcgb3IgJ3Nwa2knXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBzaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlJTQS1QU1NcIjpcbiAgICAgICAgICAgIGNhc2UgXCJSU0FTU0EtUEtDUzEtVjFfNVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25Sc2EoYWxnb3JpdGhtLCBrZXksIGRhdGEpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlJTQS1QU1NcIjpcbiAgICAgICAgICAgIGNhc2UgXCJSU0FTU0EtUEtDUzEtVjFfNVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnZlcmlmeVNTQShhbGdvcml0aG0sIGtleSwgZGF0YSwgc2lnbmF0dXJlKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJhbGdvcml0aG06IElzIG5vdCByZWNvZ25pemVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBlbmNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnb3JpdGhtLm5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcIlJTQS1PQUVQXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jcnlwdE9BRVAoYWxnb3JpdGhtLCBrZXksIGRhdGEpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobTogSXMgbm90IHJlY29nbml6ZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlY3J5cHQoYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiUlNBLU9BRVBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNyeXB0T0FFUChhbGdvcml0aG0sIGtleSwgZGF0YSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiYWxnb3JpdGhtOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjExMzU0OS4xLjEuMVwiO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IG51bGw7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGFzbktleSk7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBSc2FQcml2YXRlS2V5KCk7XG4gICAgICAgIGtleS5kYXRhID0gQnVmZmVyJDEuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBPYmplY3QuYXNzaWduKHt9LCBhbGdvcml0aG0pO1xuICAgICAgICBrZXkuYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50ID0gbmV3IFVpbnQ4QXJyYXkoYXNuS2V5LnB1YmxpY0V4cG9uZW50KTtcbiAgICAgICAga2V5LmFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoID0gYXNuS2V5Lm1vZHVsdXMuYnl0ZUxlbmd0aCA8PCAzO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IFwiMS4yLjg0MC4xMTM1NDkuMS4xLjFcIjtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IG51bGw7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5ID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUoYXNuS2V5KTtcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IFJzYVB1YmxpY0tleSgpO1xuICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gT2JqZWN0LmFzc2lnbih7fSwgYWxnb3JpdGhtKTtcbiAgICAgICAga2V5LmFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCA9IG5ldyBVaW50OEFycmF5KGFzbktleS5wdWJsaWNFeHBvbmVudCk7XG4gICAgICAgIGtleS5hbGdvcml0aG0ubW9kdWx1c0xlbmd0aCA9IGFzbktleS5tb2R1bHVzLmJ5dGVMZW5ndGggPDwgMztcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRDcnlwdG9BbGdvcml0aG0oYWxnKSB7XG4gICAgICAgIHN3aXRjaCAoYWxnLmhhc2gubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSU0EtU0hBMVwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS0yNTZcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSU0EtU0hBMjU2XCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTM4NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEEzODRcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtNTEyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUlNBLVNIQTUxMlwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQTMtMjU2XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiUlNBLVNIQTMtMjU2XCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy0zODRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJSU0EtU0hBMy0zODRcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTUxMlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcIlJTQS1TSEEzLTUxMlwiO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImFsZ29yaXRobS5oYXNoOiBJcyBub3QgcmVjb2duaXplZFwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgc2lnblJzYShhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSB0aGlzLmdldENyeXB0b0FsZ29yaXRobShrZXkuYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3Qgc2lnbmVyID0gY3J5cHRvLmNyZWF0ZVNpZ24oY3J5cHRvQWxnKTtcbiAgICAgICAgc2lnbmVyLnVwZGF0ZShCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgaWYgKCFrZXkucGVtKSB7XG4gICAgICAgICAgICBrZXkucGVtID0gYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleToga2V5LnBlbSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkgPT09IFwiUlNBLVBTU1wiKSB7XG4gICAgICAgICAgICBvcHRpb25zLnBhZGRpbmcgPSBjcnlwdG8uY29uc3RhbnRzLlJTQV9QS0NTMV9QU1NfUEFERElORztcbiAgICAgICAgICAgIG9wdGlvbnMuc2FsdExlbmd0aCA9IGFsZ29yaXRobS5zYWx0TGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IHNpZ25lci5zaWduKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyB2ZXJpZnlTU0EoYWxnb3JpdGhtLCBrZXksIGRhdGEsIHNpZ25hdHVyZSkge1xuICAgICAgICBjb25zdCBjcnlwdG9BbGcgPSB0aGlzLmdldENyeXB0b0FsZ29yaXRobShrZXkuYWxnb3JpdGhtKTtcbiAgICAgICAgY29uc3Qgc2lnbmVyID0gY3J5cHRvLmNyZWF0ZVZlcmlmeShjcnlwdG9BbGcpO1xuICAgICAgICBzaWduZXIudXBkYXRlKEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICBpZiAoIWtleS5wZW0pIHtcbiAgICAgICAgICAgIGtleS5wZW0gPSBgLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cXG4ke2tleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleToga2V5LnBlbSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkgPT09IFwiUlNBLVBTU1wiKSB7XG4gICAgICAgICAgICBvcHRpb25zLnBhZGRpbmcgPSBjcnlwdG8uY29uc3RhbnRzLlJTQV9QS0NTMV9QU1NfUEFERElORztcbiAgICAgICAgICAgIG9wdGlvbnMuc2FsdExlbmd0aCA9IGFsZ29yaXRobS5zYWx0TGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9rID0gc2lnbmVyLnZlcmlmeShvcHRpb25zLCBzaWduYXR1cmUpO1xuICAgICAgICByZXR1cm4gb2s7XG4gICAgfVxuICAgIHN0YXRpYyBlbmNyeXB0T0FFUChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAga2V5OiBgLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cXG4ke2tleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLWAsXG4gICAgICAgICAgICBwYWRkaW5nOiBjcnlwdG8uY29uc3RhbnRzLlJTQV9QS0NTMV9PQUVQX1BBRERJTkcsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhbGdvcml0aG0ubGFiZWwpIDtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGNyeXB0by5wdWJsaWNFbmNyeXB0KG9wdGlvbnMsIGRhdGEpKS5idWZmZXI7XG4gICAgfVxuICAgIHN0YXRpYyBkZWNyeXB0T0FFUChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAga2V5OiBgLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tYCxcbiAgICAgICAgICAgIHBhZGRpbmc6IGNyeXB0by5jb25zdGFudHMuUlNBX1BLQ1MxX09BRVBfUEFERElORyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGFsZ29yaXRobS5sYWJlbCkgO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvLnByaXZhdGVEZWNyeXB0KG9wdGlvbnMsIGRhdGEpKS5idWZmZXI7XG4gICAgfVxufVxuUnNhQ3J5cHRvLnB1YmxpY0tleVVzYWdlcyA9IFtcInZlcmlmeVwiLCBcImVuY3J5cHRcIiwgXCJ3cmFwS2V5XCJdO1xuUnNhQ3J5cHRvLnByaXZhdGVLZXlVc2FnZXMgPSBbXCJzaWduXCIsIFwiZGVjcnlwdFwiLCBcInVud3JhcEtleVwiXTtcblxuY2xhc3MgUnNhU3NhUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlJzYVNzYVByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5oYXNoQWxnb3JpdGhtcyA9IFtcbiAgICAgICAgICAgIFwiU0hBLTFcIiwgXCJTSEEtMjU2XCIsIFwiU0hBLTM4NFwiLCBcIlNIQS01MTJcIixcbiAgICAgICAgICAgIFwic2hha2UxMjhcIiwgXCJzaGFrZTI1NlwiLFxuICAgICAgICAgICAgXCJTSEEzLTI1NlwiLCBcIlNIQTMtMzg0XCIsIFwiU0hBMy01MTJcIlxuICAgICAgICBdO1xuICAgIH1cbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgUnNhQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIC4uLmFsZ29yaXRobSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25TaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8uc2lnbihhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by52ZXJpZnkoYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlKSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgUnNhQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCEoaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQcml2YXRlS2V5IHx8IGludGVybmFsS2V5IGluc3RhbmNlb2YgUnNhUHVibGljS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IFJTQSBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFJzYVBzc1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5Sc2FQc3NQcm92aWRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXG4gICAgICAgICAgICBcIlNIQS0xXCIsIFwiU0hBLTI1NlwiLCBcIlNIQS0zODRcIiwgXCJTSEEtNTEyXCIsXG4gICAgICAgICAgICBcInNoYWtlMTI4XCIsIFwic2hha2UyNTZcIixcbiAgICAgICAgICAgIFwiU0hBMy0yNTZcIiwgXCJTSEEzLTM4NFwiLCBcIlNIQTMtNTEyXCJcbiAgICAgICAgXTtcbiAgICB9XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IFJzYUNyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLnNpZ24oYWxnb3JpdGhtLCBnZXRDcnlwdG9LZXkoa2V5KSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvblZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBSc2FDcnlwdG8udmVyaWZ5KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IFJzYUNyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICghKGludGVybmFsS2V5IGluc3RhbmNlb2YgUnNhUHJpdmF0ZUtleSB8fCBpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVB1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBSU0EgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBTaGFDcnlwdG8ge1xuICAgIHN0YXRpYyBzaXplKGFsZ29yaXRobSkge1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAxNjA7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTI1NlwiOlxuICAgICAgICAgICAgY2FzZSBcIlNIQTMtMjU2XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIDI1NjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMzg0XCI6XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy0zODRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gMzg0O1xuICAgICAgICAgICAgY2FzZSBcIlNIQS01MTJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTUxMlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiA1MTI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVucmVjb2duaXplZCBuYW1lXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBnZXRBbGdvcml0aG1OYW1lKGFsZ29yaXRobSkge1xuICAgICAgICBzd2l0Y2ggKGFsZ29yaXRobS5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNoYTFcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEtMjU2XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhMjU2XCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBLTM4NFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNoYTM4NFwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQS01MTJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGE1MTJcIjtcbiAgICAgICAgICAgIGNhc2UgXCJTSEEzLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNoYTMtMjU2XCI7XG4gICAgICAgICAgICBjYXNlIFwiU0hBMy0zODRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzaGEzLTM4NFwiO1xuICAgICAgICAgICAgY2FzZSBcIlNIQTMtNTEyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2hhMy01MTJcIjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5yZWNvZ25pemVkIG5hbWVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgY29uc3QgaGFzaEFsZyA9IHRoaXMuZ2V0QWxnb3JpdGhtTmFtZShhbGdvcml0aG0pO1xuICAgICAgICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goaGFzaEFsZylcbiAgICAgICAgICAgIC51cGRhdGUoQnVmZmVyJDEuZnJvbShkYXRhKSkuZGlnZXN0KCk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShoYXNoKS5idWZmZXI7XG4gICAgfVxufVxuXG5jbGFzcyBSc2FPYWVwUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlJzYU9hZXBQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IFJzYUNyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBjb25zdCBkYXRhVmlldyA9IG5ldyBVaW50OEFycmF5KGRhdGEpO1xuICAgICAgICBjb25zdCBrZXlTaXplID0gTWF0aC5jZWlsKGludGVybmFsS2V5LmFsZ29yaXRobS5tb2R1bHVzTGVuZ3RoID4+IDMpO1xuICAgICAgICBjb25zdCBoYXNoU2l6ZSA9IFNoYUNyeXB0by5zaXplKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoKSA+PiAzO1xuICAgICAgICBjb25zdCBkYXRhTGVuZ3RoID0gZGF0YVZpZXcuYnl0ZUxlbmd0aDtcbiAgICAgICAgY29uc3QgcHNMZW5ndGggPSBrZXlTaXplIC0gZGF0YUxlbmd0aCAtIDIgKiBoYXNoU2l6ZSAtIDI7XG4gICAgICAgIGlmIChkYXRhTGVuZ3RoID4ga2V5U2l6ZSAtIDIgKiBoYXNoU2l6ZSAtIDIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRhdGEgdG9vIGxhcmdlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBuZXcgVWludDhBcnJheShrZXlTaXplKTtcbiAgICAgICAgY29uc3Qgc2VlZCA9IG1lc3NhZ2Uuc3ViYXJyYXkoMSwgaGFzaFNpemUgKyAxKTtcbiAgICAgICAgY29uc3QgZGF0YUJsb2NrID0gbWVzc2FnZS5zdWJhcnJheShoYXNoU2l6ZSArIDEpO1xuICAgICAgICBkYXRhQmxvY2suc2V0KGRhdGFWaWV3LCBoYXNoU2l6ZSArIHBzTGVuZ3RoICsgMSk7XG4gICAgICAgIGNvbnN0IGxhYmVsSGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLm5hbWUucmVwbGFjZShcIi1cIiwgXCJcIikpXG4gICAgICAgICAgICAudXBkYXRlKGNvcmUuQnVmZmVyU291cmNlQ29udmVydGVyLnRvVWludDhBcnJheShhbGdvcml0aG0ubGFiZWwgfHwgbmV3IFVpbnQ4QXJyYXkoMCkpKVxuICAgICAgICAgICAgLmRpZ2VzdCgpO1xuICAgICAgICBkYXRhQmxvY2suc2V0KGxhYmVsSGFzaCwgMCk7XG4gICAgICAgIGRhdGFCbG9ja1toYXNoU2l6ZSArIHBzTGVuZ3RoXSA9IDE7XG4gICAgICAgIGNyeXB0by5yYW5kb21GaWxsU3luYyhzZWVkKTtcbiAgICAgICAgY29uc3QgZGF0YUJsb2NrTWFzayA9IHRoaXMubWdmMShpbnRlcm5hbEtleS5hbGdvcml0aG0uaGFzaCwgc2VlZCwgZGF0YUJsb2NrLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YUJsb2NrLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBkYXRhQmxvY2tbaV0gXj0gZGF0YUJsb2NrTWFza1tpXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWVkTWFzayA9IHRoaXMubWdmMShpbnRlcm5hbEtleS5hbGdvcml0aG0uaGFzaCwgZGF0YUJsb2NrLCBzZWVkLmxlbmd0aCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VlZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc2VlZFtpXSBePSBzZWVkTWFza1tpXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWludGVybmFsS2V5LnBlbSkge1xuICAgICAgICAgICAgaW50ZXJuYWxLZXkucGVtID0gYC0tLS0tQkVHSU4gUFVCTElDIEtFWS0tLS0tXFxuJHtpbnRlcm5hbEtleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGtjczAgPSBjcnlwdG8ucHVibGljRW5jcnlwdCh7XG4gICAgICAgICAgICBrZXk6IGludGVybmFsS2V5LnBlbSxcbiAgICAgICAgICAgIHBhZGRpbmc6IGNyeXB0by5jb25zdGFudHMuUlNBX05PX1BBRERJTkcsXG4gICAgICAgIH0sIEJ1ZmZlciQxLmZyb20obWVzc2FnZSkpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocGtjczApLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25EZWNyeXB0KGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGNvbnN0IGtleVNpemUgPSBNYXRoLmNlaWwoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLm1vZHVsdXNMZW5ndGggPj4gMyk7XG4gICAgICAgIGNvbnN0IGhhc2hTaXplID0gU2hhQ3J5cHRvLnNpemUoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gpID4+IDM7XG4gICAgICAgIGNvbnN0IGRhdGFMZW5ndGggPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgIGlmIChkYXRhTGVuZ3RoICE9PSBrZXlTaXplKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCYWQgZGF0YVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWludGVybmFsS2V5LnBlbSkge1xuICAgICAgICAgICAgaW50ZXJuYWxLZXkucGVtID0gYC0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVxcbiR7aW50ZXJuYWxLZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGtjczAgPSBjcnlwdG8ucHJpdmF0ZURlY3J5cHQoe1xuICAgICAgICAgICAga2V5OiBpbnRlcm5hbEtleS5wZW0sXG4gICAgICAgICAgICBwYWRkaW5nOiBjcnlwdG8uY29uc3RhbnRzLlJTQV9OT19QQURESU5HLFxuICAgICAgICB9LCBCdWZmZXIkMS5mcm9tKGRhdGEpKTtcbiAgICAgICAgY29uc3QgeiA9IHBrY3MwWzBdO1xuICAgICAgICBjb25zdCBzZWVkID0gcGtjczAuc3ViYXJyYXkoMSwgaGFzaFNpemUgKyAxKTtcbiAgICAgICAgY29uc3QgZGF0YUJsb2NrID0gcGtjczAuc3ViYXJyYXkoaGFzaFNpemUgKyAxKTtcbiAgICAgICAgaWYgKHogIT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRlY3J5cHRpb24gZmFpbGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlZWRNYXNrID0gdGhpcy5tZ2YxKGludGVybmFsS2V5LmFsZ29yaXRobS5oYXNoLCBkYXRhQmxvY2ssIHNlZWQubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzZWVkW2ldIF49IHNlZWRNYXNrW2ldO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGFCbG9ja01hc2sgPSB0aGlzLm1nZjEoaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gsIHNlZWQsIGRhdGFCbG9jay5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFCbG9jay5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZGF0YUJsb2NrW2ldIF49IGRhdGFCbG9ja01hc2tbaV07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGFiZWxIYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goaW50ZXJuYWxLZXkuYWxnb3JpdGhtLmhhc2gubmFtZS5yZXBsYWNlKFwiLVwiLCBcIlwiKSlcbiAgICAgICAgICAgIC51cGRhdGUoY29yZS5CdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9VaW50OEFycmF5KGFsZ29yaXRobS5sYWJlbCB8fCBuZXcgVWludDhBcnJheSgwKSkpXG4gICAgICAgICAgICAuZGlnZXN0KCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGFzaFNpemU7IGkrKykge1xuICAgICAgICAgICAgaWYgKGxhYmVsSGFzaFtpXSAhPT0gZGF0YUJsb2NrW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVjcnlwdGlvbiBmYWlsZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBzRW5kID0gaGFzaFNpemU7XG4gICAgICAgIGZvciAoOyBwc0VuZCA8IGRhdGFCbG9jay5sZW5ndGg7IHBzRW5kKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBzeiA9IGRhdGFCbG9ja1twc0VuZF07XG4gICAgICAgICAgICBpZiAocHN6ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHN6ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVjcnlwdGlvbiBmYWlsZWRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBzRW5kID09PSBkYXRhQmxvY2subGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZWNyeXB0aW9uIGZhaWxlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBwa2NzMCA9IGRhdGFCbG9jay5zdWJhcnJheShwc0VuZCArIDEpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocGtjczApLmJ1ZmZlcjtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIFJzYUNyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IFJzYUNyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCB7IC4uLmFsZ29yaXRobSwgbmFtZTogdGhpcy5uYW1lIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIGlmICghKGludGVybmFsS2V5IGluc3RhbmNlb2YgUnNhUHJpdmF0ZUtleSB8fCBpbnRlcm5hbEtleSBpbnN0YW5jZW9mIFJzYVB1YmxpY0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBSU0EgQ3J5cHRvS2V5XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG1nZjEoYWxnb3JpdGhtLCBzZWVkLCBsZW5ndGggPSAwKSB7XG4gICAgICAgIGNvbnN0IGhhc2hTaXplID0gU2hhQ3J5cHRvLnNpemUoYWxnb3JpdGhtKSA+PiAzO1xuICAgICAgICBjb25zdCBtYXNrID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcbiAgICAgICAgY29uc3QgY291bnRlciA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgICAgICBjb25zdCBjaHVua3MgPSBNYXRoLmNlaWwobGVuZ3RoIC8gaGFzaFNpemUpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNodW5rczsgaSsrKSB7XG4gICAgICAgICAgICBjb3VudGVyWzBdID0gaSA+Pj4gMjQ7XG4gICAgICAgICAgICBjb3VudGVyWzFdID0gKGkgPj4+IDE2KSAmIDI1NTtcbiAgICAgICAgICAgIGNvdW50ZXJbMl0gPSAoaSA+Pj4gOCkgJiAyNTU7XG4gICAgICAgICAgICBjb3VudGVyWzNdID0gaSAmIDI1NTtcbiAgICAgICAgICAgIGNvbnN0IHN1Ym1hc2sgPSBtYXNrLnN1YmFycmF5KGkgKiBoYXNoU2l6ZSk7XG4gICAgICAgICAgICBsZXQgY2h1bmsgPSBjcnlwdG8uY3JlYXRlSGFzaChhbGdvcml0aG0ubmFtZS5yZXBsYWNlKFwiLVwiLCBcIlwiKSlcbiAgICAgICAgICAgICAgICAudXBkYXRlKHNlZWQpXG4gICAgICAgICAgICAgICAgLnVwZGF0ZShjb3VudGVyKVxuICAgICAgICAgICAgICAgIC5kaWdlc3QoKTtcbiAgICAgICAgICAgIGlmIChjaHVuay5sZW5ndGggPiBzdWJtYXNrLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNodW5rID0gY2h1bmsuc3ViYXJyYXkoMCwgc3VibWFzay5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3VibWFzay5zZXQoY2h1bmspO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXNrO1xuICAgIH1cbn1cblxuY2xhc3MgUnNhRXNQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlJTQUVTLVBLQ1MxLXYxXzVcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSB7XG4gICAgICAgICAgICBwdWJsaWNLZXk6IFtcImVuY3J5cHRcIiwgXCJ3cmFwS2V5XCJdLFxuICAgICAgICAgICAgcHJpdmF0ZUtleTogW1wiZGVjcnlwdFwiLCBcInVud3JhcEtleVwiXSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IFJzYUNyeXB0by5nZW5lcmF0ZUtleSh7XG4gICAgICAgICAgICAuLi5hbGdvcml0aG0sXG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNoZWNrR2VuZXJhdGVLZXlQYXJhbXMoYWxnb3JpdGhtKSB7XG4gICAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZFByb3BlcnR5KGFsZ29yaXRobSwgXCJwdWJsaWNFeHBvbmVudFwiKTtcbiAgICAgICAgaWYgKCEoYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50ICYmIGFsZ29yaXRobS5wdWJsaWNFeHBvbmVudCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwicHVibGljRXhwb25lbnQ6IE1pc3Npbmcgb3Igbm90IGEgVWludDhBcnJheVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwdWJsaWNFeHBvbmVudCA9IENvbnZlcnQuVG9CYXNlNjQoYWxnb3JpdGhtLnB1YmxpY0V4cG9uZW50KTtcbiAgICAgICAgaWYgKCEocHVibGljRXhwb25lbnQgPT09IFwiQXc9PVwiIHx8IHB1YmxpY0V4cG9uZW50ID09PSBcIkFRQUJcIikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJwdWJsaWNFeHBvbmVudDogTXVzdCBiZSBbM10gb3IgWzEsMCwxXVwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrUmVxdWlyZWRQcm9wZXJ0eShhbGdvcml0aG0sIFwibW9kdWx1c0xlbmd0aFwiKTtcbiAgICAgICAgc3dpdGNoIChhbGdvcml0aG0ubW9kdWx1c0xlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAxMDI0OlxuICAgICAgICAgICAgY2FzZSAyMDQ4OlxuICAgICAgICAgICAgY2FzZSA0MDk2OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwibW9kdWx1c0xlbmd0aDogTXVzdCBiZSAxMDI0LCAyMDQ4LCBvciA0MDk2XCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIG9uRW5jcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy50b0NyeXB0b09wdGlvbnMoa2V5KTtcbiAgICAgICAgY29uc3QgZW5jID0gY3J5cHRvLnB1YmxpY0VuY3J5cHQob3B0aW9ucywgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZW5jKS5idWZmZXI7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVjcnlwdChhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy50b0NyeXB0b09wdGlvbnMoa2V5KTtcbiAgICAgICAgY29uc3QgZGVjID0gY3J5cHRvLnByaXZhdGVEZWNyeXB0KG9wdGlvbnMsIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGRlYykuYnVmZmVyO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICByZXR1cm4gUnNhQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgUnNhQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgaWYgKCEoaW50ZXJuYWxLZXkgaW5zdGFuY2VvZiBSc2FQcml2YXRlS2V5IHx8IGludGVybmFsS2V5IGluc3RhbmNlb2YgUnNhUHVibGljS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IFJTQSBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9DcnlwdG9PcHRpb25zKGtleSkge1xuICAgICAgICBjb25zdCB0eXBlID0ga2V5LnR5cGUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGtleTogYC0tLS0tQkVHSU4gJHt0eXBlfSBLRVktLS0tLVxcbiR7Z2V0Q3J5cHRvS2V5KGtleSkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCAke3R5cGV9IEtFWS0tLS0tYCxcbiAgICAgICAgICAgIHBhZGRpbmc6IGNyeXB0by5jb25zdGFudHMuUlNBX1BLQ1MxX1BBRERJTkcsXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5jb25zdCBuYW1lZE9JRHMgPSB7XG4gICAgXCIxLjIuODQwLjEwMDQ1LjMuMS43XCI6IFwiUC0yNTZcIixcbiAgICBcIlAtMjU2XCI6IFwiMS4yLjg0MC4xMDA0NS4zLjEuN1wiLFxuICAgIFwiMS4zLjEzMi4wLjM0XCI6IFwiUC0zODRcIixcbiAgICBcIlAtMzg0XCI6IFwiMS4zLjEzMi4wLjM0XCIsXG4gICAgXCIxLjMuMTMyLjAuMzVcIjogXCJQLTUyMVwiLFxuICAgIFwiUC01MjFcIjogXCIxLjMuMTMyLjAuMzVcIixcbiAgICBcIjEuMy4xMzIuMC4xMFwiOiBcIkstMjU2XCIsXG4gICAgXCJLLTI1NlwiOiBcIjEuMy4xMzIuMC4xMFwiLFxuICAgIFwiYnJhaW5wb29sUDE2MHIxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjFcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4xXCI6IFwiYnJhaW5wb29sUDE2MHIxXCIsXG4gICAgXCJicmFpbnBvb2xQMTYwdDFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMlwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjJcIjogXCJicmFpbnBvb2xQMTYwdDFcIixcbiAgICBcImJyYWlucG9vbFAxOTJyMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4zXCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuM1wiOiBcImJyYWlucG9vbFAxOTJyMVwiLFxuICAgIFwiYnJhaW5wb29sUDE5MnQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjRcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS40XCI6IFwiYnJhaW5wb29sUDE5MnQxXCIsXG4gICAgXCJicmFpbnBvb2xQMjI0cjFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuNVwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjVcIjogXCJicmFpbnBvb2xQMjI0cjFcIixcbiAgICBcImJyYWlucG9vbFAyMjR0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS42XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuNlwiOiBcImJyYWlucG9vbFAyMjR0MVwiLFxuICAgIFwiYnJhaW5wb29sUDI1NnIxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjdcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS43XCI6IFwiYnJhaW5wb29sUDI1NnIxXCIsXG4gICAgXCJicmFpbnBvb2xQMjU2dDFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuOFwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjhcIjogXCJicmFpbnBvb2xQMjU2dDFcIixcbiAgICBcImJyYWlucG9vbFAzMjByMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS45XCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuOVwiOiBcImJyYWlucG9vbFAzMjByMVwiLFxuICAgIFwiYnJhaW5wb29sUDMyMHQxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjEwXCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTBcIjogXCJicmFpbnBvb2xQMzIwdDFcIixcbiAgICBcImJyYWlucG9vbFAzODRyMVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xMVwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjExXCI6IFwiYnJhaW5wb29sUDM4NHIxXCIsXG4gICAgXCJicmFpbnBvb2xQMzg0dDFcIjogXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTJcIixcbiAgICBcIjEuMy4zNi4zLjMuMi44LjEuMS4xMlwiOiBcImJyYWlucG9vbFAzODR0MVwiLFxuICAgIFwiYnJhaW5wb29sUDUxMnIxXCI6IFwiMS4zLjM2LjMuMy4yLjguMS4xLjEzXCIsXG4gICAgXCIxLjMuMzYuMy4zLjIuOC4xLjEuMTNcIjogXCJicmFpbnBvb2xQNTEycjFcIixcbiAgICBcImJyYWlucG9vbFA1MTJ0MVwiOiBcIjEuMy4zNi4zLjMuMi44LjEuMS4xNFwiLFxuICAgIFwiMS4zLjM2LjMuMy4yLjguMS4xLjE0XCI6IFwiYnJhaW5wb29sUDUxMnQxXCIsXG59O1xuZnVuY3Rpb24gZ2V0T2lkQnlOYW1lZEN1cnZlJDEobmFtZWRDdXJ2ZSkge1xuICAgIGNvbnN0IG9pZCA9IG5hbWVkT0lEc1tuYW1lZEN1cnZlXTtcbiAgICBpZiAoIW9pZCkge1xuICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihgQ2Fubm90IGNvbnZlcnQgV2ViQ3J5cHRvIG5hbWVkIGN1cnZlICcke25hbWVkQ3VydmV9JyB0byBPSURgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9pZDtcbn1cblxuY2xhc3MgRWNQcml2YXRlS2V5IGV4dGVuZHMgQXN5bW1ldHJpY0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHJpdmF0ZVwiO1xuICAgIH1cbiAgICBnZXRLZXkoKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UodGhpcy5kYXRhLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICByZXR1cm4gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHJpdmF0ZUtleSwgY29yZS5hc24xLkVjUHJpdmF0ZUtleSk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGt0eTogXCJFQ1wiLFxuICAgICAgICAgICAgY3J2OiB0aGlzLmFsZ29yaXRobS5uYW1lZEN1cnZlLFxuICAgICAgICAgICAga2V5X29wczogdGhpcy51c2FnZXMsXG4gICAgICAgICAgICBleHQ6IHRoaXMuZXh0cmFjdGFibGUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGpzb24sIEpzb25TZXJpYWxpemVyLnRvSlNPTihrZXkpKTtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIWpzb24uY3J2KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihgQ2Fubm90IGdldCBuYW1lZCBjdXJ2ZSBmcm9tIEpXSy4gUHJvcGVydHkgJ2NydicgaXMgcmVxdWlyZWRgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjEwMDQ1LjIuMVwiO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0ucGFyYW1ldGVycyA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKG5ldyBjb3JlLmFzbjEuT2JqZWN0SWRlbnRpZmllcihnZXRPaWRCeU5hbWVkQ3VydmUkMShqc29uLmNydikpKTtcbiAgICAgICAgY29uc3Qga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihqc29uLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLkVjUHJpdmF0ZUtleSB9KTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5ID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5KTtcbiAgICAgICAgdGhpcy5kYXRhID0gQnVmZmVyJDEuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuY2xhc3MgRWNQdWJsaWNLZXkgZXh0ZW5kcyBBc3ltbWV0cmljS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJwdWJsaWNcIjtcbiAgICB9XG4gICAgZ2V0S2V5KCkge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKHRoaXMuZGF0YSwgY29yZS5hc24xLlB1YmxpY0tleUluZm8pO1xuICAgICAgICByZXR1cm4gbmV3IGNvcmUuYXNuMS5FY1B1YmxpY0tleShrZXlJbmZvLnB1YmxpY0tleSk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGt0eTogXCJFQ1wiLFxuICAgICAgICAgICAgY3J2OiB0aGlzLmFsZ29yaXRobS5uYW1lZEN1cnZlLFxuICAgICAgICAgICAga2V5X29wczogdGhpcy51c2FnZXMsXG4gICAgICAgICAgICBleHQ6IHRoaXMuZXh0cmFjdGFibGUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGpzb24sIEpzb25TZXJpYWxpemVyLnRvSlNPTihrZXkpKTtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIWpzb24uY3J2KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihgQ2Fubm90IGdldCBuYW1lZCBjdXJ2ZSBmcm9tIEpXSy4gUHJvcGVydHkgJ2NydicgaXMgcmVxdWlyZWRgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGpzb24sIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuRWNQdWJsaWNLZXkgfSk7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlB1YmxpY0tleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjEwMDQ1LjIuMVwiO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUobmV3IGNvcmUuYXNuMS5PYmplY3RJZGVudGlmaWVyKGdldE9pZEJ5TmFtZWRDdXJ2ZSQxKGpzb24uY3J2KSkpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleSA9IEFzblNlcmlhbGl6ZXIudG9BU04oa2V5KS52YWx1ZUhleDtcbiAgICAgICAgdGhpcy5kYXRhID0gQnVmZmVyJDEuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuY2xhc3MgU2hhMVByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBLTFcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGEyNTZQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQS0yNTZcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGEzODRQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQS0zODRcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGE1MTJQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQS01MTJcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBTaGEzMjU2UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlByb3ZpZGVyQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJTSEEzLTI1NlwiO1xuICAgICAgICB0aGlzLnVzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIFNoYTMzODRQcm92aWRlciBleHRlbmRzIGNvcmUuUHJvdmlkZXJDcnlwdG8ge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlNIQTMtMzg0XCI7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gW107XG4gICAgfVxuICAgIGFzeW5jIG9uRGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gU2hhQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU2hhMzUxMlByb3ZpZGVyIGV4dGVuZHMgY29yZS5Qcm92aWRlckNyeXB0byB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMubmFtZSA9IFwiU0hBMy01MTJcIjtcbiAgICAgICAgdGhpcy51c2FnZXMgPSBbXTtcbiAgICB9XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFDcnlwdG8uZGlnZXN0KGFsZ29yaXRobSwgZGF0YSk7XG4gICAgfVxufVxuXG5jbGFzcyBFY0NyeXB0byB7XG4gICAgc3RhdGljIGFzeW5jIGdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gbmV3IEVjUHJpdmF0ZUtleSgpO1xuICAgICAgICBwcml2YXRlS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHJpdmF0ZUtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBwcml2YXRlS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnByaXZhdGVLZXlVc2FnZXMuaW5kZXhPZih1c2FnZSkgIT09IC0xKTtcbiAgICAgICAgY29uc3QgcHVibGljS2V5ID0gbmV3IEVjUHVibGljS2V5KCk7XG4gICAgICAgIHB1YmxpY0tleS5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICAgIHB1YmxpY0tleS5leHRyYWN0YWJsZSA9IHRydWU7XG4gICAgICAgIHB1YmxpY0tleS51c2FnZXMgPSBrZXlVc2FnZXMuZmlsdGVyKCh1c2FnZSkgPT4gdGhpcy5wdWJsaWNLZXlVc2FnZXMuaW5kZXhPZih1c2FnZSkgIT09IC0xKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IGNyeXB0by5nZW5lcmF0ZUtleVBhaXJTeW5jKFwiZWNcIiwge1xuICAgICAgICAgICAgbmFtZWRDdXJ2ZTogdGhpcy5nZXRPcGVuU1NMTmFtZWRDdXJ2ZShhbGdvcml0aG0ubmFtZWRDdXJ2ZSksXG4gICAgICAgICAgICBwdWJsaWNLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNwa2lcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcml2YXRlS2V5RW5jb2Rpbmc6IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJwa2NzOFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHByaXZhdGVLZXkuZGF0YSA9IGtleXMucHJpdmF0ZUtleTtcbiAgICAgICAgcHVibGljS2V5LmRhdGEgPSBrZXlzLnB1YmxpY0tleTtcbiAgICAgICAgY29uc3QgcmVzID0ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleSxcbiAgICAgICAgICAgIHB1YmxpY0tleSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY3J5cHRvQWxnID0gU2hhQ3J5cHRvLmdldEFsZ29yaXRobU5hbWUoYWxnb3JpdGhtLmhhc2gpO1xuICAgICAgICBjb25zdCBzaWduZXIgPSBjcnlwdG8uY3JlYXRlU2lnbihjcnlwdG9BbGcpO1xuICAgICAgICBzaWduZXIudXBkYXRlKEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICBpZiAoIWtleS5wZW0pIHtcbiAgICAgICAgICAgIGtleS5wZW0gPSBgLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAga2V5OiBrZXkucGVtLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBzaWduZXIuc2lnbihvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZWNTaWduYXR1cmUgPSBBc25QYXJzZXIucGFyc2Uoc2lnbmF0dXJlLCBjb3JlLmFzbjEuRWNEc2FTaWduYXR1cmUpO1xuICAgICAgICBjb25zdCBzaWduYXR1cmVSYXcgPSBjb3JlLkVjVXRpbHMuZW5jb2RlU2lnbmF0dXJlKGVjU2lnbmF0dXJlLCBjb3JlLkVjQ3VydmVzLmdldChrZXkuYWxnb3JpdGhtLm5hbWVkQ3VydmUpLnNpemUpO1xuICAgICAgICByZXR1cm4gc2lnbmF0dXJlUmF3LmJ1ZmZlcjtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNyeXB0b0FsZyA9IFNoYUNyeXB0by5nZXRBbGdvcml0aG1OYW1lKGFsZ29yaXRobS5oYXNoKTtcbiAgICAgICAgY29uc3Qgc2lnbmVyID0gY3J5cHRvLmNyZWF0ZVZlcmlmeShjcnlwdG9BbGcpO1xuICAgICAgICBzaWduZXIudXBkYXRlKEJ1ZmZlciQxLmZyb20oZGF0YSkpO1xuICAgICAgICBpZiAoIWtleS5wZW0pIHtcbiAgICAgICAgICAgIGtleS5wZW0gPSBgLS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS1cXG4ke2tleS5kYXRhLnRvU3RyaW5nKFwiYmFzZTY0XCIpfVxcbi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGtleToga2V5LnBlbSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZWNTaWduYXR1cmUgPSBuZXcgY29yZS5hc24xLkVjRHNhU2lnbmF0dXJlKCk7XG4gICAgICAgIGNvbnN0IG5hbWVkQ3VydmUgPSBjb3JlLkVjQ3VydmVzLmdldChrZXkuYWxnb3JpdGhtLm5hbWVkQ3VydmUpO1xuICAgICAgICBjb25zdCBzaWduYXR1cmVQb2ludCA9IGNvcmUuRWNVdGlscy5kZWNvZGVTaWduYXR1cmUoc2lnbmF0dXJlLCBuYW1lZEN1cnZlLnNpemUpO1xuICAgICAgICBlY1NpZ25hdHVyZS5yID0gQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoc2lnbmF0dXJlUG9pbnQucik7XG4gICAgICAgIGVjU2lnbmF0dXJlLnMgPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIudG9BcnJheUJ1ZmZlcihzaWduYXR1cmVQb2ludC5zKTtcbiAgICAgICAgY29uc3QgZWNTaWduYXR1cmVSYXcgPSBCdWZmZXIkMS5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGVjU2lnbmF0dXJlKSk7XG4gICAgICAgIGNvbnN0IG9rID0gc2lnbmVyLnZlcmlmeShvcHRpb25zLCBlY1NpZ25hdHVyZVJhdyk7XG4gICAgICAgIHJldHVybiBvaztcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGRlcml2ZUJpdHMoYWxnb3JpdGhtLCBiYXNlS2V5LCBsZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY3J5cHRvQWxnID0gdGhpcy5nZXRPcGVuU1NMTmFtZWRDdXJ2ZShiYXNlS2V5LmFsZ29yaXRobS5uYW1lZEN1cnZlKTtcbiAgICAgICAgY29uc3QgZWNkaCA9IGNyeXB0by5jcmVhdGVFQ0RIKGNyeXB0b0FsZyk7XG4gICAgICAgIGNvbnN0IGFzblByaXZhdGVLZXkgPSBBc25QYXJzZXIucGFyc2UoYmFzZUtleS5kYXRhLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICBjb25zdCBhc25FY1ByaXZhdGVLZXkgPSBBc25QYXJzZXIucGFyc2UoYXNuUHJpdmF0ZUtleS5wcml2YXRlS2V5LCBjb3JlLmFzbjEuRWNQcml2YXRlS2V5KTtcbiAgICAgICAgZWNkaC5zZXRQcml2YXRlS2V5KEJ1ZmZlciQxLmZyb20oYXNuRWNQcml2YXRlS2V5LnByaXZhdGVLZXkpKTtcbiAgICAgICAgY29uc3QgYXNuUHVibGljS2V5ID0gQXNuUGFyc2VyLnBhcnNlKGFsZ29yaXRobS5wdWJsaWMuZGF0YSwgY29yZS5hc24xLlB1YmxpY0tleUluZm8pO1xuICAgICAgICBjb25zdCBiaXRzID0gZWNkaC5jb21wdXRlU2VjcmV0KEJ1ZmZlciQxLmZyb20oYXNuUHVibGljS2V5LnB1YmxpY0tleSkpO1xuICAgICAgICBpZiAobGVuZ3RoID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYml0cztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYml0cykuYnVmZmVyLnNsaWNlKDAsIGxlbmd0aCA+PiAzKTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIEpzb25TZXJpYWxpemVyLnRvSlNPTihrZXkpO1xuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6XG4gICAgICAgICAgICBjYXNlIFwic3BraVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShrZXkuZGF0YSkuYnVmZmVyO1xuICAgICAgICAgICAgY2FzZSBcInJhd1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHVibGljS2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZShrZXkuZGF0YSwgY29yZS5hc24xLlB1YmxpY0tleUluZm8pO1xuICAgICAgICAgICAgICAgIHJldHVybiBwdWJsaWNLZXlJbmZvLnB1YmxpY0tleTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJmb3JtYXQ6IE11c3QgYmUgJ2p3aycsICdyYXcnLCBwa2NzOCcgb3IgJ3Nwa2knXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBpbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgandrID0ga2V5RGF0YTtcbiAgICAgICAgICAgICAgICBpZiAoandrLmQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihrZXlEYXRhLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLkVjUHJpdmF0ZUtleSB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuRWNQdWJsaWNLZXkgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInJhd1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gbmV3IGNvcmUuYXNuMS5FY1B1YmxpY0tleShrZXlEYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UobmV3IFVpbnQ4QXJyYXkoa2V5RGF0YSksIGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBuZXcgY29yZS5hc24xLkVjUHVibGljS2V5KGtleUluZm8ucHVibGljS2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydEtleVBhcmFtZXRlcnMoa2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0ucGFyYW1ldGVycywgYWxnb3JpdGhtLm5hbWVkQ3VydmUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleUluZm8gPSBBc25QYXJzZXIucGFyc2UobmV3IFVpbnQ4QXJyYXkoa2V5RGF0YSksIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNuS2V5ID0gQXNuUGFyc2VyLnBhcnNlKGtleUluZm8ucHJpdmF0ZUtleSwgY29yZS5hc24xLkVjUHJpdmF0ZUtleSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnRLZXlQYXJhbWV0ZXJzKGtleUluZm8ucHJpdmF0ZUtleUFsZ29yaXRobS5wYXJhbWV0ZXJzLCBhbGdvcml0aG0ubmFtZWRDdXJ2ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHJpdmF0ZUtleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snLCAncmF3JywgJ3BrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzc2VydEtleVBhcmFtZXRlcnMocGFyYW1ldGVycywgbmFtZWRDdXJ2ZSkge1xuICAgICAgICBpZiAoIXBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLkNyeXB0b0Vycm9yKFwiS2V5IGluZm8gZG9lc24ndCBoYXZlIHJlcXVpcmVkIHBhcmFtZXRlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5hbWVkQ3VydmVJZGVudGlmaWVyID0gXCJcIjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5hbWVkQ3VydmVJZGVudGlmaWVyID0gQXNuUGFyc2VyLnBhcnNlKHBhcmFtZXRlcnMsIGNvcmUuYXNuMS5PYmplY3RJZGVudGlmaWVyKS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuQ3J5cHRvRXJyb3IoXCJDYW5ub3QgcmVhZCBrZXkgaW5mbyBwYXJhbWV0ZXJzXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnZXRPaWRCeU5hbWVkQ3VydmUkMShuYW1lZEN1cnZlKSAhPT0gbmFtZWRDdXJ2ZUlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLkNyeXB0b0Vycm9yKFwiS2V5IGluZm8gcGFyYW1ldGVyIGRvZXNuJ3QgbWF0Y2ggdG8gbmFtZWQgY3VydmVcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IG5ldyBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IFwiMS4yLjg0MC4xMDA0NS4yLjFcIjtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5QWxnb3JpdGhtLnBhcmFtZXRlcnMgPSBBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShuZXcgY29yZS5hc24xLk9iamVjdElkZW50aWZpZXIoZ2V0T2lkQnlOYW1lZEN1cnZlJDEoYWxnb3JpdGhtLm5hbWVkQ3VydmUpKSk7XG4gICAgICAgIGtleUluZm8ucHJpdmF0ZUtleSA9IEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGFzbktleSk7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBFY1ByaXZhdGVLZXkoKTtcbiAgICAgICAga2V5LmRhdGEgPSBCdWZmZXIkMS5mcm9tKEFzblNlcmlhbGl6ZXIuc2VyaWFsaXplKGtleUluZm8pKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IE9iamVjdC5hc3NpZ24oe30sIGFsZ29yaXRobSk7XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgaW1wb3J0UHVibGljS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleUluZm8gPSBuZXcgY29yZS5hc24xLlB1YmxpY0tleUluZm8oKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gXCIxLjIuODQwLjEwMDQ1LjIuMVwiO1xuICAgICAgICBjb25zdCBuYW1lZEN1cnZlID0gZ2V0T2lkQnlOYW1lZEN1cnZlJDEoYWxnb3JpdGhtLm5hbWVkQ3VydmUpO1xuICAgICAgICBrZXlJbmZvLnB1YmxpY0tleUFsZ29yaXRobS5wYXJhbWV0ZXJzID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUobmV3IGNvcmUuYXNuMS5PYmplY3RJZGVudGlmaWVyKG5hbWVkQ3VydmUpKTtcbiAgICAgICAga2V5SW5mby5wdWJsaWNLZXkgPSBhc25LZXkudmFsdWU7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBFY1B1YmxpY0tleSgpO1xuICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gT2JqZWN0LmFzc2lnbih7fSwgYWxnb3JpdGhtKTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRPcGVuU1NMTmFtZWRDdXJ2ZShjdXJ2ZSkge1xuICAgICAgICBzd2l0Y2ggKGN1cnZlLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJQLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInByaW1lMjU2djFcIjtcbiAgICAgICAgICAgIGNhc2UgXCJLLTI1NlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInNlY3AyNTZrMVwiO1xuICAgICAgICAgICAgY2FzZSBcIlAtMzg0XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic2VjcDM4NHIxXCI7XG4gICAgICAgICAgICBjYXNlIFwiUC01MjFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJzZWNwNTIxcjFcIjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnZlO1xuICAgICAgICB9XG4gICAgfVxufVxuRWNDcnlwdG8ucHVibGljS2V5VXNhZ2VzID0gW1widmVyaWZ5XCJdO1xuRWNDcnlwdG8ucHJpdmF0ZUtleVVzYWdlcyA9IFtcInNpZ25cIiwgXCJkZXJpdmVLZXlcIiwgXCJkZXJpdmVCaXRzXCJdO1xuXG5jbGFzcyBFY2RzYVByb3ZpZGVyIGV4dGVuZHMgY29yZS5FY2RzYVByb3ZpZGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5uYW1lZEN1cnZlcyA9IGNvcmUuRWNDdXJ2ZXMubmFtZXM7XG4gICAgICAgIHRoaXMuaGFzaEFsZ29yaXRobXMgPSBbXG4gICAgICAgICAgICBcIlNIQS0xXCIsIFwiU0hBLTI1NlwiLCBcIlNIQS0zODRcIiwgXCJTSEEtNTEyXCIsXG4gICAgICAgICAgICBcInNoYWtlMTI4XCIsIFwic2hha2UyNTZcIixcbiAgICAgICAgICAgIFwiU0hBMy0yNTZcIiwgXCJTSEEzLTM4NFwiLCBcIlNIQTMtNTEyXCJcbiAgICAgICAgXTtcbiAgICB9XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IEVjQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIC4uLmFsZ29yaXRobSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25TaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBFY0NyeXB0by5zaWduKGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRWNDcnlwdG8udmVyaWZ5KGFsZ29yaXRobSwgZ2V0Q3J5cHRvS2V5KGtleSksIG5ldyBVaW50OEFycmF5KHNpZ25hdHVyZSksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEVjQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgRWNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIShpbnRlcm5hbEtleSBpbnN0YW5jZW9mIEVjUHJpdmF0ZUtleSB8fCBpbnRlcm5hbEtleSBpbnN0YW5jZW9mIEVjUHVibGljS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IEVDIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY2xhc3MgRWNkaFByb3ZpZGVyIGV4dGVuZHMgY29yZS5FY2RoUHJvdmlkZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm5hbWVkQ3VydmVzID0gY29yZS5FY0N1cnZlcy5uYW1lcztcbiAgICB9XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IEVjQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIC4uLmFsZ29yaXRobSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwcml2YXRlS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wcml2YXRlS2V5KSxcbiAgICAgICAgICAgIHB1YmxpY0tleTogc2V0Q3J5cHRvS2V5KGtleXMucHVibGljS2V5KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEVjQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgRWNDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICBpZiAoIShpbnRlcm5hbEtleSBpbnN0YW5jZW9mIEVjUHJpdmF0ZUtleSB8fCBpbnRlcm5hbEtleSBpbnN0YW5jZW9mIEVjUHVibGljS2V5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImtleTogSXMgbm90IEVDIENyeXB0b0tleVwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBvbkRlcml2ZUJpdHMoYWxnb3JpdGhtLCBiYXNlS2V5LCBsZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYml0cyA9IGF3YWl0IEVjQ3J5cHRvLmRlcml2ZUJpdHMoeyAuLi5hbGdvcml0aG0sIHB1YmxpYzogZ2V0Q3J5cHRvS2V5KGFsZ29yaXRobS5wdWJsaWMpIH0sIGdldENyeXB0b0tleShiYXNlS2V5KSwgbGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIGJpdHM7XG4gICAgfVxufVxuXG5jb25zdCBlZE9JRHMgPSB7XG4gICAgW2NvcmUuYXNuMS5pZEVkNDQ4XTogXCJFZDQ0OFwiLFxuICAgIFwiZWQ0NDhcIjogY29yZS5hc24xLmlkRWQ0NDgsXG4gICAgW2NvcmUuYXNuMS5pZFg0NDhdOiBcIlg0NDhcIixcbiAgICBcIng0NDhcIjogY29yZS5hc24xLmlkWDQ0OCxcbiAgICBbY29yZS5hc24xLmlkRWQyNTUxOV06IFwiRWQyNTUxOVwiLFxuICAgIFwiZWQyNTUxOVwiOiBjb3JlLmFzbjEuaWRFZDI1NTE5LFxuICAgIFtjb3JlLmFzbjEuaWRYMjU1MTldOiBcIlgyNTUxOVwiLFxuICAgIFwieDI1NTE5XCI6IGNvcmUuYXNuMS5pZFgyNTUxOSxcbn07XG5mdW5jdGlvbiBnZXRPaWRCeU5hbWVkQ3VydmUobmFtZWRDdXJ2ZSkge1xuICAgIGNvbnN0IG9pZCA9IGVkT0lEc1tuYW1lZEN1cnZlLnRvTG93ZXJDYXNlKCldO1xuICAgIGlmICghb2lkKSB7XG4gICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKGBDYW5ub3QgY29udmVydCBXZWJDcnlwdG8gbmFtZWQgY3VydmUgJyR7bmFtZWRDdXJ2ZX0nIHRvIE9JRGApO1xuICAgIH1cbiAgICByZXR1cm4gb2lkO1xufVxuXG5jbGFzcyBFZFByaXZhdGVLZXkgZXh0ZW5kcyBBc3ltbWV0cmljS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJwcml2YXRlXCI7XG4gICAgfVxuICAgIGdldEtleSgpIHtcbiAgICAgICAgY29uc3Qga2V5SW5mbyA9IEFzblBhcnNlci5wYXJzZSh0aGlzLmRhdGEsIGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbyk7XG4gICAgICAgIHJldHVybiBBc25QYXJzZXIucGFyc2Uoa2V5SW5mby5wcml2YXRlS2V5LCBjb3JlLmFzbjEuQ3VydmVQcml2YXRlS2V5KTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleSgpO1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAga3R5OiBcIk9LUFwiLFxuICAgICAgICAgICAgY3J2OiB0aGlzLmFsZ29yaXRobS5uYW1lZEN1cnZlLFxuICAgICAgICAgICAga2V5X29wczogdGhpcy51c2FnZXMsXG4gICAgICAgICAgICBleHQ6IHRoaXMuZXh0cmFjdGFibGUsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGpzb24sIEpzb25TZXJpYWxpemVyLnRvSlNPTihrZXkpKTtcbiAgICB9XG4gICAgZnJvbUpTT04oanNvbikge1xuICAgICAgICBpZiAoIWpzb24uY3J2KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihgQ2Fubm90IGdldCBuYW1lZCBjdXJ2ZSBmcm9tIEpXSy4gUHJvcGVydHkgJ2NydicgaXMgcmVxdWlyZWRgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbygpO1xuICAgICAgICBrZXlJbmZvLnByaXZhdGVLZXlBbGdvcml0aG0uYWxnb3JpdGhtID0gZ2V0T2lkQnlOYW1lZEN1cnZlKGpzb24uY3J2KTtcbiAgICAgICAgY29uc3Qga2V5ID0gSnNvblBhcnNlci5mcm9tSlNPTihqc29uLCB7IHRhcmdldFNjaGVtYTogY29yZS5hc24xLkN1cnZlUHJpdmF0ZUtleSB9KTtcbiAgICAgICAga2V5SW5mby5wcml2YXRlS2V5ID0gQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5KTtcbiAgICAgICAgdGhpcy5kYXRhID0gQnVmZmVyJDEuZnJvbShBc25TZXJpYWxpemVyLnNlcmlhbGl6ZShrZXlJbmZvKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuY2xhc3MgRWRQdWJsaWNLZXkgZXh0ZW5kcyBBc3ltbWV0cmljS2V5IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gXCJwdWJsaWNcIjtcbiAgICB9XG4gICAgZ2V0S2V5KCkge1xuICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKHRoaXMuZGF0YSwgY29yZS5hc24xLlB1YmxpY0tleUluZm8pO1xuICAgICAgICByZXR1cm4ga2V5SW5mby5wdWJsaWNLZXk7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRLZXkoKTtcbiAgICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgICAgIGt0eTogXCJPS1BcIixcbiAgICAgICAgICAgIGNydjogdGhpcy5hbGdvcml0aG0ubmFtZWRDdXJ2ZSxcbiAgICAgICAgICAgIGtleV9vcHM6IHRoaXMudXNhZ2VzLFxuICAgICAgICAgICAgZXh0OiB0aGlzLmV4dHJhY3RhYmxlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihqc29uLCB7XG4gICAgICAgICAgICB4OiBDb252ZXJ0LlRvQmFzZTY0VXJsKGtleSlcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZyb21KU09OKGpzb24pIHtcbiAgICAgICAgaWYgKCFqc29uLmNydikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoYENhbm5vdCBnZXQgbmFtZWQgY3VydmUgZnJvbSBKV0suIFByb3BlcnR5ICdjcnYnIGlzIHJlcXVpcmVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFqc29uLngpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKGBDYW5ub3QgZ2V0IHByb3BlcnR5IGZyb20gSldLLiBQcm9wZXJ0eSAneCcgaXMgcmVxdWlyZWRgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXlJbmZvID0gbmV3IGNvcmUuYXNuMS5QdWJsaWNLZXlJbmZvKCk7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IGdldE9pZEJ5TmFtZWRDdXJ2ZShqc29uLmNydik7XG4gICAgICAgIGtleUluZm8ucHVibGljS2V5ID0gQ29udmVydC5Gcm9tQmFzZTY0VXJsKGpzb24ueCk7XG4gICAgICAgIHRoaXMuZGF0YSA9IEJ1ZmZlciQxLmZyb20oQXNuU2VyaWFsaXplci5zZXJpYWxpemUoa2V5SW5mbykpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmNsYXNzIEVkQ3J5cHRvIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBuZXcgRWRQcml2YXRlS2V5KCk7XG4gICAgICAgIHByaXZhdGVLZXkuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICBwcml2YXRlS2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIHByaXZhdGVLZXkudXNhZ2VzID0ga2V5VXNhZ2VzLmZpbHRlcigodXNhZ2UpID0+IHRoaXMucHJpdmF0ZUtleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBuZXcgRWRQdWJsaWNLZXkoKTtcbiAgICAgICAgcHVibGljS2V5LmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgcHVibGljS2V5LmV4dHJhY3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgcHVibGljS2V5LnVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnB1YmxpY0tleVVzYWdlcy5pbmRleE9mKHVzYWdlKSAhPT0gLTEpO1xuICAgICAgICBjb25zdCB0eXBlID0gYWxnb3JpdGhtLm5hbWVkQ3VydmUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IGNyeXB0by5nZW5lcmF0ZUtleVBhaXJTeW5jKHR5cGUsIHtcbiAgICAgICAgICAgIHB1YmxpY0tleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3BraVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByaXZhdGVLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJkZXJcIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInBrY3M4XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcHJpdmF0ZUtleS5kYXRhID0ga2V5cy5wcml2YXRlS2V5O1xuICAgICAgICBwdWJsaWNLZXkuZGF0YSA9IGtleXMucHVibGljS2V5O1xuICAgICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgICAgICBwcml2YXRlS2V5LFxuICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgc2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICBpZiAoIWtleS5wZW0pIHtcbiAgICAgICAgICAgIGtleS5wZW0gPSBgLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tXFxuJHtrZXkuZGF0YS50b1N0cmluZyhcImJhc2U2NFwiKX1cXG4tLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAga2V5OiBrZXkucGVtLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG8uc2lnbihudWxsLCBCdWZmZXIkMS5mcm9tKGRhdGEpLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGNvcmUuQnVmZmVyU291cmNlQ29udmVydGVyLnRvQXJyYXlCdWZmZXIoc2lnbmF0dXJlKTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIHZlcmlmeShhbGdvcml0aG0sIGtleSwgc2lnbmF0dXJlLCBkYXRhKSB7XG4gICAgICAgIGlmICgha2V5LnBlbSkge1xuICAgICAgICAgICAga2V5LnBlbSA9IGAtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxcbiR7a2V5LmRhdGEudG9TdHJpbmcoXCJiYXNlNjRcIil9XFxuLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAga2V5OiBrZXkucGVtLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBvayA9IGNyeXB0by52ZXJpZnkobnVsbCwgQnVmZmVyJDEuZnJvbShkYXRhKSwgb3B0aW9ucywgQnVmZmVyJDEuZnJvbShzaWduYXR1cmUpKTtcbiAgICAgICAgcmV0dXJuIG9rO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBjcnlwdG8uY3JlYXRlUHVibGljS2V5KHtcbiAgICAgICAgICAgIGtleTogYWxnb3JpdGhtLnB1YmxpYy5kYXRhLFxuICAgICAgICAgICAgZm9ybWF0OiBcImRlclwiLFxuICAgICAgICAgICAgdHlwZTogXCJzcGtpXCIsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcml2YXRlS2V5ID0gY3J5cHRvLmNyZWF0ZVByaXZhdGVLZXkoe1xuICAgICAgICAgICAga2V5OiBiYXNlS2V5LmRhdGEsXG4gICAgICAgICAgICBmb3JtYXQ6IFwiZGVyXCIsXG4gICAgICAgICAgICB0eXBlOiBcInBrY3M4XCIsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBiaXRzID0gY3J5cHRvLmRpZmZpZUhlbGxtYW4oe1xuICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICAgICAgcHJpdmF0ZUtleSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShiaXRzKS5idWZmZXIuc2xpY2UoMCwgbGVuZ3RoID4+IDMpO1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgZXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSnNvblNlcmlhbGl6ZXIudG9KU09OKGtleSk7XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGtleS5kYXRhKS5idWZmZXI7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwdWJsaWNLZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKGtleS5kYXRhLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHB1YmxpY0tleUluZm8ucHVibGljS2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3JhdycsIHBrY3M4JyBvciAnc3BraSdcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBzd2l0Y2ggKGZvcm1hdC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiandrXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBqd2sgPSBrZXlEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChqd2suZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhc25LZXkgPSBKc29uUGFyc2VyLmZyb21KU09OKGtleURhdGEsIHsgdGFyZ2V0U2NoZW1hOiBjb3JlLmFzbjEuQ3VydmVQcml2YXRlS2V5IH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghandrLngpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXlEYXRhOiBDYW5ub3QgZ2V0IHJlcXVpcmVkICd4JyBmaWxlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoQ29udmVydC5Gcm9tQmFzZTY0VXJsKGp3ay54KSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBvcnRQdWJsaWNLZXkoa2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHVibGljS2V5SW5mbyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1wb3J0UHVibGljS2V5KGtleUluZm8ucHVibGljS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInBrY3M4XCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlJbmZvID0gQXNuUGFyc2VyLnBhcnNlKG5ldyBVaW50OEFycmF5KGtleURhdGEpLCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFzbktleSA9IEFzblBhcnNlci5wYXJzZShrZXlJbmZvLnByaXZhdGVLZXksIGNvcmUuYXNuMS5DdXJ2ZVByaXZhdGVLZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmltcG9ydFByaXZhdGVLZXkoYXNuS2V5LCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3JhdycsICdwa2NzOCcgb3IgJ3Nwa2knXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBpbXBvcnRQcml2YXRlS2V5KGFzbktleSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBFZFByaXZhdGVLZXkoKTtcbiAgICAgICAga2V5LmZyb21KU09OKHtcbiAgICAgICAgICAgIGNydjogYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICBkOiBDb252ZXJ0LlRvQmFzZTY0VXJsKGFzbktleS5kKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSBPYmplY3QuYXNzaWduKHt9LCBhbGdvcml0aG0pO1xuICAgICAgICBrZXkuZXh0cmFjdGFibGUgPSBleHRyYWN0YWJsZTtcbiAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIGltcG9ydFB1YmxpY0tleShhc25LZXksIGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXkgPSBuZXcgRWRQdWJsaWNLZXkoKTtcbiAgICAgICAga2V5LmZyb21KU09OKHtcbiAgICAgICAgICAgIGNydjogYWxnb3JpdGhtLm5hbWVkQ3VydmUsXG4gICAgICAgICAgICB4OiBDb252ZXJ0LlRvQmFzZTY0VXJsKGFzbktleSksXG4gICAgICAgIH0pO1xuICAgICAgICBrZXkuYWxnb3JpdGhtID0gT2JqZWN0LmFzc2lnbih7fSwgYWxnb3JpdGhtKTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxufVxuRWRDcnlwdG8ucHVibGljS2V5VXNhZ2VzID0gW1widmVyaWZ5XCJdO1xuRWRDcnlwdG8ucHJpdmF0ZUtleVVzYWdlcyA9IFtcInNpZ25cIiwgXCJkZXJpdmVLZXlcIiwgXCJkZXJpdmVCaXRzXCJdO1xuXG5jbGFzcyBFZERzYVByb3ZpZGVyIGV4dGVuZHMgY29yZS5FZERzYVByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBrZXlzID0gYXdhaXQgRWRDcnlwdG8uZ2VuZXJhdGVLZXkoe1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbmFtZWRDdXJ2ZTogYWxnb3JpdGhtLm5hbWVkQ3VydmUucmVwbGFjZSgvXmVkL2ksIFwiRWRcIiksXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uU2lnbihhbGdvcml0aG0sIGtleSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gRWRDcnlwdG8uc2lnbihhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIEVkQ3J5cHRvLnZlcmlmeShhbGdvcml0aG0sIGdldENyeXB0b0tleShrZXkpLCBuZXcgVWludDhBcnJheShzaWduYXR1cmUpLCBuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHJldHVybiBFZENyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBnZXRDcnlwdG9LZXkoa2V5KSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IEVkQ3J5cHRvLmltcG9ydEtleShmb3JtYXQsIGtleURhdGEsIHsgLi4uYWxnb3JpdGhtLCBuYW1lOiB0aGlzLm5hbWUgfSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcyk7XG4gICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICB9XG59XG5cbmNsYXNzIEVjZGhFc1Byb3ZpZGVyIGV4dGVuZHMgY29yZS5FY2RoRXNQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IEVkQ3J5cHRvLmdlbmVyYXRlS2V5KHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIG5hbWVkQ3VydmU6IGFsZ29yaXRobS5uYW1lZEN1cnZlLnRvVXBwZXJDYXNlKCksXG4gICAgICAgIH0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogc2V0Q3J5cHRvS2V5KGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IHNldENyeXB0b0tleShrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhhbGdvcml0aG0sIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBiaXRzID0gYXdhaXQgRWRDcnlwdG8uZGVyaXZlQml0cyh7IC4uLmFsZ29yaXRobSwgcHVibGljOiBnZXRDcnlwdG9LZXkoYWxnb3JpdGhtLnB1YmxpYykgfSwgZ2V0Q3J5cHRvS2V5KGJhc2VLZXkpLCBsZW5ndGgpO1xuICAgICAgICByZXR1cm4gYml0cztcbiAgICB9XG4gICAgYXN5bmMgb25FeHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIEVkQ3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGdldENyeXB0b0tleShrZXkpKTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgRWRDcnlwdG8uaW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgeyAuLi5hbGdvcml0aG0sIG5hbWU6IHRoaXMubmFtZSB9LCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbn1cblxuY2xhc3MgRWQyNTUxOUNyeXB0b0tleSBleHRlbmRzIENyeXB0b0tleSB7XG4gICAgY29uc3RydWN0b3IoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwgdXNhZ2VzLCBkYXRhKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYWxnb3JpdGhtID0gYWxnb3JpdGhtO1xuICAgICAgICB0aGlzLmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIHRoaXMudXNhZ2VzID0gdXNhZ2VzO1xuICAgICAgICB0aGlzLmRhdGEgPSBCdWZmZXIuZnJvbShkYXRhKTtcbiAgICB9XG4gICAgdG9KV0soKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBrdHk6IFwiT0tQXCIsXG4gICAgICAgICAgICBjcnY6IHRoaXMuYWxnb3JpdGhtLm5hbWUsXG4gICAgICAgICAgICBrZXlfb3BzOiB0aGlzLnVzYWdlcyxcbiAgICAgICAgICAgIGV4dDogdGhpcy5leHRyYWN0YWJsZSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5cbmNsYXNzIEVkMjU1MTlQcml2YXRlS2V5IGV4dGVuZHMgRWQyNTUxOUNyeXB0b0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHJpdmF0ZVwiO1xuICAgIH1cbiAgICB0b0pXSygpIHtcbiAgICAgICAgY29uc3QgcHViSndrID0gY3J5cHRvLmNyZWF0ZVB1YmxpY0tleSh7XG4gICAgICAgICAgICBrZXk6IHRoaXMuZGF0YSxcbiAgICAgICAgICAgIGZvcm1hdDogXCJwZW1cIixcbiAgICAgICAgfSkuZXhwb3J0KHsgZm9ybWF0OiBcImp3a1wiIH0pO1xuICAgICAgICBjb25zdCByYXcgPSBjb3JlLlBlbUNvbnZlcnRlci50b1VpbnQ4QXJyYXkodGhpcy5kYXRhLnRvU3RyaW5nKCkpO1xuICAgICAgICBjb25zdCBwa2NzOCA9IEFzbkNvbnZlcnQucGFyc2UocmF3LCBjb3JlLmFzbjEuUHJpdmF0ZUtleUluZm8pO1xuICAgICAgICBjb25zdCBkID0gQXNuQ29udmVydC5wYXJzZShwa2NzOC5wcml2YXRlS2V5LCBjb3JlLmFzbjEuRWRQcml2YXRlS2V5KS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnN1cGVyLnRvSldLKCksXG4gICAgICAgICAgICAuLi5wdWJKd2ssXG4gICAgICAgICAgICBkOiBCdWZmZXIuZnJvbShuZXcgVWludDhBcnJheShkKSkudG9TdHJpbmcoXCJiYXNlNjR1cmxcIiksXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5jbGFzcyBFZDI1NTE5UHVibGljS2V5IGV4dGVuZHMgRWQyNTUxOUNyeXB0b0tleSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwicHVibGljXCI7XG4gICAgfVxuICAgIHRvSldLKCkge1xuICAgICAgICBjb25zdCBqd2sgPSBjcnlwdG8uY3JlYXRlUHVibGljS2V5KHtcbiAgICAgICAgICAgIGtleTogdGhpcy5kYXRhLFxuICAgICAgICAgICAgZm9ybWF0OiBcInBlbVwiLFxuICAgICAgICB9KS5leHBvcnQoeyBmb3JtYXQ6IFwiandrXCIgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zdXBlci50b0pXSygpLFxuICAgICAgICAgICAgLi4uandrLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxuY2xhc3MgRWQyNTUxOUNyeXB0byB7XG4gICAgc3RhdGljIGFzeW5jIGdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCB0eXBlID0gYWxnb3JpdGhtLm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IGNyeXB0by5nZW5lcmF0ZUtleVBhaXJTeW5jKHR5cGUsIHtcbiAgICAgICAgICAgIHB1YmxpY0tleUVuY29kaW5nOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcInBlbVwiLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3BraVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHByaXZhdGVLZXlFbmNvZGluZzoge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogXCJwZW1cIixcbiAgICAgICAgICAgICAgICB0eXBlOiBcInBrY3M4XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qga2V5QWxnID0ge1xuICAgICAgICAgICAgbmFtZTogdHlwZSA9PT0gXCJlZDI1NTE5XCIgPyBcIkVkMjU1MTlcIiA6IFwiWDI1NTE5XCIsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXlVc2FnZXMgPSBrZXlVc2FnZXMuZmlsdGVyKCh1c2FnZSkgPT4gdGhpcy5wcml2YXRlS2V5VXNhZ2VzLmluY2x1ZGVzKHVzYWdlKSk7XG4gICAgICAgIGNvbnN0IHB1YmxpY0tleVVzYWdlcyA9IGtleVVzYWdlcy5maWx0ZXIoKHVzYWdlKSA9PiB0aGlzLnB1YmxpY0tleVVzYWdlcy5pbmNsdWRlcyh1c2FnZSkpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJpdmF0ZUtleTogbmV3IEVkMjU1MTlQcml2YXRlS2V5KGtleUFsZywgZXh0cmFjdGFibGUsIHByaXZhdGVLZXlVc2FnZXMsIGtleXMucHJpdmF0ZUtleSksXG4gICAgICAgICAgICBwdWJsaWNLZXk6IG5ldyBFZDI1NTE5UHVibGljS2V5KGtleUFsZywgdHJ1ZSwgcHVibGljS2V5VXNhZ2VzLCBrZXlzLnB1YmxpY0tleSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBzaWduKGFsZ29yaXRobSwga2V5LCBkYXRhKSB7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5zaWduKG51bGwsIEJ1ZmZlci5mcm9tKGRhdGEpLCBrZXkuZGF0YSk7XG4gICAgICAgIHJldHVybiBjb3JlLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKHNpZ25hdHVyZSk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyB2ZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICByZXR1cm4gY3J5cHRvLnZlcmlmeShudWxsLCBCdWZmZXIuZnJvbShkYXRhKSwga2V5LmRhdGEsIHNpZ25hdHVyZSk7XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBleHBvcnRLZXkoZm9ybWF0LCBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5LnRvSldLKCk7XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjoge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb3JlLlBlbUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGtleS5kYXRhLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInNwa2lcIjoge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb3JlLlBlbUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGtleS5kYXRhLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInJhd1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgandrID0ga2V5LnRvSldLKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIENvbnZlcnQuRnJvbUJhc2U2NFVybChqd2sueCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJywgJ3JhdycsIHBrY3M4JyBvciAnc3BraSdcIikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBhc3luYyBpbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGp3ayA9IGtleURhdGE7XG4gICAgICAgICAgICAgICAgaWYgKGp3ay5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByaXZhdGVEYXRhID0gbmV3IGNvcmUuYXNuMS5FZFByaXZhdGVLZXkoKTtcbiAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZURhdGEudmFsdWUgPSBjb3JlLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKEJ1ZmZlci5mcm9tKGp3ay5kLCBcImJhc2U2NHVybFwiKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBrY3M4ID0gbmV3IGNvcmUuYXNuMS5Qcml2YXRlS2V5SW5mbygpO1xuICAgICAgICAgICAgICAgICAgICBwa2NzOC5wcml2YXRlS2V5QWxnb3JpdGhtLmFsZ29yaXRobSA9IGFsZ29yaXRobS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiZWQyNTUxOVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNvcmUuYXNuMS5pZEVkMjU1MTlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY29yZS5hc24xLmlkWDI1NTE5O1xuICAgICAgICAgICAgICAgICAgICBwa2NzOC5wcml2YXRlS2V5ID0gQXNuQ29udmVydC5zZXJpYWxpemUocHJpdmF0ZURhdGEpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByYXcgPSBBc25Db252ZXJ0LnNlcmlhbGl6ZShwa2NzOCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlbSA9IGNvcmUuUGVtQ29udmVydGVyLmZyb21CdWZmZXJTb3VyY2UocmF3LCBcIlBSSVZBVEUgS0VZXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVkMjU1MTlQcml2YXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgcGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoandrLngpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHViS2V5ID0gY3J5cHRvLmNyZWF0ZVB1YmxpY0tleSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiandrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGp3ayxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlbSA9IHB1YktleS5leHBvcnQoeyBmb3JtYXQ6IFwicGVtXCIsIHR5cGU6IFwic3BraVwiIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVkMjU1MTlQdWJsaWNLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBwZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuT3BlcmF0aW9uRXJyb3IoXCJrZXlEYXRhOiBDYW5ub3QgaW1wb3J0IEpXSy4gJ2QnIG9yICd4JyBtdXN0IGJlIHByZXNlbnRlZFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwicGtjczhcIjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBlbSA9IGNvcmUuUGVtQ29udmVydGVyLmZyb21CdWZmZXJTb3VyY2Uoa2V5RGF0YSwgXCJQUklWQVRFIEtFWVwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVkMjU1MTlQcml2YXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgcGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgXCJzcGtpXCI6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwZW0gPSBjb3JlLlBlbUNvbnZlcnRlci5mcm9tQnVmZmVyU291cmNlKGtleURhdGEsIFwiUFVCTElDIEtFWVwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVkMjU1MTlQdWJsaWNLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzLCBwZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcInJhd1wiOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmF3ID0ga2V5RGF0YTtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBjcnlwdG8uY3JlYXRlUHVibGljS2V5KHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBcImp3a1wiLFxuICAgICAgICAgICAgICAgICAgICBrZXk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGt0eTogXCJPS1BcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNydjogYWxnb3JpdGhtLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJlZDI1NTE5XCIgPyBcIkVkMjU1MTlcIiA6IFwiWDI1NTE5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBDb252ZXJ0LlRvQmFzZTY0VXJsKHJhdyksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGVtID0ga2V5LmV4cG9ydCh7IGZvcm1hdDogXCJwZW1cIiwgdHlwZTogXCJzcGtpXCIgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFZDI1NTE5UHVibGljS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcywgcGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snLCAncmF3JywgcGtjczgnIG9yICdzcGtpJ1wiKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5FZDI1NTE5Q3J5cHRvLnByaXZhdGVLZXlVc2FnZXMgPSBbXCJzaWduXCIsIFwiZGVyaXZlQml0c1wiLCBcImRlcml2ZUtleVwiXTtcbkVkMjU1MTlDcnlwdG8ucHVibGljS2V5VXNhZ2VzID0gW1widmVyaWZ5XCJdO1xuXG5jbGFzcyBFZDI1NTE5UHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkVkMjU1MTlQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IEVkMjU1MTlDcnlwdG8uZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxLZXkgPSBnZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gRWQyNTUxOUNyeXB0by5zaWduKGFsZ29yaXRobSwgaW50ZXJuYWxLZXksIG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICAgICAgcmV0dXJuIHNpZ25hdHVyZTtcbiAgICB9XG4gICAgb25WZXJpZnkoYWxnb3JpdGhtLCBrZXksIHNpZ25hdHVyZSwgZGF0YSkge1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICByZXR1cm4gRWQyNTUxOUNyeXB0by52ZXJpZnkoYWxnb3JpdGhtLCBpbnRlcm5hbEtleSwgbmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlKSwgbmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgIH1cbiAgICBhc3luYyBvbkV4cG9ydEtleShmb3JtYXQsIGtleSkge1xuICAgICAgICBjb25zdCBpbnRlcm5hbEtleSA9IGdldENyeXB0b0tleShrZXkpO1xuICAgICAgICByZXR1cm4gRWQyNTUxOUNyeXB0by5leHBvcnRLZXkoZm9ybWF0LCBpbnRlcm5hbEtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uSW1wb3J0S2V5KGZvcm1hdCwga2V5RGF0YSwgYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gYXdhaXQgRWQyNTUxOUNyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGludGVybmFsS2V5KTtcbiAgICB9XG59XG5cbmNsYXNzIFgyNTUxOVByb3ZpZGVyIGV4dGVuZHMgY29yZS5YMjU1MTlQcm92aWRlciB7XG4gICAgYXN5bmMgb25HZW5lcmF0ZUtleShhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGF3YWl0IEVkMjU1MTlDcnlwdG8uZ2VuZXJhdGVLZXkoYWxnb3JpdGhtLCBleHRyYWN0YWJsZSwga2V5VXNhZ2VzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByaXZhdGVLZXk6IHNldENyeXB0b0tleShrZXlzLnByaXZhdGVLZXkpLFxuICAgICAgICAgICAgcHVibGljS2V5OiBzZXRDcnlwdG9LZXkoa2V5cy5wdWJsaWNLZXkpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBhc3luYyBvbkRlcml2ZUJpdHMoYWxnb3JpdGhtLCBiYXNlS2V5LCBsZW5ndGgpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWxCYXNlS2V5ID0gZ2V0Q3J5cHRvS2V5KGJhc2VLZXkpO1xuICAgICAgICBjb25zdCBpbnRlcm5hbFB1YmxpY0tleSA9IGdldENyeXB0b0tleShhbGdvcml0aG0ucHVibGljKTtcbiAgICAgICAgY29uc3QgcHVibGljS2V5ID0gY3J5cHRvLmNyZWF0ZVB1YmxpY0tleSh7XG4gICAgICAgICAgICBrZXk6IGludGVybmFsUHVibGljS2V5LmRhdGEudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGZvcm1hdDogXCJwZW1cIixcbiAgICAgICAgICAgIHR5cGU6IFwic3BraVwiLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcHJpdmF0ZUtleSA9IGNyeXB0by5jcmVhdGVQcml2YXRlS2V5KHtcbiAgICAgICAgICAgIGtleTogaW50ZXJuYWxCYXNlS2V5LmRhdGEudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGZvcm1hdDogXCJwZW1cIixcbiAgICAgICAgICAgIHR5cGU6IFwicGtjczhcIixcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGJpdHMgPSBjcnlwdG8uZGlmZmllSGVsbG1hbih7XG4gICAgICAgICAgICBwdWJsaWNLZXksXG4gICAgICAgICAgICBwcml2YXRlS2V5LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJpdHMpLmJ1ZmZlci5zbGljZSgwLCBsZW5ndGggPj4gMyk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsS2V5ID0gZ2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgICAgIHJldHVybiBFZDI1NTE5Q3J5cHRvLmV4cG9ydEtleShmb3JtYXQsIGludGVybmFsS2V5KTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gYXdhaXQgRWQyNTUxOUNyeXB0by5pbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpIHtcbiAgICAgICAgc3VwZXIuY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSk7XG4gICAgICAgIGlmICghKGdldENyeXB0b0tleShrZXkpIGluc3RhbmNlb2YgRWQyNTUxOUNyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBhIEVkMjU1MTlDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFBia2RmQ3J5cHRvS2V5IGV4dGVuZHMgQ3J5cHRvS2V5IHtcbn1cblxuY2xhc3MgUGJrZGYyUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLlBia2RmMlByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkRlcml2ZUJpdHMoYWxnb3JpdGhtLCBiYXNlS2V5LCBsZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNhbHQgPSBjb3JlLkJ1ZmZlclNvdXJjZUNvbnZlcnRlci50b0FycmF5QnVmZmVyKGFsZ29yaXRobS5zYWx0KTtcbiAgICAgICAgICAgIGNvbnN0IGhhc2ggPSBhbGdvcml0aG0uaGFzaC5uYW1lLnJlcGxhY2UoXCItXCIsIFwiXCIpO1xuICAgICAgICAgICAgY3J5cHRvLnBia2RmMihnZXRDcnlwdG9LZXkoYmFzZUtleSkuZGF0YSwgQnVmZmVyJDEuZnJvbShzYWx0KSwgYWxnb3JpdGhtLml0ZXJhdGlvbnMsIGxlbmd0aCA+PiAzLCBoYXNoLCAoZXJyLCBkZXJpdmVkQml0cykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG5ldyBVaW50OEFycmF5KGRlcml2ZWRCaXRzKS5idWZmZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gXCJyYXdcIikge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gbmV3IFBia2RmQ3J5cHRvS2V5KCk7XG4gICAgICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlciQxLmZyb20oa2V5RGF0YSk7XG4gICAgICAgICAgICBrZXkuYWxnb3JpdGhtID0geyBuYW1lOiB0aGlzLm5hbWUgfTtcbiAgICAgICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAga2V5LnVzYWdlcyA9IGtleVVzYWdlcztcbiAgICAgICAgICAgIHJldHVybiBzZXRDcnlwdG9LZXkoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAncmF3J1wiKTtcbiAgICB9XG4gICAgY2hlY2tDcnlwdG9LZXkoa2V5LCBrZXlVc2FnZSkge1xuICAgICAgICBzdXBlci5jaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKTtcbiAgICAgICAgaWYgKCEoZ2V0Q3J5cHRvS2V5KGtleSkgaW5zdGFuY2VvZiBQYmtkZkNyeXB0b0tleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJrZXk6IElzIG5vdCBQQktERiBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEhtYWNDcnlwdG9LZXkgZXh0ZW5kcyBDcnlwdG9LZXkge1xuICAgIGdldCBhbGcoKSB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB0aGlzLmFsZ29yaXRobS5oYXNoLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGBIUyR7aGFzaC5yZXBsYWNlKFwiU0hBLVwiLCBcIlwiKX1gO1xuICAgIH1cbiAgICBzZXQgYWxnKHZhbHVlKSB7XG4gICAgfVxufVxuX19kZWNvcmF0ZShbXG4gICAgSnNvblByb3AoeyBuYW1lOiBcImtcIiwgY29udmVydGVyOiBKc29uQmFzZTY0VXJsQ29udmVydGVyIH0pXG5dLCBIbWFjQ3J5cHRvS2V5LnByb3RvdHlwZSwgXCJkYXRhXCIsIHZvaWQgMCk7XG5cbmNsYXNzIEhtYWNQcm92aWRlciBleHRlbmRzIGNvcmUuSG1hY1Byb3ZpZGVyIHtcbiAgICBhc3luYyBvbkdlbmVyYXRlS2V5KGFsZ29yaXRobSwgZXh0cmFjdGFibGUsIGtleVVzYWdlcykge1xuICAgICAgICBjb25zdCBsZW5ndGggPSAoYWxnb3JpdGhtLmxlbmd0aCB8fCB0aGlzLmdldERlZmF1bHRMZW5ndGgoYWxnb3JpdGhtLmhhc2gubmFtZSkpID4+IDMgPDwgMztcbiAgICAgICAgY29uc3Qga2V5ID0gbmV3IEhtYWNDcnlwdG9LZXkoKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IHtcbiAgICAgICAgICAgIC4uLmFsZ29yaXRobSxcbiAgICAgICAgICAgIGxlbmd0aCxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgfTtcbiAgICAgICAga2V5LmV4dHJhY3RhYmxlID0gZXh0cmFjdGFibGU7XG4gICAgICAgIGtleS51c2FnZXMgPSBrZXlVc2FnZXM7XG4gICAgICAgIGtleS5kYXRhID0gY3J5cHRvLnJhbmRvbUJ5dGVzKGxlbmd0aCA+PiAzKTtcbiAgICAgICAgcmV0dXJuIHNldENyeXB0b0tleShrZXkpO1xuICAgIH1cbiAgICBhc3luYyBvblNpZ24oYWxnb3JpdGhtLCBrZXksIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY3J5cHRvQWxnID0gU2hhQ3J5cHRvLmdldEFsZ29yaXRobU5hbWUoa2V5LmFsZ29yaXRobS5oYXNoKTtcbiAgICAgICAgY29uc3QgaG1hYyA9IGNyeXB0by5jcmVhdGVIbWFjKGNyeXB0b0FsZywgZ2V0Q3J5cHRvS2V5KGtleSkuZGF0YSlcbiAgICAgICAgICAgIC51cGRhdGUoQnVmZmVyJDEuZnJvbShkYXRhKSkuZGlnZXN0KCk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShobWFjKS5idWZmZXI7XG4gICAgfVxuICAgIGFzeW5jIG9uVmVyaWZ5KGFsZ29yaXRobSwga2V5LCBzaWduYXR1cmUsIGRhdGEpIHtcbiAgICAgICAgY29uc3QgY3J5cHRvQWxnID0gU2hhQ3J5cHRvLmdldEFsZ29yaXRobU5hbWUoa2V5LmFsZ29yaXRobS5oYXNoKTtcbiAgICAgICAgY29uc3QgaG1hYyA9IGNyeXB0by5jcmVhdGVIbWFjKGNyeXB0b0FsZywgZ2V0Q3J5cHRvS2V5KGtleSkuZGF0YSlcbiAgICAgICAgICAgIC51cGRhdGUoQnVmZmVyJDEuZnJvbShkYXRhKSkuZGlnZXN0KCk7XG4gICAgICAgIHJldHVybiBobWFjLmNvbXBhcmUoQnVmZmVyJDEuZnJvbShzaWduYXR1cmUpKSA9PT0gMDtcbiAgICB9XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgbGV0IGtleTtcbiAgICAgICAgc3dpdGNoIChmb3JtYXQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImp3a1wiOlxuICAgICAgICAgICAgICAgIGtleSA9IEpzb25QYXJzZXIuZnJvbUpTT04oa2V5RGF0YSwgeyB0YXJnZXRTY2hlbWE6IEhtYWNDcnlwdG9LZXkgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwicmF3XCI6XG4gICAgICAgICAgICAgICAga2V5ID0gbmV3IEhtYWNDcnlwdG9LZXkoKTtcbiAgICAgICAgICAgICAgICBrZXkuZGF0YSA9IEJ1ZmZlciQxLmZyb20oa2V5RGF0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLk9wZXJhdGlvbkVycm9yKFwiZm9ybWF0OiBNdXN0IGJlICdqd2snIG9yICdyYXcnXCIpO1xuICAgICAgICB9XG4gICAgICAgIGtleS5hbGdvcml0aG0gPSB7XG4gICAgICAgICAgICBoYXNoOiB7IG5hbWU6IGFsZ29yaXRobS5oYXNoLm5hbWUgfSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIGxlbmd0aDoga2V5LmRhdGEubGVuZ3RoIDw8IDMsXG4gICAgICAgIH07XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRXhwb3J0S2V5KGZvcm1hdCwga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoZm9ybWF0LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqd2tcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gSnNvblNlcmlhbGl6ZXIudG9KU09OKGdldENyeXB0b0tleShrZXkpKTtcbiAgICAgICAgICAgIGNhc2UgXCJyYXdcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZ2V0Q3J5cHRvS2V5KGtleSkuZGF0YSkuYnVmZmVyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcImZvcm1hdDogTXVzdCBiZSAnandrJyBvciAncmF3J1wiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEhtYWNDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgSE1BQyBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEhrZGZDcnlwdG9LZXkgZXh0ZW5kcyBDcnlwdG9LZXkge1xufVxuXG5jbGFzcyBIa2RmUHJvdmlkZXIgZXh0ZW5kcyBjb3JlLkhrZGZQcm92aWRlciB7XG4gICAgYXN5bmMgb25JbXBvcnRLZXkoZm9ybWF0LCBrZXlEYXRhLCBhbGdvcml0aG0sIGV4dHJhY3RhYmxlLCBrZXlVc2FnZXMpIHtcbiAgICAgICAgaWYgKGZvcm1hdC50b0xvd2VyQ2FzZSgpICE9PSBcInJhd1wiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS5PcGVyYXRpb25FcnJvcihcIk9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtleSA9IG5ldyBIa2RmQ3J5cHRvS2V5KCk7XG4gICAgICAgIGtleS5kYXRhID0gQnVmZmVyJDEuZnJvbShrZXlEYXRhKTtcbiAgICAgICAga2V5LmFsZ29yaXRobSA9IHsgbmFtZTogdGhpcy5uYW1lIH07XG4gICAgICAgIGtleS5leHRyYWN0YWJsZSA9IGV4dHJhY3RhYmxlO1xuICAgICAgICBrZXkudXNhZ2VzID0ga2V5VXNhZ2VzO1xuICAgICAgICByZXR1cm4gc2V0Q3J5cHRvS2V5KGtleSk7XG4gICAgfVxuICAgIGFzeW5jIG9uRGVyaXZlQml0cyhwYXJhbXMsIGJhc2VLZXksIGxlbmd0aCkge1xuICAgICAgICBjb25zdCBoYXNoID0gcGFyYW1zLmhhc2gubmFtZS5yZXBsYWNlKFwiLVwiLCBcIlwiKTtcbiAgICAgICAgY29uc3QgaGFzaExlbmd0aCA9IGNyeXB0by5jcmVhdGVIYXNoKGhhc2gpLmRpZ2VzdCgpLmxlbmd0aDtcbiAgICAgICAgY29uc3QgYnl0ZUxlbmd0aCA9IGxlbmd0aCAvIDg7XG4gICAgICAgIGNvbnN0IGluZm8gPSBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIkMS50b1VpbnQ4QXJyYXkocGFyYW1zLmluZm8pO1xuICAgICAgICBjb25zdCBQUksgPSBjcnlwdG8uY3JlYXRlSG1hYyhoYXNoLCBCdWZmZXJTb3VyY2VDb252ZXJ0ZXIkMS50b1VpbnQ4QXJyYXkocGFyYW1zLnNhbHQpKVxuICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXJTb3VyY2VDb252ZXJ0ZXIkMS50b1VpbnQ4QXJyYXkoZ2V0Q3J5cHRvS2V5KGJhc2VLZXkpLmRhdGEpKVxuICAgICAgICAgICAgLmRpZ2VzdCgpO1xuICAgICAgICBjb25zdCBibG9ja3MgPSBbQnVmZmVyJDEuYWxsb2MoMCldO1xuICAgICAgICBjb25zdCBibG9ja0NvdW50ID0gTWF0aC5jZWlsKGJ5dGVMZW5ndGggLyBoYXNoTGVuZ3RoKSArIDE7XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgYmxvY2tDb3VudDsgKytpKSB7XG4gICAgICAgICAgICBibG9ja3MucHVzaChjcnlwdG8uY3JlYXRlSG1hYyhoYXNoLCBQUkspXG4gICAgICAgICAgICAgICAgLnVwZGF0ZShCdWZmZXIkMS5jb25jYXQoW2Jsb2Nrc1tpIC0gMV0sIGluZm8sIEJ1ZmZlciQxLmZyb20oW2ldKV0pKVxuICAgICAgICAgICAgICAgIC5kaWdlc3QoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEJ1ZmZlciQxLmNvbmNhdChibG9ja3MpLnNsaWNlKDAsIGJ5dGVMZW5ndGgpO1xuICAgIH1cbiAgICBjaGVja0NyeXB0b0tleShrZXksIGtleVVzYWdlKSB7XG4gICAgICAgIHN1cGVyLmNoZWNrQ3J5cHRvS2V5KGtleSwga2V5VXNhZ2UpO1xuICAgICAgICBpZiAoIShnZXRDcnlwdG9LZXkoa2V5KSBpbnN0YW5jZW9mIEhrZGZDcnlwdG9LZXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwia2V5OiBJcyBub3QgSEtERiBDcnlwdG9LZXlcIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIFNoYWtlQ3J5cHRvIHtcbiAgICBzdGF0aWMgZGlnZXN0KGFsZ29yaXRobSwgZGF0YSkge1xuICAgICAgICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtLm5hbWUudG9Mb3dlckNhc2UoKSwgeyBvdXRwdXRMZW5ndGg6IGFsZ29yaXRobS5sZW5ndGggfSlcbiAgICAgICAgICAgIC51cGRhdGUoQnVmZmVyJDEuZnJvbShkYXRhKSkuZGlnZXN0KCk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShoYXNoKS5idWZmZXI7XG4gICAgfVxufVxuXG5jbGFzcyBTaGFrZTEyOFByb3ZpZGVyIGV4dGVuZHMgY29yZS5TaGFrZTEyOFByb3ZpZGVyIHtcbiAgICBhc3luYyBvbkRpZ2VzdChhbGdvcml0aG0sIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFNoYWtlQ3J5cHRvLmRpZ2VzdChhbGdvcml0aG0sIGRhdGEpO1xuICAgIH1cbn1cblxuY2xhc3MgU2hha2UyNTZQcm92aWRlciBleHRlbmRzIGNvcmUuU2hha2UyNTZQcm92aWRlciB7XG4gICAgYXN5bmMgb25EaWdlc3QoYWxnb3JpdGhtLCBkYXRhKSB7XG4gICAgICAgIHJldHVybiBTaGFrZUNyeXB0by5kaWdlc3QoYWxnb3JpdGhtLCBkYXRhKTtcbiAgICB9XG59XG5cbmNsYXNzIFN1YnRsZUNyeXB0byBleHRlbmRzIGNvcmUuU3VidGxlQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEFlc0NiY1Byb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEFlc0N0clByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEFlc0djbVByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEFlc0NtYWNQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBBZXNLd1Byb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEFlc0VjYlByb3ZpZGVyKCkpO1xuICAgICAgICBjb25zdCBjaXBoZXJzID0gY3J5cHRvLmdldENpcGhlcnMoKTtcbiAgICAgICAgaWYgKGNpcGhlcnMuaW5jbHVkZXMoXCJkZXMtY2JjXCIpKSB7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IERlc0NiY1Byb3ZpZGVyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgRGVzRWRlM0NiY1Byb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFJzYVNzYVByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFJzYVBzc1Byb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFJzYU9hZXBQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBSc2FFc1Byb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEVjZHNhUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgRWNkaFByb3ZpZGVyKCkpO1xuICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTFQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBTaGEyNTZQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBTaGEzODRQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBTaGE1MTJQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBQYmtkZjJQcm92aWRlcigpKTtcbiAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBIbWFjUHJvdmlkZXIoKSk7XG4gICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgSGtkZlByb3ZpZGVyKCkpO1xuICAgICAgICBjb25zdCBub2RlTWFqb3JWZXJzaW9uID0gKF9hID0gL152KFxcZCspLy5leGVjKHByb2Nlc3MudmVyc2lvbikpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYVsxXTtcbiAgICAgICAgaWYgKG5vZGVNYWpvclZlcnNpb24gJiYgcGFyc2VJbnQobm9kZU1ham9yVmVyc2lvbiwgMTApID49IDEyKSB7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYWtlMTI4UHJvdmlkZXIoKSk7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYWtlMjU2UHJvdmlkZXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGFzaGVzID0gY3J5cHRvLmdldEhhc2hlcygpO1xuICAgICAgICBpZiAoaGFzaGVzLmluY2x1ZGVzKFwic2hhMy0yNTZcIikpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgU2hhMzI1NlByb3ZpZGVyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNoZXMuaW5jbHVkZXMoXCJzaGEzLTM4NFwiKSkge1xuICAgICAgICAgICAgdGhpcy5wcm92aWRlcnMuc2V0KG5ldyBTaGEzMzg0UHJvdmlkZXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc2hlcy5pbmNsdWRlcyhcInNoYTMtNTEyXCIpKSB7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IFNoYTM1MTJQcm92aWRlcigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZU1ham9yVmVyc2lvbiAmJiBwYXJzZUludChub2RlTWFqb3JWZXJzaW9uLCAxMCkgPj0gMTQpIHtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgRWREc2FQcm92aWRlcigpKTtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgRWNkaEVzUHJvdmlkZXIoKSk7XG4gICAgICAgICAgICB0aGlzLnByb3ZpZGVycy5zZXQobmV3IEVkMjU1MTlQcm92aWRlcigpKTtcbiAgICAgICAgICAgIHRoaXMucHJvdmlkZXJzLnNldChuZXcgWDI1NTE5UHJvdmlkZXIoKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIENyeXB0byBleHRlbmRzIGNvcmUuQ3J5cHRvIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5zdWJ0bGUgPSBuZXcgU3VidGxlQ3J5cHRvKCk7XG4gICAgfVxuICAgIGdldFJhbmRvbVZhbHVlcyhhcnJheSkge1xuICAgICAgICBpZiAoIUFycmF5QnVmZmVyLmlzVmlldyhhcnJheSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZ2V0UmFuZG9tVmFsdWVzJyBvbiAnQ3J5cHRvJzogcGFyYW1ldGVyIDEgaXMgbm90IG9mIHR5cGUgJ0FycmF5QnVmZmVyVmlldydcIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyJDEuZnJvbShhcnJheS5idWZmZXIsIGFycmF5LmJ5dGVPZmZzZXQsIGFycmF5LmJ5dGVMZW5ndGgpO1xuICAgICAgICBjcnlwdG8ucmFuZG9tRmlsbFN5bmMoYnVmZmVyKTtcbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgIH1cbn1cblxuZXhwb3J0IHsgQ3J5cHRvIH07XG4iLCAiZXhwb3J0IHZhciB0b3AgPSAndG9wJztcbmV4cG9ydCB2YXIgYm90dG9tID0gJ2JvdHRvbSc7XG5leHBvcnQgdmFyIHJpZ2h0ID0gJ3JpZ2h0JztcbmV4cG9ydCB2YXIgbGVmdCA9ICdsZWZ0JztcbmV4cG9ydCB2YXIgYXV0byA9ICdhdXRvJztcbmV4cG9ydCB2YXIgYmFzZVBsYWNlbWVudHMgPSBbdG9wLCBib3R0b20sIHJpZ2h0LCBsZWZ0XTtcbmV4cG9ydCB2YXIgc3RhcnQgPSAnc3RhcnQnO1xuZXhwb3J0IHZhciBlbmQgPSAnZW5kJztcbmV4cG9ydCB2YXIgY2xpcHBpbmdQYXJlbnRzID0gJ2NsaXBwaW5nUGFyZW50cyc7XG5leHBvcnQgdmFyIHZpZXdwb3J0ID0gJ3ZpZXdwb3J0JztcbmV4cG9ydCB2YXIgcG9wcGVyID0gJ3BvcHBlcic7XG5leHBvcnQgdmFyIHJlZmVyZW5jZSA9ICdyZWZlcmVuY2UnO1xuZXhwb3J0IHZhciB2YXJpYXRpb25QbGFjZW1lbnRzID0gLyojX19QVVJFX18qL2Jhc2VQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7XG5leHBvcnQgdmFyIHBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovW10uY29uY2F0KGJhc2VQbGFjZW1lbnRzLCBbYXV0b10pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCwgcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTsgLy8gbW9kaWZpZXJzIHRoYXQgbmVlZCB0byByZWFkIHRoZSBET01cblxuZXhwb3J0IHZhciBiZWZvcmVSZWFkID0gJ2JlZm9yZVJlYWQnO1xuZXhwb3J0IHZhciByZWFkID0gJ3JlYWQnO1xuZXhwb3J0IHZhciBhZnRlclJlYWQgPSAnYWZ0ZXJSZWFkJzsgLy8gcHVyZS1sb2dpYyBtb2RpZmllcnNcblxuZXhwb3J0IHZhciBiZWZvcmVNYWluID0gJ2JlZm9yZU1haW4nO1xuZXhwb3J0IHZhciBtYWluID0gJ21haW4nO1xuZXhwb3J0IHZhciBhZnRlck1haW4gPSAnYWZ0ZXJNYWluJzsgLy8gbW9kaWZpZXIgd2l0aCB0aGUgcHVycG9zZSB0byB3cml0ZSB0byB0aGUgRE9NIChvciB3cml0ZSBpbnRvIGEgZnJhbWV3b3JrIHN0YXRlKVxuXG5leHBvcnQgdmFyIGJlZm9yZVdyaXRlID0gJ2JlZm9yZVdyaXRlJztcbmV4cG9ydCB2YXIgd3JpdGUgPSAnd3JpdGUnO1xuZXhwb3J0IHZhciBhZnRlcldyaXRlID0gJ2FmdGVyV3JpdGUnO1xuZXhwb3J0IHZhciBtb2RpZmllclBoYXNlcyA9IFtiZWZvcmVSZWFkLCByZWFkLCBhZnRlclJlYWQsIGJlZm9yZU1haW4sIG1haW4sIGFmdGVyTWFpbiwgYmVmb3JlV3JpdGUsIHdyaXRlLCBhZnRlcldyaXRlXTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZU5hbWUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCA/IChlbGVtZW50Lm5vZGVOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICBpZiAobm9kZS50b1N0cmluZygpICE9PSAnW29iamVjdCBXaW5kb3ddJykge1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50O1xuICAgIHJldHVybiBvd25lckRvY3VtZW50ID8gb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cgOiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuSFRNTEVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzU2hhZG93Um9vdChub2RlKSB7XG4gIC8vIElFIDExIGhhcyBubyBTaGFkb3dSb290XG4gIGlmICh0eXBlb2YgU2hhZG93Um9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5TaGFkb3dSb290O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q7XG59XG5cbmV4cG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNTaGFkb3dSb290IH07IiwgImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7IC8vIFRoaXMgbW9kaWZpZXIgdGFrZXMgdGhlIHN0eWxlcyBwcmVwYXJlZCBieSB0aGUgYGNvbXB1dGVTdHlsZXNgIG1vZGlmaWVyXG4vLyBhbmQgYXBwbGllcyB0aGVtIHRvIHRoZSBIVE1MRWxlbWVudHMgc3VjaCBhcyBwb3BwZXIgYW5kIGFycm93XG5cbmZ1bmN0aW9uIGFwcGx5U3R5bGVzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZTtcbiAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgc3R5bGUgPSBzdGF0ZS5zdHlsZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRmxvdyBkb2Vzbid0IHN1cHBvcnQgdG8gZXh0ZW5kIHRoaXMgcHJvcGVydHksIGJ1dCBpdCdzIHRoZSBtb3N0XG4gICAgLy8gZWZmZWN0aXZlIHdheSB0byBhcHBseSBzdHlsZXMgdG8gYW4gSFRNTEVsZW1lbnRcbiAgICAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV1cblxuXG4gICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIHZhbHVlID0gYXR0cmlidXRlc1tuYW1lXTtcblxuICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlID09PSB0cnVlID8gJycgOiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGU7XG4gIHZhciBpbml0aWFsU3R5bGVzID0ge1xuICAgIHBvcHBlcjoge1xuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBsZWZ0OiAnMCcsXG4gICAgICB0b3A6ICcwJyxcbiAgICAgIG1hcmdpbjogJzAnXG4gICAgfSxcbiAgICBhcnJvdzoge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbiAgICB9LFxuICAgIHJlZmVyZW5jZToge31cbiAgfTtcbiAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5wb3BwZXIuc3R5bGUsIGluaXRpYWxTdHlsZXMucG9wcGVyKTtcbiAgc3RhdGUuc3R5bGVzID0gaW5pdGlhbFN0eWxlcztcblxuICBpZiAoc3RhdGUuZWxlbWVudHMuYXJyb3cpIHtcbiAgICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLmFycm93LnN0eWxlLCBpbml0aWFsU3R5bGVzLmFycm93KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07XG4gICAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgICB2YXIgc3R5bGVQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoc3RhdGUuc3R5bGVzLmhhc093blByb3BlcnR5KG5hbWUpID8gc3RhdGUuc3R5bGVzW25hbWVdIDogaW5pdGlhbFN0eWxlc1tuYW1lXSk7IC8vIFNldCBhbGwgdmFsdWVzIHRvIGFuIGVtcHR5IHN0cmluZyB0byB1bnNldCB0aGVtXG5cbiAgICAgIHZhciBzdHlsZSA9IHN0eWxlUHJvcGVydGllcy5yZWR1Y2UoZnVuY3Rpb24gKHN0eWxlLCBwcm9wZXJ0eSkge1xuICAgICAgICBzdHlsZVtwcm9wZXJ0eV0gPSAnJztcbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSwge30pOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2FwcGx5U3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBhcHBseVN0eWxlcyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ2NvbXB1dGVTdHlsZXMnXVxufTsiLCAiaW1wb3J0IHsgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufSIsICJleHBvcnQgdmFyIG1heCA9IE1hdGgubWF4O1xuZXhwb3J0IHZhciBtaW4gPSBNYXRoLm1pbjtcbmV4cG9ydCB2YXIgcm91bmQgPSBNYXRoLnJvdW5kOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVQVN0cmluZygpIHtcbiAgdmFyIHVhRGF0YSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhO1xuXG4gIGlmICh1YURhdGEgIT0gbnVsbCAmJiB1YURhdGEuYnJhbmRzICYmIEFycmF5LmlzQXJyYXkodWFEYXRhLmJyYW5kcykpIHtcbiAgICByZXR1cm4gdWFEYXRhLmJyYW5kcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLmJyYW5kICsgXCIvXCIgKyBpdGVtLnZlcnNpb247XG4gICAgfSkuam9pbignICcpO1xuICB9XG5cbiAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG59IiwgImltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0xheW91dFZpZXdwb3J0KCkge1xuICByZXR1cm4gIS9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG59IiwgImltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgaXNMYXlvdXRWaWV3cG9ydCBmcm9tIFwiLi9pc0xheW91dFZpZXdwb3J0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgaW5jbHVkZVNjYWxlLCBpc0ZpeGVkU3RyYXRlZ3kpIHtcbiAgaWYgKGluY2x1ZGVTY2FsZSA9PT0gdm9pZCAwKSB7XG4gICAgaW5jbHVkZVNjYWxlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNGaXhlZFN0cmF0ZWd5ID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkU3RyYXRlZ3kgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBjbGllbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IDE7XG4gIHZhciBzY2FsZVkgPSAxO1xuXG4gIGlmIChpbmNsdWRlU2NhbGUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIHNjYWxlWCA9IGVsZW1lbnQub2Zmc2V0V2lkdGggPiAwID8gcm91bmQoY2xpZW50UmVjdC53aWR0aCkgLyBlbGVtZW50Lm9mZnNldFdpZHRoIHx8IDEgOiAxO1xuICAgIHNjYWxlWSA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ID4gMCA/IHJvdW5kKGNsaWVudFJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDEgOiAxO1xuICB9XG5cbiAgdmFyIF9yZWYgPSBpc0VsZW1lbnQoZWxlbWVudCkgPyBnZXRXaW5kb3coZWxlbWVudCkgOiB3aW5kb3csXG4gICAgICB2aXN1YWxWaWV3cG9ydCA9IF9yZWYudmlzdWFsVmlld3BvcnQ7XG5cbiAgdmFyIGFkZFZpc3VhbE9mZnNldHMgPSAhaXNMYXlvdXRWaWV3cG9ydCgpICYmIGlzRml4ZWRTdHJhdGVneTtcbiAgdmFyIHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0IDogMCkpIC8gc2NhbGVYO1xuICB2YXIgeSA9IChjbGllbnRSZWN0LnRvcCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wIDogMCkpIC8gc2NhbGVZO1xuICB2YXIgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoIC8gc2NhbGVYO1xuICB2YXIgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZVk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHRvcDogeSxcbiAgICByaWdodDogeCArIHdpZHRoLFxuICAgIGJvdHRvbTogeSArIGhlaWdodCxcbiAgICBsZWZ0OiB4LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsICJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiOyAvLyBSZXR1cm5zIHRoZSBsYXlvdXQgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuIExheW91dFxuLy8gbWVhbnMgaXQgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRMYXlvdXRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCk7IC8vIFVzZSB0aGUgY2xpZW50UmVjdCBzaXplcyBpZiBpdCdzIG5vdCBiZWVuIHRyYW5zZm9ybWVkLlxuICAvLyBGaXhlcyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEyMjNcblxuICB2YXIgd2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3Qud2lkdGggLSB3aWR0aCkgPD0gMSkge1xuICAgIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aDtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LmhlaWdodCAtIGhlaWdodCkgPD0gMSkge1xuICAgIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBlbGVtZW50Lm9mZnNldExlZnQsXG4gICAgeTogZWxlbWVudC5vZmZzZXRUb3AsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59IiwgImltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHtcbiAgdmFyIHJvb3ROb2RlID0gY2hpbGQuZ2V0Um9vdE5vZGUgJiYgY2hpbGQuZ2V0Um9vdE5vZGUoKTsgLy8gRmlyc3QsIGF0dGVtcHQgd2l0aCBmYXN0ZXIgbmF0aXZlIG1ldGhvZFxuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gdGhlbiBmYWxsYmFjayB0byBjdXN0b20gaW1wbGVtZW50YXRpb24gd2l0aCBTaGFkb3cgRE9NIHN1cHBvcnRcbiAgZWxzZSBpZiAocm9vdE5vZGUgJiYgaXNTaGFkb3dSb290KHJvb3ROb2RlKSkge1xuICAgICAgdmFyIG5leHQgPSBjaGlsZDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobmV4dCAmJiBwYXJlbnQuaXNTYW1lTm9kZShuZXh0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXTogbmVlZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMuLi5cblxuXG4gICAgICAgIG5leHQgPSBuZXh0LnBhcmVudE5vZGUgfHwgbmV4dC5ob3N0O1xuICAgICAgfSB3aGlsZSAobmV4dCk7XG4gICAgfSAvLyBHaXZlIHVwLCB0aGUgcmVzdWx0IGlzIGZhbHNlXG5cblxuICByZXR1cm4gZmFsc2U7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufSIsICJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmRleE9mKGdldE5vZGVOYW1lKGVsZW1lbnQpKSA+PSAwO1xufSIsICJpbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkge1xuICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gIHJldHVybiAoKGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQub3duZXJEb2N1bWVudCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICBlbGVtZW50LmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpLmRvY3VtZW50RWxlbWVudDtcbn0iLCAiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSB7XG4gIGlmIChnZXROb2RlTmFtZShlbGVtZW50KSA9PT0gJ2h0bWwnKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gKC8vIHRoaXMgaXMgYSBxdWlja2VyIChidXQgbGVzcyB0eXBlIHNhZmUpIHdheSB0byBzYXZlIHF1aXRlIHNvbWUgYnl0ZXMgZnJvbSB0aGUgYnVuZGxlXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgIGVsZW1lbnQuYXNzaWduZWRTbG90IHx8IC8vIHN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlXG4gICAgZWxlbWVudC5wYXJlbnROb2RlIHx8ICggLy8gRE9NIEVsZW1lbnQgZGV0ZWN0ZWRcbiAgICBpc1NoYWRvd1Jvb3QoZWxlbWVudCkgPyBlbGVtZW50Lmhvc3QgOiBudWxsKSB8fCAvLyBTaGFkb3dSb290IGRldGVjdGVkXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IEhUTUxFbGVtZW50IGlzIGEgTm9kZVxuICAgIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSAvLyBmYWxsYmFja1xuXG4gICk7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBpc1RhYmxlRWxlbWVudCBmcm9tIFwiLi9pc1RhYmxlRWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzgzN1xuICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG59IC8vIGAub2Zmc2V0UGFyZW50YCByZXBvcnRzIGBudWxsYCBmb3IgZml4ZWQgZWxlbWVudHMsIHdoaWxlIGFic29sdXRlIGVsZW1lbnRzXG4vLyByZXR1cm4gdGhlIGNvbnRhaW5pbmcgYmxvY2tcblxuXG5mdW5jdGlvbiBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICB2YXIgaXNGaXJlZm94ID0gL2ZpcmVmb3gvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuICB2YXIgaXNJRSA9IC9UcmlkZW50L2kudGVzdChnZXRVQVN0cmluZygpKTtcblxuICBpZiAoaXNJRSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgLy8gSW4gSUUgOSwgMTAgYW5kIDExIGZpeGVkIGVsZW1lbnRzIGNvbnRhaW5pbmcgYmxvY2sgaXMgYWx3YXlzIGVzdGFibGlzaGVkIGJ5IHRoZSB2aWV3cG9ydFxuICAgIHZhciBlbGVtZW50Q3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50Q3NzLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuXG4gIGlmIChpc1NoYWRvd1Jvb3QoY3VycmVudE5vZGUpKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5ob3N0O1xuICB9XG5cbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmIFsnaHRtbCcsICdib2R5J10uaW5kZXhPZihnZXROb2RlTmFtZShjdXJyZW50Tm9kZSkpIDwgMCkge1xuICAgIHZhciBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnROb2RlKTsgLy8gVGhpcyBpcyBub24tZXhoYXVzdGl2ZSBidXQgY292ZXJzIHRoZSBtb3N0IGNvbW1vbiBDU1MgcHJvcGVydGllcyB0aGF0XG4gICAgLy8gY3JlYXRlIGEgY29udGFpbmluZyBibG9jay5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuXG4gICAgaWYgKGNzcy50cmFuc2Zvcm0gIT09ICdub25lJyB8fCBjc3MucGVyc3BlY3RpdmUgIT09ICdub25lJyB8fCBjc3MuY29udGFpbiA9PT0gJ3BhaW50JyB8fCBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZSddLmluZGV4T2YoY3NzLndpbGxDaGFuZ2UpICE9PSAtMSB8fCBpc0ZpcmVmb3ggJiYgY3NzLndpbGxDaGFuZ2UgPT09ICdmaWx0ZXInIHx8IGlzRmlyZWZveCAmJiBjc3MuZmlsdGVyICYmIGNzcy5maWx0ZXIgIT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCk7XG5cbiAgd2hpbGUgKG9mZnNldFBhcmVudCAmJiBpc1RhYmxlRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCk7XG4gIH1cblxuICBpZiAob2Zmc2V0UGFyZW50ICYmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnaHRtbCcgfHwgZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2JvZHknICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbmRvdztcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpID49IDAgPyAneCcgOiAneSc7XG59IiwgImltcG9ydCB7IG1heCBhcyBtYXRoTWF4LCBtaW4gYXMgbWF0aE1pbiB9IGZyb20gXCIuL21hdGguanNcIjtcbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KSB7XG4gIHJldHVybiBtYXRoTWF4KG1pbiwgbWF0aE1pbih2YWx1ZSwgbWF4KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gd2l0aGluTWF4Q2xhbXAobWluLCB2YWx1ZSwgbWF4KSB7XG4gIHZhciB2ID0gd2l0aGluKG1pbiwgdmFsdWUsIG1heCk7XG4gIHJldHVybiB2ID4gbWF4ID8gbWF4IDogdjtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RnJlc2hTaWRlT2JqZWN0KCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMFxuICB9O1xufSIsICJpbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VQYWRkaW5nT2JqZWN0KHBhZGRpbmdPYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGdldEZyZXNoU2lkZU9iamVjdCgpLCBwYWRkaW5nT2JqZWN0KTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXhwYW5kVG9IYXNoTWFwKHZhbHVlLCBrZXlzKSB7XG4gIHJldHVybiBrZXlzLnJlZHVjZShmdW5jdGlvbiAoaGFzaE1hcCwga2V5KSB7XG4gICAgaGFzaE1hcFtrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIGhhc2hNYXA7XG4gIH0sIHt9KTtcbn0iLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuLi9kb20tdXRpbHMvY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgd2l0aGluIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi4vdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuLi91dGlscy9leHBhbmRUb0hhc2hNYXAuanNcIjtcbmltcG9ydCB7IGxlZnQsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdG9wLCBib3R0b20gfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdG9QYWRkaW5nT2JqZWN0ID0gZnVuY3Rpb24gdG9QYWRkaW5nT2JqZWN0KHBhZGRpbmcsIHN0YXRlKSB7XG4gIHBhZGRpbmcgPSB0eXBlb2YgcGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IHBhZGRpbmcoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiBwYWRkaW5nO1xuICByZXR1cm4gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbn07XG5cbmZ1bmN0aW9uIGFycm93KF9yZWYpIHtcbiAgdmFyIF9zdGF0ZSRtb2RpZmllcnNEYXRhJDtcblxuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGlzVmVydGljYWwgPSBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgaWYgKCFhcnJvd0VsZW1lbnQgfHwgIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFkZGluZ09iamVjdCA9IHRvUGFkZGluZ09iamVjdChvcHRpb25zLnBhZGRpbmcsIHN0YXRlKTtcbiAgdmFyIGFycm93UmVjdCA9IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KTtcbiAgdmFyIG1pblByb3AgPSBheGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICB2YXIgbWF4UHJvcCA9IGF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICB2YXIgZW5kRGlmZiA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtsZW5dICsgc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnBvcHBlcltsZW5dO1xuICB2YXIgc3RhcnREaWZmID0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGFycm93RWxlbWVudCk7XG4gIHZhciBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBheGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRIZWlnaHQgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIHx8IDAgOiAwO1xuICB2YXIgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7IC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgcG9wcGVyIGlmIHRoZSBjZW50ZXIgcG9pbnQgaXNcbiAgLy8gb3V0c2lkZSBvZiB0aGUgcG9wcGVyIGJvdW5kc1xuXG4gIHZhciBtaW4gPSBwYWRkaW5nT2JqZWN0W21pblByb3BdO1xuICB2YXIgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93UmVjdFtsZW5dIC0gcGFkZGluZ09iamVjdFttYXhQcm9wXTtcbiAgdmFyIGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dSZWN0W2xlbl0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gIHZhciBvZmZzZXQgPSB3aXRoaW4obWluLCBjZW50ZXIsIG1heCk7IC8vIFByZXZlbnRzIGJyZWFraW5nIHN5bnRheCBoaWdobGlnaHRpbmcuLi5cblxuICB2YXIgYXhpc1Byb3AgPSBheGlzO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gKF9zdGF0ZSRtb2RpZmllcnNEYXRhJCA9IHt9LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSRbYXhpc1Byb3BdID0gb2Zmc2V0LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQuY2VudGVyT2Zmc2V0ID0gb2Zmc2V0IC0gY2VudGVyLCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQpO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQsXG4gICAgICBhcnJvd0VsZW1lbnQgPSBfb3B0aW9ucyRlbGVtZW50ID09PSB2b2lkIDAgPyAnW2RhdGEtcG9wcGVyLWFycm93XScgOiBfb3B0aW9ucyRlbGVtZW50O1xuXG4gIGlmIChhcnJvd0VsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBDU1Mgc2VsZWN0b3JcblxuXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGFpbnMoc3RhdGUuZWxlbWVudHMucG9wcGVyLCBhcnJvd0VsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUuZWxlbWVudHMuYXJyb3cgPSBhcnJvd0VsZW1lbnQ7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcnJvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBhcnJvdyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXVxufTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59IiwgImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdW5zZXRTaWRlcyA9IHtcbiAgdG9wOiAnYXV0bycsXG4gIHJpZ2h0OiAnYXV0bycsXG4gIGJvdHRvbTogJ2F1dG8nLFxuICBsZWZ0OiAnYXV0bydcbn07IC8vIFJvdW5kIHRoZSBvZmZzZXRzIHRvIHRoZSBuZWFyZXN0IHN1aXRhYmxlIHN1YnBpeGVsIGJhc2VkIG9uIHRoZSBEUFIuXG4vLyBab29taW5nIGNhbiBjaGFuZ2UgdGhlIERQUiwgYnV0IGl0IHNlZW1zIHRvIHJlcG9ydCBhIHZhbHVlIHRoYXQgd2lsbFxuLy8gY2xlYW5seSBkaXZpZGUgdGhlIHZhbHVlcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBzdWJwaXhlbHMuXG5cbmZ1bmN0aW9uIHJvdW5kT2Zmc2V0c0J5RFBSKF9yZWYsIHdpbikge1xuICB2YXIgeCA9IF9yZWYueCxcbiAgICAgIHkgPSBfcmVmLnk7XG4gIHZhciBkcHIgPSB3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICByZXR1cm4ge1xuICAgIHg6IHJvdW5kKHggKiBkcHIpIC8gZHByIHx8IDAsXG4gICAgeTogcm91bmQoeSAqIGRwcikgLyBkcHIgfHwgMFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9TdHlsZXMoX3JlZjIpIHtcbiAgdmFyIF9PYmplY3QkYXNzaWduMjtcblxuICB2YXIgcG9wcGVyID0gX3JlZjIucG9wcGVyLFxuICAgICAgcG9wcGVyUmVjdCA9IF9yZWYyLnBvcHBlclJlY3QsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmMi5wbGFjZW1lbnQsXG4gICAgICB2YXJpYXRpb24gPSBfcmVmMi52YXJpYXRpb24sXG4gICAgICBvZmZzZXRzID0gX3JlZjIub2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uID0gX3JlZjIucG9zaXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfcmVmMi5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBhZGFwdGl2ZSA9IF9yZWYyLmFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzID0gX3JlZjIucm91bmRPZmZzZXRzLFxuICAgICAgaXNGaXhlZCA9IF9yZWYyLmlzRml4ZWQ7XG4gIHZhciBfb2Zmc2V0cyR4ID0gb2Zmc2V0cy54LFxuICAgICAgeCA9IF9vZmZzZXRzJHggPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR4LFxuICAgICAgX29mZnNldHMkeSA9IG9mZnNldHMueSxcbiAgICAgIHkgPSBfb2Zmc2V0cyR5ID09PSB2b2lkIDAgPyAwIDogX29mZnNldHMkeTtcblxuICB2YXIgX3JlZjMgPSB0eXBlb2Ygcm91bmRPZmZzZXRzID09PSAnZnVuY3Rpb24nID8gcm91bmRPZmZzZXRzKHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfSkgOiB7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG5cbiAgeCA9IF9yZWYzLng7XG4gIHkgPSBfcmVmMy55O1xuICB2YXIgaGFzWCA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3gnKTtcbiAgdmFyIGhhc1kgPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd5Jyk7XG4gIHZhciBzaWRlWCA9IGxlZnQ7XG4gIHZhciBzaWRlWSA9IHRvcDtcbiAgdmFyIHdpbiA9IHdpbmRvdztcblxuICBpZiAoYWRhcHRpdmUpIHtcbiAgICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KHBvcHBlcik7XG4gICAgdmFyIGhlaWdodFByb3AgPSAnY2xpZW50SGVpZ2h0JztcbiAgICB2YXIgd2lkdGhQcm9wID0gJ2NsaWVudFdpZHRoJztcblxuICAgIGlmIChvZmZzZXRQYXJlbnQgPT09IGdldFdpbmRvdyhwb3BwZXIpKSB7XG4gICAgICBvZmZzZXRQYXJlbnQgPSBnZXREb2N1bWVudEVsZW1lbnQocG9wcGVyKTtcblxuICAgICAgaWYgKGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiAhPT0gJ3N0YXRpYycgJiYgcG9zaXRpb24gPT09ICdhYnNvbHV0ZScpIHtcbiAgICAgICAgaGVpZ2h0UHJvcCA9ICdzY3JvbGxIZWlnaHQnO1xuICAgICAgICB3aWR0aFByb3AgPSAnc2Nyb2xsV2lkdGgnO1xuICAgICAgfVxuICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FzdF06IGZvcmNlIHR5cGUgcmVmaW5lbWVudCwgd2UgY29tcGFyZSBvZmZzZXRQYXJlbnQgd2l0aCB3aW5kb3cgYWJvdmUsIGJ1dCBGbG93IGRvZXNuJ3QgZGV0ZWN0IGl0XG5cblxuICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudDtcblxuICAgIGlmIChwbGFjZW1lbnQgPT09IHRvcCB8fCAocGxhY2VtZW50ID09PSBsZWZ0IHx8IHBsYWNlbWVudCA9PT0gcmlnaHQpICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWSA9IGJvdHRvbTtcbiAgICAgIHZhciBvZmZzZXRZID0gaXNGaXhlZCAmJiBvZmZzZXRQYXJlbnQgPT09IHdpbiAmJiB3aW4udmlzdWFsVmlld3BvcnQgPyB3aW4udmlzdWFsVmlld3BvcnQuaGVpZ2h0IDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICBvZmZzZXRQYXJlbnRbaGVpZ2h0UHJvcF07XG4gICAgICB5IC09IG9mZnNldFkgLSBwb3BwZXJSZWN0LmhlaWdodDtcbiAgICAgIHkgKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cblxuICAgIGlmIChwbGFjZW1lbnQgPT09IGxlZnQgfHwgKHBsYWNlbWVudCA9PT0gdG9wIHx8IHBsYWNlbWVudCA9PT0gYm90dG9tKSAmJiB2YXJpYXRpb24gPT09IGVuZCkge1xuICAgICAgc2lkZVggPSByaWdodDtcbiAgICAgIHZhciBvZmZzZXRYID0gaXNGaXhlZCAmJiBvZmZzZXRQYXJlbnQgPT09IHdpbiAmJiB3aW4udmlzdWFsVmlld3BvcnQgPyB3aW4udmlzdWFsVmlld3BvcnQud2lkdGggOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFt3aWR0aFByb3BdO1xuICAgICAgeCAtPSBvZmZzZXRYIC0gcG9wcGVyUmVjdC53aWR0aDtcbiAgICAgIHggKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb21tb25TdHlsZXMgPSBPYmplY3QuYXNzaWduKHtcbiAgICBwb3NpdGlvbjogcG9zaXRpb25cbiAgfSwgYWRhcHRpdmUgJiYgdW5zZXRTaWRlcyk7XG5cbiAgdmFyIF9yZWY0ID0gcm91bmRPZmZzZXRzID09PSB0cnVlID8gcm91bmRPZmZzZXRzQnlEUFIoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9LCBnZXRXaW5kb3cocG9wcGVyKSkgOiB7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG5cbiAgeCA9IF9yZWY0Lng7XG4gIHkgPSBfcmVmNC55O1xuXG4gIGlmIChncHVBY2NlbGVyYXRpb24pIHtcbiAgICB2YXIgX09iamVjdCRhc3NpZ247XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24gPSB7fSwgX09iamVjdCRhc3NpZ25bc2lkZVldID0gaGFzWSA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbltzaWRlWF0gPSBoYXNYID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduLnRyYW5zZm9ybSA9ICh3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSA8PSAxID8gXCJ0cmFuc2xhdGUoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweClcIiA6IFwidHJhbnNsYXRlM2QoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweCwgMClcIiwgX09iamVjdCRhc3NpZ24pKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbjIgPSB7fSwgX09iamVjdCRhc3NpZ24yW3NpZGVZXSA9IGhhc1kgPyB5ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMltzaWRlWF0gPSBoYXNYID8geCArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjIudHJhbnNmb3JtID0gJycsIF9PYmplY3QkYXNzaWduMikpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlU3R5bGVzKF9yZWY1KSB7XG4gIHZhciBzdGF0ZSA9IF9yZWY1LnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWY1Lm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPSBvcHRpb25zLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGdwdUFjY2VsZXJhdCxcbiAgICAgIF9vcHRpb25zJGFkYXB0aXZlID0gb3B0aW9ucy5hZGFwdGl2ZSxcbiAgICAgIGFkYXB0aXZlID0gX29wdGlvbnMkYWRhcHRpdmUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhZGFwdGl2ZSxcbiAgICAgIF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9IG9wdGlvbnMucm91bmRPZmZzZXRzLFxuICAgICAgcm91bmRPZmZzZXRzID0gX29wdGlvbnMkcm91bmRPZmZzZXRzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcm91bmRPZmZzZXRzO1xuICB2YXIgY29tbW9uU3R5bGVzID0ge1xuICAgIHBsYWNlbWVudDogZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHZhcmlhdGlvbjogZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCksXG4gICAgcG9wcGVyOiBzdGF0ZS5lbGVtZW50cy5wb3BwZXIsXG4gICAgcG9wcGVyUmVjdDogc3RhdGUucmVjdHMucG9wcGVyLFxuICAgIGdwdUFjY2VsZXJhdGlvbjogZ3B1QWNjZWxlcmF0aW9uLFxuICAgIGlzRml4ZWQ6IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3kgPT09ICdmaXhlZCdcbiAgfTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzICE9IG51bGwpIHtcbiAgICBzdGF0ZS5zdHlsZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLnBvcHBlciwgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMsXG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGFkYXB0aXZlOiBhZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93ICE9IG51bGwpIHtcbiAgICBzdGF0ZS5zdHlsZXMuYXJyb3cgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMuYXJyb3csIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgYWRhcHRpdmU6IGZhbHNlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1wbGFjZW1lbnQnOiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdjb21wdXRlU3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdiZWZvcmVXcml0ZScsXG4gIGZuOiBjb21wdXRlU3R5bGVzLFxuICBkYXRhOiB7fVxufTsiLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciBwYXNzaXZlID0ge1xuICBwYXNzaXZlOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgaW5zdGFuY2UgPSBfcmVmLmluc3RhbmNlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJHNjcm9sbCA9IG9wdGlvbnMuc2Nyb2xsLFxuICAgICAgc2Nyb2xsID0gX29wdGlvbnMkc2Nyb2xsID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkc2Nyb2xsLFxuICAgICAgX29wdGlvbnMkcmVzaXplID0gb3B0aW9ucy5yZXNpemUsXG4gICAgICByZXNpemUgPSBfb3B0aW9ucyRyZXNpemUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyZXNpemU7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coc3RhdGUuZWxlbWVudHMucG9wcGVyKTtcbiAgdmFyIHNjcm9sbFBhcmVudHMgPSBbXS5jb25jYXQoc3RhdGUuc2Nyb2xsUGFyZW50cy5yZWZlcmVuY2UsIHN0YXRlLnNjcm9sbFBhcmVudHMucG9wcGVyKTtcblxuICBpZiAoc2Nyb2xsKSB7XG4gICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgIHNjcm9sbFBhcmVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHJlc2l6ZSkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2Nyb2xsKSB7XG4gICAgICBzY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHNjcm9sbFBhcmVudCkge1xuICAgICAgICBzY3JvbGxQYXJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZXNpemUpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH1cbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2V2ZW50TGlzdGVuZXJzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBmdW5jdGlvbiBmbigpIHt9LFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgZGF0YToge31cbn07IiwgInZhciBoYXNoID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsICJ2YXIgaGFzaCA9IHtcbiAgc3RhcnQ6ICdlbmQnLFxuICBlbmQ6ICdzdGFydCdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9zdGFydHxlbmQvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGwobm9kZSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KG5vZGUpO1xuICB2YXIgc2Nyb2xsTGVmdCA9IHdpbi5wYWdlWE9mZnNldDtcbiAgdmFyIHNjcm9sbFRvcCA9IHdpbi5wYWdlWU9mZnNldDtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wXG4gIH07XG59IiwgImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCkge1xuICAvLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4gIC8vIGluY29ycmVjdCBmb3IgUlRMLlxuICAvLyBQb3BwZXIgMSBpcyBicm9rZW4gaW4gdGhpcyBjYXNlIGFuZCBuZXZlciBoYWQgYSBidWcgcmVwb3J0IHNvIGxldCdzIGFzc3VtZVxuICAvLyBpdCdzIG5vdCBhbiBpc3N1ZS4gSSBkb24ndCB0aGluayBhbnlvbmUgZXZlciBzcGVjaWZpZXMgd2lkdGggb24gPGh0bWw+XG4gIC8vIGFueXdheS5cbiAgLy8gQnJvd3NlcnMgd2hlcmUgdGhlIGxlZnQgc2Nyb2xsYmFyIGRvZXNuJ3QgY2F1c2UgYW4gaXNzdWUgcmVwb3J0IGAwYCBmb3JcbiAgLy8gdGhpcyAoZS5nLiBFZGdlIDIwMTksIElFMTEsIFNhZmFyaSlcbiAgcmV0dXJuIGdldEJvdW5kaW5nQ2xpZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpLmxlZnQgKyBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCkuc2Nyb2xsTGVmdDtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgaXNMYXlvdXRWaWV3cG9ydCBmcm9tIFwiLi9pc0xheW91dFZpZXdwb3J0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB2aXN1YWxWaWV3cG9ydCA9IHdpbi52aXN1YWxWaWV3cG9ydDtcbiAgdmFyIHdpZHRoID0gaHRtbC5jbGllbnRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGh0bWwuY2xpZW50SGVpZ2h0O1xuICB2YXIgeCA9IDA7XG4gIHZhciB5ID0gMDtcblxuICBpZiAodmlzdWFsVmlld3BvcnQpIHtcbiAgICB3aWR0aCA9IHZpc3VhbFZpZXdwb3J0LndpZHRoO1xuICAgIGhlaWdodCA9IHZpc3VhbFZpZXdwb3J0LmhlaWdodDtcbiAgICB2YXIgbGF5b3V0Vmlld3BvcnQgPSBpc0xheW91dFZpZXdwb3J0KCk7XG5cbiAgICBpZiAobGF5b3V0Vmlld3BvcnQgfHwgIWxheW91dFZpZXdwb3J0ICYmIHN0cmF0ZWd5ID09PSAnZml4ZWQnKSB7XG4gICAgICB4ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdDtcbiAgICAgIHkgPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgeDogeCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCksXG4gICAgeTogeVxuICB9O1xufSIsICJpbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCB7IG1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGVcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHdpblNjcm9sbCA9IGdldFdpbmRvd1Njcm9sbChlbGVtZW50KTtcbiAgdmFyIGJvZHkgPSAoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHk7XG4gIHZhciB3aWR0aCA9IG1heChodG1sLnNjcm9sbFdpZHRoLCBodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5zY3JvbGxXaWR0aCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCk7XG4gIHZhciBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5ID8gYm9keS5zY3JvbGxIZWlnaHQgOiAwLCBib2R5ID8gYm9keS5jbGllbnRIZWlnaHQgOiAwKTtcbiAgdmFyIHggPSAtd2luU2Nyb2xsLnNjcm9sbExlZnQgKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpO1xuICB2YXIgeSA9IC13aW5TY3JvbGwuc2Nyb2xsVG9wO1xuXG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKGJvZHkgfHwgaHRtbCkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCkgLSB3aWR0aDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsICJpbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1Njcm9sbFBhcmVudChlbGVtZW50KSB7XG4gIC8vIEZpcmVmb3ggd2FudHMgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcbiAgdmFyIF9nZXRDb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSxcbiAgICAgIG92ZXJmbG93ID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1gsXG4gICAgICBvdmVyZmxvd1kgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1k7XG5cbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbi8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCk7XG59IiwgImltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KG5vZGUpIHtcbiAgaWYgKFsnaHRtbCcsICdib2R5JywgJyNkb2N1bWVudCddLmluZGV4T2YoZ2V0Tm9kZU5hbWUobm9kZSkpID49IDApIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudC5ib2R5O1xuICB9XG5cbiAgaWYgKGlzSFRNTEVsZW1lbnQobm9kZSkgJiYgaXNTY3JvbGxQYXJlbnQobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiBnZXRTY3JvbGxQYXJlbnQoZ2V0UGFyZW50Tm9kZShub2RlKSk7XG59IiwgImltcG9ydCBnZXRTY3JvbGxQYXJlbnQgZnJvbSBcIi4vZ2V0U2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG4vKlxuZ2l2ZW4gYSBET00gZWxlbWVudCwgcmV0dXJuIHRoZSBsaXN0IG9mIGFsbCBzY3JvbGwgcGFyZW50cywgdXAgdGhlIGxpc3Qgb2YgYW5jZXNvcnNcbnVudGlsIHdlIGdldCB0byB0aGUgdG9wIHdpbmRvdyBvYmplY3QuIFRoaXMgbGlzdCBpcyB3aGF0IHdlIGF0dGFjaCBzY3JvbGwgbGlzdGVuZXJzXG50bywgYmVjYXVzZSBpZiBhbnkgb2YgdGhlc2UgcGFyZW50IGVsZW1lbnRzIHNjcm9sbCwgd2UnbGwgbmVlZCB0byByZS1jYWxjdWxhdGUgdGhlXG5yZWZlcmVuY2UgZWxlbWVudCdzIHBvc2l0aW9uLlxuKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGlzdFNjcm9sbFBhcmVudHMoZWxlbWVudCwgbGlzdCkge1xuICB2YXIgX2VsZW1lbnQkb3duZXJEb2N1bWVuO1xuXG4gIGlmIChsaXN0ID09PSB2b2lkIDApIHtcbiAgICBsaXN0ID0gW107XG4gIH1cblxuICB2YXIgc2Nyb2xsUGFyZW50ID0gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQpO1xuICB2YXIgaXNCb2R5ID0gc2Nyb2xsUGFyZW50ID09PSAoKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5KTtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhzY3JvbGxQYXJlbnQpO1xuICB2YXIgdGFyZ2V0ID0gaXNCb2R5ID8gW3dpbl0uY29uY2F0KHdpbi52aXN1YWxWaWV3cG9ydCB8fCBbXSwgaXNTY3JvbGxQYXJlbnQoc2Nyb2xsUGFyZW50KSA/IHNjcm9sbFBhcmVudCA6IFtdKSA6IHNjcm9sbFBhcmVudDtcbiAgdmFyIHVwZGF0ZWRMaXN0ID0gbGlzdC5jb25jYXQodGFyZ2V0KTtcbiAgcmV0dXJuIGlzQm9keSA/IHVwZGF0ZWRMaXN0IDogLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IGlzQm9keSB0ZWxscyB1cyB0YXJnZXQgd2lsbCBiZSBhbiBIVE1MRWxlbWVudCBoZXJlXG4gIHVwZGF0ZWRMaXN0LmNvbmNhdChsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKHRhcmdldCkpKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZWN0LCB7XG4gICAgbGVmdDogcmVjdC54LFxuICAgIHRvcDogcmVjdC55LFxuICAgIHJpZ2h0OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgfSk7XG59IiwgImltcG9ydCB7IHZpZXdwb3J0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0Vmlld3BvcnRSZWN0IGZyb20gXCIuL2dldFZpZXdwb3J0UmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50UmVjdCBmcm9tIFwiLi9nZXREb2N1bWVudFJlY3QuanNcIjtcbmltcG9ydCBsaXN0U2Nyb2xsUGFyZW50cyBmcm9tIFwiLi9saXN0U2Nyb2xsUGFyZW50cy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuL2NvbnRhaW5zLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCByZWN0VG9DbGllbnRSZWN0IGZyb20gXCIuLi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgeyBtYXgsIG1pbiB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGZhbHNlLCBzdHJhdGVneSA9PT0gJ2ZpeGVkJyk7XG4gIHJlY3QudG9wID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudFRvcDtcbiAgcmVjdC5sZWZ0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICByZWN0LmJvdHRvbSA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QucmlnaHQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LndpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC5oZWlnaHQgPSBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC54ID0gcmVjdC5sZWZ0O1xuICByZWN0LnkgPSByZWN0LnRvcDtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkge1xuICByZXR1cm4gY2xpcHBpbmdQYXJlbnQgPT09IHZpZXdwb3J0ID8gcmVjdFRvQ2xpZW50UmVjdChnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpKSA6IGlzRWxlbWVudChjbGlwcGluZ1BhcmVudCkgPyBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpIDogcmVjdFRvQ2xpZW50UmVjdChnZXREb2N1bWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKSk7XG59IC8vIEEgXCJjbGlwcGluZyBwYXJlbnRcIiBpcyBhbiBvdmVyZmxvd2FibGUgY29udGFpbmVyIHdpdGggdGhlIGNoYXJhY3RlcmlzdGljIG9mXG4vLyBjbGlwcGluZyAob3IgaGlkaW5nKSBvdmVyZmxvd2luZyBlbGVtZW50cyB3aXRoIGEgcG9zaXRpb24gZGlmZmVyZW50IGZyb21cbi8vIGBpbml0aWFsYFxuXG5cbmZ1bmN0aW9uIGdldENsaXBwaW5nUGFyZW50cyhlbGVtZW50KSB7XG4gIHZhciBjbGlwcGluZ1BhcmVudHMgPSBsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKGVsZW1lbnQpKTtcbiAgdmFyIGNhbkVzY2FwZUNsaXBwaW5nID0gWydhYnNvbHV0ZScsICdmaXhlZCddLmluZGV4T2YoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbikgPj0gMDtcbiAgdmFyIGNsaXBwZXJFbGVtZW50ID0gY2FuRXNjYXBlQ2xpcHBpbmcgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSA/IGdldE9mZnNldFBhcmVudChlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgaWYgKCFpc0VsZW1lbnQoY2xpcHBlckVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8xNDE0XG5cblxuICByZXR1cm4gY2xpcHBpbmdQYXJlbnRzLmZpbHRlcihmdW5jdGlvbiAoY2xpcHBpbmdQYXJlbnQpIHtcbiAgICByZXR1cm4gaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSAmJiBjb250YWlucyhjbGlwcGluZ1BhcmVudCwgY2xpcHBlckVsZW1lbnQpICYmIGdldE5vZGVOYW1lKGNsaXBwaW5nUGFyZW50KSAhPT0gJ2JvZHknO1xuICB9KTtcbn0gLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgcGFyZW50c1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENsaXBwaW5nUmVjdChlbGVtZW50LCBib3VuZGFyeSwgcm9vdEJvdW5kYXJ5LCBzdHJhdGVneSkge1xuICB2YXIgbWFpbkNsaXBwaW5nUGFyZW50cyA9IGJvdW5kYXJ5ID09PSAnY2xpcHBpbmdQYXJlbnRzJyA/IGdldENsaXBwaW5nUGFyZW50cyhlbGVtZW50KSA6IFtdLmNvbmNhdChib3VuZGFyeSk7XG4gIHZhciBjbGlwcGluZ1BhcmVudHMgPSBbXS5jb25jYXQobWFpbkNsaXBwaW5nUGFyZW50cywgW3Jvb3RCb3VuZGFyeV0pO1xuICB2YXIgZmlyc3RDbGlwcGluZ1BhcmVudCA9IGNsaXBwaW5nUGFyZW50c1swXTtcbiAgdmFyIGNsaXBwaW5nUmVjdCA9IGNsaXBwaW5nUGFyZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjY1JlY3QsIGNsaXBwaW5nUGFyZW50KSB7XG4gICAgdmFyIHJlY3QgPSBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpO1xuICAgIGFjY1JlY3QudG9wID0gbWF4KHJlY3QudG9wLCBhY2NSZWN0LnRvcCk7XG4gICAgYWNjUmVjdC5yaWdodCA9IG1pbihyZWN0LnJpZ2h0LCBhY2NSZWN0LnJpZ2h0KTtcbiAgICBhY2NSZWN0LmJvdHRvbSA9IG1pbihyZWN0LmJvdHRvbSwgYWNjUmVjdC5ib3R0b20pO1xuICAgIGFjY1JlY3QubGVmdCA9IG1heChyZWN0LmxlZnQsIGFjY1JlY3QubGVmdCk7XG4gICAgcmV0dXJuIGFjY1JlY3Q7XG4gIH0sIGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGZpcnN0Q2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSk7XG4gIGNsaXBwaW5nUmVjdC53aWR0aCA9IGNsaXBwaW5nUmVjdC5yaWdodCAtIGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QuaGVpZ2h0ID0gY2xpcHBpbmdSZWN0LmJvdHRvbSAtIGNsaXBwaW5nUmVjdC50b3A7XG4gIGNsaXBwaW5nUmVjdC54ID0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC55ID0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgcmV0dXJuIGNsaXBwaW5nUmVjdDtcbn0iLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4vZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHN0YXJ0LCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHJlZmVyZW5jZSA9IF9yZWYucmVmZXJlbmNlLFxuICAgICAgZWxlbWVudCA9IF9yZWYuZWxlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudCA/IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciB2YXJpYXRpb24gPSBwbGFjZW1lbnQgPyBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZWxlbWVudC53aWR0aCAvIDI7XG4gIHZhciBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGVsZW1lbnQuaGVpZ2h0IC8gMjtcbiAgdmFyIG9mZnNldHM7XG5cbiAgc3dpdGNoIChiYXNlUGxhY2VtZW50KSB7XG4gICAgY2FzZSB0b3A6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGJvdHRvbTpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSByaWdodDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGxlZnQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCAtIGVsZW1lbnQud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cblxuICB2YXIgbWFpbkF4aXMgPSBiYXNlUGxhY2VtZW50ID8gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpIDogbnVsbDtcblxuICBpZiAobWFpbkF4aXMgIT0gbnVsbCkge1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgc3dpdGNoICh2YXJpYXRpb24pIHtcbiAgICAgIGNhc2Ugc3RhcnQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gLSAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIGVuZDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSArIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59IiwgImltcG9ydCBnZXRDbGlwcGluZ1JlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4vcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgY2xpcHBpbmdQYXJlbnRzLCByZWZlcmVuY2UsIHBvcHBlciwgYm90dG9tLCB0b3AsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4vZXhwYW5kVG9IYXNoTWFwLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBfb3B0aW9ucyRwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucyRwbGFjZW1lbnQgPT09IHZvaWQgMCA/IHN0YXRlLnBsYWNlbWVudCA6IF9vcHRpb25zJHBsYWNlbWVudCxcbiAgICAgIF9vcHRpb25zJHN0cmF0ZWd5ID0gX29wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9vcHRpb25zJHN0cmF0ZWd5ID09PSB2b2lkIDAgPyBzdGF0ZS5zdHJhdGVneSA6IF9vcHRpb25zJHN0cmF0ZWd5LFxuICAgICAgX29wdGlvbnMkYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMkYm91bmRhcnkgPT09IHZvaWQgMCA/IGNsaXBwaW5nUGFyZW50cyA6IF9vcHRpb25zJGJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyB2aWV3cG9ydCA6IF9vcHRpb25zJHJvb3RCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGVsZW1lbnRDb250ZSA9IF9vcHRpb25zLmVsZW1lbnRDb250ZXh0LFxuICAgICAgZWxlbWVudENvbnRleHQgPSBfb3B0aW9ucyRlbGVtZW50Q29udGUgPT09IHZvaWQgMCA/IHBvcHBlciA6IF9vcHRpb25zJGVsZW1lbnRDb250ZSxcbiAgICAgIF9vcHRpb25zJGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IF9vcHRpb25zJGFsdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMkcGFkZGluZyA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHBhZGRpbmc7XG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbiAgdmFyIGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcmVmZXJlbmNlIDogcG9wcGVyO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIHZhciBjbGlwcGluZ0NsaWVudFJlY3QgPSBnZXRDbGlwcGluZ1JlY3QoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgZ2V0RG9jdW1lbnRFbGVtZW50KHN0YXRlLmVsZW1lbnRzLnBvcHBlciksIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KTtcbiAgdmFyIHJlZmVyZW5jZUNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qoc3RhdGUuZWxlbWVudHMucmVmZXJlbmNlKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiByZWZlcmVuY2VDbGllbnRSZWN0LFxuICAgIGVsZW1lbnQ6IHBvcHBlclJlY3QsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSk7XG4gIHZhciBwb3BwZXJDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChPYmplY3QuYXNzaWduKHt9LCBwb3BwZXJSZWN0LCBwb3BwZXJPZmZzZXRzKSk7XG4gIHZhciBlbGVtZW50Q2xpZW50UmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyBwb3BwZXJDbGllbnRSZWN0IDogcmVmZXJlbmNlQ2xpZW50UmVjdDsgLy8gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgcmVjdFxuICAvLyAwIG9yIG5lZ2F0aXZlID0gd2l0aGluIHRoZSBjbGlwcGluZyByZWN0XG5cbiAgdmFyIG92ZXJmbG93T2Zmc2V0cyA9IHtcbiAgICB0b3A6IGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCxcbiAgICBib3R0b206IGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiBjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQsXG4gICAgcmlnaHQ6IGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodFxuICB9O1xuICB2YXIgb2Zmc2V0RGF0YSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0OyAvLyBPZmZzZXRzIGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gdGhlIHBvcHBlciBlbGVtZW50XG5cbiAgaWYgKGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgJiYgb2Zmc2V0RGF0YSkge1xuICAgIHZhciBvZmZzZXQgPSBvZmZzZXREYXRhW3BsYWNlbWVudF07XG4gICAgT2JqZWN0LmtleXMob3ZlcmZsb3dPZmZzZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtdWx0aXBseSA9IFtyaWdodCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/IDEgOiAtMTtcbiAgICAgIHZhciBheGlzID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/ICd5JyA6ICd4JztcbiAgICAgIG92ZXJmbG93T2Zmc2V0c1trZXldICs9IG9mZnNldFtheGlzXSAqIG11bHRpcGx5O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG92ZXJmbG93T2Zmc2V0cztcbn0iLCAiaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHZhcmlhdGlvblBsYWNlbWVudHMsIGJhc2VQbGFjZW1lbnRzLCBwbGFjZW1lbnRzIGFzIGFsbFBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgX29wdGlvbnMkYWxsb3dlZEF1dG9QID0gX29wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gX29wdGlvbnMkYWxsb3dlZEF1dG9QID09PSB2b2lkIDAgPyBhbGxQbGFjZW1lbnRzIDogX29wdGlvbnMkYWxsb3dlZEF1dG9QO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCk7XG4gIHZhciBwbGFjZW1lbnRzID0gdmFyaWF0aW9uID8gZmxpcFZhcmlhdGlvbnMgPyB2YXJpYXRpb25QbGFjZW1lbnRzIDogdmFyaWF0aW9uUGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gdmFyaWF0aW9uO1xuICB9KSA6IGJhc2VQbGFjZW1lbnRzO1xuICB2YXIgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFsbG93ZWRBdXRvUGxhY2VtZW50cy5pbmRleE9mKHBsYWNlbWVudCkgPj0gMDtcbiAgfSk7XG5cbiAgaWYgKGFsbG93ZWRQbGFjZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cztcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXTogRmxvdyBzZWVtcyB0byBoYXZlIHByb2JsZW1zIHdpdGggdHdvIGFycmF5IHVuaW9ucy4uLlxuXG5cbiAgdmFyIG92ZXJmbG93cyA9IGFsbG93ZWRQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pW2dldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KV07XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICByZXR1cm4gT2JqZWN0LmtleXMob3ZlcmZsb3dzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93c1thXSAtIG92ZXJmbG93c1tiXTtcbiAgfSk7XG59IiwgImltcG9ydCBnZXRPcHBvc2l0ZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgY29tcHV0ZUF1dG9QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyBib3R0b20sIHRvcCwgc3RhcnQsIHJpZ2h0LCBsZWZ0LCBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5mdW5jdGlvbiBnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgaWYgKGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0bykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHZhciBvcHBvc2l0ZVBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHJldHVybiBbZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSwgb3Bwb3NpdGVQbGFjZW1lbnQsIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KG9wcG9zaXRlUGxhY2VtZW50KV07XG59XG5cbmZ1bmN0aW9uIGZsaXAoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0uX3NraXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFsdEF4aXMsXG4gICAgICBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgPSBvcHRpb25zLmZhbGxiYWNrUGxhY2VtZW50cyxcbiAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcsXG4gICAgICBib3VuZGFyeSA9IG9wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBvcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGZsaXBWYXJpYXRpbyA9IG9wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zJGZsaXBWYXJpYXRpbyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGZsaXBWYXJpYXRpbyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IG9wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzO1xuICB2YXIgcHJlZmVycmVkUGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpO1xuICB2YXIgaXNCYXNlUGxhY2VtZW50ID0gYmFzZVBsYWNlbWVudCA9PT0gcHJlZmVycmVkUGxhY2VtZW50O1xuICB2YXIgZmFsbGJhY2tQbGFjZW1lbnRzID0gc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIHx8IChpc0Jhc2VQbGFjZW1lbnQgfHwgIWZsaXBWYXJpYXRpb25zID8gW2dldE9wcG9zaXRlUGxhY2VtZW50KHByZWZlcnJlZFBsYWNlbWVudCldIDogZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocHJlZmVycmVkUGxhY2VtZW50KSk7XG4gIHZhciBwbGFjZW1lbnRzID0gW3ByZWZlcnJlZFBsYWNlbWVudF0uY29uY2F0KGZhbGxiYWNrUGxhY2VtZW50cykucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0byA/IGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zOiBmbGlwVmFyaWF0aW9ucyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50czogYWxsb3dlZEF1dG9QbGFjZW1lbnRzXG4gICAgfSkgOiBwbGFjZW1lbnQpO1xuICB9LCBbXSk7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGNoZWNrc01hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIG1ha2VGYWxsYmFja0NoZWNrcyA9IHRydWU7XG4gIHZhciBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnRzWzBdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGxhY2VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwbGFjZW1lbnQgPSBwbGFjZW1lbnRzW2ldO1xuXG4gICAgdmFyIF9iYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuXG4gICAgdmFyIGlzU3RhcnRWYXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gc3RhcnQ7XG4gICAgdmFyIGlzVmVydGljYWwgPSBbdG9wLCBib3R0b21dLmluZGV4T2YoX2Jhc2VQbGFjZW1lbnQpID49IDA7XG4gICAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG4gICAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSk7XG4gICAgdmFyIG1haW5WYXJpYXRpb25TaWRlID0gaXNWZXJ0aWNhbCA/IGlzU3RhcnRWYXJpYXRpb24gPyByaWdodCA6IGxlZnQgOiBpc1N0YXJ0VmFyaWF0aW9uID8gYm90dG9tIDogdG9wO1xuXG4gICAgaWYgKHJlZmVyZW5jZVJlY3RbbGVuXSA+IHBvcHBlclJlY3RbbGVuXSkge1xuICAgICAgbWFpblZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgfVxuXG4gICAgdmFyIGFsdFZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgdmFyIGNoZWNrcyA9IFtdO1xuXG4gICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKG92ZXJmbG93W19iYXNlUGxhY2VtZW50XSA8PSAwKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1ttYWluVmFyaWF0aW9uU2lkZV0gPD0gMCwgb3ZlcmZsb3dbYWx0VmFyaWF0aW9uU2lkZV0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrcy5ldmVyeShmdW5jdGlvbiAoY2hlY2spIHtcbiAgICAgIHJldHVybiBjaGVjaztcbiAgICB9KSkge1xuICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICAgICAgbWFrZUZhbGxiYWNrQ2hlY2tzID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjaGVja3NNYXAuc2V0KHBsYWNlbWVudCwgY2hlY2tzKTtcbiAgfVxuXG4gIGlmIChtYWtlRmFsbGJhY2tDaGVja3MpIHtcbiAgICAvLyBgMmAgbWF5IGJlIGRlc2lyZWQgaW4gc29tZSBjYXNlcyBcdTIwMTMgcmVzZWFyY2ggbGF0ZXJcbiAgICB2YXIgbnVtYmVyT2ZDaGVja3MgPSBmbGlwVmFyaWF0aW9ucyA/IDMgOiAxO1xuXG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoX2kpIHtcbiAgICAgIHZhciBmaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50cy5maW5kKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICAgICAgdmFyIGNoZWNrcyA9IGNoZWNrc01hcC5nZXQocGxhY2VtZW50KTtcblxuICAgICAgICBpZiAoY2hlY2tzKSB7XG4gICAgICAgICAgcmV0dXJuIGNoZWNrcy5zbGljZSgwLCBfaSkuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2s7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZml0dGluZ1BsYWNlbWVudCkge1xuICAgICAgICBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBmaXR0aW5nUGxhY2VtZW50O1xuICAgICAgICByZXR1cm4gXCJicmVha1wiO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBfaSA9IG51bWJlck9mQ2hlY2tzOyBfaSA+IDA7IF9pLS0pIHtcbiAgICAgIHZhciBfcmV0ID0gX2xvb3AoX2kpO1xuXG4gICAgICBpZiAoX3JldCA9PT0gXCJicmVha1wiKSBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdGUucGxhY2VtZW50ICE9PSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwID0gdHJ1ZTtcbiAgICBzdGF0ZS5wbGFjZW1lbnQgPSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQ7XG4gICAgc3RhdGUucmVzZXQgPSB0cnVlO1xuICB9XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdmbGlwJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IGZsaXAsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J10sXG4gIGRhdGE6IHtcbiAgICBfc2tpcDogZmFsc2VcbiAgfVxufTsiLCAiaW1wb3J0IHsgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKSB7XG4gIGlmIChwcmV2ZW50ZWRPZmZzZXRzID09PSB2b2lkIDApIHtcbiAgICBwcmV2ZW50ZWRPZmZzZXRzID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b3A6IG92ZXJmbG93LnRvcCAtIHJlY3QuaGVpZ2h0IC0gcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGggKyBwcmV2ZW50ZWRPZmZzZXRzLngsXG4gICAgYm90dG9tOiBvdmVyZmxvdy5ib3R0b20gLSByZWN0LmhlaWdodCArIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICBsZWZ0OiBvdmVyZmxvdy5sZWZ0IC0gcmVjdC53aWR0aCAtIHByZXZlbnRlZE9mZnNldHMueFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIFt0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRdLnNvbWUoZnVuY3Rpb24gKHNpZGUpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dbc2lkZV0gPj0gMDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhpZGUoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgcHJldmVudGVkT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucHJldmVudE92ZXJmbG93O1xuICB2YXIgcmVmZXJlbmNlT3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJ1xuICB9KTtcbiAgdmFyIHBvcHBlckFsdE92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICB9KTtcbiAgdmFyIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHJlZmVyZW5jZU92ZXJmbG93LCByZWZlcmVuY2VSZWN0KTtcbiAgdmFyIHBvcHBlckVzY2FwZU9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhwb3BwZXJBbHRPdmVyZmxvdywgcG9wcGVyUmVjdCwgcHJldmVudGVkT2Zmc2V0cyk7XG4gIHZhciBpc1JlZmVyZW5jZUhpZGRlbiA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChyZWZlcmVuY2VDbGlwcGluZ09mZnNldHMpO1xuICB2YXIgaGFzUG9wcGVyRXNjYXBlZCA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChwb3BwZXJFc2NhcGVPZmZzZXRzKTtcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IHtcbiAgICByZWZlcmVuY2VDbGlwcGluZ09mZnNldHM6IHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyxcbiAgICBwb3BwZXJFc2NhcGVPZmZzZXRzOiBwb3BwZXJFc2NhcGVPZmZzZXRzLFxuICAgIGlzUmVmZXJlbmNlSGlkZGVuOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICBoYXNQb3BwZXJFc2NhcGVkOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH07XG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcmVmZXJlbmNlLWhpZGRlbic6IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgICdkYXRhLXBvcHBlci1lc2NhcGVkJzogaGFzUG9wcGVyRXNjYXBlZFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2hpZGUnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddLFxuICBmbjogaGlkZVxufTsiLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIHBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCByZWN0cywgb2Zmc2V0KSB7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICB2YXIgaW52ZXJ0RGlzdGFuY2UgPSBbbGVmdCwgdG9wXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyAtMSA6IDE7XG5cbiAgdmFyIF9yZWYgPSB0eXBlb2Ygb2Zmc2V0ID09PSAnZnVuY3Rpb24nID8gb2Zmc2V0KE9iamVjdC5hc3NpZ24oe30sIHJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSkpIDogb2Zmc2V0LFxuICAgICAgc2tpZGRpbmcgPSBfcmVmWzBdLFxuICAgICAgZGlzdGFuY2UgPSBfcmVmWzFdO1xuXG4gIHNraWRkaW5nID0gc2tpZGRpbmcgfHwgMDtcbiAgZGlzdGFuY2UgPSAoZGlzdGFuY2UgfHwgMCkgKiBpbnZlcnREaXN0YW5jZTtcbiAgcmV0dXJuIFtsZWZ0LCByaWdodF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8ge1xuICAgIHg6IGRpc3RhbmNlLFxuICAgIHk6IHNraWRkaW5nXG4gIH0gOiB7XG4gICAgeDogc2tpZGRpbmcsXG4gICAgeTogZGlzdGFuY2VcbiAgfTtcbn1cblxuZnVuY3Rpb24gb2Zmc2V0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYyLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZjIubmFtZTtcbiAgdmFyIF9vcHRpb25zJG9mZnNldCA9IG9wdGlvbnMub2Zmc2V0LFxuICAgICAgb2Zmc2V0ID0gX29wdGlvbnMkb2Zmc2V0ID09PSB2b2lkIDAgPyBbMCwgMF0gOiBfb3B0aW9ucyRvZmZzZXQ7XG4gIHZhciBkYXRhID0gcGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgYWNjW3BsYWNlbWVudF0gPSBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShwbGFjZW1lbnQsIHN0YXRlLnJlY3RzLCBvZmZzZXQpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgdmFyIF9kYXRhJHN0YXRlJHBsYWNlbWVudCA9IGRhdGFbc3RhdGUucGxhY2VtZW50XSxcbiAgICAgIHggPSBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQueCxcbiAgICAgIHkgPSBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQueTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzICE9IG51bGwpIHtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueCArPSB4O1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy55ICs9IHk7XG4gIH1cblxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gZGF0YTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ29mZnNldCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgZm46IG9mZnNldFxufTsiLCAiaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuLi91dGlscy9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuXG5mdW5jdGlvbiBwb3BwZXJPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIC8vIE9mZnNldHMgYXJlIHRoZSBhY3R1YWwgcG9zaXRpb24gdGhlIHBvcHBlciBuZWVkcyB0byBoYXZlIHRvIGJlXG4gIC8vIHByb3Blcmx5IHBvc2l0aW9uZWQgbmVhciBpdHMgcmVmZXJlbmNlIGVsZW1lbnRcbiAgLy8gVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBwbGFjZW1lbnQsIGFuZCB3aWxsIGJlIGFkanVzdGVkIGJ5XG4gIC8vIHRoZSBtb2RpZmllcnMgaW4gdGhlIG5leHQgc3RlcFxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogc3RhdGUucmVjdHMucmVmZXJlbmNlLFxuICAgIGVsZW1lbnQ6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3BvcHBlck9mZnNldHMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3JlYWQnLFxuICBmbjogcG9wcGVyT2Zmc2V0cyxcbiAgZGF0YToge31cbn07IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEFsdEF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufSIsICJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIHN0YXJ0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QWx0QXhpcyBmcm9tIFwiLi4vdXRpbHMvZ2V0QWx0QXhpcy5qc1wiO1xuaW1wb3J0IHsgd2l0aGluLCB3aXRoaW5NYXhDbGFtcCB9IGZyb20gXCIuLi91dGlscy93aXRoaW4uanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuLi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanNcIjtcbmltcG9ydCB7IG1pbiBhcyBtYXRoTWluLCBtYXggYXMgbWF0aE1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIHByZXZlbnRPdmVyZmxvdyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkYWx0QXhpcyxcbiAgICAgIGJvdW5kYXJ5ID0gb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IG9wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBvcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyxcbiAgICAgIF9vcHRpb25zJHRldGhlciA9IG9wdGlvbnMudGV0aGVyLFxuICAgICAgdGV0aGVyID0gX29wdGlvbnMkdGV0aGVyID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkdGV0aGVyLFxuICAgICAgX29wdGlvbnMkdGV0aGVyT2Zmc2V0ID0gb3B0aW9ucy50ZXRoZXJPZmZzZXQsXG4gICAgICB0ZXRoZXJPZmZzZXQgPSBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQ7XG4gIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5XG4gIH0pO1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgaXNCYXNlUGxhY2VtZW50ID0gIXZhcmlhdGlvbjtcbiAgdmFyIG1haW5BeGlzID0gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpO1xuICB2YXIgYWx0QXhpcyA9IGdldEFsdEF4aXMobWFpbkF4aXMpO1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cztcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgdGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0ID09PSAnZnVuY3Rpb24nID8gdGV0aGVyT2Zmc2V0KE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSkpIDogdGV0aGVyT2Zmc2V0O1xuICB2YXIgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlID0gdHlwZW9mIHRldGhlck9mZnNldFZhbHVlID09PSAnbnVtYmVyJyA/IHtcbiAgICBtYWluQXhpczogdGV0aGVyT2Zmc2V0VmFsdWUsXG4gICAgYWx0QXhpczogdGV0aGVyT2Zmc2V0VmFsdWVcbiAgfSA6IE9iamVjdC5hc3NpZ24oe1xuICAgIG1haW5BeGlzOiAwLFxuICAgIGFsdEF4aXM6IDBcbiAgfSwgdGV0aGVyT2Zmc2V0VmFsdWUpO1xuICB2YXIgb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0ID8gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXRbc3RhdGUucGxhY2VtZW50XSA6IG51bGw7XG4gIHZhciBkYXRhID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmICghcG9wcGVyT2Zmc2V0cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDtcblxuICAgIHZhciBtYWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICAgIHZhciBhbHRTaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgIHZhciBvZmZzZXQgPSBwb3BwZXJPZmZzZXRzW21haW5BeGlzXTtcbiAgICB2YXIgbWluID0gb2Zmc2V0ICsgb3ZlcmZsb3dbbWFpblNpZGVdO1xuICAgIHZhciBtYXggPSBvZmZzZXQgLSBvdmVyZmxvd1thbHRTaWRlXTtcbiAgICB2YXIgYWRkaXRpdmUgPSB0ZXRoZXIgPyAtcG9wcGVyUmVjdFtsZW5dIC8gMiA6IDA7XG4gICAgdmFyIG1pbkxlbiA9IHZhcmlhdGlvbiA9PT0gc3RhcnQgPyByZWZlcmVuY2VSZWN0W2xlbl0gOiBwb3BwZXJSZWN0W2xlbl07XG4gICAgdmFyIG1heExlbiA9IHZhcmlhdGlvbiA9PT0gc3RhcnQgPyAtcG9wcGVyUmVjdFtsZW5dIDogLXJlZmVyZW5jZVJlY3RbbGVuXTsgLy8gV2UgbmVlZCB0byBpbmNsdWRlIHRoZSBhcnJvdyBpbiB0aGUgY2FsY3VsYXRpb24gc28gdGhlIGFycm93IGRvZXNuJ3QgZ29cbiAgICAvLyBvdXRzaWRlIHRoZSByZWZlcmVuY2UgYm91bmRzXG5cbiAgICB2YXIgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3c7XG4gICAgdmFyIGFycm93UmVjdCA9IHRldGhlciAmJiBhcnJvd0VsZW1lbnQgPyBnZXRMYXlvdXRSZWN0KGFycm93RWxlbWVudCkgOiB7XG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMFxuICAgIH07XG4gICAgdmFyIGFycm93UGFkZGluZ09iamVjdCA9IHN0YXRlLm1vZGlmaWVyc0RhdGFbJ2Fycm93I3BlcnNpc3RlbnQnXSA/IHN0YXRlLm1vZGlmaWVyc0RhdGFbJ2Fycm93I3BlcnNpc3RlbnQnXS5wYWRkaW5nIDogZ2V0RnJlc2hTaWRlT2JqZWN0KCk7XG4gICAgdmFyIGFycm93UGFkZGluZ01pbiA9IGFycm93UGFkZGluZ09iamVjdFttYWluU2lkZV07XG4gICAgdmFyIGFycm93UGFkZGluZ01heCA9IGFycm93UGFkZGluZ09iamVjdFthbHRTaWRlXTsgLy8gSWYgdGhlIHJlZmVyZW5jZSBsZW5ndGggaXMgc21hbGxlciB0aGFuIHRoZSBhcnJvdyBsZW5ndGgsIHdlIGRvbid0IHdhbnRcbiAgICAvLyB0byBpbmNsdWRlIGl0cyBmdWxsIHNpemUgaW4gdGhlIGNhbGN1bGF0aW9uLiBJZiB0aGUgcmVmZXJlbmNlIGlzIHNtYWxsXG4gICAgLy8gYW5kIG5lYXIgdGhlIGVkZ2Ugb2YgYSBib3VuZGFyeSwgdGhlIHBvcHBlciBjYW4gb3ZlcmZsb3cgZXZlbiBpZiB0aGVcbiAgICAvLyByZWZlcmVuY2UgaXMgbm90IG92ZXJmbG93aW5nIGFzIHdlbGwgKGUuZy4gdmlydHVhbCBlbGVtZW50cyB3aXRoIG5vXG4gICAgLy8gd2lkdGggb3IgaGVpZ2h0KVxuXG4gICAgdmFyIGFycm93TGVuID0gd2l0aGluKDAsIHJlZmVyZW5jZVJlY3RbbGVuXSwgYXJyb3dSZWN0W2xlbl0pO1xuICAgIHZhciBtaW5PZmZzZXQgPSBpc0Jhc2VQbGFjZW1lbnQgPyByZWZlcmVuY2VSZWN0W2xlbl0gLyAyIC0gYWRkaXRpdmUgLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1pbkxlbiAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBtYXhPZmZzZXQgPSBpc0Jhc2VQbGFjZW1lbnQgPyAtcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiArIGFkZGl0aXZlICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXMgOiBtYXhMZW4gKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcztcbiAgICB2YXIgYXJyb3dPZmZzZXRQYXJlbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdyAmJiBnZXRPZmZzZXRQYXJlbnQoc3RhdGUuZWxlbWVudHMuYXJyb3cpO1xuICAgIHZhciBjbGllbnRPZmZzZXQgPSBhcnJvd09mZnNldFBhcmVudCA/IG1haW5BeGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRUb3AgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudExlZnQgfHwgMCA6IDA7XG4gICAgdmFyIG9mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkID0gb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb2Zmc2V0TW9kaWZpZXJTdGF0ZVttYWluQXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgOiAwO1xuICAgIHZhciB0ZXRoZXJNaW4gPSBvZmZzZXQgKyBtaW5PZmZzZXQgLSBvZmZzZXRNb2RpZmllclZhbHVlIC0gY2xpZW50T2Zmc2V0O1xuICAgIHZhciB0ZXRoZXJNYXggPSBvZmZzZXQgKyBtYXhPZmZzZXQgLSBvZmZzZXRNb2RpZmllclZhbHVlO1xuICAgIHZhciBwcmV2ZW50ZWRPZmZzZXQgPSB3aXRoaW4odGV0aGVyID8gbWF0aE1pbihtaW4sIHRldGhlck1pbikgOiBtaW4sIG9mZnNldCwgdGV0aGVyID8gbWF0aE1heChtYXgsIHRldGhlck1heCkgOiBtYXgpO1xuICAgIHBvcHBlck9mZnNldHNbbWFpbkF4aXNdID0gcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbbWFpbkF4aXNdID0gcHJldmVudGVkT2Zmc2V0IC0gb2Zmc2V0O1xuICB9XG5cbiAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyO1xuXG4gICAgdmFyIF9tYWluU2lkZSA9IG1haW5BeGlzID09PSAneCcgPyB0b3AgOiBsZWZ0O1xuXG4gICAgdmFyIF9hbHRTaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IGJvdHRvbSA6IHJpZ2h0O1xuXG4gICAgdmFyIF9vZmZzZXQgPSBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdO1xuXG4gICAgdmFyIF9sZW4gPSBhbHRBeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgICB2YXIgX21pbiA9IF9vZmZzZXQgKyBvdmVyZmxvd1tfbWFpblNpZGVdO1xuXG4gICAgdmFyIF9tYXggPSBfb2Zmc2V0IC0gb3ZlcmZsb3dbX2FsdFNpZGVdO1xuXG4gICAgdmFyIGlzT3JpZ2luU2lkZSA9IFt0b3AsIGxlZnRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuXG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclZhbHVlID0gKF9vZmZzZXRNb2RpZmllclN0YXRlJDIgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW2FsdEF4aXNdKSAhPSBudWxsID8gX29mZnNldE1vZGlmaWVyU3RhdGUkMiA6IDA7XG5cbiAgICB2YXIgX3RldGhlck1pbiA9IGlzT3JpZ2luU2lkZSA/IF9taW4gOiBfb2Zmc2V0IC0gcmVmZXJlbmNlUmVjdFtfbGVuXSAtIHBvcHBlclJlY3RbX2xlbl0gLSBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5hbHRBeGlzO1xuXG4gICAgdmFyIF90ZXRoZXJNYXggPSBpc09yaWdpblNpZGUgPyBfb2Zmc2V0ICsgcmVmZXJlbmNlUmVjdFtfbGVuXSArIHBvcHBlclJlY3RbX2xlbl0gLSBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5hbHRBeGlzIDogX21heDtcblxuICAgIHZhciBfcHJldmVudGVkT2Zmc2V0ID0gdGV0aGVyICYmIGlzT3JpZ2luU2lkZSA/IHdpdGhpbk1heENsYW1wKF90ZXRoZXJNaW4sIF9vZmZzZXQsIF90ZXRoZXJNYXgpIDogd2l0aGluKHRldGhlciA/IF90ZXRoZXJNaW4gOiBfbWluLCBfb2Zmc2V0LCB0ZXRoZXIgPyBfdGV0aGVyTWF4IDogX21heCk7XG5cbiAgICBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdID0gX3ByZXZlbnRlZE9mZnNldDtcbiAgICBkYXRhW2FsdEF4aXNdID0gX3ByZXZlbnRlZE9mZnNldCAtIF9vZmZzZXQ7XG4gIH1cblxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gZGF0YTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3ByZXZlbnRPdmVyZmxvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBwcmV2ZW50T3ZlcmZsb3csXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J11cbn07IiwgImV4cG9ydCB7IGRlZmF1bHQgYXMgYXBwbHlTdHlsZXMgfSBmcm9tIFwiLi9hcHBseVN0eWxlcy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhcnJvdyB9IGZyb20gXCIuL2Fycm93LmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbXB1dGVTdHlsZXMgfSBmcm9tIFwiLi9jb21wdXRlU3R5bGVzLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGV2ZW50TGlzdGVuZXJzIH0gZnJvbSBcIi4vZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZmxpcCB9IGZyb20gXCIuL2ZsaXAuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgaGlkZSB9IGZyb20gXCIuL2hpZGUuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgb2Zmc2V0IH0gZnJvbSBcIi4vb2Zmc2V0LmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHBvcHBlck9mZnNldHMgfSBmcm9tIFwiLi9wb3BwZXJPZmZzZXRzLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHByZXZlbnRPdmVyZmxvdyB9IGZyb20gXCIuL3ByZXZlbnRPdmVyZmxvdy5qc1wiOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRIVE1MRWxlbWVudFNjcm9sbChlbGVtZW50KSB7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgfTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEhUTUxFbGVtZW50U2Nyb2xsIGZyb20gXCIuL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlU2Nyb2xsKG5vZGUpIHtcbiAgaWYgKG5vZGUgPT09IGdldFdpbmRvdyhub2RlKSB8fCAhaXNIVE1MRWxlbWVudChub2RlKSkge1xuICAgIHJldHVybiBnZXRXaW5kb3dTY3JvbGwobm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGdldEhUTUxFbGVtZW50U2Nyb2xsKG5vZGUpO1xuICB9XG59IiwgImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZVNjcm9sbCBmcm9tIFwiLi9nZXROb2RlU2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFNjYWxlZChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IHJvdW5kKHJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxO1xuICB2YXIgc2NhbGVZID0gcm91bmQocmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMTtcbiAgcmV0dXJuIHNjYWxlWCAhPT0gMSB8fCBzY2FsZVkgIT09IDE7XG59IC8vIFJldHVybnMgdGhlIGNvbXBvc2l0ZSByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC5cbi8vIENvbXBvc2l0ZSBtZWFucyBpdCB0YWtlcyBpbnRvIGFjY291bnQgdHJhbnNmb3JtcyBhcyB3ZWxsIGFzIGxheW91dC5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wb3NpdGVSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnQsIGlzRml4ZWQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudElzU2NhbGVkID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGlzRWxlbWVudFNjYWxlZChvZmZzZXRQYXJlbnQpO1xuICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnRJc1NjYWxlZCwgaXNGaXhlZCk7XG4gIHZhciBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgdmFyIG9mZnNldHMgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMDc4XG4gICAgaXNTY3JvbGxQYXJlbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cblxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIG9mZnNldHMgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlKTtcbiAgICAgIG9mZnNldHMueCArPSBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSArPSBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCxcbiAgICB5OiByZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3AgLSBvZmZzZXRzLnksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufSIsICJpbXBvcnQgeyBtb2RpZmllclBoYXNlcyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBzb3VyY2U6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ5ODc1MjU1XG5cbmZ1bmN0aW9uIG9yZGVyKG1vZGlmaWVycykge1xuICB2YXIgbWFwID0gbmV3IE1hcCgpO1xuICB2YXIgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBtYXAuc2V0KG1vZGlmaWVyLm5hbWUsIG1vZGlmaWVyKTtcbiAgfSk7IC8vIE9uIHZpc2l0aW5nIG9iamVjdCwgY2hlY2sgZm9yIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHZpc2l0IHRoZW0gcmVjdXJzaXZlbHlcblxuICBmdW5jdGlvbiBzb3J0KG1vZGlmaWVyKSB7XG4gICAgdmlzaXRlZC5hZGQobW9kaWZpZXIubmFtZSk7XG4gICAgdmFyIHJlcXVpcmVzID0gW10uY29uY2F0KG1vZGlmaWVyLnJlcXVpcmVzIHx8IFtdLCBtb2RpZmllci5yZXF1aXJlc0lmRXhpc3RzIHx8IFtdKTtcbiAgICByZXF1aXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgIGlmICghdmlzaXRlZC5oYXMoZGVwKSkge1xuICAgICAgICB2YXIgZGVwTW9kaWZpZXIgPSBtYXAuZ2V0KGRlcCk7XG5cbiAgICAgICAgaWYgKGRlcE1vZGlmaWVyKSB7XG4gICAgICAgICAgc29ydChkZXBNb2RpZmllcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXN1bHQucHVzaChtb2RpZmllcik7XG4gIH1cblxuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBpZiAoIXZpc2l0ZWQuaGFzKG1vZGlmaWVyLm5hbWUpKSB7XG4gICAgICAvLyBjaGVjayBmb3IgdmlzaXRlZCBvYmplY3RcbiAgICAgIHNvcnQobW9kaWZpZXIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9yZGVyTW9kaWZpZXJzKG1vZGlmaWVycykge1xuICAvLyBvcmRlciBiYXNlZCBvbiBkZXBlbmRlbmNpZXNcbiAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcihtb2RpZmllcnMpOyAvLyBvcmRlciBiYXNlZCBvbiBwaGFzZVxuXG4gIHJldHVybiBtb2RpZmllclBoYXNlcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGhhc2UpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgIHJldHVybiBtb2RpZmllci5waGFzZSA9PT0gcGhhc2U7XG4gICAgfSkpO1xuICB9LCBbXSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlYm91bmNlKGZuKSB7XG4gIHZhciBwZW5kaW5nO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghcGVuZGluZykge1xuICAgICAgcGVuZGluZyA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHBlbmRpbmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVzb2x2ZShmbigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGVuZGluZztcbiAgfTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VCeU5hbWUobW9kaWZpZXJzKSB7XG4gIHZhciBtZXJnZWQgPSBtb2RpZmllcnMucmVkdWNlKGZ1bmN0aW9uIChtZXJnZWQsIGN1cnJlbnQpIHtcbiAgICB2YXIgZXhpc3RpbmcgPSBtZXJnZWRbY3VycmVudC5uYW1lXTtcbiAgICBtZXJnZWRbY3VycmVudC5uYW1lXSA9IGV4aXN0aW5nID8gT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcsIGN1cnJlbnQsIHtcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLm9wdGlvbnMsIGN1cnJlbnQub3B0aW9ucyksXG4gICAgICBkYXRhOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5kYXRhLCBjdXJyZW50LmRhdGEpXG4gICAgfSkgOiBjdXJyZW50O1xuICAgIHJldHVybiBtZXJnZWQ7XG4gIH0sIHt9KTsgLy8gSUUxMSBkb2VzIG5vdCBzdXBwb3J0IE9iamVjdC52YWx1ZXNcblxuICByZXR1cm4gT2JqZWN0LmtleXMobWVyZ2VkKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBtZXJnZWRba2V5XTtcbiAgfSk7XG59IiwgImltcG9ydCBnZXRDb21wb3NpdGVSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2RvbS11dGlscy9saXN0U2Nyb2xsUGFyZW50cy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgb3JkZXJNb2RpZmllcnMgZnJvbSBcIi4vdXRpbHMvb3JkZXJNb2RpZmllcnMuanNcIjtcbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwiLi91dGlscy9kZWJvdW5jZS5qc1wiO1xuaW1wb3J0IG1lcmdlQnlOYW1lIGZyb20gXCIuL3V0aWxzL21lcmdlQnlOYW1lLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7XG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICBtb2RpZmllcnM6IFtdLFxuICBzdHJhdGVneTogJ2Fic29sdXRlJ1xufTtcblxuZnVuY3Rpb24gYXJlVmFsaWRFbGVtZW50cygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiAhYXJncy5zb21lKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgcmV0dXJuICEoZWxlbWVudCAmJiB0eXBlb2YgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPT09ICdmdW5jdGlvbicpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcHBlckdlbmVyYXRvcihnZW5lcmF0b3JPcHRpb25zKSB7XG4gIGlmIChnZW5lcmF0b3JPcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBnZW5lcmF0b3JPcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX2dlbmVyYXRvck9wdGlvbnMgPSBnZW5lcmF0b3JPcHRpb25zLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE1vZGlmaWVycyxcbiAgICAgIGRlZmF1bHRNb2RpZmllcnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPT09IHZvaWQgMCA/IFtdIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuICAgICAgZGVmYXVsdE9wdGlvbnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID09PSB2b2lkIDAgPyBERUZBVUxUX09QVElPTlMgOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyO1xuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlUG9wcGVyKHJlZmVyZW5jZSwgcG9wcGVyLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zO1xuICAgIH1cblxuICAgIHZhciBzdGF0ZSA9IHtcbiAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICBvcmRlcmVkTW9kaWZpZXJzOiBbXSxcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfT1BUSU9OUywgZGVmYXVsdE9wdGlvbnMpLFxuICAgICAgbW9kaWZpZXJzRGF0YToge30sXG4gICAgICBlbGVtZW50czoge1xuICAgICAgICByZWZlcmVuY2U6IHJlZmVyZW5jZSxcbiAgICAgICAgcG9wcGVyOiBwb3BwZXJcbiAgICAgIH0sXG4gICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgIHN0eWxlczoge31cbiAgICB9O1xuICAgIHZhciBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgdmFyIGlzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgdmFyIGluc3RhbmNlID0ge1xuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgc2V0T3B0aW9uczogZnVuY3Rpb24gc2V0T3B0aW9ucyhzZXRPcHRpb25zQWN0aW9uKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gdHlwZW9mIHNldE9wdGlvbnNBY3Rpb24gPT09ICdmdW5jdGlvbicgPyBzZXRPcHRpb25zQWN0aW9uKHN0YXRlLm9wdGlvbnMpIDogc2V0T3B0aW9uc0FjdGlvbjtcbiAgICAgICAgY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICBzdGF0ZS5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMsIHN0YXRlLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICBzdGF0ZS5zY3JvbGxQYXJlbnRzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogaXNFbGVtZW50KHJlZmVyZW5jZSkgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UpIDogcmVmZXJlbmNlLmNvbnRleHRFbGVtZW50ID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlLmNvbnRleHRFbGVtZW50KSA6IFtdLFxuICAgICAgICAgIHBvcHBlcjogbGlzdFNjcm9sbFBhcmVudHMocG9wcGVyKVxuICAgICAgICB9OyAvLyBPcmRlcnMgdGhlIG1vZGlmaWVycyBiYXNlZCBvbiB0aGVpciBkZXBlbmRlbmNpZXMgYW5kIGBwaGFzZWBcbiAgICAgICAgLy8gcHJvcGVydGllc1xuXG4gICAgICAgIHZhciBvcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJNb2RpZmllcnMobWVyZ2VCeU5hbWUoW10uY29uY2F0KGRlZmF1bHRNb2RpZmllcnMsIHN0YXRlLm9wdGlvbnMubW9kaWZpZXJzKSkpOyAvLyBTdHJpcCBvdXQgZGlzYWJsZWQgbW9kaWZpZXJzXG5cbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgcmV0dXJuIG0uZW5hYmxlZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJ1bk1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UudXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgLy8gU3luYyB1cGRhdGUgXHUyMDEzIGl0IHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkLCBldmVuIGlmIG5vdCBuZWNlc3NhcnkuIFRoaXNcbiAgICAgIC8vIGlzIHVzZWZ1bCBmb3IgbG93IGZyZXF1ZW5jeSB1cGRhdGVzIHdoZXJlIHN5bmMgYmVoYXZpb3Igc2ltcGxpZmllcyB0aGVcbiAgICAgIC8vIGxvZ2ljLlxuICAgICAgLy8gRm9yIGhpZ2ggZnJlcXVlbmN5IHVwZGF0ZXMgKGUuZy4gYHJlc2l6ZWAgYW5kIGBzY3JvbGxgIGV2ZW50cyksIGFsd2F5c1xuICAgICAgLy8gcHJlZmVyIHRoZSBhc3luYyBQb3BwZXIjdXBkYXRlIG1ldGhvZFxuICAgICAgZm9yY2VVcGRhdGU6IGZ1bmN0aW9uIGZvcmNlVXBkYXRlKCkge1xuICAgICAgICBpZiAoaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX3N0YXRlJGVsZW1lbnRzID0gc3RhdGUuZWxlbWVudHMsXG4gICAgICAgICAgICByZWZlcmVuY2UgPSBfc3RhdGUkZWxlbWVudHMucmVmZXJlbmNlLFxuICAgICAgICAgICAgcG9wcGVyID0gX3N0YXRlJGVsZW1lbnRzLnBvcHBlcjsgLy8gRG9uJ3QgcHJvY2VlZCBpZiBgcmVmZXJlbmNlYCBvciBgcG9wcGVyYCBhcmUgbm90IHZhbGlkIGVsZW1lbnRzXG4gICAgICAgIC8vIGFueW1vcmVcblxuICAgICAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIFN0b3JlIHRoZSByZWZlcmVuY2UgYW5kIHBvcHBlciByZWN0cyB0byBiZSByZWFkIGJ5IG1vZGlmaWVyc1xuXG5cbiAgICAgICAgc3RhdGUucmVjdHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBnZXRDb21wb3NpdGVSZWN0KHJlZmVyZW5jZSwgZ2V0T2Zmc2V0UGFyZW50KHBvcHBlciksIHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3kgPT09ICdmaXhlZCcpLFxuICAgICAgICAgIHBvcHBlcjogZ2V0TGF5b3V0UmVjdChwb3BwZXIpXG4gICAgICAgIH07IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIHJlc2V0IHRoZSBjdXJyZW50IHVwZGF0ZSBjeWNsZS4gVGhlXG4gICAgICAgIC8vIG1vc3QgY29tbW9uIHVzZSBjYXNlIGZvciB0aGlzIGlzIHRoZSBgZmxpcGAgbW9kaWZpZXIgY2hhbmdpbmcgdGhlXG4gICAgICAgIC8vIHBsYWNlbWVudCwgd2hpY2ggdGhlbiBuZWVkcyB0byByZS1ydW4gYWxsIHRoZSBtb2RpZmllcnMsIGJlY2F1c2UgdGhlXG4gICAgICAgIC8vIGxvZ2ljIHdhcyBwcmV2aW91c2x5IHJhbiBmb3IgdGhlIHByZXZpb3VzIHBsYWNlbWVudCBhbmQgaXMgdGhlcmVmb3JlXG4gICAgICAgIC8vIHN0YWxlL2luY29ycmVjdFxuXG4gICAgICAgIHN0YXRlLnJlc2V0ID0gZmFsc2U7XG4gICAgICAgIHN0YXRlLnBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50OyAvLyBPbiBlYWNoIHVwZGF0ZSBjeWNsZSwgdGhlIGBtb2RpZmllcnNEYXRhYCBwcm9wZXJ0eSBmb3IgZWFjaCBtb2RpZmllclxuICAgICAgICAvLyBpcyBmaWxsZWQgd2l0aCB0aGUgaW5pdGlhbCBkYXRhIHNwZWNpZmllZCBieSB0aGUgbW9kaWZpZXIuIFRoaXMgbWVhbnNcbiAgICAgICAgLy8gaXQgZG9lc24ndCBwZXJzaXN0IGFuZCBpcyBmcmVzaCBvbiBlYWNoIHVwZGF0ZS5cbiAgICAgICAgLy8gVG8gZW5zdXJlIHBlcnNpc3RlbnQgZGF0YSwgdXNlIGAke25hbWV9I3BlcnNpc3RlbnRgXG5cbiAgICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgICAgIHJldHVybiBzdGF0ZS5tb2RpZmllcnNEYXRhW21vZGlmaWVyLm5hbWVdID0gT2JqZWN0LmFzc2lnbih7fSwgbW9kaWZpZXIuZGF0YSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGlmIChzdGF0ZS5yZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGluZGV4ID0gLTE7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX3N0YXRlJG9yZGVyZWRNb2RpZmllID0gc3RhdGUub3JkZXJlZE1vZGlmaWVyc1tpbmRleF0sXG4gICAgICAgICAgICAgIGZuID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLmZuLFxuICAgICAgICAgICAgICBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLm9wdGlvbnMsXG4gICAgICAgICAgICAgIF9vcHRpb25zID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllMiA9PT0gdm9pZCAwID8ge30gOiBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyLFxuICAgICAgICAgICAgICBuYW1lID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLm5hbWU7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IGZuKHtcbiAgICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgICBvcHRpb25zOiBfb3B0aW9ucyxcbiAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlXG4gICAgICAgICAgICB9KSB8fCBzdGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBBc3luYyBhbmQgb3B0aW1pc3RpY2FsbHkgb3B0aW1pemVkIHVwZGF0ZSBcdTIwMTMgaXQgd2lsbCBub3QgYmUgZXhlY3V0ZWQgaWZcbiAgICAgIC8vIG5vdCBuZWNlc3NhcnkgKGRlYm91bmNlZCB0byBydW4gYXQgbW9zdCBvbmNlLXBlci10aWNrKVxuICAgICAgdXBkYXRlOiBkZWJvdW5jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgcmVzb2x2ZShzdGF0ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKCFhcmVWYWxpZEVsZW1lbnRzKHJlZmVyZW5jZSwgcG9wcGVyKSkge1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIGluc3RhbmNlLnNldE9wdGlvbnMob3B0aW9ucykudGhlbihmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgIGlmICghaXNEZXN0cm95ZWQgJiYgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKSB7XG4gICAgICAgIG9wdGlvbnMub25GaXJzdFVwZGF0ZShzdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUgYmVmb3JlIHRoZSBmaXJzdFxuICAgIC8vIHVwZGF0ZSBjeWNsZSBydW5zLiBUaGV5IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIHVwZGF0ZVxuICAgIC8vIGN5Y2xlLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgbW9kaWZpZXIgYWRkcyBzb21lIHBlcnNpc3RlbnQgZGF0YSB0aGF0XG4gICAgLy8gb3RoZXIgbW9kaWZpZXJzIG5lZWQgdG8gdXNlLCBidXQgdGhlIG1vZGlmaWVyIGlzIHJ1biBhZnRlciB0aGUgZGVwZW5kZW50XG4gICAgLy8gb25lLlxuXG4gICAgZnVuY3Rpb24gcnVuTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgIHZhciBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgICAgICAgX3JlZiRvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgICAgICAgb3B0aW9ucyA9IF9yZWYkb3B0aW9ucyA9PT0gdm9pZCAwID8ge30gOiBfcmVmJG9wdGlvbnMsXG4gICAgICAgICAgICBlZmZlY3QgPSBfcmVmLmVmZmVjdDtcblxuICAgICAgICBpZiAodHlwZW9mIGVmZmVjdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHZhciBjbGVhbnVwRm4gPSBlZmZlY3Qoe1xuICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHZhciBub29wRm4gPSBmdW5jdGlvbiBub29wRm4oKSB7fTtcblxuICAgICAgICAgIGVmZmVjdENsZWFudXBGbnMucHVzaChjbGVhbnVwRm4gfHwgbm9vcEZuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xlYW51cE1vZGlmaWVyRWZmZWN0cygpIHtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMuZm9yRWFjaChmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICB9KTtcbiAgICAgIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG59XG5leHBvcnQgdmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3IoKTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBkZXRlY3RPdmVyZmxvdyB9OyIsICJpbXBvcnQgeyBwb3BwZXJHZW5lcmF0b3IsIGRldGVjdE92ZXJmbG93IH0gZnJvbSBcIi4vY3JlYXRlUG9wcGVyLmpzXCI7XG5pbXBvcnQgZXZlbnRMaXN0ZW5lcnMgZnJvbSBcIi4vbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzLmpzXCI7XG5pbXBvcnQgcG9wcGVyT2Zmc2V0cyBmcm9tIFwiLi9tb2RpZmllcnMvcG9wcGVyT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanNcIjtcbmltcG9ydCBhcHBseVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanNcIjtcbmltcG9ydCBvZmZzZXQgZnJvbSBcIi4vbW9kaWZpZXJzL29mZnNldC5qc1wiO1xuaW1wb3J0IGZsaXAgZnJvbSBcIi4vbW9kaWZpZXJzL2ZsaXAuanNcIjtcbmltcG9ydCBwcmV2ZW50T3ZlcmZsb3cgZnJvbSBcIi4vbW9kaWZpZXJzL3ByZXZlbnRPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGFycm93IGZyb20gXCIuL21vZGlmaWVycy9hcnJvdy5qc1wiO1xuaW1wb3J0IGhpZGUgZnJvbSBcIi4vbW9kaWZpZXJzL2hpZGUuanNcIjtcbnZhciBkZWZhdWx0TW9kaWZpZXJzID0gW2V2ZW50TGlzdGVuZXJzLCBwb3BwZXJPZmZzZXRzLCBjb21wdXRlU3R5bGVzLCBhcHBseVN0eWxlcywgb2Zmc2V0LCBmbGlwLCBwcmV2ZW50T3ZlcmZsb3csIGFycm93LCBoaWRlXTtcbnZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKHtcbiAgZGVmYXVsdE1vZGlmaWVyczogZGVmYXVsdE1vZGlmaWVyc1xufSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyLCBwb3BwZXJHZW5lcmF0b3IsIGRlZmF1bHRNb2RpZmllcnMsIGRldGVjdE92ZXJmbG93IH07IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckxpdGUgfSBmcm9tIFwiLi9wb3BwZXItbGl0ZS5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCAqIGZyb20gXCIuL21vZGlmaWVycy9pbmRleC5qc1wiOyIsICJleHBvcnQgKiBmcm9tIFwiLi9lbnVtcy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdywgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckJhc2UgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgfSBmcm9tIFwiLi9wb3BwZXIuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7IiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgQmFzZSB9O1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3MgZnJvbSB3aGljaCB0aGUgbW9zdCBjbGFzc2VzIGFyZSBkZXJpdmVkLlxuICpcbiAqIFRoaXMgY2xhc3MgaGFzIGJlc2lkZXMgYSBgdG9TdHJpbmdgIHdoaWNoIHJldHVybnMgdGhlIGpzb24gcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdFxuICogYWxzbyBhIGZ1bmN0aW9uYWxpdHkgdG8gY2hlY2sgaWYgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MuXG4gKlxuICogVGhlcmVmb3JlLCB0aGUgY2xhc3MgaGFzIGEgc3RhdGljIG1ldGhvZCBgIFtTeW1ib2wuaGFzSW5zdGFuY2VdKHRoYXQpYCB3aGljaCByZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdFxuICogaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzLlxuICpcbiAqIEBzZWUgW2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N5bWJvbC9oYXNJbnN0YW5jZV0oZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N5bWJvbC9oYXNJbnN0YW5jZSlcbiAqXG4gKiBEZXJpdmVkIGNsYXNzZXMgc2hvdWxkIGltcGxlbWVudCBhIHN0YXRpYyBnZXR0ZXIgYGluc3RhbmNlU3ltYm9sYCB3aGljaCByZXR1cm5zIGEgdW5pcXVlIHN5bWJvbC5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG4gKiAgICByZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvYmFzZVwiKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIFRoZSBjbGFzcyB3YXMgZm9ybWVybHkgY2FsbGVkIE9iamVjdC5cbiAqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgYmFzZSBjbGFzcyBmb3IgdGhlIG1vc3QgY2xhc3NlcyBpbiB0aGUgbW9uc3RlciBsaWJyYXJ5XG4gKi9cbmNsYXNzIEJhc2UgZXh0ZW5kcyBPYmplY3Qge1xuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0dG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9iYXNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcGFyYW0gdGhhdFxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBbU3ltYm9sLmhhc0luc3RhbmNlXSh0aGF0KSB7XG5cdFx0aWYgKFxuXHRcdFx0dGhhdCA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHR0aGF0ID09PSBudWxsIHx8XG5cdFx0XHQodHlwZW9mIHRoYXQgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHRoYXQgIT09IFwiZnVuY3Rpb25cIilcblx0XHQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRjb25zdCB0aGF0Q2xhc3MgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhhdCk7XG5cdFx0aWYgKFxuXHRcdFx0dGhhdENsYXNzID09PSB1bmRlZmluZWQgfHxcblx0XHRcdHRoYXRDbGFzcyA9PT0gbnVsbCB8fFxuXHRcdFx0KHR5cGVvZiB0aGF0Q2xhc3MgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHRoYXRDbGFzcyAhPT0gXCJmdW5jdGlvblwiKVxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdGlmIChjaGVja0luc3RhbmNlU3ltYm9sLmFwcGx5KHRoaXMsIFt0aGF0Q2xhc3NdKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gdGhpcyBjYWxsIHRoZSBzdGF0aWMgbWV0aG9kIG9mIHRoZSBzdXBlciBjbGFzcywgaWYgdGhlcmUgaXMgb25lXG5cdFx0cmV0dXJuIHN1cGVyW1N5bWJvbC5oYXNJbnN0YW5jZV0odGhhdCk7XG5cdH1cbn1cblxuLyoqXG4gKiB0aGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgY2xhc3MgaGFzIGEgc3RhdGljIGdldHRlciBgaW5zdGFuY2VTeW1ib2xgIGFuZCBpZiB0aGUgdmFsdWUgb2YgdGhpcyBnZXR0ZXIgaXMgZXF1YWwgdG8gdGhlXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBvYmpcbiAqIEByZXR1cm4ge2Jvb2xlYW58YW55fGJvb2xlYW59XG4gKiBAc2luY2UgMi4xLjBcbiAqL1xuZnVuY3Rpb24gY2hlY2tJbnN0YW5jZVN5bWJvbChvYmopIHtcblx0aWYgKHRoaXMuaGFzT3duUHJvcGVydHkoaW5zdGFuY2VTeW1ib2wpID09PSBmYWxzZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGNvbnN0IHByb3RvID0gb2JqPy5jb25zdHJ1Y3Rvcjtcblx0aWYgKFxuXHRcdHByb3RvID09PSB1bmRlZmluZWQgfHxcblx0XHRwcm90byA9PT0gbnVsbCB8fFxuXHRcdCh0eXBlb2YgcHJvdG8gIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHByb3RvICE9PSBcImZ1bmN0aW9uXCIpXG5cdCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmIChwcm90by5oYXNPd25Qcm9wZXJ0eShpbnN0YW5jZVN5bWJvbCkgIT09IHRydWUpIHtcblx0XHRyZXR1cm4gY2hlY2tJbnN0YW5jZVN5bWJvbC5hcHBseSh0aGlzLCBbb2JqLl9fcHJvdG9fX10pO1xuXHR9XG5cblx0Y29uc3Qgc3ltYm9sID0gcHJvdG9baW5zdGFuY2VTeW1ib2xdO1xuXHRpZiAoc3ltYm9sID09PSB1bmRlZmluZWQpIHtcblx0XHRpZiAob2JqLl9fcHJvdG9fXykge1xuXHRcdFx0cmV0dXJuIGNoZWNrSW5zdGFuY2VTeW1ib2wob2JqLl9fcHJvdG9fXyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpZiAoc3ltYm9sID09PSB0aGlzW2luc3RhbmNlU3ltYm9sXSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cmV0dXJuIGNoZWNrSW5zdGFuY2VTeW1ib2wuYXBwbHkodGhpcywgW29iai5fX3Byb3RvX19dKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IFN0YWNrIH07XG5cbi8qKlxuICogWW91IGNhbiBjYWxsIHRoZSBtZXRob2QgdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgbmV3IFF1ZXVlKClgLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5jbGFzcyBTdGFjayBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5kYXRhID0gW107XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL3N0YWNrXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0VtcHR5KCkge1xuXHRcdHJldHVybiB0aGlzLmRhdGEubGVuZ3RoID09PSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIGxvb2tzIGF0IHRoZSBvYmplY3QgYXQgdGhlIHRvcCBvZiB0aGlzIHN0YWNrIHdpdGhvdXQgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgc3RhY2suXG5cdCAqXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRwZWVrKCkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5kYXRhPy5bdGhpcy5kYXRhLmxlbmd0aCAtIDFdO1xuXHR9XG5cblx0LyoqXG5cdCAqIHB1c2hlcyBhbiBpdGVtIG9udG8gdGhlIHRvcCBvZiB0aGlzIHN0YWNrLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1F1ZXVlfVxuXHQgKi9cblx0cHVzaCh2YWx1ZSkge1xuXHRcdHRoaXMuZGF0YS5wdXNoKHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZW1vdmUgYWxsIGVudHJpZXNcblx0ICpcblx0ICogQHJldHVybiB7UXVldWV9XG5cdCAqL1xuXHRjbGVhcigpIHtcblx0XHR0aGlzLmRhdGEgPSBbXTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZW1vdmVzIHRoZSBvYmplY3QgYXQgdGhlIHRvcCBvZiB0aGlzIHN0YWNrIGFuZCByZXR1cm5zXG5cdCAqIHRoYXQgb2JqZWN0IGFzIHRoZSB2YWx1ZSBvZiB0aGlzIGZ1bmN0aW9uLiBpcyB0aGUgc3RhY2sgZW1wdHlcblx0ICogdGhlIHJldHVybiB2YWx1ZSBpcyB1bmRlZmluZWQuXG5cdCAqXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRwb3AoKSB7XG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5kYXRhLnBvcCgpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHtcblx0aXNBcnJheSxcblx0aXNJbnRlZ2VyLFxuXHRpc09iamVjdCxcblx0aXNQcmltaXRpdmUsXG5cdGlzU3RyaW5nLFxufSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBTdGFjayB9IGZyb20gXCIuLi90eXBlcy9zdGFjay5tanNcIjtcbmltcG9ydCB7XG5cdHZhbGlkYXRlSW50ZWdlcixcblx0dmFsaWRhdGVCb29sZWFuLFxuXHR2YWxpZGF0ZVN0cmluZyxcbn0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBQYXRoZmluZGVyLCBERUxJTUlURVIsIFdJTERDQVJEIH07XG5cbi8qKlxuICogcGF0aCBzZXBhcmF0b3JcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgREVMSU1JVEVSID0gXCIuXCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IFdJTERDQVJEID0gXCIqXCI7XG5cbi8qKlxuICogUGF0aGZpbmRlciBpcyBhIGNsYXNzIHRvIGZpbmQgYSBwYXRoIHRvIGFuIG9iamVjdC5cbiAqXG4gKiBXaXRoIHRoZSBoZWxwIG9mIHRoZSBwYXRoZmluZGVyLCB2YWx1ZXMgY2FuIGJlIHJlYWQgYW5kIHdyaXR0ZW4gZnJvbSBhbiBvYmplY3QgY29uc3RydWN0LlxuICpcbiAqIGBgYFxuICogbmV3IFBhdGhmaW5kZXIoe1xuICogYToge1xuICogICAgIGI6IHtcbiAqICAgICAgICAgZjogW1xuICogICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgIGc6IGZhbHNlLFxuICogICAgICAgICAgICAgfVxuICogICAgICAgICBdLFxuICogICAgIH1cbiAqIH1cbiAqIH0pLmdldFZpYShcImEuYi5mLjAuZ1wiKTsgLy8gXHUyMUE2IGZhbHNlXG4gKiBgYGBcbiAqXG4gKiBpZiBhIHZhbHVlIGlzIG5vdCBwcmVzZW50IG9yIGhhcyB0aGUgd3JvbmcgdHlwZSwgYSBjb3JyZXNwb25kaW5nIGV4Y2VwdGlvbiBpcyB0aHJvd24uXG4gKlxuICogYGBgXG4gKiBuZXcgUGF0aGZpbmRlcih7fSkuZ2V0VmlhKFwiYS5iLmYuMC5nXCIpOyAvLyBcdTIxQTYgRXJyb3JcbiAqIGBgYFxuICpcbiAqIFRoZSBgUGF0aGZpbmRlci5leGlzdHMoKWAgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgYWNjZXNzIHRvIHRoZSBwYXRoIGlzIHBvc3NpYmxlLlxuICpcbiAqIGBgYFxuICogbmV3IFBhdGhmaW5kZXIoe30pLmV4aXN0cyhcImEuYi5mLjAuZ1wiKTsgLy8gXHUyMUE2IGZhbHNlXG4gKiBgYGBcbiAqXG4gKiBwYXRoZmluZGVyIGNhbiBhbHNvIGJlIHVzZWQgdG8gYnVpbGQgb2JqZWN0IHN0cnVjdHVyZXMuIHRvIGRvIHRoaXMsIHRoZSBgUGF0aGZpbmRlci5zZXRWaWEoKWAgbWV0aG9kIG11c3QgYmUgdXNlZC5cbiAqXG4gKiBgYGBcbiAqIG9iaiA9IHt9O1xuICogbmV3IFBhdGhmaW5kZXIob2JqKS5zZXRWaWEoJ2EuYi4wLmMnLCB0cnVlKTsgLy8gXHUyMUE2IHthOntiOlt7Yzp0cnVlfV19fVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy9wYXRoZmluZGVyL2V4YW1wbGUtMS8gRXhhbXBsZSAxXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvbGlicmFyaWVzL3BhdGhmaW5kZXIvZXhhbXBsZS0yLyBFeGFtcGxlIDJcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFBhdGhmaW5kZXIgaXMgYSBjbGFzcyB0byBmaW5kIGEgcGF0aCB0byBhbiBvYmplY3QuXG4gKi9cbmNsYXNzIFBhdGhmaW5kZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNvbnN0cnVjdG9yLlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0IC0gVGhlIG9iamVjdCBwYXJhbWV0ZXIgZm9yIHRoZSBjb25zdHJ1Y3Rvci5cblx0ICpcblx0ICogQHRocm93cyB7RXJyb3J9IFRocm93cyBhbiBlcnJvciBpZiB0aGUgcHJvdmlkZWQgb2JqZWN0IHBhcmFtZXRlciBpcyBhIHNpbXBsZSB0eXBlLlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob2JqZWN0KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChpc1ByaW1pdGl2ZShvYmplY3QpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgcGFyYW1ldGVyIG11c3Qgbm90IGJlIGEgc2ltcGxlIHR5cGVcIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5vYmplY3QgPSBvYmplY3Q7XG5cdFx0dGhpcy53aWxkQ2FyZCA9IFdJTERDQVJEO1xuXHR9XG5cblx0LyoqXG5cdCAqIHNldCB3aWxkY2FyZFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gd2lsZGNhcmRcblx0ICogQHJldHVybiB7UGF0aGZpbmRlcn1cblx0ICogQHNpbmNlIDEuNy4wXG5cdCAqL1xuXHRzZXRXaWxkQ2FyZCh3aWxkY2FyZCkge1xuXHRcdHZhbGlkYXRlU3RyaW5nKHdpbGRjYXJkKTtcblx0XHR0aGlzLndpbGRDYXJkID0gd2lsZGNhcmQ7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8YXJyYXl9IHBhdGhcblx0ICogQHNpbmNlIDEuNC4wXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGpvdXJuZXkgaXMgbm90IGF0IGl0cyBlbmRcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVxuXHQgKi9cblx0Z2V0VmlhKHBhdGgpIHtcblx0XHRyZXR1cm4gZ2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgdGhpcy5vYmplY3QsIHBhdGgpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGFycmF5fSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7UGF0aGZpbmRlcn1cblx0ICogQHNpbmNlIDEuNC4wXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXG5cdCAqL1xuXHRzZXRWaWEocGF0aCwgdmFsdWUpIHtcblx0XHRzZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCB0aGlzLm9iamVjdCwgcGF0aCwgdmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlbGV0ZSBWaWEgUGF0aFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xhcnJheX0gcGF0aFxuXHQgKiBAcmV0dXJuIHtQYXRoZmluZGVyfVxuXHQgKiBAc2luY2UgMS42LjBcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcblx0ICovXG5cdGRlbGV0ZVZpYShwYXRoKSB7XG5cdFx0ZGVsZXRlVmFsdWVWaWFQYXRoLmNhbGwodGhpcywgdGhpcy5vYmplY3QsIHBhdGgpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfGFycmF5fSBwYXRoXG5cdCAqIEByZXR1cm4ge2Jvb2x9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyXG5cdCAqIEBzaW5jZSAxLjQuMFxuXHQgKi9cblx0ZXhpc3RzKHBhdGgpIHtcblx0XHR0cnkge1xuXHRcdFx0Z2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgdGhpcy5vYmplY3QsIHBhdGgsIHRydWUpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0geyp9IHN1YmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfGFycmF5fSBwYXRoXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGNoZWNrXG4gKiBAcmV0dXJuIHtNYXB9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgam91cm5leSBpcyBub3QgYXQgaXRzIGVuZFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGl0ZXJhdGUoc3ViamVjdCwgcGF0aCwgY2hlY2spIHtcblx0aWYgKGNoZWNrID09PSB1bmRlZmluZWQpIHtcblx0XHRjaGVjayA9IGZhbHNlO1xuXHR9XG5cdHZhbGlkYXRlQm9vbGVhbihjaGVjayk7XG5cblx0Y29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuXG5cdGlmIChpc0FycmF5KHBhdGgpKSB7XG5cdFx0cGF0aCA9IHBhdGguam9pbihERUxJTUlURVIpO1xuXHR9XG5cblx0aWYgKGlzT2JqZWN0KHN1YmplY3QpIHx8IGlzQXJyYXkoc3ViamVjdCkpIHtcblx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzdWJqZWN0KSkge1xuXHRcdFx0cmVzdWx0LnNldChrZXksIGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHZhbHVlLCBwYXRoLCBjaGVjaykpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjb25zdCBrZXkgPSBwYXRoLnNwbGl0KERFTElNSVRFUikuc2hpZnQoKTtcblx0XHRyZXN1bHQuc2V0KGtleSwgZ2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgc3ViamVjdCwgcGF0aCwgY2hlY2spKTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBzdWJqZWN0XG4gKiBAcGFyYW0gcGF0aFxuICogQHBhcmFtIGNoZWNrXG4gKiBAcmV0dXJuIHtWfCp8TWFwfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGpvdXJuZXkgaXMgbm90IGF0IGl0cyBlbmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlVmlhUGF0aChzdWJqZWN0LCBwYXRoLCBjaGVjaykge1xuXHRpZiAoY2hlY2sgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNoZWNrID0gZmFsc2U7XG5cdH1cblx0dmFsaWRhdGVCb29sZWFuKGNoZWNrKTtcblxuXHRpZiAoIShpc0FycmF5KHBhdGgpIHx8IGlzU3RyaW5nKHBhdGgpKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFwidHlwZSBlcnJvcjogYSBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgaW4gZ2V0VmFsdWVWaWFQYXRoXCIsXG5cdFx0KTtcblx0fVxuXG5cdGxldCBwYXJ0cztcblx0aWYgKGlzU3RyaW5nKHBhdGgpKSB7XG5cdFx0aWYgKHBhdGggPT09IFwiXCIpIHtcblx0XHRcdHJldHVybiBzdWJqZWN0O1xuXHRcdH1cblxuXHRcdHBhcnRzID0gcGF0aC5zcGxpdChERUxJTUlURVIpO1xuXHR9XG5cblx0bGV0IGN1cnJlbnQgPSBwYXJ0cy5zaGlmdCgpO1xuXG5cdGlmIChjdXJyZW50ID09PSB0aGlzLndpbGRDYXJkKSB7XG5cdFx0cmV0dXJuIGl0ZXJhdGUuY2FsbCh0aGlzLCBzdWJqZWN0LCBwYXJ0cy5qb2luKERFTElNSVRFUiksIGNoZWNrKTtcblx0fVxuXG5cdGlmIChpc09iamVjdChzdWJqZWN0KSB8fCBpc0FycmF5KHN1YmplY3QpKSB7XG5cdFx0bGV0IGFuY2hvcjtcblx0XHRpZiAoc3ViamVjdCBpbnN0YW5jZW9mIE1hcCB8fCBzdWJqZWN0IGluc3RhbmNlb2YgV2Vha01hcCkge1xuXHRcdFx0YW5jaG9yID0gc3ViamVjdC5nZXQoY3VycmVudCk7XG5cdFx0fSBlbHNlIGlmIChzdWJqZWN0IGluc3RhbmNlb2YgU2V0IHx8IHN1YmplY3QgaW5zdGFuY2VvZiBXZWFrU2V0KSB7XG5cdFx0XHRjdXJyZW50ID0gcGFyc2VJbnQoY3VycmVudCk7XG5cdFx0XHR2YWxpZGF0ZUludGVnZXIoY3VycmVudCk7XG5cdFx0XHRhbmNob3IgPSBbLi4uc3ViamVjdF0/LltjdXJyZW50XTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBXZWFrUmVmID09PSBcImZ1bmN0aW9uXCIgJiYgc3ViamVjdCBpbnN0YW5jZW9mIFdlYWtSZWYpIHtcblx0XHRcdHRocm93IEVycm9yKFwidW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZSAoV2Vha1JlZilcIik7XG5cdFx0fSBlbHNlIGlmIChpc0FycmF5KHN1YmplY3QpKSB7XG5cdFx0XHRjdXJyZW50ID0gcGFyc2VJbnQoY3VycmVudCk7XG5cdFx0XHR2YWxpZGF0ZUludGVnZXIoY3VycmVudCk7XG5cdFx0XHRhbmNob3IgPSBzdWJqZWN0Py5bY3VycmVudF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFuY2hvciA9IHN1YmplY3Q/LltjdXJyZW50XTtcblx0XHR9XG5cblx0XHRpZiAoaXNPYmplY3QoYW5jaG9yKSB8fCBpc0FycmF5KGFuY2hvcikpIHtcblx0XHRcdHJldHVybiBnZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCBhbmNob3IsIHBhcnRzLmpvaW4oREVMSU1JVEVSKSwgY2hlY2spO1xuXHRcdH1cblxuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aHJvdyBFcnJvcihgdGhlIGpvdXJuZXkgaXMgbm90IGF0IGl0cyBlbmQgKCR7cGFydHMuam9pbihERUxJTUlURVIpfSlgKTtcblx0XHR9XG5cblx0XHRpZiAoY2hlY2sgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuXHRcdFx0XHRPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc3ViamVjdCksXG5cdFx0XHRcdGN1cnJlbnQsXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoIXN1YmplY3QuaGFzT3duUHJvcGVydHkoY3VycmVudCkgJiYgZGVzY3JpcHRvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IEVycm9yKFwidW5rbm93biB2YWx1ZSBcIiArIGN1cnJlbnQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBhbmNob3I7XG5cdH1cblxuXHR0aHJvdyBUeXBlRXJyb3IoYHVuc3VwcG9ydGVkIHR5cGUgJHt0eXBlb2Ygc3ViamVjdH0gZm9yIHBhdGggJHtwYXRofWApO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gc3ViamVjdFxuICogQHBhcmFtIHtzdHJpbmd8YXJyYXl9IHBhdGhcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuICogQHRocm93cyB7RXJyb3J9IHRoZSBqb3VybmV5IGlzIG5vdCBhdCBpdHMgZW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYWN0aW9uIGZvciB0aGlzIGRhdGEgdHlwZVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2V0VmFsdWVWaWFQYXRoKHN1YmplY3QsIHBhdGgsIHZhbHVlKSB7XG5cdGlmICghKGlzQXJyYXkocGF0aCkgfHwgaXNTdHJpbmcocGF0aCkpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBlcnJvcjogYSBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXlcIik7XG5cdH1cblxuXHRsZXQgcGFydHM7XG5cdGlmIChpc0FycmF5KHBhdGgpKSB7XG5cdFx0aWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0cGFydHMgPSBwYXRoO1xuXHR9IGVsc2Uge1xuXHRcdHBhcnRzID0gcGF0aC5zcGxpdChERUxJTUlURVIpO1xuXHR9XG5cblx0bGV0IGxhc3QgPSBwYXJ0cy5wb3AoKTtcblx0Y29uc3Qgc3VicGF0aCA9IHBhcnRzLmpvaW4oREVMSU1JVEVSKTtcblxuXHRjb25zdCBzdGFjayA9IG5ldyBTdGFjaygpO1xuXHRsZXQgY3VycmVudCA9IHN1YnBhdGg7XG5cdHdoaWxlICh0cnVlKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHN1YmplY3QsIGN1cnJlbnQsIHRydWUpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdHN0YWNrLnB1c2goY3VycmVudCk7XG5cdFx0cGFydHMucG9wKCk7XG5cdFx0Y3VycmVudCA9IHBhcnRzLmpvaW4oREVMSU1JVEVSKTtcblxuXHRcdGlmIChjdXJyZW50ID09PSBcIlwiKSBicmVhaztcblx0fVxuXG5cdHdoaWxlICghc3RhY2suaXNFbXB0eSgpKSB7XG5cdFx0Y3VycmVudCA9IHN0YWNrLnBvcCgpO1xuXHRcdGxldCBvYmogPSB7fTtcblxuXHRcdGlmICghc3RhY2suaXNFbXB0eSgpKSB7XG5cdFx0XHRjb25zdCBuID0gc3RhY2sucGVlaygpLnNwbGl0KERFTElNSVRFUikucG9wKCk7XG5cdFx0XHRpZiAoaXNJbnRlZ2VyKHBhcnNlSW50KG4pKSkge1xuXHRcdFx0XHRvYmogPSBbXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRzZXRWYWx1ZVZpYVBhdGguY2FsbCh0aGlzLCBzdWJqZWN0LCBjdXJyZW50LCBvYmopO1xuXHR9XG5cblx0Y29uc3QgYW5jaG9yID0gZ2V0VmFsdWVWaWFQYXRoLmNhbGwodGhpcywgc3ViamVjdCwgc3VicGF0aCk7XG5cblx0aWYgKCEoaXNPYmplY3Qoc3ViamVjdCkgfHwgaXNBcnJheShzdWJqZWN0KSkpIHtcblx0XHR0aHJvdyBUeXBlRXJyb3IoYHVuc3VwcG9ydGVkIHR5cGU6ICR7dHlwZW9mIHN1YmplY3R9IGluIHNldFZhbHVlVmlhUGF0aGApO1xuXHR9XG5cblx0aWYgKGFuY2hvciBpbnN0YW5jZW9mIE1hcCB8fCBhbmNob3IgaW5zdGFuY2VvZiBXZWFrTWFwKSB7XG5cdFx0YW5jaG9yLnNldChsYXN0LCB2YWx1ZSk7XG5cdH0gZWxzZSBpZiAoYW5jaG9yIGluc3RhbmNlb2YgU2V0IHx8IGFuY2hvciBpbnN0YW5jZW9mIFdlYWtTZXQpIHtcblx0XHRhbmNob3IuYXBwZW5kKHZhbHVlKTtcblx0fSBlbHNlIGlmICh0eXBlb2YgV2Vha1JlZiA9PT0gXCJmdW5jdGlvblwiICYmIGFuY2hvciBpbnN0YW5jZW9mIFdlYWtSZWYpIHtcblx0XHR0aHJvdyBFcnJvcihcInVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGUgaW4gc2V0VmFsdWVWaWFQYXRoXCIpO1xuXHR9IGVsc2UgaWYgKGlzQXJyYXkoYW5jaG9yKSkge1xuXHRcdGxhc3QgPSBwYXJzZUludChsYXN0KTtcblx0XHR2YWxpZGF0ZUludGVnZXIobGFzdCk7XG5cdFx0YXNzaWduUHJvcGVydHkoYW5jaG9yLCBcIlwiICsgbGFzdCwgdmFsdWUpO1xuXHR9IGVsc2Uge1xuXHRcdGFzc2lnblByb3BlcnR5KGFuY2hvciwgbGFzdCwgdmFsdWUpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqL1xuZnVuY3Rpb24gYXNzaWduUHJvcGVydHkob2JqZWN0LCBrZXksIHZhbHVlKSB7XG5cdGlmICghb2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRvYmplY3Rba2V5XSA9IHZhbHVlO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0ZGVsZXRlIG9iamVjdFtrZXldO1xuXHR9XG5cblx0b2JqZWN0W2tleV0gPSB2YWx1ZTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHN1YmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgam91cm5leSBpcyBub3QgYXQgaXRzIGVuZFxuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGFjdGlvbiBmb3IgdGhpcyBkYXRhIHR5cGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkZWxldGVWYWx1ZVZpYVBhdGgoc3ViamVjdCwgcGF0aCkge1xuXHRpZiAoIShpc0FycmF5KHBhdGgpIHx8IGlzU3RyaW5nKHBhdGgpKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFwidHlwZSBlcnJvcjogYSBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gYXJyYXkgaW4gZGVsZXRlVmFsdWVWaWFQYXRoXCIsXG5cdFx0KTtcblx0fVxuXG5cdGxldCBwYXJ0cztcblx0aWYgKGlzQXJyYXkocGF0aCkpIHtcblx0XHRpZiAocGF0aC5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRwYXJ0cyA9IHBhdGg7XG5cdH0gZWxzZSB7XG5cdFx0cGFydHMgPSBwYXRoLnNwbGl0KERFTElNSVRFUik7XG5cdH1cblxuXHRsZXQgbGFzdCA9IHBhcnRzLnBvcCgpO1xuXHRjb25zdCBzdWJQYXRoID0gcGFydHMuam9pbihERUxJTUlURVIpO1xuXG5cdGNvbnN0IGFuY2hvciA9IGdldFZhbHVlVmlhUGF0aC5jYWxsKHRoaXMsIHN1YmplY3QsIHN1YlBhdGgpO1xuXG5cdGlmIChhbmNob3IgaW5zdGFuY2VvZiBNYXApIHtcblx0XHRhbmNob3IuZGVsZXRlKGxhc3QpO1xuXHR9IGVsc2UgaWYgKFxuXHRcdGFuY2hvciBpbnN0YW5jZW9mIFNldCB8fFxuXHRcdGFuY2hvciBpbnN0YW5jZW9mIFdlYWtNYXAgfHxcblx0XHRhbmNob3IgaW5zdGFuY2VvZiBXZWFrU2V0IHx8XG5cdFx0KHR5cGVvZiBXZWFrUmVmID09PSBcImZ1bmN0aW9uXCIgJiYgYW5jaG9yIGluc3RhbmNlb2YgV2Vha1JlZilcblx0KSB7XG5cdFx0dGhyb3cgRXJyb3IoXCJ1bnN1cHBvcnRlZCBhY3Rpb24gZm9yIHRoaXMgZGF0YSB0eXBlIGluIGRlbGV0ZVZhbHVlVmlhUGF0aFwiKTtcblx0fSBlbHNlIGlmIChpc0FycmF5KGFuY2hvcikpIHtcblx0XHRsYXN0ID0gcGFyc2VJbnQobGFzdCk7XG5cdFx0dmFsaWRhdGVJbnRlZ2VyKGxhc3QpO1xuXHRcdGRlbGV0ZSBhbmNob3JbbGFzdF07XG5cdH0gZWxzZSB7XG5cdFx0ZGVsZXRlIGFuY2hvcltsYXN0XTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGlzSXRlcmFibGUsIGlzU3RyaW5nIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUZ1bmN0aW9uLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5cbmV4cG9ydCB7IFRva2VuTGlzdCB9O1xuXG4vKipcbiAqIEEgYFRva2VuTGlzdGAgYWxsb3dzIHlvdSB0byBtYW5hZ2UgdG9rZW5zIChpbmRpdmlkdWFsIGNoYXJhY3RlciBzdHJpbmdzIHN1Y2ggYXMgY3NzIGNsYXNzZXMgaW4gYW4gYXR0cmlidXRlIHN0cmluZykuXG4gKlxuICogVGhlIGBUb2tlbkxpc3RgIG9mZmVycyB2YXJpb3VzIGZ1bmN0aW9ucyB0byBtYW5pcHVsYXRlIHZhbHVlcy4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gYWRkLCByZW1vdmUgb3IgcmVwbGFjZSBhIGNsYXNzIGluIGEgQ1NTIGxpc3QuXG4gKlxuICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIHRoZSBbaXRlcmF0aW9uIHByb3RvY29sXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9JdGVyYXRpb25fcHJvdG9jb2xzKS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgVG9rZW5MaXN0IGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ3xpdGVyYXRhYmxlfSBpbml0XG5cdCAqL1xuXHRjb25zdHJ1Y3Rvcihpbml0KSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnRva2VucyA9IG5ldyBTZXQoKTtcblxuXHRcdGlmICh0eXBlb2YgaW5pdCAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0dGhpcy5hZGQoaW5pdCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEl0ZXJhdG9yIHByb3RvY29sXG5cdCAqXG5cdCAqIEByZXR1cm4ge1N5bWJvbC5pdGVyYXRvcn1cblx0ICovXG5cdGdldEl0ZXJhdG9yKCkge1xuXHRcdHJldHVybiB0aGlzW1N5bWJvbC5pdGVyYXRvcl0oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJdGVyYXRvclxuXHQgKlxuXHQgKiBAcmV0dXJuIHt7bmV4dDogKChmdW5jdGlvbigpOiAoe3ZhbHVlOiAqLCBkb25lOiBib29sZWFufSkpfCopfX1cblx0ICovXG5cdFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuXHRcdC8vIFVzZSBhIG5ldyBpbmRleCBmb3IgZWFjaCBpdGVyYXRvci4gVGhpcyBtYWtlcyBtdWx0aXBsZVxuXHRcdC8vIGl0ZXJhdGlvbnMgb3ZlciB0aGUgaXRlcmFibGUgc2FmZSBmb3Igbm9uLXRyaXZpYWwgY2FzZXMsXG5cdFx0Ly8gc3VjaCBhcyB1c2Ugb2YgYnJlYWsgb3IgbmVzdGVkIGxvb3Bpbmcgb3ZlciB0aGUgc2FtZSBpdGVyYWJsZS5cblx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdGNvbnN0IGVudHJpZXMgPSB0aGlzLmVudHJpZXMoKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRuZXh0OiAoKSA9PiB7XG5cdFx0XHRcdGlmIChpbmRleCA8IGVudHJpZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgdmFsdWU6IGVudHJpZXM/LltpbmRleCsrXSwgZG9uZTogZmFsc2UgfTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4geyBkb25lOiB0cnVlIH07XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRydWUgaWYgaXQgY29udGFpbnMgdG9rZW4sIG90aGVyd2lzZSBmYWxzZVxuXHQgKlxuXHQgKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvdG9rZW5saXN0LTIubWpzXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfGl0ZXJhdGFibGV9IHZhbHVlXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRjb250YWlucyh2YWx1ZSkge1xuXHRcdGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHRcdHZhbHVlID0gdmFsdWUudHJpbSgpO1xuXHRcdFx0bGV0IGNvdW50ZXIgPSAwO1xuXHRcdFx0dmFsdWUuc3BsaXQoXCIgXCIpLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLnRva2Vucy5oYXModG9rZW4udHJpbSgpKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblx0XHRcdFx0Y291bnRlcisrO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gY291bnRlciA+IDAgPyB0cnVlIDogZmFsc2U7XG5cdFx0fVxuXG5cdFx0aWYgKGlzSXRlcmFibGUodmFsdWUpKSB7XG5cdFx0XHRsZXQgY291bnRlciA9IDA7XG5cdFx0XHRmb3IgKGNvbnN0IHRva2VuIG9mIHZhbHVlKSB7XG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0XHRcdFx0aWYgKHRoaXMudG9rZW5zLmhhcyh0b2tlbi50cmltKCkpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRjb3VudGVyKys7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY291bnRlciA+IDAgPyB0cnVlIDogZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCB0b2tlbnNcblx0ICpcblx0ICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL3R5cGVzL3Rva2VubGlzdC0zLm1qc1xuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ3xpdGVyYXRhYmxlfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtUb2tlbkxpc3R9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdmFsdWVcblx0ICovXG5cdGFkZCh2YWx1ZSkge1xuXHRcdGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHRcdHZhbHVlLnNwbGl0KFwiIFwiKS5mb3JFYWNoKCh0b2tlbikgPT4ge1xuXHRcdFx0XHR0aGlzLnRva2Vucy5hZGQodG9rZW4udHJpbSgpKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAoaXNJdGVyYWJsZSh2YWx1ZSkpIHtcblx0XHRcdGZvciAoY29uc3QgdG9rZW4gb2YgdmFsdWUpIHtcblx0XHRcdFx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHRcdFx0XHR0aGlzLnRva2Vucy5hZGQodG9rZW4udHJpbSgpKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInVuc3VwcG9ydGVkIHZhbHVlXCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJlbW92ZSBhbGwgdG9rZW5zXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Rva2VuTGlzdH1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHRoaXMudG9rZW5zLmNsZWFyKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0b2tlblxuXHQgKlxuXHQgKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvdG9rZW5saXN0LTQubWpzXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfGl0ZXJhdGFibGV9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1Rva2VuTGlzdH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB2YWx1ZVxuXHQgKi9cblx0cmVtb3ZlKHZhbHVlKSB7XG5cdFx0aWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0dmFsdWUuc3BsaXQoXCIgXCIpLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRcdHRoaXMudG9rZW5zLmRlbGV0ZSh0b2tlbi50cmltKCkpO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIGlmIChpc0l0ZXJhYmxlKHZhbHVlKSkge1xuXHRcdFx0Zm9yIChjb25zdCB0b2tlbiBvZiB2YWx1ZSkge1xuXHRcdFx0XHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdFx0XHRcdHRoaXMudG9rZW5zLmRlbGV0ZSh0b2tlbi50cmltKCkpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwidW5zdXBwb3J0ZWQgdmFsdWVcIiwgXCJ0eXBlcy90b2tlbmxpc3QubWpzXCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHRoaXMgbWV0aG9kIHJlcGxhY2VzIGEgdG9rZW4gd2l0aCBhIG5ldyB0b2tlbi5cblx0ICpcblx0ICogaWYgdGhlIHBhc3NlZCB0b2tlbiBleGlzdHMsIGl0IGlzIHJlcGxhY2VkIHdpdGggbmV3VG9rZW4gYW5kIFRva2VuTGlzdCBpcyByZXR1cm5lZC5cblx0ICogaWYgdGhlIHRva2VuIGRvZXMgbm90IGV4aXN0LCBuZXdUb2tlbiBpcyBub3Qgc2V0IGFuZCBUb2tlbkxpc3QgaXMgcmV0dXJuZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmV3VG9rZW5cblx0ICogQHJldHVybiB7VG9rZW5MaXN0fVxuXHQgKi9cblx0cmVwbGFjZSh0b2tlbiwgbmV3VG9rZW4pIHtcblx0XHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdFx0dmFsaWRhdGVTdHJpbmcobmV3VG9rZW4pO1xuXHRcdGlmICghdGhpcy5jb250YWlucyh0b2tlbikpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGNvbnN0IGEgPSBBcnJheS5mcm9tKHRoaXMudG9rZW5zKTtcblx0XHRjb25zdCBpID0gYS5pbmRleE9mKHRva2VuKTtcblx0XHRpZiAoaSA9PT0gLTEpIHJldHVybiB0aGlzO1xuXG5cdFx0YS5zcGxpY2UoaSwgMSwgbmV3VG9rZW4pO1xuXHRcdHRoaXMudG9rZW5zID0gbmV3IFNldCgpO1xuXHRcdHRoaXMuYWRkKGEpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0b2tlbiBmcm9tIHN0cmluZy4gSWYgdG9rZW4gZG9lc24ndCBleGlzdCBpdCdzIGFkZGVkLlxuXHQgKlxuXHQgKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvdHlwZXMvdG9rZW5saXN0LTUubWpzXG5cdCAqIEBwYXJhbSB7YXJyYXl8c3RyaW5nfGl0ZXJhdGFibGV9IHZhbHVlXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgdmFsdWVcblx0ICovXG5cdHRvZ2dsZSh2YWx1ZSkge1xuXHRcdGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHRcdHZhbHVlLnNwbGl0KFwiIFwiKS5mb3JFYWNoKCh0b2tlbikgPT4ge1xuXHRcdFx0XHR0b2dnbGVWYWx1ZS5jYWxsKHRoaXMsIHRva2VuKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAoaXNJdGVyYWJsZSh2YWx1ZSkpIHtcblx0XHRcdGZvciAoY29uc3QgdG9rZW4gb2YgdmFsdWUpIHtcblx0XHRcdFx0dG9nZ2xlVmFsdWUuY2FsbCh0aGlzLCB0b2tlbik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ1bnN1cHBvcnRlZCB2YWx1ZVwiLCBcInR5cGVzL3Rva2VubGlzdC5tanNcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogcmV0dXJucyBhbiBhcnJheSB3aXRoIGFsbCB0b2tlbnNcblx0ICpcblx0ICogQHJldHVybiB7YXJyYXl9XG5cdCAqL1xuXHRlbnRyaWVzKCkge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMudG9rZW5zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBleGVjdXRlcyB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gd2l0aCBlYWNoIHZhbHVlIG9mIHRoZSBzZXRcblx0ICpcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHJldHVybiB7VG9rZW5MaXN0fVxuXHQgKi9cblx0Zm9yRWFjaChjYWxsYmFjaykge1xuXHRcdHZhbGlkYXRlRnVuY3Rpb24oY2FsbGJhY2spO1xuXHRcdHRoaXMudG9rZW5zLmZvckVhY2goY2FsbGJhY2spO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJldHVybnMgdGhlIGluZGl2aWR1YWwgdG9rZW5zIHNlcGFyYXRlZCBieSBhIGJsYW5rIGNoYXJhY3RlclxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gdGhpcy5lbnRyaWVzKCkuam9pbihcIiBcIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHRva2VuXG4gKiBAcmV0dXJuIHt0b2dnbGVWYWx1ZX1cbiAqIEB0aHJvd3Mge0Vycm9yfSBtdXN0IGJlIGNhbGxlZCB3aXRoIFRva2VuTGlzdC5jYWxsXG4gKi9cbmZ1bmN0aW9uIHRvZ2dsZVZhbHVlKHRva2VuKSB7XG5cdGlmICghKHRoaXMgaW5zdGFuY2VvZiBUb2tlbkxpc3QpKVxuXHRcdHRocm93IEVycm9yKFwibXVzdCBiZSBjYWxsZWQgd2l0aCBUb2tlbkxpc3QuY2FsbFwiKTtcblx0dmFsaWRhdGVTdHJpbmcodG9rZW4pO1xuXHR0b2tlbiA9IHRva2VuLnRyaW0oKTtcblx0aWYgKHRoaXMuY29udGFpbnModG9rZW4pKSB7XG5cdFx0dGhpcy5yZW1vdmUodG9rZW4pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdHRoaXMuYWRkKHRva2VuKTtcblx0cmV0dXJuIHRoaXM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuZXhwb3J0IHtcblx0REVGQVVMVF9USEVNRSxcblx0QVRUUklCVVRFX1BSRUZJWCxcblx0QVRUUklCVVRFX09QVElPTlMsXG5cdEFUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SLFxuXHRBVFRSSUJVVEVfVEhFTUVfUFJFRklYLFxuXHRBVFRSSUJVVEVfVEhFTUVfTkFNRSxcblx0QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUyxcblx0QVRUUklCVVRFX1VQREFURVJfU0VMRUNUX1RISVMsXG5cdEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UsXG5cdEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVCxcblx0QVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSxcblx0QVRUUklCVVRFX1VQREFURVJfUkVNT1ZFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9CSU5ELFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9CSU5EX1RZUEUsXG5cdEFUVFJJQlVURV9URU1QTEFURV9QUkVGSVgsXG5cdEFUVFJJQlVURV9ST0xFLFxuXHRBVFRSSUJVVEVfRElTQUJMRUQsXG5cdEFUVFJJQlVURV9WQUxVRSxcblx0QVRUUklCVVRFX09CSkVDVExJTkssXG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFRBR19TQ1JJUFQsXG5cdFRBR19TVFlMRSxcblx0VEFHX0xJTkssXG5cdEFUVFJJQlVURV9JRCxcblx0QVRUUklCVVRFX0NMQVNTLFxuXHRBVFRSSUJVVEVfVElUTEUsXG5cdEFUVFJJQlVURV9TUkMsXG5cdEFUVFJJQlVURV9IUkVGLFxuXHRBVFRSSUJVVEVfVFlQRSxcblx0QVRUUklCVVRFX05PTkNFLFxuXHRBVFRSSUJVVEVfVFJBTlNMQVRFLFxuXHRBVFRSSUJVVEVfVEFCSU5ERVgsXG5cdEFUVFJJQlVURV9TUEVMTENIRUNLLFxuXHRBVFRSSUJVVEVfU0xPVCxcblx0QVRUUklCVVRFX1BBUlQsXG5cdEFUVFJJQlVURV9MQU5HLFxuXHRBVFRSSUJVVEVfSVRFTVRZUEUsXG5cdEFUVFJJQlVURV9JVEVNU0NPUEUsXG5cdEFUVFJJQlVURV9JVEVNUkVGLFxuXHRBVFRSSUJVVEVfSVRFTUlELFxuXHRBVFRSSUJVVEVfSVRFTVBST1AsXG5cdEFUVFJJQlVURV9JUyxcblx0QVRUUklCVVRFX0lOUFVUTU9ERSxcblx0QVRUUklCVVRFX0FDQ0VTU0tFWSxcblx0QVRUUklCVVRFX0FVVE9DQVBJVEFMSVpFLFxuXHRBVFRSSUJVVEVfQVVUT0ZPQ1VTLFxuXHRBVFRSSUJVVEVfQ09OVEVOVEVESVRBQkxFLFxuXHRBVFRSSUJVVEVfRElSLFxuXHRBVFRSSUJVVEVfRFJBR0dBQkxFLFxuXHRBVFRSSUJVVEVfRU5URVJLRVlISU5ULFxuXHRBVFRSSUJVVEVfRVhQT1JUUEFSVFMsXG5cdEFUVFJJQlVURV9ISURERU4sXG5cdEFUVFJJQlVURV9GT1JNX0JJTkQsXG5cdEFUVFJJQlVURV9GT1JNX0JJTkRfVFlQRSxcblx0b2JqZWN0VXBkYXRlckxpbmtTeW1ib2wsXG5cdGN1c3RvbUVsZW1lbnRVcGRhdGVyTGlua1N5bWJvbCxcblx0aW5pdENvbnRyb2xDYWxsYmFja05hbWUsXG5cdEFUVFJJQlVURV9TQ1JJUFRfSE9TVCxcblx0QVRUUklCVVRFX0lOSVRfQ0FMTEJBQ0ssXG59O1xuXG4vKipcbiAqIGRlZmF1bHQgdGhlbWVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IERFRkFVTFRfVEhFTUUgPSBcIm1vbnN0ZXJcIjtcblxuLyoqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX1BSRUZJWCA9IFwiZGF0YS1tb25zdGVyLVwiO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBwYXNzIG9wdGlvbnMgdG8gYSBjb250cm9sXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9PUFRJT05TID0gYCR7QVRUUklCVVRFX1BSRUZJWH1vcHRpb25zYDtcblxuLyoqXG4gKiBUaGlzIGlzIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBwYXNzIHRoZSBzY3JpcHQgaG9zdCB0byBhIGNvbnRyb2xcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjQ4LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9TQ1JJUFRfSE9TVCA9IGAke0FUVFJJQlVURV9QUkVGSVh9c2NyaXB0LWhvc3RgO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSB0byBwYXNzIG9wdGlvbnMgdG8gYSBjb250cm9sXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zMC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfT1BUSU9OU19TRUxFQ1RPUiA9IGAke0FUVFJJQlVURV9QUkVGSVh9b3B0aW9ucy1zZWxlY3RvcmA7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgYXR0cmlidXRlIHRvIHBhc3MgdGhlIGNhbGxiYWNrIHRvIGEgY29udHJvbFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNDguMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0lOSVRfQ0FMTEJBQ0sgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWluaXQtY2FsbGJhY2tgO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGNhbGxiYWNrIHRvIHBhc3MgdGhlIGNhbGxiYWNrIHRvIGEgY29udHJvbFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNDguMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgaW5pdENvbnRyb2xDYWxsYmFja05hbWUgPSBgaW5pdEN1c3RvbUNvbnRyb2xDYWxsYmFja2A7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9USEVNRV9QUkVGSVggPSBgJHtBVFRSSUJVVEVfUFJFRklYfXRoZW1lLWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX1RIRU1FX05BTUUgPSBgJHtBVFRSSUJVVEVfVEhFTUVfUFJFRklYfW5hbWVgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTID0gYCR7QVRUUklCVVRFX1BSRUZJWH1hdHRyaWJ1dGVzYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNy4xXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX1NFTEVDVF9USElTID0gYCR7QVRUUklCVVRFX1BSRUZJWH1zZWxlY3QtdGhpc2A7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXJlcGxhY2VgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlQgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWluc2VydGA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWluc2VydC1yZWZlcmVuY2VgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9SRU1PVkUgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXJlbW92ZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9VUERBVEVSX0JJTkQgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWJpbmRgO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVVBEQVRFUl9CSU5EX1RZUEUgPSBgJHtBVFRSSUJVVEVfVVBEQVRFUl9CSU5EfS10eXBlYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSAyMDI0LTEyLTI5XG4gKiBAc2luY2UgMy43My4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9GT1JNX0JJTkQgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWZvcm0tYmluZGA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuNzMuMFxuICogQGRlcHJlY2F0ZWQgc2luY2UgMjAyNC0xMi0yOVxuICovXG5jb25zdCBBVFRSSUJVVEVfRk9STV9CSU5EX1RZUEUgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWZvcm0tYmluZC10eXBlYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNy4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9URU1QTEFURV9QUkVGSVggPSBgJHtBVFRSSUJVVEVfUFJFRklYfXRlbXBsYXRlLXByZWZpeGA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTQuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfUk9MRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9cm9sZWA7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVkFMVUUgPSBcInZhbHVlXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9PQkpFQ1RMSU5LID0gYCR7QVRUUklCVVRFX1BSRUZJWH1vYmplY3RsaW5rYDtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWVycm9yYDtcblxuLyoqXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNC4wXG4gKi9cbmNvbnN0IG9iamVjdFVwZGF0ZXJMaW5rU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2RvbS9AQG9iamVjdC11cGRhdGVyLWxpbmtcIixcbik7XG5cbi8qKlxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL2N1c3RvbS1lbGVtZW50QEBvcHRpb25zLXVwZGF0ZXItbGlua1wiLFxuKTtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IFRBR19TQ1JJUFQgPSBcInNjcmlwdFwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgVEFHX1NUWUxFID0gXCJzdHlsZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgVEFHX0xJTksgPSBcImxpbmtcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cblxuY29uc3QgQVRUUklCVVRFX0lEID0gXCJpZFwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuXG5jb25zdCBBVFRSSUJVVEVfQ0xBU1MgPSBcImNsYXNzXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfVElUTEUgPSBcInRpdGxlXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfU1JDID0gXCJzcmNcIjtcbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfSFJFRiA9IFwiaHJlZlwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1RZUEUgPSBcInR5cGVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9OT05DRSA9IFwibm9uY2VcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9UUkFOU0xBVEUgPSBcInRyYW5zbGF0ZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1RBQklOREVYID0gXCJ0YWJpbmRleFwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX1NQRUxMQ0hFQ0sgPSBcInNwZWxsY2hlY2tcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9TTE9UID0gXCJzbG90XCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfUEFSVCA9IFwicGFydFwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0xBTkcgPSBcImxhbmdcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JVEVNVFlQRSA9IFwiaXRlbXR5cGVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JVEVNU0NPUEUgPSBcIml0ZW1zY29wZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0lURU1SRUYgPSBcIml0ZW1yZWZcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9JVEVNSUQgPSBcIml0ZW1pZFwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0lURU1QUk9QID0gXCJpdGVtcHJvcFwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0lTID0gXCJpc1wiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0lOUFVUTU9ERSA9IFwiaW5wdXRtb2RlXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfQUNDRVNTS0VZID0gXCJhY2Nlc3NrZXlcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9BVVRPQ0FQSVRBTElaRSA9IFwiYXV0b2NhcGl0YWxpemVcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9BVVRPRk9DVVMgPSBcImF1dG9mb2N1c1wiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0NPTlRFTlRFRElUQUJMRSA9IFwiY29udGVudGVkaXRhYmxlXCI7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICovXG5jb25zdCBBVFRSSUJVVEVfRElSID0gXCJkaXJcIjtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9EUkFHR0FCTEUgPSBcImRyYWdnYWJsZVwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0VOVEVSS0VZSElOVCA9IFwiZW50ZXJrZXloaW50XCI7XG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqL1xuY29uc3QgQVRUUklCVVRFX0VYUE9SVFBBUlRTID0gXCJleHBvcnRwYXJ0c1wiO1xuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKi9cbmNvbnN0IEFUVFJJQlVURV9ISURERU4gPSBcImhpZGRlblwiO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IFRva2VuTGlzdCB9IGZyb20gXCIuLi90eXBlcy90b2tlbmxpc3QubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUluc3RhbmNlLFxuXHR2YWxpZGF0ZVN0cmluZyxcblx0dmFsaWRhdGVTeW1ib2wsXG59IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9PQkpFQ1RMSU5LIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQge1xuXHRmaW5kQ2xvc2VzdE9iamVjdExpbmssXG5cdGFkZFRvT2JqZWN0TGluayxcblx0cmVtb3ZlT2JqZWN0TGluayxcblx0aGFzT2JqZWN0TGluayxcblx0Z2V0TGlua2VkT2JqZWN0cyxcblx0dG9nZ2xlQXR0cmlidXRlVG9rZW4sXG5cdGFkZEF0dHJpYnV0ZVRva2VuLFxuXHRyZW1vdmVBdHRyaWJ1dGVUb2tlbixcblx0Y29udGFpbnNBdHRyaWJ1dGVUb2tlbixcblx0cmVwbGFjZUF0dHJpYnV0ZVRva2VuLFxuXHRjbGVhckF0dHJpYnV0ZVRva2Vucyxcblx0ZmluZENsb3Nlc3RCeUF0dHJpYnV0ZSxcblx0ZmluZENsb3Nlc3RCeUNsYXNzLFxufTtcblxuLyoqXG4gKiBHZXQgdGhlIGNsb3Nlc3Qgb2JqZWN0IGxpbmsgb2YgYSBub2RlXG4gKlxuICogaWYgYSBub2RlIGlzIHNwZWNpZmllZCB3aXRob3V0IGEgb2JqZWN0IGxpbmssIGEgcmVjdXJzaXZlIHNlYXJjaCB1cHdhcmRzIGlzIHBlcmZvcm1lZCB1bnRpbCB0aGUgY29ycmVzcG9uZGluZ1xuICogb2JqZWN0IGxpbmsgaXMgZm91bmQsIG9yIHVuZGVmaW5lZCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudHx1bmRlZmluZWR9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEwLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFxuICovXG5mdW5jdGlvbiBmaW5kQ2xvc2VzdE9iamVjdExpbmsoZWxlbWVudCkge1xuXHRyZXR1cm4gZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShlbGVtZW50LCBBVFRSSUJVVEVfT0JKRUNUTElOSyk7XG59XG5cbi8qKlxuICogQWRkcyBhIGNsYXNzIGF0dHJpYnV0ZSB0byBhbiBlbGVtZW50LlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIGVsZW1lbnRcbiAqIEBwYXJhbSBzeW1ib2xcbiAqIEBwYXJhbSBvYmplY3RcbiAqIEByZXR1cm4geyp9XG4gKi9cbmZ1bmN0aW9uIGFkZFRvT2JqZWN0TGluayhlbGVtZW50LCBzeW1ib2wsIG9iamVjdCkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTeW1ib2woc3ltYm9sKTtcblxuXHRpZiAoZWxlbWVudD8uW3N5bWJvbF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdGVsZW1lbnRbc3ltYm9sXSA9IG5ldyBTZXQoKTtcblx0fVxuXG5cdGFkZEF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIEFUVFJJQlVURV9PQkpFQ1RMSU5LLCBzeW1ib2wudG9TdHJpbmcoKSk7XG5cdGVsZW1lbnRbc3ltYm9sXS5hZGQob2JqZWN0KTtcblx0cmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbiBvYmplY3QgZnJvbSBhbiBlbGVtZW50XG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge1N5bWJvbH0gc3ltYm9sXG4gKiBAcmV0dXJuIHsqfVxuICovXG5mdW5jdGlvbiByZW1vdmVPYmplY3RMaW5rKGVsZW1lbnQsIHN5bWJvbCkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTeW1ib2woc3ltYm9sKTtcblxuXHRpZiAoZWxlbWVudD8uW3N5bWJvbF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgQVRUUklCVVRFX09CSkVDVExJTkssIHN5bWJvbC50b1N0cmluZygpKTtcblx0ZGVsZXRlIGVsZW1lbnRbc3ltYm9sXTtcblx0cmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGFuIGVsZW1lbnQgaGFzIGFuIG9iamVjdCBsaW5rXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge1N5bWJvbH0gc3ltYm9sXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBoYXNPYmplY3RMaW5rKGVsZW1lbnQsIHN5bWJvbCkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTeW1ib2woc3ltYm9sKTtcblxuXHRpZiAoZWxlbWVudD8uW3N5bWJvbF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiBjb250YWluc0F0dHJpYnV0ZVRva2VuKFxuXHRcdGVsZW1lbnQsXG5cdFx0QVRUUklCVVRFX09CSkVDVExJTkssXG5cdFx0c3ltYm9sLnRvU3RyaW5nKCksXG5cdCk7XG59XG5cbi8qKlxuICogVGhlIE9iamVjdExpbmsgY2FuIGJlIHVzZWQgdG8gYXR0YWNoIG9iamVjdHMgdG8gSFRNTEVsZW1lbnRzLiBUaGUgZWxlbWVudHMgYXJlIGtlcHQgaW4gYSBzZXQgdW5kZXIgYSB1bmlxdWVcbiAqIHN5bWJvbCBhbmQgY2FuIGJlIHJlYWQgdmlhIGFuIGl0ZXJhdG9yIHtAc2VlIHtAbGluayBnZXRMaW5rZWRPYmplY3RzfX0uXG4gKlxuICogSW4gYWRkaXRpb24sIGVsZW1lbnRzIHdpdGggYW4gb2JqZWN0TGluayByZWNlaXZlIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vYmplY3RsaW5rYC5cbiAqXG4gKiBXaXRoIHRoZSBtZXRob2QgIHtAc2VlIHtAbGluayBhZGRUb09iamVjdExpbmt9fSB0aGUgb2JqZWN0cyBjYW4gYmUgYWRkZWQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge1N5bWJvbH0gc3ltYm9sXG4gKiBAcmV0dXJuIHtJdGVyYXRvcn1cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGVyZSBpcyBubyBvYmplY3QgbGluayBmb3Igc3ltYm9sXG4gKi9cbmZ1bmN0aW9uIGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgc3ltYm9sKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN5bWJvbChzeW1ib2wpO1xuXG5cdGlmIChlbGVtZW50Py5bc3ltYm9sXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGB0aGVyZSBpcyBubyBvYmplY3QgbGluayBmb3IgJHtzeW1ib2wudG9TdHJpbmcoKX1gKTtcblx0fVxuXG5cdHJldHVybiBlbGVtZW50Py5bc3ltYm9sXVtTeW1ib2wuaXRlcmF0b3JdKCk7XG59XG5cbi8qKlxuICogV2l0aCB0aGlzIG1ldGhvZCB0b2tlbnMgaW4gYW4gYXR0cmlidXRlIGNhbiBiZSBzd2l0Y2hlZCBvbiBvciBvZmYuIEZvciBleGFtcGxlLCBjbGFzc2VzIGNhbiBiZSBzd2l0Y2hlZCBvbiBhbmQgb2ZmIGluIHRoZSBlbGVtZW50cyBjbGFzcyBhdHRyaWJ1dGUuXG4gKlxuICogVG9rZW5zIGFyZSBhbHdheXMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fVxuICovXG5mdW5jdGlvbiB0b2dnbGVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHRva2VuKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpKSB7XG5cdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCB0b2tlbik7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRlbGVtZW50LnNldEF0dHJpYnV0ZShcblx0XHRrZXksXG5cdFx0bmV3IFRva2VuTGlzdChlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpKS50b2dnbGUodG9rZW4pLnRvU3RyaW5nKCksXG5cdCk7XG5cblx0cmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gYWRkIGEgdG9rZW4gdG8gYW4gYXR0cmlidXRlLiBUb2tlbnMgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjkuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGFkZEF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgdG9rZW4pIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0dmFsaWRhdGVTdHJpbmcoa2V5KTtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkpIHtcblx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIHRva2VuKTtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdGVsZW1lbnQuc2V0QXR0cmlidXRlKFxuXHRcdGtleSxcblx0XHRuZXcgVG9rZW5MaXN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSkpLmFkZCh0b2tlbikudG9TdHJpbmcoKSxcblx0KTtcblxuXHRyZXR1cm4gZWxlbWVudDtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIHJlbW92ZSB0b2tlbnMgZnJvbSBhbiBhdHRyaWJ1dGUuXG4gKlxuICogVG9rZW5zIGFyZSBhbHdheXMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fVxuICovXG5mdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHRva2VuKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpO1xuXHR2YWxpZGF0ZVN0cmluZyh0b2tlbik7XG5cdHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpKSB7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRlbGVtZW50LnNldEF0dHJpYnV0ZShcblx0XHRrZXksXG5cdFx0bmV3IFRva2VuTGlzdChlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpKS5yZW1vdmUodG9rZW4pLnRvU3RyaW5nKCksXG5cdCk7XG5cblx0cmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYW4gYXR0cmlidXRlIGhhcyBhIHRva2VuLlxuICpcbiAqIFRva2VucyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBhIHNwYWNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb250YWluc0F0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgdG9rZW4pIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3RyaW5nKHRva2VuKTtcblx0dmFsaWRhdGVTdHJpbmcoa2V5KTtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gbmV3IFRva2VuTGlzdChlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpKS5jb250YWlucyh0b2tlbik7XG59XG5cbi8qKlxuICogVG9rZW5zIGFyZSBhbHdheXMgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ30gZnJvbVxuICogQHBhcmFtIHtzdHJpbmd9IHRvXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gcmVwbGFjZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGtleSwgZnJvbSwgdG8pIHtcblx0dmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCk7XG5cdHZhbGlkYXRlU3RyaW5nKGZyb20pO1xuXHR2YWxpZGF0ZVN0cmluZyh0byk7XG5cdHZhbGlkYXRlU3RyaW5nKGtleSk7XG5cblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShrZXkpKSB7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRlbGVtZW50LnNldEF0dHJpYnV0ZShcblx0XHRrZXksXG5cdFx0bmV3IFRva2VuTGlzdChlbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpKS5yZXBsYWNlKGZyb20sIHRvKS50b1N0cmluZygpLFxuXHQpO1xuXG5cdHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIFRva2VucyBhcmUgYWx3YXlzIHNlcGFyYXRlZCBieSBhIHNwYWNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHJldHVybiB7SFRNTEVsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNsZWFyQXR0cmlidXRlVG9rZW5zKGVsZW1lbnQsIGtleSkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIEhUTUxFbGVtZW50KTtcblx0dmFsaWRhdGVTdHJpbmcoa2V5KTtcblxuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkpIHtcblx0XHRyZXR1cm4gZWxlbWVudDtcblx0fVxuXG5cdGVsZW1lbnQuc2V0QXR0cmlidXRlKGtleSwgXCJcIik7XG5cblx0cmV0dXJuIGVsZW1lbnQ7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBzZWFyY2hlcywgc3RhcnRpbmcgZnJvbSBhbiBgSFRNTEVsZW1lbWVudGAsIGZvciB0aGUgbmV4dCBlbGVtZW50IHRoYXQgaGFzIGEgY2VydGFpbiBhdHRyaWJ1dGUuXG4gKlxuICogYGBgaHRtbFxuICogPGRpdiBkYXRhLW15LWF0dHJpYnV0ZT1cIjJcIiBpZD1cIjJcIj5cbiAqICAgICA8ZGl2IGlkPVwiMVwiPjwvZGl2PlxuICogPC9kaXY+XG4gKiBgYGBcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiAvLyBpZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQgKHVuZGVmaW5lZCksIHRoZW4gb25seSB0aGUgYXR0cmlidXRlIGlzIGNoZWNrZWQuXG4gKiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcxJyksJ2RhdGEtbXktYXR0cmlidXRlJyk7IC8vIFx1MjFBNiBub2RlIHdpdGggaWQgMlxuICogZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnMicpLCdkYXRhLW15LWF0dHJpYnV0ZScpOyAvLyBcdTIxQTYgbm9kZSB3aXRoIGlkIDJcbiAqXG4gKiAvLyBpZiBhIHZhbHVlIGlzIHNwZWNpZmllZCwgZm9yIGV4YW1wbGUgYW4gZW1wdHkgc3RyaW5nLCB0aGVuIHRoZSBuYW1lIGFuZCB0aGUgdmFsdWUgYXJlIGNoZWNrZWQuXG4gKiBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcxJyksJ2RhdGEtbXktYXR0cmlidXRlJywgJycpOyAgLy8gXHUyMUE2IHVuZGVmaW5lZFxuICogZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnMScpLCdkYXRhLW15LWF0dHJpYnV0ZScsICcyJyk7IC8vIFx1MjFBNiBub2RlIHdpdGggaWQgMlxuICogYGBgXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSB2YWx1ZVxuICogQHJldHVybiB7SFRNTEVsZW1lbnR8dW5kZWZpbmVkfVxuICogQHN1bW1hcnkgZmluZCBjbG9zZXN0IG5vZGVcbiAqL1xuZnVuY3Rpb24gZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShlbGVtZW50LCBrZXksIHZhbHVlKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgZ2V0R2xvYmFsRnVuY3Rpb24oXCJIVE1MRWxlbWVudFwiKSk7XG5cblx0aWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKGtleSkpIHtcblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdFx0fVxuXG5cdFx0aWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKGtleSkgPT09IHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gZWxlbWVudDtcblx0XHR9XG5cdH1cblxuXHRsZXQgc2VsZWN0b3IgPSB2YWxpZGF0ZVN0cmluZyhrZXkpO1xuXHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgc2VsZWN0b3IgKz0gYD0ke3ZhbGlkYXRlU3RyaW5nKHZhbHVlKX1gO1xuXHRjb25zdCByZXN1bHQgPSBlbGVtZW50LmNsb3Nlc3QoYFske3NlbGVjdG9yfV1gKTtcblx0aWYgKHJlc3VsdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gc2VhcmNoZXMsIHN0YXJ0aW5nIGZyb20gYW4gYEhUTUxFbGVtZW50YCwgZm9yIHRoZSBuZXh0IGVsZW1lbnQgdGhhdCBoYXMgYSBjZXJ0YWluIGF0dHJpYnV0ZS5cbiAqXG4gKiBgYGBodG1sXG4gKiA8ZGl2IGNsYXNzPVwibXljbGFzc1wiIGlkPVwiMlwiPlxuICogICAgIDxkaXYgaWQ9XCIxXCI+PC9kaXY+XG4gKiA8L2Rpdj5cbiAqIGBgYFxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIC8vIGlmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCAodW5kZWZpbmVkKSwgdGhlbiBvbmx5IHRoZSBhdHRyaWJ1dGUgaXMgY2hlY2tlZC5cbiAqIGZpbmRDbG9zZXN0QnlDbGFzcyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnMScpLCdteWNsYXNzJyk7IC8vIFx1MjFBNiBub2RlIHdpdGggaWQgMlxuICogZmluZENsb3Nlc3RCeUNsYXNzKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCcyJyksJ215Y2xhc3MnKTsgLy8gXHUyMUE2IG5vZGUgd2l0aCBpZCAyXG4gKiBgYGBcbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtmaW5kQ2xvc2VzdEJ5Q2xhc3N9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL2RvbS9hdHRyaWJ1dGVzLm1qcyc7XG4gKiBmaW5kQ2xvc2VzdEJ5Q2xhc3MoKTtcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZVxuICogQHJldHVybiB7SFRNTEVsZW1lbnR8dW5kZWZpbmVkfVxuICogQHN1bW1hcnkgZmluZCBjbG9zZXN0IG5vZGVcbiAqL1xuZnVuY3Rpb24gZmluZENsb3Nlc3RCeUNsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKGVsZW1lbnQsIGdldEdsb2JhbEZ1bmN0aW9uKFwiSFRNTEVsZW1lbnRcIikpO1xuXG5cdGlmIChlbGVtZW50Py5jbGFzc0xpc3Q/LmNvbnRhaW5zKHZhbGlkYXRlU3RyaW5nKGNsYXNzTmFtZSkpKSB7XG5cdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdH1cblxuXHRjb25zdCByZXN1bHQgPSBlbGVtZW50LmNsb3Nlc3QoYC4ke2NsYXNzTmFtZX1gKTtcblx0aWYgKHJlc3VsdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZ2V0R2xvYmFsIH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQge1xuXHRnZXREb2N1bWVudCxcblx0Z2V0V2luZG93LFxuXHRnZXREb2N1bWVudEZyYWdtZW50RnJvbVN0cmluZyxcblx0ZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzLFxuXHRnZXRDb250YWluaW5nRG9jdW1lbnQsXG5cdGdldFJlZ2lzdGVyZWRDdXN0b21FbGVtZW50cyxcblx0ZmluZEVsZW1lbnRXaXRoU2VsZWN0b3JVcHdhcmRzLFxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBmZXRjaGVzIHRoZSBkb2N1bWVudCBvYmplY3RcbiAqXG4gKiBJbiBub2RlanMgdGhpcyBmdW5jdGlvbmFsaXR5IGNhbiBiZSBwZXJmb3JtZWQgd2l0aCBbanNkb21dKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2pzZG9tKS5cbiAqXG4gKiBgYGBcbiAqIGltcG9ydCB7SlNET019IGZyb20gXCJqc2RvbVwiXG4gKiBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJvYmplY3RcIikge1xuICogICAgY29uc3Qge3dpbmRvd30gPSBuZXcgSlNET00oJycsIHtcbiAqICAgICAgICB1cmw6ICdodHRwOi8vZXhhbXBsZS5jb20vJyxcbiAqICAgICAgICBwcmV0ZW5kVG9CZVZpc3VhbDogdHJ1ZVxuICogICAgfSk7XG4gKlxuICogICAgW1xuICogICAgICAgICdzZWxmJyxcbiAqICAgICAgICAnZG9jdW1lbnQnLFxuICogICAgICAgICdEb2N1bWVudCcsXG4gKiAgICAgICAgJ05vZGUnLFxuICogICAgICAgICdFbGVtZW50JyxcbiAqICAgICAgICAnSFRNTEVsZW1lbnQnLFxuICogICAgICAgICdEb2N1bWVudEZyYWdtZW50JyxcbiAqICAgICAgICAnRE9NUGFyc2VyJyxcbiAqICAgICAgICAnWE1MU2VyaWFsaXplcicsXG4gKiAgICAgICAgJ05vZGVGaWx0ZXInLFxuICogICAgICAgICdJbnB1dEV2ZW50JyxcbiAqICAgICAgICAnQ3VzdG9tRXZlbnQnXG4gKiAgICBdLmZvckVhY2goa2V5ID0+IChnZXRHbG9iYWwoKVtrZXldID0gd2luZG93W2tleV0pKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IG5vdCBzdXBwb3J0ZWQgZW52aXJvbm1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0RG9jdW1lbnQoKSB7XG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0R2xvYmFsKCk/LltcImRvY3VtZW50XCJdO1xuXHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm90IHN1cHBvcnRlZCBlbnZpcm9ubWVudFwiKTtcblx0fVxuXG5cdHJldHVybiBkb2N1bWVudDtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBmZXRjaGVzIHRoZSB3aW5kb3cgb2JqZWN0XG4gKlxuICogSW4gbm9kZWpzIHRoaXMgZnVuY3Rpb25hbGl0eSBjYW4gYmUgcGVyZm9ybWVkIHdpdGggW2pzZG9tXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9qc2RvbSkuXG4gKlxuICogYGBgXG4gKiBpbXBvcnQge0pTRE9NfSBmcm9tIFwianNkb21cIlxuICogaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwib2JqZWN0XCIpIHtcbiAqICAgIGNvbnN0IHt3aW5kb3d9ID0gbmV3IEpTRE9NKCcnLCB7XG4gKiAgICAgICAgdXJsOiAnaHR0cDovL2V4YW1wbGUuY29tLycsXG4gKiAgICAgICAgcHJldGVuZFRvQmVWaXN1YWw6IHRydWVcbiAqICAgIH0pO1xuICpcbiAqICAgIGdldEdsb2JhbCgpWyd3aW5kb3cnXT13aW5kb3c7XG4gKlxuICogICAgW1xuICogICAgICAgICdzZWxmJyxcbiAqICAgICAgICAnZG9jdW1lbnQnLFxuICogICAgICAgICdEb2N1bWVudCcsXG4gKiAgICAgICAgJ05vZGUnLFxuICogICAgICAgICdFbGVtZW50JyxcbiAqICAgICAgICAnSFRNTEVsZW1lbnQnLFxuICogICAgICAgICdEb2N1bWVudEZyYWdtZW50JyxcbiAqICAgICAgICAnRE9NUGFyc2VyJyxcbiAqICAgICAgICAnWE1MU2VyaWFsaXplcicsXG4gKiAgICAgICAgJ05vZGVGaWx0ZXInLFxuICogICAgICAgICdJbnB1dEV2ZW50JyxcbiAqICAgICAgICAnQ3VzdG9tRXZlbnQnXG4gKiAgICBdLmZvckVhY2goa2V5ID0+IChnZXRHbG9iYWwoKVtrZXldID0gd2luZG93W2tleV0pKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IG5vdCBzdXBwb3J0ZWQgZW52aXJvbm1lbnRcbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93KCkge1xuXHRjb25zdCB3aW5kb3cgPSBnZXRHbG9iYWwoKT8uW1wid2luZG93XCJdO1xuXHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJvYmplY3RcIikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vdCBzdXBwb3J0ZWQgZW52aXJvbm1lbnRcIik7XG5cdH1cblxuXHRyZXR1cm4gd2luZG93O1xufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGZldGNoZXMgdGhlIGRvY3VtZW50IG9iamVjdFxuICpcbiAqIEluIG5vZGVqcyB0aGlzIGZ1bmN0aW9uYWxpdHkgY2FuIGJlIHBlcmZvcm1lZCB3aXRoIFtqc2RvbV0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvanNkb20pLlxuICpcbiAqIGBgYFxuICogaW1wb3J0IHtKU0RPTX0gZnJvbSBcImpzZG9tXCJcbiAqIGlmICh0eXBlb2Ygd2luZG93ICE9PSBcIm9iamVjdFwiKSB7XG4gKiAgICBjb25zdCB7d2luZG93fSA9IG5ldyBKU0RPTSgnJywge1xuICogICAgICAgIHVybDogJ2h0dHA6Ly9leGFtcGxlLmNvbS8nLFxuICogICAgICAgIHByZXRlbmRUb0JlVmlzdWFsOiB0cnVlXG4gKiAgICB9KTtcbiAqXG4gKiAgICBbXG4gKiAgICAgICAgJ3NlbGYnLFxuICogICAgICAgICdkb2N1bWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50JyxcbiAqICAgICAgICAnTm9kZScsXG4gKiAgICAgICAgJ0VsZW1lbnQnLFxuICogICAgICAgICdIVE1MRWxlbWVudCcsXG4gKiAgICAgICAgJ0RvY3VtZW50RnJhZ21lbnQnLFxuICogICAgICAgICdET01QYXJzZXInLFxuICogICAgICAgICdYTUxTZXJpYWxpemVyJyxcbiAqICAgICAgICAnTm9kZUZpbHRlcicsXG4gKiAgICAgICAgJ0lucHV0RXZlbnQnLFxuICogICAgICAgICdDdXN0b21FdmVudCdcbiAqICAgIF0uZm9yRWFjaChrZXkgPT4gKGdldEdsb2JhbCgpW2tleV0gPSB3aW5kb3dba2V5XSkpO1xuICogfVxuICogYGBgXG4gKlxuICogQHJldHVybiB7RG9jdW1lbnRGcmFnbWVudH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IG5vdCBzdXBwb3J0ZWQgZW52aXJvbm1lbnRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGdldERvY3VtZW50RnJhZ21lbnRGcm9tU3RyaW5nKGh0bWwpIHtcblx0dmFsaWRhdGVTdHJpbmcoaHRtbCk7XG5cblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXHRjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcblx0dGVtcGxhdGUuaW5uZXJIVE1MID0gaHRtbDtcblxuXHRyZXR1cm4gdGVtcGxhdGUuY29udGVudDtcbn1cblxuLyoqXG4gKiBSZWN1cnNpdmVseSBzZWFyY2hlcyB1cHdhcmRzIGZyb20gYSBnaXZlbiBlbGVtZW50IHRvIGZpbmQgYW4gYW5jZXN0b3IgZWxlbWVudFxuICogd2l0aCBhIHNwZWNpZmllZCBJRCwgY29uc2lkZXJpbmcgYm90aCBub3JtYWwgRE9NIGFuZCBzaGFkb3cgRE9NLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8U2hhZG93Um9vdH0gZWxlbWVudCAtIFRoZSBzdGFydGluZyBlbGVtZW50IG9yIHNoYWRvdyByb290IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldElkIC0gVGhlIElEIG9mIHRoZSB0YXJnZXQgZWxlbWVudCB0byBmaW5kLlxuICogQHJldHVybiB7SFRNTEVsZW1lbnR8bnVsbH0gLSBUaGUgYW5jZXN0b3IgZWxlbWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgSUQsIG9yIG51bGwgaWYgbm90IGZvdW5kLlxuICogQHNpbmNlIDMuMjkuMFxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMoZWxlbWVudCwgdGFyZ2V0SWQpIHtcblx0aWYgKCFlbGVtZW50KSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBDaGVjayBpZiB0aGUgY3VycmVudCBlbGVtZW50IGhhcyB0aGUgdGFyZ2V0IElEXG5cdGlmIChlbGVtZW50LmlkID09PSB0YXJnZXRJZCkge1xuXHRcdHJldHVybiBlbGVtZW50O1xuXHR9XG5cblx0Ly8gU2VhcmNoIHdpdGhpbiB0aGUgY3VycmVudCBlbGVtZW50J3Mgc2hhZG93IHJvb3QsIGlmIGl0IGV4aXN0c1xuXHRpZiAoZWxlbWVudC5zaGFkb3dSb290KSB7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZWxlbWVudC5zaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKHRhcmdldElkKTtcblx0XHRpZiAodGFyZ2V0KSB7XG5cdFx0XHRyZXR1cm4gdGFyZ2V0O1xuXHRcdH1cblx0fVxuXG5cdC8vIElmIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgdGhlIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgc2VhcmNoIHdpdGhpbiB0aGUgbWFpbiBkb2N1bWVudFxuXHRpZiAoZWxlbWVudCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IGVsZW1lbnQgPT09IGRvY3VtZW50KSB7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0SWQpO1xuXHRcdGlmICh0YXJnZXQpIHtcblx0XHRcdHJldHVybiB0YXJnZXQ7XG5cdFx0fVxuXHR9XG5cblx0Ly8gSWYgdGhlIGN1cnJlbnQgZWxlbWVudCBpcyBpbnNpZGUgYSBzaGFkb3cgcm9vdCwgc2VhcmNoIGl0cyBob3N0J3MgYW5jZXN0b3JzXG5cdGNvbnN0IHJvb3ROb2RlID0gZWxlbWVudC5nZXRSb290Tm9kZSgpO1xuXHRpZiAocm9vdE5vZGUgJiYgcm9vdE5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG5cdFx0cmV0dXJuIGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhyb290Tm9kZS5ob3N0LCB0YXJnZXRJZCk7XG5cdH1cblxuXHQvLyBPdGhlcndpc2UsIHNlYXJjaCB0aGUgY3VycmVudCBlbGVtZW50J3MgcGFyZW50XG5cdHJldHVybiBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMoZWxlbWVudC5wYXJlbnRFbGVtZW50LCB0YXJnZXRJZCk7XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgc2VhcmNoZXMgdXB3YXJkcyBmcm9tIGEgZ2l2ZW4gZWxlbWVudCB0byBmaW5kIGFuIGFuY2VzdG9yIGVsZW1lbnRcbiAqIHdpdGggYSBzcGVjaWZpZWQgc2VsZWN0b3IsIGNvbnNpZGVyaW5nIGJvdGggbm9ybWFsIERPTSBhbmQgc2hhZG93IERPTS5cbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBmb3IgZmluZGluZyBhIHBhcmVudCBlbGVtZW50IHdpdGggYSBzcGVjaWZpYyBjbGFzcy5cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fFNoYWRvd1Jvb3R9IGVsZW1lbnQgLSBUaGUgc3RhcnRpbmcgZWxlbWVudCBvciBzaGFkb3cgcm9vdCB0byBzZWFyY2ggZnJvbS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciAtIFRoZSBzZWxlY3RvciBvZiB0aGUgdGFyZ2V0IGVsZW1lbnQgdG8gZmluZC5cbiAqIEByZXR1cm4ge0hUTUxFbGVtZW50fG51bGx9IC0gVGhlIGFuY2VzdG9yIGVsZW1lbnQgd2l0aCB0aGUgc3BlY2lmaWVkIHNlbGVjdG9yLCBvciBudWxsIGlmIG5vdCBmb3VuZC5cbiAqIEBzaW5jZSAzLjU1LjBcbiAqL1xuZnVuY3Rpb24gZmluZEVsZW1lbnRXaXRoU2VsZWN0b3JVcHdhcmRzKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG5cdGlmICghZWxlbWVudCB8fCAhc2VsZWN0b3IpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIFNlYXJjaCB3aXRoaW4gdGhlIGN1cnJlbnQgZWxlbWVudCdzIHNoYWRvdyByb290LCBpZiBpdCBleGlzdHNcblx0aWYgKGVsZW1lbnQuc2hhZG93Um9vdCkge1xuXHRcdGNvbnN0IHRhcmdldCA9IGVsZW1lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcblx0XHRpZiAodGFyZ2V0KSB7XG5cdFx0XHRyZXR1cm4gdGFyZ2V0O1xuXHRcdH1cblx0fVxuXG5cdGlmIChlbGVtZW50ID09PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcblx0XHRjb25zdCB0YXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcblx0XHRpZiAodGFyZ2V0KSB7XG5cdFx0XHRyZXR1cm4gdGFyZ2V0O1xuXHRcdH1cblx0fVxuXG5cdC8vIElmIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgaW5zaWRlIGEgc2hhZG93IHJvb3QsIHNlYXJjaCBpdHMgaG9zdCdzIGFuY2VzdG9yc1xuXHRjb25zdCByb290Tm9kZSA9IGVsZW1lbnQuZ2V0Um9vdE5vZGUoKTtcblx0aWYgKHJvb3ROb2RlICYmIHJvb3ROb2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuXHRcdHJldHVybiBmaW5kRWxlbWVudFdpdGhTZWxlY3RvclVwd2FyZHMocm9vdE5vZGUuaG9zdCwgc2VsZWN0b3IpO1xuXHR9XG5cblx0Ly8gT3RoZXJ3aXNlLCBzZWFyY2ggdGhlIGN1cnJlbnQgZWxlbWVudCdzIHBhcmVudFxuXHRyZXR1cm4gZmluZEVsZW1lbnRXaXRoU2VsZWN0b3JVcHdhcmRzKGVsZW1lbnQucGFyZW50RWxlbWVudCwgc2VsZWN0b3IpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudHxudWxsfVxuICovXG5mdW5jdGlvbiB0cmF2ZXJzZVNoYWRvd1Jvb3RzKGVsZW1lbnQpIHtcblx0bGV0IGN1cnJlbnRSb290ID0gZWxlbWVudC5zaGFkb3dSb290O1xuXHRsZXQgY3VycmVudFBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcblxuXHR3aGlsZSAoXG5cdFx0Y3VycmVudFBhcmVudCAmJlxuXHRcdGN1cnJlbnRQYXJlbnQubm9kZVR5cGUgIT09IE5vZGUuRE9DVU1FTlRfTk9ERSAmJlxuXHRcdGN1cnJlbnRQYXJlbnQubm9kZVR5cGUgIT09IE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERVxuXHQpIHtcblx0XHRpZiAoY3VycmVudFJvb3QgJiYgY3VycmVudFJvb3QucGFyZW50Tm9kZSkge1xuXHRcdFx0Y3VycmVudFBhcmVudCA9IGN1cnJlbnRSb290LnBhcmVudE5vZGU7XG5cdFx0XHRjdXJyZW50Um9vdCA9IGN1cnJlbnRQYXJlbnQuc2hhZG93Um9vdDtcblx0XHR9IGVsc2UgaWYgKGN1cnJlbnRQYXJlbnQucGFyZW50Tm9kZSkge1xuXHRcdFx0Y3VycmVudFBhcmVudCA9IGN1cnJlbnRQYXJlbnQucGFyZW50Tm9kZTtcblx0XHRcdGN1cnJlbnRSb290ID0gbnVsbDtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0Y3VycmVudFJvb3QgJiZcblx0XHRcdGN1cnJlbnRSb290Lmhvc3QgJiZcblx0XHRcdGN1cnJlbnRSb290Lmhvc3Qubm9kZVR5cGUgPT09IE5vZGUuRE9DVU1FTlRfTk9ERVxuXHRcdCkge1xuXHRcdFx0Y3VycmVudFBhcmVudCA9IGN1cnJlbnRSb290Lmhvc3Q7XG5cdFx0XHRjdXJyZW50Um9vdCA9IG51bGw7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1cnJlbnRQYXJlbnQgPSBudWxsO1xuXHRcdFx0Y3VycmVudFJvb3QgPSBudWxsO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjdXJyZW50UGFyZW50O1xufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHNlYXJjaGVzIHVwd2FyZHMgZnJvbSBhIGdpdmVuIGVsZW1lbnQgdG8gZmluZCBhbiBhbmNlc3RvciBlbGVtZW50XG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB7Kn1cbiAqIEB0aHJvd3Mge0Vycm9yfSBJbnZhbGlkIGFyZ3VtZW50LiBFeHBlY3RlZCBhbiBIVE1MRWxlbWVudC5cbiAqIEBzaW5jZSAzLjM2LjBcbiAqL1xuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0RvY3VtZW50KGVsZW1lbnQpIHtcblx0aWYgKFxuXHRcdCFlbGVtZW50IHx8XG5cdFx0IShcblx0XHRcdGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fFxuXHRcdFx0ZWxlbWVudCBpbnN0YW5jZW9mIGVsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5IVE1MRWxlbWVudFxuXHRcdClcblx0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudC4gRXhwZWN0ZWQgYW4gSFRNTEVsZW1lbnQuXCIpO1xuXHR9XG5cblx0cmV0dXJuIHRyYXZlcnNlU2hhZG93Um9vdHMoZWxlbWVudCkgfHwgbnVsbDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgcmVnaXN0ZXJlZCBjdXN0b20gZWxlbWVudHMgaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQuXG4gKlxuICogQHJldHVybiB7c3RyaW5nW119XG4gKiBAc2luY2UgNC4wLjBcbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5mdW5jdGlvbiBnZXRSZWdpc3RlcmVkQ3VzdG9tRWxlbWVudHMoKSB7XG5cdGNvbnN0IGN1c3RvbUVsZW1lbnRUYWdzID0gQXJyYXkuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiKlwiKSlcblx0XHQubWFwKCh0YWcpID0+IHRhZy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpXG5cdFx0LmZpbHRlcigodGFnTmFtZSkgPT4gdGFnTmFtZS5pbmNsdWRlcyhcIi1cIikgJiYgY3VzdG9tRWxlbWVudHMuZ2V0KHRhZ05hbWUpKTtcblxuXHRyZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGN1c3RvbUVsZW1lbnRUYWdzKSk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZ2V0R2xvYmFsIH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7XG5cdGlzQXJyYXksXG5cdGlzRnVuY3Rpb24sXG5cdGlzT2JqZWN0LFxuXHRpc1ByaW1pdGl2ZSxcblx0aXNQcm94eSxcbn0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdHlwZU9mIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVvZi5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBjbG9uZSB9O1xuXG4vKipcbiAqIFdpdGggdGhpcyBmdW5jdGlvbiwgb2JqZWN0cyBjYW4gYmUgY2xvbmVkLlxuICogVGhlIGVudGlyZSBvYmplY3QgdHJlZSBpcyBydW4gdGhyb3VnaC5cbiAqXG4gKiBQcm94eSwgRWxlbWVudCwgSFRNTERvY3VtZW50IGFuZCBEb2N1bWVudEZyYWdtZW50IGluc3RhbmNlcyBhcmUgbm90IGNsb25lZC5cbiAqIEdsb2JhbCBvYmplY3RzIHN1Y2ggYXMgd2luZG93cyBhcmUgYWxzbyBub3QgY2xvbmVkLFxuICpcbiAqIElmIGFuIG9iamVjdCBoYXMgYSBtZXRob2QgYGdldENsb25lKClgLCB0aGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNyZWF0ZSB0aGUgY2xvbmUuXG4gKlxuICogQHBhcmFtIHsqfSBvYmogb2JqZWN0IHRvIGJlIGNsb25lZFxuICogQHJldHVybiB7Kn1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IHVuYWJsZSB0byBjbG9uZSBvYmohIGl0cyB0eXBlIGlzbid0IHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gY2xvbmUob2JqKSB7XG5cdC8vIHR5cGVvZiBudWxsIHJlc3VsdHMgaW4gJ29iamVjdCcuICBodHRwczovLzJhbGl0eS5jb20vMjAxMy8xMC90eXBlb2YtbnVsbC5odG1sXG5cdGlmIChudWxsID09PSBvYmopIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Ly8gSGFuZGxlIHRoZSB0d28gc2ltcGxlIHR5cGVzLCBudWxsIGFuZCB1bmRlZmluZWRcblx0aWYgKGlzUHJpbWl0aXZlKG9iaikpIHtcblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0Ly8gSGFuZGxlIHRoZSB0d28gc2ltcGxlIHR5cGVzLCBudWxsIGFuZCB1bmRlZmluZWRcblx0aWYgKGlzRnVuY3Rpb24ob2JqKSkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvLyBIYW5kbGUgQXJyYXlcblx0aWYgKGlzQXJyYXkob2JqKSkge1xuXHRcdGNvbnN0IGNvcHkgPSBbXTtcblx0XHRmb3IgKGxldCBpID0gMCwgbGVuID0gb2JqLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRjb3B5W2ldID0gY2xvbmUob2JqW2ldKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29weTtcblx0fVxuXG5cdGlmIChpc09iamVjdChvYmopKSB7XG5cdFx0Ly8gSGFuZGxlIERhdGVcblx0XHRpZiAob2JqIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0Y29uc3QgY29weSA9IG5ldyBEYXRlKCk7XG5cdFx0XHRjb3B5LnNldFRpbWUob2JqLmdldFRpbWUoKSk7XG5cdFx0XHRyZXR1cm4gY29weTtcblx0XHR9XG5cblx0XHQvKiogRG8gbm90IGNsb25lIERPTSBub2RlcyAqL1xuXHRcdGlmICh0eXBlb2YgRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogaW5zdGFuY2VvZiBFbGVtZW50KSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgRG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqIGluc3RhbmNlb2YgRG9jdW1lbnQpIHJldHVybiBvYmo7XG5cdFx0aWYgKFxuXHRcdFx0dHlwZW9mIERvY3VtZW50RnJhZ21lbnQgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdG9iaiBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnRcblx0XHQpXG5cdFx0XHRyZXR1cm4gb2JqO1xuXG5cdFx0LyoqIERvIG5vdCBjbG9uZSBnbG9iYWwgb2JqZWN0cyAqL1xuXHRcdGlmIChvYmogPT09IGdldEdsb2JhbCgpKSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIG9iaiA9PT0gd2luZG93KSByZXR1cm4gb2JqO1xuXHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqID09PSBkb2N1bWVudCkgcmV0dXJuIG9iajtcblx0XHRpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvYmogPT09IG5hdmlnYXRvcikgcmV0dXJuIG9iajtcblx0XHRpZiAodHlwZW9mIEpTT04gIT09IFwidW5kZWZpbmVkXCIgJiYgb2JqID09PSBKU09OKSByZXR1cm4gb2JqO1xuXHRcdGlmIChpc1Byb3h5KG9iaikpIHJldHVybiBvYmo7IC8vIEhhbmRsZSBQcm94eS1PYmplY3Rcblx0XHRyZXR1cm4gY2xvbmVPYmplY3Qob2JqKTtcblx0fVxuXG5cdHRocm93IG5ldyBFcnJvcihcInVuYWJsZSB0byBjbG9uZSBvYmohIGl0cyB0eXBlIGlzbid0IHN1cHBvcnRlZC5cIik7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNsb25lT2JqZWN0KG9iaikge1xuXHR2YWxpZGF0ZU9iamVjdChvYmopO1xuXG5cdGNvbnN0IGZrdCA9IG9iaj8uW1wiY29uc3RydWN0b3JcIl07XG5cblx0LyoqIE9iamVjdCBoYXMgY2xvbmUgbWV0aG9kICovXG5cdGlmICh0eXBlT2YoZmt0KSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0Y29uc3QgcHJvdG90eXBlID0gZmt0Py5wcm90b3R5cGU7XG5cdFx0aWYgKHR5cGVvZiBwcm90b3R5cGUgPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdGlmIChcblx0XHRcdFx0cHJvdG90eXBlLmhhc093blByb3BlcnR5KFwiZ2V0Q2xvbmVcIikgJiZcblx0XHRcdFx0dHlwZU9mKG9iai5nZXRDbG9uZSkgPT09IFwiZnVuY3Rpb25cIlxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiBvYmouZ2V0Q2xvbmUoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRsZXQgY29weSA9IHt9O1xuXHRpZiAoXG5cdFx0dHlwZW9mIG9iai5jb25zdHJ1Y3RvciA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIG9iai5jb25zdHJ1Y3Rvci5jYWxsID09PSBcImZ1bmN0aW9uXCJcblx0KSB7XG5cdFx0Y29weSA9IG5ldyBvYmouY29uc3RydWN0b3IoKTtcblx0fVxuXG5cdGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuXHRcdGlmICghb2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChpc1ByaW1pdGl2ZShvYmpba2V5XSkpIHtcblx0XHRcdGNvcHlba2V5XSA9IG9ialtrZXldO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29weVtrZXldID0gY2xvbmUob2JqW2tleV0pO1xuXHR9XG5cblx0cmV0dXJuIGNvcHk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi91dGlsL2Nsb25lLm1qc1wiO1xuXG5leHBvcnQgeyBMb2NhbGUsIHBhcnNlTG9jYWxlIH07XG5cbi8qKlxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcHJvcGVydGllc1N5bWJvbCA9IFN5bWJvbChcInByb3BlcnRpZXNcIik7XG5cbi8qKlxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbG9jYWxlU3RyaW5nU3ltYm9sID0gU3ltYm9sKFwibG9jYWxlU3RyaW5nXCIpO1xuXG4vKipcbiAqIFRoZSBMb2NhbGUgY2xhc3MgaXMgYSBiYXNlIGNsYXNzIGZvciB0aGUgbGFuZ3VhZ2UgY2xhc3Nlcy5cbiAqXG4gKiBSRkNcbiAqXG4gKiBgYGBcbiAqIEEgTGFuZ3VhZ2UtVGFnIGNvbnNpc3RzIG9mOlxuICogbGFuZ3RhZyAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgZ2VuZXJhdGVkIHRhZ1xuICogICAgICAgICAgIC1vci0gcHJpdmF0ZS11c2UgICAgICAgIDsgYSBwcml2YXRlIHVzZSB0YWdcbiAqXG4gKiBsYW5ndGFnICAgICAgID0gKGxhbmd1YWdlXG4gKiAgICAgICAgICAgICAgICAgICAgW1wiLVwiIHNjcmlwdF1cbiAqICAgICAgICAgICAgICAgICAgICBbXCItXCIgcmVnaW9uXVxuICogICAgICAgICAgICAgICAgICAgICooXCItXCIgdmFyaWFudClcbiAqICAgICAgICAgICAgICAgICAgICAqKFwiLVwiIGV4dGVuc2lvbilcbiAqICAgICAgICAgICAgICAgICAgICBbXCItXCIgcHJpdmF0ZXVzZV0pXG4gKlxuICogbGFuZ3VhZ2UgICAgICA9IFwiZW5cIiwgXCJhbGVcIiwgb3IgYSByZWdpc3RlcmVkIHZhbHVlXG4gKlxuICogc2NyaXB0ICAgICAgICA9IFwiTGF0blwiLCBcIkN5cmxcIiwgXCJIYW50XCIgSVNPIDE1OTI0IGNvZGVzXG4gKlxuICogcmVnaW9uICAgICAgICA9IFwiVVNcIiwgXCJDU1wiLCBcIkZSXCIgSVNPIDMxNjYgY29kZXNcbiAqICAgICAgICAgICAgICAgICBcIjQxOVwiLCBcIjAxOVwiLCAgb3IgVU4gTS40OSBjb2Rlc1xuICpcbiAqIHZhcmlhbnQgICAgICAgPSBcInJvemFqXCIsIFwibmVkaXNcIiwgXCIxOTk2XCIsIG11bHRpcGxlIHN1YnRhZ3MgY2FuIGJlIHVzZWQgaW4gYSB0YWdcbiAqXG4gKiBleHRlbnNpb24gICAgID0gc2luZ2xlIGxldHRlciBmb2xsb3dlZCBieSBhZGRpdGlvbmFsIHN1YnRhZ3M7IG1vcmUgdGhhbiBvbmUgZXh0ZW5zaW9uXG4gKiAgICAgICAgICAgICAgICAgbWF5IGJlIHVzZWQgaW4gYSBsYW5ndWFnZSB0YWdcbiAqXG4gKiBwcml2YXRlLXVzZSAgID0gXCJ4LVwiIGZvbGxvd2VkIGJ5IGFkZGl0aW9uYWwgc3VidGFncywgYXMgbWFueSBhcyBhcmUgcmVxdWlyZWRcbiAqICAgICAgICAgICAgICAgICBOb3RlIHRoYXQgdGhlc2UgY2FuIHN0YXJ0IGEgdGFnIG9yIGFwcGVhciBhdCB0aGUgZW5kIChidXQgbm90XG4gKiAgICAgICAgICAgICAgICAgaW4gdGhlIG1pZGRsZSlcbiAqIGBgYFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzMDY2XG4gKi9cbmNsYXNzIExvY2FsZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbcmVnaW9uXVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW3NjcmlwdF1cblx0ICogQHBhcmFtIHtzdHJpbmd9IFt2YXJpYW50c11cblx0ICogQHBhcmFtIHtzdHJpbmd9IFtleHRsYW5nXVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW3ByaXZhdGVVc2VdXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBsb2NhbGVcblx0ICovXG5cdGNvbnN0cnVjdG9yKGxhbmd1YWdlLCByZWdpb24sIHNjcmlwdCwgdmFyaWFudHMsIGV4dGxhbmcsIHByaXZhdGVVc2UpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpc1twcm9wZXJ0aWVzU3ltYm9sXSA9IHtcblx0XHRcdGxhbmd1YWdlOiBsYW5ndWFnZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdmFsaWRhdGVTdHJpbmcobGFuZ3VhZ2UpLFxuXHRcdFx0c2NyaXB0OiBzY3JpcHQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHZhbGlkYXRlU3RyaW5nKHNjcmlwdCksXG5cdFx0XHRyZWdpb246IHJlZ2lvbiA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdmFsaWRhdGVTdHJpbmcocmVnaW9uKSxcblx0XHRcdHZhcmlhbnRzOiB2YXJpYW50cyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdmFsaWRhdGVTdHJpbmcodmFyaWFudHMpLFxuXHRcdFx0ZXh0bGFuZzogZXh0bGFuZyA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogdmFsaWRhdGVTdHJpbmcoZXh0bGFuZyksXG5cdFx0XHRwcml2YXRlVXNlOlxuXHRcdFx0XHRwcml2YXRlVXNlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB2YWxpZGF0ZVN0cmluZyhwcml2YXRlVXNlKSxcblx0XHR9O1xuXG5cdFx0Y29uc3QgcyA9IFtdO1xuXHRcdGlmIChsYW5ndWFnZSAhPT0gdW5kZWZpbmVkKSBzLnB1c2gobGFuZ3VhZ2UpO1xuXHRcdGlmIChzY3JpcHQgIT09IHVuZGVmaW5lZCkgcy5wdXNoKHNjcmlwdCk7XG5cdFx0aWYgKHJlZ2lvbiAhPT0gdW5kZWZpbmVkKSBzLnB1c2gocmVnaW9uKTtcblx0XHRpZiAodmFyaWFudHMgIT09IHVuZGVmaW5lZCkgcy5wdXNoKHZhcmlhbnRzKTtcblx0XHRpZiAoZXh0bGFuZyAhPT0gdW5kZWZpbmVkKSBzLnB1c2goZXh0bGFuZyk7XG5cdFx0aWYgKHByaXZhdGVVc2UgIT09IHVuZGVmaW5lZCkgcy5wdXNoKHByaXZhdGVVc2UpO1xuXG5cdFx0aWYgKHMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBsb2NhbGVcIik7XG5cdFx0fVxuXG5cdFx0dGhpc1tsb2NhbGVTdHJpbmdTeW1ib2xdID0gcy5qb2luKFwiLVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2kxOG4vbG9jYWxlQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXQgbG9jYWxlU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzW2xvY2FsZVN0cmluZ1N5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldCBsYW5ndWFnZSgpIHtcblx0XHRyZXR1cm4gdGhpc1twcm9wZXJ0aWVzU3ltYm9sXS5sYW5ndWFnZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8dW5kZWZpbmVkfVxuXHQgKi9cblx0Z2V0IHJlZ2lvbigpIHtcblx0XHRyZXR1cm4gdGhpc1twcm9wZXJ0aWVzU3ltYm9sXS5yZWdpb247XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldCBzY3JpcHQoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcHJvcGVydGllc1N5bWJvbF0uc2NyaXB0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXQgdmFyaWFudHMoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcHJvcGVydGllc1N5bWJvbF0udmFyaWFudHM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldCBleHRsYW5nKCkge1xuXHRcdHJldHVybiB0aGlzW3Byb3BlcnRpZXNTeW1ib2xdLmV4dGxhbmc7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldCBwcml2YXRlVXNlKCkge1xuXHRcdHJldHVybiB0aGlzW3Byb3BlcnRpZXNTeW1ib2xdLnByaXZhdGVWYWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gYCR7dGhpcy5sb2NhbGVTdHJpbmd9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgc3RydWN0dXJlIGhhcyB0aGUgZm9sbG93aW5nOiBsYW5ndWFnZSwgc2NyaXB0LCByZWdpb24sIHZhcmlhbnRzLCBleHRsYW5nLCBwcml2YXRlVXNlXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuSTE4bi5Mb2NhbGVNYXB9XG5cdCAqL1xuXHRnZXRNYXAoKSB7XG5cdFx0cmV0dXJuIGNsb25lKHRoaXNbcHJvcGVydGllc1N5bWJvbF0pO1xuXHR9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gTG9jYWxlTWFwXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGFuZ3VhZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzY3JpcHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWdpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YXJpYW50c1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGV4dGxhbmdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcml2YXRlVXNlXG4gKi9cblxuLyoqXG4gKiBQYXJzZSBsb2NhbCBhY2NvcmRpbmcgdG8gcmZjNDY0NiBzdGFuZGFyZFxuICpcbiAqIExpbWl0YXRpb25zOiBUaGUgcmVnZXggY2Fubm90IGhhbmRsZSBtdWx0aXBsZSB2YXJpYW50cyBvciBwcml2YXRlLlxuICpcbiAqIFlvdSBjYW4gY2FsbCB0aGUgbWV0aG9kIHZpYSB0aGlzIGZ1bmN0aW9uIGluZGl2aWR1YWxseTpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQge2NyZWF0ZUxvY2FsZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvaTE4bi9sb2NhbGUubWpzJztcbiAqIGNyZWF0ZUxvY2FsZSgpXG4gKiBgYGBcbiAqXG4gKiBSRkNcbiAqXG4gKiBgYGBcbiAqICAgVGhlIHN5bnRheCBvZiB0aGUgbGFuZ3VhZ2UgdGFnIGluIEFCTkYgW1JGQzQyMzRdIGlzOlxuICpcbiAqICAgTGFuZ3VhZ2UtVGFnICA9IGxhbmd0YWdcbiAqICAgICAgICAgICAgICAgICAvIHByaXZhdGV1c2UgICAgICAgICAgICAgOyBwcml2YXRlIHVzZSB0YWdcbiAqICAgICAgICAgICAgICAgICAvIGdyYW5kZmF0aGVyZWQgICAgICAgICAgOyBncmFuZGZhdGhlcmVkIHJlZ2lzdHJhdGlvbnNcbiAqXG4gKiAgIGxhbmd0YWcgICAgICAgPSAobGFuZ3VhZ2VcbiAqICAgICAgICAgICAgICAgICAgICBbXCItXCIgc2NyaXB0XVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiByZWdpb25dXG4gKiAgICAgICAgICAgICAgICAgICAgKihcIi1cIiB2YXJpYW50KVxuICogICAgICAgICAgICAgICAgICAgICooXCItXCIgZXh0ZW5zaW9uKVxuICogICAgICAgICAgICAgICAgICAgIFtcIi1cIiBwcml2YXRldXNlXSlcbiAqXG4gKiAgIGxhbmd1YWdlICAgICAgPSAoMiozQUxQSEEgWyBleHRsYW5nIF0pIDsgc2hvcnRlc3QgSVNPIDYzOSBjb2RlXG4gKiAgICAgICAgICAgICAgICAgLyA0QUxQSEEgICAgICAgICAgICAgICAgIDsgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2VcbiAqICAgICAgICAgICAgICAgICAvIDUqOEFMUEhBICAgICAgICAgICAgICAgOyByZWdpc3RlcmVkIGxhbmd1YWdlIHN1YnRhZ1xuICpcbiAqICAgZXh0bGFuZyAgICAgICA9ICozKFwiLVwiIDNBTFBIQSkgICAgICAgICA7IHJlc2VydmVkIGZvciBmdXR1cmUgdXNlXG4gKlxuICogICBzY3JpcHQgICAgICAgID0gNEFMUEhBICAgICAgICAgICAgICAgICA7IElTTyAxNTkyNCBjb2RlXG4gKlxuICogICByZWdpb24gICAgICAgID0gMkFMUEhBICAgICAgICAgICAgICAgICA7IElTTyAzMTY2IGNvZGVcbiAqICAgICAgICAgICAgICAgICAvIDNESUdJVCAgICAgICAgICAgICAgICAgOyBVTiBNLjQ5IGNvZGVcbiAqXG4gKiAgIHZhcmlhbnQgICAgICAgPSA1KjhhbHBoYW51bSAgICAgICAgICAgIDsgcmVnaXN0ZXJlZCB2YXJpYW50c1xuICogICAgICAgICAgICAgICAgIC8gKERJR0lUIDNhbHBoYW51bSlcbiAqXG4gKiAgIGV4dGVuc2lvbiAgICAgPSBzaW5nbGV0b24gMSooXCItXCIgKDIqOGFscGhhbnVtKSlcbiAqXG4gKiAgIHNpbmdsZXRvbiAgICAgPSAleDQxLTU3IC8gJXg1OS01QSAvICV4NjEtNzcgLyAleDc5LTdBIC8gRElHSVRcbiAqICAgICAgICAgICAgICAgICA7IFwiYVwiLVwid1wiIC8gXCJ5XCItXCJ6XCIgLyBcIkFcIi1cIldcIiAvIFwiWVwiLVwiWlwiIC8gXCIwXCItXCI5XCJcbiAqICAgICAgICAgICAgICAgICA7IFNpbmdsZSBsZXR0ZXJzOiB4L1ggaXMgcmVzZXJ2ZWQgZm9yIHByaXZhdGUgdXNlXG4gKlxuICogICBwcml2YXRldXNlICAgID0gKFwieFwiL1wiWFwiKSAxKihcIi1cIiAoMSo4YWxwaGFudW0pKVxuICpcbiAqICAgZ3JhbmRmYXRoZXJlZCA9IDEqM0FMUEhBIDEqMihcIi1cIiAoMio4YWxwaGFudW0pKVxuICogICAgICAgICAgICAgICAgICAgOyBncmFuZGZhdGhlcmVkIHJlZ2lzdHJhdGlvblxuICogICAgICAgICAgICAgICAgICAgOyBOb3RlOiBpIGlzIHRoZSBvbmx5IHNpbmdsZXRvblxuICogICAgICAgICAgICAgICAgICAgOyB0aGF0IHN0YXJ0cyBhIGdyYW5kZmF0aGVyZWQgdGFnXG4gKlxuICogICBhbHBoYW51bSAgICAgID0gKEFMUEhBIC8gRElHSVQpICAgICAgIDsgbGV0dGVycyBhbmQgbnVtYmVyc1xuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgRmlndXJlIDE6IExhbmd1YWdlIFRhZyBBQk5GXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYWxlXG4gKiBAcmV0dXJuIHtMb2NhbGV9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIGxvY2FsZVxuICovXG5mdW5jdGlvbiBwYXJzZUxvY2FsZShsb2NhbGUpIHtcblx0bG9jYWxlID0gdmFsaWRhdGVTdHJpbmcobG9jYWxlKS5yZXBsYWNlKC9fL2csIFwiLVwiKTtcblxuXHRsZXQgbGFuZ3VhZ2U7XG5cdGxldCByZWdpb247XG5cdGxldCB2YXJpYW50cztcblx0bGV0IHBhcnRzO1xuXHRsZXQgc2NyaXB0O1xuXHRsZXQgZXh0bGFuZztcblx0Y29uc3QgcmVnZXhSZWd1bGFyID1cblx0XHRcIihhcnQtbG9qYmFufGNlbC1nYXVsaXNofG5vLWJva3xuby1ueW58emgtZ3VveXV8emgtaGFra2F8emgtbWlufHpoLW1pbi1uYW58emgteGlhbmcpXCI7XG5cdGNvbnN0IHJlZ2V4SXJyZWd1bGFyID1cblx0XHRcIihlbi1HQi1vZWR8aS1hbWl8aS1ibm58aS1kZWZhdWx0fGktZW5vY2hpYW58aS1oYWt8aS1rbGluZ29ufGktbHV4fGktbWluZ298aS1uYXZham98aS1wd258aS10YW98aS10YXl8aS10c3V8c2duLUJFLUZSfHNnbi1CRS1OTHxzZ24tQ0gtREUpXCI7XG5cdGNvbnN0IHJlZ2V4R3JhbmRmYXRoZXJlZCA9IGAoJHtyZWdleElycmVndWxhcn18JHtyZWdleFJlZ3VsYXJ9KWA7XG5cdGNvbnN0IHJlZ2V4UHJpdmF0ZVVzZSA9IFwiKHgoLVtBLVphLXowLTldezEsOH0pKylcIjtcblx0Y29uc3QgcmVnZXhTaW5nbGV0b24gPSBcIlswLTlBLVdZLVphLXd5LXpdXCI7XG5cdGNvbnN0IHJlZ2V4RXh0ZW5zaW9uID0gYCgke3JlZ2V4U2luZ2xldG9ufSgtW0EtWmEtejAtOV17Miw4fSkrKWA7XG5cdGNvbnN0IHJlZ2V4VmFyaWFudCA9IFwiKFtBLVphLXowLTldezUsOH18WzAtOV1bQS1aYS16MC05XXszfSlcIjtcblx0Y29uc3QgcmVnZXhSZWdpb24gPSBcIihbQS1aYS16XXsyfXxbMC05XXszfSlcIjtcblx0Y29uc3QgcmVnZXhTY3JpcHQgPSBcIihbQS1aYS16XXs0fSlcIjtcblx0Y29uc3QgcmVnZXhFeHRsYW5nID0gXCIoW0EtWmEtel17M30oLVtBLVphLXpdezN9KXswLDJ9KVwiO1xuXHRjb25zdCByZWdleExhbmd1YWdlID0gYCgoW0EtWmEtel17MiwzfSgtJHtyZWdleEV4dGxhbmd9KT8pfFtBLVphLXpdezR9fFtBLVphLXpdezUsOH0pYDtcblx0Y29uc3QgcmVnZXhMYW5ndGFnID0gYCgke3JlZ2V4TGFuZ3VhZ2V9KC0ke3JlZ2V4U2NyaXB0fSk/KC0ke3JlZ2V4UmVnaW9ufSk/KC0ke3JlZ2V4VmFyaWFudH0pKigtJHtyZWdleEV4dGVuc2lvbn0pKigtJHtyZWdleFByaXZhdGVVc2V9KT8pYDtcblx0Y29uc3QgcmVnZXhMYW5ndWFnZVRhZyA9IGBeKCR7cmVnZXhHcmFuZGZhdGhlcmVkfXwke3JlZ2V4TGFuZ3RhZ318JHtyZWdleFByaXZhdGVVc2V9KSRgO1xuXHRjb25zdCByZWdleCA9IG5ldyBSZWdFeHAocmVnZXhMYW5ndWFnZVRhZyk7XG5cdGxldCBtYXRjaDtcblxuXHRpZiAoKG1hdGNoID0gcmVnZXguZXhlYyhsb2NhbGUpKSAhPT0gbnVsbCkge1xuXHRcdGlmIChtYXRjaC5pbmRleCA9PT0gcmVnZXgubGFzdEluZGV4KSB7XG5cdFx0XHRyZWdleC5sYXN0SW5kZXgrKztcblx0XHR9XG5cdH1cblxuXHRpZiAobWF0Y2ggPT09IHVuZGVmaW5lZCB8fCBtYXRjaCA9PT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGxvY2FsZVwiKTtcblx0fVxuXG5cdGlmIChtYXRjaFs2XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0bGFuZ3VhZ2UgPSBtYXRjaFs2XTtcblxuXHRcdHBhcnRzID0gbGFuZ3VhZ2Uuc3BsaXQoXCItXCIpO1xuXHRcdGlmIChwYXJ0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHRsYW5ndWFnZSA9IHBhcnRzWzBdO1xuXHRcdFx0ZXh0bGFuZyA9IHBhcnRzWzFdO1xuXHRcdH1cblx0fVxuXG5cdGlmIChtYXRjaFsxNF0gIT09IHVuZGVmaW5lZCkge1xuXHRcdHJlZ2lvbiA9IG1hdGNoWzE0XTtcblx0fVxuXG5cdGlmIChtYXRjaFsxMl0gIT09IHVuZGVmaW5lZCkge1xuXHRcdHNjcmlwdCA9IG1hdGNoWzEyXTtcblx0fVxuXG5cdGlmIChtYXRjaFsxNl0gIT09IHVuZGVmaW5lZCkge1xuXHRcdHZhcmlhbnRzID0gbWF0Y2hbMTZdO1xuXHR9XG5cblx0cmV0dXJuIG5ldyBMb2NhbGUobGFuZ3VhZ2UsIHJlZ2lvbiwgc2NyaXB0LCB2YXJpYW50cywgZXh0bGFuZyk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgcGFyc2VMb2NhbGUgfSBmcm9tIFwiLi4vaTE4bi9sb2NhbGUubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuXG5leHBvcnQgeyBnZXRMb2NhbGVPZkRvY3VtZW50IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IERFRkFVTFRfTEFOR1VBR0UgPSBcImVuXCI7XG5cbi8qKlxuICogV2l0aCB0aGlzIGZ1bmN0aW9uIHlvdSBjYW4gcmVhZCB0aGUgbGFuZ3VhZ2UgdmVyc2lvbiBzZXQgYnkgdGhlIGRvY3VtZW50LlxuICogRm9yIHRoaXMgdGhlIGF0dHJpYnV0ZSBgbGFuZ2AgaW4gdGhlIGh0bWwgdGFnIGlzIHJlYWQuIElmIG5vIGF0dHJpYnV0ZSBpcyBzZXQsIGBlbmAgaXMgdXNlZCBhcyBkZWZhdWx0LlxuICogQWx0ZXJuYXRpdmVseSwgdGhlIGxhbmd1YWdlIHZlcnNpb24gb2YgdGhlIGJyb3dzZXIgaXMgdXNlZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8aHRtbCBsYW5nPVwiZW5cIj5cbiAqIGBgYFxuICpcbiAqIFlvdSBjYW4gY2FsbCB0aGUgZnVuY3Rpb24gdmlhIGBnZXRMb2NhbGVPZkRvY3VtZW50KClgLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgbG9jYWxlXG4gKiBAc3VtbWFyeSBUcmllcyB0byBkZXRlcm1pbmUgdGhlIGxvY2FsZSB1c2VkXG4gKi9cbmZ1bmN0aW9uIGdldExvY2FsZU9mRG9jdW1lbnQoKSB7XG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRjb25zdCBodG1sID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImh0bWxcIik7XG5cdGlmIChodG1sIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgaHRtbC5oYXNBdHRyaWJ1dGUoXCJsYW5nXCIpKSB7XG5cdFx0Y29uc3QgbG9jYWxlID0gaHRtbC5nZXRBdHRyaWJ1dGUoXCJsYW5nXCIpO1xuXHRcdGlmIChsb2NhbGUpIHtcblx0XHRcdHJldHVybiBuZXcgcGFyc2VMb2NhbGUobG9jYWxlKTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBuYXZpZ2F0b3JMYW5ndWFnZSA9IGdldE5hdmlnYXRvckxhbmd1YWdlKCk7XG5cdGlmIChuYXZpZ2F0b3JMYW5ndWFnZSkge1xuXHRcdHJldHVybiBwYXJzZUxvY2FsZShuYXZpZ2F0b3JMYW5ndWFnZSk7XG5cdH1cblxuXHRyZXR1cm4gcGFyc2VMb2NhbGUoREVGQVVMVF9MQU5HVUFHRSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR8Kn1cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL05hdmlnYXRvci9sYW5ndWFnZVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTmF2aWdhdG9yL2xhbmd1YWdlc1xuICovXG5jb25zdCBnZXROYXZpZ2F0b3JMYW5ndWFnZSA9ICgpID0+IHtcblx0Y29uc3QgbmF2aWdhdG9yID0gZ2V0R2xvYmFsT2JqZWN0KFwibmF2aWdhdG9yXCIpO1xuXHRpZiAobmF2aWdhdG9yID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKG5hdmlnYXRvci5oYXNPd25Qcm9wZXJ0eShcImxhbmd1YWdlXCIpKSB7XG5cdFx0Y29uc3QgbGFuZ3VhZ2UgPSBuYXZpZ2F0b3IubGFuZ3VhZ2U7XG5cdFx0aWYgKHR5cGVvZiBsYW5ndWFnZSA9PT0gXCJzdHJpbmdcIiAmJiBsYW5ndWFnZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRyZXR1cm4gbGFuZ3VhZ2U7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgbGFuZ3VhZ2VzID0gbmF2aWdhdG9yPy5sYW5ndWFnZXM7XG5cdGlmIChBcnJheS5pc0FycmF5KGxhbmd1YWdlcykgJiYgbGFuZ3VhZ2VzLmxlbmd0aCA+IDApIHtcblx0XHRyZXR1cm4gbGFuZ3VhZ2VzWzBdO1xuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBJRCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7TWFwPHN0cmluZywgaW50ZWdlcj59XG4gKi9cbmNvbnN0IGludGVybmFsQ291bnRlciA9IG5ldyBNYXAoKTtcblxuLyoqXG4gKiBXaXRoIHRoZSBpZCBjbGFzcywgc2VxdWVuY2VzIG9mIGlkcyBjYW4gYmUgY3JlYXRlZC4gZm9yIHRoaXMgcHVycG9zZSwgYW4gaW50ZXJuYWwgY291bnRlciBpcyBpbmNyZW1lbnRlZCBmb3IgZWFjaCBwcmVmaXguXG4gKiB0aHVzLCB0aGUgZmlyc3QgaWQgd2l0aCB0aGUgcHJlZml4IGBteWlkYCB3aWxsIGJlIGBteWlkMWAgYW5kIHRoZSBzZWNvbmQgaWQgYG15aWQyYC5cbiAqIFRoZSBpZHMgYXJlIHRoZSBzYW1lIGZvciBldmVyeSBjYWxsLCBmb3IgZXhhbXBsZSBvbiBhIHdlYiBwYWdlLlxuICpcbiAqIFNvIHRoZSBpZHMgY2FuIGFsc28gYmUgdXNlZCBmb3IgbmF2aWdhdGlvbi4geW91IGhhdmUgdG8gdGFrZSBjYXJlIHRoYXQgdGhlIG9yZGVyIHN0YXlzIHRoZSBzYW1lLlxuICpcbiAqIEFzIG9mIHZlcnNpb24gMS42LjAgdGhlcmUgaXMgdGhlIG5ldyBSYW5kb21JRC4gdGhpcyBJRCBjbGFzcyBpcyBjb250aW51b3VzIGZyb20gbm93IG9uLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQXV0b21hdGljIGdlbmVyYXRpb24gb2YgaWRzXG4gKi9cbmNsYXNzIElEIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBjcmVhdGUgbmV3IGlkIHdpdGggcHJlZml4XG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcblx0ICovXG5cdGNvbnN0cnVjdG9yKHByZWZpeCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAocHJlZml4ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHByZWZpeCA9IFwiaWRcIjtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZVN0cmluZyhwcmVmaXgpO1xuXG5cdFx0aWYgKCFpbnRlcm5hbENvdW50ZXIuaGFzKHByZWZpeCkpIHtcblx0XHRcdGludGVybmFsQ291bnRlci5zZXQocHJlZml4LCAxKTtcblx0XHR9XG5cblx0XHRsZXQgY291bnQgPSBpbnRlcm5hbENvdW50ZXIuZ2V0KHByZWZpeCk7XG5cdFx0dGhpcy5pZCA9IHByZWZpeCArIGNvdW50O1xuXG5cdFx0aW50ZXJuYWxDb3VudGVyLnNldChwcmVmaXgsICsrY291bnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzLmlkO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0IH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IEJhc2VXaXRoT3B0aW9ucyB9O1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIGJhc2UgY2xhc3Mgd2l0aCBvcHRpb25zIGZyb20gd2hpY2ggc29tZSBtb25zdGVyIGNsYXNzZXMgYXJlIGRlcml2ZWQuXG4gKlxuICogVGhpcyBjbGFzcyBpcyBhY3R1YWxseSBvbmx5IHVzZWQgYXMgYSBiYXNlIGNsYXNzLlxuICpcbiAqIENsYXNzZXMgdGhhdCByZXF1aXJlIHRoZSBwb3NzaWJpbGl0eSBvZiBvcHRpb25zIGNhbiBiZSBkZXJpdmVkIGRpcmVjdGx5IGZyb20gdGhpcyBjbGFzcy5cbiAqIERlcml2ZWQgY2xhc3NlcyBhbG1vc3QgYWx3YXlzIG92ZXJyaWRlIHRoZSBgZGVmYXVsdGAgZ2V0dGVyIHdpdGggdGhlaXIgb3duIHZhbHVlcy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEzLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSAzLjE1LjBcbiAqL1xuY2xhc3MgQmFzZVdpdGhPcHRpb25zIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb25zID0ge307XG5cdFx0fVxuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSBleHRlbmQoe30sIHRoaXMuZGVmYXVsdHMsIHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGdldHRlciBwcm92aWRlcyB0aGUgb3B0aW9ucy4gRGVyaXZlZCBjbGFzc2VzIG92ZXJ3cml0ZVxuXHQgKiB0aGlzIGdldHRlciB3aXRoIHRoZWlyIG93biB2YWx1ZXMuIEl0IGlzIGEgZ29vZCBrYXJtYSB0byBhbHdheXMgaW5jbHVkZVxuXHQgKiB0aGUgdmFsdWVzIGZyb20gdGhlIHBhcmVudCBjbGFzcy5cblx0ICpcblx0ICogYGBgamF2YXNjcmlwdFxuXHQgKiBnZXQgZGVmYXVsdHMoKSB7XG5cdCAqICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0ICogICAgICAgICBteWtleTogdHJ1ZVxuXHQgKiAgICAgfSk7XG5cdCAqIH1cblx0ICpcblx0ICogYGBgXG5cdCAqXG5cdCAqIEByZXR1cm4ge29iamVjdH1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHQvKipcblx0ICogbmVzdGVkIG9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBieSBwYXRoIGBhLmIuY2Bcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHBhcmFtIHsqfSBkZWZhdWx0VmFsdWVcblx0ICogQHJldHVybiB7Kn1cblx0ICogQHNpbmNlIDEuMTAuMFxuXHQgKi9cblx0Z2V0T3B0aW9uKHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuXHRcdGxldCB2YWx1ZTtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YWx1ZSA9IG5ldyBQYXRoZmluZGVyKHRoaXNbaW50ZXJuYWxTeW1ib2xdKS5nZXRWaWEocGF0aCk7XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGhhc09iamVjdExpbmssXG5cdGdldExpbmtlZE9iamVjdHMsXG5cdGFkZFRvT2JqZWN0TGluayxcbn0gZnJvbSBcIi4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0TG9jYWxlT2ZEb2N1bWVudCB9IGZyb20gXCIuLi9kb20vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgQmFzZVdpdGhPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2V3aXRob3B0aW9ucy5tanNcIjtcbmltcG9ydCB7IExvY2FsZSB9IGZyb20gXCIuL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9ucyB9IGZyb20gXCIuL3RyYW5zbGF0aW9ucy5tanNcIjtcblxuZXhwb3J0IHsgUHJvdmlkZXIsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wgfTtcblxuLyoqXG4gKiBAdHlwZSB7c3ltYm9sfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy45LjBcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvaTE4bi90cmFuc2xhdGlvbnNAQGxpbmtcIixcbik7XG5cbi8qKlxuICogQSBwcm92aWRlciBtYWtlcyBhIHRyYW5zbGF0aW9uIG9iamVjdCBhdmFpbGFibGUuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzMDY2fVxuICovXG5jbGFzcyBQcm92aWRlciBleHRlbmRzIEJhc2VXaXRoT3B0aW9ucyB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2kxOG4vcHJvdmlkZXJAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7TG9jYWxlfHN0cmluZ30gbG9jYWxlXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRnZXRUcmFuc2xhdGlvbnMobG9jYWxlKSB7XG5cdFx0aWYgKGxvY2FsZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRsb2NhbGUgPSBnZXRMb2NhbGVPZkRvY3VtZW50KCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJlc29sdmUobmV3IFRyYW5zbGF0aW9ucyhsb2NhbGUpKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7TG9jYWxlfHN0cmluZ30gbG9jYWxlXG5cdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnRcblx0ICogQHJldHVybiB7UHJvdmlkZXJ9XG5cdCAqL1xuXHRhc3NpZ25Ub0VsZW1lbnQobG9jYWxlLCBlbGVtZW50KSB7XG5cdFx0aWYgKGxvY2FsZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRsb2NhbGUgPSBnZXRMb2NhbGVPZkRvY3VtZW50KCk7XG5cdFx0fVxuXG5cdFx0aWYgKCEobG9jYWxlIGluc3RhbmNlb2YgTG9jYWxlKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiTG9jYWxlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBMb2NhbGVcIik7XG5cdFx0fVxuXG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0ZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJib2R5XCIpO1xuXHRcdH1cblxuXHRcdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkVsZW1lbnQgaXMgbm90IGFuIEhUTUxFbGVtZW50XCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmdldFRyYW5zbGF0aW9ucyhsb2NhbGUpLnRoZW4oKG9iaikgPT4ge1xuXHRcdFx0bGV0IHRyYW5zbGF0aW9ucyA9IG51bGw7XG5cdFx0XHRpZiAoaGFzT2JqZWN0TGluayhlbGVtZW50LCB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sKSkge1xuXHRcdFx0XHRjb25zdCBvYmplY3RzID0gZ2V0TGlua2VkT2JqZWN0cyhlbGVtZW50LCB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sKTtcblx0XHRcdFx0Zm9yIChjb25zdCBvIG9mIG9iamVjdHMpIHtcblx0XHRcdFx0XHRpZiAobyBpbnN0YW5jZW9mIFRyYW5zbGF0aW9ucykge1xuXHRcdFx0XHRcdFx0dHJhbnNsYXRpb25zID0gbztcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghKHRyYW5zbGF0aW9ucyBpbnN0YW5jZW9mIFRyYW5zbGF0aW9ucykpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJPYmplY3QgaXMgbm90IGFuIGluc3RhbmNlIG9mIFRyYW5zbGF0aW9uc1wiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyYW5zbGF0aW9ucy5hc3NpZ25UcmFuc2xhdGlvbnMob2JqKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFkZFRvT2JqZWN0TGluayhlbGVtZW50LCB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sLCBvYmopO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2JqO1xuXHRcdH0pO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0TGlua2VkT2JqZWN0cywgaGFzT2JqZWN0TGluayB9IGZyb20gXCIuLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9PQkpFQ1RMSU5LIH0gZnJvbSBcIi4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZyB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7XG5cdHZhbGlkYXRlSW50ZWdlcixcblx0dmFsaWRhdGVPYmplY3QsXG5cdHZhbGlkYXRlU3RyaW5nLFxufSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBMb2NhbGUsIHBhcnNlTG9jYWxlIH0gZnJvbSBcIi4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgdHJhbnNsYXRpb25zTGlua1N5bWJvbCB9IGZyb20gXCIuL3Byb3ZpZGVyLm1qc1wiO1xuXG5leHBvcnQgeyBUcmFuc2xhdGlvbnMsIGdldERvY3VtZW50VHJhbnNsYXRpb25zIH07XG5cbi8qKlxuICogV2l0aCB0aGlzIGNsYXNzIHlvdSBjYW4gbWFuYWdlIHRyYW5zbGF0aW9ucyBhbmQgYWNjZXNzIHRoZSBrZXlzLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9pMThuL3RyYW5zbGF0aW9ucy5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzMDY2XG4gKi9cbmNsYXNzIFRyYW5zbGF0aW9ucyBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtMb2NhbGV9IGxvY2FsZVxuXHQgKi9cblx0Y29uc3RydWN0b3IobG9jYWxlKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChsb2NhbGUgaW5zdGFuY2VvZiBMb2NhbGUpIHtcblx0XHRcdHRoaXMubG9jYWxlID0gbG9jYWxlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmxvY2FsZSA9IHBhcnNlTG9jYWxlKHZhbGlkYXRlU3RyaW5nKGxvY2FsZSkpO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RvcmFnZSA9IG5ldyBNYXAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2kxOG4vdHJhbnNsYXRpb25zQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGZXRjaGVzIGEgdGV4dCB1c2luZyB0aGUgc3BlY2lmaWVkIGtleS5cblx0ICogSWYgbm8gc3VpdGFibGUga2V5IGlzIGZvdW5kLCBgZGVmYXVsdFRleHRgIGlzIHRha2VuLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG5cdCAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gZGVmYXVsdFRleHRcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0ga2V5IG5vdCBmb3VuZFxuXHQgKi9cblx0Z2V0VGV4dChrZXksIGRlZmF1bHRUZXh0KSB7XG5cdFx0aWYgKCF0aGlzLnN0b3JhZ2UuaGFzKGtleSkpIHtcblx0XHRcdGlmIChkZWZhdWx0VGV4dCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihga2V5ICR7a2V5fSBub3QgZm91bmRgKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbGlkYXRlU3RyaW5nKGRlZmF1bHRUZXh0KTtcblx0XHR9XG5cblx0XHRjb25zdCByID0gdGhpcy5zdG9yYWdlLmdldChrZXkpO1xuXHRcdGlmIChpc09iamVjdChyKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0UGx1cmFsUnVsZVRleHQoa2V5LCBcIm90aGVyXCIsIGRlZmF1bHRUZXh0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5zdG9yYWdlLmdldChrZXkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgbnVtYmVyIGBjb3VudGAgY2FuIGJlIHBhc3NlZCB0byB0aGlzIG1ldGhvZC4gSW4gYWRkaXRpb24gdG8gYSBudW1iZXIsIG9uZSBvZiB0aGUga2V5d29yZHMgY2FuIGFsc28gYmUgcGFzc2VkIGRpcmVjdGx5LlxuXHQgKiBcInplcm9cIiwgXCJvbmVcIiwgXCJ0d29cIiwgXCJmZXdcIiwgXCJtYW55XCIgYW5kIFwib3RoZXJcIi4gUmVtZW1iZXI6IG5vdCBldmVyeSBsYW5ndWFnZSBoYXMgYWxsIHJ1bGVzLlxuXHQgKlxuXHQgKiBUaGUgYXBwcm9wcmlhdGUgdGV4dCBmb3IgdGhpcyBudW1iZXIgaXMgdGhlbiBzZWxlY3RlZC4gSWYgbm8gc3VpdGFibGUga2V5IGlzIGZvdW5kLCBgZGVmYXVsdFRleHRgIGlzIHRha2VuLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG5cdCAqIEBwYXJhbSB7aW50ZWdlcnxzdHJpbmd9IGNvdW50XG5cdCAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gZGVmYXVsdFRleHRcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0UGx1cmFsUnVsZVRleHQoa2V5LCBjb3VudCwgZGVmYXVsdFRleHQpIHtcblx0XHRpZiAoIXRoaXMuc3RvcmFnZS5oYXMoa2V5KSkge1xuXHRcdFx0cmV0dXJuIHZhbGlkYXRlU3RyaW5nKGRlZmF1bHRUZXh0KTtcblx0XHR9XG5cblx0XHRjb25zdCByID0gdmFsaWRhdGVPYmplY3QodGhpcy5zdG9yYWdlLmdldChrZXkpKTtcblxuXHRcdGxldCBrZXl3b3JkO1xuXHRcdGlmIChpc1N0cmluZyhjb3VudCkpIHtcblx0XHRcdGtleXdvcmQgPSBjb3VudC50b0xvY2FsZVN0cmluZygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb3VudCA9IHZhbGlkYXRlSW50ZWdlcihjb3VudCk7XG5cdFx0XHRpZiAoY291bnQgPT09IDApIHtcblx0XHRcdFx0Ly8gc3BlY2lhbCBoYW5kbGluZyBmb3IgemVybyBjb3VudFxuXHRcdFx0XHRpZiAoci5oYXNPd25Qcm9wZXJ0eShcInplcm9cIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsaWRhdGVTdHJpbmcocj8uemVybyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0a2V5d29yZCA9IG5ldyBJbnRsLlBsdXJhbFJ1bGVzKHRoaXMubG9jYWxlLnRvU3RyaW5nKCkpLnNlbGVjdChcblx0XHRcdFx0dmFsaWRhdGVJbnRlZ2VyKGNvdW50KSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKHIuaGFzT3duUHJvcGVydHkoa2V5d29yZCkpIHtcblx0XHRcdHJldHVybiB2YWxpZGF0ZVN0cmluZyhyW2tleXdvcmRdKTtcblx0XHR9XG5cblx0XHQvLyBAZGVwcmVjYXRlZCBzaW5jZSAyMDIzLTAzLTE0XG5cdFx0Ly8gREVGQVVMVF9LRVkgaXMgdW5kZWZpbmVkXG5cdFx0Ly8gaWYgKHIuaGFzT3duUHJvcGVydHkoREVGQVVMVF9LRVkpKSB7XG5cdFx0Ly8gICAgIHJldHVybiB2YWxpZGF0ZVN0cmluZyhyW0RFRkFVTFRfS0VZXSk7XG5cdFx0Ly8gfVxuXG5cdFx0cmV0dXJuIHZhbGlkYXRlU3RyaW5nKGRlZmF1bHRUZXh0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgYSB0ZXh0IGZvciBhIGtleVxuXHQgKlxuXHQgKiBgYGBcblx0ICogdHJhbnNsYXRpb25zLnNldFRleHQoXCJ0ZXh0MVwiLCBcIk1ha2UgbXkgZGF5IVwiKTtcblx0ICogLy8gcGx1cmFsIHJ1bGVzXG5cdCAqIHRyYW5zbGF0aW9ucy5zZXRUZXh0KFwidGV4dDZcIiwge1xuXHQgKiAgICAgXCJ6ZXJvXCI6IFwiVGhlcmUgYXJlIG5vIGZpbGVzIG9uIERpc2suXCIsXG5cdCAqICAgICBcIm9uZVwiOiBcIlRoZXJlIGlzIG9uZSBmaWxlIG9uIERpc2suXCIsXG5cdCAqICAgICBcIm90aGVyXCI6IFwiVGhlcmUgYXJlIGZpbGVzIG9uIERpc2suXCJcblx0ICogICAgIFwiZGVmYXVsdFwiOiBcIlRoZXJlIGFyZSBmaWxlcyBvbiBEaXNrLlwiXG5cdCAqIH0pO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHRleHRcblx0ICogQHJldHVybiB7VHJhbnNsYXRpb25zfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZyBvciBvYmplY3Rcblx0ICovXG5cdHNldFRleHQoa2V5LCB0ZXh0KSB7XG5cdFx0aWYgKGlzU3RyaW5nKHRleHQpIHx8IGlzT2JqZWN0KHRleHQpKSB7XG5cdFx0XHR0aGlzLnN0b3JhZ2Uuc2V0KHZhbGlkYXRlU3RyaW5nKGtleSksIHRleHQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbHVlIGlzIG5vdCBhIHN0cmluZyBvciBvYmplY3RcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gdHJhbnNmZXIgb3ZlcmxheXMgZnJvbSBhbiBvYmplY3QuIFRoZSBrZXlzIGFyZSB0cmFuc2ZlcnJlZCwgYW5kIHRoZSB2YWx1ZXMgYXJlIGVudGVyZWRcblx0ICogYXMgdGV4dC5cblx0ICpcblx0ICogVGhlIHZhbHVlcyBjYW4gZWl0aGVyIGJlIGNoYXJhY3RlciBzdHJpbmdzIG9yLCBpbiB0aGUgY2FzZSBvZiB0ZXh0cyB3aXRoIHBsdXJhbCBmb3Jtcywgb2JqZWN0cy4gVGhlIHBsdXJhbCBmb3Jtc1xuXHQgKiBtdXN0IGJlIHN0b3JlZCBhcyB0ZXh0IHZpYSBhIHN0YW5kYXJkIGtleSBcInplcm9cIiwgXCJvbmVcIiwgXCJ0d29cIiwgXCJmZXdcIiwgXCJtYW55XCIgYW5kIFwib3RoZXJcIi5cblx0ICpcblx0ICogQWRkaXRpb25hbGx5LCB0aGUga2V5IGRlZmF1bHQgY2FuIGJlIHNwZWNpZmllZCwgd2hpY2ggd2lsbCBiZSB1c2VkIGlmIG5vIG90aGVyIGtleSBmaXRzLlxuXHQgKlxuXHQgKiBJbiBzb21lIGxhbmd1YWdlcywgbGlrZSBmb3IgZXhhbXBsZSBpbiBHZXJtYW4sIHRoZXJlIGlzIG5vIG93biBtb3JlIG51bWJlciBhdCB0aGUgdmFsdWUgMC4gSW4gdGhlc2UgbGFuZ3VhZ2VzLFxuXHQgKiB0aGUgZnVuY3Rpb24gYXBwbGllcyBhZGRpdGlvbmFsbHkgemVyby5cblx0ICpcblx0ICogYGBgXG5cdCAqIHRyYW5zbGF0aW9ucy5hc3NpZ25UcmFuc2xhdGlvbnMoe1xuXHQgKiAgIFwidGV4dDFcIjogXCJNYWtlIG15IGRheSFcIixcblx0ICogICBcInRleHQyXCI6IFwiSSdsbCBiZSBiYWNrIVwiLFxuXHQgKiAgIFwidGV4dDZcIjoge1xuXHQgKiAgICAgXCJ6ZXJvXCI6IFwiVGhlcmUgYXJlIG5vIGZpbGVzIG9uIERpc2suXCIsXG5cdCAqICAgICBcIm9uZVwiOiBcIlRoZXJlIGlzIG9uZSBmaWxlIG9uIERpc2suXCIsXG5cdCAqICAgICBcIm90aGVyXCI6IFwiVGhlcmUgYXJlIGZpbGVzIG9uIERpc2suXCJcblx0ICogICAgIFwiZGVmYXVsdFwiOiBcIlRoZXJlIGFyZSBmaWxlcyBvbiBEaXNrLlwiXG5cdCAqIH0pO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IHRyYW5zbGF0aW9uc1xuXHQgKiBAcmV0dXJuIHtUcmFuc2xhdGlvbnN9XG5cdCAqL1xuXHRhc3NpZ25UcmFuc2xhdGlvbnModHJhbnNsYXRpb25zKSB7XG5cdFx0dmFsaWRhdGVPYmplY3QodHJhbnNsYXRpb25zKTtcblxuXHRcdGlmICh0cmFuc2xhdGlvbnMgaW5zdGFuY2VvZiBUcmFuc2xhdGlvbnMpIHtcblx0XHRcdHRyYW5zbGF0aW9ucy5zdG9yYWdlLmZvckVhY2goKHYsIGspID0+IHtcblx0XHRcdFx0dGhpcy5zZXRUZXh0KGssIHYpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh0cmFuc2xhdGlvbnMpKSB7XG5cdFx0XHR0aGlzLnNldFRleHQoaywgdik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSB0cmFuc2xhdGlvbnMgZm9yIHRoZSBjdXJyZW50IGRvY3VtZW50LlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8dW5kZWZpbmVkfSBbZWxlbWVudF0gLSBFbGVtZW50IHRvIHNlYXJjaCBmb3IgdHJhbnNsYXRpb25zLiBEZWZhdWx0OiBlbGVtZW50IHdpdGggb2JqZWN0bGluayBAc2NodWthaS9tb25zdGVyL2kxOG4vdHJhbnNsYXRpb25zQEBsaW5rLlxuICogQHJldHVybiB7VHJhbnNsYXRpb25zfVxuICogQHRocm93cyB7RXJyb3J9IEVsZW1lbnQgaXMgbm90IGFuIEhUTUxFbGVtZW50LlxuICogQHRocm93cyB7RXJyb3J9IENhbm5vdCBmaW5kIHRoZSBlbGVtZW50IHdpdGggdHJhbnNsYXRpb25zLiBBZGQgdGhlIHRyYW5zbGF0aW9uIG9iamVjdCB0byB0aGUgZG9jdW1lbnQuXG4gKiBAdGhyb3dzIHtFcnJvcn0gVGhpcyBlbGVtZW50IGhhcyBubyB0cmFuc2xhdGlvbnMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gTWlzc2luZyB0cmFuc2xhdGlvbnMuXG4gKi9cbmZ1bmN0aW9uIGdldERvY3VtZW50VHJhbnNsYXRpb25zKGVsZW1lbnQpIHtcblx0Y29uc3QgZCA9IGdldERvY3VtZW50KCk7XG5cblx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdGVsZW1lbnQgPSBkLnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRgWyR7QVRUUklCVVRFX09CSkVDVExJTkt9fj1cIiR7dHJhbnNsYXRpb25zTGlua1N5bWJvbC50b1N0cmluZygpfVwiXWAsXG5cdFx0KTtcblx0XHRpZiAoZWxlbWVudCA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcIkNhbm5vdCBmaW5kIHRoZSBlbGVtZW50IHdpdGggdHJhbnNsYXRpb25zLiBBZGQgdGhlIHRyYW5zbGF0aW9uIG9iamVjdCB0byB0aGUgZG9jdW1lbnQuXCIsXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJFbGVtZW50IGlzIG5vdCBhbiBIVE1MRWxlbWVudC5cIik7XG5cdH1cblxuXHRpZiAoIWhhc09iamVjdExpbmsoZWxlbWVudCwgdHJhbnNsYXRpb25zTGlua1N5bWJvbCkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGVsZW1lbnQgaGFzIG5vIHRyYW5zbGF0aW9ucy5cIik7XG5cdH1cblxuXHRjb25zdCBvYmogPSBnZXRMaW5rZWRPYmplY3RzKGVsZW1lbnQsIHRyYW5zbGF0aW9uc0xpbmtTeW1ib2wpO1xuXG5cdGZvciAoY29uc3QgdCBvZiBvYmopIHtcblx0XHRpZiAodCBpbnN0YW5jZW9mIFRyYW5zbGF0aW9ucykge1xuXHRcdFx0cmV0dXJuIHQ7XG5cdFx0fVxuXHR9XG5cblx0dGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyB0cmFuc2xhdGlvbnMuXCIpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmV4cG9ydCB7IGZvcm1hdFRpbWVBZ28gfTtcblxuLyoqXG4gKiBGb3JtYXQgYSBkYXRlIGFzIGEgcmVsYXRpdmUgdGltZSBzdHJpbmcgd2l0aCBtdWx0aXBsZSB1bml0cy5cbiAqXG4gKiBAcGFyYW0gZGF0ZVxuICogQHBhcmFtIGxvY2FsZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZm9ybWF0VGltZUFnbyhkYXRlLCBsb2NhbGUpIHtcblx0Y29uc3Qgbm93ID0gbmV3IERhdGUoTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApICogMTAwMCk7XG5cdGNvbnN0IHJvdW5kZWREYXRlID0gbmV3IERhdGUoTWF0aC5mbG9vcihkYXRlLmdldFRpbWUoKSAvIDEwMDApICogMTAwMCk7XG5cdGNvbnN0IGRpZmZJblNlY29uZHMgPSBNYXRoLmZsb29yKChyb3VuZGVkRGF0ZSAtIG5vdykgLyAxMDAwKTtcblx0Y29uc3QgYWJzRGlmZiA9IE1hdGguYWJzKGRpZmZJblNlY29uZHMpO1xuXG5cdGNvbnN0IHRyYW5zbGF0aW9uID0gdHJhbnNsYXRpb25zW25vcm1hbGl6ZUxvY2FsZShsb2NhbGUpXTtcblxuXHRpZiAoYWJzRGlmZiA9PT0gMCkge1xuXHRcdHJldHVybiB0cmFuc2xhdGlvbi50ZW1wbGF0ZS5qdXN0Tm93KCk7XG5cdH1cblxuXHRpZiAoYWJzRGlmZiA+IDMxNTM2MDAwKSB7XG5cdFx0cmV0dXJuIHRyYW5zbGF0aW9uLnRlbXBsYXRlLm9uKFxuXHRcdFx0bmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCB7XG5cdFx0XHRcdGRhdGVTdHlsZTogXCJmdWxsXCIsXG5cdFx0XHRcdHRpbWVTdHlsZTogXCJzaG9ydFwiLFxuXHRcdFx0fSkuZm9ybWF0KGRhdGUpLFxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCB1bml0cyA9IFtcblx0XHR7IG5hbWU6IFwieWVhclwiLCBsZW5ndGg6IDMxNTM2MDAwIH0sIC8vIEhpbnp1Z2VmXHUwMEZDZ3QgZlx1MDBGQ3IgS29uc2lzdGVueiwgYXVjaCB3ZW5uIG5pY2h0IGdlbnV0enQgaW4gZGllc2VyIHNwZXppZmlzY2hlbiBMb2dpa1xuXHRcdHsgbmFtZTogXCJkYXlcIiwgbGVuZ3RoOiA4NjQwMCB9LFxuXHRcdHsgbmFtZTogXCJob3VyXCIsIGxlbmd0aDogMzYwMCB9LFxuXHRcdHsgbmFtZTogXCJtaW51dGVcIiwgbGVuZ3RoOiA2MCB9LFxuXHRcdHsgbmFtZTogXCJzZWNvbmRcIiwgbGVuZ3RoOiAxIH0sXG5cdF07XG5cblx0bGV0IHJlbWFpbmRlciA9IGFic0RpZmY7XG5cdGNvbnN0IHBhcnRzID0gW107XG5cblx0Zm9yIChjb25zdCB1bml0IG9mIHVuaXRzKSB7XG5cdFx0aWYgKHJlbWFpbmRlciA+PSB1bml0Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgY291bnQgPSBNYXRoLmZsb29yKHJlbWFpbmRlciAvIHVuaXQubGVuZ3RoKTtcblx0XHRcdHJlbWFpbmRlciAlPSB1bml0Lmxlbmd0aDtcblx0XHRcdGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdFVuaXRDb3VudChjb3VudCwgdW5pdC5uYW1lLCBsb2NhbGUpO1xuXHRcdFx0cGFydHMucHVzaChmb3JtYXR0ZWQpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChwYXJ0cy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gdHJhbnNsYXRpb24udGVtcGxhdGUuanVzdE5vdygpO1xuXHR9XG5cblx0Y29uc3Qgam9pbmVkID0gbmV3IEludGwuTGlzdEZvcm1hdChsb2NhbGUsIHtcblx0XHRzdHlsZTogXCJsb25nXCIsXG5cdFx0dHlwZTogXCJjb25qdW5jdGlvblwiLFxuXHR9KS5mb3JtYXQocGFydHMpO1xuXHRpZiAoZGlmZkluU2Vjb25kcyA+IDApIHtcblx0XHRyZXR1cm4gdHJhbnNsYXRpb24udGVtcGxhdGUuZnV0dXJlKGpvaW5lZCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRyYW5zbGF0aW9uLnRlbXBsYXRlLnBhc3Qoam9pbmVkKTtcblx0fVxufVxuXG5mdW5jdGlvbiBmb3JtYXRVbml0Q291bnQoY291bnQsIHVuaXQsIGxvY2FsZSkge1xuXHRjb25zdCBsYW5nID0gbm9ybWFsaXplTG9jYWxlKGxvY2FsZSk7XG5cdGNvbnN0IGZhbGxiYWNrID0gdHJhbnNsYXRpb25zW2xhbmddIHx8IHRyYW5zbGF0aW9uc1tcImVuXCJdO1xuXHRjb25zdCBkaWN0Rm9yVW5pdCA9IGZhbGxiYWNrLnVuaXRzW3VuaXRdO1xuXHRjb25zdCBwciA9IG5ldyBJbnRsLlBsdXJhbFJ1bGVzKGxhbmcpO1xuXHRjb25zdCBjYXRlZ29yeSA9IHByLnNlbGVjdChjb3VudCk7XG5cdGNvbnN0IHBocmFzZSA9IGRpY3RGb3JVbml0W2NhdGVnb3J5XSB8fCBkaWN0Rm9yVW5pdC5vdGhlcjtcblx0cmV0dXJuIGAke2NvdW50fSAke3BocmFzZX1gO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVMb2NhbGUobG9jYWxlKSB7XG5cdHJldHVybiBsb2NhbGUuc3BsaXQoXCItXCIpWzBdLnRvTG93ZXJDYXNlKCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgdHJhbnNsYXRpb25zID0ge1xuXHRlbjoge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgb24gJHt2YWx1ZX1gLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgJHt2YWx1ZX0gYWdvYCxcblx0XHRcdGZ1dHVyZTogKHZhbHVlKSA9PiBgaW4gJHt2YWx1ZX1gLFxuXHRcdFx0anVzdE5vdzogKCkgPT4gYGp1c3Qgbm93YCxcblx0XHR9LFxuXHRcdHVuaXRzOiB7XG5cdFx0XHRkYXk6IHtcblx0XHRcdFx0emVybzogXCJkYXlzXCIsXG5cdFx0XHRcdG9uZTogXCJkYXlcIixcblx0XHRcdFx0dHdvOiBcImRheXNcIixcblx0XHRcdFx0ZmV3OiBcImRheXNcIixcblx0XHRcdFx0bWFueTogXCJkYXlzXCIsXG5cdFx0XHRcdG90aGVyOiBcImRheXNcIixcblx0XHRcdH0sXG5cdFx0XHRob3VyOiB7XG5cdFx0XHRcdHplcm86IFwiaG91cnNcIixcblx0XHRcdFx0b25lOiBcImhvdXJcIixcblx0XHRcdFx0dHdvOiBcImhvdXJzXCIsXG5cdFx0XHRcdGZldzogXCJob3Vyc1wiLFxuXHRcdFx0XHRtYW55OiBcImhvdXJzXCIsXG5cdFx0XHRcdG90aGVyOiBcImhvdXJzXCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwibWludXRlc1wiLFxuXHRcdFx0XHRvbmU6IFwibWludXRlXCIsXG5cdFx0XHRcdHR3bzogXCJtaW51dGVzXCIsXG5cdFx0XHRcdGZldzogXCJtaW51dGVzXCIsXG5cdFx0XHRcdG1hbnk6IFwibWludXRlc1wiLFxuXHRcdFx0XHRvdGhlcjogXCJtaW51dGVzXCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwic2Vjb25kc1wiLFxuXHRcdFx0XHRvbmU6IFwic2Vjb25kXCIsXG5cdFx0XHRcdHR3bzogXCJzZWNvbmRzXCIsXG5cdFx0XHRcdGZldzogXCJzZWNvbmRzXCIsXG5cdFx0XHRcdG1hbnk6IFwic2Vjb25kc1wiLFxuXHRcdFx0XHRvdGhlcjogXCJzZWNvbmRzXCIsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdH0sXG5cblx0emg6IHtcblx0XHR0ZW1wbGF0ZToge1xuXHRcdFx0b246ICh2YWx1ZSkgPT4gYFx1NTcyOCR7dmFsdWV9YCxcblx0XHRcdHBhc3Q6ICh2YWx1ZSkgPT4gYCR7dmFsdWV9XHU1MjREYCxcblx0XHRcdGZ1dHVyZTogKHZhbHVlKSA9PiBgJHt2YWx1ZX1cdTU0MEVgLFxuXHRcdFx0anVzdE5vdzogKCkgPT4gYFx1NTIxQVx1NTIxQWAsXG5cdFx0fSxcblx0XHR1bml0czoge1xuXHRcdFx0ZGF5OiB7XG5cdFx0XHRcdHplcm86IFwiXHU1OTI5XCIsXG5cdFx0XHRcdG9uZTogXCJcdTU5MjlcIixcblx0XHRcdFx0dHdvOiBcIlx1NTkyOVwiLFxuXHRcdFx0XHRmZXc6IFwiXHU1OTI5XCIsXG5cdFx0XHRcdG1hbnk6IFwiXHU1OTI5XCIsXG5cdFx0XHRcdG90aGVyOiBcIlx1NTkyOVwiLFxuXHRcdFx0fSxcblx0XHRcdGhvdXI6IHtcblx0XHRcdFx0emVybzogXCJcdTVDMEZcdTY1RjZcIixcblx0XHRcdFx0b25lOiBcIlx1NUMwRlx1NjVGNlwiLFxuXHRcdFx0XHR0d286IFwiXHU1QzBGXHU2NUY2XCIsXG5cdFx0XHRcdGZldzogXCJcdTVDMEZcdTY1RjZcIixcblx0XHRcdFx0bWFueTogXCJcdTVDMEZcdTY1RjZcIixcblx0XHRcdFx0b3RoZXI6IFwiXHU1QzBGXHU2NUY2XCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwiXHU1MjA2XHU5NDlGXCIsXG5cdFx0XHRcdG9uZTogXCJcdTUyMDZcdTk0OUZcIixcblx0XHRcdFx0dHdvOiBcIlx1NTIwNlx1OTQ5RlwiLFxuXHRcdFx0XHRmZXc6IFwiXHU1MjA2XHU5NDlGXCIsXG5cdFx0XHRcdG1hbnk6IFwiXHU1MjA2XHU5NDlGXCIsXG5cdFx0XHRcdG90aGVyOiBcIlx1NTIwNlx1OTQ5RlwiLFxuXHRcdFx0fSxcblx0XHRcdHNlY29uZDoge1xuXHRcdFx0XHR6ZXJvOiBcIlx1NzlEMlwiLFxuXHRcdFx0XHRvbmU6IFwiXHU3OUQyXCIsXG5cdFx0XHRcdHR3bzogXCJcdTc5RDJcIixcblx0XHRcdFx0ZmV3OiBcIlx1NzlEMlwiLFxuXHRcdFx0XHRtYW55OiBcIlx1NzlEMlwiLFxuXHRcdFx0XHRvdGhlcjogXCJcdTc5RDJcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHRlczoge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgZWwgJHt2YWx1ZX1gLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgaGFjZSAke3ZhbHVlfWAsXG5cdFx0XHRmdXR1cmU6ICh2YWx1ZSkgPT4gYGVuICR7dmFsdWV9YCxcblx0XHRcdGp1c3ROb3c6ICgpID0+IGBqdXN0byBhaG9yYWAsXG5cdFx0fSxcblx0XHR1bml0czoge1xuXHRcdFx0ZGF5OiB7XG5cdFx0XHRcdHplcm86IFwiZFx1MDBFRGFzXCIsXG5cdFx0XHRcdG9uZTogXCJkXHUwMEVEYVwiLFxuXHRcdFx0XHR0d286IFwiZFx1MDBFRGFzXCIsXG5cdFx0XHRcdGZldzogXCJkXHUwMEVEYXNcIixcblx0XHRcdFx0bWFueTogXCJkXHUwMEVEYXNcIixcblx0XHRcdFx0b3RoZXI6IFwiZFx1MDBFRGFzXCIsXG5cdFx0XHR9LFxuXHRcdFx0aG91cjoge1xuXHRcdFx0XHR6ZXJvOiBcImhvcmFzXCIsXG5cdFx0XHRcdG9uZTogXCJob3JhXCIsXG5cdFx0XHRcdHR3bzogXCJob3Jhc1wiLFxuXHRcdFx0XHRmZXc6IFwiaG9yYXNcIixcblx0XHRcdFx0bWFueTogXCJob3Jhc1wiLFxuXHRcdFx0XHRvdGhlcjogXCJob3Jhc1wiLFxuXHRcdFx0fSxcblx0XHRcdG1pbnV0ZToge1xuXHRcdFx0XHR6ZXJvOiBcIm1pbnV0b3NcIixcblx0XHRcdFx0b25lOiBcIm1pbnV0b1wiLFxuXHRcdFx0XHR0d286IFwibWludXRvc1wiLFxuXHRcdFx0XHRmZXc6IFwibWludXRvc1wiLFxuXHRcdFx0XHRtYW55OiBcIm1pbnV0b3NcIixcblx0XHRcdFx0b3RoZXI6IFwibWludXRvc1wiLFxuXHRcdFx0fSxcblx0XHRcdHNlY29uZDoge1xuXHRcdFx0XHR6ZXJvOiBcInNlZ3VuZG9zXCIsXG5cdFx0XHRcdG9uZTogXCJzZWd1bmRvXCIsXG5cdFx0XHRcdHR3bzogXCJzZWd1bmRvc1wiLFxuXHRcdFx0XHRmZXc6IFwic2VndW5kb3NcIixcblx0XHRcdFx0bWFueTogXCJzZWd1bmRvc1wiLFxuXHRcdFx0XHRvdGhlcjogXCJzZWd1bmRvc1wiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXG5cdGRlOiB7XG5cdFx0dGVtcGxhdGU6IHtcblx0XHRcdG9uOiAodmFsdWUpID0+IGBhbSAke3ZhbHVlfWAsXG5cdFx0XHRwYXN0OiAodmFsdWUpID0+IGB2b3IgJHt2YWx1ZX1gLFxuXHRcdFx0ZnV0dXJlOiAodmFsdWUpID0+IGBpbiAke3ZhbHVlfWAsXG5cdFx0XHRqdXN0Tm93OiAoKSA9PiBgZ2VyYWRlIGViZW5gLFxuXHRcdH0sXG5cdFx0dW5pdHM6IHtcblx0XHRcdGRheToge1xuXHRcdFx0XHR6ZXJvOiBcIlRhZ2VuXCIsXG5cdFx0XHRcdG9uZTogXCJUYWdcIixcblx0XHRcdFx0dHdvOiBcIlRhZ2VuXCIsXG5cdFx0XHRcdGZldzogXCJUYWdlblwiLFxuXHRcdFx0XHRtYW55OiBcIlRhZ2VuXCIsXG5cdFx0XHRcdG90aGVyOiBcIlRhZ2VuXCIsXG5cdFx0XHR9LFxuXHRcdFx0aG91cjoge1xuXHRcdFx0XHR6ZXJvOiBcIlN0dW5kZW5cIixcblx0XHRcdFx0b25lOiBcIlN0dW5kZVwiLFxuXHRcdFx0XHR0d286IFwiU3R1bmRlblwiLFxuXHRcdFx0XHRmZXc6IFwiU3R1bmRlblwiLFxuXHRcdFx0XHRtYW55OiBcIlN0dW5kZW5cIixcblx0XHRcdFx0b3RoZXI6IFwiU3R1bmRlblwiLFxuXHRcdFx0fSxcblx0XHRcdG1pbnV0ZToge1xuXHRcdFx0XHR6ZXJvOiBcIk1pbnV0ZW5cIixcblx0XHRcdFx0b25lOiBcIk1pbnV0ZVwiLFxuXHRcdFx0XHR0d286IFwiTWludXRlblwiLFxuXHRcdFx0XHRmZXc6IFwiTWludXRlblwiLFxuXHRcdFx0XHRtYW55OiBcIk1pbnV0ZW5cIixcblx0XHRcdFx0b3RoZXI6IFwiTWludXRlblwiLFxuXHRcdFx0fSxcblx0XHRcdHNlY29uZDoge1xuXHRcdFx0XHR6ZXJvOiBcIlNla3VuZGVuXCIsXG5cdFx0XHRcdG9uZTogXCJTZWt1bmRlXCIsXG5cdFx0XHRcdHR3bzogXCJTZWt1bmRlblwiLFxuXHRcdFx0XHRmZXc6IFwiU2VrdW5kZW5cIixcblx0XHRcdFx0bWFueTogXCJTZWt1bmRlblwiLFxuXHRcdFx0XHRvdGhlcjogXCJTZWt1bmRlblwiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXG5cdGZyOiB7XG5cdFx0dGVtcGxhdGU6IHtcblx0XHRcdG9uOiAodmFsdWUpID0+IGBsZSAke3ZhbHVlfWAsXG5cdFx0XHRwYXN0OiAodmFsdWUpID0+IGBpbCB5IGEgJHt2YWx1ZX1gLFxuXHRcdFx0ZnV0dXJlOiAodmFsdWUpID0+IGBkYW5zICR7dmFsdWV9YCxcblx0XHRcdGp1c3ROb3c6ICgpID0+IGBcdTAwRTAgbCdpbnN0YW50YCxcblx0XHR9LFxuXHRcdHVuaXRzOiB7XG5cdFx0XHRkYXk6IHtcblx0XHRcdFx0emVybzogXCJqb3Vyc1wiLFxuXHRcdFx0XHRvbmU6IFwiam91clwiLFxuXHRcdFx0XHR0d286IFwiam91cnNcIixcblx0XHRcdFx0ZmV3OiBcImpvdXJzXCIsXG5cdFx0XHRcdG1hbnk6IFwiam91cnNcIixcblx0XHRcdFx0b3RoZXI6IFwiam91cnNcIixcblx0XHRcdH0sXG5cdFx0XHRob3VyOiB7XG5cdFx0XHRcdHplcm86IFwiaGV1cmVzXCIsXG5cdFx0XHRcdG9uZTogXCJoZXVyZVwiLFxuXHRcdFx0XHR0d286IFwiaGV1cmVzXCIsXG5cdFx0XHRcdGZldzogXCJoZXVyZXNcIixcblx0XHRcdFx0bWFueTogXCJoZXVyZXNcIixcblx0XHRcdFx0b3RoZXI6IFwiaGV1cmVzXCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwibWludXRlc1wiLFxuXHRcdFx0XHRvbmU6IFwibWludXRlXCIsXG5cdFx0XHRcdHR3bzogXCJtaW51dGVzXCIsXG5cdFx0XHRcdGZldzogXCJtaW51dGVzXCIsXG5cdFx0XHRcdG1hbnk6IFwibWludXRlc1wiLFxuXHRcdFx0XHRvdGhlcjogXCJtaW51dGVzXCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwic2Vjb25kZXNcIixcblx0XHRcdFx0b25lOiBcInNlY29uZGVcIixcblx0XHRcdFx0dHdvOiBcInNlY29uZGVzXCIsXG5cdFx0XHRcdGZldzogXCJzZWNvbmRlc1wiLFxuXHRcdFx0XHRtYW55OiBcInNlY29uZGVzXCIsXG5cdFx0XHRcdG90aGVyOiBcInNlY29uZGVzXCIsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdH0sXG5cblx0cnU6IHtcblx0XHR0ZW1wbGF0ZToge1xuXHRcdFx0b246ICh2YWx1ZSkgPT4gYFx1MDQzRFx1MDQzMCAke3ZhbHVlfWAsXG5cdFx0XHRwYXN0OiAodmFsdWUpID0+IGAke3ZhbHVlfSBcdTA0M0RcdTA0MzBcdTA0MzdcdTA0MzBcdTA0MzRgLFxuXHRcdFx0ZnV0dXJlOiAodmFsdWUpID0+IGBcdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzcgJHt2YWx1ZX1gLFxuXHRcdFx0anVzdE5vdzogKCkgPT4gYFx1MDQ0Mlx1MDQzRVx1MDQzQlx1MDQ0Q1x1MDQzQVx1MDQzRSBcdTA0NDdcdTA0NDJcdTA0M0VgLFxuXHRcdH0sXG5cdFx0dW5pdHM6IHtcblx0XHRcdGRheToge1xuXHRcdFx0XHR6ZXJvOiBcIlx1MDQzNFx1MDQzRFx1MDQzNVx1MDQzOVwiLFxuXHRcdFx0XHRvbmU6IFwiXHUwNDM0XHUwNDM1XHUwNDNEXHUwNDRDXCIsXG5cdFx0XHRcdHR3bzogXCJcdTA0MzRcdTA0M0RcdTA0NEZcIixcblx0XHRcdFx0ZmV3OiBcIlx1MDQzNFx1MDQzRFx1MDQ0RlwiLFxuXHRcdFx0XHRtYW55OiBcIlx1MDQzNFx1MDQzRFx1MDQzNVx1MDQzOVwiLFxuXHRcdFx0XHRvdGhlcjogXCJcdTA0MzRcdTA0M0RcdTA0MzVcdTA0MzlcIixcblx0XHRcdH0sXG5cdFx0XHRob3VyOiB7XG5cdFx0XHRcdHplcm86IFwiXHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDNFXHUwNDMyXCIsXG5cdFx0XHRcdG9uZTogXCJcdTA0NDdcdTA0MzBcdTA0NDFcIixcblx0XHRcdFx0dHdvOiBcIlx1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQzMFwiLFxuXHRcdFx0XHRmZXc6IFwiXHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDMwXCIsXG5cdFx0XHRcdG1hbnk6IFwiXHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDNFXHUwNDMyXCIsXG5cdFx0XHRcdG90aGVyOiBcIlx1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQzRVx1MDQzMlwiLFxuXHRcdFx0fSxcblx0XHRcdG1pbnV0ZToge1xuXHRcdFx0XHR6ZXJvOiBcIlx1MDQzQ1x1MDQzOFx1MDQzRFx1MDQ0M1x1MDQ0MlwiLFxuXHRcdFx0XHRvbmU6IFwiXHUwNDNDXHUwNDM4XHUwNDNEXHUwNDQzXHUwNDQyXHUwNDMwXCIsXG5cdFx0XHRcdHR3bzogXCJcdTA0M0NcdTA0MzhcdTA0M0RcdTA0NDNcdTA0NDJcdTA0NEJcIixcblx0XHRcdFx0ZmV3OiBcIlx1MDQzQ1x1MDQzOFx1MDQzRFx1MDQ0M1x1MDQ0Mlx1MDQ0QlwiLFxuXHRcdFx0XHRtYW55OiBcIlx1MDQzQ1x1MDQzOFx1MDQzRFx1MDQ0M1x1MDQ0MlwiLFxuXHRcdFx0XHRvdGhlcjogXCJcdTA0M0NcdTA0MzhcdTA0M0RcdTA0NDNcdTA0NDJcIixcblx0XHRcdH0sXG5cdFx0XHRzZWNvbmQ6IHtcblx0XHRcdFx0emVybzogXCJcdTA0NDFcdTA0MzVcdTA0M0FcdTA0NDNcdTA0M0RcdTA0MzRcIixcblx0XHRcdFx0b25lOiBcIlx1MDQ0MVx1MDQzNVx1MDQzQVx1MDQ0M1x1MDQzRFx1MDQzNFx1MDQzMFwiLFxuXHRcdFx0XHR0d286IFwiXHUwNDQxXHUwNDM1XHUwNDNBXHUwNDQzXHUwNDNEXHUwNDM0XHUwNDRCXCIsXG5cdFx0XHRcdGZldzogXCJcdTA0NDFcdTA0MzVcdTA0M0FcdTA0NDNcdTA0M0RcdTA0MzRcdTA0NEJcIixcblx0XHRcdFx0bWFueTogXCJcdTA0NDFcdTA0MzVcdTA0M0FcdTA0NDNcdTA0M0RcdTA0MzRcIixcblx0XHRcdFx0b3RoZXI6IFwiXHUwNDQxXHUwNDM1XHUwNDNBXHUwNDQzXHUwNDNEXHUwNDM0XCIsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdH0sXG5cblx0YXI6IHtcblx0XHR0ZW1wbGF0ZToge1xuXHRcdFx0b246ICh2YWx1ZSkgPT4gYFx1MDY0MVx1MDY0QSAke3ZhbHVlfWAsXG5cdFx0XHRwYXN0OiAodmFsdWUpID0+IGBcdTA2NDVcdTA2NDZcdTA2MzAgJHt2YWx1ZX1gLFxuXHRcdFx0ZnV0dXJlOiAodmFsdWUpID0+IGBcdTA2MjhcdTA2MzlcdTA2MkYgJHt2YWx1ZX1gLFxuXHRcdFx0anVzdE5vdzogKCkgPT4gYFx1MDYyN1x1MDY0NFx1MDYyMlx1MDY0NmAsXG5cdFx0fSxcblx0XHR1bml0czoge1xuXHRcdFx0ZGF5OiB7XG5cdFx0XHRcdHplcm86IFwiXHUwNjIzXHUwNjRBXHUwNjI3XHUwNjQ1XCIsXG5cdFx0XHRcdG9uZTogXCJcdTA2NEFcdTA2NDhcdTA2NDVcIixcblx0XHRcdFx0dHdvOiBcIlx1MDY0QVx1MDY0OFx1MDY0NVx1MDY0QVx1MDY0NlwiLFxuXHRcdFx0XHRmZXc6IFwiXHUwNjIzXHUwNjRBXHUwNjI3XHUwNjQ1XCIsXG5cdFx0XHRcdG1hbnk6IFwiXHUwNjIzXHUwNjRBXHUwNjI3XHUwNjQ1XCIsXG5cdFx0XHRcdG90aGVyOiBcIlx1MDYyM1x1MDY0QVx1MDYyN1x1MDY0NVwiLFxuXHRcdFx0fSxcblx0XHRcdGhvdXI6IHtcblx0XHRcdFx0emVybzogXCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MkFcIixcblx0XHRcdFx0b25lOiBcIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOVwiLFxuXHRcdFx0XHR0d286IFwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJBXHUwNjRBXHUwNjQ2XCIsXG5cdFx0XHRcdGZldzogXCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MkFcIixcblx0XHRcdFx0bWFueTogXCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MkFcIixcblx0XHRcdFx0b3RoZXI6IFwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJBXCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwiXHUwNjJGXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyXCIsXG5cdFx0XHRcdG9uZTogXCJcdTA2MkZcdTA2NDJcdTA2NEFcdTA2NDJcdTA2MjlcIixcblx0XHRcdFx0dHdvOiBcIlx1MDYyRlx1MDY0Mlx1MDY0QVx1MDY0Mlx1MDYyQVx1MDY0QVx1MDY0NlwiLFxuXHRcdFx0XHRmZXc6IFwiXHUwNjJGXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyXCIsXG5cdFx0XHRcdG1hbnk6IFwiXHUwNjJGXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyXCIsXG5cdFx0XHRcdG90aGVyOiBcIlx1MDYyRlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MlwiLFxuXHRcdFx0fSxcblx0XHRcdHNlY29uZDoge1xuXHRcdFx0XHR6ZXJvOiBcIlx1MDYyQlx1MDY0OFx1MDYyN1x1MDY0Nlx1MDY0QVwiLFxuXHRcdFx0XHRvbmU6IFwiXHUwNjJCXHUwNjI3XHUwNjQ2XHUwNjRBXHUwNjI5XCIsXG5cdFx0XHRcdHR3bzogXCJcdTA2MkJcdTA2MjdcdTA2NDZcdTA2NEFcdTA2MkFcdTA2NEFcdTA2NDZcIixcblx0XHRcdFx0ZmV3OiBcIlx1MDYyQlx1MDY0OFx1MDYyN1x1MDY0Nlx1MDY0QVwiLFxuXHRcdFx0XHRtYW55OiBcIlx1MDYyQlx1MDY0OFx1MDYyN1x1MDY0Nlx1MDY0QVwiLFxuXHRcdFx0XHRvdGhlcjogXCJcdTA2MkJcdTA2NDhcdTA2MjdcdTA2NDZcdTA2NEFcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHRoaToge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgJHt2YWx1ZX0gXHUwOTE1XHUwOTRCYCxcblx0XHRcdHBhc3Q6ICh2YWx1ZSkgPT4gYCR7dmFsdWV9IFx1MDkyQVx1MDkzOVx1MDkzMlx1MDk0N2AsXG5cdFx0XHRmdXR1cmU6ICh2YWx1ZSkgPT4gYCR7dmFsdWV9IFx1MDkyRVx1MDk0N1x1MDkwMmAsXG5cdFx0XHRqdXN0Tm93OiAoKSA9PiBgXHUwOTA1XHUwOTJEXHUwOTQwYCxcblx0XHR9LFxuXHRcdHVuaXRzOiB7XG5cdFx0XHRkYXk6IHtcblx0XHRcdFx0emVybzogXCJcdTA5MjZcdTA5M0ZcdTA5MjhcIixcblx0XHRcdFx0b25lOiBcIlx1MDkyNlx1MDkzRlx1MDkyOFwiLFxuXHRcdFx0XHR0d286IFwiXHUwOTI2XHUwOTNGXHUwOTI4XCIsXG5cdFx0XHRcdGZldzogXCJcdTA5MjZcdTA5M0ZcdTA5MjhcIixcblx0XHRcdFx0bWFueTogXCJcdTA5MjZcdTA5M0ZcdTA5MjhcIixcblx0XHRcdFx0b3RoZXI6IFwiXHUwOTI2XHUwOTNGXHUwOTI4XCIsXG5cdFx0XHR9LFxuXHRcdFx0aG91cjoge1xuXHRcdFx0XHR6ZXJvOiBcIlx1MDkxOFx1MDkwMlx1MDkxRlx1MDk0N1wiLFxuXHRcdFx0XHRvbmU6IFwiXHUwOTE4XHUwOTAyXHUwOTFGXHUwOTNFXCIsXG5cdFx0XHRcdHR3bzogXCJcdTA5MThcdTA5MDJcdTA5MUZcdTA5NDdcIixcblx0XHRcdFx0ZmV3OiBcIlx1MDkxOFx1MDkwMlx1MDkxRlx1MDk0N1wiLFxuXHRcdFx0XHRtYW55OiBcIlx1MDkxOFx1MDkwMlx1MDkxRlx1MDk0N1wiLFxuXHRcdFx0XHRvdGhlcjogXCJcdTA5MThcdTA5MDJcdTA5MUZcdTA5NDdcIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJcdTA5MkVcdTA5M0ZcdTA5MjhcdTA5MUZcIixcblx0XHRcdFx0b25lOiBcIlx1MDkyRVx1MDkzRlx1MDkyOFx1MDkxRlwiLFxuXHRcdFx0XHR0d286IFwiXHUwOTJFXHUwOTNGXHUwOTI4XHUwOTFGXCIsXG5cdFx0XHRcdGZldzogXCJcdTA5MkVcdTA5M0ZcdTA5MjhcdTA5MUZcIixcblx0XHRcdFx0bWFueTogXCJcdTA5MkVcdTA5M0ZcdTA5MjhcdTA5MUZcIixcblx0XHRcdFx0b3RoZXI6IFwiXHUwOTJFXHUwOTNGXHUwOTI4XHUwOTFGXCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwiXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTIxXCIsXG5cdFx0XHRcdG9uZTogXCJcdTA5MzhcdTA5NDdcdTA5MTVcdTA5MDJcdTA5MjFcIixcblx0XHRcdFx0dHdvOiBcIlx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1MDkyMVwiLFxuXHRcdFx0XHRmZXc6IFwiXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTIxXCIsXG5cdFx0XHRcdG1hbnk6IFwiXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTIxXCIsXG5cdFx0XHRcdG90aGVyOiBcIlx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1MDkyMVwiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXG5cdHB0OiB7XG5cdFx0dGVtcGxhdGU6IHtcblx0XHRcdG9uOiAodmFsdWUpID0+IGBlbSAke3ZhbHVlfWAsXG5cdFx0XHRwYXN0OiAodmFsdWUpID0+IGBoXHUwMEUxICR7dmFsdWV9YCxcblx0XHRcdGZ1dHVyZTogKHZhbHVlKSA9PiBgZW0gJHt2YWx1ZX1gLFxuXHRcdFx0anVzdE5vdzogKCkgPT4gYGFnb3JhIG1lc21vYCxcblx0XHR9LFxuXHRcdHVuaXRzOiB7XG5cdFx0XHRkYXk6IHtcblx0XHRcdFx0emVybzogXCJkaWFzXCIsXG5cdFx0XHRcdG9uZTogXCJkaWFcIixcblx0XHRcdFx0dHdvOiBcImRpYXNcIixcblx0XHRcdFx0ZmV3OiBcImRpYXNcIixcblx0XHRcdFx0bWFueTogXCJkaWFzXCIsXG5cdFx0XHRcdG90aGVyOiBcImRpYXNcIixcblx0XHRcdH0sXG5cdFx0XHRob3VyOiB7XG5cdFx0XHRcdHplcm86IFwiaG9yYXNcIixcblx0XHRcdFx0b25lOiBcImhvcmFcIixcblx0XHRcdFx0dHdvOiBcImhvcmFzXCIsXG5cdFx0XHRcdGZldzogXCJob3Jhc1wiLFxuXHRcdFx0XHRtYW55OiBcImhvcmFzXCIsXG5cdFx0XHRcdG90aGVyOiBcImhvcmFzXCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwibWludXRvc1wiLFxuXHRcdFx0XHRvbmU6IFwibWludXRvXCIsXG5cdFx0XHRcdHR3bzogXCJtaW51dG9zXCIsXG5cdFx0XHRcdGZldzogXCJtaW51dG9zXCIsXG5cdFx0XHRcdG1hbnk6IFwibWludXRvc1wiLFxuXHRcdFx0XHRvdGhlcjogXCJtaW51dG9zXCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwic2VndW5kb3NcIixcblx0XHRcdFx0b25lOiBcInNlZ3VuZG9cIixcblx0XHRcdFx0dHdvOiBcInNlZ3VuZG9zXCIsXG5cdFx0XHRcdGZldzogXCJzZWd1bmRvc1wiLFxuXHRcdFx0XHRtYW55OiBcInNlZ3VuZG9zXCIsXG5cdFx0XHRcdG90aGVyOiBcInNlZ3VuZG9zXCIsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdH0sXG5cblx0amE6IHtcblx0XHR0ZW1wbGF0ZToge1xuXHRcdFx0b246ICh2YWx1ZSkgPT4gYCR7dmFsdWV9XHUzMDZCYCxcblx0XHRcdHBhc3Q6ICh2YWx1ZSkgPT4gYCR7dmFsdWV9XHU1MjREYCxcblx0XHRcdGZ1dHVyZTogKHZhbHVlKSA9PiBgJHt2YWx1ZX1cdTVGOENgLFxuXHRcdFx0anVzdE5vdzogKCkgPT4gYFx1MzA1Rlx1MzA2M1x1MzA1Rlx1NEVDQWAsXG5cdFx0fSxcblx0XHR1bml0czoge1xuXHRcdFx0ZGF5OiB7XG5cdFx0XHRcdHplcm86IFwiXHU2NUU1XCIsXG5cdFx0XHRcdG9uZTogXCJcdTY1RTVcIixcblx0XHRcdFx0dHdvOiBcIlx1NjVFNVwiLFxuXHRcdFx0XHRmZXc6IFwiXHU2NUU1XCIsXG5cdFx0XHRcdG1hbnk6IFwiXHU2NUU1XCIsXG5cdFx0XHRcdG90aGVyOiBcIlx1NjVFNVwiLFxuXHRcdFx0fSxcblx0XHRcdGhvdXI6IHtcblx0XHRcdFx0emVybzogXCJcdTY2NDJcdTk1OTNcIixcblx0XHRcdFx0b25lOiBcIlx1NjY0Mlx1OTU5M1wiLFxuXHRcdFx0XHR0d286IFwiXHU2NjQyXHU5NTkzXCIsXG5cdFx0XHRcdGZldzogXCJcdTY2NDJcdTk1OTNcIixcblx0XHRcdFx0bWFueTogXCJcdTY2NDJcdTk1OTNcIixcblx0XHRcdFx0b3RoZXI6IFwiXHU2NjQyXHU5NTkzXCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwiXHU1MjA2XCIsXG5cdFx0XHRcdG9uZTogXCJcdTUyMDZcIixcblx0XHRcdFx0dHdvOiBcIlx1NTIwNlwiLFxuXHRcdFx0XHRmZXc6IFwiXHU1MjA2XCIsXG5cdFx0XHRcdG1hbnk6IFwiXHU1MjA2XCIsXG5cdFx0XHRcdG90aGVyOiBcIlx1NTIwNlwiLFxuXHRcdFx0fSxcblx0XHRcdHNlY29uZDoge1xuXHRcdFx0XHR6ZXJvOiBcIlx1NzlEMlwiLFxuXHRcdFx0XHRvbmU6IFwiXHU3OUQyXCIsXG5cdFx0XHRcdHR3bzogXCJcdTc5RDJcIixcblx0XHRcdFx0ZmV3OiBcIlx1NzlEMlwiLFxuXHRcdFx0XHRtYW55OiBcIlx1NzlEMlwiLFxuXHRcdFx0XHRvdGhlcjogXCJcdTc5RDJcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHRpdDoge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgaWwgJHt2YWx1ZX1gLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgJHt2YWx1ZX0gZmFgLFxuXHRcdFx0ZnV0dXJlOiAodmFsdWUpID0+IGBpbiAke3ZhbHVlfWAsXG5cdFx0XHRqdXN0Tm93OiAoKSA9PiBgcHJvcHJpbyBvcmFgLFxuXHRcdH0sXG5cdFx0dW5pdHM6IHtcblx0XHRcdGRheToge1xuXHRcdFx0XHR6ZXJvOiBcImdpb3JuaVwiLFxuXHRcdFx0XHRvbmU6IFwiZ2lvcm5vXCIsXG5cdFx0XHRcdHR3bzogXCJnaW9ybmlcIixcblx0XHRcdFx0ZmV3OiBcImdpb3JuaVwiLFxuXHRcdFx0XHRtYW55OiBcImdpb3JuaVwiLFxuXHRcdFx0XHRvdGhlcjogXCJnaW9ybmlcIixcblx0XHRcdH0sXG5cdFx0XHRob3VyOiB7XG5cdFx0XHRcdHplcm86IFwib3JlXCIsXG5cdFx0XHRcdG9uZTogXCJvcmFcIixcblx0XHRcdFx0dHdvOiBcIm9yZVwiLFxuXHRcdFx0XHRmZXc6IFwib3JlXCIsXG5cdFx0XHRcdG1hbnk6IFwib3JlXCIsXG5cdFx0XHRcdG90aGVyOiBcIm9yZVwiLFxuXHRcdFx0fSxcblx0XHRcdG1pbnV0ZToge1xuXHRcdFx0XHR6ZXJvOiBcIm1pbnV0aVwiLFxuXHRcdFx0XHRvbmU6IFwibWludXRvXCIsXG5cdFx0XHRcdHR3bzogXCJtaW51dGlcIixcblx0XHRcdFx0ZmV3OiBcIm1pbnV0aVwiLFxuXHRcdFx0XHRtYW55OiBcIm1pbnV0aVwiLFxuXHRcdFx0XHRvdGhlcjogXCJtaW51dGlcIixcblx0XHRcdH0sXG5cdFx0XHRzZWNvbmQ6IHtcblx0XHRcdFx0emVybzogXCJzZWNvbmRpXCIsXG5cdFx0XHRcdG9uZTogXCJzZWNvbmRvXCIsXG5cdFx0XHRcdHR3bzogXCJzZWNvbmRpXCIsXG5cdFx0XHRcdGZldzogXCJzZWNvbmRpXCIsXG5cdFx0XHRcdG1hbnk6IFwic2Vjb25kaVwiLFxuXHRcdFx0XHRvdGhlcjogXCJzZWNvbmRpXCIsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdH0sXG5cblx0a286IHtcblx0XHR0ZW1wbGF0ZToge1xuXHRcdFx0b246ICh2YWx1ZSkgPT4gYCR7dmFsdWV9XHVDNUQwYCxcblx0XHRcdHBhc3Q6ICh2YWx1ZSkgPT4gYCR7dmFsdWV9IFx1QzgwNGAsXG5cdFx0XHRmdXR1cmU6ICh2YWx1ZSkgPT4gYCR7dmFsdWV9IFx1RDZDNGAsXG5cdFx0XHRqdXN0Tm93OiAoKSA9PiBgXHVCQzI5XHVBRTA4YCxcblx0XHR9LFxuXHRcdHVuaXRzOiB7XG5cdFx0XHRkYXk6IHtcblx0XHRcdFx0emVybzogXCJcdUM3N0NcIixcblx0XHRcdFx0b25lOiBcIlx1Qzc3Q1wiLFxuXHRcdFx0XHR0d286IFwiXHVDNzdDXCIsXG5cdFx0XHRcdGZldzogXCJcdUM3N0NcIixcblx0XHRcdFx0bWFueTogXCJcdUM3N0NcIixcblx0XHRcdFx0b3RoZXI6IFwiXHVDNzdDXCIsXG5cdFx0XHR9LFxuXHRcdFx0aG91cjoge1xuXHRcdFx0XHR6ZXJvOiBcIlx1QzJEQ1x1QUMwNFwiLFxuXHRcdFx0XHRvbmU6IFwiXHVDMkRDXHVBQzA0XCIsXG5cdFx0XHRcdHR3bzogXCJcdUMyRENcdUFDMDRcIixcblx0XHRcdFx0ZmV3OiBcIlx1QzJEQ1x1QUMwNFwiLFxuXHRcdFx0XHRtYW55OiBcIlx1QzJEQ1x1QUMwNFwiLFxuXHRcdFx0XHRvdGhlcjogXCJcdUMyRENcdUFDMDRcIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJcdUJEODRcIixcblx0XHRcdFx0b25lOiBcIlx1QkQ4NFwiLFxuXHRcdFx0XHR0d286IFwiXHVCRDg0XCIsXG5cdFx0XHRcdGZldzogXCJcdUJEODRcIixcblx0XHRcdFx0bWFueTogXCJcdUJEODRcIixcblx0XHRcdFx0b3RoZXI6IFwiXHVCRDg0XCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwiXHVDRDA4XCIsXG5cdFx0XHRcdG9uZTogXCJcdUNEMDhcIixcblx0XHRcdFx0dHdvOiBcIlx1Q0QwOFwiLFxuXHRcdFx0XHRmZXc6IFwiXHVDRDA4XCIsXG5cdFx0XHRcdG1hbnk6IFwiXHVDRDA4XCIsXG5cdFx0XHRcdG90aGVyOiBcIlx1Q0QwOFwiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXG5cdHN3OiB7XG5cdFx0dGVtcGxhdGU6IHtcblx0XHRcdG9uOiAodmFsdWUpID0+IGBrd2EgJHt2YWx1ZX1gLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgJHt2YWx1ZX0gaWxpeW9waXRhYCxcblx0XHRcdGZ1dHVyZTogKHZhbHVlKSA9PiBga2F0aWthICR7dmFsdWV9YCxcblx0XHRcdGp1c3ROb3c6ICgpID0+IGBoaXZpIHB1bmRlYCxcblx0XHR9LFxuXHRcdHVuaXRzOiB7XG5cdFx0XHRkYXk6IHtcblx0XHRcdFx0emVybzogXCJzaWt1XCIsXG5cdFx0XHRcdG9uZTogXCJzaWt1XCIsXG5cdFx0XHRcdHR3bzogXCJzaWt1XCIsXG5cdFx0XHRcdGZldzogXCJzaWt1XCIsXG5cdFx0XHRcdG1hbnk6IFwic2lrdVwiLFxuXHRcdFx0XHRvdGhlcjogXCJzaWt1XCIsXG5cdFx0XHR9LFxuXHRcdFx0aG91cjoge1xuXHRcdFx0XHR6ZXJvOiBcIm1hc2FhXCIsXG5cdFx0XHRcdG9uZTogXCJzYWFcIixcblx0XHRcdFx0dHdvOiBcIm1hc2FhXCIsXG5cdFx0XHRcdGZldzogXCJtYXNhYVwiLFxuXHRcdFx0XHRtYW55OiBcIm1hc2FhXCIsXG5cdFx0XHRcdG90aGVyOiBcIm1hc2FhXCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwiZGFraWthXCIsXG5cdFx0XHRcdG9uZTogXCJkYWtpa2FcIixcblx0XHRcdFx0dHdvOiBcImRha2lrYVwiLFxuXHRcdFx0XHRmZXc6IFwiZGFraWthXCIsXG5cdFx0XHRcdG1hbnk6IFwiZGFraWthXCIsXG5cdFx0XHRcdG90aGVyOiBcImRha2lrYVwiLFxuXHRcdFx0fSxcblx0XHRcdHNlY29uZDoge1xuXHRcdFx0XHR6ZXJvOiBcInNla3VuZGVcIixcblx0XHRcdFx0b25lOiBcInNla3VuZGVcIixcblx0XHRcdFx0dHdvOiBcInNla3VuZGVcIixcblx0XHRcdFx0ZmV3OiBcInNla3VuZGVcIixcblx0XHRcdFx0bWFueTogXCJzZWt1bmRlXCIsXG5cdFx0XHRcdG90aGVyOiBcInNla3VuZGVcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHRubDoge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgb3AgJHt2YWx1ZX1gLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgJHt2YWx1ZX0gZ2VsZWRlbmAsXG5cdFx0XHRmdXR1cmU6ICh2YWx1ZSkgPT4gYG92ZXIgJHt2YWx1ZX1gLFxuXHRcdFx0anVzdE5vdzogKCkgPT4gYG5ldGAsXG5cdFx0fSxcblx0XHR1bml0czoge1xuXHRcdFx0ZGF5OiB7XG5cdFx0XHRcdHplcm86IFwiZGFnZW5cIixcblx0XHRcdFx0b25lOiBcImRhZ1wiLFxuXHRcdFx0XHR0d286IFwiZGFnZW5cIixcblx0XHRcdFx0ZmV3OiBcImRhZ2VuXCIsXG5cdFx0XHRcdG1hbnk6IFwiZGFnZW5cIixcblx0XHRcdFx0b3RoZXI6IFwiZGFnZW5cIixcblx0XHRcdH0sXG5cdFx0XHRob3VyOiB7XG5cdFx0XHRcdHplcm86IFwidXJlblwiLFxuXHRcdFx0XHRvbmU6IFwidXVyXCIsXG5cdFx0XHRcdHR3bzogXCJ1cmVuXCIsXG5cdFx0XHRcdGZldzogXCJ1cmVuXCIsXG5cdFx0XHRcdG1hbnk6IFwidXJlblwiLFxuXHRcdFx0XHRvdGhlcjogXCJ1cmVuXCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwibWludXRlblwiLFxuXHRcdFx0XHRvbmU6IFwibWludXV0XCIsXG5cdFx0XHRcdHR3bzogXCJtaW51dGVuXCIsXG5cdFx0XHRcdGZldzogXCJtaW51dGVuXCIsXG5cdFx0XHRcdG1hbnk6IFwibWludXRlblwiLFxuXHRcdFx0XHRvdGhlcjogXCJtaW51dGVuXCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwic2Vjb25kZW5cIixcblx0XHRcdFx0b25lOiBcInNlY29uZGVcIixcblx0XHRcdFx0dHdvOiBcInNlY29uZGVuXCIsXG5cdFx0XHRcdGZldzogXCJzZWNvbmRlblwiLFxuXHRcdFx0XHRtYW55OiBcInNlY29uZGVuXCIsXG5cdFx0XHRcdG90aGVyOiBcInNlY29uZGVuXCIsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdH0sXG5cblx0bXM6IHtcblx0XHR0ZW1wbGF0ZToge1xuXHRcdFx0b246ICh2YWx1ZSkgPT4gYHBhZGEgJHt2YWx1ZX1gLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgJHt2YWx1ZX0geWFuZyBsYWx1YCxcblx0XHRcdGZ1dHVyZTogKHZhbHVlKSA9PiBgJHt2YWx1ZX0gbGFnaWAsXG5cdFx0XHRqdXN0Tm93OiAoKSA9PiBgdGFkaWAsXG5cdFx0fSxcblx0XHR1bml0czoge1xuXHRcdFx0ZGF5OiB7XG5cdFx0XHRcdHplcm86IFwiaGFyaVwiLFxuXHRcdFx0XHRvbmU6IFwiaGFyaVwiLFxuXHRcdFx0XHR0d286IFwiaGFyaVwiLFxuXHRcdFx0XHRmZXc6IFwiaGFyaVwiLFxuXHRcdFx0XHRtYW55OiBcImhhcmlcIixcblx0XHRcdFx0b3RoZXI6IFwiaGFyaVwiLFxuXHRcdFx0fSxcblx0XHRcdGhvdXI6IHtcblx0XHRcdFx0emVybzogXCJqYW1cIixcblx0XHRcdFx0b25lOiBcImphbVwiLFxuXHRcdFx0XHR0d286IFwiamFtXCIsXG5cdFx0XHRcdGZldzogXCJqYW1cIixcblx0XHRcdFx0bWFueTogXCJqYW1cIixcblx0XHRcdFx0b3RoZXI6IFwiamFtXCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwibWluaXRcIixcblx0XHRcdFx0b25lOiBcIm1pbml0XCIsXG5cdFx0XHRcdHR3bzogXCJtaW5pdFwiLFxuXHRcdFx0XHRmZXc6IFwibWluaXRcIixcblx0XHRcdFx0bWFueTogXCJtaW5pdFwiLFxuXHRcdFx0XHRvdGhlcjogXCJtaW5pdFwiLFxuXHRcdFx0fSxcblx0XHRcdHNlY29uZDoge1xuXHRcdFx0XHR6ZXJvOiBcInNhYXRcIixcblx0XHRcdFx0b25lOiBcInNhYXRcIixcblx0XHRcdFx0dHdvOiBcInNhYXRcIixcblx0XHRcdFx0ZmV3OiBcInNhYXRcIixcblx0XHRcdFx0bWFueTogXCJzYWF0XCIsXG5cdFx0XHRcdG90aGVyOiBcInNhYXRcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHRpZDoge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgcGFkYSAke3ZhbHVlfWAsXG5cdFx0XHRwYXN0OiAodmFsdWUpID0+IGAke3ZhbHVlfSB5YW5nIGxhbHVgLFxuXHRcdFx0ZnV0dXJlOiAodmFsdWUpID0+IGBkYWxhbSAke3ZhbHVlfWAsXG5cdFx0XHRqdXN0Tm93OiAoKSA9PiBgdGFkaWAsXG5cdFx0fSxcblx0XHR1bml0czoge1xuXHRcdFx0ZGF5OiB7XG5cdFx0XHRcdHplcm86IFwiaGFyaVwiLFxuXHRcdFx0XHRvbmU6IFwiaGFyaVwiLFxuXHRcdFx0XHR0d286IFwiaGFyaVwiLFxuXHRcdFx0XHRmZXc6IFwiaGFyaVwiLFxuXHRcdFx0XHRtYW55OiBcImhhcmlcIixcblx0XHRcdFx0b3RoZXI6IFwiaGFyaVwiLFxuXHRcdFx0fSxcblx0XHRcdGhvdXI6IHtcblx0XHRcdFx0emVybzogXCJqYW1cIixcblx0XHRcdFx0b25lOiBcImphbVwiLFxuXHRcdFx0XHR0d286IFwiamFtXCIsXG5cdFx0XHRcdGZldzogXCJqYW1cIixcblx0XHRcdFx0bWFueTogXCJqYW1cIixcblx0XHRcdFx0b3RoZXI6IFwiamFtXCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwibWVuaXRcIixcblx0XHRcdFx0b25lOiBcIm1lbml0XCIsXG5cdFx0XHRcdHR3bzogXCJtZW5pdFwiLFxuXHRcdFx0XHRmZXc6IFwibWVuaXRcIixcblx0XHRcdFx0bWFueTogXCJtZW5pdFwiLFxuXHRcdFx0XHRvdGhlcjogXCJtZW5pdFwiLFxuXHRcdFx0fSxcblx0XHRcdHNlY29uZDoge1xuXHRcdFx0XHR6ZXJvOiBcImRldGlrXCIsXG5cdFx0XHRcdG9uZTogXCJkZXRpa1wiLFxuXHRcdFx0XHR0d286IFwiZGV0aWtcIixcblx0XHRcdFx0ZmV3OiBcImRldGlrXCIsXG5cdFx0XHRcdG1hbnk6IFwiZGV0aWtcIixcblx0XHRcdFx0b3RoZXI6IFwiZGV0aWtcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHR0cjoge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgJHt2YWx1ZX0gdGFyaWhpbmRlYCxcblx0XHRcdHBhc3Q6ICh2YWx1ZSkgPT4gYCR7dmFsdWV9IFx1MDBGNm5jZWAsXG5cdFx0XHRmdXR1cmU6ICh2YWx1ZSkgPT4gYCR7dmFsdWV9IHNvbnJhYCxcblx0XHRcdGp1c3ROb3c6ICgpID0+IGBheiBcdTAwRjZuY2VgLFxuXHRcdH0sXG5cdFx0dW5pdHM6IHtcblx0XHRcdGRheToge1xuXHRcdFx0XHR6ZXJvOiBcImdcdTAwRkNubGVyXCIsXG5cdFx0XHRcdG9uZTogXCJnXHUwMEZDblwiLFxuXHRcdFx0XHR0d286IFwiZ1x1MDBGQ25cIixcblx0XHRcdFx0ZmV3OiBcImdcdTAwRkNuXCIsXG5cdFx0XHRcdG1hbnk6IFwiZ1x1MDBGQ25cIixcblx0XHRcdFx0b3RoZXI6IFwiZ1x1MDBGQ25cIixcblx0XHRcdH0sXG5cdFx0XHRob3VyOiB7XG5cdFx0XHRcdHplcm86IFwic2FhdGxlclwiLFxuXHRcdFx0XHRvbmU6IFwic2FhdFwiLFxuXHRcdFx0XHR0d286IFwic2FhdFwiLFxuXHRcdFx0XHRmZXc6IFwic2FhdFwiLFxuXHRcdFx0XHRtYW55OiBcInNhYXRcIixcblx0XHRcdFx0b3RoZXI6IFwic2FhdFwiLFxuXHRcdFx0fSxcblx0XHRcdG1pbnV0ZToge1xuXHRcdFx0XHR6ZXJvOiBcImRha2lrYWxhclwiLFxuXHRcdFx0XHRvbmU6IFwiZGFraWthXCIsXG5cdFx0XHRcdHR3bzogXCJkYWtpa2FcIixcblx0XHRcdFx0ZmV3OiBcImRha2lrYVwiLFxuXHRcdFx0XHRtYW55OiBcImRha2lrYVwiLFxuXHRcdFx0XHRvdGhlcjogXCJkYWtpa2FcIixcblx0XHRcdH0sXG5cdFx0XHRzZWNvbmQ6IHtcblx0XHRcdFx0emVybzogXCJzYW5peWVsZXJcIixcblx0XHRcdFx0b25lOiBcInNhbml5ZVwiLFxuXHRcdFx0XHR0d286IFwic2FuaXllXCIsXG5cdFx0XHRcdGZldzogXCJzYW5peWVcIixcblx0XHRcdFx0bWFueTogXCJzYW5peWVcIixcblx0XHRcdFx0b3RoZXI6IFwic2FuaXllXCIsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdH0sXG5cblx0cGw6IHtcblx0XHR0ZW1wbGF0ZToge1xuXHRcdFx0b246ICh2YWx1ZSkgPT4gYHcgZG5pdSAke3ZhbHVlfWAsXG5cdFx0XHRwYXN0OiAodmFsdWUpID0+IGAke3ZhbHVlfSB0ZW11YCxcblx0XHRcdGZ1dHVyZTogKHZhbHVlKSA9PiBgemEgJHt2YWx1ZX1gLFxuXHRcdFx0anVzdE5vdzogKCkgPT4gYHByemVkIGNod2lsXHUwMTA1YCxcblx0XHR9LFxuXHRcdHVuaXRzOiB7XG5cdFx0XHRkYXk6IHtcblx0XHRcdFx0emVybzogXCJkbmlcIixcblx0XHRcdFx0b25lOiBcImR6aWVcdTAxNDRcIixcblx0XHRcdFx0dHdvOiBcImRuaVwiLFxuXHRcdFx0XHRmZXc6IFwiZG5pXCIsXG5cdFx0XHRcdG1hbnk6IFwiZG5pXCIsXG5cdFx0XHRcdG90aGVyOiBcImRuaVwiLFxuXHRcdFx0fSxcblx0XHRcdGhvdXI6IHtcblx0XHRcdFx0emVybzogXCJnb2R6aW5cIixcblx0XHRcdFx0b25lOiBcImdvZHppbmFcIixcblx0XHRcdFx0dHdvOiBcImdvZHppbnlcIixcblx0XHRcdFx0ZmV3OiBcImdvZHppbnlcIixcblx0XHRcdFx0bWFueTogXCJnb2R6aW5cIixcblx0XHRcdFx0b3RoZXI6IFwiZ29kemluXCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwibWludXRcIixcblx0XHRcdFx0b25lOiBcIm1pbnV0YVwiLFxuXHRcdFx0XHR0d286IFwibWludXR5XCIsXG5cdFx0XHRcdGZldzogXCJtaW51dHlcIixcblx0XHRcdFx0bWFueTogXCJtaW51dFwiLFxuXHRcdFx0XHRvdGhlcjogXCJtaW51dFwiLFxuXHRcdFx0fSxcblx0XHRcdHNlY29uZDoge1xuXHRcdFx0XHR6ZXJvOiBcInNla3VuZFwiLFxuXHRcdFx0XHRvbmU6IFwic2VrdW5kYVwiLFxuXHRcdFx0XHR0d286IFwic2VrdW5keVwiLFxuXHRcdFx0XHRmZXc6IFwic2VrdW5keVwiLFxuXHRcdFx0XHRtYW55OiBcInNla3VuZFwiLFxuXHRcdFx0XHRvdGhlcjogXCJzZWt1bmRcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHRzdjoge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgZGVuICR7dmFsdWV9YCxcblx0XHRcdHBhc3Q6ICh2YWx1ZSkgPT4gYGZcdTAwRjZyICR7dmFsdWV9IHNlZGFuYCxcblx0XHRcdGZ1dHVyZTogKHZhbHVlKSA9PiBgb20gJHt2YWx1ZX1gLFxuXHRcdFx0anVzdE5vdzogKCkgPT4gYG55c3NgLFxuXHRcdH0sXG5cdFx0dW5pdHM6IHtcblx0XHRcdGRheToge1xuXHRcdFx0XHR6ZXJvOiBcImRhZ2FyXCIsXG5cdFx0XHRcdG9uZTogXCJkYWdcIixcblx0XHRcdFx0dHdvOiBcImRhZ2FyXCIsXG5cdFx0XHRcdGZldzogXCJkYWdhclwiLFxuXHRcdFx0XHRtYW55OiBcImRhZ2FyXCIsXG5cdFx0XHRcdG90aGVyOiBcImRhZ2FyXCIsXG5cdFx0XHR9LFxuXHRcdFx0aG91cjoge1xuXHRcdFx0XHR6ZXJvOiBcInRpbW1hclwiLFxuXHRcdFx0XHRvbmU6IFwidGltbWVcIixcblx0XHRcdFx0dHdvOiBcInRpbW1hclwiLFxuXHRcdFx0XHRmZXc6IFwidGltbWFyXCIsXG5cdFx0XHRcdG1hbnk6IFwidGltbWFyXCIsXG5cdFx0XHRcdG90aGVyOiBcInRpbW1hclwiLFxuXHRcdFx0fSxcblx0XHRcdG1pbnV0ZToge1xuXHRcdFx0XHR6ZXJvOiBcIm1pbnV0ZXJcIixcblx0XHRcdFx0b25lOiBcIm1pbnV0XCIsXG5cdFx0XHRcdHR3bzogXCJtaW51dGVyXCIsXG5cdFx0XHRcdGZldzogXCJtaW51dGVyXCIsXG5cdFx0XHRcdG1hbnk6IFwibWludXRlclwiLFxuXHRcdFx0XHRvdGhlcjogXCJtaW51dGVyXCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwic2VrdW5kZXJcIixcblx0XHRcdFx0b25lOiBcInNla3VuZFwiLFxuXHRcdFx0XHR0d286IFwic2VrdW5kZXJcIixcblx0XHRcdFx0ZmV3OiBcInNla3VuZGVyXCIsXG5cdFx0XHRcdG1hbnk6IFwic2VrdW5kZXJcIixcblx0XHRcdFx0b3RoZXI6IFwic2VrdW5kZXJcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHRybzoge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgcGUgJHt2YWx1ZX1gLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgYWN1bSAke3ZhbHVlfWAsXG5cdFx0XHRmdXR1cmU6ICh2YWx1ZSkgPT4gYHBlc3RlICR7dmFsdWV9YCxcblx0XHRcdGp1c3ROb3c6ICgpID0+IGBjaGlhciBhY3VtYCxcblx0XHR9LFxuXHRcdHVuaXRzOiB7XG5cdFx0XHRkYXk6IHtcblx0XHRcdFx0emVybzogXCJ6aWxlXCIsXG5cdFx0XHRcdG9uZTogXCJ6aVwiLFxuXHRcdFx0XHR0d286IFwiemlsZVwiLFxuXHRcdFx0XHRmZXc6IFwiemlsZVwiLFxuXHRcdFx0XHRtYW55OiBcInppbGVcIixcblx0XHRcdFx0b3RoZXI6IFwiemlsZVwiLFxuXHRcdFx0fSxcblx0XHRcdGhvdXI6IHtcblx0XHRcdFx0emVybzogXCJvcmVcIixcblx0XHRcdFx0b25lOiBcIm9yXHUwMTAzXCIsXG5cdFx0XHRcdHR3bzogXCJvcmVcIixcblx0XHRcdFx0ZmV3OiBcIm9yZVwiLFxuXHRcdFx0XHRtYW55OiBcIm9yZVwiLFxuXHRcdFx0XHRvdGhlcjogXCJvcmVcIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJtaW51dGVcIixcblx0XHRcdFx0b25lOiBcIm1pbnV0XCIsXG5cdFx0XHRcdHR3bzogXCJtaW51dGVcIixcblx0XHRcdFx0ZmV3OiBcIm1pbnV0ZVwiLFxuXHRcdFx0XHRtYW55OiBcIm1pbnV0ZVwiLFxuXHRcdFx0XHRvdGhlcjogXCJtaW51dGVcIixcblx0XHRcdH0sXG5cdFx0XHRzZWNvbmQ6IHtcblx0XHRcdFx0emVybzogXCJzZWN1bmRlXCIsXG5cdFx0XHRcdG9uZTogXCJzZWN1bmRcdTAxMDNcIixcblx0XHRcdFx0dHdvOiBcInNlY3VuZGVcIixcblx0XHRcdFx0ZmV3OiBcInNlY3VuZGVcIixcblx0XHRcdFx0bWFueTogXCJzZWN1bmRlXCIsXG5cdFx0XHRcdG90aGVyOiBcInNlY3VuZGVcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHRiZzoge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgXHUwNDNEXHUwNDMwICR7dmFsdWV9YCxcblx0XHRcdHBhc3Q6ICh2YWx1ZSkgPT4gYFx1MDQzRlx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzOCAke3ZhbHVlfWAsXG5cdFx0XHRmdXR1cmU6ICh2YWx1ZSkgPT4gYFx1MDQ0MVx1MDQzQlx1MDQzNVx1MDQzNCAke3ZhbHVlfWAsXG5cdFx0XHRqdXN0Tm93OiAoKSA9PiBgXHUwNDQyXHUwNDNFXHUwNDNBXHUwNDQzLVx1MDQ0OVx1MDQzRWAsXG5cdFx0fSxcblx0XHR1bml0czoge1xuXHRcdFx0ZGF5OiB7XG5cdFx0XHRcdHplcm86IFwiXHUwNDM0XHUwNDNEXHUwNDM4XCIsXG5cdFx0XHRcdG9uZTogXCJcdTA0MzRcdTA0MzVcdTA0M0RcIixcblx0XHRcdFx0dHdvOiBcIlx1MDQzNFx1MDQzRFx1MDQzOFwiLFxuXHRcdFx0XHRmZXc6IFwiXHUwNDM0XHUwNDNEXHUwNDM4XCIsXG5cdFx0XHRcdG1hbnk6IFwiXHUwNDM0XHUwNDNEXHUwNDM4XCIsXG5cdFx0XHRcdG90aGVyOiBcIlx1MDQzNFx1MDQzRFx1MDQzOFwiLFxuXHRcdFx0fSxcblx0XHRcdGhvdXI6IHtcblx0XHRcdFx0emVybzogXCJcdTA0NDdcdTA0MzBcdTA0NDFcdTA0MzBcIixcblx0XHRcdFx0b25lOiBcIlx1MDQ0N1x1MDQzMFx1MDQ0MVwiLFxuXHRcdFx0XHR0d286IFwiXHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDMwXCIsXG5cdFx0XHRcdGZldzogXCJcdTA0NDdcdTA0MzBcdTA0NDFcdTA0MzBcIixcblx0XHRcdFx0bWFueTogXCJcdTA0NDdcdTA0MzBcdTA0NDFcdTA0MzBcIixcblx0XHRcdFx0b3RoZXI6IFwiXHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDMwXCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwiXHUwNDNDXHUwNDM4XHUwNDNEXHUwNDQzXHUwNDQyXHUwNDM4XCIsXG5cdFx0XHRcdG9uZTogXCJcdTA0M0NcdTA0MzhcdTA0M0RcdTA0NDNcdTA0NDJcdTA0MzBcIixcblx0XHRcdFx0dHdvOiBcIlx1MDQzQ1x1MDQzOFx1MDQzRFx1MDQ0M1x1MDQ0Mlx1MDQzOFwiLFxuXHRcdFx0XHRmZXc6IFwiXHUwNDNDXHUwNDM4XHUwNDNEXHUwNDQzXHUwNDQyXHUwNDM4XCIsXG5cdFx0XHRcdG1hbnk6IFwiXHUwNDNDXHUwNDM4XHUwNDNEXHUwNDQzXHUwNDQyXHUwNDM4XCIsXG5cdFx0XHRcdG90aGVyOiBcIlx1MDQzQ1x1MDQzOFx1MDQzRFx1MDQ0M1x1MDQ0Mlx1MDQzOFwiLFxuXHRcdFx0fSxcblx0XHRcdHNlY29uZDoge1xuXHRcdFx0XHR6ZXJvOiBcIlx1MDQ0MVx1MDQzNVx1MDQzQVx1MDQ0M1x1MDQzRFx1MDQzNFx1MDQzOFwiLFxuXHRcdFx0XHRvbmU6IFwiXHUwNDQxXHUwNDM1XHUwNDNBXHUwNDQzXHUwNDNEXHUwNDM0XHUwNDMwXCIsXG5cdFx0XHRcdHR3bzogXCJcdTA0NDFcdTA0MzVcdTA0M0FcdTA0NDNcdTA0M0RcdTA0MzRcdTA0MzhcIixcblx0XHRcdFx0ZmV3OiBcIlx1MDQ0MVx1MDQzNVx1MDQzQVx1MDQ0M1x1MDQzRFx1MDQzNFx1MDQzOFwiLFxuXHRcdFx0XHRtYW55OiBcIlx1MDQ0MVx1MDQzNVx1MDQzQVx1MDQ0M1x1MDQzRFx1MDQzNFx1MDQzOFwiLFxuXHRcdFx0XHRvdGhlcjogXCJcdTA0NDFcdTA0MzVcdTA0M0FcdTA0NDNcdTA0M0RcdTA0MzRcdTA0MzhcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHRkYToge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgZGVuICR7dmFsdWV9YCxcblx0XHRcdHBhc3Q6ICh2YWx1ZSkgPT4gYGZvciAke3ZhbHVlfSBzaWRlbmAsXG5cdFx0XHRmdXR1cmU6ICh2YWx1ZSkgPT4gYG9tICR7dmFsdWV9YCxcblx0XHRcdGp1c3ROb3c6ICgpID0+IGBsaWdlIG51YCxcblx0XHR9LFxuXHRcdHVuaXRzOiB7XG5cdFx0XHRkYXk6IHtcblx0XHRcdFx0emVybzogXCJkYWdlXCIsXG5cdFx0XHRcdG9uZTogXCJkYWdcIixcblx0XHRcdFx0dHdvOiBcImRhZ2VcIixcblx0XHRcdFx0ZmV3OiBcImRhZ2VcIixcblx0XHRcdFx0bWFueTogXCJkYWdlXCIsXG5cdFx0XHRcdG90aGVyOiBcImRhZ2VcIixcblx0XHRcdH0sXG5cdFx0XHRob3VyOiB7XG5cdFx0XHRcdHplcm86IFwidGltZXJcIixcblx0XHRcdFx0b25lOiBcInRpbWVcIixcblx0XHRcdFx0dHdvOiBcInRpbWVyXCIsXG5cdFx0XHRcdGZldzogXCJ0aW1lclwiLFxuXHRcdFx0XHRtYW55OiBcInRpbWVyXCIsXG5cdFx0XHRcdG90aGVyOiBcInRpbWVyXCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwibWludXR0ZXJcIixcblx0XHRcdFx0b25lOiBcIm1pbnV0XCIsXG5cdFx0XHRcdHR3bzogXCJtaW51dHRlclwiLFxuXHRcdFx0XHRmZXc6IFwibWludXR0ZXJcIixcblx0XHRcdFx0bWFueTogXCJtaW51dHRlclwiLFxuXHRcdFx0XHRvdGhlcjogXCJtaW51dHRlclwiLFxuXHRcdFx0fSxcblx0XHRcdHNlY29uZDoge1xuXHRcdFx0XHR6ZXJvOiBcInNla3VuZGVyXCIsXG5cdFx0XHRcdG9uZTogXCJzZWt1bmRcIixcblx0XHRcdFx0dHdvOiBcInNla3VuZGVyXCIsXG5cdFx0XHRcdGZldzogXCJzZWt1bmRlclwiLFxuXHRcdFx0XHRtYW55OiBcInNla3VuZGVyXCIsXG5cdFx0XHRcdG90aGVyOiBcInNla3VuZGVyXCIsXG5cdFx0XHR9LFxuXHRcdH0sXG5cdH0sXG5cblx0Zmk6IHtcblx0XHR0ZW1wbGF0ZToge1xuXHRcdFx0b246ICh2YWx1ZSkgPT4gYHBcdTAwRTRpdlx1MDBFNG5cdTAwRTQgJHt2YWx1ZX1gLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgJHt2YWx1ZX0gc2l0dGVuYCxcblx0XHRcdGZ1dHVyZTogKHZhbHVlKSA9PiBgJHt2YWx1ZX0ga3VsdXR0dWFgLFxuXHRcdFx0anVzdE5vdzogKCkgPT4gYGp1dXJpIG55dGAsXG5cdFx0fSxcblx0XHR1bml0czoge1xuXHRcdFx0ZGF5OiB7XG5cdFx0XHRcdHplcm86IFwicFx1MDBFNGl2XHUwMEU0XHUwMEU0XCIsXG5cdFx0XHRcdG9uZTogXCJwXHUwMEU0aXZcdTAwRTRcIixcblx0XHRcdFx0dHdvOiBcInBcdTAwRTRpdlx1MDBFNFx1MDBFNFwiLFxuXHRcdFx0XHRmZXc6IFwicFx1MDBFNGl2XHUwMEU0XHUwMEU0XCIsXG5cdFx0XHRcdG1hbnk6IFwicFx1MDBFNGl2XHUwMEU0XHUwMEU0XCIsXG5cdFx0XHRcdG90aGVyOiBcInBcdTAwRTRpdlx1MDBFNFx1MDBFNFwiLFxuXHRcdFx0fSxcblx0XHRcdGhvdXI6IHtcblx0XHRcdFx0emVybzogXCJ0dW50aWFcIixcblx0XHRcdFx0b25lOiBcInR1bnRpXCIsXG5cdFx0XHRcdHR3bzogXCJ0dW50aWFcIixcblx0XHRcdFx0ZmV3OiBcInR1bnRpYVwiLFxuXHRcdFx0XHRtYW55OiBcInR1bnRpYVwiLFxuXHRcdFx0XHRvdGhlcjogXCJ0dW50aWFcIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJtaW51dXR0aWFcIixcblx0XHRcdFx0b25lOiBcIm1pbnV1dHRpXCIsXG5cdFx0XHRcdHR3bzogXCJtaW51dXR0aWFcIixcblx0XHRcdFx0ZmV3OiBcIm1pbnV1dHRpYVwiLFxuXHRcdFx0XHRtYW55OiBcIm1pbnV1dHRpYVwiLFxuXHRcdFx0XHRvdGhlcjogXCJtaW51dXR0aWFcIixcblx0XHRcdH0sXG5cdFx0XHRzZWNvbmQ6IHtcblx0XHRcdFx0emVybzogXCJzZWt1bnRpYVwiLFxuXHRcdFx0XHRvbmU6IFwic2VrdW50aVwiLFxuXHRcdFx0XHR0d286IFwic2VrdW50aWFcIixcblx0XHRcdFx0ZmV3OiBcInNla3VudGlhXCIsXG5cdFx0XHRcdG1hbnk6IFwic2VrdW50aWFcIixcblx0XHRcdFx0b3RoZXI6IFwic2VrdW50aWFcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHRjczoge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgZG5lICR7dmFsdWV9YCxcblx0XHRcdHBhc3Q6ICh2YWx1ZSkgPT4gYHBcdTAxNTllZCAke3ZhbHVlfWAsXG5cdFx0XHRmdXR1cmU6ICh2YWx1ZSkgPT4gYHphICR7dmFsdWV9YCxcblx0XHRcdGp1c3ROb3c6ICgpID0+IGBwclx1MDBFMXZcdTAxMUIgdGVcdTAxMEZgLFxuXHRcdH0sXG5cdFx0dW5pdHM6IHtcblx0XHRcdGRheToge1xuXHRcdFx0XHR6ZXJvOiBcImRueVwiLFxuXHRcdFx0XHRvbmU6IFwiZGVuXCIsXG5cdFx0XHRcdHR3bzogXCJkbnlcIixcblx0XHRcdFx0ZmV3OiBcImRueVwiLFxuXHRcdFx0XHRtYW55OiBcImRuXHUwMTZGXCIsXG5cdFx0XHRcdG90aGVyOiBcImRueVwiLFxuXHRcdFx0fSxcblx0XHRcdGhvdXI6IHtcblx0XHRcdFx0emVybzogXCJob2RpblwiLFxuXHRcdFx0XHRvbmU6IFwiaG9kaW5hXCIsXG5cdFx0XHRcdHR3bzogXCJob2RpbnlcIixcblx0XHRcdFx0ZmV3OiBcImhvZGlueVwiLFxuXHRcdFx0XHRtYW55OiBcImhvZGluXCIsXG5cdFx0XHRcdG90aGVyOiBcImhvZGluXCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwibWludXRcIixcblx0XHRcdFx0b25lOiBcIm1pbnV0YVwiLFxuXHRcdFx0XHR0d286IFwibWludXR5XCIsXG5cdFx0XHRcdGZldzogXCJtaW51dHlcIixcblx0XHRcdFx0bWFueTogXCJtaW51dFwiLFxuXHRcdFx0XHRvdGhlcjogXCJtaW51dFwiLFxuXHRcdFx0fSxcblx0XHRcdHNlY29uZDoge1xuXHRcdFx0XHR6ZXJvOiBcInNla3VuZFwiLFxuXHRcdFx0XHRvbmU6IFwic2VrdW5kYVwiLFxuXHRcdFx0XHR0d286IFwic2VrdW5keVwiLFxuXHRcdFx0XHRmZXc6IFwic2VrdW5keVwiLFxuXHRcdFx0XHRtYW55OiBcInNla3VuZFwiLFxuXHRcdFx0XHRvdGhlcjogXCJzZWt1bmRcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHRlbDoge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgXHUwM0MzXHUwM0M0XHUwM0I5XHUwM0MyICR7dmFsdWV9YCxcblx0XHRcdHBhc3Q6ICh2YWx1ZSkgPT4gYFx1MDNDMFx1MDNDMVx1MDNCOVx1MDNCRCAke3ZhbHVlfWAsXG5cdFx0XHRmdXR1cmU6ICh2YWx1ZSkgPT4gYFx1MDNDM1x1MDNCNSAke3ZhbHVlfWAsXG5cdFx0XHRqdXN0Tm93OiAoKSA9PiBgXHUwM0JDXHUwM0NDXHUwM0JCXHUwM0I5XHUwM0MyIFx1MDNDNFx1MDNDRVx1MDNDMVx1MDNCMWAsXG5cdFx0fSxcblx0XHR1bml0czoge1xuXHRcdFx0ZGF5OiB7XG5cdFx0XHRcdHplcm86IFwiXHUwM0I3XHUwM0JDXHUwM0FEXHUwM0MxXHUwM0I1XHUwM0MyXCIsXG5cdFx0XHRcdG9uZTogXCJcdTAzQjdcdTAzQkNcdTAzQURcdTAzQzFcdTAzQjFcIixcblx0XHRcdFx0dHdvOiBcIlx1MDNCN1x1MDNCQ1x1MDNBRFx1MDNDMVx1MDNCNVx1MDNDMlwiLFxuXHRcdFx0XHRmZXc6IFwiXHUwM0I3XHUwM0JDXHUwM0FEXHUwM0MxXHUwM0I1XHUwM0MyXCIsXG5cdFx0XHRcdG1hbnk6IFwiXHUwM0I3XHUwM0JDXHUwM0FEXHUwM0MxXHUwM0I1XHUwM0MyXCIsXG5cdFx0XHRcdG90aGVyOiBcIlx1MDNCN1x1MDNCQ1x1MDNBRFx1MDNDMVx1MDNCNVx1MDNDMlwiLFxuXHRcdFx0fSxcblx0XHRcdGhvdXI6IHtcblx0XHRcdFx0emVybzogXCJcdTAzQ0VcdTAzQzFcdTAzQjVcdTAzQzJcIixcblx0XHRcdFx0b25lOiBcIlx1MDNDRVx1MDNDMVx1MDNCMVwiLFxuXHRcdFx0XHR0d286IFwiXHUwM0NFXHUwM0MxXHUwM0I1XHUwM0MyXCIsXG5cdFx0XHRcdGZldzogXCJcdTAzQ0VcdTAzQzFcdTAzQjVcdTAzQzJcIixcblx0XHRcdFx0bWFueTogXCJcdTAzQ0VcdTAzQzFcdTAzQjVcdTAzQzJcIixcblx0XHRcdFx0b3RoZXI6IFwiXHUwM0NFXHUwM0MxXHUwM0I1XHUwM0MyXCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwiXHUwM0JCXHUwM0I1XHUwM0MwXHUwM0M0XHUwM0FDXCIsXG5cdFx0XHRcdG9uZTogXCJcdTAzQkJcdTAzQjVcdTAzQzBcdTAzQzRcdTAzQ0NcIixcblx0XHRcdFx0dHdvOiBcIlx1MDNCQlx1MDNCNVx1MDNDMFx1MDNDNFx1MDNBQ1wiLFxuXHRcdFx0XHRmZXc6IFwiXHUwM0JCXHUwM0I1XHUwM0MwXHUwM0M0XHUwM0FDXCIsXG5cdFx0XHRcdG1hbnk6IFwiXHUwM0JCXHUwM0I1XHUwM0MwXHUwM0M0XHUwM0FDXCIsXG5cdFx0XHRcdG90aGVyOiBcIlx1MDNCQlx1MDNCNVx1MDNDMFx1MDNDNFx1MDNBQ1wiLFxuXHRcdFx0fSxcblx0XHRcdHNlY29uZDoge1xuXHRcdFx0XHR6ZXJvOiBcIlx1MDNCNFx1MDNCNVx1MDNDNVx1MDNDNFx1MDNCNVx1MDNDMVx1MDNDQ1x1MDNCQlx1MDNCNVx1MDNDMFx1MDNDNFx1MDNCMVwiLFxuXHRcdFx0XHRvbmU6IFwiXHUwM0I0XHUwM0I1XHUwM0M1XHUwM0M0XHUwM0I1XHUwM0MxXHUwM0NDXHUwM0JCXHUwM0I1XHUwM0MwXHUwM0M0XHUwM0JGXCIsXG5cdFx0XHRcdHR3bzogXCJcdTAzQjRcdTAzQjVcdTAzQzVcdTAzQzRcdTAzQjVcdTAzQzFcdTAzQ0NcdTAzQkJcdTAzQjVcdTAzQzBcdTAzQzRcdTAzQjFcIixcblx0XHRcdFx0ZmV3OiBcIlx1MDNCNFx1MDNCNVx1MDNDNVx1MDNDNFx1MDNCNVx1MDNDMVx1MDNDQ1x1MDNCQlx1MDNCNVx1MDNDMFx1MDNDNFx1MDNCMVwiLFxuXHRcdFx0XHRtYW55OiBcIlx1MDNCNFx1MDNCNVx1MDNDNVx1MDNDNFx1MDNCNVx1MDNDMVx1MDNDQ1x1MDNCQlx1MDNCNVx1MDNDMFx1MDNDNFx1MDNCMVwiLFxuXHRcdFx0XHRvdGhlcjogXCJcdTAzQjRcdTAzQjVcdTAzQzVcdTAzQzRcdTAzQjVcdTAzQzFcdTAzQ0NcdTAzQkJcdTAzQjVcdTAzQzBcdTAzQzRcdTAzQjFcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHRocjoge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgbmEgJHt2YWx1ZX1gLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgcHJpamUgJHt2YWx1ZX1gLFxuXHRcdFx0ZnV0dXJlOiAodmFsdWUpID0+IGB6YSAke3ZhbHVlfWAsXG5cdFx0XHRqdXN0Tm93OiAoKSA9PiBgcHJpamUgdHJlbnV0a2FgLFxuXHRcdH0sXG5cdFx0dW5pdHM6IHtcblx0XHRcdGRheToge1xuXHRcdFx0XHR6ZXJvOiBcImRhbmFcIixcblx0XHRcdFx0b25lOiBcImRhblwiLFxuXHRcdFx0XHR0d286IFwiZGFuYVwiLFxuXHRcdFx0XHRmZXc6IFwiZGFuYVwiLFxuXHRcdFx0XHRtYW55OiBcImRhbmFcIixcblx0XHRcdFx0b3RoZXI6IFwiZGFuYVwiLFxuXHRcdFx0fSxcblx0XHRcdGhvdXI6IHtcblx0XHRcdFx0emVybzogXCJzYXRpXCIsXG5cdFx0XHRcdG9uZTogXCJzYXRcIixcblx0XHRcdFx0dHdvOiBcInNhdGFcIixcblx0XHRcdFx0ZmV3OiBcInNhdGFcIixcblx0XHRcdFx0bWFueTogXCJzYXRpXCIsXG5cdFx0XHRcdG90aGVyOiBcInNhdGlcIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJtaW51dGFcIixcblx0XHRcdFx0b25lOiBcIm1pbnV0YVwiLFxuXHRcdFx0XHR0d286IFwibWludXRlXCIsXG5cdFx0XHRcdGZldzogXCJtaW51dGVcIixcblx0XHRcdFx0bWFueTogXCJtaW51dGFcIixcblx0XHRcdFx0b3RoZXI6IFwibWludXRhXCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwic2VrdW5kaVwiLFxuXHRcdFx0XHRvbmU6IFwic2VrdW5kYVwiLFxuXHRcdFx0XHR0d286IFwic2VrdW5kZVwiLFxuXHRcdFx0XHRmZXc6IFwic2VrdW5kZVwiLFxuXHRcdFx0XHRtYW55OiBcInNla3VuZGlcIixcblx0XHRcdFx0b3RoZXI6IFwic2VrdW5kaVwiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXG5cdHNrOiB7XG5cdFx0dGVtcGxhdGU6IHtcblx0XHRcdG9uOiAodmFsdWUpID0+IGB2IGRlXHUwMTQ4ICR7dmFsdWV9YCxcblx0XHRcdHBhc3Q6ICh2YWx1ZSkgPT4gYHByZWQgJHt2YWx1ZX1gLFxuXHRcdFx0ZnV0dXJlOiAodmFsdWUpID0+IGB6YSAke3ZhbHVlfWAsXG5cdFx0XHRqdXN0Tm93OiAoKSA9PiBgcHJcdTAwRTF2ZSB0ZXJhemAsXG5cdFx0fSxcblx0XHR1bml0czoge1xuXHRcdFx0ZGF5OiB7XG5cdFx0XHRcdHplcm86IFwiZG5pXCIsXG5cdFx0XHRcdG9uZTogXCJkZVx1MDE0OFwiLFxuXHRcdFx0XHR0d286IFwiZG5pXCIsXG5cdFx0XHRcdGZldzogXCJkbmlcIixcblx0XHRcdFx0bWFueTogXCJkblx1MDBFRFwiLFxuXHRcdFx0XHRvdGhlcjogXCJkbmlcIixcblx0XHRcdH0sXG5cdFx0XHRob3VyOiB7XG5cdFx0XHRcdHplcm86IFwiaG9kaW55XCIsXG5cdFx0XHRcdG9uZTogXCJob2RpbmFcIixcblx0XHRcdFx0dHdvOiBcImhvZGlueVwiLFxuXHRcdFx0XHRmZXc6IFwiaG9kaW55XCIsXG5cdFx0XHRcdG1hbnk6IFwiaG9kXHUwMEVEblwiLFxuXHRcdFx0XHRvdGhlcjogXCJob2RpbnlcIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJtaW5cdTAwRkF0eVwiLFxuXHRcdFx0XHRvbmU6IFwibWluXHUwMEZBdGFcIixcblx0XHRcdFx0dHdvOiBcIm1pblx1MDBGQXR5XCIsXG5cdFx0XHRcdGZldzogXCJtaW5cdTAwRkF0eVwiLFxuXHRcdFx0XHRtYW55OiBcIm1pblx1MDBGQXRcIixcblx0XHRcdFx0b3RoZXI6IFwibWluXHUwMEZBdHlcIixcblx0XHRcdH0sXG5cdFx0XHRzZWNvbmQ6IHtcblx0XHRcdFx0emVybzogXCJzZWt1bmR5XCIsXG5cdFx0XHRcdG9uZTogXCJzZWt1bmRhXCIsXG5cdFx0XHRcdHR3bzogXCJzZWt1bmR5XCIsXG5cdFx0XHRcdGZldzogXCJzZWt1bmR5XCIsXG5cdFx0XHRcdG1hbnk6IFwic2VrXHUwMEZBbmRcIixcblx0XHRcdFx0b3RoZXI6IFwic2VrdW5keVwiLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXG5cdG5vOiB7XG5cdFx0dGVtcGxhdGU6IHtcblx0XHRcdG9uOiAodmFsdWUpID0+IGBwXHUwMEU1ICR7dmFsdWV9YCxcblx0XHRcdHBhc3Q6ICh2YWx1ZSkgPT4gYCR7dmFsdWV9IHNpZGVuYCxcblx0XHRcdGZ1dHVyZTogKHZhbHVlKSA9PiBgb20gJHt2YWx1ZX1gLFxuXHRcdFx0anVzdE5vdzogKCkgPT4gYG5ldHRvcHBgLFxuXHRcdH0sXG5cdFx0dW5pdHM6IHtcblx0XHRcdGRheToge1xuXHRcdFx0XHR6ZXJvOiBcImRhZ2VyXCIsXG5cdFx0XHRcdG9uZTogXCJkYWdcIixcblx0XHRcdFx0dHdvOiBcImRhZ2VyXCIsXG5cdFx0XHRcdGZldzogXCJkYWdlclwiLFxuXHRcdFx0XHRtYW55OiBcImRhZ2VyXCIsXG5cdFx0XHRcdG90aGVyOiBcImRhZ2VyXCIsXG5cdFx0XHR9LFxuXHRcdFx0aG91cjoge1xuXHRcdFx0XHR6ZXJvOiBcInRpbWVyXCIsXG5cdFx0XHRcdG9uZTogXCJ0aW1lXCIsXG5cdFx0XHRcdHR3bzogXCJ0aW1lclwiLFxuXHRcdFx0XHRmZXc6IFwidGltZXJcIixcblx0XHRcdFx0bWFueTogXCJ0aW1lclwiLFxuXHRcdFx0XHRvdGhlcjogXCJ0aW1lclwiLFxuXHRcdFx0fSxcblx0XHRcdG1pbnV0ZToge1xuXHRcdFx0XHR6ZXJvOiBcIm1pbnV0dGVyXCIsXG5cdFx0XHRcdG9uZTogXCJtaW51dHRcIixcblx0XHRcdFx0dHdvOiBcIm1pbnV0dGVyXCIsXG5cdFx0XHRcdGZldzogXCJtaW51dHRlclwiLFxuXHRcdFx0XHRtYW55OiBcIm1pbnV0dGVyXCIsXG5cdFx0XHRcdG90aGVyOiBcIm1pbnV0dGVyXCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwic2VrdW5kZXJcIixcblx0XHRcdFx0b25lOiBcInNla3VuZFwiLFxuXHRcdFx0XHR0d286IFwic2VrdW5kZXJcIixcblx0XHRcdFx0ZmV3OiBcInNla3VuZGVyXCIsXG5cdFx0XHRcdG1hbnk6IFwic2VrdW5kZXJcIixcblx0XHRcdFx0b3RoZXI6IFwic2VrdW5kZXJcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHRzbDoge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgbmEgJHt2YWx1ZX1gLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgcHJlZCAke3ZhbHVlfWAsXG5cdFx0XHRmdXR1cmU6ICh2YWx1ZSkgPT4gYFx1MDEwRGV6ICR7dmFsdWV9YCxcblx0XHRcdGp1c3ROb3c6ICgpID0+IGByYXZubyB6ZGFqYCxcblx0XHR9LFxuXHRcdHVuaXRzOiB7XG5cdFx0XHRkYXk6IHtcblx0XHRcdFx0emVybzogXCJkbmlcIixcblx0XHRcdFx0b25lOiBcImRhblwiLFxuXHRcdFx0XHR0d286IFwiZG5pXCIsXG5cdFx0XHRcdGZldzogXCJkbmlcIixcblx0XHRcdFx0bWFueTogXCJkbmlcIixcblx0XHRcdFx0b3RoZXI6IFwiZG5pXCIsXG5cdFx0XHR9LFxuXHRcdFx0aG91cjoge1xuXHRcdFx0XHR6ZXJvOiBcInVyZVwiLFxuXHRcdFx0XHRvbmU6IFwidXJhXCIsXG5cdFx0XHRcdHR3bzogXCJ1cmVcIixcblx0XHRcdFx0ZmV3OiBcInVyZVwiLFxuXHRcdFx0XHRtYW55OiBcInVyZVwiLFxuXHRcdFx0XHRvdGhlcjogXCJ1cmVcIixcblx0XHRcdH0sXG5cdFx0XHRtaW51dGU6IHtcblx0XHRcdFx0emVybzogXCJtaW51dGVcIixcblx0XHRcdFx0b25lOiBcIm1pbnV0YVwiLFxuXHRcdFx0XHR0d286IFwibWludXRlXCIsXG5cdFx0XHRcdGZldzogXCJtaW51dGVcIixcblx0XHRcdFx0bWFueTogXCJtaW51dGVcIixcblx0XHRcdFx0b3RoZXI6IFwibWludXRlXCIsXG5cdFx0XHR9LFxuXHRcdFx0c2Vjb25kOiB7XG5cdFx0XHRcdHplcm86IFwic2VrdW5kZVwiLFxuXHRcdFx0XHRvbmU6IFwic2VrdW5kYVwiLFxuXHRcdFx0XHR0d286IFwic2VrdW5kZVwiLFxuXHRcdFx0XHRmZXc6IFwic2VrdW5kZVwiLFxuXHRcdFx0XHRtYW55OiBcInNla3VuZFwiLFxuXHRcdFx0XHRvdGhlcjogXCJzZWt1bmRcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblxuXHR2aToge1xuXHRcdHRlbXBsYXRlOiB7XG5cdFx0XHRvbjogKHZhbHVlKSA9PiBgdlx1MDBFMG8gJHt2YWx1ZX1gLFxuXHRcdFx0cGFzdDogKHZhbHVlKSA9PiBgJHt2YWx1ZX0gdHJcdTAxQjBcdTFFREJjYCxcblx0XHRcdGZ1dHVyZTogKHZhbHVlKSA9PiBgJHt2YWx1ZX0gc2F1YCxcblx0XHRcdGp1c3ROb3c6ICgpID0+IGB2XHUxRUVCYSBtXHUxRURCaWAsXG5cdFx0fSxcblx0XHR1bml0czoge1xuXHRcdFx0ZGF5OiB7XG5cdFx0XHRcdHplcm86IFwibmdcdTAwRTB5XCIsXG5cdFx0XHRcdG9uZTogXCJuZ1x1MDBFMHlcIixcblx0XHRcdFx0dHdvOiBcIm5nXHUwMEUweVwiLFxuXHRcdFx0XHRmZXc6IFwibmdcdTAwRTB5XCIsXG5cdFx0XHRcdG1hbnk6IFwibmdcdTAwRTB5XCIsXG5cdFx0XHRcdG90aGVyOiBcIm5nXHUwMEUweVwiLFxuXHRcdFx0fSxcblx0XHRcdGhvdXI6IHtcblx0XHRcdFx0emVybzogXCJnaVx1MUVERFwiLFxuXHRcdFx0XHRvbmU6IFwiZ2lcdTFFRERcIixcblx0XHRcdFx0dHdvOiBcImdpXHUxRUREXCIsXG5cdFx0XHRcdGZldzogXCJnaVx1MUVERFwiLFxuXHRcdFx0XHRtYW55OiBcImdpXHUxRUREXCIsXG5cdFx0XHRcdG90aGVyOiBcImdpXHUxRUREXCIsXG5cdFx0XHR9LFxuXHRcdFx0bWludXRlOiB7XG5cdFx0XHRcdHplcm86IFwicGhcdTAwRkF0XCIsXG5cdFx0XHRcdG9uZTogXCJwaFx1MDBGQXRcIixcblx0XHRcdFx0dHdvOiBcInBoXHUwMEZBdFwiLFxuXHRcdFx0XHRmZXc6IFwicGhcdTAwRkF0XCIsXG5cdFx0XHRcdG1hbnk6IFwicGhcdTAwRkF0XCIsXG5cdFx0XHRcdG90aGVyOiBcInBoXHUwMEZBdFwiLFxuXHRcdFx0fSxcblx0XHRcdHNlY29uZDoge1xuXHRcdFx0XHR6ZXJvOiBcImdpXHUwMEUyeVwiLFxuXHRcdFx0XHRvbmU6IFwiZ2lcdTAwRTJ5XCIsXG5cdFx0XHRcdHR3bzogXCJnaVx1MDBFMnlcIixcblx0XHRcdFx0ZmV3OiBcImdpXHUwMEUyeVwiLFxuXHRcdFx0XHRtYW55OiBcImdpXHUwMEUyeVwiLFxuXHRcdFx0XHRvdGhlcjogXCJnaVx1MDBFMnlcIixcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcbn07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZ2V0TG9jYWxlT2ZEb2N1bWVudCB9IGZyb20gXCIuLi9kb20vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsLCBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgSUQgfSBmcm9tIFwiLi4vdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCwgaXNTdHJpbmcsIGlzUHJpbWl0aXZlIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHtcblx0Z2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMsXG5cdFRyYW5zbGF0aW9ucyxcbn0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRpb25zLm1qc1wiO1xuaW1wb3J0IHtcblx0dmFsaWRhdGVGdW5jdGlvbixcblx0dmFsaWRhdGVJbnRlZ2VyLFxuXHR2YWxpZGF0ZU9iamVjdCxcblx0dmFsaWRhdGVQcmltaXRpdmUsXG5cdHZhbGlkYXRlU3RyaW5nLFxuXHR2YWxpZGF0ZUJvb2xlYW4sXG59IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGNsb25lIH0gZnJvbSBcIi4uL3V0aWwvY2xvbmUubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4vcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IGZvcm1hdFRpbWVBZ28gfSBmcm9tIFwiLi4vaTE4bi90aW1lLWFnby5tanNcIjtcblxuZXhwb3J0IHsgVHJhbnNmb3JtZXIgfTtcblxuLyoqXG4gKiBUaGUgdHJhbnNmb3JtZXIgY2xhc3MgaXMgYSBzd2lzcyBhcm15IGtuaWZlIGZvciBtYW5pcHVsYXRpbmcgdmFsdWVzLlxuICpcbiAqIEEgc2ltcGxlIGV4YW1wbGUgaXMgdGhlIGNvbnZlcnNpb24gb2YgYWxsIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlLiBmb3IgdGhpcyBwdXJwb3NlIHRoZSBjb21tYW5kIGB0b2xvd2VyYCBtdXN0IGJlIHVzZWQuXG4gKlxuICogYGBganNcbiAqIGxldCB0ID0gbmV3IFRyYW5zZm9ybWVyKCd0b2xvd2VyJykucnVuKCdBQkMnKTsgLy8gXHUyMUE2IGFiY1xuICogYGBgXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2xpYnJhcmllcy90cmFuc2Zvcm1lclxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvdHJhbnNmb3JtZXIvc2ltcGxlXG4gKlxuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIHRyYW5zZm9ybWVyIGNsYXNzIGlzIGEgc3dpc3MgYXJteSBrbmlmZSBmb3IgbWFuaXB1bGF0aW5nIHZhbHVlcy4gZXNwZWNpYWxseSBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBwaXBlLCBwcm9jZXNzaW5nIGNoYWlucyBjYW4gYmUgYnVpbHQgdXAuXG4gKi9cbmNsYXNzIFRyYW5zZm9ybWVyIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZGVmaW5pdGlvblxuXHQgKi9cblx0Y29uc3RydWN0b3IoZGVmaW5pdGlvbikge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5hcmdzID0gZGlzYXNzZW1ibGUoZGVmaW5pdGlvbik7XG5cdFx0dGhpcy5jb21tYW5kID0gdGhpcy5hcmdzLnNoaWZ0KCk7XG5cdFx0dGhpcy5jYWxsYmFja3MgPSBuZXcgTWFwKCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHRcblx0ICogQHJldHVybiB7VHJhbnNmb3JtZXJ9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICovXG5cdHNldENhbGxiYWNrKG5hbWUsIGNhbGxiYWNrLCBjb250ZXh0KSB7XG5cdFx0dmFsaWRhdGVTdHJpbmcobmFtZSk7XG5cdFx0dmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjayk7XG5cblx0XHRpZiAoY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWxpZGF0ZU9iamVjdChjb250ZXh0KTtcblx0XHR9XG5cblx0XHR0aGlzLmNhbGxiYWNrcy5zZXQobmFtZSwge1xuXHRcdFx0Y2FsbGJhY2s6IGNhbGxiYWNrLFxuXHRcdFx0Y29udGV4dDogY29udGV4dCxcblx0XHR9KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7Kn1cblx0ICogQHRocm93cyB7RXJyb3J9IHVua25vd24gY29tbWFuZFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICogQHRocm93cyB7RXJyb3J9IHR5cGUgbm90IHN1cHBvcnRlZFxuXHQgKi9cblx0cnVuKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRyYW5zZm9ybS5hcHBseSh0aGlzLCBbdmFsdWVdKTtcblx0fVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tbWFuZFxuICogQHJldHVybiB7YXJyYXl9XG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBkaXNhc3NlbWJsZShjb21tYW5kKSB7XG5cdHZhbGlkYXRlU3RyaW5nKGNvbW1hbmQpO1xuXG5cdGNvbnN0IHBsYWNlaG9sZGVyID0gbmV3IE1hcCgpO1xuXHRjb25zdCByZWdleCA9IC8oKD88cGF0dGVybj5cXFxcKD88Y2hhcj4uKSl7MX0pL2dpbTtcblxuXHQvLyBUaGUgc2VwYXJhdG9yIGZvciBhcmdzIG11c3QgYmUgZXNjYXBlZFxuXHQvLyB1bmRlZmluZWQgc3RyaW5nIHdoaWNoIHNob3VsZCBub3Qgb2NjdXIgbm9ybWFsbHkgYW5kIGlzIGFsc28gbm90IGEgcmVnZXhcblx0Y29uc3QgcmVzdWx0ID0gY29tbWFuZC5tYXRjaEFsbChyZWdleCk7XG5cblx0Zm9yIChjb25zdCBtIG9mIHJlc3VsdCkge1xuXHRcdGNvbnN0IGcgPSBtPy5bXCJncm91cHNcIl07XG5cdFx0aWYgKCFpc09iamVjdChnKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcCA9IGc/LltcInBhdHRlcm5cIl07XG5cdFx0Y29uc3QgYyA9IGc/LltcImNoYXJcIl07XG5cblx0XHRpZiAocCAmJiBjKSB7XG5cdFx0XHRjb25zdCByID0gYF9fJHtuZXcgSUQoKS50b1N0cmluZygpfV9fYDtcblx0XHRcdHBsYWNlaG9sZGVyLnNldChyLCBjKTtcblx0XHRcdGNvbW1hbmQgPSBjb21tYW5kLnJlcGxhY2UocCwgcik7XG5cdFx0fVxuXHR9XG5cdGxldCBwYXJ0cyA9IGNvbW1hbmQuc3BsaXQoXCI6XCIpO1xuXG5cdHBhcnRzID0gcGFydHMubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdGxldCB2ID0gdmFsdWUudHJpbSgpO1xuXHRcdGZvciAoY29uc3QgayBvZiBwbGFjZWhvbGRlcikge1xuXHRcdFx0diA9IHYucmVwbGFjZShrWzBdLCBrWzFdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHY7XG5cdH0pO1xuXG5cdHJldHVybiBwYXJ0cztcbn1cblxuLyoqXG4gKiB0cmllcyB0byBtYWtlIGEgc3RyaW5nIG91dCBvZiB2YWx1ZSBhbmQgaWYgdGhpcyBzdWNjZWVkcyB0byByZXR1cm4gaXQgYmFja1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRUb1N0cmluZyh2YWx1ZSkge1xuXHRpZiAoaXNPYmplY3QodmFsdWUpICYmIHZhbHVlLmhhc093blByb3BlcnR5KFwidG9TdHJpbmdcIikpIHtcblx0XHR2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG5cdH1cblxuXHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5rbm93biBjb21tYW5kXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcbiAqIEB0aHJvd3Mge0Vycm9yfSB0eXBlIG5vdCBzdXBwb3J0ZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGtleSBwYXJhbWV0ZXJcbiAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtKHZhbHVlKSB7XG5cdGNvbnN0IGNvbnNvbGUgPSBnZXRHbG9iYWxPYmplY3QoXCJjb25zb2xlXCIpO1xuXG5cdGNvbnN0IGFyZ3MgPSBjbG9uZSh0aGlzLmFyZ3MpO1xuXHRsZXQga2V5O1xuXHRsZXQgZGVmYXVsdFZhbHVlO1xuXG5cdGxldCB0cmFuc2xhdGlvbnM7XG5cdGxldCBkYXRlO1xuXHRsZXQgbG9jYWxlO1xuXHRsZXQgdGltZXN0YW1wO1xuXHRsZXQgbWFwO1xuXHRsZXQga2V5VmFsdWU7XG5cblx0c3dpdGNoICh0aGlzLmNvbW1hbmQpIHtcblx0XHRjYXNlIFwic3RhdGljXCI6XG5cdFx0XHRyZXR1cm4gdGhpcy5hcmdzLmpvaW4oXCI6XCIpO1xuXG5cdFx0Y2FzZSBcInRvbG93ZXJcIjpcblx0XHRjYXNlIFwic3RydG9sb3dlclwiOlxuXHRcdGNhc2UgXCJ0b2xvd2VyY2FzZVwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0cmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRjYXNlIFwiY29udGFpbnNcIjpcblx0XHRcdGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlLmluY2x1ZGVzKGFyZ3NbMF0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlLmluY2x1ZGVzKGFyZ3NbMF0pO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPYmplY3QodmFsdWUpKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShhcmdzWzBdKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXG5cdFx0Y2FzZSBcImhhcy1lbnRyaWVzXCI6XG5cdFx0Y2FzZSBcImhhc2VudHJpZXNcIjpcblx0XHRcdGlmIChpc09iamVjdCh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPiAwO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlLmxlbmd0aCA+IDA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmYWxzZTtcblxuXHRcdGNhc2UgXCJpc3VuZGVmaW5lZFwiOlxuXHRcdGNhc2UgXCJpcy11bmRlZmluZWRcIjpcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuXG5cdFx0Y2FzZSBcImlzbnVsbFwiOlxuXHRcdGNhc2UgXCJpcy1udWxsXCI6XG5cdFx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGw7XG5cblx0XHRjYXNlIFwiaXNzZXRcIjpcblx0XHRjYXNlIFwiaXMtc2V0XCI6XG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbDtcblxuXHRcdGNhc2UgXCJpc251bWJlclwiOlxuXHRcdGNhc2UgXCJpcy1udW1iZXJcIjpcblx0XHRcdHJldHVybiBpc1ByaW1pdGl2ZSh2YWx1ZSkgJiYgIWlzTmFOKHZhbHVlKTtcblxuXHRcdGNhc2UgXCJpc2ludGVnZXJcIjpcblx0XHRjYXNlIFwiaXMtaW50ZWdlclwiOlxuXHRcdFx0cmV0dXJuIGlzUHJpbWl0aXZlKHZhbHVlKSAmJiAhaXNOYU4odmFsdWUpICYmIHZhbHVlICUgMSA9PT0gMDtcblxuXHRcdGNhc2UgXCJpc2Zsb2F0XCI6XG5cdFx0Y2FzZSBcImlzLWZsb2F0XCI6XG5cdFx0XHRyZXR1cm4gaXNQcmltaXRpdmUodmFsdWUpICYmICFpc05hTih2YWx1ZSkgJiYgdmFsdWUgJSAxICE9PSAwO1xuXG5cdFx0Y2FzZSBcImlzb2JqZWN0XCI6XG5cdFx0Y2FzZSBcImlzLW9iamVjdFwiOlxuXHRcdFx0cmV0dXJuIGlzT2JqZWN0KHZhbHVlKTtcblxuXHRcdGNhc2UgXCJpc2FycmF5XCI6XG5cdFx0Y2FzZSBcImlzLWFycmF5XCI6XG5cdFx0XHRyZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG5cblx0XHRjYXNlIFwibm90XCI6XG5cdFx0XHR2YWxpZGF0ZUJvb2xlYW4odmFsdWUpO1xuXHRcdFx0cmV0dXJuICF2YWx1ZTtcblxuXHRcdGNhc2UgXCJ0b3VwcGVyXCI6XG5cdFx0Y2FzZSBcInN0cnRvdXBwZXJcIjpcblx0XHRjYXNlIFwidG91cHBlcmNhc2VcIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblx0XHRcdHJldHVybiB2YWx1ZS50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0Y2FzZSBcInRvLXN0cmluZ1wiOlxuXHRcdGNhc2UgXCJ0b3N0cmluZ1wiOlxuXHRcdFx0cmV0dXJuIGAke3ZhbHVlfWA7XG5cblx0XHRjYXNlIFwidG8taW50ZWdlclwiOlxuXHRcdGNhc2UgXCJ0b2ludGVnZXJcIjpcblx0XHRcdGNvbnN0IG4gPSBwYXJzZUludCh2YWx1ZSk7XG5cdFx0XHR2YWxpZGF0ZUludGVnZXIobik7XG5cdFx0XHRyZXR1cm4gbjtcblxuXHRcdGNhc2UgXCJ0by1qc29uXCI6XG5cdFx0Y2FzZSBcInRvanNvblwiOlxuXHRcdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcblxuXHRcdGNhc2UgXCJmcm9tLWpzb25cIjpcblx0XHRjYXNlIFwiZnJvbWpzb25cIjpcblx0XHRcdHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcblxuXHRcdGNhc2UgXCJ0cmltXCI6XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gdmFsdWUudHJpbSgpO1xuXG5cdFx0Y2FzZSBcInJhd3VybGVuY29kZVwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSlcblx0XHRcdFx0LnJlcGxhY2UoLyEvZywgXCIlMjFcIilcblx0XHRcdFx0LnJlcGxhY2UoLycvZywgXCIlMjdcIilcblx0XHRcdFx0LnJlcGxhY2UoL1xcKC9nLCBcIiUyOFwiKVxuXHRcdFx0XHQucmVwbGFjZSgvXFwpL2csIFwiJTI5XCIpXG5cdFx0XHRcdC5yZXBsYWNlKC9cXCovZywgXCIlMkFcIik7XG5cblx0XHRjYXNlIFwiY2FsbFwiOlxuXHRcdFx0LyoqXG5cdFx0XHQgKiBjYWxsYmFjay1kZWZpbml0aW9uXG5cdFx0XHQgKiBmdW5jdGlvbiBjYWxsYmFjayh2YWx1ZSwgLi4uYXJncykge1xuXHRcdFx0ICogICByZXR1cm4gdmFsdWU7XG5cdFx0XHQgKiB9XG5cdFx0XHQgKi9cblxuXHRcdFx0bGV0IGNhbGxiYWNrO1xuXHRcdFx0Y29uc3QgY2FsbGJhY2tOYW1lID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0bGV0IGNvbnRleHQgPSBnZXRHbG9iYWwoKTtcblxuXHRcdFx0aWYgKGlzT2JqZWN0KHZhbHVlKSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShjYWxsYmFja05hbWUpKSB7XG5cdFx0XHRcdGNhbGxiYWNrID0gdmFsdWVbY2FsbGJhY2tOYW1lXTtcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5jYWxsYmFja3MuaGFzKGNhbGxiYWNrTmFtZSkpIHtcblx0XHRcdFx0Y29uc3QgcyA9IHRoaXMuY2FsbGJhY2tzLmdldChjYWxsYmFja05hbWUpO1xuXHRcdFx0XHRjYWxsYmFjayA9IHM/LltcImNhbGxiYWNrXCJdO1xuXHRcdFx0XHRjb250ZXh0ID0gcz8uW1wiY29udGV4dFwiXTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgJiZcblx0XHRcdFx0d2luZG93Lmhhc093blByb3BlcnR5KGNhbGxiYWNrTmFtZSlcblx0XHRcdCkge1xuXHRcdFx0XHRjYWxsYmFjayA9IHdpbmRvd1tjYWxsYmFja05hbWVdO1xuXHRcdFx0fVxuXHRcdFx0dmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjayk7XG5cblx0XHRcdGFyZ3MudW5zaGlmdCh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbChjb250ZXh0LCAuLi5hcmdzKTtcblxuXHRcdGNhc2UgXCJwbGFpblwiOlxuXHRcdGNhc2UgXCJwbGFpbnRleHRcIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblx0XHRcdGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcodmFsdWUsIFwidGV4dC9odG1sXCIpO1xuXHRcdFx0cmV0dXJuIGRvYy5ib2R5LnRleHRDb250ZW50IHx8IFwiXCI7XG5cblx0XHRjYXNlIFwiaWZcIjpcblx0XHRjYXNlIFwiP1wiOlxuXHRcdFx0dmFsaWRhdGVQcmltaXRpdmUodmFsdWUpO1xuXG5cdFx0XHRsZXQgdHJ1ZVN0YXRlbWVudCA9IGFyZ3Muc2hpZnQoKSB8fCB1bmRlZmluZWQ7XG5cdFx0XHRsZXQgZmFsc2VTdGF0ZW1lbnQgPSBhcmdzLnNoaWZ0KCkgfHwgdW5kZWZpbmVkO1xuXG5cdFx0XHR0cnVlU3RhdGVtZW50ID0gY29udmVydFNwZWNpYWxTdHJpbmdzKHRydWVTdGF0ZW1lbnQsIHZhbHVlKTtcblx0XHRcdGZhbHNlU3RhdGVtZW50ID0gY29udmVydFNwZWNpYWxTdHJpbmdzKGZhbHNlU3RhdGVtZW50LCB2YWx1ZSk7XG5cblx0XHRcdGNvbnN0IGNvbmRpdGlvbiA9IGV2YWx1YXRlQ29uZGl0aW9uKHZhbHVlKTtcblx0XHRcdHJldHVybiBjb25kaXRpb24gPyB0cnVlU3RhdGVtZW50IDogZmFsc2VTdGF0ZW1lbnQ7XG5cblx0XHRjYXNlIFwidWNmaXJzdFwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdFx0XHRjb25zdCBmaXJzdGNoYXIgPSB2YWx1ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTtcblx0XHRcdHJldHVybiBmaXJzdGNoYXIgKyB2YWx1ZS5zdWJzdHIoMSk7XG5cdFx0Y2FzZSBcInVjd29yZHNcIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblxuXHRcdFx0cmV0dXJuIHZhbHVlLnJlcGxhY2UoXG5cdFx0XHRcdC9eKFthLXpcXHUwMEUwLVxcdTAwRkNdKXxcXHMrKFthLXpcXHUwMEUwLVxcdTAwRkNdKS9nLFxuXHRcdFx0XHRmdW5jdGlvbiAodikge1xuXHRcdFx0XHRcdHJldHVybiB2LnRvVXBwZXJDYXNlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHQpO1xuXG5cdFx0Y2FzZSBcImNvdW50XCI6XG5cdFx0Y2FzZSBcImxlbmd0aFwiOlxuXHRcdFx0aWYgKFxuXHRcdFx0XHQoaXNTdHJpbmcodmFsdWUpIHx8IGlzT2JqZWN0KHZhbHVlKSB8fCBpc0FycmF5KHZhbHVlKSkgJiZcblx0XHRcdFx0dmFsdWUuaGFzT3duUHJvcGVydHkoXCJsZW5ndGhcIilcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUubGVuZ3RoO1xuXHRcdFx0fVxuXG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGB1bnN1cHBvcnRlZCB0eXBlICR7dHlwZW9mIHZhbHVlfWApO1xuXG5cdFx0Y2FzZSBcInRvLWJhc2U2NFwiOlxuXHRcdGNhc2UgXCJidG9hXCI6XG5cdFx0Y2FzZSBcImJhc2U2NFwiOlxuXHRcdFx0cmV0dXJuIGJ0b2EoY29udmVydFRvU3RyaW5nKHZhbHVlKSk7XG5cblx0XHRjYXNlIFwiYXRvYlwiOlxuXHRcdGNhc2UgXCJmcm9tLWJhc2U2NFwiOlxuXHRcdFx0cmV0dXJuIGF0b2IoY29udmVydFRvU3RyaW5nKHZhbHVlKSk7XG5cblx0XHRjYXNlIFwiZW1wdHlcIjpcblx0XHRcdHJldHVybiBcIlwiO1xuXG5cdFx0Y2FzZSBcInVuZGVmaW5lZFwiOlxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblxuXHRcdGNhc2UgXCJkZWJ1Z1wiOlxuXHRcdFx0aWYgKGlzT2JqZWN0KGNvbnNvbGUpKSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKHZhbHVlKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXG5cdFx0Y2FzZSBcInByZWZpeFwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0Y29uc3QgcHJlZml4ID0gYXJncz8uWzBdO1xuXHRcdFx0cmV0dXJuIHByZWZpeCArIHZhbHVlO1xuXG5cdFx0Y2FzZSBcInN1ZmZpeFwiOlxuXHRcdFx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXHRcdFx0Y29uc3Qgc3VmZml4ID0gYXJncz8uWzBdO1xuXHRcdFx0cmV0dXJuIHZhbHVlICsgc3VmZml4O1xuXG5cdFx0Y2FzZSBcInVuaXFpZFwiOlxuXHRcdFx0cmV0dXJuIG5ldyBJRCgpLnRvU3RyaW5nKCk7XG5cblx0XHRjYXNlIFwiZmlyc3Qta2V5XCI6XG5cdFx0Y2FzZSBcImxhc3Qta2V5XCI6XG5cdFx0Y2FzZSBcIm50aC1sYXN0LWtleVwiOlxuXHRcdGNhc2UgXCJudGgta2V5XCI6XG5cdFx0XHRpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0eXBlIG5vdCBzdXBwb3J0ZWRcIik7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWx1ZSkuc29ydCgpO1xuXG5cdFx0XHRpZiAodGhpcy5jb21tYW5kID09PSBcImZpcnN0LWtleVwiKSB7XG5cdFx0XHRcdGtleSA9IDA7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuY29tbWFuZCA9PT0gXCJsYXN0LWtleVwiKSB7XG5cdFx0XHRcdGtleSA9IGtleXMubGVuZ3RoIC0gMTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGtleSA9IHZhbGlkYXRlSW50ZWdlcihwYXJzZUludChhcmdzLnNoaWZ0KCkpKTtcblxuXHRcdFx0XHRpZiAodGhpcy5jb21tYW5kID09PSBcIm50aC1sYXN0LWtleVwiKSB7XG5cdFx0XHRcdFx0a2V5ID0ga2V5cy5sZW5ndGggLSBrZXkgLSAxO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGRlZmF1bHRWYWx1ZSA9IGFyZ3Muc2hpZnQoKSB8fCBcIlwiO1xuXG5cdFx0XHRjb25zdCB1c2VLZXkgPSBrZXlzPy5ba2V5XTtcblxuXHRcdFx0aWYgKHZhbHVlPy5bdXNlS2V5XSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWU/Llt1c2VLZXldO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGVmYXVsdFZhbHVlO1xuXG5cdFx0Y2FzZSBcImtleVwiOlxuXHRcdGNhc2UgXCJwcm9wZXJ0eVwiOlxuXHRcdGNhc2UgXCJpbmRleFwiOlxuXHRcdFx0a2V5ID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcga2V5IHBhcmFtZXRlclwiKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmYXVsdFZhbHVlID0gYXJncy5zaGlmdCgpIHx8IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgTWFwKSB7XG5cdFx0XHRcdGlmICghdmFsdWUuaGFzKGtleSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gZGVmYXVsdFZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZS5nZXQoa2V5KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzT2JqZWN0KHZhbHVlKSB8fCBpc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0XHRpZiAodmFsdWU/LltrZXldKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlPy5ba2V5XTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBkZWZhdWx0VmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdHRocm93IG5ldyBFcnJvcihcInR5cGUgbm90IHN1cHBvcnRlZFwiKTtcblxuXHRcdGNhc2UgXCJwYXRoLWV4aXN0c1wiOlxuXHRcdFx0a2V5ID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcga2V5IHBhcmFtZXRlclwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG5ldyBQYXRoZmluZGVyKHZhbHVlKS5leGlzdHMoa2V5KTtcblxuXHRcdGNhc2UgXCJjb25jYXRcIjpcblx0XHRcdGNvbnN0IHBmMiA9IG5ldyBQYXRoZmluZGVyKHZhbHVlKTtcblx0XHRcdGxldCBjb25jYXQgPSBcIlwiO1xuXHRcdFx0d2hpbGUgKGFyZ3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRrZXkgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcga2V5IHBhcmFtZXRlclwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGFkZCBlbXB0eSBzdHJpbmdzXG5cdFx0XHRcdGlmIChpc1N0cmluZyhrZXkpICYmIGtleS50cmltKCkgPT09IFwiXCIpIHtcblx0XHRcdFx0XHRjb25jYXQgKz0ga2V5O1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFwZjIuZXhpc3RzKGtleSkpIHtcblx0XHRcdFx0XHRjb25jYXQgKz0ga2V5O1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHYgPSBwZjIuZ2V0VmlhKGtleSk7XG5cdFx0XHRcdGlmICghaXNQcmltaXRpdmUodikpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ2YWx1ZSBpcyBub3QgcHJpbWl0aXZlXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uY2F0ICs9IHY7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBjb25jYXQ7XG5cdFx0Y2FzZSBcInBhdGhcIjpcblx0XHRcdGtleSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIGtleSBwYXJhbWV0ZXJcIik7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHBmID0gbmV3IFBhdGhmaW5kZXIodmFsdWUpO1xuXG5cdFx0XHRpZiAoIXBmLmV4aXN0cyhrZXkpKSB7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBwZi5nZXRWaWEoa2V5KTtcblxuXHRcdGNhc2UgXCJzdWJzdHJpbmdcIjpcblx0XHRcdHZhbGlkYXRlU3RyaW5nKHZhbHVlKTtcblxuXHRcdFx0Y29uc3Qgc3RhcnQgPSBwYXJzZUludChhcmdzWzBdKSB8fCAwO1xuXHRcdFx0Y29uc3QgZW5kID0gKHBhcnNlSW50KGFyZ3NbMV0pIHx8IDApICsgc3RhcnQ7XG5cblx0XHRcdHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7XG5cblx0XHRjYXNlIFwibm9wXCI6XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cblx0XHRjYXNlIFwiPz9cIjpcblx0XHRjYXNlIFwiZGVmYXVsdFwiOlxuXHRcdFx0aWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZhdWx0VmFsdWUgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRsZXQgZGVmYXVsdFR5cGUgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRpZiAoZGVmYXVsdFR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRkZWZhdWx0VHlwZSA9IFwic3RyaW5nXCI7XG5cdFx0XHR9XG5cblx0XHRcdHN3aXRjaCAoZGVmYXVsdFR5cGUpIHtcblx0XHRcdFx0Y2FzZSBcImludFwiOlxuXHRcdFx0XHRjYXNlIFwiaW50ZWdlclwiOlxuXHRcdFx0XHRcdHJldHVybiBwYXJzZUludChkZWZhdWx0VmFsdWUpO1xuXHRcdFx0XHRjYXNlIFwiZmxvYXRcIjpcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VGbG9hdChkZWZhdWx0VmFsdWUpO1xuXHRcdFx0XHRjYXNlIFwidW5kZWZpbmVkXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0Y2FzZSBcImJvb2xcIjpcblx0XHRcdFx0Y2FzZSBcImJvb2xlYW5cIjpcblx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0KGRlZmF1bHRWYWx1ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgIT09IFwiXCIgJiZcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlICE9PSBcIm9mZlwiICYmXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSAhPT0gXCJmYWxzZVwiICYmXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSAhPT0gXCJmYWxzZVwiKSB8fFxuXHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlID09PSBcIm9uXCIgfHxcblx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSA9PT0gXCJ0cnVlXCIgfHxcblx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSA9PT0gXCJ0cnVlXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRjYXNlIFwic3RyaW5nXCI6XG5cdFx0XHRcdFx0cmV0dXJuIGAke2RlZmF1bHRWYWx1ZX1gO1xuXHRcdFx0XHRjYXNlIFwib2JqZWN0XCI6XG5cdFx0XHRcdFx0cmV0dXJuIEpTT04ucGFyc2UoYXRvYihkZWZhdWx0VmFsdWUpKTtcblx0XHRcdH1cblxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBub3Qgc3VwcG9ydGVkXCIpO1xuXG5cdFx0Y2FzZSBcIm1hcFwiOlxuXHRcdFx0bWFwID0gbmV3IE1hcCgpO1xuXHRcdFx0d2hpbGUgKGFyZ3MubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRrZXlWYWx1ZSA9IGFyZ3Muc2hpZnQoKTtcblx0XHRcdFx0aWYgKGtleVZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIGtleSBwYXJhbWV0ZXJcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRrZXlWYWx1ZSA9IGtleVZhbHVlLnNwbGl0KFwiPVwiKTtcblx0XHRcdFx0bWFwLnNldChrZXlWYWx1ZVswXSwga2V5VmFsdWVbMV0pO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWFwLmdldCh2YWx1ZSk7XG5cblx0XHRjYXNlIFwiZXF1YWxzXCI6XG5cdFx0XHRpZiAoYXJncy5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyB2YWx1ZSBwYXJhbWV0ZXJcIik7XG5cdFx0XHR9XG5cblx0XHRcdHZhbGlkYXRlUHJpbWl0aXZlKHZhbHVlKTtcblxuXHRcdFx0Y29uc3QgZXF1YWxzVmFsdWUgPSBhcmdzLnNoaWZ0KCk7XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogVGhlIGhpc3Rvcnkgb2YgXHUyMDFDdHlwZW9mIG51bGxcdTIwMURcblx0XHRcdCAqIGh0dHBzOi8vMmFsaXR5LmNvbS8yMDEzLzEwL3R5cGVvZi1udWxsLmh0bWxcblx0XHRcdCAqIEluIEphdmFTY3JpcHQsIHR5cGVvZiBudWxsIGlzICdvYmplY3QnLCB3aGljaCBpbmNvcnJlY3RseSBzdWdnZXN0c1xuXHRcdFx0ICogdGhhdCBudWxsIGlzIGFuIG9iamVjdC5cblx0XHRcdCAqL1xuXHRcdFx0aWYgKHZhbHVlID09PSBudWxsKSB7XG5cdFx0XHRcdHJldHVybiBlcXVhbHNWYWx1ZSA9PT0gXCJudWxsXCI7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHR5cGVPZlZhbHVlID0gdHlwZW9mIHZhbHVlO1xuXG5cdFx0XHRzd2l0Y2ggKHR5cGVPZlZhbHVlKSB7XG5cdFx0XHRcdGNhc2UgXCJzdHJpbmdcIjpcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IGVxdWFsc1ZhbHVlO1xuXHRcdFx0XHRjYXNlIFwibnVtYmVyXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSBwYXJzZUZsb2F0KGVxdWFsc1ZhbHVlKTtcblx0XHRcdFx0Y2FzZSBcImJvb2xlYW5cIjpcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IChlcXVhbHNWYWx1ZSA9PT0gXCJ0cnVlXCIgfHwgZXF1YWxzVmFsdWUgPT09IFwib25cIik7XG5cdFx0XHRcdGNhc2UgXCJ1bmRlZmluZWRcIjpcblx0XHRcdFx0XHRyZXR1cm4gZXF1YWxzVmFsdWUgPT09IFwidW5kZWZpbmVkXCI7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBub3Qgc3VwcG9ydGVkXCIpO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBcIm1vbmV5XCI6XG5cdFx0Y2FzZSBcImN1cnJlbmN5XCI6XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRsb2NhbGUgPSBnZXRMb2NhbGVPZkRvY3VtZW50KCk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbG9jYWxlIG9yIG1pc3NpbmcgZm9ybWF0ICgke2UubWVzc2FnZX0pYCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFZlcndlbmRlbiB2b24gUmVnRXhwLCB1bSBXXHUwMEU0aHJ1bmcgdW5kIEJldHJhZyB6dSBleHRyYWhpZXJlblxuXHRcdFx0Y29uc3QgbWF0Y2ggPSB2YWx1ZS5tYXRjaCgvXihbQS1aXXszfSlbXFxzLV0qKFxcZCsoXFwuXFxkKyk/KSQvKTtcblx0XHRcdGlmICghbWF0Y2gpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBjdXJyZW5jeSBmb3JtYXRcIik7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGN1cnJlbmN5ID0gbWF0Y2hbMV07XG5cdFx0XHRjb25zdCBhbW91bnQgPSBtYXRjaFsyXTtcblxuXHRcdFx0Y29uc3QgbWF4aW11bUZyYWN0aW9uRGlnaXRzID0gYXJncz8uWzBdIHx8IDI7XG5cdFx0XHRjb25zdCByb3VuZGluZ0luY3JlbWVudCA9IGFyZ3M/LlsxXSB8fCA1O1xuXG5cdFx0XHRjb25zdCBuZiA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChsb2NhbGUudG9TdHJpbmcoKSwge1xuXHRcdFx0XHRzdHlsZTogXCJjdXJyZW5jeVwiLFxuXHRcdFx0XHRjdXJyZW5jeTogY3VycmVuY3ksXG5cdFx0XHRcdG1heGltdW1GcmFjdGlvbkRpZ2l0czogbWF4aW11bUZyYWN0aW9uRGlnaXRzLFxuXHRcdFx0XHRyb3VuZGluZ0luY3JlbWVudDogcm91bmRpbmdJbmNyZW1lbnQsXG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIG5mLmZvcm1hdChhbW91bnQpO1xuXG5cdFx0Y2FzZSBcInRpbWVzdGFtcFwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdHRpbWVzdGFtcCA9IGRhdGUuZ2V0VGltZSgpO1xuXHRcdFx0aWYgKGlzTmFOKHRpbWVzdGFtcCkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRpbWVzdGFtcDtcblxuXHRcdGNhc2UgXCJ0aW1lXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdFx0cmV0dXJuIGRhdGUudG9Mb2NhbGVUaW1lU3RyaW5nKGxvY2FsZS50b1N0cmluZygpLCB7XG5cdFx0XHRcdFx0aG91cjEyOiBmYWxzZSxcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgbG9jYWxlIG9yIG1pc3NpbmcgZm9ybWF0ICgke2UubWVzc2FnZX0pYCk7XG5cdFx0XHR9XG5cblx0XHRjYXNlIFwiZGF0ZXRpbWVmb3JtYXRcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgb3B0aW9ucyA9IHtcblx0XHRcdFx0ZGF0ZVN0eWxlOiBcIm1lZGl1bVwiLFxuXHRcdFx0XHR0aW1lU3R5bGU6IFwibWVkaXVtXCIsXG5cdFx0XHRcdGhvdXIxMjogZmFsc2UsXG5cdFx0XHR9O1xuXG5cdFx0XHRpZiAoYXJncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG9wdGlvbnMuZGF0ZVN0eWxlID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYXJncy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdG9wdGlvbnMudGltZVN0eWxlID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRsb2NhbGUgPSBnZXRMb2NhbGVPZkRvY3VtZW50KCkudG9TdHJpbmcoKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgb3B0aW9ucykuZm9ybWF0KGRhdGUpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGxvY2FsZSBvciBtaXNzaW5nIGZvcm1hdCAoJHtlLm1lc3NhZ2V9KWApO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBcImRhdGV0aW1lXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdFx0cmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLnRvU3RyaW5nKCksIHtcblx0XHRcdFx0XHRob3VyMTI6IGZhbHNlLFxuXHRcdFx0XHR9KTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBsb2NhbGUgb3IgbWlzc2luZyBmb3JtYXQgKCR7ZS5tZXNzYWdlfSlgKTtcblx0XHRcdH1cblxuXHRcdGNhc2UgXCJkYXRlXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdFx0cmV0dXJuIGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKGxvY2FsZS50b1N0cmluZygpLCB7XG5cdFx0XHRcdFx0eWVhcjogXCJudW1lcmljXCIsXG5cdFx0XHRcdFx0bW9udGg6IFwiMi1kaWdpdFwiLFxuXHRcdFx0XHRcdGRheTogXCIyLWRpZ2l0XCIsXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGxvY2FsZSBvciBtaXNzaW5nIGZvcm1hdCAoJHtlLm1lc3NhZ2V9KWApO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBcInRpbWUtYWdvXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcblx0XHRcdFx0cmV0dXJuIGZvcm1hdFRpbWVBZ28oZGF0ZSwgbG9jYWxlLnRvU3RyaW5nKCkpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGxvY2FsZSBvciBtaXNzaW5nIGZvcm1hdCAoJHtlLm1lc3NhZ2V9KWApO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBcInllYXJcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKTtcblxuXHRcdGNhc2UgXCJtb250aFwiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXRNb250aCgpICsgMTtcblxuXHRcdGNhc2UgXCJkYXlcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGUuZ2V0RGF0ZSgpO1xuXG5cdFx0Y2FzZSBcIndlZWtkYXlcIjpcblx0XHRcdGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG5cdFx0XHRpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZGF0ZVwiKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGUuZ2V0RGF5KCk7XG5cblx0XHRjYXNlIFwiaG91clwiOlxuXHRcdGNhc2UgXCJob3Vyc1wiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXRIb3VycygpO1xuXG5cdFx0Y2FzZSBcIm1pbnV0ZVwiOlxuXHRcdGNhc2UgXCJtaW51dGVzXCI6XG5cdFx0XHRkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXHRcdFx0aWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGRhdGVcIik7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRlLmdldE1pbnV0ZXMoKTtcblxuXHRcdGNhc2UgXCJzZWNvbmRcIjpcblx0XHRjYXNlIFwic2Vjb25kc1wiOlxuXHRcdFx0ZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcblx0XHRcdGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBkYXRlXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0ZS5nZXRTZWNvbmRzKCk7XG5cblx0XHRjYXNlIFwiaTE4blwiOlxuXHRcdGNhc2UgXCJ0cmFuc2xhdGlvblwiOlxuXHRcdFx0dHJhbnNsYXRpb25zID0gZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoKTtcblx0XHRcdGlmICghKHRyYW5zbGF0aW9ucyBpbnN0YW5jZW9mIFRyYW5zbGF0aW9ucykpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyB0cmFuc2xhdGlvbnNcIik7XG5cdFx0XHR9XG5cblx0XHRcdGtleSA9IGFyZ3Muc2hpZnQoKSB8fCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0a2V5ID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmF1bHRWYWx1ZSA9IGFyZ3Muc2hpZnQoKSB8fCB1bmRlZmluZWQ7XG5cblx0XHRcdGRlZmF1bHRWYWx1ZSA9IGNvbnZlcnRTcGVjaWFsU3RyaW5ncyhkZWZhdWx0VmFsdWUsIHZhbHVlKTtcblxuXHRcdFx0cmV0dXJuIHRyYW5zbGF0aW9ucy5nZXRUZXh0KGtleSwgZGVmYXVsdFZhbHVlKTtcblxuXHRcdGNhc2UgXCJzZXQtdG9nZ2xlXCI6XG5cdFx0Y2FzZSBcInNldC1zZXRcIjpcblx0XHRjYXNlIFwic2V0LXJlbW92ZVwiOlxuXHRcdFx0Y29uc3QgbW9kaWZpZXIgPSBhcmdzLnNoaWZ0KCk7XG5cdFx0XHRsZXQgZGVsaW1pdGVyID0gYXJncy5zaGlmdCgpO1xuXHRcdFx0aWYgKGRlbGltaXRlciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRlbGltaXRlciA9IFwiIFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzZXQgPSBuZXcgU2V0KHZhbHVlLnNwbGl0KGRlbGltaXRlcikpO1xuXHRcdFx0Y29uc3QgdG9nZ2xlID0gbmV3IFNldChtb2RpZmllci5zcGxpdChkZWxpbWl0ZXIpKTtcblx0XHRcdGlmICh0aGlzLmNvbW1hbmQgPT09IFwic2V0LXRvZ2dsZVwiKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdCBvZiB0b2dnbGUpIHtcblx0XHRcdFx0XHRpZiAoc2V0Lmhhcyh0KSkge1xuXHRcdFx0XHRcdFx0c2V0LmRlbGV0ZSh0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2V0LmFkZCh0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAodGhpcy5jb21tYW5kID09PSBcInNldC1zZXRcIikge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHQgb2YgdG9nZ2xlKSB7XG5cdFx0XHRcdFx0c2V0LmFkZCh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmNvbW1hbmQgPT09IFwic2V0LXJlbW92ZVwiKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdCBvZiB0b2dnbGUpIHtcblx0XHRcdFx0XHRzZXQuZGVsZXRlKHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gQXJyYXkuZnJvbShzZXQpLmpvaW4oZGVsaW1pdGVyKTtcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gY29tbWFuZCAke3RoaXMuY29tbWFuZH1gKTtcblx0fVxufVxuXG4vKipcbiAqIGNvbnZlcnRzIHNwZWNpYWwgc3RyaW5ncyB0byB0aGVpciB2YWx1ZXNcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gaW5wdXRcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybiB7dW5kZWZpbmVkfCp8bnVsbHxzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRTcGVjaWFsU3RyaW5ncyhpbnB1dCwgdmFsdWUpIHtcblx0c3dpdGNoIChpbnB1dCkge1xuXHRcdGNhc2UgXCJ2YWx1ZVwiOlxuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdGNhc2UgXCJcXFxcdmFsdWVcIjpcblx0XHRcdHJldHVybiBcInZhbHVlXCI7XG5cdFx0Y2FzZSBcIlxcXFx1bmRlZmluZWRcIjpcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Y2FzZSBcIlxcXFxudWxsXCI6XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIGlucHV0O1xuXHR9XG59XG5cbi8qKlxuICogY2hlY2tzIGlmIGEgdmFsdWUgaXMgdHJ1ZSBvciBub3RcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZXZhbHVhdGVDb25kaXRpb24odmFsdWUpIHtcblx0Y29uc3QgbG93ZXJWYWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZTtcblxuXHRyZXR1cm4gKFxuXHRcdCh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHR2YWx1ZSAhPT0gbnVsbCAmJlxuXHRcdFx0dmFsdWUgIT09IFwiXCIgJiZcblx0XHRcdGxvd2VyVmFsdWUgIT09IFwib2ZmXCIgJiZcblx0XHRcdGxvd2VyVmFsdWUgIT09IFwiZmFsc2VcIiAmJlxuXHRcdFx0dmFsdWUgIT09IGZhbHNlKSB8fFxuXHRcdGxvd2VyVmFsdWUgPT09IFwib25cIiB8fFxuXHRcdGxvd2VyVmFsdWUgPT09IFwidHJ1ZVwiIHx8XG5cdFx0dmFsdWUgPT09IHRydWVcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IFRyYW5zZm9ybWVyIH0gZnJvbSBcIi4vdHJhbnNmb3JtZXIubWpzXCI7XG5cbmV4cG9ydCB7IFBpcGUgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgREVMSU1JVEVSID0gXCJ8XCI7XG5cbi8qKlxuICogVGhlIHBpcGUgY2xhc3MgbWFrZXMgaXQgcG9zc2libGUgdG8gY29tYmluZSBzZXZlcmFsIHByb2Nlc3Npbmcgc3RlcHMuXG4gKlxuICogQSBwaXBlIGNvbnNpc3RzIG9mIGNvbW1hbmRzIHdob3NlIGlucHV0IGFuZCBvdXRwdXQgYXJlIGNvbm5lY3RlZCB3aXRoIHRoZSBwaXBlIHN5bWJvbCBgfGAuXG4gKlxuICogV2l0aCB0aGUgUGlwZSwgcHJvY2Vzc2luZyBzdGVwcyBjYW4gYmUgY29tYmluZWQuIEhlcmUsIHRoZSB2YWx1ZSBvZiBhbiBvYmplY3QgaXMgYWNjZXNzZWQgdmlhIHRoZSBwYXRoZmluZGVyIChwYXRoIGNvbW1hbmQpLlxuICogdGhlIHdvcmQgaXMgdGhlbiBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlIGxldHRlcnMgYW5kIGEgcHJlZml4IEhlbGxvIGlzIGFkZGVkLiB0aGUgdHdvIGJhY2tzbGFzaCBzYWZlIHRoZSBzcGFjZSBjaGFyLlxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvcGlwZS9leGFtcGxlLTEvXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgcGlwZSBjbGFzcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBjb21iaW5lIHNldmVyYWwgcHJvY2Vzc2luZyBzdGVwcy5cbiAqL1xuY2xhc3MgUGlwZSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBpcGUgYSBwaXBlIGNvbnNpc3RzIG9mIGNvbW1hbmRzIHdob3NlIGlucHV0IGFuZCBvdXRwdXQgYXJlIGNvbm5lY3RlZCB3aXRoIHRoZSBwaXBlIHN5bWJvbCBgfGAuXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn1cblx0ICovXG5cdGNvbnN0cnVjdG9yKHBpcGUpIHtcblx0XHRzdXBlcigpO1xuXHRcdHZhbGlkYXRlU3RyaW5nKHBpcGUpO1xuXG5cdFx0dGhpcy5waXBlID0gcGlwZS5zcGxpdChERUxJTUlURVIpLm1hcCgodikgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBUcmFuc2Zvcm1lcih2KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuXHQgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuXHQgKiBAcmV0dXJuIHtUcmFuc2Zvcm1lcn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuXHQgKi9cblx0c2V0Q2FsbGJhY2sobmFtZSwgY2FsbGJhY2ssIGNvbnRleHQpIHtcblx0XHRmb3IgKGNvbnN0IFssIHRdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucGlwZSkpIHtcblx0XHRcdHQuc2V0Q2FsbGJhY2sobmFtZSwgY2FsbGJhY2ssIGNvbnRleHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJ1biBhIHBpcGVcblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0cnVuKHZhbHVlKSB7XG5cdFx0cmV0dXJuIHRoaXMucGlwZS5yZWR1Y2UoKGFjY3VtdWxhdG9yLCB0cmFuc2Zvcm1lciwgY3VycmVudEluZGV4LCBhcnJheSkgPT4ge1xuXHRcdFx0cmV0dXJuIHRyYW5zZm9ybWVyLnJ1bihhY2N1bXVsYXRvcik7XG5cdFx0fSwgdmFsdWUpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgUGlwZSB9IGZyb20gXCIuLi9kYXRhL3BpcGUubWpzXCI7XG5cbmltcG9ydCB7IEJhc2VXaXRoT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUFycmF5LCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgRm9ybWF0dGVyIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVybmFsT2JqZWN0U3ltYm9sID0gU3ltYm9sKFwiaW50ZXJuYWxPYmplY3RcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHdhdGNoZG9nU3ltYm9sID0gU3ltYm9sKFwid2F0Y2hkb2dcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG1hcmtlck9wZW5JbmRleFN5bWJvbCA9IFN5bWJvbChcIm1hcmtlck9wZW5JbmRleFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbWFya2VyQ2xvc2VJbmRleFN5bWJvbCA9IFN5bWJvbChcIm1hcmtlcmNsb3NlSW5kZXhcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHdvcmtpbmdEYXRhU3ltYm9sID0gU3ltYm9sKFwid29ya2luZ0RhdGFcIik7XG5cbi8qKlxuICogTWVzc2FnZXMgY2FuIGJlIGZvcm1hdHRlZCB3aXRoIHRoZSBmb3JtYXR0ZXIuIFRvIGRvIHRoaXMsIGFuIG9iamVjdCB3aXRoIHRoZSB2YWx1ZXMgbXVzdCBiZSBwYXNzZWQgdG8gdGhlIGZvcm1hdHRlci4gVGhlIG1lc3NhZ2UgY2FuIHRoZW4gY29udGFpbiBwbGFjZWhvbGRlcnMuXG4gKlxuICogTG9vayBhdCB0aGUgZXhhbXBsZSBiZWxvdy4gVGhlIHBsYWNlaG9sZGVycyB1c2UgdGhlIGxvZ2ljIG9mIFBpcGUuXG4gKlxuICogIyMgTWFya2VyIGluIG1hcmtlclxuICpcbiAqIE1hcmtlcnMgY2FuIGJlIG5lc3RlZC4gSGVyZSwgdGhlIGlubmVyIG1hcmtlciBpcyByZXNvbHZlZCBmaXJzdCBgJHtzdWJrZXl9IFx1MjFBNiAxID0gJHtteWtleTJ9YCBhbmQgdGhlbiB0aGUgb3V0ZXIgbWFya2VyIGAke215a2V5Mn1gLlxuICpcbiAqIGBgYFxuICogY29uc3QgdGV4dCA9ICcke215a2V5JHtzdWJrZXl9fSc7XG4gKiBsZXQgb2JqID0ge1xuICogIG15a2V5MjogXCIxXCIsXG4gKiAgc3Via2V5OiBcIjJcIlxuICogfTtcbiAqXG4gKiBuZXcgRm9ybWF0dGVyKG9iaikuZm9ybWF0KHRleHQpO1xuICogLy8gXHUyMUE2IDFcbiAqIGBgYFxuICpcbiAqICMjIENhbGxiYWNrc1xuICpcbiAqIFRoZSB2YWx1ZXMgaW4gYSBmb3JtYXR0ZXIgY2FuIGJlIGFkanVzdGVkIHZpYSB0aGUgY29tbWFuZHMgb2YgdGhlIGBUcmFuc2Zvcm1lcmAgb3IgdGhlYFBpcGVgLlxuICogVGhlcmUgaXMgYWxzbyB0aGUgcG9zc2liaWxpdHkgdG8gdXNlIGNhbGxiYWNrcy5cbiAqXG4gKiBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHt4OiAnMSd9LCB7XG4gKiAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAqICAgICAgICAgICAgICAgICAgICBxdW90ZTogKHZhbHVlKSA9PiB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnXCInICsgdmFsdWUgKyAnXCInXG4gKiAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICB9KTtcbiAqXG4gKiBmb3JtYXR0ZXIuZm9ybWF0KCcke3ggfCBjYWxsOnF1b3RlfScpKVxuICogLy8gXHUyMUE2IFwiMVwiXG4gKlxuICogIyMgTWFya2VyIHdpdGggcGFyYW1ldGVyXG4gKlxuICogQSBzdHJpbmcgY2FuIGFsc28gYnJpbmcgaXRzIG93biB2YWx1ZXMuIFRoZXNlIG11c3QgdGhlbiBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUga2V5IGJ5IGEgc2VwYXJhdG9yIGA6OmAuXG4gKiBUaGUgdmFsdWVzIHRoZW1zZWx2ZXMgbXVzdCBiZSBzcGVjaWZpZWQgaW4ga2V5L3ZhbHVlIHBhaXJzLiBUaGUga2V5IG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlIHZhbHVlIGJ5IGEgc2VwYXJhdG9yIGA9YC5cbiAqXG4gKiBXaGVuIHVzaW5nIGEgcGlwZSwgeW91IG11c3QgcGF5IGF0dGVudGlvbiB0byB0aGUgc2VwYXJhdG9ycy5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCB7Rm9ybWF0dGVyfSBmcm9tICdAc2NodWthaS9tb25zdGVyL3NvdXJjZS90ZXh0L2Zvcm1hdHRlci5tanMnO1xuICpcbiAqIG5ldyBGb3JtYXR0ZXIoe1xuICogICAgICAgYToge1xuICogICAgICAgICAgIGI6IHtcbiAqICAgICAgICAgICAgICAgYzogXCJIZWxsb1wiXG4gKiAgICAgICAgICAgfSxcbiAqICAgICAgICAgICBkOiBcIndvcmxkXCIsXG4gKiAgICAgICB9XG4gKiAgIH0pLmZvcm1hdChcIiR7YS5iLmN9ICR7YS5kIHwgdWNmaXJzdH0hXCIpOyAvLyB3aXRoIHBpcGVcbiAqXG4gKiAvLyBcdTIxQTYgSGVsbG8gV29ybGQhXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5jbGFzcyBGb3JtYXR0ZXIgZXh0ZW5kcyBCYXNlV2l0aE9wdGlvbnMge1xuXHQvKipcblx0ICogRGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBtYXJrZXJzIGFyZSBgJHtgIGFuZCBgfWBcblx0ICpcblx0ICogQHBhcmFtIG9iamVjdFxuXHQgKiBAcGFyYW0gb3B0aW9uc1xuXHQgKi9cblx0Y29uc3RydWN0b3Iob2JqZWN0LCBvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cdFx0dGhpc1tpbnRlcm5hbE9iamVjdFN5bWJvbF0gPSBvYmplY3QgfHwge307XG5cdFx0dGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdID0gMDtcblx0XHR0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdID0gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gbWFya2VyXG5cdCAqIEBwcm9wZXJ0eSB7YXJyYXl9IG1hcmtlci5vcGVuPVtcIiR7XCJdXG5cdCAqIEBwcm9wZXJ0eSB7YXJyYXl9IG1hcmtlci5jbG9zZT1bXCIke1wiXVxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gcGFyYW1ldGVyXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXJhbWV0ZXIuZGVsaW1pdGVyPVwiOjpcIlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcGFyYW1ldGVyLmFzc2lnbm1lbnQ9XCI9XCJcblx0ICogQHByb3BlcnR5IHtvYmplY3R9IGNhbGxiYWNrcz17fVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRtYXJrZXI6IHtcblx0XHRcdFx0b3BlbjogW1wiJHtcIl0sXG5cdFx0XHRcdGNsb3NlOiBbXCJ9XCJdLFxuXHRcdFx0fSxcblx0XHRcdHBhcmFtZXRlcjoge1xuXHRcdFx0XHRkZWxpbWl0ZXI6IFwiOjpcIixcblx0XHRcdFx0YXNzaWdubWVudDogXCI9XCIsXG5cdFx0XHR9LFxuXHRcdFx0Y2FsbGJhY2tzOiB7fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgbmV3IFBhcmFtZXRlciBDaGFyYWN0ZXJcblx0ICpcblx0ICogRGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBjaGFycyBhcmUgYDo6YCBhbmQgYD1gXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBmb3JtYXR0ZXIuc2V0UGFyYW1ldGVyQ2hhcnMoJyMnKTtcblx0ICogZm9ybWF0dGVyLnNldFBhcmFtZXRlckNoYXJzKCdbJywnXScpO1xuXHQgKiBmb3JtYXR0ZXIuc2V0UGFyYW1ldGVyQ2hhcnMoJ2kxOG57JywnfScpO1xuXHQgKiBgYGBcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGRlbGltaXRlclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gYXNzaWdubWVudFxuXHQgKiBAcmV0dXJuIHtGb3JtYXR0ZXJ9XG5cdCAqIEBzaW5jZSAxLjI0LjBcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICovXG5cdHNldFBhcmFtZXRlckNoYXJzKGRlbGltaXRlciwgYXNzaWdubWVudCkge1xuXHRcdGlmIChkZWxpbWl0ZXIgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJwYXJhbWV0ZXJcIl1bXCJkZWxpbWl0ZXJcIl0gPVxuXHRcdFx0XHR2YWxpZGF0ZVN0cmluZyhkZWxpbWl0ZXIpO1xuXHRcdH1cblxuXHRcdGlmIChhc3NpZ25tZW50ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wicGFyYW1ldGVyXCJdW1wiYXNzaWdubWVudFwiXSA9XG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKGFzc2lnbm1lbnQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBuZXcgTWFya2VyXG5cdCAqXG5cdCAqIERlZmF1bHQgdmFsdWVzIGZvciB0aGUgbWFya2VycyBhcmUgYCR7YCBhbmQgYH1gXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBmb3JtYXR0ZXIuc2V0TWFya2VyKCcjJyk7IC8vIG9wZW4gYW5kIGNsb3NlIGFyZSBib3RoICNcblx0ICogZm9ybWF0dGVyLnNldE1hcmtlcignWycsJ10nKTtcblx0ICogZm9ybWF0dGVyLnNldE1hcmtlcignaTE4bnsnLCd9Jyk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ30gb3BlblxuXHQgKiBAcGFyYW0ge2FycmF5fHN0cmluZ3x1bmRlZmluZWR9IGNsb3NlXG5cdCAqIEByZXR1cm4ge0Zvcm1hdHRlcn1cblx0ICogQHNpbmNlIDEuMTIuMFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0c2V0TWFya2VyKG9wZW4sIGNsb3NlKSB7XG5cdFx0aWYgKGNsb3NlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNsb3NlID0gb3Blbjtcblx0XHR9XG5cblx0XHRpZiAoaXNTdHJpbmcob3BlbikpIG9wZW4gPSBbb3Blbl07XG5cdFx0aWYgKGlzU3RyaW5nKGNsb3NlKSkgY2xvc2UgPSBbY2xvc2VdO1xuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJvcGVuXCJdID0gdmFsaWRhdGVBcnJheShvcGVuKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcIm1hcmtlclwiXVtcImNsb3NlXCJdID0gdmFsaWRhdGVBcnJheShjbG9zZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHRcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdG9vIGRlZXAgbmVzdGluZ1xuXHQgKi9cblx0Zm9ybWF0KHRleHQpIHtcblx0XHR0aGlzW3dhdGNoZG9nU3ltYm9sXSA9IDA7XG5cdFx0dGhpc1ttYXJrZXJPcGVuSW5kZXhTeW1ib2xdID0gMDtcblx0XHR0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdID0gMDtcblx0XHR0aGlzW3dvcmtpbmdEYXRhU3ltYm9sXSA9IHt9O1xuXHRcdHJldHVybiBmb3JtYXQuY2FsbCh0aGlzLCB0ZXh0KTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGZvcm1hdCh0ZXh0KSB7XG5cdHRoaXNbd2F0Y2hkb2dTeW1ib2xdKys7XG5cdGlmICh0aGlzW3dhdGNoZG9nU3ltYm9sXSA+IDIwKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidG9vIGRlZXAgbmVzdGluZ1wiKTtcblx0fVxuXG5cdGNvbnN0IG9wZW5NYXJrZXIgPVxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wib3BlblwiXT8uW3RoaXNbbWFya2VyT3BlbkluZGV4U3ltYm9sXV07XG5cdGNvbnN0IGNsb3NlTWFya2VyID1cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcIm1hcmtlclwiXVtcImNsb3NlXCJdPy5bdGhpc1ttYXJrZXJDbG9zZUluZGV4U3ltYm9sXV07XG5cblx0Ly8gY29udGFpbnMgbm8gcGxhY2Vob2xkZXJzXG5cdGlmICh0ZXh0LmluZGV4T2Yob3Blbk1hcmtlcikgPT09IC0xIHx8IHRleHQuaW5kZXhPZihjbG9zZU1hcmtlcikgPT09IC0xKSB7XG5cdFx0cmV0dXJuIHRleHQ7XG5cdH1cblxuXHRsZXQgcmVzdWx0ID0gdG9rZW5pemUuY2FsbChcblx0XHR0aGlzLFxuXHRcdHZhbGlkYXRlU3RyaW5nKHRleHQpLFxuXHRcdG9wZW5NYXJrZXIsXG5cdFx0Y2xvc2VNYXJrZXIsXG5cdCk7XG5cblx0aWYgKFxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wib3BlblwiXT8uW3RoaXNbbWFya2VyT3BlbkluZGV4U3ltYm9sXSArIDFdXG5cdCkge1xuXHRcdHRoaXNbbWFya2VyT3BlbkluZGV4U3ltYm9sXSsrO1xuXHR9XG5cblx0aWYgKFxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wibWFya2VyXCJdW1wiY2xvc2VcIl0/Llt0aGlzW21hcmtlckNsb3NlSW5kZXhTeW1ib2xdICsgMV1cblx0KSB7XG5cdFx0dGhpc1ttYXJrZXJDbG9zZUluZGV4U3ltYm9sXSsrO1xuXHR9XG5cblx0cmVzdWx0ID0gZm9ybWF0LmNhbGwodGhpcywgcmVzdWx0KTtcblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEyLjBcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IG9wZW5NYXJrZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjbG9zZU1hcmtlclxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiB0b2tlbml6ZSh0ZXh0LCBvcGVuTWFya2VyLCBjbG9zZU1hcmtlcikge1xuXHRjb25zdCBmb3JtYXR0ZWQgPSBbXTtcblxuXHRjb25zdCBwYXJhbWV0ZXJBc3NpZ25tZW50ID0gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJwYXJhbWV0ZXJcIl1bXCJhc3NpZ25tZW50XCJdO1xuXHRjb25zdCBwYXJhbWV0ZXJEZWxpbWl0ZXIgPSB0aGlzW2ludGVybmFsU3ltYm9sXVtcInBhcmFtZXRlclwiXVtcImRlbGltaXRlclwiXTtcblx0Y29uc3QgY2FsbGJhY2tzID0gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJjYWxsYmFja3NcIl07XG5cblx0d2hpbGUgKHRydWUpIHtcblx0XHRjb25zdCBzdGFydEluZGV4ID0gdGV4dC5pbmRleE9mKG9wZW5NYXJrZXIpO1xuXHRcdC8vIG5vIG1hcmtlclxuXHRcdGlmIChzdGFydEluZGV4ID09PSAtMSkge1xuXHRcdFx0Zm9ybWF0dGVkLnB1c2godGV4dCk7XG5cdFx0XHRicmVhaztcblx0XHR9IGVsc2UgaWYgKHN0YXJ0SW5kZXggPiAwKSB7XG5cdFx0XHRmb3JtYXR0ZWQucHVzaCh0ZXh0LnN1YnN0cmluZygwLCBzdGFydEluZGV4KSk7XG5cdFx0XHR0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoc3RhcnRJbmRleCk7XG5cdFx0fVxuXG5cdFx0bGV0IGVuZEluZGV4ID0gdGV4dC5zdWJzdHJpbmcob3Blbk1hcmtlci5sZW5ndGgpLmluZGV4T2YoY2xvc2VNYXJrZXIpO1xuXHRcdGlmIChlbmRJbmRleCAhPT0gLTEpIGVuZEluZGV4ICs9IG9wZW5NYXJrZXIubGVuZ3RoO1xuXHRcdGxldCBpbnNpZGVTdGFydEluZGV4ID0gdGV4dFxuXHRcdFx0LnN1YnN0cmluZyhvcGVuTWFya2VyLmxlbmd0aClcblx0XHRcdC5pbmRleE9mKG9wZW5NYXJrZXIpO1xuXHRcdGlmIChpbnNpZGVTdGFydEluZGV4ICE9PSAtMSkge1xuXHRcdFx0aW5zaWRlU3RhcnRJbmRleCArPSBvcGVuTWFya2VyLmxlbmd0aDtcblx0XHRcdGlmIChpbnNpZGVTdGFydEluZGV4IDwgZW5kSW5kZXgpIHtcblx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gdG9rZW5pemUuY2FsbChcblx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdHRleHQuc3Vic3RyaW5nKGluc2lkZVN0YXJ0SW5kZXgpLFxuXHRcdFx0XHRcdG9wZW5NYXJrZXIsXG5cdFx0XHRcdFx0Y2xvc2VNYXJrZXIsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCBpbnNpZGVTdGFydEluZGV4KSArIHJlc3VsdDtcblx0XHRcdFx0ZW5kSW5kZXggPSB0ZXh0LnN1YnN0cmluZyhvcGVuTWFya2VyLmxlbmd0aCkuaW5kZXhPZihjbG9zZU1hcmtlcik7XG5cdFx0XHRcdGlmIChlbmRJbmRleCAhPT0gLTEpIGVuZEluZGV4ICs9IG9wZW5NYXJrZXIubGVuZ3RoO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChlbmRJbmRleCA9PT0gLTEpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInN5bnRheCBlcnJvciBpbiBmb3JtYXR0ZXIgdGVtcGxhdGVcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3Qga2V5ID0gdGV4dC5zdWJzdHJpbmcob3Blbk1hcmtlci5sZW5ndGgsIGVuZEluZGV4KTtcblx0XHRjb25zdCBwYXJ0cyA9IGtleS5zcGxpdChwYXJhbWV0ZXJEZWxpbWl0ZXIpO1xuXHRcdGNvbnN0IGN1cnJlbnRQaXBlID0gcGFydHMuc2hpZnQoKTtcblxuXHRcdHRoaXNbd29ya2luZ0RhdGFTeW1ib2xdID0gZXh0ZW5kKFxuXHRcdFx0e30sXG5cdFx0XHR0aGlzW2ludGVybmFsT2JqZWN0U3ltYm9sXSxcblx0XHRcdHRoaXNbd29ya2luZ0RhdGFTeW1ib2xdLFxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IGt2IG9mIHBhcnRzKSB7XG5cdFx0XHRjb25zdCBbaywgdl0gPSBrdi5zcGxpdChwYXJhbWV0ZXJBc3NpZ25tZW50KTtcblx0XHRcdHRoaXNbd29ya2luZ0RhdGFTeW1ib2xdW2tdID0gdjtcblx0XHR9XG5cblx0XHRjb25zdCB0MSA9IGtleS5zcGxpdChcInxcIikuc2hpZnQoKS50cmltKCk7IC8vIHBpcGUgc3ltYm9sXG5cdFx0Y29uc3QgdDIgPSB0MS5zcGxpdChcIjo6XCIpLnNoaWZ0KCkudHJpbSgpOyAvLyBrZXkgdmFsdWUgZGVsaW1pdGVyXG5cdFx0Y29uc3QgdDMgPSB0Mi5zcGxpdChcIi5cIikuc2hpZnQoKS50cmltKCk7IC8vIHBhdGggZGVsaW1pdGVyXG5cdFx0Y29uc3QgcHJlZml4ID0gdDMgaW4gdGhpc1t3b3JraW5nRGF0YVN5bWJvbF0gPyBcInBhdGg6XCIgOiBcInN0YXRpYzpcIjtcblxuXHRcdGxldCBjb21tYW5kID0gXCJcIjtcblx0XHRpZiAoXG5cdFx0XHRwcmVmaXggJiZcblx0XHRcdGtleS5pbmRleE9mKHByZWZpeCkgIT09IDAgJiZcblx0XHRcdGtleS5pbmRleE9mKFwicGF0aDpcIikgIT09IDAgJiZcblx0XHRcdGtleS5pbmRleE9mKFwic3RhdGljOlwiKSAhPT0gMFxuXHRcdCkge1xuXHRcdFx0Y29tbWFuZCA9IHByZWZpeDtcblx0XHR9XG5cblx0XHRjb21tYW5kICs9IGN1cnJlbnRQaXBlO1xuXG5cdFx0Y29uc3QgcGlwZSA9IG5ldyBQaXBlKGNvbW1hbmQpO1xuXG5cdFx0aWYgKGlzT2JqZWN0KGNhbGxiYWNrcykpIHtcblx0XHRcdGZvciAoY29uc3QgW25hbWUsIGNhbGxiYWNrXSBvZiBPYmplY3QuZW50cmllcyhjYWxsYmFja3MpKSB7XG5cdFx0XHRcdHBpcGUuc2V0Q2FsbGJhY2sobmFtZSwgY2FsbGJhY2spO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvcm1hdHRlZC5wdXNoKHZhbGlkYXRlU3RyaW5nKHBpcGUucnVuKHRoaXNbd29ya2luZ0RhdGFTeW1ib2xdKSkpO1xuXHRcdHRleHQgPSB0ZXh0LnN1YnN0cmluZyhlbmRJbmRleCArIGNsb3NlTWFya2VyLmxlbmd0aCk7XG5cdH1cblxuXHRyZXR1cm4gZm9ybWF0dGVkLmpvaW4oXCJcIik7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVBcnJheSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IE1lZGlhVHlwZSwgcGFyc2VNZWRpYVR5cGUgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWwgPSBTeW1ib2woXCJpbnRlcm5hbFwiKTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBQYXJhbWV0ZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBrZXlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICovXG5cbi8qKlxuICogWW91IGNhbiBjcmVhdGUgYW4gb2JqZWN0IHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYG5ldyBNb25zdGVyLlR5cGVzLk1lZGlhVHlwZSgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgTWVkaWFUeXBlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gc3VidHlwZVxuXHQgKiBAcGFyYW0ge01vbnN0ZXIuVHlwZXMuUGFyYW1ldGVyW119IHBhcmFtZXRlclxuXHQgKi9cblx0Y29uc3RydWN0b3IodHlwZSwgc3VidHlwZSwgcGFyYW1ldGVyKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxdID0ge1xuXHRcdFx0dHlwZTogdmFsaWRhdGVTdHJpbmcodHlwZSkudG9Mb3dlckNhc2UoKSxcblx0XHRcdHN1YnR5cGU6IHZhbGlkYXRlU3RyaW5nKHN1YnR5cGUpLnRvTG93ZXJDYXNlKCksXG5cdFx0XHRwYXJhbWV0ZXI6IFtdLFxuXHRcdH07XG5cblx0XHRpZiAocGFyYW1ldGVyICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXNbaW50ZXJuYWxdW1wicGFyYW1ldGVyXCJdID0gdmFsaWRhdGVBcnJheShwYXJhbWV0ZXIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvbWVkaWEtdHlwZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTdHJpbmd9XG5cdCAqL1xuXHRnZXQgdHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0udHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTdHJpbmd9XG5cdCAqL1xuXHRnZXQgc3VidHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0uc3VidHlwZTtcblx0fVxuXG5cdC8vIC8qKlxuXHQvLyAgKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLlBhcmFtZXRlcltdfVxuXHQvLyAgKi9cblx0Ly8gZ2V0IHBhcmFtZXRlcigpIHtcblx0Ly8gXHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0ucGFyYW1ldGVyO1xuXHQvLyB9XG5cblx0LyoqXG5cdCAqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01hcH1cblx0ICovXG5cdGdldCBwYXJhbWV0ZXIoKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuXG5cdFx0dGhpc1tpbnRlcm5hbF1bXCJwYXJhbWV0ZXJcIl0uZm9yRWFjaCgocCkgPT4ge1xuXHRcdFx0bGV0IHZhbHVlID0gcC52YWx1ZTtcblxuXHRcdFx0Ly8gaW50ZXJuYWxseSBzcGVjaWFsIHZhbHVlcyBhcmUgcGFydGx5IHN0b3JlZCB3aXRoIHF1b3RlcywgdGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZW0uXG5cdFx0XHRpZiAodmFsdWUuc3RhcnRzV2l0aCgnXCInKSAmJiB2YWx1ZS5lbmRzV2l0aCgnXCInKSkge1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygxLCB2YWx1ZS5sZW5ndGggLSAxKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzdWx0LnNldChwLmtleSwgdmFsdWUpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRjb25zdCBwYXJhbWV0ZXIgPSBbXTtcblx0XHRmb3IgKGNvbnN0IGEgb2YgdGhpc1tpbnRlcm5hbF0ucGFyYW1ldGVyKSB7XG5cdFx0XHRwYXJhbWV0ZXIucHVzaChgJHthLmtleX09JHthLnZhbHVlfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBgJHt0aGlzW2ludGVybmFsXS50eXBlfS8ke3RoaXNbaW50ZXJuYWxdLnN1YnR5cGV9JHtcblx0XHRcdHBhcmFtZXRlci5sZW5ndGggPiAwID8gYDske3BhcmFtZXRlci5qb2luKFwiO1wiKX1gIDogXCJcIlxuXHRcdH1gO1xuXHR9XG59XG5cbi8qKlxuICogWW91IGNhbiBjYWxsIHRoZSBmdW5jdGlvbiB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLlR5cGVzLnBhcnNlTWVkaWFUeXBlKClgLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge01vbnN0ZXJ9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL21vbnN0ZXIubWpzJztcbiAqIGNvbnNvbGUubG9nKE1vbnN0ZXIuVHlwZXMucGFyc2VNZWRpYVR5cGUoKSlcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhbHNvIGludGVncmF0ZSB0aGlzIGZ1bmN0aW9uIGluZGl2aWR1YWxseS5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtwYXJzZU1lZGlhVHlwZX0gZnJvbSAnQHNjaHVrYWkvbW9uc3Rlci9zb3VyY2UvdHlwZXMvZGF0YXVybC5tanMnO1xuICogY29uc29sZS5sb2cocGFyc2VNZWRpYVR5cGUoKSlcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogU3BlY2lmaWNhdGlvbjpcbiAqXG4gKiBgYGBcbiAqIGRhdGF1cmwgICAgOj0gXCJkYXRhOlwiIFsgbWVkaWF0eXBlIF0gWyBcIjtiYXNlNjRcIiBdIFwiLFwiIGRhdGFcbiAqIG1lZGlhdHlwZSAgOj0gWyB0eXBlIFwiL1wiIHN1YnR5cGUgXSAqKCBcIjtcIiBwYXJhbWV0ZXIgKVxuICogZGF0YSAgICAgICA6PSAqdXJsY2hhclxuICogcGFyYW1ldGVyICA6PSBhdHRyaWJ1dGUgXCI9XCIgdmFsdWVcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZWRpYXR5cGVcbiAqIEByZXR1cm4ge01vbnN0ZXIuVHlwZXMuTWVkaWFUeXBlfVxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIwNDUjc2VjdGlvbi01LjFcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdGhlIG1pbWV0eXBlIGNhbiBub3QgYmUgcGFyc2VkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IGJsYW5rIHZhbHVlIGlzIG5vdCBhbGxvd2VkXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IG1hbGZvcm1lZCBkYXRhIHVybFxuICovXG5mdW5jdGlvbiBwYXJzZU1lZGlhVHlwZShtZWRpYXR5cGUpIHtcblx0Y29uc3QgcmVnZXggPVxuXHRcdC8oPzx0eXBlPltBLVphLXpdK3xcXCopXFwvKD88c3VidHlwZT4oW2EtekEtWjAtOS5cXCtfXFwtXSspfFxcKnwpKD88cGFyYW1ldGVyPlxccyo7XFxzKihbYS16QS1aMC05XSspXFxzKig9XFxzKihcIj9bQS1aYS16MC05X1xcLV0rXCI/KSk/KSovZztcblx0Y29uc3QgcmVzdWx0ID0gcmVnZXguZXhlYyh2YWxpZGF0ZVN0cmluZyhtZWRpYXR5cGUpKTtcblxuXHRjb25zdCBncm91cHMgPSByZXN1bHQ/LltcImdyb3Vwc1wiXTtcblx0aWYgKGdyb3VwcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInRoZSBtaW1ldHlwZSBjYW4gbm90IGJlIHBhcnNlZFwiKTtcblx0fVxuXG5cdGNvbnN0IHR5cGUgPSBncm91cHM/LltcInR5cGVcIl07XG5cdGNvbnN0IHN1YnR5cGUgPSBncm91cHM/LltcInN1YnR5cGVcIl07XG5cdGNvbnN0IHBhcmFtZXRlciA9IGdyb3Vwcz8uW1wicGFyYW1ldGVyXCJdO1xuXG5cdGlmIChzdWJ0eXBlID09PSBcIlwiIHx8IHR5cGUgPT09IFwiXCIpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiYmxhbmsgdmFsdWUgaXMgbm90IGFsbG93ZWRcIik7XG5cdH1cblxuXHRyZXR1cm4gbmV3IE1lZGlhVHlwZSh0eXBlLCBzdWJ0eXBlLCBwYXJzZVBhcmFtZXRlcihwYXJhbWV0ZXIpKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xOC4wXG4gKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1ldGVyXG4gKiBAcmV0dXJuIHtNb25zdGVyLlR5cGVzLlBhcmFtZXRlcltdfHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gcGFyc2VQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG5cdGlmICghaXNTdHJpbmcocGFyYW1ldGVyKSkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRwYXJhbWV0ZXIuc3BsaXQoXCI7XCIpLmZvckVhY2goKGVudHJ5KSA9PiB7XG5cdFx0ZW50cnkgPSBlbnRyeS50cmltKCk7XG5cdFx0aWYgKGVudHJ5ID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qga3YgPSBlbnRyeS5zcGxpdChcIj1cIik7XG5cblx0XHRjb25zdCBrZXkgPSB2YWxpZGF0ZVN0cmluZyhrdj8uWzBdKS50cmltKCk7XG5cdFx0Y29uc3QgdmFsdWUgPSB2YWxpZGF0ZVN0cmluZyhrdj8uWzFdKS50cmltKCk7XG5cblx0XHQvLyBpZiB2YWx1ZXMgYXJlIHF1b3RlZCwgdGhleSByZW1haW4gc28gaW50ZXJuYWxseVxuXHRcdHJlc3VsdC5wdXNoKHtcblx0XHRcdGtleToga2V5LFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdH0pO1xuXHR9KTtcblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi9pcy5tanNcIjtcbmltcG9ydCB7IE1lZGlhVHlwZSwgcGFyc2VNZWRpYVR5cGUgfSBmcm9tIFwiLi9tZWRpYXR5cGUubWpzXCI7XG5pbXBvcnQge1xuXHR2YWxpZGF0ZUJvb2xlYW4sXG5cdHZhbGlkYXRlSW5zdGFuY2UsXG5cdHZhbGlkYXRlU3RyaW5nLFxufSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IERhdGFVcmwsIHBhcnNlRGF0YVVSTCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbCA9IFN5bWJvbChcImludGVybmFsXCIpO1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIGFuIG9iamVjdCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgRGF0YVVybCgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9CYXNpY3Nfb2ZfSFRUUC9EYXRhX1VSSXNcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMyMzk3XG4gKi9cbmNsYXNzIERhdGFVcmwgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBjb250ZW50XG5cdCAqIEBwYXJhbSB7U3RyaW5nfE1lZGlhVHlwZX0gbWVkaWF0eXBlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYmFzZTY0PXRydWVcblx0ICovXG5cdGNvbnN0cnVjdG9yKGNvbnRlbnQsIG1lZGlhdHlwZSwgYmFzZTY0KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmIChpc1N0cmluZyhtZWRpYXR5cGUpKSB7XG5cdFx0XHRtZWRpYXR5cGUgPSBwYXJzZU1lZGlhVHlwZShtZWRpYXR5cGUpO1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxdID0ge1xuXHRcdFx0Y29udGVudDogdmFsaWRhdGVTdHJpbmcoY29udGVudCksXG5cdFx0XHRtZWRpYXR5cGU6IHZhbGlkYXRlSW5zdGFuY2UobWVkaWF0eXBlLCBNZWRpYVR5cGUpLFxuXHRcdFx0YmFzZTY0OiB2YWxpZGF0ZUJvb2xlYW4oYmFzZTY0ID09PSB1bmRlZmluZWQgPyB0cnVlIDogYmFzZTY0KSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9kYXRhLXVybFwiKTtcblx0fVxuXG5cdGdldCBjb250ZW50KCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsXS5iYXNlNjRcblx0XHRcdD8gYXRvYih0aGlzW2ludGVybmFsXS5jb250ZW50KVxuXHRcdFx0OiB0aGlzW2ludGVybmFsXS5jb250ZW50O1xuXHR9XG5cblx0Z2V0IG1lZGlhdHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbF0ubWVkaWF0eXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIzOTdcblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdGxldCBjb250ZW50ID0gdGhpc1tpbnRlcm5hbF0uY29udGVudDtcblxuXHRcdGlmICh0aGlzW2ludGVybmFsXS5iYXNlNjQgPT09IHRydWUpIHtcblx0XHRcdGNvbnRlbnQgPSBgO2Jhc2U2NCwke2NvbnRlbnR9YDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGVudCA9IGAsJHtlbmNvZGVVUklDb21wb25lbnQoY29udGVudCl9YDtcblx0XHR9XG5cblx0XHRyZXR1cm4gYGRhdGE6JHt0aGlzW2ludGVybmFsXS5tZWRpYXR5cGUudG9TdHJpbmcoKX0ke2NvbnRlbnR9YDtcblx0fVxufVxuXG4vKipcbiAqIFlvdSBjYW4gY2FsbCB0aGUgZnVuY3Rpb24gdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgcGFyc2VEYXRhVVJMKClgLlxuICpcbiAqIFNwZWNpZmljYXRpb246XG4gKlxuICogYGBgXG4gKiBkYXRhdXJsICAgIDo9IFwiZGF0YTpcIiBbIG1lZGlhdHlwZSBdIFsgXCI7YmFzZTY0XCIgXSBcIixcIiBkYXRhXG4gKiBtZWRpYXR5cGUgIDo9IFsgdHlwZSBcIi9cIiBzdWJ0eXBlIF0gKiggXCI7XCIgcGFyYW1ldGVyIClcbiAqIGRhdGEgICAgICAgOj0gKnVybGNoYXJcbiAqIHBhcmFtZXRlciAgOj0gYXR0cmlidXRlIFwiPVwiIHZhbHVlXG4gKiBgYGBcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvQmFzaWNzX29mX0hUVFAvRGF0YV9VUklzXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjM5N1xuICogQHRocm93cyB7VHlwZUVycm9yfSBpbmNvcnJlY3Qgb3IgbWlzc2luZyBkYXRhIHByb3RvY29sXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IG1hbGZvcm1lZCBkYXRhIHVybFxuICogQHBhcmFtIHtzdHJpbmd9IGRhdGF1cmxcbiAqIEByZXR1cm4ge0RhdGFVcmx9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlRGF0YVVSTChkYXRhdXJsKSB7XG5cdHZhbGlkYXRlU3RyaW5nKGRhdGF1cmwpO1xuXG5cdGRhdGF1cmwgPSBkYXRhdXJsLnRyaW0oKTtcblxuXHRpZiAoZGF0YXVybC5zdWJzdHJpbmcoMCwgNSkgIT09IFwiZGF0YTpcIikge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJpbmNvcnJlY3Qgb3IgbWlzc2luZyBkYXRhIHByb3RvY29sXCIpO1xuXHR9XG5cblx0ZGF0YXVybCA9IGRhdGF1cmwuc3Vic3RyaW5nKDUpO1xuXG5cdGNvbnN0IHAgPSBkYXRhdXJsLmluZGV4T2YoXCIsXCIpO1xuXHRpZiAocCA9PT0gLTEpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwibWFsZm9ybWVkIGRhdGEgdXJsXCIpO1xuXHR9XG5cblx0bGV0IGNvbnRlbnQgPSBkYXRhdXJsLnN1YnN0cmluZyhwICsgMSk7XG5cdGNvbnN0IG1lZGlhdHlwZUFuZEJhc2U2NCA9IGRhdGF1cmwuc3Vic3RyaW5nKDAsIHApLnRyaW0oKTtcblx0bGV0IG1lZGlhdHlwZSA9IFwidGV4dC9wbGFpbjtjaGFyc2V0PVVTLUFTQ0lJXCI7XG5cdGxldCBiYXNlNjRGbGFnID0gZmFsc2U7XG5cblx0aWYgKG1lZGlhdHlwZUFuZEJhc2U2NCAhPT0gXCJcIikge1xuXHRcdG1lZGlhdHlwZSA9IG1lZGlhdHlwZUFuZEJhc2U2NDtcblx0XHRpZiAobWVkaWF0eXBlQW5kQmFzZTY0LmVuZHNXaXRoKFwiYmFzZTY0XCIpKSB7XG5cdFx0XHRjb25zdCBpID0gbWVkaWF0eXBlQW5kQmFzZTY0Lmxhc3RJbmRleE9mKFwiO1wiKTtcblx0XHRcdG1lZGlhdHlwZSA9IG1lZGlhdHlwZUFuZEJhc2U2NC5zdWJzdHJpbmcoMCwgaSk7XG5cdFx0XHRiYXNlNjRGbGFnID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGVudCA9IGRlY29kZVVSSUNvbXBvbmVudChjb250ZW50KTtcblx0XHR9XG5cblx0XHRtZWRpYXR5cGUgPSBwYXJzZU1lZGlhVHlwZShtZWRpYXR5cGUpO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnRlbnQgPSBkZWNvZGVVUklDb21wb25lbnQoY29udGVudCk7XG5cdH1cblxuXHRyZXR1cm4gbmV3IERhdGFVcmwoY29udGVudCwgbWVkaWF0eXBlLCBiYXNlNjRGbGFnKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgUXVldWUgfTtcblxuLyoqXG4gKiBBIHF1ZXVlIGlzIGEgbGlzdCBvZiBpdGVtcyB0aGF0IGFyZSBwcm9jZXNzZWQgb25lIGFmdGVyIGFub3RoZXIgKGZpcnN0IGluLCBmaXJzdCBvdXQpLlxuICpcbiAqIFdpdGggYSBxdWV1ZSB5b3UgY2FuIGFkZCBpdGVtcyB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IGBRdWV1ZS5hZGQoKWAgYW5kIHJlbW92ZSBpdGVtcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QgYFF1ZXVlLnBvcCgpYC5cbiAqXG4gKiBXaXRoIGBRdWV1ZS5wZWVrKClgIHlvdSBjYW4gZ2V0IHRoZSBmaXJzdCBpdGVtIHdpdGhvdXQgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgbGlzdC5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGUgaW5zdGFuY2UgdmlhIGBuZXcgUXVldWUoKWAuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS40LjBcbiAqIEBzdW1tYXJ5IEEgUXVldWUgKEZpZm8pXG4gKi9cbmNsYXNzIFF1ZXVlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmRhdGEgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvcXVldWVcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzRW1wdHkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGggPT09IDA7XG5cdH1cblxuXHQvKipcblx0ICogUmVhZCB0aGUgZWxlbWVudCBhdCB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlIHdpdGhvdXQgcmVtb3ZpbmcgaXQuXG5cdCAqXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRwZWVrKCkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5kYXRhWzBdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIG5ldyBlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1F1ZXVlfVxuXHQgKi9cblx0YWRkKHZhbHVlKSB7XG5cdFx0dGhpcy5kYXRhLnB1c2godmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJlbW92ZSBhbGwgZW50cmllc1xuXHQgKlxuXHQgKiBAcmV0dXJuIHtRdWV1ZX1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHRoaXMuZGF0YSA9IFtdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZSB0aGUgZWxlbWVudCBhdCB0aGUgZnJvbnQgb2YgdGhlIHF1ZXVlXG5cdCAqIElmIHRoZSBxdWV1ZSBpcyBlbXB0eSwgcmV0dXJuIHVuZGVmaW5lZC5cblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICovXG5cdHBvbGwoKSB7XG5cdFx0aWYgKHRoaXMuaXNFbXB0eSgpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5kYXRhLnNoaWZ0KCk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBRdWV1ZSB9IGZyb20gXCIuL3F1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgVW5pcXVlUXVldWUgfTtcblxuLyoqXG4gKiBBbiBVbmlxdWVRdWV1ZSBpcyBhIHF1ZXVlIHRoYXQgY29udGFpbnMgaXRlbXMgb25seSBvbmNlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBxdWV1ZSBmb3IgdW5pcXVlIHZhbHVlc1xuICovXG5jbGFzcyBVbmlxdWVRdWV1ZSBleHRlbmRzIFF1ZXVlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0dW5pcXVlOiBuZXcgV2Vha1NldCgpLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGEgbmV3IGVsZW1lbnQgdG8gdGhlIGVuZCBvZiB0aGUgcXVldWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtRdWV1ZX1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3Rcblx0ICovXG5cdGFkZCh2YWx1ZSkge1xuXHRcdHZhbGlkYXRlT2JqZWN0KHZhbHVlKTtcblxuXHRcdGlmICghdGhpc1tpbnRlcm5hbFN5bWJvbF0udW5pcXVlLmhhcyh2YWx1ZSkpIHtcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnVuaXF1ZS5hZGQodmFsdWUpO1xuXHRcdFx0c3VwZXIuYWRkKHZhbHVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZW1vdmUgYWxsIGVudHJpZXNcblx0ICpcblx0ICogQHJldHVybiB7UXVldWV9XG5cdCAqL1xuXHRjbGVhcigpIHtcblx0XHRzdXBlci5jbGVhcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnVuaXF1ZSA9IG5ldyBXZWFrU2V0KCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlIHRoZSBlbGVtZW50IGF0IHRoZSBmcm9udCBvZiB0aGUgcXVldWVcblx0ICogSWYgdGhlIHF1ZXVlIGlzIGVtcHR5LCByZXR1cm4gdW5kZWZpbmVkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtvYmplY3R9XG5cdCAqL1xuXHRwb2xsKCkge1xuXHRcdGlmICh0aGlzLmlzRW1wdHkoKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWUgPSB0aGlzLmRhdGEuc2hpZnQoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS51bmlxdWUuZGVsZXRlKHZhbHVlKTtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBUb2tlbkxpc3QgfSBmcm9tIFwiLi90b2tlbmxpc3QubWpzXCI7XG5pbXBvcnQgeyBVbmlxdWVRdWV1ZSB9IGZyb20gXCIuL3VuaXF1ZXF1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgT2JzZXJ2ZXIgfTtcblxuLyoqXG4gKiBBbiBvYnNlcnZlciBtYW5hZ2VzIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAqXG4gKiBUaGUgdXBkYXRlIG1ldGhvZCBpcyBjYWxsZWQgd2l0aCB0aGUgc3ViamVjdCBvYmplY3QgYXMgdGhpcyBwb2ludGVyLiBGb3IgdGhpcyByZWFzb25cbiAqIHRoZSBjYWxsYmFjayBzaG91bGQgbm90IGJlIGFuIGFycm93IGZ1bmN0aW9uLCBiZWNhdXNlIGl0IGdldHMgdGhpcyBwb2ludGVyIG9mIGl0cyBvd24gY29udGV4dC5cbiAqXG4gKiBJbmNsdWRlIHRoaXMgY2xhc3MgaW4geW91ciBwcm9qZWN0IHdpdGggdGhlIGZvbGxvd2luZyBjb2RlOlxuICpcbiAqIGBgYGpzXG4gKiBpbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCJAc2NodWthaS9tb25zdGVyL3NvdXJjZS90eXBlcy9vYnNlcnZlci5tanNcIjtcbiAqIGBgYFxuICpcbiAqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBgYGBqc1xuICogbmV3IE9ic2VydmVyKCgpPT57XG4gKiAgICAgLy8gdGhpcyBpcyBub3Qgc3ViamVjdFxuICogfSlcbiAqXG4gKiBuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24oKSB7XG4gKiAgICAgLy8gdGhpcyBpcyBzdWJqZWN0XG4gKiB9KVxuICogYGBgXG4gKlxuICogQWRkaXRpb25hbCBhcmd1bWVudHMgY2FuIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2suIFRvIGRvIHRoaXMsIHNpbXBseSBzcGVjaWZ5IHRoZW0uXG4gKlxuICogYGBganNcbiAqIE9ic2VydmVyKGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAqICAgICBjb25zb2xlLmxvZyhhLCBiLCBjKTsgLy8gXHUyMUE2IFwiYVwiLCAyLCB0cnVlXG4gKiB9LCBcImFcIiwgMiwgdHJ1ZSlcbiAqIGBgYFxuICpcbiAqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBtdXN0IGhhdmUgYXMgbWFueSBwYXJhbWV0ZXJzIGFzIGFyZ3VtZW50cyBhcmUgZ2l2ZW4uXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqL1xuY2xhc3MgT2JzZXJ2ZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7Kn0gYXJnc1xuXHQgKi9cblx0Y29uc3RydWN0b3IoY2FsbGJhY2ssIC4uLmFyZ3MpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJvYnNlcnZlciBjYWxsYmFjayBtdXN0IGJlIGEgZnVuY3Rpb25cIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuXHRcdHRoaXMuYXJndW1lbnRzID0gYXJncztcblx0XHR0aGlzLnRhZ3MgPSBuZXcgVG9rZW5MaXN0KCk7XG5cdFx0dGhpcy5xdWV1ZSA9IG5ldyBVbmlxdWVRdWV1ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9vYnNlcnZlclwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGFnXG5cdCAqIEByZXR1cm4ge09ic2VydmVyfVxuXHQgKi9cblx0YWRkVGFnKHRhZykge1xuXHRcdHRoaXMudGFncy5hZGQodGFnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGFnXG5cdCAqIEByZXR1cm4ge09ic2VydmVyfVxuXHQgKi9cblx0cmVtb3ZlVGFnKHRhZykge1xuXHRcdHRoaXMudGFncy5yZW1vdmUodGFnKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtBcnJheX1cblx0ICovXG5cdGdldFRhZ3MoKSB7XG5cdFx0cmV0dXJuIHRoaXMudGFncy5lbnRyaWVzKCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRhZ1xuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aGFzVGFnKHRhZykge1xuXHRcdHJldHVybiB0aGlzLnRhZ3MuY29udGFpbnModGFnKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gc3ViamVjdFxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0dXBkYXRlKHN1YmplY3QpIHtcblx0XHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRcdGlmICghaXNPYmplY3Qoc3ViamVjdCkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChcInN1YmplY3QgbXVzdCBiZSBhbiBvYmplY3RcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdHNlbGYucXVldWUuYWRkKHN1YmplY3QpO1xuXG5cdFx0XHRxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Ly8gdGhlIHF1ZXVlIGFuZCB0aGUgYHF1ZXVlTWljcm90YXNrYCBlbnN1cmUgdGhhdCBhbiBvYmplY3QgaXMgbm90XG5cdFx0XHRcdFx0Ly8gaW5mb3JtZWQgb2YgdGhlIHNhbWUgY2hhbmdlIG1vcmUgdGhhbiBvbmNlLlxuXHRcdFx0XHRcdGlmIChzZWxmLnF1ZXVlLmlzRW1wdHkoKSkge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IHMgPSBzZWxmLnF1ZXVlLnBvbGwoKTtcblx0XHRcdFx0XHRjb25zdCByZXN1bHQgPSBzZWxmLmNhbGxiYWNrLmFwcGx5KHMsIHNlbGYuYXJndW1lbnRzKTtcblxuXHRcdFx0XHRcdGlmIChpc09iamVjdChyZXN1bHQpICYmIHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmVzb2x2ZShyZXN1bHQpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgT2JzZXJ2ZXJMaXN0IH07XG5cbi8qKlxuICogV2l0aCB0aGUgaGVscCBvZiB0aGUgT2JzZXJ2ZXJMaXN0IGNsYXNzLCBvYnNlcnZlciBjYW4gYmUgbWFuYWdlZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICovXG5jbGFzcyBPYnNlcnZlckxpc3QgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMub2JzZXJ2ZXJzID0gW107XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7T2JzZXJ2ZXJMaXN0fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBPYnNlcnZlclxuXHQgKi9cblx0YXR0YWNoKG9ic2VydmVyKSB7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZShvYnNlcnZlciwgT2JzZXJ2ZXIpO1xuXG5cdFx0dGhpcy5vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7T2JzZXJ2ZXJMaXN0fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBPYnNlcnZlclxuXHQgKi9cblx0ZGV0YWNoKG9ic2VydmVyKSB7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZShvYnNlcnZlciwgT2JzZXJ2ZXIpO1xuXG5cdFx0dmFyIGkgPSAwO1xuXHRcdHZhciBsID0gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuXHRcdGZvciAoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy5vYnNlcnZlcnNbaV0gPT09IG9ic2VydmVyKSB7XG5cdFx0XHRcdHRoaXMub2JzZXJ2ZXJzLnNwbGljZShpLCAxKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBPYnNlcnZlclxuXHQgKi9cblx0Y29udGFpbnMob2JzZXJ2ZXIpIHtcblx0XHR2YWxpZGF0ZUluc3RhbmNlKG9ic2VydmVyLCBPYnNlcnZlcik7XG5cdFx0dmFyIGkgPSAwO1xuXHRcdHZhciBsID0gdGhpcy5vYnNlcnZlcnMubGVuZ3RoO1xuXHRcdGZvciAoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRpZiAodGhpcy5vYnNlcnZlcnNbaV0gPT09IG9ic2VydmVyKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHN1YmplY3Rcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdG5vdGlmeShzdWJqZWN0KSB7XG5cdFx0Y29uc3QgcG9taXNlcyA9IFtdO1xuXG5cdFx0bGV0IGkgPSAwO1xuXHRcdGNvbnN0IGwgPSB0aGlzLm9ic2VydmVycy5sZW5ndGg7XG5cdFx0Zm9yICg7IGkgPCBsOyBpKyspIHtcblx0XHRcdHBvbWlzZXMucHVzaCh0aGlzLm9ic2VydmVyc1tpXS51cGRhdGUoc3ViamVjdCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBQcm9taXNlLmFsbChwb21pc2VzKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QsIGlzUHJpbWl0aXZlIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXJMaXN0IH0gZnJvbSBcIi4vb2JzZXJ2ZXJsaXN0Lm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QgfSBmcm9tIFwiLi92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sLCBwcm94eUluc3RhbmNlTWFya2VyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGNsb25lIH0gZnJvbSBcIi4uL3V0aWwvY2xvbmUubWpzXCI7XG5leHBvcnQgeyBQcm94eU9ic2VydmVyIH07XG5cbi8qKlxuICogQW4gb2JzZXJ2ZXIgbWFuYWdlcyBhIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKlxuICogV2l0aCB0aGUgUHJveHlPYnNlcnZlciB5b3UgY2FuIGF0dGFjaCBvYnNlcnZlciBmb3Igb2JzZXJ2YXRpb24uXG4gKiBXaXRoIGVhY2ggY2hhbmdlIGF0IHRoZSBvYmplY3QgdG8gYmUgb2JzZXJ2ZWQsIGFuIHVwZGF0ZSB0YWtlcyBwbGFjZS5cbiAqXG4gKiBUaGlzIGFsc28gYXBwbGllcyB0byBuZXN0ZWQgb2JqZWN0cy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgUHJveHlPYnNlcnZlciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG9iamVjdFxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuXHQgKi9cblx0Y29uc3RydWN0b3Iob2JqZWN0KSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXMucmVhbFN1YmplY3QgPSB2YWxpZGF0ZU9iamVjdChvYmplY3QpO1xuXHRcdHRoaXMuc3ViamVjdCA9IG5ldyBQcm94eShvYmplY3QsIGdldEhhbmRsZXIuY2FsbCh0aGlzKSk7XG5cblx0XHR0aGlzLm9iamVjdE1hcCA9IG5ldyBXZWFrTWFwKCk7XG5cdFx0dGhpcy5vYmplY3RNYXAuc2V0KHRoaXMucmVhbFN1YmplY3QsIHRoaXMuc3ViamVjdCk7XG5cblx0XHR0aGlzLnByb3h5TWFwID0gbmV3IFdlYWtNYXAoKTtcblx0XHR0aGlzLnByb3h5TWFwLnNldCh0aGlzLnN1YmplY3QsIHRoaXMucmVhbFN1YmplY3QpO1xuXG5cdFx0dGhpcy5vYnNlcnZlcnMgPSBuZXcgT2JzZXJ2ZXJMaXN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL3Byb3h5LW9ic2VydmVyXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge29iamVjdH1cblx0ICovXG5cdGdldFN1YmplY3QoKSB7XG5cdFx0cmV0dXJuIHRoaXMuc3ViamVjdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMS4yNC4wXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcblx0ICogQHJldHVybiB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdHNldFN1YmplY3Qob2JqKSB7XG5cdFx0bGV0IGk7XG5cdFx0Y29uc3QgY2xvbmVkT2JqZWN0ID0gY2xvbmUob2JqKTtcblx0XHRjb25zdCBrID0gT2JqZWN0LmtleXModGhpcy5zdWJqZWN0KTtcblx0XHRmb3IgKGkgPSAwOyBpIDwgay5sZW5ndGg7IGkrKykge1xuXHRcdFx0ZGVsZXRlIHRoaXMuc3ViamVjdFtrW2ldXTtcblx0XHR9XG5cblx0XHR0aGlzLnN1YmplY3QgPSBleHRlbmQodGhpcy5zdWJqZWN0LCBjbG9uZWRPYmplY3QpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgcmVhbCBvYmplY3Rcblx0ICpcblx0ICogQ2hhbmdlcyB0byB0aGlzIG9iamVjdCBhcmUgbm90IG5vdGljZWQgYnkgdGhlIG9ic2VydmVycywgc28geW91IGNhbiBtYWtlIGEgbGFyZ2UgbnVtYmVyIG9mIGNoYW5nZXMgYW5kIGluZm9ybSB0aGUgb2JzZXJ2ZXJzIGxhdGVyLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtvYmplY3R9XG5cdCAqL1xuXHRnZXRSZWFsU3ViamVjdCgpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFsU3ViamVjdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBhdHRhY2ggYSBuZXcgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdGF0dGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpcy5vYnNlcnZlcnMuYXR0YWNoKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBkZXRhY2ggYSBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtQcm94eU9ic2VydmVyfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzLm9ic2VydmVycy5kZXRhY2gob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIG5vdGlmeSBhbGwgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdG5vdGlmeU9ic2VydmVycygpIHtcblx0XHRyZXR1cm4gdGhpcy5vYnNlcnZlcnMubm90aWZ5KHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRjb250YWluc09ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0cmV0dXJuIHRoaXMub2JzZXJ2ZXJzLmNvbnRhaW5zKG9ic2VydmVyKTtcblx0fVxufVxuXG4vKipcbiAqXG4gKiBAcmV0dXJuIHt7ZGVmaW5lUHJvcGVydHk6IChmdW5jdGlvbigqPSwgKj0sICo9KTogKiksIHNldFByb3RvdHlwZU9mOiAoZnVuY3Rpb24oKiwgKj0pOiBib29sZWFuKSwgc2V0OiAoZnVuY3Rpb24oKiwgKiwgKiwgKik6IGJvb2xlYW4pLCBnZXQ6ICgoZnVuY3Rpb24oKj0sICo9LCAqPSk6ICh1bmRlZmluZWQpKXwqKSwgZGVsZXRlUHJvcGVydHk6ICgoZnVuY3Rpb24oKiwgKik6IChib29sZWFuKSl8Kil9fVxuICogQHByaXZhdGVcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tLy0vc25pcHBldHMvNDl9XG4gKi9cbmZ1bmN0aW9uIGdldEhhbmRsZXIoKSB7XG5cdGNvbnN0IHByb3h5ID0gdGhpcztcblxuXHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzkuMC8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90c1xuXHRjb25zdCBoYW5kbGVyID0ge1xuXHRcdC8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvOS4wLyNzZWMtcHJveHktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzLWdldC1wLXJlY2VpdmVyXG5cdFx0Z2V0OiBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIHJlY2VpdmVyKSB7XG5cdFx0XHQvLyB0aGlzIGlzIGFuIGludGVybmFsIGhhY2sgdG8gaWRlbnRpZnkgcHJveHlcblx0XHRcdGlmIChrZXkgPT09IHByb3h5SW5zdGFuY2VNYXJrZXIpIHtcblx0XHRcdFx0cmV0dXJuIHByb3h5SW5zdGFuY2VNYXJrZXI7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHZhbHVlID0gUmVmbGVjdC5nZXQodGFyZ2V0LCBrZXksIHJlY2VpdmVyKTtcblxuXHRcdFx0aWYgKHR5cGVvZiBrZXkgPT09IFwic3ltYm9sXCIpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNQcmltaXRpdmUodmFsdWUpKSB7XG5cdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc2V0IHZhbHVlIGFzIHByb3h5IGlmIG9iamVjdCBvciBhcnJheVxuXHRcdFx0aWYgKGlzQXJyYXkodmFsdWUpIHx8IGlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdFx0XHRpZiAocHJveHkub2JqZWN0TWFwLmhhcyh2YWx1ZSkpIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJveHkub2JqZWN0TWFwLmdldCh2YWx1ZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAocHJveHkucHJveHlNYXAuaGFzKHZhbHVlKSkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBwID0gbmV3IFByb3h5KHZhbHVlLCBoYW5kbGVyKTtcblx0XHRcdFx0XHRwcm94eS5vYmplY3RNYXAuc2V0KHZhbHVlLCBwKTtcblx0XHRcdFx0XHRwcm94eS5wcm94eU1hcC5zZXQocCwgdmFsdWUpO1xuXHRcdFx0XHRcdHJldHVybiBwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gaHR0cHM6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy85LjAvI3NlYy1wcm94eS1vYmplY3QtaW50ZXJuYWwtbWV0aG9kcy1hbmQtaW50ZXJuYWwtc2xvdHMtc2V0LXAtdi1yZWNlaXZlclxuXHRcdHNldDogZnVuY3Rpb24gKHRhcmdldCwga2V5LCB2YWx1ZSwgcmVjZWl2ZXIpIHtcblx0XHRcdGlmIChwcm94eS5wcm94eU1hcC5oYXModmFsdWUpKSB7XG5cdFx0XHRcdHZhbHVlID0gcHJveHkucHJveHlNYXAuZ2V0KHZhbHVlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHByb3h5LnByb3h5TWFwLmhhcyh0YXJnZXQpKSB7XG5cdFx0XHRcdHRhcmdldCA9IHByb3h5LnByb3h5TWFwLmdldCh0YXJnZXQpO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgY3VycmVudCA9IFJlZmxlY3QuZ2V0KHRhcmdldCwga2V5LCByZWNlaXZlcik7XG5cdFx0XHRpZiAocHJveHkucHJveHlNYXAuaGFzKGN1cnJlbnQpKSB7XG5cdFx0XHRcdGN1cnJlbnQgPSBwcm94eS5wcm94eU1hcC5nZXQoY3VycmVudCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjdXJyZW50ID09PSB2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IHJlc3VsdDtcblx0XHRcdGxldCBkZXNjcmlwdG9yID0gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuXG5cdFx0XHRpZiAoZGVzY3JpcHRvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGRlc2NyaXB0b3IgPSB7XG5cdFx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdGRlc2NyaXB0b3JbXCJ2YWx1ZVwiXSA9IHZhbHVlO1xuXHRcdFx0cmVzdWx0ID0gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzY3JpcHRvcik7XG5cblx0XHRcdGlmICh0eXBlb2Yga2V5ICE9PSBcInN5bWJvbFwiKSB7XG5cdFx0XHRcdHByb3h5Lm9ic2VydmVycy5ub3RpZnkocHJveHkpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0sXG5cblx0XHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzkuMC8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90cy1kZWxldGUtcFxuXHRcdGRlbGV0ZVByb3BlcnR5OiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcblx0XHRcdGlmIChrZXkgaW4gdGFyZ2V0KSB7XG5cdFx0XHRcdGRlbGV0ZSB0YXJnZXRba2V5XTtcblxuXHRcdFx0XHRpZiAodHlwZW9mIGtleSAhPT0gXCJzeW1ib2xcIikge1xuXHRcdFx0XHRcdHByb3h5Lm9ic2VydmVycy5ub3RpZnkocHJveHkpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblxuXHRcdC8vIGh0dHBzOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvOS4wLyNzZWMtcHJveHktb2JqZWN0LWludGVybmFsLW1ldGhvZHMtYW5kLWludGVybmFsLXNsb3RzLWRlZmluZW93bnByb3BlcnR5LXAtZGVzY1xuXHRcdGRlZmluZVByb3BlcnR5OiBmdW5jdGlvbiAodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpIHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3IpO1xuXHRcdFx0aWYgKHR5cGVvZiBrZXkgIT09IFwic3ltYm9sXCIpIHtcblx0XHRcdFx0cHJveHkub2JzZXJ2ZXJzLm5vdGlmeShwcm94eSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0sXG5cblx0XHQvLyBodHRwczovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzkuMC8jc2VjLXByb3h5LW9iamVjdC1pbnRlcm5hbC1tZXRob2RzLWFuZC1pbnRlcm5hbC1zbG90cy1zZXRwcm90b3R5cGVvZi12XG5cdFx0c2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gUmVmbGVjdC5zZXRQcm90b3R5cGVPZihvYmplY3QxLCBrZXkpO1xuXG5cdFx0XHRpZiAodHlwZW9mIGtleSAhPT0gXCJzeW1ib2xcIikge1xuXHRcdFx0XHRwcm94eS5vYnNlcnZlcnMubm90aWZ5KHByb3h5KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9LFxuXHR9O1xuXG5cdHJldHVybiBoYW5kbGVyO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9USEVNRV9OQU1FLCBERUZBVUxUX1RIRU1FIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgVGhlbWUsIGdldERvY3VtZW50VGhlbWUgfTtcblxuLyoqXG4gKiBUaGUgVGhlbWUgY2xhc3MgcHJvdmlkZXMgdGhlIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSB0aGVtZS5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvZG9tL3RoZW1lLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS43LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIHRoZW1lIGNsYXNzXG4gKi9cbmNsYXNzIFRoZW1lIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gbmFtZVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0Y29uc3RydWN0b3IobmFtZSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dmFsaWRhdGVTdHJpbmcobmFtZSk7XG5cdFx0dGhpcy5uYW1lID0gbmFtZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3RoZW1lXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldE5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMubmFtZTtcblx0fVxufVxuXG4vKipcbiAqIFRoZSB0aGVtaW5nIHVzZWQgaW4gdGhlIGRvY3VtZW50IGNhbiBiZSBkZWZpbmVkIHZpYSB0aGUgaHRtbC10YWcuXG4gKiBUaGUgdGhlbWluZyBpcyBzcGVjaWZpZWQgdmlhIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci10aGVtZS1uYW1lYC5cbiAqXG4gKiBBcyBuYW1lIGZvciBhIHRoZW1lIGFsbCBjaGFyYWN0ZXJzIGFyZSB2YWxpZCwgd2hpY2ggYXJlIGFsc28gYWxsb3dlZCBmb3IgYSBIVE1MRWxlbWVudC1JRC5cbiAqXG4gKiBgYGBcbiAqIDxodG1sIGRhdGEtbW9uc3Rlci10aGVtZS1uYW1lPVwibXktdGhlbWVcIj5cbiAqIGBgYFxuICpcbiAqIHRoZSBkZWZhdWx0IHRoZW1lIG5hbWUgaXMgYG1vbnN0ZXJgLlxuICpcbiAqIEByZXR1cm4ge1RoZW1lfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS43LjBcbiAqL1xuZnVuY3Rpb24gZ2V0RG9jdW1lbnRUaGVtZSgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSBnZXRHbG9iYWxPYmplY3QoXCJkb2N1bWVudFwiKTtcblx0bGV0IG5hbWUgPSBERUZBVUxUX1RIRU1FO1xuXG5cdGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKTtcblx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGNvbnN0IHRoZW1lID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1RIRU1FX05BTUUpO1xuXHRcdGlmICh0aGVtZSkge1xuXHRcdFx0bmFtZSA9IHRoZW1lO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXcgVGhlbWUobmFtZSk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsRnVuY3Rpb24sIGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9URU1QTEFURV9QUkVGSVggfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudFRoZW1lIH0gZnJvbSBcIi4vdGhlbWUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuXG5leHBvcnQgeyBUZW1wbGF0ZSB9O1xuXG4vKipcbiAqIFRoZSB0ZW1wbGF0ZSBjbGFzcyBwcm92aWRlcyBtZXRob2RzIGZvciBjcmVhdGluZyB0ZW1wbGF0ZXMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIHRlbXBsYXRlIGNsYXNzXG4gKi9cbmNsYXNzIFRlbXBsYXRlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxUZW1wbGF0ZUVsZW1lbnR9IHRlbXBsYXRlXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBmdW5jdGlvbiBpcyBub3QgZGVmaW5lZFxuXHQgKi9cblx0Y29uc3RydWN0b3IodGVtcGxhdGUpIHtcblx0XHRzdXBlcigpO1xuXHRcdGNvbnN0IEhUTUxUZW1wbGF0ZUVsZW1lbnQgPSBnZXRHbG9iYWxGdW5jdGlvbihcIkhUTUxUZW1wbGF0ZUVsZW1lbnRcIik7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZSh0ZW1wbGF0ZSwgSFRNTFRlbXBsYXRlRWxlbWVudCk7XG5cdFx0dGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vcmVzb3VyY2UvdGVtcGxhdGVcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7SFRNTFRlbXBsYXRlRWxlbWVudH1cblx0ICovXG5cdGdldFRlbXBsYXRlRWxlbWVudCgpIHtcblx0XHRyZXR1cm4gdGhpcy50ZW1wbGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtEb2N1bWVudEZyYWdtZW50fVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuXHQgKi9cblx0Y3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpIHtcblx0XHRyZXR1cm4gdGhpcy50ZW1wbGF0ZS5jb250ZW50LmNsb25lTm9kZSh0cnVlKTtcblx0fVxufVxuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGxvYWRzIGEgdGVtcGxhdGUgd2l0aCB0aGUgZ2l2ZW4gSUQgYW5kIHJldHVybnMgaXQuXG4gKlxuICogVG8gZG8gdGhpcywgaXQgZmlyc3QgcmVhZHMgdGhlIHRoZW1lIG9mIHRoZSBkb2N1bWVudCBhbmQgbG9va3MgZm9yIHRoZSBgZGF0YS1tb25zdGVyLXRoZW1lLW5hbWVgIGF0dHJpYnV0ZSBpbiB0aGUgSFRNTCB0YWcuXG4gKlxuICogYGBgXG4gKiA8aHRtbCBkYXRhLW1vbnN0ZXItdGhlbWUtbmFtZT1cIm15LXRoZW1lXCI+XG4gKiBgYGBcbiAqXG4gKiBJZiBubyB0aGVtZSB3YXMgc3BlY2lmaWVkLCB0aGUgZGVmYXVsdCB0aGVtZSBpcyBgbW9uc3RlcmAuXG4gKlxuICogTm93IGl0IGlzIGxvb2tlZCBpZiB0aGVyZSBpcyBhIHRlbXBsYXRlIHdpdGggdGhlIGdpdmVuIElEIGFuZCB0aGVtZSBgaWQtdGhlbWVgIGFuZCBpZiB5ZXMgaXQgaXMgcmV0dXJuZWQuXG4gKiBJZiB0aGVyZSBpcyBubyB0ZW1wbGF0ZSBhIHNlYXJjaCBmb3IgYSB0ZW1wbGF0ZSB3aXRoIHRoZSBnaXZlbiBJRCBgaWRgIGlzIGRvbmUuIElmIHRoaXMgaXMgYWxzbyBub3QgZm91bmQsIGFuIGVycm9yIGlzIHRocm93bi5cbiAqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIG1ldGhvZCB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBNb25zdGVyLkRPTS5maW5kRG9jdW1lbnRUZW1wbGF0ZSgpYC5cbiAqXG4gKiBgYGBcbiAqIDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPlxuICogaW1wb3J0IHtmaW5kVGVtcGxhdGV9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL2RvbS90ZW1wbGF0ZS5tanMnO1xuICogZmluZERvY3VtZW50VGVtcGxhdGUoKVxuICogPC9zY3JpcHQ+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGltcG9ydCB7IGZpbmREb2N1bWVudFRlbXBsYXRlIH0gZnJvbSBcImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQHNjaHVrYWkvbW9uc3RlckBsYXRlc3Qvc291cmNlL2RvbS90ZW1wbGF0ZS5tanNcIjtcbiAqXG4gKiBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAqIHRlbXBsYXRlLmlkID0gXCJteVRlbXBsYXRlXCI7XG4gKiB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBcIjxwPm15IGRlZmF1bHQgdGVtcGxhdGU8L3A+XCI7XG4gKiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlbXBsYXRlKTtcbiAqXG4gKiBjb25zdCB0aGVtZWRUZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAqIHRoZW1lZFRlbXBsYXRlLmlkID0gXCJteVRlbXBsYXRlLW15VGhlbWVcIjtcbiAqIHRoZW1lZFRlbXBsYXRlLmlubmVySFRNTCA9IFwiPHA+bXkgdGhlbWVkIHRlbXBsYXRlPC9wPlwiO1xuICogZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGVtZWRUZW1wbGF0ZSk7XG4gKlxuICogLy8gbG9hZHMgdGhlIHRlbXBsZSBhbmQgc2luY2Ugbm8gdGhlbWUgaXMgc2V0IHRoZSBkZWZhdWx0IHRlbXBsYXRlXG4gKiBjb25zdCB0ZW1wbGF0ZTEgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm15VGVtcGxhdGVcIik7XG4gKiBjb25zb2xlLmxvZyh0ZW1wbGF0ZTEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAqIC8vIFx1MjFBNiAnPHA+bXkgZGVmYXVsdCB0ZW1wbGF0ZTwvcD4nXG4gKlxuICogLy8gbm93IHdlIHNldCBvdXIgb3duIHRoZW1lXG4gKiBkb2N1bWVudFxuICogLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpXG4gKiAuc2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLXRoZW1lLW5hbWVcIiwgXCJteVRoZW1lXCIpO1xuICpcbiAqIC8vIG5vdyB3ZSBkb24ndCBnZXQgdGhlIGRlZmF1bHQgdGVtcGxhdGUsXG4gKiAvLyBidXQgdGhlIHRlbXBsYXRlIHdpdGggdGhlIHRoZW1lIGluIHRoZSBpZFxuICogY29uc3QgdGVtcGxhdGUyID0gZmluZERvY3VtZW50VGVtcGxhdGUoXCJteVRlbXBsYXRlXCIpO1xuICogY29uc29sZS5sb2codGVtcGxhdGUyLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG4gKiAvLyBcdTIxQTYgJzxwPm15IHRoZW1lZCB0ZW1wbGF0ZTwvcD4nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkXG4gKiBAcGFyYW0ge05vZGV9IGN1cnJlbnROb2RlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5UZW1wbGF0ZX1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IHRlbXBsYXRlIGlkIG5vdCBmb3VuZC5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRG9jdW1lbnRUZW1wbGF0ZShpZCwgY3VycmVudE5vZGUpIHtcblx0dmFsaWRhdGVTdHJpbmcoaWQpO1xuXG5cdGNvbnN0IGRvY3VtZW50ID0gZ2V0R2xvYmFsT2JqZWN0KFwiZG9jdW1lbnRcIik7XG5cdGNvbnN0IEhUTUxUZW1wbGF0ZUVsZW1lbnQgPSBnZXRHbG9iYWxGdW5jdGlvbihcIkhUTUxUZW1wbGF0ZUVsZW1lbnRcIik7XG5cdGNvbnN0IERvY3VtZW50RnJhZ21lbnQgPSBnZXRHbG9iYWxGdW5jdGlvbihcIkRvY3VtZW50RnJhZ21lbnRcIik7XG5cdGNvbnN0IERvY3VtZW50ID0gZ2V0R2xvYmFsRnVuY3Rpb24oXCJEb2N1bWVudFwiKTtcblxuXHRsZXQgcHJlZml4SUQ7XG5cblx0aWYgKFxuXHRcdCEoXG5cdFx0XHRjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIERvY3VtZW50IHx8IGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudFxuXHRcdClcblx0KSB7XG5cdFx0aWYgKGN1cnJlbnROb2RlIGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0aWYgKGN1cnJlbnROb2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfVEVNUExBVEVfUFJFRklYKSkge1xuXHRcdFx0XHRwcmVmaXhJRCA9IGN1cnJlbnROb2RlLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVEVNUExBVEVfUFJFRklYKTtcblx0XHRcdH1cblxuXHRcdFx0Y3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5nZXRSb290Tm9kZSgpO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdCEoXG5cdFx0XHRcdFx0Y3VycmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudCB8fFxuXHRcdFx0XHRcdGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudFxuXHRcdFx0XHQpXG5cdFx0XHQpIHtcblx0XHRcdFx0Y3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5vd25lckRvY3VtZW50O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdCEoXG5cdFx0XHRcdGN1cnJlbnROb2RlIGluc3RhbmNlb2YgRG9jdW1lbnQgfHxcblx0XHRcdFx0Y3VycmVudE5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50XG5cdFx0XHQpXG5cdFx0KSB7XG5cdFx0XHRjdXJyZW50Tm9kZSA9IGRvY3VtZW50O1xuXHRcdH1cblx0fVxuXG5cdGxldCB0ZW1wbGF0ZTtcblx0Y29uc3QgdGhlbWUgPSBnZXREb2N1bWVudFRoZW1lKCk7XG5cblx0aWYgKHByZWZpeElEKSB7XG5cdFx0Y29uc3QgdGhlbWVkUHJlZml4SUQgPSBgJHtwcmVmaXhJRH0tJHtpZH0tJHt0aGVtZS5nZXROYW1lKCl9YDtcblxuXHRcdHRlbXBsYXRlID0gZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzKGN1cnJlbnROb2RlLCB0aGVtZWRQcmVmaXhJRCk7XG5cdFx0aWYgKHRlbXBsYXRlIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgdGhlbWVkSUQgPSBgJHtpZH0tJHt0aGVtZS5nZXROYW1lKCl9YDtcblxuXHR0ZW1wbGF0ZSA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhjdXJyZW50Tm9kZSwgdGhlbWVkSUQpO1xuXHRpZiAodGVtcGxhdGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KSB7XG5cdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdH1cblxuXHR0ZW1wbGF0ZSA9IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyhjdXJyZW50Tm9kZSwgaWQpO1xuXHRpZiAodGVtcGxhdGUgaW5zdGFuY2VvZiBIVE1MVGVtcGxhdGVFbGVtZW50KSB7XG5cdFx0cmV0dXJuIG5ldyBUZW1wbGF0ZSh0ZW1wbGF0ZSk7XG5cdH1cblxuXHR0aHJvdyBuZXcgRXJyb3IoYHRlbXBsYXRlICR7aWR9IG5vdCBmb3VuZC5gKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHR5cGVPZiB9IGZyb20gXCIuLi90eXBlcy90eXBlb2YubWpzXCI7XG5cbmV4cG9ydCB7IGRpZmYgfTtcblxuLyoqXG4gKiBXaXRoIHRoZSBkaWZmIGZ1bmN0aW9uIHlvdSBjYW4gcGVyZm9ybSB0aGUgY2hhbmdlIG9mIG9uZSBvYmplY3QgdG8gYW5vdGhlci4gVGhlIHJlc3VsdCBzaG93cyB0aGUgY2hhbmdlcyBvZiB0aGUgc2Vjb25kIG9iamVjdCB0byB0aGUgZmlyc3Qgb2JqZWN0LlxuICpcbiAqIFRoZSBvcGVyYXRvciBgYWRkYCBtZWFucyB0aGF0IHNvbWV0aGluZyBoYXMgYmVlbiBhZGRlZCB0byB0aGUgc2Vjb25kIG9iamVjdC4gYGRlbGV0ZWAgbWVhbnMgdGhhdCBzb21ldGhpbmcgaGFzIGJlZW4gZGVsZXRlZCBmcm9tIHRoZSBzZWNvbmQgb2JqZWN0IGNvbXBhcmVkIHRvIHRoZSBmaXJzdCBvYmplY3QuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi9leGFtcGxlL2RhdGEvZGlmZi5tanNcbiAqIEBwYXJhbSB7Kn0gZmlyc3RcbiAqIEBwYXJhbSB7Kn0gc2Vjb25kXG4gKiBAcmV0dXJuIHthcnJheX1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBkaWZmKGZpcnN0LCBzZWNvbmQpIHtcblx0cmV0dXJuIGRvRGlmZihmaXJzdCwgc2Vjb25kKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGFcbiAqIEBwYXJhbSBiXG4gKiBAcGFyYW0gdHlwZVxuICogQHJldHVybiB7U2V0PHN0cmluZz58U2V0PG51bWJlcj59XG4gKi9cbmZ1bmN0aW9uIGdldEtleXMoYSwgYiwgdHlwZSkge1xuXHRpZiAoaXNBcnJheSh0eXBlKSkge1xuXHRcdGNvbnN0IGtleXMgPVxuXHRcdFx0YS5sZW5ndGggPiBiLmxlbmd0aCA/IG5ldyBBcnJheShhLmxlbmd0aCkgOiBuZXcgQXJyYXkoYi5sZW5ndGgpO1xuXHRcdGtleXMuZmlsbCgwKTtcblx0XHRyZXR1cm4gbmV3IFNldChrZXlzLm1hcCgoXywgaSkgPT4gaSkpO1xuXHR9XG5cblx0cmV0dXJuIG5ldyBTZXQoT2JqZWN0LmtleXMoYSkuY29uY2F0KE9iamVjdC5rZXlzKGIpKSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBhXG4gKiBAcGFyYW0gYlxuICogQHBhcmFtIHBhdGhcbiAqIEBwYXJhbSBkaWZmXG4gKiBAcmV0dXJuIHthcnJheX1cbiAqL1xuZnVuY3Rpb24gZG9EaWZmKGEsIGIsIHBhdGgsIGRpZmYpIHtcblx0Y29uc3QgdHlwZUEgPSB0eXBlT2YoYSk7XG5cdGNvbnN0IHR5cGVCID0gdHlwZU9mKGIpO1xuXG5cdGNvbnN0IGN1cnJQYXRoID0gcGF0aCB8fCBbXTtcblx0Y29uc3QgY3VyckRpZmYgPSBkaWZmIHx8IFtdO1xuXG5cdGlmICh0eXBlQSA9PT0gdHlwZUIgJiYgKHR5cGVBID09PSBcIm9iamVjdFwiIHx8IHR5cGVBID09PSBcImFycmF5XCIpKSB7XG5cdFx0Z2V0S2V5cyhhLCBiLCB0eXBlQSkuZm9yRWFjaCgodikgPT4ge1xuXHRcdFx0aWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgdikpIHtcblx0XHRcdFx0Y3VyckRpZmYucHVzaChidWlsZFJlc3VsdChhW3ZdLCBiW3ZdLCBcImFkZFwiLCBjdXJyUGF0aC5jb25jYXQodikpKTtcblx0XHRcdH0gZWxzZSBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCB2KSkge1xuXHRcdFx0XHRjdXJyRGlmZi5wdXNoKGJ1aWxkUmVzdWx0KGFbdl0sIGJbdl0sIFwiZGVsZXRlXCIsIGN1cnJQYXRoLmNvbmNhdCh2KSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZG9EaWZmKGFbdl0sIGJbdl0sIGN1cnJQYXRoLmNvbmNhdCh2KSwgY3VyckRpZmYpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IG8gPSBnZXRPcGVyYXRvcihhLCBiLCB0eXBlQSwgdHlwZUIpO1xuXHRcdGlmIChvICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGN1cnJEaWZmLnB1c2goYnVpbGRSZXN1bHQoYSwgYiwgbywgcGF0aCkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjdXJyRGlmZjtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHsqfSBhXG4gKiBAcGFyYW0geyp9IGJcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcGVyYXRvclxuICogQHBhcmFtIHthcnJheX0gcGF0aFxuICogQHJldHVybiB7e3BhdGg6IGFycmF5LCBvcGVyYXRvcjogc3RyaW5nfX1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkUmVzdWx0KGEsIGIsIG9wZXJhdG9yLCBwYXRoKSB7XG5cdGNvbnN0IHJlc3VsdCA9IHtcblx0XHRvcGVyYXRvcixcblx0XHRwYXRoLFxuXHR9O1xuXG5cdGlmIChvcGVyYXRvciAhPT0gXCJhZGRcIikge1xuXHRcdHJlc3VsdC5maXJzdCA9IHtcblx0XHRcdHZhbHVlOiBhLFxuXHRcdFx0dHlwZTogdHlwZW9mIGEsXG5cdFx0fTtcblxuXHRcdGlmIChpc09iamVjdChhKSkge1xuXHRcdFx0Y29uc3QgbmFtZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihhKT8uY29uc3RydWN0b3I/Lm5hbWU7XG5cdFx0XHRpZiAobmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJlc3VsdC5maXJzdC5pbnN0YW5jZSA9IG5hbWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKG9wZXJhdG9yID09PSBcImFkZFwiIHx8IG9wZXJhdG9yID09PSBcInVwZGF0ZVwiKSB7XG5cdFx0cmVzdWx0LnNlY29uZCA9IHtcblx0XHRcdHZhbHVlOiBiLFxuXHRcdFx0dHlwZTogdHlwZW9mIGIsXG5cdFx0fTtcblxuXHRcdGlmIChpc09iamVjdChiKSkge1xuXHRcdFx0Y29uc3QgbmFtZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihiKT8uY29uc3RydWN0b3I/Lm5hbWU7XG5cdFx0XHRpZiAobmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHJlc3VsdC5zZWNvbmQuaW5zdGFuY2UgPSBuYW1lO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gYVxuICogQHBhcmFtIHsqfSBiXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc05vdEVxdWFsKGEsIGIpIHtcblx0aWYgKHR5cGVvZiBhICE9PSB0eXBlb2YgYikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0cmV0dXJuIGEuZ2V0VGltZSgpICE9PSBiLmdldFRpbWUoKTtcblx0fVxuXG5cdHJldHVybiBhICE9PSBiO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IGFcbiAqIEBwYXJhbSB7Kn0gYlxuICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gZ2V0T3BlcmF0b3IoYSwgYikge1xuXHQvKipcblx0ICogQHR5cGUge3N0cmluZ3x1bmRlZmluZWR9XG5cdCAqL1xuXHRsZXQgb3BlcmF0b3I7XG5cblx0LyoqXG5cdCAqIEB0eXBlIHtzdHJpbmd9XG5cdCAqL1xuXHRjb25zdCB0eXBlQSA9IHR5cGVvZiBhO1xuXG5cdC8qKlxuXHQgKiBAdHlwZSB7c3RyaW5nfVxuXHQgKi9cblx0Y29uc3QgdHlwZUIgPSB0eXBlb2YgYjtcblxuXHRpZiAodHlwZUEgPT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZUIgIT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRvcGVyYXRvciA9IFwiYWRkXCI7XG5cdH0gZWxzZSBpZiAodHlwZUEgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZUIgPT09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRvcGVyYXRvciA9IFwiZGVsZXRlXCI7XG5cdH0gZWxzZSBpZiAoaXNOb3RFcXVhbChhLCBiKSkge1xuXHRcdG9wZXJhdG9yID0gXCJ1cGRhdGVcIjtcblx0fVxuXG5cdHJldHVybiBvcGVyYXRvcjtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuLi90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IHRyaW1TcGFjZXMgfTtcblxuLyoqXG4gKiBUaGlzIHNwZWNpYWwgdHJpbSBmdW5jdGlvbiBhbGxvd3MgdG8gdHJpbSBzcGFjZXMgdGhhdCBoYXZlIGJlZW4gcHJvdGVjdGVkIGJ5IGEgc3BlY2lhbCBlc2NhcGUgY2hhcmFjdGVyLlxuICpcbiAqIGBgYFxuICogPHNjcmlwdCB0eXBlPVwibW9kdWxlXCI+XG4gKiBpbXBvcnQge3RyaW1TcGFjZXN9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL3V0aWwvdHJpbXNwYWNlcy5tanMnO1xuICogdHJpbVNwYWNlcygnIGhlbGxvIFxcXFwgJylcbiAqIDwvc2NyaXB0PlxuICogYGBgXG4gKlxuICogSGludDogT25lIHN0cm9rZSBpcyBlc2NhcGVkIGJ5IHRoZSBqYXZhc2NyaXB0IGludGVycHJldGVyLCB0aGUgc2Vjb25kIHN0cm9rZSBlc2NhcGVzIHRoZSBzdHJva2UuXG4gKlxuICogYGBgdGV4dFxuICogYVxcIGIgIFx1MjFBNiBhIGJcbiAqIGFcXFxcIGIgXHUyMUE2IGFcXCBiXG4gKiBgYGBcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIHRyaW1TcGFjZXModmFsdWUpIHtcblx0dmFsaWRhdGVTdHJpbmcodmFsdWUpO1xuXG5cdGNvbnN0IHBsYWNlaG9sZGVyID0gbmV3IE1hcCgpO1xuXHRjb25zdCByZWdleCA9IC8oKD88cGF0dGVybj5cXFxcKD88Y2hhcj4uKSl7MX0pL2dpbTtcblxuXHQvLyBUaGUgc2VwYXJhdG9yIGZvciBhcmdzIG11c3QgYmUgZXNjYXBlZFxuXHQvLyB1bmRlZmluZWQgc3RyaW5nIHdoaWNoIHNob3VsZCBub3Qgb2NjdXIgbm9ybWFsbHkgYW5kIGlzIGFsc28gbm90IGEgcmVnZXhcblx0Y29uc3QgcmVzdWx0ID0gdmFsdWUubWF0Y2hBbGwocmVnZXgpO1xuXG5cdGZvciAoY29uc3QgbSBvZiByZXN1bHQpIHtcblx0XHRjb25zdCBnID0gbT8uW1wiZ3JvdXBzXCJdO1xuXHRcdGlmICghaXNPYmplY3QoZykpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHAgPSBnPy5bXCJwYXR0ZXJuXCJdO1xuXHRcdGNvbnN0IGMgPSBnPy5bXCJjaGFyXCJdO1xuXG5cdFx0aWYgKHAgJiYgYykge1xuXHRcdFx0Y29uc3QgciA9IGBfXyR7bmV3IElEKCkudG9TdHJpbmcoKX1fX2A7XG5cdFx0XHRwbGFjZWhvbGRlci5zZXQociwgYyk7XG5cdFx0XHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocCwgcik7XG5cdFx0fVxuXHR9XG5cblx0dmFsdWUgPSB2YWx1ZS50cmltKCk7XG5cdHBsYWNlaG9sZGVyLmZvckVhY2goKHYsIGspID0+IHtcblx0XHR2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoaywgYFxcXFwke3Z9YCk7XG5cdH0pO1xuXG5cdHJldHVybiB2YWx1ZTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi91dGlsLm1qc1wiO1xuXG5leHBvcnQgeyBmaXJlRXZlbnQsIGZpcmVDdXN0b21FdmVudCwgZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQgfTtcblxuLyoqXG4gKiBUaGUgZnVuY3Rpb24gc2VuZHMgYW4gZXZlbnRcbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnQgfCBOb2RlIHwgSFRNTENvbGxlY3Rpb24gfCBOb2RlTGlzdH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjEwLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudCBvciBIVE1MQ29sbGVjdGlvblxuICogQHN1bW1hcnkgQ29uc3RydWN0IGFuZCBzZW5kIGFuZCBldmVudFxuICovXG5mdW5jdGlvbiBmaXJlRXZlbnQoZWxlbWVudCwgdHlwZSkge1xuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdGlmICh0eXBlID09PSBcImNsaWNrXCIpIHtcblx0XHRcdGVsZW1lbnQuY2xpY2soKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnQvRXZlbnRcblx0XHRjb25zdCBldmVudCA9IG5ldyBFdmVudCh2YWxpZGF0ZVN0cmluZyh0eXBlKSwge1xuXHRcdFx0YnViYmxlczogdHJ1ZSxcblx0XHRcdGNhbmNlbGFibGU6IHRydWUsXG5cdFx0XHRjb21wb3NlZDogdHJ1ZSxcblx0XHR9KTtcblxuXHRcdGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cdH0gZWxzZSBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxDb2xsZWN0aW9uIHx8IGVsZW1lbnQgaW5zdGFuY2VvZiBOb2RlTGlzdCkge1xuXHRcdGZvciAoY29uc3QgZSBvZiBlbGVtZW50KSB7XG5cdFx0XHRmaXJlRXZlbnQoZSwgdHlwZSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXG5cdFx0XHRcInZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudCBvciBIVE1MQ29sbGVjdGlvblwiLFxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBZb3UgY2FuIGNhbGwgdGhlIGZ1bmN0aW9uIHZpYSB0aGUgbW9uc3RlciBuYW1lc3BhY2UgYG5ldyBNb25zdGVyLkRPTS5maXJlQ3VzdG9tRXZlbnQoKWAuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50IHwgTm9kZSB8IEhUTUxDb2xsZWN0aW9uIHwgTm9kZUxpc3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge29iamVjdH0gZGV0YWlsXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yOS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnQgb3IgSFRNTENvbGxlY3Rpb25cbiAqIEBzdW1tYXJ5IENvbnN0cnVjdCBhbmQgc2VuZCBhbmQgZXZlbnRcbiAqL1xuZnVuY3Rpb24gZmlyZUN1c3RvbUV2ZW50KGVsZW1lbnQsIHR5cGUsIGRldGFpbCkge1xuXHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0aWYgKCFpc09iamVjdChkZXRhaWwpKSB7XG5cdFx0XHRkZXRhaWwgPSB7IGRldGFpbCB9O1xuXHRcdH1cblxuXHRcdGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KHZhbGlkYXRlU3RyaW5nKHR5cGUpLCB7XG5cdFx0XHRidWJibGVzOiB0cnVlLFxuXHRcdFx0Y2FuY2VsYWJsZTogdHJ1ZSxcblx0XHRcdGNvbXBvc2VkOiB0cnVlLFxuXHRcdFx0ZGV0YWlsLFxuXHRcdH0pO1xuXG5cdFx0ZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcblx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTENvbGxlY3Rpb24gfHwgZWxlbWVudCBpbnN0YW5jZW9mIE5vZGVMaXN0KSB7XG5cdFx0Zm9yIChjb25zdCBlIG9mIGVsZW1lbnQpIHtcblx0XHRcdGZpcmVDdXN0b21FdmVudChlLCB0eXBlLCBkZXRhaWwpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XCJlbGVtZW50IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudCBvciBIVE1MQ29sbGVjdGlvblwiLFxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIHBhdGggYEV2ZW50LmNvbXBvc2VkUGF0aCgpYCBmcm9tIGFuIGV2ZW50IGFuZCB0cmllcyB0byBmaW5kIHRoZSBuZXh0IGVsZW1lbnRcbiAqIHVwIHRoZSB0cmVlIGBlbGVtZW50LmNsb3Nlc3QoKWAgd2l0aCB0aGUgYXR0cmlidXRlIGFuZCB2YWx1ZS4gSWYgbm8gdmFsdWUsIG9yIGEgdmFsdWUgdGhhdCBpcyB1bmRlZmluZWQgb3IgbnVsbCxcbiAqIGlzIHNwZWNpZmllZCwgb25seSB0aGUgYXR0cmlidXRlIGlzIHNlYXJjaGVkLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTQuMFxuICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lXG4gKiBAcGFyYW0ge3N0cmluZ3xudWxsfHVuZGVmaW5lZH0gYXR0cmlidXRlVmFsdWVcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCBldmVudFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG4gKiBAc3VtbWFyeSBIZWxwIGZ1bmN0aW9uIHRvIGZpbmQgdGhlIGFwcHJvcHJpYXRlIGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoZXZlbnQsIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKSB7XG5cdHZhbGlkYXRlSW5zdGFuY2UoZXZlbnQsIEV2ZW50KTtcblxuXHRpZiAodHlwZW9mIGV2ZW50LmNvbXBvc2VkUGF0aCAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgZXZlbnRcIik7XG5cdH1cblxuXHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cblx0Ly8gY2xvc2VzdCBjYW5ub3QgYmUgdXNlZCBoZXJlLCBiZWNhdXNlIGNsb3Nlc3QgaXMgbm90IGNvcnJlY3QgZm9yIHNsb3R0ZWQgZWxlbWVudHNcblx0aWYgKGlzQXJyYXkocGF0aCkpIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IG8gPSBwYXRoW2ldO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdG8gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuXHRcdFx0XHRvLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSAmJlxuXHRcdFx0XHQoYXR0cmlidXRlVmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRcdG8uZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpID09PSBhdHRyaWJ1dGVWYWx1ZSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gbztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGRpZmYgfSBmcm9tIFwiLi4vZGF0YS9kaWZmLm1qc1wiO1xuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQgeyBQaXBlIH0gZnJvbSBcIi4uL2RhdGEvcGlwZS5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMsXG5cdEFUVFJJQlVURV9VUERBVEVSX0JJTkQsXG5cdEFUVFJJQlVURV9VUERBVEVSX0JJTkRfVFlQRSxcblx0QVRUUklCVVRFX1VQREFURVJfSU5TRVJULFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9SRU1PVkUsXG5cdEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UsXG5cdEFUVFJJQlVURV9VUERBVEVSX1NFTEVDVF9USElTLFxufSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXksIGlzU3RyaW5nLCBpc0luc3RhbmNlLCBpc0l0ZXJhYmxlIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUFycmF5LCB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7IHRyaW1TcGFjZXMgfSBmcm9tIFwiLi4vdXRpbC90cmltc3BhY2VzLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4sIGFkZFRvT2JqZWN0TGluayB9IGZyb20gXCIuL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyB1cGRhdGVyVHJhbnNmb3JtZXJNZXRob2RzU3ltYm9sIH0gZnJvbSBcIi4vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50IH0gZnJvbSBcIi4vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgZmluZERvY3VtZW50VGVtcGxhdGUgfSBmcm9tIFwiLi90ZW1wbGF0ZS5tanNcIjtcbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5cbmV4cG9ydCB7IFVwZGF0ZXIsIGFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50IH07XG5cbi8qKlxuICogVGhlIHVwZGF0ZXIgY2xhc3MgY29ubmVjdHMgYW4gb2JqZWN0IHdpdGggdGhlIERPTS4gSW4gdGhpcyB3YXksIHN0cnVjdHVyZXMgYW5kIGNvbnRlbnRzIGluIHRoZSBET00gY2FuIGJlXG4gKiBwcm9ncmFtbWF0aWNhbGx5IGFkYXB0ZWQgdmlhIGF0dHJpYnV0ZXMuXG4gKlxuICogRm9yIGV4YW1wbGUsIHRvIGluY2x1ZGUgYSBzdHJpbmcgZnJvbSBhbiBvYmplY3QsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1yZXBsYWNlYCBjYW4gYmUgdXNlZC5cbiAqIGEgZnVydGhlciBleHBsYW5hdGlvbiBjYW4gYmUgZm91bmQgdW5kZXIgW21vbnN0ZXJqcy5vcmddKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pXG4gKlxuICogQ2hhbmdlcyB0byBhdHRyaWJ1dGVzIGFyZSBtYWRlIG9ubHkgd2hlbiB0aGUgZGlyZWN0IHZhbHVlcyBhcmUgY2hhbmdlZC4gSWYgeW91IHdhbnQgdG8gYXNzaWduIGNoYW5nZXNcbiAqIHRvIG90aGVyIHZhbHVlcyBhcyB3ZWxsLCB5b3UgaGF2ZSB0byBpbnNlcnQgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXNlbGVjdC10aGlzYC4gVGhpcyBzaG91bGQgYmVcbiAqIGRvbmUgd2l0aCBjYXJlLCBhcyBpdCBjYW4gcmVkdWNlIHBlcmZvcm1hbmNlLlxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvZG9tL3VwZGF0ZXIvc2ltcGxlLyBTaW1wbGUgZXhhbXBsZVxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBwaXBlcyBhcmUgbm90IGFsbG93ZWQgd2hlbiBjbG9uaW5nIGEgbm9kZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyB0ZW1wbGF0ZSB3YXMgZm91bmQgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS5cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgbWF4aW11bSBkZXB0aCBmb3IgdGhlIHJlY3Vyc2lvbiBpcyByZWFjaGVkLlxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3RcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG4gKiBAc3VtbWFyeSBUaGUgdXBkYXRlciBjbGFzcyBjb25uZWN0cyBhbiBvYmplY3Qgd2l0aCB0aGUgZG9tXG4gKi9cbmNsYXNzIFVwZGF0ZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIEBzaW5jZSAxLjguMFxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG5cdCAqIEBwYXJhbSB7b2JqZWN0fFByb3h5T2JzZXJ2ZXJ8dW5kZWZpbmVkfSBzdWJqZWN0XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XG5cdCAqIEBzZWUge0BsaW5rIGZpbmREb2N1bWVudFRlbXBsYXRlfVxuXHQgKi9cblx0Y29uc3RydWN0b3IoZWxlbWVudCwgc3ViamVjdCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHQvKipcblx0XHQgKiBAdHlwZSB7SFRNTEVsZW1lbnR9XG5cdFx0ICovXG5cdFx0aWYgKHN1YmplY3QgPT09IHVuZGVmaW5lZCkgc3ViamVjdCA9IHt9O1xuXHRcdGlmICghaXNJbnN0YW5jZShzdWJqZWN0LCBQcm94eU9ic2VydmVyKSkge1xuXHRcdFx0c3ViamVjdCA9IG5ldyBQcm94eU9ic2VydmVyKHN1YmplY3QpO1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0ZWxlbWVudDogdmFsaWRhdGVJbnN0YW5jZShlbGVtZW50LCBIVE1MRWxlbWVudCksXG5cdFx0XHRsYXN0OiB7fSxcblx0XHRcdGNhbGxiYWNrczogbmV3IE1hcCgpLFxuXHRcdFx0ZXZlbnRUeXBlczogW1wia2V5dXBcIiwgXCJjbGlja1wiLCBcImNoYW5nZVwiLCBcImRyb3BcIiwgXCJ0b3VjaGVuZFwiLCBcImlucHV0XCJdLFxuXHRcdFx0c3ViamVjdDogc3ViamVjdCxcblx0XHR9O1xuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uY2FsbGJhY2tzLnNldChcblx0XHRcdFwiY2hlY2tzdGF0ZVwiLFxuXHRcdFx0Z2V0Q2hlY2tTdGF0ZUNhbGxiYWNrLmNhbGwodGhpcyksXG5cdFx0KTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuYXR0YWNoT2JzZXJ2ZXIoXG5cdFx0XHRuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBzID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpO1xuXG5cdFx0XHRcdGNvbnN0IGRpZmZSZXN1bHQgPSBkaWZmKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmxhc3QsIHMpO1xuXHRcdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5sYXN0ID0gY2xvbmUocyk7XG5cblx0XHRcdFx0Y29uc3QgcHJvbWlzZXMgPSBbXTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IFssIGNoYW5nZV0gb2YgT2JqZWN0LmVudHJpZXMoZGlmZlJlc3VsdCkpIHtcblx0XHRcdFx0XHRwcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdFx0bmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRnZXRXaW5kb3coKS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZW1vdmVFbGVtZW50LmNhbGwodGhpcywgY2hhbmdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdGluc2VydEVsZW1lbnQuY2FsbCh0aGlzLCBjaGFuZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0dXBkYXRlQ29udGVudC5jYWxsKHRoaXMsIGNoYW5nZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR1cGRhdGVBdHRyaWJ1dGVzLmNhbGwodGhpcywgY2hhbmdlKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSgpO1xuXHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRGVmYXVsdHM6ICdrZXl1cCcsICdjbGljaycsICdjaGFuZ2UnLCAnZHJvcCcsICd0b3VjaGVuZCdcblx0ICpcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZGUvZG9jcy9XZWIvRXZlbnRzfVxuXHQgKiBAc2luY2UgMS45LjBcblx0ICogQHBhcmFtIHtBcnJheX0gdHlwZXNcblx0ICogQHJldHVybiB7VXBkYXRlcn1cblx0ICovXG5cdHNldEV2ZW50VHlwZXModHlwZXMpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5ldmVudFR5cGVzID0gdmFsaWRhdGVBcnJheSh0eXBlcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogV2l0aCB0aGlzIG1ldGhvZCwgdGhlIGV2ZW50bGlzdGVuZXJzIGFyZSBob29rZWQgaW4gYW5kIHRoZSBtYWdpYyBiZWdpbnMuXG5cdCAqXG5cdCAqIGBgYGpzXG5cdCAqIHVwZGF0ZXIucnVuKCkudGhlbigoKSA9PiB7XG5cdCAqICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblx0ICogfSk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAc2luY2UgMS45LjBcblx0ICogQHJldHVybiB7VXBkYXRlcn1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aFxuXHQgKi9cblx0ZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCkge1xuXHRcdHRoaXMuZGlzYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXG5cdFx0Zm9yIChjb25zdCB0eXBlIG9mIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmV2ZW50VHlwZXMpIHtcblx0XHRcdC8vIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0V2ZW50VGFyZ2V0L2FkZEV2ZW50TGlzdGVuZXJcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0dHlwZSxcblx0XHRcdFx0Z2V0Q29udHJvbEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2FwdHVyZTogdHJ1ZSxcblx0XHRcdFx0XHRwYXNzaXZlOiB0cnVlLFxuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCB0dXJucyBvZmYgdGhlIG1hZ2ljIG9yIHdobyBsb3ZlcyBpdCBtb3JlIHByb2ZhbmUgaXQgcmVtb3ZlcyB0aGUgZXZlbnRMaXN0ZW5lci5cblx0ICpcblx0ICogQHNpbmNlIDEuOS4wXG5cdCAqIEByZXR1cm4ge1VwZGF0ZXJ9XG5cdCAqL1xuXHRkaXNhYmxlRXZlbnRQcm9jZXNzaW5nKCkge1xuXHRcdGZvciAoY29uc3QgdHlwZSBvZiB0aGlzW2ludGVybmFsU3ltYm9sXS5ldmVudFR5cGVzKSB7XG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdHR5cGUsXG5cdFx0XHRcdGdldENvbnRyb2xFdmVudEhhbmRsZXIuY2FsbCh0aGlzKSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIHJ1biBtZXRob2QgbXVzdCBiZSBjYWxsZWQgZm9yIHRoZSB1cGRhdGUgdG8gc3RhcnQgd29ya2luZy5cblx0ICogVGhlIG1ldGhvZCBlbnN1cmVzIHRoYXQgY2hhbmdlcyBhcmUgZGV0ZWN0ZWQuXG5cdCAqXG5cdCAqIGBgYGpzXG5cdCAqIHVwZGF0ZXIucnVuKCkudGhlbigoKSA9PiB7XG5cdCAqICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblx0ICogfSk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAc3VtbWFyeSBMZXQgdGhlIG1hZ2ljIGJlZ2luXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRydW4oKSB7XG5cdFx0Ly8gdGhlIGtleSBfX2luaXRfX2hhcyBubyBmdXJ0aGVyIG1lYW5pbmcgYW5kIGlzIG9ubHlcblx0XHQvLyB1c2VkIHRvIGNyZWF0ZSB0aGUgZGlmZiBmb3IgZW1wdHkgb2JqZWN0cy5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5sYXN0ID0geyBfX2luaXRfXzogdHJ1ZSB9O1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0Lm5vdGlmeU9ic2VydmVycygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHZhbHVlcyBvZiBib3VuZCBlbGVtZW50cyBhbmQgY2hhbmdlcyB0aGVtIGluIHN1YmplY3Rcblx0ICpcblx0ICogQHNpbmNlIDEuMjcuMFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5VcGRhdGVyfVxuXHQgKi9cblx0cmV0cmlldmUoKSB7XG5cdFx0cmV0cmlldmVGcm9tQmluZGluZ3MuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBJZiB5b3UgaGF2ZSBwYXNzZWQgYSBQcm94eU9ic2VydmVyIGluIHRoZSBjb25zdHJ1Y3RvciwgeW91IHdpbGwgZ2V0IHRoZSBvYmplY3QgdGhhdCB0aGUgUHJveHlPYnNlcnZlciBtYW5hZ2VzIGhlcmUuXG5cdCAqIEhvd2V2ZXIsIGlmIHlvdSBwYXNzZWQgYSBzaW1wbGUgb2JqZWN0LCBoZXJlIHlvdSB3aWxsIGdldCBhIHByb3h5IGZvciB0aGF0IG9iamVjdC5cblx0ICpcblx0ICogRm9yIGNoYW5nZXMsIHRoZSBQcm94eU9ic2VydmVyIG11c3QgYmUgdXNlZC5cblx0ICpcblx0ICogQHNpbmNlIDEuOC4wXG5cdCAqIEByZXR1cm4ge1Byb3h5fVxuXHQgKi9cblx0Z2V0U3ViamVjdCgpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRTdWJqZWN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gcmVnaXN0ZXIgY29tbWFuZHMgdGhhdCBjYW4gYmUgY2FsbGVkIHZpYSBjYWxsOiBpbnN0cnVjdGlvbi5cblx0ICogVGhpcyBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGEgcGlwZSB3aXRoIGl0cyBvd24gZnVuY3Rpb25hbGl0eS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHJldHVybiB7VHJhbnNmb3JtZXJ9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICovXG5cdHNldENhbGxiYWNrKG5hbWUsIGNhbGxiYWNrKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uY2FsbGJhY2tzLnNldChuYW1lLCBjYWxsYmFjayk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS45LjBcbiAqIEByZXR1cm4ge2Z1bmN0aW9uXG4gKiBAdGhpcyBVcGRhdGVyXG4gKi9cbmZ1bmN0aW9uIGdldENoZWNrU3RhdGVDYWxsYmFjaygpIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjdXJyZW50KSB7XG5cdFx0Ly8gdGhpcyBpcyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBvYmplY3QgKHRoZXJlZm9yZSBubyBhcnJheSBmdW5jdGlvbiBoZXJlKVxuXHRcdGlmICh0aGlzIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdFx0aWYgKFtcInJhZGlvXCIsIFwiY2hlY2tib3hcIl0uaW5kZXhPZih0aGlzLnR5cGUpICE9PSAtMSkge1xuXHRcdFx0XHRyZXR1cm4gYCR7dGhpcy52YWx1ZX1gID09PSBgJHtjdXJyZW50fWAgPyBcInRydWVcIiA6IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRoaXMgaW5zdGFuY2VvZiBIVE1MT3B0aW9uRWxlbWVudCkge1xuXHRcdFx0aWYgKGlzQXJyYXkoY3VycmVudCkgJiYgY3VycmVudC5pbmRleE9mKHRoaXMudmFsdWUpICE9PSAtMSkge1xuXHRcdFx0XHRyZXR1cm4gXCJ0cnVlXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IHN5bWJvbCA9IFN5bWJvbChcIkBzY2h1a2FpL21vbnN0ZXIvdXBkYXRlckBARXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqIEB0aGlzIFVwZGF0ZXJcbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgYmluZCBhcmd1bWVudCBtdXN0IHN0YXJ0IGFzIGEgdmFsdWUgd2l0aCBhIHBhdGhcbiAqL1xuZnVuY3Rpb24gZ2V0Q29udHJvbEV2ZW50SGFuZGxlcigpIHtcblx0aWYgKHRoaXNbc3ltYm9sXSkge1xuXHRcdHJldHVybiB0aGlzW3N5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aC5cblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIG9iamVjdFxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1tzeW1ib2xdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGV2ZW50LCBBVFRSSUJVVEVfVVBEQVRFUl9CSU5EKTtcblxuXHRcdGlmIChlbGVtZW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRyZXRyaWV2ZUFuZFNldFZhbHVlLmNhbGwodGhpcywgZWxlbWVudCk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSB8fCBgJHtlfWApO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9O1xuXG5cdHJldHVybiB0aGlzW3N5bWJvbF07XG59XG5cbi8qKlxuICogQHRocm93cyB7RXJyb3J9IHRoZSBiaW5kIGFyZ3VtZW50IG11c3Qgc3RhcnQgYXMgYSB2YWx1ZSB3aXRoIGEgcGF0aFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB2b2lkXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZXRyaWV2ZUFuZFNldFZhbHVlKGVsZW1lbnQpIHtcblx0Y29uc3QgcGF0aGZpbmRlciA9IG5ldyBQYXRoZmluZGVyKHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0U3ViamVjdCgpKTtcblxuXHRsZXQgcGF0aCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0JJTkQpO1xuXHRpZiAocGF0aCA9PT0gbnVsbClcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgYmluZCBhcmd1bWVudCBtdXN0IHN0YXJ0IGFzIGEgdmFsdWUgd2l0aCBhIHBhdGhcIik7XG5cblx0aWYgKHBhdGguaW5kZXhPZihcInBhdGg6XCIpICE9PSAwKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIGJpbmQgYXJndW1lbnQgbXVzdCBzdGFydCBhcyBhIHZhbHVlIHdpdGggYSBwYXRoXCIpO1xuXHR9XG5cblx0cGF0aCA9IHBhdGguc3Vic3RyaW5nKDUpOyAvLyByZW1vdmUgcGF0aDogZnJvbSB0aGUgc3RyaW5nXG5cblx0bGV0IHZhbHVlO1xuXG5cdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRjYXNlIFwiY2hlY2tib3hcIjpcblx0XHRcdFx0dmFsdWUgPSBlbGVtZW50LmNoZWNrZWQgPyBlbGVtZW50LnZhbHVlIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG5cdFx0dmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXHR9IGVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MU2VsZWN0RWxlbWVudCkge1xuXHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRjYXNlIFwic2VsZWN0LW9uZVwiOlxuXHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInNlbGVjdC1tdWx0aXBsZVwiOlxuXHRcdFx0XHR2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG5cblx0XHRcdFx0bGV0IG9wdGlvbnMgPSBlbGVtZW50Py5zZWxlY3RlZE9wdGlvbnM7XG5cdFx0XHRcdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcIjpzY29wZSBvcHRpb246Y2hlY2tlZFwiKTtcblx0XHRcdFx0dmFsdWUgPSBBcnJheS5mcm9tKG9wdGlvbnMpLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSk7XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0Ly8gdmFsdWVzIGZyb20gY3VzdG9tIGVsZW1lbnRzXG5cdH0gZWxzZSBpZiAoXG5cdFx0KGVsZW1lbnQ/LmNvbnN0cnVjdG9yPy5wcm90b3R5cGUgJiZcblx0XHRcdCEhT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcblx0XHRcdFx0ZWxlbWVudC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsXG5cdFx0XHRcdFwidmFsdWVcIixcblx0XHRcdCk/LltcImdldFwiXSkgfHxcblx0XHRlbGVtZW50Lmhhc093blByb3BlcnR5KFwidmFsdWVcIilcblx0KSB7XG5cdFx0dmFsdWUgPSBlbGVtZW50Py5bXCJ2YWx1ZVwiXTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBvYmplY3RcIik7XG5cdH1cblxuXHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0Y29uc3QgdHlwZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0JJTkRfVFlQRSk7XG5cdFx0c3dpdGNoICh0eXBlKSB7XG5cdFx0XHRjYXNlIFwibnVtYmVyXCI6XG5cdFx0XHRjYXNlIFwiaW50XCI6XG5cdFx0XHRjYXNlIFwiZmxvYXRcIjpcblx0XHRcdGNhc2UgXCJpbnRlZ2VyXCI6XG5cdFx0XHRcdHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblx0XHRcdFx0aWYgKGlzTmFOKHZhbHVlKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gMDtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJib29sZWFuXCI6XG5cdFx0XHRjYXNlIFwiYm9vbFwiOlxuXHRcdFx0Y2FzZSBcImNoZWNrYm94XCI6XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiIHx8IHZhbHVlID09PSBcIjFcIiB8fCB2YWx1ZSA9PT0gXCJvblwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJhcnJheVwiOlxuXHRcdFx0Y2FzZSBcImxpc3RcIjpcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZS5zcGxpdChcIixcIik7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIm9iamVjdFwiOlxuXHRcdFx0Y2FzZSBcImpzb25cIjpcblx0XHRcdFx0dmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRjb25zdCBjb3B5ID0gY2xvbmUodGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpKTtcblxuXHRjb25zdCBwZiA9IG5ldyBQYXRoZmluZGVyKGNvcHkpO1xuXHRwZi5zZXRWaWEocGF0aCwgdmFsdWUpO1xuXG5cdGNvbnN0IGRpZmZSZXN1bHQgPSBkaWZmKGNvcHksIHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0UmVhbFN1YmplY3QoKSk7XG5cblx0aWYgKGRpZmZSZXN1bHQubGVuZ3RoID4gMCkge1xuXHRcdHBhdGhmaW5kZXIuc2V0VmlhKHBhdGgsIHZhbHVlKTtcblx0fVxufVxuXG4vKipcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjcuMFxuICogQHJldHVybiB2b2lkXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiByZXRyaWV2ZUZyb21CaW5kaW5ncygpIHtcblx0aWYgKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQubWF0Y2hlcyhgWyR7QVRUUklCVVRFX1VQREFURVJfQklORH1dYCkpIHtcblx0XHRyZXRyaWV2ZUFuZFNldFZhbHVlLmNhbGwodGhpcywgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudCk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnRcblx0XHQucXVlcnlTZWxlY3RvckFsbChgWyR7QVRUUklCVVRFX1VQREFURVJfQklORH1dYClcblx0XHQuZW50cmllcygpKSB7XG5cdFx0cmV0cmlldmVBbmRTZXRWYWx1ZS5jYWxsKHRoaXMsIGVsZW1lbnQpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge29iamVjdH0gY2hhbmdlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZW1vdmVFbGVtZW50KGNoYW5nZSkge1xuXHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnRcblx0XHQucXVlcnlTZWxlY3RvckFsbChgOnNjb3BlIFske0FUVFJJQlVURV9VUERBVEVSX1JFTU9WRX1dYClcblx0XHQuZW50cmllcygpKSB7XG5cdFx0ZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW1lbnQpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuOC4wXG4gKiBAcGFyYW0ge29iamVjdH0gY2hhbmdlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBpcyBub3QgaXRlcmFibGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBwaXBlcyBhcmUgbm90IGFsbG93ZWQgd2hlbiBjbG9uaW5nIGEgbm9kZS5cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyB0ZW1wbGF0ZSB3YXMgZm91bmQgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS5cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgbWF4aW11bSBkZXB0aCBmb3IgdGhlIHJlY3Vyc2lvbiBpcyByZWFjaGVkLlxuICogQHRoaXMgVXBkYXRlclxuICovXG5mdW5jdGlvbiBpbnNlcnRFbGVtZW50KGNoYW5nZSkge1xuXHRjb25zdCBzdWJqZWN0ID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uc3ViamVjdC5nZXRSZWFsU3ViamVjdCgpO1xuXG5cdGNvbnN0IG1lbSA9IG5ldyBXZWFrU2V0KCk7XG5cdGxldCB3ZCA9IDA7XG5cblx0Y29uc3QgY29udGFpbmVyID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudDtcblxuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdGxldCBmb3VuZCA9IGZhbHNlO1xuXHRcdHdkKys7XG5cblx0XHRjb25zdCBwID0gY2xvbmUoY2hhbmdlPy5bXCJwYXRoXCJdKTtcblx0XHRpZiAoIWlzQXJyYXkocCkpIHJldHVybjtcblxuXHRcdHdoaWxlIChwLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGN1cnJlbnQgPSBwLmpvaW4oXCIuXCIpO1xuXG5cdFx0XHRsZXQgaXRlcmF0b3IgPSBuZXcgU2V0KCk7XG5cdFx0XHRjb25zdCBxdWVyeSA9IGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlR9Kj1cInBhdGg6JHtjdXJyZW50fVwiXWA7XG5cblx0XHRcdGNvbnN0IGUgPSBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChxdWVyeSk7XG5cblx0XHRcdGlmIChlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0aXRlcmF0b3IgPSBuZXcgU2V0KFsuLi5lXSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjb250YWluZXIubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdFx0aXRlcmF0b3IuYWRkKGNvbnRhaW5lcik7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoY29uc3QgWywgY29udGFpbmVyRWxlbWVudF0gb2YgaXRlcmF0b3IuZW50cmllcygpKSB7XG5cdFx0XHRcdGlmIChtZW0uaGFzKGNvbnRhaW5lckVsZW1lbnQpKSBjb250aW51ZTtcblx0XHRcdFx0bWVtLmFkZChjb250YWluZXJFbGVtZW50KTtcblxuXHRcdFx0XHRmb3VuZCA9IHRydWU7XG5cblx0XHRcdFx0Y29uc3QgYXR0cmlidXRlcyA9IGNvbnRhaW5lckVsZW1lbnQuZ2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVCxcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGF0dHJpYnV0ZXMgPT09IG51bGwpIGNvbnRpbnVlO1xuXG5cdFx0XHRcdGNvbnN0IGRlZiA9IHRyaW1TcGFjZXMoYXR0cmlidXRlcyk7XG5cdFx0XHRcdGNvbnN0IGkgPSBkZWYuaW5kZXhPZihcIiBcIik7XG5cdFx0XHRcdGNvbnN0IGtleSA9IHRyaW1TcGFjZXMoZGVmLnN1YnN0cigwLCBpKSk7XG5cdFx0XHRcdGNvbnN0IHJlZlByZWZpeCA9IGAke2tleX0tYDtcblx0XHRcdFx0Y29uc3QgY21kID0gdHJpbVNwYWNlcyhkZWYuc3Vic3RyKGkpKTtcblxuXHRcdFx0XHQvLyB0aGlzIGNhc2UgaXMgYWN0dWFsbHkgZXhjbHVkZWQgYnkgdGhlIHF1ZXJ5IGJ1dCBpcyBuZXZlcnRoZWxlc3MgY2hlY2tlZCBhZ2FpbiBoZXJlXG5cdFx0XHRcdGlmIChjbWQuaW5kZXhPZihcInxcIikgPiAwKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwicGlwZXMgYXJlIG5vdCBhbGxvd2VkIHdoZW4gY2xvbmluZyBhIG5vZGUuXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgcGlwZSA9IG5ldyBQaXBlKGNtZCk7XG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrcy5mb3JFYWNoKChmLCBuKSA9PiB7XG5cdFx0XHRcdFx0cGlwZS5zZXRDYWxsYmFjayhuLCBmKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0bGV0IHZhbHVlO1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnRhaW5lckVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UpO1xuXHRcdFx0XHRcdHZhbHVlID0gcGlwZS5ydW4oc3ViamVjdCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRjb250YWluZXJFbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgZGF0YVBhdGggPSBjbWQuc3BsaXQoXCI6XCIpLnBvcCgpO1xuXG5cdFx0XHRcdGxldCBpbnNlcnRQb2ludDtcblx0XHRcdFx0aWYgKGNvbnRhaW5lckVsZW1lbnQuaGFzQ2hpbGROb2RlcygpKSB7XG5cdFx0XHRcdFx0aW5zZXJ0UG9pbnQgPSBjb250YWluZXJFbGVtZW50Lmxhc3RDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghaXNJdGVyYWJsZSh2YWx1ZSkpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgdmFsdWUgaXMgbm90IGl0ZXJhYmxlXCIpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgYXZhaWxhYmxlID0gbmV3IFNldCgpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgW2ldIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuXHRcdFx0XHRcdGNvbnN0IHJlZiA9IHJlZlByZWZpeCArIGk7XG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudFBhdGggPSBgJHtkYXRhUGF0aH0uJHtpfWA7XG5cblx0XHRcdFx0XHRhdmFpbGFibGUuYWRkKHJlZik7XG5cdFx0XHRcdFx0Y29uc3QgcmVmRWxlbWVudCA9IGNvbnRhaW5lckVsZW1lbnQucXVlcnlTZWxlY3Rvcihcblx0XHRcdFx0XHRcdGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFfT1cIiR7cmVmfVwiXWAsXG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGlmIChyZWZFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdGluc2VydFBvaW50ID0gcmVmRWxlbWVudDtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGFwcGVuZE5ld0RvY3VtZW50RnJhZ21lbnQoY29udGFpbmVyRWxlbWVudCwga2V5LCByZWYsIGN1cnJlbnRQYXRoKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IG5vZGVzID0gY29udGFpbmVyRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdFx0XHRcdGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFfSo9XCIke3JlZlByZWZpeH1cIl1gLFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgWywgbm9kZV0gb2YgT2JqZWN0LmVudHJpZXMobm9kZXMpKSB7XG5cdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0IWF2YWlsYWJsZS5oYXMoXG5cdFx0XHRcdFx0XHRcdG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UpLFxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0Y29udGFpbmVyRWxlbWVudC5yZW1vdmVDaGlsZChub2RlKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0Y29udGFpbmVyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdFx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0XHRcdFx0XHRgJHtjb250YWluZXJFbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFKX0sICR7XG5cdFx0XHRcdFx0XHRcdFx0XHRlLm1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0XHR9YC50cmltKCksXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHAucG9wKCk7XG5cdFx0fVxuXG5cdFx0aWYgKGZvdW5kID09PSBmYWxzZSkgYnJlYWs7XG5cdFx0aWYgKHdkKysgPiAyMDApIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBtYXhpbXVtIGRlcHRoIGZvciB0aGUgcmVjdXJzaW9uIGlzIHJlYWNoZWQuXCIpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS44LjBcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lclxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtzdHJpbmd9IHJlZlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEB0aHJvd3Mge0Vycm9yfSBubyB0ZW1wbGF0ZSB3YXMgZm91bmQgd2l0aCB0aGUgc3BlY2lmaWVkIGtleS5cbiAqL1xuZnVuY3Rpb24gYXBwZW5kTmV3RG9jdW1lbnRGcmFnbWVudChjb250YWluZXIsIGtleSwgcmVmLCBwYXRoKSB7XG5cdGNvbnN0IHRlbXBsYXRlID0gZmluZERvY3VtZW50VGVtcGxhdGUoa2V5LCBjb250YWluZXIpO1xuXG5cdGNvbnN0IG5vZGVzID0gdGVtcGxhdGUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXHRmb3IgKGNvbnN0IFssIG5vZGVdIG9mIE9iamVjdC5lbnRyaWVzKG5vZGVzLmNoaWxkTm9kZXMpKSB7XG5cdFx0aWYgKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0YXBwbHlSZWN1cnNpdmUobm9kZSwga2V5LCBwYXRoKTtcblx0XHRcdG5vZGUuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0lOU0VSVF9SRUZFUkVOQ0UsIHJlZik7XG5cdFx0fVxuXG5cdFx0Y29udGFpbmVyLmFwcGVuZENoaWxkKG5vZGUpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTAuMFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGFwcGx5UmVjdXJzaXZlKG5vZGUsIGtleSwgcGF0aCkge1xuXHRpZiAobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UpKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UpO1xuXHRcdFx0bm9kZS5zZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdEFUVFJJQlVURV9VUERBVEVSX1JFUExBQ0UsXG5cdFx0XHRcdHZhbHVlLnJlcGxhY2VBbGwoYHBhdGg6JHtrZXl9YCwgYHBhdGg6JHtwYXRofWApLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUykpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUyk7XG5cdFx0XHRub2RlLnNldEF0dHJpYnV0ZShcblx0XHRcdFx0QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUyxcblx0XHRcdFx0dmFsdWUucmVwbGFjZUFsbChgcGF0aDoke2tleX1gLCBgcGF0aDoke3BhdGh9YCksXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgWywgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKG5vZGUuY2hpbGROb2RlcykpIHtcblx0XHRcdGFwcGx5UmVjdXJzaXZlKGNoaWxkLCBrZXksIHBhdGgpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQHBhcmFtIHtvYmplY3R9IGNoYW5nZVxuICogQHJldHVybiB7dm9pZH1cbiAqIEB0aGlzIFVwZGF0ZXJcbiAqL1xuZnVuY3Rpb24gdXBkYXRlQ29udGVudChjaGFuZ2UpIHtcblx0Y29uc3Qgc3ViamVjdCA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3QuZ2V0UmVhbFN1YmplY3QoKTtcblxuXHRjb25zdCBwID0gY2xvbmUoY2hhbmdlPy5bXCJwYXRoXCJdKTtcblx0cnVuVXBkYXRlQ29udGVudC5jYWxsKHRoaXMsIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmVsZW1lbnQsIHAsIHN1YmplY3QpO1xuXG5cdGNvbnN0IHNsb3RzID0gdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic2xvdFwiKTtcblx0aWYgKHNsb3RzLmxlbmd0aCA+IDApIHtcblx0XHRmb3IgKGNvbnN0IFssIHNsb3RdIG9mIE9iamVjdC5lbnRyaWVzKHNsb3RzKSkge1xuXHRcdFx0Zm9yIChjb25zdCBbLCBlbGVtZW50XSBvZiBPYmplY3QuZW50cmllcyhzbG90LmFzc2lnbmVkTm9kZXMoKSkpIHtcblx0XHRcdFx0cnVuVXBkYXRlQ29udGVudC5jYWxsKHRoaXMsIGVsZW1lbnQsIHAsIHN1YmplY3QpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gY29udGFpbmVyXG4gKiBAcGFyYW0ge2FycmF5fSBwYXJ0c1xuICogQHBhcmFtIHtvYmplY3R9IHN1YmplY3RcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJ1blVwZGF0ZUNvbnRlbnQoY29udGFpbmVyLCBwYXJ0cywgc3ViamVjdCkge1xuXHRpZiAoIWlzQXJyYXkocGFydHMpKSByZXR1cm47XG5cdGlmICghKGNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuO1xuXHRwYXJ0cyA9IGNsb25lKHBhcnRzKTtcblxuXHRjb25zdCBtZW0gPSBuZXcgV2Vha1NldCgpO1xuXG5cdHdoaWxlIChwYXJ0cy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHBhcnRzLmpvaW4oXCIuXCIpO1xuXHRcdHBhcnRzLnBvcCgpO1xuXG5cdFx0Ly8gVW5mb3J0dW5hdGVseSwgc3RhdGljIGRhdGEgaXMgYWx3YXlzIGNoYW5nZWQgYXMgd2VsbCwgc2luY2UgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlYWN0IHRvIGNoYW5nZXMgaGVyZS5cblx0XHRjb25zdCBxdWVyeSA9IGBbJHtBVFRSSUJVVEVfVVBEQVRFUl9SRVBMQUNFfV49XCJwYXRoOiR7Y3VycmVudH1cIl0sIFske0FUVFJJQlVURV9VUERBVEVSX1JFUExBQ0V9Xj1cInN0YXRpYzpcIl0sIFske0FUVFJJQlVURV9VUERBVEVSX1JFUExBQ0V9Xj1cImkxOG46XCJdYDtcblx0XHRjb25zdCBlID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoYCR7cXVlcnl9YCk7XG5cblx0XHRjb25zdCBpdGVyYXRvciA9IG5ldyBTZXQoWy4uLmVdKTtcblxuXHRcdGlmIChjb250YWluZXIubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdGl0ZXJhdG9yLmFkZChjb250YWluZXIpO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEB0eXBlIHtIVE1MRWxlbWVudH1cblx0XHQgKi9cblx0XHRmb3IgKGNvbnN0IFtlbGVtZW50XSBvZiBpdGVyYXRvci5lbnRyaWVzKCkpIHtcblx0XHRcdGlmIChtZW0uaGFzKGVsZW1lbnQpKSByZXR1cm47XG5cdFx0XHRtZW0uYWRkKGVsZW1lbnQpO1xuXG5cdFx0XHRjb25zdCBhdHRyaWJ1dGVzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfUkVQTEFDRSk7XG5cdFx0XHRjb25zdCBjbWQgPSB0cmltU3BhY2VzKGF0dHJpYnV0ZXMpO1xuXG5cdFx0XHRjb25zdCBwaXBlID0gbmV3IFBpcGUoY21kKTtcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNhbGxiYWNrcy5mb3JFYWNoKChmLCBuKSA9PiB7XG5cdFx0XHRcdHBpcGUuc2V0Q2FsbGJhY2sobiwgZik7XG5cdFx0XHR9KTtcblxuXHRcdFx0bGV0IHZhbHVlO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSk7XG5cdFx0XHRcdHZhbHVlID0gcGlwZS5ydW4oc3ViamVjdCk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdHdoaWxlIChlbGVtZW50LmZpcnN0Q2hpbGQpIHtcblx0XHRcdFx0XHRlbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQuZmlyc3RDaGlsZCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGVsZW1lbnQuYXBwZW5kQ2hpbGQodmFsdWUpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5zZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XHRcdFx0YCR7ZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSl9LCAke1xuXHRcdFx0XHRcdFx0XHRlLm1lc3NhZ2Vcblx0XHRcdFx0XHRcdH1gLnRyaW0oKSxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAc2luY2UgMS44LjBcbiAqIEBwYXJhbSB7b2JqZWN0fSBjaGFuZ2VcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZUF0dHJpYnV0ZXMoY2hhbmdlKSB7XG5cdGNvbnN0IHN1YmplY3QgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5zdWJqZWN0LmdldFJlYWxTdWJqZWN0KCk7XG5cdGNvbnN0IHAgPSBjbG9uZShjaGFuZ2U/LltcInBhdGhcIl0pO1xuXHRydW5VcGRhdGVBdHRyaWJ1dGVzLmNhbGwodGhpcywgdGhpc1tpbnRlcm5hbFN5bWJvbF0uZWxlbWVudCwgcCwgc3ViamVjdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGNvbnRhaW5lclxuICogQHBhcmFtIHthcnJheX0gcGFydHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdWJqZWN0XG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQHRoaXMgVXBkYXRlclxuICovXG5mdW5jdGlvbiBydW5VcGRhdGVBdHRyaWJ1dGVzKGNvbnRhaW5lciwgcGFydHMsIHN1YmplY3QpIHtcblx0aWYgKCFpc0FycmF5KHBhcnRzKSkgcmV0dXJuO1xuXHRwYXJ0cyA9IGNsb25lKHBhcnRzKTtcblxuXHRjb25zdCBtZW0gPSBuZXcgV2Vha1NldCgpO1xuXG5cdHdoaWxlIChwYXJ0cy5sZW5ndGggPiAwKSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHBhcnRzLmpvaW4oXCIuXCIpO1xuXHRcdHBhcnRzLnBvcCgpO1xuXG5cdFx0bGV0IGl0ZXJhdG9yID0gbmV3IFNldCgpO1xuXG5cdFx0Y29uc3QgcXVlcnkgPSBgWyR7QVRUUklCVVRFX1VQREFURVJfU0VMRUNUX1RISVN9XVske0FUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVN9XSwgWyR7QVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFU30qPVwicGF0aDoke2N1cnJlbnR9XCJdLCBbJHtBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTfV49XCJzdGF0aWM6XCJdLCBbJHtBVFRSSUJVVEVfVVBEQVRFUl9BVFRSSUJVVEVTfV49XCJpMThuOlwiXWA7XG5cblx0XHRjb25zdCBlID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwocXVlcnkpO1xuXG5cdFx0aWYgKGUubGVuZ3RoID4gMCkge1xuXHRcdFx0aXRlcmF0b3IgPSBuZXcgU2V0KFsuLi5lXSk7XG5cdFx0fVxuXG5cdFx0aWYgKGNvbnRhaW5lci5tYXRjaGVzKHF1ZXJ5KSkge1xuXHRcdFx0aXRlcmF0b3IuYWRkKGNvbnRhaW5lcik7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBbZWxlbWVudF0gb2YgaXRlcmF0b3IuZW50cmllcygpKSB7XG5cdFx0XHRpZiAobWVtLmhhcyhlbGVtZW50KSkgcmV0dXJuO1xuXHRcdFx0bWVtLmFkZChlbGVtZW50KTtcblxuXHRcdFx0Ly8gdGhpcyBjYXNlIG9jY3VycyB3aGVuIHRoZSBBVFRSSUJVVEVfVVBEQVRFUl9TRUxFQ1RfVEhJUyBhdHRyaWJ1dGUgaXMgc2V0XG5cdFx0XHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9VUERBVEVSX0FUVFJJQlVURVMpKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBhdHRyaWJ1dGVzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfQVRUUklCVVRFUyk7XG5cblx0XHRcdGZvciAobGV0IFssIGRlZl0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcy5zcGxpdChcIixcIikpKSB7XG5cdFx0XHRcdGRlZiA9IHRyaW1TcGFjZXMoZGVmKTtcblx0XHRcdFx0Y29uc3QgaSA9IGRlZi5pbmRleE9mKFwiIFwiKTtcblx0XHRcdFx0Y29uc3QgbmFtZSA9IHRyaW1TcGFjZXMoZGVmLnN1YnN0cigwLCBpKSk7XG5cdFx0XHRcdGNvbnN0IGNtZCA9IHRyaW1TcGFjZXMoZGVmLnN1YnN0cihpKSk7XG5cblx0XHRcdFx0Y29uc3QgcGlwZSA9IG5ldyBQaXBlKGNtZCk7XG5cblx0XHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uY2FsbGJhY2tzLmZvckVhY2goKGYsIG4pID0+IHtcblx0XHRcdFx0XHRwaXBlLnNldENhbGxiYWNrKG4sIGYsIGVsZW1lbnQpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRsZXQgdmFsdWU7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoQVRUUklCVVRFX0VSUk9STUVTU0FHRSk7XG5cdFx0XHRcdFx0dmFsdWUgPSBwaXBlLnJ1bihzdWJqZWN0KTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkge1xuXHRcdFx0XHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGhhbmRsZUlucHV0Q29udHJvbEF0dHJpYnV0ZVVwZGF0ZS5jYWxsKHRoaXMsIGVsZW1lbnQsIG5hbWUsIHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudHwqfSBlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfHVuZGVmaW5lZH0gdmFsdWVcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAdGhpcyBVcGRhdGVyXG4gKi9cblxuZnVuY3Rpb24gaGFuZGxlSW5wdXRDb250cm9sQXR0cmlidXRlVXBkYXRlKGVsZW1lbnQsIG5hbWUsIHZhbHVlKSB7XG5cdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpIHtcblx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0Y2FzZSBcInNlbGVjdC1tdWx0aXBsZVwiOlxuXHRcdFx0XHRmb3IgKGNvbnN0IFtpbmRleCwgb3B0XSBvZiBPYmplY3QuZW50cmllcyhlbGVtZW50Lm9wdGlvbnMpKSB7XG5cdFx0XHRcdFx0b3B0LnNlbGVjdGVkID0gdmFsdWUuaW5kZXhPZihvcHQudmFsdWUpICE9PSAtMTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInNlbGVjdC1vbmVcIjpcblx0XHRcdFx0Ly8gT25seSBvbmUgdmFsdWUgbWF5IGJlIHNlbGVjdGVkXG5cblx0XHRcdFx0Zm9yIChjb25zdCBbaW5kZXgsIG9wdF0gb2YgT2JqZWN0LmVudHJpZXMoZWxlbWVudC5vcHRpb25zKSkge1xuXHRcdFx0XHRcdGlmIChvcHQudmFsdWUgPT09IHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRlbGVtZW50LnNlbGVjdGVkSW5kZXggPSBpbmRleDtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCkge1xuXHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRjYXNlIFwicmFkaW9cIjpcblx0XHRcdFx0aWYgKG5hbWUgPT09IFwiY2hlY2tlZFwiKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5jaGVja2VkID0gdmFsdWUgIT09IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiY2hlY2tib3hcIjpcblx0XHRcdFx0aWYgKG5hbWUgPT09IFwiY2hlY2tlZFwiKSB7XG5cdFx0XHRcdFx0ZWxlbWVudC5jaGVja2VkID0gdmFsdWUgIT09IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcInRleHRcIjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGlmIChuYW1lID09PSBcInZhbHVlXCIpIHtcblx0XHRcdFx0XHRlbGVtZW50LnZhbHVlID0gdmFsdWUgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiB2YWx1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fSBlbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuXHRcdGlmIChuYW1lID09PSBcInZhbHVlXCIpIHtcblx0XHRcdGVsZW1lbnQudmFsdWUgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHZhbHVlO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7Tm9kZUxpc3R8SFRNTEVsZW1lbnR8U2V0PEhUTUxFbGVtZW50Pn0gZWxlbWVudHNcbiAqIEBwYXJhbSB7U3ltYm9sfSBzeW1ib2xcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWdcbiAqXG4gKiBDb25maWc6IGVuYWJsZUV2ZW50UHJvY2Vzc2luZyB7Ym9vbGVhbn0gLSBkZWZhdWx0OiBmYWxzZSAtIGVuYWJsZXMgdGhlIGV2ZW50IHByb2Nlc3NpbmdcbiAqXG4gKiBAcmV0dXJuIHtQcm9taXNlW119XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIzLjBcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gZWxlbWVudHMgaXMgbm90IGFuIGluc3RhbmNlIG9mIE5vZGVMaXN0LCBIVE1MRWxlbWVudCBvciBTZXRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBIVE1MRWxlbWVudFxuICogQHRocm93cyB7VHlwZUVycm9yfSBzeW1ib2wgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBTeW1ib2xcbiAqL1xuZnVuY3Rpb24gYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQoZWxlbWVudHMsIHN5bWJvbCwgb2JqZWN0LCBjb25maWcgPSB7fSkge1xuXHRpZiAoISh0aGlzIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdFwidGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50XCIsXG5cdFx0KTtcblx0fVxuXG5cdGlmICghKHR5cGVvZiBzeW1ib2wgPT09IFwic3ltYm9sXCIpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInN5bWJvbCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFN5bWJvbFwiKTtcblx0fVxuXG5cdGNvbnN0IHVwZGF0ZXJzID0gbmV3IFNldCgpO1xuXG5cdGlmIChlbGVtZW50cyBpbnN0YW5jZW9mIE5vZGVMaXN0KSB7XG5cdFx0ZWxlbWVudHMgPSBuZXcgU2V0KFsuLi5lbGVtZW50c10pO1xuXHR9IGVsc2UgaWYgKGVsZW1lbnRzIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRlbGVtZW50cyA9IG5ldyBTZXQoW2VsZW1lbnRzXSk7XG5cdH0gZWxzZSBpZiAoZWxlbWVudHMgaW5zdGFuY2VvZiBTZXQpIHtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0YGVsZW1lbnRzIGlzIG5vdCBhIHZhbGlkIHR5cGUuIChhY3R1YWw6ICR7dHlwZW9mIGVsZW1lbnRzfSlgLFxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCByZXN1bHQgPSBbXTtcblxuXHRjb25zdCB1cGRhdGVyQ2FsbGJhY2tzID0gW107XG5cdGNvbnN0IGNiID0gdGhpcz8uW3VwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2xdO1xuXHRpZiAodGhpcyBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIHR5cGVvZiBjYiA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0Y29uc3QgY2FsbGJhY2tzID0gY2IuY2FsbCh0aGlzKTtcblx0XHRpZiAodHlwZW9mIGNhbGxiYWNrcyA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0Zm9yIChjb25zdCBbbmFtZSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGNhbGxiYWNrcykpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdFx0dXBkYXRlckNhbGxiYWNrcy5wdXNoKFtuYW1lLCBjYWxsYmFja10pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdFx0XHRgb25VcGRhdGVyUGlwZUNhbGxiYWNrczogJHtuYW1lfSBpcyBub3QgYSBmdW5jdGlvbmAsXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0YG9uVXBkYXRlclBpcGVDYWxsYmFja3MgZG8gbm90IHJldHVybiBhbiBvYmplY3Qgd2l0aCBmdW5jdGlvbnNgLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG5cdFx0aWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgcmV0dXJuO1xuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgdSA9IG5ldyBVcGRhdGVyKGVsZW1lbnQsIG9iamVjdCk7XG5cdFx0dXBkYXRlcnMuYWRkKHUpO1xuXG5cdFx0aWYgKHVwZGF0ZXJDYWxsYmFja3MubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yIChjb25zdCBbbmFtZSwgY2FsbGJhY2tdIG9mIHVwZGF0ZXJDYWxsYmFja3MpIHtcblx0XHRcdFx0dS5zZXRDYWxsYmFjayhuYW1lLCBjYWxsYmFjayk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmVzdWx0LnB1c2goXG5cdFx0XHR1LnJ1bigpLnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRpZiAoY29uZmlnLmV2ZW50UHJvY2Vzc2luZyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdHUuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdTtcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH0pO1xuXG5cdGlmICh1cGRhdGVycy5zaXplID4gMCkge1xuXHRcdGFkZFRvT2JqZWN0TGluayh0aGlzLCBzeW1ib2wsIHVwZGF0ZXJzKTtcblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgZ2V0U2xvdHRlZEVsZW1lbnRzLCBnZXRTbG90dGVkTm9kZXMgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtTdHJpbmd8dW5kZWZpbmVkfSBxdWVyeVxuICogQHBhcmFtIHtTdHJpbmd8dW5kZWZpbmVkfG51bGx9IG5hbWUgbmFtZSBvZiB0aGUgc2xvdCAoaWYgdGhlIHBhcmFtZXRlciBpcyB1bmRlZmluZWQsIGFsbCBzbG90cyBhcmUgc2VhcmNoZWQsIGlmIHRoZSBwYXJhbWV0ZXIgaGFzIHRoZSB2YWx1ZSBudWxsLCBhbGwgc2xvdHMgd2l0aG91dCBhIG5hbWUgYXJlIHNlYXJjaGVkLiBpZiBhIHN0cmluZyBpcyBzcGVjaWZpZWQsIHRoZSBzbG90cyB3aXRoIHRoaXMgbmFtZSBhcmUgc2VhcmNoZWQuKVxuICogQHJldHVybiB7Kn1cbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuMzMuMFxuICogQHRocm93cyB7RXJyb3J9IHF1ZXJ5IG11c3QgYmUgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0U2xvdHRlZE5vZGVzKHF1ZXJ5LCBuYW1lKSB7XG5cdGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQoKTtcblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRsZXQgc2VsZWN0b3IgPSBcInNsb3RcIjtcblx0aWYgKG5hbWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChuYW1lID09PSBudWxsKSB7XG5cdFx0XHRzZWxlY3RvciArPSBcIjpub3QoW25hbWVdKVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzZWxlY3RvciArPSBgW25hbWU9JHt2YWxpZGF0ZVN0cmluZyhuYW1lKX1dYDtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBzbG90cyA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcblxuXHRmb3IgKGNvbnN0IFssIHNsb3RdIG9mIE9iamVjdC5lbnRyaWVzKHNsb3RzKSkge1xuXHRcdHNsb3QuYXNzaWduZWROb2RlcygpLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcblx0XHRcdGlmIChub2RlID09PSBudWxsIHx8IG5vZGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc1N0cmluZyhxdWVyeSkpIHtcblx0XHRcdFx0bm9kZS5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRcdFx0cmVzdWx0LmFkZChuKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYgKG5vZGUubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdFx0XHRyZXN1bHQuYWRkKG5vZGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwicXVlcnkgbXVzdCBiZSBhIHN0cmluZ1wiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdC5hZGQobm9kZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge1N0cmluZ3x1bmRlZmluZWR9IHF1ZXJ5XG4gKiBAcGFyYW0ge1N0cmluZ3x1bmRlZmluZWR8bnVsbH0gbmFtZSBuYW1lIG9mIHRoZSBzbG90IChpZiB0aGUgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCwgYWxsIHNsb3RzIGFyZSBzZWFyY2hlZCwgaWYgdGhlIHBhcmFtZXRlciBoYXMgdGhlIHZhbHVlIG51bGwsIGFsbCBzbG90cyB3aXRob3V0IGEgbmFtZSBhcmUgc2VhcmNoZWQuIGlmIGEgc3RyaW5nIGlzIHNwZWNpZmllZCwgdGhlIHNsb3RzIHdpdGggdGhpcyBuYW1lIGFyZSBzZWFyY2hlZC4pXG4gKiBAcmV0dXJuIHsqfVxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMy4wXG4gKiBAdGhyb3dzIHtFcnJvcn0gcXVlcnkgbXVzdCBiZSBhIHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRTbG90dGVkRWxlbWVudHMocXVlcnksIG5hbWUpIHtcblx0Y29uc3QgcmVzdWx0ID0gbmV3IFNldCgpO1xuXG5cdGlmICghKHRoaXMuc2hhZG93Um9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpKSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGxldCBzZWxlY3RvciA9IFwic2xvdFwiO1xuXHRpZiAobmFtZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0aWYgKG5hbWUgPT09IG51bGwpIHtcblx0XHRcdHNlbGVjdG9yICs9IFwiOm5vdChbbmFtZV0pXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGVjdG9yICs9IGBbbmFtZT0ke3ZhbGlkYXRlU3RyaW5nKG5hbWUpfV1gO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHNsb3RzID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xuXG5cdGZvciAoY29uc3QgWywgc2xvdF0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdHMpKSB7XG5cdFx0c2xvdC5hc3NpZ25lZEVsZW1lbnRzKCkuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHQhKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgJiZcblx0XHRcdFx0IShub2RlIGluc3RhbmNlb2YgU1ZHRWxlbWVudCkgJiZcblx0XHRcdFx0IShub2RlIGluc3RhbmNlb2YgTWF0aE1MRWxlbWVudClcblx0XHRcdClcblx0XHRcdFx0cmV0dXJuO1xuXG5cdFx0XHRpZiAoaXNTdHJpbmcocXVlcnkpKSB7XG5cdFx0XHRcdGlmIChxdWVyeS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0bm9kZS5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KS5mb3JFYWNoKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQuYWRkKG4pO1xuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKG5vZGUubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdFx0XHRcdHJlc3VsdC5hZGQobm9kZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlc3VsdC5hZGQobm9kZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAocXVlcnkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJxdWVyeSBtdXN0IGJlIGEgc3RyaW5nIGFuZCBub3QgZW1wdHlcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXN1bHQuYWRkKG5vZGUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5leHBvcnQgeyBleHRyYWN0S2V5cyB9O1xuXG4vKipcbiAqIEV4dHJhY3RzIHRoZSBrZXlzIGZyb20gdGhlIGdpdmVuIG9iamVjdCBhbmQgcmV0dXJucyBhIG1hcCB3aXRoIHRoZSBrZXlzIGFuZCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlQcmVmaXhcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlTZXBhcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVNlcGFyYXRvclxuICogQHJldHVybiB7TWFwPGFueSwgYW55Pn1cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdEtleXMoXG5cdG9iaixcblx0a2V5UHJlZml4ID0gXCJcIixcblx0a2V5U2VwYXJhdG9yID0gXCItXCIsXG5cdHZhbHVlU2VwYXJhdG9yID0gXCIuXCIsXG4pIHtcblx0Y29uc3QgcmVzdWx0TWFwID0gbmV3IE1hcCgpO1xuXG5cdGZ1bmN0aW9uIGhlbHBlcihjdXJyZW50T2JqLCBjdXJyZW50S2V5UHJlZml4LCBjdXJyZW50VmFsdWVQcmVmaXgpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBjdXJyZW50T2JqKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGN1cnJlbnRPYmpba2V5XSAhPT0gbnVsbCAmJlxuXHRcdFx0XHR0eXBlb2YgY3VycmVudE9ialtrZXldID09PSBcIm9iamVjdFwiICYmXG5cdFx0XHRcdCFBcnJheS5pc0FycmF5KGN1cnJlbnRPYmpba2V5XSlcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBuZXdLZXlQcmVmaXggPSBjdXJyZW50S2V5UHJlZml4XG5cdFx0XHRcdFx0PyBjdXJyZW50S2V5UHJlZml4ICsga2V5U2VwYXJhdG9yICsga2V5LnRvTG93ZXJDYXNlKClcblx0XHRcdFx0XHQ6IGtleS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRjb25zdCBuZXdWYWx1ZVByZWZpeCA9IGN1cnJlbnRWYWx1ZVByZWZpeFxuXHRcdFx0XHRcdD8gY3VycmVudFZhbHVlUHJlZml4ICsgdmFsdWVTZXBhcmF0b3IgKyBrZXlcblx0XHRcdFx0XHQ6IGtleTtcblx0XHRcdFx0aGVscGVyKGN1cnJlbnRPYmpba2V5XSwgbmV3S2V5UHJlZml4LCBuZXdWYWx1ZVByZWZpeCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmaW5hbEtleSA9IGN1cnJlbnRLZXlQcmVmaXhcblx0XHRcdFx0XHQ/IGN1cnJlbnRLZXlQcmVmaXggKyBrZXlTZXBhcmF0b3IgKyBrZXkudG9Mb3dlckNhc2UoKVxuXHRcdFx0XHRcdDoga2V5LnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdGNvbnN0IGZpbmFsVmFsdWUgPSBjdXJyZW50VmFsdWVQcmVmaXhcblx0XHRcdFx0XHQ/IGN1cnJlbnRWYWx1ZVByZWZpeCArIHZhbHVlU2VwYXJhdG9yICsga2V5XG5cdFx0XHRcdFx0OiBrZXk7XG5cdFx0XHRcdHJlc3VsdE1hcC5zZXQoZmluYWxLZXksIGZpbmFsVmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGhlbHBlcihvYmosIGtleVByZWZpeCwga2V5UHJlZml4KTtcblx0cmV0dXJuIHJlc3VsdE1hcDtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uLy4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7XG5cdGlzQm9vbGVhbixcblx0aXNTdHJpbmcsXG5cdGlzT2JqZWN0LFxuXHRpc0FycmF5LFxuXHRpc0Z1bmN0aW9uLFxuXHRpc0ludGVnZXIsXG59IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IGV4dHJhY3RLZXlzIH0gZnJvbSBcIi4vZXh0cmFjdC1rZXlzLm1qc1wiO1xuXG5leHBvcnQgeyBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzIH07XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIGdpdmVuIG9wdGlvbnMgb2JqZWN0IGJhc2VkIG9uIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBjdXJyZW50IERPTSBlbGVtZW50LlxuICogVGhlIGZ1bmN0aW9uIGxvb2tzIGZvciBhdHRyaWJ1dGVzIHdpdGggdGhlIHByZWZpeCAnZGF0YS1tb25zdGVyLW9wdGlvbi0nLCBhbmQgbWFwcyB0aGVtIHRvXG4gKiBwcm9wZXJ0aWVzIGluIHRoZSBvcHRpb25zIG9iamVjdC4gSXQgcmVwbGFjZXMgdGhlIGRhc2hlcyB3aXRoIGRvdHMgdG8gZm9ybSB0aGUgcHJvcGVydHkgcGF0aC5cbiAqIEZvciBleGFtcGxlLCB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLXVybCcgbWFwcyB0byB0aGUgJ3VybCcgcHJvcGVydHkgaW4gdGhlIG9wdGlvbnMgb2JqZWN0LlxuICpcbiAqIFdpdGggdGhlIG1hcHBpbmcgcGFyYW1ldGVyLCB0aGUgYXR0cmlidXRlIHZhbHVlIGNhbiBiZSBtYXBwZWQgdG8gYSBkaWZmZXJlbnQgdmFsdWUuXG4gKiBGb3IgZXhhbXBsZSwgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi1mb28nIG1hcHMgdG8gdGhlICdiYXInIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqXG4gKiBUaGUgbWFwcGluZyBvYmplY3Qgd291bGQgbG9vayBsaWtlIHRoaXM6XG4gKlxuICoge1xuICogICAgJ2Zvbyc6ICh2YWx1ZSkgPT4gdmFsdWUgKyAnYmFyJ1xuICogICAgLy8gdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tZm9vJyBpcyBhcHBlbmRlZCB3aXRoICdiYXInXG4gKiAgICAvLyBhbmQgYXNzaWduZWQgdG8gdGhlICdiYXInIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqICAgIC8vIGUuZy4gPGRpdiBkYXRhLW1vbnN0ZXItb3B0aW9uLWZvbz1cImZvb1wiPjwvZGl2PlxuICogICAgJ2Jhci5iYXonOiAodmFsdWUpID0+IHZhbHVlICsgJ2JhcidcbiAqICAgIC8vIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLWJhci1iYXonIGlzIGFwcGVuZGVkIHdpdGggJ2JhcidcbiAqICAgIC8vIGFuZCBhc3NpZ25lZCB0byB0aGUgJ2Jhci5iYXonIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqICAgIC8vIGUuZy4gPGRpdiBkYXRhLW1vbnN0ZXItb3B0aW9uLWJhci1iYXo9XCJmb29cIj48L2Rpdj5cbiAqIH1cbiAqXG4gKiBBcnJheSB2YWx1ZXMgaGF2ZSB0byBiZSBzZXBhcmF0ZWQgYnkgJzo6Jy5cbiAqXG4gKiBAc2luY2UgMy4zOC4wXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gVGhlIERPTSBlbGVtZW50IHRvIGJlIHVzZWQgYXMgdGhlIHNvdXJjZSBvZiB0aGUgYXR0cmlidXRlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHRvIGJlIGluaXRpYWxpemVkLlxuICogQHBhcmFtIHtPYmplY3R9IG1hcHBpbmcgLSBBIG1hcHBpbmcgYmV0d2VlbiB0aGUgYXR0cmlidXRlIHZhbHVlIGFuZCB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4IC0gVGhlIHByZWZpeCBvZiB0aGUgYXR0cmlidXRlcyB0byBiZSBjb25zaWRlcmVkLlxuICogQHJldHVybiB7T2JqZWN0fSAtIFRoZSBpbml0aWFsaXplZCBvcHRpb25zIG9iamVjdC5cbiAqIEB0aGlzIEhUTUxFbGVtZW50IC0gVGhlIGNvbnRleHQgb2YgdGhlIERPTSBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKFxuXHRlbGVtZW50LFxuXHRvcHRpb25zLFxuXHRtYXBwaW5nID0ge30sXG5cdHByZWZpeCA9IFwiZGF0YS1tb25zdGVyLW9wdGlvbi1cIixcbikge1xuXHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSByZXR1cm4gb3B0aW9ucztcblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkgcmV0dXJuIG9wdGlvbnM7XG5cblx0Y29uc3Qga2V5TWFwID0gZXh0cmFjdEtleXMob3B0aW9ucyk7XG5cdGNvbnN0IGZpbmRlciA9IG5ldyBQYXRoZmluZGVyKG9wdGlvbnMpO1xuXG5cdGVsZW1lbnQuZ2V0QXR0cmlidXRlTmFtZXMoKS5mb3JFYWNoKChuYW1lKSA9PiB7XG5cdFx0aWYgKCFuYW1lLnN0YXJ0c1dpdGgocHJlZml4KSkgcmV0dXJuO1xuXG5cdFx0Ly8gY2hlY2sgaWYgdGhlIGF0dHJpYnV0ZSBuYW1lIGlzIGEgdmFsaWQgb3B0aW9uLlxuXHRcdC8vIHRoZSBtYXBwaW5nIGJldHdlZW4gdGhlIGF0dHJpYnV0ZSBpcyBzaW1wbGUuIFRoZSBkYXNoIGlzIHJlcGxhY2VkIGJ5IGEgZG90LlxuXHRcdC8vIGUuZy4gZGF0YS1tb25zdGVyLXVybCA9PiB1cmxcblx0XHRjb25zdCBvcHRpb25OYW1lID0ga2V5TWFwLmdldChuYW1lLnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKS50b0xvd2VyQ2FzZSgpKTtcblx0XHRpZiAoIWZpbmRlci5leGlzdHMob3B0aW9uTmFtZSkpIHJldHVybjtcblxuXHRcdGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShuYW1lKSkge1xuXHRcdFx0bGV0IHZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSk7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG1hcHBpbmcuaGFzT3duUHJvcGVydHkob3B0aW9uTmFtZSkgJiZcblx0XHRcdFx0aXNGdW5jdGlvbihtYXBwaW5nW29wdGlvbk5hbWVdKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHZhbHVlID0gbWFwcGluZ1tvcHRpb25OYW1lXSh2YWx1ZSk7XG5cdFx0XHR9XG5cblx0XHRcdGxldCBvcHRpb25WYWx1ZSA9IGZpbmRlci5nZXRWaWEob3B0aW9uTmFtZSk7XG5cdFx0XHRpZiAob3B0aW9uVmFsdWUgPT09IG51bGwgfHwgb3B0aW9uVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRvcHRpb25WYWx1ZSA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvL2NvbnN0IHR5cGVPZk9wdGlvblZhbHVlID0gdHlwZW9mIG9wdGlvblZhbHVlO1xuXHRcdFx0aWYgKG9wdGlvblZhbHVlID09PSBudWxsIHx8IG9wdGlvblZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dmFsdWUgPSBudWxsO1xuXHRcdFx0fSBlbHNlIGlmIChpc0Jvb2xlYW4ob3B0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiO1xuXHRcdFx0fSBlbHNlIGlmIChpc0ludGVnZXIob3B0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoaXNTdHJpbmcob3B0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcblx0XHRcdH0gZWxzZSBpZiAoaXNPYmplY3Qob3B0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdHZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKGlzQXJyYXkob3B0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWUuc3BsaXQoXCI6OlwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbHVlID0gb3B0aW9uVmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdGZpbmRlci5zZXRWaWEob3B0aW9uTmFtZSwgdmFsdWUpO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIG9wdGlvbnM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi8uLi9kYXRhL3BhdGhmaW5kZXIubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2wgfSBmcm9tIFwiLi4vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGV4dHJhY3RLZXlzIH0gZnJvbSBcIi4vZXh0cmFjdC1rZXlzLm1qc1wiO1xuXG5leHBvcnQgeyBzZXRPcHRpb25Gcm9tQXR0cmlidXRlIH07XG5cbi8qKlxuICogU2V0IHRoZSBnaXZlbiBvcHRpb25zIG9iamVjdCBiYXNlZCBvbiB0aGUgYXR0cmlidXRlcyBvZiB0aGUgY3VycmVudCBET00gZWxlbWVudC5cbiAqIFRoZSBmdW5jdGlvbiBsb29rcyBmb3IgYXR0cmlidXRlcyB3aXRoIHRoZSBwcmVmaXggJ2RhdGEtbW9uc3Rlci1vcHRpb24tJywgYW5kIG1hcHMgdGhlbSB0b1xuICogcHJvcGVydGllcyBpbiB0aGUgb3B0aW9ucyBvYmplY3QuIEl0IHJlcGxhY2VzIHRoZSBkYXNoZXMgd2l0aCBkb3RzIHRvIGZvcm0gdGhlIHByb3BlcnR5IHBhdGguXG4gKiBGb3IgZXhhbXBsZSwgdGhlIGF0dHJpYnV0ZSAnZGF0YS1tb25zdGVyLW9wdGlvbi11cmwnIG1hcHMgdG8gdGhlICd1cmwnIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqXG4gKiBXaXRoIHRoZSBtYXBwaW5nIHBhcmFtZXRlciwgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBjYW4gYmUgbWFwcGVkIHRvIGEgZGlmZmVyZW50IHZhbHVlLlxuICogRm9yIGV4YW1wbGUsIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tZm9vJyBtYXBzIHRvIHRoZSAnYmFyJyBwcm9wZXJ0eSBpbiB0aGUgb3B0aW9ucyBvYmplY3QuXG4gKlxuICogVGhlIG1hcHBpbmcgb2JqZWN0IHdvdWxkIGxvb2sgbGlrZSB0aGlzOlxuICoge1xuICogICAgJ2Zvbyc6ICh2YWx1ZSkgPT4gdmFsdWUgKyAnYmFyJ1xuICogICAgLy8gdGhlIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgJ2RhdGEtbW9uc3Rlci1vcHRpb24tZm9vJyBpcyBhcHBlbmRlZCB3aXRoICdiYXInXG4gKiAgICAvLyBhbmQgYXNzaWduZWQgdG8gdGhlICdiYXInIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqICAgIC8vIGUuZy4gPGRpdiBkYXRhLW1vbnN0ZXItb3B0aW9uLWZvbz1cImZvb1wiPjwvZGl2PlxuICogICAgJ2Jhci5iYXonOiAodmFsdWUpID0+IHZhbHVlICsgJ2JhcidcbiAqICAgIC8vIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlICdkYXRhLW1vbnN0ZXItb3B0aW9uLWJhci1iYXonIGlzIGFwcGVuZGVkIHdpdGggJ2JhcidcbiAqICAgIC8vIGFuZCBhc3NpZ25lZCB0byB0aGUgJ2Jhci5iYXonIHByb3BlcnR5IGluIHRoZSBvcHRpb25zIG9iamVjdC5cbiAqICAgIC8vIGUuZy4gPGRpdiBkYXRhLW1vbnN0ZXItb3B0aW9uLWJhci1iYXo9XCJmb29cIj48L2Rpdj5cbiAqIH1cbiAqXG4gKiBAc2luY2UgMy40NS4wXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IC0gVGhlIERPTSBlbGVtZW50IHRvIGJlIHVzZWQgYXMgdGhlIHNvdXJjZSBvZiB0aGUgYXR0cmlidXRlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBuYW1lIC0gVGhlIGF0dHJpYnV0ZSBvYmplY3QgdG8gYmUgdXNlZCBhcyB0aGUgc291cmNlIG9mIHRoZSBhdHRyaWJ1dGVzLlxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgdG8gYmUgaW5pdGlhbGl6ZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwcGluZyAtIEEgbWFwcGluZyBiZXR3ZWVuIHRoZSBhdHRyaWJ1dGUgdmFsdWUgYW5kIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXggLSBUaGUgcHJlZml4IG9mIHRoZSBhdHRyaWJ1dGVzIHRvIGJlIGNvbnNpZGVyZWQuXG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gVGhlIGluaXRpYWxpemVkIG9wdGlvbnMgb2JqZWN0LlxuICogQHRoaXMgSFRNTEVsZW1lbnQgLSBUaGUgY29udGV4dCBvZiB0aGUgRE9NIGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHNldE9wdGlvbkZyb21BdHRyaWJ1dGUoXG5cdGVsZW1lbnQsXG5cdG5hbWUsXG5cdG9wdGlvbnMsXG5cdG1hcHBpbmcgPSB7fSxcblx0cHJlZml4ID0gXCJkYXRhLW1vbnN0ZXItb3B0aW9uLVwiLFxuKSB7XG5cdGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHJldHVybiBvcHRpb25zO1xuXHRpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlcygpKSByZXR1cm4gb3B0aW9ucztcblxuXHRjb25zdCBrZXlNYXAgPSBleHRyYWN0S2V5cyhvcHRpb25zKTtcblx0Y29uc3QgZmluZGVyID0gbmV3IFBhdGhmaW5kZXIob3B0aW9ucyk7XG5cblx0Ly8gY2hlY2sgaWYgdGhlIGF0dHJpYnV0ZSBuYW1lIGlzIGEgdmFsaWQgb3B0aW9uLlxuXHQvLyB0aGUgbWFwcGluZyBiZXR3ZWVuIHRoZSBhdHRyaWJ1dGUgaXMgc2ltcGxlLiBUaGUgZGFzaCBpcyByZXBsYWNlZCBieSBhIGRvdC5cblx0Ly8gZS5nLiBkYXRhLW1vbnN0ZXItdXJsID0+IHVybFxuXHRjb25zdCBvcHRpb25OYW1lID0ga2V5TWFwLmdldChuYW1lLnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKS50b0xvd2VyQ2FzZSgpKTtcblx0aWYgKCFmaW5kZXIuZXhpc3RzKG9wdGlvbk5hbWUpKSByZXR1cm47XG5cblx0aWYgKCFlbGVtZW50Lmhhc0F0dHJpYnV0ZShuYW1lKSkge1xuXHRcdHJldHVybiBvcHRpb25zO1xuXHR9XG5cblx0bGV0IHZhbHVlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUobmFtZSk7XG5cdGlmIChtYXBwaW5nLmhhc093blByb3BlcnR5KG9wdGlvbk5hbWUpICYmIGlzRnVuY3Rpb24obWFwcGluZ1tvcHRpb25OYW1lXSkpIHtcblx0XHR2YWx1ZSA9IG1hcHBpbmdbb3B0aW9uTmFtZV0odmFsdWUpO1xuXHR9XG5cblx0Y29uc3QgdHlwZU9mT3B0aW9uVmFsdWUgPSB0eXBlb2YgZmluZGVyLmdldFZpYShvcHRpb25OYW1lKTtcblx0aWYgKHR5cGVPZk9wdGlvblZhbHVlID09PSBcImJvb2xlYW5cIikge1xuXHRcdHZhbHVlID0gdmFsdWUgPT09IFwidHJ1ZVwiO1xuXHR9IGVsc2UgaWYgKHR5cGVPZk9wdGlvblZhbHVlID09PSBcIm51bWJlclwiKSB7XG5cdFx0dmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuXHR9IGVsc2UgaWYgKHR5cGVPZk9wdGlvblZhbHVlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0dmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuXHR9IGVsc2UgaWYgKHR5cGVPZk9wdGlvblZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0dmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlKTtcblx0fVxuXG5cdGZpbmRlci5zZXRWaWEob3B0aW9uTmFtZSwgdmFsdWUpO1xuXG5cdHJldHVybiBvcHRpb25zO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGZpbmRFbGVtZW50V2l0aElkVXB3YXJkcyB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBQYXRoZmluZGVyIH0gZnJvbSBcIi4uL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcbmltcG9ydCB7IEZvcm1hdHRlciB9IGZyb20gXCIuLi90ZXh0L2Zvcm1hdHRlci5tanNcIjtcblxuaW1wb3J0IHsgcGFyc2VEYXRhVVJMIH0gZnJvbSBcIi4uL3R5cGVzL2RhdGF1cmwubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHtcblx0aXNBcnJheSxcblx0aXNGdW5jdGlvbixcblx0aXNJdGVyYWJsZSxcblx0aXNPYmplY3QsXG5cdGlzU3RyaW5nLFxufSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IFByb3h5T2JzZXJ2ZXIgfSBmcm9tIFwiLi4vdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7XG5cdHZhbGlkYXRlRnVuY3Rpb24sXG5cdHZhbGlkYXRlSW5zdGFuY2UsXG5cdHZhbGlkYXRlT2JqZWN0LFxufSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi91dGlsL2Nsb25lLm1qc1wiO1xuaW1wb3J0IHtcblx0YWRkQXR0cmlidXRlVG9rZW4sXG5cdGdldExpbmtlZE9iamVjdHMsXG5cdGhhc09iamVjdExpbmssXG59IGZyb20gXCIuL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRElTQUJMRUQsXG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9PUFRJT05TLFxuXHRBVFRSSUJVVEVfSU5JVF9DQUxMQkFDSyxcblx0QVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1IsXG5cdEFUVFJJQlVURV9TQ1JJUFRfSE9TVCxcblx0Y3VzdG9tRWxlbWVudFVwZGF0ZXJMaW5rU3ltYm9sLFxuXHRpbml0Q29udHJvbENhbGxiYWNrTmFtZSxcbn0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZmluZERvY3VtZW50VGVtcGxhdGUsIFRlbXBsYXRlIH0gZnJvbSBcIi4vdGVtcGxhdGUubWpzXCI7XG5pbXBvcnQgeyBhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudCB9IGZyb20gXCIuL3VwZGF0ZXIubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudFRyYW5zbGF0aW9ucyB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcbmltcG9ydCB7IGdldFNsb3R0ZWRFbGVtZW50cyB9IGZyb20gXCIuL3Nsb3R0ZWQubWpzXCI7XG5pbXBvcnQgeyBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzIH0gZnJvbSBcIi4vdXRpbC9pbml0LW9wdGlvbnMtZnJvbS1hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgc2V0T3B0aW9uRnJvbUF0dHJpYnV0ZSB9IGZyb20gXCIuL3V0aWwvc2V0LW9wdGlvbi1mcm9tLWF0dHJpYnV0ZS5tanNcIjtcblxuZXhwb3J0IHtcblx0Q3VzdG9tRWxlbWVudCxcblx0aW5pdE1ldGhvZFN5bWJvbCxcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG5cdGdldFNsb3R0ZWRFbGVtZW50cyxcblx0dXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbCxcbn07XG5cbi8qKlxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW5pdE1ldGhvZFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9AQGluaXRNZXRob2RTeW1ib2xcIik7XG5cbi8qKlxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYXNzZW1ibGVNZXRob2RTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAYXNzZW1ibGVNZXRob2RTeW1ib2xcIixcbik7XG5cbi8qKlxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEB1cGRhdGVyVHJhbnNmb3JtZXJNZXRob2RzU3ltYm9sXCIsXG4pO1xuXG4vKipcbiAqIHRoaXMgc3ltYm9sIGhvbGRzIHRoZSBhdHRyaWJ1dGUgb2JzZXJ2ZXIgY2FsbGJhY2tzLiBUaGUga2V5IGlzIHRoZSBhdHRyaWJ1dGUgbmFtZS5cbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2RvbS9AQGF0dHJpYnV0ZU9ic2VydmVyXCIsXG4pO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhdHRyaWJ1dGVNdXRhdGlvbk9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL0BAbXV0YXRpb25PYnNlcnZlclwiLFxuKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdXBkYXRlQ2xvbmVEYXRhU3ltYm9sID0gU3ltYm9sKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vQEB1cGRhdGVDbG9uZURhdGFcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHNjcmlwdEhvc3RFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic2NyaXB0SG9zdEVsZW1lbnRcIik7XG5cbi8qKlxuICogVGhlIGBDdXN0b21FbGVtZW50YCBjbGFzcyBwcm92aWRlcyBhIHdheSB0byBkZWZpbmUgYSBuZXcgSFRNTCBlbGVtZW50IHVzaW5nIHRoZSBwb3dlciBvZiBDdXN0b20gRWxlbWVudHMuXG4gKlxuICogKipJTVBPUlRBTlQ6KiogQWZ0ZXIgZGVmaW5pbmcgYSBgQ3VzdG9tRWxlbWVudGAsIHRoZSBgcmVnaXN0ZXJDdXN0b21FbGVtZW50YCBtZXRob2QgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IGNsYXNzIG5hbWVcbiAqIHRvIG1ha2UgdGhlIHRhZyBkZWZpbmVkIHZpYSB0aGUgYGdldFRhZ2AgbWV0aG9kIGtub3duIHRvIHRoZSBET00uXG4gKlxuICogWW91IGNhbiBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhlIG9iamVjdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KClgIGZ1bmN0aW9uLlxuICpcbiAqICMjIFN0eWxpbmdcbiAqXG4gKiBUbyBkaXNwbGF5IGN1c3RvbSBlbGVtZW50cyBvcHRpbWFsbHksIHRoZSBgOmRlZmluZWRgIHBzZXVkby1jbGFzcyBjYW4gYmUgdXNlZC4gVG8gcHJldmVudCBjdXN0b20gZWxlbWVudHMgZnJvbSBiZWluZyBkaXNwbGF5ZWQgYW5kIGZsaWNrZXJpbmcgdW50aWwgdGhlIGNvbnRyb2wgaXMgcmVnaXN0ZXJlZCxcbiAqIGl0IGlzIHJlY29tbWVuZGVkIHRvIGNyZWF0ZSBhIENTUyBkaXJlY3RpdmUuXG4gKlxuICogSW4gdGhlIHNpbXBsZXN0IGNhc2UsIHlvdSBjYW4gc2ltcGx5IGhpZGUgdGhlIGNvbnRyb2w6XG4gKlxuICogYGBgaHRtbFxuICogPHN0eWxlPlxuICogbXktY3VzdG9tLWVsZW1lbnQ6bm90KDpkZWZpbmVkKSB7XG4gKiAgICAgZGlzcGxheTogbm9uZTtcbiAqIH1cbiAqXG4gKiBteS1jdXN0b20tZWxlbWVudDpkZWZpbmVkIHtcbiAqICAgICBkaXNwbGF5OiBmbGV4O1xuICogfVxuICogPC9zdHlsZT5cbiAqIGBgYFxuICpcbiAqIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gZGlzcGxheSBhIGxvYWRlcjpcbiAqXG4gKiBgYGBjc3NcbiAqIG15LWN1c3RvbS1lbGVtZW50Om5vdCg6ZGVmaW5lZCkge1xuICogICAgIGRpc3BsYXk6IGZsZXg7XG4gKiAgICAgYm94LXNoYWRvdzogMCA0cHggMTBweCAwIHJnYmEoMzMsIDMzLCAzMywgMC4xNSk7XG4gKiAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICogICAgIGhlaWdodDogMjAwcHg7XG4gKiAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICogICAgIG92ZXJmbG93OiBoaWRkZW47XG4gKiB9XG4gKlxuICogbXktY3VzdG9tLWVsZW1lbnQ6bm90KDpkZWZpbmVkKTo6YmVmb3JlIHtcbiAqICAgICBjb250ZW50OiAnJztcbiAqICAgICBkaXNwbGF5OiBibG9jaztcbiAqICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gKiAgICAgbGVmdDogLTE1MHB4O1xuICogICAgIHRvcDogMDtcbiAqICAgICBoZWlnaHQ6IDEwMCU7XG4gKiAgICAgd2lkdGg6IDE1MHB4O1xuICogICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQgMCUsICNFOEU4RTggNTAlLCB0cmFuc3BhcmVudCAxMDAlKTtcbiAqICAgICBhbmltYXRpb246IGxvYWQgMXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpIGluZmluaXRlO1xuICogfVxuICpcbiAqIEBrZXlmcmFtZXMgbG9hZCB7XG4gKiAgICAgZnJvbSB7XG4gKiAgICAgICAgIGxlZnQ6IC0xNTBweDtcbiAqICAgICB9XG4gKiAgICAgdG8ge1xuICogICAgICAgICBsZWZ0OiAxMDAlO1xuICogICAgIH1cbiAqIH1cbiAqXG4gKiBteS1jdXN0b20tZWxlbWVudDpkZWZpbmVkIHtcbiAqICAgICBkaXNwbGF5OiBmbGV4O1xuICogfVxuICogYGBgXG4gKlxuICogTW9yZSBpbmZvcm1hdGlvbiBhYm91dCBDdXN0b20gRWxlbWVudHMgY2FuIGJlIGZvdW5kIGluIHRoZSBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9XZWJfQ29tcG9uZW50cy9Vc2luZ19jdXN0b21fZWxlbWVudHMpLlxuICogQW5kIGluIHRoZSBbSFRNTCBTdGFuZGFyZF0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjY3VzdG9tLWVsZW1lbnRzKSBvciBpbiB0aGUgW1dIQVRXRyBXaWtpXShodHRwczovL3dpa2kud2hhdHdnLm9yZy93aWtpL0N1c3RvbV9FbGVtZW50cykuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS43LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGJhc2UgY2xhc3MgZm9yIEhUTUw1IGN1c3RvbSBjb250cm9scy5cbiAqL1xuY2xhc3MgQ3VzdG9tRWxlbWVudCBleHRlbmRzIEhUTUxFbGVtZW50IHtcblx0LyoqXG5cdCAqIEEgbmV3IG9iamVjdCBpcyBjcmVhdGVkLiBGaXJzdCwgdGhlIGBpbml0T3B0aW9uc2AgbWV0aG9kIGlzIGNhbGxlZC4gSGVyZSB0aGVcblx0ICogb3B0aW9ucyBjYW4gYmUgZGVmaW5lZCBpbiBkZXJpdmVkIGNsYXNzZXMuIFN1YnNlcXVlbnRseSwgdGhlIHNoYWRvd1Jvb3QgaXMgaW5pdGlhbGl6ZWQuXG5cdCAqXG5cdCAqIElNUE9SVEFOVDogQ3VzdG9tQ29udHJvbHMgaW5zdGFuY2VzIGFyZSBub3QgY3JlYXRlZCB2aWEgdGhlIGNvbnN0cnVjdG9yLCBidXQgZWl0aGVyIHZpYSBhIHRhZyBpbiB0aGUgSFRNTCBvciB2aWEgPGNvZGU+ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpPC9jb2RlPi5cblx0ICpcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBvcHRpb24gYXR0cmlidXRlIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBKU09OIGRlZmluaXRpb24uXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpc1thdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF0gPSB7fTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IG5ldyBQcm94eU9ic2VydmVyKHtcblx0XHRcdG9wdGlvbnM6IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXModGhpcywgZXh0ZW5kKHt9LCB0aGlzLmRlZmF1bHRzKSksXG5cdFx0fSk7XG5cdFx0dGhpc1tpbml0TWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRPcHRpb25PYnNlcnZlci5jYWxsKHRoaXMpO1xuXHRcdHRoaXNbc2NyaXB0SG9zdEVsZW1lbnRTeW1ib2xdID0gW107XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZVxuXHQgKiBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC4gVW5mb3J0dW5hdGVseSwgdGhpcyBtZXRob2QgaXMgc3RhdGljLlxuXHQgKiBUaGVyZWZvcmUsIHRoZSBgb2JzZXJ2ZWRBdHRyaWJ1dGVzYCBwcm9wZXJ0eSBjYW5ub3QgYmUgY2hhbmdlZCBkdXJpbmcgcnVudGltZS5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqIEBzaW5jZSAxLjE1LjBcblx0ICovXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gYXR0cmlidXRlXG5cdCAqIEBwYXJhbSBjYWxsYmFja1xuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5DdXN0b21FbGVtZW50fVxuXHQgKi9cblx0YWRkQXR0cmlidXRlT2JzZXJ2ZXIoYXR0cmlidXRlLCBjYWxsYmFjaykge1xuXHRcdHZhbGlkYXRlRnVuY3Rpb24oY2FsbGJhY2spO1xuXHRcdHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW2F0dHJpYnV0ZV0gPSBjYWxsYmFjaztcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gYXR0cmlidXRlXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkN1c3RvbUVsZW1lbnR9XG5cdCAqL1xuXHRyZW1vdmVBdHRyaWJ1dGVPYnNlcnZlcihhdHRyaWJ1dGUpIHtcblx0XHRkZWxldGUgdGhpc1thdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bYXR0cmlidXRlXTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYGRlZmF1bHRzYCBwcm9wZXJ0eSBkZWZpbmVzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgYSBjb250cm9sLiBJZiB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGVzZSxcblx0ICogeW91IGNhbiB1c2UgdmFyaW91cyBtZXRob2RzLCB3aGljaCBhcmUgZGVzY3JpYmVkIGluIHRoZSBkb2N1bWVudGF0aW9uIGF2YWlsYWJsZSBhdFxuXHQgKiB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnZW5kb2Njb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH0uXG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGFyZSBsaXN0ZWQgYmVsb3c6XG5cdCAqXG5cdCAqIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNoYWRvd1Jvb3QgY2FuIGJlIGZvdW5kIGluIHRoZSBbTUROIFdlYiBEb2NzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9hdHRhY2hTaGFkb3cpLFxuXHQgKiBpbiB0aGUgW0hUTUwgU3RhbmRhcmRdKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2N1c3RvbS1lbGVtZW50cy5odG1sI2N1c3RvbS1lbGVtZW50cykgb3IgaW4gdGhlIFtXSEFUV0cgV2lraV0oaHR0cHM6Ly93aWtpLndoYXR3Zy5vcmcvd2lraS9DdXN0b21fRWxlbWVudHMpLlxuXHQgKlxuXHQgKiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0ZW1wbGF0ZSBlbGVtZW50IGNhbiBiZSBmb3VuZCBpbiB0aGUgW01ETiBXZWIgRG9jc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3RlbXBsYXRlKS5cblx0ICpcblx0ICogTW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2xvdCBlbGVtZW50IGNhbiBiZSBmb3VuZCBpbiB0aGUgW01ETiBXZWIgRG9jc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3Nsb3QpLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGRpc2FibGVkPWZhbHNlIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBjb250cm9sIGlzIGRpc2FibGVkLiBXaGVuIHByZXNlbnQsIGl0IG1ha2VzIHRoZSBlbGVtZW50IG5vbi1tdXRhYmxlLCBub24tZm9jdXNhYmxlLCBhbmQgbm9uLXN1Ym1pdHRhYmxlIHdpdGggdGhlIGZvcm0uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzaGFkb3dNb2RlPW9wZW4gU3BlY2lmaWVzIHRoZSBtb2RlIG9mIHRoZSBzaGFkb3cgcm9vdC4gV2hlbiBzZXQgdG8gYG9wZW5gLCBlbGVtZW50cyBpbiB0aGUgc2hhZG93IHJvb3QgYXJlIGFjY2Vzc2libGUgZnJvbSBKYXZhU2NyaXB0IG91dHNpZGUgdGhlIHJvb3QsIHdoaWxlIHNldHRpbmcgaXQgdG8gYGNsb3NlZGAgZGVuaWVzIGFjY2VzcyB0byB0aGUgcm9vdCdzIG5vZGVzIGZyb20gSmF2YVNjcmlwdCBvdXRzaWRlIGl0LlxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGRlbGVnYXRlc0ZvY3VzPXRydWUgU3BlY2lmaWVzIHRoZSBiZWhhdmlvciBvZiB0aGUgY29udHJvbCB3aXRoIHJlc3BlY3QgdG8gZm9jdXNhYmlsaXR5LiBXaGVuIHNldCB0byBgdHJ1ZWAsIGl0IG1pdGlnYXRlcyBjdXN0b20gZWxlbWVudCBpc3N1ZXMgYXJvdW5kIGZvY3VzYWJpbGl0eS4gV2hlbiBhIG5vbi1mb2N1c2FibGUgcGFydCBvZiB0aGUgc2hhZG93IERPTSBpcyBjbGlja2VkLCB0aGUgZmlyc3QgZm9jdXNhYmxlIHBhcnQgaXMgZ2l2ZW4gZm9jdXMsIGFuZCB0aGUgc2hhZG93IGhvc3QgaXMgZ2l2ZW4gYW55IGF2YWlsYWJsZSA6Zm9jdXMgc3R5bGluZy5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBTcGVjaWZpZXMgdGhlIHRlbXBsYXRlcyB1c2VkIGJ5IHRoZSBjb250cm9sLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW49dW5kZWZpbmVkIFNwZWNpZmllcyB0aGUgbWFpbiB0ZW1wbGF0ZSB1c2VkIGJ5IHRoZSBjb250cm9sLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVNYXBwaW5nIFNwZWNpZmllcyB0aGUgbWFwcGluZyBvZiB0ZW1wbGF0ZXMuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZUZvcm1hdHRlciBTcGVjaWZpZXMgdGhlIGZvcm1hdHRlciBmb3IgdGhlIHRlbXBsYXRlcy5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlRm9ybWF0dGVyLm1hcmtlciBTcGVjaWZpZXMgdGhlIG1hcmtlciBmb3IgdGhlIHRlbXBsYXRlcy5cblx0ICogQHByb3BlcnR5IHtGdW5jdGlvbn0gdGVtcGxhdGVGb3JtYXR0ZXIubWFya2VyLm9wZW49bnVsbCBTcGVjaWZpZXMgdGhlIG9wZW5pbmcgbWFya2VyIGZvciB0aGUgdGVtcGxhdGVzLlxuXHQgKiBAcHJvcGVydHkge0Z1bmN0aW9ufSB0ZW1wbGF0ZUZvcm1hdHRlci5tYXJrZXIuY2xvc2U9bnVsbCBTcGVjaWZpZXMgdGhlIGNsb3NpbmcgbWFya2VyIGZvciB0aGUgdGVtcGxhdGVzLlxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGV2ZW50UHJvY2Vzc2luZz1mYWxzZSBTcGVjaWZpZXMgd2hldGhlciB0aGUgY29udHJvbCBwcm9jZXNzZXMgZXZlbnRzLlxuXHQgKiBAc2luY2UgMS44LjBcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0ZGlzYWJsZWQ6IGZhbHNlLFxuXHRcdFx0c2hhZG93TW9kZTogXCJvcGVuXCIsXG5cdFx0XHRkZWxlZ2F0ZXNGb2N1czogdHJ1ZSxcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiB1bmRlZmluZWQsXG5cdFx0XHR9LFxuXHRcdFx0dGVtcGxhdGVNYXBwaW5nOiB7fSxcblx0XHRcdHRlbXBsYXRlRm9ybWF0dGVyOiB7XG5cdFx0XHRcdG1hcmtlcjoge1xuXHRcdFx0XHRcdG9wZW46IG51bGwsXG5cdFx0XHRcdFx0Y2xvc2U6IG51bGwsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXG5cdFx0XHRldmVudFByb2Nlc3Npbmc6IGZhbHNlLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgdXBkYXRlcyB0aGUgbGFiZWxzIG9mIHRoZSBlbGVtZW50LlxuXHQgKiBUaGUgbGFiZWxzIGFyZSBkZWZpbmVkIGluIHRoZSBvcHRpb24gb2JqZWN0LlxuXHQgKiBUaGUga2V5IG9mIHRoZSBsYWJlbCBpcyB1c2VkIHRvIHJldHJpZXZlIHRoZSB0cmFuc2xhdGlvbiBmcm9tIHRoZSBkb2N1bWVudC5cblx0ICogSWYgdGhlIHRyYW5zbGF0aW9uIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBsYWJlbCwgdGhlIGxhYmVsIGlzIHVwZGF0ZWQuXG5cdCAqXG5cdCAqIEJlZm9yZSB5b3UgY2FuIHVzZSB0aGlzIG1ldGhvZCwgeW91IG11c3QgaGF2ZSBsb2FkZWQgdGhlIHRyYW5zbGF0aW9ucy5cblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uQ3VzdG9tRWxlbWVudH1cblx0ICogQHRocm93cyB7RXJyb3J9ICBDYW5ub3QgZmluZCBhbiBlbGVtZW50IHdpdGggdHJhbnNsYXRpb25zLiBBZGQgYSB0cmFuc2xhdGlvbiBvYmplY3QgdG8gdGhlIGRvY3VtZW50LlxuXHQgKi9cblx0dXBkYXRlSTE4bigpIHtcblx0XHRsZXQgdHJhbnNsYXRpb25zO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHRyYW5zbGF0aW9ucyA9IGdldERvY3VtZW50VHJhbnNsYXRpb25zKCk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGlmICghdHJhbnNsYXRpb25zKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRjb25zdCBsYWJlbHMgPSB0aGlzLmdldE9wdGlvbihcImxhYmVsc1wiKTtcblx0XHRpZiAoIShpc09iamVjdChsYWJlbHMpIHx8IGlzSXRlcmFibGUobGFiZWxzKSkpIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3Qga2V5IGluIGxhYmVscykge1xuXHRcdFx0Y29uc3QgZGVmID0gbGFiZWxzW2tleV07XG5cblx0XHRcdGlmIChpc1N0cmluZyhkZWYpKSB7XG5cdFx0XHRcdGNvbnN0IHRleHQgPSB0cmFuc2xhdGlvbnMuZ2V0VGV4dChrZXksIGRlZik7XG5cdFx0XHRcdGlmICh0ZXh0ICE9PSBkZWYpIHtcblx0XHRcdFx0XHR0aGlzLnNldE9wdGlvbihgbGFiZWxzLiR7a2V5fWAsIHRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fSBlbHNlIGlmIChpc09iamVjdChkZWYpKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgayBpbiBkZWYpIHtcblx0XHRcdFx0XHRjb25zdCBkID0gZGVmW2tdO1xuXG5cdFx0XHRcdFx0Y29uc3QgdGV4dCA9IHRyYW5zbGF0aW9ucy5nZXRQbHVyYWxSdWxlVGV4dChrZXksIGssIGQpO1xuXHRcdFx0XHRcdGlmICghaXNTdHJpbmcodGV4dCkpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbGFiZWxzIGRlZmluaXRpb25cIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICh0ZXh0ICE9PSBkKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNldE9wdGlvbihgbGFiZWxzLiR7a2V5fS4ke2t9YCwgdGV4dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxhYmVscyBkZWZpbml0aW9uXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgYGdldFRhZygpYCBtZXRob2QgcmV0dXJucyB0aGUgdGFnIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXN0b20gZWxlbWVudC4gVGhpcyBtZXRob2Qgc2hvdWxkIGJlIG92ZXJ3cml0dGVuXG5cdCAqIGJ5IHRoZSBkZXJpdmVkIGNsYXNzLlxuXHQgKlxuXHQgKiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gY2hlY2sgb24gdGhlIG5hbWUgb2YgdGhlIHRhZyBpbiB0aGlzIGNsYXNzLiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2Zcblx0ICogdGhlIGRldmVsb3BlciB0byBhc3NpZ24gYW4gYXBwcm9wcmlhdGUgdGFnIG5hbWUuIElmIHRoZSBuYW1lIGlzIG5vdCB2YWxpZCwgdGhlXG5cdCAqIGByZWdpc3RlckN1c3RvbUVsZW1lbnQoKWAgbWV0aG9kIHdpbGwgaXNzdWUgYW4gZXJyb3IuXG5cdCAqXG5cdCAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvY3VzdG9tLWVsZW1lbnRzLmh0bWwjdmFsaWQtY3VzdG9tLWVsZW1lbnQtbmFtZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhpcyBtZXRob2QgbXVzdCBiZSBvdmVycmlkZGVuIGJ5IHRoZSBkZXJpdmVkIGNsYXNzLlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB0YWcgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGN1c3RvbSBlbGVtZW50LlxuXHQgKiBAc2luY2UgMS43LjBcblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XCJUaGUgbWV0aG9kIGBnZXRUYWcoKWAgbXVzdCBiZSBvdmVycmlkZGVuIGJ5IHRoZSBkZXJpdmVkIGNsYXNzLlwiLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGBnZXRDU1NTdHlsZVNoZWV0KClgIG1ldGhvZCByZXR1cm5zIGEgYENTU1N0eWxlU2hlZXRgIG9iamVjdCB0aGF0IGRlZmluZXMgdGhlIHN0eWxlcyBmb3IgdGhlIGN1c3RvbSBlbGVtZW50LlxuXHQgKiBJZiB0aGUgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYENTU1N0eWxlU2hlZXRgIGNvbnN0cnVjdG9yLCB0aGVuIGFuIG9iamVjdCBjYW4gYmUgYnVpbHQgdXNpbmcgdGhlIHByb3ZpZGVkIGRldG91ci5cblx0ICpcblx0ICogSWYgYHVuZGVmaW5lZGAgaXMgcmV0dXJuZWQsIHRoZW4gdGhlIHNoYWRvdyByb290IGRvZXMgbm90IHJlY2VpdmUgYSBzdHlsZXNoZWV0LlxuXHQgKlxuXHQgKiBFeGFtcGxlIHVzYWdlOlxuXHQgKlxuXHQgKiBgYGBqc1xuXHQgKiBjbGFzcyBNeUVsZW1lbnQgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0ICogICBzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0ICogICAgICAgY29uc3Qgc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXHQgKiAgICAgICBzaGVldC5yZXBsYWNlU3luYyhcInAgeyBjb2xvcjogcmVkOyB9XCIpO1xuXHQgKiAgICAgICByZXR1cm4gc2hlZXQ7XG5cdCAqICAgfVxuXHQgKiB9XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBJZiB0aGUgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYENTU1N0eWxlU2hlZXRgIGNvbnN0cnVjdG9yLFxuXHQgKiB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIHdvcmthcm91bmQgdG8gY3JlYXRlIHRoZSBzdHlsZXNoZWV0OlxuXHQgKlxuXHQgKiBgYGBqc1xuXHQgKiBjb25zdCBkb2MgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoJ3RpdGxlJyk7XG5cdCAqIGxldCBzdHlsZSA9IGRvYy5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cdCAqIHN0eWxlLmlubmVySFRNTCA9IFwicCB7IGNvbG9yOiByZWQ7IH1cIjtcblx0ICogc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIikpO1xuXHQgKiBkb2MuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdCAqIHJldHVybiBkb2Muc3R5bGVTaGVldHNbMF07XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0fENTU1N0eWxlU2hlZXRbXXxzdHJpbmd8dW5kZWZpbmVkfSBBIGBDU1NTdHlsZVNoZWV0YCBvYmplY3Qgb3IgYW4gYXJyYXkgb2Ygc3VjaCBvYmplY3RzIHRoYXQgZGVmaW5lIHRoZSBzdHlsZXMgZm9yIHRoZSBjdXN0b20gZWxlbWVudCwgb3IgYHVuZGVmaW5lZGAgaWYgbm8gc3R5bGVzaGVldCBzaG91bGQgYmUgYXBwbGllZC5cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogYXR0YWNoIGEgbmV3IG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG5cdCAqL1xuXHRhdHRhY2hPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmF0dGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBkZXRhY2ggYSBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5kZXRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdGNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uY29udGFpbnNPYnNlcnZlcihvYnNlcnZlcik7XG5cdH1cblxuXHQvKipcblx0ICogbmVzdGVkIG9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBieSBwYXRoIGBhLmIuY2Bcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHBhcmFtIHsqfSBkZWZhdWx0VmFsdWVcblx0ICogQHJldHVybiB7Kn1cblx0ICogQHNpbmNlIDEuMTAuMFxuXHQgKi9cblx0Z2V0T3B0aW9uKHBhdGgsIGRlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZCkge1xuXHRcdGxldCB2YWx1ZTtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YWx1ZSA9IG5ldyBQYXRoZmluZGVyKFxuXHRcdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXSxcblx0XHRcdCkuZ2V0VmlhKHBhdGgpO1xuXHRcdH0gY2F0Y2ggKGUpIHt9XG5cblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IG9wdGlvbiBhbmQgaW5mb3JtIGVsZW1lbnRzXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7Q3VzdG9tRWxlbWVudH1cblx0ICogQHNpbmNlIDEuMTQuMFxuXHQgKi9cblx0c2V0T3B0aW9uKHBhdGgsIHZhbHVlKSB7XG5cdFx0bmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpW1wib3B0aW9uc1wiXSkuc2V0VmlhKFxuXHRcdFx0cGF0aCxcblx0XHRcdHZhbHVlLFxuXHRcdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHNpbmNlIDEuMTUuMFxuXHQgKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IG9wdGlvbnNcblx0ICogQHJldHVybiB7Q3VzdG9tRWxlbWVudH1cblx0ICovXG5cdHNldE9wdGlvbnMob3B0aW9ucykge1xuXHRcdGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuXHRcdFx0b3B0aW9ucyA9IHBhcnNlT3B0aW9uc0pTT04uY2FsbCh0aGlzLCBvcHRpb25zKTtcblx0XHR9XG5cdFx0Ly8gMjAyNC0wMS0yMTogcmVtb3ZlIHRoaXMuZGVmYXVsdHMsIG90aGVyd2lzZSBpdCB3aWxsIG92ZXJ3cml0ZVxuXHRcdC8vIHRoZSBjdXJyZW50IHNldHRpbmdzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gbWFkZS5cblx0XHQvLyBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy8xMzZcblx0XHRleHRlbmQodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpW1wib3B0aW9uc1wiXSwgb3B0aW9ucyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBJcyBjYWxsZWQgb25jZSB2aWEgdGhlIGNvbnN0cnVjdG9yXG5cdCAqXG5cdCAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9XG5cdCAqIEBzaW5jZSAxLjguMFxuXHQgKi9cblx0W2luaXRNZXRob2RTeW1ib2xdKCkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmNlIHdoZW4gdGhlIG9iamVjdCBpcyBlcXVpcHBlZCB3aXRoIHVwZGF0ZSBmb3IgdGhlIGR5bmFtaWMgY2hhbmdlIG9mIHRoZSBkb20uXG5cdCAqIFRoZSBmdW5jdGlvbnMgcmV0dXJuZWQgaGVyZSBjYW4gYmUgdXNlZCBhcyBwaXBlIGZ1bmN0aW9ucyBpbiB0aGUgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEluIHRoZSBleGFtcGxlLCB0aGUgZnVuY3Rpb24gYG15LXRyYW5zZm9ybWVyYCBpcyBkZWZpbmVkLiBJbiB0aGUgdGVtcGxhdGUsIHlvdSBjYW4gdXNlIGl0IGFzIGZvbGxvd3M6XG5cdCAqXG5cdCAqIGBgYGh0bWxcblx0ICogPG15LWVsZW1lbnRcblx0ICogICBkYXRhLW1vbnN0ZXItb3B0aW9uLXRyYW5zZm9ybWVyPVwicGF0aDpteS12YWx1ZSB8IGNhbGw6bXktdHJhbnNmb3JtZXJcIj5cblx0ICogPC9teS1lbGVtZW50PlxuXHQgKiBgYGBcblx0ICpcblx0ICogVGhlIGZ1bmN0aW9uIGBteS10cmFuc2Zvcm1lcmAgaXMgY2FsbGVkIHdpdGggdGhlIHZhbHVlIG9mIGBteS12YWx1ZWAgYXMgYSBwYXJhbWV0ZXIuXG5cdCAqXG5cdCAqIGBgYGpzXG5cdCAqIGNsYXNzIE15RWxlbWVudCBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQgKiBbdXBkYXRlclRyYW5zZm9ybWVyTWV0aG9kc1N5bWJvbF0oKSB7XG5cdCAqICAgIHJldHVybiB7XG5cdCAqICAgICAgIFwibXktdHJhbnNmb3JtZXJcIjogKHZhbHVlKSA9PiB7XG5cdCAqICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBXZXJ0KSB7XG5cdCAqICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG5cdCAqICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICsgXCIhXCI7XG5cdCAqICAgICAgICAgICBjYXNlIFwiWmFobFwiOlxuXHQgKiAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSArIDE7XG5cdCAqICAgICAgICAgICBkZWZhdWx0OlxuXHQgKiAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcblx0ICogICAgICAgICAgIH1cblx0ICogICAgfVxuXHQgKiAgICB9O1xuXHQgKiAgfTtcblx0ICogIH1cblx0ICogYGBgXG5cdCAqXG5cdCAqIEByZXR1cm4ge29iamVjdH1cblx0ICogQHNpbmNlIDIuNDMuMFxuXHQgKi9cblx0W3VwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2xdKCkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZSBvYmplY3QgaXMgaW5jbHVkZWQgaW4gdGhlIERPTSBmb3IgdGhlIGZpcnN0IHRpbWUuIEl0IHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgYWN0aW9uczpcblx0ICpcblx0ICogPG9sPlxuXHQgKiA8bGk+RXh0cmFjdHMgdGhlIG9wdGlvbnMgZnJvbSB0aGUgYXR0cmlidXRlcyBhbmQgdGhlIHNjcmlwdCB0YWcgb2YgdGhlIGVsZW1lbnQgYW5kIHNldHMgdGhlbS48L2xpPlxuXHQgKiA8bGk+SW5pdGlhbGl6ZXMgdGhlIHNoYWRvdyByb290IGFuZCBpdHMgQ1NTIHN0eWxlc2hlZXQgKGlmIHNwZWNpZmllZCkuPC9saT5cblx0ICogPGxpPkluaXRpYWxpemVzIHRoZSBIVE1MIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnQuPC9saT5cblx0ICogPGxpPkluaXRpYWxpemVzIHRoZSBjdXN0b20gZWxlbWVudHMgaW5zaWRlIHRoZSBzaGFkb3cgcm9vdCBhbmQgdGhlIHNsb3R0ZWQgZWxlbWVudHMuPC9saT5cblx0ICogPGxpPkF0dGFjaGVzIGEgbXV0YXRpb24gb2JzZXJ2ZXIgdG8gb2JzZXJ2ZSBjaGFuZ2VzIHRvIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBlbGVtZW50LjwvbGk+XG5cdCAqXG5cdCAqIEByZXR1cm4ge0N1c3RvbUVsZW1lbnR9IC0gVGhlIHVwZGF0ZWQgY3VzdG9tIGVsZW1lbnQuXG5cdCAqIEBzaW5jZSAxLjguMFxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRsZXQgZWxlbWVudHM7XG5cdFx0bGV0IG5vZGVMaXN0O1xuXG5cdFx0Ly8gRXh0cmFjdCBvcHRpb25zIGZyb20gYXR0cmlidXRlcyBhbmQgc2V0IHRoZW1cblx0XHRjb25zdCBBdHRyaWJ1dGVPcHRpb25zID0gZ2V0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzLmNhbGwodGhpcyk7XG5cdFx0aWYgKFxuXHRcdFx0aXNPYmplY3QoQXR0cmlidXRlT3B0aW9ucykgJiZcblx0XHRcdE9iamVjdC5rZXlzKEF0dHJpYnV0ZU9wdGlvbnMpLmxlbmd0aCA+IDBcblx0XHQpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9ucyhBdHRyaWJ1dGVPcHRpb25zKTtcblx0XHR9XG5cblx0XHQvLyBFeHRyYWN0IG9wdGlvbnMgZnJvbSBzY3JpcHQgdGFnIGFuZCBzZXQgdGhlbVxuXHRcdGNvbnN0IFNjcmlwdE9wdGlvbnMgPSBnZXRPcHRpb25zRnJvbVNjcmlwdFRhZy5jYWxsKHRoaXMpO1xuXHRcdGlmIChpc09iamVjdChTY3JpcHRPcHRpb25zKSAmJiBPYmplY3Qua2V5cyhTY3JpcHRPcHRpb25zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbnMoU2NyaXB0T3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0Ly8gSW5pdGlhbGl6ZSB0aGUgc2hhZG93IHJvb3QgYW5kIGl0cyBDU1Mgc3R5bGVzaGVldFxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcInNoYWRvd01vZGVcIiwgZmFsc2UpICE9PSBmYWxzZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aW5pdFNoYWRvd1Jvb3QuY2FsbCh0aGlzKTtcblx0XHRcdFx0ZWxlbWVudHMgPSB0aGlzLnNoYWRvd1Jvb3QuY2hpbGROb2Rlcztcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aW5pdENTU1N0eWxlc2hlZXQuY2FsbCh0aGlzKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgZWxlbWVudHMgYXJlIG5vdCBmb3VuZCBpbnNpZGUgdGhlIHNoYWRvdyByb290LCBpbml0aWFsaXplIHRoZSBIVE1MIGNvbnRlbnQgb2YgdGhlIGVsZW1lbnRcblx0XHRpZiAoIShlbGVtZW50cyBpbnN0YW5jZW9mIE5vZGVMaXN0KSkge1xuXHRcdFx0aW5pdEh0bWxDb250ZW50LmNhbGwodGhpcyk7XG5cdFx0XHRlbGVtZW50cyA9IHRoaXMuY2hpbGROb2Rlcztcblx0XHR9XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBjdXN0b20gZWxlbWVudHMgaW5zaWRlIHRoZSBzaGFkb3cgcm9vdCBhbmQgdGhlIHNsb3R0ZWQgZWxlbWVudHNcblx0XHRpbml0RnJvbUNhbGxiYWNrSG9zdC5jYWxsKHRoaXMpO1xuXHRcdHRyeSB7XG5cdFx0XHRub2RlTGlzdCA9IG5ldyBTZXQoWy4uLmVsZW1lbnRzLCAuLi5nZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzKV0pO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdG5vZGVMaXN0ID0gZWxlbWVudHM7XG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdHRoaXNbdXBkYXRlQ2xvbmVEYXRhU3ltYm9sXSA9IGNsb25lKFxuXHRcdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXSxcblx0XHRcdCk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZT8ubWVzc2FnZXMgfHwgYCR7ZX1gKTtcblx0XHR9XG5cblx0XHRjb25zdCBjZmcgPSB7fTtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJldmVudFByb2Nlc3NpbmdcIikgPT09IHRydWUpIHtcblx0XHRcdGNmZy5ldmVudFByb2Nlc3NpbmcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGFkZE9iamVjdFdpdGhVcGRhdGVyVG9FbGVtZW50LmNhbGwoXG5cdFx0XHR0aGlzLFxuXHRcdFx0bm9kZUxpc3QsXG5cdFx0XHRjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wsXG5cdFx0XHR0aGlzW3VwZGF0ZUNsb25lRGF0YVN5bWJvbF0sXG5cdFx0XHRjZmcsXG5cdFx0KTtcblxuXHRcdC8vIEF0dGFjaCBhIG11dGF0aW9uIG9ic2VydmVyIHRvIG9ic2VydmUgY2hhbmdlcyB0byB0aGUgYXR0cmlidXRlcyBvZiB0aGUgZWxlbWVudFxuXHRcdGF0dGFjaEF0dHJpYnV0ZUNoYW5nZU11dGF0aW9uT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZz8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGZvciBhZHZhbmNlZCB1c2Vycy5cblx0ICogVGhlIHJlc3VsdCBpcyBhIGNsb25lIG9mIHRoZSBpbnRlcm5hbCBkYXRhLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0Z2V0SW50ZXJuYWxVcGRhdGVDbG9uZURhdGEoKSB7XG5cdFx0cmV0dXJuIGNsb25lKHRoaXNbdXBkYXRlQ2xvbmVEYXRhU3ltYm9sXSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGVsZW1lbnQgaXMgaW5zZXJ0ZWQgaW50byB0aGUgRE9NLiBJdCBjaGVja3MgaWYgdGhlIGN1c3RvbSBlbGVtZW50XG5cdCAqIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQgYW5kIGlmIG5vdCwgY2FsbHMgdGhlIGFzc2VtYmxlTWV0aG9kIHRvIGluaXRpYWxpemUgaXQuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqIEBzaW5jZSAxLjcuMFxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50L2Nvbm5lY3RlZENhbGxiYWNrXG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHQvLyBDaGVjayBpZiB0aGUgb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWRcblx0XHRpZiAoIWhhc09iamVjdExpbmsodGhpcywgY3VzdG9tRWxlbWVudFVwZGF0ZXJMaW5rU3ltYm9sKSkge1xuXHRcdFx0Ly8gSWYgbm90LCBjYWxsIHRoZSBhc3NlbWJsZU1ldGhvZCB0byBpbml0aWFsaXplIHRoZSBvYmplY3Rcblx0XHRcdHRoaXNbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxlZCBldmVyeSB0aW1lIHRoZSBlbGVtZW50IGlzIHJlbW92ZWQgZnJvbSB0aGUgRE9NLiBVc2VmdWwgZm9yIHJ1bm5pbmcgY2xlYW4gdXAgY29kZS5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICogQHNpbmNlIDEuNy4wXG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHt9XG5cblx0LyoqXG5cdCAqIFRoZSBjdXN0b20gZWxlbWVudCBoYXMgYmVlbiBtb3ZlZCBpbnRvIGEgbmV3IGRvY3VtZW50IChlLmcuIHNvbWVvbmUgY2FsbGVkIGRvY3VtZW50LmFkb3B0Tm9kZShlbCkpLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKiBAc2luY2UgMS43LjBcblx0ICovXG5cdGFkb3B0ZWRDYWxsYmFjaygpIHt9XG5cblx0LyoqXG5cdCAqIENhbGxlZCB3aGVuIGFuIG9ic2VydmVkIGF0dHJpYnV0ZSBoYXMgYmVlbiBhZGRlZCwgcmVtb3ZlZCwgdXBkYXRlZCwgb3IgcmVwbGFjZWQuIEFsc28gY2FsbGVkIGZvciBpbml0aWFsXG5cdCAqIHZhbHVlcyB3aGVuIGFuIGVsZW1lbnQgaXMgY3JlYXRlZCBieSB0aGUgcGFyc2VyLCBvciB1cGdyYWRlZC4gTm90ZTogb25seSBhdHRyaWJ1dGVzIGxpc3RlZCBpbiB0aGUgb2JzZXJ2ZWRBdHRyaWJ1dGVzXG5cdCAqIHByb3BlcnR5IHdpbGwgcmVjZWl2ZSB0aGlzIGNhbGxiYWNrLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gYXR0ck5hbWVcblx0ICogQHBhcmFtIHtzdHJpbmd9IG9sZFZhbFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmV3VmFsXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqIEBzaW5jZSAxLjE1LjBcblx0ICovXG5cdGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhhdHRyTmFtZSwgb2xkVmFsLCBuZXdWYWwpIHtcblx0XHRpZiAoYXR0ck5hbWUuc3RhcnRzV2l0aChcImRhdGEtbW9uc3Rlci1vcHRpb24tXCIpKSB7XG5cdFx0XHRzZXRPcHRpb25Gcm9tQXR0cmlidXRlKFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRhdHRyTmFtZSxcblx0XHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpW1wib3B0aW9uc1wiXSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2FsbGJhY2sgPSB0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXT8uW2F0dHJOYW1lXTtcblx0XHRpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwodGhpcywgbmV3VmFsLCBvbGRWYWwpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2Zcblx0ICogQHNpbmNlIDEuMTkuMFxuXHQgKi9cblx0aGFzTm9kZShub2RlKSB7XG5cdFx0aWYgKGNvbnRhaW5DaGlsZE5vZGUuY2FsbCh0aGlzLCB2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCEodGhpcy5zaGFkb3dSb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29udGFpbkNoaWxkTm9kZS5jYWxsKHRoaXMuc2hhZG93Um9vdCwgbm9kZSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbHMgYSBjYWxsYmFjayBmdW5jdGlvbiBpZiBpdCBleGlzdHMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG5cdCAqIEBwYXJhbSB7Kn0gYXJnc1xuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0Y2FsbENhbGxiYWNrKG5hbWUsIGFyZ3MpIHtcblx0XHRyZXR1cm4gY2FsbENvbnRyb2xDYWxsYmFjay5jYWxsKHRoaXMsIG5hbWUsIC4uLmFyZ3MpO1xuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNhbGxCYWNrRnVuY3Rpb25OYW1lXG4gKiBAcGFyYW0geyp9ICBhcmdzXG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGNhbGxDb250cm9sQ2FsbGJhY2soY2FsbEJhY2tGdW5jdGlvbk5hbWUsIC4uLmFyZ3MpIHtcblx0aWYgKCFpc1N0cmluZyhjYWxsQmFja0Z1bmN0aW9uTmFtZSkgfHwgY2FsbEJhY2tGdW5jdGlvbk5hbWUgPT09IFwiXCIpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoY2FsbEJhY2tGdW5jdGlvbk5hbWUgaW4gdGhpcykge1xuXHRcdHJldHVybiB0aGlzW2NhbGxCYWNrRnVuY3Rpb25OYW1lXSh0aGlzLCAuLi5hcmdzKTtcblx0fVxuXG5cdGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1NDUklQVF9IT1NUKSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh0aGlzW3NjcmlwdEhvc3RFbGVtZW50U3ltYm9sXS5sZW5ndGggPT09IDApIHtcblx0XHRjb25zdCB0YXJnZXRJZCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9TQ1JJUFRfSE9TVCk7XG5cdFx0aWYgKCF0YXJnZXRJZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxpc3QgPSB0YXJnZXRJZC5zcGxpdChcIixcIik7XG5cdFx0Zm9yIChjb25zdCBpZCBvZiBsaXN0KSB7XG5cdFx0XHRjb25zdCBob3N0ID0gZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzKHRoaXMsIHRhcmdldElkKTtcblx0XHRcdGlmICghKGhvc3QgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXNbc2NyaXB0SG9zdEVsZW1lbnRTeW1ib2xdLnB1c2goaG9zdCk7XG5cdFx0fVxuXHR9XG5cblx0Zm9yIChjb25zdCBob3N0IG9mIHRoaXNbc2NyaXB0SG9zdEVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0aWYgKGNhbGxCYWNrRnVuY3Rpb25OYW1lIGluIGhvc3QpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiBob3N0W2NhbGxCYWNrRnVuY3Rpb25OYW1lXSh0aGlzLCAuLi5hcmdzKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHR0aGlzLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0YGNhbGxiYWNrICR7Y2FsbEJhY2tGdW5jdGlvbk5hbWV9IG5vdCBmb3VuZGAsXG5cdCk7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIGN1c3RvbSBlbGVtZW50IGJhc2VkIG9uIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbi5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGF0dGFjaGVkIHRvIHRoZSBET00uIEl0IGNoZWNrcyBpZiB0aGVcbiAqIGBkYXRhLW1vbnN0ZXItb3B0aW9uLWNhbGxiYWNrYCBhdHRyaWJ1dGUgaXMgc2V0LCBhbmQgaWYgbm90LCB0aGUgZGVmYXVsdCBjYWxsYmFja1xuICogYGluaXRDdXN0b21Db250cm9sQ2FsbGJhY2tgIGlzIGNhbGxlZC4gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIHNlYXJjaGVkIGZvciBpbiB0aGlzXG4gKiBlbGVtZW50IGFuZCBpbiB0aGUgaG9zdCBlbGVtZW50LiBJZiB0aGUgY2FsbGJhY2sgaXMgZm91bmQsIGl0IGlzIGNhbGxlZCB3aXRoIHRoZSBlbGVtZW50XG4gKiBhcyBhIHBhcmFtZXRlci5cbiAqXG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9DdXN0b21FbGVtZW50UmVnaXN0cnkvZGVmaW5lI3Byb3ZpZGluZ19hX2NvbnN0cnVjdGlvbl9jYWxsYmFja1xuICogQHNpbmNlIDEuOC4wXG4gKi9cbmZ1bmN0aW9uIGluaXRGcm9tQ2FsbGJhY2tIb3N0KCkge1xuXHQvLyBTZXQgdGhlIGRlZmF1bHQgY2FsbGJhY2sgZnVuY3Rpb24gbmFtZVxuXHRsZXQgY2FsbEJhY2tGdW5jdGlvbk5hbWUgPSBpbml0Q29udHJvbENhbGxiYWNrTmFtZTtcblxuXHQvLyBJZiB0aGUgYGRhdGEtbW9uc3Rlci1vcHRpb24tY2FsbGJhY2tgIGF0dHJpYnV0ZSBpcyBzZXQsIHVzZSBpdHMgdmFsdWUgYXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG5hbWVcblx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9JTklUX0NBTExCQUNLKSkge1xuXHRcdGNhbGxCYWNrRnVuY3Rpb25OYW1lID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0lOSVRfQ0FMTEJBQ0spO1xuXHR9XG5cblx0Ly8gQ2FsbCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCB0aGUgZWxlbWVudCBhcyBhIHBhcmFtZXRlciBpZiBpdCBleGlzdHNcblx0Y2FsbENvbnRyb2xDYWxsYmFjay5jYWxsKHRoaXMsIGNhbGxCYWNrRnVuY3Rpb25OYW1lKTtcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBmaXJzdCBjcmVhdGVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKi9cbmZ1bmN0aW9uIGF0dGFjaEF0dHJpYnV0ZUNoYW5nZU11dGF0aW9uT2JzZXJ2ZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGlmICh0eXBlb2Ygc2VsZlthdHRyaWJ1dGVNdXRhdGlvbk9ic2VydmVyU3ltYm9sXSAhPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHNlbGZbYXR0cmlidXRlTXV0YXRpb25PYnNlcnZlclN5bWJvbF0gPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcblx0XHRmdW5jdGlvbiAobXV0YXRpb25zLCBvYnNlcnZlcikge1xuXHRcdFx0Zm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnMpIHtcblx0XHRcdFx0aWYgKG11dGF0aW9uLnR5cGUgPT09IFwiYXR0cmlidXRlc1wiKSB7XG5cdFx0XHRcdFx0c2VsZi5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soXG5cdFx0XHRcdFx0XHRtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lLFxuXHRcdFx0XHRcdFx0bXV0YXRpb24ub2xkVmFsdWUsXG5cdFx0XHRcdFx0XHRtdXRhdGlvbi50YXJnZXQuZ2V0QXR0cmlidXRlKG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUpLFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHQpO1xuXG5cdHRyeSB7XG5cdFx0c2VsZlthdHRyaWJ1dGVNdXRhdGlvbk9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKHNlbGYsIHtcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRhdHRyaWJ1dGVPbGRWYWx1ZTogdHJ1ZSxcblx0XHR9KTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKHNlbGYsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdH1cbn1cblxuLyoqXG4gKiBAdGhpcyBDdXN0b21FbGVtZW50XG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb250YWluQ2hpbGROb2RlKG5vZGUpIHtcblx0aWYgKHRoaXMuY29udGFpbnMobm9kZSkpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGZvciAoY29uc3QgWywgZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5jaGlsZE5vZGVzKSkge1xuXHRcdGlmIChlLmNvbnRhaW5zKG5vZGUpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRjb250YWluQ2hpbGROb2RlLmNhbGwoZSwgbm9kZSk7XG5cdH1cblxuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNS4wXG4gKiBAcHJpdmF0ZVxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICovXG5mdW5jdGlvbiBpbml0T3B0aW9uT2JzZXJ2ZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGxldCBsYXN0RGlzYWJsZWRWYWx1ZSA9IHVuZGVmaW5lZDtcblx0c2VsZi5hdHRhY2hPYnNlcnZlcihcblx0XHRuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuXHRcdFx0Y29uc3QgZmxhZyA9IHNlbGYuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIik7XG5cblx0XHRcdGlmIChmbGFnID09PSBsYXN0RGlzYWJsZWRWYWx1ZSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGxhc3REaXNhYmxlZFZhbHVlID0gZmxhZztcblxuXHRcdFx0aWYgKCEoc2VsZi5zaGFkb3dSb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBxdWVyeSA9XG5cdFx0XHRcdFwiYnV0dG9uLCBjb21tYW5kLCBmaWVsZHNldCwga2V5Z2VuLCBvcHRncm91cCwgb3B0aW9uLCBzZWxlY3QsIHRleHRhcmVhLCBpbnB1dCwgW2RhdGEtbW9uc3Rlci1vYmplY3RsaW5rXVwiO1xuXHRcdFx0Y29uc3QgZWxlbWVudHMgPSBzZWxmLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChxdWVyeSk7XG5cblx0XHRcdGxldCBub2RlTGlzdDtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdG5vZGVMaXN0ID0gbmV3IFNldChbXG5cdFx0XHRcdFx0Li4uZWxlbWVudHMsXG5cdFx0XHRcdFx0Li4uZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwoc2VsZiwgcXVlcnkpLFxuXHRcdFx0XHRdKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0bm9kZUxpc3QgPSBlbGVtZW50cztcblx0XHRcdH1cblxuXHRcdFx0Zm9yIChjb25zdCBlbGVtZW50IG9mIFsuLi5ub2RlTGlzdF0pIHtcblx0XHRcdFx0aWYgKGZsYWcgPT09IHRydWUpIHtcblx0XHRcdFx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRElTQUJMRUQsIFwiXCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9ESVNBQkxFRCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KSxcblx0KTtcblxuXHRzZWxmLmF0dGFjaE9ic2VydmVyKFxuXHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHQvLyBub3QgaW5pdGlhbGlzZWRcblx0XHRcdGlmICghaGFzT2JqZWN0TGluayhzZWxmLCBjdXN0b21FbGVtZW50VXBkYXRlckxpbmtTeW1ib2wpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIGluZm9ybSBldmVyeSBlbGVtZW50XG5cdFx0XHRjb25zdCB1cGRhdGVycyA9IGdldExpbmtlZE9iamVjdHMoc2VsZiwgY3VzdG9tRWxlbWVudFVwZGF0ZXJMaW5rU3ltYm9sKTtcblxuXHRcdFx0Zm9yIChjb25zdCBsaXN0IG9mIHVwZGF0ZXJzKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgdXBkYXRlciBvZiBsaXN0KSB7XG5cdFx0XHRcdFx0Y29uc3QgZCA9IGNsb25lKHNlbGZbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdKTtcblx0XHRcdFx0XHRPYmplY3QuYXNzaWduKHVwZGF0ZXIuZ2V0U3ViamVjdCgpLCBkKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pLFxuXHQpO1xuXG5cdC8vIGRpc2FibGVkXG5cdHNlbGZbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW0FUVFJJQlVURV9ESVNBQkxFRF0gPSAoKSA9PiB7XG5cdFx0aWYgKHNlbGYuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ESVNBQkxFRCkpIHtcblx0XHRcdHNlbGYuc2V0T3B0aW9uKEFUVFJJQlVURV9ESVNBQkxFRCwgdHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGYuc2V0T3B0aW9uKEFUVFJJQlVURV9ESVNBQkxFRCwgdW5kZWZpbmVkKTtcblx0XHR9XG5cdH07XG5cblx0Ly8gZGF0YS1tb25zdGVyLW9wdGlvbnNcblx0c2VsZlthdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bQVRUUklCVVRFX09QVElPTlNdID0gKCkgPT4ge1xuXHRcdGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMuY2FsbChzZWxmKTtcblx0XHRpZiAoaXNPYmplY3Qob3B0aW9ucykgJiYgT2JqZWN0LmtleXMob3B0aW9ucykubGVuZ3RoID4gMCkge1xuXHRcdFx0c2VsZi5zZXRPcHRpb25zKG9wdGlvbnMpO1xuXHRcdH1cblx0fTtcblxuXHQvLyBkYXRhLW1vbnN0ZXItb3B0aW9ucy1zZWxlY3RvclxuXHRzZWxmW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfT1BUSU9OU19TRUxFQ1RPUl0gPSAoKSA9PiB7XG5cdFx0Y29uc3Qgb3B0aW9ucyA9IGdldE9wdGlvbnNGcm9tU2NyaXB0VGFnLmNhbGwoc2VsZik7XG5cdFx0aWYgKGlzT2JqZWN0KG9wdGlvbnMpICYmIE9iamVjdC5rZXlzKG9wdGlvbnMpLmxlbmd0aCA+IDApIHtcblx0XHRcdHNlbGYuc2V0T3B0aW9ucyhvcHRpb25zKTtcblx0XHR9XG5cdH07XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGdldE9wdGlvbnNGcm9tU2NyaXB0VGFnKCkge1xuXHRpZiAoIXRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SKSkge1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdGNvbnN0IG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuXHRcdHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SKSxcblx0KTtcblx0aWYgKCEobm9kZSBpbnN0YW5jZW9mIEhUTUxTY3JpcHRFbGVtZW50KSkge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0dGhpcyxcblx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRgdGhlIHNlbGVjdG9yICR7QVRUUklCVVRFX09QVElPTlNfU0VMRUNUT1J9IGZvciBvcHRpb25zIHdhcyBzcGVjaWZpZWQgKCR7dGhpcy5nZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdEFUVFJJQlVURV9PUFRJT05TX1NFTEVDVE9SLFxuXHRcdFx0KX0pIGJ1dCBub3QgZm91bmQuYCxcblx0XHQpO1xuXHRcdHJldHVybiB7fTtcblx0fVxuXG5cdGxldCBvYmogPSB7fTtcblxuXHR0cnkge1xuXHRcdG9iaiA9IHBhcnNlT3B0aW9uc0pTT04uY2FsbCh0aGlzLCBub2RlLnRleHRDb250ZW50LnRyaW0oKSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdHRoaXMsXG5cdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0YHdoZW4gYW5hbHl6aW5nIHRoZSBjb25maWd1cmF0aW9uIGZyb20gdGhlIHNjcmlwdCB0YWcgdGhlcmUgd2FzIGFuIGVycm9yLiAke2V9YCxcblx0XHQpO1xuXHR9XG5cblx0cmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoKSB7XG5cdGlmICh0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfT1BUSU9OUykpIHtcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIHBhcnNlT3B0aW9uc0pTT04uY2FsbCh0aGlzLCB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfT1BUSU9OUykpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XHRgdGhlIG9wdGlvbnMgYXR0cmlidXRlICR7QVRUUklCVVRFX09QVElPTlN9IGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBqc29uIGRlZmluaXRpb24gKGFjdHVhbDogJHt0aGlzLmdldEF0dHJpYnV0ZShcblx0XHRcdFx0XHRBVFRSSUJVVEVfT1BUSU9OUyxcblx0XHRcdFx0KX0pLiR7ZX1gLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge307XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSBnaXZlbiBKU09OIGRhdGEgYW5kIHJldHVybnMgdGhlIHBhcnNlZCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhIFRoZSBKU09OIGRhdGEgdG8gYmUgcGFyc2VkLlxuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcGFyc2VkIG9iamVjdC5cbiAqIEB0aHJvd3Mge2Vycm9yfSBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIEpTT04gZGF0YSBpcyBub3QgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlT3B0aW9uc0pTT04oZGF0YSkge1xuXHRsZXQgb2JqID0ge307XG5cblx0aWYgKCFpc1N0cmluZyhkYXRhKSkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHQvLyB0aGUgY29uZmlndXJhdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgZGF0YSB1cmwuXG5cdHRyeSB7XG5cdFx0Y29uc3QgZGF0YVVybCA9IHBhcnNlRGF0YVVSTChkYXRhKTtcblx0XHRkYXRhID0gZGF0YVVybC5jb250ZW50O1xuXHR9IGNhdGNoIChlKSB7fVxuXG5cdHRyeSB7XG5cdFx0b2JqID0gSlNPTi5wYXJzZShkYXRhKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHRocm93IGU7XG5cdH1cblxuXHRyZXR1cm4gdmFsaWRhdGVPYmplY3Qob2JqKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7aW5pdEh0bWxDb250ZW50fVxuICovXG5mdW5jdGlvbiBpbml0SHRtbENvbnRlbnQoKSB7XG5cdHRyeSB7XG5cdFx0Y29uc3QgdGVtcGxhdGUgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZSh0aGlzLmNvbnN0cnVjdG9yLmdldFRhZygpKTtcblx0XHR0aGlzLmFwcGVuZENoaWxkKHRlbXBsYXRlLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRsZXQgaHRtbCA9IHRoaXMuZ2V0T3B0aW9uKFwidGVtcGxhdGVzLm1haW5cIiwgXCJcIik7XG5cdFx0aWYgKGlzU3RyaW5nKGh0bWwpICYmIGh0bWwubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgbWFwcGluZyA9IHRoaXMuZ2V0T3B0aW9uKFwidGVtcGxhdGVNYXBwaW5nXCIsIHt9KTtcblx0XHRcdGlmIChpc09iamVjdChtYXBwaW5nKSkge1xuXHRcdFx0XHRodG1sID0gbmV3IEZvcm1hdHRlcihtYXBwaW5nLCB7fSkuZm9ybWF0KGh0bWwpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5pbm5lckhUTUwgPSBodG1sO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fVxuICogQHRoaXMgQ3VzdG9tRWxlbWVudFxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xNi4wXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuICovXG5mdW5jdGlvbiBpbml0Q1NTU3R5bGVzaGVldCgpIHtcblx0aWYgKCEodGhpcy5zaGFkb3dSb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCkpIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdGNvbnN0IHN0eWxlU2hlZXQgPSB0aGlzLmNvbnN0cnVjdG9yLmdldENTU1N0eWxlU2hlZXQoKTtcblxuXHRpZiAoc3R5bGVTaGVldCBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQpIHtcblx0XHRpZiAoc3R5bGVTaGVldC5jc3NSdWxlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLnNoYWRvd1Jvb3QuYWRvcHRlZFN0eWxlU2hlZXRzID0gW3N0eWxlU2hlZXRdO1xuXHRcdH1cblx0fSBlbHNlIGlmIChpc0FycmF5KHN0eWxlU2hlZXQpKSB7XG5cdFx0Y29uc3QgYXNzaWduID0gW107XG5cdFx0Zm9yIChjb25zdCBzIG9mIHN0eWxlU2hlZXQpIHtcblx0XHRcdGlmIChpc1N0cmluZyhzKSkge1xuXHRcdFx0XHRjb25zdCB0cmltZWRTdHlsZVNoZWV0ID0gcy50cmltKCk7XG5cdFx0XHRcdGlmICh0cmltZWRTdHlsZVNoZWV0ICE9PSBcIlwiKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cdFx0XHRcdFx0c3R5bGUuaW5uZXJIVE1MID0gdHJpbWVkU3R5bGVTaGVldDtcblx0XHRcdFx0XHR0aGlzLnNoYWRvd1Jvb3QucHJlcGVuZChzdHlsZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHZhbGlkYXRlSW5zdGFuY2UocywgQ1NTU3R5bGVTaGVldCk7XG5cblx0XHRcdGlmIChzLmNzc1J1bGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0YXNzaWduLnB1c2gocyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGFzc2lnbi5sZW5ndGggPiAwKSB7XG5cdFx0XHR0aGlzLnNoYWRvd1Jvb3QuYWRvcHRlZFN0eWxlU2hlZXRzID0gYXNzaWduO1xuXHRcdH1cblx0fSBlbHNlIGlmIChpc1N0cmluZyhzdHlsZVNoZWV0KSkge1xuXHRcdGNvbnN0IHRyaW1lZFN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0LnRyaW0oKTtcblx0XHRpZiAodHJpbWVkU3R5bGVTaGVldCAhPT0gXCJcIikge1xuXHRcdFx0Y29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cdFx0XHRzdHlsZS5pbm5lckhUTUwgPSBzdHlsZVNoZWV0O1xuXHRcdFx0dGhpcy5zaGFkb3dSb290LnByZXBlbmQoc3R5bGUpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtDdXN0b21FbGVtZW50fVxuICogQHRocm93cyB7RXJyb3J9IGh0bWwgaXMgbm90IHNldC5cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvYXR0YWNoU2hhZG93XG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjguMFxuICovXG5mdW5jdGlvbiBpbml0U2hhZG93Um9vdCgpIHtcblx0bGV0IHRlbXBsYXRlO1xuXHRsZXQgaHRtbDtcblxuXHR0cnkge1xuXHRcdHRlbXBsYXRlID0gZmluZERvY3VtZW50VGVtcGxhdGUodGhpcy5jb25zdHJ1Y3Rvci5nZXRUYWcoKSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRodG1sID0gdGhpcy5nZXRPcHRpb24oXCJ0ZW1wbGF0ZXMubWFpblwiLCBcIlwiKTtcblx0XHRpZiAoIWlzU3RyaW5nKGh0bWwpIHx8IGh0bWwgPT09IHVuZGVmaW5lZCB8fCBodG1sID09PSBcIlwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJodG1sIGlzIG5vdCBzZXQuXCIpO1xuXHRcdH1cblx0fVxuXG5cdHRoaXMuYXR0YWNoU2hhZG93KHtcblx0XHRtb2RlOiB0aGlzLmdldE9wdGlvbihcInNoYWRvd01vZGVcIiwgXCJvcGVuXCIpLFxuXHRcdGRlbGVnYXRlc0ZvY3VzOiB0aGlzLmdldE9wdGlvbihcImRlbGVnYXRlc0ZvY3VzXCIsIHRydWUpLFxuXHR9KTtcblxuXHRpZiAodGVtcGxhdGUgaW5zdGFuY2VvZiBUZW1wbGF0ZSkge1xuXHRcdHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZCh0ZW1wbGF0ZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y29uc3QgbWFwcGluZyA9IHRoaXMuZ2V0T3B0aW9uKFwidGVtcGxhdGVNYXBwaW5nXCIsIHt9KTtcblx0aWYgKGlzT2JqZWN0KG1hcHBpbmcpKSB7XG5cdFx0Y29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcihtYXBwaW5nKTtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJ0ZW1wbGF0ZUZvcm1hdHRlci5tYXJrZXIub3BlblwiKSAhPT0gbnVsbCkge1xuXHRcdFx0Zm9ybWF0dGVyLnNldE1hcmtlcihcblx0XHRcdFx0dGhpcy5nZXRPcHRpb24oXCJ0ZW1wbGF0ZUZvcm1hdHRlci5tYXJrZXIub3BlblwiKSxcblx0XHRcdFx0dGhpcy5nZXRPcHRpb24oXCJ0ZW1wbGF0ZUZvcm1hdHRlci5tYXJrZXIuY2xvc2VcIiksXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRodG1sID0gZm9ybWF0dGVyLmZvcm1hdChodG1sKTtcblx0fVxuXG5cdHRoaXMuc2hhZG93Um9vdC5pbm5lckhUTUwgPSBodG1sO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCByZWdpc3RlcnMgYSBuZXcgZWxlbWVudC4gVGhlIHN0cmluZyByZXR1cm5lZCBieSBgQ3VzdG9tRWxlbWVudC5nZXRUYWcoKWAgaXMgdXNlZCBhcyB0aGUgdGFnLlxuICpcbiAqIEBwYXJhbSB7Q3VzdG9tRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB7dm9pZH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RE9NRXhjZXB0aW9ufSBGYWlsZWQgdG8gZXhlY3V0ZSAnZGVmaW5lJyBvbiAnQ3VzdG9tRWxlbWVudFJlZ2lzdHJ5JzogaXMgbm90IGEgdmFsaWQgY3VzdG9tIGVsZW1lbnQgbmFtZVxuICovXG5mdW5jdGlvbiByZWdpc3RlckN1c3RvbUVsZW1lbnQoZWxlbWVudCkge1xuXHR2YWxpZGF0ZUZ1bmN0aW9uKGVsZW1lbnQpO1xuXHRjb25zdCBjdXN0b21FbGVtZW50cyA9IGdldEdsb2JhbE9iamVjdChcImN1c3RvbUVsZW1lbnRzXCIpO1xuXHRpZiAoY3VzdG9tRWxlbWVudHMgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcImN1c3RvbUVsZW1lbnRzIGlzIG5vdCBzdXBwb3J0ZWQuXCIpO1xuXHR9XG5cblx0Y29uc3QgdGFnID0gZWxlbWVudD8uZ2V0VGFnKCk7XG5cdGlmICghaXNTdHJpbmcodGFnKSB8fCB0YWcgPT09IFwiXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0YWcgaXMgbm90IHNldC5cIik7XG5cdH1cblxuXHRpZiAoY3VzdG9tRWxlbWVudHMuZ2V0KHRhZykgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGN1c3RvbUVsZW1lbnRzLmRlZmluZSh0YWcsIGVsZW1lbnQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5cbmV4cG9ydCB7IHJhbmRvbSB9O1xuXG4vKipcbiAqIHRoaXMgZnVuY3Rpb24gdXNlcyBjcnlwdCBhbmQgcmV0dXJucyBhIHJhbmRvbSBudW1iZXIuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IG1pbiBzdGFydGluZyB2YWx1ZSBvZiB0aGUgZGVmaW5pdGlvbiBzZXQgKGRlZmF1bHQgaXMgMClcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXggZW5kIHZhbHVlIG9mIHRoZSBkZWZpbml0aW9uIHNldCAoZGVmYXVsdCBpcyAxMDAwMDAwMDAwKVxuICogQHJldHVybiB7bnVtYmVyfVxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgY3J5cHRcbiAqIEB0aHJvd3Mge0Vycm9yfSB3ZSBjYW5ub3QgZ2VuZXJhdGUgbnVtYmVycyBsYXJnZXIgdGhhbiA1MyBiaXRzLlxuICogQHRocm93cyB7RXJyb3J9IHRoZSBkaXN0YW5jZSBpcyB0b28gc21hbGwgdG8gY3JlYXRlIGEgcmFuZG9tIG51bWJlci5cblxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmZ1bmN0aW9uIHJhbmRvbShtaW4sIG1heCkge1xuXHRpZiAobWluID09PSB1bmRlZmluZWQpIHtcblx0XHRtaW4gPSAwO1xuXHR9XG5cdGlmIChtYXggPT09IHVuZGVmaW5lZCkge1xuXHRcdG1heCA9IE1BWDtcblx0fVxuXG5cdGlmIChtYXggPCBtaW4pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtYXggbXVzdCBiZSBncmVhdGVyIHRoYW4gbWluXCIpO1xuXHR9XG5cblx0cmV0dXJuIE1hdGgucm91bmQoY3JlYXRlKG1pbiwgbWF4KSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IE1BWCA9IDEwMDAwMDAwMDA7XG5cbk1hdGgubG9nMiA9XG5cdE1hdGgubG9nMiB8fFxuXHRmdW5jdGlvbiAobikge1xuXHRcdHJldHVybiBNYXRoLmxvZyhuKSAvIE1hdGgubG9nKDIpO1xuXHR9O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbWluXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgY3J5cHRcbiAqIEB0aHJvd3Mge0Vycm9yfSB3ZSBjYW5ub3QgZ2VuZXJhdGUgbnVtYmVycyBsYXJnZXIgdGhhbiA1MyBiaXRzLlxuICogQHRocm93cyB7RXJyb3J9IHRoZSBkaXN0YW5jZSBpcyB0b28gc21hbGwgdG8gY3JlYXRlIGEgcmFuZG9tIG51bWJlci5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlKG1pbiwgbWF4KSB7XG5cdGNvbnN0IGdsb2JhbFJlZmVyZW5jZSA9IGdldEdsb2JhbCgpO1xuXG5cdGNvbnN0IGNyeXB0ID1cblx0XHRnbG9iYWxSZWZlcmVuY2U/LltcImNyeXB0b1wiXSB8fFxuXHRcdGdsb2JhbFJlZmVyZW5jZT8uW1wibXNDcnlwdG9cIl0gfHxcblx0XHRnbG9iYWxSZWZlcmVuY2U/LltcImNyeXB0b1wiXSB8fFxuXHRcdHVuZGVmaW5lZDtcblxuXHRpZiAodHlwZW9mIGNyeXB0ID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibWlzc2luZyBjcnlwdFwiKTtcblx0fVxuXG5cdGxldCBydmFsID0gMDtcblx0Y29uc3QgcmFuZ2UgPSBtYXggLSBtaW47XG5cdGlmIChyYW5nZSA8IDIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgZGlzdGFuY2UgaXMgdG9vIHNtYWxsIHRvIGNyZWF0ZSBhIHJhbmRvbSBudW1iZXIuXCIpO1xuXHR9XG5cblx0Y29uc3QgYml0c05lZWRlZCA9IE1hdGguY2VpbChNYXRoLmxvZzIocmFuZ2UpKTtcblx0aWYgKGJpdHNOZWVkZWQgPiA1Mykge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIndlIGNhbm5vdCBnZW5lcmF0ZSBudW1iZXJzIGxhcmdlciB0aGFuIDUzIGJpdHMuXCIpO1xuXHR9XG5cdGNvbnN0IGJ5dGVzTmVlZGVkID0gTWF0aC5jZWlsKGJpdHNOZWVkZWQgLyA4KTtcblx0Y29uc3QgbWFzayA9IE1hdGgucG93KDIsIGJpdHNOZWVkZWQpIC0gMTtcblxuXHRjb25zdCBieXRlQXJyYXkgPSBuZXcgVWludDhBcnJheShieXRlc05lZWRlZCk7XG5cdGNyeXB0LmdldFJhbmRvbVZhbHVlcyhieXRlQXJyYXkpO1xuXG5cdGxldCBwID0gKGJ5dGVzTmVlZGVkIC0gMSkgKiA4O1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVzTmVlZGVkOyBpKyspIHtcblx0XHRydmFsICs9IGJ5dGVBcnJheVtpXSAqIE1hdGgucG93KDIsIHApO1xuXHRcdHAgLT0gODtcblx0fVxuXG5cdHJ2YWwgPSBydmFsICYgbWFzaztcblxuXHRpZiAocnZhbCA+PSByYW5nZSkge1xuXHRcdHJldHVybiBjcmVhdGUobWluLCBtYXgpO1xuXHR9XG5cblx0aWYgKHJ2YWwgPCBtaW4pIHtcblx0XHRydmFsICs9IG1pbjtcblx0fVxuXG5cdHJldHVybiBydmFsO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNJbnRlZ2VyIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVGdW5jdGlvbiwgdmFsaWRhdGVJbnRlZ2VyIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBEZWFkTWFuc1N3aXRjaCB9O1xuXG4vKipcbiAqIFRoZSBkZWFkIG1hbidzIHN3aXRjaCBhbGxvd3Mgc2V0dGluZyBhIHRpbWVyIHdoaWNoIGNhbiBiZSByZXNldCBhZ2FpblxuICogYW5kIGFnYWluIHdpdGhpbiBhIGRlZmluZWQgcGVyaW9kIG9mIHRpbWUuXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGUvdXRpbC9kZWFkbWFuc3N3aXRjaC9zaW1wbGUvIFNpbXBsZSBleGFtcGxlXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yOS4wXG4gKiBAc3VtbWFyeSBDbGFzcyB0byBiZSBhYmxlIHRvIGV4ZWN1dGUgZnVuY3Rpb24gY2hhaW5zXG4gKi9cbmNsYXNzIERlYWRNYW5zU3dpdGNoIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBDcmVhdGUgbmV3IGRlYWQgbWFuJ3Mgc3dpdGNoXG5cdCAqXG5cdCAqIEBwYXJhbSB7SW50ZWdlcn0gZGVsYXlcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHRocm93IHtUeXBlRXJyb3J9IHRoZSBhcmd1bWVudHMgbXVzdCBiZSBlaXRoZXIgaW50ZWdlciBvciBmdW5jdGlvbnNcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKi9cblx0Y29uc3RydWN0b3IoZGVsYXksIGNhbGxiYWNrKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGluaXQuY2FsbCh0aGlzLCB2YWxpZGF0ZUludGVnZXIoZGVsYXkpLCB2YWxpZGF0ZUZ1bmN0aW9uKGNhbGxiYWNrKSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIGRlbGF5XG5cdCAqIEByZXR1cm5zIHtEZWFkTWFuc1N3aXRjaH1cblx0ICogQHRocm93cyB7RXJyb3J9IGhhcyBhbHJlYWR5IHJ1blxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgYXJndW1lbnRcblx0ICovXG5cdHRvdWNoKGRlbGF5KSB7XG5cdFx0aWYgKHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiaXNBbHJlYWR5UnVuXCJdID09PSB0cnVlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJoYXMgYWxyZWFkeSBydW5cIik7XG5cdFx0fVxuXG5cdFx0aWYgKGlzSW50ZWdlcihkZWxheSkpIHtcblx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiZGVsYXlcIl0gPSBkZWxheTtcblx0XHR9IGVsc2UgaWYgKGRlbGF5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGFyZ3VtZW50XCIpO1xuXHRcdH1cblxuXHRcdGNsZWFyVGltZW91dCh0aGlzW2ludGVybmFsU3ltYm9sXVtcInRpbWVyXCJdKTtcblx0XHRpbml0Q2FsbGJhY2suY2FsbCh0aGlzKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBoYXMgYWxyZWFkeSBydW5cblx0ICogQHJldHVybnMge0RlYWRNYW5zU3dpdGNofVxuXHQgKi9cblx0ZGVmdXNlKCkge1xuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXVtcImlzQWxyZWFkeVJ1blwiXSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiaGFzIGFscmVhZHkgcnVuXCIpO1xuXHRcdH1cblxuXHRcdGNsZWFyVGltZW91dCh0aGlzW2ludGVybmFsU3ltYm9sXVtcInRpbWVyXCJdKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRDYWxsYmFjaygpIHtcblx0dGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ0aW1lclwiXSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiaXNBbHJlYWR5UnVuXCJdID0gdHJ1ZTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcImNhbGxiYWNrXCJdKCk7XG5cdH0sIHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wiZGVsYXlcIl0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGRlbGF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG5mdW5jdGlvbiBpbml0KGRlbGF5LCBjYWxsYmFjaykge1xuXHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRjYWxsYmFjayxcblx0XHRkZWxheSxcblx0XHRpc0FscmVhZHlSdW46IGZhbHNlLFxuXHRcdHRpbWVyOiB1bmRlZmluZWQsXG5cdH07XG5cblx0aW5pdENhbGxiYWNrLmNhbGwodGhpcyk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVGdW5jdGlvbiwgdmFsaWRhdGVJbnRlZ2VyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBDYWxsYmFjayB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNsYXNzIENhbGxiYWNrIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEBwYXJhbSB7aW50fHVuZGVmaW5lZH0gdGltZVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIGZ1bmN0aW9uXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGludGVnZXJcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGNvbnN0cnVjdG9yKGNhbGxiYWNrLCB0aW1lKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHRjYWxsYmFjazogdmFsaWRhdGVGdW5jdGlvbihjYWxsYmFjayksXG5cdFx0XHR0aW1lOiB2YWxpZGF0ZUludGVnZXIodGltZSA/PyAwKSxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSAgeyp9IGRhdGFcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHJ1bihkYXRhKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGdldEdsb2JhbEZ1bmN0aW9uKFwic2V0VGltZW91dFwiKSgoKSA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSh0aGlzW2ludGVybmFsU3ltYm9sXS5jYWxsYmFjayhkYXRhKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIHRoaXNbaW50ZXJuYWxTeW1ib2xdLnRpbWUpO1xuXHRcdH0pO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNJbnRlZ2VyIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgUXVldWUgfSBmcm9tIFwiLi4vdHlwZXMvcXVldWUubWpzXCI7XG5pbXBvcnQgeyBDYWxsYmFjayB9IGZyb20gXCIuL3Byb2Nlc3NpbmcvY2FsbGJhY2subWpzXCI7XG5cbmV4cG9ydCB7IFByb2Nlc3NpbmcgfTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGFsbG93cyBleGVjdXRpbmcgc2V2ZXJhbCBmdW5jdGlvbnMgaW4gb3JkZXIuXG4gKlxuICogRnVuY3Rpb25zIGFuZCB0aW1lb3V0cyBjYW4gYmUgcGFzc2VkLiBJZiBhIHRpbWVvdXQgaXMgcGFzc2VkLCBpdCBhcHBsaWVzIHRvIGFsbCBmdXJ0aGVyIGZ1bmN0aW9ucy5cbiAqIEluIHRoZSBleGFtcGxlXG4gKlxuICogYHRpbWVvdXQxLCBmdW5jdGlvbjEsIGZ1bmN0aW9uMiwgZnVuY3Rpb24zLCB0aW1lb3V0MiwgZnVuY3Rpb240YFxuICpcbiAqIHRoZSB0aW1lb3V0MSBpcyB2YWxpZCBmb3IgdGhlIGZ1bmN0aW9ucyAxLCAyIGFuZCAzIGFuZCB0aGUgdGltZW91dDIgZm9yIHRoZSBmdW5jdGlvbjQuXG4gKlxuICogU28gdGhlIGV4ZWN1dGlvbiB0aW1lIGlzIHRpbWVvdXQxK3RpbWVvdXQxK3RpbWVvdXQxK3RpbWVvdXQyXG4gKlxuICogVGhlIHJlc3VsdCBvZiBgcnVuKClgIGlzIGEgcHJvbWlzZS5cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvbGlicmFyaWVzL3V0aWwvcHJvY2Vzc2luZy9zaW1wbGUvIEEgc2ltcGxlIGV4YW1wbGVcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMS4wXG4gKiBAc3VtbWFyeSBDbGFzcyB0byBiZSBhYmxlIHRvIGV4ZWN1dGUgZnVuY3Rpb24gY2hhaW5zXG4gKi9cbmNsYXNzIFByb2Nlc3NpbmcgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIENyZWF0ZSBuZXcgUHJvY2Vzc2luZ1xuXHQgKlxuXHQgKiBGdW5jdGlvbnMgYW5kIHRpbWVvdXRzIGNhbiBiZSBwYXNzZWQuIElmIGEgdGltZW91dCBpcyBwYXNzZWQsIGl0IGFwcGxpZXMgdG8gYWxsIGZ1cnRoZXIgZnVuY3Rpb25zLlxuXHQgKiBJbiB0aGUgZXhhbXBsZVxuXHQgKlxuXHQgKiBgdGltZW91dDEsIGZ1bmN0aW9uMSwgZnVuY3Rpb24yLCBmdW5jdGlvbjMsIHRpbWVvdXQyLCBmdW5jdGlvbjRgXG5cdCAqXG5cdCAqIHRoZSB0aW1lb3V0MSBpcyB2YWxpZCBmb3IgdGhlIGZ1bmN0aW9ucyAxLCAyIGFuZCAzIGFuZCB0aGUgdGltZW91dDIgZm9yIHRoZSBmdW5jdGlvbjQuXG5cdCAqXG5cdCAqIFNvIHRoZSBleGVjdXRpb24gdGltZSBpcyB0aW1lb3V0MSt0aW1lb3V0MSt0aW1lb3V0MSt0aW1lb3V0MlxuXHQgKlxuXHQgKiBAdGhyb3cge1R5cGVFcnJvcn0gdGhlIGFyZ3VtZW50cyBtdXN0IGJlIGVpdGhlciBpbnRlZ2VyIG9yIGZ1bmN0aW9uc1xuXHQgKiBAcGFyYW0gey4uLihpbnR8ZnVuY3Rpb24pfSBhcmdzXG5cdCAqL1xuXHRjb25zdHJ1Y3RvciguLi5hcmdzKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0ge1xuXHRcdFx0cXVldWU6IG5ldyBRdWV1ZSgpLFxuXHRcdH07XG5cblx0XHRsZXQgdGltZSA9IDA7XG5cblx0XHRpZiAodHlwZW9mIGFyZ3MgIT09IFwib2JqZWN0XCIgfHwgYXJnc1swXSA9PT0gbnVsbCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInRoZSBhcmd1bWVudHMgbXVzdCBiZSBlaXRoZXIgaW50ZWdlciBvciBmdW5jdGlvbnNcIik7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBbLCBhcmddIG9mIE9iamVjdC5lbnRyaWVzKGFyZ3MpKSB7XG5cdFx0XHRpZiAoaXNJbnRlZ2VyKGFyZykgJiYgYXJnID49IDApIHtcblx0XHRcdFx0dGltZSA9IGFyZztcblx0XHRcdH0gZWxzZSBpZiAoaXNGdW5jdGlvbihhcmcpKSB7XG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLnF1ZXVlLmFkZChuZXcgQ2FsbGJhY2soYXJnLCB0aW1lKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFxuXHRcdFx0XHRcdFwidGhlIGFyZ3VtZW50cyBtdXN0IGJlIGVpdGhlciBpbnRlZ2VyIG9yIGZ1bmN0aW9uc1wiLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgZnVuY3Rpb24gd2l0aCB0aGUgZGVzaXJlZCB0aW1lb3V0XG5cdCAqIElmIG5vIHRpbWVvdXQgaXMgc3BlY2lmaWVkLCB0aGUgdGltZW91dCBvZiB0aGUgcHJldmlvdXMgZnVuY3Rpb24gaXMgdXNlZC5cblx0ICpcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcblx0ICogQHBhcmFtIHtpbnR8dW5kZWZpbmVkfSB0aW1lXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgZnVuY3Rpb25cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW50ZWdlclxuXHQgKi9cblx0YWRkKGNhbGxiYWNrLCB0aW1lKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ucXVldWUuYWRkKG5ldyBDYWxsYmFjayhjYWxsYmFjaywgdGltZSkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSBkZWZpbmVkIGZ1bmN0aW9ucyBpbiBvcmRlci5cblx0ICpcblx0ICogQHBhcmFtIHsqfSBkYXRhXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRydW4oZGF0YSkge1xuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXS5xdWV1ZS5pc0VtcHR5KCkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZGF0YSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY2FsbGJhY2sgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5xdWV1ZS5wb2xsKCk7XG5cblx0XHRpZiAoY2FsbGJhY2sgPT09IG51bGwgfHwgY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShkYXRhKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY2FsbGJhY2sucnVuKGRhdGEpLnRoZW4oKHJlc3VsdCkgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMucnVuKHJlc3VsdCk7XG5cdFx0fSk7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBBVFRSSUJVVEVfUFJFRklYIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbi8qKlxuICogQHNpbmNlIDEuMC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0sgPSBcImJsb2NrXCI7XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci11cmxgIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBVUkwgdG8gdGhlIGNvbnRyb2wuXG4gKlxuICogQHNpbmNlIDEuMC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfRk9STV9VUkwgPSBgJHtBVFRSSUJVVEVfUFJFRklYfXVybGA7XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1yZWxvYWRgIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHJlbG9hZC5cbiAqXG4gKiB2YWxpZCB2YWx1ZXM6IG9uc2hvd1xuICpcbiAqIEBzaW5jZSAxLjExLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9GT1JNX1JFTE9BRCA9IGAke0FUVFJJQlVURV9QUkVGSVh9cmVsb2FkYDtcblxuLyoqXG4gKiBgZGF0YS1tb25zdGVyLWludGVuZGBcbiAqXG4gKiBAc2luY2UgMS45LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9WSVNJQklMSVRZID0gYCR7QVRUUklCVVRFX1BSRUZJWH12aXNpYmlsaXR5YDtcbi8qKlxuICogYGRhdGEtbW9uc3Rlci1pbnRlbmRgXG4gKlxuICogQHNpbmNlIDEuOS4wXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSAzLjMyLjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9CVVRUT05fQ0xBU1MgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWJ1dHRvbi1jbGFzc2A7XG5cbi8qKlxuICogYGRhdGEtbW9uc3Rlci1pbnRlbmRgXG4gKlxuICogQHNpbmNlIDEuOC4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfSU5URU5EID0gYCR7QVRUUklCVVRFX1BSRUZJWH1pbnRlbmRgO1xuXG4vKipcbiAqIGBkYXRhLW1vbnN0ZXItaGFzLWNoaWxkcmVuYFxuICpcbiAqIEBzaW5jZSAxLjguMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0hBU19DSElMRFJFTiA9IGAke0FUVFJJQlVURV9QUkVGSVh9aGFzLWNoaWxkcmVuYDtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLWRhdGFzb3VyY2VgIGNhbiBiZSB1c2VkIHRvIHBhc3MgYSBkYXRhc291cmNlLlxuICpcbiAqIEBzaW5jZSAxLjYuMFxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0ZPUk1fREFUQVNPVVJDRSA9IGAke0FUVFJJQlVURV9QUkVGSVh9ZGF0YXNvdXJjZWA7XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1kYXRhc291cmNlLWFyZ3VtZW50c2AgY2FuIGJlIHVzZWQgdG8gcGFzcyBhcmd1bWVudHMuXG4gKlxuICogQHNpbmNlIDEuNi4wXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFX0FSR1VNRU5UUyA9IGAke0FUVFJJQlVURV9QUkVGSVh9ZGF0YXNvdXJjZS1hcmd1bWVudHNgO1xuXG4vKipcbiAqIFRoaXMgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItYnV0dG9uLWxhYmVsYCBjYW4gYmUgdXNlZCB0byBwYXNzIGxhYmVscy5cbiAqXG4gKiBAc2luY2UgMS42LjBcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEFUVFJJQlVURV9CVVRUT05fTEFCRUwgPSBgJHtBVFRSSUJVVEVfUFJFRklYfWJ1dHRvbi1sYWJlbGA7XG5cbmV4cG9ydCB7XG5cdEFUVFJJQlVURV9CVVRUT05fTEFCRUwsXG5cdFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyxcblx0QVRUUklCVVRFX0ZPUk1fVVJMLFxuXHRBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFLFxuXHRBVFRSSUJVVEVfRk9STV9EQVRBU09VUkNFX0FSR1VNRU5UUyxcblx0QVRUUklCVVRFX0lOVEVORCxcblx0QVRUUklCVVRFX1ZJU0lCSUxJVFksXG5cdEFUVFJJQlVURV9GT1JNX1JFTE9BRCxcblx0QVRUUklCVVRFX0hBU19DSElMRFJFTixcblx0QVRUUklCVVRFX0JVVFRPTl9DTEFTUyxcbn07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgVGFic1N0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFRhYnNTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0VGFic1N0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgdGFicyB7IFxuOmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFxcXCJRdWlja3NhbmRcXFwiLFxcXCJTZWdvZSBVSVxcXCIsXFxcIlJvYm90b1xcXCIsXFxcIk94eWdlblxcXCIsXFxcIlVidW50dVxcXCIsXFxcIkNhbnRhcmVsbFxcXCIsXFxcIkZpcmEgU2Fuc1xcXCIsXFxcIkRyb2lkIFNhbnNcXFwiLFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsQXJpYWwsc2Fucy1zZXJpZixcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCI7LS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZTpcXFwiQ29uc29sYXNcXFwiLFxcXCJDb3VyaWVyIE5ld1xcXCIsXFxcIlJvYm90byBNb25vXFxcIixcXFwiU291cmNlIENvZGUgUHJvXFxcIixcXFwiRmlyYSBNb25vXFxcIixtb25vc3BhY2U7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi02KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTYpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTIpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xOiM4MzNhYjQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTI6I2ZkMWQxZDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMzojZmNiMDQ1Oy0tbW9uc3Rlci1ib3gtc2hhZG93LTE6bm9uZTstLW1vbnN0ZXItYm94LXNoYWRvdy0yOi0xcHggMXB4IDEwcHggMXB4IGhzbGEoMCwwJSw3NiUsLjYxKTstLW1vbnN0ZXItdGV4dC1zaGFkb3c6bm9uZTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTIpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aDoycHg7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci1ib3JkZXItd2lkdGg6M3B4Oy0tbW9uc3Rlci1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlOi00cHg7LS1tb25zdGVyLXotaW5kZXgtZGVmYXVsdDowOy0tbW9uc3Rlci16LWluZGV4LW91dGxpbmU6MTA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd246MjAwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duLW92ZXJsYXk6MjEwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreTozMDA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5LW92ZXJsYXk6MzEwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkOjQwMDstLW1vbnN0ZXItei1pbmRleC1maXhlZC1vdmVybGF5OjQxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcDo1MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3Atb3ZlcmxheTo1MTA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzOjYwMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMtb3ZlcmxheTo2MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWw6NzAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXk6NzEwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXI6ODAwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXItb3ZlcmxheTo4MTA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcDo4MDA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcC1vdmVybGF5OjkxMDstLW1vbnN0ZXItc3BhY2UtMDowOy0tbW9uc3Rlci1zcGFjZS0xOjJweDstLW1vbnN0ZXItc3BhY2UtMjo0cHg7LS1tb25zdGVyLXNwYWNlLTM6NnB4Oy0tbW9uc3Rlci1zcGFjZS00OjEwcHg7LS1tb25zdGVyLXNwYWNlLTU6MTZweDstLW1vbnN0ZXItc3BhY2UtNjoyNnB4Oy0tbW9uc3Rlci1zcGFjZS03OjQycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC00OjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTc6NzY4cHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtOTo5OTJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0xMjoxMjAwcHg7LS1tb25zdGVyLWRyYWdnZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS13aWR0aDo0cHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLWhlaWdodDo1MHB4fS5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLXRoZW1lLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMSl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0xe2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci1jb2xvci1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTIpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMntjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0zKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTN7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLWNvbG9yLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLXRoZW1lLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci1ib3JkZXItY29sb3ItNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItNCl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC00e2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci1jb2xvci1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1jb250YWluZXItMSwubW9uc3Rlci10aGVtZS1jb250cm9sLXJvdy0xe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1jb250YWluZXItMSwubW9uc3Rlci10aGVtZS1jb250cm9sLWVsZW1lbnQsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1yb3ctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3IpfS5tb25zdGVyLXRoZW1lLWJhY2tncm91bmQtaW5oZXJpdHtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQhaW1wb3J0YW50fS5tb25zdGVyLXRoZW1lLW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtb2Zme2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXXtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5Om5vbmU7cGFkZGluZzoxLjFlbTt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1tb2RhbCl9W2RhdGEtcG9wcGVyLWFycm93XSxbZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtiYWNrZ3JvdW5kOmluaGVyaXQ7aGVpZ2h0OmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSp2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xKnZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKX1bZGF0YS1wb3BwZXItYXJyb3dde3Zpc2liaWxpdHk6aGlkZGVufVtkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb250ZW50OlxcXCJcXFwiO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO3Zpc2liaWxpdHk6dmlzaWJsZX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj10b3BdPltkYXRhLXBvcHBlci1hcnJvd117Ym90dG9tOmNhbGModmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkvMil9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49dG9wXT5bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3JkZXItYm90dG9tOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1sZWZ0OnRyYW5zcGFyZW50O2JvcmRlci1yaWdodDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItdG9wOnRyYW5zcGFyZW50fWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePWJvdHRvbV0+W2RhdGEtcG9wcGVyLWFycm93XXt0b3A6Y2FsYyh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSl9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49Ym90dG9tXT5bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3JkZXItYm90dG9tOnRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yaWdodDp0cmFuc3BhcmVudDtib3JkZXItdG9wOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePWxlZnRdPltkYXRhLXBvcHBlci1hcnJvd117cmlnaHQ6Y2FsYyh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSl9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49bGVmdF0+W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp0cmFuc3BhcmVudDtib3JkZXItbGVmdDp0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXRvcDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1yaWdodF0+W2RhdGEtcG9wcGVyLWFycm93XXtsZWZ0OmNhbGModmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkvMil9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49cmlnaHRdPltkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JvcmRlci1ib3R0b206dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWxlZnQ6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJpZ2h0OnRyYW5zcGFyZW50O2JvcmRlci10b3A6dHJhbnNwYXJlbnR9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja30ubW9uc3Rlci1iYWRnZS1wcmltYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5LC5tb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXNlY29uZGFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LC5tb25zdGVyLWJhZGdlLXNlY29uZGFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LC5tb25zdGVyLWJhZGdlLXRlcnRpYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUsLm1vbnN0ZXItYmFkZ2UtZGVzdHJ1Y3RpdmUtcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3N7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MsLm1vbnN0ZXItYmFkZ2Utc3VjY2Vzcy1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1zdWNjZXNzLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZ3twYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utd2FybmluZywubW9uc3Rlci1iYWRnZS13YXJuaW5nLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXdhcm5pbmctcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS1lcnJvcntwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtZXJyb3IsLm1vbnN0ZXItYmFkZ2UtZXJyb3ItcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1lcnJvci1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbi5oaWRkZW57ZGlzcGxheTpub25lfW5hdltkYXRhLW1vbnN0ZXItcm9sZT1uYXZde2FsaWduLWl0ZW1zOmZsZXgtZW5kO2JvcmRlci1ib3R0b20tc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci1ib3R0b20td2lkdGg6dGhpbjtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO21hcmdpbi1ib3R0b206Ljc1cmVtO292ZXJmbG93OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b24gLnJlbW92ZS10YWJ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtaW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO2JhY2tncm91bmQtcG9zaXRpb246MTAwJSAxMDAlO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6MTZweDtmbGV4LXdyYXA6bm93cmFwO2hlaWdodDoxNnB4O21pbi1oZWlnaHQ6MTZweDtvcmRlcjoyO3dpZHRoOjE2cHh9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uIHNwYW57ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjQ7d2hpdGUtc3BhY2U6cHJlfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbnthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tc2VsZjpzdHJldGNoO2JvcmRlcjpub25lO2JvcmRlci1ib3R0b206dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7bWFyZ2luLXJpZ2h0Oi43NXJlbTtvdXRsaW5lOm5vbmU7cGFkZGluZzouMzc1cmVtIDA7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dHJhbnNpdGlvbjpjb2xvciAuOHM7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b246bm90KFtkaXNhYmxlZF0pOmhvdmVye2JvcmRlci1ib3R0b20tc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1zdGF0ZT1hY3RpdmVdLFtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXTpub3QoW2Rpc2FibGVkXSk6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O2JvcmRlci1ib3R0b20tc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSkhaW1wb3J0YW50fUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1zdGF0ZT1hY3RpdmVdLFtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXTpub3QoW2Rpc2FibGVkXSk6aG92ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpIWltcG9ydGFudH19W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uW2Rpc2FibGVkXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSk7Y3Vyc29yOm5vdC1hbGxvd2VkfVtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItcm9sZT1zd2l0Y2hde2FsaWduLXNlbGY6Y2VudGVyO2JvcmRlcjowO29yZGVyOjI7dG91Y2gtYWN0aW9uOm5vbmV9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1yb2xlPXN3aXRjaF06bm90KFtkaXNhYmxlZF0pOmhvdmVye2JvcmRlci1ib3R0b20td2lkdGg6MH1bZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBidXR0b24gaW1ne2hlaWdodDoxLjNyZW07bWFyZ2luLWxlZnQ6LjRyZW07d2lkdGg6MS4zcmVtfTo6c2xvdHRlZCg6bm90KFtzbG90XSk6bm90KC5hY3RpdmUpKXtkaXNwbGF5Om5vbmV9OjpzbG90dGVkKCope2FsaWduLXNlbGY6Y2VudGVyfTo6c2xvdHRlZChbc2xvdF0pe2JvcmRlci1ib3R0b20tc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci1ib3R0b20td2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpfTo6c2xvdHRlZChbc2xvdD1zdGFydF0pe21hcmdpbi1yaWdodDouNzVyZW07b3JkZXI6MH06OnNsb3R0ZWQoW3Nsb3Q9ZW5kXSl7bWFyZ2luLWxlZnQ6Ljc1cmVtO29yZGVyOjN9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gW2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlci1uYXZdIGJ1dHRvbjpub3QoW2Rpc2FibGVkXSl7Ym9yZGVyOjA7anVzdGlmeS1jb250ZW50OmxlZnQ7cGFkZGluZy1sZWZ0OjE1cHg7cGFkZGluZy1yaWdodDoxNXB4O3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gW2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlci1uYXZdIGJ1dHRvbjpob3ZlcixbZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyLW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1zdGF0ZT1hY3RpdmVdLFtkYXRhLW1vbnN0ZXItcm9sZT1uYXZdIFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItbmF2XSBidXR0b25bZGF0YS1tb25zdGVyLXN0YXRlPWFjdGl2ZV06bm90KFtkaXNhYmxlZF0pOmhvdmVye2JvcmRlcjowfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7W2RhdGEtbW9uc3Rlci1yb2xlPW5hdl0gW2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlci1uYXZdIGJ1dHRvbltkYXRhLW1vbnN0ZXItc3RhdGU9YWN0aXZlXSxbZGF0YS1tb25zdGVyLXJvbGU9bmF2XSBbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyLW5hdl0gYnV0dG9uW2RhdGEtbW9uc3Rlci1zdGF0ZT1hY3RpdmVdOm5vdChbZGlzYWJsZWRdKTpob3Zlcntjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KSFpbXBvcnRhbnR9fSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IGZpcmVDdXN0b21FdmVudCB9IGZyb20gXCIuLi8uLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmZ1bmN0aW9uIGZpbmRTaGFkb3dSb290KGVsZW1lbnQpIHtcblx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTaGFkb3dSb290KSByZXR1cm4gZWxlbWVudDtcblx0aWYgKCFlbGVtZW50LnBhcmVudE5vZGUpIHJldHVybiBudWxsO1xuXHRyZXR1cm4gZmluZFNoYWRvd1Jvb3QoZWxlbWVudC5wYXJlbnROb2RlKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIGZldGNoIG9wdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBmaWx0ZXIgZmV0Y2ggb3B0aW9uc1xuICogQHJldHVybiB7UHJvbWlzZTxPYmplY3Q+fVxuICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuICogQHRocm93cyB7RXJyb3J9IGNsaWVudCBlcnJvclxuICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2ZcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGxvYWRBbmRBc3NpZ25Db250ZW50KGVsZW1lbnQsIHVybCwgb3B0aW9ucywgZmlsdGVyKSB7XG5cdHJldHVybiBsb2FkQ29udGVudCh1cmwsIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG5cdFx0bGV0IGNvbnRlbnQgPSByZXNwb25zZS5jb250ZW50O1xuXG5cdFx0aWYgKGlzU3RyaW5nKGZpbHRlcikgJiYgZmlsdGVyICE9PSBcIlwiKSB7XG5cdFx0XHRjb25zdCB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdGNvbnN0IGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0Yy5pbm5lckhUTUwgPSBjb250ZW50O1xuXHRcdFx0Zm9yIChjb25zdCBbLCBub2RlXSBvZiBjLnF1ZXJ5U2VsZWN0b3JBbGwoZmlsdGVyKS5lbnRyaWVzKCkpIHtcblx0XHRcdFx0dC5hcHBlbmRDaGlsZChub2RlKTtcblx0XHRcdH1cblxuXHRcdFx0Y29udGVudCA9IHQuaW5uZXJIVE1MO1xuXHRcdH1cblxuXHRcdGNvbnN0IHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdHQuaW5uZXJIVE1MID0gY29udGVudDtcblxuXHRcdGNvbnN0IHNjcmlwdHMgPSB0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzY3JpcHRcIik7XG5cdFx0Zm9yIChjb25zdCBbLCBzY3JpcHRdIG9mIHNjcmlwdHMuZW50cmllcygpKSB7XG5cdFx0XHRjb25zdCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcblx0XHRcdHMuaW5uZXJIVE1MID0gc2NyaXB0LmlubmVySFRNTDtcblx0XHRcdGlmIChzY3JpcHQuc3JjKSBzLnNyYyA9IHNjcmlwdC5zcmM7XG5cdFx0XHRpZiAoc2NyaXB0LnR5cGUpIHMudHlwZSA9IHNjcmlwdC50eXBlO1xuXHRcdFx0aWYgKHNjcmlwdC5hc3luYykgcy5hc3luYyA9IHNjcmlwdC5hc3luYztcblx0XHRcdGlmIChzY3JpcHQuZGVmZXIpIHMuZGVmZXIgPSBzY3JpcHQuZGVmZXI7XG5cdFx0XHRpZiAoc2NyaXB0LmNyb3NzT3JpZ2luKSBzLmNyb3NzT3JpZ2luID0gc2NyaXB0LmNyb3NzT3JpZ2luO1xuXHRcdFx0aWYgKHNjcmlwdC5pbnRlZ3JpdHkpIHMuaW50ZWdyaXR5ID0gc2NyaXB0LmludGVncml0eTtcblx0XHRcdGlmIChzY3JpcHQucmVmZXJyZXJQb2xpY3kpIHMucmVmZXJyZXJQb2xpY3kgPSBzY3JpcHQucmVmZXJyZXJQb2xpY3k7XG5cdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHMpO1xuXHRcdFx0dC5yZW1vdmVDaGlsZChzY3JpcHQpO1xuXHRcdH1cblxuXHRcdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgSFRNTEVsZW1lbnQpLmlubmVySFRNTCA9IHQuaW5uZXJIVE1MO1xuXG5cdFx0Y29uc3Qgcm9vdCA9IGZpbmRTaGFkb3dSb290KGVsZW1lbnQpO1xuXHRcdGlmIChyb290ICE9PSBudWxsKSB7XG5cdFx0XHRlbGVtZW50ID0gcm9vdC5ob3N0O1xuXHRcdH1cblxuXHRcdGZpcmVDdXN0b21FdmVudChlbGVtZW50LCBcIm1vbnN0ZXItZmV0Y2hlZFwiLCB7XG5cdFx0XHR1cmwsXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcmVzcG9uc2U7XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgZmV0Y2ggb3B0aW9uc1xuICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fVxuICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuICogQHRocm93cyB7RXJyb3J9IGNsaWVudCBlcnJvclxuICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gbG9hZENvbnRlbnQodXJsLCBvcHRpb25zKSB7XG5cdGlmICh1cmwgaW5zdGFuY2VvZiBVUkwpIHtcblx0XHR1cmwgPSB1cmwudG9TdHJpbmcoKTtcblx0fVxuXG5cdHJldHVybiBmZXRjaCh2YWxpZGF0ZVN0cmluZyh1cmwpLCBvcHRpb25zKS50aGVuKChyZXNwb25zZSkgPT4ge1xuXHRcdC8vIFRoZSBvayByZWFkLW9ubHkgcHJvcGVydHkgb2YgdGhlIFJlc3BvbnNlIGludGVyZmFjZSBjb250YWlucyBhXG5cdFx0Ly8gQm9vbGVhbiBzdGF0aW5nIHdoZXRoZXIgdGhlIHJlc3BvbnNlIHdhcyBzdWNjZXNzZnVsIChzdGF0dXMgaW4gdGhlIHJhbmdlIDIwMC0yOTkpIG9yIG5vdC5cblx0XHRpZiAocmVzcG9uc2U/Lm9rICE9PSB0cnVlKSB7XG5cdFx0XHQvLyBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9SZXNwb25zZS90eXBlXG5cdFx0XHRpZiAoXG5cdFx0XHRcdFtcImVycm9yXCIsIFwib3BhcXVlXCIsIFwib3BhcXVlcmVkaXJlY3RcIl0uaW5kZXhPZihyZXNwb25zZT8udHlwZSkgIT09IC0xXG5cdFx0XHQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdGB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGEgKCR7cmVzcG9uc2U/LnR5cGV9KWAsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHN0YXR1c0NsYXNzID0gYCR7cmVzcG9uc2U/LnN0YXR1c31gLnN1YnN0cmluZygwLCAxKTtcblx0XHRcdHN3aXRjaCAoc3RhdHVzQ2xhc3MpIHtcblx0XHRcdFx0Y2FzZSBcIjRcIjpcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGNsaWVudCBlcnJvciAke3Jlc3BvbnNlPy5zdGF0dXNUZXh0fWApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRcdGB1bmRlZmluZWQgc3RhdHVzICgke3Jlc3BvbnNlPy5zdGF0dXN9IC8gJHtyZXNwb25zZT8uc3RhdHVzVGV4dH0pIG9yIHR5cGUgKCR7cmVzcG9uc2U/LnR5cGV9KWAsXG5cdFx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0cmVzcG9uc2Vcblx0XHRcdFx0LnRleHQoKVxuXHRcdFx0XHQudGhlbigoY29udGVudCkgPT4ge1xuXHRcdFx0XHRcdHJlc29sdmUoe1xuXHRcdFx0XHRcdFx0Y29udGVudCxcblx0XHRcdFx0XHRcdHR5cGU6IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1UeXBlXCIpLFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2gocmVqZWN0KTtcblx0XHR9KTtcblx0fSk7XG59XG5cbmV4cG9ydCB7IGxvYWRBbmRBc3NpZ25Db250ZW50LCBsb2FkQ29udGVudCB9O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFRoZW1lU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgVGhlbWVTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0VGhlbWVTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHRoZW1lIHsgXG4ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLXRoZW1lLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMSl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0xe2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci1jb2xvci1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTIpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMntjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0zKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTN7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLWNvbG9yLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLXRoZW1lLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci1ib3JkZXItY29sb3ItNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItNCl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC00e2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci1jb2xvci1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1jb250YWluZXItMSwubW9uc3Rlci10aGVtZS1jb250cm9sLXJvdy0xe2JvcmRlcjoxcHggc29saWQgdmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1jb250YWluZXItMSwubW9uc3Rlci10aGVtZS1jb250cm9sLWVsZW1lbnQsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1yb3ctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWJhY2tncm91bmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3IpfS5tb25zdGVyLXRoZW1lLWJhY2tncm91bmQtaW5oZXJpdHtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXQhaW1wb3J0YW50fS5tb25zdGVyLXRoZW1lLW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtb2Zme2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yKX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uLy4uLy4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlQm9vbGVhbiB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgc2V0RXZlbnRMaXN0ZW5lcnNNb2RpZmllcnMsIHBvcHBlckluc3RhbmNlU3ltYm9sIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckluc3RhbmNlU3ltYm9sID0gU3ltYm9sKFwicG9wcGVySW5zdGFuY2VcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aGlzIHtDdXN0b21FbGVtZW50fVxuICogQHBhcmFtIHtCb29sZWFufSBtb2RlXG4gKi9cbmZ1bmN0aW9uIHNldEV2ZW50TGlzdGVuZXJzTW9kaWZpZXJzKG1vZGUpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IGV4dGVuZCh7fSwgdGhpcy5nZXRPcHRpb24oXCJwb3BwZXJcIikpO1xuXHRjb25zdCBtb2RpZmllcnMgPSBvcHRpb25zPy5bXCJtb2RpZmllcnNcIl07XG5cblx0aWYgKCFpc0FycmF5KG1vZGlmaWVycykpIHtcblx0XHRvcHRpb25zW1wibW9kaWZpZXJzXCJdID0gW107XG5cdH1cblxuXHRpZiAoXG5cdFx0b3B0aW9uc1tcIm1vZGlmaWVyc1wiXS5maWx0ZXIoKGVudHJ5KSA9PiB7XG5cdFx0XHRpZiAoZW50cnk/LltcIm5hbWVcIl0gPT09IFwiZXZlbnRMaXN0ZW5lcnNcIikge1xuXHRcdFx0XHQvLyBwZXJmb3JtYW5jZSBodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi90dXRvcmlhbC8jcGVyZm9ybWFuY2Vcblx0XHRcdFx0ZW50cnlbXCJlbmFibGVkXCJdID0gdmFsaWRhdGVCb29sZWFuKG1vZGUpO1xuXHRcdFx0fVxuXHRcdH0pLmxlbmd0aCA9PT0gMFxuXHQpIHtcblx0XHRvcHRpb25zW1wibW9kaWZpZXJzXCJdLnB1c2goe1xuXHRcdFx0bmFtZTogXCJldmVudExpc3RlbmVyc1wiLFxuXHRcdFx0ZW5hYmxlZDogdmFsaWRhdGVCb29sZWFuKG1vZGUpLFxuXHRcdH0pO1xuXHR9XG5cblx0dGhpc1twb3BwZXJJbnN0YW5jZVN5bWJvbF0uc2V0T3B0aW9ucyhvcHRpb25zKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQb3BwZXIgfSBmcm9tIFwiQHBvcHBlcmpzL2NvcmVcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHtcblx0YWRkQXR0cmlidXRlVG9rZW4sXG5cdGFkZFRvT2JqZWN0TGluayxcblx0aGFzT2JqZWN0TGluayxcbn0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1BSRUZJWCxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdGdldFNsb3R0ZWRFbGVtZW50cyxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQge1xuXHRmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCxcblx0ZmlyZUN1c3RvbUV2ZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50LCBnZXRXaW5kb3cgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyByYW5kb20gfSBmcm9tIFwiLi4vLi4vbWF0aC9yYW5kb20ubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWwgfSBmcm9tIFwiLi4vLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgSUQgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5LCBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IFRva2VuTGlzdCB9IGZyb20gXCIuLi8uLi90eXBlcy90b2tlbmxpc3QubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi8uLi91dGlsL2Nsb25lLm1qc1wiO1xuaW1wb3J0IHsgRGVhZE1hbnNTd2l0Y2ggfSBmcm9tIFwiLi4vLi4vdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcbmltcG9ydCB7IFByb2Nlc3NpbmcgfSBmcm9tIFwiLi4vLi4vdXRpbC9wcm9jZXNzaW5nLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0JVVFRPTl9MQUJFTCxcblx0QVRUUklCVVRFX0ZPUk1fUkVMT0FELFxuXHRBVFRSSUJVVEVfRk9STV9VUkwsXG5cdFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSyxcbn0gZnJvbSBcIi4uL2Zvcm0vY29uc3RhbnRzLm1qc1wiO1xuXG5pbXBvcnQgeyBUYWJzU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvdGFicy5tanNcIjtcbmltcG9ydCB7IGxvYWRBbmRBc3NpZ25Db250ZW50IH0gZnJvbSBcIi4uL2Zvcm0vdXRpbC9mZXRjaC5tanNcIjtcbmltcG9ydCB7IFRoZW1lU3R5bGVTaGVldCB9IGZyb20gXCIuLi9zdHlsZXNoZWV0L3RoZW1lLm1qc1wiO1xuaW1wb3J0IHtcblx0cG9wcGVySW5zdGFuY2VTeW1ib2wsXG5cdHNldEV2ZW50TGlzdGVuZXJzTW9kaWZpZXJzLFxufSBmcm9tIFwiLi4vZm9ybS91dGlsL3BvcHBlci5tanNcIjtcblxuZXhwb3J0IHsgVGFicyB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyTmF2RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInBvcHBlck5hdkVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG5hdkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJuYXZFbGVtZW50XCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3dpdGNoRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInN3aXRjaEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNoYW5nZVRhYkV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNoYW5nZVRhYkV2ZW50SGFuZGxlclwiKTtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHJlbW92ZVRhYkV2ZW50SGFuZGxlciA9IFN5bWJvbChcInJlbW92ZVRhYkV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyU3dpdGNoRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwicG9wcGVyU3dpdGNoRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNsb3NlRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2xvc2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG11dGF0aW9uT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJtdXRhdGlvbk9ic2VydmVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkaW1lbnNpb25zU3ltYm9sID0gU3ltYm9sKFwiZGltZW5zaW9uc1wiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJDYWxsYmFja1N5bWJvbCA9IFN5bWJvbChcInRpbWVyQ2FsbGJhY2tcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVzaXplT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJyZXNpemVPYnNlcnZlclwiKTtcblxuLyoqXG4gKiBBIFRhYnMgQ29udHJvbFxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2xheW91dC90YWJzL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2xheW91dC90YWJzLXNpbXBsZSBTaW1wbGUgVGFic1xuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbGF5b3V0L3RhYnMtYWN0aXZlIEFjdGl2ZSBUYWJzXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9sYXlvdXQvdGFicy1yZW1vdmFibGUgUmVtb3ZhYmxlIFRhYnNcbiAqXG4gKiBAaXNzdWUgaHR0cHM6Ly9sb2NhbGhvc3QuYWx2aW5lLmRldjo4NDQzL2RldmVsb3BtZW50L2lzc3Vlcy9jbG9zZWQvMjY4Lmh0bWxcbiAqIEBpc3N1ZSBodHRwczovL2xvY2FsaG9zdC5hbHZpbmUuZGV2Ojg0NDMvZGV2ZWxvcG1lbnQvaXNzdWVzL2Nsb3NlZC8yNzEuaHRtbFxuICogQGlzc3VlIGh0dHBzOi8vbG9jYWxob3N0LmFsdmluZS5kZXY6ODQ0My9kZXZlbG9wbWVudC9pc3N1ZXMvY2xvc2VkLzI3My5odG1sXG4gKlxuICogQHNpbmNlIDMuNzQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoaXMgQ3VzdG9tQ29udHJvbCBjcmVhdGVzIGEgdGFiIGVsZW1lbnQgd2l0aCBhIHZhcmlldHkgb2Ygb3B0aW9ucy5cbiAqL1xuY2xhc3MgVGFicyBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9sYXlvdXQvdGFic1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGxhYmVsc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLm5ldy10YWItbGFiZWw9XCJOZXcgVGFiXCJcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzXG5cdCAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBmZWF0dXJlcy5vcGVuRGVsYXk9NTAwIE9wZW4gZGVsYXkgaW4gbWlsbGlzZWNvbmRzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmZWF0dXJlcy5yZW1vdmVCZWhhdmlvcj1cImF1dG9cIiBSZW1vdmUgYmVoYXZpb3IsIGF1dG8gKGRlZmF1bHQpLCBuZXh0LCBwcmV2aW91cyBhbmQgbm9uZVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLm9wZW5GaXJzdD10cnVlIE9wZW4gdGhlIGZpcnN0IHRhYlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2ggRmV0Y2ggW3NlZSBVc2luZyBGZXRjaCBtb3ppbGxhLm9yZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZldGNoX0FQSS9Vc2luZ19GZXRjaClcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLnJlZGlyZWN0PWVycm9yXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tb2RlPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jcmVkZW50aWFscz1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2guaGVhZGVycz17XCJhY2NlcHRcIjpcInRleHQvaHRtbFwifX1cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHBvcHBlciBbUG9wcGVySlMgT3B0aW9uc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcG9wcGVyLnBsYWNlbWVudD1ib3R0b20gUG9wcGVySlMgcGxhY2VtZW50XG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0W119IG1vZGlmaWVycz17bmFtZTpvZmZzZXR9IFBvcHBlckpTIHBsYWNlbWVudFxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0bGFiZWxzOiB7XG5cdFx0XHRcdFwibmV3LXRhYi1sYWJlbFwiOiBcIk5ldyBUYWJcIixcblx0XHRcdH0sXG5cdFx0XHRidXR0b25zOiB7XG5cdFx0XHRcdHN0YW5kYXJkOiBbXSxcblx0XHRcdFx0cG9wcGVyOiBbXSxcblx0XHRcdH0sXG5cdFx0XHRmZXRjaDoge1xuXHRcdFx0XHRyZWRpcmVjdDogXCJlcnJvclwiLFxuXHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdG1vZGU6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0Y3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRcdGFjY2VwdDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cblx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdG9wZW5EZWxheTogbnVsbCxcblx0XHRcdFx0cmVtb3ZlQmVoYXZpb3I6IFwiYXV0b1wiLFxuXHRcdFx0XHRvcGVuRmlyc3Q6IHRydWUsXG5cdFx0XHR9LFxuXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGJ1dHRvbjogXCJtb25zdGVyLXRoZW1lLXByaW1hcnktMVwiLFxuXHRcdFx0XHRwb3BwZXI6IFwibW9uc3Rlci10aGVtZS1wcmltYXJ5LTFcIixcblx0XHRcdFx0bmF2aWdhdGlvbjogXCJtb25zdGVyLXRoZW1lLXByaW1hcnktMVwiLFxuXHRcdFx0fSxcblxuXHRcdFx0cG9wcGVyOiB7XG5cdFx0XHRcdHBsYWNlbWVudDogXCJib3R0b21cIixcblx0XHRcdFx0bW9kaWZpZXJzOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0bmFtZTogXCJvZmZzZXRcIixcblx0XHRcdFx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0XHRcdFx0b2Zmc2V0OiBbMCwgMl0sXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImV2ZW50TGlzdGVuZXJzXCIsXG5cdFx0XHRcdFx0XHRlbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblxuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXG5cdFx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXSA9IG5ldyBQYXRoZmluZGVyKHsgZGF0YToge30gfSk7XG5cblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cblx0XHQvLyBzZXR1cCBzdHJ1Y3R1cmVcblx0XHRpbml0VGFiQnV0dG9ucy5jYWxsKHRoaXMpLnRoZW4oKCkgPT4ge1xuXHRcdFx0aW5pdFBvcHBlclN3aXRjaC5jYWxsKHRoaXMpO1xuXHRcdFx0aW5pdFBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdFx0YXR0YWNoUmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0XHRcdGF0dGFjaFRhYkNoYW5nZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtUYWJzU3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGludGVybmFsIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLXRhYnNcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGZ1bmN0aW9uIHRoYXQgYWN0aXZhdGVzIGEgdGFiIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBuYW1lLlxuXHQgKlxuXHQgKiBUaGUgdGFicyBoYXZlIHRvIGJlIG5hbWVkIHdpdGggdGhlIGBkYXRhLW1vbnN0ZXItbmFtZWAgYXR0cmlidXRlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3R5cGV9IGlkT3JOYW1lIC0gdGhlIG5hbWUgb3IgaWQgb2YgdGhlIHRhYiB0byBhY3RpdmF0ZVxuXHQgKiBAcmV0dXJuIHtUYWJzfSAtIFRoZSBjdXJyZW50IGluc3RhbmNlXG5cdCAqL1xuXHRhY3RpdmVUYWIoaWRPck5hbWUpIHtcblx0XHRsZXQgZm91bmQgPSBmYWxzZTtcblxuXHRcdGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMpLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRcdGlmIChmb3VuZCA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChub2RlLmdldEF0dHJpYnV0ZShcImRhdGEtbW9uc3Rlci1uYW1lXCIpID09PSBpZE9yTmFtZSkge1xuXHRcdFx0XHR0aGlzLnNoYWRvd1Jvb3Rcblx0XHRcdFx0XHQucXVlcnlTZWxlY3Rvcihcblx0XHRcdFx0XHRcdGBbZGF0YS1tb25zdGVyLXRhYi1yZWZlcmVuY2U9XCIke25vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIil9XCJdYCxcblx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0LmNsaWNrKCk7XG5cdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIikgPT09IGlkT3JOYW1lKSB7XG5cdFx0XHRcdHRoaXMuc2hhZG93Um9vdFxuXHRcdFx0XHRcdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0XHRcdFx0YFtkYXRhLW1vbnN0ZXItdGFiLXJlZmVyZW5jZT1cIiR7bm9kZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKX1cIl1gLFxuXHRcdFx0XHRcdClcblx0XHRcdFx0XHQuY2xpY2soKTtcblx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG5hbWUgb3IgaWQgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgdGFiLlxuXHQgKlxuXHQgKiBUaGUgdGFicyBoYXZlIHRvIGJlIG5hbWVkIHdpdGggdGhlIGBkYXRhLW1vbnN0ZXItbmFtZWAgYXR0cmlidXRlLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd8bnVsbH1cblx0ICovXG5cdGdldEFjdGl2ZVRhYigpIHtcblx0XHRjb25zdCBub2RlcyA9IGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMpO1xuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuXHRcdFx0aWYgKG5vZGUubWF0Y2hlcyhcIi5hY3RpdmVcIikgPT09IHRydWUpIHtcblx0XHRcdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLW5hbWVcIikpIHtcblx0XHRcdFx0XHRyZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItbmFtZVwiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGRvbSBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGRvbSBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIHRoaXNbY2xvc2VFdmVudEhhbmRsZXJdKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0UG9wcGVyU3dpdGNoKCkge1xuXHRjb25zdCBub2RlcyA9IGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIGBbJHtBVFRSSUJVVEVfUk9MRX09XCJzd2l0Y2hcIl1gKTsgLy8gbnVsbCBcdTIxQTYgb25seSB1bm5hbWVkIHNsb3RzXG5cdGxldCBzd2l0Y2hCdXR0b247XG5cdGlmIChub2Rlcy5zaXplID09PSAwKSB7XG5cdFx0c3dpdGNoQnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtcblx0XHRzd2l0Y2hCdXR0b24uc2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFLCBcInN3aXRjaFwiKTtcblx0XHRzd2l0Y2hCdXR0b24uc2V0QXR0cmlidXRlKFwicGFydFwiLCBcInN3aXRjaFwiKTtcblx0XHRzd2l0Y2hCdXR0b24uY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcblx0XHRjb25zdCBjbGFzc0xpc3QgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuYnV0dG9uXCIpO1xuXHRcdGlmIChjbGFzc0xpc3QpIHtcblx0XHRcdHN3aXRjaEJ1dHRvbi5jbGFzc0xpc3QuYWRkKGNsYXNzTGlzdCk7XG5cdFx0fVxuXHRcdHN3aXRjaEJ1dHRvbi5pbm5lckhUTUwgPVxuXHRcdFx0JzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+PHBhdGggZD1cIk05LjUgMTNhMS41IDEuNSAwIDEgMS0zIDAgMS41IDEuNSAwIDAgMSAzIDB6bTAtNWExLjUgMS41IDAgMSAxLTMgMCAxLjUgMS41IDAgMCAxIDMgMHptMC01YTEuNSAxLjUgMCAxIDEtMyAwIDEuNSAxLjUgMCAwIDEgMyAwelwiLz48L3N2Zz4nO1xuXHRcdHRoaXNbbmF2RWxlbWVudFN5bWJvbF0ucHJlcGVuZChzd2l0Y2hCdXR0b24pO1xuXHR9IGVsc2Uge1xuXHRcdHN3aXRjaEJ1dHRvbiA9IG5vZGVzLm5leHQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1twb3BwZXJTd2l0Y2hFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KGV2ZW50LCBBVFRSSUJVVEVfUk9MRSwgXCJzd2l0Y2hcIik7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSB7XG5cdFx0XHR0b2dnbGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0XHR9XG5cdH07XG5cblx0Zm9yIChjb25zdCB0eXBlIG9mIFtcImNsaWNrXCIsIFwidG91Y2hcIl0pIHtcblx0XHRzd2l0Y2hCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW3BvcHBlclN3aXRjaEV2ZW50SGFuZGxlcl0pO1xuXHR9XG5cblx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXSA9IHN3aXRjaEJ1dHRvbjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBoaWRlUG9wcGVyKCkge1xuXHRpZiAoIXRoaXNbcG9wcGVySW5zdGFuY2VTeW1ib2xdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdC8vIHBlcmZvcm1hbmNlIGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL3R1dG9yaWFsLyNwZXJmb3JtYW5jZVxuXHRzZXRFdmVudExpc3RlbmVyc01vZGlmaWVycy5jYWxsKHRoaXMsIGZhbHNlKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzaG93UG9wcGVyKCkge1xuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0s7XG5cdC8vIHBlcmZvcm1hbmNlIGh0dHBzOi8vcG9wcGVyLmpzLm9yZy9kb2NzL3YyL3R1dG9yaWFsLyNwZXJmb3JtYW5jZVxuXHRzZXRFdmVudExpc3RlbmVyc01vZGlmaWVycy5jYWxsKHRoaXMsIHRydWUpO1xuXG5cdHRoaXNbcG9wcGVySW5zdGFuY2VTeW1ib2xdLnVwZGF0ZSgpO1xuXG5cdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwidmlzaWJpbGl0eVwiKTtcblx0fSlcblx0XHQucnVuKHVuZGVmaW5lZClcblx0XHQudGhlbigoKSA9PiB7fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlUG9wcGVyKCkge1xuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRoaWRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdH0gZWxzZSB7XG5cdFx0c2hvd1BvcHBlci5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoUmVzaXplT2JzZXJ2ZXIoKSB7XG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4ge1xuXHRcdGlmICh0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0udG91Y2goKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdID0gbmV3IERlYWRNYW5zU3dpdGNoKDIwMCwgKCkgPT4ge1xuXHRcdFx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXCJkYXRhLmNhbGN1bGF0ZWRcIiwgZmFsc2UpO1xuXHRcdFx0Y2hlY2tBbmRSZWFycmFuZ2VCdXR0b25zLmNhbGwodGhpcyk7XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUodGhpc1tuYXZFbGVtZW50U3ltYm9sXSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoVGFiQ2hhbmdlT2JzZXJ2ZXIoKSB7XG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHRuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XG5cdFx0bGV0IHJ1blVwZGF0ZSA9IGZhbHNlO1xuXG5cdFx0Zm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnMpIHtcblx0XHRcdGlmIChtdXRhdGlvbi50eXBlID09PSBcImNoaWxkTGlzdFwiKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRtdXRhdGlvbi5hZGRlZE5vZGVzLmxlbmd0aCA+IDAgfHxcblx0XHRcdFx0XHRtdXRhdGlvbi5yZW1vdmVkTm9kZXMubGVuZ3RoID4gMFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRydW5VcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJ1blVwZGF0ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0dGhpc1tkaW1lbnNpb25zU3ltYm9sXS5zZXRWaWEoXCJkYXRhLmNhbGN1bGF0ZWRcIiwgZmFsc2UpO1xuXHRcdFx0aW5pdFRhYkJ1dHRvbnMuY2FsbCh0aGlzKTtcblx0XHR9XG5cdH0pLm9ic2VydmUodGhpcywge1xuXHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEBleHRlcm5hbCBcImV4dGVybmFsOmNyZWF0ZVBvcHBlclwiXG4gKi9cbmZ1bmN0aW9uIGluaXRQb3BwZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGNvbnN0IG9wdGlvbnMgPSBleHRlbmQoe30sIHNlbGYuZ2V0T3B0aW9uKFwicG9wcGVyXCIpKTtcblxuXHRzZWxmW3BvcHBlckluc3RhbmNlU3ltYm9sXSA9IGNyZWF0ZVBvcHBlcihcblx0XHRzZWxmW3N3aXRjaEVsZW1lbnRTeW1ib2xdLFxuXHRcdHNlbGZbcG9wcGVyRWxlbWVudFN5bWJvbF0sXG5cdFx0b3B0aW9ucyxcblx0KTtcblxuXHRjb25zdCBvYnNlcnZlcjEgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zKSB7XG5cdFx0bGV0IHJ1blVwZGF0ZSA9IGZhbHNlO1xuXHRcdGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB7XG5cdFx0XHRpZiAobXV0YXRpb24udHlwZSA9PT0gXCJjaGlsZExpc3RcIikge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0bXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGggPiAwIHx8XG5cdFx0XHRcdFx0bXV0YXRpb24ucmVtb3ZlZE5vZGVzLmxlbmd0aCA+IDBcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cnVuVXBkYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChydW5VcGRhdGUgPT09IHRydWUpIHtcblx0XHRcdHNlbGZbcG9wcGVySW5zdGFuY2VTeW1ib2xdLnVwZGF0ZSgpO1xuXHRcdH1cblx0fSk7XG5cblx0b2JzZXJ2ZXIxLm9ic2VydmUoc2VsZltwb3BwZXJOYXZFbGVtZW50U3ltYm9sXSwge1xuXHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRzdWJ0cmVlOiB0cnVlLFxuXHR9KTtcblxuXHRyZXR1cm4gc2VsZjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICovXG5mdW5jdGlvbiBzaG93KGVsZW1lbnQpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0Y29uc3QgcmVmZXJlbmNlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoYCR7QVRUUklCVVRFX1BSRUZJWH10YWItcmVmZXJlbmNlYCk7XG5cblx0Y29uc3Qgbm9kZXMgPSBnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzKTtcblx0Zm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG5cdFx0Y29uc3QgaWQgPSBub2RlLmdldEF0dHJpYnV0ZShcImlkXCIpO1xuXG5cdFx0aWYgKGlkID09PSByZWZlcmVuY2UpIHtcblx0XHRcdG5vZGUuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcblxuXHRcdFx0Y29uc3Qgb3BlbkRlbGF5ID0gcGFyc2VJbnQodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5vcGVuRGVsYXlcIiksIDEwKTtcblxuXHRcdFx0aWYgKCFpc05hTihvcGVuRGVsYXkpICYmIG9wZW5EZWxheSA+IDApIHtcblx0XHRcdFx0bm9kZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcblxuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRub2RlLnN0eWxlLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcblx0XHRcdFx0fSwgb3BlbkRlbGF5KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gZ2V0IGFsbCBkYXRhLSBmcm9tIGJ1dHRvbiBhbmQgZmlsdGVyIG91dCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcyBhbmQgZGF0YS1tb25zdGVyLWluc2VydFxuXHRcdFx0Y29uc3QgZGF0YSA9IHt9O1xuXHRcdFx0Y29uc3QgbWFzayA9IFtcblx0XHRcdFx0XCJkYXRhLW1vbnN0ZXItYXR0cmlidXRlc1wiLFxuXHRcdFx0XHRcImRhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlXCIsXG5cdFx0XHRcdFwiZGF0YS1tb25zdGVyLXN0YXRlXCIsXG5cdFx0XHRcdFwiZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbFwiLFxuXHRcdFx0XHRcImRhdGEtbW9uc3Rlci1vYmplY3RsaW5rXCIsXG5cdFx0XHRcdFwiZGF0YS1tb25zdGVyLXJvbGVcIixcblx0XHRcdF07XG5cblx0XHRcdGZvciAoY29uc3QgWywgYXR0cl0gb2YgT2JqZWN0LmVudHJpZXMobm9kZS5hdHRyaWJ1dGVzKSkge1xuXHRcdFx0XHRpZiAoYXR0ci5uYW1lLnN0YXJ0c1dpdGgoXCJkYXRhLVwiKSAmJiBtYXNrLmluZGV4T2YoYXR0ci5uYW1lKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRkYXRhW2F0dHIubmFtZV0gPSBhdHRyLnZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwpKSB7XG5cdFx0XHRcdGNvbnN0IHVybCA9IG5vZGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCFub2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9SRUxPQUQpIHx8XG5cdFx0XHRcdFx0bm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKS50b0xvd2VyQ2FzZSgpID09PSBcIm9uc2hvd1wiXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdG5vZGUucmVtb3ZlQXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJmZXRjaFwiLCB7fSk7XG5cdFx0XHRcdGNvbnN0IGZpbHRlciA9IHVuZGVmaW5lZDtcblx0XHRcdFx0bG9hZEFuZEFzc2lnbkNvbnRlbnQobm9kZSwgdXJsLCBvcHRpb25zLCBmaWx0ZXIpXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci10YWItY2hhbmdlZFwiLCB7XG5cdFx0XHRcdFx0XHRcdHJlZmVyZW5jZSxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci10YWItY2hhbmdlZFwiLCB7XG5cdFx0XHRcdFx0cmVmZXJlbmNlLFxuXHRcdFx0XHRcdGRhdGEsXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRub2RlLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3Qgc3RhbmRhcmRCdXR0b25zID0gdGhpcy5nZXRPcHRpb24oXCJidXR0b25zLnN0YW5kYXJkXCIpO1xuXHRmb3IgKGNvbnN0IGluZGV4IGluIHN0YW5kYXJkQnV0dG9ucykge1xuXHRcdGNvbnN0IGJ1dHRvbiA9IHN0YW5kYXJkQnV0dG9uc1tpbmRleF07XG5cdFx0Y29uc3Qgc3RhdGUgPSBidXR0b25bXCJyZWZlcmVuY2VcIl0gPT09IHJlZmVyZW5jZSA/IFwiYWN0aXZlXCIgOiBcImluYWN0aXZlXCI7XG5cdFx0dGhpcy5zZXRPcHRpb24oYGJ1dHRvbnMuc3RhbmRhcmQuJHtpbmRleH0uc3RhdGVgLCBzdGF0ZSk7XG5cdH1cblxuXHRjb25zdCBwb3BwZXJCdXR0b24gPSB0aGlzLmdldE9wdGlvbihcImJ1dHRvbnMucG9wcGVyXCIpO1xuXHRmb3IgKGNvbnN0IGluZGV4IGluIHBvcHBlckJ1dHRvbikge1xuXHRcdGNvbnN0IGJ1dHRvbiA9IHBvcHBlckJ1dHRvbltpbmRleF07XG5cdFx0Y29uc3Qgc3RhdGUgPSBidXR0b25bXCJyZWZlcmVuY2VcIl0gPT09IHJlZmVyZW5jZSA/IFwiYWN0aXZlXCIgOiBcImluYWN0aXZlXCI7XG5cdFx0dGhpcy5zZXRPcHRpb24oYGJ1dHRvbnMucG9wcGVyLiR7aW5kZXh9LnN0YXRlYCwgc3RhdGUpO1xuXHR9XG5cblx0aGlkZVBvcHBlci5jYWxsKHRoaXMpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKiBAZmlyZXMgbW9uc3Rlci10YWItcmVtb3ZlXG5cdCAqL1xuXHR0aGlzW3JlbW92ZVRhYkV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XCJyZW1vdmUtdGFiXCIsXG5cdFx0KTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGNvbnN0IGJ1dHRvbiA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0XHRldmVudCxcblx0XHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcdFwiYnV0dG9uXCIsXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoYnV0dG9uIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQgJiYgYnV0dG9uLmRpc2FibGVkICE9PSB0cnVlKSB7XG5cdFx0XHRcdGNvbnN0IHJlZmVyZW5jZSA9IGJ1dHRvbi5nZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdFx0YCR7QVRUUklCVVRFX1BSRUZJWH10YWItcmVmZXJlbmNlYCxcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRsZXQgZG9DaGFuZ2UgPSBmYWxzZTtcblx0XHRcdFx0bGV0IG5leHROYW1lID0gbnVsbDtcblx0XHRcdFx0bGV0IHByZXZpb3VzTmFtZSA9IG51bGw7XG5cblx0XHRcdFx0Y29uc3QgYnRuID0gdGhpcy5nZXRPcHRpb24oXCJidXR0b25zXCIpO1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGJ0bi5zdGFuZGFyZC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGlmIChidG4uc3RhbmRhcmRbaV0ucmVmZXJlbmNlID09PSByZWZlcmVuY2UpIHtcblx0XHRcdFx0XHRcdGlmIChidG4uc3RhbmRhcmRbaV0uc3RhdGUgPT09IFwiYWN0aXZlXCIpIHtcblx0XHRcdFx0XHRcdFx0ZG9DaGFuZ2UgPSBpO1xuXHRcdFx0XHRcdFx0XHRpZiAoaSA8IGJ0bi5zdGFuZGFyZC5sZW5ndGggLSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0bmV4dE5hbWUgPSBidG4uc3RhbmRhcmRbaSArIDFdPy5yZWZlcmVuY2U7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYgKGkgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJldmlvdXNOYW1lID0gYnRuLnN0YW5kYXJkW2kgLSAxXT8ucmVmZXJlbmNlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocmVmZXJlbmNlKSB7XG5cdFx0XHRcdFx0Y29uc3QgY29udGFpbmVyID0gdGhpcy5xdWVyeVNlbGVjdG9yKGBbaWQ9JHtyZWZlcmVuY2V9XWApO1xuXHRcdFx0XHRcdGlmIChjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0aWYgKGRvQ2hhbmdlKSB7XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5yZW1vdmVCZWhhdmlvclwiKSkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJhdXRvXCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAobmV4dE5hbWUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2VsZi5hY3RpdmVUYWIobmV4dE5hbWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKHByZXZpb3VzTmFtZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNlbGYuYWN0aXZlVGFiKHByZXZpb3VzTmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJuZXh0XCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAobmV4dE5hbWUgIT09IG51bGwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2VsZi5hY3RpdmVUYWIobmV4dE5hbWUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcInByZXZpb3VzXCI6XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocHJldmlvdXNOYW1lICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNlbGYuYWN0aXZlVGFiKHByZXZpb3VzTmFtZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6IC8vIGFuZCBcIm5vbmVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29udGFpbmVyLnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0aW5pdFRhYkJ1dHRvbnMuY2FsbCh0aGlzKTtcblx0XHRcdFx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItdGFiLXJlbW92ZVwiLCB7XG5cdFx0XHRcdFx0XHRcdHJlZmVyZW5jZSxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbY2hhbmdlVGFiRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChldmVudCwgQVRUUklCVVRFX1JPTEUsIFwiYnV0dG9uXCIpO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiBlbGVtZW50LmRpc2FibGVkICE9PSB0cnVlKSB7XG5cdFx0XHRzaG93LmNhbGwodGhpcywgZWxlbWVudCk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHBhdGgpKSB7XG5cdFx0XHRpZiAoZWxlbWVudCA9PT0gdGhpcykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aGlkZVBvcHBlci5jYWxsKHRoaXMpO1xuXHR9O1xuXG5cdC8vIHRoZSBvcmRlciBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlIHJlbW92ZSBtdXN0IGJlIGJlZm9yZSB0aGUgY2hhbmdlXG5cdHRoaXNbbmF2RWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoXCIsIHRoaXNbcmVtb3ZlVGFiRXZlbnRIYW5kbGVyXSk7XG5cdHRoaXNbbmF2RWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXNbcmVtb3ZlVGFiRXZlbnRIYW5kbGVyXSk7XG5cblx0dGhpc1tuYXZFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hcIiwgdGhpc1tjaGFuZ2VUYWJFdmVudEhhbmRsZXJdKTtcblx0dGhpc1tuYXZFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpc1tjaGFuZ2VUYWJFdmVudEhhbmRsZXJdKTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG9ic2VydmVkTm9kZVxuICovXG5mdW5jdGlvbiBhdHRhY2hUYWJNdXRhdGlvbk9ic2VydmVyKG9ic2VydmVkTm9kZSkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRpZiAoaGFzT2JqZWN0TGluayhvYnNlcnZlZE5vZGUsIG11dGF0aW9uT2JzZXJ2ZXJTeW1ib2wpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0LyoqXG5cdCAqIHRoaXMgY29uc3RydWN0IG1vbml0b3JzIGEgbm9kZSB3aGV0aGVyIGl0IGlzIGRpc2FibGVkIG9yIG1vZGlmaWVkXG5cdCAqIEB0eXBlIHtNdXRhdGlvbk9ic2VydmVyfVxuXHQgKi9cblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zKSB7XG5cdFx0aWYgKGlzQXJyYXkobXV0YXRpb25zKSkge1xuXHRcdFx0Y29uc3QgbXV0YXRpb24gPSBtdXRhdGlvbnMucG9wKCk7XG5cdFx0XHRpZiAobXV0YXRpb24gaW5zdGFuY2VvZiBNdXRhdGlvblJlY29yZCkge1xuXHRcdFx0XHRpbml0VGFiQnV0dG9ucy5jYWxsKHNlbGYpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0b2JzZXJ2ZXIub2JzZXJ2ZShvYnNlcnZlZE5vZGUsIHtcblx0XHRjaGlsZExpc3Q6IGZhbHNlLFxuXHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0c3VidHJlZTogZmFsc2UsXG5cdFx0YXR0cmlidXRlRmlsdGVyOiBbXG5cdFx0XHRcImRpc2FibGVkXCIsXG5cdFx0XHRBVFRSSUJVVEVfQlVUVE9OX0xBQkVMLFxuXHRcdFx0YCR7QVRUUklCVVRFX1BSRUZJWH1idXR0b24taWNvbmAsXG5cdFx0XSxcblx0fSk7XG5cblx0YWRkVG9PYmplY3RMaW5rKG9ic2VydmVkTm9kZSwgbXV0YXRpb25PYnNlcnZlclN5bWJvbCwgb2JzZXJ2ZXIpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb250cm9sXWAsXG5cdCk7XG5cdHRoaXNbbmF2RWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgbmF2WyR7QVRUUklCVVRFX1JPTEV9PW5hdl1gLFxuXHQpO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1wb3BwZXJdYCxcblx0KTtcblx0dGhpc1twb3BwZXJOYXZFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09cG9wcGVyLW5hdl1gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtQcm9taXNlPHVua25vd24+fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqXG4gKi9cbmZ1bmN0aW9uIGluaXRUYWJCdXR0b25zKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRsZXQgYWN0aXZlUmVmZXJlbmNlO1xuXG5cdGNvbnN0IGRpbWVuc2lvbnNDYWxjdWxhdGVkID0gdGhpc1tkaW1lbnNpb25zU3ltYm9sXS5nZXRWaWEoXG5cdFx0XCJkYXRhLmNhbGN1bGF0ZWRcIixcblx0XHRmYWxzZSxcblx0KTtcblxuXHRjb25zdCBidXR0b25zID0gW107XG5cdGNvbnN0IG5vZGVzID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcywgdW5kZWZpbmVkLCBudWxsKTsgLy8gbnVsbCBcdTIxQTYgb25seSB1bm5hbWVkIHNsb3RzXG5cblx0Zm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG5cdFx0aWYgKCEobm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkgY29udGludWU7XG5cdFx0bGV0IGxhYmVsID0gZ2V0QnV0dG9uTGFiZWwuY2FsbCh0aGlzLCBub2RlKTtcblxuXHRcdGxldCByZWZlcmVuY2U7XG5cdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKFwiaWRcIikpIHtcblx0XHRcdHJlZmVyZW5jZSA9IG5vZGUuZ2V0QXR0cmlidXRlKFwiaWRcIik7XG5cdFx0fVxuXG5cdFx0bGV0IGRpc2FibGVkO1xuXHRcdGlmIChub2RlLmhhc0F0dHJpYnV0ZShcImRpc2FibGVkXCIpIHx8IG5vZGUuZGlzYWJsZWQgPT09IHRydWUpIHtcblx0XHRcdGRpc2FibGVkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoIXJlZmVyZW5jZSkge1xuXHRcdFx0cmVmZXJlbmNlID0gbmV3IElEKFwidGFiXCIpLnRvU3RyaW5nKCk7XG5cdFx0XHRub2RlLnNldEF0dHJpYnV0ZShcImlkXCIsIHJlZmVyZW5jZSk7XG5cdFx0fVxuXG5cdFx0aWYgKG5vZGUuaGFzQXR0cmlidXRlKGAke0FUVFJJQlVURV9QUkVGSVh9YnV0dG9uLWljb25gKSkge1xuXHRcdFx0bGFiZWwgPSBgPHNwYW4gcGFydD1cImxhYmVsXCI+JHtsYWJlbH08L3NwYW4+PGltZyBwYXJ0PVwiaWNvblwiIGFsdD1cInRoaXMgaXMgYW4gaWNvblwiIHNyYz1cIiR7bm9kZS5nZXRBdHRyaWJ1dGUoXG5cdFx0XHRcdGAke0FUVFJJQlVURV9QUkVGSVh9YnV0dG9uLWljb25gLFxuXHRcdFx0KX1cIj5gO1xuXHRcdH1cblxuXHRcdGxldCByZW1vdmUgPSBmYWxzZTtcblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoYCR7QVRUUklCVVRFX1BSRUZJWH1yZW1vdmFibGVgKSkge1xuXHRcdFx0cmVtb3ZlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAobm9kZS5tYXRjaGVzKFwiLmFjdGl2ZVwiKSA9PT0gdHJ1ZSAmJiBkaXNhYmxlZCAhPT0gdHJ1ZSkge1xuXHRcdFx0bm9kZS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xuXHRcdFx0YWN0aXZlUmVmZXJlbmNlID0gcmVmZXJlbmNlO1xuXHRcdH1cblxuXHRcdGNvbnN0IHN0YXRlID0gXCJcIjtcblx0XHRjb25zdCBjbGFzc2VzID0gZGltZW5zaW9uc0NhbGN1bGF0ZWQgPyBcIlwiIDogXCJpbnZpc2libGVcIjtcblxuXHRcdGJ1dHRvbnMucHVzaCh7XG5cdFx0XHRyZWZlcmVuY2UsXG5cdFx0XHRsYWJlbCxcblx0XHRcdHN0YXRlLFxuXHRcdFx0Y2xhc3M6IGNsYXNzZXMsXG5cdFx0XHRkaXNhYmxlZCxcblx0XHRcdHJlbW92ZSxcblx0XHR9KTtcblxuXHRcdGF0dGFjaFRhYk11dGF0aW9uT2JzZXJ2ZXIuY2FsbCh0aGlzLCBub2RlKTtcblx0fVxuXG5cdHRoaXMuc2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiLCBjbG9uZShidXR0b25zKSk7XG5cdHRoaXMuc2V0T3B0aW9uKFwiYnV0dG9ucy5wb3BwZXJcIiwgW10pO1xuXHR0aGlzLnNldE9wdGlvbihcIm1hcmtlclwiLCByYW5kb20oKSk7XG5cblx0cmV0dXJuIGFkanVzdEJ1dHRvblZpc2liaWxpdHkuY2FsbCh0aGlzKS50aGVuKCgpID0+IHtcblx0XHRpZiAoIWFjdGl2ZVJlZmVyZW5jZSAmJiB0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLm9wZW5GaXJzdFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgZmlyc3RCdXR0b24gPSB0aGlzLmdldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIikuZmluZChcblx0XHRcdFx0KGJ1dHRvbikgPT4gYnV0dG9uLmRpc2FibGVkICE9PSB0cnVlLFxuXHRcdFx0KTtcblx0XHRcdGlmIChmaXJzdEJ1dHRvbikge1xuXHRcdFx0XHRhY3RpdmVSZWZlcmVuY2UgPSBmaXJzdEJ1dHRvbi5yZWZlcmVuY2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGFjdGl2ZVJlZmVyZW5jZSkge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRcdFx0Y29uc3QgYnV0dG9uID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XHRcdFx0YFske0FUVFJJQlVURV9QUkVGSVh9dGFiLXJlZmVyZW5jZT1cIiR7YWN0aXZlUmVmZXJlbmNlfVwiXWAsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGlmIChidXR0b24gaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiBidXR0b24uZGlzYWJsZWQgIT09IHRydWUpIHtcblx0XHRcdFx0XHRzaG93LmNhbGwodGhpcywgYnV0dG9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdFx0LnJ1bih1bmRlZmluZWQpXG5cdFx0XHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBjaGVja0FuZFJlYXJyYW5nZUJ1dHRvbnMoKSB7XG5cdGlmICh0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLmdldFZpYShcImRhdGEuY2FsY3VsYXRlZFwiLCBmYWxzZSkgIT09IHRydWUpIHtcblx0XHRjYWxjdWxhdGVOYXZpZ2F0aW9uQnV0dG9uc0RpbWVuc2lvbnMuY2FsbCh0aGlzKTtcblx0fVxuXG5cdHJlYXJyYW5nZUJ1dHRvbnMuY2FsbCh0aGlzKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZnVuY3Rpb24gYWRqdXN0QnV0dG9uVmlzaWJpbGl0eSgpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zKSB7XG5cdFx0XHRjb25zdCBkZWZDb3VudCA9IHNlbGYuZ2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiKS5sZW5ndGg7XG5cdFx0XHRjb25zdCBkb21Db3VudCA9IHNlbGZbbmF2RWxlbWVudFN5bWJvbF0ucXVlcnlTZWxlY3RvckFsbChcblx0XHRcdFx0J2J1dHRvbltkYXRhLW1vbnN0ZXItcm9sZT1cImJ1dHRvblwiXScsXG5cdFx0XHQpLmxlbmd0aDtcblxuXHRcdFx0Ly8gaW4gZHJhd2luZ1xuXHRcdFx0aWYgKGRlZkNvdW50ICE9PSBkb21Db3VudCkgcmV0dXJuO1xuXG5cdFx0XHRvYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cblx0XHRcdGNoZWNrQW5kUmVhcnJhbmdlQnV0dG9ucy5jYWxsKHNlbGYpO1xuXG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cblx0XHRvYnNlcnZlci5vYnNlcnZlKHNlbGZbbmF2RWxlbWVudFN5bWJvbF0sIHtcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0fSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0RGltVmFsdWUodmFsdWUpIHtcblx0aWYgKFt1bmRlZmluZWQsIG51bGxdLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Y29uc3QgdmFsdWVBc0ludCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG5cblx0aWYgKGlzTmFOKHZhbHVlQXNJbnQpKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRyZXR1cm4gdmFsdWVBc0ludDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBjYWxjQm94V2lkdGgobm9kZSkge1xuXHRjb25zdCBkaW0gPSBnZXRHbG9iYWwoXCJ3aW5kb3dcIikuZ2V0Q29tcHV0ZWRTdHlsZShub2RlKTtcblx0Y29uc3QgYm91bmRpbmcgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdHJldHVybiAoXG5cdFx0Z2V0RGltVmFsdWUoZGltW1wiYm9yZGVyLWxlZnQtd2lkdGhcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJwYWRkaW5nLWxlZnRcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJtYXJnaW4tbGVmdFwiXSkgK1xuXHRcdGdldERpbVZhbHVlKGJvdW5kaW5nW1wid2lkdGhcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJib3JkZXItcmlnaHQtd2lkdGhcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJtYXJnaW4tcmlnaHRcIl0pICtcblx0XHRnZXREaW1WYWx1ZShkaW1bXCJwYWRkaW5nLWxlZnRcIl0pXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gcmVhcnJhbmdlQnV0dG9ucygpIHtcblx0Z2V0V2luZG93KCkucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRjb25zdCBzdGFuZGFyZEJ1dHRvbnMgPSBbXTtcblx0XHRjb25zdCBwb3BwZXJCdXR0b25zID0gW107XG5cdFx0bGV0IHN1bSA9IDA7XG5cdFx0Y29uc3Qgc3BhY2UgPSB0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLmdldFZpYShcImRhdGEuc3BhY2VcIik7XG5cblx0XHRpZiAoc3BhY2UgPD0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGJ1dHRvbnMgPSB0aGlzLmdldE9wdGlvbihcImJ1dHRvbnMuc3RhbmRhcmRcIik7XG5cdFx0Zm9yIChjb25zdCBbLCBidXR0b25dIG9mIGJ1dHRvbnMuZW50cmllcygpKSB7XG5cdFx0XHRjb25zdCByZWYgPSBidXR0b24/LnJlZmVyZW5jZTtcblxuXHRcdFx0c3VtICs9IHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uZ2V0VmlhKGBkYXRhLmJ1dHRvbi4ke3JlZn1gKTtcblxuXHRcdFx0aWYgKHN1bSA+IHNwYWNlKSB7XG5cdFx0XHRcdHBvcHBlckJ1dHRvbnMucHVzaChjbG9uZShidXR0b24pKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN0YW5kYXJkQnV0dG9ucy5wdXNoKGNsb25lKGJ1dHRvbikpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuc2V0T3B0aW9uKFwiYnV0dG9ucy5zdGFuZGFyZFwiLCBzdGFuZGFyZEJ1dHRvbnMpO1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwiYnV0dG9ucy5wb3BwZXJcIiwgcG9wcGVyQnV0dG9ucyk7XG5cblx0XHRpZiAodGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXSkge1xuXHRcdFx0aWYgKHBvcHBlckJ1dHRvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBjYWxjdWxhdGVOYXZpZ2F0aW9uQnV0dG9uc0RpbWVuc2lvbnMoKSB7XG5cdGNvbnN0IHdpZHRoID0gdGhpc1tuYXZFbGVtZW50U3ltYm9sXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblxuXHRsZXQgc3RhcnRFbmRXaWR0aCA9IDA7XG5cblx0Z2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcywgdW5kZWZpbmVkLCBcInN0YXJ0XCIpLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRzdGFydEVuZFdpZHRoICs9IGNhbGNCb3hXaWR0aC5jYWxsKHRoaXMsIG5vZGUpO1xuXHR9KTtcblxuXHRnZXRTbG90dGVkRWxlbWVudHMuY2FsbCh0aGlzLCB1bmRlZmluZWQsIFwiZW5kXCIpLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRzdGFydEVuZFdpZHRoICs9IGNhbGNCb3hXaWR0aC5jYWxsKHRoaXMsIG5vZGUpO1xuXHR9KTtcblxuXHR0aGlzW2RpbWVuc2lvbnNTeW1ib2xdLnNldFZpYShcImRhdGEuc3BhY2VcIiwgd2lkdGggLSBzdGFydEVuZFdpZHRoIC0gMik7XG5cdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFwiZGF0YS52aXNpYmxlXCIsICEod2lkdGggPT09IDApKTtcblxuXHRjb25zdCBidXR0b25zID0gdGhpcy5nZXRPcHRpb24oXCJidXR0b25zLnN0YW5kYXJkXCIpLmNvbmNhdChcblx0XHR0aGlzLmdldE9wdGlvbihcImJ1dHRvbnMucG9wcGVyXCIpLFxuXHQpO1xuXG5cdGZvciAoY29uc3QgW2ksIGJ1dHRvbl0gb2YgYnV0dG9ucy5lbnRyaWVzKCkpIHtcblx0XHRjb25zdCByZWYgPSBidXR0b24/LnJlZmVyZW5jZTtcblx0XHRjb25zdCBlbGVtZW50ID0gdGhpc1tuYXZFbGVtZW50U3ltYm9sXS5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0YDpzY29wZSA+IFske0FUVFJJQlVURV9QUkVGSVh9dGFiLXJlZmVyZW5jZT1cIiR7cmVmfVwiXWAsXG5cdFx0KTtcblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpKSBjb250aW51ZTtcblxuXHRcdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFxuXHRcdFx0YGRhdGEuYnV0dG9uLiR7cmVmfWAsXG5cdFx0XHRjYWxjQm94V2lkdGguY2FsbCh0aGlzLCBlbGVtZW50KSxcblx0XHQpO1xuXHRcdGJ1dHRvbltcImNsYXNzXCJdID0gbmV3IFRva2VuTGlzdChidXR0b25bXCJjbGFzc1wiXSlcblx0XHRcdC5yZW1vdmUoXCJpbnZpc2libGVcIilcblx0XHRcdC50b1N0cmluZygpO1xuXHR9XG5cblx0Y29uc3Qgc2xvdHMgPSB0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXS5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdGBuYXZbJHtBVFRSSUJVVEVfUFJFRklYfXJvbGU9bmF2XSA+IHNsb3QuaW52aXNpYmxlLCBzbG90WyR7QVRUUklCVVRFX1BSRUZJWH1yb2xlPXNsb3RdLmludmlzaWJsZWAsXG5cdCk7XG5cdGZvciAoY29uc3QgWywgc2xvdF0gb2Ygc2xvdHMuZW50cmllcygpKSB7XG5cdFx0c2xvdC5jbGFzc0xpc3QucmVtb3ZlKFwiaW52aXNpYmxlXCIpO1xuXHR9XG5cblx0dGhpcy5zZXRPcHRpb24oXCJidXR0b25zLnN0YW5kYXJkXCIsIGNsb25lKGJ1dHRvbnMpKTtcblxuXHRnZXRXaW5kb3coKS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdHRoaXNbZGltZW5zaW9uc1N5bWJvbF0uc2V0VmlhKFwiZGF0YS5jYWxjdWxhdGVkXCIsIHRydWUpO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRCdXR0b25MYWJlbChub2RlKSB7XG5cdGxldCBsYWJlbDtcblx0bGV0IHNldExhYmVsID0gZmFsc2U7XG5cdGlmIChub2RlLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMKSkge1xuXHRcdGxhYmVsID0gbm9kZS5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0JVVFRPTl9MQUJFTCk7XG5cdH0gZWxzZSB7XG5cdFx0bGFiZWwgPSBub2RlLmlubmVyVGV4dDtcblx0XHRzZXRMYWJlbCA9IHRydWU7XG5cdH1cblxuXHRpZiAoIWlzU3RyaW5nKGxhYmVsKSkge1xuXHRcdGxhYmVsID0gXCJcIjtcblx0fVxuXG5cdGxhYmVsID0gbGFiZWwudHJpbSgpO1xuXG5cdGlmIChsYWJlbCA9PT0gXCJcIikge1xuXHRcdGxhYmVsID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMubmV3LXRhYi1sYWJlbFwiLCBcIk5ldyBUYWJcIik7XG5cdH1cblxuXHRpZiAobGFiZWwubGVuZ3RoID4gMTAwKSB7XG5cdFx0bGFiZWwgPSBgJHtsYWJlbC5zdWJzdHJpbmcoMCwgOTkpfVx1MjAyNmA7XG5cdH1cblxuXHRpZiAoc2V0TGFiZWwgPT09IHRydWUpIHtcblx0XHRub2RlLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfQlVUVE9OX0xBQkVMLCBsYWJlbCk7XG5cdH1cblxuXHRyZXR1cm4gbGFiZWw7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwiYnV0dG9uc1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiBwYXJ0PVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uLFxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItc3RhdGUgcGF0aDpidXR0b25zLnN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCBwYXRoOmJ1dHRvbnMuZGlzYWJsZWQgfCBpZjp0cnVlLCAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci10YWItcmVmZXJlbmNlIHBhdGg6YnV0dG9ucy5yZWZlcmVuY2VcIj48c3BhblxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6YnV0dG9ucy5sYWJlbFwiPjwvc3Bhbj48c3BhbiBwYXJ0PVwicmVtb3ZlLXRhYlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6YnV0dG9ucy5yZW1vdmUgfCA/OnJlbW92ZS10YWI6aGlkZGVuIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cInJlbW92ZS10YWJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPjwvc3Bhbj48L2J1dHRvbj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPG5hdiBkYXRhLW1vbnN0ZXItcm9sZT1cIm5hdlwiIHBhcnQ9XCJuYXZcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1tYXJrZXIgcGF0aDptYXJrZXIsIGNsYXNzIHBhdGg6Y2xhc3Nlcy5uYXZpZ2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWluc2VydD1cImJ1dHRvbnMgcGF0aDpidXR0b25zLnN0YW5kYXJkXCI+XG4gICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cInN0YXJ0XCIgY2xhc3M9XCJpbnZpc2libGVcIj48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjbGFzc2VzLnBvcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtcG9wcGVyLWFycm93PjwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwicG9wcGVyLW5hdlwiIGRhdGEtbW9uc3Rlci1yb2xlPVwicG9wcGVyLW5hdlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWluc2VydD1cImJ1dHRvbnMgcGF0aDpidXR0b25zLnBvcHBlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxzbG90IG5hbWU9XCJwb3BwZXJcIiBjbGFzcz1cImludmlzaWJsZVwiPjwvc2xvdD5cbiAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwiZW5kXCIgY2xhc3M9XCJpbnZpc2libGVcIj48L3Nsb3Q+XG4gICAgICAgICAgICA8L25hdj5cbiAgICAgICAgICAgIDxzbG90IGRhdGEtbW9uc3Rlci1yb2xlPVwic2xvdFwiIGNsYXNzPVwiaW52aXNpYmxlXCI+PC9zbG90PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoVGFicyk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgTWVzc2FnZVN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IE1lc3NhZ2VTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0TWVzc2FnZVN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgbWVzc2FnZSB7IFxuOndoZXJlKGh0bWwpe2xpbmUtaGVpZ2h0OjEuMTU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LW1vei10ZXh0LXNpemUtYWRqdXN0OjEwMCU7dGV4dC1zaXplLWFkanVzdDoxMDAlfTp3aGVyZShoMSl7Zm9udC1zaXplOjJlbTttYXJnaW4tYmxvY2stZW5kOi42N2VtO21hcmdpbi1ibG9jay1zdGFydDouNjdlbX06d2hlcmUoZGwsb2wsdWwpIDp3aGVyZShkbCxvbCx1bCl7bWFyZ2luLWJsb2NrLWVuZDowO21hcmdpbi1ibG9jay1zdGFydDowfTp3aGVyZShocil7Ym94LXNpemluZzpjb250ZW50LWJveDtjb2xvcjppbmhlcml0O2hlaWdodDowfTp3aGVyZShhYmJyW3RpdGxlXSl7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTstd2Via2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfTp3aGVyZShiLHN0cm9uZyl7Zm9udC13ZWlnaHQ6Ym9sZGVyfTp3aGVyZShjb2RlLGtiZCxwcmUsc2FtcCl7Zm9udC1mYW1pbHk6bW9ub3NwYWNlLG1vbm9zcGFjZTtmb250LXNpemU6MWVtfTp3aGVyZShzbWFsbCl7Zm9udC1zaXplOjgwJX06d2hlcmUodGFibGUpe2JvcmRlci1jb2xvcjpjdXJyZW50Q29sb3I7dGV4dC1pbmRlbnQ6MH06d2hlcmUoYnV0dG9uLGlucHV0LHNlbGVjdCl7bWFyZ2luOjB9OndoZXJlKGJ1dHRvbil7dGV4dC10cmFuc2Zvcm06bm9uZX06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9ufTp3aGVyZShwcm9ncmVzcyl7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9OndoZXJlKHNlbGVjdCl7dGV4dC10cmFuc2Zvcm06bm9uZX06d2hlcmUodGV4dGFyZWEpe21hcmdpbjowfTp3aGVyZShpbnB1dFt0eXBlPXNlYXJjaCBpXSl7LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDtvdXRsaW5lLW9mZnNldDotMnB4fTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiw6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99Ojotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVye2NvbG9yOmluaGVyaXQ7b3BhY2l0eTouNTR9Ojotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyLXN0eWxlOm5vbmU7cGFkZGluZzowfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzcmluZ3tvdXRsaW5lOjFweCBkb3R0ZWQgQnV0dG9uVGV4dH06d2hlcmUoOi1tb3otdWktaW52YWxpZCl7Ym94LXNoYWRvdzpub25lfTp3aGVyZShkaWFsb2cpe2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6c29saWQ7Y29sb3I6IzAwMDtoZWlnaHQ6LW1vei1maXQtY29udGVudDtoZWlnaHQ6Zml0LWNvbnRlbnQ7bGVmdDowO21hcmdpbjphdXRvO3BhZGRpbmc6MWVtO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7d2lkdGg6LW1vei1maXQtY29udGVudDt3aWR0aDpmaXQtY29udGVudH06d2hlcmUoZGlhbG9nOm5vdChbb3Blbl0pKXtkaXNwbGF5Om5vbmV9OndoZXJlKHN1bW1hcnkpe2Rpc3BsYXk6bGlzdC1pdGVtfWh0bWx7aGVpZ2h0OjEwMCV9Ym9keSxodG1se21pbi1oZWlnaHQ6Y2FsYygxMDB2aCAtIDQwcHgpfWJvZHl7Ym94LXNpemluZzpib3JkZXItYm94O21hcmdpbjowO3BhZGRpbmc6MDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmF5LTE6I2Y2ZjZmNjstLW1vbnN0ZXItY29sb3ItZ3JheS0yOiNlMmUyZTI7LS1tb25zdGVyLWNvbG9yLWdyYXktMzojOGI4YjhiOy0tbW9uc3Rlci1jb2xvci1ncmF5LTQ6IzZmNmY2ZjstLW1vbnN0ZXItY29sb3ItZ3JheS01OiMzZTNlM2U7LS1tb25zdGVyLWNvbG9yLWdyYXktNjojMjIyOy0tbW9uc3Rlci1jb2xvci1yb3NlLTE6I2ZmZjdmOTstLW1vbnN0ZXItY29sb3Itcm9zZS0yOiNmZmRjZTU7LS1tb25zdGVyLWNvbG9yLXJvc2UtMzojZmYzYjhkOy0tbW9uc3Rlci1jb2xvci1yb3NlLTQ6I2RiMDA3MjstLW1vbnN0ZXItY29sb3Itcm9zZS01OiM4MDAwNDA7LS1tb25zdGVyLWNvbG9yLXJvc2UtNjojNGMwMDIzOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMTojZmZmOGY4Oy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMjojZmZkZGRmOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMzojZmY0MjZjOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNDojZGUwMDUxOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNTojODIwMDJjOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNjojNTEwMDE4Oy0tbW9uc3Rlci1jb2xvci1yZWQtMTojZmZmOGY2Oy0tbW9uc3Rlci1jb2xvci1yZWQtMjojZmZkZGQ4Oy0tbW9uc3Rlci1jb2xvci1yZWQtMzojZmY0NjQ3Oy0tbW9uc3Rlci1jb2xvci1yZWQtNDojZTAwMDJiOy0tbW9uc3Rlci1jb2xvci1yZWQtNTojODMwMDE0Oy0tbW9uc3Rlci1jb2xvci1yZWQtNjojNTMwMDAzOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMTojZmZmOGY1Oy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMjojZmZkZWQxOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMzojZmQ0ZDAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNDojY2QzYzAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNTojNzUyMTAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNjojNDAxNjAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xOiNmZmY4ZjM7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTI6I2ZmZGZjNjstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMzojZDU3MzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi00OiNhYzVjMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTU6IzYzMzMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNjojMzcxZDAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci0xOiNmZmY4ZWY7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTI6I2ZmZTBiMjstLW1vbnN0ZXItY29sb3ItYW1iZXItMzojYjk4MzAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci00OiM5MjY3MDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTU6IzUyMzgwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNjojMzAyMTAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMTojZmZmOWU1Oy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMjojZmZlNTNlOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMzojOWM4YjAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNDojN2Q2ZjAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNTojNDYzZDAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNjojMjkyMzAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTE6I2Y3ZmZhYzstLW1vbnN0ZXItY29sb3ItbGltZS0yOiNkNWYyMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtMzojODE5MzAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTQ6IzY3NzYwMDstLW1vbnN0ZXItY29sb3ItbGltZS01OiMzOTQxMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNjojMjIyNjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTE6I2U1ZmZjMzstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0yOiM5OGZiMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMzojNWM5YjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTQ6IzQ5N2MwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS01OiMyNjQ1MDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNjojMTgyNjAwOy0tbW9uc3Rlci1jb2xvci1ncmVlbi0xOiNlMGZmZDk7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTI6IzcyZmY2YzstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMzojMDBhMjFmOy0tbW9uc3Rlci1jb2xvci1ncmVlbi00OiMwMDgyMTc7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTU6IzAwNDkwODstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNjojMDYyODAwOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTE6I2RjZmZlNjstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0yOiM1ZGZmYTI7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMzojMDBhMDVhOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTQ6IzAwODE0NzstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC01OiMwMDQ4MjU7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNjojMDAyODEyOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTE6I2RhZmZlZjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0yOiM0MmZmYzY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMzojMDA5Zjc4Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTQ6IzAwN2Y1ZjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS01OiMwMDQ3MzQ7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNjojMDAyODFiOy0tbW9uc3Rlci1jb2xvci10ZWFsLTE6I2Q3ZmZmNzstLW1vbnN0ZXItY29sb3ItdGVhbC0yOiMwMGZmZTQ7LS1tb25zdGVyLWNvbG9yLXRlYWwtMzojMDA5ZThjOy0tbW9uc3Rlci1jb2xvci10ZWFsLTQ6IzAwN2M2ZTstLW1vbnN0ZXItY29sb3ItdGVhbC01OiMwMDQ0M2M7LS1tb25zdGVyLWNvbG9yLXRlYWwtNjojMDAyNzIyOy0tbW9uc3Rlci1jb2xvci1jeWFuLTE6I2M0ZmZmZTstLW1vbnN0ZXItY29sb3ItY3lhbi0yOiMwMGZhZmI7LS1tb25zdGVyLWNvbG9yLWN5YW4tMzojMDA5OTlhOy0tbW9uc3Rlci1jb2xvci1jeWFuLTQ6IzAwN2E3YjstLW1vbnN0ZXItY29sb3ItY3lhbi01OiMwMDQzNDQ7LS1tb25zdGVyLWNvbG9yLWN5YW4tNjojMDAyNTI1Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMTojZGFmYWZmOy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMjojOGRmMGZmOy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMzojMDA5OGE5Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNDojMDA3OTg3Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNTojMDA0MDQ4Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNjojMDAyMjI3Oy0tbW9uc3Rlci1jb2xvci1za3ktMTojZTNmN2ZmOy0tbW9uc3Rlci1jb2xvci1za3ktMjojYWVlOWZmOy0tbW9uc3Rlci1jb2xvci1za3ktMzojMDA5NGI0Oy0tbW9uc3Rlci1jb2xvci1za3ktNDojMDA3NTkwOy0tbW9uc3Rlci1jb2xvci1za3ktNTojMDA0MDRmOy0tbW9uc3Rlci1jb2xvci1za3ktNjojMDAxZjI4Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0xOiNlOGY2ZmY7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTI6I2I5ZTNmZjstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMzojMDA5MmM1Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi00OiMwMDc0OWQ7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTU6IzAwM2M1NDstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNjojMDAxZDJhOy0tbW9uc3Rlci1jb2xvci1henVyZS0xOiNlOGYyZmY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTI6I2M2ZTBmZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtMzojMDA4ZmRiOy0tbW9uc3Rlci1jb2xvci1henVyZS00OiMwMDcxYWY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTU6IzAwM2I1ZTstLW1vbnN0ZXItY29sb3ItYXp1cmUtNjojMDAxYzMwOy0tbW9uc3Rlci1jb2xvci1ibHVlLTE6I2YwZjRmZjstLW1vbnN0ZXItY29sb3ItYmx1ZS0yOiNkNGUwZmY7LS1tb25zdGVyLWNvbG9yLWJsdWUtMzojMDA4OWZjOy0tbW9uc3Rlci1jb2xvci1ibHVlLTQ6IzAwNmRjYTstLW1vbnN0ZXItY29sb3ItYmx1ZS01OiMwMDM4NmQ7LS1tb25zdGVyLWNvbG9yLWJsdWUtNjojMDAxYTM5Oy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMTojZjNmM2ZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMjojZGVkZGZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMzojNjU3ZWZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNDojMDA2MWZjOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNTojMDAzMjhhOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNjojMDAxNjQ5Oy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMTojZjdmMWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMjojZThkYWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMzojOWI3MGZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNDojNzk0YWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNTojMmQwZmJmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNjojMGIwMDc0Oy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMTojZmRmNGZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMjojZjdkOWZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMzojZDE1MGZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNDojYjAxZmUzOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNTojNjYwMDg3Oy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNjojM2EwMDRmOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTE6I2ZmZjNmYzstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yOiNmZmQ3ZjY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMzojZjkxMWUwOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQ6I2NhMDBiNjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS01OiM3NDAwNjg7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNjojNDQwMDNjOy0tbW9uc3Rlci1jb2xvci1waW5rLTE6I2ZmZjdmYjstLW1vbnN0ZXItY29sb3ItcGluay0yOiNmZmRjZWM7LS1tb25zdGVyLWNvbG9yLXBpbmstMzojZmYyZmIyOy0tbW9uc3Rlci1jb2xvci1waW5rLTQ6I2QyMDA4ZjstLW1vbnN0ZXItY29sb3ItcGluay01OiM3OTAwNTE7LS1tb25zdGVyLWNvbG9yLXBpbmstNjojNGIwMDMwOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMTojZTViODc1Oy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMjojZDlhMzYyOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMzojYzA4YTRlOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNDojYTc3MTNiOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNTojOGY1YTI4Oy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNjojMzYwNTA1Oy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xOiNmN2Y1ZWY7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTI6I2U1ZTJkOTstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMzojY2JjNmIzOy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC00OiNhMTlkOGE7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTU6IzdhNzU2NjstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNjojNTE0ZDNmfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLWJvcmRlci1jb2xvci0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0xKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTF7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMSl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTEpfS5tb25zdGVyLWNvbG9yLWVycm9yLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMSl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMil9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLXRoZW1lLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMil9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ye2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTIpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMil9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0yKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTIpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTMpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci10aGVtZS1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTMpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtM3tjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTMpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMyl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0zKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00KX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLWJvcmRlci1jb2xvci00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci00KX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTR7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNCl9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00KX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQpfS5tb25zdGVyLWNvbG9yLWVycm9yLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItNCl9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00KX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtcm93LTF7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1jb250cm9sLWNvbnRhaW5lci0xLC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtZWxlbWVudCwubW9uc3Rlci10aGVtZS1jb250cm9sLXJvdy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3IpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmFja2dyb3VuZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtYmFja2dyb3VuZC1pbmhlcml0e2JhY2tncm91bmQtY29sb3I6aW5oZXJpdCFpbXBvcnRhbnR9Lm1vbnN0ZXItdGhlbWUtb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1vZmZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcik7Y29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3IpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfVtkYXRhLW1vbnN0ZXItcm9sZT1tZXNzYWdlXXthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtwYWRkaW5nOjhweDt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250ZW50XXtmbGV4LWdyb3c6MjtAbWl4aW5zIHBhcmFncmFwaH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWNsb3NlXXtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6MTZweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotMTBweDt0b3A6LTVweDt3aWR0aDoxNnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXkpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9Y2xvc2VdOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXI7bWFzay1wb3NpdGlvbjpjZW50ZXI7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvbnRhaW47bWFzay1zaXplOmNvbnRhaW47d2lkdGg6MTAwJX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0QVRUUklCVVRFX1BSRUZJWCxcblx0QVRUUklCVVRFX1JPTEUsXG59IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdGluaXRNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZVN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L21lc3NhZ2UubWpzXCI7XG5cbmV4cG9ydCB7IE1lc3NhZ2UgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVtb3ZlRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInJlbW92ZUVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRpbWVyU3ltYm9sID0gU3ltYm9sKFwidGltZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG1vdXNlZW50ZXJFdmVudEhhbmRsZXJTeW1ib2wgPSBTeW1ib2woXCJtb3VzZWVudGVyRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBtb3VzZWxlYXZlRXZlbnRIYW5kbGVyU3ltYm9sID0gU3ltYm9sKFwibW91c2VsZWF2ZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVtb3ZlRXZlbnRIYW5kbGVyU3ltYm9sID0gU3ltYm9sKFwicmVtb3ZlRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEEgTWVzc2FnZSBpcyBhIG5vdGlmaWNhdGlvbiBlbGVtZW50IHRoYXQgY2FuIGJlIHVzZWQgdG8gZGlzcGxheSBtZXNzYWdlcyB0byB0aGUgdXNlci5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9ub3RpZnkvbWVzc2FnZVxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL25vdGlmeS9tZXNzYWdlLXNpbXBsZSBNZXNzYWdlXG4gKlxuICogQGlzc3VlIGh0dHBzOi8vbG9jYWxob3N0LmFsdmluZS5kZXY6ODQ0My9kZXZlbG9wbWVudC9pc3N1ZXMvY2xvc2VkLzI2OS5odG1sXG4gKlxuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIG1lc3NhZ2UgaXMgYSBub3RpZmljYXRpb24gZWxlbWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgbWVzc2FnZXMgdG8gdGhlIHVzZXIuIFR5cGljYWxseSwgaXQgaXMgb25seSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIG5vdGlmeSBjb250YWluZXIuXG4gKi9cbmNsYXNzIE1lc3NhZ2UgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoZSBkZWZhdWx0cyBjYW4gYmUgc2V0IGVpdGhlciBkaXJlY3RseSBpbiB0aGUgb2JqZWN0IG9yIHZpYSBhbiBhdHRyaWJ1dGUgaW4gdGhlIEhUTUwgdGFnLlxuXHQgKiBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIGluIHRoZSBIVE1MIHRhZyBtdXN0IGJlIGEgSlNPTiBzdHJpbmcuXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiA8bW9uc3Rlci1tZXNzYWdlIGRhdGEtbW9uc3Rlci1vcHRpb25zPVwie31cIj48L21vbnN0ZXItbWVzc2FnZT5cblx0ICogYGBgXG5cdCAqXG5cdCAqIFNpbmNlIDEuMTguMCB0aGUgSlNPTiBjYW4gYmUgc3BlY2lmaWVkIGFzIGEgRGF0YVVSSS5cblx0ICpcblx0ICogYGBgXG5cdCAqIG5ldyBNb25zdGVyLlR5cGVzLkRhdGFVcmwoYnRvYShKU09OLnN0cmluZ2lmeSh7XG5cdCAqICAgICAgICB0aW1lb3V0OiAzMDAwLFxuXHQgKiAgICAgICAgZmVhdHVyZXM6IHtcblx0ICogICAgICAgICAgY2xvc2U6IHRydWUsXG5cdCAqICAgICAgICAgIGRpc2FwcGVhcjogdHJ1ZVxuXHQgKiAgICAgICAgfVxuXHQgKiAgICB9KSksJ2FwcGxpY2F0aW9uL2pzb24nLHRydWUpLnRvU3RyaW5nKClcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtudW1iZXJ9IHRpbWVvdXQgVGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRzIGFmdGVyIHdoaWNoIHRoZSBtZXNzYWdlIGRpc2FwcGVhcnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzIFRoZSBmZWF0dXJlcyBvZiB0aGUgbWVzc2FnZVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLmNsb3NlIFdoZXRoZXIgdGhlIG1lc3NhZ2UgY2FuIGJlIGNsb3NlZFxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLmRpc2FwcGVhciBXaGV0aGVyIHRoZSBtZXNzYWdlIGRpc2FwcGVhcnMgYWZ0ZXIgYSBjZXJ0YWluIHRpbWVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbnRlbnQgVGhlIGNvbnRlbnQgb2YgdGhlIG1lc3NhZ2Vcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRpbWVvdXQ6IDYwMDAsXG5cdFx0XHRmZWF0dXJlczoge1xuXHRcdFx0XHRjbG9zZTogdHJ1ZSxcblx0XHRcdFx0ZGlzYXBwZWFyOiB0cnVlLFxuXHRcdFx0fSxcblx0XHRcdGNvbnRlbnQ6IFwiPHNsb3Q+PC9zbG90PlwiLFxuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ob3RpZnkuTWVzc2FnZX1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1ub3RpZnktbWVzc2FnZVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbTWVzc2FnZVN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRbaW5pdE1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbaW5pdE1ldGhvZFN5bWJvbF0oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmRpc2FwcGVhclwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0c3RhcnRGYWRlb3V0LmNhbGwodGhpcyk7XG5cdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIHRoaXNbbW91c2VlbnRlckV2ZW50SGFuZGxlclN5bWJvbF0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHRzdG9wRmFkZW91dC5jYWxsKHRoaXMpO1xuXG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuZGlzYXBwZWFyXCIpID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXG5cdFx0XHRcdFwibW91c2VlbnRlclwiLFxuXHRcdFx0XHR0aGlzW21vdXNlZW50ZXJFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdFx0KTtcblx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XCJtb3VzZWVudGVyXCIsXG5cdFx0XHRcdHRoaXNbbW91c2VsZWF2ZUV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0RmFkZW91dCgpIHtcblx0aWYgKCF0aGlzPy5bdGltZXJTeW1ib2xdKSB7XG5cdFx0dGhpc1t0aW1lclN5bWJvbF0gPSBzZXRUaW1lb3V0KFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZW1vdmVTZWxmLmNhbGwodGhpcyk7XG5cdFx0XHR9LFxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJ0aW1lb3V0XCIsIDEwMDApLFxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlU2VsZigpIHtcblx0c3RvcEZhZGVvdXQoKTtcblx0dGhpcy5jbGFzc0xpc3QuYWRkKFwiZmFkZW91dFwiKTtcblxuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHR0aGlzLnJlbW92ZSgpO1xuXHR9LCAyMDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHN0b3BGYWRlb3V0KCkge1xuXHRpZiAodGhpcz8uW3RpbWVyU3ltYm9sXSkge1xuXHRcdGNsZWFyVGltZW91dCh0aGlzW3RpbWVyU3ltYm9sXSk7XG5cdFx0dGhpc1t0aW1lclN5bWJvbF0gPSB1bmRlZmluZWQ7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7TWVzc2FnZX1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltcIiArIEFUVFJJQlVURV9ST0xFICsgXCI9Y29udHJvbF1cIixcblx0KTtcblx0dGhpc1tyZW1vdmVFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW1wiICsgQVRUUklCVVRFX1JPTEUgKyBcIj1jbG9zZV1cIixcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbbW91c2VlbnRlckV2ZW50SGFuZGxlclN5bWJvbF0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XCJjb250cm9sXCIsXG5cdFx0KTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XCJtb3VzZWVudGVyXCIsXG5cdFx0XHRcdHRoaXNbbW91c2VlbnRlckV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLCB0aGlzW21vdXNlbGVhdmVFdmVudEhhbmRsZXJTeW1ib2xdKTtcblx0XHRcdHN0b3BGYWRlb3V0LmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1ttb3VzZWxlYXZlRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcImNvbnRyb2xcIixcblx0XHQpO1xuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XCJtb3VzZWxlYXZlXCIsXG5cdFx0XHRcdHRoaXNbbW91c2VsZWF2ZUV2ZW50SGFuZGxlclN5bWJvbF0sXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCB0aGlzW21vdXNlZW50ZXJFdmVudEhhbmRsZXJTeW1ib2xdKTtcblx0XHRcdHN0YXJ0RmFkZW91dC5jYWxsKHRoaXMpO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHRoaXNbcmVtb3ZlRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChldmVudCwgQVRUUklCVVRFX1JPTEUsIFwiY2xvc2VcIik7XG5cblx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRyZW1vdmVTZWxmLmNhbGwodGhpcyk7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmNsb3NlXCIpID09PSB0cnVlKSB7XG5cdFx0dGhpc1tyZW1vdmVFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XCJjbGlja1wiLFxuXHRcdFx0dGhpc1tyZW1vdmVFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdCk7XG5cdFx0dGhpc1tyZW1vdmVFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XCJ0b3VjaFwiLFxuXHRcdFx0dGhpc1tyZW1vdmVFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCIgY2xhc3M9XCJjZW50ZXJcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJtZXNzYWdlXCIgcGFydD1cIm1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1vcmllbnRhdGlvbiBwYXRoOm9yaWVudGF0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y29udGVudFwiIHBhcnQ9XCJjb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGVudFwiPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwicmVtb3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpmZWF0dXJlcy5jbG9zZSB8ID86OmhpZGRlbiBcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjbG9zZVwiIHRhYmluZGV4PVwiLTFcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoTWVzc2FnZSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgTm90aWZ5U3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgTm90aWZ5U3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdE5vdGlmeVN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgbm90aWZ5IHsgXG4uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja31kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17YWxpZ24taXRlbXM6ZmxleC1zdGFydDtib3JkZXI6MDtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjttYXJnaW46MDttYXgtaGVpZ2h0OjEwMHZIO3BvaW50ZXItZXZlbnRzOm5vbmU7cmlnaHQ6MDt0b3A6MDstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7d2lkdGg6MjVyZW07ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheSl9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdOm5vdCguaW5saW5lKXtwb3NpdGlvbjphYnNvbHV0ZX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uaW5saW5ley0tbW9uc3Rlci1tZXNzYWdlLWJvcmRlci1zaGFkb3c6bm9uZX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1bZGF0YS1tb25zdGVyLW9yaWVudGF0aW9uKj1sZWZ0XXtsZWZ0OjA7cmlnaHQ6YXV0b31bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF1bZGF0YS1tb25zdGVyLW9yaWVudGF0aW9uKj1yaWdodF17bGVmdDphdXRvO3JpZ2h0OjB9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdW2RhdGEtbW9uc3Rlci1vcmllbnRhdGlvbio9Y2VudGVyXXtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVtkYXRhLW1vbnN0ZXItb3JpZW50YXRpb24qPWJvdHRvbV17YWxpZ24taXRlbXM6ZmxleC1lbmQ7Ym90dG9tOjB9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdW2RhdGEtbW9uc3Rlci1vcmllbnRhdGlvbio9dG9wXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O3RvcDowfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250YWluZXJde3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPW1lc3NhZ2Vde2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1tZXNzYWdlLWJvcmRlci1jb2xvcixyZ2JhKDAsMCwwLC4xKSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLW1lc3NhZ2UtYm9yZGVyLXJhZGl1cywuMjVyZW0pO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLW1lc3NhZ2UtYm9yZGVyLXN0eWxlLHNvbGlkKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1tZXNzYWdlLWJvcmRlci13aWR0aCwxcHgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1tZXNzYWdlLWJvcmRlci1zaGFkb3csMCAuNXJlbSAxcmVtIHJnYmEoMCwwLDAsLjE1KSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6ZmxleDtmb250LXNpemU6Ljg3NXJlbTttYXJnaW46dmFyKC0tbW9uc3Rlci1tZXNzYWdlLW1hcmdpbi10b3AsMTVweCkgdmFyKC0tbW9uc3Rlci1tZXNzYWdlLW1hcmdpbi1yaWdodCw1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1tYXJnaW4tYm90dG9tLDApIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1tYXJnaW4tbGVmdCwwKTttYXgtaGVpZ2h0OjIwMHB4O21heC13aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOnZhcigtLW1vbnN0ZXItbWVzc2FnZS1wYWRkaW5nLXRvcCw1cHgpIHZhcigtLW1vbnN0ZXItbWVzc2FnZS1wYWRkaW5nLXJpZ2h0LDVweCkgdmFyKC0tbW9uc3Rlci1tZXNzYWdlLXBhZGRpbmctYm90dG9tLDVweCkgdmFyKC0tbW9uc3Rlci1tZXNzYWdlLXBhZGRpbmctbGVmdCw1cHgpO3BvaW50ZXItZXZlbnRzOmF1dG87cG9zaXRpb246cmVsYXRpdmU7dGV4dC1vdmVyZmxvdzplbGxpcHNpczstd2Via2l0LXVzZXItc2VsZWN0OnRleHQ7LW1vei11c2VyLXNlbGVjdDp0ZXh0O3VzZXItc2VsZWN0OnRleHQ7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9bWVzc2FnZV06Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfVtkYXRhLW1vbnN0ZXItcm9sZT1tZXNzYWdlXS5mYWRlb3V0e2JvcmRlcjowO21hcmdpbi1ib3R0b206MDttYXJnaW4tdG9wOjA7bWF4LWhlaWdodDowO3BhZGRpbmctYm90dG9tOjA7cGFkZGluZy10b3A6MDt0cmFuc2l0aW9uOmFsbCAuMnMgY3ViaWMtYmV6aWVyKDEsLS4wNCwwLDEuMDMpfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBBVFRSSUJVVEVfUk9MRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSBcIi4vbWVzc2FnZS5tanNcIjtcbmltcG9ydCB7IE5vdGlmeVN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L25vdGlmeS5tanNcIjtcbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3F1ZXVlLm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5cbmV4cG9ydCB7IE5vdGlmeSB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250YWluZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udGFpbmVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcXVldWVTeW1ib2wgPSBTeW1ib2woXCJxdWV1ZVwiKTtcblxuLyoqXG4gKiBUaGUgTm90aWZ5IGNvbnRyb2xcbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9ub3RpZnkvbm90aWZ5XG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbm90aWZ5L25vdGlmeS1zaW1wbGUgTm90aWZ5XG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9ub3RpZnkvbm90aWZ5LWlubGluZSBJbmxpbmUgTm90aWZ5XG4gKlxuICogQGlzc3VlIGh0dHBzOi8vbG9jYWxob3N0LmFsdmluZS5kZXY6ODQ0My9kZXZlbG9wbWVudC9pc3N1ZXMvY2xvc2VkLzI2OS5odG1sXG4gKlxuICogQHNpbmNlIDEuMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIE5vdGlmeSBjb250cm9sIGlzIGEgbm90aWZpY2F0aW9uIGNvbnRhaW5lciB0aGF0IGNhbiBiZSB1c2VkIHRvIGRpc3BsYXkgbWVzc2FnZXMgdG8gdGhlIHVzZXIuXG4gKi9cbmNsYXNzIE5vdGlmeSBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbcXVldWVTeW1ib2xdID0gbmV3IFF1ZXVlKCk7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG9yaWVudGF0aW9uIFRoZSBvcmllbnRhdGlvbiBvZiB0aGUgbm90aWZ5IGVsZW1lbnQuIEFsbG93ZWQgdmFsdWVzIGZvciBob3Jpem9udGFsIG9yaWVudGF0aW9uIGFyZSBcImxlZnRcIiwgXCJjZW50ZXJcIiwgXCJyaWdodFwiLiBBbGxvd2VkIHZhbHVlcyBmb3IgdmVydGljYWwgb3JpZW50YXRpb24gYXJlIFwidG9wXCIgYW5kIFwiYm90dG9tXCIuXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSB0ZW1wbGF0ZXMgVGhlIHRlbXBsYXRlcyBvZiB0aGUgbm90aWZ5IGVsZW1lbnQuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBUaGUgbWFpbiB0ZW1wbGF0ZSBvZiB0aGUgbm90aWZ5IGVsZW1lbnQuXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBjbGFzc2VzIFRoZSBjbGFzc2VzIG9mIHRoZSBub3RpZnkgZWxlbWVudC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzZXMuY29udGFpbmVyIFRoZSBjb250YWluZXIgY2xhc3Mgb2YgdGhlIG5vdGlmeSBlbGVtZW50LlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2xhc3Nlcy5jb250cm9sIFRoZSBjb250cm9sIGNsYXNzIG9mIHRoZSBub3RpZnkgZWxlbWVudC5cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdG9yaWVudGF0aW9uOiBcImxlZnQgdG9wXCIsXG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGNvbnRhaW5lcjogXCJcIixcblx0XHRcdFx0Y29udHJvbDogXCJjZW50ZXJcIixcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Tm90aWZ5fVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblxuXHRcdGlmICh0aGlzW2NvbnRhaW5lckVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0XHR3aGlsZSAodGhpc1txdWV1ZVN5bWJvbF0uaXNFbXB0eSgpID09PSBmYWxzZSkge1xuXHRcdFx0XHR0aGlzLnB1c2godGhpc1txdWV1ZVN5bWJvbF0ucG9sbCgpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItbm90aWZ5XCI7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtOb3RpZnlTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge01hc3NhZ2V8U3RyaW5nfSBtZXNzYWdlXG5cdCAqIEByZXR1cm4ge05vdGlmeX1cblx0ICovXG5cdHB1c2gobWVzc2FnZSkge1xuXHRcdGxldCBtZXNzYWdlRWxlbWVudCA9IG1lc3NhZ2U7XG5cdFx0aWYgKCEobWVzc2FnZSBpbnN0YW5jZW9mIE1lc3NhZ2UpKSB7XG5cdFx0XHRjb25zdCB0ZXh0ID0gdmFsaWRhdGVTdHJpbmcobWVzc2FnZSk7XG5cdFx0XHRtZXNzYWdlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJtb25zdGVyLW5vdGlmeS1tZXNzYWdlXCIpO1xuXHRcdFx0bWVzc2FnZUVsZW1lbnQuc2V0T3B0aW9uKFwiY29udGVudFwiLCB0ZXh0KTtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZUluc3RhbmNlKG1lc3NhZ2VFbGVtZW50LCBNZXNzYWdlKTtcblx0XHRtZXNzYWdlRWxlbWVudC5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUsIFwibWVzc2FnZVwiKTtcblxuXHRcdC8vIGlmIG5vdCBjb25uZWN0ZWQsIGFkZCB0byBxdWV1ZVxuXHRcdGlmICghdGhpc1tjb250YWluZXJFbGVtZW50U3ltYm9sXSkge1xuXHRcdFx0dGhpc1txdWV1ZVN5bWJvbF0uYWRkKG1lc3NhZ2VFbGVtZW50KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItbm90aWZ5LW1lc3NhZ2VcIiwge1xuXHRcdFx0bWVzc2FnZUVsZW1lbnQsXG5cdFx0fSk7XG5cblx0XHR0aGlzW2NvbnRhaW5lckVsZW1lbnRTeW1ib2xdLmFwcGVuZENoaWxkKG1lc3NhZ2VFbGVtZW50KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbXCIgKyBBVFRSSUJVVEVfUk9MRSArIFwiPWNvbnRyb2xdXCIsXG5cdCk7XG5cdHRoaXNbY29udGFpbmVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltcIiArIEFUVFJJQlVURV9ST0xFICsgXCI9Y29udGFpbmVyXVwiLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIlxuICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGF0YS1tb25zdGVyLW9yaWVudGF0aW9uIHBhdGg6b3JpZW50YXRpb24sIGNsYXNzIHBhdGg6Y2xhc3Nlcy5jb250cm9sXCI+XG5cdFx0XHQ8ZGl2IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjbGFzc2VzLmNvbnRhaW5lclwiIHBhcnQ9XCJjb250YWluZXJcIlxuXHRcdFx0XHQgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KE5vdGlmeSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgU3BsaXRQYW5lbFN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFNwbGl0UGFuZWxTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0U3BsaXRQYW5lbFN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgc3BsaXRwYW5lbCB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPXNwbGl0LXBhbmVsXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztoZWlnaHQ6YXV0bzttYXJnaW46MDtwYWRkaW5nOjA7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtcGFuZWxdIC5wYW5lbHtmbGV4LWdyb3c6MTtvdmVyZmxvdzphdXRvfVtkYXRhLW1vbnN0ZXItcm9sZT1zcGxpdC1wYW5lbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWRyYWdnZXJde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtoZWlnaHQ6YXV0bztwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDp2YXIoLS1tb25zdGVyLWRyYWdnZXItd2lkdGgpfTppcyhbZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtcGFuZWxdIFtkYXRhLW1vbnN0ZXItcm9sZT1kcmFnZ2VyXSkgW2RhdGEtbW9uc3Rlci1yb2xlPWhhbmRsZV17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpO2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLWhlaWdodCk7bGVmdDo1MCU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7d2lkdGg6dmFyKC0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS13aWR0aCk7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9Lmhvcml6b250YWxbZGF0YS1tb25zdGVyLXJvbGU9c3BsaXQtcGFuZWxde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uaG9yaXpvbnRhbFtkYXRhLW1vbnN0ZXItcm9sZT1zcGxpdC1wYW5lbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWRyYWdnZXJde2hlaWdodDp2YXIoLS1tb25zdGVyLWRyYWdnZXItd2lkdGgpO3dpZHRoOjEwMCV9OmlzKC5ob3Jpem9udGFsW2RhdGEtbW9uc3Rlci1yb2xlPXNwbGl0LXBhbmVsXSBbZGF0YS1tb25zdGVyLXJvbGU9ZHJhZ2dlcl0pIFtkYXRhLW1vbnN0ZXItcm9sZT1oYW5kbGVde2hlaWdodDp2YXIoLS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLXdpZHRoKTt3aWR0aDp2YXIoLS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLWhlaWdodCl9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCBcIi4uL25vdGlmeS9ub3RpZnkubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgU3BsaXRQYW5lbFN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3NwbGl0LXBhbmVsLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBTcGxpdFBhbmVsLCBUWVBFX1ZFUlRJQ0FMLCBUWVBFX0hPUklaT05UQUwgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic3BsaXRTY3JlZW5FbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkcmFnZ2VyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImRyYWdnZXJFbGVtZW50XCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3RhcnRQYW5lbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJzdGFydFBhbmVsRWxlbWVudFwiKTtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGVuZFBhbmVsRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImVuZFBhbmVsRWxlbWVudFwiKTtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGhhbmRsZUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJoYW5kbGVFbGVtZW50XCIpO1xuXG4vKipcbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBUWVBFX1ZFUlRJQ0FMID0gXCJ2ZXJ0aWNhbFwiO1xuLyoqXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgVFlQRV9IT1JJWk9OVEFMID0gXCJob3Jpem9udGFsXCI7XG5cbi8qKlxuICogQSBTcGxpdFBhbmVsIENvbnRyb2xcbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9sYXlvdXQvc3BsaXQtcGFuZWwvXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbGF5b3V0L3NwbGl0LXBhbmVsLXNpbXBsZVxuICpcbiAqIEBzaW5jZSAzLjU0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgU3BsaXRQYW5lbCBjb250cm9sIGlzIGEgc2ltcGxlIGxheW91dCBjb250cm9sIHRoYXQgYWxsb3dzIHlvdSB0byBzcGxpdCB0aGUgc2NyZWVuXG4gKiBpbnRvIHR3byBwYXJ0cy4gVGhlIHNwbGl0IGNhbiBiZSBlaXRoZXIgdmVydGljYWwgb3IgaG9yaXpvbnRhbC4gVGhlIGNvbnRyb2wgcHJvdmlkZXMgYVxuICogZHJhZ2dhYmxlIGhhbmRsZSB0aGF0IGFsbG93cyB5b3UgdG8gYWRqdXN0IHRoZSBzaXplIG9mIHRoZSB0d28gcGFuZWxzLlxuICovXG5jbGFzcyBTcGxpdFBhbmVsIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2xheW91dC9zcGxpdC1wYW5lbFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHNwbGl0VHlwZSBTcGxpdCB0eXBlICh2ZXJ0aWNhbCBvciBob3Jpem9udGFsKVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gZGltZW5zaW9uIERpbWVuc2lvblxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gZGltZW5zaW9uLmluaXRpYWwgSW5pdGlhbCBkaW1lbnNpb24gb2YgdGhlIHN0YXJ0IHBhbmVsXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBkaW1lbnNpb24ubWF4IE1heGltdW0gZGltZW5zaW9uIG9mIHRoZSBzdGFydCBwYW5lbCAoaW4gcGVyY2VudGFnZSlcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGRpbWVuc2lvbi5taW4gTWluaW11bSBkaW1lbnNpb24gb2YgdGhlIHN0YXJ0IHBhbmVsIChpbiBwZXJjZW50YWdlKVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0c3BsaXRUeXBlOiBUWVBFX1ZFUlRJQ0FMLFxuXHRcdFx0ZGltZW5zaW9uOiB7XG5cdFx0XHRcdGluaXRpYWw6IFwiNjAlXCIsXG5cdFx0XHRcdG1heDogXCI4MCVcIixcblx0XHRcdFx0bWluOiBcIjIwJVwiLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdGZ1bGxTdGFydFNjcmVlbigpIHtcblx0XHR0aGlzLnNldERpbWVuc2lvbihcIjEwMCVcIik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRmdWxsRW5kU2NyZWVuKCkge1xuXHRcdHRoaXMuc2V0RGltZW5zaW9uKFwiMCVcIik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRpc0Z1bGxTdGFydFNjcmVlbigpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmN1cnJlbnREaW1lbnNpb24gPT09IFwiMTAwJVwiO1xuXHR9XG5cblx0aXNGdWxsRW5kU2NyZWVuKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuY3VycmVudERpbWVuc2lvbiA9PT0gXCIwJVwiO1xuXHR9XG5cblx0aXNJbml0aWFsU2NyZWVuKCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuY3VycmVudERpbWVuc2lvbiA9PT1cblx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLmluaXRpYWxcblx0XHQpO1xuXHR9XG5cblx0cmVzZXRTY3JlZW4oKSB7XG5cdFx0dGhpcy5zZXREaW1lbnNpb24odGhpcy5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikuaW5pdGlhbCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRDb250ZW50KGh0bWwpIHtcblx0XHR0aGlzLnNldE9wdGlvbihcImNvbnRlbnRcIiwgaHRtbCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuVmlld2VyfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblxuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblx0XHQvL2FwcGx5UGFuZWxEaW1lbnNpb25zLmNhbGwodGhpcyk7XG5cdFx0dGhpcy5zZXREaW1lbnNpb24odGhpcy5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikuaW5pdGlhbCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgdGhlIGRpbWVuc2lvbiBpcyBhIHBlcmNlbnRhZ2UgYW5kIHdpdGhpbiBhIHZhbGlkIHJhbmdlLCB0aGVuIHNldCB0aGUgZGltZW5zaW9uIG9wdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGRpbWVuc2lvbiAtIFRoZSBkaW1lbnNpb24gdG8gYmUgc2V0LCBjYW4gYmUgaW4gcGVyY2VudGFnZSBvciBhYnNvbHV0ZSB2YWx1ZS5cblx0ICogQHJldHVybiB7T2JqZWN0fSAtIFJldHVybnMgdGhlIGN1cnJlbnQgb2JqZWN0IGluc3RhbmNlIGZvciBjaGFpbmluZy5cblx0ICovXG5cdHNldERpbWVuc2lvbihkaW1lbnNpb24pIHtcblx0XHQvLyBjaGVjayBpZiBwZXJjZW50IGFuZCBncmVhdGVyIHRoYW4xMDBcblx0XHRpZiAoZGltZW5zaW9uLmluY2x1ZGVzKFwiJVwiKSkge1xuXHRcdFx0aWYgKHBhcnNlSW50KGRpbWVuc2lvbikgPiAxMDApIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZGltZW5zaW9uIG11c3QgYmUgbGVzcyB0aGFuIDEwMCVcIik7XG5cdFx0XHR9IGVsc2UgaWYgKHBhcnNlSW50KGRpbWVuc2lvbikgPCAwKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcImRpbWVuc2lvbiBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJVwiKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuY3VycmVudERpbWVuc2lvbiA9IGRpbWVuc2lvbjtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItc3BsaXQtcGFuZWxcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1NwbGl0UGFuZWxTdHlsZVNoZWV0XTtcblx0fVxufVxuXG4vKipcbiAqIFNldCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgcGFuZWwgYmFzZWQgb24gdGhlIHNwbGl0IHR5cGUuXG4gKiBAZmlyZXMgbW9uc3Rlci1kaW1lbnNpb24tY2hhbmdlZFxuICovXG5mdW5jdGlvbiBhcHBseVBhbmVsRGltZW5zaW9ucygpIHtcblx0Y29uc3Qgc3BsaXRUeXBlID0gdGhpcy5nZXRPcHRpb24oXCJzcGxpdFR5cGVcIik7XG5cdGNvbnN0IGRpbWVuc2lvbiA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uO1xuXG5cdGlmIChzcGxpdFR5cGUgPT09IFRZUEVfVkVSVElDQUwpIHtcblx0XHR0aGlzW3N0YXJ0UGFuZWxFbGVtZW50U3ltYm9sXS5zdHlsZS53aWR0aCA9IGRpbWVuc2lvbjtcblx0XHR0aGlzW2VuZFBhbmVsRWxlbWVudFN5bWJvbF0uc3R5bGUud2lkdGggPSBgY2FsYygxMDAlIC0gJHtkaW1lbnNpb259IC0gNXB4KWA7XG5cdFx0dGhpc1tkcmFnZ2VyRWxlbWVudFN5bWJvbF0uc3R5bGUuY3Vyc29yID0gXCJldy1yZXNpemVcIjtcblx0XHR0aGlzW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcInZlcnRpY2FsXCIpO1xuXHRcdHRoaXNbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiaG9yaXpvbnRhbFwiKTtcblx0fSBlbHNlIHtcblx0XHR0aGlzW3N0YXJ0UGFuZWxFbGVtZW50U3ltYm9sXS5zdHlsZS5oZWlnaHQgPSBkaW1lbnNpb247XG5cdFx0dGhpc1tlbmRQYW5lbEVsZW1lbnRTeW1ib2xdLnN0eWxlLmhlaWdodCA9XG5cdFx0XHRgY2FsYygxMDAlIC0gJHtkaW1lbnNpb259IC0gNXB4KWA7XG5cdFx0dGhpc1tkcmFnZ2VyRWxlbWVudFN5bWJvbF0uc3R5bGUuY3Vyc29yID0gXCJucy1yZXNpemVcIjtcblx0XHR0aGlzW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImhvcml6b250YWxcIik7XG5cdFx0dGhpc1tzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJ2ZXJ0aWNhbFwiKTtcblx0fVxuXG5cdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItZGltZW5zaW9uLWNoYW5nZWRcIiwge1xuXHRcdGNvbnRyb2xsZXI6IHRoaXMsXG5cdFx0ZGltZW5zaW9uOiBkaW1lbnNpb24sXG5cdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPXNwbGl0LXBhbmVsXVwiLFxuXHQpO1xuXHR0aGlzW2RyYWdnZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWRyYWdnZXJdXCIsXG5cdCk7XG5cdHRoaXNbaGFuZGxlRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1oYW5kbGVdXCIsXG5cdCk7XG5cblx0dGhpc1tzdGFydFBhbmVsRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1zdGFydFBhbmVsXVwiLFxuXHQpO1xuXHR0aGlzW2VuZFBhbmVsRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1lbmRQYW5lbF1cIixcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRsZXQgbGFzdERpbWVuc2lvbiA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uO1xuXHRsZXQgbGFzdFR5cGUgPSB0aGlzLmdldE9wdGlvbihcInNwbGl0VHlwZVwiKTtcblxuXHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuaXNEcmFnZ2luZyA9IGZhbHNlO1xuXG5cdC8vIEB0b2RvOiBhZGQgYmV0dGVyIHRvdWNoIHN1cHBvcnRcblx0Y29uc3QgZXZlbnRUeXBlcyA9IFtcImRibGNsaWNrXCIsIFwidG91Y2hzdGFydFwiXTtcblx0Zm9yIChjb25zdCBldmVudFR5cGUgb2YgZXZlbnRUeXBlcykge1xuXHRcdHRoaXNbZHJhZ2dlckVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCAoKSA9PiB7XG5cdFx0XHRzZWxmW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuaXNEcmFnZ2luZyA9IGZhbHNlO1xuXHRcdFx0bGFzdERpbWVuc2lvbiA9IHVuZGVmaW5lZDtcblxuXHRcdFx0bGV0IGN1cnJlbnREaW1lbnNpb247XG5cdFx0XHRpZiAoc2VsZi5nZXRPcHRpb24oXCJzcGxpdFR5cGVcIikgPT09IFRZUEVfVkVSVElDQUwpIHtcblx0XHRcdFx0Y29uc3QgdG9wUGFuZWwgPSBzZWxmW3N0YXJ0UGFuZWxFbGVtZW50U3ltYm9sXTtcblx0XHRcdFx0Y3VycmVudERpbWVuc2lvbiA9IHRvcFBhbmVsLnN0eWxlLndpZHRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgdG9wUGFuZWwgPSBzZWxmW3N0YXJ0UGFuZWxFbGVtZW50U3ltYm9sXTtcblx0XHRcdFx0Y3VycmVudERpbWVuc2lvbiA9IHRvcFBhbmVsLnN0eWxlLmhlaWdodDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGN1cnJlbnREaW1lbnNpb24gPT09IHNlbGYuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLmluaXRpYWwpIHtcblx0XHRcdFx0c2VsZi5zZXREaW1lbnNpb24oc2VsZi5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikubWF4KTtcblx0XHRcdH0gZWxzZSBpZiAoY3VycmVudERpbWVuc2lvbiA9PT0gc2VsZi5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikubWF4KSB7XG5cdFx0XHRcdHNlbGYuc2V0RGltZW5zaW9uKHNlbGYuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLm1pbik7XG5cdFx0XHR9IGVsc2UgaWYgKGN1cnJlbnREaW1lbnNpb24gPT09IHNlbGYuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLm1pbikge1xuXHRcdFx0XHRzZWxmLnNldERpbWVuc2lvbihzZWxmLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5pbml0aWFsKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYuc2V0RGltZW5zaW9uKHNlbGYuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLmluaXRpYWwpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0dGhpc1tkcmFnZ2VyRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCAoKSA9PiB7XG5cdFx0c2VsZltpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmlzRHJhZ2dpbmcgPSB0cnVlO1xuXG5cdFx0Y29uc3QgZXZlbnRMaXN0ZW5lciA9IChlKSA9PiB7XG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdC8vIHRoZSA1cHggYXJlIHdyb25nIGFuZCBtdXN0IGJlIGNhbGMgZnJvbSBjc3MgcHJvcGVydHkgLS1tb25zdGVyLWRyYWdnZXItd2lkdGhcblxuXHRcdFx0bGV0IGRyYWdnZXJXaWR0aCA9IGdldENvbXB1dGVkU3R5bGUoXG5cdFx0XHRcdHNlbGZbZHJhZ2dlckVsZW1lbnRTeW1ib2xdLFxuXHRcdFx0KS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1tb25zdGVyLWRyYWdnZXItd2lkdGhcIik7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGRyYWdnZXJXaWR0aCA9PT0gXCJcIiB8fFxuXHRcdFx0XHRkcmFnZ2VyV2lkdGggPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRkcmFnZ2VyV2lkdGggPT09IG51bGxcblx0XHRcdCkge1xuXHRcdFx0XHRkcmFnZ2VyV2lkdGggPSBcIjBcIjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFzZWxmW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCkuaXNEcmFnZ2luZykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzZWxmLmdldE9wdGlvbihcInNwbGl0VHlwZVwiKSA9PT0gVFlQRV9IT1JJWk9OVEFMKSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRhaW5lck9mZnNldFRvcCA9IHNlbGZbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5vZmZzZXRUb3A7XG5cdFx0XHRcdGNvbnN0IHRvcFBhbmVsID0gc2VsZltzdGFydFBhbmVsRWxlbWVudFN5bWJvbF07XG5cdFx0XHRcdGNvbnN0IGJvdHRvbVBhbmVsID0gc2VsZltlbmRQYW5lbEVsZW1lbnRTeW1ib2xdO1xuXHRcdFx0XHRsZXQgbmV3VG9wSGVpZ2h0ID0gZS5jbGllbnRZIC0gY29udGFpbmVyT2Zmc2V0VG9wO1xuXG5cdFx0XHRcdGNvbnN0IG1pbiA9IHRoaXMuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLm1pbjtcblx0XHRcdFx0Y29uc3QgbWF4ID0gdGhpcy5nZXRPcHRpb24oXCJkaW1lbnNpb25cIikubWF4O1xuXG5cdFx0XHRcdGNvbnN0IHRvcEFzUGVyY2VudCA9XG5cdFx0XHRcdFx0KG5ld1RvcEhlaWdodCAvIHRoaXNbc3BsaXRTY3JlZW5FbGVtZW50U3ltYm9sXS5vZmZzZXRIZWlnaHQpICogMTAwO1xuXHRcdFx0XHRpZiAocGFyc2VJbnQobWluKSA+IHRvcEFzUGVyY2VudCkge1xuXHRcdFx0XHRcdG5ld1RvcEhlaWdodCA9IG1pbjtcblx0XHRcdFx0fSBlbHNlIGlmIChwYXJzZUludChtYXgpIDwgdG9wQXNQZXJjZW50KSB7XG5cdFx0XHRcdFx0bmV3VG9wSGVpZ2h0ID0gbWF4O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5ld1RvcEhlaWdodCA9IHRvcEFzUGVyY2VudCArIFwiJVwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gY2FsYyBuZXcgdG9wIGhlaWdodCB0byBwaXhlbFxuXHRcdFx0XHRjb25zdCBuZXdUb3BIZWlnaHRQeCA9XG5cdFx0XHRcdFx0KHBhcnNlSW50KG5ld1RvcEhlaWdodCkgLyAxMDApICpcblx0XHRcdFx0XHR0aGlzW3NwbGl0U2NyZWVuRWxlbWVudFN5bWJvbF0ub2Zmc2V0SGVpZ2h0O1xuXG5cdFx0XHRcdHRvcFBhbmVsLnN0eWxlLmhlaWdodCA9IGAke25ld1RvcEhlaWdodFB4fXB4YDtcblx0XHRcdFx0Ym90dG9tUGFuZWwuc3R5bGUuaGVpZ2h0ID0gYGNhbGMoMTAwJSAtICR7bmV3VG9wSGVpZ2h0UHh9cHggLSAke2RyYWdnZXJXaWR0aH0pYDsgLy8gNXB4IGlzIGRyYWdnZXIgaGVpZ2h0XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBjb250YWluZXJPZmZzZXRMZWZ0ID0gc2VsZltzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLm9mZnNldExlZnQ7XG5cdFx0XHRcdGNvbnN0IGxlZnRQYW5lbCA9IHNlbGZbc3RhcnRQYW5lbEVsZW1lbnRTeW1ib2xdO1xuXHRcdFx0XHRjb25zdCByaWdodFBhbmVsID0gc2VsZltlbmRQYW5lbEVsZW1lbnRTeW1ib2xdO1xuXHRcdFx0XHRsZXQgbmV3TGVmdFdpZHRoID0gZS5jbGllbnRYIC0gY29udGFpbmVyT2Zmc2V0TGVmdDtcblxuXHRcdFx0XHRjb25zdCBtaW4gPSB0aGlzLmdldE9wdGlvbihcImRpbWVuc2lvblwiKS5taW47XG5cdFx0XHRcdGNvbnN0IG1heCA9IHRoaXMuZ2V0T3B0aW9uKFwiZGltZW5zaW9uXCIpLm1heDtcblxuXHRcdFx0XHRjb25zdCBsZWZ0QXNQZXJjZW50ID1cblx0XHRcdFx0XHQobmV3TGVmdFdpZHRoIC8gdGhpc1tzcGxpdFNjcmVlbkVsZW1lbnRTeW1ib2xdLm9mZnNldFdpZHRoKSAqIDEwMDtcblxuXHRcdFx0XHRpZiAocGFyc2VJbnQobWluKSA+IGxlZnRBc1BlcmNlbnQpIHtcblx0XHRcdFx0XHRuZXdMZWZ0V2lkdGggPSBtaW47XG5cdFx0XHRcdH0gZWxzZSBpZiAocGFyc2VJbnQobWF4KSA8IGxlZnRBc1BlcmNlbnQpIHtcblx0XHRcdFx0XHRuZXdMZWZ0V2lkdGggPSBtYXg7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bmV3TGVmdFdpZHRoID0gbGVmdEFzUGVyY2VudCArIFwiJVwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGVmdFBhbmVsLnN0eWxlLndpZHRoID0gYCR7bmV3TGVmdFdpZHRofWA7XG5cdFx0XHRcdHJpZ2h0UGFuZWwuc3R5bGUud2lkdGggPSBgY2FsYygxMDAlIC0gJHtuZXdMZWZ0V2lkdGh9IC0gJHtkcmFnZ2VyV2lkdGh9KWA7IC8vIDVweCBpcyBkcmFnZ2VyIHdpZHRoXG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGNvbnN0IGRyYWdFdmVudEhhbmRsZXIgPSAoZSkgPT4ge1xuXHRcdFx0c2VsZltpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpLmlzRHJhZ2dpbmcgPSBmYWxzZTtcblx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgZXZlbnRMaXN0ZW5lcik7XG5cdFx0XHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBldmVudExpc3RlbmVyKTtcblx0XHR9O1xuXG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCBldmVudExpc3RlbmVyKTtcblx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBkcmFnRXZlbnRIYW5kbGVyKTtcblx0fSk7XG5cblx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIoXG5cdFx0bmV3IE9ic2VydmVyKCgpID0+IHtcblx0XHRcdGxldCBhcHBseSA9IGZhbHNlO1xuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdGxhc3REaW1lbnNpb24gIT09IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uXG5cdFx0XHQpIHtcblx0XHRcdFx0bGFzdERpbWVuc2lvbiA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFN1YmplY3QoKS5jdXJyZW50RGltZW5zaW9uO1xuXHRcdFx0XHRhcHBseSA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChsYXN0VHlwZSAhPT0gdGhpcy5nZXRPcHRpb24oXCJzcGxpdFR5cGVcIikpIHtcblx0XHRcdFx0bGFzdFR5cGUgPSB0aGlzLmdldE9wdGlvbihcInNwbGl0VHlwZVwiKTtcblx0XHRcdFx0YXBwbHkgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYXBwbHkpIHtcblx0XHRcdFx0YXBwbHlQYW5lbERpbWVuc2lvbnMuY2FsbCh0aGlzKTtcblx0XHRcdH1cblx0XHR9KSxcblx0KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3BsaXQtcGFuZWxcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInN0YXJ0UGFuZWxcIiBjbGFzcz1cInBhbmVsXCIgcGFydD1cInN0YXJ0UGFuZWxcIj5cbiAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwic3RhcnRcIj48L3Nsb3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJkcmFnZ2VyXCIgcGFydD1cImRyYWdnZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiaGFuZGxlXCIgcGFydD1cImhhbmRsZVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiZW5kUGFuZWxcIiBjbGFzcz1cInBhbmVsXCIgcGFydD1cImVuZFBhbmVsXCI+XG4gICAgICAgICAgICAgICAgPHNsb3QgbmFtZT1cImVuZFwiPjwvc2xvdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoU3BsaXRQYW5lbCk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgUGFuZWxTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBQYW5lbFN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRQYW5lbFN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgcGFuZWwgeyBcbjphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1mb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxcXFwiUXVpY2tzYW5kXFxcIixcXFwiU2Vnb2UgVUlcXFwiLFxcXCJSb2JvdG9cXFwiLFxcXCJPeHlnZW5cXFwiLFxcXCJVYnVudHVcXFwiLFxcXCJDYW50YXJlbGxcXFwiLFxcXCJGaXJhIFNhbnNcXFwiLFxcXCJEcm9pZCBTYW5zXFxcIixcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLEFyaWFsLHNhbnMtc2VyaWYsXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiOy0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2U6XFxcIkNvbnNvbGFzXFxcIixcXFwiQ291cmllciBOZXdcXFwiLFxcXCJSb2JvdG8gTW9ub1xcXCIsXFxcIlNvdXJjZSBDb2RlIFByb1xcXCIsXFxcIkZpcmEgTW9ub1xcXCIsbW9ub3NwYWNlOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS02KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMTojODMzYWI0Oy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yOiNmZDFkMWQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTM6I2ZjYjA0NTstLW1vbnN0ZXItYm94LXNoYWRvdy0xOm5vbmU7LS1tb25zdGVyLWJveC1zaGFkb3ctMjotMXB4IDFweCAxMHB4IDFweCBoc2xhKDAsMCUsNzYlLC42MSk7LS1tb25zdGVyLXRleHQtc2hhZG93Om5vbmU7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0yKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItYm9yZGVyLXdpZHRoOjNweDstLW1vbnN0ZXItYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZTotNHB4Oy0tbW9uc3Rlci16LWluZGV4LWRlZmF1bHQ6MDstLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lOjEwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duOjIwMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bi1vdmVybGF5OjIxMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3k6MzAwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreS1vdmVybGF5OjMxMDstLW1vbnN0ZXItei1pbmRleC1maXhlZDo0MDA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQtb3ZlcmxheTo0MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3A6NTAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wLW92ZXJsYXk6NTEwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhczo2MDA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzLW92ZXJsYXk6NjEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsOjcwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1vdmVybGF5OjcxMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyOjgwMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyLW92ZXJsYXk6ODEwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXA6ODAwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXAtb3ZlcmxheTo5MTA7LS1tb25zdGVyLXNwYWNlLTA6MDstLW1vbnN0ZXItc3BhY2UtMToycHg7LS1tb25zdGVyLXNwYWNlLTI6NHB4Oy0tbW9uc3Rlci1zcGFjZS0zOjZweDstLW1vbnN0ZXItc3BhY2UtNDoxMHB4Oy0tbW9uc3Rlci1zcGFjZS01OjE2cHg7LS1tb25zdGVyLXNwYWNlLTY6MjZweDstLW1vbnN0ZXItc3BhY2UtNzo0MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTA6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC03Ojc2OHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTk6OTkycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMTI6MTIwMHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoOjJweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGg6NHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQ6NTBweH0uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci10aGVtZS1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTEpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMXtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0yKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTJ7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLWNvbG9yLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLXRoZW1lLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMyl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ze2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci10aGVtZS1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTQpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtNHtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1yb3ctMXtib3JkZXI6MXB4IHNvbGlkIHZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1lbGVtZW50LC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtcm93LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1iYWNrZ3JvdW5kLWluaGVyaXR7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0IWltcG9ydGFudH0ubW9uc3Rlci10aGVtZS1vbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb24tY29sb3IpfS5tb25zdGVyLXRoZW1lLW9mZntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcil9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl17YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpub25lO3BhZGRpbmc6MS4xZW07ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwpfVtkYXRhLXBvcHBlci1hcnJvd10sW2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7YmFja2dyb3VuZDppbmhlcml0O2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEqdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSp2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMil9W2RhdGEtcG9wcGVyLWFycm93XXt2aXNpYmlsaXR5OmhpZGRlbn1bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29udGVudDpcXFwiXFxcIjt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKTt2aXNpYmlsaXR5OnZpc2libGV9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49dG9wXT5bZGF0YS1wb3BwZXItYXJyb3dde2JvdHRvbTpjYWxjKHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpLzIpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePXRvcF0+W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItbGVmdDp0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXRvcDp0cmFuc3BhcmVudH1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1ib3R0b21dPltkYXRhLXBvcHBlci1hcnJvd117dG9wOmNhbGModmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePWJvdHRvbV0+W2RhdGEtcG9wcGVyLWFycm93XTpiZWZvcmV7Ym9yZGVyLWJvdHRvbTp0cmFuc3BhcmVudDtib3JkZXItbGVmdDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmlnaHQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX1kaXZbZGF0YS1wb3BwZXItcGxhY2VtZW50Xj1sZWZ0XT5bZGF0YS1wb3BwZXItYXJyb3dde3JpZ2h0OmNhbGModmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkgLSB2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePWxlZnRdPltkYXRhLXBvcHBlci1hcnJvd106YmVmb3Jle2JvcmRlci1ib3R0b206dHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0OnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci10b3A6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpIHZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKSB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9ZGl2W2RhdGEtcG9wcGVyLXBsYWNlbWVudF49cmlnaHRdPltkYXRhLXBvcHBlci1hcnJvd117bGVmdDpjYWxjKHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpIC0gdmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpLzIpfWRpdltkYXRhLXBvcHBlci1wbGFjZW1lbnRePXJpZ2h0XT5bZGF0YS1wb3BwZXItYXJyb3ddOmJlZm9yZXtib3JkZXItYm90dG9tOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1sZWZ0OnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSB2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yaWdodDp0cmFuc3BhcmVudDtib3JkZXItdG9wOnRyYW5zcGFyZW50fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5tb25zdGVyLWJhZGdlLXByaW1hcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXByaW1hcnksLm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnksLm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnksLm1vbnN0ZXItYmFkZ2UtdGVydGlhcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZle3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZSwubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utc3VjY2Vzc3twYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utc3VjY2VzcywubW9uc3Rlci1iYWRnZS1zdWNjZXNzLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MtcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS13YXJuaW5ne3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS13YXJuaW5nLC5tb25zdGVyLWJhZGdlLXdhcm5pbmctcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utd2FybmluZy1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLWVycm9ye3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1lcnJvciwubW9uc3Rlci1iYWRnZS1lcnJvci1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLWVycm9yLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2s7aGVpZ2h0Oi13ZWJraXQtZmlsbC1hdmFpbGFibGU7aGVpZ2h0OmZpbGwtYXZhaWxhYmxlO2hlaWdodDotbW96LWF2YWlsYWJsZTtoZWlnaHQ6c3RyZXRjaDtvdmVyZmxvdzphdXRvO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JvcmRlcjowO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTtoZWlnaHQ6ZmlsbC1hdmFpbGFibGU7aGVpZ2h0Oi1tb3otYXZhaWxhYmxlO2hlaWdodDpzdHJldGNoO21hcmdpbjowO291dGxpbmU6bm9uZTtvdmVyZmxvdzphdXRvO3BhZGRpbmc6MDtzY3JvbGxiYXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtzY3JvbGxiYXItd2lkdGg6dGhpbjsvL3Bvc2l0aW9uOmZpeGVkOy8vdG9wOjA7Ly9sZWZ0OjA7Ly9yaWdodDowOy8vYm90dG9tOjA7Ly9vdmVyZmxvdzphdXRvOy8vYm94LXNpemluZzpib3JkZXItYm94fSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBEZWFkTWFuc1N3aXRjaCB9IGZyb20gXCIuLi8uLi91dGlsL2RlYWRtYW5zc3dpdGNoLm1qc1wiO1xuXG5pbXBvcnQgeyBQYW5lbFN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3BhbmVsLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBQYW5lbCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBQYW5lbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJQYW5lbEVsZW1lbnRcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVzaXplT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJyZXNpemVPYnNlcnZlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJDYWxsYmFja1N5bWJvbCA9IFN5bWJvbChcInRpbWVyQ2FsbGJhY2tcIik7XG5cbi8qKlxuICogQSBTbGlkZXJcbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9sYXlvdXQvcGFuZWwvXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbGF5b3V0L3BhbmVsLXNpbXBsZVxuICpcbiAqIEBzaW5jZSAzLjU0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgUGFuZWwgY29tcG9uZW50IGlzIHVzZWQgdG8gZGlzcGxheSBhIHBhbmVsLCBpc24ndCB0aGF0IGNvb2w/XG4gKi9cbmNsYXNzIFBhbmVsIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2xheW91dC9wYW5lbFwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGhlaWdodEFkanVzdG1lbnQgSGVpZ2h0IGFkanVzdG1lbnRcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGhlaWdodEFkanVzdG1lbnQ6IDQsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuVmlld2VyfVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblxuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudEhhbmRsZXIuY2FsbCh0aGlzKTtcblxuXHRcdGNhbGNIZWlnaHQuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGRvbSBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXHRcdGF0dGFjaFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cblx0XHQvLyBkaXNhYmxlIHNjcm9sbGluZyBpbiBwYXJlbnQgbm9kZVxuXHRcdGlmICh0aGlzLnBhcmVudE5vZGUgJiYgdGhpcy5wYXJlbnROb2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdHRoaXMucGFyZW50Tm9kZS5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgZG9tIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cdFx0ZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLXBhbmVsXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtQYW5lbFN0eWxlU2hlZXRdO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2FsY0hlaWdodCgpIHtcblx0dGhpcy5zdHlsZS5ib3hTaXppbmcgPSBcImJvcmRlci1ib3hcIjtcblxuXHRjb25zdCBoZWlnaHQgPSBjYWxjdWxhdGVNYXhpbXVtSGVpZ2h0LmNhbGwodGhpcywgdGhpcyk7XG5cdGlmIChoZWlnaHQgPCAwKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgbWF4aW11bSBoZWlnaHQgb2YgYW4gZWxlbWVudCBiYXNlZCBvbiB0aGUgd2luZG93J3MgaW5uZXIgaGVpZ2h0XG4gKiBAcGFyYW0gZWxlbWVudFxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gY2FsY3VsYXRlTWF4aW11bUhlaWdodChlbGVtZW50KSB7XG5cdGxldCB0b3RhbEJvdHRvbUJvcmRlciA9IDA7XG5cdGxldCB0b3RhbEJvdHRvbVBhZGRpbmcgPSAwO1xuXHRsZXQgdG90YWxCb3R0b21NYXJnaW4gPSAwO1xuXHRsZXQgdG90YWxPdXRsaW5lSGVpZ2h0ID0gMDtcblx0bGV0IHRvdGFsQm94U2hhZG93SGVpZ2h0ID0gMDtcblx0bGV0IGN1cnJlbnRFbGVtZW50ID0gZWxlbWVudDtcblxuXHQvLyBHZXQgdGhlIGRpc3RhbmNlIGZyb20gdGhlIHRvcCBvZiB0aGUgZWxlbWVudCB0byB0aGUgdG9wIG9mIHRoZSB2aWV3cG9ydFxuXHRjb25zdCBkaXN0YW5jZUZyb21Ub3AgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcblxuXHQvLyBMb29wIHRocm91Z2ggdGhlIGVsZW1lbnRzIHVwIHRvIHRoZSBib2R5IHRvIHN1bSB1cCB0aGUgYm90dG9tIGJvcmRlcnMsIHBhZGRpbmcsIGFuZCBtYXJnaW5cblx0d2hpbGUgKGN1cnJlbnRFbGVtZW50ICYmIGN1cnJlbnRFbGVtZW50ICE9PSBkb2N1bWVudC5ib2R5KSB7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50RWxlbWVudCk7XG5cblx0XHQvLyBCb3ggc2l6aW5nXG5cdFx0Y29uc3QgYm94U2l6aW5nID0gc3R5bGUuYm94U2l6aW5nO1xuXG5cdFx0Ly8gQm9yZGVycywgcGFkZGluZywgYW5kIG1hcmdpblxuXHRcdGNvbnN0IGJvcmRlckJvdHRvbVdpZHRoID0gcGFyc2VGbG9hdChzdHlsZS5ib3JkZXJCb3R0b21XaWR0aCk7XG5cdFx0Y29uc3QgcGFkZGluZ0JvdHRvbSA9IHBhcnNlRmxvYXQoc3R5bGUucGFkZGluZ0JvdHRvbSk7XG5cdFx0Y29uc3QgbWFyZ2luQm90dG9tID0gcGFyc2VGbG9hdChzdHlsZS5tYXJnaW5Cb3R0b20pO1xuXG5cdFx0Ly8gT3V0bGluZSBhbmQgYm94LXNoYWRvd1xuXHRcdGNvbnN0IG91dGxpbmVIZWlnaHQgPSBwYXJzZUZsb2F0KHN0eWxlLm91dGxpbmVXaWR0aCk7XG5cdFx0Ly8gVGhpcyBpcyBhIHNpbXBsaWZpY2F0aW9uOyBib3gtc2hhZG93IGlzIG1vcmUgY29tcGxleCB0byBwYXJzZVxuXHRcdGNvbnN0IGJveFNoYWRvd1ZlcnRpY2FsID0gcGFyc2VGbG9hdChzdHlsZS5ib3hTaGFkb3cuc3BsaXQoXCIgXCIpWzNdIHx8IDApO1xuXG5cdFx0Ly8gQWNjdW11bGF0ZSB2YWx1ZXNcblx0XHR0b3RhbEJvdHRvbUJvcmRlciArPSBpc05hTihib3JkZXJCb3R0b21XaWR0aCkgPyAwIDogYm9yZGVyQm90dG9tV2lkdGg7XG5cdFx0dG90YWxCb3R0b21QYWRkaW5nICs9XG5cdFx0XHRpc05hTihwYWRkaW5nQm90dG9tKSB8fCBib3hTaXppbmcgPT09IFwiYm9yZGVyLWJveFwiID8gMCA6IHBhZGRpbmdCb3R0b207XG5cdFx0dG90YWxCb3R0b21NYXJnaW4gKz0gaXNOYU4obWFyZ2luQm90dG9tKSA/IDAgOiBtYXJnaW5Cb3R0b207XG5cdFx0dG90YWxPdXRsaW5lSGVpZ2h0ICs9IGlzTmFOKG91dGxpbmVIZWlnaHQpID8gMCA6IG91dGxpbmVIZWlnaHQ7XG5cdFx0dG90YWxCb3hTaGFkb3dIZWlnaHQgKz0gaXNOYU4oYm94U2hhZG93VmVydGljYWwpID8gMCA6IGJveFNoYWRvd1ZlcnRpY2FsO1xuXG5cdFx0Y3VycmVudEVsZW1lbnQgPSBjdXJyZW50RWxlbWVudC5wYXJlbnROb2RlIHx8IGN1cnJlbnRFbGVtZW50Lmhvc3Q7XG5cdH1cblxuXHQvLyBDYWxjdWxhdGUgdGhlIG1heGltdW0gaGVpZ2h0IGJ5IHN1YnRyYWN0aW5nIHRoZSBkaXN0YW5jZSwgYm9yZGVycywgcGFkZGluZywgbWFyZ2luLCBvdXRsaW5lLCBhbmQgYm94LXNoYWRvdyBmcm9tIHRoZSB3aW5kb3cncyBpbm5lciBoZWlnaHRcblx0Y29uc3QgbWF4aW11bUhlaWdodCA9XG5cdFx0d2luZG93LmlubmVySGVpZ2h0IC1cblx0XHRkaXN0YW5jZUZyb21Ub3AgLVxuXHRcdHRvdGFsQm90dG9tQm9yZGVyIC1cblx0XHR0b3RhbEJvdHRvbVBhZGRpbmcgLVxuXHRcdHRvdGFsQm90dG9tTWFyZ2luIC1cblx0XHR0b3RhbE91dGxpbmVIZWlnaHQgLVxuXHRcdHRvdGFsQm94U2hhZG93SGVpZ2h0O1xuXHRyZXR1cm4gbWF4aW11bUhlaWdodCArIHRoaXMuZ2V0T3B0aW9uKFwiaGVpZ2h0QWRqdXN0bWVudFwiKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBhdHRhY2hSZXNpemVPYnNlcnZlcigpIHtcblx0Ly8gYWdhaW5zdCBmbGlja2VyaW5nXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcblx0XHRpZiAodGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdLnRvdWNoKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRcdGNhbGNIZWlnaHQuY2FsbCh0aGlzKTtcblx0XHR9KTtcblx0fSk7XG5cblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZSh0aGlzLm93bmVyRG9jdW1lbnQuYm9keSk7XG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUoZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpIHtcblx0aWYgKHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdIGluc3RhbmNlb2YgUmVzaXplT2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5kaXNjb25uZWN0KCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW1BhbmVsRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXVwiLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFBhbmVsKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRhdHRyaWJ1dGVPYnNlcnZlclN5bWJvbCxcblx0Q3VzdG9tRWxlbWVudCxcblx0aW5pdE1ldGhvZFN5bWJvbCxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9GT1JNX1JFTE9BRCwgQVRUUklCVVRFX0ZPUk1fVVJMIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgbG9hZEFuZEFzc2lnbkNvbnRlbnQgfSBmcm9tIFwiLi91dGlsL2ZldGNoLm1qc1wiO1xuXG5leHBvcnQgeyBSZWxvYWQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZCA9IFN5bWJvbChcIndhc0luaXRpYWxpemVkXCIpO1xuXG4vKipcbiAqIFRoaXMgQ3VzdG9tQ29udHJvbCByZWxvYWRzIHRoZSBjb250ZW50IG9mIGEgdXJsIGFuZCBlbWJlZHMgaXQgaW50byB0aGUgZG9tLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvcmVsb2FkLnBuZ1wiPlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoaXMgY29udHJvbCBlaXRoZXIgYnkgc3BlY2lmeWluZyB0aGUgSFRNTCB0YWcgYDxtb25zdGVyLXJlbG9hZCAvPmAgZGlyZWN0bHkgaW4gdGhlIEhUTUwgb3IgdXNpbmdcbiAqIEphdmFzY3JpcHQgdmlhIHRoZSBgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1yZWxvYWQnKTtgIG1ldGhvZC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1yZWxvYWQ+PC9tb25zdGVyLXJlbG9hZD5cbiAqXG4gKiA8c2NyaXB0IHR5cGU9XCJtb2R1bGVcIj5cbiAqIGltcG9ydCB7UmVsb2FkfSBmcm9tICdAc2NodWthaS9jb21wb25lbnQtZm9ybS9zb3VyY2UvcmVsb2FkLmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItcmVsb2FkJyk7XG4gKiA8L3NjcmlwdD5cbiAqIGBgYFxuICpcbiAqIEEgc2ltcGxlIGNvbmZpZ3VyYXRpb24gY2FuIGxvb2sgbGlrZSB0aGlzXG4gKlxuICogYGBgaHRtbFxuICogPHNjcmlwdCBpZD1cImNvbmZpZ1wiXG4gKiAgICAgICAgIHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCI+XG4gKiAgICAge1xuICogICAgICAgICBcInVybFwiOiBcIi4vY29udGVudC5odG1sXCIsXG4gKiAgICAgfVxuICogPC9zY3JpcHQ+XG4gKlxuICogPG1vbnN0ZXItcmVsb2FkIGRhdGEtbW9uc3Rlci1vcHRpb25zLXNlbGVjdG9yPVwiI2NvbmZpZ1wiPlxuICogPC9tb25zdGVyLXJlbG9hZD5cbiAqIGBgYFxuICpcbiAqIElmIHlvdSB3YW50IHRvIGRpc3BsYXkgYSBsb2FkZXIsIHlvdSBjYW4gaW5zZXJ0IGEgZGl2IHdpdGggdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcImAuXG4gKiBUaGUgY29udGVudCBvZiB0aGlzIGRpdiB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBsb2FkZWQgY29kZS5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1yZWxvYWQgZGF0YS1tb25zdGVyLW9wdGlvbnMtc2VsZWN0b3I9XCIjY29uZmlnXCI+XG4gKiA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udGFpbmVyXCI+XG4gKiBMT0FERVIgLi4uXG4gKiA8L2Rpdj5cbiAqIDwvbW9uc3Rlci1yZWxvYWQ+XG4gKiBgYGBcbiAqXG4gKiBJZiB5b3UgbmVlZCBhZGRpdGlvbmFsIHN0cnVjdHVyZSwgeW91IGNhbiBzaW1wbHkgc3BlY2lmeSBpdC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8bW9uc3Rlci1yZWxvYWQgZGF0YS1tb25zdGVyLW9wdGlvbnMtc2VsZWN0b3I9XCIjY29uZmlnXCI+XG4gKiA8ZGl2IGNsYXNzPVwicm93XCI+XG4gKiAgIDxkaXYgY2xhc3M9XCJjb2xcIiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICogICAgICAgTE9BREVSIC4uLlxuICogICA8L2Rpdj5cbiAqIDwvZGl2PlxuICogPC9tb25zdGVyLXJlbG9hZD5cbiAqIGBgYFxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2Zvcm0vcmVsb2FkL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vcmVsb2FkLXNpbXBsZVxuICpcbiAqIEBzaW5jZSAxLjEzLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGJlYXV0aWZ1bCByZWxvYWQgY29udHJvbFxuICogQGZpcmVzIG1vbnN0ZXItZmV0Y2hlZFxuICovXG5jbGFzcyBSZWxvYWQgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vcmVsb2FkXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdXJsPXVuZGVmaW5lZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVsb2FkPXVuZGVmaW5lZCBjdXJyZW50bHkgdGhlIHZhbHVlcyBkZWZpbmVkIGFyZSBgb25zaG93YCBhbmQgYGFsd2F5c2AuIFRoZSBkZWZhdWx0IGBvbnNob3dgIHJlbW92ZXMgdGhlIEludGVyc2VjdGlvbk9ic2VydmVyLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNvbnRlbnQgaXMgb25seSBsb2FkZWQgb25jZS4gcmVsb2FkaW5nIG9mIHRoZSBjb250ZW50IGRvZXMgbm90IG9jY3VyLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gZmlsdGVyPXVuZGVmaW5lZCBkb20gc2VsZWN0b3JzIHRvIHNlYXJjaCBmb3IgZWxlbWVudHMsIGlmIHVuZGVmaW5lZCB0aGVuIGV2ZXJ5dGhpbmcgaXMgdGFrZW5cblx0ICogQHByb3BlcnR5IHtPYmplY3RbXX0gcHJvY2Vzc29yc1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2ggRmV0Y2ggW3NlZSBVc2luZyBGZXRjaCBtb3ppbGxhLm9yZ10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZldGNoX0FQSS9Vc2luZ19GZXRjaClcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLnJlZGlyZWN0PWVycm9yXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tb2RlPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jcmVkZW50aWFscz1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmV0Y2guaGVhZGVycz17XCJhY2NlcHRcIjpcInRleHQvaHRtbFwifX1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0XHR7XG5cdFx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRcdG1haW46IGdldFRlbXBsYXRlLmNhbGwodGhpcyksXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNoYWRvd01vZGU6IG51bGwsXG5cdFx0XHRcdHVybDogbnVsbCxcblx0XHRcdFx0cmVsb2FkOiBcIm9uc2hvd1wiLFxuXHRcdFx0XHRmaWx0ZXI6IG51bGwsXG5cdFx0XHRcdGZldGNoOiB7XG5cdFx0XHRcdFx0cmVkaXJlY3Q6IFwiZXJyb3JcIixcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0bW9kZTogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRcdGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRcdFx0YWNjZXB0OiBcInRleHQvaHRtbFwiLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHdoaWNoIGF0dHJpYnV0ZXMgYXJlIHRvIGJlIG1vbml0b3JlZCBieSBgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKClgLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmdbXX1cblx0ICovXG5cdHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuXHRcdGNvbnN0IGxpc3QgPSBzdXBlci5vYnNlcnZlZEF0dHJpYnV0ZXM7XG5cdFx0bGlzdC5wdXNoKEFUVFJJQlVURV9GT1JNX1VSTCk7XG5cdFx0cmV0dXJuIGxpc3Q7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdFtpbml0TWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlcltpbml0TWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0Ly8gZGF0YS1tb25zdGVyLW9wdGlvbnNcblx0XHR0aGlzW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfRk9STV9VUkxdID0gKHVybCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCkpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJ1cmxcIiwgbmV3IFVSTCh1cmwsIGRvY3VtZW50LmxvY2F0aW9uKS50b1N0cmluZygpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwidXJsXCIsIHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBkZWZhdWx0IHNsb3Rcblx0ICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcblx0ICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGFcblx0ICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcblx0ICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuXHQgKiBAZmlyZXMgbW9uc3Rlci1mZXRjaGVkXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLkZvcm19XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1yZWxvYWRcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2FkIGNvbnRlbnQgZnJvbSB1cmxcblx0ICpcblx0ICogSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgdGhhdCB3aXRoIHRoaXMgZnVuY3Rpb24gdGhlIGxvYWRpbmcgaXMgZXhlY3V0ZWRcblx0ICogZGlyZWN0bHkuIGl0IGlzIGxvYWRlZCBhcyB3ZWxsIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IHZpc2libGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gdXJsXG5cdCAqL1xuXHRmZXRjaCh1cmwpIHtcblx0XHRpZiAoaXNTdHJpbmcodXJsKSB8fCB1cmwgaW5zdGFuY2VvZiBVUkwpIHtcblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCwgYCR7dXJsfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsb2FkQ29udGVudC5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBgYGBcbiAqIDxtb25zdGVyLXNlbGVjdCBkYXRhLW1vbnN0ZXItdXJsPVwiaHR0cHM6Ly9leGFtcGxlLmNvbS9cIj48L21vbnN0ZXItc2VsZWN0PlxuICogYGBgXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkge1xuXHRjb25zdCBvcHRpb25zID0ge307XG5cblx0Y29uc3QgdXJsID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKTtcblxuXHRpZiAoaXNTdHJpbmcodXJsKSkge1xuXHRcdG9wdGlvbnNbXCJ1cmxcIl0gPSBuZXcgVVJMKHVybCwgZG9jdW1lbnQubG9jYXRpb24pLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKSkge1xuXHRcdG9wdGlvbnNbXCJyZWxvYWRcIl0gPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9SRUxPQUQpLnRvTG93ZXJDYXNlKCk7XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgZGVmYXVsdCBzbG90XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gcmVxdWVzdCBmYWlsZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEBmaXJlcyBtb25zdGVyLWZldGNoZWRcbiAqL1xuZnVuY3Rpb24gaW5pdEludGVyc2VjdGlvbk9ic2VydmVyKCkge1xuXHRpZiAodGhpc1tpbnRlcnNlY3Rpb25PYnNlcnZlcldhc0luaXRpYWxpemVkXSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZF0gPSB0cnVlO1xuXG5cdGNvbnN0IG9wdGlvbnMgPSB7XG5cdFx0dGhyZXNob2xkOiBbMC41XSxcblx0fTtcblxuXHRjb25zdCBjYWxsYmFjayA9IChlbnRyaWVzLCBvYnNlcnZlcikgPT4ge1xuXHRcdGZvciAoY29uc3QgWywgZW50cnldIG9mIGVudHJpZXMuZW50cmllcygpKSB7XG5cdFx0XHRpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcgPT09IHRydWUpIHtcblx0XHRcdFx0Ly8gdW5kZWZpbmVkIG9yIGFsd2F5cyBkbyB0aGUgc2FtZVxuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJyZWxvYWRcIikgPT09IFwib25zaG93XCIpIHtcblx0XHRcdFx0XHRvYnNlcnZlci5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGxvYWRDb250ZW50LmNhbGwodGhpcykuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGNvbnN0IG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGNhbGxiYWNrLCBvcHRpb25zKTtcblx0b2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgZGVmYXVsdCBzbG90XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gcmVxdWVzdCBmYWlsZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBjbGllbnQgZXJyb3JcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICogQGZpcmVzIG1vbnN0ZXItZmV0Y2hlZFxuICogQHJldHVybiB7UHJvbWlzZX1cbiAqL1xuZnVuY3Rpb24gbG9hZENvbnRlbnQoKSB7XG5cdGNvbnN0IHVybCA9IHRoaXMuZ2V0T3B0aW9uKFwidXJsXCIsIHVuZGVmaW5lZCk7XG5cdGlmICghaXNTdHJpbmcodXJsKSB8fCB1cmwgPT09IFwiXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHVybFwiKTtcblx0fVxuXG5cdGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcImZldGNoXCIsIHt9KTtcblxuXHRsZXQgcGFyZW50Tm9kZSA9IHRoaXM7XG5cdGlmICh0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHRwYXJlbnROb2RlID0gdGhpcy5zaGFkb3dSb290O1xuXHR9XG5cblx0bGV0IGNvbnRhaW5lciA9IHBhcmVudE5vZGUucXVlcnlTZWxlY3RvcihgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRhaW5lcl1gKTtcblx0bGV0IGN1cnJlbnREaXNwbGF5TW9kZSA9IGNvbnRhaW5lcj8uc3R5bGU/LmRpc3BsYXk7XG5cblx0aWYgKGN1cnJlbnREaXNwbGF5TW9kZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y3VycmVudERpc3BsYXlNb2RlID0gXCJpbmhlcml0XCI7XG5cdH1cblxuXHRpZiAoIShjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdGNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdFx0Y29udGFpbmVyLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSwgXCJjb250YWluZXJcIik7XG5cdFx0cGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuXHR9XG5cblx0cmV0dXJuIGxvYWRBbmRBc3NpZ25Db250ZW50KGNvbnRhaW5lciwgdXJsLCBvcHRpb25zLCB0aGlzLmdldE9wdGlvbihcImZpbHRlclwiKSlcblx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRpZiAoY3VycmVudERpc3BsYXlNb2RlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0Y29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBjdXJyZW50RGlzcGxheU1vZGU7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdHRocm93IGU7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdHJldHVybiB0aGlzLmlubmVySFRNTDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFJlbG9hZCk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEN1c3RvbUVsZW1lbnQsIGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sIH0gZnJvbSBcIi4vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgQ3VzdG9tQ29udHJvbCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhdHRhY2hlZEludGVybmFsU3ltYm9sID0gU3ltYm9sKFwiYXR0YWNoZWRJbnRlcm5hbFwiKTtcblxuLyoqXG4gKiBUaGlzIGlzIGEgYmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgY3VzdG9tIGNvbnRyb2xzIHVzaW5nIHRoZSBwb3dlciBvZiBDdXN0b21FbGVtZW50LlxuICpcbiAqIEFmdGVyIGRlZmluaW5nIGEgYEN1c3RvbUVsZW1lbnRgLCB0aGUgYHJlZ2lzdGVyQ3VzdG9tRWxlbWVudGAgbWV0aG9kIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBjbGFzcyBuYW1lLiBPbmx5IHRoZW5cbiAqIHdpbGwgdGhlIHRhZyBkZWZpbmVkIHZpYSB0aGUgYGdldFRhZ2AgbWV0aG9kIGJlIG1hZGUga25vd24gdG8gdGhlIERPTS5cbiAqXG4gKiBUaGlzIGNvbnRyb2wgdXNlcyBgYXR0YWNoSW50ZXJuYWxzKClgIHRvIGludGVncmF0ZSB0aGUgY29udHJvbCBpbnRvIGEgZm9ybS4gSWYgdGhlIHRhcmdldCBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0XG4gKiB0aGlzIG1ldGhvZCwgdGhlIFtwb2x5ZmlsbF0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGwpIGNhbiBiZSB1c2VkLlxuICpcbiAqIFlvdSBjYW4gY3JlYXRlIHRoZSBvYmplY3QgdXNpbmcgdGhlIGZ1bmN0aW9uIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KClgLlxuICpcbiAqIFRoaXMgY29udHJvbCB1c2VzIGBhdHRhY2hJbnRlcm5hbHMoKWAgdG8gaW50ZWdyYXRlIHRoZSBjb250cm9sIGludG8gYSBmb3JtLiBJZiB0aGUgdGFyZ2V0IGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnRcbiAqIHRoaXMgbWV0aG9kLCB0aGUgUG9seWZpbGwgZm9yIGF0dGFjaEludGVybmFscygpIGNhbiBiZSB1c2VkOiB7QGxpbmsgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGx8ZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGx9LlxuICpcbiAqIExlYXJuIG1vcmUgYWJvdXQgV0lDRyBXZWIgQ29tcG9uZW50czoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL3dlYmNvbXBvbmVudHN8V0lDRyBXZWIgQ29tcG9uZW50c30uXG4gKlxuICogUmVhZCB0aGUgSFRNTCBzcGVjaWZpY2F0aW9uIGZvciBDdXN0b20gRWxlbWVudHM6IHtAbGluayBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jdXN0b20tZWxlbWVudHMuaHRtbCNjdXN0b20tZWxlbWVudHN8Q3VzdG9tIEVsZW1lbnRzfS5cbiAqXG4gKiBSZWFkIHRoZSBIVE1MIHNwZWNpZmljYXRpb24gZm9yIEN1c3RvbSBFbGVtZW50IFJlYWN0aW9uczoge0BsaW5rIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvZGV2L2N1c3RvbS1lbGVtZW50cy5odG1sI2N1c3RvbS1lbGVtZW50LXJlYWN0aW9uc3xDdXN0b20gRWxlbWVudCBSZWFjdGlvbnN9LlxuICpcbiAqIEBzdW1tYXJ5IEEgYmFzZSBjbGFzcyBmb3IgY3VzdG9tIGNvbnRyb2xzIGJhc2VkIG9uIEN1c3RvbUVsZW1lbnQuXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE0LjBcbiAqL1xuY2xhc3MgQ3VzdG9tQ29udHJvbCBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhlIGNvbnN0cnVjdG9yIG1ldGhvZCBvZiBDdXN0b21Db250cm9sLCB3aGljaCBpcyBjYWxsZWQgd2hlbiBjcmVhdGluZyBhIG5ldyBpbnN0YW5jZS5cblx0ICogSXQgY2hlY2tzIHdoZXRoZXIgdGhlIGVsZW1lbnQgc3VwcG9ydHMgYGF0dGFjaEludGVybmFscygpYCBhbmQgaW5pdGlhbGl6ZXMgYW4gaW50ZXJuYWwgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnRcblx0ICogaWYgc3VwcG9ydGVkLiBBZGRpdGlvbmFsbHksIGl0IGluaXRpYWxpemVzIGEgTXV0YXRpb25PYnNlcnZlciB0byB3YXRjaCBmb3IgYXR0cmlidXRlIGNoYW5nZXMuXG5cdCAqXG5cdCAqIFNlZSB0aGUgbGlua3MgYmVsb3cgZm9yIG1vcmUgaW5mb3JtYXRpb246XG5cdCAqIHtAbGluayBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jdXN0b20tZWxlbWVudHMuaHRtbCNkb20tY3VzdG9tZWxlbWVudHJlZ2lzdHJ5LWRlZmluZXxDdXN0b21FbGVtZW50UmVnaXN0cnkuZGVmaW5lKCl9XG5cdCAqIHtAbGluayBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jdXN0b20tZWxlbWVudHMuaHRtbCNkb20tY3VzdG9tZWxlbWVudHJlZ2lzdHJ5LWdldHxDdXN0b21FbGVtZW50UmVnaXN0cnkuZ2V0KCl9XG5cdCAqIGFuZCB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHN8RWxlbWVudEludGVybmFsc31cblx0ICpcblx0ICogQGluaGVyaXRkb2Ncblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0Ly8gY2hlY2sgaWYgZWxlbWVudCBzdXBwb3J0cyBgYXR0YWNoSW50ZXJuYWxzKClgXG5cdFx0aWYgKHR5cGVvZiB0aGlzW1wiYXR0YWNoSW50ZXJuYWxzXCJdID09PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdHRoaXNbYXR0YWNoZWRJbnRlcm5hbFN5bWJvbF0gPSB0aGlzLmF0dGFjaEludGVybmFscygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBgYXR0YWNoSW50ZXJuYWxzKClgIGlzIG5vdCBzdXBwb3J0ZWQsIHNvIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdFx0XHR0aHJvdyBFcnJvcihcblx0XHRcdFx0XCJ0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVwiLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHQvLyBpbml0aWFsaXplIGEgTXV0YXRpb25PYnNlcnZlciB0byB3YXRjaCBmb3IgYXR0cmlidXRlIGNoYW5nZXNcblx0XHRpbml0T2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL2N1c3RvbS1jb250cm9sQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHdoaWNoIGF0dHJpYnV0ZXMgYXJlIHRvIGJlIG1vbml0b3JlZCBieSBgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKClgLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmdbXX1cblx0ICogQHNpbmNlIDEuMTUuMFxuXHQgKi9cblx0c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG5cdFx0cmV0dXJuIHN1cGVyLm9ic2VydmVkQXR0cmlidXRlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRpbmcgYSBzdGF0aWMgYGZvcm1Bc3NvY2lhdGVkYCBwcm9wZXJ0eSwgd2l0aCBhIHRydWUgdmFsdWUsIG1ha2VzIGFuIGF1dG9ub21vdXMgY3VzdG9tIGVsZW1lbnQgYSBmb3JtLWFzc29jaWF0ZWQgY3VzdG9tIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBzZWUgW2F0dGFjaEludGVybmFscygpXXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvYXR0YWNoSW50ZXJuYWxzfVxuXHQgKiBAc2VlIFtDdXN0b20gRWxlbWVudHMgRmFjZSBFeGFtcGxlXXtAbGluayBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jdXN0b20tZWxlbWVudHMuaHRtbCNjdXN0b20tZWxlbWVudHMtZmFjZS1leGFtcGxlfVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0c3RhdGljIGZvcm1Bc3NvY2lhdGVkID0gdHJ1ZTtcblxuXHQvKipcblx0ICogQGluaGVyaXRkb2Ncblx0ICoqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE11c3QgYmUgb3ZlcnJpZGRlbiBieSBhIGRlcml2ZWQgY2xhc3MgYW5kIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGNvbnRyb2wuXG5cdCAqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpLCB3aGljaCBpcyBhIHBhcnQgb2YgdGhlIHdlYiBzdGFuZGFyZCBmb3IgY3VzdG9tIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIHZhbHVlIGdldHRlciBtdXN0IGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBkZXJpdmVkIGNsYXNzXG5cdCAqL1xuXHRnZXQgdmFsdWUoKSB7XG5cdFx0dGhyb3cgRXJyb3IoXCJ0aGUgdmFsdWUgZ2V0dGVyIG11c3QgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGRlcml2ZWQgY2xhc3NcIik7XG5cdH1cblxuXHQvKipcblx0ICogTXVzdCBiZSBvdmVycmlkZGVuIGJ5IGEgZGVyaXZlZCBjbGFzcyBhbmQgc2V0IHRoZSB2YWx1ZSBvZiB0aGUgY29udHJvbC5cblx0ICpcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgQVBJXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscyksIHdoaWNoIGlzIGEgcGFydCBvZiB0aGUgd2ViIHN0YW5kYXJkIGZvciBjdXN0b20gZWxlbWVudHMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSB2YWx1ZSBzZXR0ZXIgbXVzdCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgZGVyaXZlZCBjbGFzc1xuXHQgKi9cblx0c2V0IHZhbHVlKHZhbHVlKSB7XG5cdFx0dGhyb3cgRXJyb3IoXCJ0aGUgdmFsdWUgc2V0dGVyIG11c3QgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGRlcml2ZWQgY2xhc3NcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7Tm9kZUxpc3R9XG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL2xhYmVsc31cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqL1xuXHRnZXQgbGFiZWxzKCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy5sYWJlbHM7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfG51bGx9XG5cdCAqL1xuXHRnZXQgbmFtZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoXCJuYW1lXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldCB0eXBlKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmdldFRhZygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEByZXR1cm4ge1ZhbGlkaXR5U3RhdGV9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKiBAc2VlIFtWYWxpZGl0eVN0YXRlXXtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVmFsaWRpdHlTdGF0ZX1cblx0ICogQHNlZSBbdmFsaWRpdHlde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS92YWxpZGl0eX1cblx0ICovXG5cdGdldCB2YWxpZGl0eSgpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8udmFsaWRpdHk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3ZhbGlkYXRpb25NZXNzYWdlXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0Z2V0IHZhbGlkYXRpb25NZXNzYWdlKCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy52YWxpZGF0aW9uTWVzc2FnZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3dpbGxWYWxpZGF0ZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCB3aWxsVmFsaWRhdGUoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LndpbGxWYWxpZGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3N0YXRlc1xuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdGdldCBzdGF0ZXMoKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LnN0YXRlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGlzIGEgbWV0aG9kIG9mIFtpbnRlcm5hbCBhcGldKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzKVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtIVE1MRm9udEVsZW1lbnR8bnVsbH1cblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscy9mb3JtXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0Z2V0IGZvcm0oKSB7XG5cdFx0cmV0dXJuIGdldEludGVybmFsLmNhbGwodGhpcyk/LmZvcm07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBpcyBhIG1ldGhvZCBvZiBbaW50ZXJuYWwgYXBpXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudEludGVybmFscylcblx0ICpcblx0ICogYGBgXG5cdCAqIC8vIFVzZSB0aGUgY29udHJvbCdzIG5hbWUgYXMgdGhlIGJhc2UgbmFtZSBmb3Igc3VibWl0dGVkIGRhdGFcblx0ICogY29uc3QgbiA9IHRoaXMuZ2V0QXR0cmlidXRlKCduYW1lJyk7XG5cdCAqIGNvbnN0IGVudHJpZXMgPSBuZXcgRm9ybURhdGEoKTtcblx0ICogZW50cmllcy5hcHBlbmQobiArICctZmlyc3QtbmFtZScsIHRoaXMuZmlyc3ROYW1lXyk7XG5cdCAqIGVudHJpZXMuYXBwZW5kKG4gKyAnLWxhc3QtbmFtZScsIHRoaXMubGFzdE5hbWVfKTtcblx0ICogdGhpcy5zZXRGb3JtVmFsdWUoZW50cmllcyk7XG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge0ZpbGV8c3RyaW5nfEZvcm1EYXRhfSB2YWx1ZVxuXHQgKiBAcGFyYW0ge0ZpbGV8c3RyaW5nfEZvcm1EYXRhfSBzdGF0ZVxuXHQgKiBAcmV0dXJuIHt1bmRlZmluZWR9XG5cdCAqIEB0aHJvd3Mge0RPTUV4Y2VwdGlvbn0gTm90U3VwcG9ydGVkRXJyb3Jcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvc2V0Rm9ybVZhbHVlXG5cdCAqL1xuXHRzZXRGb3JtVmFsdWUodmFsdWUsIHN0YXRlKSB7XG5cdFx0Z2V0SW50ZXJuYWwuY2FsbCh0aGlzKS5zZXRGb3JtVmFsdWUodmFsdWUsIHN0YXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gZmxhZ3Ncblx0ICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBtZXNzYWdlXG5cdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGFuY2hvclxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FbGVtZW50SW50ZXJuYWxzL3NldFZhbGlkaXR5XG5cdCAqIEByZXR1cm4ge3VuZGVmaW5lZH1cblx0ICogQHRocm93cyB7RE9NRXhjZXB0aW9ufSBOb3RTdXBwb3J0ZWRFcnJvclxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIEVsZW1lbnRJbnRlcm5hbHMgaXMgbm90IHN1cHBvcnRlZCBhbmQgYSBwb2x5ZmlsbCBpcyBuZWNlc3Nhcnlcblx0ICovXG5cdHNldFZhbGlkaXR5KGZsYWdzLCBtZXNzYWdlLCBhbmNob3IpIHtcblx0XHRnZXRJbnRlcm5hbC5jYWxsKHRoaXMpLnNldFZhbGlkaXR5KGZsYWdzLCBtZXNzYWdlLCBhbmNob3IpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvY2hlY2tWYWxpZGl0eVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKiBAdGhyb3dzIHtET01FeGNlcHRpb259IE5vdFN1cHBvcnRlZEVycm9yXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuXHQgKi9cblx0Y2hlY2tWYWxpZGl0eSgpIHtcblx0XHRyZXR1cm4gZ2V0SW50ZXJuYWwuY2FsbCh0aGlzKT8uY2hlY2tWYWxpZGl0eSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgYSBtZXRob2Qgb2YgW2ludGVybmFsIGFwaV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMpXG5cdCAqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnRJbnRlcm5hbHMvcmVwb3J0VmFsaWRpdHlcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBFbGVtZW50SW50ZXJuYWxzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGEgcG9seWZpbGwgaXMgbmVjZXNzYXJ5XG5cdCAqIEB0aHJvd3Mge0RPTUV4Y2VwdGlvbn0gTm90U3VwcG9ydGVkRXJyb3Jcblx0ICovXG5cdHJlcG9ydFZhbGlkaXR5KCkge1xuXHRcdHJldHVybiBnZXRJbnRlcm5hbC5jYWxsKHRoaXMpPy5yZXBvcnRWYWxpZGl0eSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGBmb3JtYCBhdHRyaWJ1dGUgb2YgdGhlIGN1c3RvbSBjb250cm9sIHRvIHRoZSBgaWRgIG9mIHRoZSBwYXNzZWQgZm9ybSBlbGVtZW50LlxuXHQgKiBJZiBubyBmb3JtIGVsZW1lbnQgaXMgcGFzc2VkLCByZW1vdmVzIHRoZSBgZm9ybWAgYXR0cmlidXRlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxGb3JtRWxlbWVudH0gZm9ybSAtIFRoZSBmb3JtIGVsZW1lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIGNvbnRyb2xcblx0ICovXG5cdGZvcm1Bc3NvY2lhdGVkQ2FsbGJhY2soZm9ybSkge1xuXHRcdGlmIChmb3JtKSB7XG5cdFx0XHRpZiAoZm9ybS5pZCkge1xuXHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShcImZvcm1cIiwgZm9ybS5pZCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucmVtb3ZlQXR0cmlidXRlKFwiZm9ybVwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBvciByZW1vdmVzIHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZSBvZiB0aGUgY3VzdG9tIGNvbnRyb2wgYmFzZWQgb24gdGhlIHBhc3NlZCB2YWx1ZS5cblx0ICpcblx0ICogQHBhcmFtIHtib29sZWFufSBkaXNhYmxlZCAtIFdoZXRoZXIgb3Igbm90IHRoZSBjb250cm9sIHNob3VsZCBiZSBkaXNhYmxlZFxuXHQgKi9cblx0Zm9ybURpc2FibGVkQ2FsbGJhY2soZGlzYWJsZWQpIHtcblx0XHRpZiAoZGlzYWJsZWQpIHtcblx0XHRcdGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSkge1xuXHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIFwiXCIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSkge1xuXHRcdFx0XHR0aGlzLnJlbW92ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1vZGVcblx0ICovXG5cdGZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhzdGF0ZSwgbW9kZSkge31cblxuXHQvKipcblx0ICpcblx0ICovXG5cdGZvcm1SZXNldENhbGxiYWNrKCkge1xuXHRcdHRoaXMudmFsdWUgPSBcIlwiO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVxuICogQHRoaXMgQ3VzdG9tQ29udHJvbFxuICovXG5mdW5jdGlvbiBnZXRJbnRlcm5hbCgpIHtcblx0aWYgKCEoYXR0YWNoZWRJbnRlcm5hbFN5bWJvbCBpbiB0aGlzKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFwiRWxlbWVudEludGVybmFscyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBhIHBvbHlmaWxsIGlzIG5lY2Vzc2FyeVwiLFxuXHRcdCk7XG5cdH1cblxuXHRyZXR1cm4gdGhpc1thdHRhY2hlZEludGVybmFsU3ltYm9sXTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7b2JqZWN0fVxuICogQHRoaXMgQ3VzdG9tQ29udHJvbFxuICovXG5mdW5jdGlvbiBpbml0T2JzZXJ2ZXIoKSB7XG5cdC8vIHZhbHVlXG5cdHRoaXNbYXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2xdW1widmFsdWVcIl0gPSAoKSA9PiB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJ2YWx1ZVwiLCB0aGlzLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpKTtcblx0fTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBCdXR0b25TdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBCdXR0b25TdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0QnV0dG9uU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBidXR0b24geyBcbltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnksYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5LC5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnksLm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9YnV0dG9uOmFjdGl2ZSxidXR0b246aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31idXR0b246YWN0aXZle3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfS5tb25zdGVyLWJ1dHRvbi1iYXIsLm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2FsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOnN0cmV0Y2g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5tb25zdGVyLWJ1dHRvbi1ncm91cHtib3gtc2l6aW5nOmJvcmRlci1ib3g7Z2FwOjA7bWFyZ2luOjFyZW0gMH0ubW9uc3Rlci1idXR0b24tZ3JvdXA+Om5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLXJpZ2h0OmNhbGModmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKi0xKX0ubW9uc3Rlci1idXR0b24tZ3JvdXAgOmhvdmVye2JveC1zaGFkb3c6bm9uZX1idXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmxpZ2h0KXtidXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX19Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UmFsZXdheTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBRko0QUJJQUFBQUF0M0FBQUZJUUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR29FOEcrNDZISVU4Qm1BL1UxUkJWRVFBaFFnSWdRb0pueFFSQ0FxQnVneUJtbkFMaENJQUFUWUNKQU9JUUFRZ0JZVVVCeUFNZ3h3YmZhUVhhSmVmbU56MFpvbDN2NjBjUGVaTXBHNEhKU2prNXFJSU5nNkNHTWdsWmYvL24zRjBqT0dHRFJBMXJYZUluY0pJVWtOSEduNjlxTVJEVThaYWpqczlVYnNtdG5xbkUzdjN2cWlRbWZSUXBMa0tXNlFad2FsNnM1SVVpSk5VU1VHL093b0RZNkI2NzVPalNqa0RTU011MnBlZHB1OXZKSUxVbEpkNzA3RCtlTEhwallESTRlMXVEbkxqSEh2eHBEWEdNeWR1TExuMXF0MEZDUU95RnNKWkUxK2tKcTNUK0llN0JKRklOT0FOYmk5dlRVemhJN1c0R21VTDBsV2pUL0ZRUWkvbSsreHVQUDAyb21SSGU1cG40RGdmTlpmbitSOXo5Nzl0bUVlTmFxMVJ4UnFIVGpUUE5BMkpGRWdySGRvL250L1cvNXpiZ0dDeGlhNkVrVmlBMkZoWUdJdFJtRTFadlZVdnF0U3RiN012cmQzVzcrdDIrMFhkb1RuenpqWWJwN21TSExBQ2toTVdnQ1RMNnMwV3YwQVVvaEpmRXFFM29wUGQ1OGlrSm5LbG8rM3VhZVNIWUo2ZmNJY1hqZCtyS1VFc2FFbFRxbFVsVlJtL04rZS84aVAwTDVBS296TmxKMy85aUJ3c2hNNnY1SklVSnlrZ1QzZmRyT21xNkxjcytaK3EvWHNBWEZ4RUVpUUlVYUtvc0ZuN2N0VCs3QkJTNWRxRG9sSlh1bmJsN3J0dHpEL3YzODRMZnRKYWdGRkFMWVBFNUE3Z25NclpCaHQ0bFhxc2JaS21iZHEwVHRPbXBtZ05pdWdNMlBZQmM3M01yanE3R0xzb1hIY1RwdDl1UHZGRHo4ZU4zZytzeHJQUUF3NkRURk5wL09aSTlpaW5OaXRaaFJtcFFPQ2tkb0JkQU5qVldsYXZNaXR3RE5KWC9wWUlBa1Z3bk9QL3ZXNXh6b013N1NBRkFLVStaei9rblAvWjlqK09kZnJMOEtlMnZkS2JtcGh1eEpTdUw4RVVBZ2dISWlCSFArNDQ0RUR6djFQVFEzWWtPY09TbFRIbWo2VXNkZm8yTCsvanBZZTdJSFdjUVVnY2drcExGUjFZVFc4Q0dLUVg5YjhHRkFBQUg5dG80UkhRNkdMdkZScmk0RGl3VHpBQURETUtEUHIvZlozVi9xZGdQbWtHektURW1XRVhiN1EzdHRnVFlxbzJuUDYvKzk3WGYrRi85SkhBVnNJSWNBQ0Jad1J5a0dUN2dDUjhWb2hKY1VPT1NEamlTYkFwaE1vem0ySlJwdEJ0VVc2OVhiTkZHM0lWeTJLTG9rNDgvTGZzbTUyN0lhcUJMTXVCYk9GSXdlRlVkMDF2ZUwrWTh4V2h0emNxVG0yQ0lUYzVlTEp3U0k0ZllsTFlGSVZIQXMvL1Q1M040L1l4MWhLR1UrSFNxRXJkcFBQbnM2ZnFxV0pzTmJaYUNsUXRqbE9MVU1zaGNkb0E1VFFzczRKTGM5MFN4Q09NTVVLNEtQOU5zaHB6cFg0dnd4S0NoQ0FTUkVSRS9MS3NXUmxKd05LQWNUblhBaEV5M3IxS0hjWmEvWWRYNTg0MjAvaWFYbXRHaG9DQWlJaUFSMjN2L1A5K0tUQUNBTjVoZGtDM3hVQzRFTHNnZ3ZrUjJrckVqWVNFdjBCS1NtSENoSXZZT0NBSmtLUWd5WU1NMlFvVU16Q28xNkJKODVxQVdDQ2RIZWszQUIwT0RMMUxxMFBnVGUzaFN3MmZoaTRYaFB1ZXVRV0VINnh0SUVRQWJHMk5tNW9WNTRRRlAreUtnTzJENFQ1dC93ejJYVzkyL3JwcXBMVFNJUDhxVjl2THZPZHMwTkxXeVg1MUs2b2ZidlBaRTFwYWY3dzMxOEM5WnRocTdmMzJiZnVMNjRWWkh3NTE0WXNtNWxnZk5iZkc3Vzlsc1VBNEVHejcyM3Z4d0d6cDRmUlIrbVA4THM1QjdLQjJlREpYYzZ4d2xHNjkwMnVnN0F6TEE4TlkyMUIyZEIvUDVxZk9WOHQxb255TDVqWkREZlFJNVJnOEQ5OEZ2SHN2Y2xIdUpzcmR2c0pycGMvVHIvZ3UvRWZaSnpYVXpwV2FEajdNNytVUDgvOEVrQUFWYUFTL0NSK1hzL0pONFlhSWNPMXhIWmNVYU1NYmtscnBLeTdOZlFKS1FjVVJhZ29HbUNXK0hBNkVOdmJnMzNzbDJwSVlSbUU5YklIYjBtQTZrazZsTjVHZHlNTjVFYm1RaHhIS2x3TWdUNThjZ3c3cGRVUno3bmZNY1FmY1UzdkljelZrZHJoWDhYSHE0MDEydEZPZDdrVC9hN3A3bTgzV0E3MUY3YU85TStkanZkZDZqN2Z4bStEMVB1M3ozdWlydm11eXphNTN0cnY5M2xUYjgyUlQyS2FGVlVLTU5QMzZCdlFNQ28wR3NFZGtMOHMrekxnMUV4Yk0wTmdDV0F4Z3pmODJERzFLWE1mYzRyak5jUWZIS3hTQ3VSdUJJNUFvZERERGtHZFY4Q25WVkVtRU1haW40U2EwQVhUSTBSQk5wT1lBTFZxMWFWOXZ4SmlVekhLV0NpczZtcDBCdWt4MDY5R3I3NHNuVk5ic29DbWtWTW9wNStwREdhV3oyc0xEcjJpTnQrb1pPMGIzNllTSWpXY3h2bmxOMHgwVmhsWW9XNFVSalhYS3lMRzNZM3FvTGRFYXpIQUVFb1Z1TWwzRERlRVJWcEcvamVURVIwQ1VaRVUxbW90cUZvaXdKRktVYURGaWFjU2xCSnJFalNRS0ovQ1NGU21TS2sxNjFRbGtkS2V5U1hZenNkWEtpNkk5aWtOSk10Q1VLbE91UXFVcTFWSFQxenE2K2x6ZlFOQUlhNUpwUm92V2FFUDdaeHVObVRqTUxCWXVxM1hVVGdOZFJEZDZVcTlBMzNjYnhBenhERE9OMEl4YU5WYXhkLy9zL2FqeEFFNkpuUGJGR1prdUMzdWFOVThFc0RTTFpWbXhPajFQZDhIUXhYU3BlZGtYYXdiVzZ3Wm84KzZEcml1UUZGdzVJcHZuSmg2L1pnRkpLOTMwYUVNMlhKM3lKQjBESG9waGJxZzB1cmt2TUlnWWx0YkdSUGNka2Q3VmovTlY0cGJBYmErL0U0QmpDZzlwNVplcmkvcGRNMENHLzd0WFpOeFZFKzZiWWF2UW42dW1Xd3kzRlhmNmdnK1huQXRIRGdqa1BOaVVicXBvd3ZEVXZiUmxjajVYWkhZelY4Smk0TmwxdmpzT2hyTWF4T0h4ZUR3ZWp6L1ZJSEpYbjZIMHdoZzZxRk9FVXFRbzBXTEUwb2hMQ1RLSjB5UTVMVTl5UlFwU3BVbGZabkFTQmtXcGxDbFhvVktWNnFpYlRCdE1tUUtZWVdIVlVVZnRHSXQ2Mmxkbk1IM0VwaVUwcVZRcUhiQ0x4T1UrRTQvMVhMZkJFaHpLaGdVY2dVU2hmeHdtRHo5RzVFUkFBSEw3RkhSS1F5cm53dXhRZjVyaEhCRUJSSW9TTFVZc3pVYmM0cnRNZHBsMjZGZ2Q1NXRnUUc4eC9mQVoySnpJdkdibWxyY1hBbTN3WEthN0VsZlBjUzJ0eGZxK2VnZmlIR29ETXh5QlJLSHZ5M1NKMzBRNlY4KzZtZGZac2FGVjNlT1VLc1dNeW5raHlMMXU0VkkwTDFTSkxJeFh5WXpwTHlOcWlXejBYVHBrYVR5bjFaRHRpOTBtWTAydjB0VXF0elNDbCtxcks3ckl1djF2OVJEMHNneHFHYkpvR0dmRWtsRTFZenIyOE8xbDJLZXdYOU40QURhTjFiN0wwSWFSVFhPdXk5eWl1ODJwT3dIUUJDK3BsZENyT21LME1nL3IxdlJZRW0zREJFY2dVZWdtVXgwM0c0K3dpdFFnT2ZFUkVDVlpVWTNtNHRtRUl2d1VLVXEwR0xFMDRsSUNUdUkweVRxdEZjbEVDbEtsU2E4NldFWjNKSnZzRldpN0l4S0pPQndPaDhQaGNFVHJSTjN0RHBsTUpwTmhSSWFpcUFpR1lSZ21jYmtzeTROb3ovcm9mUUw3S2NhbE5EMEZPVzNSR1p1T0JSMnhtVk14a1Vna0RsMFg3dUppdXRTOGJOR2FFK3YvWlFPd3FlODZHSUllRXNDdW92V1lmQ3EydHZwTU9CTjdNek82OEdXWExodG1nVzJmZmVIcDFNdTdxd1g1TkR3VGtwQ1NjZWZCa3hkdmZpbkFSSVJJVWFMRmlLVVJseElBaVpFMHJWcTY1SW9VU1pVbXZlcVVNcnBzL3oxWldFWjVZQmdHQUFBQUFBQ0EwV1pzZDFDcCtIdytuMi9jT2xrNHJEcFNsMUszSHIzNmpnMUNUdHd6T2NOdUNYWU5naURZaG90SDFvZ09MUlN1eDhuaWw0cjJpWWF2MG5vcnpYdloyblpqWkxmYUtEK1ZSZ0gvZmdObXBrRmJoZ2lHaVVhY0dmWE5tSzQ5RlB2WTl0dmJjVG03NSszZmRhbVc2WVN0d2tkemFDSFpjdnEwQ1M0aVU1Wm1OeExYR0JlL3JRb0hqTVAxL1FFR1ZNWkZKZ2JEREovNVQzZXlCY3ZHUFNxVGltSmNDK1lRVWpxR3YybkM3cTNuQjBET3F2MkczVnZsSWhLSVc4TVJTQlM2eVpUaU5HRlgrUkdDREhzOFBZSWRUamRBVUF5dlFrd1NDcHBoTmQyMG1wdU1qUVhLQlFrV0lqUXBtSlJVS1l4S1hjTERjNmtJZkhhVEthT01TYzRNc1ZSWVEwZXpVNkZMcFZ1UDN0TEh1d3ByWWZ0aGl3aUhGQVdrU3BtV1J0KzZuSjZVMThDdXlKODVqMngwYjBkN045cGlicTBsYjROblUrcE83dEVVTGloZFVPMmhycHRnWVhDc3hCRkEzbFEybm1GYzNGYlJqR0JnQ2Q2QlVIN3FuWEJiYWNqc0s5OVJmSURNQUZrQnNvTytuWmc4UDBCQmdNSUF0UUVhbjlXUUVzOU1BSE5HODU1NHdhK0FybnF2VFRqcEdTN2UvaWxQbWpBUlBtbnN4V2tkQUFSeU9MOXlBaHlteDdTR0tsazdHaDQ4dkR2TmZkZytJVEJacEQ5Z3pnTUlCd3dCazV0bWtFWElxcU1NYUVUZy9IVWUyNm9MVFRwNHc0ZzlVa1o1YmdieEVIdEN5VExZUEhtSlVxM3VKcHF6dlNOY3VtYkJkWFlRc2t1MUM5Mk44alR2REZFVTBydjgxN2dtcXNHalBmUnVOanZlclREbUhDRTRxK3Fiek9qdUlJdlJhRGh6WjEvVkpVcGhoaU9RS0hRd3NaNVRqZ3VBQjhDdUtyK1lJTUtld0lvTU81eHg5ZTRBRUJURFNZcG0yT1R5OG9Jb3lZb2FqZWpVUWI4SndEL1hCNWlTc3dVaWdoQXNSR2hTMENnekp6WE1DVFUxWEVaSGFUQVhUQ1FTaWNYYlk0VkNvUmdMRXhzdGxkQ3R4WjFhVW5sdXRHaHRPUXQxOC9SVWRWcGtEQnZiUzRuRW9ORm9OQnFORmlkWG4wV0pMSkNyVThDVWJxcU1oWkdwbStGOEViQklVYUxGaUtVUmx4S0VFaVZWTFZOeVJncFNwVW12dWdBWmhBR2x5cFNyVUtsS3RicG1BNndyUUxjZXZmcWFFN0RUV3M2WUhtMEUyZGNsaVdXc1dFM25tUzdHNWI2dUdWblBuTnV5eVdiSHd4RGpwV2s2TStqMjBlWU1MUS8wM1ZNbUttNFpuZ2xKU01tNDgrREppemUvS3JkQ2tWTWxLc3lJbW1lWmYwR1F5d0pCRUZ4Qy9yZ2dDSUlnQ0lJejkwYkRFd01UajhmakFVQXhkUzZWc0RjczFnOHdmWUNYck5kOThTSDhnYWprNXZ1VVBxZzRYRFA5Sm03b0dXdkdYeFNkRUxMZnJzRVNFc21XWFRjTTNjTHRIRlNHYlNIQkFqY0NpVUlYSnFIbk1sT0xSQkxhc25VSzJTdXgxenFuTUIvWk1HT3gvelB1OG9oREFEQUFPQUFDQUFtQUFrQURZSGdsQ2tDdUxWQWlTSUtGQ1Awa2hXTktQRlV3YmR5TCtzREJ5ZWdrYUoyV0VNdFdyRTYvNHZwVzdHNmU0bUR3MEJmeFpoRnQ5R3ZmaFBFQW15ZDRjTXRVcXNQbDRheTdHdWFrNXQwTjUyT093SmFCZ1NOSHNrMk5oN3FFV1pZVnE4ZStrc3hqajNFS1NYZzhMTmlsUXFGUXpFMWZ2NXR2cFFRRnRGSW15THRpdlRlV2tRQ2s1WlJlMlFpSjJackxZRFY4Nk1CWVdYNXhBUHVuazF5bnRaMng2YWJOcmlYQXNoV3JjZmtVNjN5L2ovbStnbnpOOEkzWXR4emZDZU9pQVBpN1loMXdCQktGenM3MldybGlmV2IzbitzT21rU2l6WEhUWHBtdkFuT2dlYSs3UzhGMUVIUDhuVTRJbkZZNFE1bVdwM0JBTGxlc2E3Qno0RnVPYkU0RVhSbml5azhodENPaWs4dmxjc1dZSUtyNC9jSE0zWFhJY2N5T0RzQlhIOVIzTklCalVzZDFmaWRqMGlpbkg1cmlaZlVPRFRpRlF1bHplYXg3K2pIWlZ5eGYzOFUzeExkcitVN3U0M0g1OUtlZ0s5NUp2d3Z5cW4zSWd4THlVRzJZNFFna0N2MUJURCtJdkNNUE1nMGxWWVJCblNJUWthSkVpeEZMSXk0bENDVDJobTBzRUFnRUpURHJxYjRnSjJKWW96U1VLVmVoVXBYcWJOclorWmhlamIrNXJIckd6Y2NMUWhKU011NDhlUExpemEvS3pRbk1DRUt3RUtGSllZR3lOeUsxbHRKVS9KNldtRnhVcUxzSW5YU3MzNHM0QUpuVE5QOUpWODFaVzA4YndveHdqTW9HZysxZ1BQeHdBTWVaa0JFRStWc3Vwc3hvOWNXUzVpdm5hU1VwRkpRMVRFYnRleUtqTUFMbFNRaDZSSzNnQ0NRSzNlUVU0amJFQzd1cS9BeUNESHVDQlFUc2NNYlZ1d01VQkJURFE5eVFGTTJ3eVJueUVTeEtzcUpHVTNSaUVEUFhMOURaNUY0SXBBdVNZQ0ZDazhJR1pWTUZDZE9rTHVFMUlLVkZsR2d4WW1uRU5lTkJDVlNKa25KRWorU01GRW1WSnIzcW1ES0l6R2xrU2JiZDlITGsxZngrM2UrVkNwbUtvaGdseVVCVnFreTVDcFdxVktjYVVHM1VsZnBva01iYXhOQXNMVnExYVU5R0lsT2Z2SmxNcHBqSlpESmJSanRhTldrL3J6V29NSUlhTldlc2F1dDAzeU1PMlB4SUk2TUJFOTFxZm9EeXhDU3dnQ09RS0hTVDZRVnVEaDVoRlhscHRyZ01qeUJLc3FJYUwxN0djZGtBNThBOGdDWS8zMlBMYndrbkNRQkFObXRDdzZOb0JyVklxemJ0T1VzV1U0MDVsQ3daMXREeDVwMW83VEVkSkJnU0dMNzc3QkVqbzk0YW85b2p0SzlidjUvaEFNOFJhNDZTamdtZGVMek5ETWhpVUhudTdRbUREQlorSVVGaVRjSm9IY2xJa1NwTittWkdjVGNINUljQnBjcVVSMFdvVktVNjZxWjN1c2VnRjNtbitiRmxyaXE5Qm1tblY3UGI3RzBSdENhc093S1FaRWdoNDg2REp5L2UvSjZKcnoycnZ6MTE4UGs4UHAvUDV5LzlOUEppcjlnSnd5bEtyVXk1Q3BXcVZFZmRWRk50aHJXZ1ZadjJaSVNZZXJlQm9KZEhLZWFlZzBKN1VCZXFSOFNPMWFuM3BGQU1LTHdJdFZTSisrRm1uaUhFc0ZFUVcrcGVrb001SHFmNTBseEJMTHY5ekNNQVpUUFExN245WDVrSEZYN2M2UTJKdmIrS1NJc1NMVVlzamJobXZKRUVXeExISkRYTVNLNUlrVlJwMHF1T0lLT0x6R2xrU2JiZDlITGt5VmVnTUJXNVVLd2tHV3dwVmFaY2hVcFZxcU9tajlwNXFsTlQzLy8xeHNpQVJDS1JTQUJBQlFEQWdFQWdFRjRrY0hQQTR5L2YybTdZR281QW90Q1ZTU0lhVGVWR0ZBQWx4MVJJWlJ2R2M1ajBKSWVvY3h6enBLdGNheWN4STFoU3lWKzYxL0dDd3V6QU1mUU13NkxUS2Q4b3NGQWNyTlZEUEllRnM2TEhGeGxOeXRpZURqYjhHT1FRYmhTSXRqMDJnSWc4T1ZiVWZnRi9HdGthQ3NNTVJ5QlI2RDU1bWNQakxiWWtJOEowd0p3WGYvTTFubzlkalRWZFdocGlENE1qa0NqMEdZWTZrWTFONVE0RUtnVWhXSWpRcE5DamJLb1NDTk9pWG9aYlZGOS96c0xkR1lHZ1ZiTXp3Snd6OCttcVUyc2pZMUJyY2psM2ZHL3NmejZxN29nMlkzNHZmcGRVaGUvQ1oySEg4eUFBL3hROEQzbXlBSUROQVZzQ0FKYlpueGkyY0g1czJjUkp3VmFPbTJXV3N0UEdaeFlaQTFLSVI3bXQzQXpBbXRrRlVJNWlsRGNBbTJRd29qRlhCNnIzSXNCeVZxNWwrdE5hYmN0ckYrUXJBUStsa2lVV3ppSEdLV2M1dTFGVWRNS01obnhpeG5BVTRsa2FBbm8vbmh1U2NFbkhyUTZRRWRvUjJGSVE0R0ZuWUhrZkJnSlR3Tmw0MnJRSDdkVjZJQkt4NEdESVBUU1BBdFlIY3VhL1V6ZVAxZXBaSk5hdE9BU3FGRVFrWUNXU2pLb21jdko0US9sWW1SNmJXaUVXV1ZJRkFOYUlUT1Z3MlpWSHpyNU16Qy8waS9EMWt3RVdWRC96VDliNkRHNjMyaUs0VXFDN1RQMlVOYm5rRVk4NjRYWWlLbFcrQlMzRlVLeEhEUVlvKzhCOXl6MXc0aDA3QmE0UWtrekwwTEdKR0lyclorY05YdUIzUHc2Y2VkcEFNVTZHelJRcURXN250QitjV2lzRnlvM1dDbVFqTDBNbVhvQnFOV1JGSVpJN2dEWGh0U2N0OExwQmZrSHNSUTZYcFZmSVJ2WkJVOHA4NUY0aEg4RUtueG1FWW11K0s2Y1lZM2dRZTErL1R6SkFJUkYxY0t2Tm1uMlEwTThhT1dzWGpUOWp2QkNyNTIxeHF0V1ZJNmFwTHBlaEtjeFp1VzlCV0xKM1FHcWY5SlRpdXZ2VTB3ZGdody84SUJSSVgxVnVOUXlzQnFTdFZOUFhaRHRMK05pdmN3aTFQZ0QvNU8wb3ltMkorNzhvbjByeGdBOU9DbGEwZ04wSkVQSFkvWVA0bmhJYXdiRUoySGxVblI5RGJ6ZldNUEF2eGtydEExNHg2anJBbVlVY2dSZlJsWm5uWXhzMnkrb3dMRHdrUzJWazNkZmpBQVVWSUpld0QwNnR6K0F1dzZwSXF4VGw0ZG1qb0dsWVFYRE1iMzFGSlBzKzY3ajlSTmdzSFlnd3dPY1l0dWZLNlZoQ0xNdWM0TkZUYnY5cEVRakZOak5yMExXQUpCM1hHSG00eDduQlJmWG1IUWhRMGJ6cW1PdFZUbnllUzZ4MUhiQy9hcmovWGUvN3FNT2w3TTBlVW5EUGdoeWlzRjhxSW9GYmhmRWdxeUQ0bzNvMks1UkxyTUpZQ2FDNWdySHd1cEROc1ZvWEZJMys5V1lQYTFsd3ZPcDkxZnZhbkdob21KaXA5N3VwTkhtT0greWIxK2hMSXBkZHIyMVJpQTEzSmliNzlrNnBUQjNkRkFvNzE0cFExeVJaYlRYTXlkQTdtUUU5UkZHaEwvT3hySGpkUm5vMFhkZjl5RWUwblhGZk9lcnpZK0RPM2ZpQldCRk1BbXFGYk9lZ2tBcVhUVm81ZlM2NnlPSVZsTENTZGNwNjh1ZTR5SmVsaFVQdFU2Vm0yam5OQVBxd1dhTm5udjF3N0pQNnhRWmF3U0lQbE9GTUVVR3V6UENCYjJkSlV5Z1k2UTl3cjZKVWpKcjZOWmNiRVl3TC9jeFpmZWM4MkxPc01LNDl4WDYyOFA4TnEzVERFY0lBUFp3d2hMdzU4aFBLazVKU29EQkpnaVRMRVN0UEE1MG03U3FZbU5TeDZGTnYwaVNqVTA0em1UYk5ZczRDcXpmSmZsbUMvWVpKZ05Cd0RBYUJpOGVCSFQ1SEFrNElRa0t1UkVSMmNlSENqU3RYWWhKZU1ONjhFZno0d2Zqekp4RWdnSlNjbkV5Z1VBd2xKWGRoMUp5RUMrY2hnZ1lwVGh4S3ZIaDJFaVJ5bGlTSnAyVHBLRG82VzJUSXNGV21URjZ5NUVEeTVFTUtGUEJXcUJCZmtSSUNCbFZvMWFwUmF0U3lVNmZPVnZYcStXalF3RmVUSm42YXRlTXdNZkZuMGNGZXAwNEJ1blRab2xzM3BFY1B2bDY5a0Q1OStDWk4ydWFVVTRST080MXIyalN1T2ZOMldyQkE2RTB5Wk1rTTRidzVod3NXbkM1YWNyaGt4ZW15Tlpzck50eXUydks0WnNkdHpaN0hPc3dHRXd1aGtSaU03VGc0RUM0ZW5CMW5pSkFRYm91ZEVCR1JIVnlJSVJMZWNENThJWDc4NFB6NVF3SUUyRWxPVHFRUlhIQVExNlU0aEM3Z2dDRUFnMFlBQndvS0RydUVsNitHcWJGTlBMV0dBeERBMisybVVTTk9pQmc3dDBTa1MzMW94ZU1ranJGbjJJSWpKempNU1VoT3Vra29FSlNpanlHZ3gySWEvOVpjMDNiK244K2dxa2dTMjhzNzU2Y2pVcDN6d1RyK1JQZTZTZXJsVWRUNWFldWdlL0FIZ0J6OUY0aW53RThxK0g0T3ZJVzM5RmJlV3J5L0JxTXZ2L0tTdXBpOUhrclZlZkc1WjRJYXZmanlXeStwNHNWWHloZVZUNW54SXEvemJ2YmpvcVhYMVplMGhqMEFZRk1RWnMyQmtBZ0ZJR0Z3eEhZTkI5WGRhbXdyM3M3L0NJZmdZWmlmaFQ5Z2ExMHl3dHpkWlkvaGNuZVRZYS9raXo4S0NCb3JoRlo0ZzFsWEJHR1dLQTc1MkVsSWQ5YUxLNFNGTmRWMzI5Ykc3UklJS1U0R0V2aGpyOExVMXdqQTIzczlCbWdiR2pROTdvVUt3cWlPdnlQWkVSSUNLSXpBNldUcFdRd1Y2b0psZTNWVGxqNVR5UEtPam00TmJ2T2cvVDlHVmZ4TkE5aEZoUURTdy9mUmpwQ0YyVzhPQTY4aUN5VCtmMkgvREc4QzZlK20xeC9JSTg3OU5BMzVyd0FBNjhRV0FZZ2xUVEFzWUFDRXFlTis2bXkzd1lvQTRGK2pOb1djTlM4T2lhalFRUDd5TUZhd0lqUVJnU1VNTEkwUTduMVJBWDZSRjhZS0lJSlVvWjN5Z0MrUTJRb3NDa3RPNWx1TUhHVWFFM2VMZThWajBocXBXQXBJRWFsT2FwRzZyZFcrN3FSQUZjQ2VZaWtBNEJQVHNMaC93VVdmT2J4OVI2VThxZkE0U0tuNWc3WUNYQVNRQ1FCWU4za0EvLzFOMWYvazZTLzBZLzFvQnI3NEdYeHgrMk5mMHUrLzdndnFDL0x6ejBFZjlPUkJxam4xUGdMb1pROGIrMVowYzhnTi9sLzJEV2ZObWZLcFgxMDM3ejJMeG4zbHRCWFRiRTVaOElQdmZHL0dKb1NEeTQ2QU14WTJEZ0VoRVRFSkdTVU1Ub1dncGtjeE1ESjcyNFIzL2VIMThTQ0NTNElreVhReVpNcVNyMENoSXNVTWF0U3AxNkJKTXlNVE00dE9iL25OVzM3eXZ2LzUyT2MrOFlYZi9Uc3UzTExNZVQ5YmRYdDJjTmV2WHZMeWFQakZEVStOZ1JjTnVPQjFyM25ETEJJR1J5TlFHRHhPeWptb1ZJT0xoNitVR0F3QWtvUDh3Sk9PaGhiSkJOVXZocFVOTFpxRFU2SjBLVktseWJPYlhnNnRFaFZLbGFsUzdsdVYyclZvMWNhcVZnZHZuYU1RQ2N1V1hISFY1Y2k0V1VRbVVtVTBNTUFtdGdRc0JTenRGM1JiQkJld0ZJQXc1bDQxaWpjYkJtUXA2eTNBRU50ODJkQWt3anhuejdQNzhWVVVEQi9WbXVBZCt4NTZjUCsrdlh2R1JrZUdoMVlzWDdaMHllakk4T0tiRnkxY01EUTRNSC9lM0RteisvdDZlN3E3T2p2YTIzS3RMZGxNT3BWc2JtcmNnV0EwN1BjZWZlVGhoN3FkZHF2WnVQK3VkRzIxbHNUQVArZno2ZHIxbW9wKzBMSjFURWdnUzZDdXZDNW95QWl1YjAxM1lQTUxiWXpUYk9EQVRYNVlFaVl5Y3BVNUlWY1BmSkRsSitvT3Vkc3ZMT1V5Q0hBMGVwU2hSZDRkdUg0S2dFcE1FT1daR2I1RUZjTWpWSmtCVUJVQlJaa0EyWktOUnNBTjErMTB4Szh0aTVMdnU5Q1FPY1p3eG9idFZKWVNOWVNGSTMvZXp3aUxKZFFFbFZBVnFiRmZWajdHRllLVXdpTDJNOWNTZGdObThMSGNzQUlsdjN0K3BUemlrZ2pTOExobnBSQTR5RHBiTzdCY2VraExJUnR5cnNvM2hPRmJpVTI5RmdtS1k1SjgyeFJkOHF5bHNGV2tFSC9iYW44bG5EdjNaeTVlNERWR2laM09RUkRCRDQ2NFhuV1Rtb0ZEUjUydVhKa3psZnlDUk4wakZVTGVxWlZMTlFFWG1WRWxEb3RaTk9maXpRNFJMYmkwSzNWZlFpdU9LT0VTTUZUdjEzVHZpNkNWeVU3V3hNbUtXM1VidERtbkkxN3lYM0hjbndqZ29mb1U0bWFTVWxMbklQb2Qwdzh5djY2b1dJTWRTaUdQVXYydGdtQTRFZGExMEZybnRRbS9lbHRoZnd1aEFIV0tzK0pzLzN6cXRUeFNmY1pkV3ZNQmtFa28yT1dkNWg4VnhrbDF3UTB0V3FmWHhqbmJYVHdEdzVvbVdaNXFkdkhJRGJLWXh5Zzk3MHBKdnpBejhuMzVPTFJrZlNiZERUcFpnTk05bFFKbTJpVTMvSDBuZ3h2SDI5ZEFlWTJRRFF2eFo0elNocFFiaEFqQm13VmJJN0Y3SXZKN2tpTjFGSkdXTnVBbjB6TUV5UmwwaDJOMTdKQ0tpZ0NQS2Z5OW5ITk90enduSXp3bWd1dlpaL1RNQmNRbEhBZnc1RXhIRHNYR3VGdVNlbzN5Q0puWlJiM1c3VWYzYU5aNzNFWUs3a09TbFZKc3dZWXlKQ3RjR00xR3JqOThjbkhoa0ZtdTdQZE93bjFXelIwaHhUblJVOGFCSm14cUg5d1FJSWMvZlVXQkhqOHFySVNqYk8yaFBXN2xSSWFvREpwS3A2V3JWSGIwb2w1TG5LTHlGajJUSGdteTk2QXBaNi9scTFpTlBZOHZ3REt6NWdzK0UvQ1pJQ1B3Y2FjcWNuUmlyMVJ6UHNuQ2dRVmFnNVVNcktHSjZ5NCt5UFlaSTd5aktUSktTVU40b1VUN0dUZGl4TzBEa2ZjVFVkbWthQnpxUGJpNVNpS2ZKYUpEREtZMVpsMTJ1MVJBT2t3U3A3ekhuNlFrYWlwTkxyNkUwcEhnbUlRME8zeEJuV1N5WTIwY3VIMnpXWXhOUTN3Mm1Gd1A4eGs1Y0tlRHNkVWFrS2xMSE5KRzhzNXh6eWhOdHRFQmlSRE5Rc2NDbDJ2MlpBbjFDaXR4TUVqTE13RzlwMWREdGRxaXdKVE5DZkxTcVJTMEF0VnVxUVBJc1FDUlpJbTh4NjZJTndwVENNSkMydllIck5NV013NVR4SjRWaTRIZ1JSb2tpZ0ZLUFRwbjQ1SllneHFoMGJvcWd1SFA2SWdrUVRLVlBwOUJtQ3R5U09KZDZieUUwbFExZG5rdGxjaUdVbXBRTzl0Qm42QUJSQnZZYmgvb1hhcG5DQzc1R0dJeGw4VytaWk9qb0hVaHU3TkMyNVVKb0xkb3ZDMVZvQWkyRkFYcCtNNE4xRHlBelVVamVTdjV3RzdaYmY5RWNUNmpNYnNKMUJwWS9KdG9sN04wanBRaGdMaGNZZlllVVoyQlhxR1VIODVROFJSdHoyZlFkbnpubGxCMThkQ0RNM0JNMFJWbUxYR1BGVlJqRWRRaExQOURpSnZwTnpvVUF2ZWc5WkFMZklqVFZiNGV0NXZQTTlBVVZDMTFKWUJNeUVwSm9MYXdIVnMzQTBDTkQwY2cyL3huWEpOK0lKVzRBS2YxR1NVYTNWQmN1TXJYbFVZVHVnWm9PelBmV0tSdWM4cVlNbWxPTUt3bDd4MGtLdHN3bGYyWlJzcmoxaGcyeXpxQmFQbEFhTWxrUkM3ekc0V2FIYzhBQnJseTBtRFZnUGhLZzYwS0lHc2xuMUZGUUdvQkhZMVRHdjlLZ0pwM1ZvbzNPQkl1QTQ4NW9yaDBjME5HMkxYNnlTQTlzR2NCYW4yUWhvYmduaUo2RmV0dUtTSFhMcDVlY04xRmkxbzNNZ01tS2R3MElyRmhqODFLaVVMRHZSSkRJNUtTVWxLQUZJS3hWekN1Z1V4WHBHZ1pmQWdQRUU5ME5lekt6cHh2SGJQVFZxMmRPYXE4NDJFTjl1eVR6SzJGWXQrV2RRWkRlNFViZUIxOHN3dmxRVUNpRnJiTCt5QzdXcWx6Wk9VYjJWcFlRWnUxbVBVa1QyWHk3MjZOajBncFVtb0VXSWVyL0ZKa2drZ2JBQUw0RGgvMGxvNUpEQk1DN2tnMER0elBvZ0YwSzdMV0xYUjA2UEVOMG9vSEgxbHVlSmtRRFBJV1U2TVpPNkxhMnNndW5GNTA4QzJsWUdaUGxjeDJYSjF0dVhGYnJlNTFDSVVXU2hiNGZvajZMZ0djbWxnK1VDaVNpeGNIOXJKNlRUSmRBQzI0QXBHYnNhNWhhL05JcitoOUllYVhJQ2ladThDNEpMeldUN2dLWVQ3NjM5K0FBakxscHBkWEFMYm10L3pjZFo4bmZJL3N3WE5iWmR3OW1SMVNPN0lmZ1pLQy80TUN3cEN3NXNEMWo0MHdJdWJkdHBCTmNzVkhtdVVQdmhha3N4TTlGOEJMa3NRMzZNL0JPSkFRdDhUQkJTVWJTb2p3SzMyRVliZVFyenVZR2E5bldGaE9LVGxRQnc5Q0ZqOWpURzRKM05nRHZldUFnMVVPaGI0S0FwOXBIZ2FNSktiMFNsb0w3RG9kSHNManB0WGhrdk9hYW9lMENIakRVNnRrS0NCNDJnWkp6UkRjUG8yeE5lSnJaRHhjWGVWM1YyOEp3azBISmhVMDhMdEdEUU1xS09QM1RHb0FJNlluYkVrUndEUmszTzRraTYxSW5xVDgxMnhLYmlpb0JNR0U1RExwTUtyaU9wb3ZGTHRiSWU5eHFNcS9TVFlzeTBaUUY1eWFaYXZwL2ErSDd1YkRucFNzaUJ3SkZhZ0JNaTd3VldjN1VIcWxtdzNmY0x2dm1uVlJTRllSUUVuZ3huSHZ1eDhRMUNWN0FJQXVBSURkQUgxQStMd2crZ0hnUDRDOVFMZ0JBTmFldk9Ud29xTUhVb05nbVZtRXlESTdMcnhMSERYWEVrN1pBTUk5ek9iR3lDR0RiazZHNVVnblRwUGMzK2paUU1qWUdVeXVOWGcrTS9UaWJJMmNCeGdKd2tiMGJnaTRmWmY1QUJDV1Q3QkRTTThZZVMvSjhubzRJc3hRWWs1MXdaS200NENqdzZwVGZRalhqVUx2OWVqUE9WS0ozUGhTMmlJZnVsQUs2c01MdXpZNU9uL2JIemhaRE4yR2FQaDQ2NlpMVVVaRW1XSjNYUkcrOEErdjVZT09sRklNUkZCNCtMald5dVN1U09lcDNxclBXck5Cb1J2R0RXYmdxY3U5NzE1a1h6MkJFTUZVWlhmaHZMOVVEL091bTY0d3o4MUlrc1NYdlp1SU9xY1lSQ3B0K0RVaWdzdUUzUTdidmc4ejlxRXpmOG1mZUhGbjU1c0pSVXVMWXhRM2ZNSFp1Tzd2aGs4TTA5MVF4TEJaMVNlMmlRTlYwZGpFdUNGVGJueWplYXFOV3REVU9icUplSnNCdW5JUTdQS1dxdkhQUEZ4RVhUTUtSamZBRGMrTTliNzVXaXRLZU4yVFR3UE1iMFBBOXEyRlVVR1NhTGhzbGpEQVVBTU1MZEtZUUhWamN3cGdZS293YVVRQzE2cnJoeEJEUlUvYVpnYkVvVXMrQTEwVHhrc25rU0xqWmF5eVJhK1BoS0tOakJUOExvU3FycUJHaXFHU1JpRjVUQkM3aDUzQ2lvZUY0V0ZNVjF6SzVqRFBvYmpIZ1A1YTlzQkREMWlPODRXY0w5NENvNUVkY0lrSGxOZkp0Zm1tQUV0K0FwMUphdHc3djVMeGJTVTNtZUtDV3MxM2NvZFFVWWxKVnYrOHRtdXJBR29FMW5wTWhaZXhUTG9QTDBrZzdVZXkyTUxFdXZNMHk0NUtsd0dsV3hBaG5IZk5qWmFXTmNNNnJKYk1pbWkwK3N6djlCQnFPdXRmUFZFakhqSWJOZDVwYWFObWJIM0ZMSnZpMXRsT3hOc290ZGlPd1Q5bmVQTzcrZVNHRkZUejBUYWQ5WWRtQS9wSjhxRmE1Z3NmYW9pc3c2MUFudDhPdmorMjQyV0szUlZyK2N5T0NHVFhUWjdacTN5SEpRTFIrcWZ1U2JnUGw0VW9Vbm5GTXFsdUg5QVA4UmlPMWthbHN4ZWVIWG5rdU5JZTkrNjA2emloMXM4T0s4NmVrTXI2cXNCczhydVVxNnhGSDBnVWZWc09ZYW4zV1N0QVJmN0Y1MHY2d2R1S2IwWXYyYnNwMnZDd1NxRmFNQXJySUx2WVYwcXgvVHM2Y0Q5L1Iwdm1iN3ErVWo0UUpESGZMd3FhMUwyWVNhS2U2b2NXWFQ2RWgrVnd1YVJ5SHNwTHRpVU1lZnBKUlVZSXZkT3A1WUYrL01oZ0JCMnBmd0dqa0tjY2Yrd1NJK0JWek9YTEdnMWN4VzREVmY5SE9hYUhpU3MwL1IzZGZTaThoZEZ4WWg3TXdsRi9qeWh3RGFnRi9DZTJ6MGh3d0Y0WDVKYkRzRkp1QXdNME5xdGpzR01EQ1Y2R0sxOWhqVUFEYlJON3lHZGhPaDh1d0hMMzBHenF5bG1jdjdhSWc3UW9selBuTHdyYmpjTnYzNlhLYUZaejRpOFBWSGhlUTNvUXBhcUxKREkzU0RrRVhMSE1DSlRaYVBLeWZRVFVXcjg2cUhjVzZaVGU1b003dmF0TkRYa0ZsY2tVUDZHU1VRaFZXaXRGMlc3MTlmUE9aSGU3ZzhXcjdGbTI0eThoSGtUbVJnVjd2alBSWFBxNGREODBhMGFaZzQzZkJWNXRXdnZJNkFCWU9nZkd1dGk4aS9rcXhRdUxFR29HMW81ZlRtbTZuc1dacmRsdUUyYnIwTGdrZFNoN0YxTVM1cEQwRFpEdzhVaXRXS0ZtdXN4MkgyMXhEL2JtN3h4czhPSDFsaVlKU1Z3NFl1andoeFMzMEJ3MjVCN2FDYkd0Z0haVUxJbTZ1ZWF0eGV5cHJWa3ErbEZuQm1SVkFkMm9VVDVDVjZQTGtYWDRrYUtiZGdUbUZoamVzby9LakM4SW1sZ2JMeXJHSzM4UzdKanF0MUU1YUNNaVhvd2ErVVBneTNiSjU2ZG9ISWd4UFBnYndKcmRXdGxPR0o3TUNOKzA1aTZWN1VtamlqaFNtSS9lb2RYakkyV3hRSGphbWZWT1NQeW5XRHQ1OGJveTh5dkxONHE5M0pocEw1cFdCblJHNmxhYTFwRVY1bS91SUFwUk43UlhuVGpJcm1uQTJzSGtacEdjRzZ5czZaZVdYejZkOG5UVGZ0WmhRT2JhQlhtTFZNVnFaa2dOREZnRGk2WGxUWW05Y1UyV1lqcHpTU0ZBU0J0cXFzU29saVVQS1VmYkFEMStwaWJXWjV5YVl6aS9mbVdzSFJYaWNqLzlOcDBaemZpWnRKMzExMWVkZ2ZBdFg4VyttbXYyNTFkZkV3RkF0cUc4dHoyeUR6TGlEdHZhYmVyVytKcU5iaEN4dFNnck02cTRzbFRKUzQxeGFDcEJHaHBwRHJyaVFRV1Y3TmdkajRGNmhTVWptb0xTQnN0WlRkdmRmaEFZbnJCalVpem0rZ3dWdTh6cWhzV2IzeC9GKzVYRVVEVVRRWFFDeHdkSHh5NXZpNllIbnMyOFVpSmgwbjd4SVdDMzVsMnNHVlFxU0xIZjFDTjdnQ1FLa2VHZ1I4YVRXcVcvQmxmNUtDQVFnVG11TEN4TXpSampMSXNSNFFnM1ZqbzYrYXZYdG1zQ0pvWk1Pa2NiekYxS09IR0Q3Wkd5a2xjV014c2VpRHNTbVV3Q1NSYnhNK09NVllneEtnd3ZSNVpOTUNSNDFPUXVIc3p1UTErYTcrdWYzZ01lUDNHUkdYSE0wR09kYkdoZmY3eklhUkVCK094dlRoMDk4QnMzZi9EQVkzcG9EeXJRVXU2VEVIeVVoNWR0Y2ljK09DaFFGamVGK1JEejR0dnFkRDlGdE9DaUEya2ZJSHZlazJQTFJmdEFPOGR4WXU0ZTBMaXo3V0J5eSt3RHhYNlpHdXJaYWJydXpHeldvTyttQytaRmtuR3NLVHVMek5IQ0pDNUg4Z1V6RnM1M1dyQlZNZ0szSWxPQkZML0JFUVdtOWpUbWNSOFVFazBMSi9RRU1EZmdQSFRaQ3FxV0Yvb0tlZXY0VVI0cUdWVVM1enhCME5meXJRZG5UOHdmZEVhTHRwY2ozSmg0RmEvR1Q2WWM1WnVBaTJEanV3YytJYituT0k3dzZNYXFPK0N2S2EwanphZWY0RHFRb2VVSUFrZGttNXU1blBPN1ptd1R6QUE1VlVmeG91UzJHRkFJTUFoQTFTK2ZZWVZJcFBjWGlGTEZDam1nZU9Fd0FVZERJSHc2MFBncEpORDJPRlJGYndJTUVheGhwS1dXNzJYN2xtdzhPWVdPRncyZFpzbjJkTnY4SnArZkZJNFpobVQ5d1pjWmE5Z1N1QUJUcnU4aHc1azBtZUNqN1NzZTlkS2dnSlBSUmdVc2VVVkhhayt4eDhNUTFGR0RoTXFhdWxtblBMbkF0RFlBQ1M5T1c2SmV4ZTFGKzR3OXZKa3o1VXgrcWdXODVqa3h3enc1d1dBVzVtSFp5ZnpPUmJOTXpDT2M1amRWcGhac1Vwc2UrcEdnUnB4bVo0K1o4OWk5cE8zeHhoZzVSaCsvNGJVQ2pFcGg2ME9QMS9HV1pyV29yaTdhWld1UWkrTFpKd1lwMGJOTWVmWmh3eDQ5OWluNkZKY0FLNERtQUdUSWlGV0p4RFR6d2xIZnpmemF2UVlkNHlZTXlEU1lQQ0xObUpDenVGRmJwbzVFdWlpUVpKbVFsckl6a0V4QkdtS3AyTFRqaWtpUHNLZlB2RjJKZEQ0djFFL3MyZTI2c3hnQ3J1Q0I2TXlaTGJzSVAyVGQ5dW5NN3Jzc3RQMkg2RkJnVWxPQjYwQy96WTRxM1F5MHBybmNBUzdKWk04MTJ5WWRKWkw0NGdJRE51NDYyWVJhVHp5NUhLcTdManhqRk9jYnhhWFpwQjByYlpiVVBUT2IvN3F4a2ZUUE9nWi9kS0tSZ0d6N2JmSXNvUTBEeHYzejk4M0xONFlvdm9hYm1OWjJuak9LSG5aOXNSZFRHakpxeElPWU1pZG5Kd1JaRHBrVDIycHBrZElVTlhGU0JoWEtIR3VCaCtobDMrajViU3IyWE1PN1NCM1ZLYVgyQmpyT01tMTRxK1JzT0dCSHN3WUZOcitrWUx6cUFNMDNuakI5OUdqcWprYUR4TWZPYU5yVzZFOVZNbEJpbFRWeGNXUmlBSmV2L1ArVDRhNE5iWXFFc2tkc1M0YTRyVktMS1FKTkJKUUZiU3JmanRCbU1vRVVLU3ZqZkFsQWxZVGpTMFJoMU5IVXRNV0hXNEZuMzBZVTBJNEk5QVBVOXJ3dHVOK2JlbmxTY3RpRVRSWW00ZzRqN3Q0QUpKR29jZW9rT1JnUU04ejBmSDlOTExhU1FSRThXY0M0RmZrYXNDYlpoWDZrNHNTYkdYTk5MZEl2bVFIT0JHb0dWNHRnTkswczkzeGZBdnJpN2VtTUFoYVVnY0dJeXlmZmVYU3BiSGc5L2Q4bTk1dTgvdCtUdTcvdCs3YTRUeC9zby9lNU5Qd3pzcHZLUnJOVGoxenAvay9iL3pYMm9FLy8vMlNXZStOcXZnbVJkVTBhS2p3Ukl2MTZwRTVGVWVuemIzbzc1QWpnSEVPa0lGOStHWEk5ZkVOWUtIOWNSa1B5cVExR2hQWFMrTExHbm1YMmVHNTlrNVRadXlyRlhNOURtVDdLbDRMbW1SellZTGk1UjJmRGtzS0liZkM1cmt4Z0FEYjZSMnVUZmVvMS9KYUpQNFoydFFidjc1aWJ1Rzl2UWErb00rWGF1aUthSFpzOTFySXlRVytyQm1Jb2d2NFlFemgzMTlmZHQ2ZWdyODY1ZFdWNTY0ckorSlNLK0c3aVUrSWViai9lTHhmSTloRlhPdkV4Y1ZkTkM5NVN4eDBwOUkvYVV6MmFWWXhYdmFxNWE5amltNzJtU2Nic0F6MkxhME9PYnIwdkNROVlIZGhBcExsWGEvV011b3crYy8rcVZ2MER5cU1wWExKbWZFTFg4RWFEYnUxeHYrRVd0SkJ2b29UMGEra1cyT2xtNDJZM0FrUm1EUVlYNlByalpXdjkycEprVUJOaVg2Z28yZExoZThZakVRTzF3eXFjdi9QMmoydWk1SDJQeXl0T2QzSk9BTTd1MUUyMi9GcW5mVVJyZHZiMDRpN29YNE5EcnlmSkxSb3VESTdhbXJ2VnE5dys3YXAwMTRqRkZ4cXhOL2VxVjdyODJhbWFjNzEyNVVDd3VVZFg2K2lsQWlsa3ZzV3VHQWhWcW8yTytWT0srZFdDZlFjWjdTcUMrT3E5L3JyTVBJTXp1TVNhN0tHMkZqTmdpTGNrMy8rbzVWdEROMUZ4RGpScHNpeE0zalp3eXdTa0NzSXJ4QkdsbWV4S091eVhTcXdYMUl3V2pLblVhTlNyeHY3bXpxTnVUbFVVVlpxMDNjbGErdy9MZEJPNlc4NXNVYnRJS0lZVktMNkg3SGhXVXJPcjRDRnFaUER4bSsvV2g1UlBIcVg0TFJOeUlnalBGMGVVbERJVHRIT2VxcmJ1bi9WVGlmVUt3V2lobUlwQW8xNE4vcC9nU3F6ZzdsdWowcjdXS0tONk9DUHhsNFhMQjFCYndLRUd2WXdxeXpVYk83bk5xdnJIbTd0b2ZxQk0wZExuZHF1dmRFTEI4bUI1bjF6UFdPamE1SkFxU0VRclhkQ0gzUERld24yaCt3b0phL1dTd3NZaEs5TWpXc2wwNjdvdDNBRkRzbFhuODdkU2hpUm52dm1hNkJPdjhuUU9tSFVRVFJ3dlhXOS9ENnJRY1MwMlhqMzNEYkkvdnorZlhJYnVTcFZ2VnF2SDFYZk52WHV1bWhnM1ZteStyUWh5alY5eVhuUmEyYjJsTGRhL2pIOGJiYVV0N042YTRQaWxUWmMzbWJsakpib3l6b3Zjb3U4dXovdVBJTkR6ODg0Uk9qNndXMjEwdHlPMG9yRlVvUFhYTlFiazlaSlhHVmtyb0c2Wk15OVhVUExhMHo2clNncWxnWEtsYlZCYnE0MHFjWDkzL3QwUGNadnNrVkpsdE0xT3liaHZLa3l0S09ZTS91VjBzVmdUVWVJQkZXRmcydVVPMERmekY5YldCWHRqRGp2U0lIbFYyODJrbkJsTC9iLzlOanE0d00rTUJndG5FUmVENWx6V1lEUzJHcTB2LzBDYm02UmExM3dINUEvcmt0eWZMZTNZMnM4cTlyeGIvS3VyR0lqbUhIcFEvc2E5RiszRzFqUmxObVlvUXc1WDA4WDJmdnJUUG1LU1pEeGRqTXZVcExKSHBEa2RCYmN4d1JUNkJ4R0NCc1F4MUtydFNUbXNlQUNaQngyd2tWM2pmTFRZMElKNmdraTdLZVFjWHVnTCt1YlFqNVhQYnREb3pCbXpvY3RSYSt6TjJreVF1d1liS1gzbmNvTzBXbGtRc0kvT0NYcmNmYjdQR0hKZnlmNFRQdjhPVmkydHNKeWJZemNiTXJnckJPWEdKUHUvT2htQkVKVWZqZ25pR0M2Sjd3Z0N1R0M4eHlWUkZOa1VuZDVBVnFIM0xIQXk4MXdrMHVSeUpXR2RiOGo3MklDMGxjN05iMnNnZk0yNmVVTzJZZmJ3KzFtS1NtWDBKbFBXWkd3MVVZYjZER2t5WlNsRGVzTnQxYlVYbDBaNW82RWZlNTBBV214c1FkMUJwTU1ZZEE0djlQdURRd0hYaUg5NkNiNXNNZWZTQm9NaFo4U2FNL3EvOUM2YkxDNU5HWTBwS2doWk8vMzJxVDBWVUFZcUhXREdxVmFKaDhUVkg5N04wUm5pa2FwZHlsMm5CSklaVkJxancxQ3JqZ0xhNldBelpuQjNlWUVob3NyTDVBWUlaMmEyY3hybmJML1dSaVVSZmRpMDRNeHMyNlRzRzFPbFl2L1BINGNBaFRvZ0orbWF1RUlsaWUwSUFySkxKTkRtYkhNb0UwcXIvNmlMbkNTajE0ZDhOSDVxYVZXOVFSQXRJb3UweTdOa3R1eEVYT0xVR2M2azIyRDkvVGMycy9qZm5SQWhKSVNoakF1KzZXMjE0RDFRTWZFQmU4bmdJK1FrZWNPbU5ILzcrU21kTVBHZGJpRTB5YXRndjdOdkdyOEtCYkN5SUFsMDJsb2NkRWU2MnV2Y2E3dXMyZGN1eWZLNXlDTDFzdkplZDYyekxyd1M4blI3bmRpaDJSV05CdmhTdDdvcFc0czNLR3Y5SjRJNG44ZlNLQ1B1WHFOQWVhTlJVQ1F2Tm1hVlRCQnVOeGpoTm5jd2l4b01HZFJ6cm04ekd1RDJ6U256WjBZYnVqSldreWxyTS9UWWQ5WWRFb3ltak4zWWJiM3JWcmJ3WEJ6cG9QV0p2QjNVZWM4NzE1KzVzYlhDS1pOcGtDSzQyRGZrYzQyRXdxN1JSWDZmUG8yNW91ZjVpZEdXZXQ4OHAydGtXcUt3aEZnSldITXRSck01WjV5MS82N1QzQ1JSNjFzeFg0elV1Nk1wRkRkbnJJYnVXZ2ZWemFuZjJGdEpLY3NuLzZyTXJTbkthRXphMCtjK0hDcG0rcnovZWNnVFJOKy8vYlZXWXdwM2hhR2MzbTlkTWp0UWh4TisyQ0dJb1NwSmZIc1F3Z1hqdmFSbFAzdEhDQUswK2RPODJwaFFHamVZYzlaOXVPNHVuYXcwVSt1d3BOU09xTFJOYmRYME5EdXNtQThPVlQwbmtEVjlKVkFGNEFGUm5NOHROalRodFNGWlRtOUEybDJCTkthMzVxbjJFeWRJVDJKMExvNzdvVG5Ra3phZC8yc3hFVVNLL3hwQXJicnVsQjFnSmozNWZWR1cyME1XYVZZOVd1Um0zVkl4cmViZjR0cCs1WktPeDVzaFBWTm5KSUV1UDhjVzhZc2NTaDNwYXBKUzlyUjg4UERPTExFR09qY1hFYis1YS8rbFpzbC9oRzlPZ3Z1YnZDZC9jWDJkVGhWS0tBMlY2Z3I1Snh3SThaeEFDRm9wOVd1dWF2TnQybFF6YWFMcUZHcXZHaFRTZ2t1UjhvYitzQllPZS9WZG91OUZGTTk1NnJoUThNT1llRk5BR1hpR2ZHWlVPYnBNbU9WTHZpVDUvbU00Q2JmVHJTNDhqdGk5Zi9uSkNkY3g2UzJ6TlBuSi9MeEh0TmpycWF0ZktES1M1TTF2WjFDdmZmNzY1MlNJVnArZVFib0F2cUFNR1Y2UHI1MzRkUGFOcHM5VTNpYzlUeEtWdG4rOFNBTXpIdGxZdnZ6aHJ5M3ZGNzVYWUhub3EyWExIdjdLL0c3QmU0VTFnNGYvV1ZXL1JpSHhDNzAvejZDT2Z2N2E1enJoL3B6L0pMMUs4d2FyYU9idDFsZjY1QTlDYzErWkkzK1U3d0dtVllUSm9oNlNrajFnMTVjYzJTNTVkOC9Md3VMWVBPQWVFSUFJQk00Z0w3b1dxMkwveVRjT3JQTGU1WUxVOE03Tzd0cytmQnNtVnZKOWNOVlVFWG5xNkNuU2dEc3JFUFdSUnNEWk1Kc24rK2FGVzZLWWhyR1U1Mm9TNVJnYTV2bVZGUXVWQzhzaGVZVlpGakFaMUZ2ajlRbkhIOUxYZUt5KzlpY1RFeXk2aTVXemVodWgrK3E3MXh4N0ZsSHRYTVNFSjZaaGhlU1E1RDV6L1VVVmk1U0xYSWxkdU95K3hFZk1DNUQwc1F6cHJpWFU5UmFuL1RPSnFrRXRXSGUyektOeWVpSis1bzdpMFZWWTI2enBYd0NseGNmU1pEOUM3NTEvcGN5WU12QzE0ekxKVmV4VVJoL1g0blZxVXBVSVhMZHJzQXVwVnRWdGZ1d1pyOWdMTVBJaVJNc1ZqcTlnYUp6R3JWSkNTY2Vtd1lqZlB4QUJubFRxUUZRZGpJNUhOb2UxQzVPMDFaS2lnWVdCTFlCZExOWWsvWmRleFJvVjRTQjJmTHcxYzBYQ0l2bXpxMHFyeUZLQlNqaVRrZm9ZWnZUbzd3c3JBTUhaZnpSQTU5WWpCWlc2UDEwK3ZzcGVqK0VlQlpyWjh1ZWQwODU2eXNDNUJEZncrMWN1RW9wb3JhWlVsOVlWR25Mc2pSQlpFeFBOSmdLQjFzWm1IbDZUYUF6WThHMWVHV0ZORzZLQ2MrUDFJbzB0cTlMSEtZWFVmWncvZjhXUk5ONzNCZmg1a2tnZXFmOFpXUzJZdmtzM0VqN3BmcWk3MW01b0pNZ0dJNlZOMU9GNk1vMi9yNGx1YmxBVFJ0NnBCa0JOOTVudFhZekgyVC9Qek1WK1llaTU4NXh1VFQxWVMvODJWN2VuTlZacmEzVlM2T0dCZ0MreXNJVitZM2VLWHIzQUUvQU8wczc1bDlZWTBwU0xHcWxVQmtpb0RSL3hWRHF0NTcvQTNhaysxVGR1THVHOWFXZlNBeHFYYjQ3UmxqV3E4WUNiREFtM1lCQUdPNitIT1FwNW1ITWRwakVZdTFONEQ2TlhCUGdJdG9saEErb21oY21uUmRCUk53c2dtdVVtZis4eUZJMklFSGxZYkcxWk1RekIwTERrTndIa0U3VFc0Znp1M0MweGh6VjNiMmw2MVpBbjZCbVNLZUZhS1NNSUdLbGtlQTl4NjRxOStYTmR2bjVvbVkyV3J3ejE5ZGN5L3RtTWZ3NjAzT0tVcndqMXpxNVY5M0FrODZ5WlJxUEZsclJZY3FJNXBQRzhqejNUYkRUVldDMnR2KzhxRnFzSUk3R2haeXMrK1QxTFhUUDN5NC96eUxjYWJUN043ZEFFM2RUdGliak1venlrVm9LZUFHWTJ4cUc2czJLSWU3UkphZzNrVE9vTVpjRDhiblZFSnFZRjRWckhhNkw3aVRKcGtiTVhjMFRxT0d6S25WR2FEVTJJMW9XcHpVd2Y1QU5WWU0rZ215RTA3Z1JNTWgwV0lzWnlVVW1oaHVuWFdaTW01ZisvSGJ2czA4bURLck9yY2E1YXNHNWlEajdhSmJZNDBYbk9zRVpjVXF3YkR2L2xmckRiVWRXcHlYcUhhdGN4YlhUVFRnYmVKNzhlWEY1bjN6eUxaUEZ2ck9EZ25oT0JwL3ZIVGFXTFdoSDZUZG44M2ZSN3N0RXkvWDV2N3NyUUsxWFh2RjJOYVlQUk5xUnFEQmk0MGYvbjZ4UWwrTDVRN1laKzQzcGtFTjlUekFDWW1vR3VjVHhTaU9jdFlvQTNKaEJaeUtYVndqdWN2Qm81R0hScTFjaUtPTC9zdWdUNENHaG0rZ3c3SzhFS3h6dlN2UDR4QjlZSm1XVTdKeTgrSXBVNkRFQTEvNjRSUGMwSU5UNjNTeU1aR3dQdjM4ZVBzNjRDN0ZjTGF4dTBxYzZxNnQwUTZWRUNjRUxKY0tWYzJndUNJSTJxbFo5K3Uvbloxd2NsR0NOb2t3REh4cjRlUnFTSHZYenUxT3lmcEgvL3o3OWhCc3l6VDI5OWJWVTRkaGwxaVljUjVFbXZCTk5FbE5JMUFsb3ExekVVSmxGNlJOTE4wd0Q4OExmdjdwMCtDYjRPYkplcTJYTld3MXU5b0FvTklwL21KWHdwSy96bWg5MzVQZ1FQWlJhTlJOSk5QcFVmdk9mZU9ObGRoRkFvMmdxQVc4VkNRZGxXRjI3M0RaRDZhWk55Vm02TzdGbGZEYXJ5aXJ2RThtZlEzeTVMcEhmUkhBQzRlSmRFOHV2TXJUWGFHcVpESk9yVTgyc2FGd2pFWGZEcGp6Z2xVNGcvZFFNNEo2YTA0anovMVVMY2orVGYvTkZUaU5XWHl1djlIVUF3M0F2ZUJTTUgvQ0R1eXpTSFI5TUxmUStCVzhzRVF0RTJFRmdtRkFxSnBkWGZoL1N5ODNXT2V5ZTVMRmlIZ0tFcEozaGwvN1dCYjRGMXJsNU9Xd1hJUGpLWkJ4MXhvWEMxODl3ZHZ4L2l6dUZkWGpxQ1BJMVBWRjhDT0s5Nmo0ZE1kamtCZEtyaXRTSFU3bmdKM2QvM2Y3ei9KMWs4RXpUM3p4U05CYXBoK2I2eTFUVzByRnFNS29kYysxUzFGSDB5THFEQ0F2RHB2TGcvYlVFcXRmRmZwNnB4cHRsTCtLQ0RUc0IxMXgySmw0bzRMMXl2S2NtOVV1TVZZTWN2NlpRY2t1OVdPdXVPc2t1cmIrNGNQcFZQbnQvMTRac2JTQ2RPQmVVWTVnTzNBVWU2MFNMdncrQlNzYXBheXJlRUowcHNaZi8zV2hPZkZIem83b04renp6di8zbDhqTVZwcnN5OHdFbFdaU3FPNklSTWR1WGtUNDlJcFdvS3FDNitxMEd2Y1FrMUhzYWxrVHd4ZHNONzZ2aEhySXZBUDJZUlhaTGlOTDhySHNYZkxKbFMzTVd3dHpIY3ZEY2czK2ZtYm05VDl2NWJIMzljM0RqK3pMamwyZkVTMTZWdXZMdW9vSkRYMDhQajlDem1jVy91NWZCNnU0dGNoeHV4UnZSenl4VnQ4YkpvVmJPdW1SVXRZeHJ4eG5ETXcyRXp2TngzNTNUbnlPOTZkRDNzVy84bCs1eldiSjNzS1YzODJYTHl5dzNLVzNSZjRQb3ZQazIzTXFSY292dHl2WHluNWlOYys5R25pOERDeVdzQzlpa2pITlRlU3pNZmZGTmY3Y3djQ3ZFZWZOWkxlOGdsaG1GRzRQaWI0anROQ1JFS3VibnpKVjQxdW1tRC84Rk1XeitGdnRHQmQzQzBwdkpkMDRjelJUV2ErNWh4RVpkQTh4ZkZjNXJqSXV4ZEEreDR6N0xjeTgvMkNBNnBEZ0dIOEVQbG5wckRxc096dkljYjhVWkZYcTVtTjF3ZDVTTGpuNCtiUHhzdmNhcUlOVVJSby96VzJUYTlwWGpkdjlmM0ZrdU5XS3pvendxZ3FyeFNVWGFtZVFhWHBTeU1ZV1c2bDdCWW9aTEZuZUg3cjB3aG02b0NLbTdNaUdGR2FmSDZmMjdzS1dhWHBlVWwzUmoxQW9XVk5HT0dGd3hZZDBsSlFMSW4vcnF4dFRPbVNzSmQzQjUxaEJtenBSb1AyVmJJVmhSOW1yUkxWOWhYM050b1RURmpFVFduQituQ2s3bE9VMnZzOVNMWFplSWlrVHFmYUphZXZ3SkZ4YmxEcXZkM3ZyOURkVzcvKzZKRkFQci92MDdyMlE2alFmVFFlNkx6V1BQQmpnK3VkLzRRaEh3ZE52VWZkS1BzdG14WnRpcXJ5N0t5Z2E4WXh5c29iVjlHcXR0ajRDdGd0Yk9Hdml2cnFNN29NNnlPc2x0NVpaaC9rc3FxaHdmQUJyVTlKRXRyM0tiRmZSRlA0YzJTbTRQNTdmU3VxV1ZSN04vWFJTNXVjR25wcng1VHZRQ2UvOFVvUmVUcUhNakxEOFlyL3VhRzVIc251eDZSQVk5MmVieFBlTDNUelJLSldlNzNEdnM5SFk4Q3dPNE9yM3ZZNjJtbnBlYnBiczhkbXM4VXNYRVlub0NjY2dWRWo4UFFWNUNyQktyVUxJSUtsdTQ2ZTJjQnlJT1c2eVpiQ3JaaC9UOTFRNzY2UWRUcWNKV2JPaW82WDBKKzFGOWQzSUdvTzNRa0IxVWhJckxOdEpUMS9kZi82dGQ5UC9uOTA2K1hGY2twQndQbU9vVE82SFUrWEdjSWpId095TFJESHFXbkVDMHcrdWZKMUpLZ2dwRXdjalVSanVFYWZkYjB5ZjlMSWxvVVhNQ0R3TDhWTG5GWUM4VFU3cVZWK2lyUnJ5L3hXUytOTGQwMVJ5QkNVVEd2OTJiNVhWMUpaUDUvTlR2Z0hVZDFSN2ZEMjRXZkRpQ3BNMjNtMTNOeEptS3g5dWtycmxoRjd6QzZacnQ4KzFyZnRlMjRWZTRpOUhhMGFOVUoreFhMQi9XZlpmRXJ5cGN0WDdIaUh6OWw1TkxtQko3QVRIRThmdkl3ZGp2R2QzK0NZQWphVGtrbDMvejN3QlZqOHZNbXp2REFWYmFzQWdLRzFPZkFqSW1KMldFUFpzRk0ySVpiNUxkc1NMKzdCTXo1d3J2TjZScXhTRlRELytXN0FpRC9Udk9JV0pyOWs4dDU1WGgrMWFYMlU2cW5seE16RzJhUWNMdnpHWGFmdDBvT2NGV3ZFVjJacVFyQnREVU80RExLdkQ4ZkppVXZQK2Z0aEFma2lnR1FpbE5BanRCVVlxWDQvNmVGa3MrdUMwWEh6cWRLVzA3eU5rSlR6bnUyKy9SRzZESGdlbGFibTN6OWJVZDVYenE0MnRqWlk5cFNYeGtzZC83bWxzdG1IdkcrTzZYVWUySUJNemxTejhWeFQ4VUZraDJlUXlKKzN0Zi9HMkpDbGVIc2J6UDkwQmJSbkNhdTlBbXVjNlpQR0NSWHBIUERsTmM5U21ZejFQS1FuMXllYmgyaHZNcFF0ZmJJd3JwcU5MVEcxTmxsMmh4dnNHM3FhVjlMYmF3NStkYkdhdlFwTjFzSE95dTJ3SkxmNVZLK1VPbnBIVDJvb3h2NHFNb2RWV2dKSDdCTmdaSGVPdnRmZC9zdEtJTnJjblZTek54Q3VwUFFrQVAzNHlzVG5RTm10N1ZiWmErM1VOcFlnajVaSGpCc2tLSzBRUXR0enhkWFhweDhkY09EcnRKdkIzWXRYMzlHNmYxVFpZL2JWZlpFL29pSjdzVURMbHQ5dC9LWkRjMTVyL2RrZXVNYjR1Q3VWNDlaRVF5a24yUllNdG05UlFOL2wzV0dBQlhrRkw2SW9IZjhuNmR2QWtoR0x5aDdiZWd2aGM0VVNDb0ljUG5lcWFlWFh2Z2d3QWVkd3Qyd0k2NDVEWG5LMTIxSGhZQnlqVkswNk5LNC80OGFMdm9YVXkydDRTcGUva1Yyei9UWVdxcWozYkEyR2pHczdXamJvN0hZT21yV29DVVNQYk4ydUNWUnNXK0VTRFhyUnZ4K2NpU1pHdFg0ZmI1UktxVWQ5bm50VkJwKzlJeDBZbkVKYlVVYUtXVk5IY1hVSzh5MW5aUjdpbzlETFB5ZlBTeVhUQ1Z4MTc0bnFsbDQ5b2tiM2F3SUxLaHVQYUxXUFhYTnV6dTkydUhFT2FKNCtlajV2YStOcUY1RHhtUTBLSHR5eGpuajA2cDVCOWE5NGYzYXA2by9NVlVhdmYweldQSkE3aEo4S1llYzVlV1RBdmhNNmtWSjhzVXppSURNdktYVWI1QitKSlc1dDlKUm1mUW9UaCt0Wm4xNG9vcDF0TEd0ZUdaN1U5TzBtYzVseWRXYkF6WVhiZHgycCtwTy9DOHpTUVZHak8vQjN0bEQ3Tzg4M0ZrMk5xVldIcHBwV3BuRWsxbi9tcFpvVjZhSmRKSG1PN085UVZKU3YwaHRhN0NVNEp0eWNiZ3QvbWxEcmY0VVo4RVBnS1VnL0NjSS9nR0RKZldON0VrZSt3U2I5VHVYTjFrbTNDQmVDN0k1bnQ0Q29EQWxtaTRRMUROOFFYZHZBVmc0MjA3eDlmZkJJcmlvL3JzL0sxeGFWNlJzOXhzN1h6a29TQzNqUXltQm9BbmMwZk1HcEJoaHByUGV0dng5cnJkWHN6bWU0UUtnc0o4WVByMGFhYnVucWdBeE1RVFFEditOUGN3eGoyT3lNNmR1LzNmbm1qL0d2MTFrUFFJQmZOQmNDd0tUdzNVZ1M1d0ZyQUFkUnhWd1JnVzhxUUl1aDF0SEtsT2tyOXJZeTE4ZmFvd2lXMnNnNjdZR0wxakpaTUpVd29jcTRUdVZ5QjIvN1FLSzdYUWJvUEd3QnFMV1FEN1dRTDdYUUg2ellRMElJMzdvNisyZ2FBSDcxMjNkMzdjL1BEZGNLMElBaC91YkVYSzNDV3dIcDJFeVBPeWJIOXJZbWYwQjJQc2hBUE1zU0habWNldjRGc2Z1eGYzOXhmMnpWLy83RDRzWGtiZ1podGw4cXdZT3FJRUgxR0NmKzhFZkw5TnFNNStHelZmMm4yLytNRWUwbVVldFpjQmUvU0hvY2tZY2NKNzRCcng2ZFJnQW9EMDRCMDcwcWNob3pZTGtXb2I2NWE1djhtZVdKbW9tQUdwd21QSWZRQmdXNU84V2FqQUh2bzFkdi95aTQ4YjdiZndUUFozc3hBR3YvYWVvWVFBZ3ZsOUtFd0RzNlI2NDBmdjF3Ykh4UzlIK1Q5ODlyU3JOYnEzbk5MMWZIbHdBK0VSRE9JQWZoMXprd1JWSFdndVBUbUVmV0svLzNYdE43MGNlenFYYlJILy9zNkQzYjMrUXN6enNsTkprNzdkOUd4bHNUQ0hweHpJOHUrL1Q3Nzg0UXRXOHNvSDNRK2pKQkhDUjhrcjRSeUErZjZ1RE16NE1jallQOTdTaHY5SENucDhLZjNpR1VndmJnL2REdU5EeFNhSUFLTVQvMjFjWjhLRDhETDN4dVRoRmNXMmk0cDlWN2hYTFcwQlZIMXlIbDR0N1BMMi9sUXVvdXpoWDc0cndodjBha2JLbnA4OTdQTk83Rkh6am9pdVdsRk5lcytQL3NCYlAvMktuSGR6OHVtdnJQWlN4RmJMaXdWeHlEVW94cFJrM2wrLzh6TWVQaDVSMUdBY0E3c3JWKzQvcEFtSlgyNVZzaTRndkF3cXhXRFRhRUZKdXlEUTJFY25XWHFsS29wS3B1YW5SQURUQWhaTzA3WFpiS2prYmxuV3A3UjNZYUFOVFBiNHBHVGR6dVVPcWRZMVdpZThtRDNqb2NUMDZVeXdRQVVsQTIwWUJvS0psWFJBSkRNbE5rTVo3eVNvdFpFUWpRSS9FVWNsV2xkV09YVlJtQ2xlT2dyWVdWSTFCTDdtYis3MmUwZE5yc0wwQzRkWnMzb0VLaGF4dU5zbkJFYkZ4TWtTRVIrK1pqTFpIWWhKVlYzbXhveVZSYVVUMHFqb3ZyZWdjVmRSc1hqa21hRkZ0RWVKbGplUUZWUXBtVTA0UWNiQ0hqQXoxaVVJYXd2bE9Ya082TFI2a1hlb21YTW9qWlJOVjNmcXF4MzdIaDdmVWVnRFZDMStacUV3bHE2NjN6Y3k5M3E1NzQrcXVBcjB0dEJVcWYrSnRqRmlwYzBCYSt5bDVhOGNtN1l6TnJLTkErSVFGTzNwZjFmclZiZTFEU3BoTldSdG9IZUpOaGZzWFJlZXhxdnNGcVNmVTc1NkUxaXlyc25CWld4cFlhR1ltSVJLdldTN3o3T2cvN2k0Z2RtNEpEYVJjbWhqcksxTTZOL1JhY21PSmhHaGw5WTA0SEt4a2paL2NHdktDbkFydGR1d0lkSzFJUmloV3Rzdm9iNUhZV1ZhaENMNTdpWlpTOVNVcStEVEg4OTF1QUlqeWxWZW5OYTF0U2lHYkhTbjJ6WGxucDh1cWQ3bnFtUG1uQ3dYbXgyMVg4dVBIeHpnZkVJdEV5NTl0dDkrdXY3TFhkbFBveTVsNjcxbDRNQUoxbzVXb0tJRjJGKzZYWjFUdDYyTE41Z3V4V1dXbEV0TWt4UGZkdk54RnJZZ1IxMjFSbDJ2YXNvRDhlZzYzc0Y0dFE3bFFlR3hiUGVMTUNUaXFyMXdETCt2U0pmVjIrNk1YZlc5Y0VNUEswTC84N2tFaThZMnJiOVZEdCtQOUd5THY1Y0JXSjFvdTdjS2RFeFdlcjhqUDR3dkRTcyt6NkJ1UGFHS09ML0NtbGlTYTRieWlMdWcrbVJCUlJmQkFON0dTWjAyQzRYSDhlcGRXci9DQjhnYlVaVXBlU3M1eE5RRElPWVZBMUVtSWVpS1hXS1pSQTFWR1RDVHhvbU9vZ09qUURjZlgrejFybE95aG5Vd3RFUFppUURTbFNRMFhIT1Y1c2k5ZTZaM3E2OUJudEMyKzZ2UG9QdkMrNCswVmJUdDQvMS84d1hJeEc0Nm1FNHduMEhpMy9YQVFwaUxnQUZaZzBMajVLSCsxWEJySFFucGhUWjB2KzNPaklwKzZiMGdzNnVvU0U3cVZ3anUzdGVoOUo5Qk9YYy9Dd0R5Ly9hVW1GcWxGTE1tSDVsVTFSOWhSVXc0U2FJMzBxRkhXQW5tbVNscW8rYXR1RzRYc3NTMTV6ZjFTc3lsNWJaM2I0cEZYODdheUFjZG1jWit6b2VoenpvWEVkYVFTWmtvb0x2bVY0TG16dXg2dkV3VzdSVkNFdFd0M2RBVUszZkZpWjFhZGk2Vk9RWGNoNm16R3p6Mmh6amZNS1FxVGppajJ1MmFwamlUUHJhUkdKNzdhTmpUcGNkNmdQSkJXQVA5WHRhcGNXUDl4K2pMOGpkUFB6YS93cWlOdWZEQXc2M2JYS2tscm1zQWUrUVU4SmZ5ZkEydnFGK1JQM1luMTNlaGg1K3U1SHJiTVJJWXc5UEx0b1g4d09ZRzFrWGVDNGVhOVowMk0zYU1hdW56OWNueWF2WHI3TEVRUEhxK3FwaGlKSHkwSmdKZ0F5c3pvbXozVGxsWUJDZGJJdlJPY1VlTGdOWkx0TE9wRnByWDA0V0tPZ1Y1QWxpdzlleDJiTTJ3Zm5ZK25Odk1WL2l2dS9oT3p4RkhWYmxKRFdhTko2U1JsdVZHOXNWcTB4clZFWFRmVUtCdU1xNmdQUVhkVXMxSXlWdFN3Sld4dmhkK2luWFE5SUM1S2h4SExNdDRmbkpvc3V0WU10cVhBTEJ2blFGUUJtSE9XZGxWcitEVFB4bElnZDJHTXE4bGhQNDhSRFhPdUVRTVppODkrWWljU2t0Z0pJTG5tTGg0T2gwTzBlTXF6ZG85YnlvZndtTzM3dWhQckpJZGNMNzJzRTV4OHpxaW9WWW1reFZGRmE1L2JsYW8zQUtnaC9rRU9BbVB1eDViRE5PUXExYklLd1VtSmhpWUhDM0NjbVpMdmtXRlZrUTVaZWpuRTljQi9zQ0lpNGxVMGtZNmV0UlVOYVh1b1FMeXRKME5veTJvTUNnckxpSkNkUVIzREJPZit5eFVDanZMZlFGYkVlYS9UbDcyU3VOT3VwbFQrbkJ0YVdncmx5ek5jUk94c2JYL1RGZEp5LzJneFBhM29VMkdwWWJDaEwydjVIMmF5SU5XTlFML3ptS3pZcVVDc3JWMmFzcmVYUkw3L2NsNGFUNjdTTVRBeEVmSkx3aE9oTmhYT0p1L3Awd04vdkNWTXFDenhPamZONWVMUkxPQ0tJYytNcjF4ZTZmQXdiRnNXNEw0YzI3bSthdG9BZEFUYnBsL04zUkpnYkIwbmZNMjZMZnVLa1BSc0RTRUEwVk1UamREWFk3SjRmNzgrWUYvUDQrc2hWK2hjbFpUR2Z5UFRtOTB1VktQUmNCaHV0SzVDS1dZZTlwZ2E4Y3VDcVJqaGNNbzV4Tmg0UWNZNkpSM2FrNVk0MW01U1JCNFdGRlV0c2lxQVVqVVNNQlo2N1BjTUlkQk1hMmljRko3VTdqMVdzZjFPYXlHY3F6RXpDM2lBV1VhNUNqV2FjM2l2MDdDU0pSSW1HRlBiaWQzT3I1V0N3TGYyKzRKMkxzYlUyVUZoVlN3VHJGcUR6SWM0Q21CTmpKRFdsVmJUYURRYTRtWWtYcGRza3lKM2RUVWVUMXhHdGxUSUp1Rk1PR25oT2xIS2toTkVHaEp6OUJsK2pBbERNQ29EUW1xWnpCV3lVVlNJUEhWYzYyUURaZzlQSE53RlpUREVrSWtsbWdRaVlMQlFrRDRIWTlWb3JLdGFBb1NMS0FGcE5jWlVTaG13SU8yc2xSV1ROaldtVmxCOGY0UlJ2dUZleHdvcVExWmtCYXZqaHVKaTNnb2R5ZkRKS3dMekFGRHZvaGFXaERSaUo5MmpUb3duOTM2dHV3VGkzSmxZbE10d09DeXQxNXZGMWFCbEFtWkE4Mm90T2RJR0N4MFdRSm9PeDYvM1kxblpvZmZubERsbzNiL0g5cjBTSURMbXdZT3VKYzlkYWYydFdSS0FMYTNEVjlwQkdMdG1idmEzcEM0YUo2MFI2WHFiR2E3UisvZVQvZDVRcW4rbzhvZFk5V0MrcHV5VjAxaGlDSHdjbzI0VXBWRjFIUjBTbXYxNEljcVVzTkJqcFlyYVhvcEJGNUphaDZjcU9rL0phRlhtcDhsazBKYU1naENrRkJ2UURQenJGcFF1QU9Jc2FZMnY5Mll3cDEwZ05GRXBjcmRoN3RhZU1MUnRUTWt4R3lVeFNWVmdGU21YWmFOUHN4c1krSVpwOEpHa3hwT2JBRjlOZDBhVzBQUHducnI4SGpDYkJDdDdwY3JkTnkrSDI4bTZRK3BYajQ4K1VNSEtDMkZOajJRM2VmKzNhUnFIdVJEK21iLzVTZWZ3OTRNYU1MQ2ZHVlpaQ1NmNlM0K0plL1BoQitTbUsxSmZPRFU2RTFaVXE1TXQ2dldjOXphT1U5VmxrZ3ZxNUl6aGVYcUxoWTNwOWRNUDc1by8vY1hoTEdlZkhlemFLODh6SlYxZjgvNTVpNnI2OWVRZlpYRDMxbDc0cE9iamVyUFpmUmszYzRmeC9MVXhlWWd0Yk03dXcvMXFvZTl6YllucCtUeU1CN2RXMDkvQmR5ekticXRlS0hrc0dseVFVRmJLeGQ3Tk5keGRFa1pBQUJBOGlsTVBHenZSU2dHQkVEellNWG5uVUZ6UlRIVVNnTlo3VlVUNmtlQWUyNXBxZjlRWDFmODRzV0RpSTlQSEViVTRaV3RMWUxQRVQ2VjBRTm05ZWw5aTBMUTlIZTk0UXZDbHVuSUVHaVJjUm1wUG1aUXBEUW5tRjZraEFBUHh2eDkvMzMvLzk4TEgvMXRTTktJZkFNQmErdzhaNUFGOFBHLzlzNkluK2U1c0RnR2dZQUFBRU1DL0g4Z2p0NnZyLzBhOVU3N1hYMEJvS0JWQ2VvN2czWVNOdDZ2VlE2V2Q0bi93bGVxOVFsWk5abTFJenkvMnl1Y0wvQW9JUnk0RHBmdU1RMzJ3Sk1yUDZDTFBVRGZoNnVlQmxscmhSZkFiOElONVc1ZVNWY2FwTytyYVBpK3hienJmWGF6bzdPZDgvN0xZMVE2Zy81NmwwcGVaQkFxby9yNHQ0Rjh5MytoaUNHZTRua0FqMCtYV1Vna3UvbXljZlYydnhFMFpEdnE3VCthVXRoT1V6VmY5T0pBVldBbUFyeTV2d0Q0bnpTT2ZlWTJkcFV0dDIrYUFmWjZxZDBObExzYzQrNGs0SldGdmY5UVRxdnRHTGVSalpoT0M5eFo1MWNMM3NJRDlRNVVqWmR1eDJ3V3FrS3B0RkdVSUxabEhMd3JaSVQ3RlVKY2lwQkQ4ZktFOXUrOC80aTBYOHR2YnZPWUUzQkNQamJIbEhqdG1JdGt4dmlzaTJvRXVmSnkwSVFZTnpEMjZvOCtLMGJGc2w0dlkvdUlKUUhZb2VOOCtXUVE2ZHdKUFMxaUp3ayt6MkZTMnB5ZTZyYzB0YlQzQjgxTGZoMlM3aGhmVW1yRnlMcTBFb21pSWI1MytZS1ZlNzVMTWRBd0RrSnNDYy8wU0NzVHN4VStZV20vS2V1ZksrV2pjc0Y3WlpGemJoVEVqM3BuNXl4VXRENVZXRHNzdWVDdGljL0MyTWRmSTU3ekk5cjJRSHVOU2ZMMjhKeWx6NWRrN0VuSVJQMHZ0WHd4dk8yRHJNdmFyeEdKRXE1WFhMTCtMRjlSeHdlbElkaE54MGJUSHRKb1JQUktVVGlueWxaSUU0RTlYbmFVVFFEZ294QjJNQXBBblNrTks1Sjd1NFN2QnRuTy9zbWUvM3QwMEF1YkovTUhmUitrOFpFY0Z5Z01BQk5DUWZyUTJGSXdEdFRzQitoOGNnOE1CQ0l6RG9TWUhBSmJCdHdiRTNYc2M2OTIvTk9EVXJqWWxHa2c3RjlKQWtVN1hJS0JZVzRNRDNwN2R6OUhNTXJzQ0FyQXI3MEkrZm9hYzNWZVE4TFg1UklKMlJqM01HdFZyWUNWRzB0QTZLTld3b2RyZU9wVmEvbmpYVTZ5SFdKeFp1eWJKNnU2Z1U0ZDR3MTdhekVKTW9WOHI0d0QreWtya29FWjkxRlpxNUhMeDlpWG9BdzgrSERBSU0ycHFXWER3em9mWFBOd2JzZzJmUis5azZ5S0ZnTHNISmtYOFFwZm1qVmNkWW1GU2dOeGVyMk9aWWdvRURaS0I5WDFtc21SS0VubHJJRFFOUVBsQVVEWXVsU2ZHV01jeGVJZWZlcU1JNnZCQzFheHc0OTV2SWJmd0JXSHd4VlV2VUl5V2p0VHdXMVRnK2NaVERiMTlqYXJwK2ZWVkVncDVmWDdzNDBLOE5qbnFyam4wdFkyMUZkTWI3WW9waVUxeFZXS1ZQeWF4eUtjazVsUk5pRzJFYlJ2Z1Vpa29UZzkxU1hTZ2JCSmNiUzB3YTZRQnBpUnFtVTFJcGFva0tpNVdNWkdOaXJwR1N1R1VSQ1pRcFRXcWhLK0tlYXFJcXdvNThRS2FQNVhoMGRGV2thbHhjRnZZL1BXM1FycjZ3OWRjMTNhbEptMjdyaXZ0Mmx3VmhWNUZJbHBrcGFvQkVWWjVZVmF4RUZYYUJOYS90cGpmeGRaZXp1dHcrRGMrSVAvSi80eXk0TnpncmdiSXdYMEVHYlZDWmFXd2xyU1NjajZPL0UwK0lCRmgwZDBpKzQ1djM3ZG1OWlhLOVRYd0d2OE1mUGJldEN4NlhMK0FwQ2xEVy9Iak5pSys3dnJxMVNzNDIxMjhiYkcvTXZpTWM1R281SmMzS21kZFoyOG83RVU3VnJDR0JQWjROdEw4OS90bFhGMGJJWW1OSXdCQkFRPT0pIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpRdWlja3NhbmQ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQURJMEFCQUFBQUFBZFhBQUFESFRBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdsd2JuRlljaHpBR1lEOVRWRUZVSEFDRkFCRUlDb0dxSUlHR1ZndUVLQUFCTmdJa0E0aE1CQ0FGaFVJSElBd0hHMnBnUlFkaTJEZ0FhUEFaRmtXd2NRQUZtKzhUUmRrbW5VajIveWxCbXpHaGRlaGJaU0YwUjd1bzdoa1pDWkdUNmhucG9iWlRXeHk2Y09EaDBFZy85bzBGUitIQThzM0oxYjN0dzU5WG96Z2NDTndqWm10dHdDVnhYNGhMb3BFa1RhUlh0MFpJWTJJdDRqZjkyWHNDdk1STFV3ajJRbzBJa2hjeEtrWXE1aVF0Y2ZuaW1ycFowanFIdEduZ0pibC90RHF6aWlxZHF3QXpvUTBUTHg4Nk16cFg1dEk1VC96djk2OTc1cjRBb29zUkJESmZCYm1rV2dzSXRvcU5iRzJYSjlDa2VvYkhiZjN6QkJtb0dBMUk1YWd4R08xR1Rhb05FRlRNNjdJdW9uOUZYdnpmK2l1aXdRRUsvVy9haG1pYnorVmRFYlZWUjRZTitQZC9qY3pDVE83TG53V2dJcUZsNVFBbDIxWUIycDVLSkZsTDZKZjdaZUJ6ZnU0Y0ZKM3ErQU9DOFFWNjZ6b2JXd1loV3dEL1Y1c212RVhvekVtRVRXdnRLRzJUUEczaFdjcFFtOW5RT3ZSOEpGSVZnWkJkMm1iRmMrSTFmWVh2d05Ra1ppdnF5UDBlOTM4NnkxYmE5ZDN6QnFHTHF3QVgzWHB6YlRINit0Ylh6R2drQTJ1SmZReWVsZldlSlN2Z0MwSkZVRjFheE5kVFUySFRwU2o3bEpsL25lbXE3Kzl2U01rLzZKYWRHc3NxcmdHZWV0bmFOVlBMNHorZDdxeC9zZ3huRjJUNWVnSFNVV3lYN0FERFZNS3hveHowQmNodVh4aTJBc0NhdFRQeXZnT09OVE9ick9TY2NHdUNRbHpoRWJLQi92cnR6MWlySDhoc1puYTc5bkluaHkweVJFTENKeUxnV2Y4Ni8zQWdUREFBQUxwak5FZzNKTk5RWkxoc1pMb3lwRncxcGs0ZGN0aGg1S2lqeUFrbkVNSUJRcCt1Si9pbGtoaXB1Q1BIZWcrRzlscEZvUS9hK3hPS2M2SEZBeEIyenJwM296QVhhaUJ1eFZNOFZtQ2tXbVY3dHQ4M1VxbDZpNnh3eWFzd0NwVjkrY3pVNU9manJNckgvQjFiZHNTWks3bVNXL2EvdENtdktvSkVpaFlqVmlLUFByeW1LVkRrUC85ck1NTXNjeTJ3MEZMTHJMUFJEbnRkY3gwekt6TS9FNmlBcENqNkwvay9hS0EzQTI4T3lWeGFDNE9sVDVhZHVQTVBXZlpCMHZCa1J0bmNZQUdkaFN1V2JsbzI1MXJUOWVDT0NLTGdmYllHa3FCSjZWUXlhNEtUR0lIVWc1ZmhxUlNZRWpNSFJ4SUhJK2xKM0ZUenROMHBXaDdERERGUHB0b3B1TjQ0Si9BSWtnMVNlT3BjaTloUDBSVFFFaVdPd3p4TjAwWkhVK1VwUzFHRjhCWVBFRDNBQkxGMW5xTEZmQXRTSWRzNHRaUXJFSkN6OVRLdFoyVE1VVmhheEhPTFczaVlTdDBwb0VjWWdvU3g0N1ZEcWN5aGtna0ZQWUhkdk1TeDlWOSt0NzZOTFpxREIybTlZWWhtdG12NHowbDcxYURYL2hjek93UXV4cTZrMWxVQzdubW50Ry9QM1N6ektHUS9md1JVRC9jT01RaURJcFRnanh2dmIvUGJ3RTlzbEE2aWpMSVR4YmtHbHAybVhoZlUxTzVBL3lIZWFiUldJeklkV2pXWjJXMDk4UzNOSm14SVV4RDBKUzJJUXFoNy9ETE9WRlVZOUkvMDcxZHFKRnk0Z045U055UHNBcWtsSkdYUGFmZU0reGJGNXFJWWMvSUFCeG1sbTRCY0Irb1BPUnoxOUNNMm91aDJvR3RFTk4yQUpGckNWek80Tm9EM2V4V1NFS0c0c2pNRHRPVkpTZ1lMVjNvU2FMWWVlNk9yRTU5Sld0STdYcTZGTU5CNnBCYUR6bVNHN3g5UC9uY29BUUMwWU82NUFWLzhWcVI1cEM3TzBLSlJTVGlYTUhlYWp6dnE4ZkQ2VEVhdGRTZUVkQ3lKeU9QN0hTMEhOc2NqbjRFVUg3SVZ2NUI5TmNIdDZRK1F4cjVOZ0psRVlwQmJsN2lXRlRnMlN2c3ROTHBrMXdkMEVPQi9IS09QNTFvQWtLSGJrMGN4Z2FVU21FZHp2dlJFWGZYblVFcXhxR2dkeC8xcFVCbjZ5U1ViaUw4YmtJbENwT0MySEYvWTB4NXFweFRMNkxtbFVQYkZPSk1qWVFEZVlKSWNZQWh0S1ZxZnJGS0luZ21qT0k1ZXgrV2JTVUFyQ0dOd2hJRGlhS1BRVjEyZXphZEEwNENIRzg1TFltaDJnaU1Fb2hndUZDRTdXdDJSbnBaT1AwTEFtempKTkpNbDFGcVEyd2ZiVUJKYjgrZ2RmaVNHU1cxZ0MxdFowejdRVlFkZG9UU3lzalNlYnpvbGZ5b2hTdGdnQmVlTENIT0RmTXlvMkJPUzhhMTJoaWRyM1lVaFJEVlhUQUl4RTZ4d21zMERFZzFNUkZIQUd0R1pKTEU2Q3RCWmw1SjJBN3VsVFAyME1qUVh1K0ZHY1JoakNvVlh0b3daaXRoZUFpZ2Jsbk9aSVJnRENnWUtlampCUW9RNmhSaDJMSWFyR1dCN3orWWl0S0F1cUVNQWw5UURJZ0hjOVJzWWlVekFOZ01zWkdMTG9VYXhha2tWcmZEb3pLMjEwWmJLMDRacGk2Q0VCVm9zTU9BQVVWZ1Fpd1YySE1qQkR1S1VnSk9JZ3lYaEVNbnNVQ2xTYWFTeHc2VHJpT21NUlYyNFdTRy9BcjFvYjhMTjlNRmFmYkZvcU5yY2NDTnk0a2lqcUl3QkpsTndCQzhtV1ZnbEcrdE1aK3Y1NU9NVjRFaUYyS0NJYlZTc2xGb1pOcG1GdzgyWFdzd29DNTZLRCtxVXJvSXpLbW51NEdBWmVKWi9FQUJNNFFXUVJwRnFob1ZZQ1FmUGRwT2hIR2FXdXg0ZXVGaUhudTQwMHBvMU43Q1hWTW5mS2pSMllkRmlzY1dxRnF1QmROdkFhOWR5OHRFVFArNzEzTHdjRFB4dkRkMGF3KzluZXlmZ2QvWTM4Q0VMNXNKaVdBbnIrMzMvd1pLY1Fud0tqclhpTUFCcER1Q29hVWlrR0lTaENBRUZ5RUVWNUplbEZjSEJwOUxuZS9lL2E3Yk1FdzhLcFA2WlpWbVZSOFM1b2JBbVZaSldPTTV5MGo4QkFCUVlRVFVtUXlhWkdFVDF4OUhEQ1VrTUcyTTJIRU9odVg1SGpUdUJwU3BBS3dpWE9tc3FCcURBWHpRVUl3WitmT0JIdmdaaFloUEczL2pWeUl2Sk9EZEJJQzBqSzVzS25ONzZxVXhzSTVSanRBcGl2d2NtZUFRSzlGWUtHc0VTdENRUW9nNzZHNFplbXFUSlRBUlcxRDh5QlZJUUJWTUloYVp1L1ZIN2hTT0JSRktSbWpRa1Nia2dRSG9pcll6aEtGWFg3TElKb0xDNWFhbmkweGdXTGdSZ1RnbGtyT2ExV01Kd25ROVh6bGNmbUFEc2hRNEg5RW9lbnk1U29ySHJXZzl0czBwSTd2LzNzRWV3QWF6cnVDK0dDUENmeHJrVDlDWUE5QzliQTVCeFNLSzNkeDBBWUkvZXlpcW10QnVBbzB0Y051YnI4MHdsNCttNE1QajltS2FXUC9GSjF0bHRQZFV6TzRHL2hMOVdqcFROc2xWdUl5Zkk2WEpYdVZpZUV3cXQ0ZGJtZmo4QUNDSnpTZmRuNHBNbzQzS3NrWFd5c1FWcGpEOVN3bTBGOUFQQXZ3T0FOeDJ1dmNiMkM5dUFDOStFQzg5NHp6cWZHYVA3S09iaHJuTTd6MjBCQVlCRVFIOG5nTjdLOTNaMWV1VnpOUHFuN1RQSEl2TWNkZFYxaTYyejNuOU9tV1dUK1phYWFZa0x6amx2Z1d1SWhpUlFzR2EwbW90Z1lHUmlaaEVsV3F3NGRnNU9pWklrUzVGbWpmK3Q5UUFIb2tKNmIvM2diakwxMWtkZk9iUTNnQmg2Nm11OXN2NjNUdWRUb0ZDUlltVld1V2UxUy9hYjY3RGpqampodnBzUmNVdU5MUzdiN0hiVXVPdWkzLzBSRGxmYzBCQWV2Nm0xMVQvKzlxK0ZCQXhIaFNkU0N4QXVSS2d3a1ZyUTBRc2lhODJxcGJaYU9hT05CQzd4RktsaVROTmVCcmVPMnVtZ2s2NTY2YTZIbm9ZWVlLQkJQRWFiWUt4eEpobnZySW55NWNpVnA4UlVwV3dtUjAyRWpUYllhWmNkQ0EyL0VBQm9EUUJzUDlCeVFMOEZNUDhBOEo4RE53Y0FBRFoyRmJ5RWhPTVVMQ1dxb3BoSWlGRkdQNi9KU2Jibm5KZ1V4VjFEekxRQWhDSkl1RWJCbzNneWFTVUpSU05kRUxIU0h0SU0zSEhHc1NOeGZld0VuY2ZyNmNDZ01XbDdqYWFKMDBleFF0UVI5aWlHNENVdzhnU2lKbm53U2IycnNBaXBSRWxueENZTXM2Y1N5SStlMlJ4NkVxYitDckdFSG1Pb05BT0ZwSlN5TmxBVGhIVE5Qb0I5SFFPcng0ajVYa3pPZzRRT0NXbWNQalJ4VEMzVThZUG91VVU3WDd6TXZya2lXbzdkSnNablFRQUU3bm4xL3Q1ZloyUkVRbW8wd2VpdXZKa0xsZyt3Uk9rczV4UzhNOFdMbFRvRXhLUkp1TjVabHVjOVZ4bUdwM1hvaFNGWmc2MDJoMFBwZlFqZ0hITGRVOWRZR1pHVWpGOHhHUGFmcENpTkJxOVY2aTA2VDA0WVlwNG9LMTRvYzNlbHJDaVZFWURjL2oveVFTblBPdGFKbnpIQmFhaGNBMENmQUNxOFM3NVp0QWswcFRuS05BdXVNUVdRYkZpdnRuUFV4bk1MUU91MmZFbU5iMVpxNTVJTWM1UVp0bXA4VnlsUitGQllveWxYcFg3VkJEQW1kbUl0SFYyRlJ3eHEzZjR6Sm94NHQzS1pmcHNqeTh1L1ZXYlVnN1oxUjlNZ3Biako0dG00V0FETVFrNDV3RFNrVVJndHlFbXcyTUtSVFdERlpkTi9GR2FSZlpIYmE3T0xZTy91VDRpSEI0cU1jcXRIN0tWdjBicXdPWkYvdGVZK0RRNG9IVVFZaFE0T1ZRb2JUV04xUzdEQjhQWGMrenV4Nk9RM3hPMUZkbUVxQS92eWlLM3R1YUhTUmFXNDBPWTA4WlZBUFRXTVh3SzRaRU94QmhDOGZUd2FzR2h4S1N0N3lRbEJvVDUwb3J4K2tOcW9tRytxSU0xNFR5WFZoU0lEMTB1RUkyQ2N1Rk9xNTRDY1F2Tnp4L3BjZjhHb2ROWS9TM3htYVYrekpac3c3OWlsZTlGL1U4cmhQVkM0bVFsY01EcmJvRFlTNkNOYjRBS3d4cCtSRUZWUzFUSTZVTVp3NHdZV1FOUFFXNXROVG5GUGROZ3cwRk0rZHFnSGc4MjZKOHNpVmkzdW5RNFRsc2k5Z2I3RzQ1bVdMbmQvRHorL1JuYThSTEVlNTltcXByN1Nob3F0VndTSXZmbUdkVjJ2OHlwcWpVN3Y1ajZuclAxMTFwZ3NpTHhOamUxV0hCOGJNanBXSjgxZHRTMnBhbndUZ3duTjIzM1dxdzRiREpTWkdsQkpUU0RsSGVNWVpYWnRPOWZ1bFdNL2UwRE4zWnpORmJ6Zi9kczJ1WElMS2d4ZGt3TjlXRVRadTdsczVya3d3Ukt3eVZ1VjJGTTJlYWxmR1ZhaDNMVTByNTF0V2ZNNVdGSENKL1dNWVlVamhXeStjRW84ZXlXQk1YRXpXQ1ZMa3liWWpqMXZyVkpkbk9SWGV4c3JnVURMcWJhaDJvaUQ4NTdFU0dMYXZ0a1RMSlJmbU5XRThlYUcyOTBXbTVJc1hpNVRoN1d3bE84YzNMU24zZXVpN1dSNUg4eERZMTJMQ2JDeUV4Vis2eDRmM3RRd1VER3IzaHRsT2ZBRzYzMTh4a3J6bXNqYnF3WXRFVlNXOHZSOUtMZWhaN29KM29rYTVqV0xWbjlwV3Fjcm1EMlZ2R09hSjhlbitLaU9kVWJrUFhKUWZXNXhaYjdXMlJlRHRPSlRhME5iTnp3dFJKUEFaOVJ0cVNheDBxR2xMazkyZ3YxRFg1T1VRKyszWTZ1MFVLM1BQeURSYzhlSWxta1NjRVpwMHdTMnc2d2NLMytLcW5KMzR5ZU5hYnZGNS9SeURSMGo3OEh3ODVIbXpHVk9TMFdJZzlKQWVsZ080OXdOa3RJN2hBMFc5a3dKdWo5Q0VsMkdhQkw1cWtKWEptZ3NzUzZhZ05Wdjdvb0dpQWd4YWwrM3F3VFhmVGlsckNtbFZsbzhZMExNMkQvQU5oZnVpU0pyTlhWc0J4MFd0UGJrVmt2TmFIbGt3Z0ExY09RdEl5eUVVZzBPSEhsemQ5MVFXM3JsM1cwL3MzZHduZllLMGdDT1d6d1B0SUNIVm5OWDdlQmdSblJjR1FTcmppdWMxd253cVdVbDE2dlJaOVZoWFNlTUlTMGtmSkM3MjhrUGsvcjJERWRUUEk5MEdLQUptdHVSZzBwakhhRTVTL2xteTdIUUNZM2dCcWtiYmtwRGl0N0tNUHA5TGtRUVNaL1A1SXFEd1JDZVBSejdkMzYwT2dhRlRqc2VONS9ETzhtYTRsQ3hsNTFXY3BPOFRueWR1RmxtZmhmelZtdDZlY2g4TGVtOG4rZ1FLS0toZ3cyRVgrcC9EZXNpOUdBUlZnSzlrVGxPTFRrUUlhclhNYkpadGFFRDA2YjViZEk0YUorRVRYK0FpUTVKZHR1Y1ExWGFEenZERnExc0xhSmMzdHhLUTN0UUxleVVxeUtXVlEzRi9xMGRGajhZRDhrNnlkZFZGYTUrVnMrRFNHNnVDL25OOWNlbnVFTnFsakovNGNvdC9uN2YrcGlZZVlVcG8rRlpPbEZHeFJ2VjFXeTRWRVBHS0xKcFg3QUIzdUN0TEYyYm1XYUlCaU5GNmhCOTIzRy9UMm11ZHRJRTFmejY2VFV3M0FiclFyYWx3RUZoTzNaTExaSkd6V3p3endMakRzK3o4b1prODRnT3dvSFVBSEFnTHc4WGgyYUZNcjY2anM1U294a3RKWUJlVHJSalg1em5Ca2RtSTlNKy8xaHJjWWpZdGRacmdiclZUUjZjMDZvM211YUNrTlpjanJmUHNYbGlwYWpOTHdhdWZMNUVWU0tFQUhnem83RU14WUpXMC9vaUp4dU50a28wV21VL080NE5kVVd6SXVzTmtkWmZqZGZTVm8yeDhPREhINkx6VEh1ejJwd09UL09jQkVqSjFSVWpSOGI4NzVOSUVCQnVtM0J0dDZ6RW9kYjFoTWRvTWhyR0dxWFU0MkIwbTcza3lMdVJvYTU4UnhuR2lLeG1JSHd0Z05TdXZrQXF1dlIwS05Kd3YzNFllNFk5K3B2VzM1RTB0c0ZGMWd1dWpUTFUzNWZwVThEd2xBZlBuRzdIMDN6VzhYMGRKbm12Snp5WTQ1eDhsaEQ2ZzJKQVRFUjVteC9yRXQzbU56cTNPa2FVd0p2SWZHdStmcTVYZkJPSGphZnZRRDZJb3doaGI5blFheFQ2SkRmU2I4Vmt4cm1WVm5xdTVyWEk1UnE3Ukh5TUpSaU5Kbk9IdDhrbXZiZ2d6WWpnblRuNGR5ZXhjU3pPM3ZReURvSjlsV0lqdUlzUktSOGZiQUFYbXp2c2x2TXViYm92VGFtYzdLMmJSVWYySDB5UmpMdEpxZVR1eUFqZThZUWNKSkExZGNkdHp1VkNlMC9FcmhZTkl3dTBZT3pFdGViK1NsTUtPVVFzRTl1dVp1dnVRWFdiWHBYbENidXZKQVJYUHlBbXpGR2hJK3VPR01CSDdEUE8wb0RVdzFNNzhBTjNoSjZFQitxbzBZUmhJNThiQlhDSVVMSW15Z2hXVnNheXNJU1FCNTZocUIySElwWHpPek85RWxGc2R4dUJPWDBpUGhTeE5QOWVWaHlTU0lwMkV6WGthYlI3ZmZReGtlaVRENEwwRllDR0dpTnpNRGRJalhoaGR6WFB6ZVE2c0hVd0R5Z2RVc3d4K3VtS2lxNDlvNVFyeTRFSlBjaHZYMzJtSjFFWlB2THJKNnBjYVZ1bUMzcFFxWHpqMmV2WDRvcFU3dk51MmErT1YrZXJ4dklqMlVibDZBM25Sc2t4a1d3OWZOQWVqVndNSUU1UkhFU281eHIxeE5LczdjY044TnczMU1mLzl0UkFLTkRMSEQ3Y0w2NW1tZXBhb2hrblBlTFluY2IrWkdBVnMzUW1lczV5Qkd2NHhiSlI3UnVXaktJV3dRNmxmQ3RGdEhBZTBXQ29vMURDK1NCNkpzZG5wRW1QZ0IyZ1NRNkpVaThWRm9JQmhWM2toQ2hmMDJZeGo5SnZlZy9US3FUd2czZUhQTzVzVmtXRFl2R0NTYUJ1cUk3bmFBOW9OQjg3Mk5nb3VJUWJrRXJIYjg4SjJkTmpTNkpwRHJUZlY3cmg4V3J4a3I4Y0IzWmgxMktuTW1LcUhvMXBPZW5odEY0NmF6RTlMYTg3dWNSdjNKUjJ5eVE3bUlObGZkbkdqblVKZXQvRjF1amUrcU82U3c2dllTcDZEUnNpR2dKNUJjeFhWbzNSNUxWK1lWMXV1emh2aVhEK2FiMVpHTkR4MlB4NG5yYW1hY2J0cUhLb2N5djMwZXpCMjhHcmtqWGUwK3hBa0J3YVRNekxkWW1GTzlPL2cyR0llSEFTVk5yVHo0VXhySThUeEtqalZKcXJ0MVhyZEk3RE0rM0RlK0NRMWZXNS9WM1RYSGRmeG9yRXdNUFRieHJzUmFZcG5sS0hNeHhaSHMrSmNmTWI3WEdwUEJXbUxmdUNRL2ZTemV2MlBSYXVDejZBbGwvQjRFQ0V2dEZvOUJyR0VkWnBuSU9JK0xnZ241QmJxT3dTYmppLzFocUJhMzRuOWZKOUFEM1U4aWJ1YW1HR2QzVzFMdVJsTm9oem5Ma3VpUGVEMWozQ0REcDVUVk5HQStGaGRYb2FZRXlNVDBxVHgyUm53cHM4SXRCOWZISjN5YTVGZWdDbGZQMHJSbGw5ZDdDWjMzM2ovaGczRzJNdGF2TTFmQlVOQnJOMVRlRldGMG9jN2l3Q29RdkttZVNwaEJSZUh0eXcweWl3OTBuNnhwZ0NZeWttb05LR2htaDBJVlpZOEtCa08wVzFwcVlJaTlNaVRWRzk0SjJqaCtjdk9TMFJzZVFLNWdVRDhFQXFQMkNhcjlJalZodFYzc3dQVk56VEIzdndZQ2tpV0JVN3I3M040MkJBbjZOMUc5Zmw5TlgvRDVBK0ozazlSNk5VVy9OeWJxVHJWc3p3NXpmT0Q4Tm8xb3RZdlgyU2dZTlgxMERjNVlvUHVKTFVqNjZkVHRjT2wvUEViWVpQaHJpMytPKy9FOStOOWpiZWFRck9RNWdKMTd4MENKMm1Eb1lZb05CbFROV05IdXp4YS9EdWZqcnd2ckcwb2crWVliRkNiMFRCRC8zbzdpdHpON2R6WEdvZHo3ZkozNnhzRE9reU9TQTQ0TjhySFB2LytUTWFERnBKbjQzNE44NU0vbWNxK0NLb2lnaHl3ZGprbFZ6Uzk4SGc2UUdCR1Yra1NhYTFLMGx5UjVUa0RjRE4vWUpUcFIvemZielNrazVldkY3UnVkRllLSnFtSWhFaVJFaXIwN0ZFQk5hejRFS3o3ODBCTjNxSzlyT2IrNFlvMTh6NzU4bmNrZ1M2TytQZ0xIWmsrdlhlcjdJYnU4QnF0cmJzMWYzM214NTJIZXlaSngzb2lHODBYemRiQTVTLytFSjdMeEVmczJkUHo0WWdhc2Vod1JSYUxLTFRrWWdRSlhrUFJiQWgxanFYbVNyZHp2Z21mRSsyVFovZm00anR5K2RqKy9mRzgwaVIyNm4vNjUxaitiT2RFZVYzZVpMNzRRVWlzSWJScjNTSkY1VG9uV3hqZmlJR2VkM3hhY3VYWUkvWEM5WHRoWUFZa0RVWTN0MUVnVE5PUmtnRThRNFVEU2dVUWNPSEVBdWdQSjZGOXZVWlFKNG5MZFFyLys5VitHZ2E0dnNReENETlg3NTk1eU5YcE0vZld4QW5wOXcrQzZqTkluMjVVNW9zcVFHckdIWHBCTzROamJjdTZ5NWZjdkpvZHJId25wV2FGWFdEVkdGcVhmM1pXdU56N0Y5ZXZ0cnlqRzVoYVRvSFA3WHZ4Yld6YTJpRmdObFhwdUtjSHlLNnRITDVKa2l4UysxanV1bnV3bHFEMzcvVzBGM1FUY2RJTFVXMEdOZzNGYzJrcDZOS2k1bEFUbWVtb0FrSVQ1clp4WHozZmRtcCtRTm1HNlJGeHgzRzZ5ZVhpb3Baa1Z6ZmxkWXJUZlRaenhZOWdvMitnWVhtWUloUzNja3Q2RUVQZXpZMjNaSGhqRzB3UHVIdDF6c3o3WXNkR2VQdVpZbGVNTUlzS2EwbWJURnJ1bE1HeTNzbUplUkNzcGY4UHV6UTRISVJxZGFJWExoRTg2N1lnWUJkbnRYa2MzNmJVL1A0dy9rcFpUOFU5RjBNMEIwaG9Gbm9OYTB1Y1d3eEZpNTBzN1QxNXdOMHdxVFpmQjdyTFY4eW1oYnFiY09GL2phZGF2VWZOMnNoWjBHUTFwYjRONDJrZEduMGNWVEQ5MS9XTXljbjVlcUlSVC8xK2RGa2IwdlQxZ09KdVZ2ckNJZjIyVXVLcHA5MzZTRlcwcWxzcUZ1bUpQV09UQ3p3VTc0WHNLQStXQnhucUROVmtBZkFxSTNqV3FzaHluOUhNYTk5U3ZaQm1Hdy9LY0IxZWpReW9QRlk1c3UvT0VQRDcwVHlXb1EvaWZWUjNsOHFUU0F1dlRVWDRGNFNlWTBhTkZ6UUFpVlFGZzNaRDdHLzMwRUtOL3BjRXNBQlNqQlhZOWRpNzRybFhwSmM0ZFY0OGphSUJyQXk0d3pMd0lEVlp1KzNXZ2ZzdTBOcE9jWXd3M3ZYSFpRY3JSQzNOdFFzTFBHbUVNWDFBOHNIMzBZWnVnQll1anhDTHc3ZSs1TkRUZGRROGViR0IrWWc1YVgwS3Bxd0l1cFNMcjN5RDVKbkZ4VHZmYW5wNk9HMCsxK2RtRjM2SWdHc3c5QkJjUDUzbmZIUDdObjNRWlhwc3hNK0tweERObjErQXFXQjRrZGpiaWFZdnZQcVA3V1E0Sy9EakRVWjcxMy9EYkY3QkdLU0tKMDhYK0wxVFJSeXgrVlc3Mm9PdkExM0FRdXJYdTA0OXQzTjlGS1lFNFczYzZFOTZhMDF5WWR2aTc3K0RCUlh3OW1SQy83TFBHSmxrQSs3UjcyMjFjR1FmY1dveTZVS2NyZnhBdkFmQnlENmNOYWN0ZXFIQ2FlK3BDbG1MR3RHQmdtQ1NQN2pCSFIxdGQwWDk0dTM2MWJEK1lsMmdZczk5dGtvQTF1Yzg2NFBmQlRpY2FwcWV2aHFYQmZlMmJQbGkrUDFIak1aRmF1NEJHdVZNR2wyNklhS0RsSjR6NjlYUjlHeHhYSHM1MFdiTGJpOEExOFJUZUVyaDUxV1paVDFoVFRGZ3B4OFdqN1NQaXFUNnNrMk9LSDg1cjRDNjRVc0RLenFuQkdYZlVVb2FGODk2blVKbmtTdittSHZSSWlLTUJoVVFPbnp6R3ZIMHE5K2FzbVk5YXBxWnF3V2M4YUdET01FTWxnZVFxQlNoMFVhUUQyMkk3c2VmVGFya0ZnTE5uT3BBMGVIK3F3ZDZnL29kWCtWeVd3MEIxYTFtL3lMUGM1VlFaOXoxWkpPOExYYjRZb3JiZDEvV0xtZTdVRUI3QnIxMkZjRmcvWlZvMjZYSXNBOUp0aUJLZGF6bG94RlAwUVF3T0pwUVVvRWpndzkzVnNRM3B0MHJDS05vaDZuSnlYVkdjT3d3Zk1hZGNYUStVUnZILzUzNSswMGVZNEVnNS9aTCt3ZlV5MXBHSlVrblpPam5iakVtSEVZaHV3WTBwK3htNHhaTTFLMDJ3MURXY2M4YnNpbk10bWlaV055dUNCWi90bmhIWWp6L2daT3FMdXNnd0J6UVZkdFBGUVhlWUR2SGxSeGN3dHNSMkkxalI5U0tpZHZPYjJwazdEMC9raUt1T1h4M3BtRHc1RkFIUmJtWFZsWithbFN4ZSs0SFN1ZGl4ZmEvUEpZWTZFZW1vMGt0SnI2OGg1MlljR0t2c0g5RDd4OUZWN0w5Uzd3ZEt3S0J1WG1CVzdmYk10WjBCSVJ6RmxQY2IxbVk4bnRwc1gyWWdBdXMwY00wcXhSTFBXdDExS3h2ZmNqcXJnQzlhckUzbThKN2ZlSlJjUVZKQWVzODRyNnUvbWdiVW5xZHovZzBDMnVKb1Y3a2s5L0tXQ1ZMb3dXNU9SUzdsdloyai82cUNPa2V3K2Y1Mkkycnlxang0K3EyNS8vMXlUOXREby9teStTbFpsejlscjhPZGRqdUNIR2xkckRCbkVHRXduSlhCWG1kSjdYcStKS3RCUG1QUmVwZXdtVzk0Uk9HVkVZOUs0OCtyOGlFaEF6blR4Z1ZHZEU5T0swRVhuU0NGZHh2RjhhNEtUQzFOeThacTI3N0JOTGlGY0NITUQ1SGVoWXRjaEQraFo3OEZXQm9CQU4ra2hMeW15eUFJR1djbGE3TFc4MWxnaWNDUWR0ZGlhOE1QQUhka0h5SHFHM3BJdWh1ZXZNL2JpeGdQeXNaZTRSd3I0czRMY3ZIM1c1QkU4Z1YvNncxK1J3ZWpNekNSK0p2OC9HOUVXOFF6K1F3ZUl4WktDakErblg0YzZ0bjlZYWZVTmZsOFUrYzFXTWR3dlhBOGRhNlozUlJ1RHNYYWdBVnZUMFp4OVE2cGsvcXNDS1NBejgxelh0ZnRGZkVETlR3L25NYmg2UVdSWlRZNEtuNS9PRlhmZlNBai83NmJCQWRpWW9SRnA3YzJNcndYQlRadDVwRDFzbTJHSVZjRWZ3dHAyMGFkZjJpWlVYSTN3RFdsQ0FWWkk1VkxmNjZtTXdHWUF4ekN2bGlHbys3dmlMMTlZajRJS3owN1pvc01QVy9QcWYwL3JJenArbVAvTzdKeHhIMEx6VFo4ekd0R3NPM0VJVDV4NlZUclhXK0w5bGdlOVVNTFA1WmJmQ3ZPWWxHbk9pZUJwRW5SU0J4TisvZUJOZjBqYnR3RUU2QmFvelZ4VjRxV09MUTcrNmlrZmRHK0JLd3V4Q3lJK3IyYitnMk5NdGtYN1I3Y2ZWREtXaS9nQ0VrRDFjMUt5OHNMWGh2Z2VPUHZoNHFKWjZFOEdyN05UYkVGUGMydkRzVzJXOG1sanRGcDZjQ1pXb3NyeVJISzNROUR2Ujg4bTI5TmtWblh1cmlRSU9pU3NhRHArdjIxTTRmbFVjTHpZZXZCQUM5citNVnFOdm9EUkNnVkZqY3lnTlhLN0N4WUZqYi9sbzA3VnZaUXRsMG16bi9PdHYrZEoxMWR0cndIazFVQTZ0ZEN3ZXMzazBuVTJMU3hzeDdOTVNQWmV0c21hTXVrSkhvUFhkQ1I5SDZvem94R21yMldZeUpaTE9aRkFkZ3cyazlCQ3ozWDY5M09MeUdUc3kzcStlZUpKc2U5MnlhSWc2NzEvZjhlZ240UEFNeFFLMlh3MEx2ZmRKOUI3YytRZFNUUFN2bENyWjRMaC8yaHFtN3RiYVhEYnpBbGh1ZFNFbzdBZXVXbXFwenkxWEtWMXkxVkJycEtSTHFWUzVsWnFlTjlxOUJzVG1OVW9RTVdSTklJR0dJMFhreXNFU2NnVlpvN0hoWXJBMGFBbFNvd284RlZmdXkrWEZtb3JoT0VFb244dTV4c0Y1WUl3NWNpb25vTUlGaDIxWFIwc0hpdXVtRHRKZncrbm41aFNWRldMK1Y5UlUzRll5SUZKdlNHdzJwTlV5aWdYOEt1Y0RtamFPTzNCdm4wNlhzUWhiZk9hVWRQYm51U0RXbWpJa2s1MlRZVjFhTkkzaGxraFdyS0VaUGl3REdyeVBjUGI3L0l4bHo3YXBIa1RoL1lXdmZtc3NGNlM0a2hidkQzcUprUVVXWEJYbmZpQ1VVa2lKalFKbDhMWHRFOHFkSTZqRmJkRjJKN211Mjd5WGw0M3o5N0M5ZzFTTjJXd0VvK0REa09iUGVscEVIWGtkMG0zRE5Ja3VqVk5LTkY5VEllemYxcXhwcGRDSW1oZjhOd25hcnY0UC9WT01NLzN3UWN3NjRESUp1M0JuanhEd0lEVWpOM25hTW1vamV6bTZQRERjRngrT2w4TzVRdXcxOEdRbTRDOGE1aC9SU3o2UGNGVzZnQlRGMlRHVnhWUXFPbkdaSWFLR1l5YWRPQlV3V2h3cEZNNFkxTXBZQWdIWHEvQnRlTythS2JjR0lVV2dNS0t5TlNSNk5oOXV1Z1lzN0NDcUhDejB3cWdwM1lmWWJIbkVsRVpoZ1dmSlA1NDNmZCtPUzQxSU1xc3pHak02SkdtVXZ2Zzl0SHlFZ3ZDSVpUSzNXRUhBUkNMbWNpZGlSOFRCM2lRQnF6MUJxUnFXSi9EQVJFOFMxSi9VNEl4TDBFV0JnYjZJK1FMeDV4ZVB4cmRWNVNmclorRjJHRWpzVVpYVk5IZ2FETWROV2tzUU5aL0hBS2NOR21VMG52RUVCSSt6T21FMWl4eFhQbTRtMWJCSkhUK2tWSGt3bzhwWEVBa2FzWndUV0MyQUZmUlZZdzAvVVk0dExxMVlxTFNqWnl1YVI2ajV3SmI0QW0reVQzR1dWWHVjM1lnTlU4M2diYmxjOEpLc2ZValEwTDVqM3BVRmNYSUdjb0FWMEM3dytiNXFSaUpXeEJFcmtuOFp1WGV5V0FvV2ZlbWxBeGRwdkxkdy9yaHFYYnZhc0VYWThzQzFoZnlLY3BCOGI3bGJ5UDFYQWU0V3NjTHp4VU5iZDNYMjFOWTNQRUZ6d1h1THR0NVJmNWlLUFNXUUlqc0l2ci9Wcllidy9PQzdDTDh2TS9CVEhIWjU1WWFKTXBET3Q3UnRhdHBaT2R3Mm4xNURoK3RMalM4QWZ1WGpQUnpldWI5UUJ6VnZkcllKaFFFVUgybWt2MHk0OThCR3duZnZpanRvRmJVM1NkcTJYL2QwUzN0THl6U0w5MU56ODJPZ0JQZ3NhdSt5Z1QrdE9BZzUxSENmWGRHZnluR3FFUlR2YThBMnFQTDdQYTJOM0xzL25aZEFLOTl5NkNrMjU2NURMVzNVeExKUlkrMnQ5L3h1dnJQWjB0cFNXYjZ0MHJmVjByU1AwOUhXdXE2MWRieTFUUXVpRXJ4TXBKZmNwcmRERlRVUFZiTkZOenRZYWoxbCtkVzhuNXBiWHVRMHExdWFENE1ub0ZDaTM5MG51aGpmOXlEWXZ4eXlJM1NhRjEwWHgwcmxKaXc2M2Eza1U2cDFLMmR3a3Z5eFd4eXIxYzhUT2tGT1hXS0txajNiaXZJRVgySEdiYnBBWXVYRGpxcEQxc0UrbjFadG5jUkpybW1nY25pVkRPdXd2UFdTQ3V5d25uOWFZN1V2MDFETjZ4RFR0MXFsUTllN2hVdGJoTUtXcGNKRUJTRmI5ZVVZWEFKSDVucTBrdnNoRG0xRnJXVzM4bzdCMjlCbHo4NTlXeVBQQTErYmp3YXArUHhraHRkMUlLSXc5ZnpseWs3VjJrNU1ubXVWWHNtdHRVTnpySDN4dHRZSDZKcWpPS0syUStlbXYxNzVQcVEzOFQrOW02Uzd5ZlU4cThEK0J4aFRSZUhDdmpUbldrQU05MUpZMlFrYjVBR1BRcVdKcUE3Nm5sdyt3L2U5T1lCaXBpNGQya3RJZU9ST3YxQkZjVythZ0NoQTNlc2xFWFVHYmNJR0FSVGM0bmhUMTFCWjY2WFh6VEZMRk55WklUNU1MVytyeUJtb2RXMlZyRVhEUk1acVJELzJxeU1MNzJYZ1FwR0VMZk5vejcwZ3ZvN0JrQnp4V3A2ZWhBVmFjbnBldFhrTjZ4SkdkZ2lKeWhwSmg3YUNNSWdETWNwUlQ4cWlhTHZMN0dhTlUrWm40dWlscmdhM1lvTStpS3NISHFqOUd1NG5ncnBGSG9XcnZsRlFQc1BjcHhsanFPTHN2ZG1tamJyZW1zSHJhOSt1U3NHRCtvVnVwYnNPYjdGeFpZVTZzcXhSYmR4MG5XT3hra2tpdXM0dm53L0swV0NKUjV1STc1WFhUMzE0QnMrOURUbkJ4YnlSbU5HNXd3NUJnV1BVSmhuWnNsMldXM041KzNVcmRpVTBMaXF4SUM5ZkpodWZObCtXVEpxdTBMY1Nra3hYNHpGQWU1UldSTFZjUGo1VE0xTkZSdFA1YmJma2MvWWJOTlVJaUxucFRCTFRzcnNwZ0NNWngybkZha012SnVjb2lqd2FVTWFLZUw3UVF1ZWo2S08yM0pGbFFJdFV1all6Ty9TWXVFMDdmYnZJUk5HOE1uY3BvNWQzbDVsSzBqSWptZHU0OVk5Ylg2bzI2WWxaYzdQZkhmOTB2TWRtSGx3WlFUeUhETlgxR2w1azFqN2NQNC81TU5FcDQwUUp6VE0zR0xpdjBKcmZCUjR1QWZmMHFCQk1XMEtVNFZtcTJPTXFjTE1kVERldmFQaUNtYlk0d1l5VkwxZ1pOblZSc2o0SExwYUF1ZWFucTRMY0NwbFhwUktpa3ltVTZZYWM0ZXUrRUlvKzEvTjUrczlGd2k5MFFQMk5yZ0NLR3BURExES1dMYVJXNmtiUGFtTjNFWm1LUklRUXlkVWViRVMwK1hHcWRxaGJnTVNtNHVIOWhiN3dBYXFPSVYyQzRLUFV2bUlFTDFBUGZBMzRLNWxtaXhWMzZHODBLTHNiVW8xQ251ckN5QlJGN2tjRlMrOUVzWVgvelFmZjhCL2JmZFBreXpzcE1JNHFqcG5zWHJyQW83LzFxZGZuUzBUTTNBYVMyVVR2UjhlTFZ1TGVqdXdMbEhkYnduVVdYWkZWbW94aG5hTExqakNiTmZpWjJRSkpMZ2lLMjhxT3VreWx5eFp5ZXVKUDNDL3BJYlE2VEYydWhYZ2FjS1pXRmJ2Z3ozR3Z3aDVnYUdkdElDSFpkQVB3UGFDekl1amFlMWZNZE9GOTJkNFF3V0h2T1gyTEtESmxqMmk2Tmpmb2hxc2doRnV1RzloS3JhWE4wb2hWMEVPa0dhTExMek9NdnVoWEU4dlU1ZGJvY3Nab0RNbE1JVE55K1RXaTBKS0lMNURVKzAvcGQwZjBRNG02Q1hXcDhNSFFJK1Y5bmhuY3dTREtNY29RL2NoelY3OWJLYysvdnZnNS9TRndPNzkwN1BENXUvZFV5dmV2OUQyalgwWlpkQWVTUmkvdmY2cTgzV096SnhpWVdoaktIOXA2RG1LVWR0dzM1ZjRTeHF0Ykg3b2pTY1dIRnJuVytEN2xZbTFOaytIbWF5cndkUFJDdmZZbThNc2xqeG9mRWMyTXVEWDMydy9NTStpbHV2enJEWndUY2VsdHVwOXVodDBHbDQ4ZCtRbkhXMDVVc2p6WGEvbm4yYk5zODNUOUVIWm91OG50NDhzRk9QczE3ODkzQ2JYYjJzTkxXVEdOanBVNEFNT1RyTGhXeTQ1UFhxdVZScXhPVlFUV1NHTldoeXI4eUI1NDhvSldZQVBaWGNEaHpjS085Mys4QitPNVI4eEtxTjVjbW95a0ZDbzFyaFlGWUsyb2hHZXpSdFFWakc2cDhqbkFPbFVwaitQcWJjUy9ubElDTldRNEM3QkVjUDFPYjkvWW5jNnRhNEkzTG5KSVZrYjdObUhkV0tqMndyOVp6S1RpNzVzWEsxTkRlNXhkWTRvcHo4ckUvUWVuSC9jc1dYWXFGZG1iY1FqWDJBZml0cEJFR3BHN2ZQSXV2ZkNyS3hWYXY5WVFZbVdramc0M3FBTFRmSmR0ektvVXhueEUvM2ZST20vUmpLaTd1ekFuT2FnZ1NGblhucGJySUhDMkxOZVdvdkZsMnBacXJnbi81S0xrc2pFaUlNTmkvSWhFby9SRlpaZy9heFlES1MvWUpVenJVN3RnaDl1RG03anRwQ0ZJV2I4OTJ4MkkyeXF5TVNyZWJyOUlxMlBXc0oyTVhyd3JOU0loM1FBNUEyL1pVSUswMWZid3ZtWUVGOHFHcXBCaUxHWHFYUzhldXdaaUxJN1Y5cWFQTGhqMjBVSlA5MnFWRjZWNHZVUWRZczM4bDlCVmdTbmNZT0c3WlZrdGl0cmZmdnRCMmI3UUorS0dtbk5ldkpValdldmhpQkN2VWlHTlBkeUdlQVhMdDBKNGZwQ2MyR2tGOTlYVFVrRzRWL3RxcEtYSDllbXBCeFZudjJ1RFhYcGZFOG1zbW1OV2xPTVkyRit3eVZETUdTZENZZVBtWW02VG9kT3lDem5UNW5ESU5GSFFJaVg0WW5VNm9WM3E5VWd3bmN5bE9HYVNabytYU2FRbVZqdXpCazNHYUtRWFJ4Wnh1ZzFKdnMvMHcyRDRmMXZ4eVVRZUdCWjV2VElEKzRkYzhzZDRUKzNRdmxmQVhCK2FJNytVemM3ekZBK0xPWnhmNUtDOFFtMXZmOHhJQWRCb1V6bDFOS1ArUkhkRjRmaXA1bGNhbW5ZM2QxUzF2MWIvdFdQSVlpOFJoTDJrNVE1bmFVR2c4VG9hMTJpVG1GbWJVQTBVVFdoMENUT21TK3BpZ0hjbHBEaHg4R2FvdlNXakxYUXIwVklFb2gvejFLVVR0bjNYZU9nNzlEQys1Q1NVNlJyZFBlbVRYLzFzaWR2NkQ1Z1ZhVlpzSlRQblV6c2xWNnZGVXZYVkV1blZISWxFYzdWWFpwTkxiYkt2TWJCc2I2L2tzMytMb2VYVFY5SVFzZ01OOWwwYjJnSlpuUE5wT003dXZaNHVXYllkNTlSVE9UdzNKR1hwbnZxcWhiWCtHMERLVkN0Z0VsMVVMUlBmM2VyZ2tOOVBGNjRFRUhXWlJ0M0UyNjIxZlBTSGFqK3hTTDJIaGx6d2RUMnpxdmgvd1pkc0NFak5vNG91SUxkN0ljZTFiUkh3ZnBWV0JaaGpmWmlaVEF0Rk5WTUxnNmdXTWhocW1XaEswUjNFcG9LdHh5dVd6UzFxNW1ycE93cThlVnkzQy9GUmVSTUlIS2VaS0VJK2VZaXVvbWwyQ1BvTUZqWDZxOEJsdjBjRTNWdW9RazhLNXllTXBkTkhJSWtzM3hoTENTWGxmRThxdjN4K2p3OVFZcGhTNHpMSE5mM3p0ckVtTUowNEcwMTJVc1BYNSt0cXVrWGJWMmhLYlVrUlRJNmMrRHhEZmxNaHhvc0NJYy96Z0poSEZVdGRqeWx2V0NrcHVMNDJkV0RmcE9sdWFxbFoxaE5CdE5zTGZCR1JxVUptSVN2OVo0RkVla3Znald0c2JHcjhRZTUySTdpOUpmZ1JYZ09RdlY3YkpOYXQrT3R0WS9Rd3lrdU53SDRqQzFiNVpVdlpwNyt1cTJGa3VyczRtZ09oZHJXL2Q5amdUUTY3cGdLRHI4aG0vazdvOW83czUwNnkyQ2VlWTNQdU84Rm1uYnp2YnRZUExhMy9XL3JaRkpaN0dnSU0zNjdYd1BZamdNcHIvRU1nNFhvRG01R3VsMWdIczcvQ0lTYWIzenVnazA0TWFBMElWRVV2cm0zdXBXRFI4RGNLaGx0UU1GeU5naUVUSS9nbmU2MmtUZDZjMmRiazVXSERyeDdaSklzcWNLWXZTdUpSbElhaW9CdEZ3VHNvQ3Y2VW9nVEFkY2dKTGNnSnp5SW5QSUtjOEtHVW9pOTB3ZlNhUnV3QW9vK29xYnFSMnVjUnBnNC9jajNCVEpqOUtlWng0R2ZqbW1BWDVUbVdZQ2xUTU55bXp3UWx4V21EUjlWKy9pT2NKUFpmbUI2SGwrQUdqWTBvNHRSdDF2Y0h1NGJGYW4yeXorQWJSak5iOG8xU1RqZEdHcU5PeFg0U0lUVnB5Q1BYSTh5aGlUM0JBaVllM3pJVitLaGs1aVJDUG1qVCszU2xlcCt1QnZuZzVER0xRZkVYQThFQTluYnJuWG9Bc1h3eGU3K3VJdEFJZm8zNjhVZzNRbUJxK3dqb2JmUXgrZ1I5aWo1RG42TXZ3SmZnUGVrclV2d2FxU0srVmQ3RDcrRDN6QThlMnZoMkl6RDl0ZW54VkQ2SkM0NTEyeHQ4bGo1SGZUOVBmeHArb3M0SHRBVmR3WXpLbktxK1FzenhleG8zckd3TGNyZDJWZFFRTjFtWHgxUGN3QzF1NHNQYnpCTkVMdjJMYUxEZFV0UDJvYlF4SzhhekhvTzRXM2lEM1Q0OWZXZVUyZWZSM2Y3L3lMRllabURRWHZjOUs5bGFnVVVBTWVMZWZ4YXNBakNIZlZnQVpCNklkWXM1MFh1MTNicUxGOWIyNEk5WkQyc0RiaTE0L3o4Z3kxaXhsdGpndk9VQjVMb0FnQlhZemFsSmdzYU1yUjF0WFlkUlJsR0g5UlFkc0UrNnhtUmc4eUllbzhveFJ1TVFCU29QdU1PTVlNTGRzNHhHQ0orSDJTTWk1YWJ1cy93Q1ZZNXROQTBYbTB5OXhHTTBKdEFPcTFwZ0swQmRLQWY3REtHdjBNZm95OUYvWkdsYWxOdmx3bmxDY2hndFJMOWxXNkFyNEtOK29TZGdJeFhwSUp5RjI3Z08yTy9OQWxoMVZYZU5PeVBkOS8zU0lLQS9WQ2szOVk0RVBZaXVIZU1CSEpwV2ttM1FlSkVMUEVZTDBXOWdnWkthOXpHSHp2OGJJN0RIZS80WWJoZmUyRTlpb085Sk0zMjNidWJzU2tRdmlNdytuM1FOSlVlOHRPdHJ6eTV2MkVhNjdBMnhWWlRzNHU4eTFqam51NTNOQzNrRWJpRS9aanNpdWxPajIwUTY4VTZZRWltdHhrdXVDM3ZMOFlaTG8yc0ZFYWRReHV2RzlsRTBldDYrbGsrN01RSG9OMFBZbHNhWGIrdmFOM3RyMXk0MmRWbWtmU2JWNXhpM0JiVjF1MTFNOXdEMGxPekxYbllDUjkwdDR3dCtyaXVvS0ExOXl1d0QycExBSndRN1ozeStjSW5pOGtnNjE4blVTQVQyTzZWSy8zV0JJYTFoVDJldzdFb0ZTcmFNSWorVFdFMCs5NHJhSEFKd0VUOStaN3BsWEVqcTN4REgzUURnNUlHTys1TDhMMitKLytpd3p4UE14Z0VpQmdBSS9peVpvSEFtTVAwL2VFNWs5eTZpTmUxazZ3N1d6NHVjcnFUcHh5WjNCZVVKdjJSeXAzWEZUUFlkeUw3Skl3UjRSa2p6TjdhelhpMkNJTUUwcFRYb2RaYzdJU2pkK3JMNEZIeEdFeTNBUkhVQXgxVi9MWnZpamw4d1dWMm0xZlNDZitzd2MwVzA2T3FhNW02U0t6eXRSbmhRVmFnTTZNY2hSZ2tKTVhZRThZaEI5dW1Lb29UcEdScU5rSzRmeDRPVyt1KzRDcmNHWXJnVFo1dm1HOVRVanRmbmlxWVpVV1Q2VWcwZUUzaGtpVUc1bkJwZ2pGMTREWGJvK0RRUmJmcFYxM3pNcGxJSkN1YytWTEp4R2dhenhGd1dJM1pMbmo2NVg1MDB4QjAzb1owTUw0YVNQNkd2UVhLYnVQTXJVcXZtYVFoM1VHWnJSVVpOaVlvOXRYVFJVN3hHbGRTeXBZNDViQXJMVUxNenRBYjY1aW1kSU9hUkRZcElVRjVCc0lvN0tRNi9VelN3dEkyU2VkUzFrN1FvSVhQU2MwR1RGNHV6V2h4THh2d054RjdoOXIxMkxMWVhJZDlGRDVzck8vUzMyYktlV3paUEpxWC9BTTNRaDFwdWZTdDc2amlRdllFbDFtTTBlTTdUTWt3QUEzdDlTRG03NlphWEtMWjU2NXZwTzBpeHZmUXlDSTJqNUJPaFYvazJQaVYzc1J0NEtxRmwvbUR1RG5VejZtN1Z2NzhSUGIzSTFqUE1YVkNxVllpZitFVEZIblczcmNoTWI1MWUxdXVWcHpMMGxnR1RJQVVNYVJVRmNLQURzSUVFMFFJWm1LZnlEVWxGWlljbzJhNi80M1FEQ2FYc2tjTUdPSzJzNUtGenFQeWk3c2pmSjlTOE5Wb2pqOG9YMU1qdXlmRUVRSUNQY1dpbUFXZ2pMQndrSnEwT0pqaWRIWnoyaVkzT1p6c0VrZG5yRU5seW5TTllZbDV5aERLWFlnOGoxYnFUQ0Foc25DN3k1S3RRS0p0WGxtSXloVXU4TkxMQkJaaXl1UU9VeURiSmRFVW15RFdackw5Q2VhYVpZaElIN1VTMHVKWG1lYlRJaWpaQmNyRjgwMjg2SnlldjdFeTF4RVFPcXNtVHc3bkt0ZEFVWmV6eVRlRGxreTNYQkdVWjQzTEtwaDdRSEs3eHFlQVFldnRvY1dSbEV0SmxBMDFSWk1wUktUVkZYZXJweFZ4RnhiNjhuRjdqc3E3R2JkVTIwQnVlSVZKT3dzZkZxNFRQQklVU09MaTRKTXJRVno5OWRaTWhhUEM0V1RzWXlnRW5acXM0bXJ3WUtkeGV1UGxZS1RMSnFEUy9WNG80aENvK0R2TlFiL1FJK3ZIb3JlZmdNVFBNbTRZNXUwNzVQNkpJWGhIL2UxL3lud0VBKSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfWJvZHksaHRtbHtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fWh0bWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXBhcmFncmFwaCxwe2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpqdXN0aWZ5fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjE1O21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgyLGgye2ZvbnQtc2l6ZToyLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMyxoM3tmb250LXNpemU6MnJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yNTttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDQsaDR7Zm9udC1zaXplOjEuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNSxoNXtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OmJvbGRlcjtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg2LGg2e2ZvbnQtc2l6ZToxLjNyZW07Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19cCtoMXttYXJnaW4tdG9wOjMuNzVyZW19cCtoMnttYXJnaW4tdG9wOjNyZW19cCtoM3ttYXJnaW4tdG9wOjIuMjVyZW19cCtoNHttYXJnaW4tdG9wOjEuNXJlbX1wK2g1e21hcmdpbi10b3A6Ljc1cmVtfWRpditoMSxkaXYraDIsZGl2K2gzLGRpditoNCxkaXYraDUsZGl2K2g2LHAraDZ7bWFyZ2luLXRvcDowfS5kZWNve2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMSkgMCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTIpIDUwJSx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTMpIDEwMCUpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1zaXplOmNvdmVyO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO3RleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudH06Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9OjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX1rYmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Ym9yZGVyLXJhZGl1czoxMHJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtwYWRkaW5nOi4yNWVtIC42ZW07dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfWRldGFpbHN7bWFyZ2luLWJvdHRvbToxcmVtfXN1bW1hcnl7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mZWF0dXJlLXNldHRpbmdzOlxcXCJ0bnVtXFxcIjtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjFlbTtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0ubW9ub3NwYWNle2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlKX06aG9zdChtb25zdGVyLWJ1dHRvbil7ZGlzcGxheTpmbGV4fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXthbGlnbi1pdGVtczpzdHJldGNoO2Rpc3BsYXk6ZmxleH1idXR0b257bWluLXdpZHRoOi1tb3otbWF4LWNvbnRlbnQ7bWluLXdpZHRoOm1heC1jb250ZW50O3dpZHRoOjEwMCV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFJpcHBsZVN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFJpcHBsZVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRSaXBwbGVTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHJpcHBsZSB7IFxuc3Bhbi5tb25zdGVyLWZ4LXJpcHBsZXthbmltYXRpb246bW9uc3Rlci1meC1yaXBwbGUgLjZzIGxpbmVhcjtiYWNrZ3JvdW5kLWNvbG9yOmhzbGEoMCwwJSwxMDAlLC43KTtib3JkZXItcmFkaXVzOjUwJTtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm06c2NhbGUoMCl9QGtleWZyYW1lcyBtb25zdGVyLWZ4LXJpcHBsZXt0b3tvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKDQpfX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBDdXN0b21Db250cm9sIH0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21jb250cm9sLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdGF0dHJpYnV0ZU9ic2VydmVyU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0JVVFRPTl9DTEFTUyB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEJ1dHRvblN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2J1dHRvbi5tanNcIjtcbmltcG9ydCB7IFJpcHBsZVN0eWxlU2hlZXQgfSBmcm9tIFwiLi4vc3R5bGVzaGVldC9yaXBwbGUubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcblxuZXhwb3J0IHsgQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmV4cG9ydCBjb25zdCBidXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYnV0dG9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBBIGJ1dHRvblxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2Zvcm0vYnV0dG9uL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vYnV0dG9uLXNpbXBsZSBTaW1wbGUgQnV0dG9uXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL2J1dHRvbi13aXRoLWNsaWNrLWV2ZW50IEJ1dHRvbiB3aXRoIGV2ZW50XG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIGJ1dHRvbiB0aGF0IGNhbiBtYWtlIHlvdXIgbGlmZSBlYXNpZXIgYW5kIGFsc28gbG9va3MgZ29vZC5cbiAqIEBmaXJlcyBtb25zdGVyLWJ1dHRvbi1jbGlja2VkIHRoaXMgZXZlbnQgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkLiBJdCBjb250YWlucyB0aGUgZmllbGQge2J1dHRvbn0gd2l0aCB0aGUgYnV0dG9uIGluc3RhbmNlLlxuICovXG5jbGFzcyBCdXR0b24gZXh0ZW5kcyBDdXN0b21Db250cm9sIHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgPGNvZGU+aW5zdGFuY2VvZjwvY29kZT4gb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvZm9ybS9idXR0b25AQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0J1dHRvbn1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSA8Y29kZT5CdXR0b24uY2xpY2soKTwvY29kZT4gbWV0aG9kIHNpbXVsYXRlcyBhIGNsaWNrIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvY2xpY2t9XG5cdCAqL1xuXHRjbGljaygpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uY2xpY2soKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhlIEJ1dHRvbi5mb2N1cygpIG1ldGhvZCBzZXRzIGZvY3VzIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvZm9jdXN9XG5cdCAqL1xuXHRmb2N1cyhvcHRpb25zKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZGlzYWJsZWRcIikgPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmZvY3VzKG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmJsdXIoKSBtZXRob2QgcmVtb3ZlcyBmb2N1cyBmcm9tIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICovXG5cdGJsdXIoKSB7XG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIpXG5cdFx0KSB7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmJsdXIoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZSBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcblx0XHRjb25zdCBhdHRyaWJ1dGVzID0gc3VwZXIub2JzZXJ2ZWRBdHRyaWJ1dGVzO1xuXHRcdGF0dHJpYnV0ZXMucHVzaChBVFRSSUJVVEVfQlVUVE9OX0NMQVNTKTtcblx0XHRyZXR1cm4gYXR0cmlidXRlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvYXR0YWNoSW50ZXJuYWxzfVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0c3RhdGljIGdldCBmb3JtQXNzb2NpYXRlZCgpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgYnV0dG9uLlxuXHQgKlxuXHQgKiBgYGBqYXZhc2NyaXB0XG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLWJ1dHRvbicpO1xuXHQgKiBjb25zb2xlLmxvZyhlLnZhbHVlKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfSBUaGUgdmFsdWUgb2YgdGhlIGJ1dHRvblxuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgdmFsdWUgb2YgdGhlIGJ1dHRvbi5cblx0ICpcblx0ICogYGBgamF2YXNjcmlwdFxuXHQgKiBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci1idXR0b24nKTtcblx0ICogZS52YWx1ZT0xXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIHR5cGVcblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwidmFsdWVcIiwgdmFsdWUpO1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzPy5zZXRGb3JtVmFsdWUodGhpcy52YWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsYWJlbHMgTGFiZWxzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuYnV0dG9uPVwiPHNsb3Q+PC9zbG90PlwiIEJ1dHRvbiBsYWJlbFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gYWN0aW9ucyBDYWxsYmFja3Ncblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGFjdGlvbnMuY2xpY2s9XCJ0aHJvdyBFcnJvclwiIENhbGxiYWNrIHdoZW4gY2xpY2tlZFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY2xhc3NlcyBDU1MgY2xhc3Nlc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2xhc3Nlcy5idXR0b249XCJtb25zdGVyLWJ1dHRvbi1wcmltYXJ5XCIgQ1NTIGNsYXNzIGZvciB0aGUgYnV0dG9uXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZGlzYWJsZWQ9ZmFsc2UgRGlzYWJsZWQgc3RhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGVmZmVjdHMgRWZmZWN0c1xuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGVmZmVjdHMucmlwcGxlPXRydWUgUmlwcGxlIGVmZmVjdFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZT1cImJ1dHRvblwiIFRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZSBidXR0b24uIFBvc3NpYmxlIHZhbHVlcyBhcmU6IHN1Ym1pdCwgcmVzZXQsIGJ1dHRvblxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0bGFiZWxzOiB7XG5cdFx0XHRcdGJ1dHRvbjogXCI8c2xvdD48L3Nsb3Q+XCIsXG5cdFx0XHR9LFxuXHRcdFx0Y2xhc3Nlczoge1xuXHRcdFx0XHRidXR0b246IFwibW9uc3Rlci1idXR0b24tcHJpbWFyeVwiLFxuXHRcdFx0fSxcblx0XHRcdGRpc2FibGVkOiBmYWxzZSxcblx0XHRcdGFjdGlvbnM6IHtcblx0XHRcdFx0Y2xpY2s6ICgpID0+IHt9LFxuXHRcdFx0fSxcblx0XHRcdGVmZmVjdHM6IHtcblx0XHRcdFx0cmlwcGxlOiB0cnVlLFxuXHRcdFx0fSxcblx0XHRcdHZhbHVlOiBudWxsLFxuXHRcdFx0dHlwZTogXCJidXR0b25cIixcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItYnV0dG9uXCI7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtSaXBwbGVTdHlsZVNoZWV0LCBCdXR0b25TdHlsZVNoZWV0XTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtpbml0RXZlbnRIYW5kbGVyfVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblx0Y29uc3QgYnV0dG9uID0gdGhpc1tidXR0b25FbGVtZW50U3ltYm9sXTtcblxuXHRjb25zdCB0eXBlID0gXCJjbGlja1wiO1xuXG5cdGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmN0aW9uIChldmVudCkge1xuXHRcdGNvbnN0IGNhbGxiYWNrID0gc2VsZi5nZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIpO1xuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1idXR0b24tY2xpY2tlZFwiLCB7XG5cdFx0XHRidXR0b246IHNlbGYsXG5cdFx0fSk7XG5cblx0XHRpZiAoIWlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgZWxlbWVudCA9IGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50KFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFwiY29udHJvbFwiLFxuXHRcdCk7XG5cblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgTm9kZSAmJiBzZWxmLmhhc05vZGUoZWxlbWVudCkpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y2FsbGJhY2suY2FsbChzZWxmLCBldmVudCk7XG5cdH0pO1xuXG5cdGlmIChzZWxmLmdldE9wdGlvbihcImVmZmVjdHMucmlwcGxlXCIpKSB7XG5cdFx0YnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBjcmVhdGVSaXBwbGUuYmluZChzZWxmKSk7XG5cdH1cblxuXHQvLyBkYXRhLW1vbnN0ZXItb3B0aW9uc1xuXHRzZWxmW2F0dHJpYnV0ZU9ic2VydmVyU3ltYm9sXVtBVFRSSUJVVEVfQlVUVE9OX0NMQVNTXSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdHNlbGYuc2V0T3B0aW9uKFwiY2xhc3Nlcy5idXR0b25cIiwgdmFsdWUpO1xuXHR9O1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09YnV0dG9uXWAsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRpc2FibGVkIHBhdGg6ZGlzYWJsZWQgfCBpZjp0cnVlLCBjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlIHBhdGg6dHlwZVwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgcGFydD1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuYnV0dG9uXCI+PC9idXR0b24+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJpcHBsZShldmVudCkge1xuXHRjb25zdCBidXR0b24gPSB0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdO1xuXG5cdGNvbnN0IGNpcmNsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuXHRjb25zdCBkaWFtZXRlciA9IE1hdGgubWF4KGJ1dHRvbi5jbGllbnRXaWR0aCwgYnV0dG9uLmNsaWVudEhlaWdodCk7XG5cdGNvbnN0IHJhZGl1cyA9IGRpYW1ldGVyIC8gMjtcblxuXHRjaXJjbGUuc3R5bGUud2lkdGggPSBjaXJjbGUuc3R5bGUuaGVpZ2h0ID0gYCR7ZGlhbWV0ZXJ9cHhgO1xuXHRjaXJjbGUuc3R5bGUubGVmdCA9IGAke2V2ZW50LmNsaWVudFggLSBidXR0b24ub2Zmc2V0TGVmdCAtIHJhZGl1c31weGA7XG5cdGNpcmNsZS5zdHlsZS50b3AgPSBgJHtldmVudC5jbGllbnRZIC0gYnV0dG9uLm9mZnNldFRvcCAtIHJhZGl1c31weGA7XG5cdGNpcmNsZS5jbGFzc0xpc3QuYWRkKFwibW9uc3Rlci1meC1yaXBwbGVcIik7XG5cblx0Y29uc3QgcmlwcGxlcyA9IGJ1dHRvbi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibW9uc3Rlci1meC1yaXBwbGVcIik7XG5cdGZvciAoY29uc3QgcmlwcGxlIG9mIHJpcHBsZXMpIHtcblx0XHRyaXBwbGUucmVtb3ZlKCk7XG5cdH1cblxuXHRidXR0b24uYXBwZW5kQ2hpbGQoY2lyY2xlKTtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KEJ1dHRvbik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgU3RhdGVCdXR0b25TdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRTdGF0ZUJ1dHRvblN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgc3RhdGVidXR0b24geyBcbltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmF5LTE6I2Y2ZjZmNjstLW1vbnN0ZXItY29sb3ItZ3JheS0yOiNlMmUyZTI7LS1tb25zdGVyLWNvbG9yLWdyYXktMzojOGI4YjhiOy0tbW9uc3Rlci1jb2xvci1ncmF5LTQ6IzZmNmY2ZjstLW1vbnN0ZXItY29sb3ItZ3JheS01OiMzZTNlM2U7LS1tb25zdGVyLWNvbG9yLWdyYXktNjojMjIyOy0tbW9uc3Rlci1jb2xvci1yb3NlLTE6I2ZmZjdmOTstLW1vbnN0ZXItY29sb3Itcm9zZS0yOiNmZmRjZTU7LS1tb25zdGVyLWNvbG9yLXJvc2UtMzojZmYzYjhkOy0tbW9uc3Rlci1jb2xvci1yb3NlLTQ6I2RiMDA3MjstLW1vbnN0ZXItY29sb3Itcm9zZS01OiM4MDAwNDA7LS1tb25zdGVyLWNvbG9yLXJvc2UtNjojNGMwMDIzOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMTojZmZmOGY4Oy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMjojZmZkZGRmOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktMzojZmY0MjZjOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNDojZGUwMDUxOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNTojODIwMDJjOy0tbW9uc3Rlci1jb2xvci1yYXNwYmVycnktNjojNTEwMDE4Oy0tbW9uc3Rlci1jb2xvci1yZWQtMTojZmZmOGY2Oy0tbW9uc3Rlci1jb2xvci1yZWQtMjojZmZkZGQ4Oy0tbW9uc3Rlci1jb2xvci1yZWQtMzojZmY0NjQ3Oy0tbW9uc3Rlci1jb2xvci1yZWQtNDojZTAwMDJiOy0tbW9uc3Rlci1jb2xvci1yZWQtNTojODMwMDE0Oy0tbW9uc3Rlci1jb2xvci1yZWQtNjojNTMwMDAzOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMTojZmZmOGY1Oy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMjojZmZkZWQxOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMzojZmQ0ZDAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNDojY2QzYzAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNTojNzUyMTAwOy0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNjojNDAxNjAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xOiNmZmY4ZjM7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTI6I2ZmZGZjNjstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMzojZDU3MzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi00OiNhYzVjMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTU6IzYzMzMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNjojMzcxZDAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci0xOiNmZmY4ZWY7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTI6I2ZmZTBiMjstLW1vbnN0ZXItY29sb3ItYW1iZXItMzojYjk4MzAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci00OiM5MjY3MDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTU6IzUyMzgwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNjojMzAyMTAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMTojZmZmOWU1Oy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMjojZmZlNTNlOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMzojOWM4YjAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNDojN2Q2ZjAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNTojNDYzZDAwOy0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNjojMjkyMzAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTE6I2Y3ZmZhYzstLW1vbnN0ZXItY29sb3ItbGltZS0yOiNkNWYyMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtMzojODE5MzAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTQ6IzY3NzYwMDstLW1vbnN0ZXItY29sb3ItbGltZS01OiMzOTQxMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNjojMjIyNjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTE6I2U1ZmZjMzstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0yOiM5OGZiMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMzojNWM5YjAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTQ6IzQ5N2MwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS01OiMyNjQ1MDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNjojMTgyNjAwOy0tbW9uc3Rlci1jb2xvci1ncmVlbi0xOiNlMGZmZDk7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTI6IzcyZmY2YzstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMzojMDBhMjFmOy0tbW9uc3Rlci1jb2xvci1ncmVlbi00OiMwMDgyMTc7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTU6IzAwNDkwODstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNjojMDYyODAwOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTE6I2RjZmZlNjstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0yOiM1ZGZmYTI7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMzojMDBhMDVhOy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTQ6IzAwODE0NzstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC01OiMwMDQ4MjU7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNjojMDAyODEyOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTE6I2RhZmZlZjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0yOiM0MmZmYzY7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMzojMDA5Zjc4Oy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTQ6IzAwN2Y1ZjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS01OiMwMDQ3MzQ7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNjojMDAyODFiOy0tbW9uc3Rlci1jb2xvci10ZWFsLTE6I2Q3ZmZmNzstLW1vbnN0ZXItY29sb3ItdGVhbC0yOiMwMGZmZTQ7LS1tb25zdGVyLWNvbG9yLXRlYWwtMzojMDA5ZThjOy0tbW9uc3Rlci1jb2xvci10ZWFsLTQ6IzAwN2M2ZTstLW1vbnN0ZXItY29sb3ItdGVhbC01OiMwMDQ0M2M7LS1tb25zdGVyLWNvbG9yLXRlYWwtNjojMDAyNzIyOy0tbW9uc3Rlci1jb2xvci1jeWFuLTE6I2M0ZmZmZTstLW1vbnN0ZXItY29sb3ItY3lhbi0yOiMwMGZhZmI7LS1tb25zdGVyLWNvbG9yLWN5YW4tMzojMDA5OTlhOy0tbW9uc3Rlci1jb2xvci1jeWFuLTQ6IzAwN2E3YjstLW1vbnN0ZXItY29sb3ItY3lhbi01OiMwMDQzNDQ7LS1tb25zdGVyLWNvbG9yLWN5YW4tNjojMDAyNTI1Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMTojZGFmYWZmOy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMjojOGRmMGZmOy0tbW9uc3Rlci1jb2xvci1wb3dkZXItMzojMDA5OGE5Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNDojMDA3OTg3Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNTojMDA0MDQ4Oy0tbW9uc3Rlci1jb2xvci1wb3dkZXItNjojMDAyMjI3Oy0tbW9uc3Rlci1jb2xvci1za3ktMTojZTNmN2ZmOy0tbW9uc3Rlci1jb2xvci1za3ktMjojYWVlOWZmOy0tbW9uc3Rlci1jb2xvci1za3ktMzojMDA5NGI0Oy0tbW9uc3Rlci1jb2xvci1za3ktNDojMDA3NTkwOy0tbW9uc3Rlci1jb2xvci1za3ktNTojMDA0MDRmOy0tbW9uc3Rlci1jb2xvci1za3ktNjojMDAxZjI4Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0xOiNlOGY2ZmY7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTI6I2I5ZTNmZjstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMzojMDA5MmM1Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi00OiMwMDc0OWQ7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTU6IzAwM2M1NDstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNjojMDAxZDJhOy0tbW9uc3Rlci1jb2xvci1henVyZS0xOiNlOGYyZmY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTI6I2M2ZTBmZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtMzojMDA4ZmRiOy0tbW9uc3Rlci1jb2xvci1henVyZS00OiMwMDcxYWY7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTU6IzAwM2I1ZTstLW1vbnN0ZXItY29sb3ItYXp1cmUtNjojMDAxYzMwOy0tbW9uc3Rlci1jb2xvci1ibHVlLTE6I2YwZjRmZjstLW1vbnN0ZXItY29sb3ItYmx1ZS0yOiNkNGUwZmY7LS1tb25zdGVyLWNvbG9yLWJsdWUtMzojMDA4OWZjOy0tbW9uc3Rlci1jb2xvci1ibHVlLTQ6IzAwNmRjYTstLW1vbnN0ZXItY29sb3ItYmx1ZS01OiMwMDM4NmQ7LS1tb25zdGVyLWNvbG9yLWJsdWUtNjojMDAxYTM5Oy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMTojZjNmM2ZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMjojZGVkZGZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tMzojNjU3ZWZmOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNDojMDA2MWZjOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNTojMDAzMjhhOy0tbW9uc3Rlci1jb2xvci1pbmRpZ28tNjojMDAxNjQ5Oy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMTojZjdmMWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMjojZThkYWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtMzojOWI3MGZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNDojNzk0YWZmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNTojMmQwZmJmOy0tbW9uc3Rlci1jb2xvci12aW9sZXQtNjojMGIwMDc0Oy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMTojZmRmNGZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMjojZjdkOWZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtMzojZDE1MGZmOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNDojYjAxZmUzOy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNTojNjYwMDg3Oy0tbW9uc3Rlci1jb2xvci1wdXJwbGUtNjojM2EwMDRmOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTE6I2ZmZjNmYzstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yOiNmZmQ3ZjY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMzojZjkxMWUwOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQ6I2NhMDBiNjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS01OiM3NDAwNjg7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNjojNDQwMDNjOy0tbW9uc3Rlci1jb2xvci1waW5rLTE6I2ZmZjdmYjstLW1vbnN0ZXItY29sb3ItcGluay0yOiNmZmRjZWM7LS1tb25zdGVyLWNvbG9yLXBpbmstMzojZmYyZmIyOy0tbW9uc3Rlci1jb2xvci1waW5rLTQ6I2QyMDA4ZjstLW1vbnN0ZXItY29sb3ItcGluay01OiM3OTAwNTE7LS1tb25zdGVyLWNvbG9yLXBpbmstNjojNGIwMDMwOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMTojZTViODc1Oy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMjojZDlhMzYyOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtMzojYzA4YTRlOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNDojYTc3MTNiOy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNTojOGY1YTI4Oy0tbW9uc3Rlci1ncmFkaWVudC10YW5nZXJpbmUtNjojMzYwNTA1Oy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xOiNmN2Y1ZWY7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTI6I2U1ZTJkOTstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMzojY2JjNmIzOy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC00OiNhMTlkOGE7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTU6IzdhNzU2NjstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNjojNTE0ZDNmfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UmFsZXdheTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBRko0QUJJQUFBQUF0M0FBQUZJUUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR29FOEcrNDZISVU4Qm1BL1UxUkJWRVFBaFFnSWdRb0pueFFSQ0FxQnVneUJtbkFMaENJQUFUWUNKQU9JUUFRZ0JZVVVCeUFNZ3h3YmZhUVhhSmVmbU56MFpvbDN2NjBjUGVaTXBHNEhKU2prNXFJSU5nNkNHTWdsWmYvL24zRjBqT0dHRFJBMXJYZUluY0pJVWtOSEduNjlxTVJEVThaYWpqczlVYnNtdG5xbkUzdjN2cWlRbWZSUXBMa0tXNlFad2FsNnM1SVVpSk5VU1VHL093b0RZNkI2NzVPalNqa0RTU011MnBlZHB1OXZKSUxVbEpkNzA3RCtlTEhwallESTRlMXVEbkxqSEh2eHBEWEdNeWR1TExuMXF0MEZDUU95RnNKWkUxK2tKcTNUK0llN0JKRklOT0FOYmk5dlRVemhJN1c0R21VTDBsV2pUL0ZRUWkvbSsreHVQUDAyb21SSGU1cG40RGdmTlpmbitSOXo5Nzl0bUVlTmFxMVJ4UnFIVGpUUE5BMkpGRWdySGRvL250L1cvNXpiZ0dDeGlhNkVrVmlBMkZoWUdJdFJtRTFadlZVdnF0U3RiN012cmQzVzcrdDIrMFhkb1RuenpqWWJwN21TSExBQ2toTVdnQ1RMNnMwV3YwQVVvaEpmRXFFM29wUGQ1OGlrSm5LbG8rM3VhZVNIWUo2ZmNJY1hqZCtyS1VFc2FFbFRxbFVsVlJtL04rZS84aVAwTDVBS296TmxKMy85aUJ3c2hNNnY1SklVSnlrZ1QzZmRyT21xNkxjcytaK3EvWHNBWEZ4RUVpUUlVYUtvc0ZuN2N0VCs3QkJTNWRxRG9sSlh1bmJsN3J0dHpEL3YzODRMZnRKYWdGRkFMWVBFNUE3Z25NclpCaHQ0bFhxc2JaS21iZHEwVHRPbXBtZ05pdWdNMlBZQmM3M01yanE3R0xzb1hIY1RwdDl1UHZGRHo4ZU4zZytzeHJQUUF3NkRURk5wL09aSTlpaW5OaXRaaFJtcFFPQ2tkb0JkQU5qVldsYXZNaXR3RE5KWC9wWUlBa1Z3bk9QL3ZXNXh6b013N1NBRkFLVStaei9rblAvWjlqK09kZnJMOEtlMnZkS2JtcGh1eEpTdUw4RVVBZ2dISWlCSFArNDQ0RUR6djFQVFEzWWtPY09TbFRIbWo2VXNkZm8yTCsvanBZZTdJSFdjUVVnY2drcExGUjFZVFc4Q0dLUVg5YjhHRkFBQUg5dG80UkhRNkdMdkZScmk0RGl3VHpBQURETUtEUHIvZlozVi9xZGdQbWtHektURW1XRVhiN1EzdHRnVFlxbzJuUDYvKzk3WGYrRi85SkhBVnNJSWNBQ0Jad1J5a0dUN2dDUjhWb2hKY1VPT1NEamlTYkFwaE1vem0ySlJwdEJ0VVc2OVhiTkZHM0lWeTJLTG9rNDgvTGZzbTUyN0lhcUJMTXVCYk9GSXdlRlVkMDF2ZUwrWTh4V2h0emNxVG0yQ0lUYzVlTEp3U0k0ZllsTFlGSVZIQXMvL1Q1M040L1l4MWhLR1UrSFNxRXJkcFBQbnM2ZnFxV0pzTmJaYUNsUXRqbE9MVU1zaGNkb0E1VFFzczRKTGM5MFN4Q09NTVVLNEtQOU5zaHB6cFg0dnd4S0NoQ0FTUkVSRS9MS3NXUmxKd05LQWNUblhBaEV5M3IxS0hjWmEvWWRYNTg0MjAvaWFYbXRHaG9DQWlJaUFSMjN2L1A5K0tUQUNBTjVoZGtDM3hVQzRFTHNnZ3ZrUjJrckVqWVNFdjBCS1NtSENoSXZZT0NBSmtLUWd5WU1NMlFvVU16Q28xNkJKODVxQVdDQ2RIZWszQUIwT0RMMUxxMFBnVGUzaFN3MmZoaTRYaFB1ZXVRV0VINnh0SUVRQWJHMk5tNW9WNTRRRlAreUtnTzJENFQ1dC93ejJYVzkyL3JwcXBMVFNJUDhxVjl2THZPZHMwTkxXeVg1MUs2b2ZidlBaRTFwYWY3dzMxOEM5WnRocTdmMzJiZnVMNjRWWkh3NTE0WXNtNWxnZk5iZkc3Vzlsc1VBNEVHejcyM3Z4d0d6cDRmUlIrbVA4THM1QjdLQjJlREpYYzZ4d2xHNjkwMnVnN0F6TEE4TlkyMUIyZEIvUDVxZk9WOHQxb255TDVqWkREZlFJNVJnOEQ5OEZ2SHN2Y2xIdUpzcmR2c0pycGMvVHIvZ3UvRWZaSnpYVXpwV2FEajdNNytVUDgvOEVrQUFWYUFTL0NSK1hzL0pONFlhSWNPMXhIWmNVYU1NYmtscnBLeTdOZlFKS1FjVVJhZ29HbUNXK0hBNkVOdmJnMzNzbDJwSVlSbUU5YklIYjBtQTZrazZsTjVHZHlNTjVFYm1RaHhIS2x3TWdUNThjZ3c3cGRVUno3bmZNY1FmY1UzdkljelZrZHJoWDhYSHE0MDEydEZPZDdrVC9hN3A3bTgzV0E3MUY3YU85TStkanZkZDZqN2Z4bStEMVB1M3ozdWlydm11eXphNTN0cnY5M2xUYjgyUlQyS2FGVlVLTU5QMzZCdlFNQ28wR3NFZGtMOHMrekxnMUV4Yk0wTmdDV0F4Z3pmODJERzFLWE1mYzRyak5jUWZIS3hTQ3VSdUJJNUFvZERERGtHZFY4Q25WVkVtRU1haW40U2EwQVhUSTBSQk5wT1lBTFZxMWFWOXZ4SmlVekhLV0NpczZtcDBCdWt4MDY5R3I3NHNuVk5ic29DbWtWTW9wNStwREdhV3oyc0xEcjJpTnQrb1pPMGIzNllTSWpXY3h2bmxOMHgwVmhsWW9XNFVSalhYS3lMRzNZM3FvTGRFYXpIQUVFb1Z1TWwzRERlRVJWcEcvamVURVIwQ1VaRVUxbW90cUZvaXdKRktVYURGaWFjU2xCSnJFalNRS0ovQ1NGU21TS2sxNjFRbGtkS2V5U1hZenNkWEtpNkk5aWtOSk10Q1VLbE91UXFVcTFWSFQxenE2K2x6ZlFOQUlhNUpwUm92V2FFUDdaeHVObVRqTUxCWXVxM1hVVGdOZFJEZDZVcTlBMzNjYnhBenhERE9OMEl4YU5WYXhkLy9zL2FqeEFFNkpuUGJGR1prdUMzdWFOVThFc0RTTFpWbXhPajFQZDhIUXhYU3BlZGtYYXdiVzZ3Wm84KzZEcml1UUZGdzVJcHZuSmg2L1pnRkpLOTMwYUVNMlhKM3lKQjBESG9waGJxZzB1cmt2TUlnWWx0YkdSUGNka2Q3VmovTlY0cGJBYmErL0U0QmpDZzlwNVplcmkvcGRNMENHLzd0WFpOeFZFKzZiWWF2UW42dW1Xd3kzRlhmNmdnK1huQXRIRGdqa1BOaVVicXBvd3ZEVXZiUmxjajVYWkhZelY4Smk0TmwxdmpzT2hyTWF4T0h4ZUR3ZWp6L1ZJSEpYbjZIMHdoZzZxRk9FVXFRbzBXTEUwb2hMQ1RLSjB5UTVMVTl5UlFwU3BVbGZabkFTQmtXcGxDbFhvVktWNnFpYlRCdE1tUUtZWVdIVlVVZnRHSXQ2Mmxkbk1IM0VwaVUwcVZRcUhiQ0x4T1UrRTQvMVhMZkJFaHpLaGdVY2dVU2hmeHdtRHo5RzVFUkFBSEw3RkhSS1F5cm53dXhRZjVyaEhCRUJSSW9TTFVZc3pVYmM0cnRNZHBsMjZGZ2Q1NXRnUUc4eC9mQVoySnpJdkdibWxyY1hBbTN3WEthN0VsZlBjUzJ0eGZxK2VnZmlIR29ETXh5QlJLSHZ5M1NKMzBRNlY4KzZtZGZac2FGVjNlT1VLc1dNeW5raHlMMXU0VkkwTDFTSkxJeFh5WXpwTHlOcWlXejBYVHBrYVR5bjFaRHRpOTBtWTAydjB0VXF0elNDbCtxcks3ckl1djF2OVJEMHNneHFHYkpvR0dmRWtsRTFZenIyOE8xbDJLZXdYOU40QURhTjFiN0wwSWFSVFhPdXk5eWl1ODJwT3dIUUJDK3BsZENyT21LME1nL3IxdlJZRW0zREJFY2dVZWdtVXgwM0c0K3dpdFFnT2ZFUkVDVlpVWTNtNHRtRUl2d1VLVXEwR0xFMDRsSUNUdUkweVRxdEZjbEVDbEtsU2E4NldFWjNKSnZzRldpN0l4S0pPQndPaDhQaGNFVHJSTjN0RHBsTUpwTmhSSWFpcUFpR1lSZ21jYmtzeTROb3ovcm9mUUw3S2NhbE5EMEZPVzNSR1p1T0JSMnhtVk14a1Vna0RsMFg3dUppdXRTOGJOR2FFK3YvWlFPd3FlODZHSUllRXNDdW92V1lmQ3EydHZwTU9CTjdNek82OEdXWExodG1nVzJmZmVIcDFNdTdxd1g1TkR3VGtwQ1NjZWZCa3hkdmZpbkFSSVJJVWFMRmlLVVJseElBaVpFMHJWcTY1SW9VU1pVbXZlcVVNcnBzL3oxWldFWjVZQmdHQUFBQUFBQ0EwV1pzZDFDcCtIdytuMi9jT2xrNHJEcFNsMUszSHIzNmpnMUNUdHd6T2NOdUNYWU5naURZaG90SDFvZ09MUlN1eDhuaWw0cjJpWWF2MG5vcnpYdloyblpqWkxmYUtEK1ZSZ0gvZmdObXBrRmJoZ2lHaVVhY0dmWE5tSzQ5RlB2WTl0dmJjVG03NSszZmRhbVc2WVN0d2tkemFDSFpjdnEwQ1M0aVU1Wm1OeExYR0JlL3JRb0hqTVAxL1FFR1ZNWkZKZ2JEREovNVQzZXlCY3ZHUFNxVGltSmNDK1lRVWpxR3YybkM3cTNuQjBET3F2MkczVnZsSWhLSVc4TVJTQlM2eVpUaU5HRlgrUkdDREhzOFBZSWRUamRBVUF5dlFrd1NDcHBoTmQyMG1wdU1qUVhLQlFrV0lqUXBtSlJVS1l4S1hjTERjNmtJZkhhVEthT01TYzRNc1ZSWVEwZXpVNkZMcFZ1UDN0TEh1d3ByWWZ0aGl3aUhGQVdrU3BtV1J0KzZuSjZVMThDdXlKODVqMngwYjBkN045cGlicTBsYjROblUrcE83dEVVTGloZFVPMmhycHRnWVhDc3hCRkEzbFEybm1GYzNGYlJqR0JnQ2Q2QlVIN3FuWEJiYWNqc0s5OVJmSURNQUZrQnNvTytuWmc4UDBCQmdNSUF0UUVhbjlXUUVzOU1BSE5HODU1NHdhK0FybnF2VFRqcEdTN2UvaWxQbWpBUlBtbnN4V2tkQUFSeU9MOXlBaHlteDdTR0tsazdHaDQ4dkR2TmZkZytJVEJacEQ5Z3pnTUlCd3dCazV0bWtFWElxcU1NYUVUZy9IVWUyNm9MVFRwNHc0ZzlVa1o1YmdieEVIdEN5VExZUEhtSlVxM3VKcHF6dlNOY3VtYkJkWFlRc2t1MUM5Mk44alR2REZFVTBydjgxN2dtcXNHalBmUnVOanZlclREbUhDRTRxK3Fiek9qdUlJdlJhRGh6WjEvVkpVcGhoaU9RS0hRd3NaNVRqZ3VBQjhDdUtyK1lJTUtld0lvTU81eHg5ZTRBRUJURFNZcG0yT1R5OG9Jb3lZb2FqZWpVUWI4SndEL1hCNWlTc3dVaWdoQXNSR2hTMENnekp6WE1DVFUxWEVaSGFUQVhUQ1FTaWNYYlk0VkNvUmdMRXhzdGxkQ3R4WjFhVW5sdXRHaHRPUXQxOC9SVWRWcGtEQnZiUzRuRW9ORm9OQnFORmlkWG4wV0pMSkNyVThDVWJxcU1oWkdwbStGOEViQklVYUxGaUtVUmx4S0VFaVZWTFZOeVJncFNwVW12dWdBWmhBR2x5cFNyVUtsS3RicG1BNndyUUxjZXZmcWFFN0RUV3M2WUhtMEUyZGNsaVdXc1dFM25tUzdHNWI2dUdWblBuTnV5eVdiSHd4RGpwV2s2TStqMjBlWU1MUS8wM1ZNbUttNFpuZ2xKU01tNDgrREppemUvS3JkQ2tWTWxLc3lJbW1lWmYwR1F5d0pCRUZ4Qy9yZ2dDSUlnQ0lJejkwYkRFd01UajhmakFVQXhkUzZWc0RjczFnOHdmWUNYck5kOThTSDhnYWprNXZ1VVBxZzRYRFA5Sm03b0dXdkdYeFNkRUxMZnJzRVNFc21XWFRjTTNjTHRIRlNHYlNIQkFqY0NpVUlYSnFIbk1sT0xSQkxhc25VSzJTdXgxenFuTUIvWk1HT3gvelB1OG9oREFEQUFPQUFDQUFtQUFrQURZSGdsQ2tDdUxWQWlTSUtGQ1Awa2hXTktQRlV3YmR5TCtzREJ5ZWdrYUoyV0VNdFdyRTYvNHZwVzdHNmU0bUR3MEJmeFpoRnQ5R3ZmaFBFQW15ZDRjTXRVcXNQbDRheTdHdWFrNXQwTjUyT093SmFCZ1NOSHNrMk5oN3FFV1pZVnE4ZStrc3hqajNFS1NYZzhMTmlsUXFGUXpFMWZ2NXR2cFFRRnRGSW15THRpdlRlV2tRQ2s1WlJlMlFpSjJackxZRFY4Nk1CWVdYNXhBUHVuazF5bnRaMng2YWJOcmlYQXNoV3JjZmtVNjN5L2ovbStnbnpOOEkzWXR4emZDZU9pQVBpN1loMXdCQktGenM3MldybGlmV2IzbitzT21rU2l6WEhUWHBtdkFuT2dlYSs3UzhGMUVIUDhuVTRJbkZZNFE1bVdwM0JBTGxlc2E3Qno0RnVPYkU0RVhSbml5azhodENPaWs4dmxjc1dZSUtyNC9jSE0zWFhJY2N5T0RzQlhIOVIzTklCalVzZDFmaWRqMGlpbkg1cmlaZlVPRFRpRlF1bHplYXg3K2pIWlZ5eGYzOFUzeExkcitVN3U0M0g1OUtlZ0s5NUp2d3Z5cW4zSWd4THlVRzJZNFFna0N2MUJURCtJdkNNUE1nMGxWWVJCblNJUWthSkVpeEZMSXk0bENDVDJobTBzRUFnRUpURHJxYjRnSjJKWW96U1VLVmVoVXBYcWJOclorWmhlamIrNXJIckd6Y2NMUWhKU011NDhlUExpemEvS3pRbk1DRUt3RUtGSllZR3lOeUsxbHRKVS9KNldtRnhVcUxzSW5YU3MzNHM0QUpuVE5QOUpWODFaVzA4YndveHdqTW9HZysxZ1BQeHdBTWVaa0JFRStWc3Vwc3hvOWNXUzVpdm5hU1VwRkpRMVRFYnRleUtqTUFMbFNRaDZSSzNnQ0NRSzNlUVU0amJFQzd1cS9BeUNESHVDQlFUc2NNYlZ1d01VQkJURFE5eVFGTTJ3eVJueUVTeEtzcUpHVTNSaUVEUFhMOURaNUY0SXBBdVNZQ0ZDazhJR1pWTUZDZE9rTHVFMUlLVkZsR2d4WW1uRU5lTkJDVlNKa25KRWorU01GRW1WSnIzcW1ES0l6R2xrU2JiZDlITGsxZngrM2UrVkNwbUtvaGdseVVCVnFreTVDcFdxVktjYVVHM1VsZnBva01iYXhOQXNMVnExYVU5R0lsT2Z2SmxNcHBqSlpESmJSanRhTldrL3J6V29NSUlhTldlc2F1dDAzeU1PMlB4SUk2TUJFOTFxZm9EeXhDU3dnQ09RS0hTVDZRVnVEaDVoRlhscHRyZ01qeUJLc3FJYUwxN0djZGtBNThBOGdDWS8zMlBMYndrbkNRQkFObXRDdzZOb0JyVklxemJ0T1VzV1U0MDVsQ3daMXREeDVwMW83VEVkSkJnU0dMNzc3QkVqbzk0YW85b2p0SzlidjUvaEFNOFJhNDZTamdtZGVMek5ETWhpVUhudTdRbUREQlorSVVGaVRjSm9IY2xJa1NwTittWkdjVGNINUljQnBjcVVSMFdvVktVNjZxWjN1c2VnRjNtbitiRmxyaXE5Qm1tblY3UGI3RzBSdENhc093S1FaRWdoNDg2REp5L2UvSjZKcnoycnZ6MTE4UGs4UHAvUDV5LzlOUEppcjlnSnd5bEtyVXk1Q3BXcVZFZmRWRk50aHJXZ1ZadjJaSVNZZXJlQm9KZEhLZWFlZzBKN1VCZXFSOFNPMWFuM3BGQU1LTHdJdFZTSisrRm1uaUhFc0ZFUVcrcGVrb001SHFmNTBseEJMTHY5ekNNQVpUUFExN245WDVrSEZYN2M2UTJKdmIrS1NJc1NMVVlzamJobXZKRUVXeExISkRYTVNLNUlrVlJwMHF1T0lLT0x6R2xrU2JiZDlITGt5VmVnTUJXNVVLd2tHV3dwVmFaY2hVcFZxcU9tajlwNXFsTlQzLy8xeHNpQVJDS1JTQUJBQlFEQWdFQWdFRjRrY0hQQTR5L2YybTdZR281QW90Q1ZTU0lhVGVWR0ZBQWx4MVJJWlJ2R2M1ajBKSWVvY3h6enBLdGNheWN4STFoU3lWKzYxL0dDd3V6QU1mUU13NkxUS2Q4b3NGQWNyTlZEUEllRnM2TEhGeGxOeXRpZURqYjhHT1FRYmhTSXRqMDJnSWc4T1ZiVWZnRi9HdGthQ3NNTVJ5QlI2RDU1bWNQakxiWWtJOEowd0p3WGYvTTFubzlkalRWZFdocGlENE1qa0NqMEdZWTZrWTFONVE0RUtnVWhXSWpRcE5DamJLb1NDTk9pWG9aYlZGOS96c0xkR1lHZ1ZiTXp3Snd6OCttcVUyc2pZMUJyY2psM2ZHL3NmejZxN29nMlkzNHZmcGRVaGUvQ1oySEg4eUFBL3hROEQzbXlBSUROQVZzQ0FKYlpueGkyY0g1czJjUkp3VmFPbTJXV3N0UEdaeFlaQTFLSVI3bXQzQXpBbXRrRlVJNWlsRGNBbTJRd29qRlhCNnIzSXNCeVZxNWwrdE5hYmN0ckYrUXJBUStsa2lVV3ppSEdLV2M1dTFGVWRNS01obnhpeG5BVTRsa2FBbm8vbmh1U2NFbkhyUTZRRWRvUjJGSVE0R0ZuWUhrZkJnSlR3Tmw0MnJRSDdkVjZJQkt4NEdESVBUU1BBdFlIY3VhL1V6ZVAxZXBaSk5hdE9BU3FGRVFrWUNXU2pLb21jdko0US9sWW1SNmJXaUVXV1ZJRkFOYUlUT1Z3MlpWSHpyNU16Qy8waS9EMWt3RVdWRC96VDliNkRHNjMyaUs0VXFDN1RQMlVOYm5rRVk4NjRYWWlLbFcrQlMzRlVLeEhEUVlvKzhCOXl6MXc0aDA3QmE0UWtrekwwTEdKR0lyclorY05YdUIzUHc2Y2VkcEFNVTZHelJRcURXN250QitjV2lzRnlvM1dDbVFqTDBNbVhvQnFOV1JGSVpJN2dEWGh0U2N0OExwQmZrSHNSUTZYcFZmSVJ2WkJVOHA4NUY0aEg4RUtueG1FWW11K0s2Y1lZM2dRZTErL1R6SkFJUkYxY0t2Tm1uMlEwTThhT1dzWGpUOWp2QkNyNTIxeHF0V1ZJNmFwTHBlaEtjeFp1VzlCV0xKM1FHcWY5SlRpdXZ2VTB3ZGdody84SUJSSVgxVnVOUXlzQnFTdFZOUFhaRHRMK05pdmN3aTFQZ0QvNU8wb3ltMkorNzhvbjByeGdBOU9DbGEwZ04wSkVQSFkvWVA0bmhJYXdiRUoySGxVblI5RGJ6ZldNUEF2eGtydEExNHg2anJBbVlVY2dSZlJsWm5uWXhzMnkrb3dMRHdrUzJWazNkZmpBQVVWSUpld0QwNnR6K0F1dzZwSXF4VGw0ZG1qb0dsWVFYRE1iMzFGSlBzKzY3ajlSTmdzSFlnd3dPY1l0dWZLNlZoQ0xNdWM0TkZUYnY5cEVRakZOak5yMExXQUpCM1hHSG00eDduQlJmWG1IUWhRMGJ6cW1PdFZUbnllUzZ4MUhiQy9hcmovWGUvN3FNT2w3TTBlVW5EUGdoeWlzRjhxSW9GYmhmRWdxeUQ0bzNvMks1UkxyTUpZQ2FDNWdySHd1cEROc1ZvWEZJMys5V1lQYTFsd3ZPcDkxZnZhbkdob21KaXA5N3VwTkhtT0greWIxK2hMSXBkZHIyMVJpQTEzSmliNzlrNnBUQjNkRkFvNzE0cFExeVJaYlRYTXlkQTdtUUU5UkZHaEwvT3hySGpkUm5vMFhkZjl5RWUwblhGZk9lcnpZK0RPM2ZpQldCRk1BbXFGYk9lZ2tBcVhUVm81ZlM2NnlPSVZsTENTZGNwNjh1ZTR5SmVsaFVQdFU2Vm0yam5OQVBxd1dhTm5udjF3N0pQNnhRWmF3U0lQbE9GTUVVR3V6UENCYjJkSlV5Z1k2UTl3cjZKVWpKcjZOWmNiRVl3TC9jeFpmZWM4MkxPc01LNDl4WDYyOFA4TnEzVERFY0lBUFp3d2hMdzU4aFBLazVKU29EQkpnaVRMRVN0UEE1MG03U3FZbU5TeDZGTnYwaVNqVTA0em1UYk5ZczRDcXpmSmZsbUMvWVpKZ05Cd0RBYUJpOGVCSFQ1SEFrNElRa0t1UkVSMmNlSENqU3RYWWhKZU1ONjhFZno0d2Zqekp4RWdnSlNjbkV5Z1VBd2xKWGRoMUp5RUMrY2hnZ1lwVGh4S3ZIaDJFaVJ5bGlTSnAyVHBLRG82VzJUSXNGV21URjZ5NUVEeTVFTUtGUEJXcUJCZmtSSUNCbFZvMWFwUmF0U3lVNmZPVnZYcStXalF3RmVUSm42YXRlTXdNZkZuMGNGZXAwNEJ1blRab2xzM3BFY1B2bDY5a0Q1OStDWk4ydWFVVTRST080MXIyalN1T2ZOMldyQkE2RTB5Wk1rTTRidzVod3NXbkM1YWNyaGt4ZW15Tlpzck50eXUydks0WnNkdHpaN0hPc3dHRXd1aGtSaU03VGc0RUM0ZW5CMW5pSkFRYm91ZEVCR1JIVnlJSVJMZWNENThJWDc4NFB6NVF3SUUyRWxPVHFRUlhIQVExNlU0aEM3Z2dDRUFnMFlBQndvS0RydUVsNitHcWJGTlBMV0dBeERBMisybVVTTk9pQmc3dDBTa1MzMW94ZU1ranJGbjJJSWpKempNU1VoT3Vra29FSlNpanlHZ3gySWEvOVpjMDNiK244K2dxa2dTMjhzNzU2Y2pVcDN6d1RyK1JQZTZTZXJsVWRUNWFldWdlL0FIZ0J6OUY0aW53RThxK0g0T3ZJVzM5RmJlV3J5L0JxTXZ2L0tTdXBpOUhrclZlZkc1WjRJYXZmanlXeStwNHNWWHloZVZUNW54SXEvemJ2YmpvcVhYMVplMGhqMEFZRk1RWnMyQmtBZ0ZJR0Z3eEhZTkI5WGRhbXdyM3M3L0NJZmdZWmlmaFQ5Z2ExMHl3dHpkWlkvaGNuZVRZYS9raXo4S0NCb3JoRlo0ZzFsWEJHR1dLQTc1MkVsSWQ5YUxLNFNGTmRWMzI5Ykc3UklJS1U0R0V2aGpyOExVMXdqQTIzczlCbWdiR2pROTdvVUt3cWlPdnlQWkVSSUNLSXpBNldUcFdRd1Y2b0psZTNWVGxqNVR5UEtPam00TmJ2T2cvVDlHVmZ4TkE5aEZoUURTdy9mUmpwQ0YyVzhPQTY4aUN5VCtmMkgvREc4QzZlK20xeC9JSTg3OU5BMzVyd0FBNjhRV0FZZ2xUVEFzWUFDRXFlTis2bXkzd1lvQTRGK2pOb1djTlM4T2lhalFRUDd5TUZhd0lqUVJnU1VNTEkwUTduMVJBWDZSRjhZS0lJSlVvWjN5Z0MrUTJRb3NDa3RPNWx1TUhHVWFFM2VMZThWajBocXBXQXBJRWFsT2FwRzZyZFcrN3FSQUZjQ2VZaWtBNEJQVHNMaC93VVdmT2J4OVI2VThxZkE0U0tuNWc3WUNYQVNRQ1FCWU4za0EvLzFOMWYvazZTLzBZLzFvQnI3NEdYeHgrMk5mMHUrLzdndnFDL0x6ejBFZjlPUkJxam4xUGdMb1pROGIrMVowYzhnTi9sLzJEV2ZObWZLcFgxMDM3ejJMeG4zbHRCWFRiRTVaOElQdmZHL0dKb1NEeTQ2QU14WTJEZ0VoRVRFSkdTVU1Ub1dncGtjeE1ESjcyNFIzL2VIMThTQ0NTNElreVhReVpNcVNyMENoSXNVTWF0U3AxNkJKTXlNVE00dE9iL25OVzM3eXZ2LzUyT2MrOFlYZi9Uc3UzTExNZVQ5YmRYdDJjTmV2WHZMeWFQakZEVStOZ1JjTnVPQjFyM25ETEJJR1J5TlFHRHhPeWptb1ZJT0xoNitVR0F3QWtvUDh3Sk9PaGhiSkJOVXZocFVOTFpxRFU2SjBLVktseWJPYlhnNnRFaFZLbGFsUzdsdVYyclZvMWNhcVZnZHZuYU1RQ2N1V1hISFY1Y2k0V1VRbVVtVTBNTUFtdGdRc0JTenRGM1JiQkJld0ZJQXc1bDQxaWpjYkJtUXA2eTNBRU50ODJkQWt3anhuejdQNzhWVVVEQi9WbXVBZCt4NTZjUCsrdlh2R1JrZUdoMVlzWDdaMHllakk4T0tiRnkxY01EUTRNSC9lM0RteisvdDZlN3E3T2p2YTIzS3RMZGxNT3BWc2JtcmNnV0EwN1BjZWZlVGhoN3FkZHF2WnVQK3VkRzIxbHNUQVArZno2ZHIxbW9wKzBMSjFURWdnUzZDdXZDNW95QWl1YjAxM1lQTUxiWXpUYk9EQVRYNVlFaVl5Y3BVNUlWY1BmSkRsSitvT3Vkc3ZMT1V5Q0hBMGVwU2hSZDRkdUg0S2dFcE1FT1daR2I1RUZjTWpWSmtCVUJVQlJaa0EyWktOUnNBTjErMTB4Szh0aTVMdnU5Q1FPY1p3eG9idFZKWVNOWVNGSTMvZXp3aUxKZFFFbFZBVnFiRmZWajdHRllLVXdpTDJNOWNTZGdObThMSGNzQUlsdjN0K3BUemlrZ2pTOExobnBSQTR5RHBiTzdCY2VraExJUnR5cnNvM2hPRmJpVTI5RmdtS1k1SjgyeFJkOHF5bHNGV2tFSC9iYW44bG5EdjNaeTVlNERWR2laM09RUkRCRDQ2NFhuV1Rtb0ZEUjUydVhKa3psZnlDUk4wakZVTGVxWlZMTlFFWG1WRWxEb3RaTk9maXpRNFJMYmkwSzNWZlFpdU9LT0VTTUZUdjEzVHZpNkNWeVU3V3hNbUtXM1VidERtbkkxN3lYM0hjbndqZ29mb1U0bWFTVWxMbklQb2Qwdzh5djY2b1dJTWRTaUdQVXYydGdtQTRFZGExMEZybnRRbS9lbHRoZnd1aEFIV0tzK0pzLzN6cXRUeFNmY1pkV3ZNQmtFa28yT1dkNWg4VnhrbDF3UTB0V3FmWHhqbmJYVHdEdzVvbVdaNXFkdkhJRGJLWXh5Zzk3MHBKdnpBejhuMzVPTFJrZlNiZERUcFpnTk05bFFKbTJpVTMvSDBuZ3h2SDI5ZEFlWTJRRFF2eFo0elNocFFiaEFqQm13VmJJN0Y3SXZKN2tpTjFGSkdXTnVBbjB6TUV5UmwwaDJOMTdKQ0tpZ0NQS2Z5OW5ITk90enduSXp3bWd1dlpaL1RNQmNRbEhBZnc1RXhIRHNYR3VGdVNlbzN5Q0puWlJiM1c3VWYzYU5aNzNFWUs3a09TbFZKc3dZWXlKQ3RjR00xR3JqOThjbkhoa0ZtdTdQZE93bjFXelIwaHhUblJVOGFCSm14cUg5d1FJSWMvZlVXQkhqOHFySVNqYk8yaFBXN2xSSWFvREpwS3A2V3JWSGIwb2w1TG5LTHlGajJUSGdteTk2QXBaNi9scTFpTlBZOHZ3REt6NWdzK0UvQ1pJQ1B3Y2FjcWNuUmlyMVJ6UHNuQ2dRVmFnNVVNcktHSjZ5NCt5UFlaSTd5aktUSktTVU40b1VUN0dUZGl4TzBEa2ZjVFVkbWthQnpxUGJpNVNpS2ZKYUpEREtZMVpsMTJ1MVJBT2t3U3A3ekhuNlFrYWlwTkxyNkUwcEhnbUlRME8zeEJuV1N5WTIwY3VIMnpXWXhOUTN3Mm1Gd1A4eGs1Y0tlRHNkVWFrS2xMSE5KRzhzNXh6eWhOdHRFQmlSRE5Rc2NDbDJ2MlpBbjFDaXR4TUVqTE13RzlwMWREdGRxaXdKVE5DZkxTcVJTMEF0VnVxUVBJc1FDUlpJbTh4NjZJTndwVENNSkMydllIck5NV013NVR4SjRWaTRIZ1JSb2tpZ0ZLUFRwbjQ1SllneHFoMGJvcWd1SFA2SWdrUVRLVlBwOUJtQ3R5U09KZDZieUUwbFExZG5rdGxjaUdVbXBRTzl0Qm42QUJSQnZZYmgvb1hhcG5DQzc1R0dJeGw4VytaWk9qb0hVaHU3TkMyNVVKb0xkb3ZDMVZvQWkyRkFYcCtNNE4xRHlBelVVamVTdjV3RzdaYmY5RWNUNmpNYnNKMUJwWS9KdG9sN04wanBRaGdMaGNZZlllVVoyQlhxR1VIODVROFJSdHoyZlFkbnpubGxCMThkQ0RNM0JNMFJWbUxYR1BGVlJqRWRRaExQOURpSnZwTnpvVUF2ZWc5WkFMZklqVFZiNGV0NXZQTTlBVVZDMTFKWUJNeUVwSm9MYXdIVnMzQTBDTkQwY2cyL3huWEpOK0lKVzRBS2YxR1NVYTNWQmN1TXJYbFVZVHVnWm9PelBmV0tSdWM4cVlNbWxPTUt3bDd4MGtLdHN3bGYyWlJzcmoxaGcyeXpxQmFQbEFhTWxrUkM3ekc0V2FIYzhBQnJseTBtRFZnUGhLZzYwS0lHc2xuMUZGUUdvQkhZMVRHdjlLZ0pwM1ZvbzNPQkl1QTQ4NW9yaDBjME5HMkxYNnlTQTlzR2NCYW4yUWhvYmduaUo2RmV0dUtTSFhMcDVlY04xRmkxbzNNZ01tS2R3MElyRmhqODFLaVVMRHZSSkRJNUtTVWxLQUZJS3hWekN1Z1V4WHBHZ1pmQWdQRUU5ME5lekt6cHh2SGJQVFZxMmRPYXE4NDJFTjl1eVR6SzJGWXQrV2RRWkRlNFViZUIxOHN3dmxRVUNpRnJiTCt5QzdXcWx6Wk9VYjJWcFlRWnUxbVBVa1QyWHk3MjZOajBncFVtb0VXSWVyL0ZKa2drZ2JBQUw0RGgvMGxvNUpEQk1DN2tnMER0elBvZ0YwSzdMV0xYUjA2UEVOMG9vSEgxbHVlSmtRRFBJV1U2TVpPNkxhMnNndW5GNTA4QzJsWUdaUGxjeDJYSjF0dVhGYnJlNTFDSVVXU2hiNGZvajZMZ0djbWxnK1VDaVNpeGNIOXJKNlRUSmRBQzI0QXBHYnNhNWhhL05JcitoOUllYVhJQ2ladThDNEpMeldUN2dLWVQ3NjM5K0FBakxscHBkWEFMYm10L3pjZFo4bmZJL3N3WE5iWmR3OW1SMVNPN0lmZ1pLQy80TUN3cEN3NXNEMWo0MHdJdWJkdHBCTmNzVkhtdVVQdmhha3N4TTlGOEJMa3NRMzZNL0JPSkFRdDhUQkJTVWJTb2p3SzMyRVliZVFyenVZR2E5bldGaE9LVGxRQnc5Q0ZqOWpURzRKM05nRHZldUFnMVVPaGI0S0FwOXBIZ2FNSktiMFNsb0w3RG9kSHNManB0WGhrdk9hYW9lMENIakRVNnRrS0NCNDJnWkp6UkRjUG8yeE5lSnJaRHhjWGVWM1YyOEp3azBISmhVMDhMdEdEUU1xS09QM1RHb0FJNlluYkVrUndEUmszTzRraTYxSW5xVDgxMnhLYmlpb0JNR0U1RExwTUtyaU9wb3ZGTHRiSWU5eHFNcS9TVFlzeTBaUUY1eWFaYXZwL2ErSDd1YkRucFNzaUJ3SkZhZ0JNaTd3VldjN1VIcWxtdzNmY0x2dm1uVlJTRllSUUVuZ3huSHZ1eDhRMUNWN0FJQXVBSURkQUgxQStMd2crZ0hnUDRDOVFMZ0JBTmFldk9Ud29xTUhVb05nbVZtRXlESTdMcnhMSERYWEVrN1pBTUk5ek9iR3lDR0RiazZHNVVnblRwUGMzK2paUU1qWUdVeXVOWGcrTS9UaWJJMmNCeGdKd2tiMGJnaTRmWmY1QUJDV1Q3QkRTTThZZVMvSjhubzRJc3hRWWs1MXdaS200NENqdzZwVGZRalhqVUx2OWVqUE9WS0ozUGhTMmlJZnVsQUs2c01MdXpZNU9uL2JIemhaRE4yR2FQaDQ2NlpMVVVaRW1XSjNYUkcrOEErdjVZT09sRklNUkZCNCtMald5dVN1U09lcDNxclBXck5Cb1J2R0RXYmdxY3U5NzE1a1h6MkJFTUZVWlhmaHZMOVVEL091bTY0d3o4MUlrc1NYdlp1SU9xY1lSQ3B0K0RVaWdzdUUzUTdidmc4ejlxRXpmOG1mZUhGbjU1c0pSVXVMWXhRM2ZNSFp1Tzd2aGs4TTA5MVF4TEJaMVNlMmlRTlYwZGpFdUNGVGJueWplYXFOV3REVU9icUplSnNCdW5JUTdQS1dxdkhQUEZ4RVhUTUtSamZBRGMrTTliNzVXaXRLZU4yVFR3UE1iMFBBOXEyRlVVR1NhTGhzbGpEQVVBTU1MZEtZUUhWamN3cGdZS293YVVRQzE2cnJoeEJEUlUvYVpnYkVvVXMrQTEwVHhrc25rU0xqWmF5eVJhK1BoS0tOakJUOExvU3FycUJHaXFHU1JpRjVUQkM3aDUzQ2lvZUY0V0ZNVjF6SzVqRFBvYmpIZ1A1YTlzQkREMWlPODRXY0w5NENvNUVkY0lrSGxOZkp0Zm1tQUV0K0FwMUphdHc3djVMeGJTVTNtZUtDV3MxM2NvZFFVWWxKVnYrOHRtdXJBR29FMW5wTWhaZXhUTG9QTDBrZzdVZXkyTUxFdXZNMHk0NUtsd0dsV3hBaG5IZk5qWmFXTmNNNnJKYk1pbWkwK3N6djlCQnFPdXRmUFZFakhqSWJOZDVwYWFObWJIM0ZMSnZpMXRsT3hOc290ZGlPd1Q5bmVQTzcrZVNHRkZUejBUYWQ5WWRtQS9wSjhxRmE1Z3NmYW9pc3c2MUFudDhPdmorMjQyV0szUlZyK2N5T0NHVFhUWjdacTN5SEpRTFIrcWZ1U2JnUGw0VW9Vbm5GTXFsdUg5QVA4UmlPMWthbHN4ZWVIWG5rdU5JZTkrNjA2emloMXM4T0s4NmVrTXI2cXNCczhydVVxNnhGSDBnVWZWc09ZYW4zV1N0QVJmN0Y1MHY2d2R1S2IwWXYyYnNwMnZDd1NxRmFNQXJySUx2WVYwcXgvVHM2Y0Q5L1Iwdm1iN3ErVWo0UUpESGZMd3FhMUwyWVNhS2U2b2NXWFQ2RWgrVnd1YVJ5SHNwTHRpVU1lZnBKUlVZSXZkT3A1WUYrL01oZ0JCMnBmd0dqa0tjY2Yrd1NJK0JWek9YTEdnMWN4VzREVmY5SE9hYUhpU3MwL1IzZGZTaThoZEZ4WWg3TXdsRi9qeWh3RGFnRi9DZTJ6MGh3d0Y0WDVKYkRzRkp1QXdNME5xdGpzR01EQ1Y2R0sxOWhqVUFEYlJON3lHZGhPaDh1d0hMMzBHenF5bG1jdjdhSWc3UW9selBuTHdyYmpjTnYzNlhLYUZaejRpOFBWSGhlUTNvUXBhcUxKREkzU0RrRVhMSE1DSlRaYVBLeWZRVFVXcjg2cUhjVzZaVGU1b003dmF0TkRYa0ZsY2tVUDZHU1VRaFZXaXRGMlc3MTlmUE9aSGU3ZzhXcjdGbTI0eThoSGtUbVJnVjd2alBSWFBxNGREODBhMGFaZzQzZkJWNXRXdnZJNkFCWU9nZkd1dGk4aS9rcXhRdUxFR29HMW81ZlRtbTZuc1dacmRsdUUyYnIwTGdrZFNoN0YxTVM1cEQwRFpEdzhVaXRXS0ZtdXN4MkgyMXhEL2JtN3h4czhPSDFsaVlKU1Z3NFl1andoeFMzMEJ3MjVCN2FDYkd0Z0haVUxJbTZ1ZWF0eGV5cHJWa3ErbEZuQm1SVkFkMm9VVDVDVjZQTGtYWDRrYUtiZGdUbUZoamVzby9LakM4SW1sZ2JMeXJHSzM4UzdKanF0MUU1YUNNaVhvd2ErVVBneTNiSjU2ZG9ISWd4UFBnYndKcmRXdGxPR0o3TUNOKzA1aTZWN1VtamlqaFNtSS9lb2RYakkyV3hRSGphbWZWT1NQeW5XRHQ1OGJveTh5dkxONHE5M0pocEw1cFdCblJHNmxhYTFwRVY1bS91SUFwUk43UlhuVGpJcm1uQTJzSGtacEdjRzZ5czZaZVdYejZkOG5UVGZ0WmhRT2JhQlhtTFZNVnFaa2dOREZnRGk2WGxUWW05Y1UyV1lqcHpTU0ZBU0J0cXFzU29saVVQS1VmYkFEMStwaWJXWjV5YVl6aS9mbVdzSFJYaWNqLzlOcDBaemZpWnRKMzExMWVkZ2ZBdFg4VyttbXYyNTFkZkV3RkF0cUc4dHoyeUR6TGlEdHZhYmVyVytKcU5iaEN4dFNnck02cTRzbFRKUzQxeGFDcEJHaHBwRHJyaVFRV1Y3TmdkajRGNmhTVWptb0xTQnN0WlRkdmRmaEFZbnJCalVpem0rZ3dWdTh6cWhzV2IzeC9GKzVYRVVEVVRRWFFDeHdkSHh5NXZpNllIbnMyOFVpSmgwbjd4SVdDMzVsMnNHVlFxU0xIZjFDTjdnQ1FLa2VHZ1I4YVRXcVcvQmxmNUtDQVFnVG11TEN4TXpSampMSXNSNFFnM1ZqbzYrYXZYdG1zQ0pvWk1Pa2NiekYxS09IR0Q3Wkd5a2xjV014c2VpRHNTbVV3Q1NSYnhNK09NVllneEtnd3ZSNVpOTUNSNDFPUXVIc3p1UTErYTcrdWYzZ01lUDNHUkdYSE0wR09kYkdoZmY3eklhUkVCK094dlRoMDk4QnMzZi9EQVkzcG9EeXJRVXU2VEVIeVVoNWR0Y2ljK09DaFFGamVGK1JEejR0dnFkRDlGdE9DaUEya2ZJSHZlazJQTFJmdEFPOGR4WXU0ZTBMaXo3V0J5eSt3RHhYNlpHdXJaYWJydXpHeldvTyttQytaRmtuR3NLVHVMek5IQ0pDNUg4Z1V6RnM1M1dyQlZNZ0szSWxPQkZML0JFUVdtOWpUbWNSOFVFazBMSi9RRU1EZmdQSFRaQ3FxV0Yvb0tlZXY0VVI0cUdWVVM1enhCME5meXJRZG5UOHdmZEVhTHRwY2ozSmg0RmEvR1Q2WWM1WnVBaTJEanV3YytJYituT0k3dzZNYXFPK0N2S2EwanphZWY0RHFRb2VVSUFrZGttNXU1blBPN1ptd1R6QUE1VlVmeG91UzJHRkFJTUFoQTFTK2ZZWVZJcFBjWGlGTEZDam1nZU9Fd0FVZERJSHc2MFBncEpORDJPRlJGYndJTUVheGhwS1dXNzJYN2xtdzhPWVdPRncyZFpzbjJkTnY4SnArZkZJNFpobVQ5d1pjWmE5Z1N1QUJUcnU4aHc1azBtZUNqN1NzZTlkS2dnSlBSUmdVc2VVVkhhayt4eDhNUTFGR0RoTXFhdWxtblBMbkF0RFlBQ1M5T1c2SmV4ZTFGKzR3OXZKa3o1VXgrcWdXODVqa3h3enc1d1dBVzVtSFp5ZnpPUmJOTXpDT2M1amRWcGhac1Vwc2UrcEdnUnB4bVo0K1o4OWk5cE8zeHhoZzVSaCsvNGJVQ2pFcGg2ME9QMS9HV1pyV29yaTdhWld1UWkrTFpKd1lwMGJOTWVmWmh3eDQ5OWluNkZKY0FLNERtQUdUSWlGV0p4RFR6d2xIZnpmemF2UVlkNHlZTXlEU1lQQ0xObUpDenVGRmJwbzVFdWlpUVpKbVFsckl6a0V4QkdtS3AyTFRqaWtpUHNLZlB2RjJKZEQ0djFFL3MyZTI2c3hnQ3J1Q0I2TXlaTGJzSVAyVGQ5dW5NN3Jzc3RQMkg2RkJnVWxPQjYwQy96WTRxM1F5MHBybmNBUzdKWk04MTJ5WWRKWkw0NGdJRE51NDYyWVJhVHp5NUhLcTdManhqRk9jYnhhWFpwQjByYlpiVVBUT2IvN3F4a2ZUUE9nWi9kS0tSZ0d6N2JmSXNvUTBEeHYzejk4M0xONFlvdm9hYm1OWjJuak9LSG5aOXNSZFRHakpxeElPWU1pZG5Kd1JaRHBrVDIycHBrZElVTlhGU0JoWEtIR3VCaCtobDMrajViU3IyWE1PN1NCM1ZLYVgyQmpyT01tMTRxK1JzT0dCSHN3WUZOcitrWUx6cUFNMDNuakI5OUdqcWprYUR4TWZPYU5yVzZFOVZNbEJpbFRWeGNXUmlBSmV2L1ArVDRhNE5iWXFFc2tkc1M0YTRyVktMS1FKTkJKUUZiU3JmanRCbU1vRVVLU3ZqZkFsQWxZVGpTMFJoMU5IVXRNV0hXNEZuMzBZVTBJNEk5QVBVOXJ3dHVOK2JlbmxTY3RpRVRSWW00ZzRqN3Q0QUpKR29jZW9rT1JnUU04ejBmSDlOTExhU1FSRThXY0M0RmZrYXNDYlpoWDZrNHNTYkdYTk5MZEl2bVFIT0JHb0dWNHRnTkswczkzeGZBdnJpN2VtTUFoYVVnY0dJeXlmZmVYU3BiSGc5L2Q4bTk1dTgvdCtUdTcvdCs3YTRUeC9zby9lNU5Qd3pzcHZLUnJOVGoxenAvay9iL3pYMm9FLy8vMlNXZStOcXZnbVJkVTBhS2p3Ukl2MTZwRTVGVWVuemIzbzc1QWpnSEVPa0lGOStHWEk5ZkVOWUtIOWNSa1B5cVExR2hQWFMrTExHbm1YMmVHNTlrNVRadXlyRlhNOURtVDdLbDRMbW1SellZTGk1UjJmRGtzS0liZkM1cmt4Z0FEYjZSMnVUZmVvMS9KYUpQNFoydFFidjc1aWJ1Rzl2UWErb00rWGF1aUthSFpzOTFySXlRVytyQm1Jb2d2NFlFemgzMTlmZHQ2ZWdyODY1ZFdWNTY0ckorSlNLK0c3aVUrSWViai9lTHhmSTloRlhPdkV4Y1ZkTkM5NVN4eDBwOUkvYVV6MmFWWXhYdmFxNWE5amltNzJtU2Nic0F6MkxhME9PYnIwdkNROVlIZGhBcExsWGEvV011b3crYy8rcVZ2MER5cU1wWExKbWZFTFg4RWFEYnUxeHYrRVd0SkJ2b29UMGEra1cyT2xtNDJZM0FrUm1EUVlYNlByalpXdjkycEprVUJOaVg2Z28yZExoZThZakVRTzF3eXFjdi9QMmoydWk1SDJQeXl0T2QzSk9BTTd1MUUyMi9GcW5mVVJyZHZiMDRpN29YNE5EcnlmSkxSb3VESTdhbXJ2VnE5dys3YXAwMTRqRkZ4cXhOL2VxVjdyODJhbWFjNzEyNVVDd3VVZFg2K2lsQWlsa3ZzV3VHQWhWcW8yTytWT0srZFdDZlFjWjdTcUMrT3E5L3JyTVBJTXp1TVNhN0tHMkZqTmdpTGNrMy8rbzVWdEROMUZ4RGpScHNpeE0zalp3eXdTa0NzSXJ4QkdsbWV4S091eVhTcXdYMUl3V2pLblVhTlNyeHY3bXpxTnVUbFVVVlpxMDNjbGErdy9MZEJPNlc4NXNVYnRJS0lZVktMNkg3SGhXVXJPcjRDRnFaUER4bSsvV2g1UlBIcVg0TFJOeUlnalBGMGVVbERJVHRIT2VxcmJ1bi9WVGlmVUt3V2lobUlwQW8xNE4vcC9nU3F6ZzdsdWowcjdXS0tONk9DUHhsNFhMQjFCYndLRUd2WXdxeXpVYk83bk5xdnJIbTd0b2ZxQk0wZExuZHF1dmRFTEI4bUI1bjF6UFdPamE1SkFxU0VRclhkQ0gzUERld24yaCt3b0phL1dTd3NZaEs5TWpXc2wwNjdvdDNBRkRzbFhuODdkU2hpUm52dm1hNkJPdjhuUU9tSFVRVFJ3dlhXOS9ENnJRY1MwMlhqMzNEYkkvdnorZlhJYnVTcFZ2VnF2SDFYZk52WHV1bWhnM1ZteStyUWh5alY5eVhuUmEyYjJsTGRhL2pIOGJiYVV0N042YTRQaWxUWmMzbWJsakpib3l6b3Zjb3U4dXovdVBJTkR6ODg0Uk9qNndXMjEwdHlPMG9yRlVvUFhYTlFiazlaSlhHVmtyb0c2Wk15OVhVUExhMHo2clNncWxnWEtsYlZCYnE0MHFjWDkzL3QwUGNadnNrVkpsdE0xT3liaHZLa3l0S09ZTS91VjBzVmdUVWVJQkZXRmcydVVPMERmekY5YldCWHRqRGp2U0lIbFYyODJrbkJsTC9iLzlOanE0d00rTUJndG5FUmVENWx6V1lEUzJHcTB2LzBDYm02UmExM3dINUEvcmt0eWZMZTNZMnM4cTlyeGIvS3VyR0lqbUhIcFEvc2E5RiszRzFqUmxObVlvUXc1WDA4WDJmdnJUUG1LU1pEeGRqTXZVcExKSHBEa2RCYmN4d1JUNkJ4R0NCc1F4MUtydFNUbXNlQUNaQngyd2tWM2pmTFRZMElKNmdraTdLZVFjWHVnTCt1YlFqNVhQYnREb3pCbXpvY3RSYSt6TjJreVF1d1liS1gzbmNvTzBXbGtRc0kvT0NYcmNmYjdQR0hKZnlmNFRQdjhPVmkydHNKeWJZemNiTXJnckJPWEdKUHUvT2htQkVKVWZqZ25pR0M2Sjd3Z0N1R0M4eHlWUkZOa1VuZDVBVnFIM0xIQXk4MXdrMHVSeUpXR2RiOGo3MklDMGxjN05iMnNnZk0yNmVVTzJZZmJ3KzFtS1NtWDBKbFBXWkd3MVVZYjZER2t5WlNsRGVzTnQxYlVYbDBaNW82RWZlNTBBV214c1FkMUJwTU1ZZEE0djlQdURRd0hYaUg5NkNiNXNNZWZTQm9NaFo4U2FNL3EvOUM2YkxDNU5HWTBwS2doWk8vMzJxVDBWVUFZcUhXREdxVmFKaDhUVkg5N04wUm5pa2FwZHlsMm5CSklaVkJxancxQ3JqZ0xhNldBelpuQjNlWUVob3NyTDVBWUlaMmEyY3hybmJML1dSaVVSZmRpMDRNeHMyNlRzRzFPbFl2L1BINGNBaFRvZ0orbWF1RUlsaWUwSUFySkxKTkRtYkhNb0UwcXIvNmlMbkNTajE0ZDhOSDVxYVZXOVFSQXRJb3UweTdOa3R1eEVYT0xVR2M2azIyRDkvVGMycy9qZm5SQWhKSVNoakF1KzZXMjE0RDFRTWZFQmU4bmdJK1FrZWNPbU5ILzcrU21kTVBHZGJpRTB5YXRndjdOdkdyOEtCYkN5SUFsMDJsb2NkRWU2MnV2Y2E3dXMyZGN1eWZLNXlDTDFzdkplZDYyekxyd1M4blI3bmRpaDJSV05CdmhTdDdvcFc0czNLR3Y5SjRJNG44ZlNLQ1B1WHFOQWVhTlJVQ1F2Tm1hVlRCQnVOeGpoTm5jd2l4b01HZFJ6cm04ekd1RDJ6U256WjBZYnVqSldreWxyTS9UWWQ5WWRFb3ltak4zWWJiM3JWcmJ3WEJ6cG9QV0p2QjNVZWM4NzE1KzVzYlhDS1pOcGtDSzQyRGZrYzQyRXdxN1JSWDZmUG8yNW91ZjVpZEdXZXQ4OHAydGtXcUt3aEZnSldITXRSck01WjV5MS82N1QzQ1JSNjFzeFg0elV1Nk1wRkRkbnJJYnVXZ2ZWemFuZjJGdEpLY3NuLzZyTXJTbkthRXphMCtjK0hDcG0rcnovZWNnVFJOKy8vYlZXWXdwM2hhR2MzbTlkTWp0UWh4TisyQ0dJb1NwSmZIc1F3Z1hqdmFSbFAzdEhDQUswK2RPODJwaFFHamVZYzlaOXVPNHVuYXcwVSt1d3BOU09xTFJOYmRYME5EdXNtQThPVlQwbmtEVjlKVkFGNEFGUm5NOHROalRodFNGWlRtOUEybDJCTkthMzVxbjJFeWRJVDJKMExvNzdvVG5Ra3phZC8yc3hFVVNLL3hwQXJicnVsQjFnSmozNWZWR1cyME1XYVZZOVd1Um0zVkl4cmViZjR0cCs1WktPeDVzaFBWTm5KSUV1UDhjVzhZc2NTaDNwYXBKUzlyUjg4UERPTExFR09qY1hFYis1YS8rbFpzbC9oRzlPZ3Z1YnZDZC9jWDJkVGhWS0tBMlY2Z3I1Snh3SThaeEFDRm9wOVd1dWF2TnQybFF6YWFMcUZHcXZHaFRTZ2t1UjhvYitzQllPZS9WZG91OUZGTTk1NnJoUThNT1llRk5BR1hpR2ZHWlVPYnBNbU9WTHZpVDUvbU00Q2JmVHJTNDhqdGk5Zi9uSkNkY3g2UzJ6TlBuSi9MeEh0TmpycWF0ZktES1M1TTF2WjFDdmZmNzY1MlNJVnArZVFib0F2cUFNR1Y2UHI1MzRkUGFOcHM5VTNpYzlUeEtWdG4rOFNBTXpIdGxZdnZ6aHJ5M3ZGNzVYWUhub3EyWExIdjdLL0c3QmU0VTFnNGYvV1ZXL1JpSHhDNzAvejZDT2Z2N2E1enJoL3B6L0pMMUs4d2FyYU9idDFsZjY1QTlDYzErWkkzK1U3d0dtVllUSm9oNlNrajFnMTVjYzJTNTVkOC9Md3VMWVBPQWVFSUFJQk00Z0w3b1dxMkwveVRjT3JQTGU1WUxVOE03Tzd0cytmQnNtVnZKOWNOVlVFWG5xNkNuU2dEc3JFUFdSUnNEWk1Kc24rK2FGVzZLWWhyR1U1Mm9TNVJnYTV2bVZGUXVWQzhzaGVZVlpGakFaMUZ2ajlRbkhIOUxYZUt5KzlpY1RFeXk2aTVXemVodWgrK3E3MXh4N0ZsSHRYTVNFSjZaaGhlU1E1RDV6L1VVVmk1U0xYSWxkdU95K3hFZk1DNUQwc1F6cHJpWFU5UmFuL1RPSnFrRXRXSGUyektOeWVpSis1bzdpMFZWWTI2enBYd0NseGNmU1pEOUM3NTEvcGN5WU12QzE0ekxKVmV4VVJoL1g0blZxVXBVSVhMZHJzQXVwVnRWdGZ1d1pyOWdMTVBJaVJNc1ZqcTlnYUp6R3JWSkNTY2Vtd1lqZlB4QUJubFRxUUZRZGpJNUhOb2UxQzVPMDFaS2lnWVdCTFlCZExOWWsvWmRleFJvVjRTQjJmTHcxYzBYQ0l2bXpxMHFyeUZLQlNqaVRrZm9ZWnZUbzd3c3JBTUhaZnpSQTU5WWpCWlc2UDEwK3ZzcGVqK0VlQlpyWjh1ZWQwODU2eXNDNUJEZncrMWN1RW9wb3JhWlVsOVlWR25Mc2pSQlpFeFBOSmdLQjFzWm1IbDZUYUF6WThHMWVHV0ZORzZLQ2MrUDFJbzB0cTlMSEtZWFVmWncvZjhXUk5ONzNCZmg1a2tnZXFmOFpXUzJZdmtzM0VqN3BmcWk3MW01b0pNZ0dJNlZOMU9GNk1vMi9yNGx1YmxBVFJ0NnBCa0JOOTVudFhZekgyVC9Qek1WK1llaTU4NXh1VFQxWVMvODJWN2VuTlZacmEzVlM2T0dCZ0MreXNJVitZM2VLWHIzQUUvQU8wczc1bDlZWTBwU0xHcWxVQmtpb0RSL3hWRHF0NTcvQTNhaysxVGR1THVHOWFXZlNBeHFYYjQ3UmxqV3E4WUNiREFtM1lCQUdPNitIT1FwNW1ITWRwakVZdTFONEQ2TlhCUGdJdG9saEErb21oY21uUmRCUk53c2dtdVVtZis4eUZJMklFSGxZYkcxWk1RekIwTERrTndIa0U3VFc0Znp1M0MweGh6VjNiMmw2MVpBbjZCbVNLZUZhS1NNSUdLbGtlQTl4NjRxOStYTmR2bjVvbVkyV3J3ejE5ZGN5L3RtTWZ3NjAzT0tVcndqMXpxNVY5M0FrODZ5WlJxUEZsclJZY3FJNXBQRzhqejNUYkRUVldDMnR2KzhxRnFzSUk3R2haeXMrK1QxTFhUUDN5NC96eUxjYWJUN043ZEFFM2RUdGliak1venlrVm9LZUFHWTJ4cUc2czJLSWU3UkphZzNrVE9vTVpjRDhiblZFSnFZRjRWckhhNkw3aVRKcGtiTVhjMFRxT0d6S25WR2FEVTJJMW9XcHpVd2Y1QU5WWU0rZ215RTA3Z1JNTWgwV0lzWnlVVW1oaHVuWFdaTW01ZisvSGJ2czA4bURLck9yY2E1YXNHNWlEajdhSmJZNDBYbk9zRVpjVXF3YkR2L2xmckRiVWRXcHlYcUhhdGN4YlhUVFRnYmVKNzhlWEY1bjN6eUxaUEZ2ck9EZ25oT0JwL3ZIVGFXTFdoSDZUZG44M2ZSN3N0RXkvWDV2N3NyUUsxWFh2RjJOYVlQUk5xUnFEQmk0MGYvbjZ4UWwrTDVRN1laKzQzcGtFTjlUekFDWW1vR3VjVHhTaU9jdFlvQTNKaEJaeUtYVndqdWN2Qm81R0hScTFjaUtPTC9zdWdUNENHaG0rZ3c3SzhFS3h6dlN2UDR4QjlZSm1XVTdKeTgrSXBVNkRFQTEvNjRSUGMwSU5UNjNTeU1aR3dQdjM4ZVBzNjRDN0ZjTGF4dTBxYzZxNnQwUTZWRUNjRUxKY0tWYzJndUNJSTJxbFo5K3Uvbloxd2NsR0NOb2t3REh4cjRlUnFTSHZYenUxT3lmcEgvL3o3OWhCc3l6VDI5OWJWVTRkaGwxaVljUjVFbXZCTk5FbE5JMUFsb3ExekVVSmxGNlJOTE4wd0Q4OExmdjdwMCtDYjRPYkplcTJYTld3MXU5b0FvTklwL21KWHdwSy96bWg5MzVQZ1FQWlJhTlJOSk5QcFVmdk9mZU9ObGRoRkFvMmdxQVc4VkNRZGxXRjI3M0RaRDZhWk55Vm02TzdGbGZEYXJ5aXJ2RThtZlEzeTVMcEhmUkhBQzRlSmRFOHV2TXJUWGFHcVpESk9yVTgyc2FGd2pFWGZEcGp6Z2xVNGcvZFFNNEo2YTA0anovMVVMY2orVGYvTkZUaU5XWHl1djlIVUF3M0F2ZUJTTUgvQ0R1eXpTSFI5TUxmUStCVzhzRVF0RTJFRmdtRkFxSnBkWGZoL1N5ODNXT2V5ZTVMRmlIZ0tFcEozaGwvN1dCYjRGMXJsNU9Xd1hJUGpLWkJ4MXhvWEMxODl3ZHZ4L2l6dUZkWGpxQ1BJMVBWRjhDT0s5Nmo0ZE1kamtCZEtyaXRTSFU3bmdKM2QvM2Y3ei9KMWs4RXpUM3p4U05CYXBoK2I2eTFUVzByRnFNS29kYysxUzFGSDB5THFEQ0F2RHB2TGcvYlVFcXRmRmZwNnB4cHRsTCtLQ0RUc0IxMXgySmw0bzRMMXl2S2NtOVV1TVZZTWN2NlpRY2t1OVdPdXVPc2t1cmIrNGNQcFZQbnQvMTRac2JTQ2RPQmVVWTVnTzNBVWU2MFNMdncrQlNzYXBheXJlRUowcHNaZi8zV2hPZkZIem83b04renp6di8zbDhqTVZwcnN5OHdFbFdaU3FPNklSTWR1WGtUNDlJcFdvS3FDNitxMEd2Y1FrMUhzYWxrVHd4ZHNONzZ2aEhySXZBUDJZUlhaTGlOTDhySHNYZkxKbFMzTVd3dHpIY3ZEY2czK2ZtYm05VDl2NWJIMzljM0RqK3pMamwyZkVTMTZWdXZMdW9vSkRYMDhQajlDem1jVy91NWZCNnU0dGNoeHV4UnZSenl4VnQ4YkpvVmJPdW1SVXRZeHJ4eG5ETXcyRXp2TngzNTNUbnlPOTZkRDNzVy84bCs1eldiSjNzS1YzODJYTHl5dzNLVzNSZjRQb3ZQazIzTXFSY292dHl2WHluNWlOYys5R25pOERDeVdzQzlpa2pITlRlU3pNZmZGTmY3Y3djQ3ZFZWZOWkxlOGdsaG1GRzRQaWI0anROQ1JFS3VibnpKVjQxdW1tRC84Rk1XeitGdnRHQmQzQzBwdkpkMDRjelJUV2ErNWh4RVpkQTh4ZkZjNXJqSXV4ZEEreDR6N0xjeTgvMkNBNnBEZ0dIOEVQbG5wckRxc096dkljYjhVWkZYcTVtTjF3ZDVTTGpuNCtiUHhzdmNhcUlOVVJSby96VzJUYTlwWGpkdjlmM0ZrdU5XS3pvendxZ3FyeFNVWGFtZVFhWHBTeU1ZV1c2bDdCWW9aTEZuZUg3cjB3aG02b0NLbTdNaUdGR2FmSDZmMjdzS1dhWHBlVWwzUmoxQW9XVk5HT0dGd3hZZDBsSlFMSW4vcnF4dFRPbVNzSmQzQjUxaEJtenBSb1AyVmJJVmhSOW1yUkxWOWhYM050b1RURmpFVFduQituQ2s3bE9VMnZzOVNMWFplSWlrVHFmYUphZXZ3SkZ4YmxEcXZkM3ZyOURkVzcvKzZKRkFQci92MDdyMlE2alFmVFFlNkx6V1BQQmpnK3VkLzRRaEh3ZE52VWZkS1BzdG14WnRpcXJ5N0t5Z2E4WXh5c29iVjlHcXR0ajRDdGd0Yk9Hdml2cnFNN29NNnlPc2x0NVpaaC9rc3FxaHdmQUJyVTlKRXRyM0tiRmZSRlA0YzJTbTRQNTdmU3VxV1ZSN04vWFJTNXVjR25wcng1VHZRQ2UvOFVvUmVUcUhNakxEOFlyL3VhRzVIc251eDZSQVk5MmVieFBlTDNUelJLSldlNzNEdnM5SFk4Q3dPNE9yM3ZZNjJtbnBlYnBiczhkbXM4VXNYRVlub0NjY2dWRWo4UFFWNUNyQktyVUxJSUtsdTQ2ZTJjQnlJT1c2eVpiQ3JaaC9UOTFRNzY2UWRUcWNKV2JPaW82WDBKKzFGOWQzSUdvTzNRa0IxVWhJckxOdEpUMS9kZi82dGQ5UC9uOTA2K1hGY2twQndQbU9vVE82SFUrWEdjSWpId095TFJESHFXbkVDMHcrdWZKMUpLZ2dwRXdjalVSanVFYWZkYjB5ZjlMSWxvVVhNQ0R3TDhWTG5GWUM4VFU3cVZWK2lyUnJ5L3hXUytOTGQwMVJ5QkNVVEd2OTJiNVhWMUpaUDUvTlR2Z0hVZDFSN2ZEMjRXZkRpQ3BNMjNtMTNOeEptS3g5dWtycmxoRjd6QzZacnQ4KzFyZnRlMjRWZTRpOUhhMGFOVUoreFhMQi9XZlpmRXJ5cGN0WDdIaUh6OWw1TkxtQko3QVRIRThmdkl3ZGp2R2QzK0NZQWphVGtrbDMvejN3QlZqOHZNbXp2REFWYmFzQWdLRzFPZkFqSW1KMldFUFpzRk0ySVpiNUxkc1NMKzdCTXo1d3J2TjZScXhTRlRELytXN0FpRC9Udk9JV0pyOWs4dDU1WGgrMWFYMlU2cW5seE16RzJhUWNMdnpHWGFmdDBvT2NGV3ZFVjJacVFyQnREVU80RExLdkQ4ZkppVXZQK2Z0aEFma2lnR1FpbE5BanRCVVlxWDQvNmVGa3MrdUMwWEh6cWRLVzA3eU5rSlR6bnUyKy9SRzZESGdlbGFibTN6OWJVZDVYenE0MnRqWlk5cFNYeGtzZC83bWxzdG1IdkcrTzZYVWUySUJNemxTejhWeFQ4VUZraDJlUXlKKzN0Zi9HMkpDbGVIc2J6UDkwQmJSbkNhdTlBbXVjNlpQR0NSWHBIUERsTmM5U21ZejFQS1FuMXllYmgyaHZNcFF0ZmJJd3JwcU5MVEcxTmxsMmh4dnNHM3FhVjlMYmF3NStkYkdhdlFwTjFzSE95dTJ3SkxmNVZLK1VPbnBIVDJvb3h2NHFNb2RWV2dKSDdCTmdaSGVPdnRmZC9zdEtJTnJjblZTek54Q3VwUFFrQVAzNHlzVG5RTm10N1ZiWmErM1VOcFlnajVaSGpCc2tLSzBRUXR0enhkWFhweDhkY09EcnRKdkIzWXRYMzlHNmYxVFpZL2JWZlpFL29pSjdzVURMbHQ5dC9LWkRjMTVyL2RrZXVNYjR1Q3VWNDlaRVF5a24yUllNdG05UlFOL2wzV0dBQlhrRkw2SW9IZjhuNmR2QWtoR0x5aDdiZWd2aGM0VVNDb0ljUG5lcWFlWFh2Z2d3QWVkd3Qyd0k2NDVEWG5LMTIxSGhZQnlqVkswNk5LNC80OGFMdm9YVXkydDRTcGUva1Yyei9UWVdxcWozYkEyR2pHczdXamJvN0hZT21yV29DVVNQYk4ydUNWUnNXK0VTRFhyUnZ4K2NpU1pHdFg0ZmI1UktxVWQ5bm50VkJwKzlJeDBZbkVKYlVVYUtXVk5IY1hVSzh5MW5aUjdpbzlETFB5ZlBTeVhUQ1Z4MTc0bnFsbDQ5b2tiM2F3SUxLaHVQYUxXUFhYTnV6dTkydUhFT2FKNCtlajV2YStOcUY1RHhtUTBLSHR5eGpuajA2cDVCOWE5NGYzYXA2by9NVlVhdmYweldQSkE3aEo4S1llYzVlV1RBdmhNNmtWSjhzVXppSURNdktYVWI1QitKSlc1dDlKUm1mUW9UaCt0Wm4xNG9vcDF0TEd0ZUdaN1U5TzBtYzVseWRXYkF6WVhiZHgycCtwTy9DOHpTUVZHak8vQjN0bEQ3Tzg4M0ZrMk5xVldIcHBwV3BuRWsxbi9tcFpvVjZhSmRKSG1PN085UVZKU3YwaHRhN0NVNEp0eWNiZ3QvbWxEcmY0VVo4RVBnS1VnL0NjSS9nR0RKZldON0VrZSt3U2I5VHVYTjFrbTNDQmVDN0k1bnQ0Q29EQWxtaTRRMUROOFFYZHZBVmc0MjA3eDlmZkJJcmlvL3JzL0sxeGFWNlJzOXhzN1h6a29TQzNqUXltQm9BbmMwZk1HcEJoaHByUGV0dng5cnJkWHN6bWU0UUtnc0o4WVByMGFhYnVucWdBeE1RVFFEditOUGN3eGoyT3lNNmR1LzNmbm1qL0d2MTFrUFFJQmZOQmNDd0tUdzNVZ1M1d0ZyQUFkUnhWd1JnVzhxUUl1aDF0SEtsT2tyOXJZeTE4ZmFvd2lXMnNnNjdZR0wxakpaTUpVd29jcTRUdVZ5QjIvN1FLSzdYUWJvUEd3QnFMV1FEN1dRTDdYUUg2ellRMElJMzdvNisyZ2FBSDcxMjNkMzdjL1BEZGNLMElBaC91YkVYSzNDV3dIcDJFeVBPeWJIOXJZbWYwQjJQc2hBUE1zU0habWNldjRGc2Z1eGYzOXhmMnpWLy83RDRzWGtiZ1podGw4cXdZT3FJRUgxR0NmKzhFZkw5TnFNNStHelZmMm4yLytNRWUwbVVldFpjQmUvU0hvY2tZY2NKNzRCcng2ZFJnQW9EMDRCMDcwcWNob3pZTGtXb2I2NWE1djhtZVdKbW9tQUdwd21QSWZRQmdXNU84V2FqQUh2bzFkdi95aTQ4YjdiZndUUFozc3hBR3YvYWVvWVFBZ3ZsOUtFd0RzNlI2NDBmdjF3Ykh4UzlIK1Q5ODlyU3JOYnEzbk5MMWZIbHdBK0VSRE9JQWZoMXprd1JWSFdndVBUbUVmV0svLzNYdE43MGNlenFYYlJILy9zNkQzYjMrUXN6enNsTkprNzdkOUd4bHNUQ0hweHpJOHUrL1Q3Nzg0UXRXOHNvSDNRK2pKQkhDUjhrcjRSeUErZjZ1RE16NE1jallQOTdTaHY5SENucDhLZjNpR1VndmJnL2REdU5EeFNhSUFLTVQvMjFjWjhLRDhETDN4dVRoRmNXMmk0cDlWN2hYTFcwQlZIMXlIbDR0N1BMMi9sUXVvdXpoWDc0cndodjBha2JLbnA4OTdQTk83Rkh6am9pdVdsRk5lcytQL3NCYlAvMktuSGR6OHVtdnJQWlN4RmJMaXdWeHlEVW94cFJrM2wrLzh6TWVQaDVSMUdBY0E3c3JWKzQvcEFtSlgyNVZzaTRndkF3cXhXRFRhRUZKdXlEUTJFY25XWHFsS29wS3B1YW5SQURUQWhaTzA3WFpiS2prYmxuV3A3UjNZYUFOVFBiNHBHVGR6dVVPcWRZMVdpZThtRDNqb2NUMDZVeXdRQVVsQTIwWUJvS0psWFJBSkRNbE5rTVo3eVNvdFpFUWpRSS9FVWNsV2xkV09YVlJtQ2xlT2dyWVdWSTFCTDdtYis3MmUwZE5yc0wwQzRkWnMzb0VLaGF4dU5zbkJFYkZ4TWtTRVIrK1pqTFpIWWhKVlYzbXhveVZSYVVUMHFqb3ZyZWdjVmRSc1hqa21hRkZ0RWVKbGplUUZWUXBtVTA0UWNiQ0hqQXoxaVVJYXd2bE9Ya082TFI2a1hlb21YTW9qWlJOVjNmcXF4MzdIaDdmVWVnRFZDMStacUV3bHE2NjN6Y3k5M3E1NzQrcXVBcjB0dEJVcWYrSnRqRmlwYzBCYSt5bDVhOGNtN1l6TnJLTkErSVFGTzNwZjFmclZiZTFEU3BoTldSdG9IZUpOaGZzWFJlZXhxdnNGcVNmVTc1NkUxaXlyc25CWld4cFlhR1ltSVJLdldTN3o3T2cvN2k0Z2RtNEpEYVJjbWhqcksxTTZOL1JhY21PSmhHaGw5WTA0SEt4a2paL2NHdktDbkFydGR1d0lkSzFJUmloV3Rzdm9iNUhZV1ZhaENMNTdpWlpTOVNVcStEVEg4OTF1QUlqeWxWZW5OYTF0U2lHYkhTbjJ6WGxucDh1cWQ3bnFtUG1uQ3dYbXgyMVg4dVBIeHpnZkVJdEV5NTl0dDkrdXY3TFhkbFBveTVsNjcxbDRNQUoxbzVXb0tJRjJGKzZYWjFUdDYyTE41Z3V4V1dXbEV0TWt4UGZkdk54RnJZZ1IxMjFSbDJ2YXNvRDhlZzYzc0Y0dFE3bFFlR3hiUGVMTUNUaXFyMXdETCt2U0pmVjIrNk1YZlc5Y0VNUEswTC84N2tFaThZMnJiOVZEdCtQOUd5THY1Y0JXSjFvdTdjS2RFeFdlcjhqUDR3dkRTcyt6NkJ1UGFHS09ML0NtbGlTYTRieWlMdWcrbVJCUlJmQkFON0dTWjAyQzRYSDhlcGRXci9DQjhnYlVaVXBlU3M1eE5RRElPWVZBMUVtSWVpS1hXS1pSQTFWR1RDVHhvbU9vZ09qUURjZlgrejFybE95aG5Vd3RFUFppUURTbFNRMFhIT1Y1c2k5ZTZaM3E2OUJudEMyKzZ2UG9QdkMrNCswVmJUdDQvMS84d1hJeEc0Nm1FNHduMEhpMy9YQVFwaUxnQUZaZzBMajVLSCsxWEJySFFucGhUWjB2KzNPaklwKzZiMGdzNnVvU0U3cVZ3anUzdGVoOUo5Qk9YYy9Dd0R5Ly9hVW1GcWxGTE1tSDVsVTFSOWhSVXc0U2FJMzBxRkhXQW5tbVNscW8rYXR1RzRYc3NTMTV6ZjFTc3lsNWJaM2I0cEZYODdheUFjZG1jWit6b2VoenpvWEVkYVFTWmtvb0x2bVY0TG16dXg2dkV3VzdSVkNFdFd0M2RBVUszZkZpWjFhZGk2Vk9RWGNoNm16R3p6Mmh6amZNS1FxVGppajJ1MmFwamlUUHJhUkdKNzdhTmpUcGNkNmdQSkJXQVA5WHRhcGNXUDl4K2pMOGpkUFB6YS93cWlOdWZEQXc2M2JYS2tscm1zQWUrUVU4SmZ5ZkEydnFGK1JQM1luMTNlaGg1K3U1SHJiTVJJWXc5UEx0b1g4d09ZRzFrWGVDNGVhOVowMk0zYU1hdW56OWNueWF2WHI3TEVRUEhxK3FwaGlKSHkwSmdKZ0F5c3pvbXozVGxsWUJDZGJJdlJPY1VlTGdOWkx0TE9wRnByWDA0V0tPZ1Y1QWxpdzlleDJiTTJ3Zm5ZK25Odk1WL2l2dS9oT3p4RkhWYmxKRFdhTko2U1JsdVZHOXNWcTB4clZFWFRmVUtCdU1xNmdQUVhkVXMxSXlWdFN3Sld4dmhkK2luWFE5SUM1S2h4SExNdDRmbkpvc3V0WU10cVhBTEJ2blFGUUJtSE9XZGxWcitEVFB4bElnZDJHTXE4bGhQNDhSRFhPdUVRTVppODkrWWljU2t0Z0pJTG5tTGg0T2gwTzBlTXF6ZG85YnlvZndtTzM3dWhQckpJZGNMNzJzRTV4OHpxaW9WWW1reFZGRmE1L2JsYW8zQUtnaC9rRU9BbVB1eDViRE5PUXExYklLd1VtSmhpWUhDM0NjbVpMdmtXRlZrUTVaZWpuRTljQi9zQ0lpNGxVMGtZNmV0UlVOYVh1b1FMeXRKME5veTJvTUNnckxpSkNkUVIzREJPZit5eFVDanZMZlFGYkVlYS9UbDcyU3VOT3VwbFQrbkJ0YVdncmx5ek5jUk94c2JYL1RGZEp5LzJneFBhM29VMkdwWWJDaEwydjVIMmF5SU5XTlFML3ptS3pZcVVDc3JWMmFzcmVYUkw3L2NsNGFUNjdTTVRBeEVmSkx3aE9oTmhYT0p1L3Awd04vdkNWTXFDenhPamZONWVMUkxPQ0tJYytNcjF4ZTZmQXdiRnNXNEw0YzI3bSthdG9BZEFUYnBsL04zUkpnYkIwbmZNMjZMZnVLa1BSc0RTRUEwVk1UamREWFk3SjRmNzgrWUYvUDQrc2hWK2hjbFpUR2Z5UFRtOTB1VktQUmNCaHV0SzVDS1dZZTlwZ2E4Y3VDcVJqaGNNbzV4Tmg0UWNZNkpSM2FrNVk0MW01U1JCNFdGRlV0c2lxQVVqVVNNQlo2N1BjTUlkQk1hMmljRko3VTdqMVdzZjFPYXlHY3F6RXpDM2lBV1VhNUNqV2FjM2l2MDdDU0pSSW1HRlBiaWQzT3I1V0N3TGYyKzRKMkxzYlUyVUZoVlN3VHJGcUR6SWM0Q21CTmpKRFdsVmJUYURRYTRtWWtYcGRza3lKM2RUVWVUMXhHdGxUSUp1Rk1PR25oT2xIS2toTkVHaEp6OUJsK2pBbERNQ29EUW1xWnpCV3lVVlNJUEhWYzYyUURaZzlQSE53RlpUREVrSWtsbWdRaVlMQlFrRDRIWTlWb3JLdGFBb1NMS0FGcE5jWlVTaG13SU8yc2xSV1ROaldtVmxCOGY0UlJ2dUZleHdvcVExWmtCYXZqaHVKaTNnb2R5ZkRKS3dMekFGRHZvaGFXaERSaUo5MmpUb3duOTM2dHV3VGkzSmxZbE10d09DeXQxNXZGMWFCbEFtWkE4Mm90T2RJR0N4MFdRSm9PeDYvM1kxblpvZmZubERsbzNiL0g5cjBTSURMbXdZT3VKYzlkYWYydFdSS0FMYTNEVjlwQkdMdG1idmEzcEM0YUo2MFI2WHFiR2E3UisvZVQvZDVRcW4rbzhvZFk5V0MrcHV5VjAxaGlDSHdjbzI0VXBWRjFIUjBTbXYxNEljcVVzTkJqcFlyYVhvcEJGNUphaDZjcU9rL0phRlhtcDhsazBKYU1naENrRkJ2UURQenJGcFF1QU9Jc2FZMnY5Mll3cDEwZ05GRXBjcmRoN3RhZU1MUnRUTWt4R3lVeFNWVmdGU21YWmFOUHN4c1krSVpwOEpHa3hwT2JBRjlOZDBhVzBQUHducnI4SGpDYkJDdDdwY3JkTnkrSDI4bTZRK3BYajQ4K1VNSEtDMkZOajJRM2VmKzNhUnFIdVJEK21iLzVTZWZ3OTRNYU1MQ2ZHVlpaQ1NmNlM0K0plL1BoQitTbUsxSmZPRFU2RTFaVXE1TXQ2dldjOXphT1U5VmxrZ3ZxNUl6aGVYcUxoWTNwOWRNUDc1by8vY1hoTEdlZkhlemFLODh6SlYxZjgvNTVpNnI2OWVRZlpYRDMxbDc0cE9iamVyUFpmUmszYzRmeC9MVXhlWWd0Yk03dXcvMXFvZTl6YllucCtUeU1CN2RXMDkvQmR5ekticXRlS0hrc0dseVFVRmJLeGQ3Tk5keGRFa1pBQUJBOGlsTVBHenZSU2dHQkVEellNWG5uVUZ6UlRIVVNnTlo3VlVUNmtlQWUyNXBxZjlRWDFmODRzV0RpSTlQSEViVTRaV3RMWUxQRVQ2VjBRTm05ZWw5aTBMUTlIZTk0UXZDbHVuSUVHaVJjUm1wUG1aUXBEUW5tRjZraEFBUHh2eDkvMzMvLzk4TEgvMXRTTktJZkFNQmErdzhaNUFGOFBHLzlzNkluK2U1c0RnR2dZQUFBRU1DL0g4Z2p0NnZyLzBhOVU3N1hYMEJvS0JWQ2VvN2czWVNOdDZ2VlE2V2Q0bi93bGVxOVFsWk5abTFJenkvMnl1Y0wvQW9JUnk0RHBmdU1RMzJ3Sk1yUDZDTFBVRGZoNnVlQmxscmhSZkFiOElONVc1ZVNWY2FwTytyYVBpK3hienJmWGF6bzdPZDgvN0xZMVE2Zy81NmwwcGVaQkFxby9yNHQ0Rjh5MytoaUNHZTRua0FqMCtYV1Vna3UvbXljZlYydnhFMFpEdnE3VCthVXRoT1V6VmY5T0pBVldBbUFyeTV2d0Q0bnpTT2ZlWTJkcFV0dDIrYUFmWjZxZDBObExzYzQrNGs0SldGdmY5UVRxdnRHTGVSalpoT0M5eFo1MWNMM3NJRDlRNVVqWmR1eDJ3V3FrS3B0RkdVSUxabEhMd3JaSVQ3RlVKY2lwQkQ4ZktFOXUrOC80aTBYOHR2YnZPWUUzQkNQamJIbEhqdG1JdGt4dmlzaTJvRXVmSnkwSVFZTnpEMjZvOCtLMGJGc2w0dlkvdUlKUUhZb2VOOCtXUVE2ZHdKUFMxaUp3ayt6MkZTMnB5ZTZyYzB0YlQzQjgxTGZoMlM3aGhmVW1yRnlMcTBFb21pSWI1MytZS1ZlNzVMTWRBd0RrSnNDYy8wU0NzVHN4VStZV20vS2V1ZksrV2pjc0Y3WlpGemJoVEVqM3BuNXl4VXRENVZXRHNzdWVDdGljL0MyTWRmSTU3ekk5cjJRSHVOU2ZMMjhKeWx6NWRrN0VuSVJQMHZ0WHd4dk8yRHJNdmFyeEdKRXE1WFhMTCtMRjlSeHdlbElkaE54MGJUSHRKb1JQUktVVGlueWxaSUU0RTlYbmFVVFFEZ294QjJNQXBBblNrTks1Sjd1NFN2QnRuTy9zbWUvM3QwMEF1YkovTUhmUitrOFpFY0Z5Z01BQk5DUWZyUTJGSXdEdFRzQitoOGNnOE1CQ0l6RG9TWUhBSmJCdHdiRTNYc2M2OTIvTk9EVXJqWWxHa2c3RjlKQWtVN1hJS0JZVzRNRDNwN2R6OUhNTXJzQ0FyQXI3MEkrZm9hYzNWZVE4TFg1UklKMlJqM01HdFZyWUNWRzB0QTZLTld3b2RyZU9wVmEvbmpYVTZ5SFdKeFp1eWJKNnU2Z1U0ZDR3MTdhekVKTW9WOHI0d0QreWtya29FWjkxRlpxNUhMeDlpWG9BdzgrSERBSU0ycHFXWER3em9mWFBOd2JzZzJmUis5azZ5S0ZnTHNISmtYOFFwZm1qVmNkWW1GU2dOeGVyMk9aWWdvRURaS0I5WDFtc21SS0VubHJJRFFOUVBsQVVEWXVsU2ZHV01jeGVJZWZlcU1JNnZCQzFheHc0OTV2SWJmd0JXSHd4VlV2VUl5V2p0VHdXMVRnK2NaVERiMTlqYXJwK2ZWVkVncDVmWDdzNDBLOE5qbnFyam4wdFkyMUZkTWI3WW9waVUxeFZXS1ZQeWF4eUtjazVsUk5pRzJFYlJ2Z1Vpa29UZzkxU1hTZ2JCSmNiUzB3YTZRQnBpUnFtVTFJcGFva0tpNVdNWkdOaXJwR1N1R1VSQ1pRcFRXcWhLK0tlYXFJcXdvNThRS2FQNVhoMGRGV2thbHhjRnZZL1BXM1FycjZ3OWRjMTNhbEptMjdyaXZ0Mmx3VmhWNUZJbHBrcGFvQkVWWjVZVmF4RUZYYUJOYS90cGpmeGRaZXp1dHcrRGMrSVAvSi80eXk0TnpncmdiSXdYMEVHYlZDWmFXd2xyU1NjajZPL0UwK0lCRmgwZDBpKzQ1djM3ZG1OWlhLOVRYd0d2OE1mUGJldEN4NlhMK0FwQ2xEVy9Iak5pSys3dnJxMVNzNDIxMjhiYkcvTXZpTWM1R281SmMzS21kZFoyOG83RVU3VnJDR0JQWjROdEw4OS90bFhGMGJJWW1OSXdCQkFRPT0pIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpRdWlja3NhbmQ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQURJMEFCQUFBQUFBZFhBQUFESFRBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdsd2JuRlljaHpBR1lEOVRWRUZVSEFDRkFCRUlDb0dxSUlHR1ZndUVLQUFCTmdJa0E0aE1CQ0FGaFVJSElBd0hHMnBnUlFkaTJEZ0FhUEFaRmtXd2NRQUZtKzhUUmRrbW5VajIveWxCbXpHaGRlaGJaU0YwUjd1bzdoa1pDWkdUNmhucG9iWlRXeHk2Y09EaDBFZy85bzBGUitIQThzM0oxYjN0dzU5WG96Z2NDTndqWm10dHdDVnhYNGhMb3BFa1RhUlh0MFpJWTJJdDRqZjkyWHNDdk1STFV3ajJRbzBJa2hjeEtrWXE1aVF0Y2ZuaW1ycFowanFIdEduZ0pibC90RHF6aWlxZHF3QXpvUTBUTHg4Nk16cFg1dEk1VC96djk2OTc1cjRBb29zUkJESmZCYm1rV2dzSXRvcU5iRzJYSjlDa2VvYkhiZjN6QkJtb0dBMUk1YWd4R08xR1Rhb05FRlRNNjdJdW9uOUZYdnpmK2l1aXdRRUsvVy9haG1pYnorVmRFYlZWUjRZTitQZC9qY3pDVE83TG53V2dJcUZsNVFBbDIxWUIycDVLSkZsTDZKZjdaZUJ6ZnU0Y0ZKM3ErQU9DOFFWNjZ6b2JXd1loV3dEL1Y1c212RVhvekVtRVRXdnRLRzJUUEczaFdjcFFtOW5RT3ZSOEpGSVZnWkJkMm1iRmMrSTFmWVh2d05Ra1ppdnF5UDBlOTM4NnkxYmE5ZDN6QnFHTHF3QVgzWHB6YlRINit0Ylh6R2drQTJ1SmZReWVsZldlSlN2Z0MwSkZVRjFheE5kVFUySFRwU2o3bEpsL25lbXE3Kzl2U01rLzZKYWRHc3NxcmdHZWV0bmFOVlBMNHorZDdxeC9zZ3huRjJUNWVnSFNVV3lYN0FERFZNS3hveHowQmNodVh4aTJBc0NhdFRQeXZnT09OVE9ick9TY2NHdUNRbHpoRWJLQi92cnR6MWlySDhoc1puYTc5bkluaHkweVJFTENKeUxnV2Y4Ni8zQWdUREFBQUxwak5FZzNKTk5RWkxoc1pMb3lwRncxcGs0ZGN0aGg1S2lqeUFrbkVNSUJRcCt1Si9pbGtoaXB1Q1BIZWcrRzlscEZvUS9hK3hPS2M2SEZBeEIyenJwM296QVhhaUJ1eFZNOFZtQ2tXbVY3dHQ4M1VxbDZpNnh3eWFzd0NwVjkrY3pVNU9manJNckgvQjFiZHNTWks3bVNXL2EvdENtdktvSkVpaFlqVmlLUFByeW1LVkRrUC85ck1NTXNjeTJ3MEZMTHJMUFJEbnRkY3gwekt6TS9FNmlBcENqNkwvay9hS0EzQTI4T3lWeGFDNE9sVDVhZHVQTVBXZlpCMHZCa1J0bmNZQUdkaFN1V2JsbzI1MXJUOWVDT0NLTGdmYllHa3FCSjZWUXlhNEtUR0lIVWc1ZmhxUlNZRWpNSFJ4SUhJK2xKM0ZUenROMHBXaDdERERGUHB0b3B1TjQ0Si9BSWtnMVNlT3BjaTloUDBSVFFFaVdPd3p4TjAwWkhVK1VwUzFHRjhCWVBFRDNBQkxGMW5xTEZmQXRTSWRzNHRaUXJFSkN6OVRLdFoyVE1VVmhheEhPTFczaVlTdDBwb0VjWWdvU3g0N1ZEcWN5aGtna0ZQWUhkdk1TeDlWOSt0NzZOTFpxREIybTlZWWhtdG12NHowbDcxYURYL2hjek93UXV4cTZrMWxVQzdubW50Ry9QM1N6ektHUS9md1JVRC9jT01RaURJcFRnanh2dmIvUGJ3RTlzbEE2aWpMSVR4YmtHbHAybVhoZlUxTzVBL3lIZWFiUldJeklkV2pXWjJXMDk4UzNOSm14SVV4RDBKUzJJUXFoNy9ETE9WRlVZOUkvMDcxZHFKRnk0Z045U055UHNBcWtsSkdYUGFmZU0reGJGNXFJWWMvSUFCeG1sbTRCY0Irb1BPUnoxOUNNMm91aDJvR3RFTk4yQUpGckNWek80Tm9EM2V4V1NFS0c0c2pNRHRPVkpTZ1lMVjNvU2FMWWVlNk9yRTU5Sld0STdYcTZGTU5CNnBCYUR6bVNHN3g5UC9uY29BUUMwWU82NUFWLzhWcVI1cEM3TzBLSlJTVGlYTUhlYWp6dnE4ZkQ2VEVhdGRTZUVkQ3lKeU9QN0hTMEhOc2NqbjRFVUg3SVZ2NUI5TmNIdDZRK1F4cjVOZ0psRVlwQmJsN2lXRlRnMlN2c3ROTHBrMXdkMEVPQi9IS09QNTFvQWtLSGJrMGN4Z2FVU21FZHp2dlJFWGZYblVFcXhxR2dkeC8xcFVCbjZ5U1ViaUw4YmtJbENwT0MySEYvWTB4NXFweFRMNkxtbFVQYkZPSk1qWVFEZVlKSWNZQWh0S1ZxZnJGS0luZ21qT0k1ZXgrV2JTVUFyQ0dOd2hJRGlhS1BRVjEyZXphZEEwNENIRzg1TFltaDJnaU1Fb2hndUZDRTdXdDJSbnBaT1AwTEFtempKTkpNbDFGcVEyd2ZiVUJKYjgrZ2RmaVNHU1cxZ0MxdFowejdRVlFkZG9UU3lzalNlYnpvbGZ5b2hTdGdnQmVlTENIT0RmTXlvMkJPUzhhMTJoaWRyM1lVaFJEVlhUQUl4RTZ4d21zMERFZzFNUkZIQUd0R1pKTEU2Q3RCWmw1SjJBN3VsVFAyME1qUVh1K0ZHY1JoakNvVlh0b3daaXRoZUFpZ2Jsbk9aSVJnRENnWUtlampCUW9RNmhSaDJMSWFyR1dCN3orWWl0S0F1cUVNQWw5UURJZ0hjOVJzWWlVekFOZ01zWkdMTG9VYXhha2tWcmZEb3pLMjEwWmJLMDRacGk2Q0VCVm9zTU9BQVVWZ1Fpd1YySE1qQkR1S1VnSk9JZ3lYaEVNbnNVQ2xTYWFTeHc2VHJpT21NUlYyNFdTRy9BcjFvYjhMTjlNRmFmYkZvcU5yY2NDTnk0a2lqcUl3QkpsTndCQzhtV1ZnbEcrdE1aK3Y1NU9NVjRFaUYyS0NJYlZTc2xGb1pOcG1GdzgyWFdzd29DNTZLRCtxVXJvSXpLbW51NEdBWmVKWi9FQUJNNFFXUVJwRnFob1ZZQ1FmUGRwT2hIR2FXdXg0ZXVGaUhudTQwMHBvMU43Q1hWTW5mS2pSMllkRmlzY1dxRnF1QmROdkFhOWR5OHRFVFArNzEzTHdjRFB4dkRkMGF3KzluZXlmZ2QvWTM4Q0VMNXNKaVdBbnIrMzMvd1pLY1Fud0tqclhpTUFCcER1Q29hVWlrR0lTaENBRUZ5RUVWNUplbEZjSEJwOUxuZS9lL2E3Yk1FdzhLcFA2WlpWbVZSOFM1b2JBbVZaSldPTTV5MGo4QkFCUVlRVFVtUXlhWkdFVDF4OUhEQ1VrTUcyTTJIRU9odVg1SGpUdUJwU3BBS3dpWE9tc3FCcURBWHpRVUl3WitmT0JIdmdaaFloUEczL2pWeUl2Sk9EZEJJQzBqSzVzS25ONzZxVXhzSTVSanRBcGl2d2NtZUFRSzlGWUtHc0VTdENRUW9nNzZHNFplbXFUSlRBUlcxRDh5QlZJUUJWTUloYVp1L1ZIN2hTT0JSRktSbWpRa1Nia2dRSG9pcll6aEtGWFg3TElKb0xDNWFhbmkweGdXTGdSZ1RnbGtyT2ExV01Kd25ROVh6bGNmbUFEc2hRNEg5RW9lbnk1U29ySHJXZzl0czBwSTd2LzNzRWV3QWF6cnVDK0dDUENmeHJrVDlDWUE5QzliQTVCeFNLSzNkeDBBWUkvZXlpcW10QnVBbzB0Y051YnI4MHdsNCttNE1QajltS2FXUC9GSjF0bHRQZFV6TzRHL2hMOVdqcFROc2xWdUl5Zkk2WEpYdVZpZUV3cXQ0ZGJtZmo4QUNDSnpTZmRuNHBNbzQzS3NrWFd5c1FWcGpEOVN3bTBGOUFQQXZ3T0FOeDJ1dmNiMkM5dUFDOStFQzg5NHp6cWZHYVA3S09iaHJuTTd6MjBCQVlCRVFIOG5nTjdLOTNaMWV1VnpOUHFuN1RQSEl2TWNkZFYxaTYyejNuOU9tV1dUK1phYWFZa0x6amx2Z1d1SWhpUlFzR2EwbW90Z1lHUmlaaEVsV3F3NGRnNU9pWklrUzVGbWpmK3Q5UUFIb2tKNmIvM2diakwxMWtkZk9iUTNnQmg2Nm11OXN2NjNUdWRUb0ZDUlltVld1V2UxUy9hYjY3RGpqampodnBzUmNVdU5MUzdiN0hiVXVPdWkzLzBSRGxmYzBCQWV2Nm0xMVQvKzlxK0ZCQXhIaFNkU0N4QXVSS2d3a1ZyUTBRc2lhODJxcGJaYU9hT05CQzd4RktsaVROTmVCcmVPMnVtZ2s2NTY2YTZIbm9ZWVlLQkJQRWFiWUt4eEpobnZySW55NWNpVnA4UlVwV3dtUjAyRWpUYllhWmNkQ0EyL0VBQm9EUUJzUDlCeVFMOEZNUDhBOEo4RE53Y0FBRFoyRmJ5RWhPTVVMQ1dxb3BoSWlGRkdQNi9KU2Jibm5KZ1V4VjFEekxRQWhDSkl1RWJCbzNneWFTVUpSU05kRUxIU0h0SU0zSEhHc1NOeGZld0VuY2ZyNmNDZ01XbDdqYWFKMDBleFF0UVI5aWlHNENVdzhnU2lKbm53U2IycnNBaXBSRWxueENZTXM2Y1N5SStlMlJ4NkVxYitDckdFSG1Pb05BT0ZwSlN5TmxBVGhIVE5Qb0I5SFFPcng0ajVYa3pPZzRRT0NXbWNQalJ4VEMzVThZUG91VVU3WDd6TXZya2lXbzdkSnNablFRQUU3bm4xL3Q1ZloyUkVRbW8wd2VpdXZKa0xsZyt3Uk9rczV4UzhNOFdMbFRvRXhLUkp1TjVabHVjOVZ4bUdwM1hvaFNGWmc2MDJoMFBwZlFqZ0hITGRVOWRZR1pHVWpGOHhHUGFmcENpTkJxOVY2aTA2VDA0WVlwNG9LMTRvYzNlbHJDaVZFWURjL2oveVFTblBPdGFKbnpIQmFhaGNBMENmQUNxOFM3NVp0QWswcFRuS05BdXVNUVdRYkZpdnRuUFV4bk1MUU91MmZFbU5iMVpxNTVJTWM1UVp0bXA4VnlsUitGQllveWxYcFg3VkJEQW1kbUl0SFYyRlJ3eHEzZjR6Sm94NHQzS1pmcHNqeTh1L1ZXYlVnN1oxUjlNZ3Biako0dG00V0FETVFrNDV3RFNrVVJndHlFbXcyTUtSVFdERlpkTi9GR2FSZlpIYmE3T0xZTy91VDRpSEI0cU1jcXRIN0tWdjBicXdPWkYvdGVZK0RRNG9IVVFZaFE0T1ZRb2JUV04xUzdEQjhQWGMrenV4Nk9RM3hPMUZkbUVxQS92eWlLM3R1YUhTUmFXNDBPWTA4WlZBUFRXTVh3SzRaRU94QmhDOGZUd2FzR2h4S1N0N3lRbEJvVDUwb3J4K2tOcW9tRytxSU0xNFR5WFZoU0lEMTB1RUkyQ2N1Rk9xNTRDY1F2Tnp4L3BjZjhHb2ROWS9TM3htYVYrekpac3c3OWlsZTlGL1U4cmhQVkM0bVFsY01EcmJvRFlTNkNOYjRBS3d4cCtSRUZWUzFUSTZVTVp3NHdZV1FOUFFXNXROVG5GUGROZ3cwRk0rZHFnSGc4MjZKOHNpVmkzdW5RNFRsc2k5Z2I3RzQ1bVdMbmQvRHorL1JuYThSTEVlNTltcXByN1Nob3F0VndTSXZmbUdkVjJ2OHlwcWpVN3Y1ajZuclAxMTFwZ3NpTHhOamUxV0hCOGJNanBXSjgxZHRTMnBhbndUZ3duTjIzM1dxdzRiREpTWkdsQkpUU0RsSGVNWVpYWnRPOWZ1bFdNL2UwRE4zWnpORmJ6Zi9kczJ1WElMS2d4ZGt3TjlXRVRadTdsczVya3d3Ukt3eVZ1VjJGTTJlYWxmR1ZhaDNMVTByNTF0V2ZNNVdGSENKL1dNWVlVamhXeStjRW84ZXlXQk1YRXpXQ1ZMa3liWWpqMXZyVkpkbk9SWGV4c3JnVURMcWJhaDJvaUQ4NTdFU0dMYXZ0a1RMSlJmbU5XRThlYUcyOTBXbTVJc1hpNVRoN1d3bE84YzNMU24zZXVpN1dSNUg4eERZMTJMQ2JDeUV4Vis2eDRmM3RRd1VER3IzaHRsT2ZBRzYzMTh4a3J6bXNqYnF3WXRFVlNXOHZSOUtMZWhaN29KM29rYTVqV0xWbjlwV3Fjcm1EMlZ2R09hSjhlbitLaU9kVWJrUFhKUWZXNXhaYjdXMlJlRHRPSlRhME5iTnp3dFJKUEFaOVJ0cVNheDBxR2xMazkyZ3YxRFg1T1VRKyszWTZ1MFVLM1BQeURSYzhlSWxta1NjRVpwMHdTMnc2d2NLMytLcW5KMzR5ZU5hYnZGNS9SeURSMGo3OEh3ODVIbXpHVk9TMFdJZzlKQWVsZ080OXdOa3RJN2hBMFc5a3dKdWo5Q0VsMkdhQkw1cWtKWEptZ3NzUzZhZ05Wdjdvb0dpQWd4YWwrM3F3VFhmVGlsckNtbFZsbzhZMExNMkQvQU5oZnVpU0pyTlhWc0J4MFd0UGJrVmt2TmFIbGt3Z0ExY09RdEl5eUVVZzBPSEhsemQ5MVFXM3JsM1cwL3MzZHduZllLMGdDT1d6d1B0SUNIVm5OWDdlQmdSblJjR1FTcmppdWMxd253cVdVbDE2dlJaOVZoWFNlTUlTMGtmSkM3MjhrUGsvcjJERWRUUEk5MEdLQUptdHVSZzBwakhhRTVTL2xteTdIUUNZM2dCcWtiYmtwRGl0N0tNUHA5TGtRUVNaL1A1SXFEd1JDZVBSejdkMzYwT2dhRlRqc2VONS9ETzhtYTRsQ3hsNTFXY3BPOFRueWR1RmxtZmhmelZtdDZlY2g4TGVtOG4rZ1FLS0toZ3cyRVgrcC9EZXNpOUdBUlZnSzlrVGxPTFRrUUlhclhNYkpadGFFRDA2YjViZEk0YUorRVRYK0FpUTVKZHR1Y1ExWGFEenZERnExc0xhSmMzdHhLUTN0UUxleVVxeUtXVlEzRi9xMGRGajhZRDhrNnlkZFZGYTUrVnMrRFNHNnVDL25OOWNlbnVFTnFsakovNGNvdC9uN2YrcGlZZVlVcG8rRlpPbEZHeFJ2VjFXeTRWRVBHS0xKcFg3QUIzdUN0TEYyYm1XYUlCaU5GNmhCOTIzRy9UMm11ZHRJRTFmejY2VFV3M0FiclFyYWx3RUZoTzNaTExaSkd6V3p3endMakRzK3o4b1prODRnT3dvSFVBSEFnTHc4WGgyYUZNcjY2anM1U294a3RKWUJlVHJSalg1em5Ca2RtSTlNKy8xaHJjWWpZdGRacmdiclZUUjZjMDZvM211YUNrTlpjanJmUHNYbGlwYWpOTHdhdWZMNUVWU0tFQUhnem83RU14WUpXMC9vaUp4dU50a28wV21VL080NE5kVVd6SXVzTmtkWmZqZGZTVm8yeDhPREhINkx6VEh1ejJwd09UL09jQkVqSjFSVWpSOGI4NzVOSUVCQnVtM0J0dDZ6RW9kYjFoTWRvTWhyR0dxWFU0MkIwbTcza3lMdVJvYTU4UnhuR2lLeG1JSHd0Z05TdXZrQXF1dlIwS05Kd3YzNFllNFk5K3B2VzM1RTB0c0ZGMWd1dWpUTFUzNWZwVThEd2xBZlBuRzdIMDN6VzhYMGRKbm12Snp5WTQ1eDhsaEQ2ZzJKQVRFUjVteC9yRXQzbU56cTNPa2FVd0p2SWZHdStmcTVYZkJPSGphZnZRRDZJb3doaGI5blFheFQ2SkRmU2I4Vmt4cm1WVm5xdTVyWEk1UnE3Ukh5TUpSaU5Kbk9IdDhrbXZiZ2d6WWpnblRuNGR5ZXhjU3pPM3ZReURvSjlsV0lqdUlzUktSOGZiQUFYbXp2c2x2TXViYm92VGFtYzdLMmJSVWYySDB5UmpMdEpxZVR1eUFqZThZUWNKSkExZGNkdHp1VkNlMC9FcmhZTkl3dTBZT3pFdGViK1NsTUtPVVFzRTl1dVp1dnVRWFdiWHBYbENidXZKQVJYUHlBbXpGR2hJK3VPR01CSDdEUE8wb0RVdzFNNzhBTjNoSjZFQitxbzBZUmhJNThiQlhDSVVMSW15Z2hXVnNheXNJU1FCNTZocUIySElwWHpPek85RWxGc2R4dUJPWDBpUGhTeE5QOWVWaHlTU0lwMkV6WGthYlI3ZmZReGtlaVRENEwwRllDR0dpTnpNRGRJalhoaGR6WFB6ZVE2c0hVd0R5Z2RVc3d4K3VtS2lxNDlvNVFyeTRFSlBjaHZYMzJtSjFFWlB2THJKNnBjYVZ1bUMzcFFxWHpqMmV2WDRvcFU3dk51MmErT1YrZXJ4dklqMlVibDZBM25Sc2t4a1d3OWZOQWVqVndNSUU1UkhFU281eHIxeE5LczdjY044TnczMU1mLzl0UkFLTkRMSEQ3Y0w2NW1tZXBhb2hrblBlTFluY2IrWkdBVnMzUW1lczV5Qkd2NHhiSlI3UnVXaktJV3dRNmxmQ3RGdEhBZTBXQ29vMURDK1NCNkpzZG5wRW1QZ0IyZ1NRNkpVaThWRm9JQmhWM2toQ2hmMDJZeGo5SnZlZy9US3FUd2czZUhQTzVzVmtXRFl2R0NTYUJ1cUk3bmFBOW9OQjg3Mk5nb3VJUWJrRXJIYjg4SjJkTmpTNkpwRHJUZlY3cmg4V3J4a3I4Y0IzWmgxMktuTW1LcUhvMXBPZW5odEY0NmF6RTlMYTg3dWNSdjNKUjJ5eVE3bUlObGZkbkdqblVKZXQvRjF1amUrcU82U3c2dllTcDZEUnNpR2dKNUJjeFhWbzNSNUxWK1lWMXV1emh2aVhEK2FiMVpHTkR4MlB4NG5yYW1hY2J0cUhLb2N5djMwZXpCMjhHcmtqWGUwK3hBa0J3YVRNekxkWW1GTzlPL2cyR0llSEFTVk5yVHo0VXhySThUeEtqalZKcXJ0MVhyZEk3RE0rM0RlK0NRMWZXNS9WM1RYSGRmeG9yRXdNUFRieHJzUmFZcG5sS0hNeHhaSHMrSmNmTWI3WEdwUEJXbUxmdUNRL2ZTemV2MlBSYXVDejZBbGwvQjRFQ0V2dEZvOUJyR0VkWnBuSU9JK0xnZ241QmJxT3dTYmppLzFocUJhMzRuOWZKOUFEM1U4aWJ1YW1HR2QzVzFMdVJsTm9oem5Ma3VpUGVEMWozQ0REcDVUVk5HQStGaGRYb2FZRXlNVDBxVHgyUm53cHM4SXRCOWZISjN5YTVGZWdDbGZQMHJSbGw5ZDdDWjMzM2ovaGczRzJNdGF2TTFmQlVOQnJOMVRlRldGMG9jN2l3Q29RdkttZVNwaEJSZUh0eXcweWl3OTBuNnhwZ0NZeWttb05LR2htaDBJVlpZOEtCa08wVzFwcVlJaTlNaVRWRzk0SjJqaCtjdk9TMFJzZVFLNWdVRDhFQXFQMkNhcjlJalZodFYzc3dQVk56VEIzdndZQ2tpV0JVN3I3M040MkJBbjZOMUc5Zmw5TlgvRDVBK0ozazlSNk5VVy9OeWJxVHJWc3p3NXpmT0Q4Tm8xb3RZdlgyU2dZTlgxMERjNVlvUHVKTFVqNjZkVHRjT2wvUEViWVpQaHJpMytPKy9FOStOOWpiZWFRck9RNWdKMTd4MENKMm1Eb1lZb05CbFROV05IdXp4YS9EdWZqcnd2ckcwb2crWVliRkNiMFRCRC8zbzdpdHpON2R6WEdvZHo3ZkozNnhzRE9reU9TQTQ0TjhySFB2LytUTWFERnBKbjQzNE44NU0vbWNxK0NLb2lnaHl3ZGprbFZ6Uzk4SGc2UUdCR1Yra1NhYTFLMGx5UjVUa0RjRE4vWUpUcFIvemZielNrazVldkY3UnVkRllLSnFtSWhFaVJFaXIwN0ZFQk5hejRFS3o3ODBCTjNxSzlyT2IrNFlvMTh6NzU4bmNrZ1M2TytQZ0xIWmsrdlhlcjdJYnU4QnF0cmJzMWYzM214NTJIZXlaSngzb2lHODBYemRiQTVTLytFSjdMeEVmczJkUHo0WWdhc2Vod1JSYUxLTFRrWWdRSlhrUFJiQWgxanFYbVNyZHp2Z21mRSsyVFovZm00anR5K2RqKy9mRzgwaVIyNm4vNjUxaitiT2RFZVYzZVpMNzRRVWlzSWJScjNTSkY1VG9uV3hqZmlJR2VkM3hhY3VYWUkvWEM5WHRoWUFZa0RVWTN0MUVnVE5PUmtnRThRNFVEU2dVUWNPSEVBdWdQSjZGOXZVWlFKNG5MZFFyLys5VitHZ2E0dnNReENETlg3NTk1eU5YcE0vZld4QW5wOXcrQzZqTkluMjVVNW9zcVFHckdIWHBCTzROamJjdTZ5NWZjdkpvZHJId25wV2FGWFdEVkdGcVhmM1pXdU56N0Y5ZXZ0cnlqRzVoYVRvSFA3WHZ4Yld6YTJpRmdObFhwdUtjSHlLNnRITDVKa2l4UysxanV1bnV3bHFEMzcvVzBGM1FUY2RJTFVXMEdOZzNGYzJrcDZOS2k1bEFUbWVtb0FrSVQ1clp4WHozZmRtcCtRTm1HNlJGeHgzRzZ5ZVhpb3Baa1Z6ZmxkWXJUZlRaenhZOWdvMitnWVhtWUloUzNja3Q2RUVQZXpZMjNaSGhqRzB3UHVIdDF6c3o3WXNkR2VQdVpZbGVNTUlzS2EwbWJURnJ1bE1HeTNzbUplUkNzcGY4UHV6UTRISVJxZGFJWExoRTg2N1lnWUJkbnRYa2MzNmJVL1A0dy9rcFpUOFU5RjBNMEIwaG9Gbm9OYTB1Y1d3eEZpNTBzN1QxNXdOMHdxVFpmQjdyTFY4eW1oYnFiY09GL2phZGF2VWZOMnNoWjBHUTFwYjRONDJrZEduMGNWVEQ5MS9XTXljbjVlcUlSVC8xK2RGa2IwdlQxZ09KdVZ2ckNJZjIyVXVLcHA5MzZTRlcwcWxzcUZ1bUpQV09UQ3p3VTc0WHNLQStXQnhucUROVmtBZkFxSTNqV3FzaHluOUhNYTk5U3ZaQm1Hdy9LY0IxZWpReW9QRlk1c3UvT0VQRDcwVHlXb1EvaWZWUjNsOHFUU0F1dlRVWDRGNFNlWTBhTkZ6UUFpVlFGZzNaRDdHLzMwRUtOL3BjRXNBQlNqQlhZOWRpNzRybFhwSmM0ZFY0OGphSUJyQXk0d3pMd0lEVlp1KzNXZ2ZzdTBOcE9jWXd3M3ZYSFpRY3JSQzNOdFFzTFBHbUVNWDFBOHNIMzBZWnVnQll1anhDTHc3ZSs1TkRUZGRROGViR0IrWWc1YVgwS3Bxd0l1cFNMcjN5RDVKbkZ4VHZmYW5wNk9HMCsxK2RtRjM2SWdHc3c5QkJjUDUzbmZIUDdObjNRWlhwc3hNK0tweERObjErQXFXQjRrZGpiaWFZdnZQcVA3V1E0Sy9EakRVWjcxMy9EYkY3QkdLU0tKMDhYK0wxVFJSeXgrVlc3Mm9PdkExM0FRdXJYdTA0OXQzTjlGS1lFNFczYzZFOTZhMDF5WWR2aTc3K0RCUlh3OW1SQy83TFBHSmxrQSs3UjcyMjFjR1FmY1dveTZVS2NyZnhBdkFmQnlENmNOYWN0ZXFIQ2FlK3BDbG1MR3RHQmdtQ1NQN2pCSFIxdGQwWDk0dTM2MWJEK1lsMmdZczk5dGtvQTF1Yzg2NFBmQlRpY2FwcWV2aHFYQmZlMmJQbGkrUDFIak1aRmF1NEJHdVZNR2wyNklhS0RsSjR6NjlYUjlHeHhYSHM1MFdiTGJpOEExOFJUZUVyaDUxV1paVDFoVFRGZ3B4OFdqN1NQaXFUNnNrMk9LSDg1cjRDNjRVc0RLenFuQkdYZlVVb2FGODk2blVKbmtTdittSHZSSWlLTUJoVVFPbnp6R3ZIMHE5K2FzbVk5YXBxWnF3V2M4YUdET01FTWxnZVFxQlNoMFVhUUQyMkk3c2VmVGFya0ZnTE5uT3BBMGVIK3F3ZDZnL29kWCtWeVd3MEIxYTFtL3lMUGM1VlFaOXoxWkpPOExYYjRZb3JiZDEvV0xtZTdVRUI3QnIxMkZjRmcvWlZvMjZYSXNBOUp0aUJLZGF6bG94RlAwUVF3T0pwUVVvRWpndzkzVnNRM3B0MHJDS05vaDZuSnlYVkdjT3d3Zk1hZGNYUStVUnZILzUzNSswMGVZNEVnNS9aTCt3ZlV5MXBHSlVrblpPam5iakVtSEVZaHV3WTBwK3htNHhaTTFLMDJ3MURXY2M4YnNpbk10bWlaV055dUNCWi90bmhIWWp6L2daT3FMdXNnd0J6UVZkdFBGUVhlWUR2SGxSeGN3dHNSMkkxalI5U0tpZHZPYjJwazdEMC9raUt1T1h4M3BtRHc1RkFIUmJtWFZsWithbFN4ZSs0SFN1ZGl4ZmEvUEpZWTZFZW1vMGt0SnI2OGg1MlljR0t2c0g5RDd4OUZWN0w5Uzd3ZEt3S0J1WG1CVzdmYk10WjBCSVJ6RmxQY2IxbVk4bnRwc1gyWWdBdXMwY00wcXhSTFBXdDExS3h2ZmNqcXJnQzlhckUzbThKN2ZlSlJjUVZKQWVzODRyNnUvbWdiVW5xZHovZzBDMnVKb1Y3a2s5L0tXQ1ZMb3dXNU9SUzdsdloyai82cUNPa2V3K2Y1Mkkycnlxang0K3EyNS8vMXlUOXREby9teStTbFpsejlscjhPZGRqdUNIR2xkckRCbkVHRXduSlhCWG1kSjdYcStKS3RCUG1QUmVwZXdtVzk0Uk9HVkVZOUs0OCtyOGlFaEF6blR4Z1ZHZEU5T0swRVhuU0NGZHh2RjhhNEtUQzFOeThacTI3N0JOTGlGY0NITUQ1SGVoWXRjaEQraFo3OEZXQm9CQU4ra2hMeW15eUFJR1djbGE3TFc4MWxnaWNDUWR0ZGlhOE1QQUhka0h5SHFHM3BJdWh1ZXZNL2JpeGdQeXNaZTRSd3I0czRMY3ZIM1c1QkU4Z1YvNncxK1J3ZWpNekNSK0p2OC9HOUVXOFF6K1F3ZUl4WktDakErblg0YzZ0bjlZYWZVTmZsOFUrYzFXTWR3dlhBOGRhNlozUlJ1RHNYYWdBVnZUMFp4OVE2cGsvcXNDS1NBejgxelh0ZnRGZkVETlR3L25NYmg2UVdSWlRZNEtuNS9PRlhmZlNBai83NmJCQWRpWW9SRnA3YzJNcndYQlRadDVwRDFzbTJHSVZjRWZ3dHAyMGFkZjJpWlVYSTN3RFdsQ0FWWkk1VkxmNjZtTXdHWUF4ekN2bGlHbys3dmlMMTlZajRJS3owN1pvc01QVy9QcWYwL3JJenArbVAvTzdKeHhIMEx6VFo4ekd0R3NPM0VJVDV4NlZUclhXK0w5bGdlOVVNTFA1WmJmQ3ZPWWxHbk9pZUJwRW5SU0J4TisvZUJOZjBqYnR3RUU2QmFvelZ4VjRxV09MUTcrNmlrZmRHK0JLd3V4Q3lJK3IyYitnMk5NdGtYN1I3Y2ZWREtXaS9nQ0VrRDFjMUt5OHNMWGh2Z2VPUHZoNHFKWjZFOEdyN05UYkVGUGMydkRzVzJXOG1sanRGcDZjQ1pXb3NyeVJISzNROUR2Ujg4bTI5TmtWblh1cmlRSU9pU3NhRHArdjIxTTRmbFVjTHpZZXZCQUM5citNVnFOdm9EUkNnVkZqY3lnTlhLN0N4WUZqYi9sbzA3VnZaUXRsMG16bi9PdHYrZEoxMWR0cndIazFVQTZ0ZEN3ZXMzazBuVTJMU3hzeDdOTVNQWmV0c21hTXVrSkhvUFhkQ1I5SDZvem94R21yMldZeUpaTE9aRkFkZ3cyazlCQ3ozWDY5M09MeUdUc3kzcStlZUpKc2U5MnlhSWc2NzEvZjhlZ240UEFNeFFLMlh3MEx2ZmRKOUI3YytRZFNUUFN2bENyWjRMaC8yaHFtN3RiYVhEYnpBbGh1ZFNFbzdBZXVXbXFwenkxWEtWMXkxVkJycEtSTHFWUzVsWnFlTjlxOUJzVG1OVW9RTVdSTklJR0dJMFhreXNFU2NnVlpvN0hoWXJBMGFBbFNvd284RlZmdXkrWEZtb3JoT0VFb244dTV4c0Y1WUl3NWNpb25vTUlGaDIxWFIwc0hpdXVtRHRKZncrbm41aFNWRldMK1Y5UlUzRll5SUZKdlNHdzJwTlV5aWdYOEt1Y0RtamFPTzNCdm4wNlhzUWhiZk9hVWRQYm51U0RXbWpJa2s1MlRZVjFhTkkzaGxraFdyS0VaUGl3REdyeVBjUGI3L0l4bHo3YXBIa1RoL1lXdmZtc3NGNlM0a2hidkQzcUprUVVXWEJYbmZpQ1VVa2lKalFKbDhMWHRFOHFkSTZqRmJkRjJKN211Mjd5WGw0M3o5N0M5ZzFTTjJXd0VvK0REa09iUGVscEVIWGtkMG0zRE5Ja3VqVk5LTkY5VEllemYxcXhwcGRDSW1oZjhOd25hcnY0UC9WT01NLzN3UWN3NjRESUp1M0JuanhEd0lEVWpOM25hTW1vamV6bTZQRERjRngrT2w4TzVRdXcxOEdRbTRDOGE1aC9SU3o2UGNGVzZnQlRGMlRHVnhWUXFPbkdaSWFLR1l5YWRPQlV3V2h3cEZNNFkxTXBZQWdIWHEvQnRlTythS2JjR0lVV2dNS0t5TlNSNk5oOXV1Z1lzN0NDcUhDejB3cWdwM1lmWWJIbkVsRVpoZ1dmSlA1NDNmZCtPUzQxSU1xc3pHak02SkdtVXZ2Zzl0SHlFZ3ZDSVpUSzNXRUhBUkNMbWNpZGlSOFRCM2lRQnF6MUJxUnFXSi9EQVJFOFMxSi9VNEl4TDBFV0JnYjZJK1FMeDV4ZVB4cmRWNVNmclorRjJHRWpzVVpYVk5IZ2FETWROV2tzUU5aL0hBS2NOR21VMG52RUVCSSt6T21FMWl4eFhQbTRtMWJCSkhUK2tWSGt3bzhwWEVBa2FzWndUV0MyQUZmUlZZdzAvVVk0dExxMVlxTFNqWnl1YVI2ajV3SmI0QW0reVQzR1dWWHVjM1lnTlU4M2diYmxjOEpLc2ZValEwTDVqM3BVRmNYSUdjb0FWMEM3dytiNXFSaUpXeEJFcmtuOFp1WGV5V0FvV2ZlbWxBeGRwdkxkdy9yaHFYYnZhc0VYWThzQzFoZnlLY3BCOGI3bGJ5UDFYQWU0V3NjTHp4VU5iZDNYMjFOWTNQRUZ6d1h1THR0NVJmNWlLUFNXUUlqc0l2ci9Wcllidy9PQzdDTDh2TS9CVEhIWjU1WWFKTXBET3Q3UnRhdHBaT2R3Mm4xNURoK3RMalM4QWZ1WGpQUnpldWI5UUJ6VnZkcllKaFFFVUgybWt2MHk0OThCR3duZnZpanRvRmJVM1NkcTJYL2QwUzN0THl6U0w5MU56ODJPZ0JQZ3NhdSt5Z1QrdE9BZzUxSENmWGRHZnluR3FFUlR2YThBMnFQTDdQYTJOM0xzL25aZEFLOTl5NkNrMjU2NURMVzNVeExKUlkrMnQ5L3h1dnJQWjB0cFNXYjZ0MHJmVjByU1AwOUhXdXE2MWRieTFUUXVpRXJ4TXBKZmNwcmRERlRVUFZiTkZOenRZYWoxbCtkVzhuNXBiWHVRMHExdWFENE1ub0ZDaTM5MG51aGpmOXlEWXZ4eXlJM1NhRjEwWHgwcmxKaXc2M2Eza1U2cDFLMmR3a3Z5eFd4eXIxYzhUT2tGT1hXS0txajNiaXZJRVgySEdiYnBBWXVYRGpxcEQxc0UrbjFadG5jUkpybW1nY25pVkRPdXd2UFdTQ3V5d25uOWFZN1V2MDFETjZ4RFR0MXFsUTllN2hVdGJoTUtXcGNKRUJTRmI5ZVVZWEFKSDVucTBrdnNoRG0xRnJXVzM4bzdCMjlCbHo4NTlXeVBQQTErYmp3YXArUHhraHRkMUlLSXc5ZnpseWs3VjJrNU1ubXVWWHNtdHRVTnpySDN4dHRZSDZKcWpPS0syUStlbXYxNzVQcVEzOFQrOW02Uzd5ZlU4cThEK0J4aFRSZUhDdmpUbldrQU05MUpZMlFrYjVBR1BRcVdKcUE3Nm5sdyt3L2U5T1lCaXBpNGQya3RJZU9ST3YxQkZjVythZ0NoQTNlc2xFWFVHYmNJR0FSVGM0bmhUMTFCWjY2WFh6VEZMRk55WklUNU1MVytyeUJtb2RXMlZyRVhEUk1acVJELzJxeU1MNzJYZ1FwR0VMZk5vejcwZ3ZvN0JrQnp4V3A2ZWhBVmFjbnBldFhrTjZ4SkdkZ2lKeWhwSmg3YUNNSWdETWNwUlQ4cWlhTHZMN0dhTlUrWm40dWlscmdhM1lvTStpS3NISHFqOUd1NG5ncnBGSG9XcnZsRlFQc1BjcHhsanFPTHN2ZG1tamJyZW1zSHJhOSt1U3NHRCtvVnVwYnNPYjdGeFpZVTZzcXhSYmR4MG5XT3hra2tpdXM0dm53L0swV0NKUjV1STc1WFhUMzE0QnMrOURUbkJ4YnlSbU5HNXd3NUJnV1BVSmhuWnNsMldXM041KzNVcmRpVTBMaXF4SUM5ZkpodWZObCtXVEpxdTBMY1Nra3hYNHpGQWU1UldSTFZjUGo1VE0xTkZSdFA1YmJma2MvWWJOTlVJaUxucFRCTFRzcnNwZ0NNWngybkZha012SnVjb2lqd2FVTWFLZUw3UVF1ZWo2S08yM0pGbFFJdFV1all6Ty9TWXVFMDdmYnZJUk5HOE1uY3BvNWQzbDVsSzBqSWptZHU0OVk5Ylg2bzI2WWxaYzdQZkhmOTB2TWRtSGx3WlFUeUhETlgxR2w1azFqN2NQNC81TU5FcDQwUUp6VE0zR0xpdjBKcmZCUjR1QWZmMHFCQk1XMEtVNFZtcTJPTXFjTE1kVERldmFQaUNtYlk0d1l5VkwxZ1pOblZSc2o0SExwYUF1ZWFucTRMY0NwbFhwUktpa3ltVTZZYWM0ZXUrRUlvKzEvTjUrczlGd2k5MFFQMk5yZ0NLR3BURExES1dMYVJXNmtiUGFtTjNFWm1LUklRUXlkVWViRVMwK1hHcWRxaGJnTVNtNHVIOWhiN3dBYXFPSVYyQzRLUFV2bUlFTDFBUGZBMzRLNWxtaXhWMzZHODBLTHNiVW8xQ251ckN5QlJGN2tjRlMrOUVzWVgvelFmZjhCL2JmZFBreXpzcE1JNHFqcG5zWHJyQW83LzFxZGZuUzBUTTNBYVMyVVR2UjhlTFZ1TGVqdXdMbEhkYnduVVdYWkZWbW94aG5hTExqakNiTmZpWjJRSkpMZ2lLMjhxT3VreWx5eFp5ZXVKUDNDL3BJYlE2VEYydWhYZ2FjS1pXRmJ2Z3ozR3Z3aDVnYUdkdElDSFpkQVB3UGFDekl1amFlMWZNZE9GOTJkNFF3V0h2T1gyTEtESmxqMmk2Tmpmb2hxc2doRnV1RzloS3JhWE4wb2hWMEVPa0dhTExMek9NdnVoWEU4dlU1ZGJvY3Nab0RNbE1JVE55K1RXaTBKS0lMNURVKzAvcGQwZjBRNG02Q1hXcDhNSFFJK1Y5bmhuY3dTREtNY29RL2NoelY3OWJLYysvdnZnNS9TRndPNzkwN1BENXUvZFV5dmV2OUQyalgwWlpkQWVTUmkvdmY2cTgzV096SnhpWVdoaktIOXA2RG1LVWR0dzM1ZjRTeHF0Ykg3b2pTY1dIRnJuVytEN2xZbTFOaytIbWF5cndkUFJDdmZZbThNc2xqeG9mRWMyTXVEWDMydy9NTStpbHV2enJEWndUY2VsdHVwOXVodDBHbDQ4ZCtRbkhXMDVVc2p6WGEvbm4yYk5zODNUOUVIWm91OG50NDhzRk9QczE3ODkzQ2JYYjJzTkxXVEdOanBVNEFNT1RyTGhXeTQ1UFhxdVZScXhPVlFUV1NHTldoeXI4eUI1NDhvSldZQVBaWGNEaHpjS085Mys4QitPNVI4eEtxTjVjbW95a0ZDbzFyaFlGWUsyb2hHZXpSdFFWakc2cDhqbkFPbFVwaitQcWJjUy9ubElDTldRNEM3QkVjUDFPYjkvWW5jNnRhNEkzTG5KSVZrYjdObUhkV0tqMndyOVp6S1RpNzVzWEsxTkRlNXhkWTRvcHo4ckUvUWVuSC9jc1dYWXFGZG1iY1FqWDJBZml0cEJFR3BHN2ZQSXV2ZkNyS3hWYXY5WVFZbVdramc0M3FBTFRmSmR0ektvVXhueEUvM2ZST20vUmpLaTd1ekFuT2FnZ1NGblhucGJySUhDMkxOZVdvdkZsMnBacXJnbi81S0xrc2pFaUlNTmkvSWhFby9SRlpaZy9heFlES1MvWUpVenJVN3RnaDl1RG03anRwQ0ZJV2I4OTJ4MkkyeXF5TVNyZWJyOUlxMlBXc0oyTVhyd3JOU0loM1FBNUEyL1pVSUswMWZid3ZtWUVGOHFHcXBCaUxHWHFYUzhldXdaaUxJN1Y5cWFQTGhqMjBVSlA5MnFWRjZWNHZVUWRZczM4bDlCVmdTbmNZT0c3WlZrdGl0cmZmdnRCMmI3UUorS0dtbk5ldkpValdldmhpQkN2VWlHTlBkeUdlQVhMdDBKNGZwQ2MyR2tGOTlYVFVrRzRWL3RxcEtYSDllbXBCeFZudjJ1RFhYcGZFOG1zbW1OV2xPTVkyRit3eVZETUdTZENZZVBtWW02VG9kT3lDem5UNW5ESU5GSFFJaVg0WW5VNm9WM3E5VWd3bmN5bE9HYVNabytYU2FRbVZqdXpCazNHYUtRWFJ4Wnh1ZzFKdnMvMHcyRDRmMXZ4eVVRZUdCWjV2VElEKzRkYzhzZDRUKzNRdmxmQVhCK2FJNytVemM3ekZBK0xPWnhmNUtDOFFtMXZmOHhJQWRCb1V6bDFOS1ArUkhkRjRmaXA1bGNhbW5ZM2QxUzF2MWIvdFdQSVlpOFJoTDJrNVE1bmFVR2c4VG9hMTJpVG1GbWJVQTBVVFdoMENUT21TK3BpZ0hjbHBEaHg4R2FvdlNXakxYUXIwVklFb2gvejFLVVR0bjNYZU9nNzlEQys1Q1NVNlJyZFBlbVRYLzFzaWR2NkQ1Z1ZhVlpzSlRQblV6c2xWNnZGVXZYVkV1blZISWxFYzdWWFpwTkxiYkt2TWJCc2I2L2tzMytMb2VYVFY5SVFzZ01OOWwwYjJnSlpuUE5wT003dXZaNHVXYllkNTlSVE9UdzNKR1hwbnZxcWhiWCtHMERLVkN0Z0VsMVVMUlBmM2VyZ2tOOVBGNjRFRUhXWlJ0M0UyNjIxZlBTSGFqK3hTTDJIaGx6d2RUMnpxdmgvd1pkc0NFak5vNG91SUxkN0ljZTFiUkh3ZnBWV0JaaGpmWmlaVEF0Rk5WTUxnNmdXTWhocW1XaEswUjNFcG9LdHh5dVd6UzFxNW1ycE93cThlVnkzQy9GUmVSTUlIS2VaS0VJK2VZaXVvbWwyQ1BvTUZqWDZxOEJsdjBjRTNWdW9RazhLNXllTXBkTkhJSWtzM3hoTENTWGxmRThxdjN4K2p3OVFZcGhTNHpMSE5mM3p0ckVtTUowNEcwMTJVc1BYNSt0cXVrWGJWMmhLYlVrUlRJNmMrRHhEZmxNaHhvc0NJYy96Z0poSEZVdGRqeWx2V0NrcHVMNDJkV0RmcE9sdWFxbFoxaE5CdE5zTGZCR1JxVUptSVN2OVo0RkVla3Znald0c2JHcjhRZTUySTdpOUpmZ1JYZ09RdlY3YkpOYXQrT3R0WS9Rd3lrdU53SDRqQzFiNVpVdlpwNyt1cTJGa3VyczRtZ09oZHJXL2Q5amdUUTY3cGdLRHI4aG0vazdvOW83czUwNnkyQ2VlWTNQdU84Rm1uYnp2YnRZUExhMy9XL3JaRkpaN0dnSU0zNjdYd1BZamdNcHIvRU1nNFhvRG01R3VsMWdIczcvQ0lTYWIzenVnazA0TWFBMElWRVV2cm0zdXBXRFI4RGNLaGx0UU1GeU5naUVUSS9nbmU2MmtUZDZjMmRiazVXSERyeDdaSklzcWNLWXZTdUpSbElhaW9CdEZ3VHNvQ3Y2VW9nVEFkY2dKTGNnSnp5SW5QSUtjOEtHVW9pOTB3ZlNhUnV3QW9vK29xYnFSMnVjUnBnNC9jajNCVEpqOUtlWng0R2ZqbW1BWDVUbVdZQ2xUTU55bXp3UWx4V21EUjlWKy9pT2NKUFpmbUI2SGwrQUdqWTBvNHRSdDF2Y0h1NGJGYW4yeXorQWJSak5iOG8xU1RqZEdHcU5PeFg0U0lUVnB5Q1BYSTh5aGlUM0JBaVllM3pJVitLaGs1aVJDUG1qVCszU2xlcCt1QnZuZzVER0xRZkVYQThFQTluYnJuWG9Bc1h3eGU3K3VJdEFJZm8zNjhVZzNRbUJxK3dqb2JmUXgrZ1I5aWo1RG42TXZ3SmZnUGVrclV2d2FxU0srVmQ3RDcrRDN6QThlMnZoMkl6RDl0ZW54VkQ2SkM0NTEyeHQ4bGo1SGZUOVBmeHArb3M0SHRBVmR3WXpLbktxK1FzenhleG8zckd3TGNyZDJWZFFRTjFtWHgxUGN3QzF1NHNQYnpCTkVMdjJMYUxEZFV0UDJvYlF4SzhhekhvTzRXM2lEM1Q0OWZXZVUyZWZSM2Y3L3lMRllabURRWHZjOUs5bGFnVVVBTWVMZWZ4YXNBakNIZlZnQVpCNklkWXM1MFh1MTNicUxGOWIyNEk5WkQyc0RiaTE0L3o4Z3kxaXhsdGpndk9VQjVMb0FnQlhZemFsSmdzYU1yUjF0WFlkUlJsR0g5UlFkc0UrNnhtUmc4eUllbzhveFJ1TVFCU29QdU1PTVlNTGRzNHhHQ0orSDJTTWk1YWJ1cy93Q1ZZNXROQTBYbTB5OXhHTTBKdEFPcTFwZ0swQmRLQWY3REtHdjBNZm95OUYvWkdsYWxOdmx3bmxDY2hndFJMOWxXNkFyNEtOK29TZGdJeFhwSUp5RjI3Z08yTy9OQWxoMVZYZU5PeVBkOS8zU0lLQS9WQ2szOVk0RVBZaXVIZU1CSEpwV2ttM1FlSkVMUEVZTDBXOWdnWkthOXpHSHp2OGJJN0RIZS80WWJoZmUyRTlpb085Sk0zMjNidWJzU2tRdmlNdytuM1FOSlVlOHRPdHJ6eTV2MkVhNjdBMnhWWlRzNHU4eTFqam51NTNOQzNrRWJpRS9aanNpdWxPajIwUTY4VTZZRWltdHhrdXVDM3ZMOFlaTG8yc0ZFYWRReHV2RzlsRTBldDYrbGsrN01RSG9OMFBZbHNhWGIrdmFOM3RyMXk0MmRWbWtmU2JWNXhpM0JiVjF1MTFNOXdEMGxPekxYbllDUjkwdDR3dCtyaXVvS0ExOXl1d0QycExBSndRN1ozeStjSW5pOGtnNjE4blVTQVQyTzZWSy8zV0JJYTFoVDJldzdFb0ZTcmFNSWorVFdFMCs5NHJhSEFKd0VUOStaN3BsWEVqcTN4REgzUURnNUlHTys1TDhMMitKLytpd3p4UE14Z0VpQmdBSS9peVpvSEFtTVAwL2VFNWs5eTZpTmUxazZ3N1d6NHVjcnFUcHh5WjNCZVVKdjJSeXAzWEZUUFlkeUw3Skl3UjRSa2p6TjdhelhpMkNJTUUwcFRYb2RaYzdJU2pkK3JMNEZIeEdFeTNBUkhVQXgxVi9MWnZpamw4d1dWMm0xZlNDZitzd2MwVzA2T3FhNW02U0t6eXRSbmhRVmFnTTZNY2hSZ2tKTVhZRThZaEI5dW1Lb29UcEdScU5rSzRmeDRPVyt1KzRDcmNHWXJnVFo1dm1HOVRVanRmbmlxWVpVV1Q2VWcwZUUzaGtpVUc1bkJwZ2pGMTREWGJvK0RRUmJmcFYxM3pNcGxJSkN1YytWTEp4R2dhenhGd1dJM1pMbmo2NVg1MDB4QjAzb1owTUw0YVNQNkd2UVhLYnVQTXJVcXZtYVFoM1VHWnJSVVpOaVlvOXRYVFJVN3hHbGRTeXBZNDViQXJMVUxNenRBYjY1aW1kSU9hUkRZcElVRjVCc0lvN0tRNi9VelN3dEkyU2VkUzFrN1FvSVhQU2MwR1RGNHV6V2h4THh2d054RjdoOXIxMkxMWVhJZDlGRDVzck8vUzMyYktlV3paUEpxWC9BTTNRaDFwdWZTdDc2amlRdllFbDFtTTBlTTdUTWt3QUEzdDlTRG03NlphWEtMWjU2NXZwTzBpeHZmUXlDSTJqNUJPaFYvazJQaVYzc1J0NEtxRmwvbUR1RG5VejZtN1Z2NzhSUGIzSTFqUE1YVkNxVllpZitFVEZIblczcmNoTWI1MWUxdXVWcHpMMGxnR1RJQVVNYVJVRmNLQURzSUVFMFFJWm1LZnlEVWxGWlljbzJhNi80M1FEQ2FYc2tjTUdPSzJzNUtGenFQeWk3c2pmSjlTOE5Wb2pqOG9YMU1qdXlmRUVRSUNQY1dpbUFXZ2pMQndrSnEwT0pqaWRIWnoyaVkzT1p6c0VrZG5yRU5seW5TTllZbDV5aERLWFlnOGoxYnFUQ0Foc25DN3k1S3RRS0p0WGxtSXloVXU4TkxMQkJaaXl1UU9VeURiSmRFVW15RFdackw5Q2VhYVpZaElIN1VTMHVKWG1lYlRJaWpaQmNyRjgwMjg2SnlldjdFeTF4RVFPcXNtVHc3bkt0ZEFVWmV6eVRlRGxreTNYQkdVWjQzTEtwaDdRSEs3eHFlQVFldnRvY1dSbEV0SmxBMDFSWk1wUktUVkZYZXJweFZ4RnhiNjhuRjdqc3E3R2JkVTIwQnVlSVZKT3dzZkZxNFRQQklVU09MaTRKTXJRVno5OWRaTWhhUEM0V1RzWXlnRW5acXM0bXJ3WUtkeGV1UGxZS1RMSnFEUy9WNG80aENvK0R2TlFiL1FJK3ZIb3JlZmdNVFBNbTRZNXUwNzVQNkpJWGhIL2UxL3lud0VBKSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfWJvZHksaHRtbHtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fWh0bWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXBhcmFncmFwaCxwe2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpqdXN0aWZ5fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjE1O21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgyLGgye2ZvbnQtc2l6ZToyLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMyxoM3tmb250LXNpemU6MnJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yNTttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDQsaDR7Zm9udC1zaXplOjEuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNSxoNXtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OmJvbGRlcjtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg2LGg2e2ZvbnQtc2l6ZToxLjNyZW07Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19cCtoMXttYXJnaW4tdG9wOjMuNzVyZW19cCtoMnttYXJnaW4tdG9wOjNyZW19cCtoM3ttYXJnaW4tdG9wOjIuMjVyZW19cCtoNHttYXJnaW4tdG9wOjEuNXJlbX1wK2g1e21hcmdpbi10b3A6Ljc1cmVtfWRpditoMSxkaXYraDIsZGl2K2gzLGRpditoNCxkaXYraDUsZGl2K2g2LHAraDZ7bWFyZ2luLXRvcDowfS5kZWNve2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMSkgMCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTIpIDUwJSx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTMpIDEwMCUpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1zaXplOmNvdmVyO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO3RleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudH06Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9OjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX1rYmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Ym9yZGVyLXJhZGl1czoxMHJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtwYWRkaW5nOi4yNWVtIC42ZW07dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfWRldGFpbHN7bWFyZ2luLWJvdHRvbToxcmVtfXN1bW1hcnl7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mZWF0dXJlLXNldHRpbmdzOlxcXCJ0bnVtXFxcIjtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjFlbTtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0ubW9ub3NwYWNle2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17aGVpZ2h0OjEwMCV9YnV0dG9ue21pbi13aWR0aDotbW96LW1heC1jb250ZW50O21pbi13aWR0aDptYXgtY29udGVudDt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1idXR0b25de2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjt0cmFuc2l0aW9uOndpZHRoIDEwcyBlYXNlLWluLW91dH1kaXZbZGF0YS1tb25zdGVyLXJvbGU9bGFiZWxde2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1zZWxmOnN0cmV0Y2g7ZGlzcGxheTpmbGV4O3RyYW5zaXRpb246d2lkdGggMTJzIGVhc2UtaW4tb3V0fVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0+aW1nLFtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0+c3Zne21hcmdpbi1sZWZ0Oi4zZW19W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXT5zdmcuc3VjY2Vzc2Z1bHthbmltYXRpb246Ym91bmN5IC41cyBsaW5lYXIgZm9yd2FyZHM7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzZnVsKX1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdGVdPnN2Zy5hY3Rpdml0eXthbmltYXRpb246Ym91bmN5IC41cyBsaW5lYXIgZm9yd2FyZHM7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1hY3Rpdml0eSl9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXT5zdmcuZmFpbGVke2FuaW1hdGlvbjpib3VuY3kgLjVzIGxpbmVhciBmb3J3YXJkcztjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWZhaWxlZCl9W2RhdGEtbW9uc3Rlci1yb2xlPXN0YXRlXT5zdmcuYWN0aXZpdHl7YW5pbWF0aW9uLWR1cmF0aW9uOjFzO2FuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6aW5maW5pdGU7YW5pbWF0aW9uLW5hbWU6YWN0aXZpdHk7YW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjpjdWJpYy1iZXppZXIoMCwwLC4yLDEpfVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0ZV0uc3RhdGVsZXNze2Rpc3BsYXk6bm9uZX1Aa2V5ZnJhbWVzIGFjdGl2aXR5ezAle3RyYW5zZm9ybTpzY2FsZSgxKX01MCV7dHJhbnNmb3JtOnNjYWxlKC4xKX10b3t0cmFuc2Zvcm06c2NhbGUoMSl9fUBrZXlmcmFtZXMgYm91bmN5ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoLjEpfTgwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEuMTUpfTkwJXt0cmFuc2Zvcm06c2NhbGUoLjkpfXRve3RyYW5zZm9ybTpzY2FsZSgxKX19IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBTdGF0ZSwgZ2V0U3RhdGVJbnN0YW5jZUZvciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbFN5bWJvbCA9IFN5bWJvbChcImludGVybmFsU3ltYm9sXCIpO1xuXG4vKipcbiAqIFRoaXMgU3RhdGUgY2xhc3MgcmVwcmVzZW50IGEgU3RhdGUgd2l0aCBwcmVzZW50YXRpb25cbiAqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIFN0YXRlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVcblx0ICogQHBhcmFtIHtzdHJpbmd9IHByZXNlbnRhdGlvblxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKi9cblx0Y29uc3RydWN0b3Ioc3RhdGUsIHByZXNlbnRhdGlvbikge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7fTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5zdGF0ZSA9IHZhbGlkYXRlU3RyaW5nKHN0YXRlKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5wcmVzZW50YXRpb24gPSB2YWxpZGF0ZVN0cmluZyhwcmVzZW50YXRpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBzdGF0ZVxuXHQgKi9cblx0Z2V0IHN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5zdGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gcHJlc2VudGF0aW9uXG5cdCAqL1xuXHRnZXQgcHJlc2VudGF0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5wcmVzZW50YXRpb247XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uVHlwZXMuU3RhdGV9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFN0YXRlKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uc3RhdGUsXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5wcmVzZW50YXRpb24sXG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEBzaW5jZSAxLjUuMFxuICogQHBhcmFtIHN0YXRlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZX1cbiAqL1xuZnVuY3Rpb24gZ2V0U3RhdGVJbnN0YW5jZUZvcihzdGF0ZSkge1xuXHRzd2l0Y2ggKHN0YXRlKSB7XG5cdFx0Y2FzZSBcInN0YXRlbGVzc1wiOlxuXHRcdFx0cmV0dXJuIG5ldyBTdGF0ZShcInN0YXRlbGVzc1wiLCBcIlwiKTtcblx0XHRjYXNlIFwic3VjY2Vzc2Z1bFwiOlxuXHRcdFx0cmV0dXJuIG5ldyBTdGF0ZShcblx0XHRcdFx0XCJzdWNjZXNzZnVsXCIsXG5cdFx0XHRcdCc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgY2xhc3M9XCJzdWNjZXNzZnVsXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPjxwYXRoIGQ9XCJNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0em0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNnpcIi8+PHBhdGggZD1cIk0xMC45NyA0Ljk3YS4yMzUuMjM1IDAgMCAwLS4wMi4wMjJMNy40NzcgOS40MTcgNS4zODQgNy4zMjNhLjc1Ljc1IDAgMCAwLTEuMDYgMS4wNkw2Ljk3IDExLjAzYS43NS43NSAwIDAgMCAxLjA3OS0uMDJsMy45OTItNC45OWEuNzUuNzUgMCAwIDAtMS4wNzEtMS4wNXpcIi8+PC9zdmc+Jyxcblx0XHRcdCk7XG5cdFx0Y2FzZSBcImFjdGl2aXR5XCI6XG5cdFx0XHRyZXR1cm4gbmV3IFN0YXRlKFxuXHRcdFx0XHRcImFjdGl2aXR5XCIsXG5cdFx0XHRcdCc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgY2xhc3M9XCJhY3Rpdml0eVwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj48Y2lyY2xlIGN4PVwiOFwiIGN5PVwiOFwiIHI9XCI4XCIvPjwvc3ZnPicsXG5cdFx0XHQpO1xuXHRcdGNhc2UgXCJmYWlsZWRcIjogLy8gaHR0cHM6Ly9pY29ucy5nZXRib290c3RyYXAuY29tL2ljb25zL2V4Y2xhbWF0aW9uLWNpcmNsZS9cblx0XHRcdHJldHVybiBuZXcgU3RhdGUoXG5cdFx0XHRcdFwiZmFpbGVkXCIsXG5cdFx0XHRcdCc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgY2xhc3M9XCJmYWlsZWRcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+PHBhdGggZD1cIk04IDE1QTcgNyAwIDEgMSA4IDFhNyA3IDAgMCAxIDAgMTR6bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2elwiLz48cGF0aCBkPVwiTTcuMDAyIDExYTEgMSAwIDEgMSAyIDAgMSAxIDAgMCAxLTIgMHpNNy4xIDQuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwbC0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDBMNy4xIDQuOTk1elwiLz48L3N2Zz4nLFxuXHRcdFx0KTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIG5ldyBTdGF0ZShzdGF0ZSwgXCJcIik7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyByZWdpc3RlckN1c3RvbUVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBpc0ludGVnZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlLCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuL2J1dHRvbi5tanNcIjtcbmltcG9ydCB7IFN0YXRlQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc3RhdGUtYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgZ2V0U3RhdGVJbnN0YW5jZUZvciwgU3RhdGUgfSBmcm9tIFwiLi90eXBlcy9zdGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgU3RhdGVCdXR0b24gfTtcblxuLyoqXG4gKiBBIHN0YXRlIGJ1dHRvbiB3aXRoIGljb25zXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvZm9ybS9zdGF0ZS1idXR0b24vXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9zdGF0ZS1idXR0b24tc2ltcGxlXG4gKlxuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBiZWF1dGlmdWwgYnV0dG9uIHdpdGggaWNvbnNcbiAqL1xuY2xhc3MgU3RhdGVCdXR0b24gZXh0ZW5kcyBCdXR0b24ge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3N0YXRlLWJ1dHRvbkBAaW5zdGFuY2VcIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gc3RhdGVzIEF2YWlsYWJsZSBzdGF0dXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZX0gc3RhdGVzLnN1Y2Nlc3NmdWw9IHN1Y2Nlc3NmdWxcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZX0gc3RhdGVzLmFjdGl2aXR5PSBhY3Rpdml0eVxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlR5cGVzLlN0YXRlfSBzdGF0ZXMuZmFpbGVkPSBmYWlsZWRcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZX0gY3VycmVudCBjdXJyZW50IHN0YXR1c1xuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVBY3Rpb25DYWxsYmFja30gYWN0aW9ucy5jbGlja1xuXHQgKiBAZXh0ZW5kcyB7QnV0dG9ufVxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vdHdicy9pY29ucy9ibG9iL21haW4vTElDRU5TRS5tZHxCb290c3RyYXAgaWNvbnMgbGljZW5zZX1cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdHN0YXRlczoge1xuXHRcdFx0XHRzdWNjZXNzZnVsOiBnZXRTdGF0ZUluc3RhbmNlRm9yKFwic3VjY2Vzc2Z1bFwiKSxcblx0XHRcdFx0YWN0aXZpdHk6IGdldFN0YXRlSW5zdGFuY2VGb3IoXCJhY3Rpdml0eVwiKSxcblx0XHRcdFx0ZmFpbGVkOiBnZXRTdGF0ZUluc3RhbmNlRm9yKFwiZmFpbGVkXCIpLFxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnQ6IGdldFN0YXRlSW5zdGFuY2VGb3IoXCJzdGF0ZWxlc3NcIiksXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYnV0dG9uLlxuXHQgKiBJZiBhIHRpbWVvdXQgaXMgc2V0LCB0aGUgc3RhdGUgaXMgYXV0b21hdGljYWxseSByZW1vdmVkIGFmdGVyIHRoZVxuXHQgKiBzcGVjaWZpZWQgdGltZS5cblx0ICpcblx0ICogQHNpbmNlIDMuMTguMCBhIHByZXZpb3VzbHkgc2V0IHRpbWVvdXQgaXMgY2xlYXJlZFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uU3RhdGVCdXR0b259XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlXG5cdCAqL1xuXHRzZXRTdGF0ZShzdGF0ZSwgdGltZW91dCkge1xuXHRcdGNvbnN0IHRpbWVvdXRTeW1ib2wgPSBTeW1ib2wuZm9yKFwidGltZW91dFwiKTtcblx0XHRpZiAodGhpc1t0aW1lb3V0U3ltYm9sXSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpc1t0aW1lb3V0U3ltYm9sXSk7XG5cdFx0XHRkZWxldGUgdGhpc1t0aW1lb3V0U3ltYm9sXTtcblx0XHR9XG5cblx0XHRjb25zdCBvYmogPSB0aGlzLmdldE9wdGlvbihgc3RhdGVzLiR7dmFsaWRhdGVTdHJpbmcoc3RhdGUpfWApO1xuXHRcdGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibm90IGZvdW5kXCIpO1xuXHRcdH1cblxuXHRcdHRoaXMuc2V0T3B0aW9uKFwiY3VycmVudFwiLCB2YWxpZGF0ZUluc3RhbmNlKG9iaiwgU3RhdGUpKTtcblxuXHRcdGlmIChpc0ludGVnZXIodGltZW91dCkgJiYgdGltZW91dCA+IDApIHtcblx0XHRcdHRoaXNbdGltZW91dFN5bWJvbF0gPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5yZW1vdmVTdGF0ZSgpO1xuXHRcdFx0XHRkZWxldGUgdGhpc1t0aW1lb3V0U3ltYm9sXTtcblx0XHRcdH0sIHRpbWVvdXQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlN0YXRlQnV0dG9ufVxuXHQgKi9cblx0cmVtb3ZlU3RhdGUoKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJjdXJyZW50XCIsIGdldFN0YXRlSW5zdGFuY2VGb3IoXCJzdGF0ZWxlc3NcIikpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlR5cGVzLlN0YXRlfHVuZGVmaW5lZH1cblx0ICovXG5cdGdldFN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcImN1cnJlbnRcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLXN0YXRlLWJ1dHRvblwiO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge0FycmF5PENTU1N0eWxlU2hlZXQ+fVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0Y29uc3Qgc3R5bGVzID0gQnV0dG9uLmdldENTU1N0eWxlU2hlZXQoKTtcblx0XHRzdHlsZXMucHVzaChTdGF0ZUJ1dHRvblN0eWxlU2hlZXQpO1xuXHRcdHJldHVybiBzdHlsZXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICA8YnV0dG9uIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGlzYWJsZWQgcGF0aDpkaXNhYmxlZCB8IGlmOnRydWUsIGNsYXNzIHBhdGg6Y2xhc3Nlcy5idXR0b25cIlxuICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgcGFydD1cImJ1dHRvblwiPlxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwibGFiZWxcIiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmJ1dHRvblwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3RhdGVcIlxuXHRcdFx0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjdXJyZW50LnN0YXRlXCJcblx0XHRcdCBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6Y3VycmVudC5wcmVzZW50YXRpb25cIj48L2Rpdj5cbiAgICA8L2J1dHRvbj5cbjwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChTdGF0ZUJ1dHRvbik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNPYmplY3QsIGlzU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi91dGlsL2Nsb25lLm1qc1wiO1xuaW1wb3J0IHsgREVMSU1JVEVSLCBQYXRoZmluZGVyLCBXSUxEQ0FSRCB9IGZyb20gXCIuL3BhdGhmaW5kZXIubWpzXCI7XG5cbmV4cG9ydCB7IGJ1aWxkTWFwLCBQQVJFTlQsIGFzc2VtYmxlUGFydHMgfTtcblxuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBQQVJFTlQgPSBcIl5cIjtcblxuLyoqXG4gKiBNYXBzIGNhbiBiZSBlYXNpbHkgY3JlYXRlZCBmcm9tIGRhdGEgb2JqZWN0cyB3aXRoIHRoZSBoZWxwIG9mIHRoZSBmdW5jdGlvbiBgYnVpbGRNYXAoKWAuXG4gKlxuICogVGhlIHBhdGggY2FuIGJlIHNwZWNpZmllZCBhcyBlaXRoZXIgYSBzaW1wbGUgZGVmaW5pdGlvbiBhLmIuYyBvciBhIHRlbXBsYXRlICR7YS5iLmN9LlxuICogS2V5IGFuZCB2YWx1ZSBjYW4gYmUgZWl0aGVyIGEgZGVmaW5pdGlvbiBvciBhIHRlbXBsYXRlLiBUaGUga2V5IGRvZXMgbm90IGhhdmUgdG8gYmUgZGVmaW5lZC5cbiAqIFRoZSB0ZW1wbGF0ZXMgZGV0ZXJtaW5lIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBrZXlzIGFuZCB0aGUgdmFsdWUgb2YgdGhlIG1hcC4gRWl0aGVyIGEgc2luZ2xlIHZhbHVlXG4gKiBpZCBjYW4gYmUgdGFrZW4gb3IgYSBjb21wb3NpdGUga2V5ICR7aWR9ICR7bmFtZX0gY2FuIGJlIHVzZWQuXG4gKlxuICogSWYgeW91IHdhbnQgdG8gYWNjZXNzIHRoZSB2YWx1ZXMgb2YgdGhlIHBhcmVudCBkYXRhIHNldCwgeW91IGhhdmUgdG8gdXNlIHRoZSBeIGNoYXJhY3RlciwgZm9yIGV4YW1wbGUsICR7aWR9ICR7Xi5uYW1lfS5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvZGF0YS9idWlsZG1hcC5tanNcbiAqXG4gKiBAcGFyYW0geyp9IHN1YmplY3QgLSBUaGUgZGF0YSBvYmplY3QgZnJvbSB3aGljaCB0aGUgbWFwIHdpbGwgYmUgY3JlYXRlZFxuICogQHBhcmFtIHtzdHJpbmd8TW9uc3Rlci5EYXRhfmV4YW1wbGVTZWxlY3RvckNhbGxiYWNrfSBzZWxlY3RvciAtIFRoZSBwYXRoIHRvIHRoZSBkYXRhIG9iamVjdCwgb3IgYSBjYWxsYmFjayB0aGF0IHJldHVybnMgYSBtYXAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlVGVtcGxhdGVdIC0gQSB0ZW1wbGF0ZSBmb3IgdGhlIHZhbHVlIG9mIHRoZSBtYXAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2tleVRlbXBsYXRlXSAtIEEgdGVtcGxhdGUgZm9yIHRoZSBrZXkgb2YgdGhlIG1hcC5cbiAqIEBwYXJhbSB7TW9uc3Rlci5EYXRhfmV4YW1wbGVGaWx0ZXJDYWxsYmFja30gW2ZpbHRlcl0gLSBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGZpbHRlciBvdXQgdmFsdWVzLlxuICogQHJldHVybiB7Kn0gLSBUaGUgY3JlYXRlZCBtYXAuXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IC0gSWYgdGhlIHZhbHVlIGlzIG5laXRoZXIgYSBzdHJpbmcgbm9yIGEgZnVuY3Rpb24uXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IC0gSWYgdGhlIHNlbGVjdG9yIGNhbGxiYWNrIGRvZXMgbm90IHJldHVybiBhIG1hcC5cbiAqKi9cbmZ1bmN0aW9uIGJ1aWxkTWFwKHN1YmplY3QsIHNlbGVjdG9yLCB2YWx1ZVRlbXBsYXRlLCBrZXlUZW1wbGF0ZSwgZmlsdGVyKSB7XG5cdHJldHVybiBhc3NlbWJsZVBhcnRzKHN1YmplY3QsIHNlbGVjdG9yLCBmaWx0ZXIsIGZ1bmN0aW9uICh2LCBrLCBtKSB7XG5cdFx0ayA9IGJ1aWxkKHYsIGtleVRlbXBsYXRlLCBrKTtcblx0XHR2ID0gYnVpbGQodiwgdmFsdWVUZW1wbGF0ZSk7XG5cdFx0dGhpcy5zZXQoaywgdik7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRoZSBhc3NlbWJsZVBhcnRzIGZ1bmN0aW9uIGlzIGEgcHJpdmF0ZSBmdW5jdGlvbiB0aGF0IGhlbHBzIGluIGJ1aWxkaW5nIGEgbWFwIGZyb20gYSBzdWJqZWN0IG9iamVjdCBiYXNlZCBvbiBhIHByb3ZpZGVkXG4gKiBzZWxlY3Rvci4gVGhlIHNlbGVjdG9yIGNhbiBlaXRoZXIgYmUgYSBzdHJpbmcgb3IgYSBjYWxsYmFjayBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSB1c2VkIGFzIGFcbiAqIGhlbHBlciBmdW5jdGlvbiBieSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIG1vZHVsZS5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gdGFrZXMgZm91ciBwYXJhbWV0ZXJzOlxuICpcbiAqIHN1YmplY3Q6IFRoZSBzdWJqZWN0IG9iamVjdCBmcm9tIHdoaWNoIHRoZSBtYXAgaXMgdG8gYmUgYnVpbHRcbiAqIHNlbGVjdG9yOiBUaGUgc2VsZWN0b3IgdG8gZGV0ZXJtaW5lIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIG1hcC4gSXQgY2FuIGJlIGEgc3RyaW5nIG9yIGEgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKiBmaWx0ZXIgKG9wdGlvbmFsKTogQSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGZpbHRlciB2YWx1ZXMgYmFzZWQgb24gc29tZSBjcml0ZXJpYS5cbiAqIGNhbGxiYWNrOiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3IgZWFjaCBlbGVtZW50IGluIHRoZSBtYXAuXG4gKiBJZiB0aGUgc2VsZWN0b3IgcGFyYW1ldGVyIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24sIGl0IGlzIGV4ZWN1dGVkIHBhc3NpbmcgdGhlIHN1YmplY3QgYXMgaXRzIGFyZ3VtZW50LFxuICogYW5kIHRoZSByZXN1bHRpbmcgdmFsdWUgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBNYXAuIE90aGVyd2lzZSwgaWYgdGhlIHNlbGVjdG9yIHBhcmFtZXRlciBpcyBhIHN0cmluZyxcbiAqIGJ1aWxkRmxhdE1hcCBpcyBjYWxsZWQgdG8gYnVpbGQgYSBmbGF0IG1hcCB3aXRoIGtleXMgYW5kIHZhbHVlcyBleHRyYWN0ZWQgZnJvbSB0aGUgc3ViamVjdCBvYmplY3QgYmFzZWQgb24gdGhlIHNlbGVjdG9yLlxuICpcbiAqIElmIHRoZSBmaWx0ZXIgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCBpdCB3aWxsIGJlIHVzZWQgdG8gZmlsdGVyIG91dCBjZXJ0YWluIGVsZW1lbnRzIGZyb20gdGhlIG1hcCwgYmFzZWQgb24gc29tZVxuICogY3JpdGVyaWEuIFRoZSBjYWxsYmFjayB3aWxsIGJlIHBhc3NlZCB0aGUgdmFsdWUsIGtleSwgYW5kIG1hcCBvYmplY3QsIGFuZCBpZiBpdCByZXR1cm5zIGZhbHNlLCB0aGUgZWxlbWVudCB3aWxsIGJlIHNraXBwZWQuXG4gKlxuICogRm9yIGVhY2ggZWxlbWVudCBpbiB0aGUgbWFwLCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqIHY6IFRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudFxuICogazogVGhlIGtleSBvZiB0aGUgZWxlbWVudFxuICogbTogVGhlIG1hcCBvYmplY3RcbiAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IG1hcCB3aXRoIHRoZSBwcm9jZXNzZWQgdmFsdWVzLiBJZiBtYXAgaXMgbm90IGFuIGluc3RhbmNlIG9mIE1hcCwgYW4gZW1wdHkgbWFwIHdpbGwgYmUgcmV0dXJuZWQuXG4gKlxuICogRXhhbXBsZSBVc2FnZTpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBjb25zdCBvYmogPSB7XG4gKiAgIG5hbWU6IFwiSm9oblwiLFxuICogICBhZ2U6IDMwLFxuICogICBhZGRyZXNzOiB7XG4gKiAgICAgY2l0eTogXCJOZXcgWW9ya1wiLFxuICogICAgIHN0YXRlOiBcIk5ZXCIsXG4gKiAgICAgY291bnRyeTogXCJVU0FcIixcbiAqICAgfSxcbiAqIH07XG4gKlxuICogY29uc3Qgc2VsZWN0b3IgPSBcImFkZHJlc3NcIjtcbiAqXG4gKiBjb25zdCBtYXAgPSBhc3NlbWJsZVBhcnRzKG9iaiwgc2VsZWN0b3IsIG51bGwsIGZ1bmN0aW9uICh2LCBrLCBtKSB7XG4gKiAgIHRoaXMuc2V0KGssIHYpO1xuICogfSk7XG4gKlxuICogY29uc29sZS5sb2cobWFwKTtcbiAqIC8vIE91dHB1dDogTWFwKDMpIHtcbiAqIC8vICAgXCJhZGRyZXNzLmNpdHlcIiA9PiBcIk5ldyBZb3JrXCIsXG4gKiAvLyAgIFwiYWRkcmVzcy5zdGF0ZVwiID0+IFwiTllcIixcbiAqIC8vICAgXCJhZGRyZXNzLmNvdW50cnlcIiA9PiBcIlVTQVwiXG4gKiAvLyB9XG4gKiBgYGBcbiAqXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdCAtIFRoZSBzdWJqZWN0IG9iamVjdCBmcm9tIHdoaWNoIHRoZSBtYXAgaXMgdG8gYmUgYnVpbHQuXG4gKiBAcGFyYW0ge3N0cmluZ3xNb25zdGVyLkRhdGF+ZXhhbXBsZVNlbGVjdG9yQ2FsbGJhY2t9IHNlbGVjdG9yIC0gVGhlIHNlbGVjdG9yIHRvIGRldGVybWluZSB0aGUgc3RydWN0dXJlIG9mIHRoZSBtYXAuIEl0IGNhbiBiZSBhIHN0cmluZyBvciBhIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtNb25zdGVyLkRhdGF+ZXhhbXBsZUZpbHRlckNhbGxiYWNrfSBbZmlsdGVyXSAtIEEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBmaWx0ZXIgdmFsdWVzIGJhc2VkIG9uIHNvbWUgY3JpdGVyaWEuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIGVsZW1lbnQgaW4gdGhlIG1hcC5cbiAqIEByZXR1cm4ge01hcH0gLSBBIG5ldyBtYXAgd2l0aCB0aGUgcHJvY2Vzc2VkIHZhbHVlcy5cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gLSBXaGVuIHNlbGVjdG9yIGlzIG5laXRoZXIgYSBzdHJpbmcgbm9yIGEgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGFzc2VtYmxlUGFydHMoc3ViamVjdCwgc2VsZWN0b3IsIGZpbHRlciwgY2FsbGJhY2spIHtcblx0Y29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuXG5cdGxldCBtYXA7XG5cdGlmIChpc0Z1bmN0aW9uKHNlbGVjdG9yKSkge1xuXHRcdG1hcCA9IHNlbGVjdG9yKHN1YmplY3QpO1xuXHRcdGlmICghKG1hcCBpbnN0YW5jZW9mIE1hcCkpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJ0aGUgc2VsZWN0b3IgY2FsbGJhY2sgbXVzdCByZXR1cm4gYSBtYXBcIik7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKGlzU3RyaW5nKHNlbGVjdG9yKSkge1xuXHRcdG1hcCA9IG5ldyBNYXAoKTtcblx0XHRidWlsZEZsYXRNYXAuY2FsbChtYXAsIHN1YmplY3QsIHNlbGVjdG9yKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwic2VsZWN0b3IgaXMgbmVpdGhlciBhIHN0cmluZyBub3IgYSBmdW5jdGlvblwiKTtcblx0fVxuXG5cdGlmICghKG1hcCBpbnN0YW5jZW9mIE1hcCkpIHtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0bWFwLmZvckVhY2goKHYsIGssIG0pID0+IHtcblx0XHRpZiAoaXNGdW5jdGlvbihmaWx0ZXIpKSB7XG5cdFx0XHRpZiAoZmlsdGVyLmNhbGwobSwgdiwgaykgIT09IHRydWUpIHJldHVybjtcblx0XHR9XG5cblx0XHRjYWxsYmFjay5jYWxsKHJlc3VsdCwgdiwgaywgbSk7XG5cdH0pO1xuXG5cdHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBzdWJqZWN0XG4gKiBAcGFyYW0gc2VsZWN0b3JcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSBwYXJlbnRNYXBcbiAqIEByZXR1cm4geyp9XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRmxhdE1hcChzdWJqZWN0LCBzZWxlY3Rvciwga2V5LCBwYXJlbnRNYXApIHtcblx0Y29uc3QgY3VycmVudE1hcCA9IG5ldyBNYXAoKTtcblxuXHRjb25zdCByZXN1bHRMZW5ndGggPSB0aGlzLnNpemU7XG5cblx0aWYgKGtleSA9PT0gdW5kZWZpbmVkKSBrZXkgPSBbXTtcblxuXHRjb25zdCBwYXJ0cyA9IHNlbGVjdG9yLnNwbGl0KERFTElNSVRFUik7XG5cdGxldCBjdXJyZW50ID0gXCJcIjtcblx0Y29uc3QgY3VycmVudFBhdGggPSBbXTtcblx0ZG8ge1xuXHRcdGN1cnJlbnQgPSBwYXJ0cy5zaGlmdCgpO1xuXHRcdGN1cnJlbnRQYXRoLnB1c2goY3VycmVudCk7XG5cblx0XHRpZiAoY3VycmVudCA9PT0gV0lMRENBUkQpIHtcblx0XHRcdGNvbnN0IGZpbmRlciA9IG5ldyBQYXRoZmluZGVyKHN1YmplY3QpO1xuXHRcdFx0bGV0IG1hcDtcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0bWFwID0gZmluZGVyLmdldFZpYShjdXJyZW50UGF0aC5qb2luKERFTElNSVRFUikpO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRjb25zdCBhID0gZTtcblx0XHRcdFx0bWFwID0gbmV3IE1hcCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKGNvbnN0IFtrLCBvXSBvZiBtYXApIHtcblx0XHRcdFx0Y29uc3QgY29weUtleSA9IGNsb25lKGtleSk7XG5cblx0XHRcdFx0Y3VycmVudFBhdGgubWFwKChhKSA9PiB7XG5cdFx0XHRcdFx0Y29weUtleS5wdXNoKGEgPT09IFdJTERDQVJEID8gayA6IGEpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRjb25zdCBrayA9IGNvcHlLZXkuam9pbihERUxJTUlURVIpO1xuXHRcdFx0XHRjb25zdCBzdWIgPSBidWlsZEZsYXRNYXAuY2FsbChcblx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdG8sXG5cdFx0XHRcdFx0cGFydHMuam9pbihERUxJTUlURVIpLFxuXHRcdFx0XHRcdGNvcHlLZXksXG5cdFx0XHRcdFx0byxcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpZiAoaXNPYmplY3Qoc3ViKSAmJiBwYXJlbnRNYXAgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHN1YltQQVJFTlRdID0gcGFyZW50TWFwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y3VycmVudE1hcC5zZXQoa2ssIHN1Yik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IHdoaWxlIChwYXJ0cy5sZW5ndGggPiAwKTtcblxuXHQvLyBubyBzZXQgaW4gY2hpbGQgcnVuXG5cdGlmIChyZXN1bHRMZW5ndGggPT09IHRoaXMuc2l6ZSkge1xuXHRcdGZvciAoY29uc3QgW2ssIG9dIG9mIGN1cnJlbnRNYXApIHtcblx0XHRcdHRoaXMuc2V0KGssIG8pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzdWJqZWN0O1xufVxuXG4vKipcbiAqIFdpdGggdGhlIGhlbHAgb2YgdGhpcyBmaWx0ZXIgY2FsbGJhY2ssIHZhbHVlcyBjYW4gYmUgZmlsdGVyZWQgb3V0LiBPbmx5IGlmIHRoZSBmaWx0ZXIgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCB0aGUgdmFsdWUgaXMgdGFrZW4gZm9yIHRoZSBtYXAuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuRGF0YX5leGFtcGxlRmlsdGVyQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgIEtleVxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5EYXRhLmJ1aWxkTWFwfVxuICovXG5cbi8qKlxuICogQWx0ZXJuYXRpdmVseSB0byBhIHN0cmluZyBzZWxlY3RvciBhIGNhbGxiYWNrIGNhbiBiZSBzcGVjaWZpZWQuIHRoaXMgbXVzdCByZXR1cm4gYSBtYXAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGltcG9ydCB7YnVpbGRNYXB9IGZyb20gJ0BzY2h1a2FpL21vbnN0ZXIvc291cmNlL2RhdGEvYnVpbGRtYXAubWpzJztcbiAqXG4gKiBsZXQgb2JqID0ge1xuICogICAgICAgICAgICAgICAgXCJkYXRhXCI6IFtcbiAqICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMTAsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIkNhc3NhbmRyYVwiLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcImVucmljaG1lbnRcIjoge1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMSwgbGFiZWw6IFwiWFhTXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAyLCBsYWJlbDogXCJYU1wiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMywgbGFiZWw6IFwiU1wiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogNCwgbGFiZWw6IFwiTFwiLCBwcmljZTogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJ30sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgICAgIH0sXG4gKiAgICAgICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIwLFxuICogICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJZZXNzZXkhXCIsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgIFwiZW5yaWNobWVudFwiOiB7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAxLCBsYWJlbDogXCJYWFNcIiwgcHJpY2U6IFtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJ31cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDIsIGxhYmVsOiBcIlhTXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAzLCBsYWJlbDogXCJTXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiA0LCBsYWJlbDogXCJMXCIsIHByaWNlOiBbXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQyd9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICAgICAgfVxuICogICAgICAgICAgICAgICAgXVxuICogICAgICAgICAgICB9O1xuICpcbiAqIGxldCBjYWxsYmFjayA9IGZ1bmN0aW9uIChzdWJqZWN0KSB7XG4gKiAgICAgICAgICAgICAgICBsZXQgbSA9IG5ldyBNYXA7XG4gKlxuICogICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaSwgYl0gb2YgT2JqZWN0LmVudHJpZXMoc3ViamVjdC5kYXRhKSkge1xuICpcbiAqICAgICAgICAgICAgICAgICAgICBsZXQga2V5MSA9IGk7XG4gKlxuICogICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2osIGNdIG9mIE9iamVjdC5lbnRyaWVzKGIuZW5yaWNobWVudC52YXJpYW50cykpIHtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleTIgPSBqO1xuICpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaywgZF0gb2YgT2JqZWN0LmVudHJpZXMoYy5wcmljZSkpIHtcbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5MyA9IGs7XG4gKlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5uYW1lID0gYi5uYW1lO1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5sYWJlbCA9IGMubGFiZWw7XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmlkID0gW2tleTEsIGtleTIsIGtleTNdLmpvaW4oJy4nKTtcbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLnNldChkLmlkLCBkKTtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgfVxuICpcbiAqICAgICAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICB9XG4gKiAgICAgICAgICAgICAgICByZXR1cm4gbTtcbiAqICAgICAgICAgICAgfVxuICpcbiAqIGxldCBtYXAgPSBidWlsZE1hcChvYmosIGNhbGxiYWNrLCAnJHtuYW1lfSAke3ZrfScsICcke2lkfScpXG4gKlxuICogLy8gXHUyMUE2IE1hcCgzKSB7XG4gKiAvLyAgXCIwLjAuMFwiOlwiQ2Fzc2FuZHJhIDEyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMC4wLjFcIjpcIkNhc3NhbmRyYSAxMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjAuMS4wXCI6XCJDYXNzYW5kcmEgMjIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIwLjEuMVwiOlwiQ2Fzc2FuZHJhIDIyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMC4yLjBcIjpcIkNhc3NhbmRyYSAzMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjAuMi4xXCI6XCJDYXNzYW5kcmEgMzIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIwLjMuMFwiOlwiQ2Fzc2FuZHJhIDQyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMC4zLjFcIjpcIkNhc3NhbmRyYSA0Mi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMC4wXCI6XCJZZXNzZXkhIDEyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMS4wLjFcIjpcIlllc3NleSEgMTIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIxLjEuMFwiOlwiWWVzc2V5ISAyMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMS4xXCI6XCJZZXNzZXkhIDIyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMS4yLjBcIjpcIlllc3NleSEgMzIuMTIgXHUyMEFDXCIsXG4gKiAvLyAgXCIxLjIuMVwiOlwiWWVzc2V5ISAzMi4xMiBcdTIwQUNcIixcbiAqIC8vICBcIjEuMy4wXCI6XCJZZXNzZXkhIDQyLjEyIFx1MjBBQ1wiLFxuICogLy8gIFwiMS4zLjFcIjpcIlllc3NleSEgNDIuMTIgXHUyMEFDXCJcbiAqIC8vIH1cbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5EYXRhfmV4YW1wbGVTZWxlY3RvckNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHN1YmplY3Qgc3ViamVjdFxuICogQHJldHVybiBNYXBcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTcuMFxuICogQHNlZSB7QGxpbmsgTW9uc3Rlci5EYXRhLmJ1aWxkTWFwfVxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdFxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBkZWZpbml0aW9uXG4gKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZVxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gYnVpbGQoc3ViamVjdCwgZGVmaW5pdGlvbiwgZGVmYXVsdFZhbHVlKSB7XG5cdGlmIChkZWZpbml0aW9uID09PSB1bmRlZmluZWQpIHJldHVybiBkZWZhdWx0VmFsdWUgPyBkZWZhdWx0VmFsdWUgOiBzdWJqZWN0O1xuXHR2YWxpZGF0ZVN0cmluZyhkZWZpbml0aW9uKTtcblxuXHRjb25zdCByZWdleHAgPSAvKD88cGxhY2Vob2xkZXI+XFwkeyg/PHBhdGg+W2EtelxcXkEtWi5cXC1fMC05XSopfSkvZ207XG5cdGNvbnN0IGFycmF5ID0gWy4uLmRlZmluaXRpb24ubWF0Y2hBbGwocmVnZXhwKV07XG5cblx0Y29uc3QgZmluZGVyID0gbmV3IFBhdGhmaW5kZXIoc3ViamVjdCk7XG5cblx0aWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBmaW5kZXIuZ2V0VmlhKGRlZmluaXRpb24pO1xuXHR9XG5cblx0YXJyYXkuZm9yRWFjaCgoYSkgPT4ge1xuXHRcdGNvbnN0IGdyb3VwcyA9IGE/LltcImdyb3Vwc1wiXTtcblx0XHRjb25zdCBwbGFjZWhvbGRlciA9IGdyb3Vwcz8uW1wicGxhY2Vob2xkZXJcIl07XG5cdFx0aWYgKHBsYWNlaG9sZGVyID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuXHRcdGNvbnN0IHBhdGggPSBncm91cHM/LltcInBhdGhcIl07XG5cblx0XHRsZXQgdiA9IGZpbmRlci5nZXRWaWEocGF0aCk7XG5cdFx0aWYgKHYgPT09IHVuZGVmaW5lZCkgdiA9IGRlZmF1bHRWYWx1ZTtcblxuXHRcdGRlZmluaXRpb24gPSBkZWZpbml0aW9uLnJlcGxhY2VBbGwocGxhY2Vob2xkZXIsIHYpO1xuXHR9KTtcblxuXHRyZXR1cm4gZGVmaW5pdGlvbjtcbn1cbiIsICIvKipcbiAqIEN1c3RvbSBwb3NpdGlvbmluZyByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy92aXJ0dWFsLWVsZW1lbnRzXG4gKi9cblxuY29uc3Qgc2lkZXMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddO1xuY29uc3QgYWxpZ25tZW50cyA9IFsnc3RhcnQnLCAnZW5kJ107XG5jb25zdCBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL3NpZGVzLnJlZHVjZSgoYWNjLCBzaWRlKSA9PiBhY2MuY29uY2F0KHNpZGUsIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMF0sIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMV0pLCBbXSk7XG5jb25zdCBtaW4gPSBNYXRoLm1pbjtcbmNvbnN0IG1heCA9IE1hdGgubWF4O1xuY29uc3Qgcm91bmQgPSBNYXRoLnJvdW5kO1xuY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yO1xuY29uc3QgY3JlYXRlQ29vcmRzID0gdiA9PiAoe1xuICB4OiB2LFxuICB5OiB2XG59KTtcbmNvbnN0IG9wcG9zaXRlU2lkZU1hcCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmNvbnN0IG9wcG9zaXRlQWxpZ25tZW50TWFwID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmZ1bmN0aW9uIGNsYW1wKHN0YXJ0LCB2YWx1ZSwgZW5kKSB7XG4gIHJldHVybiBtYXgoc3RhcnQsIG1pbih2YWx1ZSwgZW5kKSk7XG59XG5mdW5jdGlvbiBldmFsdWF0ZSh2YWx1ZSwgcGFyYW0pIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKHBhcmFtKSA6IHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0U2lkZShwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QXhpc0xlbmd0aChheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG59XG5mdW5jdGlvbiBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIFsndG9wJywgJ2JvdHRvbSddLmluY2x1ZGVzKGdldFNpZGUocGxhY2VtZW50KSkgPyAneScgOiAneCc7XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCkge1xuICByZXR1cm4gZ2V0T3Bwb3NpdGVBeGlzKGdldFNpZGVBeGlzKHBsYWNlbWVudCkpO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50U2lkZXMocGxhY2VtZW50LCByZWN0cywgcnRsKSB7XG4gIGlmIChydGwgPT09IHZvaWQgMCkge1xuICAgIHJ0bCA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnRBeGlzID0gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBsZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGFsaWdubWVudEF4aXMpO1xuICBsZXQgbWFpbkFsaWdubWVudFNpZGUgPSBhbGlnbm1lbnRBeGlzID09PSAneCcgPyBhbGlnbm1lbnQgPT09IChydGwgPyAnZW5kJyA6ICdzdGFydCcpID8gJ3JpZ2h0JyA6ICdsZWZ0JyA6IGFsaWdubWVudCA9PT0gJ3N0YXJ0JyA/ICdib3R0b20nIDogJ3RvcCc7XG4gIGlmIChyZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSA+IHJlY3RzLmZsb2F0aW5nW2xlbmd0aF0pIHtcbiAgICBtYWluQWxpZ25tZW50U2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5BbGlnbm1lbnRTaWRlKTtcbiAgfVxuICByZXR1cm4gW21haW5BbGlnbm1lbnRTaWRlLCBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluQWxpZ25tZW50U2lkZSldO1xufVxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRQbGFjZW1lbnRzKHBsYWNlbWVudCkge1xuICBjb25zdCBvcHBvc2l0ZVBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHJldHVybiBbZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSwgb3Bwb3NpdGVQbGFjZW1lbnQsIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KG9wcG9zaXRlUGxhY2VtZW50KV07XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9zdGFydHxlbmQvZywgYWxpZ25tZW50ID0+IG9wcG9zaXRlQWxpZ25tZW50TWFwW2FsaWdubWVudF0pO1xufVxuZnVuY3Rpb24gZ2V0U2lkZUxpc3Qoc2lkZSwgaXNTdGFydCwgcnRsKSB7XG4gIGNvbnN0IGxyID0gWydsZWZ0JywgJ3JpZ2h0J107XG4gIGNvbnN0IHJsID0gWydyaWdodCcsICdsZWZ0J107XG4gIGNvbnN0IHRiID0gWyd0b3AnLCAnYm90dG9tJ107XG4gIGNvbnN0IGJ0ID0gWydib3R0b20nLCAndG9wJ107XG4gIHN3aXRjaCAoc2lkZSkge1xuICAgIGNhc2UgJ3RvcCc6XG4gICAgY2FzZSAnYm90dG9tJzpcbiAgICAgIGlmIChydGwpIHJldHVybiBpc1N0YXJ0ID8gcmwgOiBscjtcbiAgICAgIHJldHVybiBpc1N0YXJ0ID8gbHIgOiBybDtcbiAgICBjYXNlICdsZWZ0JzpcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICByZXR1cm4gaXNTdGFydCA/IHRiIDogYnQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBbXTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cyhwbGFjZW1lbnQsIGZsaXBBbGlnbm1lbnQsIGRpcmVjdGlvbiwgcnRsKSB7XG4gIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICBsZXQgbGlzdCA9IGdldFNpZGVMaXN0KGdldFNpZGUocGxhY2VtZW50KSwgZGlyZWN0aW9uID09PSAnc3RhcnQnLCBydGwpO1xuICBpZiAoYWxpZ25tZW50KSB7XG4gICAgbGlzdCA9IGxpc3QubWFwKHNpZGUgPT4gc2lkZSArIFwiLVwiICsgYWxpZ25tZW50KTtcbiAgICBpZiAoZmxpcEFsaWdubWVudCkge1xuICAgICAgbGlzdCA9IGxpc3QuY29uY2F0KGxpc3QubWFwKGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBsaXN0O1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIHNpZGUgPT4gb3Bwb3NpdGVTaWRlTWFwW3NpZGVdKTtcbn1cbmZ1bmN0aW9uIGV4cGFuZFBhZGRpbmdPYmplY3QocGFkZGluZykge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMCxcbiAgICAuLi5wYWRkaW5nXG4gIH07XG59XG5mdW5jdGlvbiBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IGV4cGFuZFBhZGRpbmdPYmplY3QocGFkZGluZykgOiB7XG4gICAgdG9wOiBwYWRkaW5nLFxuICAgIHJpZ2h0OiBwYWRkaW5nLFxuICAgIGJvdHRvbTogcGFkZGluZyxcbiAgICBsZWZ0OiBwYWRkaW5nXG4gIH07XG59XG5mdW5jdGlvbiByZWN0VG9DbGllbnRSZWN0KHJlY3QpIHtcbiAgY29uc3Qge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IHJlY3Q7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHRvcDogeSxcbiAgICBsZWZ0OiB4LFxuICAgIHJpZ2h0OiB4ICsgd2lkdGgsXG4gICAgYm90dG9tOiB5ICsgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5leHBvcnQgeyBhbGlnbm1lbnRzLCBjbGFtcCwgY3JlYXRlQ29vcmRzLCBldmFsdWF0ZSwgZXhwYW5kUGFkZGluZ09iamVjdCwgZmxvb3IsIGdldEFsaWdubWVudCwgZ2V0QWxpZ25tZW50QXhpcywgZ2V0QWxpZ25tZW50U2lkZXMsIGdldEF4aXNMZW5ndGgsIGdldEV4cGFuZGVkUGxhY2VtZW50cywgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQsIGdldE9wcG9zaXRlQXhpcywgZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cywgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQsIGdldFBhZGRpbmdPYmplY3QsIGdldFNpZGUsIGdldFNpZGVBeGlzLCBtYXgsIG1pbiwgcGxhY2VtZW50cywgcmVjdFRvQ2xpZW50UmVjdCwgcm91bmQsIHNpZGVzIH07XG4iLCAiaW1wb3J0IHsgZ2V0U2lkZUF4aXMsIGdldEFsaWdubWVudEF4aXMsIGdldEF4aXNMZW5ndGgsIGdldFNpZGUsIGdldEFsaWdubWVudCwgZXZhbHVhdGUsIGdldFBhZGRpbmdPYmplY3QsIHJlY3RUb0NsaWVudFJlY3QsIG1pbiwgY2xhbXAsIHBsYWNlbWVudHMsIGdldEFsaWdubWVudFNpZGVzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQsIGdldEV4cGFuZGVkUGxhY2VtZW50cywgZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cywgc2lkZXMsIG1heCwgZ2V0T3Bwb3NpdGVBeGlzIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcbmV4cG9ydCB7IHJlY3RUb0NsaWVudFJlY3QgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMnO1xuXG5mdW5jdGlvbiBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChfcmVmLCBwbGFjZW1lbnQsIHJ0bCkge1xuICBsZXQge1xuICAgIHJlZmVyZW5jZSxcbiAgICBmbG9hdGluZ1xuICB9ID0gX3JlZjtcbiAgY29uc3Qgc2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnRBeGlzID0gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbkxlbmd0aCA9IGdldEF4aXNMZW5ndGgoYWxpZ25tZW50QXhpcyk7XG4gIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gIGNvbnN0IGlzVmVydGljYWwgPSBzaWRlQXhpcyA9PT0gJ3knO1xuICBjb25zdCBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZmxvYXRpbmcud2lkdGggLyAyO1xuICBjb25zdCBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGZsb2F0aW5nLmhlaWdodCAvIDI7XG4gIGNvbnN0IGNvbW1vbkFsaWduID0gcmVmZXJlbmNlW2FsaWduTGVuZ3RoXSAvIDIgLSBmbG9hdGluZ1thbGlnbkxlbmd0aF0gLyAyO1xuICBsZXQgY29vcmRzO1xuICBzd2l0Y2ggKHNpZGUpIHtcbiAgICBjYXNlICd0b3AnOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGZsb2F0aW5nLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBmbG9hdGluZy53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54LFxuICAgICAgICB5OiByZWZlcmVuY2UueVxuICAgICAgfTtcbiAgfVxuICBzd2l0Y2ggKGdldEFsaWdubWVudChwbGFjZW1lbnQpKSB7XG4gICAgY2FzZSAnc3RhcnQnOlxuICAgICAgY29vcmRzW2FsaWdubWVudEF4aXNdIC09IGNvbW1vbkFsaWduICogKHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2VuZCc6XG4gICAgICBjb29yZHNbYWxpZ25tZW50QXhpc10gKz0gY29tbW9uQWxpZ24gKiAocnRsICYmIGlzVmVydGljYWwgPyAtMSA6IDEpO1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIGNvb3Jkcztcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMgdGhhdCB3aWxsIHBsYWNlIHRoZSBmbG9hdGluZyBlbGVtZW50XG4gKiBuZXh0IHRvIGEgZ2l2ZW4gcmVmZXJlbmNlIGVsZW1lbnQuXG4gKlxuICogVGhpcyBleHBvcnQgZG9lcyBub3QgaGF2ZSBhbnkgYHBsYXRmb3JtYCBpbnRlcmZhY2UgbG9naWMuIFlvdSB3aWxsIG5lZWQgdG9cbiAqIHdyaXRlIG9uZSBmb3IgdGhlIHBsYXRmb3JtIHlvdSBhcmUgdXNpbmcgRmxvYXRpbmcgVUkgd2l0aC5cbiAqL1xuY29uc3QgY29tcHV0ZVBvc2l0aW9uID0gYXN5bmMgKHJlZmVyZW5jZSwgZmxvYXRpbmcsIGNvbmZpZykgPT4ge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50ID0gJ2JvdHRvbScsXG4gICAgc3RyYXRlZ3kgPSAnYWJzb2x1dGUnLFxuICAgIG1pZGRsZXdhcmUgPSBbXSxcbiAgICBwbGF0Zm9ybVxuICB9ID0gY29uZmlnO1xuICBjb25zdCB2YWxpZE1pZGRsZXdhcmUgPSBtaWRkbGV3YXJlLmZpbHRlcihCb29sZWFuKTtcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChmbG9hdGluZykpO1xuICBsZXQgcmVjdHMgPSBhd2FpdCBwbGF0Zm9ybS5nZXRFbGVtZW50UmVjdHMoe1xuICAgIHJlZmVyZW5jZSxcbiAgICBmbG9hdGluZyxcbiAgICBzdHJhdGVneVxuICB9KTtcbiAgbGV0IHtcbiAgICB4LFxuICAgIHlcbiAgfSA9IGNvbXB1dGVDb29yZHNGcm9tUGxhY2VtZW50KHJlY3RzLCBwbGFjZW1lbnQsIHJ0bCk7XG4gIGxldCBzdGF0ZWZ1bFBsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgbGV0IG1pZGRsZXdhcmVEYXRhID0ge307XG4gIGxldCByZXNldENvdW50ID0gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWxpZE1pZGRsZXdhcmUubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB7XG4gICAgICBuYW1lLFxuICAgICAgZm5cbiAgICB9ID0gdmFsaWRNaWRkbGV3YXJlW2ldO1xuICAgIGNvbnN0IHtcbiAgICAgIHg6IG5leHRYLFxuICAgICAgeTogbmV4dFksXG4gICAgICBkYXRhLFxuICAgICAgcmVzZXRcbiAgICB9ID0gYXdhaXQgZm4oe1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBpbml0aWFsUGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQ6IHN0YXRlZnVsUGxhY2VtZW50LFxuICAgICAgc3RyYXRlZ3ksXG4gICAgICBtaWRkbGV3YXJlRGF0YSxcbiAgICAgIHJlY3RzLFxuICAgICAgcGxhdGZvcm0sXG4gICAgICBlbGVtZW50czoge1xuICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgIGZsb2F0aW5nXG4gICAgICB9XG4gICAgfSk7XG4gICAgeCA9IG5leHRYICE9IG51bGwgPyBuZXh0WCA6IHg7XG4gICAgeSA9IG5leHRZICE9IG51bGwgPyBuZXh0WSA6IHk7XG4gICAgbWlkZGxld2FyZURhdGEgPSB7XG4gICAgICAuLi5taWRkbGV3YXJlRGF0YSxcbiAgICAgIFtuYW1lXToge1xuICAgICAgICAuLi5taWRkbGV3YXJlRGF0YVtuYW1lXSxcbiAgICAgICAgLi4uZGF0YVxuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHJlc2V0ICYmIHJlc2V0Q291bnQgPD0gNTApIHtcbiAgICAgIHJlc2V0Q291bnQrKztcbiAgICAgIGlmICh0eXBlb2YgcmVzZXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChyZXNldC5wbGFjZW1lbnQpIHtcbiAgICAgICAgICBzdGF0ZWZ1bFBsYWNlbWVudCA9IHJlc2V0LnBsYWNlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzZXQucmVjdHMpIHtcbiAgICAgICAgICByZWN0cyA9IHJlc2V0LnJlY3RzID09PSB0cnVlID8gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICAgICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgICAgIGZsb2F0aW5nLFxuICAgICAgICAgICAgc3RyYXRlZ3lcbiAgICAgICAgICB9KSA6IHJlc2V0LnJlY3RzO1xuICAgICAgICB9XG4gICAgICAgICh7XG4gICAgICAgICAgeCxcbiAgICAgICAgICB5XG4gICAgICAgIH0gPSBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChyZWN0cywgc3RhdGVmdWxQbGFjZW1lbnQsIHJ0bCkpO1xuICAgICAgfVxuICAgICAgaSA9IC0xO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlZnVsUGxhY2VtZW50LFxuICAgIHN0cmF0ZWd5LFxuICAgIG1pZGRsZXdhcmVEYXRhXG4gIH07XG59O1xuXG4vKipcbiAqIFJlc29sdmVzIHdpdGggYW4gb2JqZWN0IG9mIG92ZXJmbG93IHNpZGUgb2Zmc2V0cyB0aGF0IGRldGVybWluZSBob3cgbXVjaCB0aGVcbiAqIGVsZW1lbnQgaXMgb3ZlcmZsb3dpbmcgYSBnaXZlbiBjbGlwcGluZyBib3VuZGFyeSBvbiBlYWNoIHNpZGUuXG4gKiAtIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGJvdW5kYXJ5IGJ5IHRoYXQgbnVtYmVyIG9mIHBpeGVsc1xuICogLSBuZWdhdGl2ZSA9IGhvdyBtYW55IHBpeGVscyBsZWZ0IGJlZm9yZSBpdCB3aWxsIG92ZXJmbG93XG4gKiAtIDAgPSBsaWVzIGZsdXNoIHdpdGggdGhlIGJvdW5kYXJ5XG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvZGV0ZWN0T3ZlcmZsb3dcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgdmFyIF9hd2FpdCRwbGF0Zm9ybSRpc0VsZTtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBjb25zdCB7XG4gICAgeCxcbiAgICB5LFxuICAgIHBsYXRmb3JtLFxuICAgIHJlY3RzLFxuICAgIGVsZW1lbnRzLFxuICAgIHN0cmF0ZWd5XG4gIH0gPSBzdGF0ZTtcbiAgY29uc3Qge1xuICAgIGJvdW5kYXJ5ID0gJ2NsaXBwaW5nQW5jZXN0b3JzJyxcbiAgICByb290Qm91bmRhcnkgPSAndmlld3BvcnQnLFxuICAgIGVsZW1lbnRDb250ZXh0ID0gJ2Zsb2F0aW5nJyxcbiAgICBhbHRCb3VuZGFyeSA9IGZhbHNlLFxuICAgIHBhZGRpbmcgPSAwXG4gIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gIGNvbnN0IHBhZGRpbmdPYmplY3QgPSBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpO1xuICBjb25zdCBhbHRDb250ZXh0ID0gZWxlbWVudENvbnRleHQgPT09ICdmbG9hdGluZycgPyAncmVmZXJlbmNlJyA6ICdmbG9hdGluZyc7XG4gIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIGNvbnN0IGNsaXBwaW5nQ2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QoYXdhaXQgcGxhdGZvcm0uZ2V0Q2xpcHBpbmdSZWN0KHtcbiAgICBlbGVtZW50OiAoKF9hd2FpdCRwbGF0Zm9ybSRpc0VsZSA9IGF3YWl0IChwbGF0Zm9ybS5pc0VsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzRWxlbWVudChlbGVtZW50KSkpICE9IG51bGwgPyBfYXdhaXQkcGxhdGZvcm0kaXNFbGUgOiB0cnVlKSA/IGVsZW1lbnQgOiBlbGVtZW50LmNvbnRleHRFbGVtZW50IHx8IChhd2FpdCAocGxhdGZvcm0uZ2V0RG9jdW1lbnRFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudHMuZmxvYXRpbmcpKSksXG4gICAgYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5LFxuICAgIHN0cmF0ZWd5XG4gIH0pKTtcbiAgY29uc3QgcmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSAnZmxvYXRpbmcnID8ge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aDogcmVjdHMuZmxvYXRpbmcud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0cy5mbG9hdGluZy5oZWlnaHRcbiAgfSA6IHJlY3RzLnJlZmVyZW5jZTtcbiAgY29uc3Qgb2Zmc2V0UGFyZW50ID0gYXdhaXQgKHBsYXRmb3JtLmdldE9mZnNldFBhcmVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gIGNvbnN0IG9mZnNldFNjYWxlID0gKGF3YWl0IChwbGF0Zm9ybS5pc0VsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzRWxlbWVudChvZmZzZXRQYXJlbnQpKSkgPyAoYXdhaXQgKHBsYXRmb3JtLmdldFNjYWxlID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5nZXRTY2FsZShvZmZzZXRQYXJlbnQpKSkgfHwge1xuICAgIHg6IDEsXG4gICAgeTogMVxuICB9IDoge1xuICAgIHg6IDEsXG4gICAgeTogMVxuICB9O1xuICBjb25zdCBlbGVtZW50Q2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QocGxhdGZvcm0uY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QgPyBhd2FpdCBwbGF0Zm9ybS5jb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCh7XG4gICAgZWxlbWVudHMsXG4gICAgcmVjdCxcbiAgICBvZmZzZXRQYXJlbnQsXG4gICAgc3RyYXRlZ3lcbiAgfSkgOiByZWN0KTtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IChjbGlwcGluZ0NsaWVudFJlY3QudG9wIC0gZWxlbWVudENsaWVudFJlY3QudG9wICsgcGFkZGluZ09iamVjdC50b3ApIC8gb2Zmc2V0U2NhbGUueSxcbiAgICBib3R0b206IChlbGVtZW50Q2xpZW50UmVjdC5ib3R0b20gLSBjbGlwcGluZ0NsaWVudFJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20pIC8gb2Zmc2V0U2NhbGUueSxcbiAgICBsZWZ0OiAoY2xpcHBpbmdDbGllbnRSZWN0LmxlZnQgLSBlbGVtZW50Q2xpZW50UmVjdC5sZWZ0ICsgcGFkZGluZ09iamVjdC5sZWZ0KSAvIG9mZnNldFNjYWxlLngsXG4gICAgcmlnaHQ6IChlbGVtZW50Q2xpZW50UmVjdC5yaWdodCAtIGNsaXBwaW5nQ2xpZW50UmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHQpIC8gb2Zmc2V0U2NhbGUueFxuICB9O1xufVxuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gcG9zaXRpb24gYW4gaW5uZXIgZWxlbWVudCBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBzbyB0aGF0IGl0XG4gKiBhcHBlYXJzIGNlbnRlcmVkIHRvIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9hcnJvd1xuICovXG5jb25zdCBhcnJvdyA9IG9wdGlvbnMgPT4gKHtcbiAgbmFtZTogJ2Fycm93JyxcbiAgb3B0aW9ucyxcbiAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICBjb25zdCB7XG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHBsYWNlbWVudCxcbiAgICAgIHJlY3RzLFxuICAgICAgcGxhdGZvcm0sXG4gICAgICBlbGVtZW50cyxcbiAgICAgIG1pZGRsZXdhcmVEYXRhXG4gICAgfSA9IHN0YXRlO1xuICAgIC8vIFNpbmNlIGBlbGVtZW50YCBpcyByZXF1aXJlZCwgd2UgZG9uJ3QgUGFydGlhbDw+IHRoZSB0eXBlLlxuICAgIGNvbnN0IHtcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwYWRkaW5nID0gMFxuICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSkgfHwge307XG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICB4LFxuICAgICAgeVxuICAgIH07XG4gICAgY29uc3QgYXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgICBjb25zdCBsZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGF4aXMpO1xuICAgIGNvbnN0IGFycm93RGltZW5zaW9ucyA9IGF3YWl0IHBsYXRmb3JtLmdldERpbWVuc2lvbnMoZWxlbWVudCk7XG4gICAgY29uc3QgaXNZQXhpcyA9IGF4aXMgPT09ICd5JztcbiAgICBjb25zdCBtaW5Qcm9wID0gaXNZQXhpcyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgIGNvbnN0IG1heFByb3AgPSBpc1lBeGlzID8gJ2JvdHRvbScgOiAncmlnaHQnO1xuICAgIGNvbnN0IGNsaWVudFByb3AgPSBpc1lBeGlzID8gJ2NsaWVudEhlaWdodCcgOiAnY2xpZW50V2lkdGgnO1xuICAgIGNvbnN0IGVuZERpZmYgPSByZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSArIHJlY3RzLnJlZmVyZW5jZVtheGlzXSAtIGNvb3Jkc1theGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbmd0aF07XG4gICAgY29uc3Qgc3RhcnREaWZmID0gY29vcmRzW2F4aXNdIC0gcmVjdHMucmVmZXJlbmNlW2F4aXNdO1xuICAgIGNvbnN0IGFycm93T2Zmc2V0UGFyZW50ID0gYXdhaXQgKHBsYXRmb3JtLmdldE9mZnNldFBhcmVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpKTtcbiAgICBsZXQgY2xpZW50U2l6ZSA9IGFycm93T2Zmc2V0UGFyZW50ID8gYXJyb3dPZmZzZXRQYXJlbnRbY2xpZW50UHJvcF0gOiAwO1xuXG4gICAgLy8gRE9NIHBsYXRmb3JtIGNhbiByZXR1cm4gYHdpbmRvd2AgYXMgdGhlIGBvZmZzZXRQYXJlbnRgLlxuICAgIGlmICghY2xpZW50U2l6ZSB8fCAhKGF3YWl0IChwbGF0Zm9ybS5pc0VsZW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzRWxlbWVudChhcnJvd09mZnNldFBhcmVudCkpKSkge1xuICAgICAgY2xpZW50U2l6ZSA9IGVsZW1lbnRzLmZsb2F0aW5nW2NsaWVudFByb3BdIHx8IHJlY3RzLmZsb2F0aW5nW2xlbmd0aF07XG4gICAgfVxuICAgIGNvbnN0IGNlbnRlclRvUmVmZXJlbmNlID0gZW5kRGlmZiAvIDIgLSBzdGFydERpZmYgLyAyO1xuXG4gICAgLy8gSWYgdGhlIHBhZGRpbmcgaXMgbGFyZ2UgZW5vdWdoIHRoYXQgaXQgY2F1c2VzIHRoZSBhcnJvdyB0byBubyBsb25nZXIgYmVcbiAgICAvLyBjZW50ZXJlZCwgbW9kaWZ5IHRoZSBwYWRkaW5nIHNvIHRoYXQgaXQgaXMgY2VudGVyZWQuXG4gICAgY29uc3QgbGFyZ2VzdFBvc3NpYmxlUGFkZGluZyA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyIC0gMTtcbiAgICBjb25zdCBtaW5QYWRkaW5nID0gbWluKHBhZGRpbmdPYmplY3RbbWluUHJvcF0sIGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcpO1xuICAgIGNvbnN0IG1heFBhZGRpbmcgPSBtaW4ocGFkZGluZ09iamVjdFttYXhQcm9wXSwgbGFyZ2VzdFBvc3NpYmxlUGFkZGluZyk7XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhlIGFycm93IGRvZXNuJ3Qgb3ZlcmZsb3cgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaWYgdGhlIGNlbnRlclxuICAgIC8vIHBvaW50IGlzIG91dHNpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQncyBib3VuZHMuXG4gICAgY29uc3QgbWluJDEgPSBtaW5QYWRkaW5nO1xuICAgIGNvbnN0IG1heCA9IGNsaWVudFNpemUgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAtIG1heFBhZGRpbmc7XG4gICAgY29uc3QgY2VudGVyID0gY2xpZW50U2l6ZSAvIDIgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgKyBjZW50ZXJUb1JlZmVyZW5jZTtcbiAgICBjb25zdCBvZmZzZXQgPSBjbGFtcChtaW4kMSwgY2VudGVyLCBtYXgpO1xuXG4gICAgLy8gSWYgdGhlIHJlZmVyZW5jZSBpcyBzbWFsbCBlbm91Z2ggdGhhdCB0aGUgYXJyb3cncyBwYWRkaW5nIGNhdXNlcyBpdCB0b1xuICAgIC8vIHRvIHBvaW50IHRvIG5vdGhpbmcgZm9yIGFuIGFsaWduZWQgcGxhY2VtZW50LCBhZGp1c3QgdGhlIG9mZnNldCBvZiB0aGVcbiAgICAvLyBmbG9hdGluZyBlbGVtZW50IGl0c2VsZi4gVG8gZW5zdXJlIGBzaGlmdCgpYCBjb250aW51ZXMgdG8gdGFrZSBhY3Rpb24sXG4gICAgLy8gYSBzaW5nbGUgcmVzZXQgaXMgcGVyZm9ybWVkIHdoZW4gdGhpcyBpcyB0cnVlLlxuICAgIGNvbnN0IHNob3VsZEFkZE9mZnNldCA9ICFtaWRkbGV3YXJlRGF0YS5hcnJvdyAmJiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSAhPSBudWxsICYmIGNlbnRlciAhPT0gb2Zmc2V0ICYmIHJlY3RzLnJlZmVyZW5jZVtsZW5ndGhdIC8gMiAtIChjZW50ZXIgPCBtaW4kMSA/IG1pblBhZGRpbmcgOiBtYXhQYWRkaW5nKSAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiA8IDA7XG4gICAgY29uc3QgYWxpZ25tZW50T2Zmc2V0ID0gc2hvdWxkQWRkT2Zmc2V0ID8gY2VudGVyIDwgbWluJDEgPyBjZW50ZXIgLSBtaW4kMSA6IGNlbnRlciAtIG1heCA6IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtheGlzXTogY29vcmRzW2F4aXNdICsgYWxpZ25tZW50T2Zmc2V0LFxuICAgICAgZGF0YToge1xuICAgICAgICBbYXhpc106IG9mZnNldCxcbiAgICAgICAgY2VudGVyT2Zmc2V0OiBjZW50ZXIgLSBvZmZzZXQgLSBhbGlnbm1lbnRPZmZzZXQsXG4gICAgICAgIC4uLihzaG91bGRBZGRPZmZzZXQgJiYge1xuICAgICAgICAgIGFsaWdubWVudE9mZnNldFxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIHJlc2V0OiBzaG91bGRBZGRPZmZzZXRcbiAgICB9O1xuICB9XG59KTtcblxuZnVuY3Rpb24gZ2V0UGxhY2VtZW50TGlzdChhbGlnbm1lbnQsIGF1dG9BbGlnbm1lbnQsIGFsbG93ZWRQbGFjZW1lbnRzKSB7XG4gIGNvbnN0IGFsbG93ZWRQbGFjZW1lbnRzU29ydGVkQnlBbGlnbm1lbnQgPSBhbGlnbm1lbnQgPyBbLi4uYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSA9PT0gYWxpZ25tZW50KSwgLi4uYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSAhPT0gYWxpZ25tZW50KV0gOiBhbGxvd2VkUGxhY2VtZW50cy5maWx0ZXIocGxhY2VtZW50ID0+IGdldFNpZGUocGxhY2VtZW50KSA9PT0gcGxhY2VtZW50KTtcbiAgcmV0dXJuIGFsbG93ZWRQbGFjZW1lbnRzU29ydGVkQnlBbGlnbm1lbnQuZmlsdGVyKHBsYWNlbWVudCA9PiB7XG4gICAgaWYgKGFsaWdubWVudCkge1xuICAgICAgcmV0dXJuIGdldEFsaWdubWVudChwbGFjZW1lbnQpID09PSBhbGlnbm1lbnQgfHwgKGF1dG9BbGlnbm1lbnQgPyBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpICE9PSBwbGFjZW1lbnQgOiBmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcbn1cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IGNob29zaW5nIHRoZSBwbGFjZW1lbnRcbiAqIHRoYXQgaGFzIHRoZSBtb3N0IHNwYWNlIGF2YWlsYWJsZSBhdXRvbWF0aWNhbGx5LCB3aXRob3V0IG5lZWRpbmcgdG8gc3BlY2lmeSBhXG4gKiBwcmVmZXJyZWQgcGxhY2VtZW50LiBBbHRlcm5hdGl2ZSB0byBgZmxpcGAuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1BsYWNlbWVudFxuICovXG5jb25zdCBhdXRvUGxhY2VtZW50ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdhdXRvUGxhY2VtZW50JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJGF1dG9QLCBfbWlkZGxld2FyZURhdGEkYXV0b1AyLCBfcGxhY2VtZW50c1RoYXRGaXRPbkU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlY3RzLFxuICAgICAgICBtaWRkbGV3YXJlRGF0YSxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgZWxlbWVudHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY3Jvc3NBeGlzID0gZmFsc2UsXG4gICAgICAgIGFsaWdubWVudCxcbiAgICAgICAgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLFxuICAgICAgICBhdXRvQWxpZ25tZW50ID0gdHJ1ZSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgcGxhY2VtZW50cyQxID0gYWxpZ25tZW50ICE9PSB1bmRlZmluZWQgfHwgYWxsb3dlZFBsYWNlbWVudHMgPT09IHBsYWNlbWVudHMgPyBnZXRQbGFjZW1lbnRMaXN0KGFsaWdubWVudCB8fCBudWxsLCBhdXRvQWxpZ25tZW50LCBhbGxvd2VkUGxhY2VtZW50cykgOiBhbGxvd2VkUGxhY2VtZW50cztcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXggPSAoKF9taWRkbGV3YXJlRGF0YSRhdXRvUCA9IG1pZGRsZXdhcmVEYXRhLmF1dG9QbGFjZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkYXV0b1AuaW5kZXgpIHx8IDA7XG4gICAgICBjb25zdCBjdXJyZW50UGxhY2VtZW50ID0gcGxhY2VtZW50cyQxW2N1cnJlbnRJbmRleF07XG4gICAgICBpZiAoY3VycmVudFBsYWNlbWVudCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsaWdubWVudFNpZGVzID0gZ2V0QWxpZ25tZW50U2lkZXMoY3VycmVudFBsYWNlbWVudCwgcmVjdHMsIGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKSk7XG5cbiAgICAgIC8vIE1ha2UgYGNvbXB1dGVDb29yZHNgIHN0YXJ0IGZyb20gdGhlIHJpZ2h0IHBsYWNlLlxuICAgICAgaWYgKHBsYWNlbWVudCAhPT0gY3VycmVudFBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudHMkMVswXVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnRPdmVyZmxvd3MgPSBbb3ZlcmZsb3dbZ2V0U2lkZShjdXJyZW50UGxhY2VtZW50KV0sIG92ZXJmbG93W2FsaWdubWVudFNpZGVzWzBdXSwgb3ZlcmZsb3dbYWxpZ25tZW50U2lkZXNbMV1dXTtcbiAgICAgIGNvbnN0IGFsbE92ZXJmbG93cyA9IFsuLi4oKChfbWlkZGxld2FyZURhdGEkYXV0b1AyID0gbWlkZGxld2FyZURhdGEuYXV0b1BsYWNlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRhdXRvUDIub3ZlcmZsb3dzKSB8fCBbXSksIHtcbiAgICAgICAgcGxhY2VtZW50OiBjdXJyZW50UGxhY2VtZW50LFxuICAgICAgICBvdmVyZmxvd3M6IGN1cnJlbnRPdmVyZmxvd3NcbiAgICAgIH1dO1xuICAgICAgY29uc3QgbmV4dFBsYWNlbWVudCA9IHBsYWNlbWVudHMkMVtjdXJyZW50SW5kZXggKyAxXTtcblxuICAgICAgLy8gVGhlcmUgYXJlIG1vcmUgcGxhY2VtZW50cyB0byBjaGVjay5cbiAgICAgIGlmIChuZXh0UGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCArIDEsXG4gICAgICAgICAgICBvdmVyZmxvd3M6IGFsbE92ZXJmbG93c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZSA9IGFsbE92ZXJmbG93cy5tYXAoZCA9PiB7XG4gICAgICAgIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChkLnBsYWNlbWVudCk7XG4gICAgICAgIHJldHVybiBbZC5wbGFjZW1lbnQsIGFsaWdubWVudCAmJiBjcm9zc0F4aXMgP1xuICAgICAgICAvLyBDaGVjayBhbG9uZyB0aGUgbWFpbkF4aXMgYW5kIG1haW4gY3Jvc3NBeGlzIHNpZGUuXG4gICAgICAgIGQub3ZlcmZsb3dzLnNsaWNlKDAsIDIpLnJlZHVjZSgoYWNjLCB2KSA9PiBhY2MgKyB2LCAwKSA6XG4gICAgICAgIC8vIENoZWNrIG9ubHkgdGhlIG1haW5BeGlzLlxuICAgICAgICBkLm92ZXJmbG93c1swXSwgZC5vdmVyZmxvd3NdO1xuICAgICAgfSkuc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pO1xuICAgICAgY29uc3QgcGxhY2VtZW50c1RoYXRGaXRPbkVhY2hTaWRlID0gcGxhY2VtZW50c1NvcnRlZEJ5TW9zdFNwYWNlLmZpbHRlcihkID0+IGRbMl0uc2xpY2UoMCxcbiAgICAgIC8vIEFsaWduZWQgcGxhY2VtZW50cyBzaG91bGQgbm90IGNoZWNrIHRoZWlyIG9wcG9zaXRlIGNyb3NzQXhpc1xuICAgICAgLy8gc2lkZS5cbiAgICAgIGdldEFsaWdubWVudChkWzBdKSA/IDIgOiAzKS5ldmVyeSh2ID0+IHYgPD0gMCkpO1xuICAgICAgY29uc3QgcmVzZXRQbGFjZW1lbnQgPSAoKF9wbGFjZW1lbnRzVGhhdEZpdE9uRSA9IHBsYWNlbWVudHNUaGF0Rml0T25FYWNoU2lkZVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wbGFjZW1lbnRzVGhhdEZpdE9uRVswXSkgfHwgcGxhY2VtZW50c1NvcnRlZEJ5TW9zdFNwYWNlWzBdWzBdO1xuICAgICAgaWYgKHJlc2V0UGxhY2VtZW50ICE9PSBwbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBpbmRleDogY3VycmVudEluZGV4ICsgMSxcbiAgICAgICAgICAgIG92ZXJmbG93czogYWxsT3ZlcmZsb3dzXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiByZXNldFBsYWNlbWVudFxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBmbGlwcGluZyB0aGUgYHBsYWNlbWVudGBcbiAqIGluIG9yZGVyIHRvIGtlZXAgaXQgaW4gdmlldyB3aGVuIHRoZSBwcmVmZXJyZWQgcGxhY2VtZW50KHMpIHdpbGwgb3ZlcmZsb3cgdGhlXG4gKiBjbGlwcGluZyBib3VuZGFyeS4gQWx0ZXJuYXRpdmUgdG8gYGF1dG9QbGFjZW1lbnRgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2ZsaXBcbiAqL1xuY29uc3QgZmxpcCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnZmxpcCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRhcnJvdywgX21pZGRsZXdhcmVEYXRhJGZsaXA7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBpbml0aWFsUGxhY2VtZW50LFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICAgZWxlbWVudHNcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxuICAgICAgICBjcm9zc0F4aXM6IGNoZWNrQ3Jvc3NBeGlzID0gdHJ1ZSxcbiAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzOiBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICAgIGZhbGxiYWNrU3RyYXRlZ3kgPSAnYmVzdEZpdCcsXG4gICAgICAgIGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gPSAnbm9uZScsXG4gICAgICAgIGZsaXBBbGlnbm1lbnQgPSB0cnVlLFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG5cbiAgICAgIC8vIElmIGEgcmVzZXQgYnkgdGhlIGFycm93IHdhcyBjYXVzZWQgZHVlIHRvIGFuIGFsaWdubWVudCBvZmZzZXQgYmVpbmdcbiAgICAgIC8vIGFkZGVkLCB3ZSBzaG91bGQgc2tpcCBhbnkgbG9naWMgbm93IHNpbmNlIGBmbGlwKClgIGhhcyBhbHJlYWR5IGRvbmUgaXRzXG4gICAgICAvLyB3b3JrLlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8yNTQ5I2lzc3VlY29tbWVudC0xNzE5NjAxNjQzXG4gICAgICBpZiAoKF9taWRkbGV3YXJlRGF0YSRhcnJvdyA9IG1pZGRsZXdhcmVEYXRhLmFycm93KSAhPSBudWxsICYmIF9taWRkbGV3YXJlRGF0YSRhcnJvdy5hbGlnbm1lbnRPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGluaXRpYWxTaWRlQXhpcyA9IGdldFNpZGVBeGlzKGluaXRpYWxQbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaXNCYXNlUGxhY2VtZW50ID0gZ2V0U2lkZShpbml0aWFsUGxhY2VtZW50KSA9PT0gaW5pdGlhbFBsYWNlbWVudDtcbiAgICAgIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZWxlbWVudHMuZmxvYXRpbmcpKTtcbiAgICAgIGNvbnN0IGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwQWxpZ25tZW50ID8gW2dldE9wcG9zaXRlUGxhY2VtZW50KGluaXRpYWxQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkUGxhY2VtZW50cyhpbml0aWFsUGxhY2VtZW50KSk7XG4gICAgICBjb25zdCBoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uID0gZmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiAhPT0gJ25vbmUnO1xuICAgICAgaWYgKCFzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgJiYgaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbikge1xuICAgICAgICBmYWxsYmFja1BsYWNlbWVudHMucHVzaCguLi5nZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKGluaXRpYWxQbGFjZW1lbnQsIGZsaXBBbGlnbm1lbnQsIGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24sIHJ0bCkpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGxhY2VtZW50cyA9IFtpbml0aWFsUGxhY2VtZW50LCAuLi5mYWxsYmFja1BsYWNlbWVudHNdO1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IG92ZXJmbG93cyA9IFtdO1xuICAgICAgbGV0IG92ZXJmbG93c0RhdGEgPSAoKF9taWRkbGV3YXJlRGF0YSRmbGlwID0gbWlkZGxld2FyZURhdGEuZmxpcCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRmbGlwLm92ZXJmbG93cykgfHwgW107XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBvdmVyZmxvd3MucHVzaChvdmVyZmxvd1tzaWRlXSk7XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgY29uc3Qgc2lkZXMgPSBnZXRBbGlnbm1lbnRTaWRlcyhwbGFjZW1lbnQsIHJlY3RzLCBydGwpO1xuICAgICAgICBvdmVyZmxvd3MucHVzaChvdmVyZmxvd1tzaWRlc1swXV0sIG92ZXJmbG93W3NpZGVzWzFdXSk7XG4gICAgICB9XG4gICAgICBvdmVyZmxvd3NEYXRhID0gWy4uLm92ZXJmbG93c0RhdGEsIHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBvdmVyZmxvd3NcbiAgICAgIH1dO1xuXG4gICAgICAvLyBPbmUgb3IgbW9yZSBzaWRlcyBpcyBvdmVyZmxvd2luZy5cbiAgICAgIGlmICghb3ZlcmZsb3dzLmV2ZXJ5KHNpZGUgPT4gc2lkZSA8PSAwKSkge1xuICAgICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJGZsaXAyLCBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXI7XG4gICAgICAgIGNvbnN0IG5leHRJbmRleCA9ICgoKF9taWRkbGV3YXJlRGF0YSRmbGlwMiA9IG1pZGRsZXdhcmVEYXRhLmZsaXApID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkZmxpcDIuaW5kZXgpIHx8IDApICsgMTtcbiAgICAgICAgY29uc3QgbmV4dFBsYWNlbWVudCA9IHBsYWNlbWVudHNbbmV4dEluZGV4XTtcbiAgICAgICAgaWYgKG5leHRQbGFjZW1lbnQpIHtcbiAgICAgICAgICAvLyBUcnkgbmV4dCBwbGFjZW1lbnQgYW5kIHJlLXJ1biB0aGUgbGlmZWN5Y2xlLlxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGluZGV4OiBuZXh0SW5kZXgsXG4gICAgICAgICAgICAgIG92ZXJmbG93czogb3ZlcmZsb3dzRGF0YVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGaXJzdCwgZmluZCB0aGUgY2FuZGlkYXRlcyB0aGF0IGZpdCBvbiB0aGUgbWFpbkF4aXMgc2lkZSBvZiBvdmVyZmxvdyxcbiAgICAgICAgLy8gdGhlbiBmaW5kIHRoZSBwbGFjZW1lbnQgdGhhdCBmaXRzIHRoZSBiZXN0IG9uIHRoZSBtYWluIGNyb3NzQXhpcyBzaWRlLlxuICAgICAgICBsZXQgcmVzZXRQbGFjZW1lbnQgPSAoX292ZXJmbG93c0RhdGEkZmlsdGVyID0gb3ZlcmZsb3dzRGF0YS5maWx0ZXIoZCA9PiBkLm92ZXJmbG93c1swXSA8PSAwKS5zb3J0KChhLCBiKSA9PiBhLm92ZXJmbG93c1sxXSAtIGIub3ZlcmZsb3dzWzFdKVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9vdmVyZmxvd3NEYXRhJGZpbHRlci5wbGFjZW1lbnQ7XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlIGZhbGxiYWNrLlxuICAgICAgICBpZiAoIXJlc2V0UGxhY2VtZW50KSB7XG4gICAgICAgICAgc3dpdGNoIChmYWxsYmFja1N0cmF0ZWd5KSB7XG4gICAgICAgICAgICBjYXNlICdiZXN0Rml0JzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHZhciBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIyO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWNlbWVudCA9IChfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIyID0gb3ZlcmZsb3dzRGF0YS5maWx0ZXIoZCA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhkLnBsYWNlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50U2lkZUF4aXMgPT09IGluaXRpYWxTaWRlQXhpcyB8fFxuICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBiaWFzIHRvIHRoZSBgeWAgc2lkZSBheGlzIGR1ZSB0byBob3Jpem9udGFsXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlYWRpbmcgZGlyZWN0aW9ucyBmYXZvcmluZyBncmVhdGVyIHdpZHRoLlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2lkZUF4aXMgPT09ICd5JztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0pLm1hcChkID0+IFtkLnBsYWNlbWVudCwgZC5vdmVyZmxvd3MuZmlsdGVyKG92ZXJmbG93ID0+IG92ZXJmbG93ID4gMCkucmVkdWNlKChhY2MsIG92ZXJmbG93KSA9PiBhY2MgKyBvdmVyZmxvdywgMCldKS5zb3J0KChhLCBiKSA9PiBhWzFdIC0gYlsxXSlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIyWzBdO1xuICAgICAgICAgICAgICAgIGlmIChwbGFjZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgIHJlc2V0UGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnaW5pdGlhbFBsYWNlbWVudCc6XG4gICAgICAgICAgICAgIHJlc2V0UGxhY2VtZW50ID0gaW5pdGlhbFBsYWNlbWVudDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwbGFjZW1lbnQgIT09IHJlc2V0UGxhY2VtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICAgIHBsYWNlbWVudDogcmVzZXRQbGFjZW1lbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3QpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IG92ZXJmbG93LnRvcCAtIHJlY3QuaGVpZ2h0LFxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGgsXG4gICAgYm90dG9tOiBvdmVyZmxvdy5ib3R0b20gLSByZWN0LmhlaWdodCxcbiAgICBsZWZ0OiBvdmVyZmxvdy5sZWZ0IC0gcmVjdC53aWR0aFxuICB9O1xufVxuZnVuY3Rpb24gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG92ZXJmbG93KSB7XG4gIHJldHVybiBzaWRlcy5zb21lKHNpZGUgPT4gb3ZlcmZsb3dbc2lkZV0gPj0gMCk7XG59XG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdG8gaGlkZSB0aGUgZmxvYXRpbmcgZWxlbWVudCBpbiBhcHBsaWNhYmxlIHNpdHVhdGlvbnMsIHN1Y2ggYXNcbiAqIHdoZW4gaXQgaXMgbm90IGluIHRoZSBzYW1lIGNsaXBwaW5nIGNvbnRleHQgYXMgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2hpZGVcbiAqL1xuY29uc3QgaGlkZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnaGlkZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICByZWN0c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBzdHJhdGVneSA9ICdyZWZlcmVuY2VIaWRkZW4nLFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBzd2l0Y2ggKHN0cmF0ZWd5KSB7XG4gICAgICAgIGNhc2UgJ3JlZmVyZW5jZUhpZGRlbic6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnMsXG4gICAgICAgICAgICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3RzLnJlZmVyZW5jZSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlSGlkZGVuT2Zmc2V0czogb2Zmc2V0cyxcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VIaWRkZW46IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvZmZzZXRzKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnZXNjYXBlZCc6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnMsXG4gICAgICAgICAgICAgIGFsdEJvdW5kYXJ5OiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdHMuZmxvYXRpbmcpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGVzY2FwZWRPZmZzZXRzOiBvZmZzZXRzLFxuICAgICAgICAgICAgICAgIGVzY2FwZWQ6IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvZmZzZXRzKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4ge307XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcbn07XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nUmVjdChyZWN0cykge1xuICBjb25zdCBtaW5YID0gbWluKC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QubGVmdCkpO1xuICBjb25zdCBtaW5ZID0gbWluKC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QudG9wKSk7XG4gIGNvbnN0IG1heFggPSBtYXgoLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5yaWdodCkpO1xuICBjb25zdCBtYXhZID0gbWF4KC4uLnJlY3RzLm1hcChyZWN0ID0+IHJlY3QuYm90dG9tKSk7XG4gIHJldHVybiB7XG4gICAgeDogbWluWCxcbiAgICB5OiBtaW5ZLFxuICAgIHdpZHRoOiBtYXhYIC0gbWluWCxcbiAgICBoZWlnaHQ6IG1heFkgLSBtaW5ZXG4gIH07XG59XG5mdW5jdGlvbiBnZXRSZWN0c0J5TGluZShyZWN0cykge1xuICBjb25zdCBzb3J0ZWRSZWN0cyA9IHJlY3RzLnNsaWNlKCkuc29ydCgoYSwgYikgPT4gYS55IC0gYi55KTtcbiAgY29uc3QgZ3JvdXBzID0gW107XG4gIGxldCBwcmV2UmVjdCA9IG51bGw7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkUmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCByZWN0ID0gc29ydGVkUmVjdHNbaV07XG4gICAgaWYgKCFwcmV2UmVjdCB8fCByZWN0LnkgLSBwcmV2UmVjdC55ID4gcHJldlJlY3QuaGVpZ2h0IC8gMikge1xuICAgICAgZ3JvdXBzLnB1c2goW3JlY3RdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JvdXBzW2dyb3Vwcy5sZW5ndGggLSAxXS5wdXNoKHJlY3QpO1xuICAgIH1cbiAgICBwcmV2UmVjdCA9IHJlY3Q7XG4gIH1cbiAgcmV0dXJuIGdyb3Vwcy5tYXAocmVjdCA9PiByZWN0VG9DbGllbnRSZWN0KGdldEJvdW5kaW5nUmVjdChyZWN0KSkpO1xufVxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdpbmxpbmUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBzdHJhdGVneVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgLy8gQSBNb3VzZUV2ZW50J3MgY2xpZW50e1gsWX0gY29vcmRzIGNhbiBiZSB1cCB0byAyIHBpeGVscyBvZmYgYVxuICAgICAgLy8gQ2xpZW50UmVjdCdzIGJvdW5kcywgZGVzcGl0ZSB0aGUgZXZlbnQgbGlzdGVuZXIgYmVpbmcgdHJpZ2dlcmVkLiBBXG4gICAgICAvLyBwYWRkaW5nIG9mIDIgc2VlbXMgdG8gaGFuZGxlIHRoaXMgaXNzdWUuXG4gICAgICBjb25zdCB7XG4gICAgICAgIHBhZGRpbmcgPSAyLFxuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgbmF0aXZlQ2xpZW50UmVjdHMgPSBBcnJheS5mcm9tKChhd2FpdCAocGxhdGZvcm0uZ2V0Q2xpZW50UmVjdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldENsaWVudFJlY3RzKGVsZW1lbnRzLnJlZmVyZW5jZSkpKSB8fCBbXSk7XG4gICAgICBjb25zdCBjbGllbnRSZWN0cyA9IGdldFJlY3RzQnlMaW5lKG5hdGl2ZUNsaWVudFJlY3RzKTtcbiAgICAgIGNvbnN0IGZhbGxiYWNrID0gcmVjdFRvQ2xpZW50UmVjdChnZXRCb3VuZGluZ1JlY3QobmF0aXZlQ2xpZW50UmVjdHMpKTtcbiAgICAgIGNvbnN0IHBhZGRpbmdPYmplY3QgPSBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpO1xuICAgICAgZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkge1xuICAgICAgICAvLyBUaGVyZSBhcmUgdHdvIHJlY3RzIGFuZCB0aGV5IGFyZSBkaXNqb2luZWQuXG4gICAgICAgIGlmIChjbGllbnRSZWN0cy5sZW5ndGggPT09IDIgJiYgY2xpZW50UmVjdHNbMF0ubGVmdCA+IGNsaWVudFJlY3RzWzFdLnJpZ2h0ICYmIHggIT0gbnVsbCAmJiB5ICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBGaW5kIHRoZSBmaXJzdCByZWN0IGluIHdoaWNoIHRoZSBwb2ludCBpcyBmdWxseSBpbnNpZGUuXG4gICAgICAgICAgcmV0dXJuIGNsaWVudFJlY3RzLmZpbmQocmVjdCA9PiB4ID4gcmVjdC5sZWZ0IC0gcGFkZGluZ09iamVjdC5sZWZ0ICYmIHggPCByZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodCAmJiB5ID4gcmVjdC50b3AgLSBwYWRkaW5nT2JqZWN0LnRvcCAmJiB5IDwgcmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSkgfHwgZmFsbGJhY2s7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGVyZSBhcmUgMiBvciBtb3JlIGNvbm5lY3RlZCByZWN0cy5cbiAgICAgICAgaWYgKGNsaWVudFJlY3RzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgaWYgKGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5Jykge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RSZWN0ID0gY2xpZW50UmVjdHNbMF07XG4gICAgICAgICAgICBjb25zdCBsYXN0UmVjdCA9IGNsaWVudFJlY3RzW2NsaWVudFJlY3RzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgY29uc3QgaXNUb3AgPSBnZXRTaWRlKHBsYWNlbWVudCkgPT09ICd0b3AnO1xuICAgICAgICAgICAgY29uc3QgdG9wID0gZmlyc3RSZWN0LnRvcDtcbiAgICAgICAgICAgIGNvbnN0IGJvdHRvbSA9IGxhc3RSZWN0LmJvdHRvbTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBpc1RvcCA/IGZpcnN0UmVjdC5sZWZ0IDogbGFzdFJlY3QubGVmdDtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0ID0gaXNUb3AgPyBmaXJzdFJlY3QucmlnaHQgOiBsYXN0UmVjdC5yaWdodDtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gYm90dG9tIC0gdG9wO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgICBib3R0b20sXG4gICAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICAgIHJpZ2h0LFxuICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgICB4OiBsZWZ0LFxuICAgICAgICAgICAgICB5OiB0b3BcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGlzTGVmdFNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCkgPT09ICdsZWZ0JztcbiAgICAgICAgICBjb25zdCBtYXhSaWdodCA9IG1heCguLi5jbGllbnRSZWN0cy5tYXAocmVjdCA9PiByZWN0LnJpZ2h0KSk7XG4gICAgICAgICAgY29uc3QgbWluTGVmdCA9IG1pbiguLi5jbGllbnRSZWN0cy5tYXAocmVjdCA9PiByZWN0LmxlZnQpKTtcbiAgICAgICAgICBjb25zdCBtZWFzdXJlUmVjdHMgPSBjbGllbnRSZWN0cy5maWx0ZXIocmVjdCA9PiBpc0xlZnRTaWRlID8gcmVjdC5sZWZ0ID09PSBtaW5MZWZ0IDogcmVjdC5yaWdodCA9PT0gbWF4UmlnaHQpO1xuICAgICAgICAgIGNvbnN0IHRvcCA9IG1lYXN1cmVSZWN0c1swXS50b3A7XG4gICAgICAgICAgY29uc3QgYm90dG9tID0gbWVhc3VyZVJlY3RzW21lYXN1cmVSZWN0cy5sZW5ndGggLSAxXS5ib3R0b207XG4gICAgICAgICAgY29uc3QgbGVmdCA9IG1pbkxlZnQ7XG4gICAgICAgICAgY29uc3QgcmlnaHQgPSBtYXhSaWdodDtcbiAgICAgICAgICBjb25zdCB3aWR0aCA9IHJpZ2h0IC0gbGVmdDtcbiAgICAgICAgICBjb25zdCBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgICByaWdodCxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgeDogbGVmdCxcbiAgICAgICAgICAgIHk6IHRvcFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzZXRSZWN0cyA9IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgICAgIHJlZmVyZW5jZToge1xuICAgICAgICAgIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuICAgICAgICB9LFxuICAgICAgICBmbG9hdGluZzogZWxlbWVudHMuZmxvYXRpbmcsXG4gICAgICAgIHN0cmF0ZWd5XG4gICAgICB9KTtcbiAgICAgIGlmIChyZWN0cy5yZWZlcmVuY2UueCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UueCB8fCByZWN0cy5yZWZlcmVuY2UueSAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UueSB8fCByZWN0cy5yZWZlcmVuY2Uud2lkdGggIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLndpZHRoIHx8IHJlY3RzLnJlZmVyZW5jZS5oZWlnaHQgIT09IHJlc2V0UmVjdHMucmVmZXJlbmNlLmhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICByZWN0czogcmVzZXRSZWN0c1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG4vLyBGb3IgdHlwZSBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSwgdGhlIGBPZmZzZXRPcHRpb25zYCB0eXBlIHdhcyBhbHNvXG4vLyBEZXJpdmFibGUuXG5cbmFzeW5jIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZVRvQ29vcmRzKHN0YXRlLCBvcHRpb25zKSB7XG4gIGNvbnN0IHtcbiAgICBwbGFjZW1lbnQsXG4gICAgcGxhdGZvcm0sXG4gICAgZWxlbWVudHNcbiAgfSA9IHN0YXRlO1xuICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICBjb25zdCBpc1ZlcnRpY2FsID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knO1xuICBjb25zdCBtYWluQXhpc011bHRpID0gWydsZWZ0JywgJ3RvcCddLmluY2x1ZGVzKHNpZGUpID8gLTEgOiAxO1xuICBjb25zdCBjcm9zc0F4aXNNdWx0aSA9IHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxO1xuICBjb25zdCByYXdWYWx1ZSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gIGxldCB7XG4gICAgbWFpbkF4aXMsXG4gICAgY3Jvc3NBeGlzLFxuICAgIGFsaWdubWVudEF4aXNcbiAgfSA9IHR5cGVvZiByYXdWYWx1ZSA9PT0gJ251bWJlcicgPyB7XG4gICAgbWFpbkF4aXM6IHJhd1ZhbHVlLFxuICAgIGNyb3NzQXhpczogMCxcbiAgICBhbGlnbm1lbnRBeGlzOiBudWxsXG4gIH0gOiB7XG4gICAgbWFpbkF4aXM6IHJhd1ZhbHVlLm1haW5BeGlzIHx8IDAsXG4gICAgY3Jvc3NBeGlzOiByYXdWYWx1ZS5jcm9zc0F4aXMgfHwgMCxcbiAgICBhbGlnbm1lbnRBeGlzOiByYXdWYWx1ZS5hbGlnbm1lbnRBeGlzXG4gIH07XG4gIGlmIChhbGlnbm1lbnQgJiYgdHlwZW9mIGFsaWdubWVudEF4aXMgPT09ICdudW1iZXInKSB7XG4gICAgY3Jvc3NBeGlzID0gYWxpZ25tZW50ID09PSAnZW5kJyA/IGFsaWdubWVudEF4aXMgKiAtMSA6IGFsaWdubWVudEF4aXM7XG4gIH1cbiAgcmV0dXJuIGlzVmVydGljYWwgPyB7XG4gICAgeDogY3Jvc3NBeGlzICogY3Jvc3NBeGlzTXVsdGksXG4gICAgeTogbWFpbkF4aXMgKiBtYWluQXhpc011bHRpXG4gIH0gOiB7XG4gICAgeDogbWFpbkF4aXMgKiBtYWluQXhpc011bHRpLFxuICAgIHk6IGNyb3NzQXhpcyAqIGNyb3NzQXhpc011bHRpXG4gIH07XG59XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0gMDtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkb2Zmc2UsIF9taWRkbGV3YXJlRGF0YSRhcnJvdztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICBtaWRkbGV3YXJlRGF0YVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3QgZGlmZkNvb3JkcyA9IGF3YWl0IGNvbnZlcnRWYWx1ZVRvQ29vcmRzKHN0YXRlLCBvcHRpb25zKTtcblxuICAgICAgLy8gSWYgdGhlIHBsYWNlbWVudCBpcyB0aGUgc2FtZSBhbmQgdGhlIGFycm93IGNhdXNlZCBhbiBhbGlnbm1lbnQgb2Zmc2V0XG4gICAgICAvLyB0aGVuIHdlIGRvbid0IG5lZWQgdG8gY2hhbmdlIHRoZSBwb3NpdGlvbmluZyBjb29yZGluYXRlcy5cbiAgICAgIGlmIChwbGFjZW1lbnQgPT09ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlLnBsYWNlbWVudCkgJiYgKF9taWRkbGV3YXJlRGF0YSRhcnJvdyA9IG1pZGRsZXdhcmVEYXRhLmFycm93KSAhPSBudWxsICYmIF9taWRkbGV3YXJlRGF0YSRhcnJvdy5hbGlnbm1lbnRPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeDogeCArIGRpZmZDb29yZHMueCxcbiAgICAgICAgeTogeSArIGRpZmZDb29yZHMueSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIC4uLmRpZmZDb29yZHMsXG4gICAgICAgICAgcGxhY2VtZW50XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzaGlmdCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnRcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFpbkF4aXM6IGNoZWNrTWFpbkF4aXMgPSB0cnVlLFxuICAgICAgICBjcm9zc0F4aXM6IGNoZWNrQ3Jvc3NBeGlzID0gZmFsc2UsXG4gICAgICAgIGxpbWl0ZXIgPSB7XG4gICAgICAgICAgZm46IF9yZWYgPT4ge1xuICAgICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgfSA9IF9yZWY7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICB5XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9O1xuICAgICAgY29uc3Qgb3ZlcmZsb3cgPSBhd2FpdCBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgZGV0ZWN0T3ZlcmZsb3dPcHRpb25zKTtcbiAgICAgIGNvbnN0IGNyb3NzQXhpcyA9IGdldFNpZGVBeGlzKGdldFNpZGUocGxhY2VtZW50KSk7XG4gICAgICBjb25zdCBtYWluQXhpcyA9IGdldE9wcG9zaXRlQXhpcyhjcm9zc0F4aXMpO1xuICAgICAgbGV0IG1haW5BeGlzQ29vcmQgPSBjb29yZHNbbWFpbkF4aXNdO1xuICAgICAgbGV0IGNyb3NzQXhpc0Nvb3JkID0gY29vcmRzW2Nyb3NzQXhpc107XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBjb25zdCBtaW5TaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgICAgICBjb25zdCBtYXhTaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICAgICAgY29uc3QgbWluID0gbWFpbkF4aXNDb29yZCArIG92ZXJmbG93W21pblNpZGVdO1xuICAgICAgICBjb25zdCBtYXggPSBtYWluQXhpc0Nvb3JkIC0gb3ZlcmZsb3dbbWF4U2lkZV07XG4gICAgICAgIG1haW5BeGlzQ29vcmQgPSBjbGFtcChtaW4sIG1haW5BeGlzQ29vcmQsIG1heCk7XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgY29uc3QgbWluU2lkZSA9IGNyb3NzQXhpcyA9PT0gJ3knID8gJ3RvcCcgOiAnbGVmdCc7XG4gICAgICAgIGNvbnN0IG1heFNpZGUgPSBjcm9zc0F4aXMgPT09ICd5JyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICAgICAgY29uc3QgbWluID0gY3Jvc3NBeGlzQ29vcmQgKyBvdmVyZmxvd1ttaW5TaWRlXTtcbiAgICAgICAgY29uc3QgbWF4ID0gY3Jvc3NBeGlzQ29vcmQgLSBvdmVyZmxvd1ttYXhTaWRlXTtcbiAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBjbGFtcChtaW4sIGNyb3NzQXhpc0Nvb3JkLCBtYXgpO1xuICAgICAgfVxuICAgICAgY29uc3QgbGltaXRlZENvb3JkcyA9IGxpbWl0ZXIuZm4oe1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgW21haW5BeGlzXTogbWFpbkF4aXNDb29yZCxcbiAgICAgICAgW2Nyb3NzQXhpc106IGNyb3NzQXhpc0Nvb3JkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmxpbWl0ZWRDb29yZHMsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB4OiBsaW1pdGVkQ29vcmRzLnggLSB4LFxuICAgICAgICAgIHk6IGxpbWl0ZWRDb29yZHMueSAtIHksXG4gICAgICAgICAgZW5hYmxlZDoge1xuICAgICAgICAgICAgW21haW5BeGlzXTogY2hlY2tNYWluQXhpcyxcbiAgICAgICAgICAgIFtjcm9zc0F4aXNdOiBjaGVja0Nyb3NzQXhpc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuLyoqXG4gKiBCdWlsdC1pbiBgbGltaXRlcmAgdGhhdCB3aWxsIHN0b3AgYHNoaWZ0KClgIGF0IGEgY2VydGFpbiBwb2ludC5cbiAqL1xuY29uc3QgbGltaXRTaGlmdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBvcHRpb25zLFxuICAgIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG9mZnNldCA9IDAsXG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWVcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBjb29yZHMgPSB7XG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH07XG4gICAgICBjb25zdCBjcm9zc0F4aXMgPSBnZXRTaWRlQXhpcyhwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgbWFpbkF4aXMgPSBnZXRPcHBvc2l0ZUF4aXMoY3Jvc3NBeGlzKTtcbiAgICAgIGxldCBtYWluQXhpc0Nvb3JkID0gY29vcmRzW21haW5BeGlzXTtcbiAgICAgIGxldCBjcm9zc0F4aXNDb29yZCA9IGNvb3Jkc1tjcm9zc0F4aXNdO1xuICAgICAgY29uc3QgcmF3T2Zmc2V0ID0gZXZhbHVhdGUob2Zmc2V0LCBzdGF0ZSk7XG4gICAgICBjb25zdCBjb21wdXRlZE9mZnNldCA9IHR5cGVvZiByYXdPZmZzZXQgPT09ICdudW1iZXInID8ge1xuICAgICAgICBtYWluQXhpczogcmF3T2Zmc2V0LFxuICAgICAgICBjcm9zc0F4aXM6IDBcbiAgICAgIH0gOiB7XG4gICAgICAgIG1haW5BeGlzOiAwLFxuICAgICAgICBjcm9zc0F4aXM6IDAsXG4gICAgICAgIC4uLnJhd09mZnNldFxuICAgICAgfTtcbiAgICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICAgIGNvbnN0IGxlbiA9IG1haW5BeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgICAgIGNvbnN0IGxpbWl0TWluID0gcmVjdHMucmVmZXJlbmNlW21haW5BeGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbl0gKyBjb21wdXRlZE9mZnNldC5tYWluQXhpcztcbiAgICAgICAgY29uc3QgbGltaXRNYXggPSByZWN0cy5yZWZlcmVuY2VbbWFpbkF4aXNdICsgcmVjdHMucmVmZXJlbmNlW2xlbl0gLSBjb21wdXRlZE9mZnNldC5tYWluQXhpcztcbiAgICAgICAgaWYgKG1haW5BeGlzQ29vcmQgPCBsaW1pdE1pbikge1xuICAgICAgICAgIG1haW5BeGlzQ29vcmQgPSBsaW1pdE1pbjtcbiAgICAgICAgfSBlbHNlIGlmIChtYWluQXhpc0Nvb3JkID4gbGltaXRNYXgpIHtcbiAgICAgICAgICBtYWluQXhpc0Nvb3JkID0gbGltaXRNYXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaGVja0Nyb3NzQXhpcykge1xuICAgICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJG9mZnNlLCBfbWlkZGxld2FyZURhdGEkb2Zmc2UyO1xuICAgICAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgICAgICBjb25zdCBpc09yaWdpblNpZGUgPSBbJ3RvcCcsICdsZWZ0J10uaW5jbHVkZXMoZ2V0U2lkZShwbGFjZW1lbnQpKTtcbiAgICAgICAgY29uc3QgbGltaXRNaW4gPSByZWN0cy5yZWZlcmVuY2VbY3Jvc3NBeGlzXSAtIHJlY3RzLmZsb2F0aW5nW2xlbl0gKyAoaXNPcmlnaW5TaWRlID8gKChfbWlkZGxld2FyZURhdGEkb2Zmc2UgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2VbY3Jvc3NBeGlzXSkgfHwgMCA6IDApICsgKGlzT3JpZ2luU2lkZSA/IDAgOiBjb21wdXRlZE9mZnNldC5jcm9zc0F4aXMpO1xuICAgICAgICBjb25zdCBsaW1pdE1heCA9IHJlY3RzLnJlZmVyZW5jZVtjcm9zc0F4aXNdICsgcmVjdHMucmVmZXJlbmNlW2xlbl0gKyAoaXNPcmlnaW5TaWRlID8gMCA6ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlMiA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZTJbY3Jvc3NBeGlzXSkgfHwgMCkgLSAoaXNPcmlnaW5TaWRlID8gY29tcHV0ZWRPZmZzZXQuY3Jvc3NBeGlzIDogMCk7XG4gICAgICAgIGlmIChjcm9zc0F4aXNDb29yZCA8IGxpbWl0TWluKSB7XG4gICAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBsaW1pdE1pbjtcbiAgICAgICAgfSBlbHNlIGlmIChjcm9zc0F4aXNDb29yZCA+IGxpbWl0TWF4KSB7XG4gICAgICAgICAgY3Jvc3NBeGlzQ29vcmQgPSBsaW1pdE1heDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW21haW5BeGlzXTogbWFpbkF4aXNDb29yZCxcbiAgICAgICAgW2Nyb3NzQXhpc106IGNyb3NzQXhpc0Nvb3JkXG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IFx1MjAxNFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc2l6ZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YSwgX3N0YXRlJG1pZGRsZXdhcmVEYXRhMjtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGxhY2VtZW50LFxuICAgICAgICByZWN0cyxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGFwcGx5ID0gKCkgPT4ge30sXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBpc1lBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knO1xuICAgICAgY29uc3Qge1xuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgICB9ID0gcmVjdHMuZmxvYXRpbmc7XG4gICAgICBsZXQgaGVpZ2h0U2lkZTtcbiAgICAgIGxldCB3aWR0aFNpZGU7XG4gICAgICBpZiAoc2lkZSA9PT0gJ3RvcCcgfHwgc2lkZSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgaGVpZ2h0U2lkZSA9IHNpZGU7XG4gICAgICAgIHdpZHRoU2lkZSA9IGFsaWdubWVudCA9PT0gKChhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSkpID8gJ3N0YXJ0JyA6ICdlbmQnKSA/ICdsZWZ0JyA6ICdyaWdodCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aWR0aFNpZGUgPSBzaWRlO1xuICAgICAgICBoZWlnaHRTaWRlID0gYWxpZ25tZW50ID09PSAnZW5kJyA/ICd0b3AnIDogJ2JvdHRvbSc7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQgPSBoZWlnaHQgLSBvdmVyZmxvdy50b3AgLSBvdmVyZmxvdy5ib3R0b207XG4gICAgICBjb25zdCBtYXhpbXVtQ2xpcHBpbmdXaWR0aCA9IHdpZHRoIC0gb3ZlcmZsb3cubGVmdCAtIG92ZXJmbG93LnJpZ2h0O1xuICAgICAgY29uc3Qgb3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQgPSBtaW4oaGVpZ2h0IC0gb3ZlcmZsb3dbaGVpZ2h0U2lkZV0sIG1heGltdW1DbGlwcGluZ0hlaWdodCk7XG4gICAgICBjb25zdCBvdmVyZmxvd0F2YWlsYWJsZVdpZHRoID0gbWluKHdpZHRoIC0gb3ZlcmZsb3dbd2lkdGhTaWRlXSwgbWF4aW11bUNsaXBwaW5nV2lkdGgpO1xuICAgICAgY29uc3Qgbm9TaGlmdCA9ICFzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdDtcbiAgICAgIGxldCBhdmFpbGFibGVIZWlnaHQgPSBvdmVyZmxvd0F2YWlsYWJsZUhlaWdodDtcbiAgICAgIGxldCBhdmFpbGFibGVXaWR0aCA9IG92ZXJmbG93QXZhaWxhYmxlV2lkdGg7XG4gICAgICBpZiAoKF9zdGF0ZSRtaWRkbGV3YXJlRGF0YSA9IHN0YXRlLm1pZGRsZXdhcmVEYXRhLnNoaWZ0KSAhPSBudWxsICYmIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YS5lbmFibGVkLngpIHtcbiAgICAgICAgYXZhaWxhYmxlV2lkdGggPSBtYXhpbXVtQ2xpcHBpbmdXaWR0aDtcbiAgICAgIH1cbiAgICAgIGlmICgoX3N0YXRlJG1pZGRsZXdhcmVEYXRhMiA9IHN0YXRlLm1pZGRsZXdhcmVEYXRhLnNoaWZ0KSAhPSBudWxsICYmIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTIuZW5hYmxlZC55KSB7XG4gICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IG1heGltdW1DbGlwcGluZ0hlaWdodDtcbiAgICAgIH1cbiAgICAgIGlmIChub1NoaWZ0ICYmICFhbGlnbm1lbnQpIHtcbiAgICAgICAgY29uc3QgeE1pbiA9IG1heChvdmVyZmxvdy5sZWZ0LCAwKTtcbiAgICAgICAgY29uc3QgeE1heCA9IG1heChvdmVyZmxvdy5yaWdodCwgMCk7XG4gICAgICAgIGNvbnN0IHlNaW4gPSBtYXgob3ZlcmZsb3cudG9wLCAwKTtcbiAgICAgICAgY29uc3QgeU1heCA9IG1heChvdmVyZmxvdy5ib3R0b20sIDApO1xuICAgICAgICBpZiAoaXNZQXhpcykge1xuICAgICAgICAgIGF2YWlsYWJsZVdpZHRoID0gd2lkdGggLSAyICogKHhNaW4gIT09IDAgfHwgeE1heCAhPT0gMCA/IHhNaW4gKyB4TWF4IDogbWF4KG92ZXJmbG93LmxlZnQsIG92ZXJmbG93LnJpZ2h0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXZhaWxhYmxlSGVpZ2h0ID0gaGVpZ2h0IC0gMiAqICh5TWluICE9PSAwIHx8IHlNYXggIT09IDAgPyB5TWluICsgeU1heCA6IG1heChvdmVyZmxvdy50b3AsIG92ZXJmbG93LmJvdHRvbSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBhd2FpdCBhcHBseSh7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBhdmFpbGFibGVXaWR0aCxcbiAgICAgICAgYXZhaWxhYmxlSGVpZ2h0XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG5leHREaW1lbnNpb25zID0gYXdhaXQgcGxhdGZvcm0uZ2V0RGltZW5zaW9ucyhlbGVtZW50cy5mbG9hdGluZyk7XG4gICAgICBpZiAod2lkdGggIT09IG5leHREaW1lbnNpb25zLndpZHRoIHx8IGhlaWdodCAhPT0gbmV4dERpbWVuc2lvbnMuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHJlY3RzOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgc2hpZnQsIHNpemUgfTtcbiIsICJmdW5jdGlvbiBoYXNXaW5kb3coKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbn1cbmZ1bmN0aW9uIGdldE5vZGVOYW1lKG5vZGUpIHtcbiAgaWYgKGlzTm9kZShub2RlKSkge1xuICAgIHJldHVybiAobm9kZS5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgfVxuICAvLyBNb2NrZWQgbm9kZXMgaW4gdGVzdGluZyBlbnZpcm9ubWVudHMgbWF5IG5vdCBiZSBpbnN0YW5jZXMgb2YgTm9kZS4gQnlcbiAgLy8gcmV0dXJuaW5nIGAjZG9jdW1lbnRgIGFuIGluZmluaXRlIGxvb3Agd29uJ3Qgb2NjdXIuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjMxN1xuICByZXR1cm4gJyNkb2N1bWVudCc7XG59XG5mdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICB2YXIgX25vZGUkb3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIChub2RlID09IG51bGwgfHwgKF9ub2RlJG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSB8fCB3aW5kb3c7XG59XG5mdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQobm9kZSkge1xuICB2YXIgX3JlZjtcbiAgcmV0dXJuIChfcmVmID0gKGlzTm9kZShub2RlKSA/IG5vZGUub3duZXJEb2N1bWVudCA6IG5vZGUuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9yZWYuZG9jdW1lbnRFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNOb2RlKHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgTm9kZSB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuTm9kZTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkhUTUxFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNTaGFkb3dSb290KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkgfHwgdHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLlNoYWRvd1Jvb3Q7XG59XG5mdW5jdGlvbiBpc092ZXJmbG93RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICBvdmVyZmxvdyxcbiAgICBvdmVyZmxvd1gsXG4gICAgb3ZlcmZsb3dZLFxuICAgIGRpc3BsYXlcbiAgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkgJiYgIVsnaW5saW5lJywgJ2NvbnRlbnRzJ10uaW5jbHVkZXMoZGlzcGxheSk7XG59XG5mdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBbJ3RhYmxlJywgJ3RkJywgJ3RoJ10uaW5jbHVkZXMoZ2V0Tm9kZU5hbWUoZWxlbWVudCkpO1xufVxuZnVuY3Rpb24gaXNUb3BMYXllcihlbGVtZW50KSB7XG4gIHJldHVybiBbJzpwb3BvdmVyLW9wZW4nLCAnOm1vZGFsJ10uc29tZShzZWxlY3RvciA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBlbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gaXNDb250YWluaW5nQmxvY2soZWxlbWVudE9yQ3NzKSB7XG4gIGNvbnN0IHdlYmtpdCA9IGlzV2ViS2l0KCk7XG4gIGNvbnN0IGNzcyA9IGlzRWxlbWVudChlbGVtZW50T3JDc3MpID8gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50T3JDc3MpIDogZWxlbWVudE9yQ3NzO1xuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gIHJldHVybiBjc3MudHJhbnNmb3JtICE9PSAnbm9uZScgfHwgY3NzLnBlcnNwZWN0aXZlICE9PSAnbm9uZScgfHwgKGNzcy5jb250YWluZXJUeXBlID8gY3NzLmNvbnRhaW5lclR5cGUgIT09ICdub3JtYWwnIDogZmFsc2UpIHx8ICF3ZWJraXQgJiYgKGNzcy5iYWNrZHJvcEZpbHRlciA/IGNzcy5iYWNrZHJvcEZpbHRlciAhPT0gJ25vbmUnIDogZmFsc2UpIHx8ICF3ZWJraXQgJiYgKGNzcy5maWx0ZXIgPyBjc3MuZmlsdGVyICE9PSAnbm9uZScgOiBmYWxzZSkgfHwgWyd0cmFuc2Zvcm0nLCAncGVyc3BlY3RpdmUnLCAnZmlsdGVyJ10uc29tZSh2YWx1ZSA9PiAoY3NzLndpbGxDaGFuZ2UgfHwgJycpLmluY2x1ZGVzKHZhbHVlKSkgfHwgWydwYWludCcsICdsYXlvdXQnLCAnc3RyaWN0JywgJ2NvbnRlbnQnXS5zb21lKHZhbHVlID0+IChjc3MuY29udGFpbiB8fCAnJykuaW5jbHVkZXModmFsdWUpKTtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKGN1cnJlbnROb2RlKSkge1xuICAgIGlmIChpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2UgaWYgKGlzVG9wTGF5ZXIoY3VycmVudE5vZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzV2ViS2l0KCkge1xuICBpZiAodHlwZW9mIENTUyA9PT0gJ3VuZGVmaW5lZCcgfHwgIUNTUy5zdXBwb3J0cykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gQ1NTLnN1cHBvcnRzKCctd2Via2l0LWJhY2tkcm9wLWZpbHRlcicsICdub25lJyk7XG59XG5mdW5jdGlvbiBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUobm9kZSkge1xuICByZXR1cm4gWydodG1sJywgJ2JvZHknLCAnI2RvY3VtZW50J10uaW5jbHVkZXMoZ2V0Tm9kZU5hbWUobm9kZSkpO1xufVxuZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn1cbmZ1bmN0aW9uIGdldE5vZGVTY3JvbGwoZWxlbWVudCkge1xuICBpZiAoaXNFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxYLFxuICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxZXG4gIH07XG59XG5mdW5jdGlvbiBnZXRQYXJlbnROb2RlKG5vZGUpIHtcbiAgaWYgKGdldE5vZGVOYW1lKG5vZGUpID09PSAnaHRtbCcpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICBjb25zdCByZXN1bHQgPVxuICAvLyBTdGVwIGludG8gdGhlIHNoYWRvdyBET00gb2YgdGhlIHBhcmVudCBvZiBhIHNsb3R0ZWQgbm9kZS5cbiAgbm9kZS5hc3NpZ25lZFNsb3QgfHxcbiAgLy8gRE9NIEVsZW1lbnQgZGV0ZWN0ZWQuXG4gIG5vZGUucGFyZW50Tm9kZSB8fFxuICAvLyBTaGFkb3dSb290IGRldGVjdGVkLlxuICBpc1NoYWRvd1Jvb3Qobm9kZSkgJiYgbm9kZS5ob3N0IHx8XG4gIC8vIEZhbGxiYWNrLlxuICBnZXREb2N1bWVudEVsZW1lbnQobm9kZSk7XG4gIHJldHVybiBpc1NoYWRvd1Jvb3QocmVzdWx0KSA/IHJlc3VsdC5ob3N0IDogcmVzdWx0O1xufVxuZnVuY3Rpb24gZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3Iobm9kZSkge1xuICBjb25zdCBwYXJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShub2RlKTtcbiAgaWYgKGlzTGFzdFRyYXZlcnNhYmxlTm9kZShwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQgPyBub2RlLm93bmVyRG9jdW1lbnQuYm9keSA6IG5vZGUuYm9keTtcbiAgfVxuICBpZiAoaXNIVE1MRWxlbWVudChwYXJlbnROb2RlKSAmJiBpc092ZXJmbG93RWxlbWVudChwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBwYXJlbnROb2RlO1xuICB9XG4gIHJldHVybiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvcihwYXJlbnROb2RlKTtcbn1cbmZ1bmN0aW9uIGdldE92ZXJmbG93QW5jZXN0b3JzKG5vZGUsIGxpc3QsIHRyYXZlcnNlSWZyYW1lcykge1xuICB2YXIgX25vZGUkb3duZXJEb2N1bWVudDI7XG4gIGlmIChsaXN0ID09PSB2b2lkIDApIHtcbiAgICBsaXN0ID0gW107XG4gIH1cbiAgaWYgKHRyYXZlcnNlSWZyYW1lcyA9PT0gdm9pZCAwKSB7XG4gICAgdHJhdmVyc2VJZnJhbWVzID0gdHJ1ZTtcbiAgfVxuICBjb25zdCBzY3JvbGxhYmxlQW5jZXN0b3IgPSBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKTtcbiAgY29uc3QgaXNCb2R5ID0gc2Nyb2xsYWJsZUFuY2VzdG9yID09PSAoKF9ub2RlJG93bmVyRG9jdW1lbnQyID0gbm9kZS5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX25vZGUkb3duZXJEb2N1bWVudDIuYm9keSk7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhzY3JvbGxhYmxlQW5jZXN0b3IpO1xuICBpZiAoaXNCb2R5KSB7XG4gICAgY29uc3QgZnJhbWVFbGVtZW50ID0gZ2V0RnJhbWVFbGVtZW50KHdpbik7XG4gICAgcmV0dXJuIGxpc3QuY29uY2F0KHdpbiwgd2luLnZpc3VhbFZpZXdwb3J0IHx8IFtdLCBpc092ZXJmbG93RWxlbWVudChzY3JvbGxhYmxlQW5jZXN0b3IpID8gc2Nyb2xsYWJsZUFuY2VzdG9yIDogW10sIGZyYW1lRWxlbWVudCAmJiB0cmF2ZXJzZUlmcmFtZXMgPyBnZXRPdmVyZmxvd0FuY2VzdG9ycyhmcmFtZUVsZW1lbnQpIDogW10pO1xuICB9XG4gIHJldHVybiBsaXN0LmNvbmNhdChzY3JvbGxhYmxlQW5jZXN0b3IsIGdldE92ZXJmbG93QW5jZXN0b3JzKHNjcm9sbGFibGVBbmNlc3RvciwgW10sIHRyYXZlcnNlSWZyYW1lcykpO1xufVxuZnVuY3Rpb24gZ2V0RnJhbWVFbGVtZW50KHdpbikge1xuICByZXR1cm4gd2luLnBhcmVudCAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yod2luLnBhcmVudCkgPyB3aW4uZnJhbWVFbGVtZW50IDogbnVsbDtcbn1cblxuZXhwb3J0IHsgZ2V0Q29tcHV0ZWRTdHlsZSwgZ2V0Q29udGFpbmluZ0Jsb2NrLCBnZXREb2N1bWVudEVsZW1lbnQsIGdldEZyYW1lRWxlbWVudCwgZ2V0TmVhcmVzdE92ZXJmbG93QW5jZXN0b3IsIGdldE5vZGVOYW1lLCBnZXROb2RlU2Nyb2xsLCBnZXRPdmVyZmxvd0FuY2VzdG9ycywgZ2V0UGFyZW50Tm9kZSwgZ2V0V2luZG93LCBpc0NvbnRhaW5pbmdCbG9jaywgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50LCBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUsIGlzTm9kZSwgaXNPdmVyZmxvd0VsZW1lbnQsIGlzU2hhZG93Um9vdCwgaXNUYWJsZUVsZW1lbnQsIGlzVG9wTGF5ZXIsIGlzV2ViS2l0IH07XG4iLCAiaW1wb3J0IHsgcmVjdFRvQ2xpZW50UmVjdCwgZGV0ZWN0T3ZlcmZsb3cgYXMgZGV0ZWN0T3ZlcmZsb3ckMSwgb2Zmc2V0IGFzIG9mZnNldCQxLCBhdXRvUGxhY2VtZW50IGFzIGF1dG9QbGFjZW1lbnQkMSwgc2hpZnQgYXMgc2hpZnQkMSwgZmxpcCBhcyBmbGlwJDEsIHNpemUgYXMgc2l6ZSQxLCBoaWRlIGFzIGhpZGUkMSwgYXJyb3cgYXMgYXJyb3ckMSwgaW5saW5lIGFzIGlubGluZSQxLCBsaW1pdFNoaWZ0IGFzIGxpbWl0U2hpZnQkMSwgY29tcHV0ZVBvc2l0aW9uIGFzIGNvbXB1dGVQb3NpdGlvbiQxIH0gZnJvbSAnQGZsb2F0aW5nLXVpL2NvcmUnO1xuaW1wb3J0IHsgcm91bmQsIGNyZWF0ZUNvb3JkcywgbWF4LCBtaW4sIGZsb29yIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcbmltcG9ydCB7IGdldENvbXB1dGVkU3R5bGUsIGlzSFRNTEVsZW1lbnQsIGlzRWxlbWVudCwgZ2V0V2luZG93LCBpc1dlYktpdCwgZ2V0RnJhbWVFbGVtZW50LCBnZXROb2RlU2Nyb2xsLCBnZXREb2N1bWVudEVsZW1lbnQsIGlzVG9wTGF5ZXIsIGdldE5vZGVOYW1lLCBpc092ZXJmbG93RWxlbWVudCwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMsIGdldFBhcmVudE5vZGUsIGlzTGFzdFRyYXZlcnNhYmxlTm9kZSwgaXNDb250YWluaW5nQmxvY2ssIGlzVGFibGVFbGVtZW50LCBnZXRDb250YWluaW5nQmxvY2sgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcbmV4cG9ydCB7IGdldE92ZXJmbG93QW5jZXN0b3JzIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzL2RvbSc7XG5cbmZ1bmN0aW9uIGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCkge1xuICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAvLyBJbiB0ZXN0aW5nIGVudmlyb25tZW50cywgdGhlIGB3aWR0aGAgYW5kIGBoZWlnaHRgIHByb3BlcnRpZXMgYXJlIGVtcHR5XG4gIC8vIHN0cmluZ3MgZm9yIFNWRyBlbGVtZW50cywgcmV0dXJuaW5nIE5hTi4gRmFsbGJhY2sgdG8gYDBgIGluIHRoaXMgY2FzZS5cbiAgbGV0IHdpZHRoID0gcGFyc2VGbG9hdChjc3Mud2lkdGgpIHx8IDA7XG4gIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGNzcy5oZWlnaHQpIHx8IDA7XG4gIGNvbnN0IGhhc09mZnNldCA9IGlzSFRNTEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IG9mZnNldFdpZHRoID0gaGFzT2Zmc2V0ID8gZWxlbWVudC5vZmZzZXRXaWR0aCA6IHdpZHRoO1xuICBjb25zdCBvZmZzZXRIZWlnaHQgPSBoYXNPZmZzZXQgPyBlbGVtZW50Lm9mZnNldEhlaWdodCA6IGhlaWdodDtcbiAgY29uc3Qgc2hvdWxkRmFsbGJhY2sgPSByb3VuZCh3aWR0aCkgIT09IG9mZnNldFdpZHRoIHx8IHJvdW5kKGhlaWdodCkgIT09IG9mZnNldEhlaWdodDtcbiAgaWYgKHNob3VsZEZhbGxiYWNrKSB7XG4gICAgd2lkdGggPSBvZmZzZXRXaWR0aDtcbiAgICBoZWlnaHQgPSBvZmZzZXRIZWlnaHQ7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgJDogc2hvdWxkRmFsbGJhY2tcbiAgfTtcbn1cblxuZnVuY3Rpb24gdW53cmFwRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiAhaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudC5jb250ZXh0RWxlbWVudCA6IGVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldFNjYWxlKGVsZW1lbnQpIHtcbiAgY29uc3QgZG9tRWxlbWVudCA9IHVud3JhcEVsZW1lbnQoZWxlbWVudCk7XG4gIGlmICghaXNIVE1MRWxlbWVudChkb21FbGVtZW50KSkge1xuICAgIHJldHVybiBjcmVhdGVDb29yZHMoMSk7XG4gIH1cbiAgY29uc3QgcmVjdCA9IGRvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgJFxuICB9ID0gZ2V0Q3NzRGltZW5zaW9ucyhkb21FbGVtZW50KTtcbiAgbGV0IHggPSAoJCA/IHJvdW5kKHJlY3Qud2lkdGgpIDogcmVjdC53aWR0aCkgLyB3aWR0aDtcbiAgbGV0IHkgPSAoJCA/IHJvdW5kKHJlY3QuaGVpZ2h0KSA6IHJlY3QuaGVpZ2h0KSAvIGhlaWdodDtcblxuICAvLyAwLCBOYU4sIG9yIEluZmluaXR5IHNob3VsZCBhbHdheXMgZmFsbGJhY2sgdG8gMS5cblxuICBpZiAoIXggfHwgIU51bWJlci5pc0Zpbml0ZSh4KSkge1xuICAgIHggPSAxO1xuICB9XG4gIGlmICgheSB8fCAhTnVtYmVyLmlzRmluaXRlKHkpKSB7XG4gICAgeSA9IDE7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuY29uc3Qgbm9PZmZzZXRzID0gLyojX19QVVJFX18qL2NyZWF0ZUNvb3JkcygwKTtcbmZ1bmN0aW9uIGdldFZpc3VhbE9mZnNldHMoZWxlbWVudCkge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGlmICghaXNXZWJLaXQoKSB8fCAhd2luLnZpc3VhbFZpZXdwb3J0KSB7XG4gICAgcmV0dXJuIG5vT2Zmc2V0cztcbiAgfVxuICByZXR1cm4ge1xuICAgIHg6IHdpbi52aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0LFxuICAgIHk6IHdpbi52aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3BcbiAgfTtcbn1cbmZ1bmN0aW9uIHNob3VsZEFkZFZpc3VhbE9mZnNldHMoZWxlbWVudCwgaXNGaXhlZCwgZmxvYXRpbmdPZmZzZXRQYXJlbnQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuICBpZiAoIWZsb2F0aW5nT2Zmc2V0UGFyZW50IHx8IGlzRml4ZWQgJiYgZmxvYXRpbmdPZmZzZXRQYXJlbnQgIT09IGdldFdpbmRvdyhlbGVtZW50KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gaXNGaXhlZDtcbn1cblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGluY2x1ZGVTY2FsZSwgaXNGaXhlZFN0cmF0ZWd5LCBvZmZzZXRQYXJlbnQpIHtcbiAgaWYgKGluY2x1ZGVTY2FsZSA9PT0gdm9pZCAwKSB7XG4gICAgaW5jbHVkZVNjYWxlID0gZmFsc2U7XG4gIH1cbiAgaWYgKGlzRml4ZWRTdHJhdGVneSA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZFN0cmF0ZWd5ID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgY2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIGNvbnN0IGRvbUVsZW1lbnQgPSB1bndyYXBFbGVtZW50KGVsZW1lbnQpO1xuICBsZXQgc2NhbGUgPSBjcmVhdGVDb29yZHMoMSk7XG4gIGlmIChpbmNsdWRlU2NhbGUpIHtcbiAgICBpZiAob2Zmc2V0UGFyZW50KSB7XG4gICAgICBpZiAoaXNFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgICAgc2NhbGUgPSBnZXRTY2FsZShvZmZzZXRQYXJlbnQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzY2FsZSA9IGdldFNjYWxlKGVsZW1lbnQpO1xuICAgIH1cbiAgfVxuICBjb25zdCB2aXN1YWxPZmZzZXRzID0gc2hvdWxkQWRkVmlzdWFsT2Zmc2V0cyhkb21FbGVtZW50LCBpc0ZpeGVkU3RyYXRlZ3ksIG9mZnNldFBhcmVudCkgPyBnZXRWaXN1YWxPZmZzZXRzKGRvbUVsZW1lbnQpIDogY3JlYXRlQ29vcmRzKDApO1xuICBsZXQgeCA9IChjbGllbnRSZWN0LmxlZnQgKyB2aXN1YWxPZmZzZXRzLngpIC8gc2NhbGUueDtcbiAgbGV0IHkgPSAoY2xpZW50UmVjdC50b3AgKyB2aXN1YWxPZmZzZXRzLnkpIC8gc2NhbGUueTtcbiAgbGV0IHdpZHRoID0gY2xpZW50UmVjdC53aWR0aCAvIHNjYWxlLng7XG4gIGxldCBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodCAvIHNjYWxlLnk7XG4gIGlmIChkb21FbGVtZW50KSB7XG4gICAgY29uc3Qgd2luID0gZ2V0V2luZG93KGRvbUVsZW1lbnQpO1xuICAgIGNvbnN0IG9mZnNldFdpbiA9IG9mZnNldFBhcmVudCAmJiBpc0VsZW1lbnQob2Zmc2V0UGFyZW50KSA/IGdldFdpbmRvdyhvZmZzZXRQYXJlbnQpIDogb2Zmc2V0UGFyZW50O1xuICAgIGxldCBjdXJyZW50V2luID0gd2luO1xuICAgIGxldCBjdXJyZW50SUZyYW1lID0gZ2V0RnJhbWVFbGVtZW50KGN1cnJlbnRXaW4pO1xuICAgIHdoaWxlIChjdXJyZW50SUZyYW1lICYmIG9mZnNldFBhcmVudCAmJiBvZmZzZXRXaW4gIT09IGN1cnJlbnRXaW4pIHtcbiAgICAgIGNvbnN0IGlmcmFtZVNjYWxlID0gZ2V0U2NhbGUoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBpZnJhbWVSZWN0ID0gY3VycmVudElGcmFtZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBsZWZ0ID0gaWZyYW1lUmVjdC5sZWZ0ICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50TGVmdCArIHBhcnNlRmxvYXQoY3NzLnBhZGRpbmdMZWZ0KSkgKiBpZnJhbWVTY2FsZS54O1xuICAgICAgY29uc3QgdG9wID0gaWZyYW1lUmVjdC50b3AgKyAoY3VycmVudElGcmFtZS5jbGllbnRUb3AgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nVG9wKSkgKiBpZnJhbWVTY2FsZS55O1xuICAgICAgeCAqPSBpZnJhbWVTY2FsZS54O1xuICAgICAgeSAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgd2lkdGggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIGhlaWdodCAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgeCArPSBsZWZ0O1xuICAgICAgeSArPSB0b3A7XG4gICAgICBjdXJyZW50V2luID0gZ2V0V2luZG93KGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3Qoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfSk7XG59XG5cbi8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbi8vIGluY29ycmVjdCBmb3IgUlRMLlxuZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50LCByZWN0KSB7XG4gIGNvbnN0IGxlZnRTY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG4gIGlmICghcmVjdCkge1xuICAgIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgbGVmdFNjcm9sbDtcbiAgfVxuICByZXR1cm4gcmVjdC5sZWZ0ICsgbGVmdFNjcm9sbDtcbn1cblxuZnVuY3Rpb24gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCwgaWdub3JlU2Nyb2xsYmFyWCkge1xuICBpZiAoaWdub3JlU2Nyb2xsYmFyWCA9PT0gdm9pZCAwKSB7XG4gICAgaWdub3JlU2Nyb2xsYmFyWCA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGh0bWxSZWN0ID0gZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB4ID0gaHRtbFJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gKGlnbm9yZVNjcm9sbGJhclggPyAwIDpcbiAgLy8gUlRMIDxib2R5PiBzY3JvbGxiYXIuXG4gIGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50LCBodG1sUmVjdCkpO1xuICBjb25zdCB5ID0gaHRtbFJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcDtcbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3QoX3JlZikge1xuICBsZXQge1xuICAgIGVsZW1lbnRzLFxuICAgIHJlY3QsXG4gICAgb2Zmc2V0UGFyZW50LFxuICAgIHN0cmF0ZWd5XG4gIH0gPSBfcmVmO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCB0b3BMYXllciA9IGVsZW1lbnRzID8gaXNUb3BMYXllcihlbGVtZW50cy5mbG9hdGluZykgOiBmYWxzZTtcbiAgaWYgKG9mZnNldFBhcmVudCA9PT0gZG9jdW1lbnRFbGVtZW50IHx8IHRvcExheWVyICYmIGlzRml4ZWQpIHtcbiAgICByZXR1cm4gcmVjdDtcbiAgfVxuICBsZXQgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIGxldCBzY2FsZSA9IGNyZWF0ZUNvb3JkcygxKTtcbiAgY29uc3Qgb2Zmc2V0cyA9IGNyZWF0ZUNvb3JkcygwKTtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgaWYgKGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgY29uc3Qgb2Zmc2V0UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQpO1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ID0gb2Zmc2V0UmVjdC54ICsgb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgPSBvZmZzZXRSZWN0LnkgKyBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH1cbiAgfVxuICBjb25zdCBodG1sT2Zmc2V0ID0gZG9jdW1lbnRFbGVtZW50ICYmICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCA/IGdldEhUTUxPZmZzZXQoZG9jdW1lbnRFbGVtZW50LCBzY3JvbGwsIHRydWUpIDogY3JlYXRlQ29vcmRzKDApO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiByZWN0LndpZHRoICogc2NhbGUueCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0ICogc2NhbGUueSxcbiAgICB4OiByZWN0LnggKiBzY2FsZS54IC0gc2Nyb2xsLnNjcm9sbExlZnQgKiBzY2FsZS54ICsgb2Zmc2V0cy54ICsgaHRtbE9mZnNldC54LFxuICAgIHk6IHJlY3QueSAqIHNjYWxlLnkgLSBzY3JvbGwuc2Nyb2xsVG9wICogc2NhbGUueSArIG9mZnNldHMueSArIGh0bWxPZmZzZXQueVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0cyhlbGVtZW50KSB7XG4gIHJldHVybiBBcnJheS5mcm9tKGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKSk7XG59XG5cbi8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGUuXG5mdW5jdGlvbiBnZXREb2N1bWVudFJlY3QoZWxlbWVudCkge1xuICBjb25zdCBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpO1xuICBjb25zdCBib2R5ID0gZWxlbWVudC5vd25lckRvY3VtZW50LmJvZHk7XG4gIGNvbnN0IHdpZHRoID0gbWF4KGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGJvZHkuc2Nyb2xsV2lkdGgsIGJvZHkuY2xpZW50V2lkdGgpO1xuICBjb25zdCBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5LnNjcm9sbEhlaWdodCwgYm9keS5jbGllbnRIZWlnaHQpO1xuICBsZXQgeCA9IC1zY3JvbGwuc2Nyb2xsTGVmdCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCk7XG4gIGNvbnN0IHkgPSAtc2Nyb2xsLnNjcm9sbFRvcDtcbiAgaWYgKGdldENvbXB1dGVkU3R5bGUoYm9keSkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkuY2xpZW50V2lkdGgpIC0gd2lkdGg7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFZpZXdwb3J0UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICBjb25zdCB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuICBsZXQgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICBsZXQgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIGxldCB4ID0gMDtcbiAgbGV0IHkgPSAwO1xuICBpZiAodmlzdWFsVmlld3BvcnQpIHtcbiAgICB3aWR0aCA9IHZpc3VhbFZpZXdwb3J0LndpZHRoO1xuICAgIGhlaWdodCA9IHZpc3VhbFZpZXdwb3J0LmhlaWdodDtcbiAgICBjb25zdCB2aXN1YWxWaWV3cG9ydEJhc2VkID0gaXNXZWJLaXQoKTtcbiAgICBpZiAoIXZpc3VhbFZpZXdwb3J0QmFzZWQgfHwgdmlzdWFsVmlld3BvcnRCYXNlZCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cblxuLy8gUmV0dXJucyB0aGUgaW5uZXIgY2xpZW50IHJlY3QsIHN1YnRyYWN0aW5nIHNjcm9sbGJhcnMgaWYgcHJlc2VudC5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICBjb25zdCB0b3AgPSBjbGllbnRSZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICBjb25zdCBsZWZ0ID0gY2xpZW50UmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICBjb25zdCBzY2FsZSA9IGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRTY2FsZShlbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygxKTtcbiAgY29uc3Qgd2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoICogc2NhbGUueDtcbiAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQgKiBzY2FsZS55O1xuICBjb25zdCB4ID0gbGVmdCAqIHNjYWxlLng7XG4gIGNvbnN0IHkgPSB0b3AgKiBzY2FsZS55O1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkge1xuICBsZXQgcmVjdDtcbiAgaWYgKGNsaXBwaW5nQW5jZXN0b3IgPT09ICd2aWV3cG9ydCcpIHtcbiAgICByZWN0ID0gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KTtcbiAgfSBlbHNlIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAnZG9jdW1lbnQnKSB7XG4gICAgcmVjdCA9IGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpO1xuICB9IGVsc2UgaWYgKGlzRWxlbWVudChjbGlwcGluZ0FuY2VzdG9yKSkge1xuICAgIHJlY3QgPSBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IGdldFZpc3VhbE9mZnNldHMoZWxlbWVudCk7XG4gICAgcmVjdCA9IHtcbiAgICAgIHg6IGNsaXBwaW5nQW5jZXN0b3IueCAtIHZpc3VhbE9mZnNldHMueCxcbiAgICAgIHk6IGNsaXBwaW5nQW5jZXN0b3IueSAtIHZpc3VhbE9mZnNldHMueSxcbiAgICAgIHdpZHRoOiBjbGlwcGluZ0FuY2VzdG9yLndpZHRoLFxuICAgICAgaGVpZ2h0OiBjbGlwcGluZ0FuY2VzdG9yLmhlaWdodFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3QocmVjdCk7XG59XG5mdW5jdGlvbiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgc3RvcE5vZGUpIHtcbiAgY29uc3QgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIGlmIChwYXJlbnROb2RlID09PSBzdG9wTm9kZSB8fCAhaXNFbGVtZW50KHBhcmVudE5vZGUpIHx8IGlzTGFzdFRyYXZlcnNhYmxlTm9kZShwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnROb2RlKS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJyB8fCBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IocGFyZW50Tm9kZSwgc3RvcE5vZGUpO1xufVxuXG4vLyBBIFwiY2xpcHBpbmcgYW5jZXN0b3JcIiBpcyBhbiBgb3ZlcmZsb3dgIGVsZW1lbnQgd2l0aCB0aGUgY2hhcmFjdGVyaXN0aWMgb2Zcbi8vIGNsaXBwaW5nIChvciBoaWRpbmcpIGNoaWxkIGVsZW1lbnRzLiBUaGlzIHJldHVybnMgYWxsIGNsaXBwaW5nIGFuY2VzdG9yc1xuLy8gb2YgdGhlIGdpdmVuIGVsZW1lbnQgdXAgdGhlIHRyZWUuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMoZWxlbWVudCwgY2FjaGUpIHtcbiAgY29uc3QgY2FjaGVkUmVzdWx0ID0gY2FjaGUuZ2V0KGVsZW1lbnQpO1xuICBpZiAoY2FjaGVkUmVzdWx0KSB7XG4gICAgcmV0dXJuIGNhY2hlZFJlc3VsdDtcbiAgfVxuICBsZXQgcmVzdWx0ID0gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZWxlbWVudCwgW10sIGZhbHNlKS5maWx0ZXIoZWwgPT4gaXNFbGVtZW50KGVsKSAmJiBnZXROb2RlTmFtZShlbCkgIT09ICdib2R5Jyk7XG4gIGxldCBjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZSA9IG51bGw7XG4gIGNvbnN0IGVsZW1lbnRJc0ZpeGVkID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJztcbiAgbGV0IGN1cnJlbnROb2RlID0gZWxlbWVudElzRml4ZWQgPyBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIDogZWxlbWVudDtcblxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuICB3aGlsZSAoaXNFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKGN1cnJlbnROb2RlKSkge1xuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnROb2RlKTtcbiAgICBjb25zdCBjdXJyZW50Tm9kZUlzQ29udGFpbmluZyA9IGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKTtcbiAgICBpZiAoIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc2hvdWxkRHJvcEN1cnJlbnROb2RlID0gZWxlbWVudElzRml4ZWQgPyAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlIDogIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdzdGF0aWMnICYmICEhY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgJiYgWydhYnNvbHV0ZScsICdmaXhlZCddLmluY2x1ZGVzKGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlLnBvc2l0aW9uKSB8fCBpc092ZXJmbG93RWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvcihlbGVtZW50LCBjdXJyZW50Tm9kZSk7XG4gICAgaWYgKHNob3VsZERyb3BDdXJyZW50Tm9kZSkge1xuICAgICAgLy8gRHJvcCBub24tY29udGFpbmluZyBibG9ja3MuXG4gICAgICByZXN1bHQgPSByZXN1bHQuZmlsdGVyKGFuY2VzdG9yID0+IGFuY2VzdG9yICE9PSBjdXJyZW50Tm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlY29yZCBsYXN0IGNvbnRhaW5pbmcgYmxvY2sgZm9yIG5leHQgaXRlcmF0aW9uLlxuICAgICAgY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgPSBjb21wdXRlZFN0eWxlO1xuICAgIH1cbiAgICBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpO1xuICB9XG4gIGNhY2hlLnNldChlbGVtZW50LCByZXN1bHQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBHZXRzIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIGR1ZSB0byBhbnkgbnVtYmVyIG9mXG4vLyBjbGlwcGluZyBhbmNlc3RvcnMuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ1JlY3QoX3JlZikge1xuICBsZXQge1xuICAgIGVsZW1lbnQsXG4gICAgYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5LFxuICAgIHN0cmF0ZWd5XG4gIH0gPSBfcmVmO1xuICBjb25zdCBlbGVtZW50Q2xpcHBpbmdBbmNlc3RvcnMgPSBib3VuZGFyeSA9PT0gJ2NsaXBwaW5nQW5jZXN0b3JzJyA/IGlzVG9wTGF5ZXIoZWxlbWVudCkgPyBbXSA6IGdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyhlbGVtZW50LCB0aGlzLl9jKSA6IFtdLmNvbmNhdChib3VuZGFyeSk7XG4gIGNvbnN0IGNsaXBwaW5nQW5jZXN0b3JzID0gWy4uLmVsZW1lbnRDbGlwcGluZ0FuY2VzdG9ycywgcm9vdEJvdW5kYXJ5XTtcbiAgY29uc3QgZmlyc3RDbGlwcGluZ0FuY2VzdG9yID0gY2xpcHBpbmdBbmNlc3RvcnNbMF07XG4gIGNvbnN0IGNsaXBwaW5nUmVjdCA9IGNsaXBwaW5nQW5jZXN0b3JzLnJlZHVjZSgoYWNjUmVjdCwgY2xpcHBpbmdBbmNlc3RvcikgPT4ge1xuICAgIGNvbnN0IHJlY3QgPSBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgY2xpcHBpbmdBbmNlc3Rvciwgc3RyYXRlZ3kpO1xuICAgIGFjY1JlY3QudG9wID0gbWF4KHJlY3QudG9wLCBhY2NSZWN0LnRvcCk7XG4gICAgYWNjUmVjdC5yaWdodCA9IG1pbihyZWN0LnJpZ2h0LCBhY2NSZWN0LnJpZ2h0KTtcbiAgICBhY2NSZWN0LmJvdHRvbSA9IG1pbihyZWN0LmJvdHRvbSwgYWNjUmVjdC5ib3R0b20pO1xuICAgIGFjY1JlY3QubGVmdCA9IG1heChyZWN0LmxlZnQsIGFjY1JlY3QubGVmdCk7XG4gICAgcmV0dXJuIGFjY1JlY3Q7XG4gIH0sIGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBmaXJzdENsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KSk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IGNsaXBwaW5nUmVjdC5yaWdodCAtIGNsaXBwaW5nUmVjdC5sZWZ0LFxuICAgIGhlaWdodDogY2xpcHBpbmdSZWN0LmJvdHRvbSAtIGNsaXBwaW5nUmVjdC50b3AsXG4gICAgeDogY2xpcHBpbmdSZWN0LmxlZnQsXG4gICAgeTogY2xpcHBpbmdSZWN0LnRvcFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXREaW1lbnNpb25zKGVsZW1lbnQpIHtcbiAgY29uc3Qge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gZ2V0Q3NzRGltZW5zaW9ucyhlbGVtZW50KTtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoZWxlbWVudCwgb2Zmc2V0UGFyZW50LCBzdHJhdGVneSkge1xuICBjb25zdCBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IGlzRml4ZWQgPSBzdHJhdGVneSA9PT0gJ2ZpeGVkJztcbiAgY29uc3QgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCB0cnVlLCBpc0ZpeGVkLCBvZmZzZXRQYXJlbnQpO1xuICBsZXQgc2Nyb2xsID0ge1xuICAgIHNjcm9sbExlZnQ6IDAsXG4gICAgc2Nyb2xsVG9wOiAwXG4gIH07XG4gIGNvbnN0IG9mZnNldHMgPSBjcmVhdGVDb29yZHMoMCk7XG4gIGlmIChpc09mZnNldFBhcmVudEFuRWxlbWVudCB8fCAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQpIHtcbiAgICBpZiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSAhPT0gJ2JvZHknIHx8IGlzT3ZlcmZsb3dFbGVtZW50KGRvY3VtZW50RWxlbWVudCkpIHtcbiAgICAgIHNjcm9sbCA9IGdldE5vZGVTY3JvbGwob2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50KSB7XG4gICAgICBjb25zdCBvZmZzZXRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgICAgIG9mZnNldHMueCA9IG9mZnNldFJlY3QueCArIG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ID0gb2Zmc2V0UmVjdC55ICsgb2Zmc2V0UGFyZW50LmNsaWVudFRvcDtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50RWxlbWVudCkge1xuICAgICAgLy8gSWYgdGhlIDxib2R5PiBzY3JvbGxiYXIgYXBwZWFycyBvbiB0aGUgbGVmdCAoZS5nLiBSVEwgc3lzdGVtcykuIFVzZVxuICAgICAgLy8gRmlyZWZveCB3aXRoIGxheW91dC5zY3JvbGxiYXIuc2lkZSA9IDMgaW4gYWJvdXQ6Y29uZmlnIHRvIHRlc3QgdGhpcy5cbiAgICAgIG9mZnNldHMueCA9IGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgaHRtbE9mZnNldCA9IGRvY3VtZW50RWxlbWVudCAmJiAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQgPyBnZXRIVE1MT2Zmc2V0KGRvY3VtZW50RWxlbWVudCwgc2Nyb2xsKSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgY29uc3QgeCA9IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54IC0gaHRtbE9mZnNldC54O1xuICBjb25zdCB5ID0gcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55IC0gaHRtbE9mZnNldC55O1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGljUG9zaXRpb25lZChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJztcbn1cblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50LCBwb2x5ZmlsbCkge1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmIChwb2x5ZmlsbCkge1xuICAgIHJldHVybiBwb2x5ZmlsbChlbGVtZW50KTtcbiAgfVxuICBsZXQgcmF3T2Zmc2V0UGFyZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG5cbiAgLy8gRmlyZWZveCByZXR1cm5zIHRoZSA8aHRtbD4gZWxlbWVudCBhcyB0aGUgb2Zmc2V0UGFyZW50IGlmIGl0J3Mgbm9uLXN0YXRpYyxcbiAgLy8gd2hpbGUgQ2hyb21lIGFuZCBTYWZhcmkgcmV0dXJuIHRoZSA8Ym9keT4gZWxlbWVudC4gVGhlIDxib2R5PiBlbGVtZW50IG11c3RcbiAgLy8gYmUgdXNlZCB0byBwZXJmb3JtIHRoZSBjb3JyZWN0IGNhbGN1bGF0aW9ucyBldmVuIGlmIHRoZSA8aHRtbD4gZWxlbWVudCBpc1xuICAvLyBub24tc3RhdGljLlxuICBpZiAoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpID09PSByYXdPZmZzZXRQYXJlbnQpIHtcbiAgICByYXdPZmZzZXRQYXJlbnQgPSByYXdPZmZzZXRQYXJlbnQub3duZXJEb2N1bWVudC5ib2R5O1xuICB9XG4gIHJldHVybiByYXdPZmZzZXRQYXJlbnQ7XG59XG5cbi8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5mdW5jdGlvbiBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBpZiAoaXNUb3BMYXllcihlbGVtZW50KSkge1xuICAgIHJldHVybiB3aW47XG4gIH1cbiAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgbGV0IHN2Z09mZnNldFBhcmVudCA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gICAgd2hpbGUgKHN2Z09mZnNldFBhcmVudCAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKHN2Z09mZnNldFBhcmVudCkpIHtcbiAgICAgIGlmIChpc0VsZW1lbnQoc3ZnT2Zmc2V0UGFyZW50KSAmJiAhaXNTdGF0aWNQb3NpdGlvbmVkKHN2Z09mZnNldFBhcmVudCkpIHtcbiAgICAgICAgcmV0dXJuIHN2Z09mZnNldFBhcmVudDtcbiAgICAgIH1cbiAgICAgIHN2Z09mZnNldFBhcmVudCA9IGdldFBhcmVudE5vZGUoc3ZnT2Zmc2V0UGFyZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHdpbjtcbiAgfVxuICBsZXQgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50LCBwb2x5ZmlsbCk7XG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBpc1N0YXRpY1Bvc2l0aW9uZWQob2Zmc2V0UGFyZW50KSkge1xuICAgIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQob2Zmc2V0UGFyZW50LCBwb2x5ZmlsbCk7XG4gIH1cbiAgaWYgKG9mZnNldFBhcmVudCAmJiBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUob2Zmc2V0UGFyZW50KSAmJiBpc1N0YXRpY1Bvc2l0aW9uZWQob2Zmc2V0UGFyZW50KSAmJiAhaXNDb250YWluaW5nQmxvY2sob2Zmc2V0UGFyZW50KSkge1xuICAgIHJldHVybiB3aW47XG4gIH1cbiAgcmV0dXJuIG9mZnNldFBhcmVudCB8fCBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkgfHwgd2luO1xufVxuXG5jb25zdCBnZXRFbGVtZW50UmVjdHMgPSBhc3luYyBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCBnZXRPZmZzZXRQYXJlbnRGbiA9IHRoaXMuZ2V0T2Zmc2V0UGFyZW50IHx8IGdldE9mZnNldFBhcmVudDtcbiAgY29uc3QgZ2V0RGltZW5zaW9uc0ZuID0gdGhpcy5nZXREaW1lbnNpb25zO1xuICBjb25zdCBmbG9hdGluZ0RpbWVuc2lvbnMgPSBhd2FpdCBnZXREaW1lbnNpb25zRm4oZGF0YS5mbG9hdGluZyk7XG4gIHJldHVybiB7XG4gICAgcmVmZXJlbmNlOiBnZXRSZWN0UmVsYXRpdmVUb09mZnNldFBhcmVudChkYXRhLnJlZmVyZW5jZSwgYXdhaXQgZ2V0T2Zmc2V0UGFyZW50Rm4oZGF0YS5mbG9hdGluZyksIGRhdGEuc3RyYXRlZ3kpLFxuICAgIGZsb2F0aW5nOiB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMCxcbiAgICAgIHdpZHRoOiBmbG9hdGluZ0RpbWVuc2lvbnMud2lkdGgsXG4gICAgICBoZWlnaHQ6IGZsb2F0aW5nRGltZW5zaW9ucy5oZWlnaHRcbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBpc1JUTChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmRpcmVjdGlvbiA9PT0gJ3J0bCc7XG59XG5cbmNvbnN0IHBsYXRmb3JtID0ge1xuICBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCxcbiAgZ2V0RG9jdW1lbnRFbGVtZW50LFxuICBnZXRDbGlwcGluZ1JlY3QsXG4gIGdldE9mZnNldFBhcmVudCxcbiAgZ2V0RWxlbWVudFJlY3RzLFxuICBnZXRDbGllbnRSZWN0cyxcbiAgZ2V0RGltZW5zaW9ucyxcbiAgZ2V0U2NhbGUsXG4gIGlzRWxlbWVudCxcbiAgaXNSVExcbn07XG5cbi8vIGh0dHBzOi8vc2FtdGhvci5hdS8yMDIxL29ic2VydmluZy1kb20vXG5mdW5jdGlvbiBvYnNlcnZlTW92ZShlbGVtZW50LCBvbk1vdmUpIHtcbiAgbGV0IGlvID0gbnVsbDtcbiAgbGV0IHRpbWVvdXRJZDtcbiAgY29uc3Qgcm9vdCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICB2YXIgX2lvO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgIChfaW8gPSBpbykgPT0gbnVsbCB8fCBfaW8uZGlzY29ubmVjdCgpO1xuICAgIGlvID0gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiByZWZyZXNoKHNraXAsIHRocmVzaG9sZCkge1xuICAgIGlmIChza2lwID09PSB2b2lkIDApIHtcbiAgICAgIHNraXAgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJlc2hvbGQgPSAxO1xuICAgIH1cbiAgICBjbGVhbnVwKCk7XG4gICAgY29uc3Qge1xuICAgICAgbGVmdCxcbiAgICAgIHRvcCxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0XG4gICAgfSA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKCFza2lwKSB7XG4gICAgICBvbk1vdmUoKTtcbiAgICB9XG4gICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluc2V0VG9wID0gZmxvb3IodG9wKTtcbiAgICBjb25zdCBpbnNldFJpZ2h0ID0gZmxvb3Iocm9vdC5jbGllbnRXaWR0aCAtIChsZWZ0ICsgd2lkdGgpKTtcbiAgICBjb25zdCBpbnNldEJvdHRvbSA9IGZsb29yKHJvb3QuY2xpZW50SGVpZ2h0IC0gKHRvcCArIGhlaWdodCkpO1xuICAgIGNvbnN0IGluc2V0TGVmdCA9IGZsb29yKGxlZnQpO1xuICAgIGNvbnN0IHJvb3RNYXJnaW4gPSAtaW5zZXRUb3AgKyBcInB4IFwiICsgLWluc2V0UmlnaHQgKyBcInB4IFwiICsgLWluc2V0Qm90dG9tICsgXCJweCBcIiArIC1pbnNldExlZnQgKyBcInB4XCI7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3RNYXJnaW4sXG4gICAgICB0aHJlc2hvbGQ6IG1heCgwLCBtaW4oMSwgdGhyZXNob2xkKSkgfHwgMVxuICAgIH07XG4gICAgbGV0IGlzRmlyc3RVcGRhdGUgPSB0cnVlO1xuICAgIGZ1bmN0aW9uIGhhbmRsZU9ic2VydmUoZW50cmllcykge1xuICAgICAgY29uc3QgcmF0aW8gPSBlbnRyaWVzWzBdLmludGVyc2VjdGlvblJhdGlvO1xuICAgICAgaWYgKHJhdGlvICE9PSB0aHJlc2hvbGQpIHtcbiAgICAgICAgaWYgKCFpc0ZpcnN0VXBkYXRlKSB7XG4gICAgICAgICAgcmV0dXJuIHJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJhdGlvKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHJlZmVyZW5jZSBpcyBjbGlwcGVkLCB0aGUgcmF0aW8gaXMgMC4gVGhyb3R0bGUgdGhlIHJlZnJlc2hcbiAgICAgICAgICAvLyB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3Agb2YgdXBkYXRlcy5cbiAgICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHJlZnJlc2goZmFsc2UsIDFlLTcpO1xuICAgICAgICAgIH0sIDEwMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlZnJlc2goZmFsc2UsIHJhdGlvKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaXNGaXJzdFVwZGF0ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIE9sZGVyIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgYSBgZG9jdW1lbnRgIGFzIHRoZSByb290IGFuZCB3aWxsIHRocm93IGFuXG4gICAgLy8gZXJyb3IuXG4gICAgdHJ5IHtcbiAgICAgIGlvID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGhhbmRsZU9ic2VydmUsIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgLy8gSGFuZGxlIDxpZnJhbWU+c1xuICAgICAgICByb290OiByb290Lm93bmVyRG9jdW1lbnRcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlvID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGhhbmRsZU9ic2VydmUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpby5vYnNlcnZlKGVsZW1lbnQpO1xuICB9XG4gIHJlZnJlc2godHJ1ZSk7XG4gIHJldHVybiBjbGVhbnVwO1xufVxuXG4vKipcbiAqIEF1dG9tYXRpY2FsbHkgdXBkYXRlcyB0aGUgcG9zaXRpb24gb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgd2hlbiBuZWNlc3NhcnkuXG4gKiBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiB0aGUgZmxvYXRpbmcgZWxlbWVudCBpcyBtb3VudGVkIG9uIHRoZSBET00gb3JcbiAqIHZpc2libGUgb24gdGhlIHNjcmVlbi5cbiAqIEByZXR1cm5zIGNsZWFudXAgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgaW52b2tlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzXG4gKiByZW1vdmVkIGZyb20gdGhlIERPTSBvciBoaWRkZW4gZnJvbSB0aGUgc2NyZWVuLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9VcGRhdGVcbiAqL1xuZnVuY3Rpb24gYXV0b1VwZGF0ZShyZWZlcmVuY2UsIGZsb2F0aW5nLCB1cGRhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBjb25zdCB7XG4gICAgYW5jZXN0b3JTY3JvbGwgPSB0cnVlLFxuICAgIGFuY2VzdG9yUmVzaXplID0gdHJ1ZSxcbiAgICBlbGVtZW50UmVzaXplID0gdHlwZW9mIFJlc2l6ZU9ic2VydmVyID09PSAnZnVuY3Rpb24nLFxuICAgIGxheW91dFNoaWZ0ID0gdHlwZW9mIEludGVyc2VjdGlvbk9ic2VydmVyID09PSAnZnVuY3Rpb24nLFxuICAgIGFuaW1hdGlvbkZyYW1lID0gZmFsc2VcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHJlZmVyZW5jZUVsID0gdW53cmFwRWxlbWVudChyZWZlcmVuY2UpO1xuICBjb25zdCBhbmNlc3RvcnMgPSBhbmNlc3RvclNjcm9sbCB8fCBhbmNlc3RvclJlc2l6ZSA/IFsuLi4ocmVmZXJlbmNlRWwgPyBnZXRPdmVyZmxvd0FuY2VzdG9ycyhyZWZlcmVuY2VFbCkgOiBbXSksIC4uLmdldE92ZXJmbG93QW5jZXN0b3JzKGZsb2F0aW5nKV0gOiBbXTtcbiAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgIGFuY2VzdG9yU2Nyb2xsICYmIGFuY2VzdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHVwZGF0ZSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZVxuICAgIH0pO1xuICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gIH0pO1xuICBjb25zdCBjbGVhbnVwSW8gPSByZWZlcmVuY2VFbCAmJiBsYXlvdXRTaGlmdCA/IG9ic2VydmVNb3ZlKHJlZmVyZW5jZUVsLCB1cGRhdGUpIDogbnVsbDtcbiAgbGV0IHJlb2JzZXJ2ZUZyYW1lID0gLTE7XG4gIGxldCByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gIGlmIChlbGVtZW50UmVzaXplKSB7XG4gICAgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoX3JlZiA9PiB7XG4gICAgICBsZXQgW2ZpcnN0RW50cnldID0gX3JlZjtcbiAgICAgIGlmIChmaXJzdEVudHJ5ICYmIGZpcnN0RW50cnkudGFyZ2V0ID09PSByZWZlcmVuY2VFbCAmJiByZXNpemVPYnNlcnZlcikge1xuICAgICAgICAvLyBQcmV2ZW50IHVwZGF0ZSBsb29wcyB3aGVuIHVzaW5nIHRoZSBgc2l6ZWAgbWlkZGxld2FyZS5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8xNzQwXG4gICAgICAgIHJlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZShmbG9hdGluZyk7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJlb2JzZXJ2ZUZyYW1lKTtcbiAgICAgICAgcmVvYnNlcnZlRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIHZhciBfcmVzaXplT2JzZXJ2ZXI7XG4gICAgICAgICAgKF9yZXNpemVPYnNlcnZlciA9IHJlc2l6ZU9ic2VydmVyKSA9PSBudWxsIHx8IF9yZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB1cGRhdGUoKTtcbiAgICB9KTtcbiAgICBpZiAocmVmZXJlbmNlRWwgJiYgIWFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHJlZmVyZW5jZUVsKTtcbiAgICB9XG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShmbG9hdGluZyk7XG4gIH1cbiAgbGV0IGZyYW1lSWQ7XG4gIGxldCBwcmV2UmVmUmVjdCA9IGFuaW1hdGlvbkZyYW1lID8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHJlZmVyZW5jZSkgOiBudWxsO1xuICBpZiAoYW5pbWF0aW9uRnJhbWUpIHtcbiAgICBmcmFtZUxvb3AoKTtcbiAgfVxuICBmdW5jdGlvbiBmcmFtZUxvb3AoKSB7XG4gICAgY29uc3QgbmV4dFJlZlJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKTtcbiAgICBpZiAocHJldlJlZlJlY3QgJiYgKG5leHRSZWZSZWN0LnggIT09IHByZXZSZWZSZWN0LnggfHwgbmV4dFJlZlJlY3QueSAhPT0gcHJldlJlZlJlY3QueSB8fCBuZXh0UmVmUmVjdC53aWR0aCAhPT0gcHJldlJlZlJlY3Qud2lkdGggfHwgbmV4dFJlZlJlY3QuaGVpZ2h0ICE9PSBwcmV2UmVmUmVjdC5oZWlnaHQpKSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gICAgcHJldlJlZlJlY3QgPSBuZXh0UmVmUmVjdDtcbiAgICBmcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lTG9vcCk7XG4gIH1cbiAgdXBkYXRlKCk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgdmFyIF9yZXNpemVPYnNlcnZlcjI7XG4gICAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlKTtcbiAgICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gICAgfSk7XG4gICAgY2xlYW51cElvID09IG51bGwgfHwgY2xlYW51cElvKCk7XG4gICAgKF9yZXNpemVPYnNlcnZlcjIgPSByZXNpemVPYnNlcnZlcikgPT0gbnVsbCB8fCBfcmVzaXplT2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTtcbiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgaWYgKGFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZUlkKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgb2Ygb3ZlcmZsb3cgc2lkZSBvZmZzZXRzIHRoYXQgZGV0ZXJtaW5lIGhvdyBtdWNoIHRoZVxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cbiAqIC0gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgYm91bmRhcnkgYnkgdGhhdCBudW1iZXIgb2YgcGl4ZWxzXG4gKiAtIG5lZ2F0aXZlID0gaG93IG1hbnkgcGl4ZWxzIGxlZnQgYmVmb3JlIGl0IHdpbGwgb3ZlcmZsb3dcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9kZXRlY3RPdmVyZmxvd1xuICovXG5jb25zdCBkZXRlY3RPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93JDE7XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IG9mZnNldCQxO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGF1dG9QbGFjZW1lbnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gc2hpZnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmbGlwJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IFx1MjAxNFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IHNpemUkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBoaWRlJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gYXJyb3ckMTtcblxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gaW5saW5lJDE7XG5cbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBsaW1pdFNoaWZ0JDE7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSAocmVmZXJlbmNlLCBmbG9hdGluZywgb3B0aW9ucykgPT4ge1xuICAvLyBUaGlzIGNhY2hlcyB0aGUgZXhwZW5zaXZlIGBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnNgIGZ1bmN0aW9uIHNvIHRoYXRcbiAgLy8gbXVsdGlwbGUgbGlmZWN5Y2xlIHJlc2V0cyByZS11c2UgdGhlIHNhbWUgcmVzdWx0LiBJdCBvbmx5IGxpdmVzIGZvciBhXG4gIC8vIHNpbmdsZSBjYWxsLiBJZiBvdGhlciBmdW5jdGlvbnMgYmVjb21lIGV4cGVuc2l2ZSwgd2UgY2FuIGFkZCB0aGVtIGFzIHdlbGwuXG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcCgpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0ge1xuICAgIHBsYXRmb3JtLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgY29uc3QgcGxhdGZvcm1XaXRoQ2FjaGUgPSB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucy5wbGF0Zm9ybSxcbiAgICBfYzogY2FjaGVcbiAgfTtcbiAgcmV0dXJuIGNvbXB1dGVQb3NpdGlvbiQxKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHtcbiAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgIHBsYXRmb3JtOiBwbGF0Zm9ybVdpdGhDYWNoZVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgcGxhdGZvcm0sIHNoaWZ0LCBzaXplIH07XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0YXJyb3csXG5cdGF1dG9QbGFjZW1lbnQsXG5cdGF1dG9VcGRhdGUsXG5cdGRldGVjdE92ZXJmbG93LFxuXHRjb21wdXRlUG9zaXRpb24sXG5cdG9mZnNldCxcblx0ZmxpcCxcblx0c2l6ZSxcblx0c2hpZnQsXG59IGZyb20gXCJAZmxvYXRpbmctdWkvZG9tXCI7XG5pbXBvcnQgeyBQcm9jZXNzaW5nIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvcHJvY2Vzc2luZy5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcsIGlzQXJyYXksIGlzT2JqZWN0LCBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuXG5leHBvcnQgeyBwb3NpdGlvblBvcHBlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gY29udHJvbEVsZW1lbnRcbiAqIEBwYXJhbSBwb3BwZXJFbGVtZW50XG4gKiBAcGFyYW0gb3B0aW9uc1xuICogQHJldHVybiB7UHJvbWlzZXwqfVxuICovXG5mdW5jdGlvbiBwb3NpdGlvblBvcHBlcihjb250cm9sRWxlbWVudCwgcG9wcGVyRWxlbWVudCwgb3B0aW9ucykge1xuXHRjb25zdCBib2R5ID0gZ2V0RG9jdW1lbnQoKS5ib2R5O1xuXG5cdHJldHVybiBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0Y29uc3QgYXJyb3dFbGVtZW50ID0gY29udHJvbEVsZW1lbnQucXVlcnlTZWxlY3Rvcihcblx0XHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWFycm93XVwiLFxuXHRcdCk7XG5cblx0XHRjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHR7XG5cdFx0XHRcdHBsYWNlbWVudDogXCJ0b3BcIixcblx0XHRcdH0sXG5cdFx0XHRvcHRpb25zLFxuXHRcdCk7XG5cblx0XHRjb25zdCBtaWRkbGV3YXJlID0gY29uZmlnPy5bXCJtaWRkbGV3YXJlXCJdO1xuXHRcdGlmICghaXNBcnJheShtaWRkbGV3YXJlKSkge1xuXHRcdFx0aWYgKGlzU3RyaW5nKG1pZGRsZXdhcmUpKSB7XG5cdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl0gPSBtaWRkbGV3YXJlLnNwbGl0KFwiLFwiKS5maWx0ZXIoKGxpbmUpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gbGluZS50cmltKCkubGVuZ3RoID4gMDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25maWdbXCJtaWRkbGV3YXJlXCJdID0gW107XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gbWlkZGxld2FyZSkge1xuXHRcdFx0Y29uc3QgbGluZSA9IG1pZGRsZXdhcmVba2V5XTtcblx0XHRcdGlmIChpc0Z1bmN0aW9uKGxpbmUpKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPYmplY3QobGluZSkpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghaXNTdHJpbmcobGluZSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFxuXHRcdFx0XHRcdGBNaWRkbGV3YXJlIG11c3QgYmUgYSBzdHJpbmcsIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0LiBHb3QgJHt0eXBlb2YgbGluZX1gLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBrdiA9IGxpbmUuc3BsaXQoXCI6XCIpO1xuXHRcdFx0Y29uc3QgZm4gPSBrdi5zaGlmdCgpO1xuXG5cdFx0XHRzd2l0Y2ggKGZuKSB7XG5cdFx0XHRcdGNhc2UgXCJmbGlwXCI6XG5cdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gZmxpcCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwic2hpZnRcIjpcblx0XHRcdFx0XHRjb25maWdbXCJtaWRkbGV3YXJlXCJdW2tleV0gPSBzaGlmdCgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiYXV0b1BsYWNlbWVudFwiOlxuXHRcdFx0XHRcdGxldCBkZWZhdWx0QWxsb3dlZFBsYWNlbWVudHMgPSBbXCJ0b3BcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCIsIFwicmlnaHRcIl07XG5cblx0XHRcdFx0XHRjb25zdCBkZWZQbGFjZW1lbnQgPSBrdj8uc2hpZnQoKTtcblx0XHRcdFx0XHRpZiAoaXNTdHJpbmcoZGVmUGxhY2VtZW50KSAmJiBkZWZQbGFjZW1lbnQudHJpbSgpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGRlZmF1bHRBbGxvd2VkUGxhY2VtZW50cyA9IGRlZlBsYWNlbWVudFxuXHRcdFx0XHRcdFx0XHQuc3BsaXQoXCIsXCIpXG5cdFx0XHRcdFx0XHRcdC5maWx0ZXIoKGxpbmUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbGluZS50cmltKCkubGVuZ3RoID4gMDtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGRlZmF1bHRBbGxvd2VkUGxhY2VtZW50cy5pbmNsdWRlcyhjb25maWcucGxhY2VtZW50KSkge1xuXHRcdFx0XHRcdFx0ZGVmYXVsdEFsbG93ZWRQbGFjZW1lbnRzLnNwbGljZShcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdEFsbG93ZWRQbGFjZW1lbnRzLmluZGV4T2YoY29uZmlnLnBsYWNlbWVudCksXG5cdFx0XHRcdFx0XHRcdDEsXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkZWZhdWx0QWxsb3dlZFBsYWNlbWVudHMudW5zaGlmdChjb25maWcucGxhY2VtZW50KTtcblxuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IGF1dG9QbGFjZW1lbnQoe1xuXHRcdFx0XHRcdFx0Y3Jvc3NBeGlzOiB0cnVlLFxuXHRcdFx0XHRcdFx0YXV0b0FsaWdubWVudDogdHJ1ZSxcblx0XHRcdFx0XHRcdGFsbG93ZWRQbGFjZW1lbnRzOiBkZWZhdWx0QWxsb3dlZFBsYWNlbWVudHMsXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImRldGVjdE92ZXJmbG93XCI6XG5cdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gZGV0ZWN0T3ZlcmZsb3coKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImFycm93XCI6XG5cdFx0XHRcdFx0aWYgKGFycm93RWxlbWVudCkge1xuXHRcdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gYXJyb3coeyBlbGVtZW50OiBhcnJvd0VsZW1lbnQgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwic2l6ZVwiOlxuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IHNpemUoe1xuXHRcdFx0XHRcdFx0YXBwbHkoeyBhdmFpbGFibGVXaWR0aCwgYXZhaWxhYmxlSGVpZ2h0LCBlbGVtZW50cyB9KSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG1heFdpZHRoID0gYm9keS5jbGllbnRXaWR0aDtcblx0XHRcdFx0XHRcdFx0Y29uc3QgbWF4SGVpZ2h0ID0gYm9keS5jbGllbnRIZWlnaHQ7XG5cblx0XHRcdFx0XHRcdFx0aWYgKGF2YWlsYWJsZVdpZHRoIDwgMCkge1xuXHRcdFx0XHRcdFx0XHRcdGF2YWlsYWJsZVdpZHRoID0gMDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChhdmFpbGFibGVIZWlnaHQgPCAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXZhaWxhYmxlSGVpZ2h0ID0gMDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChhdmFpbGFibGVXaWR0aCA+IG1heFdpZHRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXZhaWxhYmxlV2lkdGggPSBtYXhXaWR0aDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmIChhdmFpbGFibGVIZWlnaHQgPiBtYXhIZWlnaHQpIHtcblx0XHRcdFx0XHRcdFx0XHRhdmFpbGFibGVIZWlnaHQgPSBtYXhIZWlnaHQ7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRPYmplY3QuYXNzaWduKGVsZW1lbnRzLmZsb2F0aW5nLnN0eWxlLCB7XG5cdFx0XHRcdFx0XHRcdFx0Ym94U2l6aW5nOiBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0XHRcdFx0XHRtYXhXaWR0aDogYCR7YXZhaWxhYmxlV2lkdGh9cHhgLFxuXHRcdFx0XHRcdFx0XHRcdG1heEhlaWdodDogYCR7YXZhaWxhYmxlSGVpZ2h0fXB4YCxcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwib2Zmc2V0XCI6XG5cdFx0XHRcdFx0Y29uc3QgbyA9IGt2Py5zaGlmdCgpO1xuXHRcdFx0XHRcdGNvbmZpZ1tcIm1pZGRsZXdhcmVcIl1ba2V5XSA9IG9mZnNldChwYXJzZUludChvKSB8fCAxMCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJoaWRlXCI6XG5cdFx0XHRcdFx0Y29uZmlnW1wibWlkZGxld2FyZVwiXVtrZXldID0gaGlkZSgpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihgVW5rbm93biBmdW5jdGlvbjogJHtmbn1gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRwb3BwZXJFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KFwidmlzaWJpbGl0eVwiKTtcblx0XHRwb3BwZXJFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cblx0XHRhdXRvVXBkYXRlKGNvbnRyb2xFbGVtZW50LCBwb3BwZXJFbGVtZW50LCAoKSA9PiB7XG5cdFx0XHRjb21wdXRlUG9zaXRpb24oY29udHJvbEVsZW1lbnQsIHBvcHBlckVsZW1lbnQsIGNvbmZpZykudGhlbihcblx0XHRcdFx0KHsgeCwgeSwgcGxhY2VtZW50LCBtaWRkbGV3YXJlRGF0YSB9KSA9PiB7XG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihwb3BwZXJFbGVtZW50LnN0eWxlLCB7XG5cdFx0XHRcdFx0XHR0b3A6IFwiMFwiLFxuXHRcdFx0XHRcdFx0bGVmdDogXCIwXCIsXG5cdFx0XHRcdFx0XHR0cmFuc2Zvcm06IGB0cmFuc2xhdGUoJHtyb3VuZEJ5RFBSKHgpfXB4LCR7cm91bmRCeURQUih5KX1weClgLFxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0aWYgKG1pZGRsZXdhcmVEYXRhLmFycm93KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzaWRlID0gcGxhY2VtZW50LnNwbGl0KFwiLVwiKVswXTtcblxuXHRcdFx0XHRcdFx0Y29uc3Qgc3RhdGljU2lkZSA9IHtcblx0XHRcdFx0XHRcdFx0dG9wOiBcImJvdHRvbVwiLFxuXHRcdFx0XHRcdFx0XHRyaWdodDogXCJsZWZ0XCIsXG5cdFx0XHRcdFx0XHRcdGJvdHRvbTogXCJ0b3BcIixcblx0XHRcdFx0XHRcdFx0bGVmdDogXCJyaWdodFwiLFxuXHRcdFx0XHRcdFx0fVtzaWRlXTtcblxuXHRcdFx0XHRcdFx0Ly8gbW9uc3Rlci1ib3JkZXItd2lkdGggPSArIDQgKDIqMikgKHNob3VsZCBjb21lIGZyb20gY3NzKVxuXHRcdFx0XHRcdFx0Y29uc3QgYXJyb3dMZW4gPSBhcnJvd0VsZW1lbnQub2Zmc2V0V2lkdGggKyA0O1xuXG5cdFx0XHRcdFx0XHRjb25zdCBib3JkZXJTdHlsZSA9IHtcblx0XHRcdFx0XHRcdFx0Ym9yZGVyTGVmdDogXCJ0cmFuc3BhcmVudFwiLFxuXHRcdFx0XHRcdFx0XHRib3JkZXJSaWdodDogXCJ0cmFuc3BhcmVudFwiLFxuXHRcdFx0XHRcdFx0XHRib3JkZXJCb3R0b206IFwidHJhbnNwYXJlbnRcIixcblx0XHRcdFx0XHRcdFx0Ym9yZGVyVG9wOiBcInRyYW5zcGFyZW50XCIsXG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRjb25zdCBkZWZhdWx0Qm9yZGVyID1cblx0XHRcdFx0XHRcdFx0XCJ2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkgdmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpIHZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KVwiO1xuXG5cdFx0XHRcdFx0XHRzd2l0Y2ggKHNpZGUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcInRvcFwiOlxuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlclJpZ2h0ID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJCb3R0b20gPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJib3R0b21cIjpcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJUb3AgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlckxlZnQgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJsZWZ0XCI6XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyUmlnaHQgPSBkZWZhdWx0Qm9yZGVyO1xuXHRcdFx0XHRcdFx0XHRcdGJvcmRlclN0eWxlLmJvcmRlclRvcCA9IGRlZmF1bHRCb3JkZXI7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0Y2FzZSBcInJpZ2h0XCI6XG5cdFx0XHRcdFx0XHRcdFx0Ym9yZGVyU3R5bGUuYm9yZGVyQm90dG9tID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZS5ib3JkZXJMZWZ0ID0gZGVmYXVsdEJvcmRlcjtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgeyB4LCB5IH0gPSBtaWRkbGV3YXJlRGF0YS5hcnJvdztcblxuXHRcdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihcblx0XHRcdFx0XHRcdFx0YXJyb3dFbGVtZW50LnN0eWxlLFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0bGVmdDogeCAhPSBudWxsID8gYCR7eH1weGAgOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdHRvcDogeSAhPSBudWxsID8gYCR7eX1weGAgOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdC8vIEVuc3VyZSB0aGUgc3RhdGljIHNpZGUgZ2V0cyB1bnNldCB3aGVuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gZmxpcHBpbmcgdG8gb3RoZXIgcGxhY2VtZW50cycgYXhlcy5cblx0XHRcdFx0XHRcdFx0XHRyaWdodDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRib3R0b206IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0W3N0YXRpY1NpZGVdOiBgJHstYXJyb3dMZW4gLyAyfXB4YCxcblx0XHRcdFx0XHRcdFx0XHR0cmFuc2Zvcm06IFwicm90YXRlKDQ1ZGVnKVwiLFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRib3JkZXJTdHlsZSxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0KTtcblx0XHR9KTtcblx0fSkucnVuKCk7XG59XG5cbmZ1bmN0aW9uIHJvdW5kQnlEUFIodmFsdWUpIHtcblx0Y29uc3QgZHByID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcblx0cmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBkcHIpIC8gZHByO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFNlbGVjdFN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFNlbGVjdFN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRTZWxlY3RTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHNlbGVjdCB7IFxuLmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfS5tb25zdGVyLWJhZGdlLXByaW1hcnl7cGFkZGluZzouMjVlbSAuNGVtfS5tb25zdGVyLWJhZGdlLXByaW1hcnksLm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1wcmltYXJ5LXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5e3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnksLm1vbnN0ZXItYmFkZ2Utc2Vjb25kYXJ5LXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS1zZWNvbmRhcnktcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeXtwYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2UtdGVydGlhcnksLm1vbnN0ZXItYmFkZ2UtdGVydGlhcnktcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH0ubW9uc3Rlci1iYWRnZS10ZXJ0aWFyeS1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZle3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZSwubW9uc3Rlci1iYWRnZS1kZXN0cnVjdGl2ZS1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLWRlc3RydWN0aXZlLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19Lm1vbnN0ZXItYmFkZ2Utc3VjY2Vzc3twYWRkaW5nOi4yNWVtIC40ZW19Lm1vbnN0ZXItYmFkZ2Utc3VjY2VzcywubW9uc3Rlci1iYWRnZS1zdWNjZXNzLXBpbGx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Ym9yZGVyLXJhZGl1czouMjVyZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLXN1Y2Nlc3MtcGlsbHtib3JkZXItcmFkaXVzOjEwcmVtO3BhZGRpbmc6LjI1ZW0gLjZlbX0ubW9uc3Rlci1iYWRnZS13YXJuaW5ne3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS13YXJuaW5nLC5tb25zdGVyLWJhZGdlLXdhcm5pbmctcGlsbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9Lm1vbnN0ZXItYmFkZ2Utd2FybmluZy1waWxse2JvcmRlci1yYWRpdXM6MTByZW07cGFkZGluZzouMjVlbSAuNmVtfS5tb25zdGVyLWJhZGdlLWVycm9ye3BhZGRpbmc6LjI1ZW0gLjRlbX0ubW9uc3Rlci1iYWRnZS1lcnJvciwubW9uc3Rlci1iYWRnZS1lcnJvci1waWxse2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtib3JkZXItcmFkaXVzOi4yNXJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5tb25zdGVyLWJhZGdlLWVycm9yLXBpbGx7Ym9yZGVyLXJhZGl1czoxMHJlbTtwYWRkaW5nOi4yNWVtIC42ZW19ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl17YWxpZ24tY29udGVudDpjZW50ZXI7YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7ZGlzcGxheTpub25lO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2xlZnQ6MDtwYWRkaW5nOjEuMWVtO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnQ7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtbW9kYWwpfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJdIGRpdltkYXRhLW1vbnN0ZXItcm9sZT1hcnJvd117YmFja2dyb3VuZDp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7aGVpZ2h0OmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSAqIHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOmNhbGMobWF4KHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpLCAtMSAqIHZhcigtLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2UpKSoyKTt6LWluZGV4Oi0xfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250YWluZXJdey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtmbGV4OjQgMCA5MCU7bWluLWhlaWdodDoxLjRlbTtvdmVyZmxvdzphdXRvO3Njcm9sbGJhci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO3Njcm9sbGJhci13aWR0aDp0aGluO3dpZHRoOjEwMCV9LmQtbm9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fWRpdltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7cG9zaXRpb246cmVsYXRpdmV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRhaW5lcl0ub3Blbnstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNNy42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBsNiA2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA1LjcwN2wtNS42NDYgNS42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDh6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J003LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMGw2IDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDUuNzA3bC01LjY0NiA1LjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOHonLyUzRSUzQy9zdmclM0VcXFwiKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udGFpbmVyXS5jbGVhcixbZGF0YS1tb25zdGVyLXJvbGU9Y29udGFpbmVyXS5vcGVue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpOy13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXIgY2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyIGNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6LjhlbTttYXNrLXNpemU6LjhlbX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udGFpbmVyXS5jbGVhcnstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXthY2NlbnQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpOy1vLWJvcmRlci1pbWFnZTppbml0aWFsO2JvcmRlci1pbWFnZTppbml0aWFsO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aCk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6MTAwJTttYXJnaW46MDtvdXRsaW5lOm5vbmU7cGFkZGluZzouNHJlbSAuNnJlbTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOmZpbGwtYXZhaWxhYmxlfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpe1tkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF06Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpO291dGxpbmUtb2Zmc2V0OjJweH19W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdOmhvdmVye2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTIpO3RyYW5zaXRpb246YmFja2dyb3VuZCAuOHMsY29sb3IgLjI1cyAuMDgzMzMzMzMzM3N9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXNlbGVjdGlvbl17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOndyYXA7Z2FwOjVweDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDttYXJnaW46NXB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb24tY29udHJvbF17bWFyZ2luLXJpZ2h0OjhweH1bZGF0YS1tb25zdGVyLXJvbGU9YmFkZ2Vde2Rpc3BsYXk6aW5saW5lLWZsZXh9W2RhdGEtbW9uc3Rlci1yb2xlPWJhZGdlLWxhYmVsXXthbGlnbi1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztnYXA6N3B4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufVtkYXRhLW1vbnN0ZXItcm9sZT1maWx0ZXJdLFtkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXItZmlsdGVyXXtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjIwMDtvcmRlcjo5OTk5OTk5OTt2aXNpYmlsaXR5OmhpZGRlbn1bZGF0YS1tb25zdGVyLXJvbGU9ZmlsdGVyXS5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Ym9yZGVyOjA7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKTtib3JkZXItYm90dG9tOjFweCBzb2xpZCB2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpO21pbi13aWR0aDo0MCU7b3V0bGluZTpub25lO3Zpc2liaWxpdHk6dmlzaWJsZX0uYWN0aXZlW2RhdGEtbW9uc3Rlci1yb2xlPWZpbHRlcl1bbmFtZT1wb3BwZXItZmlsdGVyXXtoZWlnaHQ6MS41ZW07bWFyZ2luOjIuNWVtO3BhZGRpbmc6MnB4O3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKSoyKX0ub3B0aW9uLWZpbHRlci1jb250cm9se2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtkaXNwbGF5OmZsZXg7aGVpZ2h0OjIuNWVtO21hcmdpbjotMS4xZW0gLTEuMWVtIC4zZW19W2RhdGEtbW9uc3Rlci1yb2xlPXJlbW92ZS1iYWRnZV17YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7aGVpZ2h0OjE2cHg7bWFyZ2luLWxlZnQ6NXB4Oy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNNC42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCA3LjI5M2wyLjY0Ni0yLjY0N2EuNS41IDAgMCAxIC43MDguNzA4TDguNzA3IDhsMi42NDcgMi42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDguNzA3bC0yLjY0NiAyLjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOEw3LjI5MyA4IDQuNjQ2IDUuMzU0YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7b3JkZXI6Mn1bZGF0YS1tb25zdGVyLXJvbGU9cmVtb3ZlLWJhZGdlXSxbZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNdey13ZWJraXQtbWFzay1wb3NpdGlvbjpjZW50ZXIgY2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyIGNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6LjhlbTttYXNrLXNpemU6LjhlbTttaW4taGVpZ2h0OjE2cHg7d2lkdGg6MTZweH1bZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNdey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZmlsbC1ydWxlPSdldmVub2RkJyBkPSdNMS42NDYgNC42NDZhLjUuNSAwIDAgMSAuNzA4IDBMOCAxMC4yOTNsNS42NDYtNS42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOGwtNiA2YS41LjUgMCAwIDEtLjcwOCAwbC02LTZhLjUuNSAwIDAgMSAwLS43MDgnLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTEuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggMTAuMjkzbDUuNjQ2LTUuNjQ3YS41LjUgMCAwIDEgLjcwOC43MDhsLTYgNmEuNS41IDAgMCAxLS43MDggMGwtNi02YS41LjUgMCAwIDEgMC0uNzA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9Lm9wZW5bZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBmaWxsLXJ1bGU9J2V2ZW5vZGQnIGQ9J003LjY0NiA0LjY0NmEuNS41IDAgMCAxIC43MDggMGw2IDZhLjUuNSAwIDAgMS0uNzA4LjcwOEw4IDUuNzA3bC01LjY0NiA1LjY0N2EuNS41IDAgMCAxLS43MDgtLjcwOHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGZpbGwtcnVsZT0nZXZlbm9kZCcgZD0nTTcuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwbDYgNmEuNS41IDAgMCAxLS43MDguNzA4TDggNS43MDdsLTUuNjQ2IDUuNjQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4eicvJTNFJTNDL3N2ZyUzRVxcXCIpfS5lbXB0eVtkYXRhLW1vbnN0ZXItcm9sZT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc117YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIGNsYXNzPSdiaSBiaS1kYXNoLWNpcmNsZScgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTggMTVBNyA3IDAgMSAxIDggMWE3IDcgMCAwIDEgMCAxNG0wIDFBOCA4IDAgMSAwIDggMGE4IDggMCAwIDAgMCAxNicvJTNFJTNDcGF0aCBkPSdNNCA4YS41LjUgMCAwIDEgLjUtLjVoN2EuNS41IDAgMCAxIDAgMWgtN0EuNS41IDAgMCAxIDQgOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2JpIGJpLWRhc2gtY2lyY2xlJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J000IDhhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgMCAxaC03QS41LjUgMCAwIDEgNCA4Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9LmNsZWFyW2RhdGEtbW9uc3Rlci1yb2xlPXN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfS5lcnJvcltkYXRhLW1vbnN0ZXItcm9sZT1zdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc117YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTEpOy13ZWJraXQtbWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J003LjAwMiAxMWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBNNy4xIDQuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwbC0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDB6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7bWFzay1pbWFnZTp1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScxNicgaGVpZ2h0PScxNicgZmlsbD0nY3VycmVudENvbG9yJyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDcGF0aCBkPSdNOCAxNUE3IDcgMCAxIDEgOCAxYTcgNyAwIDAgMSAwIDE0bTAgMUE4IDggMCAxIDAgOCAwYTggOCAwIDAgMCAwIDE2Jy8lM0UlM0NwYXRoIGQ9J003LjAwMiAxMWExIDEgMCAxIDEgMiAwIDEgMSAwIDAgMS0yIDBNNy4xIDQuOTk1YS45MDUuOTA1IDAgMSAxIDEuOCAwbC0uMzUgMy41MDdhLjU1Mi41NTIgMCAwIDEtMS4xIDB6Jy8lM0UlM0Mvc3ZnJTNFXFxcIil9LmxvYWRpbmdbZGF0YS1tb25zdGVyLXJvbGU9c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNde2FuaW1hdGlvbi1kdXJhdGlvbjoxczthbmltYXRpb24taXRlcmF0aW9uLWNvdW50OmluZmluaXRlO2FuaW1hdGlvbi1uYW1lOmFjdGl2aXR5O2FuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246Y3ViaWMtYmV6aWVyKDAsMCwuMiwxKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2FjdGl2aXR5JyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDY2lyY2xlIGN4PSc4JyBjeT0nOCcgcj0nOCcvJTNFJTNDL3N2ZyUzRVxcXCIpO21hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgY2xhc3M9J2FjdGl2aXR5JyB2aWV3Qm94PScwIDAgMTYgMTYnJTNFJTNDY2lyY2xlIGN4PSc4JyBjeT0nOCcgcj0nOCcvJTNFJTNDL3N2ZyUzRVxcXCIpfUBrZXlmcmFtZXMgYWN0aXZpdHl7MCV7dHJhbnNmb3JtOnNjYWxlKDEpfTUwJXt0cmFuc2Zvcm06c2NhbGUoLjEpfXRve3RyYW5zZm9ybTpzY2FsZSgxKX19W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbnNde2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3JvdzoxO3Njcm9sbGJhci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSkgdmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO3Njcm9sbGJhci13aWR0aDp0aGlufVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25de2FsaWduLWl0ZW1zOmNlbnRlcjtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpmbGV4O3BhZGRpbmc6NnB4IDVweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXSBsYWJlbHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dIGxhYmVsPmRpdnthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9bm8tb3B0aW9uc117YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNCk7Ym9yZGVyLXJhZGl1czouMmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KTttYXJnaW46MS4xZW0gMS4xZW0gMDtwYWRkaW5nOi4zZW0gLjhlbX0uc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1maWx0ZXJlZD10cnVlXSxbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eT1oaWRkZW5de2Rpc3BsYXk6bm9uZX1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItZm9jdXNlZD10cnVlXXtvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMik7b3V0bGluZS1vZmZzZXQ6LTJweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXT5pbnB1dDpmb2N1cyxbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXT5sYWJlbDpmb2N1c3tvdXRsaW5lOm5vbmV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGJ1aWxkTWFwIH0gZnJvbSBcIi4uLy4uL2RhdGEvYnVpbGRtYXAubWpzXCI7XG5pbXBvcnQgeyBEZWFkTWFuc1N3aXRjaCB9IGZyb20gXCIuLi8uLi91dGlsL2RlYWRtYW5zc3dpdGNoLm1qc1wiO1xuaW1wb3J0IHsgcG9zaXRpb25Qb3BwZXIgfSBmcm9tIFwiLi91dGlsL2Zsb2F0aW5nLXVpLm1qc1wiO1xuaW1wb3J0IHtcblx0YWRkQXR0cmlidXRlVG9rZW4sXG5cdGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUsXG5cdHJlbW92ZUF0dHJpYnV0ZVRva2VuLFxufSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUFJFRklYLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBDdXN0b21Db250cm9sIH0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21jb250cm9sLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdGdldFNsb3R0ZWRFbGVtZW50cyxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQge1xuXHRmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCxcblx0ZmlyZUN1c3RvbUV2ZW50LFxuXHRmaXJlRXZlbnQsXG59IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQsIGdldFdpbmRvdyB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IEZvcm1hdHRlciB9IGZyb20gXCIuLi8uLi90ZXh0L2Zvcm1hdHRlci5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbCB9IGZyb20gXCIuLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBJRCB9IGZyb20gXCIuLi8uLi90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7XG5cdGlzQXJyYXksXG5cdGlzRnVuY3Rpb24sXG5cdGlzSW50ZWdlcixcblx0aXNJdGVyYWJsZSxcblx0aXNPYmplY3QsXG5cdGlzUHJpbWl0aXZlLFxuXHRpc1N0cmluZyxcbn0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUFycmF5LCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IFByb2Nlc3NpbmcgfSBmcm9tIFwiLi4vLi4vdXRpbC9wcm9jZXNzaW5nLm1qc1wiO1xuaW1wb3J0IHsgU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgU2VsZWN0U3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc2VsZWN0Lm1qc1wiO1xuaW1wb3J0IHtcblx0Z2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMsXG5cdFRyYW5zbGF0aW9ucyxcbn0gZnJvbSBcIi4uLy4uL2kxOG4vdHJhbnNsYXRpb25zLm1qc1wiO1xuXG5leHBvcnQge1xuXHRTZWxlY3QsXG5cdHBvcHBlckVsZW1lbnRTeW1ib2wsXG5cdGdldFN1bW1hcnlUZW1wbGF0ZSxcblx0Z2V0U2VsZWN0aW9uVGVtcGxhdGUsXG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBub09wdGlvbnNBdmFpbGFibGVNZXNzYWdlID0gXCJObyBvcHRpb25zIGF2YWlsYWJsZS5cIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgY2xpY2tUb0xvYWRPcHRpb25zTWVzc2FnZSA9IFwiQ2xpY2sgdG8gbG9hZCBvcHRpb25zLlwiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCB0aW1lckNhbGxiYWNrU3ltYm9sID0gU3ltYm9sKFwidGltZXJDYWxsYmFja1wiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3Qga2V5RmlsdGVyRXZlbnRTeW1ib2wgPSBTeW1ib2woXCJrZXlGaWx0ZXJFdmVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgbGF6eUxvYWREb25lU3ltYm9sID0gU3ltYm9sKFwibGF6eUxvYWREb25lXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBpc0xvYWRpbmdTeW1ib2wgPSBTeW1ib2woXCJpc0xvYWRpbmdcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgY2xvc2VFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjbG9zZUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBjbGVhck9wdGlvbkV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNsZWFyT3B0aW9uRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IHJlc2l6ZU9ic2VydmVyU3ltYm9sID0gU3ltYm9sKFwicmVzaXplT2JzZXJ2ZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3Qga2V5RXZlbnRIYW5kbGVyID0gU3ltYm9sKFwia2V5RXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IGxhc3RGZXRjaGVkRGF0YVN5bWJvbCA9IFN5bWJvbChcImxhc3RGZXRjaGVkRGF0YVwiKTtcbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgaW5wdXRFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJpbnB1dEV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBjaGFuZ2VFdmVudEhhbmRsZXIgPSBTeW1ib2woXCJjaGFuZ2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBzZWxlY3Rpb25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwic2VsZWN0aW9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBjb250YWluZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udGFpbmVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiaW5saW5lRmlsdGVyRWxlbWVudFwiKTtcbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInBvcHBlckZpbHRlckVsZW1lbnRcIik7XG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXG5cdFwicG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFwiLFxuKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7U3ltYm9sfVxuICovXG5jb25zdCBvcHRpb25zRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcIm9wdGlvbnNFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IG5vT3B0aW9uc0F2YWlsYWJsZUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJub09wdGlvbnNBdmFpbGFibGVFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtTeW1ib2x9XG4gKi9cbmNvbnN0IHN0YXR1c09yUmVtb3ZlQmFkZ2VzRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInN0YXR1c09yUmVtb3ZlQmFkZ2VzRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3QgYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRTeW1ib2wgPSBTeW1ib2woXCJAQGFyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkaXNhYmxlZFJlcXVlc3RNYXJrZXIgPSBTeW1ib2woXCJAQGRpc2FibGVkUmVxdWVzdE1hcmtlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgRk9DVVNfRElSRUNUSU9OX1VQID0gMTtcbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IEZPQ1VTX0RJUkVDVElPTl9ET1dOID0gMjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRklMVEVSX01PREVfUkVNT1RFID0gXCJyZW1vdGVcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRklMVEVSX01PREVfT1BUSU9OUyA9IFwib3B0aW9uc1wiO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBGSUxURVJfTU9ERV9ESVNBQkxFRCA9IFwiZGlzYWJsZWRcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRklMVEVSX1BPU0lUSU9OX1BPUFBFUiA9IFwicG9wcGVyXCI7XG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBGSUxURVJfUE9TSVRJT05fSU5MSU5FID0gXCJpbmxpbmVcIjtcblxuLyoqXG4gKiBBIHNlbGVjdCBjb250cm9sIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IG9uZSBvciBtb3JlIG9wdGlvbnMgZnJvbSBhIGxpc3QuXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QvXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9zZWxlY3Qtd2l0aC1vcHRpb25zIFNlbGVjdCB3aXRoIG9wdGlvbnNcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vc2VsZWN0LXdpdGgtaHRtbC1vcHRpb25zIFNlbGVjdCB3aXRoIEhUTUwgb3B0aW9uc1xuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QtbXVsdGlwbGUgTXVsdGlwbGUgc2VsZWN0aW9uXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3NlbGVjdC1maWx0ZXIgRmlsdGVyXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3NlbGVjdC1mZXRjaCBGZXRjaCBvcHRpb25zXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3NlbGVjdC1sYXp5IExhenkgbG9hZFxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9zZWxlY3QtcmVtb3RlLWZpbHRlciBSZW1vdGUgZmlsdGVyXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIHNlbGVjdCBjb250cm9sIHRoYXQgY2FuIG1ha2UgeW91ciBsaWZlIGVhc2llciBhbmQgYWxzbyBsb29rcyBnb29kLlxuICogQGZpcmVzIG1vbnN0ZXItY2hhbmdlXG4gKiBAZmlyZXMgbW9uc3Rlci1jaGFuZ2VkXG4gKi9cbmNsYXNzIFNlbGVjdCBleHRlbmRzIEN1c3RvbUNvbnRyb2wge1xuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0aW5pdE9wdGlvbk9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge1N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3NlbGVjdEBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnQgc2VsZWN0aW9uIG9mIHRoZSBTZWxlY3Rcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXNlbGVjdCcpO1xuXHQgKiBjb25zb2xlLmxvZyhlLnZhbHVlKVxuXHQgKiAvLyBcdTIxQTYgMVxuXHQgKiAvLyBcdTIxQTYgWycxJywnMiddXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXQgdmFsdWUoKSB7XG5cdFx0cmV0dXJuIGNvbnZlcnRTZWxlY3Rpb25Ub1ZhbHVlLmNhbGwodGhpcywgdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIikpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9hdHRhY2hJbnRlcm5hbHN9XG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IGZvcm1Bc3NvY2lhdGVkKCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBzZWxlY3Rpb25cblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXNlbGVjdCcpO1xuXHQgKiBlLnZhbHVlPTFcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfGFycmF5fSB2YWx1ZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKiBAZmlyZXMgbW9uc3Rlci1zZWxlY3RlZCB0aGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBzZXRcblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRWYWx1ZVRvU2VsZWN0aW9uLmNhbGwodGhpcywgdmFsdWUpO1xuXHRcdHNldFNlbGVjdGlvblxuXHRcdFx0LmNhbGwodGhpcywgcmVzdWx0LnNlbGVjdGlvbilcblx0XHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0b2dnbGVFdmVudFR5cGU9Y2xpY2ssdG91Y2ggTGlzdCBvZiBldmVudCB0eXBlcyB0byBiZSBvYnNlcnZlZCBmb3Igb3BlbmluZyB0aGUgZHJvcGRvd25cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBkZWxlZ2F0ZXNGb2N1cz1mYWxzZSBsb3JlbSBbc2VlIG1vemlsbGEub3JnXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvU2hhZG93Um9vdC9kZWxlZ2F0ZXNGb2N1cylcblx0ICogQHByb3BlcnR5IHtPYmplY3RbXX0gb3B0aW9ucyBTZWxlY3Rpb24gb2Yga2V5IGlkZW50aWZpZXIgcGFpcnMgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24gYW5kIGRpc3BsYXllZCBpbiB0aGUgZHJvcGRvd24uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBvcHRpb25zW10ubGFiZWxcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG9wdGlvbnNbXS52YWx1ZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gb3B0aW9uc1tdLnZpc2liaWxpdHkgaGlkZGVuIG9yIHZpc2libGVcblx0ICogQHByb3BlcnR5IHtBcnJheX0gc2VsZWN0aW9uIFNlbGVjdGVkIG9wdGlvbnNcblx0ICogQHByb3BlcnR5IHtJbnRlZ2VyfSBzaG93TWF4T3B0aW9ucz0xMCBNYXhpbXVtIG51bWJlciBvZiB2aXNpYmxlIG9wdGlvbnMgYmVmb3JlIGEgc2Nyb2xsIGJhciBzaG91bGQgYmUgZGlzcGxheWVkLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZT1yYWRpbyBNdWx0aXBsZSAoY2hlY2tib3gpIG9yIHNpbmdsZSBzZWxlY3Rpb24gKHJhZGlvKVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZT0ocmFuZG9tIGlkKSBOYW1lIG9mIHRoZSBmb3JtIGZpZWxkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmwgTG9hZCBvcHRpb25zIGZyb20gc2VydmVyIHBlciB1cmxcblx0ICogQHByb3BlcnR5IHtvYmplY3R9IGxvb2t1cCBMb2FkIG9wdGlvbnMgZnJvbSBzZXJ2ZXIgcGVyIHVybFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbG9va3VwLnVybD1udWxsIExvYWQgb3B0aW9ucyBmcm9tIHNlcnZlciBwZXIgdXJsXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbG9va3VwLmdyb3VwaW5nPWZhbHNlIExvYWQgYWxsIHNlbGVjdGVkIG9wdGlvbnMgZnJvbSBzZXJ2ZXIgcGVyIHVybCBhdCBvbmNlICh0cnVlKSBvciBvbmUgYnkgb25lIChmYWxzZSlcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoIEZldGNoIFtzZWUgVXNpbmcgRmV0Y2ggbW96aWxsYS5vcmddKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEkvVXNpbmdfRmV0Y2gpXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWRpcmVjdD1lcnJvclxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubWV0aG9kPUdFVFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gubW9kZT1zYW1lLW9yaWdpblxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2guY3JlZGVudGlhbHM9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoLmhlYWRlcnM9e1wiYWNjZXB0XCI6XCJhcHBsaWNhdGlvbi9qc29uXCJ9fVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbGFiZWxzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuY2Fubm90LWJlLWxvYWRlZCBjYW5ub3QgYmUgbG9hZGVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMubm8tb3B0aW9ucy1hdmFpbGFibGUgbm8gb3B0aW9ucyBhdmFpbGFibGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5zZWxlY3QtYW4tb3B0aW9uIHNlbGVjdCBhbiBvcHRpb25cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5uby1vcHRpb24gbm8gb3B0aW9uIGluIHRoZSBsaXN0LCBtYXliZSB5b3UgaGF2ZSB0byBjaGFuZ2UgdGhlIGZpbHRlclxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmVhdHVyZXMgTGlzdCB3aXRoIGZlYXR1cmVzXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmVhdHVyZXMuY2xlYXJBbGw9dHJ1ZSBEaXNwbGF5IG9mIGEgZGVsZXRlIGJ1dHRvbiB0byBkZWxldGUgdGhlIGVudGlyZSBzZWxlY3Rpb25cblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy5jbGVhcj10cnVlIERpc3BsYXkgb2YgYSBkZWxldGUga2V5IGZvciBkZWxldGluZyB0aGUgc3BlY2lmaWMgc2VsZWN0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmVhdHVyZXMubGF6eUxvYWQ9ZmFsc2UgTG9hZCBvcHRpb25zIHdoZW4gZmlyc3Qgb3BlbmluZyB0aGUgZHJvcGRvd24uIChIaW50OyBsYXp5bExvYWQgaXMgbm90IHN1cHBvcnRlZCB3aXRoIHJlbW90ZSBmaWx0ZXIpXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbGVhbn0gZmVhdHVyZXMuY2xvc2VPblNlbGVjdD1mYWxzZSBDbG9zZSB0aGUgZHJvcGRvd24gd2hlbiBhbiBvcHRpb24gaXMgc2VsZWN0ZWQgKHNpbmNlIDMuNTQuMClcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy5lbXB0eVZhbHVlSWZOb09wdGlvbnM9ZmFsc2UgSWYgbm8gb3B0aW9ucyBhcmUgYXZhaWxhYmxlLCB0aGUgc2VsZWN0aW9uIGlzIHNldCB0byBhbiBlbXB0eSBhcnJheVxuXHQgKiBAcHJvcGVydHkge0Jvb2xlYW59IGZlYXR1cmVzLnN0b3JlRmV0Y2hlZERhdGE9ZmFsc2UgU3RvcmUgZmV0Y2hlZCBkYXRhIGluIHRoZSBvYmplY3Rcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmZWF0dXJlcy51c2VTdHJpY3RWYWx1ZUNvbXBhcmlzb249dHJ1ZSBVc2Ugc3RyaWN0IHZhbHVlIGNvbXBhcmlzb24gZm9yIHRoZSBzZWxlY3Rpb25cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGZpbHRlci5kZWZhdWx0VmFsdWU9bnVsbCBEZWZhdWx0IGZpbHRlciB2YWx1ZSwgaWYgdGhlIGZpbHRlciBpcyBlbXB0eSwgaWYgdGhlIGRlZmF1bHQgdmFsdWUgaXMgbnVsbCwgdGhlbiBubyByZXF1ZXN0IGlzIG1hZGVcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBmaWx0ZXIubW9kZT1vcHRpb25zIEZpbHRlciBtb2RlLCB2YWx1ZXM6IG9wdGlvbnMsIHJlbW90ZSwgZGlzYWJsZWQgKEhpbnQ7IGxhenlsTG9hZCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggcmVtb3RlIGZpbHRlciwgaWYgeW91IHVzZSByZW1vdGUgZmlsdGVyLCB0aGUgbGF6eUxvYWQgaXMgZGlzYWJsZWQpXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlTWFwcGluZyBNYXBwaW5nIG9mIHRoZSB0ZW1wbGF0ZSBwbGFjZWhvbGRlcnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlTWFwcGluZy5zZWxlY3RlZCBTZWxlY3RlZCBUZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcG9wcGVyIFtQb3BwZXJKUyBPcHRpb25zXShodHRwczovL3BvcHBlci5qcy5vcmcvZG9jcy92Mi8pXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwb3BwZXIucGxhY2VtZW50PWJvdHRvbSBQb3BwZXJKUyBwbGFjZW1lbnRcblx0ICogQHByb3BlcnR5IHtPYmplY3RbXX0gbW9kaWZpZXJzPXtuYW1lOm9mZnNldH0gUG9wcGVySlMgcGxhY2VtZW50XG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBtYXBwaW5nXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXBwaW5nLnNlbGVjdG9yPSogUGF0aCB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcubGFiZWxUZW1wbGF0ZT1cIlwiIHRlbXBsYXRlIHdpdGggdGhlIGxhYmVsIHBsYWNlaG9sZGVycyBpbiB0aGUgZm9ybSAke25hbWV9LCB3aGVyZSBuYW1lIGlzIHRoZSBrZXkgKCoqKVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gbWFwcGluZy52YWx1ZVRlbXBsYXRlPVwiXCIgdGVtcGxhdGUgd2l0aCB0aGUgdmFsdWUgcGxhY2Vob2xkZXJzIGluIHRoZSBmb3JtICR7bmFtZX0sIHdoZXJlIG5hbWUgaXMgdGhlIGtleVxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVGaWx0ZXJDYWxsYmFja3x1bmRlZmluZWR9IG1hcHBpbmcuZmlsdGVyIEZpbHRlcmluZyBvZiB2YWx1ZXMgdmlhIGEgZnVuY3Rpb25cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZvcm1hdHRlclxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmZvcm1hdHRlclNlbGVjdGlvbkNhbGxiYWNrfHVuZGVmaW5lZH0gZm9ybWF0dGVyLnNlbGVjdGlvbiBmb3JtYXQgc2VsZWN0aW9uIGxhYmVsXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0e1xuXHRcdFx0XHR0b2dnbGVFdmVudFR5cGU6IFtcImNsaWNrXCIsIFwidG91Y2hcIl0sXG5cdFx0XHRcdGRlbGVnYXRlc0ZvY3VzOiBmYWxzZSxcblx0XHRcdFx0b3B0aW9uczogW10sXG5cdFx0XHRcdHNlbGVjdGlvbjogW10sXG5cdFx0XHRcdHNob3dNYXhPcHRpb25zOiAxMCxcblx0XHRcdFx0dHlwZTogXCJyYWRpb1wiLFxuXHRcdFx0XHRuYW1lOiBuZXcgSUQoXCJzXCIpLnRvU3RyaW5nKCksXG5cdFx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdFx0Y2xlYXJBbGw6IHRydWUsXG5cdFx0XHRcdFx0Y2xlYXI6IHRydWUsXG5cdFx0XHRcdFx0bGF6eUxvYWQ6IGZhbHNlLFxuXHRcdFx0XHRcdGNsb3NlT25TZWxlY3Q6IGZhbHNlLFxuXHRcdFx0XHRcdGVtcHR5VmFsdWVJZk5vT3B0aW9uczogZmFsc2UsXG5cdFx0XHRcdFx0c3RvcmVGZXRjaGVkRGF0YTogZmFsc2UsXG5cdFx0XHRcdFx0dXNlU3RyaWN0VmFsdWVDb21wYXJpc29uOiBmYWxzZSxcblx0XHRcdFx0fSxcblx0XHRcdFx0dXJsOiBudWxsLFxuXHRcdFx0XHRsb29rdXA6IHtcblx0XHRcdFx0XHR1cmw6IG51bGwsXG5cdFx0XHRcdFx0Z3JvdXBpbmc6IGZhbHNlLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0XHRcImNhbm5vdC1iZS1sb2FkZWRcIjogXCJDYW5ub3QgYmUgbG9hZGVkXCIsXG5cdFx0XHRcdFx0XCJuby1vcHRpb25zLWF2YWlsYWJsZVwiOiBub09wdGlvbnNBdmFpbGFibGVNZXNzYWdlLFxuXHRcdFx0XHRcdFwiY2xpY2stdG8tbG9hZC1vcHRpb25zXCI6IGNsaWNrVG9Mb2FkT3B0aW9uc01lc3NhZ2UsXG5cdFx0XHRcdFx0XCJzZWxlY3QtYW4tb3B0aW9uXCI6IFwiU2VsZWN0IGFuIG9wdGlvblwiLFxuXHRcdFx0XHRcdFwic3VtbWFyeS10ZXh0XCI6IHtcblx0XHRcdFx0XHRcdHplcm86IFwiTm8gZW50cmllcyB3ZXJlIHNlbGVjdGVkXCIsXG5cdFx0XHRcdFx0XHRvbmU6ICc8c3BhbiBjbGFzcz1cIm1vbnN0ZXItYmFkZ2UtcHJpbWFyeS1waWxsXCI+MTwvc3Bhbj4gZW50cnkgd2FzIHNlbGVjdGVkJyxcblx0XHRcdFx0XHRcdG90aGVyOlxuXHRcdFx0XHRcdFx0XHQnPHNwYW4gY2xhc3M9XCJtb25zdGVyLWJhZGdlLXByaW1hcnktcGlsbFwiPiR7Y291bnR9PC9zcGFuPiBlbnRyaWVzIHdlcmUgc2VsZWN0ZWQnLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XCJuby1vcHRpb25zXCI6XG5cdFx0XHRcdFx0XHRcIlVuZm9ydHVuYXRlbHksIHRoZXJlIGFyZSBubyBvcHRpb25zIGF2YWlsYWJsZSBpbiB0aGUgbGlzdC5cIixcblx0XHRcdFx0XHRcIm5vLW9wdGlvbnMtZm91bmRcIjpcblx0XHRcdFx0XHRcdFwiTm8gb3B0aW9ucyBhcmUgYXZhaWxhYmxlIGluIHRoZSBsaXN0LiBQbGVhc2UgY29uc2lkZXIgbW9kaWZ5aW5nIHRoZSBmaWx0ZXIuXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1lc3NhZ2VzOiB7XG5cdFx0XHRcdFx0Y29udHJvbDogbnVsbCxcblx0XHRcdFx0XHRzZWxlY3RlZDogbnVsbCxcblx0XHRcdFx0XHRlbXB0eU9wdGlvbnM6IG51bGwsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZldGNoOiB7XG5cdFx0XHRcdFx0cmVkaXJlY3Q6IFwiZXJyb3JcIixcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsXG5cdFx0XHRcdFx0bW9kZTogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRcdGNyZWRlbnRpYWxzOiBcInNhbWUtb3JpZ2luXCIsXG5cdFx0XHRcdFx0aGVhZGVyczoge1xuXHRcdFx0XHRcdFx0YWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRmaWx0ZXI6IHtcblx0XHRcdFx0XHRkZWZhdWx0VmFsdWU6IG51bGwsXG5cdFx0XHRcdFx0bW9kZTogRklMVEVSX01PREVfRElTQUJMRUQsXG5cdFx0XHRcdFx0cG9zaXRpb246IEZJTFRFUl9QT1NJVElPTl9JTkxJTkUsXG5cdFx0XHRcdFx0bWFya2VyOiB7XG5cdFx0XHRcdFx0XHRvcGVuOiBcIntcIixcblx0XHRcdFx0XHRcdGNsb3NlOiBcIn1cIixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdFx0YmFkZ2U6IFwibW9uc3Rlci1iYWRnZS1wcmltYXJ5XCIsXG5cdFx0XHRcdFx0c3RhdHVzT3JSZW1vdmVCYWRnZTogXCJlbXB0eVwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtYXBwaW5nOiB7XG5cdFx0XHRcdFx0c2VsZWN0b3I6IFwiKlwiLFxuXHRcdFx0XHRcdGxhYmVsVGVtcGxhdGU6IFwiXCIsXG5cdFx0XHRcdFx0dmFsdWVUZW1wbGF0ZTogXCJcIixcblx0XHRcdFx0XHRmaWx0ZXI6IG51bGwsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZvcm1hdHRlcjoge1xuXHRcdFx0XHRcdHNlbGVjdGlvbjogYnVpbGRTZWxlY3Rpb25MYWJlbCxcblx0XHRcdFx0fSxcblx0XHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0dGVtcGxhdGVNYXBwaW5nOiB7XG5cdFx0XHRcdFx0LyoqIHdpdGggdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLXNlbGVjdGVkLXRlbXBsYXRlYCB0aGUgdGVtcGxhdGUgZm9yIHRoZSBzZWxlY3RlZCBvcHRpb25zIGNhbiBiZSBkZWZpbmVkLiAqL1xuXHRcdFx0XHRcdHNlbGVjdGVkOiBnZXRTZWxlY3Rpb25UZW1wbGF0ZSgpLFxuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdHBvcHBlcjoge1xuXHRcdFx0XHRcdHBsYWNlbWVudDogXCJib3R0b21cIixcblx0XHRcdFx0XHRtaWRkbGV3YXJlOiBbXCJmbGlwXCIsIFwib2Zmc2V0OjFcIl0sXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0aW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzLmNhbGwodGhpcyksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTZWxlY3R9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwoc2VsZik7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHNlbGYpO1xuXG5cdFx0bGV0IGxhenlMb2FkRmxhZyA9IHNlbGYuZ2V0T3B0aW9uKFwiZmVhdHVyZXMubGF6eUxvYWRcIiwgZmFsc2UpO1xuXHRcdGxldCByZW1vdGVGaWx0ZXJGbGFnID0gZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpID09PSBGSUxURVJfTU9ERV9SRU1PVEU7XG5cblx0XHRpZiAoZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpID09PSBGSUxURVJfTU9ERV9SRU1PVEUpIHtcblx0XHRcdHNlbGYuZ2V0T3B0aW9uKFwiZmVhdHVyZXMubGF6eUxvYWRcIiwgZmFsc2UpO1xuXHRcdFx0aWYgKGxhenlMb2FkRmxhZyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdFx0XCJsYXp5TG9hZCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggcmVtb3RlIGZpbHRlclwiLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRsYXp5TG9hZEZsYWcgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoc2VsZi5oYXNBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSkge1xuXHRcdFx0bmV3IFByb2Nlc3NpbmcoMTAsICgpID0+IHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKFwidmFsdWVcIik7XG5cdFx0XHR9KVxuXHRcdFx0XHQucnVuKClcblx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKHNlbGYuZ2V0T3B0aW9uKFwidXJsXCIpICE9PSBudWxsKSB7XG5cdFx0XHRpZiAobGF6eUxvYWRGbGFnIHx8IHJlbW90ZUZpbHRlckZsYWcpIHtcblx0XHRcdFx0bG9va3VwU2VsZWN0aW9uLmNhbGwoc2VsZik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLmZldGNoKCkuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgbGFzdFZhbHVlID0gc2VsZi52YWx1ZTtcblx0XHRzZWxmW2ludGVybmFsU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihcblx0XHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmIChpc09iamVjdCh0aGlzKSAmJiB0aGlzIGluc3RhbmNlb2YgUHJveHlPYnNlcnZlcikge1xuXHRcdFx0XHRcdGNvbnN0IG4gPSB0aGlzLmdldFN1YmplY3QoKT8ub3B0aW9ucz8udmFsdWU7XG5cblx0XHRcdFx0XHRpZiAobGFzdFZhbHVlICE9PSBuKSB7XG5cdFx0XHRcdFx0XHRsYXN0VmFsdWUgPSBuO1xuXHRcdFx0XHRcdFx0c2V0U2VsZWN0aW9uXG5cdFx0XHRcdFx0XHRcdC5jYWxsKHNlbGYsIG4pXG5cdFx0XHRcdFx0XHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdFx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBgJHtlfWApO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pLFxuXHRcdCk7XG5cblx0XHRhcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdC5jYWxsKHNlbGYpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7Kn1cblx0ICogQHRocm93cyB7RXJyb3J9IHN0b3JlRmV0Y2hlZERhdGEgaXMgbm90IGVuYWJsZWRcblx0ICogQHNpbmNlIDMuNjYuMFxuXHQgKi9cblx0Z2V0TGFzdEZldGNoZWREYXRhKCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnN0b3JlRmV0Y2hlZERhdGFcIikgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzdG9yZUZldGNoZWREYXRhIGlzIG5vdCBlbmFibGVkXCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzPy5bbGFzdEZldGNoZWREYXRhU3ltYm9sXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmNsaWNrKCkgbWV0aG9kIHNpbXVsYXRlcyBhIGNsaWNrIG9uIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICpcblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvY2xpY2t9XG5cdCAqL1xuXHRjbGljaygpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRvZ2dsZS5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uZm9jdXMoKSBtZXRob2Qgc2V0cyBmb2N1cyBvbiB0aGUgaW50ZXJuYWwgYnV0dG9uIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBzaW5jZSAzLjI3LjBcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2ZvY3VzfVxuXHQgKi9cblx0Zm9jdXMob3B0aW9ucykge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdFx0Z2F0aGVyU3RhdGUuY2FsbCh0aGlzKTtcblx0XHRcdGZvY3VzRmlsdGVyLmNhbGwodGhpcywgb3B0aW9ucyk7XG5cdFx0fSlcblx0XHRcdC5ydW4oKVxuXHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGAke2V9YCk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmJsdXIoKSBtZXRob2QgcmVtb3ZlcyBmb2N1cyBmcm9tIHRoZSBpbnRlcm5hbCBidXR0b24gZWxlbWVudC5cblx0ICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxFbGVtZW50L2JsdXJcblx0ICovXG5cdGJsdXIoKSB7XG5cdFx0bmV3IFByb2Nlc3NpbmcoKCkgPT4ge1xuXHRcdFx0Z2F0aGVyU3RhdGUuY2FsbCh0aGlzKTtcblx0XHRcdGJsdXJGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHR9KVxuXHRcdFx0LnJ1bigpXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIElmIG5vIHVybCBpcyBzcGVjaWZpZWQsIHRoZSBvcHRpb25zIGFyZSB0YWtlbiBmcm9tIHRoZSBDb21wb25lbnQgaXRzZWxmLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybCBVUkwgdG8gZmV0Y2ggdGhlIG9wdGlvbnNcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGZldGNoKHVybCkge1xuXHRcdHJldHVybiBmZXRjaEl0LmNhbGwodGhpcywgdXJsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0Y29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblx0XHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXG5cdFx0cGFyc2VTbG90c1RvT3B0aW9ucy5jYWxsKHRoaXMpO1xuXHRcdGF0dGFjaFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cblx0XHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0XHRnYXRoZXJTdGF0ZS5jYWxsKHRoaXMpO1xuXHRcdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHR9KVxuXHRcdFx0LnJ1bigpXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXHRcdGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuXHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXG5cdFx0ZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogSW1wb3J0IFNlbGVjdCBPcHRpb25zIGZyb20gZGF0YXNldFxuXHQgKiBOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCB0aGUgY29udHJvbCBkZWZhdWx0cy9vcHRpb25zXG5cdCAqXG5cdCAqIEBwYXJhbSB7YXJyYXl8b2JqZWN0fE1hcHxTZXR9IGRhdGFcblx0ICogQHJldHVybiB7U2VsZWN0fVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWFwIGlzIG5vdCBpdGVyYWJsZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBsYWJlbCBjb25maWd1cmF0aW9uXG5cdCAqIEBmaXJlcyBtb25zdGVyLW9wdGlvbnMtc2V0IHRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgb3B0aW9ucyBhcmUgc2V0XG5cdCAqL1xuXHRpbXBvcnRPcHRpb25zKGRhdGEpIHtcblx0XHRjb25zdCBtYXBwaW5nT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZ1wiLCB7fSk7XG5cdFx0Y29uc3Qgc2VsZWN0b3IgPSBtYXBwaW5nT3B0aW9ucz8uW1wic2VsZWN0b3JcIl07XG5cdFx0Y29uc3QgbGFiZWxUZW1wbGF0ZSA9IG1hcHBpbmdPcHRpb25zPy5bXCJsYWJlbFRlbXBsYXRlXCJdO1xuXHRcdGNvbnN0IHZhbHVlVGVtcGxhdGUgPSBtYXBwaW5nT3B0aW9ucz8uW1widmFsdWVUZW1wbGF0ZVwiXTtcblx0XHRjb25zdCBmaWx0ZXIgPSBtYXBwaW5nT3B0aW9ucz8uW1wiZmlsdGVyXCJdO1xuXG5cdFx0bGV0IGZsYWcgPSBmYWxzZTtcblx0XHRpZiAobGFiZWxUZW1wbGF0ZSA9PT0gXCJcIikge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgXCJlbXB0eSBsYWJlbCB0ZW1wbGF0ZVwiKTtcblx0XHRcdGZsYWcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICh2YWx1ZVRlbXBsYXRlID09PSBcIlwiKSB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBcImVtcHR5IHZhbHVlIHRlbXBsYXRlXCIpO1xuXHRcdFx0ZmxhZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKGZsYWcgPT09IHRydWUpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgbGFiZWwgY29uZmlndXJhdGlvblwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBtYXAgPSBidWlsZE1hcChkYXRhLCBzZWxlY3RvciwgbGFiZWxUZW1wbGF0ZSwgdmFsdWVUZW1wbGF0ZSwgZmlsdGVyKTtcblxuXHRcdGNvbnN0IG9wdGlvbnMgPSBbXTtcblxuXHRcdGlmICghaXNJdGVyYWJsZShtYXApKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtYXAgaXMgbm90IGl0ZXJhYmxlXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IHZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcblxuXHRcdG1hcC5mb3JFYWNoKChsYWJlbCwgdmFsdWUpID0+IHtcblx0XHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRsYWJlbCxcblx0XHRcdFx0dmlzaWJpbGl0eSxcblx0XHRcdFx0ZGF0YTogbWFwLmdldCh2YWx1ZSksXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdHJ1bkFzT3B0aW9uTGVuZ3RoQ2hhbmdlZC5jYWxsKHRoaXMsIG1hcC5zaXplKTtcblx0XHR0aGlzLnNldE9wdGlvbihcIm9wdGlvbnNcIiwgb3B0aW9ucyk7XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLW9wdGlvbnMtc2V0XCIsIHtcblx0XHRcdG9wdGlvbnMsXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcmV0dXJuIHtTZWxlY3R9XG5cdCAqL1xuXHRjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbigpIHtcblx0XHRjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbi5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1zZWxlY3RcIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW1NlbGVjdFN0eWxlU2hlZXRdO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbG9va3VwU2VsZWN0aW9uKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRjb25zdCBzZWxlY3Rpb24gPSBzZWxmLmdldE9wdGlvbihcInNlbGVjdGlvblwiKTtcblx0XHRpZiAoc2VsZWN0aW9uLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChzZWxmW2lzTG9hZGluZ1N5bWJvbF0gPT09IHRydWUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoc2VsZltsYXp5TG9hZERvbmVTeW1ib2xdID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IHVybCA9IHNlbGYuZ2V0T3B0aW9uKFwidXJsXCIpO1xuXHRcdGxldCBsb29rdXBVcmwgPSBzZWxmLmdldE9wdGlvbihcImxvb2t1cC51cmxcIik7XG5cdFx0aWYgKGxvb2t1cFVybCAhPT0gbnVsbCkge1xuXHRcdFx0dXJsID0gbG9va3VwVXJsO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImxvb2t1cC5ncm91cGluZ1wiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0ZmlsdGVyRnJvbVJlbW90ZUJ5VmFsdWVcblx0XHRcdFx0LmNhbGwoXG5cdFx0XHRcdFx0c2VsZixcblx0XHRcdFx0XHR1cmwsXG5cdFx0XHRcdFx0c2VsZWN0aW9uLm1hcCgocykgPT4gcz8uW1widmFsdWVcIl0pLFxuXHRcdFx0XHQpXG5cdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHNlbGYsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGAke2V9YCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgcyBvZiBzZWxlY3Rpb24pIHtcblx0XHRcdGlmIChzPy5bXCJ2YWx1ZVwiXSkge1xuXHRcdFx0XHRmaWx0ZXJGcm9tUmVtb3RlQnlWYWx1ZS5jYWxsKHNlbGYsIHVybCwgcz8uW1widmFsdWVcIl0pLmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZiwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LCAxMDApO1xufVxuXG5mdW5jdGlvbiBmZXRjaEl0KHVybCwgY29udHJvbE9wdGlvbnMpIHtcblx0aWYgKHVybCBpbnN0YW5jZW9mIFVSTCkge1xuXHRcdHVybCA9IHVybC50b1N0cmluZygpO1xuXHR9XG5cblx0aWYgKHVybCAhPT0gdW5kZWZpbmVkICYmIHVybCAhPT0gbnVsbCkge1xuXHRcdHVybCA9IHZhbGlkYXRlU3RyaW5nKHVybCk7XG5cdH0gZWxzZSB7XG5cdFx0dXJsID0gdGhpcy5nZXRPcHRpb24oXCJ1cmxcIik7XG5cdFx0aWYgKHVybCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHVybCBkZWZpbmVkXCIpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJsb2FkaW5nXCIpO1xuXG5cdFx0bmV3IFByb2Nlc3NpbmcoMTAsICgpID0+IHtcblx0XHRcdGZldGNoRGF0YVxuXHRcdFx0XHQuY2FsbCh0aGlzLCB1cmwpXG5cdFx0XHRcdC50aGVuKChtYXApID0+IHtcblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRpc09iamVjdChtYXApIHx8XG5cdFx0XHRcdFx0XHRpc0FycmF5KG1hcCkgfHxcblx0XHRcdFx0XHRcdG1hcCBpbnN0YW5jZW9mIFNldCB8fFxuXHRcdFx0XHRcdFx0bWFwIGluc3RhbmNlb2YgTWFwXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmltcG9ydE9wdGlvbnMobWFwKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbCh0aGlzLCBcImVycm9yXCIpO1xuXHRcdFx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dGhpc1tsYXN0RmV0Y2hlZERhdGFTeW1ib2xdID0gbWFwO1xuXG5cdFx0XHRcdFx0XHRsZXQgcmVzdWx0O1xuXHRcdFx0XHRcdFx0Y29uc3Qgc2VsZWN0aW9uID0gdGhpcy5nZXRPcHRpb24oXCJzZWxlY3Rpb25cIik7XG5cdFx0XHRcdFx0XHRsZXQgbmV3VmFsdWUgPSBbXTtcblx0XHRcdFx0XHRcdGlmIChzZWxlY3Rpb24pIHtcblx0XHRcdFx0XHRcdFx0bmV3VmFsdWUgPSBzZWxlY3Rpb247XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuaGFzQXR0cmlidXRlKFwidmFsdWVcIikpIHtcblx0XHRcdFx0XHRcdFx0bmV3VmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZXN1bHQgPSBzZXRTZWxlY3Rpb24uY2FsbCh0aGlzLCBuZXdWYWx1ZSk7XG5cdFx0XHRcdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjaGVja09wdGlvblN0YXRlLmNhbGwodGhpcyk7XG5cdFx0XHRcdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJjbG9zZWRcIik7XG5cdFx0XHRcdFx0XHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJlc3VsdCk7XG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJlcnJvclwiKTtcblx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiaW52YWxpZCByZXNwb25zZVwiKSk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJlcnJvclwiKTtcblx0XHRcdFx0XHRyZWplY3QoZSk7XG5cdFx0XHRcdH0pO1xuXHRcdH0pXG5cdFx0XHQucnVuKClcblx0XHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwiZXJyb3JcIik7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdH0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBwYXNzIGEgVVJMIHRvIHRoaXMgc2VsZWN0LlxuICpcbiAqIGBgYFxuICogPG1vbnN0ZXItc2VsZWN0IGRhdGEtbW9uc3Rlci11cmw9XCJodHRwczovL2V4YW1wbGUuY29tL1wiPjwvbW9uc3Rlci1zZWxlY3Q+XG4gKiBgYGBcbiAqXG4gKiBAcHJpdmF0ZVxuICogQGRlcHJlY2F0ZWQgMjAyNC0wMS0yMSAoeW91IHNob3VsZCB1c2UgZGF0YS1tb25zdGVyLW9wdGlvbi0uLi4pXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cygpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5cdGNvbnN0IHRlbXBsYXRlID0gdGhpcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItc2VsZWN0ZWQtdGVtcGxhdGVcIik7XG5cdGlmIChpc1N0cmluZyh0ZW1wbGF0ZSkpIHtcblx0XHRpZiAoIW9wdGlvbnNbXCJ0ZW1wbGF0ZU1hcHBpbmdcIl0pIG9wdGlvbnNbXCJ0ZW1wbGF0ZU1hcHBpbmdcIl0gPSB7fTtcblxuXHRcdHN3aXRjaCAodGVtcGxhdGUpIHtcblx0XHRcdGNhc2UgXCJzdW1tYXJ5XCI6XG5cdFx0XHRjYXNlIFwiZGVmYXVsdFwiOlxuXHRcdFx0XHRvcHRpb25zW1widGVtcGxhdGVNYXBwaW5nXCJdW1wic2VsZWN0ZWRcIl0gPSBnZXRTdW1tYXJ5VGVtcGxhdGUoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwic2VsZWN0ZWRcIjpcblx0XHRcdFx0b3B0aW9uc1tcInRlbXBsYXRlTWFwcGluZ1wiXVtcInNlbGVjdGVkXCJdID0gZ2V0U2VsZWN0aW9uVGVtcGxhdGUoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdFx0XCJpbnZhbGlkIHRlbXBsYXRlLCB1c2Ugc3VtbWFyeSBvciBzZWxlY3RlZFwiLFxuXHRcdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvcHRpb25zO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFJlc2l6ZU9ic2VydmVyKCkge1xuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcblx0XHRpZiAodGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdLnRvdWNoKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLm9ic2VydmUodGhpcy5wYXJlbnRFbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCkge1xuXHRpZiAodGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gaW5zdGFuY2VvZiBSZXNpemVPYnNlcnZlcikge1xuXHRcdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdLmRpc2Nvbm5lY3QoKTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb25UZW1wbGF0ZSgpIHtcblx0cmV0dXJuIGA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic2VsZWN0aW9uXCIgcGFydD1cInNlbGVjdGlvblwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJzZWxlY3Rpb24gcGF0aDpzZWxlY3Rpb25cIiByb2xlPVwic2VhcmNoXCJcbiAgICAgICAgICAgID48aW5wdXQgdHlwZT1cInRleHRcIiByb2xlPVwic2VhcmNoYm94XCJcbiAgICAgICAgICAgICAgICAgICAgcGFydD1cImlubGluZS1maWx0ZXJcIiBuYW1lPVwiaW5saW5lLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgID48ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlcy5jb250cm9sXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5gO1xufVxuXG5mdW5jdGlvbiBnZXRTdW1tYXJ5VGVtcGxhdGUoKSB7XG5cdHJldHVybiBgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInNlbGVjdGlvblwiIHJvbGU9XCJzZWFyY2hcIiBwYXJ0PVwic3VtbWFyeVwiPlxuICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHJvbGU9XCJzZWFyY2hib3hcIlxuICAgICAgICAgICBwYXJ0PVwiaW5saW5lLWZpbHRlclwiIG5hbWU9XCJpbmxpbmUtZmlsdGVyXCJcbiAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJmaWx0ZXJcIlxuICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgID5cbiAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDptZXNzYWdlcy5zZWxlY3RlZFwiPjwvZGl2PiAgICBcbjwvZGl2PmA7XG59XG5cbi8qKlxuICogQHJldHVybiB7dm9pZH1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU2xvdHNUb09wdGlvbnMoKSB7XG5cdGxldCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXHRpZiAoIWlzSXRlcmFibGUob3B0aW9ucykpIHtcblx0XHRvcHRpb25zID0gW107XG5cdH1cblxuXHRsZXQgY291bnRlciA9IDE7XG5cdGdldFNsb3R0ZWRFbGVtZW50cy5jYWxsKHRoaXMsIFwiZGl2XCIpLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRsZXQgdmFsdWUgPSAoY291bnRlcisrKS50b1N0cmluZygpO1xuXHRcdGxldCB2aXNpYmlsaXR5ID0gXCJ2aXNpYmxlXCI7XG5cblx0XHRpZiAobm9kZS5oYXNBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItdmFsdWVcIikpIHtcblx0XHRcdHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnN0ZXItdmFsdWVcIik7XG5cdFx0fVxuXG5cdFx0bGV0IGxhYmVsID0gbm9kZS5vdXRlckhUTUw7XG5cblx0XHRpZiAobm9kZS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIikge1xuXHRcdFx0dmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG5cdFx0fVxuXG5cdFx0b3B0aW9ucy5wdXNoKHtcblx0XHRcdHZhbHVlLFxuXHRcdFx0bGFiZWwsXG5cdFx0XHR2aXNpYmlsaXR5LFxuXHRcdH0pO1xuXHR9KTtcblxuXHRydW5Bc09wdGlvbkxlbmd0aENoYW5nZWQuY2FsbCh0aGlzLCBvcHRpb25zLmxlbmd0aCk7XG5cdHRoaXMuc2V0T3B0aW9uKFwib3B0aW9uc1wiLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiB3YWl0IHVudGlsIGFsbCBvcHRpb25zIGFyZSBmaW5pc2hlZCByZW5kZXJpbmdcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtpbnR9IHRhcmdldExlbmd0aFxuICovXG5mdW5jdGlvbiBydW5Bc09wdGlvbkxlbmd0aENoYW5nZWQodGFyZ2V0TGVuZ3RoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGlmICghc2VsZltvcHRpb25zRWxlbWVudFN5bWJvbF0pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBjYWxsYmFjayA9IGZ1bmN0aW9uIChtdXRhdGlvbnNMaXN0LCBvYnNlcnZlcikge1xuXHRcdGNvbnN0IHJ1biA9IGZhbHNlO1xuXHRcdGZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zTGlzdCkge1xuXHRcdFx0aWYgKG11dGF0aW9uLnR5cGUgPT09IFwiY2hpbGRMaXN0XCIpIHtcblx0XHRcdFx0Y29uc3QgcnVuID0gdHJ1ZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJ1biA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3Qgbm9kZXMgPSBzZWxmW29wdGlvbnNFbGVtZW50U3ltYm9sXS5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdFx0XHRgZGl2WyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbl1gLFxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKG5vZGVzLmxlbmd0aCA9PT0gdGFyZ2V0TGVuZ3RoKSB7XG5cdFx0XHRcdGNoZWNrT3B0aW9uU3RhdGUuY2FsbChzZWxmKTtcblx0XHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrKTtcblx0b2JzZXJ2ZXIub2JzZXJ2ZShzZWxmW29wdGlvbnNFbGVtZW50U3ltYm9sXSwge1xuXHRcdGF0dHJpYnV0ZXM6IGZhbHNlLFxuXHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRzdWJ0cmVlOiB0cnVlLFxuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7Kn1cbiAqL1xuZnVuY3Rpb24gYnVpbGRTZWxlY3Rpb25MYWJlbCh2YWx1ZSkge1xuXHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdGxldCBvID0gb3B0aW9ucz8uW2ldO1xuXHRcdGxldCBsLCB2LCB2MjtcblxuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnVzZVN0cmljdFZhbHVlQ29tcGFyaXNvblwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0diA9IHZhbHVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR2ID0gYCR7dmFsdWV9YDtcblx0XHR9XG5cblx0XHRpZiAoaXNQcmltaXRpdmUobykgJiYgbyA9PT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBvO1xuXHRcdH0gZWxzZSBpZiAoIWlzT2JqZWN0KG8pKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy51c2VTdHJpY3RWYWx1ZUNvbXBhcmlzb25cIikgPT09IHRydWUpIHtcblx0XHRcdGwgPSBvPy5bXCJsYWJlbFwiXTtcblx0XHRcdHYyID0gbz8uW1widmFsdWVcIl07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGwgPSBgJHtvPy5bXCJsYWJlbFwiXX1gO1xuXHRcdFx0djIgPSBgJHtvPy5bXCJ2YWx1ZVwiXX1gO1xuXHRcdH1cblxuXHRcdGlmICh2MiA9PT0gdikge1xuXHRcdFx0cmV0dXJuIGw7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICogQHRocm93cyB7RXJyb3J9IG5vIHZhbHVlIGZvdW5kXG4gKi9cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbkxhYmVsKHZhbHVlKSB7XG5cdGNvbnN0IGNhbGxiYWNrID0gdGhpcy5nZXRPcHRpb24oXCJmb3JtYXR0ZXIuc2VsZWN0aW9uXCIpO1xuXHRpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRjb25zdCBsYWJlbCA9IGNhbGxiYWNrLmNhbGwodGhpcywgdmFsdWUpO1xuXHRcdGlmIChpc1N0cmluZyhsYWJlbCkpIHJldHVybiBsYWJlbDtcblx0fVxuXG5cdGlmIChpc1N0cmluZyh2YWx1ZSkgfHwgaXNJbnRlZ2VyKHZhbHVlKSkge1xuXHRcdHJldHVybiBgJHt2YWx1ZX1gO1xuXHR9XG5cblx0cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKFwibGFiZWxzLmNhbm5vdC1iZS1sb2FkZWRcIiwgdmFsdWUpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICovXG5mdW5jdGlvbiBoYW5kbGVUb2dnbGVLZXlib2FyZEV2ZW50cyhldmVudCkge1xuXHRzd2l0Y2ggKGV2ZW50Py5bXCJjb2RlXCJdKSB7XG5cdFx0Y2FzZSBcIkVzY2FwZVwiOlxuXHRcdFx0dG9nZ2xlLmNhbGwodGhpcyk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlNwYWNlXCI6XG5cdFx0XHR0b2dnbGUuY2FsbCh0aGlzKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQXJyb3dEb3duXCI6XG5cdFx0XHRzaG93LmNhbGwodGhpcyk7XG5cdFx0XHRhY3RpdmF0ZUN1cnJlbnRPcHRpb24uY2FsbCh0aGlzLCBGT0NVU19ESVJFQ1RJT05fRE9XTik7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkFycm93VXBcIjpcblx0XHRcdGhpZGUuY2FsbCh0aGlzKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0fVxufVxuXG4vKipcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTUuMFxuICogQHByaXZhdGVcbiAqIEB0aGlzIEN1c3RvbUVsZW1lbnRcbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbk9ic2VydmVyKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRzZWxmLmF0dGFjaE9ic2VydmVyKFxuXHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0c2VsZi51cGRhdGVJMThuKCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHNlbGYsIFwiZXJyb3JcIik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdC5jYWxsKHNlbGYpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZiwgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHRcdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHRcdFx0c2V0U3RhdHVzT3JSZW1vdmVCYWRnZXMuY2FsbChzZWxmLCBcImVycm9yXCIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2V0U3VtbWFyeUFuZENvbnRyb2xUZXh0LmNhbGwoc2VsZik7XG5cdFx0XHR9KS5ydW4oKTtcblx0XHR9KSxcblx0KTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdFRyYW5zbGF0aW9uKCkge1xuXHRjb25zdCB0cmFuc2xhdGlvbiA9IG5ldyBUcmFuc2xhdGlvbnMoXCJlblwiKS5hc3NpZ25UcmFuc2xhdGlvbnMoXG5cdFx0dGhpcy5nZXRPcHRpb24oXCJsYWJlbHNcIiwge30pLFxuXHQpO1xuXG5cdHRyeSB7XG5cdFx0Y29uc3QgZG9jID0gZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMoKTtcblx0XHR0cmFuc2xhdGlvbi5sb2NhbGUgPSBkb2MubG9jYWxlO1xuXHR9IGNhdGNoIChlKSB7fVxuXG5cdHJldHVybiB0cmFuc2xhdGlvbjtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfCp9XG4gKi9cbmZ1bmN0aW9uIHNldFN1bW1hcnlBbmRDb250cm9sVGV4dCgpIHtcblx0Y29uc3QgdHJhbnNsYXRpb25zID0gZ2V0RGVmYXVsdFRyYW5zbGF0aW9uLmNhbGwodGhpcyk7XG5cdGNvbnN0IHNlbGVjdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcInNlbGVjdGlvblwiKTtcblxuXHRjb25zdCB0ZXh0ID0gdHJhbnNsYXRpb25zLmdldFBsdXJhbFJ1bGVUZXh0KFxuXHRcdFwic3VtbWFyeS10ZXh0XCIsXG5cdFx0c2VsZWN0aW9ucy5sZW5ndGgsXG5cdFx0XCJcIixcblx0KTtcblxuXHRjb25zdCBzZWxlY3RlZFRleHQgPSBuZXcgRm9ybWF0dGVyKHtcblx0XHRjb3VudDogU3RyaW5nKHNlbGVjdGlvbnMubGVuZ3RoKSxcblx0fSkuZm9ybWF0KHRleHQpO1xuXG5cdHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZXMuc2VsZWN0ZWRcIiwgc2VsZWN0ZWRUZXh0KTtcblxuXHRjb25zdCBjdXJyZW50ID0gdGhpcy5nZXRPcHRpb24oXCJtZXNzYWdlcy5jb250cm9sXCIpO1xuXHRjb25zdCBtc2cgPSB0aGlzLmdldE9wdGlvbihcImxhYmVscy5zZWxlY3QtYW4tb3B0aW9uXCIpO1xuXG5cdGlmIChcblx0XHRjdXJyZW50ID09PSBcIlwiIHx8XG5cdFx0Y3VycmVudCA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0Y3VycmVudCA9PT0gbXNnIHx8XG5cdFx0Y3VycmVudCA9PT0gbnVsbFxuXHQpIHtcblx0XHRpZiAoc2VsZWN0aW9ucy5sZW5ndGggPT09IDApIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZXMuY29udHJvbFwiLCBtc2cpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2VzLmNvbnRyb2xcIiwgXCJcIik7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge05vZGVMaXN0fVxuICovXG5mdW5jdGlvbiBnZXRPcHRpb25FbGVtZW50cygpIHtcblx0cmV0dXJuIHRoaXNbb3B0aW9uc0VsZW1lbnRTeW1ib2xdLnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dYCxcblx0KTtcbn1cblxuLyoqXG4gKiBXaXRoIHRoZSBoZWxwIG9mIHRoaXMgZmlsdGVyIGNhbGxiYWNrLCB2YWx1ZXMgY2FuIGJlIGZpbHRlcmVkIG91dC4gT25seSBpZiB0aGUgZmlsdGVyIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgdGhlIHZhbHVlIGlzIHRha2VuIGZvciB0aGUgbWFwLlxuICpcbiAqIEBjYWxsYmFjayBNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlRmlsdGVyQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgIEtleVxuICogQHNlZSBNb25zdGVyLkRhdGEuYnVpbGRNYXBcbiAqL1xuXG4vKipcbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1+Zm9ybWF0dGVyU2VsZWN0aW9uQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG4gKiBAc2VlIE1vbnN0ZXIuRGF0YS5idWlsZE1hcFxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2FsY0FuZFNldE9wdGlvbnNEaW1lbnNpb24oKSB7XG5cdGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25FbGVtZW50cy5jYWxsKHRoaXMpO1xuXHRjb25zdCBjb250YWluZXIgPSB0aGlzW29wdGlvbnNFbGVtZW50U3ltYm9sXTtcblx0aWYgKCEoY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgb3B0aW9ucyBpbnN0YW5jZW9mIE5vZGVMaXN0KSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGxldCB2aXNpYmxlID0gMDtcblx0bGV0IG9wdGlvbkhlaWdodCA9IDA7XG5cdGNvbnN0IG1heCA9IHRoaXMuZ2V0T3B0aW9uKFwic2hvd01heE9wdGlvbnNcIiwgMTApO1xuXG5cdGxldCBzY3JvbGxGbGFnID0gZmFsc2U7XG5cdGZvciAoY29uc3QgWywgb3B0aW9uXSBvZiBPYmplY3QuZW50cmllcyhvcHRpb25zKSkge1xuXHRcdGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRHbG9iYWwoKS5nZXRDb21wdXRlZFN0eWxlKG9wdGlvbik7XG5cdFx0aWYgKGNvbXB1dGVkU3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIpIGNvbnRpbnVlO1xuXG5cdFx0bGV0IGggPSBvcHRpb24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuXHRcdGggKz0gcGFyc2VJbnQoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwibWFyZ2luLXRvcFwiKSwgMTApO1xuXHRcdGggKz0gcGFyc2VJbnQoY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwibWFyZ2luLWJvdHRvbVwiKSwgMTApO1xuXHRcdG9wdGlvbkhlaWdodCArPSBoO1xuXG5cdFx0dmlzaWJsZSsrO1xuXG5cdFx0aWYgKHZpc2libGUgPiBtYXgpIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdGlmICh2aXNpYmxlID4gbWF4KSB7XG5cdFx0dmlzaWJsZSA9IG1heDtcblx0XHRzY3JvbGxGbGFnID0gdHJ1ZTtcblx0fVxuXG5cdGlmICh2aXNpYmxlID09PSAwKSB7XG5cdFx0aWYgKGdldEZpbHRlck1vZGUuY2FsbCh0aGlzKSA9PT0gRklMVEVSX01PREVfRElTQUJMRUQpIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9uKFxuXHRcdFx0XHRcIm1lc3NhZ2VzLmVtcHR5T3B0aW9uc1wiLFxuXHRcdFx0XHR0aGlzLmdldE9wdGlvbihcImxhYmVscy5uby1vcHRpb25zLWF2YWlsYWJsZVwiKSxcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0T3B0aW9uKFxuXHRcdFx0XHRcIm1lc3NhZ2VzLmVtcHR5T3B0aW9uc1wiLFxuXHRcdFx0XHR0aGlzLmdldE9wdGlvbihcImxhYmVscy5uby1vcHRpb25zLWZvdW5kXCIpLFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0dGhpc1tub09wdGlvbnNBdmFpbGFibGVFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiZC1ub25lXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXNbbm9PcHRpb25zQXZhaWxhYmxlRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcblx0fVxuXG5cdGNvbnN0IHN0eWxlcyA9IGdldEdsb2JhbCgpLmdldENvbXB1dGVkU3R5bGUodGhpc1tvcHRpb25zRWxlbWVudFN5bWJvbF0pO1xuXHRsZXQgcGFkZGluZyA9IHBhcnNlSW50KHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZy10b3BcIiksIDEwKTtcblx0cGFkZGluZyArPSBwYXJzZUludChzdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmctYm90dG9tXCIpLCAxMCk7XG5cblx0bGV0IG1hcmdpbiA9IHBhcnNlSW50KHN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKFwibWFyZ2luLXRvcFwiKSwgMTApO1xuXHRtYXJnaW4gKz0gcGFyc2VJbnQoc3R5bGVzLmdldFByb3BlcnR5VmFsdWUoXCJtYXJnaW4tYm90dG9tXCIpLCAxMCk7XG5cblx0Y29uc3QgY29udGFpbmVySGVpZ2h0ID0gb3B0aW9uSGVpZ2h0ICsgcGFkZGluZyArIG1hcmdpbjtcblx0Y29udGFpbmVyLnN0eWxlLmhlaWdodCA9IGAke2NvbnRhaW5lckhlaWdodH1weGA7XG5cblx0aWYgKHNjcm9sbEZsYWcgPT09IHRydWUpIHtcblx0XHRjb250YWluZXIuc3R5bGUub3ZlcmZsb3dZID0gXCJzY3JvbGxcIjtcblx0fSBlbHNlIHtcblx0XHRjb250YWluZXIuc3R5bGUub3ZlcmZsb3dZID0gXCJhdXRvXCI7XG5cdH1cblxuXHRjb25zdCBkb21SZWN0ID0gdGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS53aWR0aCA9IGAke2RvbVJlY3Qud2lkdGh9cHhgO1xuXHRjb250YWluZXIuc3R5bGUub3ZlcmZsb3dYID0gXCJhdXRvXCI7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXJlY3Rpb25cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGFjdGl2YXRlQ3VycmVudE9wdGlvbihkaXJlY3Rpb24pIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0bGV0IGZvY3VzZWQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgWyR7QVRUUklCVVRFX1BSRUZJWH1mb2N1c2VkXWApO1xuXG5cdGlmIChcblx0XHQhKGZvY3VzZWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgfHxcblx0XHRmb2N1c2VkLm1hdGNoZXMoXCJbZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9aGlkZGVuXVwiKVxuXHQpIHtcblx0XHRmb3IgKGNvbnN0IFssIGVdIG9mIE9iamVjdC5lbnRyaWVzKFxuXHRcdFx0dGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoYFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dYCksXG5cdFx0KSkge1xuXHRcdFx0aWYgKGUubWF0Y2hlcyhcIltkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eT12aXNpYmxlXVwiKSkge1xuXHRcdFx0XHRmb2N1c2VkID0gZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmIChkaXJlY3Rpb24gPT09IEZPQ1VTX0RJUkVDVElPTl9ET1dOKSB7XG5cdFx0XHR3aGlsZSAoZm9jdXNlZC5uZXh0U2libGluZykge1xuXHRcdFx0XHRmb2N1c2VkID0gZm9jdXNlZC5uZXh0U2libGluZztcblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0Zm9jdXNlZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpID09PSBcIm9wdGlvblwiICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5tYXRjaGVzKFwiW2RhdGEtbW9uc3Rlci12aXNpYmlsaXR5PXZpc2libGVdXCIpICYmXG5cdFx0XHRcdFx0Zm9jdXNlZC5tYXRjaGVzKFwiOm5vdChbZGF0YS1tb25zdGVyLWZpbHRlcmVkPXRydWVdKVwiKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgZm91bmQgPSBmYWxzZTtcblx0XHRcdHdoaWxlIChmb2N1c2VkLnByZXZpb3VzU2libGluZykge1xuXHRcdFx0XHRmb2N1c2VkID0gZm9jdXNlZC5wcmV2aW91c1NpYmxpbmc7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRmb2N1c2VkIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcblx0XHRcdFx0XHRmb2N1c2VkLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgJiZcblx0XHRcdFx0XHRmb2N1c2VkLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgPT09IFwib3B0aW9uXCIgJiZcblx0XHRcdFx0XHRmb2N1c2VkLm1hdGNoZXMoXCJbZGF0YS1tb25zdGVyLXZpc2liaWxpdHk9dmlzaWJsZV1cIikgJiZcblx0XHRcdFx0XHRmb2N1c2VkLm1hdGNoZXMoXCI6bm90KFtkYXRhLW1vbnN0ZXItZmlsdGVyZWQ9dHJ1ZV0pXCIpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGZvdW5kID09PSBmYWxzZSkge1xuXHRcdFx0XHRmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRpZiAoZm9jdXNlZCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHR0aGlzLnNoYWRvd1Jvb3Rcblx0XHRcdFx0LnF1ZXJ5U2VsZWN0b3JBbGwoYFske0FUVFJJQlVURV9QUkVGSVh9Zm9jdXNlZF1gKVxuXHRcdFx0XHQuZm9yRWFjaCgoZSkgPT4ge1xuXHRcdFx0XHRcdGUucmVtb3ZlQXR0cmlidXRlKGAke0FUVFJJQlVURV9QUkVGSVh9Zm9jdXNlZGApO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0Zm9jdXNlZC5mb2N1cygpO1xuXHRcdFx0Zm9jdXNlZC5zZXRBdHRyaWJ1dGUoYCR7QVRUUklCVVRFX1BSRUZJWH1mb2N1c2VkYCwgdHJ1ZSk7XG5cdFx0fVxuXHR9KVxuXHRcdC5ydW4oKVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBmaWx0ZXJPcHRpb25zKCkge1xuXHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0bGV0IGZpbHRlclZhbHVlO1xuXG5cdFx0c3dpdGNoICh0aGlzLmdldE9wdGlvbihcImZpbHRlci5wb3NpdGlvblwiKSkge1xuXHRcdFx0Y2FzZSBGSUxURVJfUE9TSVRJT05fSU5MSU5FOlxuXHRcdFx0XHRpZiAodGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0ZmlsdGVyVmFsdWUgPSB0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIEZJTFRFUl9QT1NJVElPTl9QT1BQRVI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0udmFsdWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXHRcdGZvciAoY29uc3QgW2ksIG9wdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMob3B0aW9ucykpIHtcblx0XHRcdGlmIChvcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlclZhbHVlKSA9PT0gLTEpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oYG9wdGlvbnMuJHtpfS5maWx0ZXJlZGAsIFwidHJ1ZVwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKGBvcHRpb25zLiR7aX0uZmlsdGVyZWRgLCB1bmRlZmluZWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSlcblx0XHQucnVuKClcblx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRuZXcgUHJvY2Vzc2luZygxMDAsICgpID0+IHtcblx0XHRcdFx0Y2FsY0FuZFNldE9wdGlvbnNEaW1lbnNpb24uY2FsbCh0aGlzKTtcblx0XHRcdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHRcdH0pXG5cdFx0XHRcdC5ydW4oKVxuXHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHR9KTtcblx0XHR9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtFdmVudH0gZXZlbnRcbiAqL1xuZnVuY3Rpb24gaGFuZGxlRmlsdGVyS2V5Ym9hcmRFdmVudHMoZXZlbnQpIHtcblx0Y29uc3Qgc2hpZnRLZXkgPSBldmVudD8uW1wic2hpZnRLZXlcIl07XG5cblx0c3dpdGNoIChldmVudD8uW1wiY29kZVwiXSkge1xuXHRcdGNhc2UgXCJUYWJcIjpcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9ET1dOKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRXNjYXBlXCI6XG5cdFx0XHR0b2dnbGUuY2FsbCh0aGlzKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiVGFiXCIgJiYgc2hpZnRLZXkgPT09IHRydWU6XG5cdFx0Y2FzZSBcIkFycm93VXBcIjpcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9VUCk7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIlRhYlwiICYmICFzaGlmdEtleTpcblx0XHRjYXNlIFwiQXJyb3dEb3duXCI6XG5cdFx0XHRhY3RpdmF0ZUN1cnJlbnRPcHRpb24uY2FsbCh0aGlzLCBGT0NVU19ESVJFQ1RJT05fRE9XTik7XG5cdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGlmIChcblx0XHRcdFx0dGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5sYXp5TG9hZFwiKSA9PT0gdHJ1ZSAmJlxuXHRcdFx0XHR0aGlzW2xhenlMb2FkRG9uZVN5bWJvbF0gIT09IHRydWVcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLmNsaWNrKCk7XG5cdFx0XHR9XG5cblx0XHRcdGhhbmRsZUZpbHRlcktleUV2ZW50cy5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogTWV0aG9kIGhhbmRsZUZpbHRlcktleUV2ZW50cyBpcyB1c2VkIHRvIGhhbmRsZSBmaWx0ZXIga2V5IGV2ZW50cy5cbiAqIERlYm91bmNlIGlzIHVzZWQgdG8gcHJldmVudCBtdWx0aXBsZSBjYWxscy5cbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBuYW1lIGhhbmRsZUZpbHRlcktleUV2ZW50c1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHt2b2lkfSBUaGlzIG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gYW55dGhpbmcuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUZpbHRlcktleUV2ZW50cygpIHtcblx0aWYgKHRoaXNba2V5RmlsdGVyRXZlbnRTeW1ib2xdIGluc3RhbmNlb2YgRGVhZE1hbnNTd2l0Y2gpIHtcblx0XHR0cnkge1xuXHRcdFx0dGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF0udG91Y2goKTtcblx0XHRcdHJldHVybjtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRkZWxldGUgdGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF07XG5cdFx0fVxuXHR9XG5cblx0dGhpc1trZXlGaWx0ZXJFdmVudFN5bWJvbF0gPSBuZXcgRGVhZE1hbnNTd2l0Y2goMjAwLCAoKSA9PiB7XG5cdFx0aWYgKGdldEZpbHRlck1vZGUuY2FsbCh0aGlzKSAhPT0gRklMVEVSX01PREVfUkVNT1RFKSB7XG5cdFx0XHRmaWx0ZXJPcHRpb25zLmNhbGwodGhpcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZpbHRlckZyb21SZW1vdGUuY2FsbCh0aGlzKS5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0ZGVsZXRlIHRoaXNba2V5RmlsdGVyRXZlbnRTeW1ib2xdO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBmaWx0ZXJGcm9tUmVtb3RlKCkge1xuXHRpZiAoXG5cdFx0ISh0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpICYmXG5cdFx0ISh0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpXG5cdCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHNob3cuY2FsbCh0aGlzKTtcblxuXHRjb25zdCB1cmwgPSB0aGlzLmdldE9wdGlvbihcInVybFwiKTtcblx0aWYgKCF1cmwpIHtcblx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdHRoaXMsXG5cdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0XCJNaXNzaW5nIFVSTCBmb3IgUmVtb3RlIEZpbHRlci5cIixcblx0XHQpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGxldCBmaWx0ZXJWYWx1ZTtcblxuXHRzd2l0Y2ggKHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLnBvc2l0aW9uXCIpKSB7XG5cdFx0Y2FzZSBGSUxURVJfUE9TSVRJT05fSU5MSU5FOlxuXHRcdFx0aWYgKHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRmaWx0ZXJWYWx1ZSA9IHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0udmFsdWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdH1cblxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBGSUxURVJfUE9TSVRJT05fUE9QUEVSOlxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRpZiAodGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRcdFx0ZmlsdGVyVmFsdWUgPSB0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZmlsdGVyRnJvbVJlbW90ZUJ5VmFsdWUuY2FsbCh0aGlzLCB1cmwsIGZpbHRlclZhbHVlKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVJMKHVybCwgdmFsdWUpIHtcblx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIpIHtcblx0XHR2YWx1ZSA9IHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLmRlZmF1bHRWYWx1ZVwiKTtcblx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gXCJcIikge1xuXHRcdFx0dmFsdWUgPSBkaXNhYmxlZFJlcXVlc3RNYXJrZXIudG9TdHJpbmcoKTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHsgZmlsdGVyOiBlbmNvZGVVUkkodmFsdWUpIH0pO1xuXHRjb25zdCBvcGVuTWFya2VyID0gdGhpcy5nZXRPcHRpb24oXCJmaWx0ZXIubWFya2VyLm9wZW5cIik7XG5cdGxldCBjbG9zZU1hcmtlciA9IHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLm1hcmtlci5jbG9zZVwiKTtcblx0aWYgKCFjbG9zZU1hcmtlcikge1xuXHRcdGNsb3NlTWFya2VyID0gb3Blbk1hcmtlcjtcblx0fVxuXG5cdGlmIChvcGVuTWFya2VyICYmIGNsb3NlTWFya2VyKSB7XG5cdFx0Zm9ybWF0dGVyLnNldE1hcmtlcihvcGVuTWFya2VyLCBjbG9zZU1hcmtlcik7XG5cdH1cblxuXHRyZXR1cm4gZm9ybWF0dGVyLmZvcm1hdCh1cmwpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gb3B0aW9uVXJsXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuICovXG5mdW5jdGlvbiBmaWx0ZXJGcm9tUmVtb3RlQnlWYWx1ZShvcHRpb25VcmwsIHZhbHVlKSB7XG5cdHJldHVybiBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0bGV0IHVybCA9IGZvcm1hdFVSTC5jYWxsKHRoaXMsIG9wdGlvblVybCwgdmFsdWUpO1xuXHRcdGlmICh1cmwuaW5kZXhPZihkaXNhYmxlZFJlcXVlc3RNYXJrZXIudG9TdHJpbmcoKSkgIT09IC0xKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZmV0Y2hJdFxuXHRcdFx0LmNhbGwodGhpcywgdXJsLCB7XG5cdFx0XHRcdGRpc2FibGVIaWRpbmc6IHRydWUsXG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRjaGVja09wdGlvblN0YXRlLmNhbGwodGhpcyk7XG5cdFx0XHRcdHNob3cuY2FsbCh0aGlzKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdH0pO1xuXHR9KVxuXHRcdC5ydW4oKVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0dGhyb3cgZTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGFuZGxlT3B0aW9uS2V5Ym9hcmRFdmVudHMoZXZlbnQpIHtcblx0Y29uc3Qgc2hpZnRLZXkgPSBldmVudD8uW1wic2hpZnRLZXlcIl07XG5cblx0c3dpdGNoIChldmVudD8uW1wiY29kZVwiXSkge1xuXHRcdGNhc2UgXCJFc2NhcGVcIjpcblx0XHRcdHRvZ2dsZS5jYWxsKHRoaXMpO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJFbnRlclwiOlxuXHRcdGNhc2UgXCJTcGFjZVwiOlxuXHRcdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdFx0Y29uc3QgZWxlbWVudCA9IHBhdGg/LlswXTtcblx0XHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0Y29uc3QgaW5wdXQgPSBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaW5wdXRcIik7XG5cdFx0XHRcdGlmICghaW5wdXQpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0ZmlyZUV2ZW50KGlucHV0LCBcImNsaWNrXCIpO1xuXHRcdFx0fVxuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcIlRhYlwiICYmIHNoaWZ0S2V5ID09PSB0cnVlOlxuXHRcdGNhc2UgXCJBcnJvd1VwXCI6XG5cdFx0XHRhY3RpdmF0ZUN1cnJlbnRPcHRpb24uY2FsbCh0aGlzLCBGT0NVU19ESVJFQ1RJT05fVVApO1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcIlRhYlwiICYmICFzaGlmdEtleTpcblx0XHRjYXNlIFwiQXJyb3dMZWZ0XCI6XG5cdFx0Y2FzZSBcIkFycm93UmlnaHRcIjpcblx0XHRcdC8vIGhhbmRsZWQgYnkgdHJlZSBzZWxlY3Rcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJBcnJvd0Rvd25cIjpcblx0XHRcdGFjdGl2YXRlQ3VycmVudE9wdGlvbi5jYWxsKHRoaXMsIEZPQ1VTX0RJUkVDVElPTl9ET1dOKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0Y29uc3QgcCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdFx0aWYgKHA/LlswXSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHRcdGJyZWFrO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0RmlsdGVyTW9kZSgpIHtcblx0c3dpdGNoICh0aGlzLmdldE9wdGlvbihcImZpbHRlci5tb2RlXCIpKSB7XG5cdFx0Y2FzZSBGSUxURVJfTU9ERV9PUFRJT05TOlxuXHRcdFx0cmV0dXJuIEZJTFRFUl9NT0RFX09QVElPTlM7XG5cdFx0Y2FzZSBGSUxURVJfTU9ERV9SRU1PVEU6XG5cdFx0XHRyZXR1cm4gRklMVEVSX01PREVfUkVNT1RFO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gRklMVEVSX01PREVfRElTQUJMRUQ7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBibHVyRmlsdGVyKCkge1xuXHRpZiAoISh0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGdldEZpbHRlck1vZGUuY2FsbCh0aGlzKSA9PT0gRklMVEVSX01PREVfRElTQUJMRUQpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3BvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uYmx1cigpO1xuXG5cdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5ibHVyKCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBmb2N1c09wdGlvbnNcbiAqL1xuZnVuY3Rpb24gZm9jdXNQb3BwZXJGaWx0ZXIoZm9jdXNPcHRpb25zKSB7XG5cdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImQtbm9uZVwiKTtcblx0dGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuXHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG5cdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcblxuXHRpZiAoISh0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0XHR0aGlzLFxuXHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFwiTWlzc2luZyBQb3BwZXIgRmlsdGVyIEVsZW1lbnQuXCIsXG5cdFx0KTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyB2aXNpYmlsaXR5IGlzIHNldCB0byB2aXNpYmxlLCBiZWNhdXNlIGZvY3VzKCkgZG9lcyBub3Qgd29yayBvbiBpbnZpc2libGUgZWxlbWVudHNcblx0Ly8gYW5kIHRoZSBjbGFzcyBkZWZpbml0aW9uIGlzIGFzc2lnbmVkIGxhdGVyIGluIHRoZSBwcm9jZXNzaW5nXG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGlmIChmb2N1c09wdGlvbnMgPT09IHVuZGVmaW5lZCB8fCBmb2N1c09wdGlvbnMgPT09IG51bGwpIHtcblx0XHRcdHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0uZm9jdXMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpc1twb3BwZXJGaWx0ZXJFbGVtZW50U3ltYm9sXS5mb2N1cyhmb2N1c09wdGlvbnMpO1xuXHRcdH1cblx0fSwgMTAwKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGZvY3VzT3B0aW9uc1xuICovXG5mdW5jdGlvbiBmb2N1c0lubGluZUZpbHRlcihmb2N1c09wdGlvbnMpIHtcblx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwib3B0aW9uc1wiKTtcblx0aWYgKFxuXHRcdCghaXNBcnJheShvcHRpb25zKSB8fCBvcHRpb25zLmxlbmd0aCA9PT0gMCkgJiZcblx0XHRnZXRGaWx0ZXJNb2RlLmNhbGwodGhpcykgIT09IEZJTFRFUl9NT0RFX1JFTU9URVxuXHQpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3BvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJkLW5vbmVcIik7XG5cdHRoaXNbaW5saW5lRmlsdGVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiZC1ub25lXCIpO1xuXG5cdC8vIHZpc2liaWxpdHkgaXMgc2V0IHRvIHZpc2libGUsIGJlY2F1c2UgZm9jdXMoKSBkb2VzIG5vdCB3b3JrIG9uIGludmlzaWJsZSBlbGVtZW50c1xuXHQvLyBhbmQgdGhlIGNsYXNzIGRlZmluaXRpb24gaXMgYXNzaWduZWQgbGF0ZXIgaW4gdGhlIHByb2Nlc3Npbmdcblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0aWYgKGZvY3VzT3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IGZvY3VzT3B0aW9ucyA9PT0gbnVsbCkge1xuXHRcdFx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXS5mb2N1cygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmZvY3VzKGZvY3VzT3B0aW9ucyk7XG5cdFx0fVxuXHR9LCAxMDApO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGZvY3VzRmlsdGVyKGZvY3VzT3B0aW9ucykge1xuXHRpZiAoZ2V0RmlsdGVyTW9kZS5jYWxsKHRoaXMpID09PSBGSUxURVJfTU9ERV9ESVNBQkxFRCkge1xuXHRcdHRoaXNbcG9wcGVyRmlsdGVyQ29udGFpbmVyRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcImQtbm9uZVwiKTtcblx0XHR0aGlzW2lubGluZUZpbHRlckVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5hZGQoXCJkLW5vbmVcIik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmlsdGVyLnBvc2l0aW9uXCIpID09PSBGSUxURVJfUE9TSVRJT05fSU5MSU5FKSB7XG5cdFx0cmV0dXJuIGZvY3VzSW5saW5lRmlsdGVyLmNhbGwodGhpcywgZm9jdXNPcHRpb25zKTtcblx0fVxuXG5cdHJldHVybiBmb2N1c1BvcHBlckZpbHRlci5jYWxsKHRoaXMsIGZvY3VzT3B0aW9ucyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge2FycmF5fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKi9cbmZ1bmN0aW9uIGdhdGhlclN0YXRlKCkge1xuXHRjb25zdCB0eXBlID0gdGhpcy5nZXRPcHRpb24oXCJ0eXBlXCIpO1xuXHRpZiAoW1wicmFkaW9cIiwgXCJjaGVja2JveFwiXS5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIHR5cGVcIik7XG5cdH1cblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRjb25zdCBzZWxlY3Rpb24gPSBbXTtcblx0Y29uc3QgZWxlbWVudHMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChcblx0XHRgaW5wdXRbdHlwZT0ke3R5cGV9XTpjaGVja2VkYCxcblx0KTtcblxuXHRmb3IgKGNvbnN0IGUgb2YgZWxlbWVudHMpIHtcblx0XHRzZWxlY3Rpb24ucHVzaCh7XG5cdFx0XHRsYWJlbDogZ2V0U2VsZWN0aW9uTGFiZWwuY2FsbCh0aGlzLCBlLnZhbHVlKSxcblx0XHRcdHZhbHVlOiBlLnZhbHVlLFxuXHRcdH0pO1xuXHR9XG5cblx0c2V0U2VsZWN0aW9uXG5cdFx0LmNhbGwodGhpcywgc2VsZWN0aW9uKVxuXHRcdC50aGVuKCgpID0+IHt9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgYCR7ZX1gKTtcblx0XHR9KTtcblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5jbG9zZU9uU2VsZWN0XCIpID09PSB0cnVlKSB7XG5cdFx0dG9nZ2xlLmNhbGwodGhpcyk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9uKCkge1xuXHRjb25zdCB0eXBlID0gdGhpcy5nZXRPcHRpb24oXCJ0eXBlXCIpO1xuXHRpZiAoW1wicmFkaW9cIiwgXCJjaGVja2JveFwiXS5pbmRleE9mKHR5cGUpID09PSAtMSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIHR5cGVcIik7XG5cdH1cblxuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRzZXRTZWxlY3Rpb25cblx0XHQuY2FsbCh0aGlzLCBbXSlcblx0XHQudGhlbigoKSA9PiB7fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGAke2V9YCk7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXQoKSB7XG5cdC8vIHByZXZlbnQgbXVsdGlwbGUgY2FsbHNcblx0aWYgKHRoaXNbYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRTeW1ib2xdID09PSB1bmRlZmluZWQpIHtcblx0XHR0aGlzW2FyZU9wdGlvbnNBdmFpbGFibGVBbmRJbml0U3ltYm9sXSA9IDA7XG5cdH1cblxuXHRpZiAodGhpc1thcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbF0gPiAwKSB7XG5cdFx0dGhpc1thcmVPcHRpb25zQXZhaWxhYmxlQW5kSW5pdFN5bWJvbF0tLTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHRoaXNbYXJlT3B0aW9uc0F2YWlsYWJsZUFuZEluaXRTeW1ib2xdKys7XG5cblx0Y29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwib3B0aW9uc1wiKTtcblxuXHRpZiAoXG5cdFx0b3B0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0b3B0aW9ucyA9PT0gbnVsbCB8fFxuXHRcdChpc0FycmF5KG9wdGlvbnMpICYmIG9wdGlvbnMubGVuZ3RoID09PSAwKVxuXHQpIHtcblx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwiZW1wdHlcIik7XG5cblx0XHQvLyBoaWRlLmNhbGwodGhpcyk7XG5cblx0XHRsZXQgbXNnID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMubm8tb3B0aW9ucy1hdmFpbGFibGVcIik7XG5cblx0XHRpZiAoXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcInVybFwiKSAhPT0gbnVsbCAmJlxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5sYXp5TG9hZFwiKSA9PT0gdHJ1ZSAmJlxuXHRcdFx0dGhpc1tsYXp5TG9hZERvbmVTeW1ib2xdICE9PSB0cnVlXG5cdFx0KSB7XG5cdFx0XHRtc2cgPSB0aGlzLmdldE9wdGlvbihcImxhYmVscy5jbGljay10by1sb2FkLW9wdGlvbnNcIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5jb250cm9sXCIsIG1zZyk7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5zdW1tYXJ5XCIsIFwiXCIpO1xuXG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuZW1wdHlWYWx1ZUlmTm9PcHRpb25zXCIpID09PSB0cnVlKSB7XG5cdFx0XHR0aGlzLnZhbHVlID0gXCJcIjtcblx0XHR9XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgbm9PcHRpb25zQXZhaWxhYmxlTWVzc2FnZSk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Y29uc3Qgc2VsZWN0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXHRpZiAoXG5cdFx0c2VsZWN0aW9ucyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0c2VsZWN0aW9ucyA9PT0gbnVsbCB8fFxuXHRcdHNlbGVjdGlvbnMubGVuZ3RoID09PSAwXG5cdCkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFxuXHRcdFx0XCJtZXNzYWdlcy5jb250cm9sXCIsXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcImxhYmVscy5zZWxlY3QtYW4tb3B0aW9uXCIpLFxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5jb250cm9sXCIsIFwiXCIpO1xuXHR9XG5cblx0dGhpcy5zZXRPcHRpb24oXCJtZXNzYWdlcy5zdW1tYXJ5XCIsIHNldFN1bW1hcnlBbmRDb250cm9sVGV4dC5jYWxsKHRoaXMpKTtcblxuXHRsZXQgdXBkYXRlZCA9IGZhbHNlO1xuXHRsZXQgdmFsdWVDb3VudGVyID0gMTtcblx0Zm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuXHRcdGlmIChvcHRpb24/LnZpc2liaWxpdHkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0b3B0aW9uLnZpc2liaWxpdHkgPSBcInZpc2libGVcIjtcblx0XHRcdHVwZGF0ZWQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb24/LnZhbHVlID09PSB1bmRlZmluZWQgJiYgb3B0aW9uPy5sYWJlbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb24udmFsdWUgPSBgJHt2YWx1ZUNvdW50ZXIrK31gO1xuXHRcdFx0b3B0aW9uLmxhYmVsID0gb3B0aW9uLnZhbHVlO1xuXHRcdFx0dXBkYXRlZCA9IHRydWU7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9uPy52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb24udmFsdWUgPSBvcHRpb24ubGFiZWw7XG5cdFx0XHR1cGRhdGVkID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAob3B0aW9uPy5sYWJlbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRvcHRpb24ubGFiZWwgPSBvcHRpb24udmFsdWU7XG5cdFx0XHR1cGRhdGVkID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHRpZiAodXBkYXRlZCkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwib3B0aW9uc1wiLCBvcHRpb25zKTtcblx0fVxuXG5cdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcyk7XG5cblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgbm9PcHRpb25zQXZhaWxhYmxlTWVzc2FnZSk7XG5cdHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBjaGVja09wdGlvblN0YXRlKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHRjb25zdCBlbGVtZW50cyA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09b3B0aW9uXSBpbnB1dGAsXG5cdCk7XG5cblx0bGV0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKFwic2VsZWN0aW9uXCIpO1xuXHRpZiAoIWlzQXJyYXkoc2VsZWN0aW9uKSkge1xuXHRcdHNlbGVjdGlvbiA9IFtdO1xuXHR9XG5cblx0Y29uc3QgY2hlY2tlZFZhbHVlcyA9IHNlbGVjdGlvbi5tYXAoKGEpID0+IHtcblx0XHRyZXR1cm4gYS52YWx1ZTtcblx0fSk7XG5cblx0Zm9yIChjb25zdCBlIG9mIGVsZW1lbnRzKSB7XG5cdFx0aWYgKGNoZWNrZWRWYWx1ZXMuaW5kZXhPZihlLnZhbHVlKSAhPT0gLTEpIHtcblx0XHRcdGlmIChlLmNoZWNrZWQgIT09IHRydWUpIGUuY2hlY2tlZCA9IHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChlLmNoZWNrZWQgIT09IGZhbHNlKSBlLmNoZWNrZWQgPSBmYWxzZTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBjb252ZXJ0VmFsdWVUb1NlbGVjdGlvbih2YWx1ZSkge1xuXHRjb25zdCBzZWxlY3Rpb24gPSBbXTtcblxuXHRpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG5cdFx0dmFsdWUgPSB2YWx1ZVxuXHRcdFx0LnNwbGl0KFwiLFwiKVxuXHRcdFx0Lm1hcCgoYSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYS50cmltKCk7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbHRlcigoYSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYSAhPT0gXCJcIjtcblx0XHRcdH0pO1xuXHR9XG5cblx0aWYgKGlzU3RyaW5nKHZhbHVlKSB8fCBpc0ludGVnZXIodmFsdWUpKSB7XG5cdFx0c2VsZWN0aW9uLnB1c2goe1xuXHRcdFx0bGFiZWw6IGdldFNlbGVjdGlvbkxhYmVsLmNhbGwodGhpcywgdmFsdWUpLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG5cdFx0Zm9yIChjb25zdCB2IG9mIHZhbHVlKSB7XG5cdFx0XHRzZWxlY3Rpb24ucHVzaCh7XG5cdFx0XHRcdGxhYmVsOiBnZXRTZWxlY3Rpb25MYWJlbC5jYWxsKHRoaXMsIHYpLFxuXHRcdFx0XHR2YWx1ZTogdixcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHZhbHVlID0gdmFsdWUuam9pbihcIixcIik7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdHlwZVwiKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0c2VsZWN0aW9uOiBzZWxlY3Rpb24sXG5cdFx0dmFsdWU6IHZhbHVlLFxuXHR9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2FycmF5fSBzZWxlY3Rpb25cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gY29udmVydFNlbGVjdGlvblRvVmFsdWUoc2VsZWN0aW9uKSB7XG5cdGNvbnN0IHZhbHVlID0gW107XG5cblx0aWYgKGlzQXJyYXkoc2VsZWN0aW9uKSkge1xuXHRcdGZvciAoY29uc3Qgb2JqIG9mIHNlbGVjdGlvbikge1xuXHRcdFx0Y29uc3QgdiA9IG9iaj8uW1widmFsdWVcIl07XG5cdFx0XHRpZiAodiAhPT0gdW5kZWZpbmVkKSB2YWx1ZS5wdXNoKGAke3Z9YCk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMSkge1xuXHRcdGNvbnN0IHYgPSB2YWx1ZS5wb3AoKTtcblx0XHRpZiAodiA9PT0gdW5kZWZpbmVkKSByZXR1cm4gXCJcIjtcblx0XHRpZiAodiA9PT0gbnVsbCkgcmV0dXJuIFwiXCI7XG5cdFx0cmV0dXJuIGAke3Z9YDtcblx0fVxuXG5cdHJldHVybiB2YWx1ZS5qb2luKFwiLFwiKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHthcnJheX0gc2VsZWN0aW9uXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gc2V0U2VsZWN0aW9uKHNlbGVjdGlvbikge1xuXHRpZiAoaXNTdHJpbmcoc2VsZWN0aW9uKSB8fCBpc0ludGVnZXIoc2VsZWN0aW9uKSkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRWYWx1ZVRvU2VsZWN0aW9uLmNhbGwodGhpcywgc2VsZWN0aW9uKTtcblx0XHRzZWxlY3Rpb24gPSByZXN1bHQ/LnNlbGVjdGlvbjtcblx0fSBlbHNlIGlmIChzZWxlY3Rpb24gPT09IHVuZGVmaW5lZCB8fCBzZWxlY3Rpb24gPT09IG51bGwpIHtcblx0XHRzZWxlY3Rpb24gPSBbXTtcblx0fVxuXG5cdHZhbGlkYXRlQXJyYXkoc2VsZWN0aW9uKTtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGlvbi5sZW5ndGg7IGkrKykge1xuXHRcdGxldCBsID0gZ2V0U2VsZWN0aW9uTGFiZWwuY2FsbCh0aGlzLCBzZWxlY3Rpb25baV0udmFsdWUpO1xuXHRcdGlmIChsID09PSBzZWxlY3Rpb25baV0udmFsdWUpIHtcblx0XHRcdGwgPSBzZWxlY3Rpb25baV0ubGFiZWw7XG5cdFx0fVxuXG5cdFx0c2VsZWN0aW9uW2ldID0ge1xuXHRcdFx0bGFiZWw6IGwsXG5cdFx0XHR2YWx1ZTogc2VsZWN0aW9uW2ldLnZhbHVlLFxuXHRcdH07XG5cdH1cblxuXHR0aGlzLnNldE9wdGlvbihcInNlbGVjdGlvblwiLCBzZWxlY3Rpb24pO1xuXHRjaGVja09wdGlvblN0YXRlLmNhbGwodGhpcyk7XG5cdHNldFN1bW1hcnlBbmRDb250cm9sVGV4dC5jYWxsKHRoaXMpO1xuXG5cdHRyeSB7XG5cdFx0dGhpcz8uc2V0Rm9ybVZhbHVlKHRoaXMudmFsdWUpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0fVxuXG5cdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItc2VsZWN0ZWRcIiwge1xuXHRcdHNlbGVjdGlvbixcblx0fSk7XG5cblx0ZmlyZUV2ZW50KHRoaXMsIFwiY2hhbmdlXCIpO1xuXG5cdHJldHVybiBuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0Y29uc3QgQ0xBU1NOQU1FID0gXCJzZWxlY3RlZFwiO1xuXG5cdFx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgbm90U2VsZWN0ZWQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbChcIjpub3QoOmNoZWNrZWQpXCIpO1xuXG5cdFx0aWYgKG5vdFNlbGVjdGVkKSB7XG5cdFx0XHRub3RTZWxlY3RlZC5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhcmVudCA9IG5vZGUuY2xvc2VzdChgWyR7QVRUUklCVVRFX1JPTEV9PW9wdGlvbl1gKTtcblx0XHRcdFx0aWYgKHBhcmVudCkge1xuXHRcdFx0XHRcdHBhcmVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTTkFNRSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6Y2hlY2tlZFwiKTtcblxuXHRcdGlmIChzZWxlY3RlZCkge1xuXHRcdFx0c2VsZWN0ZWQuZm9yRWFjaCgobm9kZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBwYXJlbnQgPSBub2RlLmNsb3Nlc3QoYFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25dYCk7XG5cdFx0XHRcdGlmIChwYXJlbnQpIHtcblx0XHRcdFx0XHRwYXJlbnQuY2xhc3NMaXN0LmFkZChDTEFTU05BTUUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pXG5cdFx0LnJ1bigpXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogQHRocm93cyB7VHlwZUVycm9yfSB0aGUgcmVzdWx0IGNhbm5vdCBiZSBwYXJzZWRcbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdW5zdXBwb3J0ZWQgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gZmV0Y2hEYXRhKHVybCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblx0aWYgKCF1cmwpIHVybCA9IHRoaXMuZ2V0T3B0aW9uKFwidXJsXCIpO1xuXHRpZiAoIXVybCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG5cdGNvbnN0IGZldGNoT3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uKFwiZmV0Y2hcIiwge30pO1xuXG5cdGxldCBkZWxheVdhdGNoID0gZmFsc2U7XG5cblx0Ly8gaWYgZmV0Y2ggc2hvcnQgdGltZSwgZG8gbm90IHNob3cgbG9hZGluZyBiYWRnZSwgYmVjYXVzZSBvZiBmbGlja2VyaW5nXG5cdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0aWYgKGRlbGF5V2F0Y2ggPT09IHRydWUpIHJldHVybjtcblx0XHRzZXRTdGF0dXNPclJlbW92ZUJhZGdlcy5jYWxsKHRoaXMsIFwibG9hZGluZ1wiKTtcblx0XHRkZWxheVdhdGNoID0gdHJ1ZTtcblx0fSk7XG5cblx0dXJsID0gZm9ybWF0VVJMLmNhbGwodGhpcywgdXJsKTtcblxuXHRzZWxmW2lzTG9hZGluZ1N5bWJvbF0gPSB0cnVlO1xuXHRjb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblx0cmV0dXJuIGdsb2JhbFxuXHRcdC5mZXRjaCh1cmwsIGZldGNoT3B0aW9ucylcblx0XHQudGhlbigocmVzcG9uc2UpID0+IHtcblx0XHRcdHNlbGZbaXNMb2FkaW5nU3ltYm9sXSA9IGZhbHNlO1xuXHRcdFx0ZGVsYXlXYXRjaCA9IHRydWU7XG5cdFx0XHRjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpO1xuXHRcdFx0aWYgKGNvbnRlbnRUeXBlICYmIGNvbnRlbnRUeXBlLmluZGV4T2YoXCJhcHBsaWNhdGlvbi9qc29uXCIpICE9PSAtMSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzcG9uc2UudGV4dCgpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGB1bnN1cHBvcnRlZCByZXNwb25zZSAke2NvbnRlbnRUeXBlfWApO1xuXHRcdH0pXG5cdFx0LnRoZW4oKHRleHQpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoSlNPTi5wYXJzZShTdHJpbmcodGV4dCkpKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInRoZSByZXN1bHQgY2Fubm90IGJlIHBhcnNlZCwgY2hlY2sgdGhlIFVSTFwiKTtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0c2VsZltpc0xvYWRpbmdTeW1ib2xdID0gZmFsc2U7XG5cdFx0XHRkZWxheVdhdGNoID0gdHJ1ZTtcblx0XHRcdHRocm93IGU7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaGlkZSgpIHtcblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJjbG9zZWRcIik7XG5cdHJlbW92ZUF0dHJpYnV0ZVRva2VuKHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLCBcImNsYXNzXCIsIFwib3BlblwiKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzaG93KCkge1xuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiLCB1bmRlZmluZWQpID09PSB0cnVlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9PT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblxuXHRjb25zdCBsYXp5TG9hZEZsYWcgPVxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMubGF6eUxvYWRcIikgJiYgdGhpc1tsYXp5TG9hZERvbmVTeW1ib2xdICE9PSB0cnVlO1xuXG5cdGlmIChsYXp5TG9hZEZsYWcgPT09IHRydWUpIHtcblx0XHR0aGlzW2xhenlMb2FkRG9uZVN5bWJvbF0gPSB0cnVlO1xuXHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJsb2FkaW5nXCIpO1xuXG5cdFx0bmV3IFByb2Nlc3NpbmcoMjAwLCAoKSA9PiB7XG5cdFx0XHR0aGlzLmZldGNoKClcblx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdGNoZWNrT3B0aW9uU3RhdGUuY2FsbCh0aGlzKTtcblx0XHRcdFx0XHRyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0XHRcdFx0c2hvdy5jYWxsKHRoaXMpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJlcnJvclwiKTtcblx0XHRcdFx0fSk7XG5cdFx0fSlcblx0XHRcdC5ydW4oKVxuXHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGUubWVzc2FnZSk7XG5cdFx0XHRcdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJlcnJvclwiKTtcblx0XHRcdH0pO1xuXG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgaGFzUG9wcGVyRmlsdGVyRmxhZyA9XG5cdFx0dGhpcy5nZXRPcHRpb24oXCJmaWx0ZXIucG9zaXRpb25cIikgPT09IEZJTFRFUl9QT1NJVElPTl9QT1BQRVIgJiZcblx0XHRnZXRGaWx0ZXJNb2RlLmNhbGwodGhpcykgIT09IEZJTFRFUl9NT0RFX0RJU0FCTEVEO1xuXG5cdGNvbnN0IG9wdGlvbnMgPSBnZXRPcHRpb25FbGVtZW50cy5jYWxsKHRoaXMpO1xuXHRpZiAob3B0aW9ucy5sZW5ndGggPT09IDAgJiYgaGFzUG9wcGVyRmlsdGVyRmxhZyA9PT0gZmFsc2UpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0s7XG5cdHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzLmNhbGwodGhpcywgXCJvcGVuXCIpO1xuXG5cdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXNbY29udHJvbEVsZW1lbnRTeW1ib2xdLCBcImNsYXNzXCIsIFwib3BlblwiKTtcblxuXHRuZXcgUHJvY2Vzc2luZygoKSA9PiB7XG5cdFx0Y2FsY0FuZFNldE9wdGlvbnNEaW1lbnNpb24uY2FsbCh0aGlzKTtcblx0XHRmb2N1c0ZpbHRlci5jYWxsKHRoaXMpO1xuXHRcdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJ2aXNpYmlsaXR5XCIpO1xuXHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHR9KVxuXHRcdC5ydW4oKVxuXHRcdC5jYXRjaCgoZSkgPT4ge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS5tZXNzYWdlKTtcblx0XHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0b2dnbGUoKSB7XG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdGhpZGUuY2FsbCh0aGlzKTtcblx0fSBlbHNlIHtcblx0XHRzaG93LmNhbGwodGhpcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQGZpcmVzIG1vbnN0ZXItc2VsZWN0aW9uLXJlbW92ZWRcbiAqIEBmaXJlcyBtb25zdGVyLXNlbGVjdGlvbi1jbGVhcmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0c2VsZltjbGVhck9wdGlvbkV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRldmVudCxcblx0XHRcdEFUVFJJQlVURV9ST0xFLFxuXHRcdFx0XCJyZW1vdmUtYmFkZ2VcIixcblx0XHQpO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0Y29uc3QgYmFkZ2UgPSBmaW5kQ2xvc2VzdEJ5QXR0cmlidXRlKGVsZW1lbnQsIEFUVFJJQlVURV9ST0xFLCBcImJhZGdlXCIpO1xuXHRcdFx0aWYgKGJhZGdlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBiYWRnZS5nZXRBdHRyaWJ1dGUoYCR7QVRUUklCVVRFX1BSRUZJWH12YWx1ZWApO1xuXG5cdFx0XHRcdGxldCBzZWxlY3Rpb24gPSBzZWxmLmdldE9wdGlvbihcInNlbGVjdGlvblwiKTtcblx0XHRcdFx0c2VsZWN0aW9uID0gc2VsZWN0aW9uLmZpbHRlcigoYikgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSAhPT0gYi52YWx1ZTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0c2V0U2VsZWN0aW9uXG5cdFx0XHRcdFx0LmNhbGwoc2VsZiwgc2VsZWN0aW9uKVxuXHRcdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItc2VsZWN0aW9uLXJlbW92ZWRcIiwge1xuXHRcdFx0XHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRcdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihzZWxmLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtFdmVudH0gZXZlbnRcblx0ICovXG5cdHNlbGZbY2xvc2VFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXG5cdFx0Zm9yIChjb25zdCBbLCBlbGVtZW50XSBvZiBPYmplY3QuZW50cmllcyhwYXRoKSkge1xuXHRcdFx0aWYgKGVsZW1lbnQgPT09IHNlbGYpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRoaWRlLmNhbGwoc2VsZik7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHRzZWxmW2lucHV0RXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblx0XHRjb25zdCBlbGVtZW50ID0gcGF0aD8uWzBdO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRlbGVtZW50Lmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkgJiZcblx0XHRcdFx0ZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpID09PSBcIm9wdGlvbi1jb250cm9sXCJcblx0XHRcdCkge1xuXHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLWNoYW5nZVwiLCB7XG5cdFx0XHRcdFx0dHlwZTogZXZlbnQudHlwZSxcblx0XHRcdFx0XHR2YWx1ZTogZWxlbWVudC52YWx1ZSxcblx0XHRcdFx0XHRjaGVja2VkOiBlbGVtZW50LmNoZWNrZWQsXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0ZWxlbWVudC5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpICYmXG5cdFx0XHRcdGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSA9PT0gXCJmaWx0ZXJcIlxuXHRcdFx0KSB7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0c2VsZltjaGFuZ2VFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Z2F0aGVyU3RhdGUuY2FsbChzZWxmKTtcblx0XHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLWNoYW5nZWRcIiwgZXZlbnQ/LmRldGFpbCk7XG5cdH07XG5cblx0c2VsZltrZXlFdmVudEhhbmRsZXJdID0gKGV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpO1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBwYXRoLnNoaWZ0KCk7XG5cblx0XHRsZXQgcm9sZTtcblxuXHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSkpIHtcblx0XHRcdFx0cm9sZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKTtcblx0XHRcdH0gZWxzZSBpZiAoZWxlbWVudCA9PT0gdGhpcykge1xuXHRcdFx0XHRzaG93LmNhbGwodGhpcyk7XG5cdFx0XHRcdC8vIGZvY3VzRmlsdGVyLmNhbGwoc2VsZik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBlID0gZWxlbWVudC5jbG9zZXN0KGBbJHtBVFRSSUJVVEVfUk9MRX1dYCk7XG5cdFx0XHRcdGlmIChlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZS5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpKSB7XG5cdFx0XHRcdFx0cm9sZSA9IGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0c3dpdGNoIChyb2xlKSB7XG5cdFx0XHRjYXNlIFwiZmlsdGVyXCI6XG5cdFx0XHRcdGhhbmRsZUZpbHRlcktleWJvYXJkRXZlbnRzLmNhbGwoc2VsZiwgZXZlbnQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJvcHRpb24tbGFiZWxcIjpcblx0XHRcdGNhc2UgXCJvcHRpb24tY29udHJvbFwiOlxuXHRcdFx0Y2FzZSBcIm9wdGlvblwiOlxuXHRcdFx0XHRoYW5kbGVPcHRpb25LZXlib2FyZEV2ZW50cy5jYWxsKHNlbGYsIGV2ZW50KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiY29udHJvbFwiOlxuXHRcdFx0Y2FzZSBcInRvZ2dsZVwiOlxuXHRcdFx0XHRoYW5kbGVUb2dnbGVLZXlib2FyZEV2ZW50cy5jYWxsKHNlbGYsIGV2ZW50KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9O1xuXG5cdGNvbnN0IHR5cGVzID0gc2VsZi5nZXRPcHRpb24oXCJ0b2dnbGVFdmVudFR5cGVcIiwgW1wiY2xpY2tcIl0pO1xuXG5cdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXModHlwZXMpKSB7XG5cdFx0c2VsZltjb250cm9sRWxlbWVudFN5bWJvbF1cblx0XHRcdC5xdWVyeVNlbGVjdG9yKGBbJHtBVFRSSUJVVEVfUk9MRX09XCJjb250YWluZXJcIl1gKVxuXHRcdFx0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0XHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdFx0XHRldmVudCxcblx0XHRcdFx0XHRBVFRSSUJVVEVfUk9MRSxcblx0XHRcdFx0XHRcInJlbW92ZS1iYWRnZVwiLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoZWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dG9nZ2xlLmNhbGwoc2VsZik7XG5cdFx0XHR9KTtcblxuXHRcdHNlbGZbY29udHJvbEVsZW1lbnRTeW1ib2xdXG5cdFx0XHQucXVlcnlTZWxlY3RvcihgWyR7QVRUUklCVVRFX1JPTEV9PVwic3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIl1gKVxuXHRcdFx0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0XHRcdGlmIChzZWxmLmdldE9wdGlvbihcImRpc2FibGVkXCIsIHVuZGVmaW5lZCkgPT09IHRydWUpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cdFx0XHRcdGNvbnN0IGVsZW1lbnQgPSBwYXRoPy5bMF07XG5cdFx0XHRcdGlmIChlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHRjb25zdCBjb250cm9sID0gZWxlbWVudC5jbG9zZXN0KFxuXHRcdFx0XHRcdFx0YFske0FUVFJJQlVURV9ST0xFfT1cInN0YXR1cy1vci1yZW1vdmUtYmFkZ2VzXCJdYCxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGlmIChjb250cm9sIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcblx0XHRcdFx0XHRcdGlmIChjb250cm9sLmNsYXNzTGlzdC5jb250YWlucyhcImNsZWFyXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGNsZWFyU2VsZWN0aW9uLmNhbGwoc2VsZik7XG5cblx0XHRcdFx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHNlbGYsIFwibW9uc3Rlci1zZWxlY3Rpb24tY2xlYXJlZFwiLCB7fSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBlbGVtZW50ID0gZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQoXG5cdFx0XHRcdFx0XHRcdFx0ZXZlbnQsXG5cdFx0XHRcdFx0XHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcdFx0XHRcdFx0XCJyZW1vdmUtYmFkZ2VcIixcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHRvZ2dsZS5jYWxsKHNlbGYpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHQvLyBiYWRnZSwgc2VsZWN0aW9uXG5cdFx0c2VsZi5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHNlbGZbY2xlYXJPcHRpb25FdmVudEhhbmRsZXJdKTtcblx0fVxuXG5cdHNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcIm1vbnN0ZXItY2hhbmdlXCIsIHNlbGZbY2hhbmdlRXZlbnRIYW5kbGVyXSk7XG5cdHNlbGYuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIHNlbGZbaW5wdXRFdmVudEhhbmRsZXJdKTtcblx0c2VsZi5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBzZWxmW2tleUV2ZW50SGFuZGxlcl0pO1xuXG5cdHJldHVybiBzZWxmO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKi9cbmZ1bmN0aW9uIHNldFN0YXR1c09yUmVtb3ZlQmFkZ2VzKHN1Z2dlc3Rpb24pIHtcblx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldE9wdGlvbihcInNlbGVjdGlvblwiKTtcblxuXHRcdGNvbnN0IGNsZWFyQWxsRmxhZyA9XG5cdFx0XHRpc0FycmF5KHNlbGVjdGlvbikgJiZcblx0XHRcdHNlbGVjdGlvbi5sZW5ndGggPiAwICYmXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLmNsZWFyQWxsXCIpID09PSB0cnVlO1xuXG5cdFx0Y29uc3QgY3VycmVudCA9IHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIpO1xuXG5cdFx0aWYgKHN1Z2dlc3Rpb24gPT09IFwiZXJyb3JcIikge1xuXHRcdFx0aWYgKGN1cnJlbnQgIT09IFwiZXJyb3JcIikge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcImNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZVwiLCBcImVycm9yXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzW2lzTG9hZGluZ1N5bWJvbF0gPT09IHRydWUpIHtcblx0XHRcdGlmIChjdXJyZW50ICE9PSBcImxvYWRpbmdcIikge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcImNsYXNzZXMuc3RhdHVzT3JSZW1vdmVCYWRnZVwiLCBcImxvYWRpbmdcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHN1Z2dlc3Rpb24gPT09IFwibG9hZGluZ1wiKSB7XG5cdFx0XHRpZiAoY3VycmVudCAhPT0gXCJsb2FkaW5nXCIpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIiwgXCJsb2FkaW5nXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChjbGVhckFsbEZsYWcpIHtcblx0XHRcdGlmIChjdXJyZW50ICE9PSBcImNsZWFyXCIpIHtcblx0XHRcdFx0dGhpcy5zZXRPcHRpb24oXCJjbGFzc2VzLnN0YXR1c09yUmVtb3ZlQmFkZ2VcIiwgXCJjbGVhclwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAodGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwib3BlblwiKSkge1xuXHRcdFx0aWYgKGN1cnJlbnQgIT09IFwib3BlblwiKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIFwib3BlblwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBvcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJvcHRpb25zXCIpO1xuXHRcdGlmIChcblx0XHRcdG9wdGlvbnMgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0b3B0aW9ucyA9PT0gbnVsbCB8fFxuXHRcdFx0KGlzQXJyYXkob3B0aW9ucykgJiYgb3B0aW9ucy5sZW5ndGggPT09IDApXG5cdFx0KSB7XG5cdFx0XHRpZiAoY3VycmVudCAhPT0gXCJlbXB0eVwiKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIFwiZW1wdHlcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKHN1Z2dlc3Rpb24pIHtcblx0XHRcdGlmIChjdXJyZW50ICE9PSBzdWdnZXN0aW9uKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwiY2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCIsIHN1Z2dlc3Rpb24pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRyb2xdYCxcblx0KTtcblx0dGhpc1tzZWxlY3Rpb25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09c2VsZWN0aW9uXWAsXG5cdCk7XG5cdHRoaXNbY29udGFpbmVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNvbnRhaW5lcl1gLFxuXHQpO1xuXHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1wb3BwZXJdYCxcblx0KTtcblx0dGhpc1tpbmxpbmVGaWx0ZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09ZmlsdGVyXVtuYW1lPVwiaW5saW5lLWZpbHRlclwiXWAsXG5cdCk7XG5cdHRoaXNbcG9wcGVyRmlsdGVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWZpbHRlcl1bbmFtZT1cInBvcHBlci1maWx0ZXJcIl1gLFxuXHQpO1xuXHR0aGlzW3BvcHBlckZpbHRlckNvbnRhaW5lckVsZW1lbnRTeW1ib2xdID1cblx0XHR0aGlzW3BvcHBlckZpbHRlckVsZW1lbnRTeW1ib2xdLnBhcmVudEVsZW1lbnQ7XG5cdHRoaXNbb3B0aW9uc0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1vcHRpb25zXWAsXG5cdCk7XG5cdHRoaXNbbm9PcHRpb25zQXZhaWxhYmxlRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PVwibm8tb3B0aW9uc1wiXWAsXG5cdCk7XG5cdHRoaXNbc3RhdHVzT3JSZW1vdmVCYWRnZXNFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09c3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNdYCxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVQb3BwZXIoKSB7XG5cdGlmICh0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgIT09IFNUWUxFX0RJU1BMQVlfTU9ERV9CTE9DSykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIsIGZhbHNlKSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdG5ldyBQcm9jZXNzaW5nKCgpID0+IHtcblx0XHRjYWxjQW5kU2V0T3B0aW9uc0RpbWVuc2lvbi5jYWxsKHRoaXMpO1xuXHRcdHBvc2l0aW9uUG9wcGVyLmNhbGwoXG5cdFx0XHR0aGlzLFxuXHRcdFx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0sXG5cdFx0XHR0aGlzW3BvcHBlckVsZW1lbnRTeW1ib2xdLFxuXHRcdFx0dGhpcy5nZXRPcHRpb24oXCJwb3BwZXJcIiwge30pLFxuXHRcdCk7XG5cdH0pXG5cdFx0LnJ1bigpXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH0pO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDx0ZW1wbGF0ZSBpZD1cIm9wdGlvbnNcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJvcHRpb25cIiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWZpbHRlcmVkIHBhdGg6b3B0aW9ucy5maWx0ZXJlZCxcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXZpc2liaWxpdHkgcGF0aDpvcHRpb25zLnZpc2liaWxpdHlcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgcGFydD1cIm9wdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZGF0YS1tb25zdGVyLXJvbGU9XCJvcHRpb24tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgdHlwZSBwYXRoOnR5cGUsXG4gICAgICAgICAgICByb2xlIHBhdGg6cm9sZSxcbiAgICAgICAgICAgIHZhbHVlIHBhdGg6b3B0aW9ucyB8IGluZGV4OnZhbHVlLCBcbiAgICAgICAgICAgIG5hbWUgcGF0aDpuYW1lLCBcbiAgICAgICAgICAgIHBhcnQgcGF0aDp0eXBlIHwgcHJlZml4Om9wdGlvbi0gfCBzdWZmaXg6IGZvcm0sXG4gICAgICAgICAgICBjbGFzcyBwYXRoOm9wdGlvbnMuY2xhc3MgXG4gICAgICAgICAgICBcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm9wdGlvbnMgfCBpbmRleDpsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgcGFydD1cIm9wdGlvbi1sYWJlbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJzZWxlY3Rpb25cIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJiYWRnZVwiXG4gICAgICAgICAgICAgICAgIHBhcnQ9XCJiYWRnZVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci12YWx1ZSBwYXRoOnNlbGVjdGlvbiB8IGluZGV4OnZhbHVlLCBcbiAgICAgICAgICAgICAgICAgY2xhc3MgcGF0aDpjbGFzc2VzIHwgaW5kZXg6YmFkZ2UsIFxuICAgICAgICBwYXJ0IHBhdGg6dHlwZSB8IHN1ZmZpeDotb3B0aW9uIHwgcHJlZml4OiBmb3JtLVwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpzZWxlY3Rpb24gfCBpbmRleDpsYWJlbFwiIHBhcnQ9XCJiYWRnZS1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImJhZGdlLWxhYmVsXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwicmVtb3ZlLWJhZGdlXCIgZGF0YS1tb25zdGVyLXNlbGVjdC10aGlzXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6ZmVhdHVyZXMuY2xlYXIgfCA/OjpoaWRkZW4gXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwicmVtb3ZlLWJhZGdlXCIgdGFiaW5kZXg9XCItMVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPHNsb3QgY2xhc3M9XCJoaWRkZW5cIj48L3Nsb3Q+XG5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIFxcJHtzZWxlY3RlZH1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwicG9wcGVyXCIgcGFydD1cInBvcHBlclwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cIm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1maWx0ZXItY29udHJvbFwiIHJvbGU9XCJzZWFyY2hcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcm9sZT1cInNlYXJjaGJveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0PVwicG9wcGVyLWZpbHRlclwiIG5hbWU9XCJwb3BwZXItZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4XCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwib3B0aW9uc1wiIGRhdGEtbW9uc3Rlci1yb2xlPVwib3B0aW9uc1wiIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJvcHRpb25zIHBhdGg6b3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cIm5vLW9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cIm5vLW9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm1lc3NhZ2VzLmVtcHR5T3B0aW9uc1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHBhcnQ9XCJzdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc1wiIGRhdGEtbW9uc3Rlci1yb2xlPVwic3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIGA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChTZWxlY3QpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFBvcHBlclN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFBvcHBlclN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRQb3BwZXJTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHBvcHBlciB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja31kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXXthbGlnbi1jb250ZW50OmNlbnRlcjtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bGVmdDowO3BhZGRpbmc6MS4xZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1tb2RhbCl9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl0gZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWFycm93XXtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtoZWlnaHQ6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3otaW5kZXg6LTF9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YWRkQXR0cmlidXRlVG9rZW4sXG5cdHJlbW92ZUF0dHJpYnV0ZVRva2VuLFxufSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfUk9MRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IERlYWRNYW5zU3dpdGNoIH0gZnJvbSBcIi4uLy4uL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXCI7XG5pbXBvcnQgeyBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0sgfSBmcm9tIFwiLi4vZm9ybS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBwb3NpdGlvblBvcHBlciB9IGZyb20gXCIuLi9mb3JtL3V0aWwvZmxvYXRpbmctdWkubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXJTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9wb3BwZXIubWpzXCI7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuXG5leHBvcnQgeyBQb3BwZXIgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgdGltZXJDYWxsYmFja1N5bWJvbCA9IFN5bWJvbChcInRpbWVyQ2FsbGJhY2tcIik7XG5cbi8qKlxuICogbG9jYWwgc3ltYm9sXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVzaXplT2JzZXJ2ZXJTeW1ib2wgPSBTeW1ib2woXCJyZXNpemVPYnNlcnZlclwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjbG9zZUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImNsb3NlRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjb250cm9sRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImNvbnRyb2xFbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBidXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiYnV0dG9uRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwb3BwZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwicG9wcGVyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBhcnJvd0VsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJhcnJvd0VsZW1lbnRcIik7XG5cbi8qKlxuICogQSBQb3BwZXIgaXMgYSBmbG9hdGluZyBVSSBlbGVtZW50IHRoYXQgY2FuIGJlIHNob3duIG9yIGhpZGRlbi5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9sYXlvdXQvcG9wcGVyL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2xheW91dC9wb3BwZXItc2ltcGxlXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9sYXlvdXQvcG9wcGVyLWNsaWNrXG4gKlxuICogQHNpbmNlIDEuNjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIHBvcHBlciB0aGF0IGNhbiBtYWtlIHlvdXIgbGlmZSBlYXNpZXIgYW5kIGFsc28gbG9va3MgZ29vZC5cbiAqIEBmaXJlcyBtb25zdGVyLXBvcHBlci1oaWRlIGZpcmVkIHdoZW4gdGhlIHBvcHBlciBpcyBoaWRlLlxuICogQGZpcmVzIG1vbnN0ZXItcG9wcGVyLWhpZGRlbiBmaXJlZCB3aGVuIHRoZSBwb3BwZXIgaXMgaGlkZGVuLlxuICogQGZpcmVzIG1vbnN0ZXItcG9wcGVyLW9wZW4gZmlyZWQgd2hlbiB0aGUgcG9wcGVyIGlzIG9wZW4uXG4gKiBAZmlyZXMgbW9uc3Rlci1wb3BwZXItb3BlbmVkIGZpcmVkIHdoZW4gdGhlIHBvcHBlciBpcyBvcGVuZWQuXG4gKi9cbmNsYXNzIFBvcHBlciBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9sYXlvdXQvcG9wcGVyQEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGhlIHRlbXBsYXRlcyBmb3IgdGhlIGNvbnRyb2wuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBUaGUgbWFpbiB0ZW1wbGF0ZS5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG1vZGUgVGhlIG1vZGUgb2YgdGhlIHBvcHBlci4gUG9zc2libGUgdmFsdWVzIGFyZSBgY2xpY2tgLCBgZW50ZXJgLCBgbWFudWFsYCwgYGZvY3VzYCwgXCJhdXRvXCIgb3IgYSBjb21iaW5hdGlvbiBvZiB0aGVtLlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY29udGVudCBUaGUgY29udGVudCBvZiB0aGUgcG9wcGVyLlxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gcG9wcGVyIFRoZSBwb3BwZXIgb3B0aW9ucy5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHBvcHBlci5wbGFjZW1lbnQgVGhlIHBsYWNlbWVudCBvZiB0aGUgcG9wcGVyLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGB0b3BgLCBgYm90dG9tYCwgYGxlZnRgIGFuZCBgcmlnaHRgLlxuXHQgKiBAcHJvcGVydHkge2Z1bmN0aW9uW119IHBvcHBlci5taWRkbGV3YXJlIFRoZSBtaWRkbGV3YXJlIGZ1bmN0aW9ucyBvZiB0aGUgcG9wcGVyLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZmVhdHVyZXMgVGhlIGZlYXR1cmVzIG9mIHRoZSBwb3BwZXIuXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnQgUHJldmVudHMgdGhlIG9wZW4gZXZlbnQgZnJvbSBiZWluZyBzZW50LlxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0bW9kZTogXCJhdXRvIGZvY3VzXCIsXG5cdFx0XHRjb250ZW50OiBcIjxzbG90Pjwvc2xvdD5cIixcblx0XHRcdHBvcHBlcjoge1xuXHRcdFx0XHRwbGFjZW1lbnQ6IFwidG9wXCIsXG5cdFx0XHRcdG1pZGRsZXdhcmU6IFtcImF1dG9QbGFjZW1lbnRcIiwgXCJzaGlmdFwiLCBcIm9mZnNldDoxNVwiLCBcImFycm93XCJdLFxuXHRcdFx0fSxcblx0XHRcdGZlYXR1cmVzOiB7XG5cdFx0XHRcdHByZXZlbnRPcGVuRXZlbnRTZW50OiBmYWxzZSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgY29ubmVjdGVkQ2FsbGJhY2tgIG1ldGhvZCBvbiB0aGUgZmlyc3QgY2FsbC5cblx0ICpcblx0ICogQHJldHVybiB7Vm9pZH1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHRhZyBuYW1lIG9mIHRoZSBlbGVtZW50LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItcG9wcGVyXCI7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgY3NzIHN0eWxlcyBvZiB0aGUgZWxlbWVudC5cblx0ICpcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtQb3BwZXJTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBjb25uZWN0ZWQgdG8gdGhlIGRvbS5cblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIHR5cGVdIG9mIE9iamVjdC5lbnRyaWVzKFtcImNsaWNrXCIsIFwidG91Y2hcIl0pKSB7XG5cdFx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXG5cdFx0dXBkYXRlUG9wcGVyLmNhbGwodGhpcyk7XG5cdFx0YXR0YWNoUmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgZG9tLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHt2b2lkfVxuXHQgKi9cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuXHRcdC8vIGNsb3NlIG9uIG91dHNpZGUgdWktZXZlbnRzXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCB0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSk7XG5cdFx0fVxuXG5cdFx0ZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogV2l0aCB0aGlzIG1ldGhvZCB5b3UgY2FuIHNob3cgdGhlIHBvcHBlci5cblx0ICpcblx0ICogQHJldHVybiB7UG9wcGVyfVxuXHQgKi9cblx0c2hvd0RpYWxvZygpIHtcblx0XHRzaG93LmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogV2l0aCB0aGlzIG1ldGhvZCB5b3UgY2FuIGhpZGUgdGhlIHBvcHBlci5cblx0ICpcblx0ICogQHJldHVybiB7UG9wcGVyfVxuXHQgKi9cblx0aGlkZURpYWxvZygpIHtcblx0XHRoaWRlLmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogV2l0aCB0aGlzIG1ldGhvZCB5b3UgY2FuIHRvZ2dsZSB0aGUgcG9wcGVyLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQb3BwZXJ9XG5cdCAqL1xuXHR0b2dnbGVEaWFsb2coKSB7XG5cdFx0aWYgKHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0uc3R5bGUuZGlzcGxheSA9PT0gU1RZTEVfRElTUExBWV9NT0RFX0JMT0NLKSB7XG5cdFx0XHR0aGlzLmhpZGVEaWFsb2coKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zaG93RGlhbG9nKCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1BvcHBlcn1cbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0dGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cblx0XHRmb3IgKGNvbnN0IFssIGVsZW1lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHBhdGgpKSB7XG5cdFx0XHRpZiAoZWxlbWVudCA9PT0gdGhpcykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGhpZGUuY2FsbCh0aGlzKTtcblx0fTtcblxuXHRsZXQgbW9kZXMgPSBudWxsO1xuXHRjb25zdCBtb2RlT3B0aW9uID0gdGhpcy5nZXRPcHRpb24oXCJtb2RlXCIpO1xuXG5cdGlmICh0eXBlb2YgbW9kZU9wdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdG1vZGVzID0gbW9kZU9wdGlvbi5zcGxpdChcIiBcIik7XG5cdH1cblxuXHRpZiAoXG5cdFx0bW9kZXMgPT09IG51bGwgfHxcblx0XHRtb2RlcyA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0aXNBcnJheShtb2RlcykgPT09IGZhbHNlIHx8XG5cdFx0bW9kZXMubGVuZ3RoID09PSAwXG5cdCkge1xuXHRcdG1vZGVzID0gW1wibWFudWFsXCJdO1xuXHR9XG5cblx0Zm9yIChjb25zdCBbLCBtb2RlXSBvZiBPYmplY3QuZW50cmllcyhtb2RlcykpIHtcblx0XHRpbml0RXZlbnRIYW5kbGVyQnlNb2RlLmNhbGwodGhpcywgbW9kZSk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG1vZGVcbiAqIEByZXR1cm4ge1BvcHBlcn1cbiAqIEB0aHJvd3MgRXJyb3JcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlckJ5TW9kZShtb2RlKSB7XG5cdHN3aXRjaCAobW9kZSkge1xuXHRcdGNhc2UgXCJtYW51YWxcIjpcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcImZvY3VzXCI6XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2hvd0RpYWxvZygpO1xuXHRcdFx0fSk7XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5oaWRlRGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcImNsaWNrXCI6XG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMudG9nZ2xlRGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJlbnRlclwiOlxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLCAoZXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMucHJldmVudE9wZW5FdmVudFNlbnRcIikgPT09IHRydWUpIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2hvd0RpYWxvZygpO1xuXHRcdFx0fSk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJhdXRvXCI6IC8vIGlzIGhvdmVyXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIChldmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wcmV2ZW50T3BlbkV2ZW50U2VudFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zaG93RGlhbG9nKCk7XG5cdFx0XHR9KTtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnByZXZlbnRPcGVuRXZlbnRTZW50XCIpID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmhpZGVEaWFsb2coKTtcblx0XHRcdH0pO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdHRocm93IG5ldyBFcnJvcihgVW5rbm93biBtb2RlICR7bW9kZX1gKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGF0dGFjaFJlc2l6ZU9ic2VydmVyKCkge1xuXHQvLyBhZ2FpbnN0IGZsaWNrZXJpbmdcblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0gPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcblx0XHRpZiAodGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSBpbnN0YW5jZW9mIERlYWRNYW5zU3dpdGNoKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdLnRvdWNoKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXSA9IG5ldyBEZWFkTWFuc1N3aXRjaCgyMDAsICgpID0+IHtcblx0XHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdH0pO1xuXHR9KTtcblxuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5vYnNlcnZlKHRoaXMucGFyZW50RWxlbWVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlcigpIHtcblx0aWYgKHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdIGluc3RhbmNlb2YgUmVzaXplT2JzZXJ2ZXIpIHtcblx0XHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5kaXNjb25uZWN0KCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBoaWRlKCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLXBvcHBlci1oaWRlXCIsIHtcblx0XHRzZWxmLFxuXHR9KTtcblxuXHRzZWxmW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0cmVtb3ZlQXR0cmlidXRlVG9rZW4oc2VsZltjb250cm9sRWxlbWVudFN5bWJvbF0sIFwiY2xhc3NcIiwgXCJvcGVuXCIpO1xuXG5cdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdGZpcmVDdXN0b21FdmVudChzZWxmLCBcIm1vbnN0ZXItcG9wcGVyLWhpZGRlblwiLCB7XG5cdFx0XHRzZWxmLFxuXHRcdH0pO1xuXHR9LCAwKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzaG93KCkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRpZiAoc2VsZi5nZXRPcHRpb24oXCJkaXNhYmxlZFwiLCBmYWxzZSkgPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoc2VsZltwb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ID09PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLXBvcHBlci1vcGVuXCIsIHtcblx0XHRzZWxmLFxuXHR9KTtcblxuXHRzZWxmW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuXHRzZWxmW3BvcHBlckVsZW1lbnRTeW1ib2xdLnN0eWxlLmRpc3BsYXkgPSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0s7XG5cblx0YWRkQXR0cmlidXRlVG9rZW4oc2VsZltjb250cm9sRWxlbWVudFN5bWJvbF0sIFwiY2xhc3NcIiwgXCJvcGVuXCIpO1xuXHR1cGRhdGVQb3BwZXIuY2FsbChzZWxmKTtcblxuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRmaXJlQ3VzdG9tRXZlbnQoc2VsZiwgXCJtb25zdGVyLXBvcHBlci1vcGVuZWRcIiwge1xuXHRcdFx0c2VsZixcblx0XHR9KTtcblx0fSwgMCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdXBkYXRlUG9wcGVyKCkge1xuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ICE9PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiLCBmYWxzZSkgPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRwb3NpdGlvblBvcHBlci5jYWxsKFxuXHRcdHRoaXMsXG5cdFx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0sXG5cdFx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXSxcblx0XHR0aGlzLmdldE9wdGlvbihcInBvcHBlclwiLCB7fSksXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1BvcHBlcn1cbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udHJvbF1gLFxuXHQpO1xuXHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1idXR0b25dYCxcblx0KTtcblx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09cG9wcGVyXWAsXG5cdCk7XG5cdHRoaXNbYXJyb3dFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09YXJyb3ddYCxcblx0KTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPHNsb3QgbmFtZT1cImJ1dHRvblwiIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCI+PC9zbG90PlxuXG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwicG9wcGVyXCIgcGFydD1cInBvcHBlclwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cIm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImFycm93XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwiY29udGVudFwiIGNsYXNzPVwiZmxleFwiIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFBvcHBlcik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgUG9wcGVyIGFzIE5ld1BvcHBlciB9IGZyb20gXCIuLi9sYXlvdXQvcG9wcGVyLm1qc1wiO1xuXG5leHBvcnQgeyBQb3BwZXIgfTtcblxuLyoqXG4gKiBAc2luY2UgMS4xMC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQGRlcHJlY2F0ZWQgc2luY2UgMy42NS4wXG4gKi9cbmNsYXNzIFBvcHBlciBleHRlbmRzIE5ld1BvcHBlciB7fVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFBvcHBlckJ1dHRvblN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFBvcHBlckJ1dHRvblN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRQb3BwZXJCdXR0b25TdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHBvcHBlcmJ1dHRvbiB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja31kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXXthbGlnbi1jb250ZW50OmNlbnRlcjtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtkaXNwbGF5Om5vbmU7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bGVmdDowO3BhZGRpbmc6MS4xZW07cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1tb2RhbCl9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPXBvcHBlcl0gZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWFycm93XXtiYWNrZ3JvdW5kOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtoZWlnaHQ6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6Y2FsYyhtYXgodmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSksIC0xICogdmFyKC0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZSkpKjIpO3otaW5kZXg6LTF9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnksYnV0dG9ue2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLXNlY29uZGFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5LC5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtnYXA6LjRyZW07anVzdGlmeS1jb250ZW50OmNlbnRlcjtsaW5lLWhlaWdodDoxLjU7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOi4zNzVyZW0gLjc1cmVtO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7d2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTt3aWR0aDotbW96LWF2YWlsYWJsZTt3aWR0aDpzdHJldGNofS5tb25zdGVyLWJ1dHRvbi10ZXJ0aWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnksLm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCk7YmFja2dyb3VuZC1wb3NpdGlvbjo1MCU7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9YnV0dG9uOmFjdGl2ZSxidXR0b246aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31idXR0b246YWN0aXZle3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfS5tb25zdGVyLWJ1dHRvbi1iYXIsLm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2FsaWduLWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOnN0cmV0Y2g7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6bm93cmFwO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5tb25zdGVyLWJ1dHRvbi1ncm91cHtib3gtc2l6aW5nOmJvcmRlci1ib3g7Z2FwOjA7bWFyZ2luOjFyZW0gMH0ubW9uc3Rlci1idXR0b24tZ3JvdXA+Om5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLXJpZ2h0OmNhbGModmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpKi0xKX0ubW9uc3Rlci1idXR0b24tZ3JvdXAgOmhvdmVye2JveC1zaGFkb3c6bm9uZX1idXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmxpZ2h0KXtidXR0b246Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjJweDt6LWluZGV4OnZhcigtLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lKX19QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpSYWxld2F5O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFGSjRBQklBQUFBQXQzQUFBRklRQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHb0U4Rys0NkhJVThCbUEvVTFSQlZFUUFoUWdJZ1FvSm54UVJDQXFCdWd5Qm1uQUxoQ0lBQVRZQ0pBT0lRQVFnQllVVUJ5QU1neHdiZmFRWGFKZWZtTnowWm9sM3Y2MGNQZVpNcEc0SEpTams1cUlJTmc2Q0dNZ2xaZi8vbjNGMGpPR0dEUkExclhlSW5jSklVa05IR242OXFNUkRVOFphampzOVVic210bnFuRTN2M3ZxaVFtZlJRcExrS1c2UVp3YWw2czVJVWlKTlVTVUcvT3dvRFk2QjY3NU9qU2prRFNTTXUycGVkcHU5dkpJTFVsSmQ3MDdEK2VMSHBqWURJNGUxdURuTGpISHZ4cERYR015ZHVMTG4xcXQwRkNRT3lGc0paRTEra0pxM1QrSWU3QkpGSU5PQU5iaTl2VFV6aEk3VzRHbVVMMGxXalQvRlFRaS9tKyt4dVBQMDJvbVJIZTVwbjREZ2ZOWmZuK1I5ejk3OXRtRWVOYXExUnhScUhUalRQTkEySkZFZ3JIZG8vbnQvVy81emJnR0N4aWE2RWtWaUEyRmhZR0l0Um1FMVp2VlV2cXRTdGI3TXZyZDNXNyt0MiswWGRvVG56empZYnA3bVNITEFDa2hNV2dDVEw2czBXdjBBVW9oSmZFcUUzb3BQZDU4aWtKbktsbyszdWFlU0hZSjZmY0ljWGpkK3JLVUVzYUVsVHFsVWxWUm0vTitlLzhpUDBMNUFLb3pObEozLzlpQndzaE02djVKSVVKeWtnVDNmZHJPbXE2TGNzK1orcS9Yc0FYRnhFRWlRSVVhS29zRm43Y3RUKzdCQlM1ZHFEb2xKWHVuYmw3cnR0ekQvdjM4NExmdEphZ0ZGQUxZUEU1QTdnbk1yWkJodDRsWHFzYlpLbWJkcTBUdE9tcG1nTml1Z00yUFlCYzczTXJqcTdHTHNvWEhjVHB0OXVQdkZEejhlTjNnK3N4clBRQXc2RFRGTnAvT1pJOWlpbk5pdFpoUm1wUU9Da2RvQmRBTmpWV2xhdk1pdHdETkpYL3BZSUFrVnduT1Avdlc1eHpvTXc3U0FGQUtVK1p6L2tuUC9aOWorT2Rmckw4S2UydmRLYm1waHV4SlN1TDhFVUFnZ0hJaUJIUCs0NDRFRHp2MVBUUTNZa09jT1NsVEhtajZVc2RmbzJMKy9qcFllN0lIV2NRVWdjZ2twTEZSMVlUVzhDR0tRWDliOEdGQUFBSDl0bzRSSFE2R0x2RlJyaTREaXdUekFBRERNS0RQci9mWjNWL3FkZ1Bta0d6S1RFbVdFWGI3UTN0dGdUWXFvMm5QNi8rOTdYZitGLzlKSEFWc0lJY0FDQlp3UnlrR1Q3Z0NSOFZvaEpjVU9PU0RqaVNiQXBoTW96bTJKUnB0QnRVVzY5WGJORkczSVZ5MktMb2s0OC9MZnNtNTI3SWFxQkxNdUJiT0ZJd2VGVWQwMXZlTCtZOHhXaHR6Y3FUbTJDSVRjNWVMSndTSTRmWWxMWUZJVkhBcy8vVDUzTjQvWXgxaEtHVStIU3FFcmRwUFBuczZmcXFXSnNOYlphQ2xRdGpsT0xVTXNoY2RvQTVUUXNzNEpMYzkwU3hDT01NVUs0S1A5TnNocHpwWDR2d3hLQ2hDQVNSRVJFL0xLc1dSbEp3TktBY1RuWEFoRXkzcjFLSGNaYS9ZZFg1ODQyMC9pYVhtdEdob0NBaUlpQVIyM3YvUDkrS1RBQ0FONWhka0MzeFVDNEVMc2dndmtSMmtyRWpZU0V2MEJLU21IQ2hJdllPQ0FKa0tRZ3lZTU0yUW9VTXpDbzE2Qko4NXFBV0NDZEhlazNBQjBPREwxTHEwUGdUZTNoU3cyZmhpNFhoUHVldVFXRUg2eHRJRVFBYkcyTm01b1Y1NFFGUCt5S2dPMkQ0VDV0L3d6MlhXOTIvcnBxcExUU0lQOHFWOXZMdk9kczBOTFd5WDUxSzZvZmJ2UFpFMXBhZjd3MzE4QzladGhxN2YzMmJmdUw2NFZaSHc1MTRZc201bGdmTmJmRzdXOWxzVUE0RUd6NzIzdnh3R3pwNGZSUittUDhMczVCN0tCMmVESlhjNnh3bEc2OTAydWc3QXpMQThOWTIxQjJkQi9QNXFmT1Y4dDFvbnlMNWpaRERmUUk1Umc4RDk4RnZIc3ZjbEh1SnNyZHZzSnJwYy9Uci9ndS9FZlpKelhVenBXYURqN003K1VQOC84RWtBQVZhQVMvQ1IrWHMvSk40WWFJY08xeEhaY1VhTU1ia2xycEt5N05mUUpLUWNVUmFnb0dtQ1crSEE2RU52YmczM3NsMnBJWVJtRTliSUhiMG1BNmtrNmxONUdkeU1ONUVibVFoeEhLbHdNZ1Q1OGNndzdwZFVSejduZk1jUWZjVTN2SWN6VmtkcmhYOFhIcTQwMTJ0Rk9kN2tUL2E3cDdtODNXQTcxRjdhTzlNK2RqdmRkNmo3ZnhtK0QxUHUzejN1aXJ2bXV5emE1M3RydjkzbFRiODJSVDJLYUZWVUtNTlAzNkJ2UU1DbzBHc0Vka0w4cyt6TGcxRXhiTTBOZ0NXQXhnemY4MkRHMUtYTWZjNHJqTmNRZkhLeFNDdVJ1Qkk1QW9kREREa0dkVjhDblZWRW1FTWFpbjRTYTBBWFRJMFJCTnBPWUFMVnExYVY5dnhKaVV6SEtXQ2lzNm1wMEJ1a3gwNjlHcjc0c25WTmJzb0Nta1ZNb3A1K3BER2FXejJzTERyMmlOdCtvWk8wYjM2WVNJaldjeHZubE4weDBWaGxZb1c0VVJqWFhLeUxHM1kzcW9MZEVhekhBRUVvVnVNbDNERGVFUlZwRy9qZVRFUjBDVVpFVTFtb3RxRm9pd0pGS1VhREZpYWNTbEJKckVqU1FLSi9DU0ZTbVNLazE2MVFsa2RLZXlTWFl6c2RYS2k2STlpa05KTXRDVUtsT3VRcVVxMVZIVDF6cTYrbHpmUU5BSWE1SnBSb3ZXYUVQN1p4dU5tVGpNTEJZdXEzWFVUZ05kUkRkNlVxOUEzM2NieEF6eERET04wSXhhTlZheGQvL3MvYWp4QUU2Sm5QYkZHWmt1QzN1YU5VOEVzRFNMWlZteE9qMVBkOEhReFhTcGVka1hhd2JXNndabzgrNkRyaXVRRkZ3NUlwdm5KaDYvWmdGSks5MzBhRU0yWEozeUpCMERIb3BoYnFnMHVya3ZNSWdZbHRiR1JQY2RrZDdWai9OVjRwYkFiYSsvRTRCakNnOXA1WmVyaS9wZE0wQ0cvN3RYWk54VkUrNmJZYXZRbjZ1bVd3eTNGWGY2Z2crWG5BdEhEZ2prUE5pVWJxcG93dkRVdmJSbGNqNVhaSFl6VjhKaTRObDF2anNPaHJNYXhPSHhlRHdlanovVklISlhuNkgwd2hnNnFGT0VVcVFvMFdMRTBvaExDVEtKMHlRNUxVOXlSUXBTcFVsZlpuQVNCa1dwbENsWG9WS1Y2cWliVEJ0TW1RS1lZV0hWVVVmdEdJdDYybGRuTUgzRXBpVTBxVlFxSGJDTHhPVStFNC8xWExmQkVoektoZ1VjZ1VTaGZ4d21EejlHNUVSQUFITDdGSFJLUXlybnd1eFFmNXJoSEJFQlJJb1NMVVlzelViYzRydE1kcGwyNkZnZDU1dGdRRzh4L2ZBWjJKekl2R2JtbHJjWEFtM3dYS2E3RWxmUGNTMnR4ZnErZWdmaUhHb0RNeHlCUktIdnkzU0ozMFE2VjgrNm1kZlpzYUZWM2VPVUtzV015bmtoeUwxdTRWSTBMMVNKTEl4WHlZenBMeU5xaVd6MFhUcGthVHluMVpEdGk5MG1ZMDJ2MHRVcXR6U0NsK3FySzdySXV2MXY5UkQwc2d4cUdiSm9HR2ZFa2xFMVl6cjI4TzFsMktld1g5TjRBRGFOMWI3TDBJYVJUWE91eTl5aXU4MnBPd0hRQkMrcGxkQ3JPbUswTWcvcjF2UllFbTNEQkVjZ1VlZ21VeDAzRzQrd2l0UWdPZkVSRUNWWlVZM200dG1FSXZ3VUtVcTBHTEUwNGxJQ1R1STB5VHF0RmNsRUNsS2xTYTg2V0VaM0pKdnNGV2k3SXhLSk9Cd09oOFBoY0VUclJOM3REcGxNSnBOaFJJYWlxQWlHWVJnbWNia3N5NE5vei9yb2ZRTDdLY2FsTkQwRk9XM1JHWnVPQlIyeG1WTXhrVWdrRGwwWDd1Sml1dFM4Yk5HYUUrdi9aUU93cWU4NkdJSWVFc0N1b3ZXWWZDcTJ0dnBNT0JON016TzY4R1dYTGh0bWdXMmZmZUhwMU11N3F3WDVORHdUa3BDU2NlZkJreGR2ZmluQVJJUklVYUxGaUtVUmx4SUFpWkUwclZxNjVJb1VTWlVtdmVxVU1ycHMvejFaV0VaNVlCZ0dBQUFBQUFDQTBXWnNkMUNwK0h3K24yL2NPbGs0ckRwU2wxSzNIcjM2amcxQ1R0d3pPY051Q1hZTmdpRFlob3RIMW9nT0xSU3V4OG5pbDRyMmlZYXYwbm9yelh2WjJuWmpaTGZhS0QrVlJnSC9mZ05tcGtGYmhnaUdpVWFjR2ZYTm1LNDlGUHZZOXR2YmNUbTc1KzNmZGFtVzZZU3R3a2R6YUNIWmN2cTBDUzRpVTVabU54TFhHQmUvclFvSGpNUDEvUUVHVk1aRkpnYkRESi81VDNleUJjdkdQU3FUaW1KY0MrWVFVanFHdjJuQzdxM25CMERPcXYyRzNWdmxJaEtJVzhNUlNCUzZ5WlRpTkdGWCtSR0NESHM4UFlJZFRqZEFVQXl2UWt3U0NwcGhOZDIwbXB1TWpRWEtCUWtXSWpRcG1KUlVLWXhLWGNMRGM2a0lmSGFUS2FPTVNjNE1zVlJZUTBlelU2RkxwVnVQM3RMSHV3cHJZZnRoaXdpSEZBV2tTcG1XUnQrNm5KNlUxOEN1eUo4NWoyeDBiMGQ3TjlwaWJxMGxiNE5uVStwTzd0RVVMaWhkVU8yaHJwdGdZWENzeEJGQTNsUTJubUZjM0ZiUmpHQmdDZDZCVUg3cW5YQmJhY2pzSzk5UmZJRE1BRmtCc29PK25aZzhQMEJCZ01JQXRRRWFuOVdRRXM5TUFITkc4NTU0d2ErQXJucXZUVGpwR1M3ZS9pbFBtakFSUG1uc3hXa2RBQVJ5T0w5eUFoeW14N1NHS2xrN0doNDh2RHZOZmRnK0lUQlpwRDlnemdNSUJ3d0JrNXRta0VYSXFxTU1hRVRnL0hVZTI2b0xUVHA0dzRnOVVrWjViZ2J4RUh0Q3lUTFlQSG1KVXEzdUpwcXp2U05jdW1iQmRYWVFza3UxQzkyTjhqVHZERkVVMHJ2ODE3Z21xc0dqUGZSdU5qdmVyVERtSENFNHErcWJ6T2p1SUl2UmFEaHpaMS9WSlVwaGhpT1FLSFF3c1o1VGpndUFCOEN1S3IrWUlNS2V3SW9NTzV4eDllNEFFQlREU1lwbTJPVHk4b0lveVlvYWplalVRYjhKd0QvWEI1aVNzd1VpZ2hBc1JHaFMwQ2d6SnpYTUNUVTFYRVpIYVRBWFRDUVNpY1hiWTRWQ29SZ0xFeHN0bGRDdHhaMWFVbmx1dEdodE9RdDE4L1JVZFZwa0RCdmJTNG5Fb05Gb05CcU5GaWRYbjBXSkxKQ3JVOENVYnFxTWhaR3BtK0Y4RWJCSVVhTEZpS1VSbHhLRUVpVlZMVk55UmdwU3BVbXZ1Z0FaaEFHbHlwU3JVS2xLdGJwbUE2d3JRTGNldmZxYUU3RFRXczZZSG0wRTJkY2xpV1dzV0Uzbm1TN0c1YjZ1R1ZuUG5OdXl5V2JId3hEanBXazZNK2oyMGVZTUxRLzAzVk1tS200Wm5nbEpTTW00OCtESml6ZS9LcmRDa1ZNbEtzeUltbWVaZjBHUXl3SkJFRnhDL3JnZ0NJSWdDSUl6OTBiREV3TVRqOGZqQVVBeGRTNlZzRGNzMWc4d2ZZQ1hyTmQ5OFNIOGdhams1dnVVUHFnNFhEUDlKbTdvR1d2R1h4U2RFTExmcnNFU0VzbVdYVGNNM2NMdEhGU0diU0hCQWpjQ2lVSVhKcUhuTWxPTFJCTGFzblVLMlN1eDF6cW5NQi9aTUdPeC96UHU4b2hEQURBQU9BQUNBQW1BQWtBRFlIZ2xDa0N1TFZBaVNJS0ZDUDBraFdOS1BGVXdiZHlMK3NEQnllZ2thSjJXRU10V3JFNi80dnBXN0c2ZTRtRHcwQmZ4WmhGdDlHdmZoUEVBbXlkNGNNdFVxc1BsNGF5N0d1YWs1dDBONTJPT3dKYUJnU05Ic2syTmg3cUVXWllWcThlK2tzeGpqM0VLU1hnOExOaWxRcUZRekUxZnY1dHZwUVFGdEZJbXlMdGl2VGVXa1FDazVaUmUyUWlKMlpyTFlEVjg2TUJZV1g1eEFQdW5rMXludFoyeDZhYk5yaVhBc2hXcmNma1U2M3kvai9tK2duek44STNZdHh6ZkNlT2lBUGk3WWgxd0JCS0Z6czcyV3JsaWZXYjNuK3NPbWtTaXpYSFRYcG12QW5PZ2VhKzdTOEYxRUhQOG5VNEluRlk0UTVtV3AzQkFMbGVzYTdCejRGdU9iRTRFWFJuaXlrOGh0Q09pazh2bGNzV1lJS3I0L2NITTNYWEljY3lPRHNCWEg5UjNOSUJqVXNkMWZpZGowaWluSDVyaVpmVU9EVGlGUXVsemVheDcrakhaVnl4ZjM4VTN4TGRyK1U3dTQzSDU5S2VnSzk1SnZ3dnlxbjNJZ3hMeVVHMlk0UWdrQ3YxQlREK0l2Q01QTWcwbFZZUkJuU0lRa2FKRWl4RkxJeTRsQ0NUMmhtMHNFQWdFSlREcnFiNGdKMkpZb3pTVUtWZWhVcFhxYk5yWitaaGVqYis1ckhyR3pjY0xRaEpTTXU0OGVQTGl6YS9LelFuTUNFS3dFS0ZKWVlHeU55SzFsdEpVL0o2V21GeFVxTHNJblhTczM0czRBSm5UTlA5SlY4MVpXMDhid294d2pNb0dnKzFnUFB4d0FNZVprQkVFK1ZzdXBzeG85Y1dTNWl2bmFTVXBGSlExVEVidGV5S2pNQUxsU1FoNlJLM2dDQ1FLM2VRVTRqYkVDN3VxL0F5Q0RIdUNCUVRzY01iVnV3TVVCQlREUTl5UUZNMnd5Um55RVN4S3NxSkdVM1JpRURQWEw5RFo1RjRJcEF1U1lDRkNrOElHWlZNRkNkT2tMdUUxSUtWRmxHZ3hZbW5FTmVOQkNWU0prbkpFaitTTUZFbVZKcjNxbURLSXpHbGtTYmJkOUhMazFmeCszZStWQ3BtS29oZ2x5VUJWcWt5NUNwV3FWS2NhVUczVWxmcG9rTWJheE5Bc0xWcTFhVTlHSWxPZnZKbE1wcGpKWkRKYlJqdGFOV2svcnpXb01JSWFOV2VzYXV0MDN5TU8yUHhJSTZNQkU5MXFmb0R5eENTd2dDT1FLSFNUNlFWdURoNWhGWGxwdHJnTWp5QktzcUlhTDE3R2Nka0E1OEE4Z0NZLzMyUExid2tuQ1FCQU5tdEN3Nk5vQnJWSXF6YnRPVXNXVTQwNWxDd1oxdER4NXAxbzdURWRKQmdTR0w3NzdCRWpvOTRhbzlvanRLOWJ2NS9oQU04UmE0NlNqZ21kZUx6TkRNaGlVSG51N1FtRERCWitJVUZpVGNKb0hjbElrU3BOK21aR2NUY0g1SWNCcGNxVVIwV29WS1U2NnFaM3VzZWdGM21uK2JGbHJpcTlCbW1uVjdQYjdHMFJ0Q2FzT3dLUVpFZ2g0ODZESnkvZS9KNkpyejJydnoxMThQazhQcC9QNXkvOU5QSmlyOWdKd3lsS3JVeTVDcFdxVkVmZFZGTnRocldnVlp2MlpJU1llcmVCb0pkSEtlYWVnMEo3VUJlcVI4U08xYW4zcEZBTUtMd0l0VlNKKytGbW5pSEVzRkVRVytwZWtvTTVIcWY1MGx4QkxMdjl6Q01BWlRQUTE3bjlYNWtIRlg3YzZRMkp2YitLU0lzU0xVWXNqYmhtdkpFRVd4TEhKRFhNU0s1SWtWUnAwcXVPSUtPTHpHbGtTYmJkOUhMa3lWZWdNQlc1VUt3a0dXd3BWYVpjaFVwVnFxT21qOXA1cWxOVDMvLzF4c2lBUkNLUlNBQkFCUURBZ0VBZ0VGNGtjSFBBNHkvZjJtN1lHbzVBb3RDVlNTSWFUZVZHRkFBbHgxUklaUnZHYzVqMEpJZW9jeHp6cEt0Y2F5Y3hJMWhTeVYrNjEvR0N3dXpBTWZRTXc2TFRLZDhvc0ZBY3JOVkRQSWVGczZMSEZ4bE55dGllRGpiOEdPUVFiaFNJdGowMmdJZzhPVmJVZmdGL0d0a2FDc01NUnlCUjZENTVtY1BqTGJZa0k4SjB3SndYZi9NMW5vOWRqVFZkV2hwaUQ0TWprQ2owR1lZNmtZMU41UTRFS2dVaFdJalFwTkNqYktvU0NOT2lYb1piVkY5L3pzTGRHWUdnVmJNendKd3o4K21xVTJzalkxQnJjamwzZkcvc2Z6NnE3b2cyWTM0dmZwZFVoZS9DWjJISDh5QUEveFE4RDNteUFJRE5BVnNDQUpiWm54aTJjSDVzMmNSSndWYU9tMldXc3RQR1p4WVpBMUtJUjdtdDNBekFtdGtGVUk1aWxEY0FtMlF3b2pGWEI2cjNJc0J5VnE1bCt0TmFiY3RyRitRckFRK2xraVVXemlIR0tXYzV1MUZVZE1LTWhueGl4bkFVNGxrYUFuby9uaHVTY0VuSHJRNlFFZG9SMkZJUTRHRm5ZSGtmQmdKVHdObDQyclFIN2RWNklCS3g0R0RJUFRTUEF0WUhjdWEvVXplUDFlcFpKTmF0T0FTcUZFUWtZQ1dTaktvbWN2SjRRL2xZbVI2YldpRVdXVklGQU5hSVRPVncyWlZIenI1TXpDLzBpL0Qxa3dFV1ZEL3pUOWI2REc2MzJpSzRVcUM3VFAyVU5ibmtFWTg2NFhZaUtsVytCUzNGVUt4SERRWW8rOEI5eXoxdzRoMDdCYTRRa2t6TDBMR0pHSXJyWitjTlh1QjNQdzZjZWRwQU1VNkd6UlFxRFc3bnRCK2NXaXNGeW8zV0NtUWpMME1tWG9CcU5XUkZJWkk3Z0RYaHRTY3Q4THBCZmtIc1JRNlhwVmZJUnZaQlU4cDg1RjRoSDhFS254bUVZbXUrSzZjWVkzZ1FlMSsvVHpKQUlSRjFjS3ZObW4yUTBNOGFPV3NYalQ5anZCQ3I1MjF4cXRXVkk2YXBMcGVoS2N4WnVXOUJXTEozUUdxZjlKVGl1dnZVMHdkZ2h3LzhJQlJJWDFWdU5ReXNCcVN0Vk5QWFpEdEwrTml2Y3dpMVBnRC81TzBveW0ySis3OG9uMHJ4Z0E5T0NsYTBnTjBKRVBIWS9ZUDRuaElhd2JFSjJIbFVuUjlEYnpmV01QQXZ4a3J0QTE0eDZqckFtWVVjZ1JmUmxabm5ZeHMyeStvd0xEd2tTMlZrM2RmakFBVVZJSmV3RDA2dHorQXV3NnBJcXhUbDRkbWpvR2xZUVhETWIzMUZKUHMrNjdqOVJOZ3NIWWd3d09jWXR1Zks2VmhDTE11YzRORlRidjlwRVFqRk5qTnIwTFdBSkIzWEdIbTR4N25CUmZYbUhRaFEwYnpxbU90VlRueWVTNngxSGJDL2Fyai9YZS83cU1PbDdNMGVVbkRQZ2h5aXNGOHFJb0ZiaGZFZ3F5RDRvM28ySzVSTHJNSllDYUM1Z3JId3VwRE5zVm9YRkkzKzlXWVBhMWx3dk9wOTFmdmFuR2hvbUppcDk3dXBOSG1PSCt5YjEraExJcGRkcjIxUmlBMTNKaWI3OWs2cFRCM2RGQW83MTRwUTF5UlpiVFhNeWRBN21RRTlSRkdoTC9PeHJIamRSbm8wWGRmOXlFZTBuWEZmT2VyelkrRE8zZmlCV0JGTUFtcUZiT2Vna0FxWFRWbzVmUzY2eU9JVmxMQ1NkY3A2OHVlNHlKZWxoVVB0VTZWbTJqbk5BUHF3V2FObm52MXc3SlA2eFFaYXdTSVBsT0ZNRVVHdXpQQ0JiMmRKVXlnWTZROXdyNkpVakpyNk5aY2JFWXdML2N4WmZlYzgyTE9zTUs0OXhYNjI4UDhOcTNUREVjSUFQWnd3aEx3NThoUEtrNUpTb0RCSmdpVExFU3RQQTUwbTdTcVltTlN4NkZOdjBpU2pVMDR6bVRiTllzNENxemZKZmxtQy9ZWkpnTkJ3REFhQmk4ZUJIVDVIQWs0SVFrS3VSRVIyY2VIQ2pTdFhZaEplTU42OEVmejR3Zmp6SnhFZ2dKU2NuRXlnVUF3bEpYZGgxSnlFQytjaGdnWXBUaHhLdkhoMkVpUnlsaVNKcDJUcEtEbzZXMlRJc0ZXbVRGNnk1RUR5NUVNS0ZQQldxQkJma1JJQ0JsVm8xYXBSYXRTeVU2Zk9WdlhxK1dqUXdGZVRKbjZhdGVNd01mRm4wY0ZlcDA0QnVuVFpvbHMzcEVjUHZsNjlrRDU5K0NaTjJ1YVVVNFJPTzQxcjJqU3VPZk4yV3JCQTZFMHlaTWtNNGJ3NWh3c1duQzVhY3Joa3hlbXlOWnNyTnR5dTJ2SzRac2R0elo3SE9zd0dFd3Voa1JpTTdUZzRFQzRlbkIxbmlKQVFib3VkRUJHUkhWeUlJUkxlY0Q1OElYNzg0UHo1UXdJRTJFbE9UcVFSWEhBUTE2VTRoQzdnZ0NFQWcwWUFCd29LRHJ1RWw2K0dxYkZOUExXR0F4REEyKzJtVVNOT2lCZzd0MFNrUzMxb3hlTWtqckZuMklJakp6ak1TVWhPdWtrb0VKU2lqeUdneDJJYS85WmMwM2IrbjgrZ3FrZ1MyOHM3NTZjalVwM3p3VHIrUlBlNlNlcmxVZFQ1YWV1Z2UvQUhnQno5RjRpbndFOHErSDRPdklXMzlGYmVXcnkvQnFNdnYvS1N1cGk5SGtyVmVmRzVaNElhdmZqeVd5K3A0c1ZYeWhlVlQ1bnhJcS96YnZiam9xWFgxWmUwaGowQVlGTVFaczJCa0FnRklHRnd4SFlOQjlYZGFtd3IzczcvQ0lmZ1laaWZoVDlnYTEweXd0emRaWS9oY25lVFlhL2tpejhLQ0JvcmhGWjRnMWxYQkdHV0tBNzUyRWxJZDlhTEs0U0ZOZFYzMjliRzdSSUlLVTRHRXZoanI4TFUxd2pBMjNzOUJtZ2JHalE5N29VS3dxaU92eVBaRVJJQ0tJekE2V1RwV1F3VjZvSmxlM1ZUbGo1VHlQS09qbTROYnZPZy9UOUdWZnhOQTloRmhRRFN3L2ZSanBDRjJXOE9BNjhpQ3lUK2YySC9ERzhDNmUrbTF4L0lJODc5TkEzNXJ3QUE2OFFXQVlnbFRUQXNZQUNFcWVOKzZteTN3WW9BNEYrak5vV2NOUzhPaWFqUVFQN3lNRmF3SWpRUmdTVU1MSTBRN24xUkFYNlJGOFlLSUlKVW9aM3lnQytRMlFvc0NrdE81bHVNSEdVYUUzZUxlOFZqMGhxcFdBcElFYWxPYXBHNnJkVys3cVJBRmNDZVlpa0E0QlBUc0xoL3dVV2ZPYng5UjZVOHFmQTRTS241ZzdZQ1hBU1FDUUJZTjNrQS8vMU4xZi9rNlMvMFkvMW9Ccjc0R1h4eCsyTmYwdSsvN2d2cUMvTHp6MEVmOU9SQnFqbjFQZ0xvWlE4YisxWjBjOGdOL2wvMkRXZk5tZktwWDEwMzd6Mkx4bjNsdEJYVGJFNVo4SVB2ZkcvR0pvU0R5NDZBTXhZMkRnRWhFVEVKR1NVTVRvV2dwa2N4TURKNzI0UjMvZUgxOFNDQ1M0SWt5WFF5Wk1xU3IwQ2hJc1VNYXRTcDE2QkpNeU1UTTR0T2Ivbk5XMzd5dnYvNTJPYys4WVhmL1RzdTNMTE1lVDliZFh0MmNOZXZYdkx5YVBqRkRVK05nUmNOdU9CMXIzbkRMQklHUnlOUUdEeE95am1vVklPTGg2K1VHQXdBa29QOHdKT09oaGJKQk5VdmhwVU5MWnFEVTZKMEtWS2x5Yk9iWGc2dEVoVktsYWxTN2x1VjJyVm8xY2FxVmdkdm5hTVFDY3VXWEhIVjVjaTRXVVFtVW1VME1NQW10Z1FzQlN6dEYzUmJCQmV3RklBdzVsNDFpamNiQm1RcDZ5M0FFTnQ4MmRBa3dqeG56N1A3OFZVVURCL1ZtdUFkK3g1NmNQKyt2WHZHUmtlR2gxWXNYN1oweWVqSThPS2JGeTFjTURRNE1IL2UzRG16Ky90NmU3cTdPanZhMjNLdExkbE1PcFZzYm1yY2dXQTA3UGNlZmVUaGg3cWRkcXZadVArdWRHMjFsc1RBUCtmejZkcjFtb3ArMExKMVRFZ2dTNkN1dkM1b3lBaXViMDEzWVBNTGJZelRiT0RBVFg1WUVpWXljcFU1SVZjUGZKRGxKK29PdWRzdkxPVXlDSEEwZXBTaFJkNGR1SDRLZ0VwTUVPV1pHYjVFRmNNalZKa0JVQlVCUlprQTJaS05Sc0FOMSsxMHhLOHRpNUx2dTlDUU9jWnd4b2J0VkpZU05ZU0ZJMy9lendpTEpkUUVsVkFWcWJGZlZqN0dGWUtVd2lMMk05Y1NkZ05tOExIY3NBSWx2M3QrcFR6aWtnalM4TGhucFJBNHlEcGJPN0JjZWtoTElSdHlyc28zaE9GYmlVMjlGZ21LWTVKODJ4UmQ4cXlsc0ZXa0VIL2JhbjhsbkR2M1p5NWU0RFZHaVozT1FSREJENDY0WG5XVG1vRkRSNTJ1WEpremxmeUNSTjBqRlVMZXFaVkxOUUVYbVZFbERvdFpOT2ZpelE0UkxiaTBLM1ZmUWl1T0tPRVNNRlR2MTNUdmk2Q1Z5VTdXeE1tS1czVWJ0RG1uSTE3eVgzSGNud2pnb2ZvVTRtYVNVbExuSVBvZDB3OHl2NjZvV0lNZFNpR1BVdjJ0Z21BNEVkYTEwRnJudFFtL2VsdGhmd3VoQUhXS3MrSnMvM3pxdFR4U2ZjWmRXdk1Ca0VrbzJPV2Q1aDhWeGtsMXdRMHRXcWZYeGpuYlhUd0R3NW9tV1o1cWR2SElEYktZeHlnOTcwcEp2ekF6OG4zNU9MUmtmU2JkRFRwWmdOTTlsUUptMmlVMy9IMG5neHZIMjlkQWVZMlFEUXZ4WjR6U2hwUWJoQWpCbXdWYkk3RjdJdko3a2lOMUZKR1dOdUFuMHpNRXlSbDBoMk4xN0pDS2lnQ1BLZnk5bkhOT3R6d25JendtZ3V2WlovVE1CY1FsSEFmdzVFeEhEc1hHdUZ1U2VvM3lDSm5aUmIzVzdVZjNhTlo3M0VZSzdrT1NsVkpzd1lZeUpDdGNHTTFHcmo5OGNuSGhrRm11N1BkT3duMVd6UjBoeFRuUlU4YUJKbXhxSDl3UUlJYy9mVVdCSGo4cXJJU2piTzJoUFc3bFJJYW9ESnBLcDZXclZIYjBvbDVMbktMeUZqMlRIZ215OTZBcFo2L2xxMWlOUFk4dndES3o1Z3MrRS9DWklDUHdjYWNxY25SaXIxUnpQc25DZ1FWYWc1VU1yS0dKNnk0K3lQWVpJN3lqS1RKS1NVTjRvVVQ3R1RkaXhPMERrZmNUVWRta2FCenFQYmk1U2lLZkphSkRES1kxWmwxMnUxUkFPa3dTcDd6SG42UWthaXBOTHI2RTBwSGdtSVEwTzN4Qm5XU3lZMjBjdUgyeldZeE5RM3cybUZ3UDh4azVjS2VEc2RVYWtLbExITkpHOHM1eHp5aE50dEVCaVJETlFzY0NsMnYyWkFuMUNpdHhNRWpMTXdHOXAxZER0ZHFpd0pUTkNmTFNxUlMwQXRWdXFRUElzUUNSWkltOHg2NklOd3BUQ01KQzJ2WUhyTk1XTXc1VHhKNFZpNEhnUlJva2lnRktQVHBuNDVKWWd4cWgwYm9xZ3VIUDZJZ2tRVEtWUHA5Qm1DdHlTT0pkNmJ5RTBsUTFkbmt0bGNpR1VtcFFPOXRCbjZBQlJCdlliaC9vWGFwbkNDNzVHR0l4bDhXK1paT2pvSFVodTdOQzI1VUpvTGRvdkMxVm9BaTJGQVhwK000TjFEeUF6VVVqZVN2NXdHN1piZjlFY1Q2ak1ic0oxQnBZL0p0b2w3TjBqcFFoZ0xoY1lmWWVVWjJCWHFHVUg4NVE4UlJ0ejJmUWRuem5sbEIxOGRDRE0zQk0wUlZtTFhHUEZWUmpFZFFoTFA5RGlKdnBOem9VQXZlZzlaQUxmSWpUVmI0ZXQ1dlBNOUFVVkMxMUpZQk15RXBKb0xhd0hWczNBMENORDBjZzIveG5YSk4rSUpXNEFLZjFHU1VhM1ZCY3VNclhsVVlUdWdab096UGZXS1J1YzhxWU1tbE9NS3dsN3gwa0t0c3dsZjJaUnNyajFoZzJ5enFCYVBsQWFNbGtSQzd6RzRXYUhjOEFCcmx5MG1EVmdQaEtnNjBLSUdzbG4xRkZRR29CSFkxVEd2OUtnSnAzVm9vM09CSXVBNDg1b3JoMGMwTkcyTFg2eVNBOXNHY0JhbjJRaG9iZ25pSjZGZXR1S1NIWExwNWVjTjFGaTFvM01nTW1LZHcwSXJGaGo4MUtpVUxEdlJKREk1S1NVbEtBRklLeFZ6Q3VnVXhYcEdnWmZBZ1BFRTkwTmV6S3pweHZIYlBUVnEyZE9hcTg0MkVOOXV5VHpLMkZZdCtXZFFaRGU0VWJlQjE4c3d2bFFVQ2lGcmJMK3lDN1dxbHpaT1ViMlZwWVFadTFtUFVrVDJYeTcyNk5qMGdwVW1vRVdJZXIvRkprZ2tnYkFBTDREaC8wbG81SkRCTUM3a2cwRHR6UG9nRjBLN0xXTFhSMDZQRU4wb29ISDFsdWVKa1FEUElXVTZNWk82TGEyc2d1bkY1MDhDMmxZR1pQbGN4MlhKMXR1WEZicmU1MUNJVVdTaGI0Zm9qNkxnR2NtbGcrVUNpU2l4Y0g5cko2VFRKZEFDMjRBcEdic2E1aGEvTklyK2g5SWVhWElDaVp1OEM0Skx6V1Q3Z0tZVDc2MzkrQUFqTGxwcGRYQUxibXQvemNkWjhuZkkvc3dYTmJaZHc5bVIxU083SWZnWktDLzRNQ3dwQ3c1c0QxajQwd0l1YmR0cEJOY3NWSG11VVB2aGFrc3hNOUY4Qkxrc1EzNk0vQk9KQVF0OFRCQlNVYlNvandLMzJFWWJlUXJ6dVlHYTluV0ZoT0tUbFFCdzlDRmo5alRHNEozTmdEdmV1QWcxVU9oYjRLQXA5cEhnYU1KS2IwU2xvTDdEb2RIc0xqcHRYaGt2T2Fhb2UwQ0hqRFU2dGtLQ0I0MmdaSnpSRGNQbzJ4TmVKclpEeGNYZVYzVjI4SndrMEhKaFUwOEx0R0RRTXFLT1AzVEdvQUk2WW5iRWtSd0RSazNPNGtpNjFJbnFUODEyeEtiaWlvQk1HRTVETHBNS3JpT3BvdkZMdGJJZTl4cU1xL1NUWXN5MFpRRjV5YVphdnAvYStIN3ViRG5wU3NpQndKRmFnQk1pN3dWV2M3VUhxbG13M2ZjTHZ2bW5WUlNGWVJRRW5neG5IdnV4OFExQ1Y3QUlBdUFJRGRBSDFBK0x3ZytnSGdQNEM5UUxnQkFOYWV2T1R3b3FNSFVvTmdtVm1FeURJN0xyeExIRFhYRWs3WkFNSTl6T2JHeUNHRGJrNkc1VWduVHBQYzMralpRTWpZR1V5dU5YZytNL1RpYkkyY0J4Z0p3a2IwYmdpNGZaZjVBQkNXVDdCRFNNOFllUy9KOG5vNElzeFFZazUxd1pLbTQ0Q2p3NnBUZlFqWGpVTHY5ZWpQT1ZLSjNQaFMyaUlmdWxBSzZzTUx1elk1T24vYkh6aFpETjJHYVBoNDY2WkxVVVpFbVdKM1hSRys4QSt2NVlPT2xGSU1SRkI0K0xqV3l1U3VTT2VwM3FyUFdyTkJvUnZHRFdiZ3FjdTk3MTVrWHoyQkVNRlVaWGZodkw5VUQvT3VtNjR3ejgxSWtzU1h2WnVJT3FjWVJDcHQrRFVpZ3N1RTNRN2J2Zzh6OXFFemY4bWZlSEZuNTVzSlJVdUxZeFEzZk1IWnVPN3ZoazhNMDkxUXhMQloxU2UyaVFOVjBkakV1Q0ZUYm55amVhcU5XdERVT2JxSmVKc0J1bklRN1BLV3F2SFBQRnhFWFRNS1JqZkFEYytNOWI3NVdpdEtlTjJUVHdQTWIwUEE5cTJGVVVHU2FMaHNsakRBVUFNTUxkS1lRSFZqY3dwZ1lLb3dhVVFDMTZycmh4QkRSVS9hWmdiRW9VcytBMTBUeGtzbmtTTGpaYXl5UmErUGhLS05qQlQ4TG9TcXJxQkdpcUdTUmlGNVRCQzdoNTNDaW9lRjRXRk1WMXpLNWpEUG9iakhnUDVhOXNCREQxaU84NFdjTDk0Q281RWRjSWtIbE5mSnRmbW1BRXQrQXAxSmF0dzd2NUx4YlNVM21lS0NXczEzY29kUVVZbEpWdis4dG11ckFHb0UxbnBNaFpleFRMb1BMMGtnN1VleTJNTEV1dk0weTQ1S2x3R2xXeEFobkhmTmpaYVdOY002ckpiTWltaTArc3p2OUJCcU91dGZQVkVqSGpJYk5kNXBhYU5tYkgzRkxKdmkxdGxPeE5zb3RkaU93VDluZVBPNytlU0dGRlR6MFRhZDlZZG1BL3BKOHFGYTVnc2Zhb2lzdzYxQW50OE92aisyNDJXSzNSVnIrY3lPQ0dUWFRaN1pxM3lISlFMUitxZnVTYmdQbDRVb1VubkZNcWx1SDlBUDhSaU8xa2Fsc3hlZUhYbmt1TkllOSs2MDZ6aWgxczhPSzg2ZWtNcjZxc0JzOHJ1VXE2eEZIMGdVZlZzT1lhbjNXU3RBUmY3RjUwdjZ3ZHVLYjBZdjJic3AydkN3U3FGYU1BcnJJTHZZVjBxeC9UczZjRDkvUjB2bWI3cStVajRRSkRIZkx3cWExTDJZU2FLZTZvY1dYVDZFaCtWd3VhUnlIc3BMdGlVTWVmcEpSVVlJdmRPcDVZRisvTWhnQkIycGZ3R2prS2NjZit3U0krQlZ6T1hMR2cxY3hXNERWZjlIT2FhSGlTczAvUjNkZlNpOGhkRnhZaDdNd2xGL2p5aHdEYWdGL0NlMnowaHd3RjRYNUpiRHNGSnVBd00wTnF0anNHTURDVjZHSzE5aGpVQURiUk43eUdkaE9oOHV3SEwzMEd6cXlsbWN2N2FJZzdRb2x6UG5Md3JiamNOdjM2WEthRlp6NGk4UFZIaGVRM29RcGFxTEpESTNTRGtFWExITUNKVFphUEt5ZlFUVVdyODZxSGNXNlpUZTVvTTd2YXRORFhrRmxja1VQNkdTVVFoVldpdEYyVzcxOWZQT1pIZTdnOFdyN0ZtMjR5OGhIa1RtUmdWN3ZqUFJYUHE0ZEQ4MGEwYVpnNDNmQlY1dFd2dkk2QUJZT2dmR3V0aThpL2txeFF1TEVHb0cxbzVmVG1tNm5zV1pyZGx1RTJicjBMZ2tkU2g3RjFNUzVwRDBEWkR3OFVpdFdLRm11c3gySDIxeEQvYm03eHhzOE9IMWxpWUpTVnc0WXVqd2h4UzMwQncyNUI3YUNiR3RnSFpVTEltNnVlYXR4ZXlwclZrcStsRm5CbVJWQWQyb1VUNUNWNlBMa1hYNGthS2JkZ1RtRmhqZXNvL0tqQzhJbWxnYkx5ckdLMzhTN0pqcXQxRTVhQ01pWG93YStVUGd5M2JKNTZkb0hJZ3hQUGdid0pyZFd0bE9HSjdNQ04rMDVpNlY3VW1qaWpoU21JL2VvZFhqSTJXeFFIamFtZlZPU1B5bldEdDU4Ym95OHl2TE40cTkzSmhwTDVwV0JuUkc2bGFhMXBFVjVtL3VJQXBSTjdSWG5UaklybW5BMnNIa1pwR2NHNnlzNlplV1h6NmQ4blRUZnRaaFFPYmFCWG1MVk1WcVprZ05ERmdEaTZYbFRZbTljVTJXWWpwelNTRkFTQnRxcXNTb2xpVVBLVWZiQUQxK3BpYldaNXlhWXppL2ZtV3NIUlhpY2ovOU5wMFp6ZmladEozMTExZWRnZkF0WDhXK21tdjI1MWRmRXdGQXRxRzh0ejJ5RHpMaUR0dmFiZXJXK0pxTmJoQ3h0U2dyTTZxNHNsVEpTNDF4YUNwQkdocHBEcnJpUVFXVjdOZ2RqNEY2aFNVam1vTFNCc3RaVGR2ZGZoQVluckJqVWl6bStnd1Z1OHpxaHNXYjN4L0YrNVhFVURVVFFYUUN4d2RIeHk1dmk2WUhuczI4VWlKaDBuN3hJV0MzNWwyc0dWUXFTTEhmMUNON2dDUUtrZUdnUjhhVFdxVy9CbGY1S0NBUWdUbXVMQ3hNelJqakxJc1I0UWczVmpvNithdlh0bXNDSm9aTU9rY2J6RjFLT0hHRDdaR3lrbGNXTXhzZWlEc1NtVXdDU1JieE0rT01WWWd4S2d3dlI1Wk5NQ1I0MU9RdUhzenVRMSthNyt1ZjNnTWVQM0dSR1hITTBHT2RiR2hmZjd6SWFSRUIrT3h2VGgwOThCczNmL0RBWTNwb0R5clFVdTZURUh5VWg1ZHRjaWMrT0NoUUZqZUYrUkR6NHR2cWREOUZ0T0NpQTJrZklIdmVrMlBMUmZ0QU84ZHhZdTRlMExpejdXQnl5K3dEeFg2Wkd1clphYnJ1ekd6V29PK21DK1pGa25Hc0tUdUx6TkhDSkM1SDhnVXpGczUzV3JCVk1nSzNJbE9CRkwvQkVRV205alRtY1I4VUVrMExKL1FFTURmZ1BIVFpDcXFXRi9vS2VldjRVUjRxR1ZVUzV6eEIwTmZ5clFkblQ4d2ZkRWFMdHBjajNKaDRGYS9HVDZZYzVadUFpMkRqdXdjK0liK25PSTd3Nk1hcU8rQ3ZLYTBqemFlZjREcVFvZVVJQWtka201dTVuUE83Wm13VHpBQTVWVWZ4b3VTMkdGQUlNQWhBMVMrZllZVklwUGNYaUZMRkNqbWdlT0V3QVVkRElIdzYwUGdwSk5EMk9GUkZid0lNRWF4aHBLV1c3Mlg3bG13OE9ZV09GdzJkWnNuMmROdjhKcCtmRkk0WmhtVDl3WmNaYTlnU3VBQlRydThodzVrMG1lQ2o3U3NlOWRLZ2dKUFJSZ1VzZVVWSGFrK3h4OE1RMUZHRGhNcWF1bG1uUExuQXREWUFDUzlPVzZKZXhlMUYrNHc5dkprejVVeCtxZ1c4NWpreHd6dzV3V0FXNW1IWnlmek9SYk5NekNPYzVqZFZwaFpzVXBzZStwR2dScHhtWjQrWjg5aTlwTzN4eGhnNVJoKy80YlVDakVwaDYwT1AxL0dXWnJXb3JpN2FaV3VRaStMWkp3WXAwYk5NZWZaaHd4NDk5aW42RkpjQUs0RG1BR1RJaUZXSnhEVHp3bEhmemZ6YXZRWWQ0eVlNeURTWVBDTE5tSkN6dUZGYnBvNUV1aWlRWkptUWxySXprRXhCR21LcDJMVGppa2lQc0tmUHZGMkpkRDR2MUUvczJlMjZzeGdDcnVDQjZNeVpMYnNJUDJUZDl1bk03cnNzdFAySDZGQmdVbE9CNjBDL3pZNHEzUXkwcHJuY0FTN0paTTgxMnlZZEpaTDQ0Z0lETnU0NjJZUmFUenk1SEtxN0xqeGpGT2NieGFYWnBCMHJiWmJVUFRPYi83cXhrZlRQT2daL2RLS1JnR3o3YmZJc29RMER4djN6OTgzTE40WW92b2FibU5aMm5qT0tIblo5c1JkVEdqSnF4SU9ZTWlkbkp3UlpEcGtUMjJwcGtkSVVOWEZTQmhYS0hHdUJoK2hsMytqNWJTcjJYTU83U0IzVkthWDJCanJPTW0xNHErUnNPR0JIc3dZRk5yK2tZTHpxQU0wM25qQjk5R2pxamthRHhNZk9hTnJXNkU5Vk1sQmlsVFZ4Y1dSaUFKZXYvUCtUNGE0TmJZcUVza2RzUzRhNHJWS0xLUUpOQkpRRmJTcmZqdEJtTW9FVUtTdmpmQWxBbFlUalMwUmgxTkhVdE1XSFc0Rm4zMFlVMEk0STlBUFU5cnd0dU4rYmVubFNjdGlFVFJZbTRnNGo3dDRBSkpHb2Nlb2tPUmdRTTh6MGZIOU5MTGFTUVJFOFdjQzRGZmthc0NiWmhYNms0c1NiR1hOTkxkSXZtUUhPQkdvR1Y0dGdOSzBzOTN4ZkF2cmk3ZW1NQWhhVWdjR0l5eWZmZVhTcGJIZzkvZDhtOTV1OC90K1R1Ny90KzdhNFR4L3NvL2U1TlB3enNwdktSck5UajF6cC9rL2Ivelgyb0UvLy8yU1dlK05xdmdtUmRVMGFLandSSXYxNnBFNUZVZW56YjNvNzVBamdIRU9rSUY5K0dYSTlmRU5ZS0g5Y1JrUHlxUTFHaFBYUytMTEdubVgyZUc1OWs1VFp1eXJGWE05RG1UN0tsNExtbVJ6WVlMaTVSMmZEa3NLSWJmQzVya3hnQURiNlIydVRmZW8xL0phSlA0WjJ0UWJ2NzVpYnVHOXZRYStvTStYYXVpS2FIWnM5MXJJeVFXK3JCbUlvZ3Y0WUV6aDMxOWZkdDZlZ3I4NjVkV1Y1NjRySitKU0srRzdpVStJZWJqL2VMeGZJOWhGWE92RXhjVmROQzk1U3h4MHA5SS9hVXoyYVZZeFh2YXE1YTlqaW03Mm1TY2JzQXoyTGEwT09icjB2Q1E5WUhkaEFwTGxYYS9XTXVvdytjLytxVnYwRHlxTXBYTEptZkVMWDhFYURidTF4ditFV3RKQnZvb1QwYStrVzJPbG00MlkzQWtSbURRWVg2UHJqWld2OTJwSmtVQk5pWDZnbzJkTGhlOFlqRVFPMXd5cWN2L1AyajJ1aTVIMlB5eXRPZDNKT0FNN3UxRTIyL0ZxbmZVUnJkdmIwNGk3b1g0TkRyeWZKTFJvdURJN2FtcnZWcTl3KzdhcDAxNGpGRnhxeE4vZXFWN3I4MmFtYWM3MTI1VUN3dVVkWDYraWxBaWxrdnNXdUdBaFZxbzJPK1ZPSytkV0NmUWNaN1NxQytPcTkvcnJNUElNenVNU2E3S0cyRmpOZ2lMY2szLytvNVZ0RE4xRnhEalJwc2l4TTNqWnd5d1NrQ3NJcnhCR2xtZXhLT3V5WFNxd1gxSXdXaktuVWFOU3J4djdtenFOdVRsVVVWWnEwM2NsYSt3L0xkQk82Vzg1c1VidElLSVlWS0w2SDdIaFdVck9yNENGcVpQRHhtKy9XaDVSUEhxWDRMUk55SWdqUEYwZVVsRElUdEhPZXFyYnVuL1ZUaWZVS3dXaWhtSXBBbzE0Ti9wL2dTcXpnN2x1ajByN1dLS042T0NQeGw0WExCMUJid0tFR3ZZd3F5elViTzduTnF2ckhtN3RvZnFCTTBkTG5kcXV2ZEVMQjhtQjVuMXpQV09qYTVKQXFTRVFyWGRDSDNQRGV3bjJoK3dvSmEvV1N3c1loSzlNaldzbDA2N290M0FGRHNsWG44N2RTaGlSbnZ2bWE2Qk92OG5RT21IVVFUUnd2WFc5L0Q2clFjUzAyWGozM0RiSS92eitmWElidVNwVnZWcXZIMVhmTnZYdXVtaGczVm15K3JRaHlqVjl5WG5SYTJiMmxMZGEvakg4YmJhVXQ3TjZhNFBpbFRaYzNtYmxqSmJveXpvdmNvdTh1ei91UElORHo4ODRST2o2d1cyMTB0eU8wb3JGVW9QWFhOUWJrOVpKWEdWa3JvRzZaTXk5WFVQTGEwejZyU2dxbGdYS2xiVkJicTQwcWNYOTMvdDBQY1p2c2tWSmx0TTFPeWJodktreXRLT1lNL3VWMHNWZ1RVZUlCRldGZzJ1VU8wRGZ6RjliV0JYdGpEanZTSUhsVjI4MmtuQmxML2IvOU5qcTR3TStNQmd0bkVSZUQ1bHpXWURTMkdxMHYvMENibTZSYTEzd0g1QS9ya3R5ZkxlM1kyczhxOXJ4Yi9LdXJHSWptSEhwUS9zYTlGKzNHMWpSbE5tWW9RdzVYMDhYMmZ2clRQbUtTWkR4ZGpNdlVwTEpIcERrZEJiY3h3UlQ2QnhHQ0JzUXgxS3J0U1Rtc2VBQ1pCeDJ3a1YzamZMVFkwSUo2Z2tpN0tlUWNYdWdMK3ViUWo1WFBidERvekJtem9jdFJhK3pOMmt5UXV3WWJLWDNuY29PMFdsa1FzSS9PQ1hyY2ZiN1BHSEpmeWY0VFB2OE9WaTJ0c0p5Yll6Y2JNcmdyQk9YR0pQdS9PaG1CRUpVZmpnbmlHQzZKN3dnQ3VHQzh4eVZSRk5rVW5kNUFWcUgzTEhBeTgxd2swdVJ5SldHZGI4ajcySUMwbGM3TmIyc2dmTTI2ZVVPMllmYncrMW1LU21YMEpsUFdaR3cxVVliNkRHa3laU2xEZXNOdDFiVVhsMFo1bzZFZmU1MEFXbXhzUWQxQnBNTVlkQTR2OVB1RFF3SFhpSDk2Q2I1c01lZlNCb01oWjhTYU0vcS85QzZiTEM1TkdZMHBLZ2haTy8zMnFUMFZVQVlxSFdER3FWYUpoOFRWSDk3TjBSbmlrYXBkeWwybkJKSVpWQnFqdzFDcmpnTGE2V0F6Wm5CM2VZRWhvc3JMNUFZSVoyYTJjeHJuYkwvV1JpVVJmZGkwNE14czI2VHNHMU9sWXYvUEg0Y0FoVG9nSittYXVFSWxpZTBJQXJKTEpORG1iSE1vRTBxci82aUxuQ1NqMTRkOE5INXFhVlc5UVJBdElvdTB5N05rdHV4RVhPTFVHYzZrMjJEOS9UYzJzL2pmblJBaEpJU2hqQXUrNlcyMTREMVFNZkVCZThuZ0krUWtlY09tTkgvNytTbWRNUEdkYmlFMHlhdGd2N052R3I4S0JiQ3lJQWwwMmxvY2RFZTYydXZjYTd1czJkY3V5Zks1eUNMMXN2SmVkNjJ6THJ3UzhuUjduZGloMlJXTkJ2aFN0N29wVzRzM0tHdjlKNEk0bjhmU0tDUHVYcU5BZWFOUlVDUXZObWFWVEJCdU54amhObmN3aXhvTUdkUnpybTh6R3VEMnpTbnpaMFlidWpKV2t5bHJNL1RZZDlZZEVveW1qTjNZYmIzclZyYndYQnpwb1BXSnZCM1VlYzg3MTUrNXNiWENLWk5wa0NLNDJEZmtjNDJFd3E3UlJYNmZQbzI1b3VmNWlkR1dldDg4cDJ0a1dxS3doRmdKV0hNdFJyTTVaNXkxLzY3VDNDUlI2MXN4WDR6VXU2TXBGRGRucklidVdnZlZ6YW5mMkZ0Sktjc24vNnJNclNuS2FFemEwK2MrSENwbStyei9lY2dUUk4rLy9iVldZd3AzaGFHYzNtOWRNanRRaHhOKzJDR0lvU3BKZkhzUXdnWGp2YVJsUDN0SENBSzArZE84MnBoUUdqZVljOVo5dU80dW5hdzBVK3V3cE5TT3FMUk5iZFgwTkR1c21BOE9WVDBua0RWOUpWQUY0QUZSbk04dE5qVGh0U0ZaVG05QTJsMkJOS2EzNXFuMkV5ZElUMkowTG83N29UblFremFkLzJzeEVVU0sveHBBcmJydWxCMWdKajM1ZlZHVzIwTVdhVlk5V3VSbTNWSXhyZWJmNHRwKzVaS094NXNoUFZObkpJRXVQOGNXOFlzY1NoM3BhcEpTOXJSODhQRE9MTEVHT2pjWEViKzVhLytsWnNsL2hHOU9ndnVidkNkL2NYMmRUaFZLS0EyVjZncjVKeHdJOFp4QUNGb3A5V3V1YXZOdDJsUXphYUxxRkdxdkdoVFNna3VSOG9iK3NCWU9lL1Zkb3U5RkZNOTU2cmhROE1PWWVGTkFHWGlHZkdaVU9icE1tT1ZMdmlUNS9tTTRDYmZUclM0OGp0aTlmL25KQ2RjeDZTMnpOUG5KL0x4SHROanJxYXRmS0RLUzVNMXZaMUN2ZmY3NjUyU0lWcCtlUWJvQXZxQU1HVjZQcjUzNGRQYU5wczlVM2ljOVR4S1Z0bis4U0FNekh0bFl2dnpocnkzdkY3NVhZSG5vcTJYTEh2N0svRzdCZTRVMWc0Zi9XVlcvUmlIeEM3MC96NkNPZnY3YTV6cmgvcHovSkwxSzh3YXJhT2J0MWxmNjVBOUNjMStaSTMrVTd3R21WWVRKb2g2U2tqMWcxNWNjMlM1NWQ4L0x3dUxZUE9BZUVJQUlCTTRnTDdvV3EyTC95VGNPclBMZTVZTFU4TTdPN3RzK2ZCc21Wdko5Y05WVUVYbnE2Q25TZ0RzckVQV1JSc0RaTUpzbisrYUZXNktZaHJHVTUyb1M1UmdhNXZtVkZRdVZDOHNoZVlWWkZqQVoxRnZqOVFuSEg5TFhlS3krOWljVEV5eTZpNVd6ZWh1aCsrcTcxeHg3RmxIdFhNU0VKNlpoaGVTUTVENXovVVVWaTVTTFhJbGR1T3kreEVmTUM1RDBzUXpwcmlYVTlSYW4vVE9KcWtFdFdIZTJ6S055ZWlKKzVvN2kwVlZZMjZ6cFh3Q2x4Y2ZTWkQ5Qzc1MS9wY3lZTXZDMTR6TEpWZXhVUmgvWDRuVnFVcFVJWExkcnNBdXBWdFZ0ZnV3WnI5Z0xNUElpUk1zVmpxOWdhSnpHclZKQ1NjZW13WWpmUHhBQm5sVHFRRlFkakk1SE5vZTFDNU8wMVpLaWdZV0JMWUJkTE5Zay9aZGV4Um9WNFNCMmZMdzFjMFhDSXZtenEwcXJ5RktCU2ppVGtmb1ladlRvN3dzckFNSFpmelJBNTlZakJaVzZQMTArdnNwZWorRWVCWnJaOHVlZDA4NTZ5c0M1QkRmdysxY3VFb3BvcmFaVWw5WVZHbkxzalJCWkV4UE5KZ0tCMXNabUhsNlRhQXpZOEcxZUdXRk5HNktDYytQMUlvMHRxOUxIS1lYVWZady9mOFdSTk43M0JmaDVra2dlcWY4WldTMll2a3MzRWo3cGZxaTcxbTVvSk1nR0k2Vk4xT0Y2TW8yL3I0bHVibEFUUnQ2cEJrQk45NW50WFl6SDJUL1B6TVYrWWVpNTg1eHVUVDFZUy84MlY3ZW5OVlpyYTNWUzZPR0JnQyt5c0lWK1kzZUtYcjNBRS9BTzBzNzVsOVlZMHBTTEdxbFVCa2lvRFIveFZEcXQ1Ny9BM2FrKzFUZHVMdUc5YVdmU0F4cVhiNDdSbGpXcThZQ2JEQW0zWUJBR082K0hPUXA1bUhNZHBqRVl1MU40RDZOWEJQZ0l0b2xoQStvbWhjbW5SZEJSTndzZ211VW1mKzh5RkkySUVIbFliRzFaTVF6QjBMRGtOd0hrRTdUVzRmenUzQzB4aHpWM2IybDYxWkFuNkJtU0tlRmFLU01JR0tsa2VBOXg2NHE5K1hOZHZuNW9tWTJXcnd6MTlkY3kvdG1NZnc2MDNPS1Vyd2oxenE1VjkzQWs4NnlaUnFQRmxyUlljcUk1cFBHOGp6M1RiRFRWV0MydHYrOHFGcXNJSTdHaFp5cysrVDFMWFRQM3k0L3p5TGNhYlQ3TjdkQUUzZFR0aWJqTW96eWtWb0tlQUdZMnhxRzZzMktJZTdSSmFnM2tUT29NWmNEOGJuVkVKcVlGNFZySGE2TDdpVEpwa2JNWGMwVHFPR3pLblZHYURVMkkxb1dwelV3ZjVBTlZZTStnbXlFMDdnUk1NaDBXSXNaeVVVbWhodW5YV1pNbTVmKy9IYnZzMDhtREtyT3JjYTVhc0c1aURqN2FKYlk0MFhuT3NFWmNVcXdiRHYvbGZyRGJVZFdweVhxSGF0Y3hiWFRUVGdiZUo3OGVYRjVuM3p5TFpQRnZyT0RnbmhPQnAvdkhUYVdMV2hINlRkbjgzZlI3c3RFeS9YNXY3c3JRSzFYWHZGMk5hWVBSTnFScURCaTQwZi9uNnhRbCtMNVE3WVorNDNwa0VOOVR6QUNZbW9HdWNUeFNpT2N0WW9BM0poQlp5S1hWd2p1Y3ZCbzVHSFJxMWNpS09ML3N1Z1Q0Q0dobStndzdLOEVLeHp2U3ZQNHhCOVlKbVdVN0p5OCtJcFU2REVBMS82NFJQYzBJTlQ2M1N5TVpHd1B2MzhlUHM2NEM3RmNMYXh1MHFjNnE2dDBRNlZFQ2NFTEpjS1ZjMmd1Q0lJMnFsWjkrdS9uWjF3Y2xHQ05va3dESHhyNGVScVNIdlh6dTFPeWZwSC8vejc5aEJzeXpUMjk5YlZVNGRobDFpWWNSNUVtdkJOTkVsTkkxQWxvcTF6RVVKbEY2Uk5MTjB3RDg4TGZ2N3AwK0NiNE9iSmVxMlhOV3cxdTlvQW9OSXAvbUpYd3BLL3ptaDkzNVBnUVBaUmFOUk5KTlBwVWZ2T2ZlT05sZGhGQW8yZ3FBVzhWQ1FkbFdGMjczRFpENmFaTnlWbTZPN0ZsZkRhcnlpcnZFOG1mUTN5NUxwSGZSSEFDNGVKZEU4dXZNclRYYUdxWkRKT3JVODJzYUZ3akVYZkRwanpnbFU0Zy9kUU00SjZhMDRqei8xVUxjaitUZi9ORlRpTldYeXV2OUhVQXczQXZlQlNNSC9DRHV5elNIUjlNTGZRK0JXOHNFUXRFMkVGZ21GQXFKcGRYZmgvU3k4M1dPZXllNUxGaUhnS0VwSjNobC83V0JiNEYxcmw1T1d3WElQaktaQngxeG9YQzE4OXdkdngvaXp1RmRYanFDUEkxUFZGOENPSzk2ajRkTWRqa0JkS3JpdFNIVTduZ0ozZC8zZjd6L0oxazhFelQzenhTTkJhcGgrYjZ5MVRXMHJGcU1Lb2RjKzFTMUZIMHlMcURDQXZEcHZMZy9iVUVxdGZGZnA2cHhwdGxMK0tDRFRzQjExeDJKbDRvNEwxeXZLY205VXVNVllNY3Y2WlFja3U5V091dU9za3VyYis0Y1BwVlBudC8xNFpzYlNDZE9CZVVZNWdPM0FVZTYwU0x2dytCU3NhcGF5cmVFSjBwc1pmLzNXaE9mRkh6bzdvTit6enp2LzNsOGpNVnByc3k4d0VsV1pTcU82SVJNZHVYa1Q0OUlwV29LcUM2K3EwR3ZjUWsxSHNhbGtUd3hkc043NnZoSHJJdkFQMllSWFpMaU5MOHJIc1hmTEpsUzNNV3d0ekhjdkRjZzMrZm1ibTlUOXY1YkgzOWMzRGorekxqbDJmRVMxNlZ1dkx1b29KRFgwOFBqOUN6bWNXL3U1ZkI2dTR0Y2h4dXhSdlJ6eXhWdDhiSm9WYk91bVJVdFl4cnh4bkRNdzJFenZOeDM1M1RueU85NmREM3NXLzhsKzV6V2JKM3NLVjM4MlhMeXl3M0tXM1JmNFBvdlBrMjNNcVJjb3Z0eXZYeW41aU5jKzlHbmk4REN5V3NDOWlrakhOVGVTek1mZkZOZjdjd2NDdkVlZk5aTGU4Z2xobUZHNFBpYjRqdE5DUkVLdWJuekpWNDF1bW1ELzhGTVd6K0Z2dEdCZDNDMHB2SmQwNGN6UlRXYSs1aHhFWmRBOHhmRmM1cmpJdXhkQSt4NHo3TGN5OC8yQ0E2cERnR0g4RVBsbnByRHFzT3p2SWNiOFVaRlhxNW1OMXdkNVNMam40K2JQeHN2Y2FxSU5VUlJvL3pXMlRhOXBYamR2OWYzRmt1TldLem96d3FncXJ4U1VYYW1lUWFYcFN5TVlXVzZsN0JZb1pMRm5lSDdyMHdobTZvQ0ttN01pR0ZHYWZINmYyN3NLV2FYcGVVbDNSajFBb1dWTkdPR0Z3eFlkMGxKUUxJbi9ycXh0VE9tU3NKZDNCNTFoQm16cFJvUDJWYklWaFI5bXJSTFY5aFgzTnRvVFRGakVUV25CK25DazdsT1UydnM5U0xYWmVJaWtUcWZhSmFldndKRnhibERxdmQzdnI5RGRXNy8rNkpGQVByL3YwN3IyUTZqUWZUUWU2THpXUFBCamcrdWQvNFFoSHdkTnZVZmRLUHN0bXhadGlxcnk3S3lnYThZeHlzb2JWOUdxdHRqNEN0Z3RiT0d2aXZycU03b002eU9zbHQ1WlpoL2tzcXFod2ZBQnJVOUpFdHIzS2JGZlJGUDRjMlNtNFA1N2ZTdXFXVlI3Ti9YUlM1dWNHbnByeDVUdlFDZS84VW9SZVRxSE1qTEQ4WXIvdWFHNUhzbnV4NlJBWTkyZWJ4UGVMM1R6UktKV2U3M0R2czlIWThDd080T3Izdlk2Mm1ucGVicGJzOGRtczhVc1hFWW5vQ2NjZ1ZFajhQUVY1Q3JCS3JVTElJS2x1NDZlMmNCeUlPVzZ5WmJDclpoL1Q5MVE3NjZRZFRxY0pXYk9pbzZYMEorMUY5ZDNJR29PM1FrQjFVaElyTE50SlQxL2RmLzZ0ZDlQL245MDYrWEZja3BCd1BtT29UTzZIVStYR2NJakh3T3lMUkRIcVduRUMwdyt1ZkoxSktnZ3BFd2NqVVJqdUVhZmRiMHlmOUxJbG9VWE1DRHdMOFZMbkZZQzhUVTdxVlYraXJScnkveFdTK05MZDAxUnlCQ1VUR3Y5MmI1WFYxSlpQNS9OVHZnSFVkMVI3ZkQyNFdmRGlDcE0yM20xM054Sm1LeDl1a3JybGhGN3pDNlpydDgrMXJmdGUyNFZlNGk5SGEwYU5VSit4WExCL1dmWmZFcnlwY3RYN0hpSHo5bDVOTG1CSjdBVEhFOGZ2SXdkanZHZDMrQ1lBamFUa2tsMy96M3dCVmo4dk1tenZEQVZiYXNBZ0tHMU9mQWpJbUoyV0VQWnNGTTJJWmI1TGRzU0wrN0JNejV3cnZONlJxeFNGVEQvK1c3QWlEL1R2T0lXSnI5azh0NTVYaCsxYVgyVTZxbmx4TXpHMmFRY0x2ekdYYWZ0MG9PY0ZXdkVWMlpxUXJCdERVTzRETEt2RDhmSmlVdlArZnRoQWZraWdHUWlsTkFqdEJVWXFYNC82ZUZrcyt1QzBYSHpxZEtXMDd5TmtKVHpudTIrL1JHNkRIZ2VsYWJtM3o5YlVkNVh6cTQydGpaWTlwU1h4a3NkLzdtbHN0bUh2RytPNlhVZTJJQk16bFN6OFZ4VDhVRmtoMmVReUorM3RmL0cySkNsZUhzYnpQOTBCYlJuQ2F1OUFtdWM2WlBHQ1JYcEhQRGxOYzlTbVl6MVBLUW4xeWViaDJodk1wUXRmYkl3cnBxTkxURzFObGwyaHh2c0czcWFWOUxiYXc1K2RiR2F2UXBOMXNIT3l1MndKTGY1VksrVU9ucEhUMm9veHY0cU1vZFZXZ0pIN0JOZ1pIZU92dGZkL3N0S0lOcmNuVlN6TnhDdXBQUWtBUDM0eXNUblFObXQ3VmJaYSszVU5wWWdqNVpIakJza0tLMFFRdHR6eGRYWHB4OGRjT0RydEp2QjNZdFgzOUc2ZjFUWlkvYlZmWkUvb2lKN3NVRExsdDl0L0taRGMxNXIvZGtldU1iNHVDdVY0OVpFUXlrbjJSWU10bTlSUU4vbDNXR0FCWGtGTDZJb0hmOG42ZHZBa2hHTHloN2JlZ3ZoYzRVU0NvSWNQbmVxYWVYWHZnZ3dBZWR3dDJ3STY0NURYbksxMjFIaFlCeWpWSzA2Tks0LzQ4YUx2b1hVeTJ0NFNwZS9rVjJ6L1RZV3FxajNiQTJHakdzN1dqYm83SFlPbXJXb0NVU1BiTjJ1Q1ZSc1crRVNEWHJSdngrY2lTWkd0WDRmYjVSS3FVZDlubnRWQnArOUl4MFluRUpiVVVhS1dWTkhjWFVLOHkxblpSN2lvOURMUHlmUFN5WFRDVngxNzRucWxsNDlva2IzYXdJTEtodVBhTFdQWFhOdXp1OTJ1SEVPYUo0K2VqNXZhK05xRjVEeG1RMEtIdHl4am5qMDZwNUI5YTk0ZjNhcDZvL01WVWF2ZjB6V1BKQTdoSjhLWWVjNWVXVEF2aE02a1ZKOHNVemlJRE12S1hVYjVCK0pKVzV0OUpSbWZRb1RoK3RabjE0b29wMXRMR3RlR1o3VTlPMG1jNWx5ZFdiQXpZWGJkeDJwK3BPL0M4elNRVkdqTy9CM3RsRDdPODgzRmsyTnFWV0hwcHBXcG5FazFuL21wWm9WNmFKZEpIbU83TzlRVkpTdjBodGE3Q1U0SnR5Y2JndC9tbERyZjRVWjhFUGdLVWcvQ2NJL2dHREpmV043RWtlK3dTYjlUdVhOMWttM0NCZUM3STVudDRDb0RBbG1pNFExRE44UVhkdkFWZzQyMDd4OWZmQklyaW8vcnMvSzF4YVY2UnM5eHM3WHprb1NDM2pReW1Cb0FuYzBmTUdwQmhocHJQZXR2eDlycmRYc3ptZTRRS2dzSjhZUHIwYWFidW5xZ0F4TVFUUUR2K05QY3d4ajJPeU02ZHUvM2ZubWovR3YxMWtQUUlCZk5CY0N3S1R3M1VnUzV3RnJBQWRSeFZ3UmdXOHFRSXVoMXRIS2xPa3I5cll5MThmYW93aVcyc2c2N1lHTDFqSlpNSlV3b2NxNFR1VnlCMi83UUtLN1hRYm9QR3dCcUxXUUQ3V1FMN1hRSDZ6WVEwSUkzN282KzJnYUFINzEyM2QzN2MvUERkY0swSUFoL3ViRVhLM0NXd0hwMkV5UE95Ykg5clltZjBCMlBzaEFQTXNTSFptY2V2NEZzZnV4ZjM5eGYyelYvLzdENHNYa2JnWmh0bDhxd1lPcUlFSDFHQ2YrOEVmTDlOcU01K0d6VmYybjIvK01FZTBtVWV0WmNCZS9TSG9ja1ljY0o3NEJyeDZkUmdBb0QwNEIwNzBxY2hvellMa1dvYjY1YTV2OG1lV0ptb21BR3B3bVBJZlFCZ1c1TzhXYWpBSHZvMWR2L3lpNDhiN2Jmd1RQWjNzeEFHdi9hZW9ZUUFndmw5S0V3RHM2UjY0MGZ2MXdiSHhTOUgrVDk4OXJTck5icTNuTkwxZkhsd0ErRVJET0lBZmgxemt3UlZIV2d1UFRtRWZXSy8vM1h0TjcwY2V6cVhiUkgvL3M2RDNiMytRc3p6c2xOSms3N2Q5R3hsc1RDSHB4ekk4dSsvVDc3ODRRdFc4c29IM1ErakpCSENSOGtyNFJ5QStmNnVETXo0TWNqWVA5N1NodjlIQ25wOEtmM2lHVWd2YmcvZER1TkR4U2FJQUtNVC8yMWNaOEtEOERMM3h1VGhGY1cyaTRwOVY3aFhMVzBCVkgxeUhsNHQ3UEwyL2xRdW91emhYNzRyd2h2MGFrYktucDg5N1BOTzdGSHpqb2l1V2xGTmVzK1Avc0JiUC8yS25IZHo4dW12clBaU3hGYkxpd1Z4eURVb3hwUmszbCsvOHpNZVBoNVIxR0FjQTdzclYrNC9wQW1KWDI1VnNpNGd2QXdxeFdEVGFFRkp1eURRMkVjbldYcWxLb3BLcHVhblJBRFRBaFpPMDdYWmJLamtibG5XcDdSM1lhQU5UUGI0cEdUZHp1VU9xZFkxV2llOG1EM2pvY1QwNlV5d1FBVWxBMjBZQm9LSmxYUkFKRE1sTmtNWjd5U290WkVRalFJL0VVY2xXbGRXT1hWUm1DbGVPZ3JZV1ZJMUJMN21iKzcyZTBkTnJzTDBDNGRaczNvRUtoYXh1TnNuQkViRnhNa1NFUisrWmpMWkhZaEpWVjNteG95VlJhVVQwcWpvdnJlZ2NWZFJzWGprbWFGRnRFZUpsamVRRlZRcG1VMDRRY2JDSGpBejFpVUlhd3ZsT1hrTzZMUjZrWGVvbVhNb2paUk5WM2ZxcXgzN0hoN2ZVZWdEVkMxK1pxRXdscTY2M3pjeTkzcTU3NCtxdUFyMHR0QlVxZitKdGpGaXBjMEJhK3lsNWE4Y203WXpOcktOQStJUUZPM3BmMWZyVmJlMURTcGhOV1J0b0hlSk5oZnNYUmVleHF2c0ZxU2ZVNzU2RTFpeXJzbkJaV3hwWWFHWW1JUkt2V1M3ejdPZy83aTRnZG00SkRhUmNtaGpySzFNNk4vUmFjbU9KaEdobDlZMDRIS3hralovY0d2S0NuQXJ0ZHV3SWRLMUlSaWhXdHN2b2I1SFlXVmFoQ0w1N2laWlM5U1VxK0RUSDg5MXVBSWp5bFZlbk5hMXRTaUdiSFNuMnpYbG5wOHVxZDducW1QbW5Dd1hteDIxWDh1UEh4emdmRUl0RXk1OXR0OSt1djdMWGRsUG95NWw2NzFsNE1BSjFvNVdvS0lGMkYrNlhaMVR0NjJMTjVndXhXV1dsRXRNa3hQZmR2TnhGcllnUjEyMVJsMnZhc29EOGVnNjNzRjR0UTdsUWVHeGJQZUxNQ1RpcXIxd0RMK3ZTSmZWMis2TVhmVzljRU1QSzBMLzg3a0VpOFkycmI5VkR0K1A5R3lMdjVjQldKMW91N2NLZEV4V2VyOGpQNHd2RFNzK3o2QnVQYUdLT0wvQ21saVNhNGJ5aUx1ZyttUkJSUmZCQU43R1NaMDJDNFhIOGVwZFdyL0NCOGdiVVpVcGVTczV4TlFESU9ZVkExRW1JZWlLWFdLWlJBMVZHVENUeG9tT29nT2pRRGNmWCt6MXJsT3loblV3dEVQWmlRRFNsU1EwWEhPVjVzaTllNlozcTY5Qm50QzIrNnZQb1B2Qys0KzBWYlR0NC8xLzh3WEl4RzQ2bUU0d24wSGkzL1hBUXBpTGdBRlpnMExqNUtIKzFYQnJIUW5waFRaMHYrM09qSXArNmIwZ3M2dW9TRTdxVndqdTN0ZWg5SjlCT1hjL0N3RHkvL2FVbUZxbEZMTW1INWxVMVI5aFJVdzRTYUkzMHFGSFdBbm1tU2xxbythdHVHNFhzc1MxNXpmMVNzeWw1YlozYjRwRlg4N2F5QWNkbWNaK3pvZWh6em9YRWRhUVNaa29vTHZtVjRMbXp1eDZ2RXdXN1JWQ0V0V3QzZEFVSzNmRmlaMWFkaTZWT1FYY2g2bXpHenoyaHpqZk1LUXFUamlqMnUyYXBqaVRQcmFSR0o3N2FOalRwY2Q2Z1BKQldBUDlYdGFwY1dQOXgrakw4amRQUHphL3dxaU51ZkRBdzYzYlhLa2xybXNBZStRVThKZnlmQTJ2cUYrUlAzWW4xM2VoaDUrdTVIcmJNUklZdzlQTHRvWDh3T1lHMWtYZUM0ZWE5WjAyTTNhTWF1bno5Y255YXZYcjdMRVFQSHErcXBoaUpIeTBKZ0pnQXlzem9tejNUbGxZQkNkYkl2Uk9jVWVMZ05aTHRMT3BGcHJYMDRXS09nVjVBbGl3OWV4MmJNMndmblkrbk52TVYvaXZ1L2hPenhGSFZibEpEV2FOSjZTUmx1Vkc5c1ZxMHhyVkVYVGZVS0J1TXE2Z1BRWGRVczFJeVZ0U3dKV3h2aGQraW5YUTlJQzVLaHhITE10NGZuSm9zdXRZTXRxWEFMQnZuUUZRQm1IT1dkbFZyK0RUUHhsSWdkMkdNcThsaFA0OFJEWE91RVFNWmk4OStZaWNTa3RnSklMbm1MaDRPaDBPMGVNcXpkbzlieW9md21PMzd1aFBySklkY0w3MnNFNXg4enFpb1ZZbWt4VkZGYTUvYmxhbzNBS2doL2tFT0FtUHV4NWJETk9RcTFiSUt3VW1KaGlZSEMzQ2NtWkx2a1dGVmtRNVplam5FOWNCL3NDSWk0bFUwa1k2ZXRSVU5hWHVvUUx5dEowTm95Mm9NQ2dyTGlKQ2RRUjNEQk9mK3l4VUNqdkxmUUZiRWVhL1RsNzJTdU5PdXBsVCtuQnRhV2dybHl6TmNST3hzYlgvVEZkSnkvMmd4UGEzb1UyR3BZYkNoTDJ2NUgyYXlJTldOUUwvem1LellxVUNzclYyYXNyZVhSTDcvY2w0YVQ2N1NNVEF4RWZKTHdoT2hOaFhPSnUvcDB3Ti92Q1ZNcUN6eE9qZk41ZUxSTE9DS0ljK01yMXhlNmZBd2JGc1c0TDRjMjdtK2F0b0FkQVRicGwvTjNSSmdiQjBuZk0yNkxmdUtrUFJzRFNFQTBWTVRqZERYWTdKNGY3OCtZRi9QNCtzaFYraGNsWlRHZnlQVG05MHVWS1BSY0JodXRLNUNLV1llOXBnYThjdUNxUmpoY01vNXhOaDRRY1k2SlIzYWs1WTQxbTVTUkI0V0ZGVXRzaXFBVWpVU01CWjY3UGNNSWRCTWEyaWNGSjdVN2oxV3NmMU9heUdjcXpFekMzaUFXVWE1Q2pXYWMzaXYwN0NTSlJJbUdGUGJpZDNPcjVXQ3dMZjIrNEoyTHNiVTJVRmhWU3dUckZxRHpJYzRDbUJOakpEV2xWYlRhRFFhNG1Za1hwZHNreUozZFRVZVQxeEd0bFRJSnVGTU9HbmhPbEhLa2hORUdoSno5QmwrakFsRE1Db0RRbXFaekJXeVVWU0lQSFZjNjJRRFpnOVBITndGWlRERWtJa2xtZ1FpWUxCUWtENEhZOVZvckt0YUFvU0xLQUZwTmNaVVNobXdJTzJzbFJXVE5qV21WbEI4ZjRSUnZ1RmV4d29xUTFaa0JhdmpodUppM2dvZHlmREpLd0x6QUZEdm9oYVdoRFJpSjkyalRvd245MzZ0dXdUaTNKbFlsTXR3T0N5dDE1dkYxYUJsQW1aQTgyb3RPZElHQ3gwV1FKb094Ni8zWTFuWm9mZm5sRGxvM2IvSDlyMFNJRExtd1lPdUpjOWRhZjJ0V1JLQUxhM0RWOXBCR0x0bWJ2YTNwQzRhSjYwUjZYcWJHYTdSKy9lVC9kNVFxbitvOG9kWTlXQytwdXlWMDFoaUNId2NvMjRVcFZGMUhSMFNtdjE0SWNxVXNOQmpwWXJhWG9wQkY1SmFoNmNxT2svSmFGWG1wOGxrMEphTWdoQ2tGQnZRRFB6ckZwUXVBT0lzYVkydjkyWXdwMTBnTkZFcGNyZGg3dGFlTUxSdFRNa3hHeVV4U1ZWZ0ZTbVhaYU5Qc3hzWStJWnA4SkdreHBPYkFGOU5kMGFXMFBQd25ycjhIakNiQkN0N3BjcmROeStIMjhtNlErcFhqNDgrVU1IS0MyRk5qMlEzZWYrM2FScUh1UkQrbWIvNVNlZnc5NE1hTUxDZkdWWlpDU2Y2UzQrSmUvUGhCK1NtSzFKZk9EVTZFMVpVcTVNdDZ2V2M5emFPVTlWbGtndnE1SXpoZVhxTGhZM3A5ZE1QNzVvLy9jWGhMR2VmSGV6YUs4OHpKVjFmOC81NWk2cjY5ZVFmWlhEMzFsNzRwT2JqZXJQWmZSazNjNGZ4L0xVeGVZZ3RiTTd1dy8xcW9lOXpiWW5wK1R5TUI3ZFcwOS9CZHl6S2JxdGVLSGtzR2x5UVVGYkt4ZDdOTmR4ZEVrWkFBQkE4aWxNUEd6dlJTZ0dCRUR6WU1Ybm5VRnpSVEhVU2dOWjdWVVQ2a2VBZTI1cHFmOVFYMWY4NHNXRGlJOVBIRWJVNFpXdExZTFBFVDZWMFFObTllbDlpMExROUhlOTRRdkNsdW5JRUdpUmNSbXBQbVpRcERRbm1GNmtoQUFQeHZ4OS8zMy8vOThMSC8xdFNOS0lmQU1CYSt3OFo1QUY4UEcvOXM2SW4rZTVzRGdHZ1lBQUFFTUMvSDhnanQ2dnIvMGE5VTc3WFgwQm9LQlZDZW83ZzNZU050NnZWUTZXZDRuL3dsZXE5UWxaTlptMUl6eS8yeXVjTC9Bb0lSeTREcGZ1TVEzMndKTXJQNkNMUFVEZmg2dWVCbGxyaFJmQWI4SU41VzVlU1ZjYXBPK3JhUGkreGJ6cmZYYXpvN09kOC83TFkxUTZnLzU2bDBwZVpCQXFvL3I0dDRGOHkzK2hpQ0dlNG5rQWowK1hXVWdrdS9teWNmVjJ2eEUwWkR2cTdUK2FVdGhPVXpWZjlPSkFWV0FtQXJ5NXZ3RDRuelNPZmVZMmRwVXR0MithQWZaNnFkME5sTHNjNCs0azRKV0Z2ZjlRVHF2dEdMZVJqWmhPQzl4WjUxY0wzc0lEOVE1VWpaZHV4MndXcWtLcHRGR1VJTFpsSEx3clpJVDdGVUpjaXBCRDhmS0U5dSs4LzRpMFg4dHZidk9ZRTNCQ1BqYkhsSGp0bUl0a3h2aXNpMm9FdWZKeTBJUVlOekQyNm84K0swYkZzbDR2WS91SUpRSFlvZU44K1dRUTZkd0pQUzFpSndrK3oyRlMycHllNnJjMHRiVDNCODFMZmgyUzdoaGZVbXJGeUxxMEVvbWlJYjUzK1lLVmU3NUxNZEF3RGtKc0NjLzBTQ3NUc3hVK1lXbS9LZXVmSytXamNzRjdaWkZ6YmhURWozcG41eXhVdEQ1VldEc3N1ZUN0aWMvQzJNZGZJNTd6STlyMlFIdU5TZkwyOEp5bHo1ZGs3RW5JUlAwdnRYd3h2TzJEck12YXJ4R0pFcTVYWExMK0xGOVJ4d2VsSWRoTngwYlRIdEpvUlBSS1VUaW55bFpJRTRFOVhuYVVUUURnb3hCMk1BcEFuU2tOSzVKN3U0U3ZCdG5PL3NtZS8zdDAwQXViSi9NSGZSK2s4WkVjRnlnTUFCTkNRZnJRMkZJd0R0VHNCK2g4Y2c4TUJDSXpEb1NZSEFKYkJ0d2JFM1hzYzY5Mi9OT0RVcmpZbEdrZzdGOUpBa1U3WElLQllXNE1EM3A3ZHo5SE1NcnNDQXJBcjcwSStmb2FjM1ZlUThMWDVSSUoyUmozTUd0VnJZQ1ZHMHRBNktOV3dvZHJlT3BWYS9ualhVNnlIV0p4WnV5Yko2dTZnVTRkNHcxN2F6RUpNb1Y4cjR3RCt5a3Jrb0VaOTFGWnE1SEx4OWlYb0F3OCtIREFJTTJwcVdYRHd6b2ZYUE53YnNnMmZSKzlrNnlLRmdMc0hKa1g4UXBmbWpWY2RZbUZTZ054ZXIyT1pZZ29FRFpLQjlYMW1zbVJLRW5scklEUU5RUGxBVURZdWxTZkdXTWN4ZUllZmVxTUk2dkJDMWF4dzQ5NXZJYmZ3QldId3hWVXZVSXlXanRUd1cxVGcrY1pURGIxOWphcnArZlZWRWdwNWZYN3M0MEs4TmpucXJqbjB0WTIxRmRNYjdZb3BpVTF4VldLVlB5YXh5S2NrNWxSTmlHMkViUnZnVWlrb1RnOTFTWFNnYkJKY2JTMHdhNlFCcGlScW1VMUlwYW9rS2k1V01aR05pcnBHU3VHVVJDWlFwVFdxaEsrS2VhcUlxd281OFFLYVA1WGgwZEZXa2FseGNGdlkvUFczUXJyNnc5ZGMxM2FsSm0yN3JpdnQybHdWaFY1RklscGtwYW9CRVZaNVlWYXhFRlhhQk5hL3RwamZ4ZFplenV0dytEYytJUC9KLzR5eTROemdyZ2JJd1gwRUdiVkNaYVd3bHJTU2NqNk8vRTArSUJGaDBkMGkrNDV2MzdkbU5aWEs5VFh3R3Y4TWZQYmV0Q3g2WEwrQXBDbERXL0hqTmlLKzd2cnExU3M0MjEyOGJiRy9NdmlNYzVHbzVKYzNLbWRkWjI4bzdFVTdWckNHQlBaNE50TDg5L3RsWEYwYklZbU5Jd0JCQVE9PSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlF1aWNrc2FuZDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBREkwQUJBQUFBQUFkWEFBQURIVEFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR2x3Ym5GWWNoekFHWUQ5VFZFRlVIQUNGQUJFSUNvR3FJSUdHVmd1RUtBQUJOZ0lrQTRoTUJDQUZoVUlISUF3SEcycGdSUWRpMkRnQWFQQVpGa1d3Y1FBRm0rOFRSZGttblVqMi95bEJtekdoZGVoYlpTRjBSN3VvN2hrWkNaR1Q2aG5wb2JaVFd4eTZjT0RoMEVnLzlvMEZSK0hBOHMzSjFiM3R3NTlYb3pnY0NOd2pabXR0d0NWeFg0aExvcEVrVGFSWHQwWklZMkl0NGpmOTJYc0N2TVJMVXdqMlFvMElraGN4S2tZcTVpUXRjZm5pbXJwWjBqcUh0R25nSmJsL3REcXppaXFkcXdBem9RMFRMeDg2TXpwWDV0STVUL3p2OTY5NzVyNEFvb3NSQkRKZkJibWtXZ3NJdG9xTmJHMlhKOUNrZW9iSGJmM3pCQm1vR0ExSTVhZ3hHTzFHVGFvTkVGVE02N0l1b245Rlh2emYraXVpd1FFSy9XL2FobWlieitWZEViVlZSNFlOK1BkL2pjekNUTzdMbndXZ0lxRmw1UUFsMjFZQjJwNUtKRmxMNkpmN1plQnpmdTRjRkozcStBT0M4UVY2NnpvYld3WWhXd0QvVjVzbXZFWG96RW1FVFd2dEtHMlRQRzNoV2NwUW05blFPdlI4SkZJVmdaQmQybWJGYytJMWZZWHZ3TlFrWml2cXlQMGU5Mzg2eTFiYTlkM3pCcUdMcXdBWDNYcHpiVEg2K3RiWHpHZ2tBMnVKZlF5ZWxmV2VKU3ZnQzBKRlVGMWF4TmRUVTJIVHBTajdsSmwvbmVtcTcrOXZTTWsvNkphZEdzc3FyZ0dlZXRuYU5WUEw0eitkN3F4L3NneG5GMlQ1ZWdIU1VXeVg3QUREVk1LeG94ejBCY2h1WHhpMkFzQ2F0VFB5dmdPT05UT2JyT1NjY0d1Q1FsemhFYktCL3ZydHoxaXJIOGhzWm5hNzluSW5oeTB5UkVMQ0p5TGdXZjg2LzNBZ1REQUFBTHBqTkVnM0pOTlFaTGhzWkxveXBGdzFwazRkY3RoaDVLaWp5QWtuRU1JQlFwK3VKL2lsa2hpcHVDUEhlZytHOWxwRm9RL2EreE9LYzZIRkF4QjJ6cnAzb3pBWGFpQnV4Vk04Vm1Da1dtVjd0dDgzVXFsNmk2eHd5YXN3Q3BWOStjelU1T2Zqck1ySC9CMWJkc1NaSzdtU1cvYS90Q212S29KRWloWWpWaUtQUHJ5bUtWRGtQLzlyTU1Nc2N5MncwRkxMckxQUkRudGRjeDB6S3pNL0U2aUFwQ2o2TC9rL2FLQTNBMjhPeVZ4YUM0T2xUNWFkdVBNUFdmWkIwdkJrUnRuY1lBR2RoU3VXYmxvMjUxclQ5ZUNPQ0tMZ2ZiWUdrcUJKNlZReWE0S1RHSUhVZzVmaHFSU1lFak1IUnhJSEkrbEozRlR6dE4wcFdoN0REREZQcHRvcHVONDRKL0FJa2cxU2VPcGNpOWhQMFJUUUVpV093enhOMDBaSFUrVXBTMUdGOEJZUEVEM0FCTEYxbnFMRmZBdFNJZHM0dFpRckVKQ3o5VEt0WjJUTVVWaGF4SE9MVzNpWVN0MHBvRWNZZ29TeDQ3VkRxY3loa2drRlBZSGR2TVN4OVY5K3Q3Nk5MWnFEQjJtOVlZaG10bXY0ejBsNzFhRFgvaGN6T3dRdXhxNmsxbFVDN25tbnRHL1AzU3p6S0dRL2Z3UlVEL2NPTVFpRElwVGdqeHZ2Yi9QYndFOXNsQTZpakxJVHhia0dscDJtWGhmVTFPNUEveUhlYWJSV0l6SWRXaldaMlcwOThTM05KbXhJVXhEMEpTMklRcWg3L0RMT1ZGVVk5SS8wNzFkcUpGeTRnTjlTTnlQc0Fxa2xKR1hQYWZlTSt4YkY1cUlZYy9JQUJ4bWxtNEJjQitvUE9SejE5Q00yb3VoMm9HdEVOTjJBSkZyQ1Z6TzROb0QzZXhXU0VLRzRzak1EdE9WSlNnWUxWM29TYUxZZWU2T3JFNTlKV3RJN1hxNkZNTkI2cEJhRHptU0c3eDlQL25jb0FRQzBZTzY1QVYvOFZxUjVwQzdPMEtKUlNUaVhNSGVhanp2cThmRDZURWF0ZFNlRWRDeUp5T1A3SFMwSE5zY2puNEVVSDdJVnY1QjlOY0h0NlErUXhyNU5nSmxFWXBCYmw3aVdGVGcyU3ZzdE5McGsxd2QwRU9CL0hLT1A1MW9Ba0tIYmswY3hnYVVTbUVkenZ2UkVYZlhuVUVxeHFHZ2R4LzFwVUJuNnlTVWJpTDhia0lsQ3BPQzJIRi9ZMHg1cXB4VEw2TG1sVVBiRk9KTWpZUURlWUpJY1lBaHRLVnFmckZLSW5nbWpPSTVleCtXYlNVQXJDR053aElEaWFLUFFWMTJlemFkQTA0Q0hHODVMWW1oMmdpTUVvaGd1RkNFN1d0MlJucFpPUDBMQW16akpOSk1sMUZxUTJ3ZmJVQkpiOCtnZGZpU0dTVzFnQzF0WjB6N1FWUWRkb1RTeXNqU2Viem9sZnlvaFN0Z2dCZWVMQ0hPRGZNeW8yQk9TOGExMmhpZHIzWVVoUkRWWFRBSXhFNnh3bXMwREVnMU1SRkhBR3RHWkpMRTZDdEJabDVKMkE3dWxUUDIwTWpRWHUrRkdjUmhqQ29WWHRvd1ppdGhlQWlnYmxuT1pJUmdEQ2dZS2VqakJRb1E2aFJoMkxJYXJHV0I3eitZaXRLQXVxRU1BbDlRRElnSGM5UnNZaVV6QU5nTXNaR0xMb1VheGFra1ZyZkRveksyMTBaYkswNFpwaTZDRUJWb3NNT0FBVVZnUWl3VjJITWpCRHVLVWdKT0lneVhoRU1uc1VDbFNhYVN4dzZUcmlPbU1SVjI0V1NHL0FyMW9iOExOOU1GYWZiRm9xTnJjY0NOeTRraWpxSXdCSmxOd0JDOG1XVmdsRyt0TVordjU1T01WNEVpRjJLQ0liVlNzbEZvWk5wbUZ3ODJYV3N3b0M1NktEK3FVcm9JekttbnU0R0FaZUpaL0VBQk00UVdRUnBGcWhvVllDUWZQZHBPaEhHYVd1eDRldUZpSG51NDAwcG8xTjdDWFZNbmZLalIyWWRGaXNjV3FGcXVCZE52QWE5ZHk4dEVUUCs3MTNMd2NEUHh2RGQwYXcrOW5leWZnZC9ZMzhDRUw1c0ppV0FuciszMy93WktjUW53S2pyWGlNQUJwRHVDb2FVaWtHSVNoQ0FFRnlFRVY1SmVsRmNIQnA5TG5lL2UvYTdiTUV3OEtwUDZaWlZtVlI4UzVvYkFtVlpKV09NNXkwajhCQUJRWVFUVW1ReWFaR0VUMXg5SERDVWtNRzJNMkhFT2h1WDVIalR1QnBTcEFLd2lYT21zcUJxREFYelFVSXdaK2ZPQkh2Z1poWWhQRzMvalZ5SXZKT0RkQklDMGpLNXNLbk43NnFVeHNJNVJqdEFwaXZ3Y21lQVFLOUZZS0dzRVN0Q1FRb2c3Nkc0WmVtcVRKVEFSVzFEOHlCVklRQlZNSWhhWnUvVkg3aFNPQlJGS1JtalFrU2JrZ1FIb2lyWXpoS0ZYWDdMSUpvTEM1YWFuaTB4Z1dMZ1JnVGdsa3JPYTFXTUp3blE5WHpsY2ZtQURzaFE0SDlFb2VueTVTb3JIcldnOXRzMHBJN3YvM3NFZXdBYXpydUMrR0NQQ2Z4cmtUOUNZQTlDOWJBNUJ4U0tLM2R4MEFZSS9leWlxbXRCdUFvMHRjTnVicjgwd2w0K200TVBqOW1LYVdQL0ZKMXRsdFBkVXpPNEcvaEw5V2pwVE5zbFZ1SXlmSTZYSlh1VmllRXdxdDRkYm1majhBQ0NKelNmZG40cE1vNDNLc2tYV3lzUVZwakQ5U3dtMEY5QVBBdndPQU54MnV2Y2IyQzl1QUM5K0VDODk0enpxZkdhUDdLT2Jocm5NN3oyMEJBWUJFUUg4bmdON0s5M1oxZXVWek5QcW43VFBISXZNY2RkVjFpNjJ6M245T21XV1QrWmFhYVlrTHpqbHZnV3VJaGlSUXNHYTBtb3RnWUdSaVpoRWxXcXc0ZGc1T2laSWtTNUZtamYrdDlRQUhva0o2Yi8zZ2JqTDExa2RmT2JRM2dCaDY2bXU5c3Y2M1R1ZFRvRkNSWW1WV3VXZTFTL2FiNjdEampqamh2cHNSY1V1TkxTN2I3SGJVdU91aTMvMFJEbGZjMEJBZXY2bTExVC8rOXErRkJBeEhoU2RTQ3hBdVJLZ3drVnJRMFFzaWE4MnFwYlphT2FPTkJDN3hGS2xpVE5OZUJyZU8ydW1nazY1NjZhNkhub1lZWUtCQlBFYWJZS3h4SmhudnJJbnk1Y2lWcDhSVXBXd21SMDJFalRiWWFaY2RDQTIvRUFCb0RRQnNQOUJ5UUw4Rk1QOEE4SjhETndjQUFEWjJGYnlFaE9NVUxDV3FvcGhJaUZGR1A2L0pTYmJubkpnVXhWMUR6TFFBaENKSXVFYkJvM2d5YVNVSlJTTmRFTEhTSHRJTTNISEdzU054ZmV3RW5jZnI2Y0NnTVdsN2phYUowMGV4UXRRUjlpaUc0Q1V3OGdTaUpubndTYjJyc0FpcFJFbG54Q1lNczZjU3lJK2UyUng2RXFiK0NyR0VIbU9vTkFPRnBKU3lObEFUaEhUTlBvQjlIUU9yeDRqNVhrek9nNFFPQ1dtY1BqUnhUQzNVOFlQb3VVVTdYN3pNdnJraVdvN2RKc1puUVFBRTdubjEvdDVmWjJSRVFtbzB3ZWl1dkprTGxnK3dST2tzNXhTOE04V0xsVG9FeEtSSnVONVpsdWM5VnhtR3AzWG9oU0ZaZzYwMmgwUHBmUWpnSEhMZFU5ZFlHWkdVakY4eEdQYWZwQ2lOQnE5VjZpMDZUMDRZWXA0b0sxNG9jM2VsckNpVkVZRGMvai95UVNuUE90YUpuekhCYWFoY0EwQ2ZBQ3E4Uzc1WnRBazBwVG5LTkF1dU1RV1FiRml2dG5QVXhuTUxRT3UyZkVtTmIxWnE1NUlNYzVRWnRtcDhWeWxSK0ZCWW95bFhwWDdWQkRBbWRtSXRIVjJGUnd4cTNmNHpKb3g0dDNLWmZwc2p5OHUvVldiVWc3WjFSOU1ncGJqSjR0bTRXQURNUWs0NXdEU2tVUmd0eUVtdzJNS1JUV0RGWmROL0ZHYVJmWkhiYTdPTFlPL3VUNGlIQjRxTWNxdEg3S1Z2MGJxd09aRi90ZVkrRFE0b0hVUVloUTRPVlFvYlRXTjFTN0RCOFBYYyt6dXg2T1EzeE8xRmRtRXFBL3Z5aUszdHVhSFNSYVc0ME9ZMDhaVkFQVFdNWHdLNFpFT3hCaEM4ZlR3YXNHaHhLU3Q3eVFsQm9UNTBvcngra05xb21HK3FJTTE0VHlYVmhTSUQxMHVFSTJDY3VGT3E1NENjUXZOengvcGNmOEdvZE5ZL1MzeG1hVit6Slpzdzc5aWxlOUYvVThyaFBWQzRtUWxjTURyYm9EWVM2Q05iNEFLd3hwK1JFRlZTMVRJNlVNWnc0d1lXUU5QUVc1dE5UbkZQZE5ndzBGTStkcWdIZzgyNko4c2lWaTN1blE0VGxzaTlnYjdHNDVtV0xuZC9EeisvUm5hOFJMRWU1OW1xcHI3U2hvcXRWd1NJdmZtR2RWMnY4eXBxalU3djVqNm5yUDExMXBnc2lMeE5qZTFXSEI4Yk1qcFdKODFkdFMycGFud1Rnd25OMjMzV3F3NGJESlNaR2xCSlRTRGxIZU1ZWlhadE85ZnVsV00vZTBETjNaek5GYnpmL2RzMnVYSUxLZ3hka3dOOVdFVFp1N2xzNXJrd3dSS3d5VnVWMkZNMmVhbGZHVmFoM0xVMHI1MXRXZk01V0ZIQ0ovV01ZWVVqaFd5K2NFbzhleVdCTVhFeldDVkxreWJZamoxdnJWSmRuT1JYZXhzcmdVRExxYmFoMm9pRDg1N0VTR0xhdnRrVExKUmZtTldFOGVhRzI5MFdtNUlzWGk1VGg3V3dsTzhjM0xTbjNldWk3V1I1SDh4RFkxMkxDYkN5RXhWKzZ4NGYzdFF3VURHcjNodGxPZkFHNjMxOHhrcnptc2picXdZdEVWU1c4dlI5S0xlaFo3b0ozb2thNWpXTFZuOXBXcWNybUQyVnZHT2FKOGVuK0tpT2RVYmtQWEpRZlc1eFpiN1cyUmVEdE9KVGEwTmJOend0UkpQQVo5UnRxU2F4MHFHbExrOTJndjFEWDVPVVErKzNZNnUwVUszUFB5RFJjOGVJbG1rU2NFWnAwd1MydzZ3Y0szK0txbkozNHllTmFidkY1L1J5RFIwajc4SHc4NUhtekdWT1MwV0lnOUpBZWxnTzQ5d05rdEk3aEEwVzlrd0p1ajlDRWwyR2FCTDVxa0pYSm1nc3NTNmFnTlZ2N29vR2lBZ3hhbCszcXdUWGZUaWxyQ21sVmxvOFkwTE0yRC9BTmhmdWlTSnJOWFZzQngwV3RQYmtWa3ZOYUhsa3dnQTFjT1F0SXl5RVVnME9ISGx6ZDkxUVczcmwzVzAvczNkd25mWUswZ0NPV3p3UHRJQ0hWbk5YN2VCZ1JuUmNHUVNyaml1YzF3bndxV1VsMTZ2Ulo5VmhYU2VNSVMwa2ZKQzcyOGtQay9yMkRFZFRQSTkwR0tBSm10dVJnMHBqSGFFNVMvbG15N0hRQ1kzZ0Jxa2Jia3BEaXQ3S01QcDlMa1FRU1ovUDVJcUR3UkNlUFJ6N2QzNjBPZ2FGVGpzZU41L0RPOG1hNGxDeGw1MVdjcE84VG55ZHVGbG1maGZ6Vm10NmVjaDhMZW04bitnUUtLS2hndzJFWCtwL0Rlc2k5R0FSVmdLOWtUbE9MVGtRSWFyWE1iSlp0YUVEMDZiNWJkSTRhSitFVFgrQWlRNUpkdHVjUTFYYUR6dkRGcTFzTGFKYzN0eEtRM3RRTGV5VXF5S1dWUTNGL3EwZEZqOFlEOGs2eWRkVkZhNStWcytEU0c2dUMvbk45Y2VudUVOcWxqSi80Y290L243ZitwaVllWVVwbytGWk9sRkd4UnZWMVd5NFZFUEdLTEpwWDdBQjN1Q3RMRjJibVdhSUJpTkY2aEI5MjNHL1QybXVkdElFMWZ6NjZUVXczQWJyUXJhbHdFRmhPM1pMTFpKR3pXend6d0xqRHMrejhvWms4NGdPd29IVUFIQWdMdzhYaDJhRk1yNjZqczVTb3hrdEpZQmVUclJqWDV6bkJrZG1JOU0rLzFocmNZall0ZFpyZ2JyVlRSNmMwNm8zbXVhQ2tOWmNqcmZQc1hsaXBhak5Md2F1Zkw1RVZTS0VBSGd6bzdFTXhZSlcwL29pSnh1TnRrbzBXbVUvTzQ0TmRVV3pJdXNOa2RaZmpkZlNWbzJ4OE9ESEg2THpUSHV6MnB3T1QvT2NCRWpKMVJValI4Yjg3NU5JRUJCdW0zQnR0NnpFb2RiMWhNZG9NaHJHR3FYVTQyQjBtNzNreUx1Um9hNThSeG5HaUt4bUlId3RnTlN1dmtBcXV2UjBLTkp3djM0WWU0WTkrcHZXMzVFMHRzRkYxZ3V1alRMVTM1ZnBVOER3bEFmUG5HN0gwM3pXOFgwZEpubXZKenlZNDV4OGxoRDZnMkpBVEVSNW14L3JFdDNtTnpxM09rYVV3SnZJZkd1K2ZxNVhmQk9IamFmdlFENklvd2hoYjluUWF4VDZKRGZTYjhWa3hybVZWbnF1NXJYSTVScTdSSHlNSlJpTkpuT0h0OGttdmJnZ3pZamduVG40ZHlleGNTek8zdlF5RG9KOWxXSWp1SXNSS1I4ZmJBQVhtenZzbHZNdWJib3ZUYW1jN0syYlJVZjJIMHlSakx0SnFlVHV5QWplOFlRY0pKQTFkY2R0enVWQ2UwL0VyaFlOSXd1MFlPekV0ZWIrU2xNS09VUXNFOXV1WnV2dVFYV2JYcFhsQ2J1dkpBUlhQeUFtekZHaEkrdU9HTUJIN0RQTzBvRFV3MU03OEFOM2hKNkVCK3FvMFlSaEk1OGJCWENJVUxJbXlnaFdWc2F5c0lTUUI1NmhxQjJISXBYek96TzlFbEZzZHh1Qk9YMGlQaFN4TlA5ZVZoeVNTSXAyRXpYa2FiUjdmZlF4a2VpVEQ0TDBGWUNHR2lOek1EZElqWGhoZHpYUHplUTZzSFV3RHlnZFVzd3grdW1LaXE0OW81UXJ5NEVKUGNodlgzMm1KMUVaUHZMcko2cGNhVnVtQzNwUXFYemoyZXZYNG9wVTd2TnUyYStPVitlcnh2SWoyVWJsNkEzblJza3hrV3c5Zk5BZWpWd01JRTVSSEVTbzV4cjF4TktzN2NjTjhOdzMxTWYvOXRSQUtORExIRDdjTDY1bW1lcGFvaGtuUGVMWW5jYitaR0FWczNRbWVzNXlCR3Y0eGJKUjdSdVdqS0lXd1E2bGZDdEZ0SEFlMFdDb28xREMrU0I2SnNkbnBFbVBnQjJnU1E2SlVpOFZGb0lCaFYza2hDaGYwMll4ajlKdmVnL1RLcVR3ZzNlSFBPNXNWa1dEWXZHQ1NhQnVxSTduYUE5b05CODcyTmdvdUlRYmtFckhiODhKMmROalM2SnBEclRmVjdyaDhXcnhrcjhjQjNaaDEyS25NbUtxSG8xcE9lbmh0RjQ2YXpFOUxhODd1Y1J2M0pSMnl5UTdtSU5sZmRuR2puVUpldC9GMXVqZStxTzZTdzZ2WVNwNkRSc2lHZ0o1QmN4WFZvM1I1TFYrWVYxdXV6aHZpWEQrYWIxWkdORHgyUHg0bnJhbWFjYnRxSEtvY3l2MzBlekIyOEdya2pYZTAreEFrQndhVE16TGRZbUZPOU8vZzJHSWVIQVNWTnJUejRVeHJJOFR4S2pqVkpxcnQxWHJkSTdETSszRGUrQ1ExZlc1L1YzVFhIZGZ4b3JFd01QVGJ4cnNSYVlwbmxLSE14eFpIcytKY2ZNYjdYR3BQQldtTGZ1Q1EvZlN6ZXYyUFJhdUN6NkFsbC9CNEVDRXZ0Rm85QnJHRWRacG5JT0krTGdnbjVCYnFPd1NiamkvMWhxQmEzNG45Zko5QUQzVThpYnVhbUdHZDNXMUx1UmxOb2h6bkxrdWlQZUQxajNDRERwNVRWTkdBK0ZoZFhvYVlFeU1UMHFUeDJSbndwczhJdEI5ZkhKM3lhNUZlZ0NsZlAwclJsbDlkN0NaMzMzai9oZzNHMk10YXZNMWZCVU5Cck4xVGVGV0Ywb2M3aXdDb1F2S21lU3BoQlJlSHR5dzB5aXc5MG42eHBnQ1l5a21vTktHaG1oMElWWlk4S0JrTzBXMXBxWUlpOU1pVFZHOTRKMmpoK2N2T1MwUnNlUUs1Z1VEOEVBcVAyQ2FyOUlqVmh0VjNzd1BWTnpUQjN2d1lDa2lXQlU3cjczTjQyQkFuNk4xRzlmbDlOWC9ENUErSjNrOVI2TlVXL055YnFUclZzenc1emZPRDhObzFvdFl2WDJTZ1lOWDEwRGM1WW9QdUpMVWo2NmRUdGNPbC9QRWJZWlBocmkzK08rL0U5K045amJlYVFyT1E1Z0oxN3gwQ0oybURvWVlvTkJsVE5XTkh1enhhL0R1Zmpyd3ZyRzBvZytZWWJGQ2IwVEJELzNvN2l0ek43ZHpYR29kejdmSjM2eHNET2t5T1NBNDROOHJIUHYvK1RNYURGcEpuNDM0Tjg1TS9tY3ErQ0tvaWdoeXdkamtsVnpTOThIZzZRR0JHVitrU2FhMUswbHlSNVRrRGNETi9ZSlRwUi96ZmJ6U2trNWV2RjdSdWRGWUtKcW1JaEVpUkVpcjA3RkVCTmF6NEVLejc4MEJOM3FLOXJPYis0WW8xOHo3NThuY2tnUzZPK1BnTEhaayt2WGVyN0lidThCcXRyYnMxZjMzbXg1MkhleVpKeDNvaUc4MFh6ZGJBNVMvK0VKN0x4RWZzMmRQejRZZ2FzZWh3UlJhTEtMVGtZZ1FKWGtQUmJBaDFqcVhtU3JkenZnbWZFKzJUWi9mbTRqdHkrZGorL2ZHODBpUjI2bi82NTFqK2JPZEVlVjNlWkw3NFFVaXNJYlJyM1NKRjVUb25XeGpmaUlHZWQzeGFjdVhZSS9YQzlYdGhZQVlrRFVZM3QxRWdUTk9Sa2dFOFE0VURTZ1VRY09IRUF1Z1BKNkY5dlVaUUo0bkxkUXIvKzlWK0dnYTR2c1F4Q0ROWDc1OTV5TlhwTS9mV3hBbnA5dytDNmpOSW4yNVU1b3NxUUdyR0hYcEJPNE5qYmN1Nnk1ZmN2Sm9kckh3bnBXYUZYV0RWR0ZxWGYzWld1Tno3RjlldnRyeWpHNWhhVG9IUDdYdnhiV3phMmlGZ05sWHB1S2NIeUs2dEhMNUpraXhTKzFqdXVudXdscUQzNy9XMEYzUVRjZElMVVcwR05nM0ZjMmtwNk5LaTVsQVRtZW1vQWtJVDVyWnhYejNmZG1wK1FObUc2UkZ4eDNHNnllWGlvcFprVnpmbGRZclRmVFp6eFk5Z28yK2dZWG1ZSWhTM2NrdDZFRVBlelkyM1pIaGpHMHdQdUh0MXpzejdZc2RHZVB1WllsZU1NSXNLYTBtYlRGcnVsTUd5M3NtSmVSQ3NwZjhQdXpRNEhJUnFkYUlYTGhFODY3WWdZQmRudFhrYzM2YlUvUDR3L2twWlQ4VTlGME0wQjBob0Zub05hMHVjV3d4Rmk1MHM3VDE1d04wd3FUWmZCN3JMVjh5bWhicWJjT0YvamFkYXZVZk4yc2haMEdRMXBiNE40MmtkR24wY1ZURDkxL1dNeWNuNWVxSVJULzErZEZrYjB2VDFnT0p1VnZyQ0lmMjJVdUtwcDkzNlNGVzBxbHNxRnVtSlBXT1RDendVNzRYc0tBK1dCeG5xRE5Wa0FmQXFJM2pXcXNoeW45SE1hOTlTdlpCbUd3L0tjQjFlalF5b1BGWTVzdS9PRVBENzBUeVdvUS9pZlZSM2w4cVRTQXV2VFVYNEY0U2VZMGFORnpRQWlWUUZnM1pEN0cvMzBFS04vcGNFc0FCU2pCWFk5ZGk3NHJsWHBKYzRkVjQ4amFJQnJBeTR3ekx3SURWWnUrM1dnZnN1ME5wT2NZd3czdlhIWlFjclJDM050UXNMUEdtRU1YMUE4c0gzMFladWdCWXVqeENMdzdlKzVORFRkZFE4ZWJHQitZZzVhWDBLcHF3SXVwU0xyM3lENUpuRnhUdmZhbnA2T0cwKzErZG1GMzZJZ0dzdzlCQmNQNTNuZkhQN05uM1FaWHBzeE0rS3B4RE5uMStBcVdCNGtkamJpYVl2dlBxUDdXUTRLL0RqRFVaNzEzL0RiRjdCR0tTS0owOFgrTDFUUlJ5eCtWVzcyb092QTEzQVF1clh1MDQ5dDNOOUZLWUU0VzNjNkU5NmEwMXlZZHZpNzcrREJSWHc5bVJDLzdMUEdKbGtBKzdSNzIyMWNHUWZjV295NlVLY3JmeEF2QWZCeUQ2Y05hY3RlcUhDYWUrcENsbUxHdEdCZ21DU1A3akJIUjF0ZDBYOTR1MzYxYkQrWWwyZ1lzOTl0a29BMXVjODY0UGZCVGljYXBxZXZocVhCZmUyYlBsaStQMUhqTVpGYXU0Qkd1Vk1HbDI2SWFLRGxKNHo2OVhSOUd4eFhIczUwV2JMYmk4QTE4UlRlRXJoNTFXWlpUMWhUVEZncHg4V2o3U1BpcVQ2c2syT0tIODVyNEM2NFVzREt6cW5CR1hmVVVvYUY4OTZuVUpua1N2K21IdlJJaUtNQmhVUU9uenpHdkgwcTkrYXNtWTlhcHFacXdXYzhhR0RPTUVNbGdlUXFCU2gwVWFRRDIySTdzZWZUYXJrRmdMTm5PcEEwZUgrcXdkNmcvb2RYK1Z5V3cwQjFhMW0veUxQYzVWUVo5ejFaSk84TFhiNFlvcmJkMS9XTG1lN1VFQjdCcjEyRmNGZy9aVm8yNlhJc0E5SnRpQktkYXpsb3hGUDBRUXdPSnBRVW9Famd3OTNWc1EzcHQwckNLTm9oNm5KeVhWR2NPd3dmTWFkY1hRK1VSdkgvNTM1KzAwZVk0RWc1L1pMK3dmVXkxcEdKVWtuWk9qbmJqRW1IRVlodXdZMHAreG00eFpNMUswMncxRFdjYzhic2luTXRtaVpXTnl1Q0JaL3RuaEhZanovZ1pPcUx1c2d3QnpRVmR0UEZRWGVZRHZIbFJ4Y3d0c1IySTFqUjlTS2lkdk9iMnBrN0QwL2tpS3VPWHgzcG1EdzVGQUhSYm1YVmxaK2FsU3hlKzRIU3VkaXhmYS9QSllZNkVlbW8wa3RKcjY4aDUyWWNHS3ZzSDlEN3g5RlY3TDlTN3dkS3dLQnVYbUJXN2ZiTXRaMEJJUnpGbFBjYjFtWThudHBzWDJZZ0F1czBjTTBxeFJMUFd0MTFLeHZmY2pxcmdDOWFyRTNtOEo3ZmVKUmNRVkpBZXM4NHI2dS9tZ2JVbnFkei9nMEMydUpvVjdrazkvS1dDVkxvd1c1T1JTN2x2WjJqLzZxQ09rZXcrZjUySTJyeXFqeDQrcTI1Ly8xeVQ5dERvL215K1NsWmx6OWxyOE9kZGp1Q0hHbGRyREJuRUdFd25KWEJYbWRKN1hxK0pLdEJQbVBSZXBld21XOTRST0dWRVk5SzQ4K3I4aUVoQXpuVHhnVkdkRTlPSzBFWG5TQ0ZkeHZGOGE0S1RDMU55OFpxMjc3Qk5MaUZjQ0hNRDVIZWhZdGNoRCtoWjc4RldCb0JBTitraEx5bXl5QUlHV2NsYTdMVzgxbGdpY0NRZHRkaWE4TVBBSGRrSHlIcUczcEl1aHVldk0vYml4Z1B5c1plNFJ3cjRzNExjdkgzVzVCRThnVi82dzErUndlak16Q1IrSnY4L0c5RVc4UXorUXdlSXhaS0NqQStuWDRjNnRuOVlhZlVOZmw4VStjMVdNZHd2WEE4ZGE2WjNSUnVEc1hhZ0FWdlQwWng5UTZway9xc0NLU0F6ODF6WHRmdEZmRUROVHcvbk1iaDZRV1JaVFk0S241L09GWGZmU0FqLzc2YkJBZGlZb1JGcDdjMk1yd1hCVFp0NXBEMXNtMkdJVmNFZnd0cDIwYWRmMmlaVVhJM3dEV2xDQVZaSTVWTGY2Nm1Nd0dZQXh6Q3ZsaUdvKzd2aUwxOVlqNElLejA3Wm9zTVBXL1BxZjAvckl6cCttUC9PN0p4eEgwTHpUWjh6R3RHc08zRUlUNXg2VlRyWFcrTDlsZ2U5VU1MUDVaYmZDdk9ZbEduT2llQnBFblJTQnhOKy9lQk5mMGpidHdFRTZCYW96VnhWNHFXT0xRNys2aWtmZEcrQkt3dXhDeUkrcjJiK2cyTk10a1g3UjdjZlZES1dpL2dDRWtEMWMxS3k4c0xYaHZnZU9Qdmg0cUpaNkU4R3I3TlRiRUZQYzJ2RHNXMlc4bWxqdEZwNmNDWldvc3J5UkhLM1E5RHZSODhtMjlOa1ZuWHVyaVFJT2lTc2FEcCt2MjFNNGZsVWNMellldkJBQzlyK01WcU52b0RSQ2dWRmpjeWdOWEs3Q3hZRmpiL2xvMDdWdlpRdGwwbXpuL090ditkSjExZHRyd0hrMVVBNnRkQ3dlczNrMG5VMkxTeHN4N05NU1BaZXRzbWFNdWtKSG9QWGRDUjlINm96b3hHbXIyV1l5SlpMT1pGQWRndzJrOUJDejNYNjkzT0x5R1RzeTNxK2VlSkpzZTkyeWFJZzY3MS9mOGVnbjRQQU14UUsyWHcwTHZmZEo5QjdjK1FkU1RQU3ZsQ3JaNExoLzJocW03dGJhWERiekFsaHVkU0VvN0FldVdtcXB6eTFYS1YxeTFWQnJwS1JMcVZTNWxacWVOOXE5QnNUbU5Vb1FNV1JOSUlHR0kwWGt5c0VTY2dWWm83SGhZckEwYUFsU293bzhGVmZ1eStYRm1vcmhPRUVvbjh1NXhzRjVZSXc1Y2lvbm9NSUZoMjFYUjBzSGl1dW1EdEpmdytubjVoU1ZGV0wrVjlSVTNGWXlJRkp2U0d3MnBOVXlpZ1g4S3VjRG1qYU9PM0J2bjA2WHNRaGJmT2FVZFBibnVTRFdtaklrazUyVFlWMWFOSTNobGtoV3JLRVpQaXdER3J5UGNQYjcvSXhsejdhcEhrVGgvWVd2Zm1zc0Y2UzRraGJ2RDNxSmtRVVdYQlhuZmlDVVVraUpqUUpsOExYdEU4cWRJNmpGYmRGMko3bXUyN3lYbDQzejk3QzlnMVNOMld3RW8rRERrT2JQZWxwRUhYa2QwbTNETklrdWpWTktORjlUSWV6ZjFxeHBwZENJbWhmOE53bmFydjRQL1ZPTU0vM3dRY3c2NERJSnUzQm5qeER3SURVak4zbmFNbW9qZXptNlBERGNGeCtPbDhPNVF1dzE4R1FtNEM4YTVoL1JTejZQY0ZXNmdCVEYyVEdWeFZRcU9uR1pJYUtHWXlhZE9CVXdXaHdwRk00WTFNcFlBZ0hYcS9CdGVPK2FLYmNHSVVXZ01LS3lOU1I2Tmg5dXVnWXM3Q0NxSEN6MHdxZ3AzWWZZYkhuRWxFWmhnV2ZKUDU0M2ZkK09TNDFJTXFzekdqTTZKR21VdnZnOXRIeUVndkNJWlRLM1dFSEFSQ0xtY2lkaVI4VEIzaVFCcXoxQnFScVdKL0RBUkU4UzFKL1U0SXhMMEVXQmdiNkkrUUx4NXhlUHhyZFY1U2ZyWitGMkdFanNVWlhWTkhnYURNZE5Xa3NRTlovSEFLY05HbVUwbnZFRUJJK3pPbUUxaXh4WFBtNG0xYkJKSFQra1ZIa3dvOHBYRUFrYXNad1RXQzJBRmZSVll3MC9VWTR0THExWXFMU2paeXVhUjZqNXdKYjRBbSt5VDNHV1ZYdWMzWWdOVTgzZ2JibGM4SktzZlVqUTBMNWozcFVGY1hJR2NvQVYwQzd3K2I1cVJpSld4QkVya244WnVYZXlXQW9XZmVtbEF4ZHB2TGR3L3JocVhidmFzRVhZOHNDMWhmeUtjcEI4YjdsYnlQMVhBZTRXc2NMenhVTmJkM1gyMU5ZM1BFRnp3WHVMdHQ1UmY1aUtQU1dRSWpzSXZyL1ZyWWJ3L09DN0NMOHZNL0JUSEhaNTVZYUpNcERPdDdSdGF0cFpPZHcybjE1RGgrdExqUzhBZnVYalBSemV1YjlRQnpWdmRyWUpoUUVVSDJta3YweTQ5OEJHd25mdmlqdG9GYlUzU2RxMlgvZDBTM3RMeXpTTDkxTno4Mk9nQlBnc2F1K3lnVCt0T0FnNTFIQ2ZYZEdmeW5HcUVSVHZhOEEycVBMN1BhMk4zTHMvblpkQUs5OXk2Q2syNTY1RExXM1V4TEpSWSsydDkveHV2clBaMHRwU1diNnQwcmZWMHJTUDA5SFd1cTYxZGJ5MVRRdWlFcnhNcEpmY3ByZERGVFVQVmJORk56dFlhajFsK2RXOG41cGJYdVEwcTF1YUQ0TW5vRkNpMzkwbnVoamY5eURZdnh5eUkzU2FGMTBYeDBybEppdzYzYTNrVTZwMUsyZHdrdnl4V3h5cjFjOFRPa0ZPWFdLS3FqM2JpdklFWDJIR2JicEFZdVhEanFwRDFzRStuMVp0bmNSSnJtbWdjbmlWRE91d3ZQV1NDdXl3bm45YVk3VXYwMURONnhEVHQxcWxROWU3aFV0YmhNS1dwY0pFQlNGYjllVVlYQUpINW5xMGt2c2hEbTFGcldXMzhvN0IyOUJsejg1OVd5UFBBMStiandhcCtQeGtodGQxSUtJdzlmemx5azdWMms1TW5tdVZYc210dFVOenJIM3h0dFlINkpxak9LSzJRK2VtdjE3NVBxUTM4VCs5bTZTN3lmVThxOEQrQnhoVFJlSEN2alRuV2tBTTkxSlkyUWtiNUFHUFFxV0pxQTc2bmx3K3cvZTlPWUJpcGk0ZDJrdEllT1JPdjFCRmNXK2FnQ2hBM2VzbEVYVUdiY0lHQVJUYzRuaFQxMUJaNjZYWHpURkxGTnlaSVQ1TUxXK3J5Qm1vZFcyVnJFWERSTVpxUkQvMnF5TUw3MlhnUXBHRUxmTm96NzBndm83QmtCenhXcDZlaEFWYWNucGV0WGtONnhKR2RnaUp5aHBKaDdhQ01JZ0RNY3BSVDhxaWFMdkw3R2FOVStabjR1aWxyZ2EzWW9NK2lLc0hIcWo5R3U0bmdycEZIb1dydmxGUVBzUGNweGxqcU9Mc3ZkbW1qYnJlbXNIcmE5K3VTc0dEK29WdXBic09iN0Z4WllVNnNxeFJiZHgwbldPeGtra2l1czR2bncvSzBXQ0pSNXVJNzVYWFQzMTRCcys5RFRuQnhieVJtTkc1d3c1QmdXUFVKaG5ac2wyV1czTjUrM1VyZGlVMExpcXhJQzlmSmh1Zk5sK1dUSnF1MExjU2treFg0ekZBZTVSV1JMVmNQajVUTTFORlJ0UDViYmZrYy9ZYk5OVUlpTG5wVEJMVHNyc3BnQ01aeDJuRmFrTXZKdWNvaWp3YVVNYUtlTDdRUXVlajZLTzIzSkZsUUl0VXVqWXpPL1NZdUUwN2ZidklSTkc4TW5jcG81ZDNsNWxLMGpJam1kdTQ5WTliWDZvMjZZbFpjN1BmSGY5MHZNZG1IbHdaUVR5SEROWDFHbDVrMWo3Y1A0LzVNTkVwNDBRSnpUTTNHTGl2MEpyZkJSNHVBZmYwcUJCTVcwS1U0Vm1xMk9NcWNMTWRURGV2YVBpQ21iWTR3WXlWTDFnWk5uVlJzajRITHBhQXVlYW5xNExjQ3BsWHBSS2lreW1VNllhYzRldStFSW8rMS9ONStzOUZ3aTkwUVAyTnJnQ0tHcFRETERLV0xhUlc2a2JQYW1OM0VabUtSSVFReWRVZWJFUzArWEdxZHFoYmdNU200dUg5aGI3d0FhcU9JVjJDNEtQVXZtSUVMMUFQZkEzNEs1bG1peFYzNkc4MEtMc2JVbzFDbnVyQ3lCUkY3a2NGUys5RXNZWC96UWZmOEIvYmZkUGt5enNwTUk0cWpwbnNYcnJBbzcvMXFkZm5TMFRNM0FhUzJVVHZSOGVMVnVMZWp1d0xsSGRid25VV1haRlZtb3hobmFMTGpqQ2JOZmlaMlFKSkxnaUsyOHFPdWt5bHl4WnlldUpQM0MvcEliUTZURjJ1aFhnYWNLWldGYnZnejNHdndoNWdhR2R0SUNIWmRBUHdQYUN6SXVqYWUxZk1kT0Y5MmQ0UXdXSHZPWDJMS0RKbGoyaTZOamZvaHFzZ2hGdXVHOWhLcmFYTjBvaFYwRU9rR2FMTEx6T012dWhYRTh2VTVkYm9jc1pvRE1sTUlUTnkrVFdpMEpLSUw1RFUrMC9wZDBmMFE0bTZDWFdwOE1IUUkrVjluaG5jd1NES01jb1EvY2h6Vjc5YktjKy92dmc1L1NGd083OTA3UEQ1dS9kVXl2ZXY5RDJqWDBaWmRBZVNSaS92ZjZxODNXT3pKeGlZV2hqS0g5cDZEbUtVZHR3MzVmNFN4cXRiSDdvalNjV0hGcm5XK0Q3bFltMU5rK0htYXlyd2RQUkN2ZlltOE1zbGp4b2ZFYzJNdURYMzJ3L01NK2lsdXZ6ckRad1RjZWx0dXA5dWh0MEdsNDhkK1FuSFcwNVVzanpYYS9ubjJiTnM4M1Q5RUhab3U4bnQ0OHNGT1BzMTc4OTNDYlhiMnNOTFdUR05qcFU0QU1PVHJMaFd5NDVQWHF1VlJxeE9WUVRXU0dOV2h5cjh5QjU0OG9KV1lBUFpYY0RoemNLTzkzKzhCK081Ujh4S3FONWNtb3lrRkNvMXJoWUZZSzJvaEdlelJ0UVZqRzZwOGpuQU9sVXBqK1BxYmNTL25sSUNOV1E0QzdCRWNQMU9iOS9ZbmM2dGE0STNMbkpJVmtiN05tSGRXS2oyd3I5WnpLVGk3NXNYSzFORGU1eGRZNG9wejhyRS9RZW5IL2NzV1hZcUZkbWJjUWpYMkFmaXRwQkVHcEc3ZlBJdXZmQ3JLeFZhdjlZUVltV2tqZzQzcUFMVGZKZHR6S29VeG54RS8zZlJPbS9SaktpN3V6QW5PYWdnU0ZuWG5wYnJJSEMyTE5lV292RmwycFpxcmduLzVLTGtzakVpSU1OaS9JaEVvL1JGWlpnL2F4WURLUy9ZSlV6clU3dGdoOXVEbTdqdHBDRklXYjg5MngySTJ5cXlNU3JlYnI5SXEyUFdzSjJNWHJ3ck5TSWgzUUE1QTIvWlVJSzAxZmJ3dm1ZRUY4cUdxcEJpTEdYcVhTOGV1d1ppTEk3VjlxYVBMaGoyMFVKUDkycVZGNlY0dlVRZFlzMzhsOUJWZ1NuY1lPRzdaVmt0aXRyZmZ2dEIyYjdRSitLR21uTmV2SlVqV2V2aGlCQ3ZVaUdOUGR5R2VBWEx0MEo0ZnBDYzJHa0Y5OVhUVWtHNFYvdHFwS1hIOWVtcEJ4Vm52MnVEWFhwZkU4bXNtbU5XbE9NWTJGK3d5VkRNR1NkQ1llUG1ZbTZUb2RPeUN6blQ1bkRJTkZIUUlpWDRZblU2b1YzcTlVZ3duY3lsT0dhU1pvK1hTYVFtVmp1ekJrM0dhS1FYUnhaeHVnMUp2cy8wdzJENGYxdnh5VVFlR0JaNXZUSUQrNGRjOHNkNFQrM1F2bGZBWEIrYUk3K1V6Yzd6RkErTE9aeGY1S0M4UW0xdmY4eElBZEJvVXpsMU5LUCtSSGRGNGZpcDVsY2FtblkzZDFTMXYxYi90V1BJWWk4UmhMMms1UTVuYVVHZzhUb2ExMmlUbUZtYlVBMFVUV2gwQ1RPbVMrcGlnSGNscERoeDhHYW92U1dqTFhRcjBWSUVvaC96MUtVVHRuM1hlT2c3OURDKzVDU1U2UnJkUGVtVFgvMXNpZHY2RDVnVmFWWnNKVFBuVXpzbFY2dkZVdlhWRXVuVkhJbEVjN1ZYWnBOTGJiS3ZNYkJzYjYva3MzK0xvZVhUVjlJUXNnTU45bDBiMmdKWm5QTnBPTTd1dlo0dVdiWWQ1OVJUT1R3M0pHWHBudnFxaGJYK0cwREtWQ3RnRWwxVUxSUGYzZXJna045UEY2NEVFSFdaUnQzRTI2MjFmUFNIYWoreFNMMkhobHp3ZFQyenF2aC93WmRzQ0VqTm80b3VJTGQ3SWNlMWJSSHdmcFZXQlpoamZaaVpUQXRGTlZNTGc2Z1dNaGhxbVdoSzBSM0Vwb0t0eHl1V3pTMXE1bXJwT3dxOGVWeTNDL0ZSZVJNSUhLZVpLRUkrZVlpdW9tbDJDUG9NRmpYNnE4Qmx2MGNFM1Z1b1FrOEs1eWVNcGROSElJa3MzeGhMQ1NYbGZFOHF2M3granc5UVlwaFM0ekxITmYzenRyRW1NSjA0RzAxMlVzUFg1K3RxdWtYYlYyaEtiVWtSVEk2YytEeERmbE1oeG9zQ0ljL3pnSmhIRlV0ZGp5bHZXQ2twdUw0MmRXRGZwT2x1YXFsWjFoTkJ0TnNMZkJHUnFVSm1JU3Y5WjRGRWVrdmdqV3RzYkdyOFFlNTJJN2k5SmZnUlhnT1F2VjdiSk5hdCtPdHRZL1F3eWt1TndINGpDMWI1WlV2WnA3K3VxMkZrdXJzNG1nT2hkclcvZDlqZ1RRNjdwZ0tEcjhobS9rN285bzdzNTA2eTJDZWVZM1B1TzhGbW5ienZidFlQTGEzL1cvclpGSlo3R2dJTTM2N1h3UFlqZ01wci9FTWc0WG9EbTVHdWwxZ0hzNy9DSVNhYjN6dWdrMDRNYUEwSVZFVXZybTN1cFdEUjhEY0tobHRRTUZ5TmdpRVRJL2duZTYya1RkNmMyZGJrNVdIRHJ4N1pKSXNxY0tZdlN1SlJsSWFpb0J0RndUc29DdjZVb2dUQWRjZ0pMY2dKenlJblBJS2M4S0dVb2k5MHdmU2FSdXdBb28rb3FicVIydWNScGc0L2NqM0JUSmo5S2VaeDRHZmptbUFYNVRtV1lDbFRNTnltendRbHhXbURSOVYrL2lPY0pQWmZtQjZIbCtBR2pZMG80dFJ0MXZjSHU0YkZhbjJ5eitBYlJqTmI4bzFTVGpkR0dxTk94WDRTSVRWcHlDUFhJOHloaVQzQkFpWWUzeklWK0toazVpUkNQbWpUKzNTbGVwK3VCdm5nNURHTFFmRVhBOEVBOW5icm5Yb0FzWHd4ZTcrdUl0QUlmbzM2OFVnM1FtQnErd2pvYmZReCtnUjlpajVEbjZNdndKZmdQZWtyVXZ3YXFTSytWZDdENytEM3pBOGUydmgySXpEOXRlbnhWRDZKQzQ1MTJ4dDhsajVIZlQ5UGZ4cCtvczRIdEFWZHdZektuS3ErUXN6eGV4bzNyR3dMY3JkMlZkUVFOMW1YeDFQY3dDMXU0c1BiekJORUx2MkxhTERkVXRQMm9iUXhLOGF6SG9PNFczaUQzVDQ5ZldlVTJlZlIzZjcveUxGWVptRFFYdmM5SzlsYWdVVUFNZUxlZnhhc0FqQ0hmVmdBWkI2SWRZczUwWHUxM2JxTEY5YjI0STlaRDJzRGJpMTQvejhneTFpeGx0amd2T1VCNUxvQWdCWFl6YWxKZ3NhTXJSMXRYWWRSUmxHSDlSUWRzRSs2eG1SZzh5SWVvOG94UnVNUUJTb1B1TU9NWU1MZHM0eEdDSitIMlNNaTVhYnVzL3dDVlk1dE5BMFhtMHk5eEdNMEp0QU9xMXBnSzBCZEtBZjdES0d2ME1mb3k5Ri9aR2xhbE52bHdubENjaGd0Ukw5bFc2QXI0S04rb1NkZ0l4WHBJSnlGMjdnTzJPL05BbGgxVlhlTk95UGQ5LzNTSUtBL1ZDazM5WTRFUFlpdUhlTUJISnBXa20zUWVKRUxQRVlMMFc5Z2daS2E5ekdIenY4Ykk3REhlLzRZYmhmZTJFOWlvTzlKTTMyM2J1YnNTa1F2aU13K24zUU5KVWU4dE90cnp5NXYyRWE2N0EyeFZaVHM0dTh5MWpqbnU1M05DM2tFYmlFL1pqc2l1bE9qMjBRNjhVNllFaW10eGt1dUMzdkw4WVpMbzJzRkVhZFF4dXZHOWxFMGV0Nitsays3TVFIb04wUFlsc2FYYit2YU4zdHIxeTQyZFZta2ZTYlY1eGkzQmJWMXUxMU05d0QwbE96TFhuWUNSOTB0NHd0K3JpdW9LQTE5eXV3RDJwTEFKd1E3WjN5K2NJbmk4a2c2MThuVVNBVDJPNlZLLzNXQklhMWhUMmV3N0VvRlNyYU1JaitUV0UwKzk0cmFIQUp3RVQ5K1o3cGxYRWpxM3hESDNRRGc1SUdPKzVMOEwyK0ovK2l3enhQTXhnRWlCZ0FJL2l5Wm9IQW1NUDAvZUU1azl5NmlOZTFrNnc3V3o0dWNycVRweHlaM0JlVUp2MlJ5cDNYRlRQWWR5TDdKSXdSNFJranpON2F6WGkyQ0lNRTBwVFhvZFpjN0lTamQrckw0Rkh4R0V5M0FSSFVBeDFWL0xadmlqbDh3V1YybTFmU0NmK3N3YzBXMDZPcWE1bTZTS3p5dFJuaFFWYWdNNk1jaFJna0pNWFlFOFloQjl1bUtvb1RwR1JxTmtLNGZ4NE9XK3UrNENyY0dZcmdUWjV2bUc5VFVqdGZuaXFZWlVXVDZVZzBlRTNoa2lVRzVuQnBnakYxNERYYm8rRFFSYmZwVjEzek1wbElKQ3VjK1ZMSnhHZ2F6eEZ3V0kzWkxuajY1WDUwMHhCMDNvWjBNTDRhU1A2R3ZRWEtidVBNclVxdm1hUWgzVUdaclJVWk5pWW85dFhUUlU3eEdsZFN5cFk0NWJBckxVTE16dEFiNjVpbWRJT2FSRFlwSVVGNUJzSW83S1E2L1V6U3d0STJTZWRTMWs3UW9JWFBTYzBHVEY0dXpXaHhMeHZ3TnhGN2g5cjEyTExZWElkOUZENXNyTy9TMzJiS2VXelpQSnFYL0FNM1FoMXB1ZlN0NzZqaVF2WUVsMW1NMGVNN1RNa3dBQTN0OVNEbTc2WmFYS0xaNTY1dnBPMGl4dmZReUNJMmo1Qk9oVi9rMlBpVjNzUnQ0S3FGbC9tRHVEblV6Nm03VnY3OFJQYjNJMWpQTVhWQ3FWWWlmK0VURkhuVzNyY2hNYjUxZTF1dVZwekwwbGdHVElBVU1hUlVGY0tBRHNJRUUwUUlabUtmeURVbEZaWWNvMmE2LzQzUURDYVhza2NNR09LMnM1S0Z6cVB5aTdzamZKOVM4TlZvamo4b1gxTWp1eWZFRVFJQ1BjV2ltQVdnakxCd2tKcTBPSmppZEhaejJpWTNPWnpzRWtkbnJFTmx5blNOWVlsNXloREtYWWc4ajFicVRDQWhzbkM3eTVLdFFLSnRYbG1JeWhVdThOTExCQlppeXVRT1V5RGJKZEVVbXlEV1pyTDlDZWFhWlloSUg3VVMwdUpYbWViVElpalpCY3JGODAyODZKeWV2N0V5MXhFUU9xc21UdzduS3RkQVVaZXp5VGVEbGt5M1hCR1VaNDNMS3BoN1FISzd4cWVBUWV2dG9jV1JsRXRKbEEwMVJaTXBSS1RWRlhlcnB4VnhGeGI2OG5GN2pzcTdHYmRVMjBCdWVJVkpPd3NmRnE0VFBCSVVTT0xpNEpNclFWejk5ZFpNaGFQQzRXVHNZeWdFblpxczRtcndZS2R4ZXVQbFlLVExKcURTL1Y0bzRoQ28rRHZOUWIvUUkrdkhvcmVmZ01UUE1tNFk1dTA3NVA2SklYaEgvZTEveW53RUEpIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9Ym9keSxodG1se2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjR9aHRtbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItcGFyYWdyYXBoLHB7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNjt0ZXh0LWFsaWduOmp1c3RpZnl9Lm1vbnN0ZXItaDEsaDF7Zm9udC1zaXplOjNyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTU7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDIsaDJ7Zm9udC1zaXplOjIuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yO21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgzLGgze2ZvbnQtc2l6ZToycmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI1O21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNCxoNHtmb250LXNpemU6MS41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg1LGg1e2ZvbnQtc2l6ZToxLjRyZW07Zm9udC13ZWlnaHQ6Ym9sZGVyO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDYsaDZ7Zm9udC1zaXplOjEuM3JlbTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX1wK2gxe21hcmdpbi10b3A6My43NXJlbX1wK2gye21hcmdpbi10b3A6M3JlbX1wK2gze21hcmdpbi10b3A6Mi4yNXJlbX1wK2g0e21hcmdpbi10b3A6MS41cmVtfXAraDV7bWFyZ2luLXRvcDouNzVyZW19ZGl2K2gxLGRpditoMixkaXYraDMsZGl2K2g0LGRpditoNSxkaXYraDYscCtoNnttYXJnaW4tdG9wOjB9LmRlY297YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xKSAwLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMikgNTAlLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMykgMTAwJSk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLXNpemU6Y292ZXI7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7dGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50fTo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX06OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfWtiZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtib3JkZXItcmFkaXVzOjEwcmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3BhZGRpbmc6LjI1ZW0gLjZlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9ZGV0YWlsc3ttYXJnaW4tYm90dG9tOjFyZW19c3VtbWFyeXtjdXJzb3I6cG9pbnRlcjtmb250LWZlYXR1cmUtc2V0dGluZ3M6XFxcInRudW1cXFwiO2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMWVtO3BhZGRpbmc6LjZyZW0gMXJlbX1kZXRhaWxzW29wZW5de3BhZGRpbmc6LjZyZW0gMXJlbSAuNzVyZW19ZGV0YWlsc1tvcGVuXSBzdW1tYXJ5e21hcmdpbi1ib3R0b206LjVyZW07cGFkZGluZzowfS5tb25zdGVyLW5vLXVzZXItc2VsZWN0ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX1Aa2V5ZnJhbWVzIGRldGFpbHMtc2hvd3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41ZW0pfX1kZXRhaWxzW29wZW5dPjpub3Qoc3VtbWFyeSl7YW5pbWF0aW9uOmRldGFpbHMtc2hvdyAuMTVzIGVhc2UtaW4tb3V0fWRldGFpbHNbb3Blbl0+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5tb25vc3BhY2V7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2UpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIGJ1dHRvbnt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1idXR0b25de3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnR9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2hlaWdodDoxMDAlfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IERlYWRNYW5zU3dpdGNoIH0gZnJvbSBcIi4uLy4uL3V0aWwvZGVhZG1hbnNzd2l0Y2gubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXIgfSBmcm9tIFwiLi9wb3BwZXIubWpzXCI7XG5pbXBvcnQgeyBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0sgfSBmcm9tIFwiLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXJCdXR0b25TdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9wb3BwZXItYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgcG9zaXRpb25Qb3BwZXIgfSBmcm9tIFwiLi91dGlsL2Zsb2F0aW5nLXVpLm1qc1wiO1xuaW1wb3J0IFwiLi9idXR0b24ubWpzXCI7XG5cbmV4cG9ydCB7IFBvcHBlckJ1dHRvbiB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0aW1lckNhbGxiYWNrU3ltYm9sID0gU3ltYm9sKFwidGltZXJDYWxsYmFja1wiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZXNpemVPYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcInJlc2l6ZU9ic2VydmVyXCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNsb3NlRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwiY2xvc2VFdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbnRyb2xFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29udHJvbEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGJ1dHRvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJidXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBvcHBlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJwb3BwZXJFbGVtZW50XCIpO1xuXG4vKipcbiAqIGxvY2FsIHN5bWJvbFxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGFycm93RWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImFycm93RWxlbWVudFwiKTtcblxuLyoqXG4gKiBUaGlzIGFjdGlvbiBjYWxsYmFjayBleGVjdXRlcyB0aGUgYWN0aW9ucyB3aGVuIGEgYnV0dG9uIGlzIGNsaWNrZWQuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVBY3Rpb25DYWxsYmFja1xuICogQHBhcmFtIHtFdmVudH0gZSBFdmVudFxuICogQHRoaXMge0N1c3RvbUNvbnRyb2x9XG4gKi9cblxuLyoqXG4gKiBUaGUgUG9wcGVyQnV0dG9uIGlzIGEgYnV0dG9uIHRoYXQgb3BlbnMgYSBwb3BwZXIgZWxlbWVudC5cbiAqXG4gKiA8aW1nIHNyYz1cIi4vaW1hZ2VzL3BvcHBlci1idXR0b24ucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKiBhcyB3ZWxsIGFzIFtwb29wZXJqc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLXBvcHBlci1idXR0b24gLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItcG9wcGVyLWJ1dHRvbicpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLXBvcHBlci1idXR0b24+PC9tb25zdGVyLXBvcHBlci1idXR0b24+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0IHtQb3BwZXJCdXR0b259IGZyb20gJ0BzY2h1a2FpL2NvbXBvbmVudC1mb3JtL3NvdXJjZS9wb3BwZXItYnV0dG9uLmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItcG9wcGVyLWJ1dHRvbicpO1xuICogYGBgXG4gKlxuICogVGhlIGBkYXRhLW1vbnN0ZXItb3B0aW9uLWNsYXNzZXMtYnV0dG9uYCBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBDU1MgY2xhc3Mgb2YgdGhlIGJ1dHRvbi5cbiAqXG4gKiBAc3RhcnR1bWwgcG9wcGVyLWJ1dHRvbi5wbmdcbiAqIHNraW5wYXJhbSBtb25vY2hyb21lIHRydWVcbiAqIHNraW5wYXJhbSBzaGFkb3dpbmcgZmFsc2VcbiAqIEhUTUxFbGVtZW50IDx8LS0gQ3VzdG9tRWxlbWVudFxuICogQ3VzdG9tRWxlbWVudCA8fC0tIEN1c3RvbUNvbnRyb2xcbiAqIEN1c3RvbUNvbnRyb2wgPHwtLSBQb3BwZXJcbiAqIFBvcHBlciA8fC0tIFBvcHBlckJ1dHRvblxuICogQGVuZHVtbFxuICpcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIHBvcHBlciBidXR0b25cbiAqL1xuXG4vKipcbiAqIEEgYmVhdXRpZnVsIHBvcHBlciBidXR0b24gdGhhdCBjYW4gbWFrZSB5b3VyIGxpZmUgZWFzaWVyIGFuZCBhbHNvIGxvb2tzIGdvb2QuXG4gKlxuICogQGZyYWdtZW50cyAvZnJhZ21lbnRzL2NvbXBvbmVudHMvZm9ybS9wb3BwZXItYnV0dG9uL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vcG9wcGVyLWJ1dHRvbi1zaW1wbGVcbiAqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGJlYXV0aWZ1bCBwb3BwZXIgYnV0dG9uXG4gKiBAZmlyZXMgbW9uc3Rlci1vcHRpb25zLXNldFxuICogQGZpcmVzIG1vbnN0ZXItc2VsZWN0ZWRcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZVxuICogQGZpcmVzIG1vbnN0ZXItY2hhbmdlZFxuICovXG5jbGFzcyBQb3BwZXJCdXR0b24gZXh0ZW5kcyBQb3BwZXIge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3BvcHBlci1idXR0b25AQGluc3RhbmNlXCIsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgLSBUaGUgdGVtcGxhdGVzIGZvciB0aGUgY29udHJvbC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIC0gVGhlIG1haW4gdGVtcGxhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBsYWJlbHMgLSBUaGUgbGFiZWxzIGZvciB0aGUgY29udHJvbC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5idXR0b24gLSBUaGUgbGFiZWwgZm9yIHRoZSBidXR0b24uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250ZW50IC0gVGhlIGNvbnRlbnQgb2YgdGhlIHBvcHBlci5cblx0ICogQHByb3BlcnR5IHtvYmplY3R9IHBvcHBlciAtIFRoZSBwb3BwZXIgb3B0aW9ucy5cblx0ICogQGV4dGVuZHMge0J1dHRvbi5kZWZhdWx0c31cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGFjdGlvbnM6IHtcblx0XHRcdFx0Y2xpY2s6IChlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy50b2dnbGVEaWFsb2coKTtcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGJ1dHRvbjogXCJtb25zdGVyLWJ1dHRvblwiLFxuXHRcdFx0fSxcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRidXR0b246ICc8c2xvdCBuYW1lPVwiYnV0dG9uXCI+PC9zbG90PicsXG5cdFx0XHR9LFxuXHRcdFx0bW9kZTogXCJjbGlja1wiLFxuXHRcdFx0dmFsdWU6IG51bGwsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUG9wcGVyQnV0dG9ufVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItcG9wcGVyLWJ1dHRvblwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdGNvbnN0IHN0eWxlcyA9IHN1cGVyLmdldENTU1N0eWxlU2hlZXQoKTtcblx0XHRzdHlsZXMucHVzaChQb3BwZXJCdXR0b25TdHlsZVNoZWV0KTtcblx0XHRyZXR1cm4gc3R5bGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG5cdFx0Zm9yIChjb25zdCBbLCB0eXBlXSBvZiBPYmplY3QuZW50cmllcyhbXCJjbGlja1wiLCBcInRvdWNoXCJdKSkge1xuXHRcdFx0Ly8gY2xvc2Ugb24gb3V0c2lkZSB1aS1ldmVudHNcblx0XHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblxuXHRcdHVwZGF0ZVBvcHBlci5jYWxsKHRoaXMpO1xuXHRcdGF0dGFjaFJlc2l6ZU9ic2VydmVyLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHQvLyBjbG9zZSBvbiBvdXRzaWRlIHVpLWV2ZW50c1xuXHRcdGZvciAoY29uc3QgWywgdHlwZV0gb2YgT2JqZWN0LmVudHJpZXMoW1wiY2xpY2tcIiwgXCJ0b3VjaFwiXSkpIHtcblx0XHRcdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgdGhpc1tjbG9zZUV2ZW50SGFuZGxlcl0pO1xuXHRcdH1cblxuXHRcdGRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uY2xpY2soKSBtZXRob2Qgc2ltdWxhdGVzIGEgY2xpY2sgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9jbGlja31cblx0ICovXG5cdGNsaWNrKCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmNsaWNrKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmZvY3VzKCkgbWV0aG9kIHNldHMgZm9jdXMgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9mb2N1c31cblx0ICovXG5cdGZvY3VzKG9wdGlvbnMpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5mb2N1cylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMob3B0aW9ucyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uYmx1cigpIG1ldGhvZCByZW1vdmVzIGZvY3VzIGZyb20gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKi9cblx0Ymx1cigpIHtcblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYmx1cilcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYmx1cigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEVsZW1lbnQvYXR0YWNoSW50ZXJuYWxzfVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0c3RhdGljIGdldCBmb3JtQXNzb2NpYXRlZCgpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgY3VycmVudCBzZWxlY3Rpb24gb2YgdGhlIFNlbGVjdFxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItc2VsZWN0Jyk7XG5cdCAqIGNvbnNvbGUubG9nKGUudmFsdWUpXG5cdCAqIC8vIFx1MjFBNiAxXG5cdCAqIC8vIFx1MjFBNiBbJzEnLCcyJ11cblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfGFycmF5fVxuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBzZWxlY3Rpb25cblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXNlbGVjdCcpO1xuXHQgKiBlLnZhbHVlPTFcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfGFycmF5fSB2YWx1ZVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgdHlwZVxuXHQgKi9cblx0c2V0IHZhbHVlKHZhbHVlKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJ2YWx1ZVwiLCB2YWx1ZSk7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXM/LnNldEZvcm1WYWx1ZSh0aGlzLnZhbHVlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLm1lc3NhZ2UpO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtpbml0RXZlbnRIYW5kbGVyfVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHR0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblxuXHRcdGZvciAoY29uc3QgWywgZWxlbWVudF0gb2YgT2JqZWN0LmVudHJpZXMocGF0aCkpIHtcblx0XHRcdGlmIChlbGVtZW50ID09PSB0aGlzKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5oaWRlRGlhbG9nKCk7XG5cdH07XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYXR0YWNoUmVzaXplT2JzZXJ2ZXIoKSB7XG5cdC8vIGFnYWluc3QgZmxpY2tlcmluZ1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG5cdFx0aWYgKHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gaW5zdGFuY2VvZiBEZWFkTWFuc1N3aXRjaCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXS50b3VjaCgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gPSBuZXcgRGVhZE1hbnNTd2l0Y2goMjAwLCAoKSA9PiB7XG5cdFx0XHR1cGRhdGVQb3BwZXIuY2FsbCh0aGlzKTtcblx0XHR9KTtcblx0fSk7XG5cblx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZSh0aGlzLnBhcmVudEVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIoKSB7XG5cdGlmICh0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXSBpbnN0YW5jZW9mIFJlc2l6ZU9ic2VydmVyKSB7XG5cdFx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0uZGlzY29ubmVjdCgpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdXBkYXRlUG9wcGVyKCkge1xuXHRpZiAodGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXS5zdHlsZS5kaXNwbGF5ICE9PSBTVFlMRV9ESVNQTEFZX01PREVfQkxPQ0spIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiLCBmYWxzZSkgPT09IHRydWUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRwb3NpdGlvblBvcHBlci5jYWxsKFxuXHRcdHRoaXMsXG5cdFx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0sXG5cdFx0dGhpc1twb3BwZXJFbGVtZW50U3ltYm9sXSxcblx0XHR0aGlzLmdldE9wdGlvbihcInBvcHBlclwiLCB7fSksXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09Y29udHJvbF1gLFxuXHQpO1xuXG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWJ1dHRvbl1gLFxuXHQpO1xuXG5cdHRoaXNbcG9wcGVyRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PXBvcHBlcl1gLFxuXHQpO1xuXG5cdHRoaXNbYXJyb3dFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09YXJyb3ddYCxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiZGlzYWJsZWQgcGF0aDpkaXNhYmxlZCB8IGlmOnRydWUsIGNsYXNzIHBhdGg6Y2xhc3Nlcy5idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIHBhcnQ9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmJ1dHRvblwiPjwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwicG9wcGVyXCIgcGFydD1cInBvcHBlclwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cIm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImFycm93XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwiY29udGVudFwiIGNsYXNzPVwiZmxleFwiIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpjb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFBvcHBlckJ1dHRvbik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgQ29uZmlybUJ1dHRvblN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IENvbmZpcm1CdXR0b25TdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0Q29uZmlybUJ1dHRvblN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgY29uZmlybWJ1dHRvbiB7IFxuLmJsb2Nre2Rpc3BsYXk6YmxvY2t9LmlubGluZXtkaXNwbGF5OmlubGluZX0uaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5ncmlke2Rpc3BsYXk6Z3JpZH0uaW5saW5lLWdyaWR7ZGlzcGxheTppbmxpbmUtZ3JpZH0uZmxleHtkaXNwbGF5OmZsZXh9LmlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXh9LmhpZGRlbiwuaGlkZSwubm9uZXtkaXNwbGF5Om5vbmV9LnZpc2libGV7dmlzaWJpbGl0eTp2aXNpYmxlfS5pbnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja30ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpSYWxld2F5O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFGSjRBQklBQUFBQXQzQUFBRklRQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHb0U4Rys0NkhJVThCbUEvVTFSQlZFUUFoUWdJZ1FvSm54UVJDQXFCdWd5Qm1uQUxoQ0lBQVRZQ0pBT0lRQVFnQllVVUJ5QU1neHdiZmFRWGFKZWZtTnowWm9sM3Y2MGNQZVpNcEc0SEpTams1cUlJTmc2Q0dNZ2xaZi8vbjNGMGpPR0dEUkExclhlSW5jSklVa05IR242OXFNUkRVOFphampzOVVic210bnFuRTN2M3ZxaVFtZlJRcExrS1c2UVp3YWw2czVJVWlKTlVTVUcvT3dvRFk2QjY3NU9qU2prRFNTTXUycGVkcHU5dkpJTFVsSmQ3MDdEK2VMSHBqWURJNGUxdURuTGpISHZ4cERYR015ZHVMTG4xcXQwRkNRT3lGc0paRTEra0pxM1QrSWU3QkpGSU5PQU5iaTl2VFV6aEk3VzRHbVVMMGxXalQvRlFRaS9tKyt4dVBQMDJvbVJIZTVwbjREZ2ZOWmZuK1I5ejk3OXRtRWVOYXExUnhScUhUalRQTkEySkZFZ3JIZG8vbnQvVy81emJnR0N4aWE2RWtWaUEyRmhZR0l0Um1FMVp2VlV2cXRTdGI3TXZyZDNXNyt0MiswWGRvVG56empZYnA3bVNITEFDa2hNV2dDVEw2czBXdjBBVW9oSmZFcUUzb3BQZDU4aWtKbktsbyszdWFlU0hZSjZmY0ljWGpkK3JLVUVzYUVsVHFsVWxWUm0vTitlLzhpUDBMNUFLb3pObEozLzlpQndzaE02djVKSVVKeWtnVDNmZHJPbXE2TGNzK1orcS9Yc0FYRnhFRWlRSVVhS29zRm43Y3RUKzdCQlM1ZHFEb2xKWHVuYmw3cnR0ekQvdjM4NExmdEphZ0ZGQUxZUEU1QTdnbk1yWkJodDRsWHFzYlpLbWJkcTBUdE9tcG1nTml1Z00yUFlCYzczTXJqcTdHTHNvWEhjVHB0OXVQdkZEejhlTjNnK3N4clBRQXc2RFRGTnAvT1pJOWlpbk5pdFpoUm1wUU9Da2RvQmRBTmpWV2xhdk1pdHdETkpYL3BZSUFrVnduT1Avdlc1eHpvTXc3U0FGQUtVK1p6L2tuUC9aOWorT2Rmckw4S2UydmRLYm1waHV4SlN1TDhFVUFnZ0hJaUJIUCs0NDRFRHp2MVBUUTNZa09jT1NsVEhtajZVc2RmbzJMKy9qcFllN0lIV2NRVWdjZ2twTEZSMVlUVzhDR0tRWDliOEdGQUFBSDl0bzRSSFE2R0x2RlJyaTREaXdUekFBRERNS0RQci9mWjNWL3FkZ1Bta0d6S1RFbVdFWGI3UTN0dGdUWXFvMm5QNi8rOTdYZitGLzlKSEFWc0lJY0FDQlp3UnlrR1Q3Z0NSOFZvaEpjVU9PU0RqaVNiQXBoTW96bTJKUnB0QnRVVzY5WGJORkczSVZ5MktMb2s0OC9MZnNtNTI3SWFxQkxNdUJiT0ZJd2VGVWQwMXZlTCtZOHhXaHR6Y3FUbTJDSVRjNWVMSndTSTRmWWxMWUZJVkhBcy8vVDUzTjQvWXgxaEtHVStIU3FFcmRwUFBuczZmcXFXSnNOYlphQ2xRdGpsT0xVTXNoY2RvQTVUUXNzNEpMYzkwU3hDT01NVUs0S1A5TnNocHpwWDR2d3hLQ2hDQVNSRVJFL0xLc1dSbEp3TktBY1RuWEFoRXkzcjFLSGNaYS9ZZFg1ODQyMC9pYVhtdEdob0NBaUlpQVIyM3YvUDkrS1RBQ0FONWhka0MzeFVDNEVMc2dndmtSMmtyRWpZU0V2MEJLU21IQ2hJdllPQ0FKa0tRZ3lZTU0yUW9VTXpDbzE2Qko4NXFBV0NDZEhlazNBQjBPREwxTHEwUGdUZTNoU3cyZmhpNFhoUHVldVFXRUg2eHRJRVFBYkcyTm01b1Y1NFFGUCt5S2dPMkQ0VDV0L3d6MlhXOTIvcnBxcExUU0lQOHFWOXZMdk9kczBOTFd5WDUxSzZvZmJ2UFpFMXBhZjd3MzE4QzladGhxN2YzMmJmdUw2NFZaSHc1MTRZc201bGdmTmJmRzdXOWxzVUE0RUd6NzIzdnh3R3pwNGZSUittUDhMczVCN0tCMmVESlhjNnh3bEc2OTAydWc3QXpMQThOWTIxQjJkQi9QNXFmT1Y4dDFvbnlMNWpaRERmUUk1Umc4RDk4RnZIc3ZjbEh1SnNyZHZzSnJwYy9Uci9ndS9FZlpKelhVenBXYURqN003K1VQOC84RWtBQVZhQVMvQ1IrWHMvSk40WWFJY08xeEhaY1VhTU1ia2xycEt5N05mUUpLUWNVUmFnb0dtQ1crSEE2RU52YmczM3NsMnBJWVJtRTliSUhiMG1BNmtrNmxONUdkeU1ONUVibVFoeEhLbHdNZ1Q1OGNndzdwZFVSejduZk1jUWZjVTN2SWN6VmtkcmhYOFhIcTQwMTJ0Rk9kN2tUL2E3cDdtODNXQTcxRjdhTzlNK2RqdmRkNmo3ZnhtK0QxUHUzejN1aXJ2bXV5emE1M3RydjkzbFRiODJSVDJLYUZWVUtNTlAzNkJ2UU1DbzBHc0Vka0w4cyt6TGcxRXhiTTBOZ0NXQXhnemY4MkRHMUtYTWZjNHJqTmNRZkhLeFNDdVJ1Qkk1QW9kREREa0dkVjhDblZWRW1FTWFpbjRTYTBBWFRJMFJCTnBPWUFMVnExYVY5dnhKaVV6SEtXQ2lzNm1wMEJ1a3gwNjlHcjc0c25WTmJzb0Nta1ZNb3A1K3BER2FXejJzTERyMmlOdCtvWk8wYjM2WVNJaldjeHZubE4weDBWaGxZb1c0VVJqWFhLeUxHM1kzcW9MZEVhekhBRUVvVnVNbDNERGVFUlZwRy9qZVRFUjBDVVpFVTFtb3RxRm9pd0pGS1VhREZpYWNTbEJKckVqU1FLSi9DU0ZTbVNLazE2MVFsa2RLZXlTWFl6c2RYS2k2STlpa05KTXRDVUtsT3VRcVVxMVZIVDF6cTYrbHpmUU5BSWE1SnBSb3ZXYUVQN1p4dU5tVGpNTEJZdXEzWFVUZ05kUkRkNlVxOUEzM2NieEF6eERET04wSXhhTlZheGQvL3MvYWp4QUU2Sm5QYkZHWmt1QzN1YU5VOEVzRFNMWlZteE9qMVBkOEhReFhTcGVka1hhd2JXNndabzgrNkRyaXVRRkZ3NUlwdm5KaDYvWmdGSks5MzBhRU0yWEozeUpCMERIb3BoYnFnMHVya3ZNSWdZbHRiR1JQY2RrZDdWai9OVjRwYkFiYSsvRTRCakNnOXA1WmVyaS9wZE0wQ0cvN3RYWk54VkUrNmJZYXZRbjZ1bVd3eTNGWGY2Z2crWG5BdEhEZ2prUE5pVWJxcG93dkRVdmJSbGNqNVhaSFl6VjhKaTRObDF2anNPaHJNYXhPSHhlRHdlanovVklISlhuNkgwd2hnNnFGT0VVcVFvMFdMRTBvaExDVEtKMHlRNUxVOXlSUXBTcFVsZlpuQVNCa1dwbENsWG9WS1Y2cWliVEJ0TW1RS1lZV0hWVVVmdEdJdDYybGRuTUgzRXBpVTBxVlFxSGJDTHhPVStFNC8xWExmQkVoektoZ1VjZ1VTaGZ4d21EejlHNUVSQUFITDdGSFJLUXlybnd1eFFmNXJoSEJFQlJJb1NMVVlzelViYzRydE1kcGwyNkZnZDU1dGdRRzh4L2ZBWjJKekl2R2JtbHJjWEFtM3dYS2E3RWxmUGNTMnR4ZnErZWdmaUhHb0RNeHlCUktIdnkzU0ozMFE2VjgrNm1kZlpzYUZWM2VPVUtzV015bmtoeUwxdTRWSTBMMVNKTEl4WHlZenBMeU5xaVd6MFhUcGthVHluMVpEdGk5MG1ZMDJ2MHRVcXR6U0NsK3FySzdySXV2MXY5UkQwc2d4cUdiSm9HR2ZFa2xFMVl6cjI4TzFsMktld1g5TjRBRGFOMWI3TDBJYVJUWE91eTl5aXU4MnBPd0hRQkMrcGxkQ3JPbUswTWcvcjF2UllFbTNEQkVjZ1VlZ21VeDAzRzQrd2l0UWdPZkVSRUNWWlVZM200dG1FSXZ3VUtVcTBHTEUwNGxJQ1R1STB5VHF0RmNsRUNsS2xTYTg2V0VaM0pKdnNGV2k3SXhLSk9Cd09oOFBoY0VUclJOM3REcGxNSnBOaFJJYWlxQWlHWVJnbWNia3N5NE5vei9yb2ZRTDdLY2FsTkQwRk9XM1JHWnVPQlIyeG1WTXhrVWdrRGwwWDd1Sml1dFM4Yk5HYUUrdi9aUU93cWU4NkdJSWVFc0N1b3ZXWWZDcTJ0dnBNT0JON016TzY4R1dYTGh0bWdXMmZmZUhwMU11N3F3WDVORHdUa3BDU2NlZkJreGR2ZmluQVJJUklVYUxGaUtVUmx4SUFpWkUwclZxNjVJb1VTWlVtdmVxVU1ycHMvejFaV0VaNVlCZ0dBQUFBQUFDQTBXWnNkMUNwK0h3K24yL2NPbGs0ckRwU2wxSzNIcjM2amcxQ1R0d3pPY051Q1hZTmdpRFlob3RIMW9nT0xSU3V4OG5pbDRyMmlZYXYwbm9yelh2WjJuWmpaTGZhS0QrVlJnSC9mZ05tcGtGYmhnaUdpVWFjR2ZYTm1LNDlGUHZZOXR2YmNUbTc1KzNmZGFtVzZZU3R3a2R6YUNIWmN2cTBDUzRpVTVabU54TFhHQmUvclFvSGpNUDEvUUVHVk1aRkpnYkRESi81VDNleUJjdkdQU3FUaW1KY0MrWVFVanFHdjJuQzdxM25CMERPcXYyRzNWdmxJaEtJVzhNUlNCUzZ5WlRpTkdGWCtSR0NESHM4UFlJZFRqZEFVQXl2UWt3U0NwcGhOZDIwbXB1TWpRWEtCUWtXSWpRcG1KUlVLWXhLWGNMRGM2a0lmSGFUS2FPTVNjNE1zVlJZUTBlelU2RkxwVnVQM3RMSHV3cHJZZnRoaXdpSEZBV2tTcG1XUnQrNm5KNlUxOEN1eUo4NWoyeDBiMGQ3TjlwaWJxMGxiNE5uVStwTzd0RVVMaWhkVU8yaHJwdGdZWENzeEJGQTNsUTJubUZjM0ZiUmpHQmdDZDZCVUg3cW5YQmJhY2pzSzk5UmZJRE1BRmtCc29PK25aZzhQMEJCZ01JQXRRRWFuOVdRRXM5TUFITkc4NTU0d2ErQXJucXZUVGpwR1M3ZS9pbFBtakFSUG1uc3hXa2RBQVJ5T0w5eUFoeW14N1NHS2xrN0doNDh2RHZOZmRnK0lUQlpwRDlnemdNSUJ3d0JrNXRta0VYSXFxTU1hRVRnL0hVZTI2b0xUVHA0dzRnOVVrWjViZ2J4RUh0Q3lUTFlQSG1KVXEzdUpwcXp2U05jdW1iQmRYWVFza3UxQzkyTjhqVHZERkVVMHJ2ODE3Z21xc0dqUGZSdU5qdmVyVERtSENFNHErcWJ6T2p1SUl2UmFEaHpaMS9WSlVwaGhpT1FLSFF3c1o1VGpndUFCOEN1S3IrWUlNS2V3SW9NTzV4eDllNEFFQlREU1lwbTJPVHk4b0lveVlvYWplalVRYjhKd0QvWEI1aVNzd1VpZ2hBc1JHaFMwQ2d6SnpYTUNUVTFYRVpIYVRBWFRDUVNpY1hiWTRWQ29SZ0xFeHN0bGRDdHhaMWFVbmx1dEdodE9RdDE4L1JVZFZwa0RCdmJTNG5Fb05Gb05CcU5GaWRYbjBXSkxKQ3JVOENVYnFxTWhaR3BtK0Y4RWJCSVVhTEZpS1VSbHhLRUVpVlZMVk55UmdwU3BVbXZ1Z0FaaEFHbHlwU3JVS2xLdGJwbUE2d3JRTGNldmZxYUU3RFRXczZZSG0wRTJkY2xpV1dzV0Uzbm1TN0c1YjZ1R1ZuUG5OdXl5V2JId3hEanBXazZNK2oyMGVZTUxRLzAzVk1tS200Wm5nbEpTTW00OCtESml6ZS9LcmRDa1ZNbEtzeUltbWVaZjBHUXl3SkJFRnhDL3JnZ0NJSWdDSUl6OTBiREV3TVRqOGZqQVVBeGRTNlZzRGNzMWc4d2ZZQ1hyTmQ5OFNIOGdhams1dnVVUHFnNFhEUDlKbTdvR1d2R1h4U2RFTExmcnNFU0VzbVdYVGNNM2NMdEhGU0diU0hCQWpjQ2lVSVhKcUhuTWxPTFJCTGFzblVLMlN1eDF6cW5NQi9aTUdPeC96UHU4b2hEQURBQU9BQUNBQW1BQWtBRFlIZ2xDa0N1TFZBaVNJS0ZDUDBraFdOS1BGVXdiZHlMK3NEQnllZ2thSjJXRU10V3JFNi80dnBXN0c2ZTRtRHcwQmZ4WmhGdDlHdmZoUEVBbXlkNGNNdFVxc1BsNGF5N0d1YWs1dDBONTJPT3dKYUJnU05Ic2syTmg3cUVXWllWcThlK2tzeGpqM0VLU1hnOExOaWxRcUZRekUxZnY1dHZwUVFGdEZJbXlMdGl2VGVXa1FDazVaUmUyUWlKMlpyTFlEVjg2TUJZV1g1eEFQdW5rMXludFoyeDZhYk5yaVhBc2hXcmNma1U2M3kvai9tK2duek44STNZdHh6ZkNlT2lBUGk3WWgxd0JCS0Z6czcyV3JsaWZXYjNuK3NPbWtTaXpYSFRYcG12QW5PZ2VhKzdTOEYxRUhQOG5VNEluRlk0UTVtV3AzQkFMbGVzYTdCejRGdU9iRTRFWFJuaXlrOGh0Q09pazh2bGNzV1lJS3I0L2NITTNYWEljY3lPRHNCWEg5UjNOSUJqVXNkMWZpZGowaWluSDVyaVpmVU9EVGlGUXVsemVheDcrakhaVnl4ZjM4VTN4TGRyK1U3dTQzSDU5S2VnSzk1SnZ3dnlxbjNJZ3hMeVVHMlk0UWdrQ3YxQlREK0l2Q01QTWcwbFZZUkJuU0lRa2FKRWl4RkxJeTRsQ0NUMmhtMHNFQWdFSlREcnFiNGdKMkpZb3pTVUtWZWhVcFhxYk5yWitaaGVqYis1ckhyR3pjY0xRaEpTTXU0OGVQTGl6YS9LelFuTUNFS3dFS0ZKWVlHeU55SzFsdEpVL0o2V21GeFVxTHNJblhTczM0czRBSm5UTlA5SlY4MVpXMDhid294d2pNb0dnKzFnUFB4d0FNZVprQkVFK1ZzdXBzeG85Y1dTNWl2bmFTVXBGSlExVEVidGV5S2pNQUxsU1FoNlJLM2dDQ1FLM2VRVTRqYkVDN3VxL0F5Q0RIdUNCUVRzY01iVnV3TVVCQlREUTl5UUZNMnd5Um55RVN4S3NxSkdVM1JpRURQWEw5RFo1RjRJcEF1U1lDRkNrOElHWlZNRkNkT2tMdUUxSUtWRmxHZ3hZbW5FTmVOQkNWU0prbkpFaitTTUZFbVZKcjNxbURLSXpHbGtTYmJkOUhMazFmeCszZStWQ3BtS29oZ2x5VUJWcWt5NUNwV3FWS2NhVUczVWxmcG9rTWJheE5Bc0xWcTFhVTlHSWxPZnZKbE1wcGpKWkRKYlJqdGFOV2svcnpXb01JSWFOV2VzYXV0MDN5TU8yUHhJSTZNQkU5MXFmb0R5eENTd2dDT1FLSFNUNlFWdURoNWhGWGxwdHJnTWp5QktzcUlhTDE3R2Nka0E1OEE4Z0NZLzMyUExid2tuQ1FCQU5tdEN3Nk5vQnJWSXF6YnRPVXNXVTQwNWxDd1oxdER4NXAxbzdURWRKQmdTR0w3NzdCRWpvOTRhbzlvanRLOWJ2NS9oQU04UmE0NlNqZ21kZUx6TkRNaGlVSG51N1FtRERCWitJVUZpVGNKb0hjbElrU3BOK21aR2NUY0g1SWNCcGNxVVIwV29WS1U2NnFaM3VzZWdGM21uK2JGbHJpcTlCbW1uVjdQYjdHMFJ0Q2FzT3dLUVpFZ2g0ODZESnkvZS9KNkpyejJydnoxMThQazhQcC9QNXkvOU5QSmlyOWdKd3lsS3JVeTVDcFdxVkVmZFZGTnRocldnVlp2MlpJU1llcmVCb0pkSEtlYWVnMEo3VUJlcVI4U08xYW4zcEZBTUtMd0l0VlNKKytGbW5pSEVzRkVRVytwZWtvTTVIcWY1MGx4QkxMdjl6Q01BWlRQUTE3bjlYNWtIRlg3YzZRMkp2YitLU0lzU0xVWXNqYmhtdkpFRVd4TEhKRFhNU0s1SWtWUnAwcXVPSUtPTHpHbGtTYmJkOUhMa3lWZWdNQlc1VUt3a0dXd3BWYVpjaFVwVnFxT21qOXA1cWxOVDMvLzF4c2lBUkNLUlNBQkFCUURBZ0VBZ0VGNGtjSFBBNHkvZjJtN1lHbzVBb3RDVlNTSWFUZVZHRkFBbHgxUklaUnZHYzVqMEpJZW9jeHp6cEt0Y2F5Y3hJMWhTeVYrNjEvR0N3dXpBTWZRTXc2TFRLZDhvc0ZBY3JOVkRQSWVGczZMSEZ4bE55dGllRGpiOEdPUVFiaFNJdGowMmdJZzhPVmJVZmdGL0d0a2FDc01NUnlCUjZENTVtY1BqTGJZa0k4SjB3SndYZi9NMW5vOWRqVFZkV2hwaUQ0TWprQ2owR1lZNmtZMU41UTRFS2dVaFdJalFwTkNqYktvU0NOT2lYb1piVkY5L3pzTGRHWUdnVmJNendKd3o4K21xVTJzalkxQnJjamwzZkcvc2Z6NnE3b2cyWTM0dmZwZFVoZS9DWjJISDh5QUEveFE4RDNteUFJRE5BVnNDQUpiWm54aTJjSDVzMmNSSndWYU9tMldXc3RQR1p4WVpBMUtJUjdtdDNBekFtdGtGVUk1aWxEY0FtMlF3b2pGWEI2cjNJc0J5VnE1bCt0TmFiY3RyRitRckFRK2xraVVXemlIR0tXYzV1MUZVZE1LTWhueGl4bkFVNGxrYUFuby9uaHVTY0VuSHJRNlFFZG9SMkZJUTRHRm5ZSGtmQmdKVHdObDQyclFIN2RWNklCS3g0R0RJUFRTUEF0WUhjdWEvVXplUDFlcFpKTmF0T0FTcUZFUWtZQ1dTaktvbWN2SjRRL2xZbVI2YldpRVdXVklGQU5hSVRPVncyWlZIenI1TXpDLzBpL0Qxa3dFV1ZEL3pUOWI2REc2MzJpSzRVcUM3VFAyVU5ibmtFWTg2NFhZaUtsVytCUzNGVUt4SERRWW8rOEI5eXoxdzRoMDdCYTRRa2t6TDBMR0pHSXJyWitjTlh1QjNQdzZjZWRwQU1VNkd6UlFxRFc3bnRCK2NXaXNGeW8zV0NtUWpMME1tWG9CcU5XUkZJWkk3Z0RYaHRTY3Q4THBCZmtIc1JRNlhwVmZJUnZaQlU4cDg1RjRoSDhFS254bUVZbXUrSzZjWVkzZ1FlMSsvVHpKQUlSRjFjS3ZObW4yUTBNOGFPV3NYalQ5anZCQ3I1MjF4cXRXVkk2YXBMcGVoS2N4WnVXOUJXTEozUUdxZjlKVGl1dnZVMHdkZ2h3LzhJQlJJWDFWdU5ReXNCcVN0Vk5QWFpEdEwrTml2Y3dpMVBnRC81TzBveW0ySis3OG9uMHJ4Z0E5T0NsYTBnTjBKRVBIWS9ZUDRuaElhd2JFSjJIbFVuUjlEYnpmV01QQXZ4a3J0QTE0eDZqckFtWVVjZ1JmUmxabm5ZeHMyeStvd0xEd2tTMlZrM2RmakFBVVZJSmV3RDA2dHorQXV3NnBJcXhUbDRkbWpvR2xZUVhETWIzMUZKUHMrNjdqOVJOZ3NIWWd3d09jWXR1Zks2VmhDTE11YzRORlRidjlwRVFqRk5qTnIwTFdBSkIzWEdIbTR4N25CUmZYbUhRaFEwYnpxbU90VlRueWVTNngxSGJDL2Fyai9YZS83cU1PbDdNMGVVbkRQZ2h5aXNGOHFJb0ZiaGZFZ3F5RDRvM28ySzVSTHJNSllDYUM1Z3JId3VwRE5zVm9YRkkzKzlXWVBhMWx3dk9wOTFmdmFuR2hvbUppcDk3dXBOSG1PSCt5YjEraExJcGRkcjIxUmlBMTNKaWI3OWs2cFRCM2RGQW83MTRwUTF5UlpiVFhNeWRBN21RRTlSRkdoTC9PeHJIamRSbm8wWGRmOXlFZTBuWEZmT2VyelkrRE8zZmlCV0JGTUFtcUZiT2Vna0FxWFRWbzVmUzY2eU9JVmxMQ1NkY3A2OHVlNHlKZWxoVVB0VTZWbTJqbk5BUHF3V2FObm52MXc3SlA2eFFaYXdTSVBsT0ZNRVVHdXpQQ0JiMmRKVXlnWTZROXdyNkpVakpyNk5aY2JFWXdML2N4WmZlYzgyTE9zTUs0OXhYNjI4UDhOcTNUREVjSUFQWnd3aEx3NThoUEtrNUpTb0RCSmdpVExFU3RQQTUwbTdTcVltTlN4NkZOdjBpU2pVMDR6bVRiTllzNENxemZKZmxtQy9ZWkpnTkJ3REFhQmk4ZUJIVDVIQWs0SVFrS3VSRVIyY2VIQ2pTdFhZaEplTU42OEVmejR3Zmp6SnhFZ2dKU2NuRXlnVUF3bEpYZGgxSnlFQytjaGdnWXBUaHhLdkhoMkVpUnlsaVNKcDJUcEtEbzZXMlRJc0ZXbVRGNnk1RUR5NUVNS0ZQQldxQkJma1JJQ0JsVm8xYXBSYXRTeVU2Zk9WdlhxK1dqUXdGZVRKbjZhdGVNd01mRm4wY0ZlcDA0QnVuVFpvbHMzcEVjUHZsNjlrRDU5K0NaTjJ1YVVVNFJPTzQxcjJqU3VPZk4yV3JCQTZFMHlaTWtNNGJ3NWh3c1duQzVhY3Joa3hlbXlOWnNyTnR5dTJ2SzRac2R0elo3SE9zd0dFd3Voa1JpTTdUZzRFQzRlbkIxbmlKQVFib3VkRUJHUkhWeUlJUkxlY0Q1OElYNzg0UHo1UXdJRTJFbE9UcVFSWEhBUTE2VTRoQzdnZ0NFQWcwWUFCd29LRHJ1RWw2K0dxYkZOUExXR0F4REEyKzJtVVNOT2lCZzd0MFNrUzMxb3hlTWtqckZuMklJakp6ak1TVWhPdWtrb0VKU2lqeUdneDJJYS85WmMwM2IrbjgrZ3FrZ1MyOHM3NTZjalVwM3p3VHIrUlBlNlNlcmxVZFQ1YWV1Z2UvQUhnQno5RjRpbndFOHErSDRPdklXMzlGYmVXcnkvQnFNdnYvS1N1cGk5SGtyVmVmRzVaNElhdmZqeVd5K3A0c1ZYeWhlVlQ1bnhJcS96YnZiam9xWFgxWmUwaGowQVlGTVFaczJCa0FnRklHRnd4SFlOQjlYZGFtd3IzczcvQ0lmZ1laaWZoVDlnYTEweXd0emRaWS9oY25lVFlhL2tpejhLQ0JvcmhGWjRnMWxYQkdHV0tBNzUyRWxJZDlhTEs0U0ZOZFYzMjliRzdSSUlLVTRHRXZoanI4TFUxd2pBMjNzOUJtZ2JHalE5N29VS3dxaU92eVBaRVJJQ0tJekE2V1RwV1F3VjZvSmxlM1ZUbGo1VHlQS09qbTROYnZPZy9UOUdWZnhOQTloRmhRRFN3L2ZSanBDRjJXOE9BNjhpQ3lUK2YySC9ERzhDNmUrbTF4L0lJODc5TkEzNXJ3QUE2OFFXQVlnbFRUQXNZQUNFcWVOKzZteTN3WW9BNEYrak5vV2NOUzhPaWFqUVFQN3lNRmF3SWpRUmdTVU1MSTBRN24xUkFYNlJGOFlLSUlKVW9aM3lnQytRMlFvc0NrdE81bHVNSEdVYUUzZUxlOFZqMGhxcFdBcElFYWxPYXBHNnJkVys3cVJBRmNDZVlpa0E0QlBUc0xoL3dVV2ZPYng5UjZVOHFmQTRTS241ZzdZQ1hBU1FDUUJZTjNrQS8vMU4xZi9rNlMvMFkvMW9Ccjc0R1h4eCsyTmYwdSsvN2d2cUMvTHp6MEVmOU9SQnFqbjFQZ0xvWlE4YisxWjBjOGdOL2wvMkRXZk5tZktwWDEwMzd6Mkx4bjNsdEJYVGJFNVo4SVB2ZkcvR0pvU0R5NDZBTXhZMkRnRWhFVEVKR1NVTVRvV2dwa2N4TURKNzI0UjMvZUgxOFNDQ1M0SWt5WFF5Wk1xU3IwQ2hJc1VNYXRTcDE2QkpNeU1UTTR0T2Ivbk5XMzd5dnYvNTJPYys4WVhmL1RzdTNMTE1lVDliZFh0MmNOZXZYdkx5YVBqRkRVK05nUmNOdU9CMXIzbkRMQklHUnlOUUdEeE95am1vVklPTGg2K1VHQXdBa29QOHdKT09oaGJKQk5VdmhwVU5MWnFEVTZKMEtWS2x5Yk9iWGc2dEVoVktsYWxTN2x1VjJyVm8xY2FxVmdkdm5hTVFDY3VXWEhIVjVjaTRXVVFtVW1VME1NQW10Z1FzQlN6dEYzUmJCQmV3RklBdzVsNDFpamNiQm1RcDZ5M0FFTnQ4MmRBa3dqeG56N1A3OFZVVURCL1ZtdUFkK3g1NmNQKyt2WHZHUmtlR2gxWXNYN1oweWVqSThPS2JGeTFjTURRNE1IL2UzRG16Ky90NmU3cTdPanZhMjNLdExkbE1PcFZzYm1yY2dXQTA3UGNlZmVUaGg3cWRkcXZadVArdWRHMjFsc1RBUCtmejZkcjFtb3ArMExKMVRFZ2dTNkN1dkM1b3lBaXViMDEzWVBNTGJZelRiT0RBVFg1WUVpWXljcFU1SVZjUGZKRGxKK29PdWRzdkxPVXlDSEEwZXBTaFJkNGR1SDRLZ0VwTUVPV1pHYjVFRmNNalZKa0JVQlVCUlprQTJaS05Sc0FOMSsxMHhLOHRpNUx2dTlDUU9jWnd4b2J0VkpZU05ZU0ZJMy9lendpTEpkUUVsVkFWcWJGZlZqN0dGWUtVd2lMMk05Y1NkZ05tOExIY3NBSWx2M3QrcFR6aWtnalM4TGhucFJBNHlEcGJPN0JjZWtoTElSdHlyc28zaE9GYmlVMjlGZ21LWTVKODJ4UmQ4cXlsc0ZXa0VIL2JhbjhsbkR2M1p5NWU0RFZHaVozT1FSREJENDY0WG5XVG1vRkRSNTJ1WEpremxmeUNSTjBqRlVMZXFaVkxOUUVYbVZFbERvdFpOT2ZpelE0UkxiaTBLM1ZmUWl1T0tPRVNNRlR2MTNUdmk2Q1Z5VTdXeE1tS1czVWJ0RG1uSTE3eVgzSGNud2pnb2ZvVTRtYVNVbExuSVBvZDB3OHl2NjZvV0lNZFNpR1BVdjJ0Z21BNEVkYTEwRnJudFFtL2VsdGhmd3VoQUhXS3MrSnMvM3pxdFR4U2ZjWmRXdk1Ca0VrbzJPV2Q1aDhWeGtsMXdRMHRXcWZYeGpuYlhUd0R3NW9tV1o1cWR2SElEYktZeHlnOTcwcEp2ekF6OG4zNU9MUmtmU2JkRFRwWmdOTTlsUUptMmlVMy9IMG5neHZIMjlkQWVZMlFEUXZ4WjR6U2hwUWJoQWpCbXdWYkk3RjdJdko3a2lOMUZKR1dOdUFuMHpNRXlSbDBoMk4xN0pDS2lnQ1BLZnk5bkhOT3R6d25JendtZ3V2WlovVE1CY1FsSEFmdzVFeEhEc1hHdUZ1U2VvM3lDSm5aUmIzVzdVZjNhTlo3M0VZSzdrT1NsVkpzd1lZeUpDdGNHTTFHcmo5OGNuSGhrRm11N1BkT3duMVd6UjBoeFRuUlU4YUJKbXhxSDl3UUlJYy9mVVdCSGo4cXJJU2piTzJoUFc3bFJJYW9ESnBLcDZXclZIYjBvbDVMbktMeUZqMlRIZ215OTZBcFo2L2xxMWlOUFk4dndES3o1Z3MrRS9DWklDUHdjYWNxY25SaXIxUnpQc25DZ1FWYWc1VU1yS0dKNnk0K3lQWVpJN3lqS1RKS1NVTjRvVVQ3R1RkaXhPMERrZmNUVWRta2FCenFQYmk1U2lLZkphSkRES1kxWmwxMnUxUkFPa3dTcDd6SG42UWthaXBOTHI2RTBwSGdtSVEwTzN4Qm5XU3lZMjBjdUgyeldZeE5RM3cybUZ3UDh4azVjS2VEc2RVYWtLbExITkpHOHM1eHp5aE50dEVCaVJETlFzY0NsMnYyWkFuMUNpdHhNRWpMTXdHOXAxZER0ZHFpd0pUTkNmTFNxUlMwQXRWdXFRUElzUUNSWkltOHg2NklOd3BUQ01KQzJ2WUhyTk1XTXc1VHhKNFZpNEhnUlJva2lnRktQVHBuNDVKWWd4cWgwYm9xZ3VIUDZJZ2tRVEtWUHA5Qm1DdHlTT0pkNmJ5RTBsUTFkbmt0bGNpR1VtcFFPOXRCbjZBQlJCdlliaC9vWGFwbkNDNzVHR0l4bDhXK1paT2pvSFVodTdOQzI1VUpvTGRvdkMxVm9BaTJGQVhwK000TjFEeUF6VVVqZVN2NXdHN1piZjlFY1Q2ak1ic0oxQnBZL0p0b2w3TjBqcFFoZ0xoY1lmWWVVWjJCWHFHVUg4NVE4UlJ0ejJmUWRuem5sbEIxOGRDRE0zQk0wUlZtTFhHUEZWUmpFZFFoTFA5RGlKdnBOem9VQXZlZzlaQUxmSWpUVmI0ZXQ1dlBNOUFVVkMxMUpZQk15RXBKb0xhd0hWczNBMENORDBjZzIveG5YSk4rSUpXNEFLZjFHU1VhM1ZCY3VNclhsVVlUdWdab096UGZXS1J1YzhxWU1tbE9NS3dsN3gwa0t0c3dsZjJaUnNyajFoZzJ5enFCYVBsQWFNbGtSQzd6RzRXYUhjOEFCcmx5MG1EVmdQaEtnNjBLSUdzbG4xRkZRR29CSFkxVEd2OUtnSnAzVm9vM09CSXVBNDg1b3JoMGMwTkcyTFg2eVNBOXNHY0JhbjJRaG9iZ25pSjZGZXR1S1NIWExwNWVjTjFGaTFvM01nTW1LZHcwSXJGaGo4MUtpVUxEdlJKREk1S1NVbEtBRklLeFZ6Q3VnVXhYcEdnWmZBZ1BFRTkwTmV6S3pweHZIYlBUVnEyZE9hcTg0MkVOOXV5VHpLMkZZdCtXZFFaRGU0VWJlQjE4c3d2bFFVQ2lGcmJMK3lDN1dxbHpaT1ViMlZwWVFadTFtUFVrVDJYeTcyNk5qMGdwVW1vRVdJZXIvRkprZ2tnYkFBTDREaC8wbG81SkRCTUM3a2cwRHR6UG9nRjBLN0xXTFhSMDZQRU4wb29ISDFsdWVKa1FEUElXVTZNWk82TGEyc2d1bkY1MDhDMmxZR1pQbGN4MlhKMXR1WEZicmU1MUNJVVdTaGI0Zm9qNkxnR2NtbGcrVUNpU2l4Y0g5cko2VFRKZEFDMjRBcEdic2E1aGEvTklyK2g5SWVhWElDaVp1OEM0Skx6V1Q3Z0tZVDc2MzkrQUFqTGxwcGRYQUxibXQvemNkWjhuZkkvc3dYTmJaZHc5bVIxU083SWZnWktDLzRNQ3dwQ3c1c0QxajQwd0l1YmR0cEJOY3NWSG11VVB2aGFrc3hNOUY4Qkxrc1EzNk0vQk9KQVF0OFRCQlNVYlNvandLMzJFWWJlUXJ6dVlHYTluV0ZoT0tUbFFCdzlDRmo5alRHNEozTmdEdmV1QWcxVU9oYjRLQXA5cEhnYU1KS2IwU2xvTDdEb2RIc0xqcHRYaGt2T2Fhb2UwQ0hqRFU2dGtLQ0I0MmdaSnpSRGNQbzJ4TmVKclpEeGNYZVYzVjI4SndrMEhKaFUwOEx0R0RRTXFLT1AzVEdvQUk2WW5iRWtSd0RSazNPNGtpNjFJbnFUODEyeEtiaWlvQk1HRTVETHBNS3JpT3BvdkZMdGJJZTl4cU1xL1NUWXN5MFpRRjV5YVphdnAvYStIN3ViRG5wU3NpQndKRmFnQk1pN3dWV2M3VUhxbG13M2ZjTHZ2bW5WUlNGWVJRRW5neG5IdnV4OFExQ1Y3QUlBdUFJRGRBSDFBK0x3ZytnSGdQNEM5UUxnQkFOYWV2T1R3b3FNSFVvTmdtVm1FeURJN0xyeExIRFhYRWs3WkFNSTl6T2JHeUNHRGJrNkc1VWduVHBQYzMralpRTWpZR1V5dU5YZytNL1RpYkkyY0J4Z0p3a2IwYmdpNGZaZjVBQkNXVDdCRFNNOFllUy9KOG5vNElzeFFZazUxd1pLbTQ0Q2p3NnBUZlFqWGpVTHY5ZWpQT1ZLSjNQaFMyaUlmdWxBSzZzTUx1elk1T24vYkh6aFpETjJHYVBoNDY2WkxVVVpFbVdKM1hSRys4QSt2NVlPT2xGSU1SRkI0K0xqV3l1U3VTT2VwM3FyUFdyTkJvUnZHRFdiZ3FjdTk3MTVrWHoyQkVNRlVaWGZodkw5VUQvT3VtNjR3ejgxSWtzU1h2WnVJT3FjWVJDcHQrRFVpZ3N1RTNRN2J2Zzh6OXFFemY4bWZlSEZuNTVzSlJVdUxZeFEzZk1IWnVPN3ZoazhNMDkxUXhMQloxU2UyaVFOVjBkakV1Q0ZUYm55amVhcU5XdERVT2JxSmVKc0J1bklRN1BLV3F2SFBQRnhFWFRNS1JqZkFEYytNOWI3NVdpdEtlTjJUVHdQTWIwUEE5cTJGVVVHU2FMaHNsakRBVUFNTUxkS1lRSFZqY3dwZ1lLb3dhVVFDMTZycmh4QkRSVS9hWmdiRW9VcytBMTBUeGtzbmtTTGpaYXl5UmErUGhLS05qQlQ4TG9TcXJxQkdpcUdTUmlGNVRCQzdoNTNDaW9lRjRXRk1WMXpLNWpEUG9iakhnUDVhOXNCREQxaU84NFdjTDk0Q281RWRjSWtIbE5mSnRmbW1BRXQrQXAxSmF0dzd2NUx4YlNVM21lS0NXczEzY29kUVVZbEpWdis4dG11ckFHb0UxbnBNaFpleFRMb1BMMGtnN1VleTJNTEV1dk0weTQ1S2x3R2xXeEFobkhmTmpaYVdOY002ckpiTWltaTArc3p2OUJCcU91dGZQVkVqSGpJYk5kNXBhYU5tYkgzRkxKdmkxdGxPeE5zb3RkaU93VDluZVBPNytlU0dGRlR6MFRhZDlZZG1BL3BKOHFGYTVnc2Zhb2lzdzYxQW50OE92aisyNDJXSzNSVnIrY3lPQ0dUWFRaN1pxM3lISlFMUitxZnVTYmdQbDRVb1VubkZNcWx1SDlBUDhSaU8xa2Fsc3hlZUhYbmt1TkllOSs2MDZ6aWgxczhPSzg2ZWtNcjZxc0JzOHJ1VXE2eEZIMGdVZlZzT1lhbjNXU3RBUmY3RjUwdjZ3ZHVLYjBZdjJic3AydkN3U3FGYU1BcnJJTHZZVjBxeC9UczZjRDkvUjB2bWI3cStVajRRSkRIZkx3cWExTDJZU2FLZTZvY1dYVDZFaCtWd3VhUnlIc3BMdGlVTWVmcEpSVVlJdmRPcDVZRisvTWhnQkIycGZ3R2prS2NjZit3U0krQlZ6T1hMR2cxY3hXNERWZjlIT2FhSGlTczAvUjNkZlNpOGhkRnhZaDdNd2xGL2p5aHdEYWdGL0NlMnowaHd3RjRYNUpiRHNGSnVBd00wTnF0anNHTURDVjZHSzE5aGpVQURiUk43eUdkaE9oOHV3SEwzMEd6cXlsbWN2N2FJZzdRb2x6UG5Md3JiamNOdjM2WEthRlp6NGk4UFZIaGVRM29RcGFxTEpESTNTRGtFWExITUNKVFphUEt5ZlFUVVdyODZxSGNXNlpUZTVvTTd2YXRORFhrRmxja1VQNkdTVVFoVldpdEYyVzcxOWZQT1pIZTdnOFdyN0ZtMjR5OGhIa1RtUmdWN3ZqUFJYUHE0ZEQ4MGEwYVpnNDNmQlY1dFd2dkk2QUJZT2dmR3V0aThpL2txeFF1TEVHb0cxbzVmVG1tNm5zV1pyZGx1RTJicjBMZ2tkU2g3RjFNUzVwRDBEWkR3OFVpdFdLRm11c3gySDIxeEQvYm03eHhzOE9IMWxpWUpTVnc0WXVqd2h4UzMwQncyNUI3YUNiR3RnSFpVTEltNnVlYXR4ZXlwclZrcStsRm5CbVJWQWQyb1VUNUNWNlBMa1hYNGthS2JkZ1RtRmhqZXNvL0tqQzhJbWxnYkx5ckdLMzhTN0pqcXQxRTVhQ01pWG93YStVUGd5M2JKNTZkb0hJZ3hQUGdid0pyZFd0bE9HSjdNQ04rMDVpNlY3VW1qaWpoU21JL2VvZFhqSTJXeFFIamFtZlZPU1B5bldEdDU4Ym95OHl2TE40cTkzSmhwTDVwV0JuUkc2bGFhMXBFVjVtL3VJQXBSTjdSWG5UaklybW5BMnNIa1pwR2NHNnlzNlplV1h6NmQ4blRUZnRaaFFPYmFCWG1MVk1WcVprZ05ERmdEaTZYbFRZbTljVTJXWWpwelNTRkFTQnRxcXNTb2xpVVBLVWZiQUQxK3BpYldaNXlhWXppL2ZtV3NIUlhpY2ovOU5wMFp6ZmladEozMTExZWRnZkF0WDhXK21tdjI1MWRmRXdGQXRxRzh0ejJ5RHpMaUR0dmFiZXJXK0pxTmJoQ3h0U2dyTTZxNHNsVEpTNDF4YUNwQkdocHBEcnJpUVFXVjdOZ2RqNEY2aFNVam1vTFNCc3RaVGR2ZGZoQVluckJqVWl6bStnd1Z1OHpxaHNXYjN4L0YrNVhFVURVVFFYUUN4d2RIeHk1dmk2WUhuczI4VWlKaDBuN3hJV0MzNWwyc0dWUXFTTEhmMUNON2dDUUtrZUdnUjhhVFdxVy9CbGY1S0NBUWdUbXVMQ3hNelJqakxJc1I0UWczVmpvNithdlh0bXNDSm9aTU9rY2J6RjFLT0hHRDdaR3lrbGNXTXhzZWlEc1NtVXdDU1JieE0rT01WWWd4S2d3dlI1Wk5NQ1I0MU9RdUhzenVRMSthNyt1ZjNnTWVQM0dSR1hITTBHT2RiR2hmZjd6SWFSRUIrT3h2VGgwOThCczNmL0RBWTNwb0R5clFVdTZURUh5VWg1ZHRjaWMrT0NoUUZqZUYrUkR6NHR2cWREOUZ0T0NpQTJrZklIdmVrMlBMUmZ0QU84ZHhZdTRlMExpejdXQnl5K3dEeFg2Wkd1clphYnJ1ekd6V29PK21DK1pGa25Hc0tUdUx6TkhDSkM1SDhnVXpGczUzV3JCVk1nSzNJbE9CRkwvQkVRV205alRtY1I4VUVrMExKL1FFTURmZ1BIVFpDcXFXRi9vS2VldjRVUjRxR1ZVUzV6eEIwTmZ5clFkblQ4d2ZkRWFMdHBjajNKaDRGYS9HVDZZYzVadUFpMkRqdXdjK0liK25PSTd3Nk1hcU8rQ3ZLYTBqemFlZjREcVFvZVVJQWtka201dTVuUE83Wm13VHpBQTVWVWZ4b3VTMkdGQUlNQWhBMVMrZllZVklwUGNYaUZMRkNqbWdlT0V3QVVkRElIdzYwUGdwSk5EMk9GUkZid0lNRWF4aHBLV1c3Mlg3bG13OE9ZV09GdzJkWnNuMmROdjhKcCtmRkk0WmhtVDl3WmNaYTlnU3VBQlRydThodzVrMG1lQ2o3U3NlOWRLZ2dKUFJSZ1VzZVVWSGFrK3h4OE1RMUZHRGhNcWF1bG1uUExuQXREWUFDUzlPVzZKZXhlMUYrNHc5dkprejVVeCtxZ1c4NWpreHd6dzV3V0FXNW1IWnlmek9SYk5NekNPYzVqZFZwaFpzVXBzZStwR2dScHhtWjQrWjg5aTlwTzN4eGhnNVJoKy80YlVDakVwaDYwT1AxL0dXWnJXb3JpN2FaV3VRaStMWkp3WXAwYk5NZWZaaHd4NDk5aW42RkpjQUs0RG1BR1RJaUZXSnhEVHp3bEhmemZ6YXZRWWQ0eVlNeURTWVBDTE5tSkN6dUZGYnBvNUV1aWlRWkptUWxySXprRXhCR21LcDJMVGppa2lQc0tmUHZGMkpkRDR2MUUvczJlMjZzeGdDcnVDQjZNeVpMYnNJUDJUZDl1bk03cnNzdFAySDZGQmdVbE9CNjBDL3pZNHEzUXkwcHJuY0FTN0paTTgxMnlZZEpaTDQ0Z0lETnU0NjJZUmFUenk1SEtxN0xqeGpGT2NieGFYWnBCMHJiWmJVUFRPYi83cXhrZlRQT2daL2RLS1JnR3o3YmZJc29RMER4djN6OTgzTE40WW92b2FibU5aMm5qT0tIblo5c1JkVEdqSnF4SU9ZTWlkbkp3UlpEcGtUMjJwcGtkSVVOWEZTQmhYS0hHdUJoK2hsMytqNWJTcjJYTU83U0IzVkthWDJCanJPTW0xNHErUnNPR0JIc3dZRk5yK2tZTHpxQU0wM25qQjk5R2pxamthRHhNZk9hTnJXNkU5Vk1sQmlsVFZ4Y1dSaUFKZXYvUCtUNGE0TmJZcUVza2RzUzRhNHJWS0xLUUpOQkpRRmJTcmZqdEJtTW9FVUtTdmpmQWxBbFlUalMwUmgxTkhVdE1XSFc0Rm4zMFlVMEk0STlBUFU5cnd0dU4rYmVubFNjdGlFVFJZbTRnNGo3dDRBSkpHb2Nlb2tPUmdRTTh6MGZIOU5MTGFTUVJFOFdjQzRGZmthc0NiWmhYNms0c1NiR1hOTkxkSXZtUUhPQkdvR1Y0dGdOSzBzOTN4ZkF2cmk3ZW1NQWhhVWdjR0l5eWZmZVhTcGJIZzkvZDhtOTV1OC90K1R1Ny90KzdhNFR4L3NvL2U1TlB3enNwdktSck5UajF6cC9rL2Ivelgyb0UvLy8yU1dlK05xdmdtUmRVMGFLandSSXYxNnBFNUZVZW56YjNvNzVBamdIRU9rSUY5K0dYSTlmRU5ZS0g5Y1JrUHlxUTFHaFBYUytMTEdubVgyZUc1OWs1VFp1eXJGWE05RG1UN0tsNExtbVJ6WVlMaTVSMmZEa3NLSWJmQzVya3hnQURiNlIydVRmZW8xL0phSlA0WjJ0UWJ2NzVpYnVHOXZRYStvTStYYXVpS2FIWnM5MXJJeVFXK3JCbUlvZ3Y0WUV6aDMxOWZkdDZlZ3I4NjVkV1Y1NjRySitKU0srRzdpVStJZWJqL2VMeGZJOWhGWE92RXhjVmROQzk1U3h4MHA5SS9hVXoyYVZZeFh2YXE1YTlqaW03Mm1TY2JzQXoyTGEwT09icjB2Q1E5WUhkaEFwTGxYYS9XTXVvdytjLytxVnYwRHlxTXBYTEptZkVMWDhFYURidTF4ditFV3RKQnZvb1QwYStrVzJPbG00MlkzQWtSbURRWVg2UHJqWld2OTJwSmtVQk5pWDZnbzJkTGhlOFlqRVFPMXd5cWN2L1AyajJ1aTVIMlB5eXRPZDNKT0FNN3UxRTIyL0ZxbmZVUnJkdmIwNGk3b1g0TkRyeWZKTFJvdURJN2FtcnZWcTl3KzdhcDAxNGpGRnhxeE4vZXFWN3I4MmFtYWM3MTI1VUN3dVVkWDYraWxBaWxrdnNXdUdBaFZxbzJPK1ZPSytkV0NmUWNaN1NxQytPcTkvcnJNUElNenVNU2E3S0cyRmpOZ2lMY2szLytvNVZ0RE4xRnhEalJwc2l4TTNqWnd5d1NrQ3NJcnhCR2xtZXhLT3V5WFNxd1gxSXdXaktuVWFOU3J4djdtenFOdVRsVVVWWnEwM2NsYSt3L0xkQk82Vzg1c1VidElLSVlWS0w2SDdIaFdVck9yNENGcVpQRHhtKy9XaDVSUEhxWDRMUk55SWdqUEYwZVVsRElUdEhPZXFyYnVuL1ZUaWZVS3dXaWhtSXBBbzE0Ti9wL2dTcXpnN2x1ajByN1dLS042T0NQeGw0WExCMUJid0tFR3ZZd3F5elViTzduTnF2ckhtN3RvZnFCTTBkTG5kcXV2ZEVMQjhtQjVuMXpQV09qYTVKQXFTRVFyWGRDSDNQRGV3bjJoK3dvSmEvV1N3c1loSzlNaldzbDA2N290M0FGRHNsWG44N2RTaGlSbnZ2bWE2Qk92OG5RT21IVVFUUnd2WFc5L0Q2clFjUzAyWGozM0RiSS92eitmWElidVNwVnZWcXZIMVhmTnZYdXVtaGczVm15K3JRaHlqVjl5WG5SYTJiMmxMZGEvakg4YmJhVXQ3TjZhNFBpbFRaYzNtYmxqSmJveXpvdmNvdTh1ei91UElORHo4ODRST2o2d1cyMTB0eU8wb3JGVW9QWFhOUWJrOVpKWEdWa3JvRzZaTXk5WFVQTGEwejZyU2dxbGdYS2xiVkJicTQwcWNYOTMvdDBQY1p2c2tWSmx0TTFPeWJodktreXRLT1lNL3VWMHNWZ1RVZUlCRldGZzJ1VU8wRGZ6RjliV0JYdGpEanZTSUhsVjI4MmtuQmxML2IvOU5qcTR3TStNQmd0bkVSZUQ1bHpXWURTMkdxMHYvMENibTZSYTEzd0g1QS9ya3R5ZkxlM1kyczhxOXJ4Yi9LdXJHSWptSEhwUS9zYTlGKzNHMWpSbE5tWW9RdzVYMDhYMmZ2clRQbUtTWkR4ZGpNdlVwTEpIcERrZEJiY3h3UlQ2QnhHQ0JzUXgxS3J0U1Rtc2VBQ1pCeDJ3a1YzamZMVFkwSUo2Z2tpN0tlUWNYdWdMK3ViUWo1WFBidERvekJtem9jdFJhK3pOMmt5UXV3WWJLWDNuY29PMFdsa1FzSS9PQ1hyY2ZiN1BHSEpmeWY0VFB2OE9WaTJ0c0p5Yll6Y2JNcmdyQk9YR0pQdS9PaG1CRUpVZmpnbmlHQzZKN3dnQ3VHQzh4eVZSRk5rVW5kNUFWcUgzTEhBeTgxd2swdVJ5SldHZGI4ajcySUMwbGM3TmIyc2dmTTI2ZVVPMllmYncrMW1LU21YMEpsUFdaR3cxVVliNkRHa3laU2xEZXNOdDFiVVhsMFo1bzZFZmU1MEFXbXhzUWQxQnBNTVlkQTR2OVB1RFF3SFhpSDk2Q2I1c01lZlNCb01oWjhTYU0vcS85QzZiTEM1TkdZMHBLZ2haTy8zMnFUMFZVQVlxSFdER3FWYUpoOFRWSDk3TjBSbmlrYXBkeWwybkJKSVpWQnFqdzFDcmpnTGE2V0F6Wm5CM2VZRWhvc3JMNUFZSVoyYTJjeHJuYkwvV1JpVVJmZGkwNE14czI2VHNHMU9sWXYvUEg0Y0FoVG9nSittYXVFSWxpZTBJQXJKTEpORG1iSE1vRTBxci82aUxuQ1NqMTRkOE5INXFhVlc5UVJBdElvdTB5N05rdHV4RVhPTFVHYzZrMjJEOS9UYzJzL2pmblJBaEpJU2hqQXUrNlcyMTREMVFNZkVCZThuZ0krUWtlY09tTkgvNytTbWRNUEdkYmlFMHlhdGd2N052R3I4S0JiQ3lJQWwwMmxvY2RFZTYydXZjYTd1czJkY3V5Zks1eUNMMXN2SmVkNjJ6THJ3UzhuUjduZGloMlJXTkJ2aFN0N29wVzRzM0tHdjlKNEk0bjhmU0tDUHVYcU5BZWFOUlVDUXZObWFWVEJCdU54amhObmN3aXhvTUdkUnpybTh6R3VEMnpTbnpaMFlidWpKV2t5bHJNL1RZZDlZZEVveW1qTjNZYmIzclZyYndYQnpwb1BXSnZCM1VlYzg3MTUrNXNiWENLWk5wa0NLNDJEZmtjNDJFd3E3UlJYNmZQbzI1b3VmNWlkR1dldDg4cDJ0a1dxS3doRmdKV0hNdFJyTTVaNXkxLzY3VDNDUlI2MXN4WDR6VXU2TXBGRGRucklidVdnZlZ6YW5mMkZ0Sktjc24vNnJNclNuS2FFemEwK2MrSENwbStyei9lY2dUUk4rLy9iVldZd3AzaGFHYzNtOWRNanRRaHhOKzJDR0lvU3BKZkhzUXdnWGp2YVJsUDN0SENBSzArZE84MnBoUUdqZVljOVo5dU80dW5hdzBVK3V3cE5TT3FMUk5iZFgwTkR1c21BOE9WVDBua0RWOUpWQUY0QUZSbk04dE5qVGh0U0ZaVG05QTJsMkJOS2EzNXFuMkV5ZElUMkowTG83N29UblFremFkLzJzeEVVU0sveHBBcmJydWxCMWdKajM1ZlZHVzIwTVdhVlk5V3VSbTNWSXhyZWJmNHRwKzVaS094NXNoUFZObkpJRXVQOGNXOFlzY1NoM3BhcEpTOXJSODhQRE9MTEVHT2pjWEViKzVhLytsWnNsL2hHOU9ndnVidkNkL2NYMmRUaFZLS0EyVjZncjVKeHdJOFp4QUNGb3A5V3V1YXZOdDJsUXphYUxxRkdxdkdoVFNna3VSOG9iK3NCWU9lL1Zkb3U5RkZNOTU2cmhROE1PWWVGTkFHWGlHZkdaVU9icE1tT1ZMdmlUNS9tTTRDYmZUclM0OGp0aTlmL25KQ2RjeDZTMnpOUG5KL0x4SHROanJxYXRmS0RLUzVNMXZaMUN2ZmY3NjUyU0lWcCtlUWJvQXZxQU1HVjZQcjUzNGRQYU5wczlVM2ljOVR4S1Z0bis4U0FNekh0bFl2dnpocnkzdkY3NVhZSG5vcTJYTEh2N0svRzdCZTRVMWc0Zi9XVlcvUmlIeEM3MC96NkNPZnY3YTV6cmgvcHovSkwxSzh3YXJhT2J0MWxmNjVBOUNjMStaSTMrVTd3R21WWVRKb2g2U2tqMWcxNWNjMlM1NWQ4L0x3dUxZUE9BZUVJQUlCTTRnTDdvV3EyTC95VGNPclBMZTVZTFU4TTdPN3RzK2ZCc21Wdko5Y05WVUVYbnE2Q25TZ0RzckVQV1JSc0RaTUpzbisrYUZXNktZaHJHVTUyb1M1UmdhNXZtVkZRdVZDOHNoZVlWWkZqQVoxRnZqOVFuSEg5TFhlS3krOWljVEV5eTZpNVd6ZWh1aCsrcTcxeHg3RmxIdFhNU0VKNlpoaGVTUTVENXovVVVWaTVTTFhJbGR1T3kreEVmTUM1RDBzUXpwcmlYVTlSYW4vVE9KcWtFdFdIZTJ6S055ZWlKKzVvN2kwVlZZMjZ6cFh3Q2x4Y2ZTWkQ5Qzc1MS9wY3lZTXZDMTR6TEpWZXhVUmgvWDRuVnFVcFVJWExkcnNBdXBWdFZ0ZnV3WnI5Z0xNUElpUk1zVmpxOWdhSnpHclZKQ1NjZW13WWpmUHhBQm5sVHFRRlFkakk1SE5vZTFDNU8wMVpLaWdZV0JMWUJkTE5Zay9aZGV4Um9WNFNCMmZMdzFjMFhDSXZtenEwcXJ5RktCU2ppVGtmb1ladlRvN3dzckFNSFpmelJBNTlZakJaVzZQMTArdnNwZWorRWVCWnJaOHVlZDA4NTZ5c0M1QkRmdysxY3VFb3BvcmFaVWw5WVZHbkxzalJCWkV4UE5KZ0tCMXNabUhsNlRhQXpZOEcxZUdXRk5HNktDYytQMUlvMHRxOUxIS1lYVWZady9mOFdSTk43M0JmaDVra2dlcWY4WldTMll2a3MzRWo3cGZxaTcxbTVvSk1nR0k2Vk4xT0Y2TW8yL3I0bHVibEFUUnQ2cEJrQk45NW50WFl6SDJUL1B6TVYrWWVpNTg1eHVUVDFZUy84MlY3ZW5OVlpyYTNWUzZPR0JnQyt5c0lWK1kzZUtYcjNBRS9BTzBzNzVsOVlZMHBTTEdxbFVCa2lvRFIveFZEcXQ1Ny9BM2FrKzFUZHVMdUc5YVdmU0F4cVhiNDdSbGpXcThZQ2JEQW0zWUJBR082K0hPUXA1bUhNZHBqRVl1MU40RDZOWEJQZ0l0b2xoQStvbWhjbW5SZEJSTndzZ211VW1mKzh5RkkySUVIbFliRzFaTVF6QjBMRGtOd0hrRTdUVzRmenUzQzB4aHpWM2IybDYxWkFuNkJtU0tlRmFLU01JR0tsa2VBOXg2NHE5K1hOZHZuNW9tWTJXcnd6MTlkY3kvdG1NZnc2MDNPS1Vyd2oxenE1VjkzQWs4NnlaUnFQRmxyUlljcUk1cFBHOGp6M1RiRFRWV0MydHYrOHFGcXNJSTdHaFp5cysrVDFMWFRQM3k0L3p5TGNhYlQ3TjdkQUUzZFR0aWJqTW96eWtWb0tlQUdZMnhxRzZzMktJZTdSSmFnM2tUT29NWmNEOGJuVkVKcVlGNFZySGE2TDdpVEpwa2JNWGMwVHFPR3pLblZHYURVMkkxb1dwelV3ZjVBTlZZTStnbXlFMDdnUk1NaDBXSXNaeVVVbWhodW5YV1pNbTVmKy9IYnZzMDhtREtyT3JjYTVhc0c1aURqN2FKYlk0MFhuT3NFWmNVcXdiRHYvbGZyRGJVZFdweVhxSGF0Y3hiWFRUVGdiZUo3OGVYRjVuM3p5TFpQRnZyT0RnbmhPQnAvdkhUYVdMV2hINlRkbjgzZlI3c3RFeS9YNXY3c3JRSzFYWHZGMk5hWVBSTnFScURCaTQwZi9uNnhRbCtMNVE3WVorNDNwa0VOOVR6QUNZbW9HdWNUeFNpT2N0WW9BM0poQlp5S1hWd2p1Y3ZCbzVHSFJxMWNpS09ML3N1Z1Q0Q0dobStndzdLOEVLeHp2U3ZQNHhCOVlKbVdVN0p5OCtJcFU2REVBMS82NFJQYzBJTlQ2M1N5TVpHd1B2MzhlUHM2NEM3RmNMYXh1MHFjNnE2dDBRNlZFQ2NFTEpjS1ZjMmd1Q0lJMnFsWjkrdS9uWjF3Y2xHQ05va3dESHhyNGVScVNIdlh6dTFPeWZwSC8vejc5aEJzeXpUMjk5YlZVNGRobDFpWWNSNUVtdkJOTkVsTkkxQWxvcTF6RVVKbEY2Uk5MTjB3RDg4TGZ2N3AwK0NiNE9iSmVxMlhOV3cxdTlvQW9OSXAvbUpYd3BLL3ptaDkzNVBnUVBaUmFOUk5KTlBwVWZ2T2ZlT05sZGhGQW8yZ3FBVzhWQ1FkbFdGMjczRFpENmFaTnlWbTZPN0ZsZkRhcnlpcnZFOG1mUTN5NUxwSGZSSEFDNGVKZEU4dXZNclRYYUdxWkRKT3JVODJzYUZ3akVYZkRwanpnbFU0Zy9kUU00SjZhMDRqei8xVUxjaitUZi9ORlRpTldYeXV2OUhVQXczQXZlQlNNSC9DRHV5elNIUjlNTGZRK0JXOHNFUXRFMkVGZ21GQXFKcGRYZmgvU3k4M1dPZXllNUxGaUhnS0VwSjNobC83V0JiNEYxcmw1T1d3WElQaktaQngxeG9YQzE4OXdkdngvaXp1RmRYanFDUEkxUFZGOENPSzk2ajRkTWRqa0JkS3JpdFNIVTduZ0ozZC8zZjd6L0oxazhFelQzenhTTkJhcGgrYjZ5MVRXMHJGcU1Lb2RjKzFTMUZIMHlMcURDQXZEcHZMZy9iVUVxdGZGZnA2cHhwdGxMK0tDRFRzQjExeDJKbDRvNEwxeXZLY205VXVNVllNY3Y2WlFja3U5V091dU9za3VyYis0Y1BwVlBudC8xNFpzYlNDZE9CZVVZNWdPM0FVZTYwU0x2dytCU3NhcGF5cmVFSjBwc1pmLzNXaE9mRkh6bzdvTit6enp2LzNsOGpNVnByc3k4d0VsV1pTcU82SVJNZHVYa1Q0OUlwV29LcUM2K3EwR3ZjUWsxSHNhbGtUd3hkc043NnZoSHJJdkFQMllSWFpMaU5MOHJIc1hmTEpsUzNNV3d0ekhjdkRjZzMrZm1ibTlUOXY1YkgzOWMzRGorekxqbDJmRVMxNlZ1dkx1b29KRFgwOFBqOUN6bWNXL3U1ZkI2dTR0Y2h4dXhSdlJ6eXhWdDhiSm9WYk91bVJVdFl4cnh4bkRNdzJFenZOeDM1M1RueU85NmREM3NXLzhsKzV6V2JKM3NLVjM4MlhMeXl3M0tXM1JmNFBvdlBrMjNNcVJjb3Z0eXZYeW41aU5jKzlHbmk4REN5V3NDOWlrakhOVGVTek1mZkZOZjdjd2NDdkVlZk5aTGU4Z2xobUZHNFBpYjRqdE5DUkVLdWJuekpWNDF1bW1ELzhGTVd6K0Z2dEdCZDNDMHB2SmQwNGN6UlRXYSs1aHhFWmRBOHhmRmM1cmpJdXhkQSt4NHo3TGN5OC8yQ0E2cERnR0g4RVBsbnByRHFzT3p2SWNiOFVaRlhxNW1OMXdkNVNMam40K2JQeHN2Y2FxSU5VUlJvL3pXMlRhOXBYamR2OWYzRmt1TldLem96d3FncXJ4U1VYYW1lUWFYcFN5TVlXVzZsN0JZb1pMRm5lSDdyMHdobTZvQ0ttN01pR0ZHYWZINmYyN3NLV2FYcGVVbDNSajFBb1dWTkdPR0Z3eFlkMGxKUUxJbi9ycXh0VE9tU3NKZDNCNTFoQm16cFJvUDJWYklWaFI5bXJSTFY5aFgzTnRvVFRGakVUV25CK25DazdsT1UydnM5U0xYWmVJaWtUcWZhSmFldndKRnhibERxdmQzdnI5RGRXNy8rNkpGQVByL3YwN3IyUTZqUWZUUWU2THpXUFBCamcrdWQvNFFoSHdkTnZVZmRLUHN0bXhadGlxcnk3S3lnYThZeHlzb2JWOUdxdHRqNEN0Z3RiT0d2aXZycU03b002eU9zbHQ1WlpoL2tzcXFod2ZBQnJVOUpFdHIzS2JGZlJGUDRjMlNtNFA1N2ZTdXFXVlI3Ti9YUlM1dWNHbnByeDVUdlFDZS84VW9SZVRxSE1qTEQ4WXIvdWFHNUhzbnV4NlJBWTkyZWJ4UGVMM1R6UktKV2U3M0R2czlIWThDd080T3Izdlk2Mm1ucGVicGJzOGRtczhVc1hFWW5vQ2NjZ1ZFajhQUVY1Q3JCS3JVTElJS2x1NDZlMmNCeUlPVzZ5WmJDclpoL1Q5MVE3NjZRZFRxY0pXYk9pbzZYMEorMUY5ZDNJR29PM1FrQjFVaElyTE50SlQxL2RmLzZ0ZDlQL245MDYrWEZja3BCd1BtT29UTzZIVStYR2NJakh3T3lMUkRIcVduRUMwdyt1ZkoxSktnZ3BFd2NqVVJqdUVhZmRiMHlmOUxJbG9VWE1DRHdMOFZMbkZZQzhUVTdxVlYraXJScnkveFdTK05MZDAxUnlCQ1VUR3Y5MmI1WFYxSlpQNS9OVHZnSFVkMVI3ZkQyNFdmRGlDcE0yM20xM054Sm1LeDl1a3JybGhGN3pDNlpydDgrMXJmdGUyNFZlNGk5SGEwYU5VSit4WExCL1dmWmZFcnlwY3RYN0hpSHo5bDVOTG1CSjdBVEhFOGZ2SXdkanZHZDMrQ1lBamFUa2tsMy96M3dCVmo4dk1tenZEQVZiYXNBZ0tHMU9mQWpJbUoyV0VQWnNGTTJJWmI1TGRzU0wrN0JNejV3cnZONlJxeFNGVEQvK1c3QWlEL1R2T0lXSnI5azh0NTVYaCsxYVgyVTZxbmx4TXpHMmFRY0x2ekdYYWZ0MG9PY0ZXdkVWMlpxUXJCdERVTzRETEt2RDhmSmlVdlArZnRoQWZraWdHUWlsTkFqdEJVWXFYNC82ZUZrcyt1QzBYSHpxZEtXMDd5TmtKVHpudTIrL1JHNkRIZ2VsYWJtM3o5YlVkNVh6cTQydGpaWTlwU1h4a3NkLzdtbHN0bUh2RytPNlhVZTJJQk16bFN6OFZ4VDhVRmtoMmVReUorM3RmL0cySkNsZUhzYnpQOTBCYlJuQ2F1OUFtdWM2WlBHQ1JYcEhQRGxOYzlTbVl6MVBLUW4xeWViaDJodk1wUXRmYkl3cnBxTkxURzFObGwyaHh2c0czcWFWOUxiYXc1K2RiR2F2UXBOMXNIT3l1MndKTGY1VksrVU9ucEhUMm9veHY0cU1vZFZXZ0pIN0JOZ1pIZU92dGZkL3N0S0lOcmNuVlN6TnhDdXBQUWtBUDM0eXNUblFObXQ3VmJaYSszVU5wWWdqNVpIakJza0tLMFFRdHR6eGRYWHB4OGRjT0RydEp2QjNZdFgzOUc2ZjFUWlkvYlZmWkUvb2lKN3NVRExsdDl0L0taRGMxNXIvZGtldU1iNHVDdVY0OVpFUXlrbjJSWU10bTlSUU4vbDNXR0FCWGtGTDZJb0hmOG42ZHZBa2hHTHloN2JlZ3ZoYzRVU0NvSWNQbmVxYWVYWHZnZ3dBZWR3dDJ3STY0NURYbksxMjFIaFlCeWpWSzA2Tks0LzQ4YUx2b1hVeTJ0NFNwZS9rVjJ6L1RZV3FxajNiQTJHakdzN1dqYm83SFlPbXJXb0NVU1BiTjJ1Q1ZSc1crRVNEWHJSdngrY2lTWkd0WDRmYjVSS3FVZDlubnRWQnArOUl4MFluRUpiVVVhS1dWTkhjWFVLOHkxblpSN2lvOURMUHlmUFN5WFRDVngxNzRucWxsNDlva2IzYXdJTEtodVBhTFdQWFhOdXp1OTJ1SEVPYUo0K2VqNXZhK05xRjVEeG1RMEtIdHl4am5qMDZwNUI5YTk0ZjNhcDZvL01WVWF2ZjB6V1BKQTdoSjhLWWVjNWVXVEF2aE02a1ZKOHNVemlJRE12S1hVYjVCK0pKVzV0OUpSbWZRb1RoK3RabjE0b29wMXRMR3RlR1o3VTlPMG1jNWx5ZFdiQXpZWGJkeDJwK3BPL0M4elNRVkdqTy9CM3RsRDdPODgzRmsyTnFWV0hwcHBXcG5FazFuL21wWm9WNmFKZEpIbU83TzlRVkpTdjBodGE3Q1U0SnR5Y2JndC9tbERyZjRVWjhFUGdLVWcvQ2NJL2dHREpmV043RWtlK3dTYjlUdVhOMWttM0NCZUM3STVudDRDb0RBbG1pNFExRE44UVhkdkFWZzQyMDd4OWZmQklyaW8vcnMvSzF4YVY2UnM5eHM3WHprb1NDM2pReW1Cb0FuYzBmTUdwQmhocHJQZXR2eDlycmRYc3ptZTRRS2dzSjhZUHIwYWFidW5xZ0F4TVFUUUR2K05QY3d4ajJPeU02ZHUvM2ZubWovR3YxMWtQUUlCZk5CY0N3S1R3M1VnUzV3RnJBQWRSeFZ3UmdXOHFRSXVoMXRIS2xPa3I5cll5MThmYW93aVcyc2c2N1lHTDFqSlpNSlV3b2NxNFR1VnlCMi83UUtLN1hRYm9QR3dCcUxXUUQ3V1FMN1hRSDZ6WVEwSUkzN282KzJnYUFINzEyM2QzN2MvUERkY0swSUFoL3ViRVhLM0NXd0hwMkV5UE95Ykg5clltZjBCMlBzaEFQTXNTSFptY2V2NEZzZnV4ZjM5eGYyelYvLzdENHNYa2JnWmh0bDhxd1lPcUlFSDFHQ2YrOEVmTDlOcU01K0d6VmYybjIvK01FZTBtVWV0WmNCZS9TSG9ja1ljY0o3NEJyeDZkUmdBb0QwNEIwNzBxY2hvellMa1dvYjY1YTV2OG1lV0ptb21BR3B3bVBJZlFCZ1c1TzhXYWpBSHZvMWR2L3lpNDhiN2Jmd1RQWjNzeEFHdi9hZW9ZUUFndmw5S0V3RHM2UjY0MGZ2MXdiSHhTOUgrVDk4OXJTck5icTNuTkwxZkhsd0ErRVJET0lBZmgxemt3UlZIV2d1UFRtRWZXSy8vM1h0TjcwY2V6cVhiUkgvL3M2RDNiMytRc3p6c2xOSms3N2Q5R3hsc1RDSHB4ekk4dSsvVDc3ODRRdFc4c29IM1ErakpCSENSOGtyNFJ5QStmNnVETXo0TWNqWVA5N1NodjlIQ25wOEtmM2lHVWd2YmcvZER1TkR4U2FJQUtNVC8yMWNaOEtEOERMM3h1VGhGY1cyaTRwOVY3aFhMVzBCVkgxeUhsNHQ3UEwyL2xRdW91emhYNzRyd2h2MGFrYktucDg5N1BOTzdGSHpqb2l1V2xGTmVzK1Avc0JiUC8yS25IZHo4dW12clBaU3hGYkxpd1Z4eURVb3hwUmszbCsvOHpNZVBoNVIxR0FjQTdzclYrNC9wQW1KWDI1VnNpNGd2QXdxeFdEVGFFRkp1eURRMkVjbldYcWxLb3BLcHVhblJBRFRBaFpPMDdYWmJLamtibG5XcDdSM1lhQU5UUGI0cEdUZHp1VU9xZFkxV2llOG1EM2pvY1QwNlV5d1FBVWxBMjBZQm9LSmxYUkFKRE1sTmtNWjd5U290WkVRalFJL0VVY2xXbGRXT1hWUm1DbGVPZ3JZV1ZJMUJMN21iKzcyZTBkTnJzTDBDNGRaczNvRUtoYXh1TnNuQkViRnhNa1NFUisrWmpMWkhZaEpWVjNteG95VlJhVVQwcWpvdnJlZ2NWZFJzWGprbWFGRnRFZUpsamVRRlZRcG1VMDRRY2JDSGpBejFpVUlhd3ZsT1hrTzZMUjZrWGVvbVhNb2paUk5WM2ZxcXgzN0hoN2ZVZWdEVkMxK1pxRXdscTY2M3pjeTkzcTU3NCtxdUFyMHR0QlVxZitKdGpGaXBjMEJhK3lsNWE4Y203WXpOcktOQStJUUZPM3BmMWZyVmJlMURTcGhOV1J0b0hlSk5oZnNYUmVleHF2c0ZxU2ZVNzU2RTFpeXJzbkJaV3hwWWFHWW1JUkt2V1M3ejdPZy83aTRnZG00SkRhUmNtaGpySzFNNk4vUmFjbU9KaEdobDlZMDRIS3hralovY0d2S0NuQXJ0ZHV3SWRLMUlSaWhXdHN2b2I1SFlXVmFoQ0w1N2laWlM5U1VxK0RUSDg5MXVBSWp5bFZlbk5hMXRTaUdiSFNuMnpYbG5wOHVxZDducW1QbW5Dd1hteDIxWDh1UEh4emdmRUl0RXk1OXR0OSt1djdMWGRsUG95NWw2NzFsNE1BSjFvNVdvS0lGMkYrNlhaMVR0NjJMTjVndXhXV1dsRXRNa3hQZmR2TnhGcllnUjEyMVJsMnZhc29EOGVnNjNzRjR0UTdsUWVHeGJQZUxNQ1RpcXIxd0RMK3ZTSmZWMis2TVhmVzljRU1QSzBMLzg3a0VpOFkycmI5VkR0K1A5R3lMdjVjQldKMW91N2NLZEV4V2VyOGpQNHd2RFNzK3o2QnVQYUdLT0wvQ21saVNhNGJ5aUx1ZyttUkJSUmZCQU43R1NaMDJDNFhIOGVwZFdyL0NCOGdiVVpVcGVTczV4TlFESU9ZVkExRW1JZWlLWFdLWlJBMVZHVENUeG9tT29nT2pRRGNmWCt6MXJsT3loblV3dEVQWmlRRFNsU1EwWEhPVjVzaTllNlozcTY5Qm50QzIrNnZQb1B2Qys0KzBWYlR0NC8xLzh3WEl4RzQ2bUU0d24wSGkzL1hBUXBpTGdBRlpnMExqNUtIKzFYQnJIUW5waFRaMHYrM09qSXArNmIwZ3M2dW9TRTdxVndqdTN0ZWg5SjlCT1hjL0N3RHkvL2FVbUZxbEZMTW1INWxVMVI5aFJVdzRTYUkzMHFGSFdBbm1tU2xxbythdHVHNFhzc1MxNXpmMVNzeWw1YlozYjRwRlg4N2F5QWNkbWNaK3pvZWh6em9YRWRhUVNaa29vTHZtVjRMbXp1eDZ2RXdXN1JWQ0V0V3QzZEFVSzNmRmlaMWFkaTZWT1FYY2g2bXpHenoyaHpqZk1LUXFUamlqMnUyYXBqaVRQcmFSR0o3N2FOalRwY2Q2Z1BKQldBUDlYdGFwY1dQOXgrakw4amRQUHphL3dxaU51ZkRBdzYzYlhLa2xybXNBZStRVThKZnlmQTJ2cUYrUlAzWW4xM2VoaDUrdTVIcmJNUklZdzlQTHRvWDh3T1lHMWtYZUM0ZWE5WjAyTTNhTWF1bno5Y255YXZYcjdMRVFQSHErcXBoaUpIeTBKZ0pnQXlzem9tejNUbGxZQkNkYkl2Uk9jVWVMZ05aTHRMT3BGcHJYMDRXS09nVjVBbGl3OWV4MmJNMndmblkrbk52TVYvaXZ1L2hPenhGSFZibEpEV2FOSjZTUmx1Vkc5c1ZxMHhyVkVYVGZVS0J1TXE2Z1BRWGRVczFJeVZ0U3dKV3h2aGQraW5YUTlJQzVLaHhITE10NGZuSm9zdXRZTXRxWEFMQnZuUUZRQm1IT1dkbFZyK0RUUHhsSWdkMkdNcThsaFA0OFJEWE91RVFNWmk4OStZaWNTa3RnSklMbm1MaDRPaDBPMGVNcXpkbzlieW9md21PMzd1aFBySklkY0w3MnNFNXg4enFpb1ZZbWt4VkZGYTUvYmxhbzNBS2doL2tFT0FtUHV4NWJETk9RcTFiSUt3VW1KaGlZSEMzQ2NtWkx2a1dGVmtRNVplam5FOWNCL3NDSWk0bFUwa1k2ZXRSVU5hWHVvUUx5dEowTm95Mm9NQ2dyTGlKQ2RRUjNEQk9mK3l4VUNqdkxmUUZiRWVhL1RsNzJTdU5PdXBsVCtuQnRhV2dybHl6TmNST3hzYlgvVEZkSnkvMmd4UGEzb1UyR3BZYkNoTDJ2NUgyYXlJTldOUUwvem1LellxVUNzclYyYXNyZVhSTDcvY2w0YVQ2N1NNVEF4RWZKTHdoT2hOaFhPSnUvcDB3Ti92Q1ZNcUN6eE9qZk41ZUxSTE9DS0ljK01yMXhlNmZBd2JGc1c0TDRjMjdtK2F0b0FkQVRicGwvTjNSSmdiQjBuZk0yNkxmdUtrUFJzRFNFQTBWTVRqZERYWTdKNGY3OCtZRi9QNCtzaFYraGNsWlRHZnlQVG05MHVWS1BSY0JodXRLNUNLV1llOXBnYThjdUNxUmpoY01vNXhOaDRRY1k2SlIzYWs1WTQxbTVTUkI0V0ZGVXRzaXFBVWpVU01CWjY3UGNNSWRCTWEyaWNGSjdVN2oxV3NmMU9heUdjcXpFekMzaUFXVWE1Q2pXYWMzaXYwN0NTSlJJbUdGUGJpZDNPcjVXQ3dMZjIrNEoyTHNiVTJVRmhWU3dUckZxRHpJYzRDbUJOakpEV2xWYlRhRFFhNG1Za1hwZHNreUozZFRVZVQxeEd0bFRJSnVGTU9HbmhPbEhLa2hORUdoSno5QmwrakFsRE1Db0RRbXFaekJXeVVWU0lQSFZjNjJRRFpnOVBITndGWlRERWtJa2xtZ1FpWUxCUWtENEhZOVZvckt0YUFvU0xLQUZwTmNaVVNobXdJTzJzbFJXVE5qV21WbEI4ZjRSUnZ1RmV4d29xUTFaa0JhdmpodUppM2dvZHlmREpLd0x6QUZEdm9oYVdoRFJpSjkyalRvd245MzZ0dXdUaTNKbFlsTXR3T0N5dDE1dkYxYUJsQW1aQTgyb3RPZElHQ3gwV1FKb094Ni8zWTFuWm9mZm5sRGxvM2IvSDlyMFNJRExtd1lPdUpjOWRhZjJ0V1JLQUxhM0RWOXBCR0x0bWJ2YTNwQzRhSjYwUjZYcWJHYTdSKy9lVC9kNVFxbitvOG9kWTlXQytwdXlWMDFoaUNId2NvMjRVcFZGMUhSMFNtdjE0SWNxVXNOQmpwWXJhWG9wQkY1SmFoNmNxT2svSmFGWG1wOGxrMEphTWdoQ2tGQnZRRFB6ckZwUXVBT0lzYVkydjkyWXdwMTBnTkZFcGNyZGg3dGFlTUxSdFRNa3hHeVV4U1ZWZ0ZTbVhaYU5Qc3hzWStJWnA4SkdreHBPYkFGOU5kMGFXMFBQd25ycjhIakNiQkN0N3BjcmROeStIMjhtNlErcFhqNDgrVU1IS0MyRk5qMlEzZWYrM2FScUh1UkQrbWIvNVNlZnc5NE1hTUxDZkdWWlpDU2Y2UzQrSmUvUGhCK1NtSzFKZk9EVTZFMVpVcTVNdDZ2V2M5emFPVTlWbGtndnE1SXpoZVhxTGhZM3A5ZE1QNzVvLy9jWGhMR2VmSGV6YUs4OHpKVjFmOC81NWk2cjY5ZVFmWlhEMzFsNzRwT2JqZXJQWmZSazNjNGZ4L0xVeGVZZ3RiTTd1dy8xcW9lOXpiWW5wK1R5TUI3ZFcwOS9CZHl6S2JxdGVLSGtzR2x5UVVGYkt4ZDdOTmR4ZEVrWkFBQkE4aWxNUEd6dlJTZ0dCRUR6WU1Ybm5VRnpSVEhVU2dOWjdWVVQ2a2VBZTI1cHFmOVFYMWY4NHNXRGlJOVBIRWJVNFpXdExZTFBFVDZWMFFObTllbDlpMExROUhlOTRRdkNsdW5JRUdpUmNSbXBQbVpRcERRbm1GNmtoQUFQeHZ4OS8zMy8vOThMSC8xdFNOS0lmQU1CYSt3OFo1QUY4UEcvOXM2SW4rZTVzRGdHZ1lBQUFFTUMvSDhnanQ2dnIvMGE5VTc3WFgwQm9LQlZDZW83ZzNZU050NnZWUTZXZDRuL3dsZXE5UWxaTlptMUl6eS8yeXVjTC9Bb0lSeTREcGZ1TVEzMndKTXJQNkNMUFVEZmg2dWVCbGxyaFJmQWI4SU41VzVlU1ZjYXBPK3JhUGkreGJ6cmZYYXpvN09kOC83TFkxUTZnLzU2bDBwZVpCQXFvL3I0dDRGOHkzK2hpQ0dlNG5rQWowK1hXVWdrdS9teWNmVjJ2eEUwWkR2cTdUK2FVdGhPVXpWZjlPSkFWV0FtQXJ5NXZ3RDRuelNPZmVZMmRwVXR0MithQWZaNnFkME5sTHNjNCs0azRKV0Z2ZjlRVHF2dEdMZVJqWmhPQzl4WjUxY0wzc0lEOVE1VWpaZHV4MndXcWtLcHRGR1VJTFpsSEx3clpJVDdGVUpjaXBCRDhmS0U5dSs4LzRpMFg4dHZidk9ZRTNCQ1BqYkhsSGp0bUl0a3h2aXNpMm9FdWZKeTBJUVlOekQyNm84K0swYkZzbDR2WS91SUpRSFlvZU44K1dRUTZkd0pQUzFpSndrK3oyRlMycHllNnJjMHRiVDNCODFMZmgyUzdoaGZVbXJGeUxxMEVvbWlJYjUzK1lLVmU3NUxNZEF3RGtKc0NjLzBTQ3NUc3hVK1lXbS9LZXVmSytXamNzRjdaWkZ6YmhURWozcG41eXhVdEQ1VldEc3N1ZUN0aWMvQzJNZGZJNTd6STlyMlFIdU5TZkwyOEp5bHo1ZGs3RW5JUlAwdnRYd3h2TzJEck12YXJ4R0pFcTVYWExMK0xGOVJ4d2VsSWRoTngwYlRIdEpvUlBSS1VUaW55bFpJRTRFOVhuYVVUUURnb3hCMk1BcEFuU2tOSzVKN3U0U3ZCdG5PL3NtZS8zdDAwQXViSi9NSGZSK2s4WkVjRnlnTUFCTkNRZnJRMkZJd0R0VHNCK2g4Y2c4TUJDSXpEb1NZSEFKYkJ0d2JFM1hzYzY5Mi9OT0RVcmpZbEdrZzdGOUpBa1U3WElLQllXNE1EM3A3ZHo5SE1NcnNDQXJBcjcwSStmb2FjM1ZlUThMWDVSSUoyUmozTUd0VnJZQ1ZHMHRBNktOV3dvZHJlT3BWYS9ualhVNnlIV0p4WnV5Yko2dTZnVTRkNHcxN2F6RUpNb1Y4cjR3RCt5a3Jrb0VaOTFGWnE1SEx4OWlYb0F3OCtIREFJTTJwcVdYRHd6b2ZYUE53YnNnMmZSKzlrNnlLRmdMc0hKa1g4UXBmbWpWY2RZbUZTZ054ZXIyT1pZZ29FRFpLQjlYMW1zbVJLRW5scklEUU5RUGxBVURZdWxTZkdXTWN4ZUllZmVxTUk2dkJDMWF4dzQ5NXZJYmZ3QldId3hWVXZVSXlXanRUd1cxVGcrY1pURGIxOWphcnArZlZWRWdwNWZYN3M0MEs4TmpucXJqbjB0WTIxRmRNYjdZb3BpVTF4VldLVlB5YXh5S2NrNWxSTmlHMkViUnZnVWlrb1RnOTFTWFNnYkJKY2JTMHdhNlFCcGlScW1VMUlwYW9rS2k1V01aR05pcnBHU3VHVVJDWlFwVFdxaEsrS2VhcUlxd281OFFLYVA1WGgwZEZXa2FseGNGdlkvUFczUXJyNnc5ZGMxM2FsSm0yN3JpdnQybHdWaFY1RklscGtwYW9CRVZaNVlWYXhFRlhhQk5hL3RwamZ4ZFplenV0dytEYytJUC9KLzR5eTROemdyZ2JJd1gwRUdiVkNaYVd3bHJTU2NqNk8vRTArSUJGaDBkMGkrNDV2MzdkbU5aWEs5VFh3R3Y4TWZQYmV0Q3g2WEwrQXBDbERXL0hqTmlLKzd2cnExU3M0MjEyOGJiRy9NdmlNYzVHbzVKYzNLbWRkWjI4bzdFVTdWckNHQlBaNE50TDg5L3RsWEYwYklZbU5Jd0JCQVE9PSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlF1aWNrc2FuZDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBREkwQUJBQUFBQUFkWEFBQURIVEFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR2x3Ym5GWWNoekFHWUQ5VFZFRlVIQUNGQUJFSUNvR3FJSUdHVmd1RUtBQUJOZ0lrQTRoTUJDQUZoVUlISUF3SEcycGdSUWRpMkRnQWFQQVpGa1d3Y1FBRm0rOFRSZGttblVqMi95bEJtekdoZGVoYlpTRjBSN3VvN2hrWkNaR1Q2aG5wb2JaVFd4eTZjT0RoMEVnLzlvMEZSK0hBOHMzSjFiM3R3NTlYb3pnY0NOd2pabXR0d0NWeFg0aExvcEVrVGFSWHQwWklZMkl0NGpmOTJYc0N2TVJMVXdqMlFvMElraGN4S2tZcTVpUXRjZm5pbXJwWjBqcUh0R25nSmJsL3REcXppaXFkcXdBem9RMFRMeDg2TXpwWDV0STVUL3p2OTY5NzVyNEFvb3NSQkRKZkJibWtXZ3NJdG9xTmJHMlhKOUNrZW9iSGJmM3pCQm1vR0ExSTVhZ3hHTzFHVGFvTkVGVE02N0l1b245Rlh2emYraXVpd1FFSy9XL2FobWlieitWZEViVlZSNFlOK1BkL2pjekNUTzdMbndXZ0lxRmw1UUFsMjFZQjJwNUtKRmxMNkpmN1plQnpmdTRjRkozcStBT0M4UVY2NnpvYld3WWhXd0QvVjVzbXZFWG96RW1FVFd2dEtHMlRQRzNoV2NwUW05blFPdlI4SkZJVmdaQmQybWJGYytJMWZZWHZ3TlFrWml2cXlQMGU5Mzg2eTFiYTlkM3pCcUdMcXdBWDNYcHpiVEg2K3RiWHpHZ2tBMnVKZlF5ZWxmV2VKU3ZnQzBKRlVGMWF4TmRUVTJIVHBTajdsSmwvbmVtcTcrOXZTTWsvNkphZEdzc3FyZ0dlZXRuYU5WUEw0eitkN3F4L3NneG5GMlQ1ZWdIU1VXeVg3QUREVk1LeG94ejBCY2h1WHhpMkFzQ2F0VFB5dmdPT05UT2JyT1NjY0d1Q1FsemhFYktCL3ZydHoxaXJIOGhzWm5hNzluSW5oeTB5UkVMQ0p5TGdXZjg2LzNBZ1REQUFBTHBqTkVnM0pOTlFaTGhzWkxveXBGdzFwazRkY3RoaDVLaWp5QWtuRU1JQlFwK3VKL2lsa2hpcHVDUEhlZytHOWxwRm9RL2EreE9LYzZIRkF4QjJ6cnAzb3pBWGFpQnV4Vk04Vm1Da1dtVjd0dDgzVXFsNmk2eHd5YXN3Q3BWOStjelU1T2Zqck1ySC9CMWJkc1NaSzdtU1cvYS90Q212S29KRWloWWpWaUtQUHJ5bUtWRGtQLzlyTU1Nc2N5MncwRkxMckxQUkRudGRjeDB6S3pNL0U2aUFwQ2o2TC9rL2FLQTNBMjhPeVZ4YUM0T2xUNWFkdVBNUFdmWkIwdkJrUnRuY1lBR2RoU3VXYmxvMjUxclQ5ZUNPQ0tMZ2ZiWUdrcUJKNlZReWE0S1RHSUhVZzVmaHFSU1lFak1IUnhJSEkrbEozRlR6dE4wcFdoN0REREZQcHRvcHVONDRKL0FJa2cxU2VPcGNpOWhQMFJUUUVpV093enhOMDBaSFUrVXBTMUdGOEJZUEVEM0FCTEYxbnFMRmZBdFNJZHM0dFpRckVKQ3o5VEt0WjJUTVVWaGF4SE9MVzNpWVN0MHBvRWNZZ29TeDQ3VkRxY3loa2drRlBZSGR2TVN4OVY5K3Q3Nk5MWnFEQjJtOVlZaG10bXY0ejBsNzFhRFgvaGN6T3dRdXhxNmsxbFVDN25tbnRHL1AzU3p6S0dRL2Z3UlVEL2NPTVFpRElwVGdqeHZ2Yi9QYndFOXNsQTZpakxJVHhia0dscDJtWGhmVTFPNUEveUhlYWJSV0l6SWRXaldaMlcwOThTM05KbXhJVXhEMEpTMklRcWg3L0RMT1ZGVVk5SS8wNzFkcUpGeTRnTjlTTnlQc0Fxa2xKR1hQYWZlTSt4YkY1cUlZYy9JQUJ4bWxtNEJjQitvUE9SejE5Q00yb3VoMm9HdEVOTjJBSkZyQ1Z6TzROb0QzZXhXU0VLRzRzak1EdE9WSlNnWUxWM29TYUxZZWU2T3JFNTlKV3RJN1hxNkZNTkI2cEJhRHptU0c3eDlQL25jb0FRQzBZTzY1QVYvOFZxUjVwQzdPMEtKUlNUaVhNSGVhanp2cThmRDZURWF0ZFNlRWRDeUp5T1A3SFMwSE5zY2puNEVVSDdJVnY1QjlOY0h0NlErUXhyNU5nSmxFWXBCYmw3aVdGVGcyU3ZzdE5McGsxd2QwRU9CL0hLT1A1MW9Ba0tIYmswY3hnYVVTbUVkenZ2UkVYZlhuVUVxeHFHZ2R4LzFwVUJuNnlTVWJpTDhia0lsQ3BPQzJIRi9ZMHg1cXB4VEw2TG1sVVBiRk9KTWpZUURlWUpJY1lBaHRLVnFmckZLSW5nbWpPSTVleCtXYlNVQXJDR053aElEaWFLUFFWMTJlemFkQTA0Q0hHODVMWW1oMmdpTUVvaGd1RkNFN1d0MlJucFpPUDBMQW16akpOSk1sMUZxUTJ3ZmJVQkpiOCtnZGZpU0dTVzFnQzF0WjB6N1FWUWRkb1RTeXNqU2Viem9sZnlvaFN0Z2dCZWVMQ0hPRGZNeW8yQk9TOGExMmhpZHIzWVVoUkRWWFRBSXhFNnh3bXMwREVnMU1SRkhBR3RHWkpMRTZDdEJabDVKMkE3dWxUUDIwTWpRWHUrRkdjUmhqQ29WWHRvd1ppdGhlQWlnYmxuT1pJUmdEQ2dZS2VqakJRb1E2aFJoMkxJYXJHV0I3eitZaXRLQXVxRU1BbDlRRElnSGM5UnNZaVV6QU5nTXNaR0xMb1VheGFra1ZyZkRveksyMTBaYkswNFpwaTZDRUJWb3NNT0FBVVZnUWl3VjJITWpCRHVLVWdKT0lneVhoRU1uc1VDbFNhYVN4dzZUcmlPbU1SVjI0V1NHL0FyMW9iOExOOU1GYWZiRm9xTnJjY0NOeTRraWpxSXdCSmxOd0JDOG1XVmdsRyt0TVordjU1T01WNEVpRjJLQ0liVlNzbEZvWk5wbUZ3ODJYV3N3b0M1NktEK3FVcm9JekttbnU0R0FaZUpaL0VBQk00UVdRUnBGcWhvVllDUWZQZHBPaEhHYVd1eDRldUZpSG51NDAwcG8xTjdDWFZNbmZLalIyWWRGaXNjV3FGcXVCZE52QWE5ZHk4dEVUUCs3MTNMd2NEUHh2RGQwYXcrOW5leWZnZC9ZMzhDRUw1c0ppV0FuciszMy93WktjUW53S2pyWGlNQUJwRHVDb2FVaWtHSVNoQ0FFRnlFRVY1SmVsRmNIQnA5TG5lL2UvYTdiTUV3OEtwUDZaWlZtVlI4UzVvYkFtVlpKV09NNXkwajhCQUJRWVFUVW1ReWFaR0VUMXg5SERDVWtNRzJNMkhFT2h1WDVIalR1QnBTcEFLd2lYT21zcUJxREFYelFVSXdaK2ZPQkh2Z1poWWhQRzMvalZ5SXZKT0RkQklDMGpLNXNLbk43NnFVeHNJNVJqdEFwaXZ3Y21lQVFLOUZZS0dzRVN0Q1FRb2c3Nkc0WmVtcVRKVEFSVzFEOHlCVklRQlZNSWhhWnUvVkg3aFNPQlJGS1JtalFrU2JrZ1FIb2lyWXpoS0ZYWDdMSUpvTEM1YWFuaTB4Z1dMZ1JnVGdsa3JPYTFXTUp3blE5WHpsY2ZtQURzaFE0SDlFb2VueTVTb3JIcldnOXRzMHBJN3YvM3NFZXdBYXpydUMrR0NQQ2Z4cmtUOUNZQTlDOWJBNUJ4U0tLM2R4MEFZSS9leWlxbXRCdUFvMHRjTnVicjgwd2w0K200TVBqOW1LYVdQL0ZKMXRsdFBkVXpPNEcvaEw5V2pwVE5zbFZ1SXlmSTZYSlh1VmllRXdxdDRkYm1majhBQ0NKelNmZG40cE1vNDNLc2tYV3lzUVZwakQ5U3dtMEY5QVBBdndPQU54MnV2Y2IyQzl1QUM5K0VDODk0enpxZkdhUDdLT2Jocm5NN3oyMEJBWUJFUUg4bmdON0s5M1oxZXVWek5QcW43VFBISXZNY2RkVjFpNjJ6M245T21XV1QrWmFhYVlrTHpqbHZnV3VJaGlSUXNHYTBtb3RnWUdSaVpoRWxXcXc0ZGc1T2laSWtTNUZtamYrdDlRQUhva0o2Yi8zZ2JqTDExa2RmT2JRM2dCaDY2bXU5c3Y2M1R1ZFRvRkNSWW1WV3VXZTFTL2FiNjdEampqamh2cHNSY1V1TkxTN2I3SGJVdU91aTMvMFJEbGZjMEJBZXY2bTExVC8rOXErRkJBeEhoU2RTQ3hBdVJLZ3drVnJRMFFzaWE4MnFwYlphT2FPTkJDN3hGS2xpVE5OZUJyZU8ydW1nazY1NjZhNkhub1lZWUtCQlBFYWJZS3h4SmhudnJJbnk1Y2lWcDhSVXBXd21SMDJFalRiWWFaY2RDQTIvRUFCb0RRQnNQOUJ5UUw4Rk1QOEE4SjhETndjQUFEWjJGYnlFaE9NVUxDV3FvcGhJaUZGR1A2L0pTYmJubkpnVXhWMUR6TFFBaENKSXVFYkJvM2d5YVNVSlJTTmRFTEhTSHRJTTNISEdzU054ZmV3RW5jZnI2Y0NnTVdsN2phYUowMGV4UXRRUjlpaUc0Q1V3OGdTaUpubndTYjJyc0FpcFJFbG54Q1lNczZjU3lJK2UyUng2RXFiK0NyR0VIbU9vTkFPRnBKU3lObEFUaEhUTlBvQjlIUU9yeDRqNVhrek9nNFFPQ1dtY1BqUnhUQzNVOFlQb3VVVTdYN3pNdnJraVdvN2RKc1puUVFBRTdubjEvdDVmWjJSRVFtbzB3ZWl1dkprTGxnK3dST2tzNXhTOE04V0xsVG9FeEtSSnVONVpsdWM5VnhtR3AzWG9oU0ZaZzYwMmgwUHBmUWpnSEhMZFU5ZFlHWkdVakY4eEdQYWZwQ2lOQnE5VjZpMDZUMDRZWXA0b0sxNG9jM2VsckNpVkVZRGMvai95UVNuUE90YUpuekhCYWFoY0EwQ2ZBQ3E4Uzc1WnRBazBwVG5LTkF1dU1RV1FiRml2dG5QVXhuTUxRT3UyZkVtTmIxWnE1NUlNYzVRWnRtcDhWeWxSK0ZCWW95bFhwWDdWQkRBbWRtSXRIVjJGUnd4cTNmNHpKb3g0dDNLWmZwc2p5OHUvVldiVWc3WjFSOU1ncGJqSjR0bTRXQURNUWs0NXdEU2tVUmd0eUVtdzJNS1JUV0RGWmROL0ZHYVJmWkhiYTdPTFlPL3VUNGlIQjRxTWNxdEg3S1Z2MGJxd09aRi90ZVkrRFE0b0hVUVloUTRPVlFvYlRXTjFTN0RCOFBYYyt6dXg2T1EzeE8xRmRtRXFBL3Z5aUszdHVhSFNSYVc0ME9ZMDhaVkFQVFdNWHdLNFpFT3hCaEM4ZlR3YXNHaHhLU3Q3eVFsQm9UNTBvcngra05xb21HK3FJTTE0VHlYVmhTSUQxMHVFSTJDY3VGT3E1NENjUXZOengvcGNmOEdvZE5ZL1MzeG1hVit6Slpzdzc5aWxlOUYvVThyaFBWQzRtUWxjTURyYm9EWVM2Q05iNEFLd3hwK1JFRlZTMVRJNlVNWnc0d1lXUU5QUVc1dE5UbkZQZE5ndzBGTStkcWdIZzgyNko4c2lWaTN1blE0VGxzaTlnYjdHNDVtV0xuZC9EeisvUm5hOFJMRWU1OW1xcHI3U2hvcXRWd1NJdmZtR2RWMnY4eXBxalU3djVqNm5yUDExMXBnc2lMeE5qZTFXSEI4Yk1qcFdKODFkdFMycGFud1Rnd25OMjMzV3F3NGJESlNaR2xCSlRTRGxIZU1ZWlhadE85ZnVsV00vZTBETjNaek5GYnpmL2RzMnVYSUxLZ3hka3dOOVdFVFp1N2xzNXJrd3dSS3d5VnVWMkZNMmVhbGZHVmFoM0xVMHI1MXRXZk01V0ZIQ0ovV01ZWVVqaFd5K2NFbzhleVdCTVhFeldDVkxreWJZamoxdnJWSmRuT1JYZXhzcmdVRExxYmFoMm9pRDg1N0VTR0xhdnRrVExKUmZtTldFOGVhRzI5MFdtNUlzWGk1VGg3V3dsTzhjM0xTbjNldWk3V1I1SDh4RFkxMkxDYkN5RXhWKzZ4NGYzdFF3VURHcjNodGxPZkFHNjMxOHhrcnptc2picXdZdEVWU1c4dlI5S0xlaFo3b0ozb2thNWpXTFZuOXBXcWNybUQyVnZHT2FKOGVuK0tpT2RVYmtQWEpRZlc1eFpiN1cyUmVEdE9KVGEwTmJOend0UkpQQVo5UnRxU2F4MHFHbExrOTJndjFEWDVPVVErKzNZNnUwVUszUFB5RFJjOGVJbG1rU2NFWnAwd1MydzZ3Y0szK0txbkozNHllTmFidkY1L1J5RFIwajc4SHc4NUhtekdWT1MwV0lnOUpBZWxnTzQ5d05rdEk3aEEwVzlrd0p1ajlDRWwyR2FCTDVxa0pYSm1nc3NTNmFnTlZ2N29vR2lBZ3hhbCszcXdUWGZUaWxyQ21sVmxvOFkwTE0yRC9BTmhmdWlTSnJOWFZzQngwV3RQYmtWa3ZOYUhsa3dnQTFjT1F0SXl5RVVnME9ISGx6ZDkxUVczcmwzVzAvczNkd25mWUswZ0NPV3p3UHRJQ0hWbk5YN2VCZ1JuUmNHUVNyaml1YzF3bndxV1VsMTZ2Ulo5VmhYU2VNSVMwa2ZKQzcyOGtQay9yMkRFZFRQSTkwR0tBSm10dVJnMHBqSGFFNVMvbG15N0hRQ1kzZ0Jxa2Jia3BEaXQ3S01QcDlMa1FRU1ovUDVJcUR3UkNlUFJ6N2QzNjBPZ2FGVGpzZU41L0RPOG1hNGxDeGw1MVdjcE84VG55ZHVGbG1maGZ6Vm10NmVjaDhMZW04bitnUUtLS2hndzJFWCtwL0Rlc2k5R0FSVmdLOWtUbE9MVGtRSWFyWE1iSlp0YUVEMDZiNWJkSTRhSitFVFgrQWlRNUpkdHVjUTFYYUR6dkRGcTFzTGFKYzN0eEtRM3RRTGV5VXF5S1dWUTNGL3EwZEZqOFlEOGs2eWRkVkZhNStWcytEU0c2dUMvbk45Y2VudUVOcWxqSi80Y290L243ZitwaVllWVVwbytGWk9sRkd4UnZWMVd5NFZFUEdLTEpwWDdBQjN1Q3RMRjJibVdhSUJpTkY2aEI5MjNHL1QybXVkdElFMWZ6NjZUVXczQWJyUXJhbHdFRmhPM1pMTFpKR3pXend6d0xqRHMrejhvWms4NGdPd29IVUFIQWdMdzhYaDJhRk1yNjZqczVTb3hrdEpZQmVUclJqWDV6bkJrZG1JOU0rLzFocmNZall0ZFpyZ2JyVlRSNmMwNm8zbXVhQ2tOWmNqcmZQc1hsaXBhak5Md2F1Zkw1RVZTS0VBSGd6bzdFTXhZSlcwL29pSnh1TnRrbzBXbVUvTzQ0TmRVV3pJdXNOa2RaZmpkZlNWbzJ4OE9ESEg2THpUSHV6MnB3T1QvT2NCRWpKMVJValI4Yjg3NU5JRUJCdW0zQnR0NnpFb2RiMWhNZG9NaHJHR3FYVTQyQjBtNzNreUx1Um9hNThSeG5HaUt4bUlId3RnTlN1dmtBcXV2UjBLTkp3djM0WWU0WTkrcHZXMzVFMHRzRkYxZ3V1alRMVTM1ZnBVOER3bEFmUG5HN0gwM3pXOFgwZEpubXZKenlZNDV4OGxoRDZnMkpBVEVSNW14L3JFdDNtTnpxM09rYVV3SnZJZkd1K2ZxNVhmQk9IamFmdlFENklvd2hoYjluUWF4VDZKRGZTYjhWa3hybVZWbnF1NXJYSTVScTdSSHlNSlJpTkpuT0h0OGttdmJnZ3pZamduVG40ZHlleGNTek8zdlF5RG9KOWxXSWp1SXNSS1I4ZmJBQVhtenZzbHZNdWJib3ZUYW1jN0syYlJVZjJIMHlSakx0SnFlVHV5QWplOFlRY0pKQTFkY2R0enVWQ2UwL0VyaFlOSXd1MFlPekV0ZWIrU2xNS09VUXNFOXV1WnV2dVFYV2JYcFhsQ2J1dkpBUlhQeUFtekZHaEkrdU9HTUJIN0RQTzBvRFV3MU03OEFOM2hKNkVCK3FvMFlSaEk1OGJCWENJVUxJbXlnaFdWc2F5c0lTUUI1NmhxQjJISXBYek96TzlFbEZzZHh1Qk9YMGlQaFN4TlA5ZVZoeVNTSXAyRXpYa2FiUjdmZlF4a2VpVEQ0TDBGWUNHR2lOek1EZElqWGhoZHpYUHplUTZzSFV3RHlnZFVzd3grdW1LaXE0OW81UXJ5NEVKUGNodlgzMm1KMUVaUHZMcko2cGNhVnVtQzNwUXFYemoyZXZYNG9wVTd2TnUyYStPVitlcnh2SWoyVWJsNkEzblJza3hrV3c5Zk5BZWpWd01JRTVSSEVTbzV4cjF4TktzN2NjTjhOdzMxTWYvOXRSQUtORExIRDdjTDY1bW1lcGFvaGtuUGVMWW5jYitaR0FWczNRbWVzNXlCR3Y0eGJKUjdSdVdqS0lXd1E2bGZDdEZ0SEFlMFdDb28xREMrU0I2SnNkbnBFbVBnQjJnU1E2SlVpOFZGb0lCaFYza2hDaGYwMll4ajlKdmVnL1RLcVR3ZzNlSFBPNXNWa1dEWXZHQ1NhQnVxSTduYUE5b05CODcyTmdvdUlRYmtFckhiODhKMmROalM2SnBEclRmVjdyaDhXcnhrcjhjQjNaaDEyS25NbUtxSG8xcE9lbmh0RjQ2YXpFOUxhODd1Y1J2M0pSMnl5UTdtSU5sZmRuR2puVUpldC9GMXVqZStxTzZTdzZ2WVNwNkRSc2lHZ0o1QmN4WFZvM1I1TFYrWVYxdXV6aHZpWEQrYWIxWkdORHgyUHg0bnJhbWFjYnRxSEtvY3l2MzBlekIyOEdya2pYZTAreEFrQndhVE16TGRZbUZPOU8vZzJHSWVIQVNWTnJUejRVeHJJOFR4S2pqVkpxcnQxWHJkSTdETSszRGUrQ1ExZlc1L1YzVFhIZGZ4b3JFd01QVGJ4cnNSYVlwbmxLSE14eFpIcytKY2ZNYjdYR3BQQldtTGZ1Q1EvZlN6ZXYyUFJhdUN6NkFsbC9CNEVDRXZ0Rm85QnJHRWRacG5JT0krTGdnbjVCYnFPd1NiamkvMWhxQmEzNG45Zko5QUQzVThpYnVhbUdHZDNXMUx1UmxOb2h6bkxrdWlQZUQxajNDRERwNVRWTkdBK0ZoZFhvYVlFeU1UMHFUeDJSbndwczhJdEI5ZkhKM3lhNUZlZ0NsZlAwclJsbDlkN0NaMzMzai9oZzNHMk10YXZNMWZCVU5Cck4xVGVGV0Ywb2M3aXdDb1F2S21lU3BoQlJlSHR5dzB5aXc5MG42eHBnQ1l5a21vTktHaG1oMElWWlk4S0JrTzBXMXBxWUlpOU1pVFZHOTRKMmpoK2N2T1MwUnNlUUs1Z1VEOEVBcVAyQ2FyOUlqVmh0VjNzd1BWTnpUQjN2d1lDa2lXQlU3cjczTjQyQkFuNk4xRzlmbDlOWC9ENUErSjNrOVI2TlVXL055YnFUclZzenc1emZPRDhObzFvdFl2WDJTZ1lOWDEwRGM1WW9QdUpMVWo2NmRUdGNPbC9QRWJZWlBocmkzK08rL0U5K045amJlYVFyT1E1Z0oxN3gwQ0oybURvWVlvTkJsVE5XTkh1enhhL0R1Zmpyd3ZyRzBvZytZWWJGQ2IwVEJELzNvN2l0ek43ZHpYR29kejdmSjM2eHNET2t5T1NBNDROOHJIUHYvK1RNYURGcEpuNDM0Tjg1TS9tY3ErQ0tvaWdoeXdkamtsVnpTOThIZzZRR0JHVitrU2FhMUswbHlSNVRrRGNETi9ZSlRwUi96ZmJ6U2trNWV2RjdSdWRGWUtKcW1JaEVpUkVpcjA3RkVCTmF6NEVLejc4MEJOM3FLOXJPYis0WW8xOHo3NThuY2tnUzZPK1BnTEhaayt2WGVyN0lidThCcXRyYnMxZjMzbXg1MkhleVpKeDNvaUc4MFh6ZGJBNVMvK0VKN0x4RWZzMmRQejRZZ2FzZWh3UlJhTEtMVGtZZ1FKWGtQUmJBaDFqcVhtU3JkenZnbWZFKzJUWi9mbTRqdHkrZGorL2ZHODBpUjI2bi82NTFqK2JPZEVlVjNlWkw3NFFVaXNJYlJyM1NKRjVUb25XeGpmaUlHZWQzeGFjdVhZSS9YQzlYdGhZQVlrRFVZM3QxRWdUTk9Sa2dFOFE0VURTZ1VRY09IRUF1Z1BKNkY5dlVaUUo0bkxkUXIvKzlWK0dnYTR2c1F4Q0ROWDc1OTV5TlhwTS9mV3hBbnA5dytDNmpOSW4yNVU1b3NxUUdyR0hYcEJPNE5qYmN1Nnk1ZmN2Sm9kckh3bnBXYUZYV0RWR0ZxWGYzWld1Tno3RjlldnRyeWpHNWhhVG9IUDdYdnhiV3phMmlGZ05sWHB1S2NIeUs2dEhMNUpraXhTKzFqdXVudXdscUQzNy9XMEYzUVRjZElMVVcwR05nM0ZjMmtwNk5LaTVsQVRtZW1vQWtJVDVyWnhYejNmZG1wK1FObUc2UkZ4eDNHNnllWGlvcFprVnpmbGRZclRmVFp6eFk5Z28yK2dZWG1ZSWhTM2NrdDZFRVBlelkyM1pIaGpHMHdQdUh0MXpzejdZc2RHZVB1WllsZU1NSXNLYTBtYlRGcnVsTUd5M3NtSmVSQ3NwZjhQdXpRNEhJUnFkYUlYTGhFODY3WWdZQmRudFhrYzM2YlUvUDR3L2twWlQ4VTlGME0wQjBob0Zub05hMHVjV3d4Rmk1MHM3VDE1d04wd3FUWmZCN3JMVjh5bWhicWJjT0YvamFkYXZVZk4yc2haMEdRMXBiNE40MmtkR24wY1ZURDkxL1dNeWNuNWVxSVJULzErZEZrYjB2VDFnT0p1VnZyQ0lmMjJVdUtwcDkzNlNGVzBxbHNxRnVtSlBXT1RDendVNzRYc0tBK1dCeG5xRE5Wa0FmQXFJM2pXcXNoeW45SE1hOTlTdlpCbUd3L0tjQjFlalF5b1BGWTVzdS9PRVBENzBUeVdvUS9pZlZSM2w4cVRTQXV2VFVYNEY0U2VZMGFORnpRQWlWUUZnM1pEN0cvMzBFS04vcGNFc0FCU2pCWFk5ZGk3NHJsWHBKYzRkVjQ4amFJQnJBeTR3ekx3SURWWnUrM1dnZnN1ME5wT2NZd3czdlhIWlFjclJDM050UXNMUEdtRU1YMUE4c0gzMFladWdCWXVqeENMdzdlKzVORFRkZFE4ZWJHQitZZzVhWDBLcHF3SXVwU0xyM3lENUpuRnhUdmZhbnA2T0cwKzErZG1GMzZJZ0dzdzlCQmNQNTNuZkhQN05uM1FaWHBzeE0rS3B4RE5uMStBcVdCNGtkamJpYVl2dlBxUDdXUTRLL0RqRFVaNzEzL0RiRjdCR0tTS0owOFgrTDFUUlJ5eCtWVzcyb092QTEzQVF1clh1MDQ5dDNOOUZLWUU0VzNjNkU5NmEwMXlZZHZpNzcrREJSWHc5bVJDLzdMUEdKbGtBKzdSNzIyMWNHUWZjV295NlVLY3JmeEF2QWZCeUQ2Y05hY3RlcUhDYWUrcENsbUxHdEdCZ21DU1A3akJIUjF0ZDBYOTR1MzYxYkQrWWwyZ1lzOTl0a29BMXVjODY0UGZCVGljYXBxZXZocVhCZmUyYlBsaStQMUhqTVpGYXU0Qkd1Vk1HbDI2SWFLRGxKNHo2OVhSOUd4eFhIczUwV2JMYmk4QTE4UlRlRXJoNTFXWlpUMWhUVEZncHg4V2o3U1BpcVQ2c2syT0tIODVyNEM2NFVzREt6cW5CR1hmVVVvYUY4OTZuVUpua1N2K21IdlJJaUtNQmhVUU9uenpHdkgwcTkrYXNtWTlhcHFacXdXYzhhR0RPTUVNbGdlUXFCU2gwVWFRRDIySTdzZWZUYXJrRmdMTm5PcEEwZUgrcXdkNmcvb2RYK1Z5V3cwQjFhMW0veUxQYzVWUVo5ejFaSk84TFhiNFlvcmJkMS9XTG1lN1VFQjdCcjEyRmNGZy9aVm8yNlhJc0E5SnRpQktkYXpsb3hGUDBRUXdPSnBRVW9Famd3OTNWc1EzcHQwckNLTm9oNm5KeVhWR2NPd3dmTWFkY1hRK1VSdkgvNTM1KzAwZVk0RWc1L1pMK3dmVXkxcEdKVWtuWk9qbmJqRW1IRVlodXdZMHAreG00eFpNMUswMncxRFdjYzhic2luTXRtaVpXTnl1Q0JaL3RuaEhZanovZ1pPcUx1c2d3QnpRVmR0UEZRWGVZRHZIbFJ4Y3d0c1IySTFqUjlTS2lkdk9iMnBrN0QwL2tpS3VPWHgzcG1EdzVGQUhSYm1YVmxaK2FsU3hlKzRIU3VkaXhmYS9QSllZNkVlbW8wa3RKcjY4aDUyWWNHS3ZzSDlEN3g5RlY3TDlTN3dkS3dLQnVYbUJXN2ZiTXRaMEJJUnpGbFBjYjFtWThudHBzWDJZZ0F1czBjTTBxeFJMUFd0MTFLeHZmY2pxcmdDOWFyRTNtOEo3ZmVKUmNRVkpBZXM4NHI2dS9tZ2JVbnFkei9nMEMydUpvVjdrazkvS1dDVkxvd1c1T1JTN2x2WjJqLzZxQ09rZXcrZjUySTJyeXFqeDQrcTI1Ly8xeVQ5dERvL215K1NsWmx6OWxyOE9kZGp1Q0hHbGRyREJuRUdFd25KWEJYbWRKN1hxK0pLdEJQbVBSZXBld21XOTRST0dWRVk5SzQ4K3I4aUVoQXpuVHhnVkdkRTlPSzBFWG5TQ0ZkeHZGOGE0S1RDMU55OFpxMjc3Qk5MaUZjQ0hNRDVIZWhZdGNoRCtoWjc4RldCb0JBTitraEx5bXl5QUlHV2NsYTdMVzgxbGdpY0NRZHRkaWE4TVBBSGRrSHlIcUczcEl1aHVldk0vYml4Z1B5c1plNFJ3cjRzNExjdkgzVzVCRThnVi82dzErUndlak16Q1IrSnY4L0c5RVc4UXorUXdlSXhaS0NqQStuWDRjNnRuOVlhZlVOZmw4VStjMVdNZHd2WEE4ZGE2WjNSUnVEc1hhZ0FWdlQwWng5UTZway9xc0NLU0F6ODF6WHRmdEZmRUROVHcvbk1iaDZRV1JaVFk0S241L09GWGZmU0FqLzc2YkJBZGlZb1JGcDdjMk1yd1hCVFp0NXBEMXNtMkdJVmNFZnd0cDIwYWRmMmlaVVhJM3dEV2xDQVZaSTVWTGY2Nm1Nd0dZQXh6Q3ZsaUdvKzd2aUwxOVlqNElLejA3Wm9zTVBXL1BxZjAvckl6cCttUC9PN0p4eEgwTHpUWjh6R3RHc08zRUlUNXg2VlRyWFcrTDlsZ2U5VU1MUDVaYmZDdk9ZbEduT2llQnBFblJTQnhOKy9lQk5mMGpidHdFRTZCYW96VnhWNHFXT0xRNys2aWtmZEcrQkt3dXhDeUkrcjJiK2cyTk10a1g3UjdjZlZES1dpL2dDRWtEMWMxS3k4c0xYaHZnZU9Qdmg0cUpaNkU4R3I3TlRiRUZQYzJ2RHNXMlc4bWxqdEZwNmNDWldvc3J5UkhLM1E5RHZSODhtMjlOa1ZuWHVyaVFJT2lTc2FEcCt2MjFNNGZsVWNMellldkJBQzlyK01WcU52b0RSQ2dWRmpjeWdOWEs3Q3hZRmpiL2xvMDdWdlpRdGwwbXpuL090ditkSjExZHRyd0hrMVVBNnRkQ3dlczNrMG5VMkxTeHN4N05NU1BaZXRzbWFNdWtKSG9QWGRDUjlINm96b3hHbXIyV1l5SlpMT1pGQWRndzJrOUJDejNYNjkzT0x5R1RzeTNxK2VlSkpzZTkyeWFJZzY3MS9mOGVnbjRQQU14UUsyWHcwTHZmZEo5QjdjK1FkU1RQU3ZsQ3JaNExoLzJocW03dGJhWERiekFsaHVkU0VvN0FldVdtcXB6eTFYS1YxeTFWQnJwS1JMcVZTNWxacWVOOXE5QnNUbU5Vb1FNV1JOSUlHR0kwWGt5c0VTY2dWWm83SGhZckEwYUFsU293bzhGVmZ1eStYRm1vcmhPRUVvbjh1NXhzRjVZSXc1Y2lvbm9NSUZoMjFYUjBzSGl1dW1EdEpmdytubjVoU1ZGV0wrVjlSVTNGWXlJRkp2U0d3MnBOVXlpZ1g4S3VjRG1qYU9PM0J2bjA2WHNRaGJmT2FVZFBibnVTRFdtaklrazUyVFlWMWFOSTNobGtoV3JLRVpQaXdER3J5UGNQYjcvSXhsejdhcEhrVGgvWVd2Zm1zc0Y2UzRraGJ2RDNxSmtRVVdYQlhuZmlDVVVraUpqUUpsOExYdEU4cWRJNmpGYmRGMko3bXUyN3lYbDQzejk3QzlnMVNOMld3RW8rRERrT2JQZWxwRUhYa2QwbTNETklrdWpWTktORjlUSWV6ZjFxeHBwZENJbWhmOE53bmFydjRQL1ZPTU0vM3dRY3c2NERJSnUzQm5qeER3SURVak4zbmFNbW9qZXptNlBERGNGeCtPbDhPNVF1dzE4R1FtNEM4YTVoL1JTejZQY0ZXNmdCVEYyVEdWeFZRcU9uR1pJYUtHWXlhZE9CVXdXaHdwRk00WTFNcFlBZ0hYcS9CdGVPK2FLYmNHSVVXZ01LS3lOU1I2Tmg5dXVnWXM3Q0NxSEN6MHdxZ3AzWWZZYkhuRWxFWmhnV2ZKUDU0M2ZkK09TNDFJTXFzekdqTTZKR21VdnZnOXRIeUVndkNJWlRLM1dFSEFSQ0xtY2lkaVI4VEIzaVFCcXoxQnFScVdKL0RBUkU4UzFKL1U0SXhMMEVXQmdiNkkrUUx4NXhlUHhyZFY1U2ZyWitGMkdFanNVWlhWTkhnYURNZE5Xa3NRTlovSEFLY05HbVUwbnZFRUJJK3pPbUUxaXh4WFBtNG0xYkJKSFQra1ZIa3dvOHBYRUFrYXNad1RXQzJBRmZSVll3MC9VWTR0THExWXFMU2paeXVhUjZqNXdKYjRBbSt5VDNHV1ZYdWMzWWdOVTgzZ2JibGM4SktzZlVqUTBMNWozcFVGY1hJR2NvQVYwQzd3K2I1cVJpSld4QkVya244WnVYZXlXQW9XZmVtbEF4ZHB2TGR3L3JocVhidmFzRVhZOHNDMWhmeUtjcEI4YjdsYnlQMVhBZTRXc2NMenhVTmJkM1gyMU5ZM1BFRnp3WHVMdHQ1UmY1aUtQU1dRSWpzSXZyL1ZyWWJ3L09DN0NMOHZNL0JUSEhaNTVZYUpNcERPdDdSdGF0cFpPZHcybjE1RGgrdExqUzhBZnVYalBSemV1YjlRQnpWdmRyWUpoUUVVSDJta3YweTQ5OEJHd25mdmlqdG9GYlUzU2RxMlgvZDBTM3RMeXpTTDkxTno4Mk9nQlBnc2F1K3lnVCt0T0FnNTFIQ2ZYZEdmeW5HcUVSVHZhOEEycVBMN1BhMk4zTHMvblpkQUs5OXk2Q2syNTY1RExXM1V4TEpSWSsydDkveHV2clBaMHRwU1diNnQwcmZWMHJTUDA5SFd1cTYxZGJ5MVRRdWlFcnhNcEpmY3ByZERGVFVQVmJORk56dFlhajFsK2RXOG41cGJYdVEwcTF1YUQ0TW5vRkNpMzkwbnVoamY5eURZdnh5eUkzU2FGMTBYeDBybEppdzYzYTNrVTZwMUsyZHdrdnl4V3h5cjFjOFRPa0ZPWFdLS3FqM2JpdklFWDJIR2JicEFZdVhEanFwRDFzRStuMVp0bmNSSnJtbWdjbmlWRE91d3ZQV1NDdXl3bm45YVk3VXYwMURONnhEVHQxcWxROWU3aFV0YmhNS1dwY0pFQlNGYjllVVlYQUpINW5xMGt2c2hEbTFGcldXMzhvN0IyOUJsejg1OVd5UFBBMStiandhcCtQeGtodGQxSUtJdzlmemx5azdWMms1TW5tdVZYc210dFVOenJIM3h0dFlINkpxak9LSzJRK2VtdjE3NVBxUTM4VCs5bTZTN3lmVThxOEQrQnhoVFJlSEN2alRuV2tBTTkxSlkyUWtiNUFHUFFxV0pxQTc2bmx3K3cvZTlPWUJpcGk0ZDJrdEllT1JPdjFCRmNXK2FnQ2hBM2VzbEVYVUdiY0lHQVJUYzRuaFQxMUJaNjZYWHpURkxGTnlaSVQ1TUxXK3J5Qm1vZFcyVnJFWERSTVpxUkQvMnF5TUw3MlhnUXBHRUxmTm96NzBndm83QmtCenhXcDZlaEFWYWNucGV0WGtONnhKR2RnaUp5aHBKaDdhQ01JZ0RNY3BSVDhxaWFMdkw3R2FOVStabjR1aWxyZ2EzWW9NK2lLc0hIcWo5R3U0bmdycEZIb1dydmxGUVBzUGNweGxqcU9Mc3ZkbW1qYnJlbXNIcmE5K3VTc0dEK29WdXBic09iN0Z4WllVNnNxeFJiZHgwbldPeGtra2l1czR2bncvSzBXQ0pSNXVJNzVYWFQzMTRCcys5RFRuQnhieVJtTkc1d3c1QmdXUFVKaG5ac2wyV1czTjUrM1VyZGlVMExpcXhJQzlmSmh1Zk5sK1dUSnF1MExjU2treFg0ekZBZTVSV1JMVmNQajVUTTFORlJ0UDViYmZrYy9ZYk5OVUlpTG5wVEJMVHNyc3BnQ01aeDJuRmFrTXZKdWNvaWp3YVVNYUtlTDdRUXVlajZLTzIzSkZsUUl0VXVqWXpPL1NZdUUwN2ZidklSTkc4TW5jcG81ZDNsNWxLMGpJam1kdTQ5WTliWDZvMjZZbFpjN1BmSGY5MHZNZG1IbHdaUVR5SEROWDFHbDVrMWo3Y1A0LzVNTkVwNDBRSnpUTTNHTGl2MEpyZkJSNHVBZmYwcUJCTVcwS1U0Vm1xMk9NcWNMTWRURGV2YVBpQ21iWTR3WXlWTDFnWk5uVlJzajRITHBhQXVlYW5xNExjQ3BsWHBSS2lreW1VNllhYzRldStFSW8rMS9ONStzOUZ3aTkwUVAyTnJnQ0tHcFRETERLV0xhUlc2a2JQYW1OM0VabUtSSVFReWRVZWJFUzArWEdxZHFoYmdNU200dUg5aGI3d0FhcU9JVjJDNEtQVXZtSUVMMUFQZkEzNEs1bG1peFYzNkc4MEtMc2JVbzFDbnVyQ3lCUkY3a2NGUys5RXNZWC96UWZmOEIvYmZkUGt5enNwTUk0cWpwbnNYcnJBbzcvMXFkZm5TMFRNM0FhUzJVVHZSOGVMVnVMZWp1d0xsSGRid25VV1haRlZtb3hobmFMTGpqQ2JOZmlaMlFKSkxnaUsyOHFPdWt5bHl4WnlldUpQM0MvcEliUTZURjJ1aFhnYWNLWldGYnZnejNHdndoNWdhR2R0SUNIWmRBUHdQYUN6SXVqYWUxZk1kT0Y5MmQ0UXdXSHZPWDJMS0RKbGoyaTZOamZvaHFzZ2hGdXVHOWhLcmFYTjBvaFYwRU9rR2FMTEx6T012dWhYRTh2VTVkYm9jc1pvRE1sTUlUTnkrVFdpMEpLSUw1RFUrMC9wZDBmMFE0bTZDWFdwOE1IUUkrVjluaG5jd1NES01jb1EvY2h6Vjc5YktjKy92dmc1L1NGd083OTA3UEQ1dS9kVXl2ZXY5RDJqWDBaWmRBZVNSaS92ZjZxODNXT3pKeGlZV2hqS0g5cDZEbUtVZHR3MzVmNFN4cXRiSDdvalNjV0hGcm5XK0Q3bFltMU5rK0htYXlyd2RQUkN2ZlltOE1zbGp4b2ZFYzJNdURYMzJ3L01NK2lsdXZ6ckRad1RjZWx0dXA5dWh0MEdsNDhkK1FuSFcwNVVzanpYYS9ubjJiTnM4M1Q5RUhab3U4bnQ0OHNGT1BzMTc4OTNDYlhiMnNOTFdUR05qcFU0QU1PVHJMaFd5NDVQWHF1VlJxeE9WUVRXU0dOV2h5cjh5QjU0OG9KV1lBUFpYY0RoemNLTzkzKzhCK081Ujh4S3FONWNtb3lrRkNvMXJoWUZZSzJvaEdlelJ0UVZqRzZwOGpuQU9sVXBqK1BxYmNTL25sSUNOV1E0QzdCRWNQMU9iOS9ZbmM2dGE0STNMbkpJVmtiN05tSGRXS2oyd3I5WnpLVGk3NXNYSzFORGU1eGRZNG9wejhyRS9RZW5IL2NzV1hZcUZkbWJjUWpYMkFmaXRwQkVHcEc3ZlBJdXZmQ3JLeFZhdjlZUVltV2tqZzQzcUFMVGZKZHR6S29VeG54RS8zZlJPbS9SaktpN3V6QW5PYWdnU0ZuWG5wYnJJSEMyTE5lV292RmwycFpxcmduLzVLTGtzakVpSU1OaS9JaEVvL1JGWlpnL2F4WURLUy9ZSlV6clU3dGdoOXVEbTdqdHBDRklXYjg5MngySTJ5cXlNU3JlYnI5SXEyUFdzSjJNWHJ3ck5TSWgzUUE1QTIvWlVJSzAxZmJ3dm1ZRUY4cUdxcEJpTEdYcVhTOGV1d1ppTEk3VjlxYVBMaGoyMFVKUDkycVZGNlY0dlVRZFlzMzhsOUJWZ1NuY1lPRzdaVmt0aXRyZmZ2dEIyYjdRSitLR21uTmV2SlVqV2V2aGlCQ3ZVaUdOUGR5R2VBWEx0MEo0ZnBDYzJHa0Y5OVhUVWtHNFYvdHFwS1hIOWVtcEJ4Vm52MnVEWFhwZkU4bXNtbU5XbE9NWTJGK3d5VkRNR1NkQ1llUG1ZbTZUb2RPeUN6blQ1bkRJTkZIUUlpWDRZblU2b1YzcTlVZ3duY3lsT0dhU1pvK1hTYVFtVmp1ekJrM0dhS1FYUnhaeHVnMUp2cy8wdzJENGYxdnh5VVFlR0JaNXZUSUQrNGRjOHNkNFQrM1F2bGZBWEIrYUk3K1V6Yzd6RkErTE9aeGY1S0M4UW0xdmY4eElBZEJvVXpsMU5LUCtSSGRGNGZpcDVsY2FtblkzZDFTMXYxYi90V1BJWWk4UmhMMms1UTVuYVVHZzhUb2ExMmlUbUZtYlVBMFVUV2gwQ1RPbVMrcGlnSGNscERoeDhHYW92U1dqTFhRcjBWSUVvaC96MUtVVHRuM1hlT2c3OURDKzVDU1U2UnJkUGVtVFgvMXNpZHY2RDVnVmFWWnNKVFBuVXpzbFY2dkZVdlhWRXVuVkhJbEVjN1ZYWnBOTGJiS3ZNYkJzYjYva3MzK0xvZVhUVjlJUXNnTU45bDBiMmdKWm5QTnBPTTd1dlo0dVdiWWQ1OVJUT1R3M0pHWHBudnFxaGJYK0cwREtWQ3RnRWwxVUxSUGYzZXJna045UEY2NEVFSFdaUnQzRTI2MjFmUFNIYWoreFNMMkhobHp3ZFQyenF2aC93WmRzQ0VqTm80b3VJTGQ3SWNlMWJSSHdmcFZXQlpoamZaaVpUQXRGTlZNTGc2Z1dNaGhxbVdoSzBSM0Vwb0t0eHl1V3pTMXE1bXJwT3dxOGVWeTNDL0ZSZVJNSUhLZVpLRUkrZVlpdW9tbDJDUG9NRmpYNnE4Qmx2MGNFM1Z1b1FrOEs1eWVNcGROSElJa3MzeGhMQ1NYbGZFOHF2M3granc5UVlwaFM0ekxITmYzenRyRW1NSjA0RzAxMlVzUFg1K3RxdWtYYlYyaEtiVWtSVEk2YytEeERmbE1oeG9zQ0ljL3pnSmhIRlV0ZGp5bHZXQ2twdUw0MmRXRGZwT2x1YXFsWjFoTkJ0TnNMZkJHUnFVSm1JU3Y5WjRGRWVrdmdqV3RzYkdyOFFlNTJJN2k5SmZnUlhnT1F2VjdiSk5hdCtPdHRZL1F3eWt1TndINGpDMWI1WlV2WnA3K3VxMkZrdXJzNG1nT2hkclcvZDlqZ1RRNjdwZ0tEcjhobS9rN285bzdzNTA2eTJDZWVZM1B1TzhGbW5ienZidFlQTGEzL1cvclpGSlo3R2dJTTM2N1h3UFlqZ01wci9FTWc0WG9EbTVHdWwxZ0hzNy9DSVNhYjN6dWdrMDRNYUEwSVZFVXZybTN1cFdEUjhEY0tobHRRTUZ5TmdpRVRJL2duZTYya1RkNmMyZGJrNVdIRHJ4N1pKSXNxY0tZdlN1SlJsSWFpb0J0RndUc29DdjZVb2dUQWRjZ0pMY2dKenlJblBJS2M4S0dVb2k5MHdmU2FSdXdBb28rb3FicVIydWNScGc0L2NqM0JUSmo5S2VaeDRHZmptbUFYNVRtV1lDbFRNTnltendRbHhXbURSOVYrL2lPY0pQWmZtQjZIbCtBR2pZMG80dFJ0MXZjSHU0YkZhbjJ5eitBYlJqTmI4bzFTVGpkR0dxTk94WDRTSVRWcHlDUFhJOHloaVQzQkFpWWUzeklWK0toazVpUkNQbWpUKzNTbGVwK3VCdm5nNURHTFFmRVhBOEVBOW5icm5Yb0FzWHd4ZTcrdUl0QUlmbzM2OFVnM1FtQnErd2pvYmZReCtnUjlpajVEbjZNdndKZmdQZWtyVXZ3YXFTSytWZDdENytEM3pBOGUydmgySXpEOXRlbnhWRDZKQzQ1MTJ4dDhsajVIZlQ5UGZ4cCtvczRIdEFWZHdZektuS3ErUXN6eGV4bzNyR3dMY3JkMlZkUVFOMW1YeDFQY3dDMXU0c1BiekJORUx2MkxhTERkVXRQMm9iUXhLOGF6SG9PNFczaUQzVDQ5ZldlVTJlZlIzZjcveUxGWVptRFFYdmM5SzlsYWdVVUFNZUxlZnhhc0FqQ0hmVmdBWkI2SWRZczUwWHUxM2JxTEY5YjI0STlaRDJzRGJpMTQvejhneTFpeGx0amd2T1VCNUxvQWdCWFl6YWxKZ3NhTXJSMXRYWWRSUmxHSDlSUWRzRSs2eG1SZzh5SWVvOG94UnVNUUJTb1B1TU9NWU1MZHM0eEdDSitIMlNNaTVhYnVzL3dDVlk1dE5BMFhtMHk5eEdNMEp0QU9xMXBnSzBCZEtBZjdES0d2ME1mb3k5Ri9aR2xhbE52bHdubENjaGd0Ukw5bFc2QXI0S04rb1NkZ0l4WHBJSnlGMjdnTzJPL05BbGgxVlhlTk95UGQ5LzNTSUtBL1ZDazM5WTRFUFlpdUhlTUJISnBXa20zUWVKRUxQRVlMMFc5Z2daS2E5ekdIenY4Ykk3REhlLzRZYmhmZTJFOWlvTzlKTTMyM2J1YnNTa1F2aU13K24zUU5KVWU4dE90cnp5NXYyRWE2N0EyeFZaVHM0dTh5MWpqbnU1M05DM2tFYmlFL1pqc2l1bE9qMjBRNjhVNllFaW10eGt1dUMzdkw4WVpMbzJzRkVhZFF4dXZHOWxFMGV0Nitsays3TVFIb04wUFlsc2FYYit2YU4zdHIxeTQyZFZta2ZTYlY1eGkzQmJWMXUxMU05d0QwbE96TFhuWUNSOTB0NHd0K3JpdW9LQTE5eXV3RDJwTEFKd1E3WjN5K2NJbmk4a2c2MThuVVNBVDJPNlZLLzNXQklhMWhUMmV3N0VvRlNyYU1JaitUV0UwKzk0cmFIQUp3RVQ5K1o3cGxYRWpxM3hESDNRRGc1SUdPKzVMOEwyK0ovK2l3enhQTXhnRWlCZ0FJL2l5Wm9IQW1NUDAvZUU1azl5NmlOZTFrNnc3V3o0dWNycVRweHlaM0JlVUp2MlJ5cDNYRlRQWWR5TDdKSXdSNFJranpON2F6WGkyQ0lNRTBwVFhvZFpjN0lTamQrckw0Rkh4R0V5M0FSSFVBeDFWL0xadmlqbDh3V1YybTFmU0NmK3N3YzBXMDZPcWE1bTZTS3p5dFJuaFFWYWdNNk1jaFJna0pNWFlFOFloQjl1bUtvb1RwR1JxTmtLNGZ4NE9XK3UrNENyY0dZcmdUWjV2bUc5VFVqdGZuaXFZWlVXVDZVZzBlRTNoa2lVRzVuQnBnakYxNERYYm8rRFFSYmZwVjEzek1wbElKQ3VjK1ZMSnhHZ2F6eEZ3V0kzWkxuajY1WDUwMHhCMDNvWjBNTDRhU1A2R3ZRWEtidVBNclVxdm1hUWgzVUdaclJVWk5pWW85dFhUUlU3eEdsZFN5cFk0NWJBckxVTE16dEFiNjVpbWRJT2FSRFlwSVVGNUJzSW83S1E2L1V6U3d0STJTZWRTMWs3UW9JWFBTYzBHVEY0dXpXaHhMeHZ3TnhGN2g5cjEyTExZWElkOUZENXNyTy9TMzJiS2VXelpQSnFYL0FNM1FoMXB1ZlN0NzZqaVF2WUVsMW1NMGVNN1RNa3dBQTN0OVNEbTc2WmFYS0xaNTY1dnBPMGl4dmZReUNJMmo1Qk9oVi9rMlBpVjNzUnQ0S3FGbC9tRHVEblV6Nm03VnY3OFJQYjNJMWpQTVhWQ3FWWWlmK0VURkhuVzNyY2hNYjUxZTF1dVZwekwwbGdHVElBVU1hUlVGY0tBRHNJRUUwUUlabUtmeURVbEZaWWNvMmE2LzQzUURDYVhza2NNR09LMnM1S0Z6cVB5aTdzamZKOVM4TlZvamo4b1gxTWp1eWZFRVFJQ1BjV2ltQVdnakxCd2tKcTBPSmppZEhaejJpWTNPWnpzRWtkbnJFTmx5blNOWVlsNXloREtYWWc4ajFicVRDQWhzbkM3eTVLdFFLSnRYbG1JeWhVdThOTExCQlppeXVRT1V5RGJKZEVVbXlEV1pyTDlDZWFhWlloSUg3VVMwdUpYbWViVElpalpCY3JGODAyODZKeWV2N0V5MXhFUU9xc21UdzduS3RkQVVaZXp5VGVEbGt5M1hCR1VaNDNMS3BoN1FISzd4cWVBUWV2dG9jV1JsRXRKbEEwMVJaTXBSS1RWRlhlcnB4VnhGeGI2OG5GN2pzcTdHYmRVMjBCdWVJVkpPd3NmRnE0VFBCSVVTT0xpNEpNclFWejk5ZFpNaGFQQzRXVHNZeWdFblpxczRtcndZS2R4ZXVQbFlLVExKcURTL1Y0bzRoQ28rRHZOUWIvUUkrdkhvcmVmZ01UUE1tNFk1dTA3NVA2SklYaEgvZTEveW53RUEpIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9Ym9keSxodG1se2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjR9aHRtbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItcGFyYWdyYXBoLHB7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNjt0ZXh0LWFsaWduOmp1c3RpZnl9Lm1vbnN0ZXItaDEsaDF7Zm9udC1zaXplOjNyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTU7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDIsaDJ7Zm9udC1zaXplOjIuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yO21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgzLGgze2ZvbnQtc2l6ZToycmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI1O21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNCxoNHtmb250LXNpemU6MS41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg1LGg1e2ZvbnQtc2l6ZToxLjRyZW07Zm9udC13ZWlnaHQ6Ym9sZGVyO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDYsaDZ7Zm9udC1zaXplOjEuM3JlbTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX1wK2gxe21hcmdpbi10b3A6My43NXJlbX1wK2gye21hcmdpbi10b3A6M3JlbX1wK2gze21hcmdpbi10b3A6Mi4yNXJlbX1wK2g0e21hcmdpbi10b3A6MS41cmVtfXAraDV7bWFyZ2luLXRvcDouNzVyZW19ZGl2K2gxLGRpditoMixkaXYraDMsZGl2K2g0LGRpditoNSxkaXYraDYscCtoNnttYXJnaW4tdG9wOjB9LmRlY297YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xKSAwLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMikgNTAlLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMykgMTAwJSk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLXNpemU6Y292ZXI7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7dGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50fTo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX06OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfWtiZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtib3JkZXItcmFkaXVzOjEwcmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3BhZGRpbmc6LjI1ZW0gLjZlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9ZGV0YWlsc3ttYXJnaW4tYm90dG9tOjFyZW19c3VtbWFyeXtjdXJzb3I6cG9pbnRlcjtmb250LWZlYXR1cmUtc2V0dGluZ3M6XFxcInRudW1cXFwiO2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMWVtO3BhZGRpbmc6LjZyZW0gMXJlbX1kZXRhaWxzW29wZW5de3BhZGRpbmc6LjZyZW0gMXJlbSAuNzVyZW19ZGV0YWlsc1tvcGVuXSBzdW1tYXJ5e21hcmdpbi1ib3R0b206LjVyZW07cGFkZGluZzowfS5tb25zdGVyLW5vLXVzZXItc2VsZWN0ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX1Aa2V5ZnJhbWVzIGRldGFpbHMtc2hvd3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41ZW0pfX1kZXRhaWxzW29wZW5dPjpub3Qoc3VtbWFyeSl7YW5pbWF0aW9uOmRldGFpbHMtc2hvdyAuMTVzIGVhc2UtaW4tb3V0fWRldGFpbHNbb3Blbl0+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5tb25vc3BhY2V7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2UpfWRpdltkYXRhLW1vbnN0ZXItcm9sZT1wb3BwZXJde2FsaWduLWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2Rpc3BsYXk6bm9uZTtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtsZWZ0OjA7cGFkZGluZzoxLjFlbTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDotbW96LW1heC1jb250ZW50O3dpZHRoOm1heC1jb250ZW50O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW1vZGFsKX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9cG9wcGVyXSBkaXZbZGF0YS1tb25zdGVyLXJvbGU9YXJyb3dde2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2hlaWdodDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKG1heCh2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSwgLTEgKiB2YXIoLS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlKSkqMik7ei1pbmRleDotMX1kaXZbZGF0YS1tb25zdGVyLXJvbGU9ZGVjaXNpb25de2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWV2ZW5seTttYXJnaW46MXJlbSAwIC40cmVtO3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnR9ZGl2W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2hlaWdodDoxMDAlO3dpZHRoOi1tb3otbWF4LWNvbnRlbnQ7d2lkdGg6bWF4LWNvbnRlbnR9YnV0dG9ue3dpZHRoOjEwMCV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IE1lc3NhZ2VTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IE1lc3NhZ2VTdGF0ZUJ1dHRvblN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRNZXNzYWdlU3RhdGVCdXR0b25TdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIG1lc3NhZ2VzdGF0ZWJ1dHRvbiB7IFxuQGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpSYWxld2F5O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFGSjRBQklBQUFBQXQzQUFBRklRQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHb0U4Rys0NkhJVThCbUEvVTFSQlZFUUFoUWdJZ1FvSm54UVJDQXFCdWd5Qm1uQUxoQ0lBQVRZQ0pBT0lRQVFnQllVVUJ5QU1neHdiZmFRWGFKZWZtTnowWm9sM3Y2MGNQZVpNcEc0SEpTams1cUlJTmc2Q0dNZ2xaZi8vbjNGMGpPR0dEUkExclhlSW5jSklVa05IR242OXFNUkRVOFphampzOVVic210bnFuRTN2M3ZxaVFtZlJRcExrS1c2UVp3YWw2czVJVWlKTlVTVUcvT3dvRFk2QjY3NU9qU2prRFNTTXUycGVkcHU5dkpJTFVsSmQ3MDdEK2VMSHBqWURJNGUxdURuTGpISHZ4cERYR015ZHVMTG4xcXQwRkNRT3lGc0paRTEra0pxM1QrSWU3QkpGSU5PQU5iaTl2VFV6aEk3VzRHbVVMMGxXalQvRlFRaS9tKyt4dVBQMDJvbVJIZTVwbjREZ2ZOWmZuK1I5ejk3OXRtRWVOYXExUnhScUhUalRQTkEySkZFZ3JIZG8vbnQvVy81emJnR0N4aWE2RWtWaUEyRmhZR0l0Um1FMVp2VlV2cXRTdGI3TXZyZDNXNyt0MiswWGRvVG56empZYnA3bVNITEFDa2hNV2dDVEw2czBXdjBBVW9oSmZFcUUzb3BQZDU4aWtKbktsbyszdWFlU0hZSjZmY0ljWGpkK3JLVUVzYUVsVHFsVWxWUm0vTitlLzhpUDBMNUFLb3pObEozLzlpQndzaE02djVKSVVKeWtnVDNmZHJPbXE2TGNzK1orcS9Yc0FYRnhFRWlRSVVhS29zRm43Y3RUKzdCQlM1ZHFEb2xKWHVuYmw3cnR0ekQvdjM4NExmdEphZ0ZGQUxZUEU1QTdnbk1yWkJodDRsWHFzYlpLbWJkcTBUdE9tcG1nTml1Z00yUFlCYzczTXJqcTdHTHNvWEhjVHB0OXVQdkZEejhlTjNnK3N4clBRQXc2RFRGTnAvT1pJOWlpbk5pdFpoUm1wUU9Da2RvQmRBTmpWV2xhdk1pdHdETkpYL3BZSUFrVnduT1Avdlc1eHpvTXc3U0FGQUtVK1p6L2tuUC9aOWorT2Rmckw4S2UydmRLYm1waHV4SlN1TDhFVUFnZ0hJaUJIUCs0NDRFRHp2MVBUUTNZa09jT1NsVEhtajZVc2RmbzJMKy9qcFllN0lIV2NRVWdjZ2twTEZSMVlUVzhDR0tRWDliOEdGQUFBSDl0bzRSSFE2R0x2RlJyaTREaXdUekFBRERNS0RQci9mWjNWL3FkZ1Bta0d6S1RFbVdFWGI3UTN0dGdUWXFvMm5QNi8rOTdYZitGLzlKSEFWc0lJY0FDQlp3UnlrR1Q3Z0NSOFZvaEpjVU9PU0RqaVNiQXBoTW96bTJKUnB0QnRVVzY5WGJORkczSVZ5MktMb2s0OC9MZnNtNTI3SWFxQkxNdUJiT0ZJd2VGVWQwMXZlTCtZOHhXaHR6Y3FUbTJDSVRjNWVMSndTSTRmWWxMWUZJVkhBcy8vVDUzTjQvWXgxaEtHVStIU3FFcmRwUFBuczZmcXFXSnNOYlphQ2xRdGpsT0xVTXNoY2RvQTVUUXNzNEpMYzkwU3hDT01NVUs0S1A5TnNocHpwWDR2d3hLQ2hDQVNSRVJFL0xLc1dSbEp3TktBY1RuWEFoRXkzcjFLSGNaYS9ZZFg1ODQyMC9pYVhtdEdob0NBaUlpQVIyM3YvUDkrS1RBQ0FONWhka0MzeFVDNEVMc2dndmtSMmtyRWpZU0V2MEJLU21IQ2hJdllPQ0FKa0tRZ3lZTU0yUW9VTXpDbzE2Qko4NXFBV0NDZEhlazNBQjBPREwxTHEwUGdUZTNoU3cyZmhpNFhoUHVldVFXRUg2eHRJRVFBYkcyTm01b1Y1NFFGUCt5S2dPMkQ0VDV0L3d6MlhXOTIvcnBxcExUU0lQOHFWOXZMdk9kczBOTFd5WDUxSzZvZmJ2UFpFMXBhZjd3MzE4QzladGhxN2YzMmJmdUw2NFZaSHc1MTRZc201bGdmTmJmRzdXOWxzVUE0RUd6NzIzdnh3R3pwNGZSUittUDhMczVCN0tCMmVESlhjNnh3bEc2OTAydWc3QXpMQThOWTIxQjJkQi9QNXFmT1Y4dDFvbnlMNWpaRERmUUk1Umc4RDk4RnZIc3ZjbEh1SnNyZHZzSnJwYy9Uci9ndS9FZlpKelhVenBXYURqN003K1VQOC84RWtBQVZhQVMvQ1IrWHMvSk40WWFJY08xeEhaY1VhTU1ia2xycEt5N05mUUpLUWNVUmFnb0dtQ1crSEE2RU52YmczM3NsMnBJWVJtRTliSUhiMG1BNmtrNmxONUdkeU1ONUVibVFoeEhLbHdNZ1Q1OGNndzdwZFVSejduZk1jUWZjVTN2SWN6VmtkcmhYOFhIcTQwMTJ0Rk9kN2tUL2E3cDdtODNXQTcxRjdhTzlNK2RqdmRkNmo3ZnhtK0QxUHUzejN1aXJ2bXV5emE1M3RydjkzbFRiODJSVDJLYUZWVUtNTlAzNkJ2UU1DbzBHc0Vka0w4cyt6TGcxRXhiTTBOZ0NXQXhnemY4MkRHMUtYTWZjNHJqTmNRZkhLeFNDdVJ1Qkk1QW9kREREa0dkVjhDblZWRW1FTWFpbjRTYTBBWFRJMFJCTnBPWUFMVnExYVY5dnhKaVV6SEtXQ2lzNm1wMEJ1a3gwNjlHcjc0c25WTmJzb0Nta1ZNb3A1K3BER2FXejJzTERyMmlOdCtvWk8wYjM2WVNJaldjeHZubE4weDBWaGxZb1c0VVJqWFhLeUxHM1kzcW9MZEVhekhBRUVvVnVNbDNERGVFUlZwRy9qZVRFUjBDVVpFVTFtb3RxRm9pd0pGS1VhREZpYWNTbEJKckVqU1FLSi9DU0ZTbVNLazE2MVFsa2RLZXlTWFl6c2RYS2k2STlpa05KTXRDVUtsT3VRcVVxMVZIVDF6cTYrbHpmUU5BSWE1SnBSb3ZXYUVQN1p4dU5tVGpNTEJZdXEzWFVUZ05kUkRkNlVxOUEzM2NieEF6eERET04wSXhhTlZheGQvL3MvYWp4QUU2Sm5QYkZHWmt1QzN1YU5VOEVzRFNMWlZteE9qMVBkOEhReFhTcGVka1hhd2JXNndabzgrNkRyaXVRRkZ3NUlwdm5KaDYvWmdGSks5MzBhRU0yWEozeUpCMERIb3BoYnFnMHVya3ZNSWdZbHRiR1JQY2RrZDdWai9OVjRwYkFiYSsvRTRCakNnOXA1WmVyaS9wZE0wQ0cvN3RYWk54VkUrNmJZYXZRbjZ1bVd3eTNGWGY2Z2crWG5BdEhEZ2prUE5pVWJxcG93dkRVdmJSbGNqNVhaSFl6VjhKaTRObDF2anNPaHJNYXhPSHhlRHdlanovVklISlhuNkgwd2hnNnFGT0VVcVFvMFdMRTBvaExDVEtKMHlRNUxVOXlSUXBTcFVsZlpuQVNCa1dwbENsWG9WS1Y2cWliVEJ0TW1RS1lZV0hWVVVmdEdJdDYybGRuTUgzRXBpVTBxVlFxSGJDTHhPVStFNC8xWExmQkVoektoZ1VjZ1VTaGZ4d21EejlHNUVSQUFITDdGSFJLUXlybnd1eFFmNXJoSEJFQlJJb1NMVVlzelViYzRydE1kcGwyNkZnZDU1dGdRRzh4L2ZBWjJKekl2R2JtbHJjWEFtM3dYS2E3RWxmUGNTMnR4ZnErZWdmaUhHb0RNeHlCUktIdnkzU0ozMFE2VjgrNm1kZlpzYUZWM2VPVUtzV015bmtoeUwxdTRWSTBMMVNKTEl4WHlZenBMeU5xaVd6MFhUcGthVHluMVpEdGk5MG1ZMDJ2MHRVcXR6U0NsK3FySzdySXV2MXY5UkQwc2d4cUdiSm9HR2ZFa2xFMVl6cjI4TzFsMktld1g5TjRBRGFOMWI3TDBJYVJUWE91eTl5aXU4MnBPd0hRQkMrcGxkQ3JPbUswTWcvcjF2UllFbTNEQkVjZ1VlZ21VeDAzRzQrd2l0UWdPZkVSRUNWWlVZM200dG1FSXZ3VUtVcTBHTEUwNGxJQ1R1STB5VHF0RmNsRUNsS2xTYTg2V0VaM0pKdnNGV2k3SXhLSk9Cd09oOFBoY0VUclJOM3REcGxNSnBOaFJJYWlxQWlHWVJnbWNia3N5NE5vei9yb2ZRTDdLY2FsTkQwRk9XM1JHWnVPQlIyeG1WTXhrVWdrRGwwWDd1Sml1dFM4Yk5HYUUrdi9aUU93cWU4NkdJSWVFc0N1b3ZXWWZDcTJ0dnBNT0JON016TzY4R1dYTGh0bWdXMmZmZUhwMU11N3F3WDVORHdUa3BDU2NlZkJreGR2ZmluQVJJUklVYUxGaUtVUmx4SUFpWkUwclZxNjVJb1VTWlVtdmVxVU1ycHMvejFaV0VaNVlCZ0dBQUFBQUFDQTBXWnNkMUNwK0h3K24yL2NPbGs0ckRwU2wxSzNIcjM2amcxQ1R0d3pPY051Q1hZTmdpRFlob3RIMW9nT0xSU3V4OG5pbDRyMmlZYXYwbm9yelh2WjJuWmpaTGZhS0QrVlJnSC9mZ05tcGtGYmhnaUdpVWFjR2ZYTm1LNDlGUHZZOXR2YmNUbTc1KzNmZGFtVzZZU3R3a2R6YUNIWmN2cTBDUzRpVTVabU54TFhHQmUvclFvSGpNUDEvUUVHVk1aRkpnYkRESi81VDNleUJjdkdQU3FUaW1KY0MrWVFVanFHdjJuQzdxM25CMERPcXYyRzNWdmxJaEtJVzhNUlNCUzZ5WlRpTkdGWCtSR0NESHM4UFlJZFRqZEFVQXl2UWt3U0NwcGhOZDIwbXB1TWpRWEtCUWtXSWpRcG1KUlVLWXhLWGNMRGM2a0lmSGFUS2FPTVNjNE1zVlJZUTBlelU2RkxwVnVQM3RMSHV3cHJZZnRoaXdpSEZBV2tTcG1XUnQrNm5KNlUxOEN1eUo4NWoyeDBiMGQ3TjlwaWJxMGxiNE5uVStwTzd0RVVMaWhkVU8yaHJwdGdZWENzeEJGQTNsUTJubUZjM0ZiUmpHQmdDZDZCVUg3cW5YQmJhY2pzSzk5UmZJRE1BRmtCc29PK25aZzhQMEJCZ01JQXRRRWFuOVdRRXM5TUFITkc4NTU0d2ErQXJucXZUVGpwR1M3ZS9pbFBtakFSUG1uc3hXa2RBQVJ5T0w5eUFoeW14N1NHS2xrN0doNDh2RHZOZmRnK0lUQlpwRDlnemdNSUJ3d0JrNXRta0VYSXFxTU1hRVRnL0hVZTI2b0xUVHA0dzRnOVVrWjViZ2J4RUh0Q3lUTFlQSG1KVXEzdUpwcXp2U05jdW1iQmRYWVFza3UxQzkyTjhqVHZERkVVMHJ2ODE3Z21xc0dqUGZSdU5qdmVyVERtSENFNHErcWJ6T2p1SUl2UmFEaHpaMS9WSlVwaGhpT1FLSFF3c1o1VGpndUFCOEN1S3IrWUlNS2V3SW9NTzV4eDllNEFFQlREU1lwbTJPVHk4b0lveVlvYWplalVRYjhKd0QvWEI1aVNzd1VpZ2hBc1JHaFMwQ2d6SnpYTUNUVTFYRVpIYVRBWFRDUVNpY1hiWTRWQ29SZ0xFeHN0bGRDdHhaMWFVbmx1dEdodE9RdDE4L1JVZFZwa0RCdmJTNG5Fb05Gb05CcU5GaWRYbjBXSkxKQ3JVOENVYnFxTWhaR3BtK0Y4RWJCSVVhTEZpS1VSbHhLRUVpVlZMVk55UmdwU3BVbXZ1Z0FaaEFHbHlwU3JVS2xLdGJwbUE2d3JRTGNldmZxYUU3RFRXczZZSG0wRTJkY2xpV1dzV0Uzbm1TN0c1YjZ1R1ZuUG5OdXl5V2JId3hEanBXazZNK2oyMGVZTUxRLzAzVk1tS200Wm5nbEpTTW00OCtESml6ZS9LcmRDa1ZNbEtzeUltbWVaZjBHUXl3SkJFRnhDL3JnZ0NJSWdDSUl6OTBiREV3TVRqOGZqQVVBeGRTNlZzRGNzMWc4d2ZZQ1hyTmQ5OFNIOGdhams1dnVVUHFnNFhEUDlKbTdvR1d2R1h4U2RFTExmcnNFU0VzbVdYVGNNM2NMdEhGU0diU0hCQWpjQ2lVSVhKcUhuTWxPTFJCTGFzblVLMlN1eDF6cW5NQi9aTUdPeC96UHU4b2hEQURBQU9BQUNBQW1BQWtBRFlIZ2xDa0N1TFZBaVNJS0ZDUDBraFdOS1BGVXdiZHlMK3NEQnllZ2thSjJXRU10V3JFNi80dnBXN0c2ZTRtRHcwQmZ4WmhGdDlHdmZoUEVBbXlkNGNNdFVxc1BsNGF5N0d1YWs1dDBONTJPT3dKYUJnU05Ic2syTmg3cUVXWllWcThlK2tzeGpqM0VLU1hnOExOaWxRcUZRekUxZnY1dHZwUVFGdEZJbXlMdGl2VGVXa1FDazVaUmUyUWlKMlpyTFlEVjg2TUJZV1g1eEFQdW5rMXludFoyeDZhYk5yaVhBc2hXcmNma1U2M3kvai9tK2duek44STNZdHh6ZkNlT2lBUGk3WWgxd0JCS0Z6czcyV3JsaWZXYjNuK3NPbWtTaXpYSFRYcG12QW5PZ2VhKzdTOEYxRUhQOG5VNEluRlk0UTVtV3AzQkFMbGVzYTdCejRGdU9iRTRFWFJuaXlrOGh0Q09pazh2bGNzV1lJS3I0L2NITTNYWEljY3lPRHNCWEg5UjNOSUJqVXNkMWZpZGowaWluSDVyaVpmVU9EVGlGUXVsemVheDcrakhaVnl4ZjM4VTN4TGRyK1U3dTQzSDU5S2VnSzk1SnZ3dnlxbjNJZ3hMeVVHMlk0UWdrQ3YxQlREK0l2Q01QTWcwbFZZUkJuU0lRa2FKRWl4RkxJeTRsQ0NUMmhtMHNFQWdFSlREcnFiNGdKMkpZb3pTVUtWZWhVcFhxYk5yWitaaGVqYis1ckhyR3pjY0xRaEpTTXU0OGVQTGl6YS9LelFuTUNFS3dFS0ZKWVlHeU55SzFsdEpVL0o2V21GeFVxTHNJblhTczM0czRBSm5UTlA5SlY4MVpXMDhid294d2pNb0dnKzFnUFB4d0FNZVprQkVFK1ZzdXBzeG85Y1dTNWl2bmFTVXBGSlExVEVidGV5S2pNQUxsU1FoNlJLM2dDQ1FLM2VRVTRqYkVDN3VxL0F5Q0RIdUNCUVRzY01iVnV3TVVCQlREUTl5UUZNMnd5Um55RVN4S3NxSkdVM1JpRURQWEw5RFo1RjRJcEF1U1lDRkNrOElHWlZNRkNkT2tMdUUxSUtWRmxHZ3hZbW5FTmVOQkNWU0prbkpFaitTTUZFbVZKcjNxbURLSXpHbGtTYmJkOUhMazFmeCszZStWQ3BtS29oZ2x5VUJWcWt5NUNwV3FWS2NhVUczVWxmcG9rTWJheE5Bc0xWcTFhVTlHSWxPZnZKbE1wcGpKWkRKYlJqdGFOV2svcnpXb01JSWFOV2VzYXV0MDN5TU8yUHhJSTZNQkU5MXFmb0R5eENTd2dDT1FLSFNUNlFWdURoNWhGWGxwdHJnTWp5QktzcUlhTDE3R2Nka0E1OEE4Z0NZLzMyUExid2tuQ1FCQU5tdEN3Nk5vQnJWSXF6YnRPVXNXVTQwNWxDd1oxdER4NXAxbzdURWRKQmdTR0w3NzdCRWpvOTRhbzlvanRLOWJ2NS9oQU04UmE0NlNqZ21kZUx6TkRNaGlVSG51N1FtRERCWitJVUZpVGNKb0hjbElrU3BOK21aR2NUY0g1SWNCcGNxVVIwV29WS1U2NnFaM3VzZWdGM21uK2JGbHJpcTlCbW1uVjdQYjdHMFJ0Q2FzT3dLUVpFZ2g0ODZESnkvZS9KNkpyejJydnoxMThQazhQcC9QNXkvOU5QSmlyOWdKd3lsS3JVeTVDcFdxVkVmZFZGTnRocldnVlp2MlpJU1llcmVCb0pkSEtlYWVnMEo3VUJlcVI4U08xYW4zcEZBTUtMd0l0VlNKKytGbW5pSEVzRkVRVytwZWtvTTVIcWY1MGx4QkxMdjl6Q01BWlRQUTE3bjlYNWtIRlg3YzZRMkp2YitLU0lzU0xVWXNqYmhtdkpFRVd4TEhKRFhNU0s1SWtWUnAwcXVPSUtPTHpHbGtTYmJkOUhMa3lWZWdNQlc1VUt3a0dXd3BWYVpjaFVwVnFxT21qOXA1cWxOVDMvLzF4c2lBUkNLUlNBQkFCUURBZ0VBZ0VGNGtjSFBBNHkvZjJtN1lHbzVBb3RDVlNTSWFUZVZHRkFBbHgxUklaUnZHYzVqMEpJZW9jeHp6cEt0Y2F5Y3hJMWhTeVYrNjEvR0N3dXpBTWZRTXc2TFRLZDhvc0ZBY3JOVkRQSWVGczZMSEZ4bE55dGllRGpiOEdPUVFiaFNJdGowMmdJZzhPVmJVZmdGL0d0a2FDc01NUnlCUjZENTVtY1BqTGJZa0k4SjB3SndYZi9NMW5vOWRqVFZkV2hwaUQ0TWprQ2owR1lZNmtZMU41UTRFS2dVaFdJalFwTkNqYktvU0NOT2lYb1piVkY5L3pzTGRHWUdnVmJNendKd3o4K21xVTJzalkxQnJjamwzZkcvc2Z6NnE3b2cyWTM0dmZwZFVoZS9DWjJISDh5QUEveFE4RDNteUFJRE5BVnNDQUpiWm54aTJjSDVzMmNSSndWYU9tMldXc3RQR1p4WVpBMUtJUjdtdDNBekFtdGtGVUk1aWxEY0FtMlF3b2pGWEI2cjNJc0J5VnE1bCt0TmFiY3RyRitRckFRK2xraVVXemlIR0tXYzV1MUZVZE1LTWhueGl4bkFVNGxrYUFuby9uaHVTY0VuSHJRNlFFZG9SMkZJUTRHRm5ZSGtmQmdKVHdObDQyclFIN2RWNklCS3g0R0RJUFRTUEF0WUhjdWEvVXplUDFlcFpKTmF0T0FTcUZFUWtZQ1dTaktvbWN2SjRRL2xZbVI2YldpRVdXVklGQU5hSVRPVncyWlZIenI1TXpDLzBpL0Qxa3dFV1ZEL3pUOWI2REc2MzJpSzRVcUM3VFAyVU5ibmtFWTg2NFhZaUtsVytCUzNGVUt4SERRWW8rOEI5eXoxdzRoMDdCYTRRa2t6TDBMR0pHSXJyWitjTlh1QjNQdzZjZWRwQU1VNkd6UlFxRFc3bnRCK2NXaXNGeW8zV0NtUWpMME1tWG9CcU5XUkZJWkk3Z0RYaHRTY3Q4THBCZmtIc1JRNlhwVmZJUnZaQlU4cDg1RjRoSDhFS254bUVZbXUrSzZjWVkzZ1FlMSsvVHpKQUlSRjFjS3ZObW4yUTBNOGFPV3NYalQ5anZCQ3I1MjF4cXRXVkk2YXBMcGVoS2N4WnVXOUJXTEozUUdxZjlKVGl1dnZVMHdkZ2h3LzhJQlJJWDFWdU5ReXNCcVN0Vk5QWFpEdEwrTml2Y3dpMVBnRC81TzBveW0ySis3OG9uMHJ4Z0E5T0NsYTBnTjBKRVBIWS9ZUDRuaElhd2JFSjJIbFVuUjlEYnpmV01QQXZ4a3J0QTE0eDZqckFtWVVjZ1JmUmxabm5ZeHMyeStvd0xEd2tTMlZrM2RmakFBVVZJSmV3RDA2dHorQXV3NnBJcXhUbDRkbWpvR2xZUVhETWIzMUZKUHMrNjdqOVJOZ3NIWWd3d09jWXR1Zks2VmhDTE11YzRORlRidjlwRVFqRk5qTnIwTFdBSkIzWEdIbTR4N25CUmZYbUhRaFEwYnpxbU90VlRueWVTNngxSGJDL2Fyai9YZS83cU1PbDdNMGVVbkRQZ2h5aXNGOHFJb0ZiaGZFZ3F5RDRvM28ySzVSTHJNSllDYUM1Z3JId3VwRE5zVm9YRkkzKzlXWVBhMWx3dk9wOTFmdmFuR2hvbUppcDk3dXBOSG1PSCt5YjEraExJcGRkcjIxUmlBMTNKaWI3OWs2cFRCM2RGQW83MTRwUTF5UlpiVFhNeWRBN21RRTlSRkdoTC9PeHJIamRSbm8wWGRmOXlFZTBuWEZmT2VyelkrRE8zZmlCV0JGTUFtcUZiT2Vna0FxWFRWbzVmUzY2eU9JVmxMQ1NkY3A2OHVlNHlKZWxoVVB0VTZWbTJqbk5BUHF3V2FObm52MXc3SlA2eFFaYXdTSVBsT0ZNRVVHdXpQQ0JiMmRKVXlnWTZROXdyNkpVakpyNk5aY2JFWXdML2N4WmZlYzgyTE9zTUs0OXhYNjI4UDhOcTNUREVjSUFQWnd3aEx3NThoUEtrNUpTb0RCSmdpVExFU3RQQTUwbTdTcVltTlN4NkZOdjBpU2pVMDR6bVRiTllzNENxemZKZmxtQy9ZWkpnTkJ3REFhQmk4ZUJIVDVIQWs0SVFrS3VSRVIyY2VIQ2pTdFhZaEplTU42OEVmejR3Zmp6SnhFZ2dKU2NuRXlnVUF3bEpYZGgxSnlFQytjaGdnWXBUaHhLdkhoMkVpUnlsaVNKcDJUcEtEbzZXMlRJc0ZXbVRGNnk1RUR5NUVNS0ZQQldxQkJma1JJQ0JsVm8xYXBSYXRTeVU2Zk9WdlhxK1dqUXdGZVRKbjZhdGVNd01mRm4wY0ZlcDA0QnVuVFpvbHMzcEVjUHZsNjlrRDU5K0NaTjJ1YVVVNFJPTzQxcjJqU3VPZk4yV3JCQTZFMHlaTWtNNGJ3NWh3c1duQzVhY3Joa3hlbXlOWnNyTnR5dTJ2SzRac2R0elo3SE9zd0dFd3Voa1JpTTdUZzRFQzRlbkIxbmlKQVFib3VkRUJHUkhWeUlJUkxlY0Q1OElYNzg0UHo1UXdJRTJFbE9UcVFSWEhBUTE2VTRoQzdnZ0NFQWcwWUFCd29LRHJ1RWw2K0dxYkZOUExXR0F4REEyKzJtVVNOT2lCZzd0MFNrUzMxb3hlTWtqckZuMklJakp6ak1TVWhPdWtrb0VKU2lqeUdneDJJYS85WmMwM2IrbjgrZ3FrZ1MyOHM3NTZjalVwM3p3VHIrUlBlNlNlcmxVZFQ1YWV1Z2UvQUhnQno5RjRpbndFOHErSDRPdklXMzlGYmVXcnkvQnFNdnYvS1N1cGk5SGtyVmVmRzVaNElhdmZqeVd5K3A0c1ZYeWhlVlQ1bnhJcS96YnZiam9xWFgxWmUwaGowQVlGTVFaczJCa0FnRklHRnd4SFlOQjlYZGFtd3IzczcvQ0lmZ1laaWZoVDlnYTEweXd0emRaWS9oY25lVFlhL2tpejhLQ0JvcmhGWjRnMWxYQkdHV0tBNzUyRWxJZDlhTEs0U0ZOZFYzMjliRzdSSUlLVTRHRXZoanI4TFUxd2pBMjNzOUJtZ2JHalE5N29VS3dxaU92eVBaRVJJQ0tJekE2V1RwV1F3VjZvSmxlM1ZUbGo1VHlQS09qbTROYnZPZy9UOUdWZnhOQTloRmhRRFN3L2ZSanBDRjJXOE9BNjhpQ3lUK2YySC9ERzhDNmUrbTF4L0lJODc5TkEzNXJ3QUE2OFFXQVlnbFRUQXNZQUNFcWVOKzZteTN3WW9BNEYrak5vV2NOUzhPaWFqUVFQN3lNRmF3SWpRUmdTVU1MSTBRN24xUkFYNlJGOFlLSUlKVW9aM3lnQytRMlFvc0NrdE81bHVNSEdVYUUzZUxlOFZqMGhxcFdBcElFYWxPYXBHNnJkVys3cVJBRmNDZVlpa0E0QlBUc0xoL3dVV2ZPYng5UjZVOHFmQTRTS241ZzdZQ1hBU1FDUUJZTjNrQS8vMU4xZi9rNlMvMFkvMW9Ccjc0R1h4eCsyTmYwdSsvN2d2cUMvTHp6MEVmOU9SQnFqbjFQZ0xvWlE4YisxWjBjOGdOL2wvMkRXZk5tZktwWDEwMzd6Mkx4bjNsdEJYVGJFNVo4SVB2ZkcvR0pvU0R5NDZBTXhZMkRnRWhFVEVKR1NVTVRvV2dwa2N4TURKNzI0UjMvZUgxOFNDQ1M0SWt5WFF5Wk1xU3IwQ2hJc1VNYXRTcDE2QkpNeU1UTTR0T2Ivbk5XMzd5dnYvNTJPYys4WVhmL1RzdTNMTE1lVDliZFh0MmNOZXZYdkx5YVBqRkRVK05nUmNOdU9CMXIzbkRMQklHUnlOUUdEeE95am1vVklPTGg2K1VHQXdBa29QOHdKT09oaGJKQk5VdmhwVU5MWnFEVTZKMEtWS2x5Yk9iWGc2dEVoVktsYWxTN2x1VjJyVm8xY2FxVmdkdm5hTVFDY3VXWEhIVjVjaTRXVVFtVW1VME1NQW10Z1FzQlN6dEYzUmJCQmV3RklBdzVsNDFpamNiQm1RcDZ5M0FFTnQ4MmRBa3dqeG56N1A3OFZVVURCL1ZtdUFkK3g1NmNQKyt2WHZHUmtlR2gxWXNYN1oweWVqSThPS2JGeTFjTURRNE1IL2UzRG16Ky90NmU3cTdPanZhMjNLdExkbE1PcFZzYm1yY2dXQTA3UGNlZmVUaGg3cWRkcXZadVArdWRHMjFsc1RBUCtmejZkcjFtb3ArMExKMVRFZ2dTNkN1dkM1b3lBaXViMDEzWVBNTGJZelRiT0RBVFg1WUVpWXljcFU1SVZjUGZKRGxKK29PdWRzdkxPVXlDSEEwZXBTaFJkNGR1SDRLZ0VwTUVPV1pHYjVFRmNNalZKa0JVQlVCUlprQTJaS05Sc0FOMSsxMHhLOHRpNUx2dTlDUU9jWnd4b2J0VkpZU05ZU0ZJMy9lendpTEpkUUVsVkFWcWJGZlZqN0dGWUtVd2lMMk05Y1NkZ05tOExIY3NBSWx2M3QrcFR6aWtnalM4TGhucFJBNHlEcGJPN0JjZWtoTElSdHlyc28zaE9GYmlVMjlGZ21LWTVKODJ4UmQ4cXlsc0ZXa0VIL2JhbjhsbkR2M1p5NWU0RFZHaVozT1FSREJENDY0WG5XVG1vRkRSNTJ1WEpremxmeUNSTjBqRlVMZXFaVkxOUUVYbVZFbERvdFpOT2ZpelE0UkxiaTBLM1ZmUWl1T0tPRVNNRlR2MTNUdmk2Q1Z5VTdXeE1tS1czVWJ0RG1uSTE3eVgzSGNud2pnb2ZvVTRtYVNVbExuSVBvZDB3OHl2NjZvV0lNZFNpR1BVdjJ0Z21BNEVkYTEwRnJudFFtL2VsdGhmd3VoQUhXS3MrSnMvM3pxdFR4U2ZjWmRXdk1Ca0VrbzJPV2Q1aDhWeGtsMXdRMHRXcWZYeGpuYlhUd0R3NW9tV1o1cWR2SElEYktZeHlnOTcwcEp2ekF6OG4zNU9MUmtmU2JkRFRwWmdOTTlsUUptMmlVMy9IMG5neHZIMjlkQWVZMlFEUXZ4WjR6U2hwUWJoQWpCbXdWYkk3RjdJdko3a2lOMUZKR1dOdUFuMHpNRXlSbDBoMk4xN0pDS2lnQ1BLZnk5bkhOT3R6d25JendtZ3V2WlovVE1CY1FsSEFmdzVFeEhEc1hHdUZ1U2VvM3lDSm5aUmIzVzdVZjNhTlo3M0VZSzdrT1NsVkpzd1lZeUpDdGNHTTFHcmo5OGNuSGhrRm11N1BkT3duMVd6UjBoeFRuUlU4YUJKbXhxSDl3UUlJYy9mVVdCSGo4cXJJU2piTzJoUFc3bFJJYW9ESnBLcDZXclZIYjBvbDVMbktMeUZqMlRIZ215OTZBcFo2L2xxMWlOUFk4dndES3o1Z3MrRS9DWklDUHdjYWNxY25SaXIxUnpQc25DZ1FWYWc1VU1yS0dKNnk0K3lQWVpJN3lqS1RKS1NVTjRvVVQ3R1RkaXhPMERrZmNUVWRta2FCenFQYmk1U2lLZkphSkRES1kxWmwxMnUxUkFPa3dTcDd6SG42UWthaXBOTHI2RTBwSGdtSVEwTzN4Qm5XU3lZMjBjdUgyeldZeE5RM3cybUZ3UDh4azVjS2VEc2RVYWtLbExITkpHOHM1eHp5aE50dEVCaVJETlFzY0NsMnYyWkFuMUNpdHhNRWpMTXdHOXAxZER0ZHFpd0pUTkNmTFNxUlMwQXRWdXFRUElzUUNSWkltOHg2NklOd3BUQ01KQzJ2WUhyTk1XTXc1VHhKNFZpNEhnUlJva2lnRktQVHBuNDVKWWd4cWgwYm9xZ3VIUDZJZ2tRVEtWUHA5Qm1DdHlTT0pkNmJ5RTBsUTFkbmt0bGNpR1VtcFFPOXRCbjZBQlJCdlliaC9vWGFwbkNDNzVHR0l4bDhXK1paT2pvSFVodTdOQzI1VUpvTGRvdkMxVm9BaTJGQVhwK000TjFEeUF6VVVqZVN2NXdHN1piZjlFY1Q2ak1ic0oxQnBZL0p0b2w3TjBqcFFoZ0xoY1lmWWVVWjJCWHFHVUg4NVE4UlJ0ejJmUWRuem5sbEIxOGRDRE0zQk0wUlZtTFhHUEZWUmpFZFFoTFA5RGlKdnBOem9VQXZlZzlaQUxmSWpUVmI0ZXQ1dlBNOUFVVkMxMUpZQk15RXBKb0xhd0hWczNBMENORDBjZzIveG5YSk4rSUpXNEFLZjFHU1VhM1ZCY3VNclhsVVlUdWdab096UGZXS1J1YzhxWU1tbE9NS3dsN3gwa0t0c3dsZjJaUnNyajFoZzJ5enFCYVBsQWFNbGtSQzd6RzRXYUhjOEFCcmx5MG1EVmdQaEtnNjBLSUdzbG4xRkZRR29CSFkxVEd2OUtnSnAzVm9vM09CSXVBNDg1b3JoMGMwTkcyTFg2eVNBOXNHY0JhbjJRaG9iZ25pSjZGZXR1S1NIWExwNWVjTjFGaTFvM01nTW1LZHcwSXJGaGo4MUtpVUxEdlJKREk1S1NVbEtBRklLeFZ6Q3VnVXhYcEdnWmZBZ1BFRTkwTmV6S3pweHZIYlBUVnEyZE9hcTg0MkVOOXV5VHpLMkZZdCtXZFFaRGU0VWJlQjE4c3d2bFFVQ2lGcmJMK3lDN1dxbHpaT1ViMlZwWVFadTFtUFVrVDJYeTcyNk5qMGdwVW1vRVdJZXIvRkprZ2tnYkFBTDREaC8wbG81SkRCTUM3a2cwRHR6UG9nRjBLN0xXTFhSMDZQRU4wb29ISDFsdWVKa1FEUElXVTZNWk82TGEyc2d1bkY1MDhDMmxZR1pQbGN4MlhKMXR1WEZicmU1MUNJVVdTaGI0Zm9qNkxnR2NtbGcrVUNpU2l4Y0g5cko2VFRKZEFDMjRBcEdic2E1aGEvTklyK2g5SWVhWElDaVp1OEM0Skx6V1Q3Z0tZVDc2MzkrQUFqTGxwcGRYQUxibXQvemNkWjhuZkkvc3dYTmJaZHc5bVIxU083SWZnWktDLzRNQ3dwQ3c1c0QxajQwd0l1YmR0cEJOY3NWSG11VVB2aGFrc3hNOUY4Qkxrc1EzNk0vQk9KQVF0OFRCQlNVYlNvandLMzJFWWJlUXJ6dVlHYTluV0ZoT0tUbFFCdzlDRmo5alRHNEozTmdEdmV1QWcxVU9oYjRLQXA5cEhnYU1KS2IwU2xvTDdEb2RIc0xqcHRYaGt2T2Fhb2UwQ0hqRFU2dGtLQ0I0MmdaSnpSRGNQbzJ4TmVKclpEeGNYZVYzVjI4SndrMEhKaFUwOEx0R0RRTXFLT1AzVEdvQUk2WW5iRWtSd0RSazNPNGtpNjFJbnFUODEyeEtiaWlvQk1HRTVETHBNS3JpT3BvdkZMdGJJZTl4cU1xL1NUWXN5MFpRRjV5YVphdnAvYStIN3ViRG5wU3NpQndKRmFnQk1pN3dWV2M3VUhxbG13M2ZjTHZ2bW5WUlNGWVJRRW5neG5IdnV4OFExQ1Y3QUlBdUFJRGRBSDFBK0x3ZytnSGdQNEM5UUxnQkFOYWV2T1R3b3FNSFVvTmdtVm1FeURJN0xyeExIRFhYRWs3WkFNSTl6T2JHeUNHRGJrNkc1VWduVHBQYzMralpRTWpZR1V5dU5YZytNL1RpYkkyY0J4Z0p3a2IwYmdpNGZaZjVBQkNXVDdCRFNNOFllUy9KOG5vNElzeFFZazUxd1pLbTQ0Q2p3NnBUZlFqWGpVTHY5ZWpQT1ZLSjNQaFMyaUlmdWxBSzZzTUx1elk1T24vYkh6aFpETjJHYVBoNDY2WkxVVVpFbVdKM1hSRys4QSt2NVlPT2xGSU1SRkI0K0xqV3l1U3VTT2VwM3FyUFdyTkJvUnZHRFdiZ3FjdTk3MTVrWHoyQkVNRlVaWGZodkw5VUQvT3VtNjR3ejgxSWtzU1h2WnVJT3FjWVJDcHQrRFVpZ3N1RTNRN2J2Zzh6OXFFemY4bWZlSEZuNTVzSlJVdUxZeFEzZk1IWnVPN3ZoazhNMDkxUXhMQloxU2UyaVFOVjBkakV1Q0ZUYm55amVhcU5XdERVT2JxSmVKc0J1bklRN1BLV3F2SFBQRnhFWFRNS1JqZkFEYytNOWI3NVdpdEtlTjJUVHdQTWIwUEE5cTJGVVVHU2FMaHNsakRBVUFNTUxkS1lRSFZqY3dwZ1lLb3dhVVFDMTZycmh4QkRSVS9hWmdiRW9VcytBMTBUeGtzbmtTTGpaYXl5UmErUGhLS05qQlQ4TG9TcXJxQkdpcUdTUmlGNVRCQzdoNTNDaW9lRjRXRk1WMXpLNWpEUG9iakhnUDVhOXNCREQxaU84NFdjTDk0Q281RWRjSWtIbE5mSnRmbW1BRXQrQXAxSmF0dzd2NUx4YlNVM21lS0NXczEzY29kUVVZbEpWdis4dG11ckFHb0UxbnBNaFpleFRMb1BMMGtnN1VleTJNTEV1dk0weTQ1S2x3R2xXeEFobkhmTmpaYVdOY002ckpiTWltaTArc3p2OUJCcU91dGZQVkVqSGpJYk5kNXBhYU5tYkgzRkxKdmkxdGxPeE5zb3RkaU93VDluZVBPNytlU0dGRlR6MFRhZDlZZG1BL3BKOHFGYTVnc2Zhb2lzdzYxQW50OE92aisyNDJXSzNSVnIrY3lPQ0dUWFRaN1pxM3lISlFMUitxZnVTYmdQbDRVb1VubkZNcWx1SDlBUDhSaU8xa2Fsc3hlZUhYbmt1TkllOSs2MDZ6aWgxczhPSzg2ZWtNcjZxc0JzOHJ1VXE2eEZIMGdVZlZzT1lhbjNXU3RBUmY3RjUwdjZ3ZHVLYjBZdjJic3AydkN3U3FGYU1BcnJJTHZZVjBxeC9UczZjRDkvUjB2bWI3cStVajRRSkRIZkx3cWExTDJZU2FLZTZvY1dYVDZFaCtWd3VhUnlIc3BMdGlVTWVmcEpSVVlJdmRPcDVZRisvTWhnQkIycGZ3R2prS2NjZit3U0krQlZ6T1hMR2cxY3hXNERWZjlIT2FhSGlTczAvUjNkZlNpOGhkRnhZaDdNd2xGL2p5aHdEYWdGL0NlMnowaHd3RjRYNUpiRHNGSnVBd00wTnF0anNHTURDVjZHSzE5aGpVQURiUk43eUdkaE9oOHV3SEwzMEd6cXlsbWN2N2FJZzdRb2x6UG5Md3JiamNOdjM2WEthRlp6NGk4UFZIaGVRM29RcGFxTEpESTNTRGtFWExITUNKVFphUEt5ZlFUVVdyODZxSGNXNlpUZTVvTTd2YXRORFhrRmxja1VQNkdTVVFoVldpdEYyVzcxOWZQT1pIZTdnOFdyN0ZtMjR5OGhIa1RtUmdWN3ZqUFJYUHE0ZEQ4MGEwYVpnNDNmQlY1dFd2dkk2QUJZT2dmR3V0aThpL2txeFF1TEVHb0cxbzVmVG1tNm5zV1pyZGx1RTJicjBMZ2tkU2g3RjFNUzVwRDBEWkR3OFVpdFdLRm11c3gySDIxeEQvYm03eHhzOE9IMWxpWUpTVnc0WXVqd2h4UzMwQncyNUI3YUNiR3RnSFpVTEltNnVlYXR4ZXlwclZrcStsRm5CbVJWQWQyb1VUNUNWNlBMa1hYNGthS2JkZ1RtRmhqZXNvL0tqQzhJbWxnYkx5ckdLMzhTN0pqcXQxRTVhQ01pWG93YStVUGd5M2JKNTZkb0hJZ3hQUGdid0pyZFd0bE9HSjdNQ04rMDVpNlY3VW1qaWpoU21JL2VvZFhqSTJXeFFIamFtZlZPU1B5bldEdDU4Ym95OHl2TE40cTkzSmhwTDVwV0JuUkc2bGFhMXBFVjVtL3VJQXBSTjdSWG5UaklybW5BMnNIa1pwR2NHNnlzNlplV1h6NmQ4blRUZnRaaFFPYmFCWG1MVk1WcVprZ05ERmdEaTZYbFRZbTljVTJXWWpwelNTRkFTQnRxcXNTb2xpVVBLVWZiQUQxK3BpYldaNXlhWXppL2ZtV3NIUlhpY2ovOU5wMFp6ZmladEozMTExZWRnZkF0WDhXK21tdjI1MWRmRXdGQXRxRzh0ejJ5RHpMaUR0dmFiZXJXK0pxTmJoQ3h0U2dyTTZxNHNsVEpTNDF4YUNwQkdocHBEcnJpUVFXVjdOZ2RqNEY2aFNVam1vTFNCc3RaVGR2ZGZoQVluckJqVWl6bStnd1Z1OHpxaHNXYjN4L0YrNVhFVURVVFFYUUN4d2RIeHk1dmk2WUhuczI4VWlKaDBuN3hJV0MzNWwyc0dWUXFTTEhmMUNON2dDUUtrZUdnUjhhVFdxVy9CbGY1S0NBUWdUbXVMQ3hNelJqakxJc1I0UWczVmpvNithdlh0bXNDSm9aTU9rY2J6RjFLT0hHRDdaR3lrbGNXTXhzZWlEc1NtVXdDU1JieE0rT01WWWd4S2d3dlI1Wk5NQ1I0MU9RdUhzenVRMSthNyt1ZjNnTWVQM0dSR1hITTBHT2RiR2hmZjd6SWFSRUIrT3h2VGgwOThCczNmL0RBWTNwb0R5clFVdTZURUh5VWg1ZHRjaWMrT0NoUUZqZUYrUkR6NHR2cWREOUZ0T0NpQTJrZklIdmVrMlBMUmZ0QU84ZHhZdTRlMExpejdXQnl5K3dEeFg2Wkd1clphYnJ1ekd6V29PK21DK1pGa25Hc0tUdUx6TkhDSkM1SDhnVXpGczUzV3JCVk1nSzNJbE9CRkwvQkVRV205alRtY1I4VUVrMExKL1FFTURmZ1BIVFpDcXFXRi9vS2VldjRVUjRxR1ZVUzV6eEIwTmZ5clFkblQ4d2ZkRWFMdHBjajNKaDRGYS9HVDZZYzVadUFpMkRqdXdjK0liK25PSTd3Nk1hcU8rQ3ZLYTBqemFlZjREcVFvZVVJQWtka201dTVuUE83Wm13VHpBQTVWVWZ4b3VTMkdGQUlNQWhBMVMrZllZVklwUGNYaUZMRkNqbWdlT0V3QVVkRElIdzYwUGdwSk5EMk9GUkZid0lNRWF4aHBLV1c3Mlg3bG13OE9ZV09GdzJkWnNuMmROdjhKcCtmRkk0WmhtVDl3WmNaYTlnU3VBQlRydThodzVrMG1lQ2o3U3NlOWRLZ2dKUFJSZ1VzZVVWSGFrK3h4OE1RMUZHRGhNcWF1bG1uUExuQXREWUFDUzlPVzZKZXhlMUYrNHc5dkprejVVeCtxZ1c4NWpreHd6dzV3V0FXNW1IWnlmek9SYk5NekNPYzVqZFZwaFpzVXBzZStwR2dScHhtWjQrWjg5aTlwTzN4eGhnNVJoKy80YlVDakVwaDYwT1AxL0dXWnJXb3JpN2FaV3VRaStMWkp3WXAwYk5NZWZaaHd4NDk5aW42RkpjQUs0RG1BR1RJaUZXSnhEVHp3bEhmemZ6YXZRWWQ0eVlNeURTWVBDTE5tSkN6dUZGYnBvNUV1aWlRWkptUWxySXprRXhCR21LcDJMVGppa2lQc0tmUHZGMkpkRDR2MUUvczJlMjZzeGdDcnVDQjZNeVpMYnNJUDJUZDl1bk03cnNzdFAySDZGQmdVbE9CNjBDL3pZNHEzUXkwcHJuY0FTN0paTTgxMnlZZEpaTDQ0Z0lETnU0NjJZUmFUenk1SEtxN0xqeGpGT2NieGFYWnBCMHJiWmJVUFRPYi83cXhrZlRQT2daL2RLS1JnR3o3YmZJc29RMER4djN6OTgzTE40WW92b2FibU5aMm5qT0tIblo5c1JkVEdqSnF4SU9ZTWlkbkp3UlpEcGtUMjJwcGtkSVVOWEZTQmhYS0hHdUJoK2hsMytqNWJTcjJYTU83U0IzVkthWDJCanJPTW0xNHErUnNPR0JIc3dZRk5yK2tZTHpxQU0wM25qQjk5R2pxamthRHhNZk9hTnJXNkU5Vk1sQmlsVFZ4Y1dSaUFKZXYvUCtUNGE0TmJZcUVza2RzUzRhNHJWS0xLUUpOQkpRRmJTcmZqdEJtTW9FVUtTdmpmQWxBbFlUalMwUmgxTkhVdE1XSFc0Rm4zMFlVMEk0STlBUFU5cnd0dU4rYmVubFNjdGlFVFJZbTRnNGo3dDRBSkpHb2Nlb2tPUmdRTTh6MGZIOU5MTGFTUVJFOFdjQzRGZmthc0NiWmhYNms0c1NiR1hOTkxkSXZtUUhPQkdvR1Y0dGdOSzBzOTN4ZkF2cmk3ZW1NQWhhVWdjR0l5eWZmZVhTcGJIZzkvZDhtOTV1OC90K1R1Ny90KzdhNFR4L3NvL2U1TlB3enNwdktSck5UajF6cC9rL2Ivelgyb0UvLy8yU1dlK05xdmdtUmRVMGFLandSSXYxNnBFNUZVZW56YjNvNzVBamdIRU9rSUY5K0dYSTlmRU5ZS0g5Y1JrUHlxUTFHaFBYUytMTEdubVgyZUc1OWs1VFp1eXJGWE05RG1UN0tsNExtbVJ6WVlMaTVSMmZEa3NLSWJmQzVya3hnQURiNlIydVRmZW8xL0phSlA0WjJ0UWJ2NzVpYnVHOXZRYStvTStYYXVpS2FIWnM5MXJJeVFXK3JCbUlvZ3Y0WUV6aDMxOWZkdDZlZ3I4NjVkV1Y1NjRySitKU0srRzdpVStJZWJqL2VMeGZJOWhGWE92RXhjVmROQzk1U3h4MHA5SS9hVXoyYVZZeFh2YXE1YTlqaW03Mm1TY2JzQXoyTGEwT09icjB2Q1E5WUhkaEFwTGxYYS9XTXVvdytjLytxVnYwRHlxTXBYTEptZkVMWDhFYURidTF4ditFV3RKQnZvb1QwYStrVzJPbG00MlkzQWtSbURRWVg2UHJqWld2OTJwSmtVQk5pWDZnbzJkTGhlOFlqRVFPMXd5cWN2L1AyajJ1aTVIMlB5eXRPZDNKT0FNN3UxRTIyL0ZxbmZVUnJkdmIwNGk3b1g0TkRyeWZKTFJvdURJN2FtcnZWcTl3KzdhcDAxNGpGRnhxeE4vZXFWN3I4MmFtYWM3MTI1VUN3dVVkWDYraWxBaWxrdnNXdUdBaFZxbzJPK1ZPSytkV0NmUWNaN1NxQytPcTkvcnJNUElNenVNU2E3S0cyRmpOZ2lMY2szLytvNVZ0RE4xRnhEalJwc2l4TTNqWnd5d1NrQ3NJcnhCR2xtZXhLT3V5WFNxd1gxSXdXaktuVWFOU3J4djdtenFOdVRsVVVWWnEwM2NsYSt3L0xkQk82Vzg1c1VidElLSVlWS0w2SDdIaFdVck9yNENGcVpQRHhtKy9XaDVSUEhxWDRMUk55SWdqUEYwZVVsRElUdEhPZXFyYnVuL1ZUaWZVS3dXaWhtSXBBbzE0Ti9wL2dTcXpnN2x1ajByN1dLS042T0NQeGw0WExCMUJid0tFR3ZZd3F5elViTzduTnF2ckhtN3RvZnFCTTBkTG5kcXV2ZEVMQjhtQjVuMXpQV09qYTVKQXFTRVFyWGRDSDNQRGV3bjJoK3dvSmEvV1N3c1loSzlNaldzbDA2N290M0FGRHNsWG44N2RTaGlSbnZ2bWE2Qk92OG5RT21IVVFUUnd2WFc5L0Q2clFjUzAyWGozM0RiSS92eitmWElidVNwVnZWcXZIMVhmTnZYdXVtaGczVm15K3JRaHlqVjl5WG5SYTJiMmxMZGEvakg4YmJhVXQ3TjZhNFBpbFRaYzNtYmxqSmJveXpvdmNvdTh1ei91UElORHo4ODRST2o2d1cyMTB0eU8wb3JGVW9QWFhOUWJrOVpKWEdWa3JvRzZaTXk5WFVQTGEwejZyU2dxbGdYS2xiVkJicTQwcWNYOTMvdDBQY1p2c2tWSmx0TTFPeWJodktreXRLT1lNL3VWMHNWZ1RVZUlCRldGZzJ1VU8wRGZ6RjliV0JYdGpEanZTSUhsVjI4MmtuQmxML2IvOU5qcTR3TStNQmd0bkVSZUQ1bHpXWURTMkdxMHYvMENibTZSYTEzd0g1QS9ya3R5ZkxlM1kyczhxOXJ4Yi9LdXJHSWptSEhwUS9zYTlGKzNHMWpSbE5tWW9RdzVYMDhYMmZ2clRQbUtTWkR4ZGpNdlVwTEpIcERrZEJiY3h3UlQ2QnhHQ0JzUXgxS3J0U1Rtc2VBQ1pCeDJ3a1YzamZMVFkwSUo2Z2tpN0tlUWNYdWdMK3ViUWo1WFBidERvekJtem9jdFJhK3pOMmt5UXV3WWJLWDNuY29PMFdsa1FzSS9PQ1hyY2ZiN1BHSEpmeWY0VFB2OE9WaTJ0c0p5Yll6Y2JNcmdyQk9YR0pQdS9PaG1CRUpVZmpnbmlHQzZKN3dnQ3VHQzh4eVZSRk5rVW5kNUFWcUgzTEhBeTgxd2swdVJ5SldHZGI4ajcySUMwbGM3TmIyc2dmTTI2ZVVPMllmYncrMW1LU21YMEpsUFdaR3cxVVliNkRHa3laU2xEZXNOdDFiVVhsMFo1bzZFZmU1MEFXbXhzUWQxQnBNTVlkQTR2OVB1RFF3SFhpSDk2Q2I1c01lZlNCb01oWjhTYU0vcS85QzZiTEM1TkdZMHBLZ2haTy8zMnFUMFZVQVlxSFdER3FWYUpoOFRWSDk3TjBSbmlrYXBkeWwybkJKSVpWQnFqdzFDcmpnTGE2V0F6Wm5CM2VZRWhvc3JMNUFZSVoyYTJjeHJuYkwvV1JpVVJmZGkwNE14czI2VHNHMU9sWXYvUEg0Y0FoVG9nSittYXVFSWxpZTBJQXJKTEpORG1iSE1vRTBxci82aUxuQ1NqMTRkOE5INXFhVlc5UVJBdElvdTB5N05rdHV4RVhPTFVHYzZrMjJEOS9UYzJzL2pmblJBaEpJU2hqQXUrNlcyMTREMVFNZkVCZThuZ0krUWtlY09tTkgvNytTbWRNUEdkYmlFMHlhdGd2N052R3I4S0JiQ3lJQWwwMmxvY2RFZTYydXZjYTd1czJkY3V5Zks1eUNMMXN2SmVkNjJ6THJ3UzhuUjduZGloMlJXTkJ2aFN0N29wVzRzM0tHdjlKNEk0bjhmU0tDUHVYcU5BZWFOUlVDUXZObWFWVEJCdU54amhObmN3aXhvTUdkUnpybTh6R3VEMnpTbnpaMFlidWpKV2t5bHJNL1RZZDlZZEVveW1qTjNZYmIzclZyYndYQnpwb1BXSnZCM1VlYzg3MTUrNXNiWENLWk5wa0NLNDJEZmtjNDJFd3E3UlJYNmZQbzI1b3VmNWlkR1dldDg4cDJ0a1dxS3doRmdKV0hNdFJyTTVaNXkxLzY3VDNDUlI2MXN4WDR6VXU2TXBGRGRucklidVdnZlZ6YW5mMkZ0Sktjc24vNnJNclNuS2FFemEwK2MrSENwbStyei9lY2dUUk4rLy9iVldZd3AzaGFHYzNtOWRNanRRaHhOKzJDR0lvU3BKZkhzUXdnWGp2YVJsUDN0SENBSzArZE84MnBoUUdqZVljOVo5dU80dW5hdzBVK3V3cE5TT3FMUk5iZFgwTkR1c21BOE9WVDBua0RWOUpWQUY0QUZSbk04dE5qVGh0U0ZaVG05QTJsMkJOS2EzNXFuMkV5ZElUMkowTG83N29UblFremFkLzJzeEVVU0sveHBBcmJydWxCMWdKajM1ZlZHVzIwTVdhVlk5V3VSbTNWSXhyZWJmNHRwKzVaS094NXNoUFZObkpJRXVQOGNXOFlzY1NoM3BhcEpTOXJSODhQRE9MTEVHT2pjWEViKzVhLytsWnNsL2hHOU9ndnVidkNkL2NYMmRUaFZLS0EyVjZncjVKeHdJOFp4QUNGb3A5V3V1YXZOdDJsUXphYUxxRkdxdkdoVFNna3VSOG9iK3NCWU9lL1Zkb3U5RkZNOTU2cmhROE1PWWVGTkFHWGlHZkdaVU9icE1tT1ZMdmlUNS9tTTRDYmZUclM0OGp0aTlmL25KQ2RjeDZTMnpOUG5KL0x4SHROanJxYXRmS0RLUzVNMXZaMUN2ZmY3NjUyU0lWcCtlUWJvQXZxQU1HVjZQcjUzNGRQYU5wczlVM2ljOVR4S1Z0bis4U0FNekh0bFl2dnpocnkzdkY3NVhZSG5vcTJYTEh2N0svRzdCZTRVMWc0Zi9XVlcvUmlIeEM3MC96NkNPZnY3YTV6cmgvcHovSkwxSzh3YXJhT2J0MWxmNjVBOUNjMStaSTMrVTd3R21WWVRKb2g2U2tqMWcxNWNjMlM1NWQ4L0x3dUxZUE9BZUVJQUlCTTRnTDdvV3EyTC95VGNPclBMZTVZTFU4TTdPN3RzK2ZCc21Wdko5Y05WVUVYbnE2Q25TZ0RzckVQV1JSc0RaTUpzbisrYUZXNktZaHJHVTUyb1M1UmdhNXZtVkZRdVZDOHNoZVlWWkZqQVoxRnZqOVFuSEg5TFhlS3krOWljVEV5eTZpNVd6ZWh1aCsrcTcxeHg3RmxIdFhNU0VKNlpoaGVTUTVENXovVVVWaTVTTFhJbGR1T3kreEVmTUM1RDBzUXpwcmlYVTlSYW4vVE9KcWtFdFdIZTJ6S055ZWlKKzVvN2kwVlZZMjZ6cFh3Q2x4Y2ZTWkQ5Qzc1MS9wY3lZTXZDMTR6TEpWZXhVUmgvWDRuVnFVcFVJWExkcnNBdXBWdFZ0ZnV3WnI5Z0xNUElpUk1zVmpxOWdhSnpHclZKQ1NjZW13WWpmUHhBQm5sVHFRRlFkakk1SE5vZTFDNU8wMVpLaWdZV0JMWUJkTE5Zay9aZGV4Um9WNFNCMmZMdzFjMFhDSXZtenEwcXJ5RktCU2ppVGtmb1ladlRvN3dzckFNSFpmelJBNTlZakJaVzZQMTArdnNwZWorRWVCWnJaOHVlZDA4NTZ5c0M1QkRmdysxY3VFb3BvcmFaVWw5WVZHbkxzalJCWkV4UE5KZ0tCMXNabUhsNlRhQXpZOEcxZUdXRk5HNktDYytQMUlvMHRxOUxIS1lYVWZady9mOFdSTk43M0JmaDVra2dlcWY4WldTMll2a3MzRWo3cGZxaTcxbTVvSk1nR0k2Vk4xT0Y2TW8yL3I0bHVibEFUUnQ2cEJrQk45NW50WFl6SDJUL1B6TVYrWWVpNTg1eHVUVDFZUy84MlY3ZW5OVlpyYTNWUzZPR0JnQyt5c0lWK1kzZUtYcjNBRS9BTzBzNzVsOVlZMHBTTEdxbFVCa2lvRFIveFZEcXQ1Ny9BM2FrKzFUZHVMdUc5YVdmU0F4cVhiNDdSbGpXcThZQ2JEQW0zWUJBR082K0hPUXA1bUhNZHBqRVl1MU40RDZOWEJQZ0l0b2xoQStvbWhjbW5SZEJSTndzZ211VW1mKzh5RkkySUVIbFliRzFaTVF6QjBMRGtOd0hrRTdUVzRmenUzQzB4aHpWM2IybDYxWkFuNkJtU0tlRmFLU01JR0tsa2VBOXg2NHE5K1hOZHZuNW9tWTJXcnd6MTlkY3kvdG1NZnc2MDNPS1Vyd2oxenE1VjkzQWs4NnlaUnFQRmxyUlljcUk1cFBHOGp6M1RiRFRWV0MydHYrOHFGcXNJSTdHaFp5cysrVDFMWFRQM3k0L3p5TGNhYlQ3TjdkQUUzZFR0aWJqTW96eWtWb0tlQUdZMnhxRzZzMktJZTdSSmFnM2tUT29NWmNEOGJuVkVKcVlGNFZySGE2TDdpVEpwa2JNWGMwVHFPR3pLblZHYURVMkkxb1dwelV3ZjVBTlZZTStnbXlFMDdnUk1NaDBXSXNaeVVVbWhodW5YV1pNbTVmKy9IYnZzMDhtREtyT3JjYTVhc0c1aURqN2FKYlk0MFhuT3NFWmNVcXdiRHYvbGZyRGJVZFdweVhxSGF0Y3hiWFRUVGdiZUo3OGVYRjVuM3p5TFpQRnZyT0RnbmhPQnAvdkhUYVdMV2hINlRkbjgzZlI3c3RFeS9YNXY3c3JRSzFYWHZGMk5hWVBSTnFScURCaTQwZi9uNnhRbCtMNVE3WVorNDNwa0VOOVR6QUNZbW9HdWNUeFNpT2N0WW9BM0poQlp5S1hWd2p1Y3ZCbzVHSFJxMWNpS09ML3N1Z1Q0Q0dobStndzdLOEVLeHp2U3ZQNHhCOVlKbVdVN0p5OCtJcFU2REVBMS82NFJQYzBJTlQ2M1N5TVpHd1B2MzhlUHM2NEM3RmNMYXh1MHFjNnE2dDBRNlZFQ2NFTEpjS1ZjMmd1Q0lJMnFsWjkrdS9uWjF3Y2xHQ05va3dESHhyNGVScVNIdlh6dTFPeWZwSC8vejc5aEJzeXpUMjk5YlZVNGRobDFpWWNSNUVtdkJOTkVsTkkxQWxvcTF6RVVKbEY2Uk5MTjB3RDg4TGZ2N3AwK0NiNE9iSmVxMlhOV3cxdTlvQW9OSXAvbUpYd3BLL3ptaDkzNVBnUVBaUmFOUk5KTlBwVWZ2T2ZlT05sZGhGQW8yZ3FBVzhWQ1FkbFdGMjczRFpENmFaTnlWbTZPN0ZsZkRhcnlpcnZFOG1mUTN5NUxwSGZSSEFDNGVKZEU4dXZNclRYYUdxWkRKT3JVODJzYUZ3akVYZkRwanpnbFU0Zy9kUU00SjZhMDRqei8xVUxjaitUZi9ORlRpTldYeXV2OUhVQXczQXZlQlNNSC9DRHV5elNIUjlNTGZRK0JXOHNFUXRFMkVGZ21GQXFKcGRYZmgvU3k4M1dPZXllNUxGaUhnS0VwSjNobC83V0JiNEYxcmw1T1d3WElQaktaQngxeG9YQzE4OXdkdngvaXp1RmRYanFDUEkxUFZGOENPSzk2ajRkTWRqa0JkS3JpdFNIVTduZ0ozZC8zZjd6L0oxazhFelQzenhTTkJhcGgrYjZ5MVRXMHJGcU1Lb2RjKzFTMUZIMHlMcURDQXZEcHZMZy9iVUVxdGZGZnA2cHhwdGxMK0tDRFRzQjExeDJKbDRvNEwxeXZLY205VXVNVllNY3Y2WlFja3U5V091dU9za3VyYis0Y1BwVlBudC8xNFpzYlNDZE9CZVVZNWdPM0FVZTYwU0x2dytCU3NhcGF5cmVFSjBwc1pmLzNXaE9mRkh6bzdvTit6enp2LzNsOGpNVnByc3k4d0VsV1pTcU82SVJNZHVYa1Q0OUlwV29LcUM2K3EwR3ZjUWsxSHNhbGtUd3hkc043NnZoSHJJdkFQMllSWFpMaU5MOHJIc1hmTEpsUzNNV3d0ekhjdkRjZzMrZm1ibTlUOXY1YkgzOWMzRGorekxqbDJmRVMxNlZ1dkx1b29KRFgwOFBqOUN6bWNXL3U1ZkI2dTR0Y2h4dXhSdlJ6eXhWdDhiSm9WYk91bVJVdFl4cnh4bkRNdzJFenZOeDM1M1RueU85NmREM3NXLzhsKzV6V2JKM3NLVjM4MlhMeXl3M0tXM1JmNFBvdlBrMjNNcVJjb3Z0eXZYeW41aU5jKzlHbmk4REN5V3NDOWlrakhOVGVTek1mZkZOZjdjd2NDdkVlZk5aTGU4Z2xobUZHNFBpYjRqdE5DUkVLdWJuekpWNDF1bW1ELzhGTVd6K0Z2dEdCZDNDMHB2SmQwNGN6UlRXYSs1aHhFWmRBOHhmRmM1cmpJdXhkQSt4NHo3TGN5OC8yQ0E2cERnR0g4RVBsbnByRHFzT3p2SWNiOFVaRlhxNW1OMXdkNVNMam40K2JQeHN2Y2FxSU5VUlJvL3pXMlRhOXBYamR2OWYzRmt1TldLem96d3FncXJ4U1VYYW1lUWFYcFN5TVlXVzZsN0JZb1pMRm5lSDdyMHdobTZvQ0ttN01pR0ZHYWZINmYyN3NLV2FYcGVVbDNSajFBb1dWTkdPR0Z3eFlkMGxKUUxJbi9ycXh0VE9tU3NKZDNCNTFoQm16cFJvUDJWYklWaFI5bXJSTFY5aFgzTnRvVFRGakVUV25CK25DazdsT1UydnM5U0xYWmVJaWtUcWZhSmFldndKRnhibERxdmQzdnI5RGRXNy8rNkpGQVByL3YwN3IyUTZqUWZUUWU2THpXUFBCamcrdWQvNFFoSHdkTnZVZmRLUHN0bXhadGlxcnk3S3lnYThZeHlzb2JWOUdxdHRqNEN0Z3RiT0d2aXZycU03b002eU9zbHQ1WlpoL2tzcXFod2ZBQnJVOUpFdHIzS2JGZlJGUDRjMlNtNFA1N2ZTdXFXVlI3Ti9YUlM1dWNHbnByeDVUdlFDZS84VW9SZVRxSE1qTEQ4WXIvdWFHNUhzbnV4NlJBWTkyZWJ4UGVMM1R6UktKV2U3M0R2czlIWThDd080T3Izdlk2Mm1ucGVicGJzOGRtczhVc1hFWW5vQ2NjZ1ZFajhQUVY1Q3JCS3JVTElJS2x1NDZlMmNCeUlPVzZ5WmJDclpoL1Q5MVE3NjZRZFRxY0pXYk9pbzZYMEorMUY5ZDNJR29PM1FrQjFVaElyTE50SlQxL2RmLzZ0ZDlQL245MDYrWEZja3BCd1BtT29UTzZIVStYR2NJakh3T3lMUkRIcVduRUMwdyt1ZkoxSktnZ3BFd2NqVVJqdUVhZmRiMHlmOUxJbG9VWE1DRHdMOFZMbkZZQzhUVTdxVlYraXJScnkveFdTK05MZDAxUnlCQ1VUR3Y5MmI1WFYxSlpQNS9OVHZnSFVkMVI3ZkQyNFdmRGlDcE0yM20xM054Sm1LeDl1a3JybGhGN3pDNlpydDgrMXJmdGUyNFZlNGk5SGEwYU5VSit4WExCL1dmWmZFcnlwY3RYN0hpSHo5bDVOTG1CSjdBVEhFOGZ2SXdkanZHZDMrQ1lBamFUa2tsMy96M3dCVmo4dk1tenZEQVZiYXNBZ0tHMU9mQWpJbUoyV0VQWnNGTTJJWmI1TGRzU0wrN0JNejV3cnZONlJxeFNGVEQvK1c3QWlEL1R2T0lXSnI5azh0NTVYaCsxYVgyVTZxbmx4TXpHMmFRY0x2ekdYYWZ0MG9PY0ZXdkVWMlpxUXJCdERVTzRETEt2RDhmSmlVdlArZnRoQWZraWdHUWlsTkFqdEJVWXFYNC82ZUZrcyt1QzBYSHpxZEtXMDd5TmtKVHpudTIrL1JHNkRIZ2VsYWJtM3o5YlVkNVh6cTQydGpaWTlwU1h4a3NkLzdtbHN0bUh2RytPNlhVZTJJQk16bFN6OFZ4VDhVRmtoMmVReUorM3RmL0cySkNsZUhzYnpQOTBCYlJuQ2F1OUFtdWM2WlBHQ1JYcEhQRGxOYzlTbVl6MVBLUW4xeWViaDJodk1wUXRmYkl3cnBxTkxURzFObGwyaHh2c0czcWFWOUxiYXc1K2RiR2F2UXBOMXNIT3l1MndKTGY1VksrVU9ucEhUMm9veHY0cU1vZFZXZ0pIN0JOZ1pIZU92dGZkL3N0S0lOcmNuVlN6TnhDdXBQUWtBUDM0eXNUblFObXQ3VmJaYSszVU5wWWdqNVpIakJza0tLMFFRdHR6eGRYWHB4OGRjT0RydEp2QjNZdFgzOUc2ZjFUWlkvYlZmWkUvb2lKN3NVRExsdDl0L0taRGMxNXIvZGtldU1iNHVDdVY0OVpFUXlrbjJSWU10bTlSUU4vbDNXR0FCWGtGTDZJb0hmOG42ZHZBa2hHTHloN2JlZ3ZoYzRVU0NvSWNQbmVxYWVYWHZnZ3dBZWR3dDJ3STY0NURYbksxMjFIaFlCeWpWSzA2Tks0LzQ4YUx2b1hVeTJ0NFNwZS9rVjJ6L1RZV3FxajNiQTJHakdzN1dqYm83SFlPbXJXb0NVU1BiTjJ1Q1ZSc1crRVNEWHJSdngrY2lTWkd0WDRmYjVSS3FVZDlubnRWQnArOUl4MFluRUpiVVVhS1dWTkhjWFVLOHkxblpSN2lvOURMUHlmUFN5WFRDVngxNzRucWxsNDlva2IzYXdJTEtodVBhTFdQWFhOdXp1OTJ1SEVPYUo0K2VqNXZhK05xRjVEeG1RMEtIdHl4am5qMDZwNUI5YTk0ZjNhcDZvL01WVWF2ZjB6V1BKQTdoSjhLWWVjNWVXVEF2aE02a1ZKOHNVemlJRE12S1hVYjVCK0pKVzV0OUpSbWZRb1RoK3RabjE0b29wMXRMR3RlR1o3VTlPMG1jNWx5ZFdiQXpZWGJkeDJwK3BPL0M4elNRVkdqTy9CM3RsRDdPODgzRmsyTnFWV0hwcHBXcG5FazFuL21wWm9WNmFKZEpIbU83TzlRVkpTdjBodGE3Q1U0SnR5Y2JndC9tbERyZjRVWjhFUGdLVWcvQ2NJL2dHREpmV043RWtlK3dTYjlUdVhOMWttM0NCZUM3STVudDRDb0RBbG1pNFExRE44UVhkdkFWZzQyMDd4OWZmQklyaW8vcnMvSzF4YVY2UnM5eHM3WHprb1NDM2pReW1Cb0FuYzBmTUdwQmhocHJQZXR2eDlycmRYc3ptZTRRS2dzSjhZUHIwYWFidW5xZ0F4TVFUUUR2K05QY3d4ajJPeU02ZHUvM2ZubWovR3YxMWtQUUlCZk5CY0N3S1R3M1VnUzV3RnJBQWRSeFZ3UmdXOHFRSXVoMXRIS2xPa3I5cll5MThmYW93aVcyc2c2N1lHTDFqSlpNSlV3b2NxNFR1VnlCMi83UUtLN1hRYm9QR3dCcUxXUUQ3V1FMN1hRSDZ6WVEwSUkzN282KzJnYUFINzEyM2QzN2MvUERkY0swSUFoL3ViRVhLM0NXd0hwMkV5UE95Ykg5clltZjBCMlBzaEFQTXNTSFptY2V2NEZzZnV4ZjM5eGYyelYvLzdENHNYa2JnWmh0bDhxd1lPcUlFSDFHQ2YrOEVmTDlOcU01K0d6VmYybjIvK01FZTBtVWV0WmNCZS9TSG9ja1ljY0o3NEJyeDZkUmdBb0QwNEIwNzBxY2hvellMa1dvYjY1YTV2OG1lV0ptb21BR3B3bVBJZlFCZ1c1TzhXYWpBSHZvMWR2L3lpNDhiN2Jmd1RQWjNzeEFHdi9hZW9ZUUFndmw5S0V3RHM2UjY0MGZ2MXdiSHhTOUgrVDk4OXJTck5icTNuTkwxZkhsd0ErRVJET0lBZmgxemt3UlZIV2d1UFRtRWZXSy8vM1h0TjcwY2V6cVhiUkgvL3M2RDNiMytRc3p6c2xOSms3N2Q5R3hsc1RDSHB4ekk4dSsvVDc3ODRRdFc4c29IM1ErakpCSENSOGtyNFJ5QStmNnVETXo0TWNqWVA5N1NodjlIQ25wOEtmM2lHVWd2YmcvZER1TkR4U2FJQUtNVC8yMWNaOEtEOERMM3h1VGhGY1cyaTRwOVY3aFhMVzBCVkgxeUhsNHQ3UEwyL2xRdW91emhYNzRyd2h2MGFrYktucDg5N1BOTzdGSHpqb2l1V2xGTmVzK1Avc0JiUC8yS25IZHo4dW12clBaU3hGYkxpd1Z4eURVb3hwUmszbCsvOHpNZVBoNVIxR0FjQTdzclYrNC9wQW1KWDI1VnNpNGd2QXdxeFdEVGFFRkp1eURRMkVjbldYcWxLb3BLcHVhblJBRFRBaFpPMDdYWmJLamtibG5XcDdSM1lhQU5UUGI0cEdUZHp1VU9xZFkxV2llOG1EM2pvY1QwNlV5d1FBVWxBMjBZQm9LSmxYUkFKRE1sTmtNWjd5U290WkVRalFJL0VVY2xXbGRXT1hWUm1DbGVPZ3JZV1ZJMUJMN21iKzcyZTBkTnJzTDBDNGRaczNvRUtoYXh1TnNuQkViRnhNa1NFUisrWmpMWkhZaEpWVjNteG95VlJhVVQwcWpvdnJlZ2NWZFJzWGprbWFGRnRFZUpsamVRRlZRcG1VMDRRY2JDSGpBejFpVUlhd3ZsT1hrTzZMUjZrWGVvbVhNb2paUk5WM2ZxcXgzN0hoN2ZVZWdEVkMxK1pxRXdscTY2M3pjeTkzcTU3NCtxdUFyMHR0QlVxZitKdGpGaXBjMEJhK3lsNWE4Y203WXpOcktOQStJUUZPM3BmMWZyVmJlMURTcGhOV1J0b0hlSk5oZnNYUmVleHF2c0ZxU2ZVNzU2RTFpeXJzbkJaV3hwWWFHWW1JUkt2V1M3ejdPZy83aTRnZG00SkRhUmNtaGpySzFNNk4vUmFjbU9KaEdobDlZMDRIS3hralovY0d2S0NuQXJ0ZHV3SWRLMUlSaWhXdHN2b2I1SFlXVmFoQ0w1N2laWlM5U1VxK0RUSDg5MXVBSWp5bFZlbk5hMXRTaUdiSFNuMnpYbG5wOHVxZDducW1QbW5Dd1hteDIxWDh1UEh4emdmRUl0RXk1OXR0OSt1djdMWGRsUG95NWw2NzFsNE1BSjFvNVdvS0lGMkYrNlhaMVR0NjJMTjVndXhXV1dsRXRNa3hQZmR2TnhGcllnUjEyMVJsMnZhc29EOGVnNjNzRjR0UTdsUWVHeGJQZUxNQ1RpcXIxd0RMK3ZTSmZWMis2TVhmVzljRU1QSzBMLzg3a0VpOFkycmI5VkR0K1A5R3lMdjVjQldKMW91N2NLZEV4V2VyOGpQNHd2RFNzK3o2QnVQYUdLT0wvQ21saVNhNGJ5aUx1ZyttUkJSUmZCQU43R1NaMDJDNFhIOGVwZFdyL0NCOGdiVVpVcGVTczV4TlFESU9ZVkExRW1JZWlLWFdLWlJBMVZHVENUeG9tT29nT2pRRGNmWCt6MXJsT3loblV3dEVQWmlRRFNsU1EwWEhPVjVzaTllNlozcTY5Qm50QzIrNnZQb1B2Qys0KzBWYlR0NC8xLzh3WEl4RzQ2bUU0d24wSGkzL1hBUXBpTGdBRlpnMExqNUtIKzFYQnJIUW5waFRaMHYrM09qSXArNmIwZ3M2dW9TRTdxVndqdTN0ZWg5SjlCT1hjL0N3RHkvL2FVbUZxbEZMTW1INWxVMVI5aFJVdzRTYUkzMHFGSFdBbm1tU2xxbythdHVHNFhzc1MxNXpmMVNzeWw1YlozYjRwRlg4N2F5QWNkbWNaK3pvZWh6em9YRWRhUVNaa29vTHZtVjRMbXp1eDZ2RXdXN1JWQ0V0V3QzZEFVSzNmRmlaMWFkaTZWT1FYY2g2bXpHenoyaHpqZk1LUXFUamlqMnUyYXBqaVRQcmFSR0o3N2FOalRwY2Q2Z1BKQldBUDlYdGFwY1dQOXgrakw4amRQUHphL3dxaU51ZkRBdzYzYlhLa2xybXNBZStRVThKZnlmQTJ2cUYrUlAzWW4xM2VoaDUrdTVIcmJNUklZdzlQTHRvWDh3T1lHMWtYZUM0ZWE5WjAyTTNhTWF1bno5Y255YXZYcjdMRVFQSHErcXBoaUpIeTBKZ0pnQXlzem9tejNUbGxZQkNkYkl2Uk9jVWVMZ05aTHRMT3BGcHJYMDRXS09nVjVBbGl3OWV4MmJNMndmblkrbk52TVYvaXZ1L2hPenhGSFZibEpEV2FOSjZTUmx1Vkc5c1ZxMHhyVkVYVGZVS0J1TXE2Z1BRWGRVczFJeVZ0U3dKV3h2aGQraW5YUTlJQzVLaHhITE10NGZuSm9zdXRZTXRxWEFMQnZuUUZRQm1IT1dkbFZyK0RUUHhsSWdkMkdNcThsaFA0OFJEWE91RVFNWmk4OStZaWNTa3RnSklMbm1MaDRPaDBPMGVNcXpkbzlieW9md21PMzd1aFBySklkY0w3MnNFNXg4enFpb1ZZbWt4VkZGYTUvYmxhbzNBS2doL2tFT0FtUHV4NWJETk9RcTFiSUt3VW1KaGlZSEMzQ2NtWkx2a1dGVmtRNVplam5FOWNCL3NDSWk0bFUwa1k2ZXRSVU5hWHVvUUx5dEowTm95Mm9NQ2dyTGlKQ2RRUjNEQk9mK3l4VUNqdkxmUUZiRWVhL1RsNzJTdU5PdXBsVCtuQnRhV2dybHl6TmNST3hzYlgvVEZkSnkvMmd4UGEzb1UyR3BZYkNoTDJ2NUgyYXlJTldOUUwvem1LellxVUNzclYyYXNyZVhSTDcvY2w0YVQ2N1NNVEF4RWZKTHdoT2hOaFhPSnUvcDB3Ti92Q1ZNcUN6eE9qZk41ZUxSTE9DS0ljK01yMXhlNmZBd2JGc1c0TDRjMjdtK2F0b0FkQVRicGwvTjNSSmdiQjBuZk0yNkxmdUtrUFJzRFNFQTBWTVRqZERYWTdKNGY3OCtZRi9QNCtzaFYraGNsWlRHZnlQVG05MHVWS1BSY0JodXRLNUNLV1llOXBnYThjdUNxUmpoY01vNXhOaDRRY1k2SlIzYWs1WTQxbTVTUkI0V0ZGVXRzaXFBVWpVU01CWjY3UGNNSWRCTWEyaWNGSjdVN2oxV3NmMU9heUdjcXpFekMzaUFXVWE1Q2pXYWMzaXYwN0NTSlJJbUdGUGJpZDNPcjVXQ3dMZjIrNEoyTHNiVTJVRmhWU3dUckZxRHpJYzRDbUJOakpEV2xWYlRhRFFhNG1Za1hwZHNreUozZFRVZVQxeEd0bFRJSnVGTU9HbmhPbEhLa2hORUdoSno5QmwrakFsRE1Db0RRbXFaekJXeVVWU0lQSFZjNjJRRFpnOVBITndGWlRERWtJa2xtZ1FpWUxCUWtENEhZOVZvckt0YUFvU0xLQUZwTmNaVVNobXdJTzJzbFJXVE5qV21WbEI4ZjRSUnZ1RmV4d29xUTFaa0JhdmpodUppM2dvZHlmREpLd0x6QUZEdm9oYVdoRFJpSjkyalRvd245MzZ0dXdUaTNKbFlsTXR3T0N5dDE1dkYxYUJsQW1aQTgyb3RPZElHQ3gwV1FKb094Ni8zWTFuWm9mZm5sRGxvM2IvSDlyMFNJRExtd1lPdUpjOWRhZjJ0V1JLQUxhM0RWOXBCR0x0bWJ2YTNwQzRhSjYwUjZYcWJHYTdSKy9lVC9kNVFxbitvOG9kWTlXQytwdXlWMDFoaUNId2NvMjRVcFZGMUhSMFNtdjE0SWNxVXNOQmpwWXJhWG9wQkY1SmFoNmNxT2svSmFGWG1wOGxrMEphTWdoQ2tGQnZRRFB6ckZwUXVBT0lzYVkydjkyWXdwMTBnTkZFcGNyZGg3dGFlTUxSdFRNa3hHeVV4U1ZWZ0ZTbVhaYU5Qc3hzWStJWnA4SkdreHBPYkFGOU5kMGFXMFBQd25ycjhIakNiQkN0N3BjcmROeStIMjhtNlErcFhqNDgrVU1IS0MyRk5qMlEzZWYrM2FScUh1UkQrbWIvNVNlZnc5NE1hTUxDZkdWWlpDU2Y2UzQrSmUvUGhCK1NtSzFKZk9EVTZFMVpVcTVNdDZ2V2M5emFPVTlWbGtndnE1SXpoZVhxTGhZM3A5ZE1QNzVvLy9jWGhMR2VmSGV6YUs4OHpKVjFmOC81NWk2cjY5ZVFmWlhEMzFsNzRwT2JqZXJQWmZSazNjNGZ4L0xVeGVZZ3RiTTd1dy8xcW9lOXpiWW5wK1R5TUI3ZFcwOS9CZHl6S2JxdGVLSGtzR2x5UVVGYkt4ZDdOTmR4ZEVrWkFBQkE4aWxNUEd6dlJTZ0dCRUR6WU1Ybm5VRnpSVEhVU2dOWjdWVVQ2a2VBZTI1cHFmOVFYMWY4NHNXRGlJOVBIRWJVNFpXdExZTFBFVDZWMFFObTllbDlpMExROUhlOTRRdkNsdW5JRUdpUmNSbXBQbVpRcERRbm1GNmtoQUFQeHZ4OS8zMy8vOThMSC8xdFNOS0lmQU1CYSt3OFo1QUY4UEcvOXM2SW4rZTVzRGdHZ1lBQUFFTUMvSDhnanQ2dnIvMGE5VTc3WFgwQm9LQlZDZW83ZzNZU050NnZWUTZXZDRuL3dsZXE5UWxaTlptMUl6eS8yeXVjTC9Bb0lSeTREcGZ1TVEzMndKTXJQNkNMUFVEZmg2dWVCbGxyaFJmQWI4SU41VzVlU1ZjYXBPK3JhUGkreGJ6cmZYYXpvN09kOC83TFkxUTZnLzU2bDBwZVpCQXFvL3I0dDRGOHkzK2hpQ0dlNG5rQWowK1hXVWdrdS9teWNmVjJ2eEUwWkR2cTdUK2FVdGhPVXpWZjlPSkFWV0FtQXJ5NXZ3RDRuelNPZmVZMmRwVXR0MithQWZaNnFkME5sTHNjNCs0azRKV0Z2ZjlRVHF2dEdMZVJqWmhPQzl4WjUxY0wzc0lEOVE1VWpaZHV4MndXcWtLcHRGR1VJTFpsSEx3clpJVDdGVUpjaXBCRDhmS0U5dSs4LzRpMFg4dHZidk9ZRTNCQ1BqYkhsSGp0bUl0a3h2aXNpMm9FdWZKeTBJUVlOekQyNm84K0swYkZzbDR2WS91SUpRSFlvZU44K1dRUTZkd0pQUzFpSndrK3oyRlMycHllNnJjMHRiVDNCODFMZmgyUzdoaGZVbXJGeUxxMEVvbWlJYjUzK1lLVmU3NUxNZEF3RGtKc0NjLzBTQ3NUc3hVK1lXbS9LZXVmSytXamNzRjdaWkZ6YmhURWozcG41eXhVdEQ1VldEc3N1ZUN0aWMvQzJNZGZJNTd6STlyMlFIdU5TZkwyOEp5bHo1ZGs3RW5JUlAwdnRYd3h2TzJEck12YXJ4R0pFcTVYWExMK0xGOVJ4d2VsSWRoTngwYlRIdEpvUlBSS1VUaW55bFpJRTRFOVhuYVVUUURnb3hCMk1BcEFuU2tOSzVKN3U0U3ZCdG5PL3NtZS8zdDAwQXViSi9NSGZSK2s4WkVjRnlnTUFCTkNRZnJRMkZJd0R0VHNCK2g4Y2c4TUJDSXpEb1NZSEFKYkJ0d2JFM1hzYzY5Mi9OT0RVcmpZbEdrZzdGOUpBa1U3WElLQllXNE1EM3A3ZHo5SE1NcnNDQXJBcjcwSStmb2FjM1ZlUThMWDVSSUoyUmozTUd0VnJZQ1ZHMHRBNktOV3dvZHJlT3BWYS9ualhVNnlIV0p4WnV5Yko2dTZnVTRkNHcxN2F6RUpNb1Y4cjR3RCt5a3Jrb0VaOTFGWnE1SEx4OWlYb0F3OCtIREFJTTJwcVdYRHd6b2ZYUE53YnNnMmZSKzlrNnlLRmdMc0hKa1g4UXBmbWpWY2RZbUZTZ054ZXIyT1pZZ29FRFpLQjlYMW1zbVJLRW5scklEUU5RUGxBVURZdWxTZkdXTWN4ZUllZmVxTUk2dkJDMWF4dzQ5NXZJYmZ3QldId3hWVXZVSXlXanRUd1cxVGcrY1pURGIxOWphcnArZlZWRWdwNWZYN3M0MEs4TmpucXJqbjB0WTIxRmRNYjdZb3BpVTF4VldLVlB5YXh5S2NrNWxSTmlHMkViUnZnVWlrb1RnOTFTWFNnYkJKY2JTMHdhNlFCcGlScW1VMUlwYW9rS2k1V01aR05pcnBHU3VHVVJDWlFwVFdxaEsrS2VhcUlxd281OFFLYVA1WGgwZEZXa2FseGNGdlkvUFczUXJyNnc5ZGMxM2FsSm0yN3JpdnQybHdWaFY1RklscGtwYW9CRVZaNVlWYXhFRlhhQk5hL3RwamZ4ZFplenV0dytEYytJUC9KLzR5eTROemdyZ2JJd1gwRUdiVkNaYVd3bHJTU2NqNk8vRTArSUJGaDBkMGkrNDV2MzdkbU5aWEs5VFh3R3Y4TWZQYmV0Q3g2WEwrQXBDbERXL0hqTmlLKzd2cnExU3M0MjEyOGJiRy9NdmlNYzVHbzVKYzNLbWRkWjI4bzdFVTdWckNHQlBaNE50TDg5L3RsWEYwYklZbU5Jd0JCQVE9PSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlF1aWNrc2FuZDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBREkwQUJBQUFBQUFkWEFBQURIVEFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR2x3Ym5GWWNoekFHWUQ5VFZFRlVIQUNGQUJFSUNvR3FJSUdHVmd1RUtBQUJOZ0lrQTRoTUJDQUZoVUlISUF3SEcycGdSUWRpMkRnQWFQQVpGa1d3Y1FBRm0rOFRSZGttblVqMi95bEJtekdoZGVoYlpTRjBSN3VvN2hrWkNaR1Q2aG5wb2JaVFd4eTZjT0RoMEVnLzlvMEZSK0hBOHMzSjFiM3R3NTlYb3pnY0NOd2pabXR0d0NWeFg0aExvcEVrVGFSWHQwWklZMkl0NGpmOTJYc0N2TVJMVXdqMlFvMElraGN4S2tZcTVpUXRjZm5pbXJwWjBqcUh0R25nSmJsL3REcXppaXFkcXdBem9RMFRMeDg2TXpwWDV0STVUL3p2OTY5NzVyNEFvb3NSQkRKZkJibWtXZ3NJdG9xTmJHMlhKOUNrZW9iSGJmM3pCQm1vR0ExSTVhZ3hHTzFHVGFvTkVGVE02N0l1b245Rlh2emYraXVpd1FFSy9XL2FobWlieitWZEViVlZSNFlOK1BkL2pjekNUTzdMbndXZ0lxRmw1UUFsMjFZQjJwNUtKRmxMNkpmN1plQnpmdTRjRkozcStBT0M4UVY2NnpvYld3WWhXd0QvVjVzbXZFWG96RW1FVFd2dEtHMlRQRzNoV2NwUW05blFPdlI4SkZJVmdaQmQybWJGYytJMWZZWHZ3TlFrWml2cXlQMGU5Mzg2eTFiYTlkM3pCcUdMcXdBWDNYcHpiVEg2K3RiWHpHZ2tBMnVKZlF5ZWxmV2VKU3ZnQzBKRlVGMWF4TmRUVTJIVHBTajdsSmwvbmVtcTcrOXZTTWsvNkphZEdzc3FyZ0dlZXRuYU5WUEw0eitkN3F4L3NneG5GMlQ1ZWdIU1VXeVg3QUREVk1LeG94ejBCY2h1WHhpMkFzQ2F0VFB5dmdPT05UT2JyT1NjY0d1Q1FsemhFYktCL3ZydHoxaXJIOGhzWm5hNzluSW5oeTB5UkVMQ0p5TGdXZjg2LzNBZ1REQUFBTHBqTkVnM0pOTlFaTGhzWkxveXBGdzFwazRkY3RoaDVLaWp5QWtuRU1JQlFwK3VKL2lsa2hpcHVDUEhlZytHOWxwRm9RL2EreE9LYzZIRkF4QjJ6cnAzb3pBWGFpQnV4Vk04Vm1Da1dtVjd0dDgzVXFsNmk2eHd5YXN3Q3BWOStjelU1T2Zqck1ySC9CMWJkc1NaSzdtU1cvYS90Q212S29KRWloWWpWaUtQUHJ5bUtWRGtQLzlyTU1Nc2N5MncwRkxMckxQUkRudGRjeDB6S3pNL0U2aUFwQ2o2TC9rL2FLQTNBMjhPeVZ4YUM0T2xUNWFkdVBNUFdmWkIwdkJrUnRuY1lBR2RoU3VXYmxvMjUxclQ5ZUNPQ0tMZ2ZiWUdrcUJKNlZReWE0S1RHSUhVZzVmaHFSU1lFak1IUnhJSEkrbEozRlR6dE4wcFdoN0REREZQcHRvcHVONDRKL0FJa2cxU2VPcGNpOWhQMFJUUUVpV093enhOMDBaSFUrVXBTMUdGOEJZUEVEM0FCTEYxbnFMRmZBdFNJZHM0dFpRckVKQ3o5VEt0WjJUTVVWaGF4SE9MVzNpWVN0MHBvRWNZZ29TeDQ3VkRxY3loa2drRlBZSGR2TVN4OVY5K3Q3Nk5MWnFEQjJtOVlZaG10bXY0ejBsNzFhRFgvaGN6T3dRdXhxNmsxbFVDN25tbnRHL1AzU3p6S0dRL2Z3UlVEL2NPTVFpRElwVGdqeHZ2Yi9QYndFOXNsQTZpakxJVHhia0dscDJtWGhmVTFPNUEveUhlYWJSV0l6SWRXaldaMlcwOThTM05KbXhJVXhEMEpTMklRcWg3L0RMT1ZGVVk5SS8wNzFkcUpGeTRnTjlTTnlQc0Fxa2xKR1hQYWZlTSt4YkY1cUlZYy9JQUJ4bWxtNEJjQitvUE9SejE5Q00yb3VoMm9HdEVOTjJBSkZyQ1Z6TzROb0QzZXhXU0VLRzRzak1EdE9WSlNnWUxWM29TYUxZZWU2T3JFNTlKV3RJN1hxNkZNTkI2cEJhRHptU0c3eDlQL25jb0FRQzBZTzY1QVYvOFZxUjVwQzdPMEtKUlNUaVhNSGVhanp2cThmRDZURWF0ZFNlRWRDeUp5T1A3SFMwSE5zY2puNEVVSDdJVnY1QjlOY0h0NlErUXhyNU5nSmxFWXBCYmw3aVdGVGcyU3ZzdE5McGsxd2QwRU9CL0hLT1A1MW9Ba0tIYmswY3hnYVVTbUVkenZ2UkVYZlhuVUVxeHFHZ2R4LzFwVUJuNnlTVWJpTDhia0lsQ3BPQzJIRi9ZMHg1cXB4VEw2TG1sVVBiRk9KTWpZUURlWUpJY1lBaHRLVnFmckZLSW5nbWpPSTVleCtXYlNVQXJDR053aElEaWFLUFFWMTJlemFkQTA0Q0hHODVMWW1oMmdpTUVvaGd1RkNFN1d0MlJucFpPUDBMQW16akpOSk1sMUZxUTJ3ZmJVQkpiOCtnZGZpU0dTVzFnQzF0WjB6N1FWUWRkb1RTeXNqU2Viem9sZnlvaFN0Z2dCZWVMQ0hPRGZNeW8yQk9TOGExMmhpZHIzWVVoUkRWWFRBSXhFNnh3bXMwREVnMU1SRkhBR3RHWkpMRTZDdEJabDVKMkE3dWxUUDIwTWpRWHUrRkdjUmhqQ29WWHRvd1ppdGhlQWlnYmxuT1pJUmdEQ2dZS2VqakJRb1E2aFJoMkxJYXJHV0I3eitZaXRLQXVxRU1BbDlRRElnSGM5UnNZaVV6QU5nTXNaR0xMb1VheGFra1ZyZkRveksyMTBaYkswNFpwaTZDRUJWb3NNT0FBVVZnUWl3VjJITWpCRHVLVWdKT0lneVhoRU1uc1VDbFNhYVN4dzZUcmlPbU1SVjI0V1NHL0FyMW9iOExOOU1GYWZiRm9xTnJjY0NOeTRraWpxSXdCSmxOd0JDOG1XVmdsRyt0TVordjU1T01WNEVpRjJLQ0liVlNzbEZvWk5wbUZ3ODJYV3N3b0M1NktEK3FVcm9JekttbnU0R0FaZUpaL0VBQk00UVdRUnBGcWhvVllDUWZQZHBPaEhHYVd1eDRldUZpSG51NDAwcG8xTjdDWFZNbmZLalIyWWRGaXNjV3FGcXVCZE52QWE5ZHk4dEVUUCs3MTNMd2NEUHh2RGQwYXcrOW5leWZnZC9ZMzhDRUw1c0ppV0FuciszMy93WktjUW53S2pyWGlNQUJwRHVDb2FVaWtHSVNoQ0FFRnlFRVY1SmVsRmNIQnA5TG5lL2UvYTdiTUV3OEtwUDZaWlZtVlI4UzVvYkFtVlpKV09NNXkwajhCQUJRWVFUVW1ReWFaR0VUMXg5SERDVWtNRzJNMkhFT2h1WDVIalR1QnBTcEFLd2lYT21zcUJxREFYelFVSXdaK2ZPQkh2Z1poWWhQRzMvalZ5SXZKT0RkQklDMGpLNXNLbk43NnFVeHNJNVJqdEFwaXZ3Y21lQVFLOUZZS0dzRVN0Q1FRb2c3Nkc0WmVtcVRKVEFSVzFEOHlCVklRQlZNSWhhWnUvVkg3aFNPQlJGS1JtalFrU2JrZ1FIb2lyWXpoS0ZYWDdMSUpvTEM1YWFuaTB4Z1dMZ1JnVGdsa3JPYTFXTUp3blE5WHpsY2ZtQURzaFE0SDlFb2VueTVTb3JIcldnOXRzMHBJN3YvM3NFZXdBYXpydUMrR0NQQ2Z4cmtUOUNZQTlDOWJBNUJ4U0tLM2R4MEFZSS9leWlxbXRCdUFvMHRjTnVicjgwd2w0K200TVBqOW1LYVdQL0ZKMXRsdFBkVXpPNEcvaEw5V2pwVE5zbFZ1SXlmSTZYSlh1VmllRXdxdDRkYm1majhBQ0NKelNmZG40cE1vNDNLc2tYV3lzUVZwakQ5U3dtMEY5QVBBdndPQU54MnV2Y2IyQzl1QUM5K0VDODk0enpxZkdhUDdLT2Jocm5NN3oyMEJBWUJFUUg4bmdON0s5M1oxZXVWek5QcW43VFBISXZNY2RkVjFpNjJ6M245T21XV1QrWmFhYVlrTHpqbHZnV3VJaGlSUXNHYTBtb3RnWUdSaVpoRWxXcXc0ZGc1T2laSWtTNUZtamYrdDlRQUhva0o2Yi8zZ2JqTDExa2RmT2JRM2dCaDY2bXU5c3Y2M1R1ZFRvRkNSWW1WV3VXZTFTL2FiNjdEampqamh2cHNSY1V1TkxTN2I3SGJVdU91aTMvMFJEbGZjMEJBZXY2bTExVC8rOXErRkJBeEhoU2RTQ3hBdVJLZ3drVnJRMFFzaWE4MnFwYlphT2FPTkJDN3hGS2xpVE5OZUJyZU8ydW1nazY1NjZhNkhub1lZWUtCQlBFYWJZS3h4SmhudnJJbnk1Y2lWcDhSVXBXd21SMDJFalRiWWFaY2RDQTIvRUFCb0RRQnNQOUJ5UUw4Rk1QOEE4SjhETndjQUFEWjJGYnlFaE9NVUxDV3FvcGhJaUZGR1A2L0pTYmJubkpnVXhWMUR6TFFBaENKSXVFYkJvM2d5YVNVSlJTTmRFTEhTSHRJTTNISEdzU054ZmV3RW5jZnI2Y0NnTVdsN2phYUowMGV4UXRRUjlpaUc0Q1V3OGdTaUpubndTYjJyc0FpcFJFbG54Q1lNczZjU3lJK2UyUng2RXFiK0NyR0VIbU9vTkFPRnBKU3lObEFUaEhUTlBvQjlIUU9yeDRqNVhrek9nNFFPQ1dtY1BqUnhUQzNVOFlQb3VVVTdYN3pNdnJraVdvN2RKc1puUVFBRTdubjEvdDVmWjJSRVFtbzB3ZWl1dkprTGxnK3dST2tzNXhTOE04V0xsVG9FeEtSSnVONVpsdWM5VnhtR3AzWG9oU0ZaZzYwMmgwUHBmUWpnSEhMZFU5ZFlHWkdVakY4eEdQYWZwQ2lOQnE5VjZpMDZUMDRZWXA0b0sxNG9jM2VsckNpVkVZRGMvai95UVNuUE90YUpuekhCYWFoY0EwQ2ZBQ3E4Uzc1WnRBazBwVG5LTkF1dU1RV1FiRml2dG5QVXhuTUxRT3UyZkVtTmIxWnE1NUlNYzVRWnRtcDhWeWxSK0ZCWW95bFhwWDdWQkRBbWRtSXRIVjJGUnd4cTNmNHpKb3g0dDNLWmZwc2p5OHUvVldiVWc3WjFSOU1ncGJqSjR0bTRXQURNUWs0NXdEU2tVUmd0eUVtdzJNS1JUV0RGWmROL0ZHYVJmWkhiYTdPTFlPL3VUNGlIQjRxTWNxdEg3S1Z2MGJxd09aRi90ZVkrRFE0b0hVUVloUTRPVlFvYlRXTjFTN0RCOFBYYyt6dXg2T1EzeE8xRmRtRXFBL3Z5aUszdHVhSFNSYVc0ME9ZMDhaVkFQVFdNWHdLNFpFT3hCaEM4ZlR3YXNHaHhLU3Q3eVFsQm9UNTBvcngra05xb21HK3FJTTE0VHlYVmhTSUQxMHVFSTJDY3VGT3E1NENjUXZOengvcGNmOEdvZE5ZL1MzeG1hVit6Slpzdzc5aWxlOUYvVThyaFBWQzRtUWxjTURyYm9EWVM2Q05iNEFLd3hwK1JFRlZTMVRJNlVNWnc0d1lXUU5QUVc1dE5UbkZQZE5ndzBGTStkcWdIZzgyNko4c2lWaTN1blE0VGxzaTlnYjdHNDVtV0xuZC9EeisvUm5hOFJMRWU1OW1xcHI3U2hvcXRWd1NJdmZtR2RWMnY4eXBxalU3djVqNm5yUDExMXBnc2lMeE5qZTFXSEI4Yk1qcFdKODFkdFMycGFud1Rnd25OMjMzV3F3NGJESlNaR2xCSlRTRGxIZU1ZWlhadE85ZnVsV00vZTBETjNaek5GYnpmL2RzMnVYSUxLZ3hka3dOOVdFVFp1N2xzNXJrd3dSS3d5VnVWMkZNMmVhbGZHVmFoM0xVMHI1MXRXZk01V0ZIQ0ovV01ZWVVqaFd5K2NFbzhleVdCTVhFeldDVkxreWJZamoxdnJWSmRuT1JYZXhzcmdVRExxYmFoMm9pRDg1N0VTR0xhdnRrVExKUmZtTldFOGVhRzI5MFdtNUlzWGk1VGg3V3dsTzhjM0xTbjNldWk3V1I1SDh4RFkxMkxDYkN5RXhWKzZ4NGYzdFF3VURHcjNodGxPZkFHNjMxOHhrcnptc2picXdZdEVWU1c4dlI5S0xlaFo3b0ozb2thNWpXTFZuOXBXcWNybUQyVnZHT2FKOGVuK0tpT2RVYmtQWEpRZlc1eFpiN1cyUmVEdE9KVGEwTmJOend0UkpQQVo5UnRxU2F4MHFHbExrOTJndjFEWDVPVVErKzNZNnUwVUszUFB5RFJjOGVJbG1rU2NFWnAwd1MydzZ3Y0szK0txbkozNHllTmFidkY1L1J5RFIwajc4SHc4NUhtekdWT1MwV0lnOUpBZWxnTzQ5d05rdEk3aEEwVzlrd0p1ajlDRWwyR2FCTDVxa0pYSm1nc3NTNmFnTlZ2N29vR2lBZ3hhbCszcXdUWGZUaWxyQ21sVmxvOFkwTE0yRC9BTmhmdWlTSnJOWFZzQngwV3RQYmtWa3ZOYUhsa3dnQTFjT1F0SXl5RVVnME9ISGx6ZDkxUVczcmwzVzAvczNkd25mWUswZ0NPV3p3UHRJQ0hWbk5YN2VCZ1JuUmNHUVNyaml1YzF3bndxV1VsMTZ2Ulo5VmhYU2VNSVMwa2ZKQzcyOGtQay9yMkRFZFRQSTkwR0tBSm10dVJnMHBqSGFFNVMvbG15N0hRQ1kzZ0Jxa2Jia3BEaXQ3S01QcDlMa1FRU1ovUDVJcUR3UkNlUFJ6N2QzNjBPZ2FGVGpzZU41L0RPOG1hNGxDeGw1MVdjcE84VG55ZHVGbG1maGZ6Vm10NmVjaDhMZW04bitnUUtLS2hndzJFWCtwL0Rlc2k5R0FSVmdLOWtUbE9MVGtRSWFyWE1iSlp0YUVEMDZiNWJkSTRhSitFVFgrQWlRNUpkdHVjUTFYYUR6dkRGcTFzTGFKYzN0eEtRM3RRTGV5VXF5S1dWUTNGL3EwZEZqOFlEOGs2eWRkVkZhNStWcytEU0c2dUMvbk45Y2VudUVOcWxqSi80Y290L243ZitwaVllWVVwbytGWk9sRkd4UnZWMVd5NFZFUEdLTEpwWDdBQjN1Q3RMRjJibVdhSUJpTkY2aEI5MjNHL1QybXVkdElFMWZ6NjZUVXczQWJyUXJhbHdFRmhPM1pMTFpKR3pXend6d0xqRHMrejhvWms4NGdPd29IVUFIQWdMdzhYaDJhRk1yNjZqczVTb3hrdEpZQmVUclJqWDV6bkJrZG1JOU0rLzFocmNZall0ZFpyZ2JyVlRSNmMwNm8zbXVhQ2tOWmNqcmZQc1hsaXBhak5Md2F1Zkw1RVZTS0VBSGd6bzdFTXhZSlcwL29pSnh1TnRrbzBXbVUvTzQ0TmRVV3pJdXNOa2RaZmpkZlNWbzJ4OE9ESEg2THpUSHV6MnB3T1QvT2NCRWpKMVJValI4Yjg3NU5JRUJCdW0zQnR0NnpFb2RiMWhNZG9NaHJHR3FYVTQyQjBtNzNreUx1Um9hNThSeG5HaUt4bUlId3RnTlN1dmtBcXV2UjBLTkp3djM0WWU0WTkrcHZXMzVFMHRzRkYxZ3V1alRMVTM1ZnBVOER3bEFmUG5HN0gwM3pXOFgwZEpubXZKenlZNDV4OGxoRDZnMkpBVEVSNW14L3JFdDNtTnpxM09rYVV3SnZJZkd1K2ZxNVhmQk9IamFmdlFENklvd2hoYjluUWF4VDZKRGZTYjhWa3hybVZWbnF1NXJYSTVScTdSSHlNSlJpTkpuT0h0OGttdmJnZ3pZamduVG40ZHlleGNTek8zdlF5RG9KOWxXSWp1SXNSS1I4ZmJBQVhtenZzbHZNdWJib3ZUYW1jN0syYlJVZjJIMHlSakx0SnFlVHV5QWplOFlRY0pKQTFkY2R0enVWQ2UwL0VyaFlOSXd1MFlPekV0ZWIrU2xNS09VUXNFOXV1WnV2dVFYV2JYcFhsQ2J1dkpBUlhQeUFtekZHaEkrdU9HTUJIN0RQTzBvRFV3MU03OEFOM2hKNkVCK3FvMFlSaEk1OGJCWENJVUxJbXlnaFdWc2F5c0lTUUI1NmhxQjJISXBYek96TzlFbEZzZHh1Qk9YMGlQaFN4TlA5ZVZoeVNTSXAyRXpYa2FiUjdmZlF4a2VpVEQ0TDBGWUNHR2lOek1EZElqWGhoZHpYUHplUTZzSFV3RHlnZFVzd3grdW1LaXE0OW81UXJ5NEVKUGNodlgzMm1KMUVaUHZMcko2cGNhVnVtQzNwUXFYemoyZXZYNG9wVTd2TnUyYStPVitlcnh2SWoyVWJsNkEzblJza3hrV3c5Zk5BZWpWd01JRTVSSEVTbzV4cjF4TktzN2NjTjhOdzMxTWYvOXRSQUtORExIRDdjTDY1bW1lcGFvaGtuUGVMWW5jYitaR0FWczNRbWVzNXlCR3Y0eGJKUjdSdVdqS0lXd1E2bGZDdEZ0SEFlMFdDb28xREMrU0I2SnNkbnBFbVBnQjJnU1E2SlVpOFZGb0lCaFYza2hDaGYwMll4ajlKdmVnL1RLcVR3ZzNlSFBPNXNWa1dEWXZHQ1NhQnVxSTduYUE5b05CODcyTmdvdUlRYmtFckhiODhKMmROalM2SnBEclRmVjdyaDhXcnhrcjhjQjNaaDEyS25NbUtxSG8xcE9lbmh0RjQ2YXpFOUxhODd1Y1J2M0pSMnl5UTdtSU5sZmRuR2puVUpldC9GMXVqZStxTzZTdzZ2WVNwNkRSc2lHZ0o1QmN4WFZvM1I1TFYrWVYxdXV6aHZpWEQrYWIxWkdORHgyUHg0bnJhbWFjYnRxSEtvY3l2MzBlekIyOEdya2pYZTAreEFrQndhVE16TGRZbUZPOU8vZzJHSWVIQVNWTnJUejRVeHJJOFR4S2pqVkpxcnQxWHJkSTdETSszRGUrQ1ExZlc1L1YzVFhIZGZ4b3JFd01QVGJ4cnNSYVlwbmxLSE14eFpIcytKY2ZNYjdYR3BQQldtTGZ1Q1EvZlN6ZXYyUFJhdUN6NkFsbC9CNEVDRXZ0Rm85QnJHRWRacG5JT0krTGdnbjVCYnFPd1NiamkvMWhxQmEzNG45Zko5QUQzVThpYnVhbUdHZDNXMUx1UmxOb2h6bkxrdWlQZUQxajNDRERwNVRWTkdBK0ZoZFhvYVlFeU1UMHFUeDJSbndwczhJdEI5ZkhKM3lhNUZlZ0NsZlAwclJsbDlkN0NaMzMzai9oZzNHMk10YXZNMWZCVU5Cck4xVGVGV0Ywb2M3aXdDb1F2S21lU3BoQlJlSHR5dzB5aXc5MG42eHBnQ1l5a21vTktHaG1oMElWWlk4S0JrTzBXMXBxWUlpOU1pVFZHOTRKMmpoK2N2T1MwUnNlUUs1Z1VEOEVBcVAyQ2FyOUlqVmh0VjNzd1BWTnpUQjN2d1lDa2lXQlU3cjczTjQyQkFuNk4xRzlmbDlOWC9ENUErSjNrOVI2TlVXL055YnFUclZzenc1emZPRDhObzFvdFl2WDJTZ1lOWDEwRGM1WW9QdUpMVWo2NmRUdGNPbC9QRWJZWlBocmkzK08rL0U5K045amJlYVFyT1E1Z0oxN3gwQ0oybURvWVlvTkJsVE5XTkh1enhhL0R1Zmpyd3ZyRzBvZytZWWJGQ2IwVEJELzNvN2l0ek43ZHpYR29kejdmSjM2eHNET2t5T1NBNDROOHJIUHYvK1RNYURGcEpuNDM0Tjg1TS9tY3ErQ0tvaWdoeXdkamtsVnpTOThIZzZRR0JHVitrU2FhMUswbHlSNVRrRGNETi9ZSlRwUi96ZmJ6U2trNWV2RjdSdWRGWUtKcW1JaEVpUkVpcjA3RkVCTmF6NEVLejc4MEJOM3FLOXJPYis0WW8xOHo3NThuY2tnUzZPK1BnTEhaayt2WGVyN0lidThCcXRyYnMxZjMzbXg1MkhleVpKeDNvaUc4MFh6ZGJBNVMvK0VKN0x4RWZzMmRQejRZZ2FzZWh3UlJhTEtMVGtZZ1FKWGtQUmJBaDFqcVhtU3JkenZnbWZFKzJUWi9mbTRqdHkrZGorL2ZHODBpUjI2bi82NTFqK2JPZEVlVjNlWkw3NFFVaXNJYlJyM1NKRjVUb25XeGpmaUlHZWQzeGFjdVhZSS9YQzlYdGhZQVlrRFVZM3QxRWdUTk9Sa2dFOFE0VURTZ1VRY09IRUF1Z1BKNkY5dlVaUUo0bkxkUXIvKzlWK0dnYTR2c1F4Q0ROWDc1OTV5TlhwTS9mV3hBbnA5dytDNmpOSW4yNVU1b3NxUUdyR0hYcEJPNE5qYmN1Nnk1ZmN2Sm9kckh3bnBXYUZYV0RWR0ZxWGYzWld1Tno3RjlldnRyeWpHNWhhVG9IUDdYdnhiV3phMmlGZ05sWHB1S2NIeUs2dEhMNUpraXhTKzFqdXVudXdscUQzNy9XMEYzUVRjZElMVVcwR05nM0ZjMmtwNk5LaTVsQVRtZW1vQWtJVDVyWnhYejNmZG1wK1FObUc2UkZ4eDNHNnllWGlvcFprVnpmbGRZclRmVFp6eFk5Z28yK2dZWG1ZSWhTM2NrdDZFRVBlelkyM1pIaGpHMHdQdUh0MXpzejdZc2RHZVB1WllsZU1NSXNLYTBtYlRGcnVsTUd5M3NtSmVSQ3NwZjhQdXpRNEhJUnFkYUlYTGhFODY3WWdZQmRudFhrYzM2YlUvUDR3L2twWlQ4VTlGME0wQjBob0Zub05hMHVjV3d4Rmk1MHM3VDE1d04wd3FUWmZCN3JMVjh5bWhicWJjT0YvamFkYXZVZk4yc2haMEdRMXBiNE40MmtkR24wY1ZURDkxL1dNeWNuNWVxSVJULzErZEZrYjB2VDFnT0p1VnZyQ0lmMjJVdUtwcDkzNlNGVzBxbHNxRnVtSlBXT1RDendVNzRYc0tBK1dCeG5xRE5Wa0FmQXFJM2pXcXNoeW45SE1hOTlTdlpCbUd3L0tjQjFlalF5b1BGWTVzdS9PRVBENzBUeVdvUS9pZlZSM2w4cVRTQXV2VFVYNEY0U2VZMGFORnpRQWlWUUZnM1pEN0cvMzBFS04vcGNFc0FCU2pCWFk5ZGk3NHJsWHBKYzRkVjQ4amFJQnJBeTR3ekx3SURWWnUrM1dnZnN1ME5wT2NZd3czdlhIWlFjclJDM050UXNMUEdtRU1YMUE4c0gzMFladWdCWXVqeENMdzdlKzVORFRkZFE4ZWJHQitZZzVhWDBLcHF3SXVwU0xyM3lENUpuRnhUdmZhbnA2T0cwKzErZG1GMzZJZ0dzdzlCQmNQNTNuZkhQN05uM1FaWHBzeE0rS3B4RE5uMStBcVdCNGtkamJpYVl2dlBxUDdXUTRLL0RqRFVaNzEzL0RiRjdCR0tTS0owOFgrTDFUUlJ5eCtWVzcyb092QTEzQVF1clh1MDQ5dDNOOUZLWUU0VzNjNkU5NmEwMXlZZHZpNzcrREJSWHc5bVJDLzdMUEdKbGtBKzdSNzIyMWNHUWZjV295NlVLY3JmeEF2QWZCeUQ2Y05hY3RlcUhDYWUrcENsbUxHdEdCZ21DU1A3akJIUjF0ZDBYOTR1MzYxYkQrWWwyZ1lzOTl0a29BMXVjODY0UGZCVGljYXBxZXZocVhCZmUyYlBsaStQMUhqTVpGYXU0Qkd1Vk1HbDI2SWFLRGxKNHo2OVhSOUd4eFhIczUwV2JMYmk4QTE4UlRlRXJoNTFXWlpUMWhUVEZncHg4V2o3U1BpcVQ2c2syT0tIODVyNEM2NFVzREt6cW5CR1hmVVVvYUY4OTZuVUpua1N2K21IdlJJaUtNQmhVUU9uenpHdkgwcTkrYXNtWTlhcHFacXdXYzhhR0RPTUVNbGdlUXFCU2gwVWFRRDIySTdzZWZUYXJrRmdMTm5PcEEwZUgrcXdkNmcvb2RYK1Z5V3cwQjFhMW0veUxQYzVWUVo5ejFaSk84TFhiNFlvcmJkMS9XTG1lN1VFQjdCcjEyRmNGZy9aVm8yNlhJc0E5SnRpQktkYXpsb3hGUDBRUXdPSnBRVW9Famd3OTNWc1EzcHQwckNLTm9oNm5KeVhWR2NPd3dmTWFkY1hRK1VSdkgvNTM1KzAwZVk0RWc1L1pMK3dmVXkxcEdKVWtuWk9qbmJqRW1IRVlodXdZMHAreG00eFpNMUswMncxRFdjYzhic2luTXRtaVpXTnl1Q0JaL3RuaEhZanovZ1pPcUx1c2d3QnpRVmR0UEZRWGVZRHZIbFJ4Y3d0c1IySTFqUjlTS2lkdk9iMnBrN0QwL2tpS3VPWHgzcG1EdzVGQUhSYm1YVmxaK2FsU3hlKzRIU3VkaXhmYS9QSllZNkVlbW8wa3RKcjY4aDUyWWNHS3ZzSDlEN3g5RlY3TDlTN3dkS3dLQnVYbUJXN2ZiTXRaMEJJUnpGbFBjYjFtWThudHBzWDJZZ0F1czBjTTBxeFJMUFd0MTFLeHZmY2pxcmdDOWFyRTNtOEo3ZmVKUmNRVkpBZXM4NHI2dS9tZ2JVbnFkei9nMEMydUpvVjdrazkvS1dDVkxvd1c1T1JTN2x2WjJqLzZxQ09rZXcrZjUySTJyeXFqeDQrcTI1Ly8xeVQ5dERvL215K1NsWmx6OWxyOE9kZGp1Q0hHbGRyREJuRUdFd25KWEJYbWRKN1hxK0pLdEJQbVBSZXBld21XOTRST0dWRVk5SzQ4K3I4aUVoQXpuVHhnVkdkRTlPSzBFWG5TQ0ZkeHZGOGE0S1RDMU55OFpxMjc3Qk5MaUZjQ0hNRDVIZWhZdGNoRCtoWjc4RldCb0JBTitraEx5bXl5QUlHV2NsYTdMVzgxbGdpY0NRZHRkaWE4TVBBSGRrSHlIcUczcEl1aHVldk0vYml4Z1B5c1plNFJ3cjRzNExjdkgzVzVCRThnVi82dzErUndlak16Q1IrSnY4L0c5RVc4UXorUXdlSXhaS0NqQStuWDRjNnRuOVlhZlVOZmw4VStjMVdNZHd2WEE4ZGE2WjNSUnVEc1hhZ0FWdlQwWng5UTZway9xc0NLU0F6ODF6WHRmdEZmRUROVHcvbk1iaDZRV1JaVFk0S241L09GWGZmU0FqLzc2YkJBZGlZb1JGcDdjMk1yd1hCVFp0NXBEMXNtMkdJVmNFZnd0cDIwYWRmMmlaVVhJM3dEV2xDQVZaSTVWTGY2Nm1Nd0dZQXh6Q3ZsaUdvKzd2aUwxOVlqNElLejA3Wm9zTVBXL1BxZjAvckl6cCttUC9PN0p4eEgwTHpUWjh6R3RHc08zRUlUNXg2VlRyWFcrTDlsZ2U5VU1MUDVaYmZDdk9ZbEduT2llQnBFblJTQnhOKy9lQk5mMGpidHdFRTZCYW96VnhWNHFXT0xRNys2aWtmZEcrQkt3dXhDeUkrcjJiK2cyTk10a1g3UjdjZlZES1dpL2dDRWtEMWMxS3k4c0xYaHZnZU9Qdmg0cUpaNkU4R3I3TlRiRUZQYzJ2RHNXMlc4bWxqdEZwNmNDWldvc3J5UkhLM1E5RHZSODhtMjlOa1ZuWHVyaVFJT2lTc2FEcCt2MjFNNGZsVWNMellldkJBQzlyK01WcU52b0RSQ2dWRmpjeWdOWEs3Q3hZRmpiL2xvMDdWdlpRdGwwbXpuL090ditkSjExZHRyd0hrMVVBNnRkQ3dlczNrMG5VMkxTeHN4N05NU1BaZXRzbWFNdWtKSG9QWGRDUjlINm96b3hHbXIyV1l5SlpMT1pGQWRndzJrOUJDejNYNjkzT0x5R1RzeTNxK2VlSkpzZTkyeWFJZzY3MS9mOGVnbjRQQU14UUsyWHcwTHZmZEo5QjdjK1FkU1RQU3ZsQ3JaNExoLzJocW03dGJhWERiekFsaHVkU0VvN0FldVdtcXB6eTFYS1YxeTFWQnJwS1JMcVZTNWxacWVOOXE5QnNUbU5Vb1FNV1JOSUlHR0kwWGt5c0VTY2dWWm83SGhZckEwYUFsU293bzhGVmZ1eStYRm1vcmhPRUVvbjh1NXhzRjVZSXc1Y2lvbm9NSUZoMjFYUjBzSGl1dW1EdEpmdytubjVoU1ZGV0wrVjlSVTNGWXlJRkp2U0d3MnBOVXlpZ1g4S3VjRG1qYU9PM0J2bjA2WHNRaGJmT2FVZFBibnVTRFdtaklrazUyVFlWMWFOSTNobGtoV3JLRVpQaXdER3J5UGNQYjcvSXhsejdhcEhrVGgvWVd2Zm1zc0Y2UzRraGJ2RDNxSmtRVVdYQlhuZmlDVVVraUpqUUpsOExYdEU4cWRJNmpGYmRGMko3bXUyN3lYbDQzejk3QzlnMVNOMld3RW8rRERrT2JQZWxwRUhYa2QwbTNETklrdWpWTktORjlUSWV6ZjFxeHBwZENJbWhmOE53bmFydjRQL1ZPTU0vM3dRY3c2NERJSnUzQm5qeER3SURVak4zbmFNbW9qZXptNlBERGNGeCtPbDhPNVF1dzE4R1FtNEM4YTVoL1JTejZQY0ZXNmdCVEYyVEdWeFZRcU9uR1pJYUtHWXlhZE9CVXdXaHdwRk00WTFNcFlBZ0hYcS9CdGVPK2FLYmNHSVVXZ01LS3lOU1I2Tmg5dXVnWXM3Q0NxSEN6MHdxZ3AzWWZZYkhuRWxFWmhnV2ZKUDU0M2ZkK09TNDFJTXFzekdqTTZKR21VdnZnOXRIeUVndkNJWlRLM1dFSEFSQ0xtY2lkaVI4VEIzaVFCcXoxQnFScVdKL0RBUkU4UzFKL1U0SXhMMEVXQmdiNkkrUUx4NXhlUHhyZFY1U2ZyWitGMkdFanNVWlhWTkhnYURNZE5Xa3NRTlovSEFLY05HbVUwbnZFRUJJK3pPbUUxaXh4WFBtNG0xYkJKSFQra1ZIa3dvOHBYRUFrYXNad1RXQzJBRmZSVll3MC9VWTR0THExWXFMU2paeXVhUjZqNXdKYjRBbSt5VDNHV1ZYdWMzWWdOVTgzZ2JibGM4SktzZlVqUTBMNWozcFVGY1hJR2NvQVYwQzd3K2I1cVJpSld4QkVya244WnVYZXlXQW9XZmVtbEF4ZHB2TGR3L3JocVhidmFzRVhZOHNDMWhmeUtjcEI4YjdsYnlQMVhBZTRXc2NMenhVTmJkM1gyMU5ZM1BFRnp3WHVMdHQ1UmY1aUtQU1dRSWpzSXZyL1ZyWWJ3L09DN0NMOHZNL0JUSEhaNTVZYUpNcERPdDdSdGF0cFpPZHcybjE1RGgrdExqUzhBZnVYalBSemV1YjlRQnpWdmRyWUpoUUVVSDJta3YweTQ5OEJHd25mdmlqdG9GYlUzU2RxMlgvZDBTM3RMeXpTTDkxTno4Mk9nQlBnc2F1K3lnVCt0T0FnNTFIQ2ZYZEdmeW5HcUVSVHZhOEEycVBMN1BhMk4zTHMvblpkQUs5OXk2Q2syNTY1RExXM1V4TEpSWSsydDkveHV2clBaMHRwU1diNnQwcmZWMHJTUDA5SFd1cTYxZGJ5MVRRdWlFcnhNcEpmY3ByZERGVFVQVmJORk56dFlhajFsK2RXOG41cGJYdVEwcTF1YUQ0TW5vRkNpMzkwbnVoamY5eURZdnh5eUkzU2FGMTBYeDBybEppdzYzYTNrVTZwMUsyZHdrdnl4V3h5cjFjOFRPa0ZPWFdLS3FqM2JpdklFWDJIR2JicEFZdVhEanFwRDFzRStuMVp0bmNSSnJtbWdjbmlWRE91d3ZQV1NDdXl3bm45YVk3VXYwMURONnhEVHQxcWxROWU3aFV0YmhNS1dwY0pFQlNGYjllVVlYQUpINW5xMGt2c2hEbTFGcldXMzhvN0IyOUJsejg1OVd5UFBBMStiandhcCtQeGtodGQxSUtJdzlmemx5azdWMms1TW5tdVZYc210dFVOenJIM3h0dFlINkpxak9LSzJRK2VtdjE3NVBxUTM4VCs5bTZTN3lmVThxOEQrQnhoVFJlSEN2alRuV2tBTTkxSlkyUWtiNUFHUFFxV0pxQTc2bmx3K3cvZTlPWUJpcGk0ZDJrdEllT1JPdjFCRmNXK2FnQ2hBM2VzbEVYVUdiY0lHQVJUYzRuaFQxMUJaNjZYWHpURkxGTnlaSVQ1TUxXK3J5Qm1vZFcyVnJFWERSTVpxUkQvMnF5TUw3MlhnUXBHRUxmTm96NzBndm83QmtCenhXcDZlaEFWYWNucGV0WGtONnhKR2RnaUp5aHBKaDdhQ01JZ0RNY3BSVDhxaWFMdkw3R2FOVStabjR1aWxyZ2EzWW9NK2lLc0hIcWo5R3U0bmdycEZIb1dydmxGUVBzUGNweGxqcU9Mc3ZkbW1qYnJlbXNIcmE5K3VTc0dEK29WdXBic09iN0Z4WllVNnNxeFJiZHgwbldPeGtra2l1czR2bncvSzBXQ0pSNXVJNzVYWFQzMTRCcys5RFRuQnhieVJtTkc1d3c1QmdXUFVKaG5ac2wyV1czTjUrM1VyZGlVMExpcXhJQzlmSmh1Zk5sK1dUSnF1MExjU2treFg0ekZBZTVSV1JMVmNQajVUTTFORlJ0UDViYmZrYy9ZYk5OVUlpTG5wVEJMVHNyc3BnQ01aeDJuRmFrTXZKdWNvaWp3YVVNYUtlTDdRUXVlajZLTzIzSkZsUUl0VXVqWXpPL1NZdUUwN2ZidklSTkc4TW5jcG81ZDNsNWxLMGpJam1kdTQ5WTliWDZvMjZZbFpjN1BmSGY5MHZNZG1IbHdaUVR5SEROWDFHbDVrMWo3Y1A0LzVNTkVwNDBRSnpUTTNHTGl2MEpyZkJSNHVBZmYwcUJCTVcwS1U0Vm1xMk9NcWNMTWRURGV2YVBpQ21iWTR3WXlWTDFnWk5uVlJzajRITHBhQXVlYW5xNExjQ3BsWHBSS2lreW1VNllhYzRldStFSW8rMS9ONStzOUZ3aTkwUVAyTnJnQ0tHcFRETERLV0xhUlc2a2JQYW1OM0VabUtSSVFReWRVZWJFUzArWEdxZHFoYmdNU200dUg5aGI3d0FhcU9JVjJDNEtQVXZtSUVMMUFQZkEzNEs1bG1peFYzNkc4MEtMc2JVbzFDbnVyQ3lCUkY3a2NGUys5RXNZWC96UWZmOEIvYmZkUGt5enNwTUk0cWpwbnNYcnJBbzcvMXFkZm5TMFRNM0FhUzJVVHZSOGVMVnVMZWp1d0xsSGRid25VV1haRlZtb3hobmFMTGpqQ2JOZmlaMlFKSkxnaUsyOHFPdWt5bHl4WnlldUpQM0MvcEliUTZURjJ1aFhnYWNLWldGYnZnejNHdndoNWdhR2R0SUNIWmRBUHdQYUN6SXVqYWUxZk1kT0Y5MmQ0UXdXSHZPWDJMS0RKbGoyaTZOamZvaHFzZ2hGdXVHOWhLcmFYTjBvaFYwRU9rR2FMTEx6T012dWhYRTh2VTVkYm9jc1pvRE1sTUlUTnkrVFdpMEpLSUw1RFUrMC9wZDBmMFE0bTZDWFdwOE1IUUkrVjluaG5jd1NES01jb1EvY2h6Vjc5YktjKy92dmc1L1NGd083OTA3UEQ1dS9kVXl2ZXY5RDJqWDBaWmRBZVNSaS92ZjZxODNXT3pKeGlZV2hqS0g5cDZEbUtVZHR3MzVmNFN4cXRiSDdvalNjV0hGcm5XK0Q3bFltMU5rK0htYXlyd2RQUkN2ZlltOE1zbGp4b2ZFYzJNdURYMzJ3L01NK2lsdXZ6ckRad1RjZWx0dXA5dWh0MEdsNDhkK1FuSFcwNVVzanpYYS9ubjJiTnM4M1Q5RUhab3U4bnQ0OHNGT1BzMTc4OTNDYlhiMnNOTFdUR05qcFU0QU1PVHJMaFd5NDVQWHF1VlJxeE9WUVRXU0dOV2h5cjh5QjU0OG9KV1lBUFpYY0RoemNLTzkzKzhCK081Ujh4S3FONWNtb3lrRkNvMXJoWUZZSzJvaEdlelJ0UVZqRzZwOGpuQU9sVXBqK1BxYmNTL25sSUNOV1E0QzdCRWNQMU9iOS9ZbmM2dGE0STNMbkpJVmtiN05tSGRXS2oyd3I5WnpLVGk3NXNYSzFORGU1eGRZNG9wejhyRS9RZW5IL2NzV1hZcUZkbWJjUWpYMkFmaXRwQkVHcEc3ZlBJdXZmQ3JLeFZhdjlZUVltV2tqZzQzcUFMVGZKZHR6S29VeG54RS8zZlJPbS9SaktpN3V6QW5PYWdnU0ZuWG5wYnJJSEMyTE5lV292RmwycFpxcmduLzVLTGtzakVpSU1OaS9JaEVvL1JGWlpnL2F4WURLUy9ZSlV6clU3dGdoOXVEbTdqdHBDRklXYjg5MngySTJ5cXlNU3JlYnI5SXEyUFdzSjJNWHJ3ck5TSWgzUUE1QTIvWlVJSzAxZmJ3dm1ZRUY4cUdxcEJpTEdYcVhTOGV1d1ppTEk3VjlxYVBMaGoyMFVKUDkycVZGNlY0dlVRZFlzMzhsOUJWZ1NuY1lPRzdaVmt0aXRyZmZ2dEIyYjdRSitLR21uTmV2SlVqV2V2aGlCQ3ZVaUdOUGR5R2VBWEx0MEo0ZnBDYzJHa0Y5OVhUVWtHNFYvdHFwS1hIOWVtcEJ4Vm52MnVEWFhwZkU4bXNtbU5XbE9NWTJGK3d5VkRNR1NkQ1llUG1ZbTZUb2RPeUN6blQ1bkRJTkZIUUlpWDRZblU2b1YzcTlVZ3duY3lsT0dhU1pvK1hTYVFtVmp1ekJrM0dhS1FYUnhaeHVnMUp2cy8wdzJENGYxdnh5VVFlR0JaNXZUSUQrNGRjOHNkNFQrM1F2bGZBWEIrYUk3K1V6Yzd6RkErTE9aeGY1S0M4UW0xdmY4eElBZEJvVXpsMU5LUCtSSGRGNGZpcDVsY2FtblkzZDFTMXYxYi90V1BJWWk4UmhMMms1UTVuYVVHZzhUb2ExMmlUbUZtYlVBMFVUV2gwQ1RPbVMrcGlnSGNscERoeDhHYW92U1dqTFhRcjBWSUVvaC96MUtVVHRuM1hlT2c3OURDKzVDU1U2UnJkUGVtVFgvMXNpZHY2RDVnVmFWWnNKVFBuVXpzbFY2dkZVdlhWRXVuVkhJbEVjN1ZYWnBOTGJiS3ZNYkJzYjYva3MzK0xvZVhUVjlJUXNnTU45bDBiMmdKWm5QTnBPTTd1dlo0dVdiWWQ1OVJUT1R3M0pHWHBudnFxaGJYK0cwREtWQ3RnRWwxVUxSUGYzZXJna045UEY2NEVFSFdaUnQzRTI2MjFmUFNIYWoreFNMMkhobHp3ZFQyenF2aC93WmRzQ0VqTm80b3VJTGQ3SWNlMWJSSHdmcFZXQlpoamZaaVpUQXRGTlZNTGc2Z1dNaGhxbVdoSzBSM0Vwb0t0eHl1V3pTMXE1bXJwT3dxOGVWeTNDL0ZSZVJNSUhLZVpLRUkrZVlpdW9tbDJDUG9NRmpYNnE4Qmx2MGNFM1Z1b1FrOEs1eWVNcGROSElJa3MzeGhMQ1NYbGZFOHF2M3granc5UVlwaFM0ekxITmYzenRyRW1NSjA0RzAxMlVzUFg1K3RxdWtYYlYyaEtiVWtSVEk2YytEeERmbE1oeG9zQ0ljL3pnSmhIRlV0ZGp5bHZXQ2twdUw0MmRXRGZwT2x1YXFsWjFoTkJ0TnNMZkJHUnFVSm1JU3Y5WjRGRWVrdmdqV3RzYkdyOFFlNTJJN2k5SmZnUlhnT1F2VjdiSk5hdCtPdHRZL1F3eWt1TndINGpDMWI1WlV2WnA3K3VxMkZrdXJzNG1nT2hkclcvZDlqZ1RRNjdwZ0tEcjhobS9rN285bzdzNTA2eTJDZWVZM1B1TzhGbW5ienZidFlQTGEzL1cvclpGSlo3R2dJTTM2N1h3UFlqZ01wci9FTWc0WG9EbTVHdWwxZ0hzNy9DSVNhYjN6dWdrMDRNYUEwSVZFVXZybTN1cFdEUjhEY0tobHRRTUZ5TmdpRVRJL2duZTYya1RkNmMyZGJrNVdIRHJ4N1pKSXNxY0tZdlN1SlJsSWFpb0J0RndUc29DdjZVb2dUQWRjZ0pMY2dKenlJblBJS2M4S0dVb2k5MHdmU2FSdXdBb28rb3FicVIydWNScGc0L2NqM0JUSmo5S2VaeDRHZmptbUFYNVRtV1lDbFRNTnltendRbHhXbURSOVYrL2lPY0pQWmZtQjZIbCtBR2pZMG80dFJ0MXZjSHU0YkZhbjJ5eitBYlJqTmI4bzFTVGpkR0dxTk94WDRTSVRWcHlDUFhJOHloaVQzQkFpWWUzeklWK0toazVpUkNQbWpUKzNTbGVwK3VCdm5nNURHTFFmRVhBOEVBOW5icm5Yb0FzWHd4ZTcrdUl0QUlmbzM2OFVnM1FtQnErd2pvYmZReCtnUjlpajVEbjZNdndKZmdQZWtyVXZ3YXFTSytWZDdENytEM3pBOGUydmgySXpEOXRlbnhWRDZKQzQ1MTJ4dDhsajVIZlQ5UGZ4cCtvczRIdEFWZHdZektuS3ErUXN6eGV4bzNyR3dMY3JkMlZkUVFOMW1YeDFQY3dDMXU0c1BiekJORUx2MkxhTERkVXRQMm9iUXhLOGF6SG9PNFczaUQzVDQ5ZldlVTJlZlIzZjcveUxGWVptRFFYdmM5SzlsYWdVVUFNZUxlZnhhc0FqQ0hmVmdBWkI2SWRZczUwWHUxM2JxTEY5YjI0STlaRDJzRGJpMTQvejhneTFpeGx0amd2T1VCNUxvQWdCWFl6YWxKZ3NhTXJSMXRYWWRSUmxHSDlSUWRzRSs2eG1SZzh5SWVvOG94UnVNUUJTb1B1TU9NWU1MZHM0eEdDSitIMlNNaTVhYnVzL3dDVlk1dE5BMFhtMHk5eEdNMEp0QU9xMXBnSzBCZEtBZjdES0d2ME1mb3k5Ri9aR2xhbE52bHdubENjaGd0Ukw5bFc2QXI0S04rb1NkZ0l4WHBJSnlGMjdnTzJPL05BbGgxVlhlTk95UGQ5LzNTSUtBL1ZDazM5WTRFUFlpdUhlTUJISnBXa20zUWVKRUxQRVlMMFc5Z2daS2E5ekdIenY4Ykk3REhlLzRZYmhmZTJFOWlvTzlKTTMyM2J1YnNTa1F2aU13K24zUU5KVWU4dE90cnp5NXYyRWE2N0EyeFZaVHM0dTh5MWpqbnU1M05DM2tFYmlFL1pqc2l1bE9qMjBRNjhVNllFaW10eGt1dUMzdkw4WVpMbzJzRkVhZFF4dXZHOWxFMGV0Nitsays3TVFIb04wUFlsc2FYYit2YU4zdHIxeTQyZFZta2ZTYlY1eGkzQmJWMXUxMU05d0QwbE96TFhuWUNSOTB0NHd0K3JpdW9LQTE5eXV3RDJwTEFKd1E3WjN5K2NJbmk4a2c2MThuVVNBVDJPNlZLLzNXQklhMWhUMmV3N0VvRlNyYU1JaitUV0UwKzk0cmFIQUp3RVQ5K1o3cGxYRWpxM3hESDNRRGc1SUdPKzVMOEwyK0ovK2l3enhQTXhnRWlCZ0FJL2l5Wm9IQW1NUDAvZUU1azl5NmlOZTFrNnc3V3o0dWNycVRweHlaM0JlVUp2MlJ5cDNYRlRQWWR5TDdKSXdSNFJranpON2F6WGkyQ0lNRTBwVFhvZFpjN0lTamQrckw0Rkh4R0V5M0FSSFVBeDFWL0xadmlqbDh3V1YybTFmU0NmK3N3YzBXMDZPcWE1bTZTS3p5dFJuaFFWYWdNNk1jaFJna0pNWFlFOFloQjl1bUtvb1RwR1JxTmtLNGZ4NE9XK3UrNENyY0dZcmdUWjV2bUc5VFVqdGZuaXFZWlVXVDZVZzBlRTNoa2lVRzVuQnBnakYxNERYYm8rRFFSYmZwVjEzek1wbElKQ3VjK1ZMSnhHZ2F6eEZ3V0kzWkxuajY1WDUwMHhCMDNvWjBNTDRhU1A2R3ZRWEtidVBNclVxdm1hUWgzVUdaclJVWk5pWW85dFhUUlU3eEdsZFN5cFk0NWJBckxVTE16dEFiNjVpbWRJT2FSRFlwSVVGNUJzSW83S1E2L1V6U3d0STJTZWRTMWs3UW9JWFBTYzBHVEY0dXpXaHhMeHZ3TnhGN2g5cjEyTExZWElkOUZENXNyTy9TMzJiS2VXelpQSnFYL0FNM1FoMXB1ZlN0NzZqaVF2WUVsMW1NMGVNN1RNa3dBQTN0OVNEbTc2WmFYS0xaNTY1dnBPMGl4dmZReUNJMmo1Qk9oVi9rMlBpVjNzUnQ0S3FGbC9tRHVEblV6Nm03VnY3OFJQYjNJMWpQTVhWQ3FWWWlmK0VURkhuVzNyY2hNYjUxZTF1dVZwekwwbGdHVElBVU1hUlVGY0tBRHNJRUUwUUlabUtmeURVbEZaWWNvMmE2LzQzUURDYVhza2NNR09LMnM1S0Z6cVB5aTdzamZKOVM4TlZvamo4b1gxTWp1eWZFRVFJQ1BjV2ltQVdnakxCd2tKcTBPSmppZEhaejJpWTNPWnpzRWtkbnJFTmx5blNOWVlsNXloREtYWWc4ajFicVRDQWhzbkM3eTVLdFFLSnRYbG1JeWhVdThOTExCQlppeXVRT1V5RGJKZEVVbXlEV1pyTDlDZWFhWlloSUg3VVMwdUpYbWViVElpalpCY3JGODAyODZKeWV2N0V5MXhFUU9xc21UdzduS3RkQVVaZXp5VGVEbGt5M1hCR1VaNDNMS3BoN1FISzd4cWVBUWV2dG9jV1JsRXRKbEEwMVJaTXBSS1RWRlhlcnB4VnhGeGI2OG5GN2pzcTdHYmRVMjBCdWVJVkpPd3NmRnE0VFBCSVVTT0xpNEpNclFWejk5ZFpNaGFQQzRXVHNZeWdFblpxczRtcndZS2R4ZXVQbFlLVExKcURTL1Y0bzRoQ28rRHZOUWIvUUkrdkhvcmVmZ01UUE1tNFk1dTA3NVA2SklYaEgvZTEveW53RUEpIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9Ym9keSxodG1se2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjR9aHRtbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItcGFyYWdyYXBoLHB7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNjt0ZXh0LWFsaWduOmp1c3RpZnl9Lm1vbnN0ZXItaDEsaDF7Zm9udC1zaXplOjNyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMTU7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDIsaDJ7Zm9udC1zaXplOjIuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yO21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgzLGgze2ZvbnQtc2l6ZToycmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI1O21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNCxoNHtmb250LXNpemU6MS41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg1LGg1e2ZvbnQtc2l6ZToxLjRyZW07Zm9udC13ZWlnaHQ6Ym9sZGVyO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDYsaDZ7Zm9udC1zaXplOjEuM3JlbTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX1wK2gxe21hcmdpbi10b3A6My43NXJlbX1wK2gye21hcmdpbi10b3A6M3JlbX1wK2gze21hcmdpbi10b3A6Mi4yNXJlbX1wK2g0e21hcmdpbi10b3A6MS41cmVtfXAraDV7bWFyZ2luLXRvcDouNzVyZW19ZGl2K2gxLGRpditoMixkaXYraDMsZGl2K2g0LGRpditoNSxkaXYraDYscCtoNnttYXJnaW4tdG9wOjB9LmRlY297YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xKSAwLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMikgNTAlLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMykgMTAwJSk7LXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLWNsaXA6dGV4dDtiYWNrZ3JvdW5kLXNpemU6Y292ZXI7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSk7dGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtdGV4dC1maWxsLWNvbG9yOnRyYW5zcGFyZW50fTo6LW1vei1zZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX06OnNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfWtiZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOi4yNXJlbTtib3JkZXItcmFkaXVzOjEwcmVtO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KTtkaXNwbGF5OmlubGluZS1ibG9jaztmb250LXNpemU6NzUlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxO3BhZGRpbmc6LjI1ZW0gLjZlbTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZTt3aGl0ZS1zcGFjZTpub3dyYXB9ZGV0YWlsc3ttYXJnaW4tYm90dG9tOjFyZW19c3VtbWFyeXtjdXJzb3I6cG9pbnRlcjtmb250LWZlYXR1cmUtc2V0dGluZ3M6XFxcInRudW1cXFwiO2ZvbnQtd2VpZ2h0OjcwMDtsZXR0ZXItc3BhY2luZzouMWVtO3BhZGRpbmc6LjZyZW0gMXJlbX1kZXRhaWxzW29wZW5de3BhZGRpbmc6LjZyZW0gMXJlbSAuNzVyZW19ZGV0YWlsc1tvcGVuXSBzdW1tYXJ5e21hcmdpbi1ib3R0b206LjVyZW07cGFkZGluZzowfS5tb25zdGVyLW5vLXVzZXItc2VsZWN0ey13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTstbW96LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX1Aa2V5ZnJhbWVzIGRldGFpbHMtc2hvd3swJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLS41ZW0pfX1kZXRhaWxzW29wZW5dPjpub3Qoc3VtbWFyeSl7YW5pbWF0aW9uOmRldGFpbHMtc2hvdyAuMTVzIGVhc2UtaW4tb3V0fWRldGFpbHNbb3Blbl0+Omxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5tb25vc3BhY2V7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2UpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9YnV0dG9uXXttaW4td2lkdGg6LW1vei1tYXgtY29udGVudDttaW4td2lkdGg6bWF4LWNvbnRlbnQ7d2lkdGg6MTAwJX1idXR0b257d2lkdGg6LW1vei1tYXgtY29udGVudDt3aWR0aDptYXgtY29udGVudH0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX1JPTEUgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXksIGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBQb3BwZXIgfSBmcm9tIFwiLi9wb3BwZXIubWpzXCI7XG5pbXBvcnQgeyBNZXNzYWdlU3RhdGVCdXR0b25TdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9tZXNzYWdlLXN0YXRlLWJ1dHRvbi5tanNcIjtcbmltcG9ydCB7IFN0YXRlQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc3RhdGUtYnV0dG9uLm1qc1wiO1xuaW1wb3J0IFwiLi9zdGF0ZS1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuXG5leHBvcnQgeyBNZXNzYWdlU3RhdGVCdXR0b24gfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgYnV0dG9uRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImJ1dHRvbkVsZW1lbnRcIik7XG5cbi8qKlxuICogQSBzZWxlY3QgY29udHJvbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBvcHRpb25zIGZyb20gYSBsaXN0LlxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2Zvcm0vbWVzc2FnZS1zdGF0ZS1idXR0b24vXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9tZXNzYWdlLXN0YXRlLWJ1dHRvbi1zaW1wbGVcbiAqXG4gKiBAc2luY2UgMi4xMS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBiZWF1dGlmdWwgc2VsZWN0IGNvbnRyb2wgdGhhdCBjYW4gbWFrZSB5b3VyIGxpZmUgZWFzaWVyIGFuZCBhbHNvIGxvb2tzIGdvb2QuXG4gKiBAZmlyZXMgbW9uc3Rlci1vcHRpb25zLXNldFxuICogQGZpcmVzIG1vbnN0ZXItc2VsZWN0ZWRcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZVxuICogQGZpcmVzIG1vbnN0ZXItY2hhbmdlZFxuICovXG5jbGFzcyBNZXNzYWdlU3RhdGVCdXR0b24gZXh0ZW5kcyBQb3BwZXIge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcblx0XHRcdFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vbWVzc2FnZS1zdGF0ZS1idXR0b25AQGluc3RhbmNlXCIsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc3RhdGVcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRcblx0ICogQHJldHVybiB7TWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZVxuXHQgKi9cblx0c2V0U3RhdGUoc3RhdGUsIHRpbWVvdXQpIHtcblx0XHRyZXR1cm4gdGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5zZXRTdGF0ZShzdGF0ZSwgdGltZW91dCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKi9cblx0cmVtb3ZlU3RhdGUoKSB7XG5cdFx0cmV0dXJuIHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0ucmVtb3ZlU3RhdGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5UeXBlcy5TdGF0ZXx1bmRlZmluZWR9XG5cdCAqL1xuXHRnZXRTdGF0ZSgpIHtcblx0XHRyZXR1cm4gdGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5nZXRTdGF0ZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbGFiZWxzIExhYmVsIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMuYnV0dG9uIEJ1dHRvbiBsYWJlbFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gbW9kZSBNb2RlIGRlZmluaXRpb25zIChtYW51YWwsIHN1Ym1pdClcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdG1lc3NhZ2U6IHtcblx0XHRcdFx0dGl0bGU6IHVuZGVmaW5lZCxcblx0XHRcdFx0Y29udGVudDogdW5kZWZpbmVkLFxuXHRcdFx0XHRpY29uOiB1bmRlZmluZWQsXG5cdFx0XHR9LFxuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0bW9kZTogXCJtYW51YWxcIixcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRidXR0b246IFwiPHNsb3Q+PC9zbG90PlwiLFxuXHRcdFx0fSxcblx0XHRcdGNsYXNzZXM6IHtcblx0XHRcdFx0YnV0dG9uOiBcIm1vbnN0ZXItYnV0dG9uLXByaW1hcnlcIixcblx0XHRcdH0sXG5cdFx0XHRhY3Rpb25zOiB7XG5cdFx0XHRcdGNsaWNrOiAoZSkgPT4ge30sXG5cdFx0XHR9LFxuXHRcdFx0ZmVhdHVyZXM6IHtcblx0XHRcdFx0ZGlzYWJsZUJ1dHRvbjogZmFsc2UsXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXG5cdFx0bGV0IG1vZGVzID0gbnVsbDtcblx0XHRjb25zdCBtb2RlT3B0aW9uID0gdGhpcy5nZXRPcHRpb24oXCJtb2RlXCIpO1xuXHRcdGlmICh0eXBlb2YgbW9kZU9wdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0bW9kZXMgPSBtb2RlT3B0aW9uLnNwbGl0KFwiIFwiKTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRtb2RlcyA9PT0gbnVsbCB8fFxuXHRcdFx0bW9kZXMgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0aXNBcnJheShtb2RlcykgPT09IGZhbHNlIHx8XG5cdFx0XHRtb2Rlcy5sZW5ndGggPT09IDBcblx0XHQpIHtcblx0XHRcdG1vZGVzID0gW1wibWFudWFsXCJdO1xuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgWywgbW9kZV0gb2YgT2JqZWN0LmVudHJpZXMobW9kZXMpKSB7XG5cdFx0XHRpbml0RXZlbnRIYW5kbGVyQnlNb2RlLmNhbGwodGhpcywgbW9kZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgbWVzc2FnZVxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xIVE1MRWxlbWVudH1tZXNzYWdlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaWNvblxuXHQgKiBAcmV0dXJuIHtNZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqL1xuXHRzZXRNZXNzYWdlKG1lc3NhZ2UsIHRpdGxlLCBpY29uKSB7XG5cdFx0aWYgKGlzU3RyaW5nKG1lc3NhZ2UpKSB7XG5cdFx0XHRpZiAobWVzc2FnZSA9PT0gXCJcIikge1xuXHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwibWVzc2FnZSBtdXN0IG5vdCBiZSBlbXB0eVwiKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY29udGFpbmVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2VEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0Y29uc3QgdGl0bGVEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0dGl0bGVEaXYuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFLCBcIm1lc3NhZ2UtdGl0bGUtYm94XCIpO1xuXG5cdFx0XHRsZXQgdGl0bGVFbGVtZW50LCBpY29uRWxlbWVudDtcblx0XHRcdGlmICh0aXRsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRpdGxlID0gdmFsaWRhdGVTdHJpbmcodGl0bGUpO1xuXHRcdFx0XHR0aXRsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0XHR0aXRsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgXCJcIik7XG5cdFx0XHRcdHRpdGxlRWxlbWVudC5pbm5lckhUTUwgPSB0aXRsZTtcblx0XHRcdFx0dGl0bGVFbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfUk9MRSwgXCJtZXNzYWdlLXRpdGxlXCIpO1xuXHRcdFx0XHR0aXRsZURpdi5hcHBlbmRDaGlsZCh0aXRsZUVsZW1lbnQpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaWNvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGljb24gPSB2YWxpZGF0ZVN0cmluZyhpY29uKTtcblx0XHRcdFx0aWNvbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHRcdFx0XHRpY29uRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcIlwiKTtcblx0XHRcdFx0aWNvbkVsZW1lbnQuaW5uZXJIVE1MID0gaWNvbjtcblx0XHRcdFx0aWNvbkVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFLCBcIm1lc3NhZ2UtaWNvblwiKTtcblx0XHRcdFx0dGl0bGVEaXYuYXBwZW5kQ2hpbGQoaWNvbkVsZW1lbnQpO1xuXHRcdFx0fVxuXG5cdFx0XHRtZXNzYWdlRGl2LmlubmVySFRNTCA9IG1lc3NhZ2U7XG5cdFx0XHRjb250YWluZXJEaXYuYXBwZW5kQ2hpbGQodGl0bGVEaXYpO1xuXHRcdFx0Y29udGFpbmVyRGl2LmFwcGVuZENoaWxkKG1lc3NhZ2VEaXYpO1xuXG5cdFx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2UuY29udGVudFwiLCBjb250YWluZXJEaXYpO1xuXHRcdH0gZWxzZSBpZiAobWVzc2FnZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2UuY29udGVudFwiLCBtZXNzYWdlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcblx0XHRcdFx0XCJtZXNzYWdlIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgSFRNTEVsZW1lbnRcIixcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogY2xlYXJzIHRoZSBNZXNzYWdlXG5cdCAqXG5cdCAqIEByZXR1cm4ge01lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICovXG5cdGNsZWFyTWVzc2FnZSgpIHtcblx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2UudGl0bGVcIiwgdW5kZWZpbmVkKTtcblx0XHR0aGlzLnNldE9wdGlvbihcIm1lc3NhZ2UuY29udGVudFwiLCB1bmRlZmluZWQpO1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwibWVzc2FnZS5pY29uXCIsIHVuZGVmaW5lZCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogV2l0aCB0aGlzIG1ldGhvZCB5b3UgY2FuIHNob3cgdGhlIHBvcHBlciB3aXRoIHRpbWVvdXQgZmVhdHVyZS5cblx0ICpcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRcblx0ICogQHJldHVybiB7TWVzc2FnZVN0YXRlQnV0dG9ufVxuXHQgKi9cblx0c2hvd01lc3NhZ2UodGltZW91dCkge1xuXHRcdHRoaXMuc2hvd0RpYWxvZy5jYWxsKHRoaXMpO1xuXG5cdFx0aWYgKHRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHN1cGVyLmhpZGVEaWFsb2coKTtcblx0XHRcdH0sIHRpbWVvdXQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdpdGggdGhpcyBtZXRob2QgeW91IGNhbiBzaG93IHRoZSBwb3BwZXIuXG5cdCAqXG5cdCAqIEByZXR1cm4ge01lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICovXG5cdHNob3dEaWFsb2coKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwibWVzc2FnZS5jb250ZW50XCIpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0c3VwZXIuc2hvd0RpYWxvZygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01lc3NhZ2VTdGF0ZUJ1dHRvbn1cblx0ICovXG5cdGhpZGVNZXNzYWdlKCkge1xuXHRcdHN1cGVyLmhpZGVEaWFsb2coKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNZXNzYWdlU3RhdGVCdXR0b259XG5cdCAqL1xuXHR0b2dnbGVNZXNzYWdlKCkge1xuXHRcdHN1cGVyLnRvZ2dsZURpYWxvZygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge09iamVjdH1cblx0ICovXG5cdGdldE1lc3NhZ2UoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0T3B0aW9uKFwibWVzc2FnZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItbWVzc2FnZS1zdGF0ZS1idXR0b25cIjtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtBcnJheTxDU1NTdHlsZVNoZWV0Pn1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdGNvbnN0IHN0eWxlcyA9IFBvcHBlci5nZXRDU1NTdHlsZVNoZWV0KCk7XG5cdFx0c3R5bGVzLnB1c2goU3RhdGVCdXR0b25TdHlsZVNoZWV0KTtcblx0XHRzdHlsZXMucHVzaChNZXNzYWdlU3RhdGVCdXR0b25TdHlsZVNoZWV0KTtcblx0XHRyZXR1cm4gc3R5bGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uY2xpY2soKSBtZXRob2Qgc2ltdWxhdGVzIGEgY2xpY2sgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9jbGlja31cblx0ICovXG5cdGNsaWNrKCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImRpc2FibGVkXCIpID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSAmJlxuXHRcdFx0aXNGdW5jdGlvbih0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLmNsaWNrKVxuXHRcdCkge1xuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5jbGljaygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgQnV0dG9uLmZvY3VzKCkgbWV0aG9kIHNldHMgZm9jdXMgb24gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKlxuXHQgKiBAc2luY2UgMy4yNy4wXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9IVE1MRWxlbWVudC9mb2N1c31cblx0ICovXG5cdGZvY3VzKG9wdGlvbnMpIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJkaXNhYmxlZFwiKSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmIChcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0gJiZcblx0XHRcdGlzRnVuY3Rpb24odGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5mb2N1cylcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uZm9jdXMob3B0aW9ucyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBCdXR0b24uYmx1cigpIG1ldGhvZCByZW1vdmVzIGZvY3VzIGZyb20gdGhlIGludGVybmFsIGJ1dHRvbiBlbGVtZW50LlxuXHQgKi9cblx0Ymx1cigpIHtcblx0XHRpZiAoXG5cdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdICYmXG5cdFx0XHRpc0Z1bmN0aW9uKHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYmx1cilcblx0XHQpIHtcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYmx1cigpO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyQnlNb2RlKG1vZGUpIHtcblx0c3dpdGNoIChtb2RlKSB7XG5cdFx0Y2FzZSBcIm1hbnVhbFwiOlxuXHRcdFx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIsIChlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNhbGxiYWNrID0gdGhpcy5nZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIpO1xuXHRcdFx0XHRpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRcdFx0XHRjYWxsYmFjayhlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJzdWJtaXRcIjpcblx0XHRcdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0T3B0aW9uKFwiYWN0aW9ucy5jbGlja1wiLCAoZSkgPT4ge1xuXHRcdFx0XHRjb25zdCBmb3JtID0gdGhpcy5mb3JtO1xuXG5cdFx0XHRcdGlmIChmb3JtIGluc3RhbmNlb2YgSFRNTEZvcm1FbGVtZW50KSB7XG5cdFx0XHRcdFx0Zm9ybS5yZXF1ZXN0U3VibWl0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRicmVhaztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdGBbJHtBVFRSSUJVVEVfUk9MRX09YnV0dG9uXWAsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuXG4gICAgICAgICAgICA8bW9uc3Rlci1zdGF0ZS1idXR0b24gZXhwb3J0cGFydHM9XCJidXR0b246YnV0dG9uLWJ1dHRvbixjb250cm9sOmJ1dHRvbi1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRhdGEtbW9uc3Rlci1vcHRpb24tY2xhc3Nlcy1idXR0b24gcGF0aDpjbGFzc2VzLmJ1dHRvbiwgZGlzYWJsZWQgcGF0aDpmZWF0dXJlcy5kaXNhYmxlQnV0dG9uIHwgaWY6dHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydD1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmJ1dHRvblwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvbW9uc3Rlci1zdGF0ZS1idXR0b24+XG5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJtb25zdGVyLWNvbG9yLXByaW1hcnktMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJhcnJvd1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJtZXNzYWdlXCIgcGFydD1cIm1lc3NhZ2VcIiBjbGFzcz1cImZsZXhcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm1lc3NhZ2UuY29udGVudFwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoTWVzc2FnZVN0YXRlQnV0dG9uKTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfUk9MRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgdHlwZU9mIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVvZi5tanNcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuL2J1dHRvbi5tanNcIjtcbmltcG9ydCB7IFBvcHBlckJ1dHRvbiB9IGZyb20gXCIuL3BvcHBlci1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBDb25maXJtQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvY29uZmlybS1idXR0b24ubWpzXCI7XG5pbXBvcnQgeyBmaXJlQ3VzdG9tRXZlbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2V2ZW50cy5tanNcIjtcblxuaW1wb3J0IFwiLi9idXR0b24ubWpzXCI7XG5pbXBvcnQgXCIuL21lc3NhZ2Utc3RhdGUtYnV0dG9uLm1qc1wiO1xuaW1wb3J0IHsgUG9wcGVyQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvcG9wcGVyLWJ1dHRvbi5tanNcIjtcbmltcG9ydCB7IFN0YXRlQnV0dG9uU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc3RhdGUtYnV0dG9uLm1qc1wiO1xuXG5leHBvcnQgeyBDb25maXJtQnV0dG9uIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiY29uZmlybUJ1dHRvbkVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGNhbmNlbEJ1dHRvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjYW5jZWxCdXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIFRoaXMgYWN0aW9uIGNhbGxiYWNrIGV4ZWN1dGVzIHRoZSBhY3Rpb25zIHdoZW4gYSBidXR0b24gaXMgY2xpY2tlZC5cbiAqXG4gKiBAY2FsbGJhY2sgTW9uc3Rlci5Db21wb25lbnRzLkZvcm1+ZXhhbXBsZUFjdGlvbkNhbGxiYWNrXG4gKiBAcGFyYW0ge0V2ZW50fSBlIEV2ZW50XG4gKiBAdGhpcyB7Q3VzdG9tQ29udHJvbH1cbiAqL1xuXG4vKipcbiAqIFRoaXMgQ3VzdG9tQ29udHJvbCBjcmVhdGVzIGEgY29uZmlybSBidXR0b24gZWxlbWVudCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvY29uZmlybS1idXR0b24ucG5nXCI+XG4gKlxuICogRGVwZW5kZW5jaWVzOiB0aGUgc3lzdGVtIHVzZXMgZnVuY3Rpb25zIG9mIHRoZSBbbW9uc3RlcmpzXShodHRwczovL21vbnN0ZXJqcy5vcmcvKSBsaWJyYXJ5XG4gKiBhcyB3ZWxsIGFzIFtwb29wZXJqc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKS5cbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLWNvbmZpcm0tYnV0dG9uIC8+YCBkaXJlY3RseSBpbiB0aGUgSFRNTCBvciB1c2luZ1xuICogSmF2YXNjcmlwdCB2aWEgdGhlIGBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWNvbmZpcm0tYnV0dG9uJyk7YCBtZXRob2QuXG4gKlxuICogYGBgaHRtbFxuICogPG1vbnN0ZXItY29uZmlybS1idXR0b24+PC9tb25zdGVyLWNvbmZpcm0tYnV0dG9uPlxuICogYGBgXG4gKlxuICogT3IgeW91IGNhbiBjcmVhdGUgdGhpcyBDdXN0b21Db250cm9sIGRpcmVjdGx5IGluIEphdmFzY3JpcHQ6XG4gKlxuICogYGBganNcbiAqIGltcG9ydCB7Q29uZmlybUJ1dHRvbn0gZnJvbSAnQHNjaHVrYWkvY29tcG9uZW50LWZvcm0vc291cmNlL2NvbmZpcm0tYnV0dG9uLmpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY29uZmlybS1idXR0b24nKTtcbiAqIGBgYFxuICogVGhlIGBkYXRhLW1vbnN0ZXItYnV0dG9uLWNsYXNzYCBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gY2hhbmdlIHRoZSBDU1MgY2xhc3Mgb2YgdGhlIGJ1dHRvbi5cbiAqXG4gKiBAc3RhcnR1bWwgY29uZmlybS1idXR0b24ucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDdXN0b21Db250cm9sXG4gKiBDdXN0b21Db250cm9sIDx8LS0gQnV0dG9uXG4gKiBCdXR0b24gPHwtLSBQb3BwZXJCdXR0b25cbiAqIFBvcHBlckJ1dHRvbiA8fC0tIENvbmZpcm1CdXR0b25cbiAqIEBlbmR1bWxcbiAqXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBjb25maXJtIGJ1dHRvblxuICovXG5cbi8qKlxuICogQSBjb25maXJtIGJ1dHRvbiBjb250cm9sLlxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2Zvcm0vY29uZmlybS1idXR0b24vXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS9jb25maXJtLWJ1dHRvbi1zaW1wbGUgY29uZmlybSBidXR0b25cbiAqXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGNvbmZpcm0gYnV0dG9uIGNvbnRyb2xcbiAqL1xuY2xhc3MgQ29uZmlybUJ1dHRvbiBleHRlbmRzIFBvcHBlckJ1dHRvbiB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcblx0XHRcdFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vY29uZmlybS1idXR0b25AQGluc3RhbmNlXCIsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0b2dnbGVFdmVudFR5cGU9Y2xpY2ssdG91Y2ggTGlzdCBvZiBldmVudCB0eXBlcyB0byBiZSBvYnNlcnZlZCBmb3Igb3BlbmluZyB0aGUgY29uZmlybSBtZXNzYWdlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5idXR0b249JzxzbG90IG5hbWU9XCJidXR0b25cIj48L3Nsb3Q+JyBCdXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5tZXNzYWdlPSc8c2xvdD5TaG91bGQgSSBTdGF5IG9yIFNob3VsZCBJIEdvPzwvc2xvdD4nIE1lc3NhZ2Vcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5jb25maXJtPSc8c2xvdCBuYW1lPVwiY29uZmlybVwiPkNvbmZpcm08L3Nsb3Q+JyBDb25maXJtIGJ1dHRvbiBsYWJlbFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gbGFiZWxzLmNhbmNlbD0nPHNsb3QgbmFtZT1cImNhbmNlbFwiPkNhbmNlbDwvc2xvdD4nIENhbmNlbCBidXR0b24gbGFiZWxcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybX5leGFtcGxlQWN0aW9uQ2FsbGJhY2t9IGFjdGlvbnMuY29uZmlybVxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtfmV4YW1wbGVBY3Rpb25DYWxsYmFja30gYWN0aW9ucy5jYW5jZWwgTGlzdCBvZiBldmVudCB0eXBlcyB0byBiZSBvYnNlcnZlZCBmb3Igb3BlbmluZyB0aGUgZHJvcGRvd25cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHBvcHBlciBbUG9wcGVySlMgT3B0aW9uc10oaHR0cHM6Ly9wb3BwZXIuanMub3JnL2RvY3MvdjIvKVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcG9wcGVyLnBsYWNlbWVudD10b3AgUG9wcGVySlMgcGxhY2VtZW50XG5cdCAqIEBleHRlbmRzIHtQb3BwZXJCdXR0b259XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0Y29uc3Qgb2JqID0gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHRcdGxhYmVsczoge1xuXHRcdFx0XHRidXR0b246ICc8c2xvdCBuYW1lPVwiYnV0dG9uXCI+PC9zbG90PicsXG5cdFx0XHRcdG1lc3NhZ2U6IFwiPHNsb3Q+U2hvdWxkIEkgU3RheSBvciBTaG91bGQgSSBHbz88L3Nsb3Q+XCIsXG5cdFx0XHRcdGNvbmZpcm06ICc8c2xvdCBuYW1lPVwiY29uZmlybVwiPkNvbmZpcm08L3Nsb3Q+Jyxcblx0XHRcdFx0Y2FuY2VsOiAnPHNsb3QgbmFtZT1cImNhbmNlbFwiPkNhbmNlbDwvc2xvdD4nLFxuXHRcdFx0fSxcblx0XHR9KTtcblxuXHRcdG9ialtcImNsYXNzZXNcIl1bXCJjb25maXJtQnV0dG9uXCJdID0gXCJtb25zdGVyLWJ1dHRvbi1wcmltYXJ5XCI7XG5cdFx0b2JqW1wiY2xhc3Nlc1wiXVtcImNhbmNlbEJ1dHRvblwiXSA9IFwibW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5XCI7XG5cdFx0b2JqW1wiYWN0aW9uc1wiXVtcImNhbmNlbFwiXSA9IChlKSA9PiB7XG5cdFx0XHR0aGlzLmhpZGVEaWFsb2coKTtcblx0XHR9O1xuXG5cdFx0b2JqW1wiYWN0aW9uc1wiXVtcImNvbmZpcm1cIl0gPSAoZSkgPT4ge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhpcyBjYWxsYmFjayBtdXN0IGJlIGltcGxlbWVudGVkXCIpO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gb2JqO1xuXHR9XG5cblx0aGlkZURpYWxvZygpIHtcblx0XHRzdXBlci5oaWRlRGlhbG9nKCk7XG5cdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0ucmVtb3ZlU3RhdGUoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJCdXR0b259XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRDb250cm9sUmVmZXJlbmNlcy5jYWxsKHRoaXMpO1xuXHRcdGluaXRFdmVudGhhbmRsZXIuY2FsbCh0aGlzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItY29uZmlybS1idXR0b25cIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtBcnJheX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdGNvbnN0IHN0eWxlcyA9IFBvcHBlckJ1dHRvbi5nZXRDU1NTdHlsZVNoZWV0KCk7XG5cdFx0c3R5bGVzLnB1c2goQ29uZmlybUJ1dHRvblN0eWxlU2hlZXQpO1xuXHRcdHJldHVybiBzdHlsZXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkZvcm0uUG9wcGVyQnV0dG9ufVxuXHQgKi9cblx0c2hvd0RpYWxvZygpIHtcblx0XHRjb25zdCBjb25maXJtQnV0dG9uQ2xhc3MgPSB0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuY29uZmlybUJ1dHRvblwiKTtcblx0XHRpZiAoY29uZmlybUJ1dHRvbkNsYXNzKSB7XG5cdFx0XHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XHRcdFwiY2xhc3Nlcy5idXR0b25cIixcblx0XHRcdFx0Y29uZmlybUJ1dHRvbkNsYXNzLFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCBjYW5jZWxCdXR0b25DbGFzcyA9IHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5jYW5jZWxCdXR0b25cIik7XG5cdFx0aWYgKGNhbmNlbEJ1dHRvbkNsYXNzKSB7XG5cdFx0XHR0aGlzW2NhbmNlbEJ1dHRvbkVsZW1lbnRTeW1ib2xdLnNldE9wdGlvbihcblx0XHRcdFx0XCJjbGFzc2VzLmJ1dHRvblwiLFxuXHRcdFx0XHRjYW5jZWxCdXR0b25DbGFzcyxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHN1cGVyLnNob3dEaWFsb2coKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIGNvbmZpcm0gYnV0dG9uIHN0YXRlXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZVxuXHQgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Db25maXJtQnV0dG9ufVxuXHQgKi9cblx0c2V0Q29uZmlybUJ1dHRvblN0YXRlKHN0YXRlLCB0aW1lb3V0KSB7XG5cdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2V0U3RhdGUoc3RhdGUsIHRpbWVvdXQpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBhbmQgc2hvdyB0aGUgY29uZmlybSBidXR0b24gbWVzc2FnZVxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuXHQgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Db25maXJtQnV0dG9ufVxuXHQgKi9cblx0c2hvd0NvbmZpcm1CdXR0b25NZXNzYWdlKG1lc3NhZ2UsIHRpbWVvdXQpIHtcblx0XHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRNZXNzYWdlKG1lc3NhZ2UpO1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpc1tjb25maXJtQnV0dG9uRWxlbWVudFN5bWJvbF0uc2hvd01lc3NhZ2UodGltZW91dCk7XG5cdFx0fSwgMCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHR5cGVcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBnZXRBY3Rpb24odHlwZSkge1xuXHRjb25zdCBzZWxmID0gdGhpcztcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG5cdFx0Y29uc3QgY2FsbGJhY2sgPSBzZWxmLmdldE9wdGlvbihgYWN0aW9ucy4ke3R5cGV9YCk7XG5cdFx0aWYgKHR5cGVPZihjYWxsYmFjaykgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNhbGxiYWNrLmNhbGwodGhpcywgZXZlbnQpO1xuXHR9O1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtpbml0RXZlbnRoYW5kbGVyfVxuICogQGZpcmVzIE1vbnN0ZXIuQ29tcG9uZW50cy5Gb3JtLlBvcHBlckJ1dHRvbiNtb25zdGVyLWNvbmZpcm1cbiAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuRm9ybS5Qb3BwZXJCdXR0b24jbW9uc3Rlci1jb25maXJtZWRcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50aGFuZGxlcigpIHtcblx0dGhpc1tjYW5jZWxCdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XCJjbGlja0V2ZW50VHlwZVwiLFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiY2xpY2tFdmVudFR5cGVcIiwgW1wiY2xpY2tcIl0pLFxuXHQpO1xuXHR0aGlzW2NhbmNlbEJ1dHRvbkVsZW1lbnRTeW1ib2xdLnNldE9wdGlvbihcblx0XHRcImFjdGlvbnMuY2xpY2tcIixcblx0XHRnZXRBY3Rpb24uY2FsbCh0aGlzLCBcImNhbmNlbFwiKSxcblx0KTtcblxuXHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXG5cdFx0XCJjbGlja0V2ZW50VHlwZVwiLFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwiY2xpY2tFdmVudFR5cGVcIiwgW1wiY2xpY2tcIl0pLFxuXHQpO1xuXHR0aGlzW2NvbmZpcm1CdXR0b25FbGVtZW50U3ltYm9sXS5zZXRPcHRpb24oXCJhY3Rpb25zLmNsaWNrXCIsICgpID0+IHtcblx0XHRjb25zdCBjYWxsYmFjayA9IGdldEFjdGlvbi5jYWxsKHRoaXMsIFwiY29uZmlybVwiKTtcblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLWNvbmZpcm1cIiwge30pO1xuXHRcdGNhbGxiYWNrLmNhbGwodGhpcyk7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1jb25maXJtZWRcIiwge30pO1xuXHR9KTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdHRoaXNbY29uZmlybUJ1dHRvbkVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb25maXJtXWAsXG5cdCk7XG5cdHRoaXNbY2FuY2VsQnV0dG9uRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRgWyR7QVRUUklCVVRFX1JPTEV9PWNhbmNlbF1gLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImRpc2FibGVkIHBhdGg6ZGlzYWJsZWQgfCBpZjp0cnVlLCBjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBwYXJ0PVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmxhYmVscy5idXR0b25cIj48L2J1dHRvbj5cblxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cInBvcHBlclwiIHBhcnQ9XCJwb3BwZXJcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJtb25zdGVyLWNvbG9yLXByaW1hcnktMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJhcnJvd1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cIm1lc3NhZ2VcIiBjbGFzcz1cImZsZXhcIiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLm1lc3NhZ2VcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiZGVjaXNpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPG1vbnN0ZXItbWVzc2FnZS1zdGF0ZS1idXR0b24gZXhwb3J0cGFydHM9XCJtb25zdGVyLXN0YXRlLWJ1dHRvbjpjb25maXJtLWJ1dHRvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w6Y29uZmlybS1jb250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLWJ1dHRvbjpjb25maXJtLWNvbnRyb2wtYnV0dG9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uLWNvbnRyb2w6Y29uZmlybS1idXR0b24tY29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHBlcjpjb25maXJtLXBvcHBlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6Y29uZmlybS1wb3BwZXItbWVzc2FnZS1tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjpjb25maXJtLXBvcHBlci1tZXNzYWdlLWljb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTpjb25maXJtLXBvcHBlci1tZXNzYWdlLXRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItYnV0dG9uLWNsYXNzIHBhdGg6Y2xhc3Nlcy5jb25maXJtQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjb25maXJtXCIgcGFydD1cImNvbmZpcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuY29uZmlybVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tb25zdGVyLW1lc3NhZ2Utc3RhdGUtYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgIDxtb25zdGVyLWJ1dHRvbiBleHBvcnRwYXJ0cz1cImJ1dHRvbjpjYW5jZWwtYnV0dG9uLGNvbnRyb2w6Y2FuY2VsLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItYnV0dG9uLWNsYXNzIHBhdGg6Y2xhc3Nlcy5jYW5jZWxCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjYW5jZWxcIiBwYXJ0PVwiY2FuY2VsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLmNhbmNlbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tb25zdGVyLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoQ29uZmlybUJ1dHRvbik7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNBcnJheSwgaXNJbnN0YW5jZSB9IGZyb20gXCIuL2lzLm1qc1wiO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gXCIuL25vZGUubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBOb2RlTGlzdCB9O1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIHRoZSBpbnN0YW5jZSB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5UeXBlcy5Ob2RlTGlzdCgpYC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI2LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIE5vZGVMaXN0IGNsYXNzXG4gKi9cbmNsYXNzIE5vZGVMaXN0IGV4dGVuZHMgU2V0IHtcblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBpbnZhbGlkIHZhbHVlIHR5cGVcblx0ICogQHBhcmFtIHtOb2RlTGlzdHxOb2RlfEFycmF5PE5vZGU+fXZhbHVlc1xuXHQgKi9cblx0Y29uc3RydWN0b3IodmFsdWVzKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdGlmICh2YWx1ZXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG5cdFx0aWYgKGlzQXJyYXkodmFsdWVzKSkge1xuXHRcdFx0dmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB0aGlzLmFkZCh2YWx1ZSkpO1xuXHRcdH0gZWxzZSBpZiAoaXNJbnN0YW5jZSh2YWx1ZXMsIE5vZGVMaXN0KSkge1xuXHRcdFx0dmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB0aGlzLmFkZCh2YWx1ZSkpO1xuXHRcdH0gZWxzZSBpZiAoaXNJbnN0YW5jZSh2YWx1ZXMsIE5vZGUpKSB7XG5cdFx0XHR0aGlzLmFkZCh2YWx1ZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHZhbHVlIHR5cGVcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci90eXBlcy9ub2RlLWxpc3RcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtOb2RlfSBub2RlXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuVHlwZXMuTm9kZUxpc3R9XG5cdCAqL1xuXHRhZGQobm9kZSkge1xuXHRcdHN1cGVyLmFkZCh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICogQHJldHVybiB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRyZW1vdmUobm9kZSkge1xuXHRcdHN1cGVyLmRlbGV0ZSh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGhhcyhub2RlKSB7XG5cdFx0cmV0dXJuIHN1cGVyLmhhcyh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtOb2RlTGlzdH1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHN1cGVyLmNsZWFyKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Tm9kZUxpc3R9XG5cdCAqL1xuXHR0b0FycmF5KCkge1xuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge05vZGVMaXN0fVxuXHQgKi9cblx0dG9KU09OKCkge1xuXHRcdHJldHVybiB0aGlzLnRvQXJyYXkoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtOb2RlTGlzdH1cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdGNvbnN0IHBhcnRzID0gW107XG5cblx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy50b0FycmF5KCkpIHtcblx0XHRcdHBhcnRzLnB1c2gobm9kZS50b1N0cmluZygpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcGFydHMuam9pbihcIlxcblwiKTtcblx0fVxuXG5cdGdldCBsZW5ndGgoKSB7XG5cdFx0cmV0dXJuIHN1cGVyLnNpemU7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGlzUHJpbWl0aXZlIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBOb2RlTGlzdCB9IGZyb20gXCIuL25vZGVsaXN0Lm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBOb2RlIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGludGVybmFsVmFsdWVTeW1ib2wgPSBTeW1ib2woXCJpbnRlcm5hbERhdGFcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHRyZWVTdHJ1Y3R1cmVTeW1ib2wgPSBTeW1ib2woXCJ0cmVlU3RydWN0dXJlXCIpO1xuXG4vKipcbiAqIFlvdSBjYW4gY3JlYXRlIHRoZSBpbnN0YW5jZSB2aWEgdGhlIG1vbnN0ZXIgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5UeXBlcy5Ob2RlKClgLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgTm9kZSBDbGFzc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kZS9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9JdGVyYXRpb25fcHJvdG9jb2xzXG4gKi9cbmNsYXNzIE5vZGUgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7Kn0gW3ZhbHVlXVxuXHQgKi9cblx0Y29uc3RydWN0b3IodmFsdWUpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF0gPSB2YWx1ZTtcblxuXHRcdHRoaXNbdHJlZVN0cnVjdHVyZVN5bWJvbF0gPSB7XG5cdFx0XHRwYXJlbnQ6IG51bGwsXG5cdFx0XHRjaGlsZE5vZGVzOiBuZXcgTm9kZUxpc3QoKSxcblx0XHRcdGxldmVsOiAwLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL25vZGVcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHsqfVxuXHQgKi9cblx0Z2V0IHZhbHVlKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsVmFsdWVTeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7Kn1cblx0ICovXG5cdHNldCB2YWx1ZSh2YWx1ZSkge1xuXHRcdHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF0gPSB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuVHlwZXMuTm9kZXxudWxsfVxuXHQgKi9cblx0Z2V0IHBhcmVudCgpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQ7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtpbnRlZ2VyfVxuXHQgKi9cblx0Z2V0IGxldmVsKCkge1xuXHRcdHJldHVybiB0aGlzW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmxldmVsO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRnZXQgY2hpbGROb2RlcygpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7Tm9kZUxpc3R9XG5cdCAqL1xuXHRzZXQgY2hpbGROb2RlcyhjaGlsZE5vZGVzKSB7XG5cdFx0dGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzID0gdmFsaWRhdGVJbnN0YW5jZShcblx0XHRcdGNoaWxkTm9kZXMsXG5cdFx0XHROb2RlTGlzdCxcblx0XHQpO1xuXHRcdHNldENoaWxkTGV2ZWxBbmRQYXJlbnQuY2FsbCh0aGlzLCB0aGlzLCAxLCBuZXcgU2V0KCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuVHlwZXMuTm9kZX1cblx0ICogQHBhcmFtIHtOb2RlfSBub2RlXG5cdCAqL1xuXHRhcHBlbmRDaGlsZChub2RlKSB7XG5cdFx0dGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmFkZCh2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpKTtcblx0XHRub2RlW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLnBhcmVudCA9IHRoaXM7XG5cblx0XHRub2RlW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmxldmVsID0gdGhpcy5sZXZlbCArIDE7XG5cdFx0c2V0Q2hpbGRMZXZlbEFuZFBhcmVudC5jYWxsKHRoaXMsIG5vZGUsIDEsIG5ldyBTZXQoKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Ob2RlfVxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICovXG5cdHJlbW92ZUNoaWxkKG5vZGUpIHtcblx0XHR0aGlzW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmNoaWxkTm9kZXMucmVtb3ZlKHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSkpO1xuXHRcdG5vZGVbdHJlZVN0cnVjdHVyZVN5bWJvbF0ucGFyZW50ID0gbnVsbDtcblxuXHRcdG5vZGVbdHJlZVN0cnVjdHVyZVN5bWJvbF0ubGV2ZWwgPSAwO1xuXHRcdHNldENoaWxkTGV2ZWxBbmRQYXJlbnQuY2FsbCh0aGlzLCBub2RlLCAtMSwgbmV3IFNldCgpKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aGFzQ2hpbGROb2RlcygpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmxlbmd0aCA+IDA7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7TW9uc3Rlci5UeXBlcy5Ob2RlfVxuXHQgKiBAcGFyYW0ge05vZGV9IG5vZGVcblx0ICovXG5cdGhhc0NoaWxkKG5vZGUpIHtcblx0XHRyZXR1cm4gdGhpc1t0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmhhcyhcblx0XHRcdHZhbGlkYXRlSW5zdGFuY2Uobm9kZSwgTm9kZSksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2luY2UgMS4yOC4wXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdGNvbnN0IHBhcnRzID0gW107XG5cdFx0aWYgKHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF0pIHtcblx0XHRcdGxldCBsYWJlbCA9IHRoaXNbaW50ZXJuYWxWYWx1ZVN5bWJvbF07XG5cdFx0XHRpZiAoIWlzUHJpbWl0aXZlKGxhYmVsKSlcblx0XHRcdFx0bGFiZWwgPSBKU09OLnN0cmluZ2lmeSh0aGlzW2ludGVybmFsVmFsdWVTeW1ib2xdKTtcblxuXHRcdFx0cGFydHMucHVzaChsYWJlbCk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLmhhc0NoaWxkTm9kZXMoKSkge1xuXHRcdFx0cmV0dXJuIHBhcnRzLmpvaW4oXCJcXG5cIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY291bnQgPSB0aGlzLmNoaWxkTm9kZXMubGVuZ3RoO1xuXHRcdGxldCBjb3VudGVyID0gMDtcblxuXHRcdGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLmNoaWxkTm9kZXMpIHtcblx0XHRcdGNvdW50ZXIrKztcblx0XHRcdGNvbnN0IHByZWZpeCA9IChjb3VudCA9PT0gY291bnRlciA/IFwiXHUyNTE0XCIgOiBcIlx1MjUxQ1wiKS5wYWRTdGFydChcblx0XHRcdFx0MiAqIG5vZGUubGV2ZWwsXG5cdFx0XHRcdFwiIHxcIixcblx0XHRcdCk7XG5cdFx0XHRwYXJ0cy5wdXNoKHByZWZpeCArIG5vZGUudG9TdHJpbmcoKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHBhcnRzLmpvaW4oXCJcXG5cIik7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiBAcGFyYW0ge2ludH0gb3BlcmFuZFxuICogQHBhcmFtIHtTZXR9IHZpc2l0ZWROb2Rlc1xuICogQHJldHVybiB7c2V0Q2hpbGRMZXZlbEFuZFBhcmVudH1cbiAqL1xuZnVuY3Rpb24gc2V0Q2hpbGRMZXZlbEFuZFBhcmVudChub2RlLCBvcGVyYW5kLCB2aXNpdGVkTm9kZXMpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0aWYgKHZpc2l0ZWROb2Rlcy5oYXMobm9kZSkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcInRoZSBub2RlIGhhcyBhbHJlYWR5IGJlZW4gdmlzaXRlZCBhbmQgY2Fubm90IGJlIHRyYXZlcnNlZCBhZ2FpblwiLFxuXHRcdCk7XG5cdH1cblxuXHR2aXNpdGVkTm9kZXMuYWRkKG5vZGUpO1xuXG5cdGlmIChub2RlICE9PSB0aGlzKSB7XG5cdFx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5wYXJlbnQgPSB0aGlzO1xuXHR9XG5cblx0bm9kZVt0cmVlU3RydWN0dXJlU3ltYm9sXS5jaGlsZE5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG5cdFx0Y2hpbGRbdHJlZVN0cnVjdHVyZVN5bWJvbF0ucGFyZW50ID0gbm9kZTtcblx0XHRjaGlsZFt0cmVlU3RydWN0dXJlU3ltYm9sXS5sZXZlbCA9XG5cdFx0XHRub2RlW3RyZWVTdHJ1Y3R1cmVTeW1ib2xdLmxldmVsICsgb3BlcmFuZDtcblx0XHRzZXRDaGlsZExldmVsQW5kUGFyZW50LmNhbGwoc2VsZiwgY2hpbGQsIG9wZXJhbmQsIHZpc2l0ZWROb2Rlcyk7XG5cdH0pO1xuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpc0FycmF5LCBpc09iamVjdCB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE5vZGUgfSBmcm9tIFwiLi4vdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7IE5vZGVMaXN0IH0gZnJvbSBcIi4uL3R5cGVzL25vZGVsaXN0Lm1qc1wiO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tIFwiLi4vdXRpbC9jbG9uZS5tanNcIjtcbmltcG9ydCB7IGFzc2VtYmxlUGFydHMgfSBmcm9tIFwiLi9idWlsZG1hcC5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuL2V4dGVuZC5tanNcIjtcblxuZXhwb3J0IHsgYnVpbGRUcmVlIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IHBhcmVudFN5bWJvbCA9IFN5bWJvbChcInBhcmVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgcm9vdFN5bWJvbCA9IFN5bWJvbChcInJvb3RcIik7XG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gYnVpbGRUcmVlT3B0aW9uc1xuICogQHByb3BlcnR5IHthcnJheX0gb3B0aW9ucy5yb290UmVmZXJlbmNlcz1bbnVsbCwgdW5kZWZpbmVkXSBkZWZpbmVzIHRoZSB2YWx1ZXMgZm9yIGVsZW1lbnRzIHdpdGhvdXQgcGFyZW50c1xuICogQHByb3BlcnR5IHtNb25zdGVyLkRhdGF+ZXhhbXBsZUZpbHRlckNhbGxiYWNrfSBvcHRpb25zLmZpbHRlciBmaWx0ZXJpbmcgb2YgdGhlIHZhbHVlc1xuICovXG5cbi8qKlxuICogQ3JlYXRlcyBhIHRyZWUgc3RydWN0dXJlIGZyb20gYSBnaXZlbiBzdWJqZWN0IHVzaW5nIGEgc2VsZWN0b3IgYW5kIHNwZWNpZmllZCBJRCBhbmQgcGFyZW50IElEIGtleXMuXG4gKlxuICogVGhlIGJ1aWxkVHJlZSBmdW5jdGlvbiBpcyBhIHBvd2VyZnVsIHRvb2wgZm9yIGNyZWF0aW5nIHRyZWUtbGlrZSBkYXRhIHN0cnVjdHVyZXMgZnJvbSBwbGFpbiBKYXZhU2NyaXB0XG4gKiBvYmplY3RzLiBJdCB0YWtlcyBpbiBmb3VyIHJlcXVpcmVkIHBhcmFtZXRlcnM6IHRoZSBzdWJqZWN0IG9iamVjdCB0aGF0IHlvdSB3YW50IHRvIHR1cm4gaW50byBhIHRyZWUsIGFcbiAqIHNlbGVjdG9yIHRoYXQgaWRlbnRpZmllcyB3aGljaCBwYXJ0cyBvZiB0aGUgc3ViamVjdCB0byB1c2Ugd2hlbiBidWlsZGluZyB0aGUgdHJlZSwgYW5kIHR3byBrZXlzXG4gKiAoaWRLZXkgYW5kIHBhcmVudElES2V5KSB0aGF0IHNwZWNpZnkgd2hpY2ggcHJvcGVydGllcyBpbiB0aGUgc3ViamVjdCByZXByZXNlbnQgdGhlIHVuaXF1ZSBpZGVudGlmaWVyc1xuICogYW5kIHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXBzIGJldHdlZW4gbm9kZXMgaW4gdGhlIHRyZWUuXG4gKlxuICogT3B0aW9uYWxseSwgeW91IGNhbiBhbHNvIHBhc3MgaW4gYW4gb3B0aW9ucyBvYmplY3QgdG8gZnVydGhlciBjb25maWd1cmUgdGhlIGJlaGF2aW9yIG9mIHRoZSBmdW5jdGlvbixcbiAqIHN1Y2ggYXMgc3BlY2lmeWluZyB3aGljaCB2YWx1ZXMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgcm9vdHMgb2YgdGhlIHRyZWUsIG9yIHByb3ZpZGluZyBhIGN1c3RvbSBmaWx0ZXJcbiAqIGZ1bmN0aW9uIHRvIG9ubHkgaW5jbHVkZSBjZXJ0YWluIG5vZGVzIGluIHRoZSBmaW5hbCBvdXRwdXQuXG4gKlxuICogVGhlIGJ1aWxkVHJlZSBmdW5jdGlvbiB3b3JrcyBieSBmaXJzdCB1c2luZyB0aGUgYXNzZW1ibGVQYXJ0cyBoZWxwZXIgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUgcmVsZXZhbnRcbiAqIHBhcnRzIG9mIHRoZSBzdWJqZWN0IGJhc2VkIG9uIHRoZSBzZWxlY3RvciwgYW5kIHRoZW4gaXRlcmF0ZXMgb3ZlciB0aGUgcmVzdWx0aW5nIG1hcCB0byBjcmVhdGUgTm9kZVxuICogb2JqZWN0cyBhbmQgb3JnYW5pemUgdGhlbSBpbnRvIHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXBzIGJhc2VkIG9uIHRoZSB2YWx1ZXMgb2YgdGhlIGlkS2V5IGFuZCBwYXJlbnRJREtleSBwcm9wZXJ0aWVzLlxuICpcbiAqIFRoZSByZXN1bHRpbmcgTm9kZUxpc3QgcmVwcmVzZW50cyB0aGUgdHJlZSBzdHJ1Y3R1cmUsIHdpdGggZWFjaCBOb2RlIG9iamVjdCBjb250YWluaW5nIHRoZSBvcmlnaW5hbFxuICogb2JqZWN0IGRhdGEgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIG1ldGFkYXRhIGFib3V0IGl0cyBwb3NpdGlvbiBpbiB0aGUgdHJlZS4gWW91IGNhbiB0aGVuIHVzZSB0aGUgY2hpbGROb2Rlc1xuICogcHJvcGVydHkgb2YgZWFjaCBOb2RlIHRvIGFjY2VzcyBpdHMgY2hpbGRyZW4sIG9yIHRoZSBwYXJlbnQgcHJvcGVydHkgdG8gYWNjZXNzIGl0cyBwYXJlbnQuXG4gKlxuICogT3ZlcmFsbCwgdGhlIGJ1aWxkVHJlZSBmdW5jdGlvbiBpcyBhIGZsZXhpYmxlIGFuZCBwb3dlcmZ1bCB3YXkgdG8gdHJhbnNmb3JtIGZsYXQgZGF0YSBpbnRvIGhpZXJhcmNoaWNhbFxuICogc3RydWN0dXJlcywgYW5kIGNhbiBiZSBlc3BlY2lhbGx5IHVzZWZ1bCBpbiBzY2VuYXJpb3Mgc3VjaCBhcyBkaXNwbGF5aW5nIGZvbGRlciBzdHJ1Y3R1cmVzIG9yXG4gKiB2aXN1YWxpemluZyBjb21wbGV4IGRhdGEgcmVsYXRpb25zaGlwcy5cbiAqXG4gKiBMZXQncyBzYXkgeW91IGhhdmUgYW4gYXJyYXkgb2YgZGF0YSBvYmplY3RzIHJlcHJlc2VudGluZyBhIGZpbGUgc3lzdGVtIGRpcmVjdG9yeSBzdHJ1Y3R1cmUsIGFuZCB5b3Ugd2FudFxuICogdG8gdHVybiBpdCBpbnRvIGEgdHJlZS1saWtlIHN0cnVjdHVyZSB3aGVyZSBlYWNoIG5vZGUgcmVwcmVzZW50cyBhIGZvbGRlciBvciBmaWxlLCBhbmQgY2hpbGQgbm9kZXNcbiAqIHJlcHJlc2VudCB0aGUgY29udGVudHMgb2YgdGhlIGZvbGRlcjpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBjb25zdCBmaWxlU3lzdGVtID0gW1xuICogICB7IGlkOiAnZm9sZGVyMScsIG5hbWU6ICdGb2xkZXIgMScsIHR5cGU6ICdmb2xkZXInLCBwYXJlbnQ6IG51bGwgfSxcbiAqICAgeyBpZDogJ2ZpbGUxJywgbmFtZTogJ0ZpbGUgMScsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ2ZpbGUyJywgbmFtZTogJ0ZpbGUgMicsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ3N1YmZvbGRlcjEnLCBuYW1lOiAnU3ViZm9sZGVyIDEnLCB0eXBlOiAnZm9sZGVyJywgcGFyZW50OiAnZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ2ZpbGUzJywgbmFtZTogJ0ZpbGUgMycsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ2ZpbGU0JywgbmFtZTogJ0ZpbGUgNCcsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ3N1YmZvbGRlcjInLCBuYW1lOiAnU3ViZm9sZGVyIDInLCB0eXBlOiAnZm9sZGVyJywgcGFyZW50OiAnZm9sZGVyMScgfSxcbiAqICAgeyBpZDogJ2ZpbGU1JywgbmFtZTogJ0ZpbGUgNScsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMicgfSxcbiAqICAgeyBpZDogJ2ZpbGU2JywgbmFtZTogJ0ZpbGUgNicsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMicgfSxcbiAqICAgeyBpZDogJ2ZvbGRlcjInLCBuYW1lOiAnRm9sZGVyIDInLCB0eXBlOiAnZm9sZGVyJywgcGFyZW50OiBudWxsIH0sXG4gKiAgIHsgaWQ6ICdmaWxlNycsIG5hbWU6ICdGaWxlIDcnLCB0eXBlOiAnZmlsZScsIHBhcmVudDogJ2ZvbGRlcjInIH0sXG4gKiAgIHsgaWQ6ICdmaWxlOCcsIG5hbWU6ICdGaWxlIDgnLCB0eXBlOiAnZmlsZScsIHBhcmVudDogJ2ZvbGRlcjInIH0sXG4gKiAgIHsgaWQ6ICdzdWJmb2xkZXIzJywgbmFtZTogJ1N1YmZvbGRlciAzJywgdHlwZTogJ2ZvbGRlcicsIHBhcmVudDogJ2ZvbGRlcjInIH0sXG4gKiAgIHsgaWQ6ICdmaWxlOScsIG5hbWU6ICdGaWxlIDknLCB0eXBlOiAnZmlsZScsIHBhcmVudDogJ3N1YmZvbGRlcjMnIH0sXG4gKiAgIHsgaWQ6ICdmaWxlMTAnLCBuYW1lOiAnRmlsZSAxMCcsIHR5cGU6ICdmaWxlJywgcGFyZW50OiAnc3ViZm9sZGVyMycgfSxcbiAqIF07XG4gKlxuICogY29uc3QgdHJlZSA9IGJ1aWxkVHJlZShmaWxlU3lzdGVtLCAnaWQnLCAnaWQnLCAncGFyZW50JywgeyByb290UmVmZXJlbmNlczogW251bGxdIH0pO1xuICpcbiAqIGNvbnNvbGUubG9nKHRyZWUudG9TdHJpbmcoKSk7XG4gKiBgYGBcbiAqXG4gKiBUaGUgYnVpbGRUcmVlIGZ1bmN0aW9uIHRha2VzIGluIHRoZSBhcnJheSBvZiBkYXRhIG9iamVjdHMsIGFzIHdlbGwgYXMgc29tZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3BlY2lmeWluZ1xuICogdGhlIGtleXMgdG8gdXNlIGZvciBpZGVudGlmeWluZyBub2RlcyBhbmQgdGhlaXIgcGFyZW50LWNoaWxkIHJlbGF0aW9uc2hpcHMuIEluIHRoaXMgZXhhbXBsZSwgd2UgdXNlIHRoZSBpZFxuICoga2V5IHRvIGlkZW50aWZ5IG5vZGVzLCBhbmQgdGhlIHBhcmVudCBrZXkgdG8gc3BlY2lmeSB0aGUgcGFyZW50IG9mIGVhY2ggbm9kZS5cbiAqXG4gKiBUaGUgcmVzdWx0aW5nIHRyZWUgb2JqZWN0IGlzIGEgbmVzdGVkIHRyZWUgc3RydWN0dXJlLCB3aGVyZSBlYWNoIG5vZGUgaXMgYW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIGZpbGUgb3JcbiAqIGZvbGRlciwgYW5kIGhhcyBjaGlsZCBub2RlcyByZXByZXNlbnRpbmcgaXRzIGNvbnRlbnRzLiBUaGUgdG9TdHJpbmcgbWV0aG9kIG9mIHRoZSB0cmVlIG9iamVjdFxuICogY2FuIGJlIHVzZWQgdG8gcHJpbnQgb3V0IHRoZSB0cmVlIGluIGEgcmVhZGFibGUgZm9ybWF0OlxuICpcbiAqIGBgYG1hcmtkb3duXG4gKiAtIEZvbGRlciAxXG4gKiAgIC0gRmlsZSAxXG4gKiAgIC0gRmlsZSAyXG4gKiAgIC0gU3ViZm9sZGVyIDFcbiAqICAgICAtIEZpbGUgM1xuICogICAgIC0gRmlsZSA0XG4gKiAgIC0gU3ViZm9sZGVyIDJcbiAqICAgICAtIEZpbGUgNVxuICogICAgIC0gRmlsZSA2XG4gKiAtIEZvbGRlciAyXG4gKiAgIC0gRmlsZSA3XG4gKiAgIC0gRmlsZSA4XG4gKiAgIC0gU3ViZm9sZGVyIDNcbiAqICAgICAtIEZpbGUgOVxuICogICAgIC0gRmlsZSAxMFxuICogYGBgXG4gKlxuICogQG1lbWJlcm9mIE1vbnN0ZXIuRGF0YVxuICpcbiAqIEBwYXJhbSB7Kn0gc3ViamVjdCAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYnVpbGQgdGhlIHRyZWUgZnJvbS5cbiAqIEBwYXJhbSB7c3RyaW5nfE1vbnN0ZXIuRGF0YX5leGFtcGxlU2VsZWN0b3JDYWxsYmFja30gc2VsZWN0b3IgLSBFaXRoZXIgYSBzdHJpbmcgdG8gc3BlY2lmeSBhIHByb3BlcnR5IG9mIGVhY2ggb2JqZWN0IHRvIHVzZSBhcyBhIHNlbGVjdG9yLCBvciBhIHNlbGVjdG9yIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgbWFwIG9mIG9iamVjdHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gaWRLZXkgLSBUaGUgcHJvcGVydHkga2V5IHRvIHVzZSBhcyB0aGUgdW5pcXVlIElEIG9mIGVhY2ggbm9kZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRJREtleSAtIFRoZSBwcm9wZXJ0eSBrZXkgdG8gdXNlIGFzIHRoZSBwYXJlbnQgSUQgb2YgZWFjaCBub2RlLlxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIEFkZGl0aW9uYWwgb3B0aW9ucyB0byBtb2RpZnkgdGhlIGZ1bmN0aW9uIGJlaGF2aW9yLlxuICogQHBhcmFtIHtBcnJheTwqPn0gW29wdGlvbnMucm9vdFJlZmVyZW5jZXM9W251bGwsIHVuZGVmaW5lZF1dIC0gQW4gYXJyYXkgb2YgdmFsdWVzIHRvIHRyZWF0IGFzIHJvb3QgcmVmZXJlbmNlcyB3aGVuIGNyZWF0aW5nIHRoZSB0cmVlLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gW29wdGlvbnMuZmlsdGVyXSAtIEEgZmlsdGVyIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggbm9kZS5cbiAqXG4gKiBAcmV0dXJuIHsqfSBUaGUgcmVzdWx0aW5nIHRyZWUgc3RydWN0dXJlIGFzIGEgTm9kZUxpc3QuXG4gKlxuICogQHRocm93cyB7VHlwZUVycm9yfSBzZWxlY3RvciBpcyBuZWl0aGVyIGEgc3RyaW5nIG5vciBhIGZ1bmN0aW9uLlxuICogQHRocm93cyB7VHlwZUVycm9yfSB0aGUgc2VsZWN0b3IgY2FsbGJhY2sgbXVzdCByZXR1cm4gYSBtYXAuXG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9iamVjdCBoYXMgbm8gdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgaWQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKlxuICogQHNpbmNlIDEuMjYuMFxuICovXG5mdW5jdGlvbiBidWlsZFRyZWUoc3ViamVjdCwgc2VsZWN0b3IsIGlkS2V5LCBwYXJlbnRJREtleSwgb3B0aW9ucykge1xuXHRjb25zdCBub2RlcyA9IG5ldyBNYXAoKTtcblxuXHRjb25zdCBtYXhEZXB0aCA9IDEwMDtcblxuXHRpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB7XG5cdFx0b3B0aW9ucyA9IHt9O1xuXHR9XG5cblx0b3B0aW9ucyA9IGV4dGVuZChcblx0XHR7fSxcblx0XHR7XG5cdFx0XHRyb290UmVmZXJlbmNlczogW251bGwsIHVuZGVmaW5lZF0sXG5cdFx0XHRmaWx0ZXI6IHVuZGVmaW5lZCxcblx0XHR9LFxuXHRcdG9wdGlvbnMsXG5cdCk7XG5cblx0Y29uc3QgZmlsdGVyID0gb3B0aW9ucz8uZmlsdGVyO1xuXHRsZXQgcm9vdFJlZmVyZW5jZXMgPSBvcHRpb25zLnJvb3RSZWZlcmVuY2VzO1xuXHRpZiAoIWlzQXJyYXkocm9vdFJlZmVyZW5jZXMpKSB7XG5cdFx0cm9vdFJlZmVyZW5jZXMgPSBbcm9vdFJlZmVyZW5jZXNdO1xuXHR9XG5cblx0Y29uc3QgY2hpbGRNYXAgPSBhc3NlbWJsZVBhcnRzKHN1YmplY3QsIHNlbGVjdG9yLCBmaWx0ZXIsIGZ1bmN0aW9uIChvLCBrLCBtKSB7XG5cdFx0Y29uc3Qga2V5ID0gbz8uW2lkS2V5XTtcblx0XHRsZXQgcmVmID0gbz8uW3BhcmVudElES2V5XTtcblx0XHRpZiAocm9vdFJlZmVyZW5jZXMuaW5kZXhPZihyZWYpICE9PSAtMSkgcmVmID0gcm9vdFN5bWJvbDtcblxuXHRcdGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIG9iamVjdCBoYXMgbm8gdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgaWRcIik7XG5cdFx0fVxuXG5cdFx0b1twYXJlbnRTeW1ib2xdID0gcmVmO1xuXG5cdFx0Y29uc3Qgbm9kZSA9IG5ldyBOb2RlKG8pO1xuXHRcdHRoaXMuaGFzKHJlZilcblx0XHRcdD8gdGhpcy5nZXQocmVmKS5hZGQobm9kZSlcblx0XHRcdDogdGhpcy5zZXQocmVmLCBuZXcgTm9kZUxpc3QoKS5hZGQobm9kZSkpO1xuXHRcdG5vZGVzLnNldChrZXksIG5vZGUpO1xuXHR9KTtcblxuXHRub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0Y29uc3QgaWQgPSBub2RlPy5bXCJ2YWx1ZVwiXT8uW2lkS2V5XTtcblxuXHRcdGlmIChpZCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgb2JqZWN0IGhhcyBubyB2YWx1ZSBmb3IgdGhlIHNwZWNpZmllZCBpZFwiKTtcblx0XHR9XG5cblx0XHRpZiAoY2hpbGRNYXAuaGFzKGlkKSkge1xuXHRcdFx0bm9kZS5jaGlsZE5vZGVzID0gY2hpbGRNYXAuZ2V0KGlkKTtcblx0XHRcdGNoaWxkTWFwLmRlbGV0ZShpZCk7XG5cdFx0fVxuXHR9KTtcblxuXHRjb25zdCBsaXN0ID0gbmV3IE5vZGVMaXN0KCk7XG5cblx0Y2hpbGRNYXAuZm9yRWFjaCgocykgPT4ge1xuXHRcdGlmIChzIGluc3RhbmNlb2YgU2V0KSB7XG5cdFx0XHRzLmZvckVhY2goKG4pID0+IHtcblx0XHRcdFx0bGlzdC5hZGQobik7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBsaXN0O1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc0luc3RhbmNlIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSBcIi4vbm9kZS5tanNcIjtcbmltcG9ydCB7IE5vZGVMaXN0IH0gZnJvbSBcIi4vbm9kZWxpc3QubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4vdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IE5vZGVSZWN1cnNpdmVJdGVyYXRvciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpc05vZGVMaXN0U3ltYm9sID0gU3ltYm9sKFwiaXNOb2RlTGlzdFwiKTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgcmVjdXJzaXZlIGl0ZXJhdG9yIGZvciB0cmF2ZXJzaW5nIG5vZGVzIGluIGEgRE9NIHRyZWUuXG4gKlxuICogQHNpbmNlIDEuMjYuMFxuICogQHN1bW1hcnkgQW4gaXRlcmF0b3IgdG8gcnVuIHJlY3Vyc2l2ZWx5IHRocm91Z2ggYSB0cmVlIG9mIG5vZGVzXG4gKiBAZXh0ZW5kcyBCYXNlXG4gKi9cbmNsYXNzIE5vZGVSZWN1cnNpdmVJdGVyYXRvciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogQHBhcmFtIG5vZGVcblx0ICovXG5cdGNvbnN0cnVjdG9yKG5vZGUpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0dGhpc1tpc05vZGVMaXN0U3ltYm9sXSA9IGZhbHNlO1xuXG5cdFx0Ly8gaXRlcmF0b3IgaXMgYSBOb2RlTGlzdFxuXHRcdGlmIChpc0luc3RhbmNlKG5vZGUsIE5vZGVMaXN0KSkge1xuXHRcdFx0Y29uc3QgY2hpbGRyZW4gPSBub2RlO1xuXHRcdFx0Y29uc3QgbiA9IG5ldyBOb2RlKCk7XG5cdFx0XHRuLmNoaWxkTm9kZXMgPSBjaGlsZHJlbjtcblx0XHRcdHRoaXNbaXNOb2RlTGlzdFN5bWJvbF0gPSB0cnVlO1xuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSBuO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gdmFsaWRhdGVJbnN0YW5jZShub2RlLCBOb2RlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09wZXJhdG9ycy95aWVsZFxuXHQgKi9cblx0W1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiogKCkge1xuXHRcdC8qKlxuXHRcdCAqIFRoZSBlbmQgb2YgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBpcyByZWFjaGVkLiBJbiB0aGlzIGNhc2UsIGV4ZWN1dGlvbiBvZiB0aGUgZ2VuZXJhdG9yXG5cdFx0ICogZW5kcyBhbmQgYW4gSXRlcmF0b3JSZXN1bHQgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlciBpbiB3aGljaCB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZCBkb25lIGlzIHRydWUuXG5cdFx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PcGVyYXRvcnMveWllbGRcblx0XHQgKi9cblx0XHRpZiAodGhpc1tpbnRlcm5hbFN5bWJvbF0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGl0ZXJhdG9yIGlzIGEgbm9kZWxpc3QgYW5kIHRoZSBtYWluIG5vZGUgaXMgb25seSBhIHBsYWNlaG9sZGVyXG5cdFx0aWYgKHRoaXNbaXNOb2RlTGlzdFN5bWJvbF0gIT09IHRydWUpIHtcblx0XHRcdHlpZWxkIHRoaXNbaW50ZXJuYWxTeW1ib2xdO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzW2ludGVybmFsU3ltYm9sXS5oYXNDaGlsZE5vZGVzKCkpIHtcblx0XHRcdGNvbnN0IGNoaWxkTm9kZXMgPSB0aGlzW2ludGVybmFsU3ltYm9sXS5jaGlsZE5vZGVzO1xuXG5cdFx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgY2hpbGROb2Rlcykge1xuXHRcdFx0XHR5aWVsZCogbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihub2RlKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG5cdCAqIEByZXR1cm4ge05vZGVSZWN1cnNpdmVJdGVyYXRvcn1cblx0ICovXG5cdGZvckVhY2goY2FsbGJhY2spIHtcblx0XHRmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcykge1xuXHRcdFx0Y2FsbGJhY2sobm9kZSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCAyMDI0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqL1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9FUlJPUk1FU1NBR0UgfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgVHJlZVNlbGVjdFN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFRyZWVTZWxlY3RTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0VHJlZVNlbGVjdFN0eWxlU2hlZXQuaW5zZXJ0UnVsZShcblx0XHRgXG5AbGF5ZXIgdHJlZXNlbGVjdCB7IFxuW2RhdGEtbW9uc3Rlci1yb2xlPWJhZGdlXXtkaXNwbGF5OmlubGluZS1mbGV4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25de2Rpc3BsYXk6ZmxleH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItc3RhdGU9b3Blbl1bZGF0YS1tb25zdGVyLWhhcy1jaGlsZHJlbj10cnVlXSBbZGF0YS1tb25zdGVyLXJvbGU9Zm9sZGVyLWhhbmRsZXJde2NvbnRlbnQ6dXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7IHV0ZjgsIDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB3aWR0aD1cXFwiMTZcXFwiIGhlaWdodD1cXFwiMTZcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIj48cGF0aCBkPVxcXCJNMi41IDBjLS4xNjYgMC0uMzMuMDE2LS40ODcuMDQ4bC4xOTQuOThBMS41MSAxLjUxIDAgMCAxIDIuNSAxaC40NThWMEgyLjV6bTIuMjkyIDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTZ2MWguOTE2VjB6bTEuODM0IDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTd2MWguOTE3VjB6TTEzLjUgMGgtLjQ1OHYxaC40NThjLjEgMCAuMTk5LjAxLjI5My4wMjlsLjE5NC0uOTgxQTIuNTEgMi41MSAwIDAgMCAxMy41IDB6bTIuMDc5IDEuMTFhMi41MTEgMi41MTEgMCAwIDAtLjY5LS42ODlsLS41NTYuODMxYy4xNjQuMTEuMzA1LjI1MS40MTUuNDE1bC44My0uNTU2ek0xLjExLjQyMWEyLjUxMSAyLjUxMSAwIDAgMC0uNjg5LjY5bC44MzEuNTU2Yy4xMS0uMTY0LjI1MS0uMzA1LjQxNS0uNDE1TDEuMTEuNDIyek0xNiAyLjVjMC0uMTY2LS4wMTYtLjMzLS4wNDgtLjQ4N2wtLjk4LjE5NGMuMDE4LjA5NC4wMjguMTkyLjAyOC4yOTN2LjQ1OGgxVjIuNXpNLjA0OCAyLjAxM0EyLjUxIDIuNTEgMCAwIDAgMCAyLjV2LjQ1OGgxVjIuNWMwLS4xLjAxLS4xOTkuMDI5LS4yOTNsLS45ODEtLjE5NHpNMCAzLjg3NXYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6TTAgNS43MDh2LjkxN2gxdi0uOTE3SDB6bTE2IC45MTd2LS45MTdoLTF2LjkxN2gxek0wIDcuNTQydi45MTZoMXYtLjkxNkgwem0xNSAuOTE2aDF2LS45MTZoLTF2LjkxNnpNMCA5LjM3NXYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6bS0xNiAuOTE2di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXptLTE2IC45MTd2LjQ1OGMwIC4xNjYuMDE2LjMzLjA0OC40ODdsLjk4LS4xOTRBMS41MSAxLjUxIDAgMCAxIDEgMTMuNXYtLjQ1OEgwem0xNiAuNDU4di0uNDU4aC0xdi40NThjMCAuMS0uMDEuMTk5LS4wMjkuMjkzbC45ODEuMTk0Yy4wMzItLjE1OC4wNDgtLjMyLjA0OC0uNDg3ek0uNDIxIDE0Ljg5Yy4xODMuMjcyLjQxNy41MDYuNjkuNjg5bC41NTYtLjgzMWExLjUxIDEuNTEgMCAwIDEtLjQxNS0uNDE1bC0uODMuNTU2em0xNC40NjkuNjg5Yy4yNzItLjE4My41MDYtLjQxNy42ODktLjY5bC0uODMxLS41NTZjLS4xMS4xNjQtLjI1MS4zMDUtLjQxNS40MTVsLjU1Ni44M3ptLTEyLjg3Ny4zNzNjLjE1OC4wMzIuMzIuMDQ4LjQ4Ny4wNDhoLjQ1OHYtMUgyLjVjLS4xIDAtLjE5OS0uMDEtLjI5My0uMDI5bC0uMTk0Ljk4MXpNMTMuNSAxNmMuMTY2IDAgLjMzLS4wMTYuNDg3LS4wNDhsLS4xOTQtLjk4QTEuNTEgMS41MSAwIDAgMSAxMy41IDE1aC0uNDU4djFoLjQ1OHptLTkuNjI1IDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzMyAwaC45MTd2LTFoLS45MTd2MXptMS44MzQgMGguOTE2di0xaC0uOTE2djF6bTEuODMzIDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzMyAwaC45MTd2LTFoLS45MTd2MXpNNC41IDcuNWEuNS41IDAgMCAwIDAgMWg3YS41LjUgMCAwIDAgMC0xaC03elxcXCIvPjwvc3ZnPicpO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEzcHg7bWFyZ2luLXJpZ2h0OjhweDt3aWR0aDoxM3B4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1zdGF0ZT1jbG9zZV1bZGF0YS1tb25zdGVyLWhhcy1jaGlsZHJlbj10cnVlXSBbZGF0YS1tb25zdGVyLXJvbGU9Zm9sZGVyLWhhbmRsZXJde2NvbnRlbnQ6dXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7IHV0ZjgsIDxzdmcgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiB3aWR0aD1cXFwiMTZcXFwiIGhlaWdodD1cXFwiMTZcXFwiIGZpbGw9XFxcImN1cnJlbnRDb2xvclxcXCIgdmlld0JveD1cXFwiMCAwIDE2IDE2XFxcIj48cGF0aCBkPVxcXCJNMi41IDBjLS4xNjYgMC0uMzMuMDE2LS40ODcuMDQ4bC4xOTQuOThBMS41MSAxLjUxIDAgMCAxIDIuNSAxaC40NThWMEgyLjV6bTIuMjkyIDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTZ2MWguOTE2VjB6bTEuODM0IDBoLS45MTd2MWguOTE3VjB6bTEuODMzIDBoLS45MTd2MWguOTE3VjB6TTEzLjUgMGgtLjQ1OHYxaC40NThjLjEgMCAuMTk5LjAxLjI5My4wMjlsLjE5NC0uOTgxQTIuNTEgMi41MSAwIDAgMCAxMy41IDB6bTIuMDc5IDEuMTFhMi41MTEgMi41MTEgMCAwIDAtLjY5LS42ODlsLS41NTYuODMxYy4xNjQuMTEuMzA1LjI1MS40MTUuNDE1bC44My0uNTU2ek0xLjExLjQyMWEyLjUxMSAyLjUxMSAwIDAgMC0uNjg5LjY5bC44MzEuNTU2Yy4xMS0uMTY0LjI1MS0uMzA1LjQxNS0uNDE1TDEuMTEuNDIyek0xNiAyLjVjMC0uMTY2LS4wMTYtLjMzLS4wNDgtLjQ4N2wtLjk4LjE5NGMuMDE4LjA5NC4wMjguMTkyLjAyOC4yOTN2LjQ1OGgxVjIuNXpNLjA0OCAyLjAxM0EyLjUxIDIuNTEgMCAwIDAgMCAyLjV2LjQ1OGgxVjIuNWMwLS4xLjAxLS4xOTkuMDI5LS4yOTNsLS45ODEtLjE5NHpNMCAzLjg3NXYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6TTAgNS43MDh2LjkxN2gxdi0uOTE3SDB6bTE2IC45MTd2LS45MTdoLTF2LjkxN2gxek0wIDcuNTQydi45MTZoMXYtLjkxNkgwem0xNSAuOTE2aDF2LS45MTZoLTF2LjkxNnpNMCA5LjM3NXYuOTE3aDF2LS45MTdIMHptMTYgLjkxN3YtLjkxN2gtMXYuOTE3aDF6bS0xNiAuOTE2di45MTdoMXYtLjkxN0gwem0xNiAuOTE3di0uOTE3aC0xdi45MTdoMXptLTE2IC45MTd2LjQ1OGMwIC4xNjYuMDE2LjMzLjA0OC40ODdsLjk4LS4xOTRBMS41MSAxLjUxIDAgMCAxIDEgMTMuNXYtLjQ1OEgwem0xNiAuNDU4di0uNDU4aC0xdi40NThjMCAuMS0uMDEuMTk5LS4wMjkuMjkzbC45ODEuMTk0Yy4wMzItLjE1OC4wNDgtLjMyLjA0OC0uNDg3ek0uNDIxIDE0Ljg5Yy4xODMuMjcyLjQxNy41MDYuNjkuNjg5bC41NTYtLjgzMWExLjUxIDEuNTEgMCAwIDEtLjQxNS0uNDE1bC0uODMuNTU2em0xNC40NjkuNjg5Yy4yNzItLjE4My41MDYtLjQxNy42ODktLjY5bC0uODMxLS41NTZjLS4xMS4xNjQtLjI1MS4zMDUtLjQxNS40MTVsLjU1Ni44M3ptLTEyLjg3Ny4zNzNjLjE1OC4wMzIuMzIuMDQ4LjQ4Ny4wNDhoLjQ1OHYtMUgyLjVjLS4xIDAtLjE5OS0uMDEtLjI5My0uMDI5bC0uMTk0Ljk4MXpNMTMuNSAxNmMuMTY2IDAgLjMzLS4wMTYuNDg3LS4wNDhsLS4xOTQtLjk4QTEuNTEgMS41MSAwIDAgMSAxMy41IDE1aC0uNDU4djFoLjQ1OHptLTkuNjI1IDBoLjkxN3YtMWgtLjkxN3Yxem0xLjgzMyAwaC45MTd2LTFoLS45MTd2MXptMS44MzQtMXYxaC45MTZ2LTFoLS45MTZ6bTEuODMzIDFoLjkxN3YtMWgtLjkxN3Yxem0xLjgzMyAwaC45MTd2LTFoLS45MTd2MXpNOC41IDQuNWEuNS41IDAgMCAwLTEgMHYzaC0zYS41LjUgMCAwIDAgMCAxaDN2M2EuNS41IDAgMCAwIDEgMHYtM2gzYS41LjUgMCAwIDAgMC0xaC0zdi0zelxcXCIvPjwvc3ZnPicpO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEzcHg7bWFyZ2luLXJpZ2h0OjhweDt3aWR0aDoxM3B4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci12aXNpYmlsaXR5PWhpZGRlbl17ZGlzcGxheTpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci12aXNpYmlsaXR5PXZpc2libGVde2Rpc3BsYXk6ZmxleH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaGFzLWNoaWxkcmVuPWZhbHNlXSBbZGF0YS1tb25zdGVyLXJvbGU9Zm9sZGVyLWhhbmRsZXJde2NvbnRlbnQ6XFxcIiBcXFwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEzcHg7bWFyZ2luLXJpZ2h0OjhweDt3aWR0aDoxM3B4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjBcXFwiXXtkaXNwbGF5OmZsZXg7bWFyZ2luOjB9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiMVxcXCJde21hcmdpbjowIDAgMCAyMHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjJcXFwiXXttYXJnaW46MCAwIDAgNDBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaW50ZW5kPVxcXCIzXFxcIl17bWFyZ2luOjAgMCAwIDYwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiNFxcXCJde21hcmdpbjowIDAgMCA4MHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjVcXFwiXXttYXJnaW46MCAwIDAgMTAwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWludGVuZD1cXFwiNlxcXCJde21hcmdpbjowIDAgMCAxMTBweH1bZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uXVtkYXRhLW1vbnN0ZXItaW50ZW5kPVxcXCI3XFxcIl17bWFyZ2luOjAgMCAwIDEyMHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dW2RhdGEtbW9uc3Rlci1pbnRlbmQ9XFxcIjhcXFwiXXttYXJnaW46MCAwIDAgMTMwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl1bZGF0YS1tb25zdGVyLWZpbHRlcmVkPXRydWVde2Rpc3BsYXk6bm9uZX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgYnVpbGRUcmVlIH0gZnJvbSBcIi4uLy4uL2RhdGEvYnVpbGR0cmVlLm1qc1wiO1xuaW1wb3J0IHtcblx0YWRkQXR0cmlidXRlVG9rZW4sXG5cdGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUsXG59IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9ST0xFLFxuXHRBVFRSSUJVVEVfVVBEQVRFUl9JTlNFUlRfUkVGRVJFTkNFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7XG5cdGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50LFxuXHRmaXJlQ3VzdG9tRXZlbnQsXG5cdGZpcmVFdmVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBGb3JtYXR0ZXIgfSBmcm9tIFwiLi4vLi4vdGV4dC9mb3JtYXR0ZXIubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE5vZGUgfSBmcm9tIFwiLi4vLi4vdHlwZXMvbm9kZS5tanNcIjtcbmltcG9ydCB7IE5vZGVSZWN1cnNpdmVJdGVyYXRvciB9IGZyb20gXCIuLi8uLi90eXBlcy9ub2RlcmVjdXJzaXZlaXRlcmF0b3IubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0ZPUk1fVVJMLCBBVFRSSUJVVEVfSU5URU5EIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSBcIi4vc2VsZWN0Lm1qc1wiO1xuaW1wb3J0IHsgU2VsZWN0U3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvc2VsZWN0Lm1qc1wiO1xuaW1wb3J0IHsgVHJlZVNlbGVjdFN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L3RyZWUtc2VsZWN0Lm1qc1wiO1xuXG5leHBvcnQgeyBUcmVlU2VsZWN0LCBmb3JtYXRIaWVyYXJjaGljYWxTZWxlY3Rpb24gfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJuYWxOb2Rlc1N5bWJvbCA9IFN5bWJvbChcImludGVybmFsTm9kZXNcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGtleUV2ZW50SGFuZGxlciA9IFN5bWJvbChcImtleUV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBBIHRyZWUgc2VsZWN0IGNvbnRyb2wgaXMgYSBzZWxlY3QgY29udHJvbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHNlbGVjdCBhIHZhbHVlIGZyb20gYSB0cmVlIHN0cnVjdHVyZS5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL3RyZWUtc2VsZWN0XG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS90cmVlLXNlbGVjdC1zaW1wbGVcbiAqXG4gKiBAc2luY2UgMS45LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGJlYXV0aWZ1bCB0cmVlIHNlbGVjdCBjb250cm9sIHdpdGggYSBsb3Qgb2Ygb3B0aW9uc1xuICogQGZpcmVzIG1vbnN0ZXItb3B0aW9ucy1zZXRcbiAqIEBmaXJlcyBtb25zdGVyLXNlbGVjdGVkXG4gKiBAZmlyZXMgbW9uc3Rlci1jaGFuZ2VcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZWRcbiAqL1xuY2xhc3MgVHJlZVNlbGVjdCBleHRlbmRzIFNlbGVjdCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9mb3JtL3RyZWUtc2VsZWN0QEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBleHRlbmRzIFNlbGVjdFxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gbWFwcGluZy5yb290UmVmZXJlbmNlcz1bJzAnLCB1bmRlZmluZWQsIG51bGxdXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXBwaW5nLmlkVGVtcGxhdGU9aWRcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IG1hcHBpbmcucGFyZW50VGVtcGxhdGU9cGFyZW50XG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBtYXBwaW5nLnNlbGVjdGlvblxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZm9ybWF0dGVyXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmb3JtYXR0ZXIuc2VwYXJhdG9yPVwiIC8gXCJcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbihcblx0XHRcdHt9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0XHR7XG5cdFx0XHRcdG1hcHBpbmc6IHtcblx0XHRcdFx0XHRyb290UmVmZXJlbmNlczogW1wiMFwiLCB1bmRlZmluZWQsIG51bGxdLFxuXHRcdFx0XHRcdGlkOiBcImlkXCIsXG5cdFx0XHRcdFx0cGFyZW50OiBcInBhcmVudFwiLFxuXG5cdFx0XHRcdFx0c2VsZWN0b3I6IFwiKlwiLFxuXHRcdFx0XHRcdGxhYmVsVGVtcGxhdGU6IFwiXCIsXG5cdFx0XHRcdFx0dmFsdWVUZW1wbGF0ZTogXCJcIixcblx0XHRcdFx0fSxcblx0XHRcdFx0Zm9ybWF0dGVyOiB7XG5cdFx0XHRcdFx0c2VsZWN0aW9uOiBmb3JtYXRIaWVyYXJjaGljYWxTZWxlY3Rpb24sXG5cdFx0XHRcdFx0c2VwYXJhdG9yOiBcIiAvIFwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cy5jYWxsKHRoaXMpLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLXRyZWUtc2VsZWN0XCI7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtTZWxlY3RTdHlsZVNoZWV0LCBUcmVlU2VsZWN0U3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICogSW1wb3J0IFNlbGVjdCBPcHRpb25zIGZyb20gZGF0YXNldFxuXHQgKiBOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCB0aGUgY29udHJvbCBkZWZhdWx0cy9vcHRpb25zXG5cdCAqXG5cdCAqIEBwYXJhbSB7YXJyYXl8b2JqZWN0fE1hcHxTZXR9IGRhdGFcblx0ICogQHJldHVybiB7U2VsZWN0fVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWFwIGlzIG5vdCBpdGVyYWJsZVxuXHQgKi9cblx0aW1wb3J0T3B0aW9ucyhkYXRhKSB7XG5cdFx0dGhpc1tpbnRlcm5hbE5vZGVzU3ltYm9sXSA9IG5ldyBNYXAoKTtcblxuXHRcdGNvbnN0IG1hcHBpbmdPcHRpb25zID0gdGhpcy5nZXRPcHRpb24oXCJtYXBwaW5nXCIsIHt9KTtcblxuXHRcdGNvbnN0IGZpbHRlciA9IG1hcHBpbmdPcHRpb25zPy5bXCJmaWx0ZXJcIl07XG5cdFx0Y29uc3Qgcm9vdFJlZmVyZW5jZXMgPSBtYXBwaW5nT3B0aW9ucz8uW1wicm9vdFJlZmVyZW5jZXNcIl07XG5cblx0XHRjb25zdCBpZCA9IHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZy5pZFwiLCBcImlkXCIpO1xuXHRcdGNvbnN0IHBhcmVudElEID0gdGhpcy5nZXRPcHRpb24oXCJtYXBwaW5nLnBhcmVudFwiLCBcInBhcmVudFwiKTtcblxuXHRcdGNvbnN0IHNlbGVjdG9yID0gbWFwcGluZ09wdGlvbnM/LltcInNlbGVjdG9yXCJdO1xuXHRcdGNvbnN0IG9wdGlvbnMgPSBbXTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBub2RlcyA9IGJ1aWxkVHJlZShkYXRhLCBzZWxlY3RvciwgaWQsIHBhcmVudElELCB7XG5cdFx0XHRcdGZpbHRlcixcblx0XHRcdFx0cm9vdFJlZmVyZW5jZXMsXG5cdFx0XHR9KTtcblxuXHRcdFx0Zm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG5cdFx0XHRcdGNvbnN0IGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihub2RlKTtcblx0XHRcdFx0Zm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG5cdFx0XHRcdFx0Y29uc3QgZm9ybWF0dGVkVmFsdWVzID0gZm9ybWF0S2V5TGFiZWwuY2FsbCh0aGlzLCBuKTtcblxuXHRcdFx0XHRcdGNvbnN0IGxhYmVsID0gZm9ybWF0dGVkVmFsdWVzLmxhYmVsO1xuXHRcdFx0XHRcdGNvbnN0IHZhbHVlID0gZm9ybWF0dGVkVmFsdWVzLnZhbHVlO1xuXHRcdFx0XHRcdGNvbnN0IGludGVuZCA9IG4ubGV2ZWw7XG5cblx0XHRcdFx0XHRjb25zdCB2aXNpYmlsaXR5ID0gaW50ZW5kID4gMCA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcblx0XHRcdFx0XHRjb25zdCBzdGF0ZSA9IFwiY2xvc2VcIjtcblxuXHRcdFx0XHRcdHRoaXNbaW50ZXJuYWxOb2Rlc1N5bWJvbF0uc2V0KHZhbHVlLCBuKTtcblxuXHRcdFx0XHRcdG9wdGlvbnMucHVzaCh7XG5cdFx0XHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0XHRcdGxhYmVsLFxuXHRcdFx0XHRcdFx0aW50ZW5kLFxuXHRcdFx0XHRcdFx0c3RhdGUsXG5cdFx0XHRcdFx0XHR2aXNpYmlsaXR5LFxuXHRcdFx0XHRcdFx0W1wiaGFzLWNoaWxkcmVuXCJdOiBuLmhhc0NoaWxkTm9kZXMoKSxcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNldE9wdGlvbihcIm9wdGlvbnNcIiwgb3B0aW9ucyk7XG5cblx0XHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItb3B0aW9ucy1zZXRcIiwge1xuXHRcdFx0XHRvcHRpb25zLFxuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZT8ubWVzc2FnZSB8fCBlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtUcmVlU2VsZWN0fVxuXHQgKi9cblx0W2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpIHtcblx0XHRzdXBlclthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGhhbmRsZU9wdGlvbktleWJvYXJkRXZlbnRzKGV2ZW50KSB7XG5cdHN3aXRjaCAoZXZlbnQ/LltcImNvZGVcIl0pIHtcblx0XHRjYXNlIFwiQXJyb3dMZWZ0XCI6XG5cdFx0XHRjbG9zZU9yT3BlbkN1cnJlbnRPcHRpb24uY2FsbCh0aGlzLCBldmVudCwgXCJjbG9zZVwiKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiQXJyb3dSaWdodFwiOlxuXHRcdFx0Y2xvc2VPck9wZW5DdXJyZW50T3B0aW9uLmNhbGwodGhpcywgZXZlbnQsIFwib3BlblwiKTtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRicmVhaztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2V2ZW50fSBldmVudFxuICovXG5mdW5jdGlvbiBjbG9zZU9yT3BlbkN1cnJlbnRPcHRpb24oZXZlbnQsIG1vZGUpIHtcblx0dmFsaWRhdGVJbnN0YW5jZShldmVudCwgRXZlbnQpO1xuXG5cdGlmICh0eXBlb2YgZXZlbnQuY29tcG9zZWRQYXRoICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCBldmVudFwiKTtcblx0fVxuXG5cdGNvbnN0IHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcblx0Y29uc3Qgb3B0aW9uTm9kZSA9IHBhdGguc2hpZnQoKTtcblxuXHRjb25zdCBzdGF0ZSA9IG9wdGlvbk5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLXN0YXRlXCIpO1xuXHRpZiAoc3RhdGUgIT09IG1vZGUpIHtcblx0XHRjb25zdCBoYW5kbGVyID0gb3B0aW9uTm9kZS5xdWVyeVNlbGVjdG9yKFxuXHRcdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9Zm9sZGVyLWhhbmRsZXJdXCIsXG5cdFx0KTtcblx0XHRpZiAoaGFuZGxlciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG5cdFx0XHRmaXJlRXZlbnQoaGFuZGxlciwgXCJjbGlja1wiKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlXG4gKiBAcmV0dXJuIHthcnJheTxsYWJlbCwgdmFsdWU+fVxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZm9ybWF0S2V5TGFiZWwobm9kZSkge1xuXHR2YWxpZGF0ZUluc3RhbmNlKG5vZGUsIE5vZGUpO1xuXG5cdGNvbnN0IHYgPSBub2RlLnZhbHVlO1xuXHRpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGhlIG9iamVjdCBoYXMgbm8gdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgaWRcIik7XG5cdH1cblxuXHRjb25zdCBsYWJlbCA9IG5ldyBGb3JtYXR0ZXIodikuZm9ybWF0KFxuXHRcdHRoaXMuZ2V0T3B0aW9uKFwibWFwcGluZy5sYWJlbFRlbXBsYXRlXCIsIFwiXCIpLFxuXHQpO1xuXG5cdGNvbnN0IHZhbHVlID0gbmV3IEZvcm1hdHRlcih2KS5mb3JtYXQoXG5cdFx0dGhpcy5nZXRPcHRpb24oXCJtYXBwaW5nLnZhbHVlVGVtcGxhdGVcIiwgXCJcIiksXG5cdCk7XG5cblx0cmV0dXJuIHtcblx0XHR2YWx1ZSxcblx0XHRsYWJlbCxcblx0fTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gYnVpbGRUcmVlTGFiZWxzKHZhbHVlKSB7XG5cdGxldCBub2RlID0gdGhpc1tpbnRlcm5hbE5vZGVzU3ltYm9sXS5nZXQodmFsdWUpO1xuXHRpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0bm9kZSA9IHRoaXNbaW50ZXJuYWxOb2Rlc1N5bWJvbF0uZ2V0KHBhcnNlSW50KHZhbHVlKSk7XG5cdH1cblxuXHRjb25zdCBwYXJ0cyA9IFtdO1xuXG5cdGlmIChub2RlIGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdGxldCBwdHIgPSBub2RlO1xuXHRcdHdoaWxlIChwdHIpIHtcblx0XHRcdGNvbnN0IGZvcm1hdHRlZFZhbHVlcyA9IGZvcm1hdEtleUxhYmVsLmNhbGwodGhpcywgcHRyKTtcblx0XHRcdHBhcnRzLnVuc2hpZnQoZm9ybWF0dGVkVmFsdWVzLmxhYmVsKTtcblx0XHRcdHB0ciA9IHB0ci5wYXJlbnQ7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHBhcnRzO1xufVxuXG4vKipcbiAqIFRoaXMgZm9ybWF0dGVyIGNhbiBmb3JtYXQgYSBsYWJlbCBoaWVyYXJjaGljYWxseS5cbiAqIFRoZSBvcHRpb24gYGZvcm1hdHRlci5zZXBhcmF0b3JgIGRldGVybWluZXMgdGhlIHNlcGFyYXRvci5cbiAqXG4gKiBgYGBcbiAqIGEgLyBiIC8gY1xuICogYGBgXG4gKlxuICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgcGFzc2VkIGFzIGFyZ3VtZW50IG9mIHRoZSBvcHRpb24gYGZvcm1hdHRlci5zZWxlY3Rpb246YC5cbiAqXG4gKiBAc2luY2UgMS45LjBcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZm9ybWF0SGllcmFyY2hpY2FsU2VsZWN0aW9uKHZhbHVlKSB7XG5cdHJldHVybiBidWlsZFRyZWVMYWJlbHNcblx0XHQuY2FsbCh0aGlzLCB2YWx1ZSlcblx0XHQuam9pbih0aGlzLmdldE9wdGlvbihcImZvcm1hdHRlci5zZXBhcmF0b3JcIiwgXCIgLyBcIikpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBvcGVuT3B0aW9uRXZlbnRIYW5kbGVyID0gU3ltYm9sKFwib3Blbk9wdGlvbkV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tvcGVuT3B0aW9uRXZlbnRIYW5kbGVyXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRcImZvbGRlci1oYW5kbGVyXCIsXG5cdFx0KTtcblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29udGFpbmVyID0gZmluZENsb3Nlc3RCeUF0dHJpYnV0ZShlbGVtZW50LCBBVFRSSUJVVEVfUk9MRSwgXCJvcHRpb25cIik7XG5cdFx0Y29uc3QgaW5kZXggPSBjb250YWluZXJcblx0XHRcdC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSlcblx0XHRcdC5zcGxpdChcIi1cIilcblx0XHRcdC5wb3AoKTtcblxuXHRcdGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuZ2V0T3B0aW9uKGBvcHRpb25zLiR7aW5kZXh9LnN0YXRlYCk7XG5cblx0XHRjb25zdCBuZXdTdGF0ZSA9IGN1cnJlbnRTdGF0ZSA9PT0gXCJjbG9zZVwiID8gXCJvcGVuXCIgOiBcImNsb3NlXCI7XG5cdFx0dGhpcy5zZXRPcHRpb24oYG9wdGlvbnMuJHtpbmRleH0uc3RhdGVgLCBuZXdTdGF0ZSk7XG5cblx0XHRjb25zdCBuZXdWaXNpYmlsaXR5ID0gbmV3U3RhdGUgPT09IFwib3BlblwiID8gXCJ2aXNpYmxlXCIgOiBcImhpZGRlblwiO1xuXG5cdFx0aWYgKGNvbnRhaW5lci5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0lOVEVORCkpIHtcblx0XHRcdGNvbnN0IGludGVuZCA9IGNvbnRhaW5lci5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0lOVEVORCk7XG5cblx0XHRcdGxldCByZWYgPSBjb250YWluZXIubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRcdFx0Y29uc3QgY2hpbGRJbnRlbmQgPSBwYXJzZUludChpbnRlbmQpICsgMTtcblxuXHRcdFx0Y29uc3QgY21wID0gKGEsIGIpID0+IHtcblx0XHRcdFx0aWYgKG5ld1N0YXRlID09PSBcIm9wZW5cIikge1xuXHRcdFx0XHRcdHJldHVybiBhID09PSBiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGEgPj0gYjtcblx0XHRcdH07XG5cblx0XHRcdHdoaWxlIChcblx0XHRcdFx0cmVmPy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0lOVEVORCkgJiZcblx0XHRcdFx0Y21wKHBhcnNlSW50KHJlZi5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0lOVEVORCkpLCBjaGlsZEludGVuZClcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCByZWZJbmRleCA9IHJlZlxuXHRcdFx0XHRcdC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1VQREFURVJfSU5TRVJUX1JFRkVSRU5DRSlcblx0XHRcdFx0XHQuc3BsaXQoXCItXCIpXG5cdFx0XHRcdFx0LnBvcCgpO1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihgb3B0aW9ucy4ke3JlZkluZGV4fS52aXNpYmlsaXR5YCwgbmV3VmlzaWJpbGl0eSk7XG5cblx0XHRcdFx0aWYgKG5ld1N0YXRlID09PSBcImNsb3NlXCIpIHtcblx0XHRcdFx0XHR0aGlzLnNldE9wdGlvbihgb3B0aW9ucy4ke3JlZkluZGV4fS5zdGF0ZWAsIFwiY2xvc2VcIik7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZWYgPSByZWYubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR0aGlzW2tleUV2ZW50SGFuZGxlcl0gPSAoZXZlbnQpID0+IHtcblx0XHRjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7XG5cdFx0Y29uc3QgZWxlbWVudCA9IHBhdGg/LlswXTtcblxuXHRcdGxldCByb2xlO1xuXG5cdFx0aWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0aWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKSkge1xuXHRcdFx0XHRyb2xlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUpO1xuXHRcdFx0fSBlbHNlIGlmIChlbGVtZW50ID09PSB0aGlzKSB7XG5cdFx0XHRcdHNob3cuY2FsbCh0aGlzKTtcblx0XHRcdFx0Zm9jdXNGaWx0ZXIuY2FsbCh0aGlzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnN0IGUgPSBlbGVtZW50LmNsb3Nlc3QoYFske0FUVFJJQlVURV9ST0xFfV1gKTtcblx0XHRcdFx0aWYgKGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlLmhhc0F0dHJpYnV0ZSgpKSB7XG5cdFx0XHRcdFx0cm9sZSA9IGUuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9ST0xFKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0c3dpdGNoIChyb2xlKSB7XG5cdFx0XHRjYXNlIFwib3B0aW9uLWxhYmVsXCI6XG5cdFx0XHRjYXNlIFwib3B0aW9uLWNvbnRyb2xcIjpcblx0XHRcdGNhc2UgXCJvcHRpb25cIjpcblx0XHRcdFx0aGFuZGxlT3B0aW9uS2V5Ym9hcmRFdmVudHMuY2FsbCh0aGlzLCBldmVudCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fTtcblxuXHR0aGlzLnNoYWRvd1Jvb3QuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpc1trZXlFdmVudEhhbmRsZXJdKTtcblx0dGhpcy5zaGFkb3dSb290LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzW29wZW5PcHRpb25FdmVudEhhbmRsZXJdKTtcbn1cblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBwYXNzIGEgVVJMIHRvIHRoaXMgc2VsZWN0LlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLXNlbGVjdCBkYXRhLW1vbnN0ZXItdXJsPVwiaHR0cHM6Ly9leGFtcGxlLmNvbS9cIj48L21vbnN0ZXItc2VsZWN0PlxuICogYGBgXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkge1xuXHRjb25zdCBvcHRpb25zID0ge307XG5cblx0Y29uc3QgdXJsID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKTtcblx0aWYgKGlzU3RyaW5nKHVybCkpIHtcblx0XHRvcHRpb25zW1widXJsXCJdID0gbmV3IFVSTCh1cmwpLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJvcHRpb25zXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwib3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1pbnRlbmQgcGF0aDpvcHRpb25zLmludGVuZCwgXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1zdGF0ZSBwYXRoOm9wdGlvbnMuc3RhdGUsIFxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItdmlzaWJpbGl0eSBwYXRoOm9wdGlvbnMudmlzaWJpbGl0eSwgXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1maWx0ZXJlZCBwYXRoOm9wdGlvbnMuZmlsdGVyZWQsXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1oYXMtY2hpbGRyZW4gcGF0aDpvcHRpb25zLmhhcy1jaGlsZHJlblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJmb2xkZXItaGFuZGxlclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxsYWJlbCBwYXJ0PVwib3B0aW9uXCIgcm9sZT1cIm9wdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZGF0YS1tb25zdGVyLXJvbGU9XCJvcHRpb24tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cIlxuICAgICAgICAgICAgdHlwZSBwYXRoOnR5cGUsXG4gICAgICAgICAgICByb2xlIHBhdGg6cm9sZSxcbiAgICAgICAgICAgIHZhbHVlIHBhdGg6b3B0aW9ucy52YWx1ZSwgXG4gICAgICAgICAgICBuYW1lIHBhdGg6bmFtZSwgXG4gICAgICAgICAgICBwYXJ0IHBhdGg6dHlwZSB8IHByZWZpeDpvcHRpb24tIHwgc3VmZml4OiBmb3JtXG4gICAgICAgICAgICBcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpvcHRpb25zIHwgaW5kZXg6bGFiZWxcIiBwYXJ0PVwib3B0aW9uLWxhYmVsXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8dGVtcGxhdGUgaWQ9XCJzZWxlY3Rpb25cIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJiYWRnZVwiXG4gICAgICAgICAgICAgICAgIHBhcnQ9XCJiYWRnZVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci12YWx1ZSBwYXRoOnNlbGVjdGlvbiB8IGluZGV4OnZhbHVlLCBcbiAgICAgICAgICAgICAgICAgY2xhc3MgcGF0aDpjbGFzc2VzIHwgaW5kZXg6YmFkZ2UsIFxuICAgICAgICBwYXJ0IHBhdGg6dHlwZSB8IHN1ZmZpeDotb3B0aW9uIHwgcHJlZml4OiBmb3JtLVwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpzZWxlY3Rpb24gfCBpbmRleDpsYWJlbFwiIHBhcnQ9XCJiYWRnZS1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItcm9sZT1cImJhZGdlLWxhYmVsXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwicmVtb3ZlLWJhZGdlXCIgZGF0YS1tb25zdGVyLXNlbGVjdC10aGlzXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6ZmVhdHVyZXMuY2xlYXIgfCA/OjpoaWRkZW4gXCJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwicmVtb3ZlLWJhZGdlXCIgdGFiaW5kZXg9XCItMVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPHNsb3QgY2xhc3M9XCJoaWRkZW5cIj48L3Nsb3Q+XG5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIFxcJHtzZWxlY3RlZH1cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwicG9wcGVyXCIgcGFydD1cInBvcHBlclwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cIm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1maWx0ZXItY29udHJvbFwiIHJvbGU9XCJzZWFyY2hcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcm9sZT1cInNlYXJjaGJveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0PVwicG9wcGVyLWZpbHRlclwiIG5hbWU9XCJwb3BwZXItZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHBhcnQ9XCJjb250ZW50XCIgY2xhc3M9XCJmbGV4XCIgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwib3B0aW9uc1wiIGRhdGEtbW9uc3Rlci1yb2xlPVwib3B0aW9uc1wiIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJvcHRpb25zIHBhdGg6b3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcGFydD1cIm5vLW9wdGlvbnNcIiBkYXRhLW1vbnN0ZXItcm9sZT1cIm5vLW9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOm1lc3NhZ2VzLmVtcHR5T3B0aW9uc1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IHBhcnQ9XCJzdGF0dXMtb3ItcmVtb3ZlLWJhZGdlc1wiIGRhdGEtbW9uc3Rlci1yb2xlPVwic3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIlxuICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5zdGF0dXNPclJlbW92ZUJhZGdlIHwgc3VmZml4OlxcXFwgc3RhdHVzLW9yLXJlbW92ZS1iYWRnZXNcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgYDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFRyZWVTZWxlY3QpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFRvZ2dsZVN3aXRjaFN0eWxlU2hlZXQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge0NTU1N0eWxlU2hlZXR9XG4gKi9cbmNvbnN0IFRvZ2dsZVN3aXRjaFN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRUb2dnbGVTd2l0Y2hTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIHRvZ2dsZXN3aXRjaCB7IFxuOmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWdyYXktMTojZjZmNmY2Oy0tbW9uc3Rlci1jb2xvci1ncmF5LTI6I2UyZTJlMjstLW1vbnN0ZXItY29sb3ItZ3JheS0zOiM4YjhiOGI7LS1tb25zdGVyLWNvbG9yLWdyYXktNDojNmY2ZjZmOy0tbW9uc3Rlci1jb2xvci1ncmF5LTU6IzNlM2UzZTstLW1vbnN0ZXItY29sb3ItZ3JheS02OiMyMjI7LS1tb25zdGVyLWNvbG9yLXJvc2UtMTojZmZmN2Y5Oy0tbW9uc3Rlci1jb2xvci1yb3NlLTI6I2ZmZGNlNTstLW1vbnN0ZXItY29sb3Itcm9zZS0zOiNmZjNiOGQ7LS1tb25zdGVyLWNvbG9yLXJvc2UtNDojZGIwMDcyOy0tbW9uc3Rlci1jb2xvci1yb3NlLTU6IzgwMDA0MDstLW1vbnN0ZXItY29sb3Itcm9zZS02OiM0YzAwMjM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0xOiNmZmY4Zjg7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0yOiNmZmRkZGY7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS0zOiNmZjQyNmM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS00OiNkZTAwNTE7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS01OiM4MjAwMmM7LS1tb25zdGVyLWNvbG9yLXJhc3BiZXJyeS02OiM1MTAwMTg7LS1tb25zdGVyLWNvbG9yLXJlZC0xOiNmZmY4ZjY7LS1tb25zdGVyLWNvbG9yLXJlZC0yOiNmZmRkZDg7LS1tb25zdGVyLWNvbG9yLXJlZC0zOiNmZjQ2NDc7LS1tb25zdGVyLWNvbG9yLXJlZC00OiNlMDAwMmI7LS1tb25zdGVyLWNvbG9yLXJlZC01OiM4MzAwMTQ7LS1tb25zdGVyLWNvbG9yLXJlZC02OiM1MzAwMDM7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xOiNmZmY4ZjU7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yOiNmZmRlZDE7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zOiNmZDRkMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS00OiNjZDNjMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS01OiM3NTIxMDA7LS1tb25zdGVyLWNvbG9yLW9yYW5nZS02OiM0MDE2MDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTE6I2ZmZjhmMzstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMjojZmZkZmM2Oy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0zOiNkNTczMDA7LS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTQ6I2FjNWMwMDstLW1vbnN0ZXItY29sb3ItY2lubmFtb24tNTojNjMzMzAwOy0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi02OiMzNzFkMDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTE6I2ZmZjhlZjstLW1vbnN0ZXItY29sb3ItYW1iZXItMjojZmZlMGIyOy0tbW9uc3Rlci1jb2xvci1hbWJlci0zOiNiOTgzMDA7LS1tb25zdGVyLWNvbG9yLWFtYmVyLTQ6IzkyNjcwMDstLW1vbnN0ZXItY29sb3ItYW1iZXItNTojNTIzODAwOy0tbW9uc3Rlci1jb2xvci1hbWJlci02OiMzMDIxMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0xOiNmZmY5ZTU7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0yOiNmZmU1M2U7LS1tb25zdGVyLWNvbG9yLXllbGxvdy0zOiM5YzhiMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy00OiM3ZDZmMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy01OiM0NjNkMDA7LS1tb25zdGVyLWNvbG9yLXllbGxvdy02OiMyOTIzMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtMTojZjdmZmFjOy0tbW9uc3Rlci1jb2xvci1saW1lLTI6I2Q1ZjIwMDstLW1vbnN0ZXItY29sb3ItbGltZS0zOiM4MTkzMDA7LS1tb25zdGVyLWNvbG9yLWxpbWUtNDojNjc3NjAwOy0tbW9uc3Rlci1jb2xvci1saW1lLTU6IzM5NDEwMDstLW1vbnN0ZXItY29sb3ItbGltZS02OiMyMjI2MDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtMTojZTVmZmMzOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTI6Izk4ZmIwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS0zOiM1YzliMDA7LS1tb25zdGVyLWNvbG9yLWNoYXJ0cmV1c2UtNDojNDk3YzAwOy0tbW9uc3Rlci1jb2xvci1jaGFydHJldXNlLTU6IzI2NDUwMDstLW1vbnN0ZXItY29sb3ItY2hhcnRyZXVzZS02OiMxODI2MDA7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTE6I2UwZmZkOTstLW1vbnN0ZXItY29sb3ItZ3JlZW4tMjojNzJmZjZjOy0tbW9uc3Rlci1jb2xvci1ncmVlbi0zOiMwMGEyMWY7LS1tb25zdGVyLWNvbG9yLWdyZWVuLTQ6IzAwODIxNzstLW1vbnN0ZXItY29sb3ItZ3JlZW4tNTojMDA0OTA4Oy0tbW9uc3Rlci1jb2xvci1ncmVlbi02OiMwNjI4MDA7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtMTojZGNmZmU2Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTI6IzVkZmZhMjstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC0zOiMwMGEwNWE7LS1tb25zdGVyLWNvbG9yLWVtZXJhbGQtNDojMDA4MTQ3Oy0tbW9uc3Rlci1jb2xvci1lbWVyYWxkLTU6IzAwNDgyNTstLW1vbnN0ZXItY29sb3ItZW1lcmFsZC02OiMwMDI4MTI7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtMTojZGFmZmVmOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTI6IzQyZmZjNjstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS0zOiMwMDlmNzg7LS1tb25zdGVyLWNvbG9yLWFxdWFtYXJpbmUtNDojMDA3ZjVmOy0tbW9uc3Rlci1jb2xvci1hcXVhbWFyaW5lLTU6IzAwNDczNDstLW1vbnN0ZXItY29sb3ItYXF1YW1hcmluZS02OiMwMDI4MWI7LS1tb25zdGVyLWNvbG9yLXRlYWwtMTojZDdmZmY3Oy0tbW9uc3Rlci1jb2xvci10ZWFsLTI6IzAwZmZlNDstLW1vbnN0ZXItY29sb3ItdGVhbC0zOiMwMDllOGM7LS1tb25zdGVyLWNvbG9yLXRlYWwtNDojMDA3YzZlOy0tbW9uc3Rlci1jb2xvci10ZWFsLTU6IzAwNDQzYzstLW1vbnN0ZXItY29sb3ItdGVhbC02OiMwMDI3MjI7LS1tb25zdGVyLWNvbG9yLWN5YW4tMTojYzRmZmZlOy0tbW9uc3Rlci1jb2xvci1jeWFuLTI6IzAwZmFmYjstLW1vbnN0ZXItY29sb3ItY3lhbi0zOiMwMDk5OWE7LS1tb25zdGVyLWNvbG9yLWN5YW4tNDojMDA3YTdiOy0tbW9uc3Rlci1jb2xvci1jeWFuLTU6IzAwNDM0NDstLW1vbnN0ZXItY29sb3ItY3lhbi02OiMwMDI1MjU7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0xOiNkYWZhZmY7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0yOiM4ZGYwZmY7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci0zOiMwMDk4YTk7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci00OiMwMDc5ODc7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci01OiMwMDQwNDg7LS1tb25zdGVyLWNvbG9yLXBvd2Rlci02OiMwMDIyMjc7LS1tb25zdGVyLWNvbG9yLXNreS0xOiNlM2Y3ZmY7LS1tb25zdGVyLWNvbG9yLXNreS0yOiNhZWU5ZmY7LS1tb25zdGVyLWNvbG9yLXNreS0zOiMwMDk0YjQ7LS1tb25zdGVyLWNvbG9yLXNreS00OiMwMDc1OTA7LS1tb25zdGVyLWNvbG9yLXNreS01OiMwMDQwNGY7LS1tb25zdGVyLWNvbG9yLXNreS02OiMwMDFmMjg7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTE6I2U4ZjZmZjstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tMjojYjllM2ZmOy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi0zOiMwMDkyYzU7LS1tb25zdGVyLWNvbG9yLWNlcnVsZWFuLTQ6IzAwNzQ5ZDstLW1vbnN0ZXItY29sb3ItY2VydWxlYW4tNTojMDAzYzU0Oy0tbW9uc3Rlci1jb2xvci1jZXJ1bGVhbi02OiMwMDFkMmE7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTE6I2U4ZjJmZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtMjojYzZlMGZmOy0tbW9uc3Rlci1jb2xvci1henVyZS0zOiMwMDhmZGI7LS1tb25zdGVyLWNvbG9yLWF6dXJlLTQ6IzAwNzFhZjstLW1vbnN0ZXItY29sb3ItYXp1cmUtNTojMDAzYjVlOy0tbW9uc3Rlci1jb2xvci1henVyZS02OiMwMDFjMzA7LS1tb25zdGVyLWNvbG9yLWJsdWUtMTojZjBmNGZmOy0tbW9uc3Rlci1jb2xvci1ibHVlLTI6I2Q0ZTBmZjstLW1vbnN0ZXItY29sb3ItYmx1ZS0zOiMwMDg5ZmM7LS1tb25zdGVyLWNvbG9yLWJsdWUtNDojMDA2ZGNhOy0tbW9uc3Rlci1jb2xvci1ibHVlLTU6IzAwMzg2ZDstLW1vbnN0ZXItY29sb3ItYmx1ZS02OiMwMDFhMzk7LS1tb25zdGVyLWNvbG9yLWluZGlnby0xOiNmM2YzZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby0yOiNkZWRkZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby0zOiM2NTdlZmY7LS1tb25zdGVyLWNvbG9yLWluZGlnby00OiMwMDYxZmM7LS1tb25zdGVyLWNvbG9yLWluZGlnby01OiMwMDMyOGE7LS1tb25zdGVyLWNvbG9yLWluZGlnby02OiMwMDE2NDk7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0xOiNmN2YxZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0yOiNlOGRhZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC0zOiM5YjcwZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC00OiM3OTRhZmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC01OiMyZDBmYmY7LS1tb25zdGVyLWNvbG9yLXZpb2xldC02OiMwYjAwNzQ7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0xOiNmZGY0ZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0yOiNmN2Q5ZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS0zOiNkMTUwZmY7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS00OiNiMDFmZTM7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS01OiM2NjAwODc7LS1tb25zdGVyLWNvbG9yLXB1cnBsZS02OiMzYTAwNGY7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMTojZmZmM2ZjOy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTI6I2ZmZDdmNjstLW1vbnN0ZXItY29sb3ItbWFnZW50YS0zOiNmOTExZTA7LS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNDojY2EwMGI2Oy0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTU6Izc0MDA2ODstLW1vbnN0ZXItY29sb3ItbWFnZW50YS02OiM0NDAwM2M7LS1tb25zdGVyLWNvbG9yLXBpbmstMTojZmZmN2ZiOy0tbW9uc3Rlci1jb2xvci1waW5rLTI6I2ZmZGNlYzstLW1vbnN0ZXItY29sb3ItcGluay0zOiNmZjJmYjI7LS1tb25zdGVyLWNvbG9yLXBpbmstNDojZDIwMDhmOy0tbW9uc3Rlci1jb2xvci1waW5rLTU6Izc5MDA1MTstLW1vbnN0ZXItY29sb3ItcGluay02OiM0YjAwMzA7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS0xOiNlNWI4NzU7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS0yOiNkOWEzNjI7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS0zOiNjMDhhNGU7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS00OiNhNzcxM2I7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS01OiM4ZjVhMjg7LS1tb25zdGVyLWdyYWRpZW50LXRhbmdlcmluZS02OiMzNjA1MDU7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTE6I2Y3ZjVlZjstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMjojZTVlMmQ5Oy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0zOiNjYmM2YjM7LS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTQ6I2ExOWQ4YTstLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNTojN2E3NTY2Oy0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02OiM1MTRkM2Z9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTEpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTEpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMSl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0xKX0ubW9uc3Rlci10aGVtZS1lcnJvci0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTEpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTEpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtMXtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS0xe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xKX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTEpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMSl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0xKX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS1kaXNhYmxlZC0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yKX0ubW9uc3Rlci10aGVtZS1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLXRoZW1lLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItdGhlbWUtZGVzdHJ1Y3RpdmUtMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yKX0ubW9uc3Rlci10aGVtZS1zdWNjZXNzLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTIpfS5tb25zdGVyLXRoZW1lLXdhcm5pbmctMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMil9Lm1vbnN0ZXItdGhlbWUtZXJyb3ItMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci0yKX0ubW9uc3Rlci10aGVtZS1zZWxlY3Rpb24tMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTIpfS5tb25zdGVyLWJvcmRlci1jb2xvci0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWJvcmRlci0yKX0ubW9uc3Rlci1jb2xvci1uZXV0cmFsLTJ7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLXByaW1hcnktMntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMil9Lm1vbnN0ZXItY29sb3Itc3VjY2Vzcy0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yKX0ubW9uc3Rlci1jb2xvci13YXJuaW5nLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMik7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTIpfS5tb25zdGVyLWNvbG9yLWVycm9yLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTIpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMil9Lm1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yKX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLXRoZW1lLXByaW1hcnktZGlzYWJsZWQtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMyl9Lm1vbnN0ZXItdGhlbWUtc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci10aGVtZS10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLXRoZW1lLWRlc3RydWN0aXZlLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMyl9Lm1vbnN0ZXItdGhlbWUtc3VjY2Vzcy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zKX0ubW9uc3Rlci10aGVtZS13YXJuaW5nLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTMpfS5tb25zdGVyLXRoZW1lLWVycm9yLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZXJyb3ItMyl9Lm1vbnN0ZXItdGhlbWUtc2VsZWN0aW9uLTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKX0ubW9uc3Rlci1ib3JkZXItY29sb3ItM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ib3JkZXItMyl9Lm1vbnN0ZXItY29sb3ItbmV1dHJhbC0ze2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1wcmltYXJ5LTN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItY29sb3ItdGVydGlhcnktM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTMpfS5tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtM3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMyl9Lm1vbnN0ZXItY29sb3Itd2FybmluZy0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTMpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy0zKX0ubW9uc3Rlci1jb2xvci1lcnJvci0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTMpfS5tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMyk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyl9Lm1vbnN0ZXItdGhlbWUtcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci10aGVtZS1wcmltYXJ5LWRpc2FibGVkLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQpfS5tb25zdGVyLXRoZW1lLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItdGhlbWUtdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KX0ubW9uc3Rlci10aGVtZS1kZXN0cnVjdGl2ZS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQpfS5tb25zdGVyLXRoZW1lLXN1Y2Nlc3MtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNCl9Lm1vbnN0ZXItdGhlbWUtd2FybmluZy00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itd2FybmluZy00KX0ubW9uc3Rlci10aGVtZS1lcnJvci00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWVycm9yLTQpfS5tb25zdGVyLXRoZW1lLXNlbGVjdGlvbi00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCl9Lm1vbnN0ZXItYm9yZGVyLWNvbG9yLTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItYm9yZGVyLTQpfS5tb25zdGVyLWNvbG9yLW5ldXRyYWwtNHtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItcHJpbWFyeS00e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNCl9Lm1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00KX0ubW9uc3Rlci1jb2xvci1zdWNjZXNzLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQpfS5tb25zdGVyLWNvbG9yLXdhcm5pbmctNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00KTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNCl9Lm1vbnN0ZXItY29sb3ItZXJyb3ItNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1lcnJvci00KX0ubW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1yb3ctMXtib3JkZXI6MXB4IHNvbGlkIHZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpfS5tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29udGFpbmVyLTEsLm1vbnN0ZXItdGhlbWUtY29udHJvbC1lbGVtZW50LC5tb25zdGVyLXRoZW1lLWNvbnRyb2wtcm93LTF7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcil9Lm1vbnN0ZXItdGhlbWUtY29udHJvbC1iYWNrZ3JvdW5ke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yKX0ubW9uc3Rlci10aGVtZS1iYWNrZ3JvdW5kLWluaGVyaXR7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0IWltcG9ydGFudH0ubW9uc3Rlci10aGVtZS1vbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3IpO2NvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb24tY29sb3IpfS5tb25zdGVyLXRoZW1lLW9mZntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMSwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0yLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci0we2JvcmRlci1yYWRpdXM6MDtib3JkZXItc3R5bGU6bm9uZTtib3JkZXItd2lkdGg6MH0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMiwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTIpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00KX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMSwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMiwubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMywubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xe2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTEpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTIpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTMpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDttYXJnaW46MDtvdXRsaW5lOm5vbmV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdOmZvY3Vze291dGxpbmU6MXB4IGRhc2hlZCB2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zKTtvdXRsaW5lLW9mZnNldDoycHh9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5zd2l0Y2h7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aCk7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6aW5saW5lLWdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOjFmciAxZnI7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4yczt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAubGFiZWx7ZGlzcGxheTpibG9jazttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowIC4yZW07dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1vdmVyZmxvdzplbGxpcHNpczstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7d2hpdGUtc3BhY2U6bm93cmFwfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuc3dpdGNoLXNsaWRlcntib3R0b206NHB4O2xlZnQ6NHB4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjRweDt0b3A6NHB4O3RyYW5zaXRpb246LjJzO3dpZHRoOmNhbGMoNTAlIC0gNHB4KX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLnN3aXRjaFtkYXRhLW1vbnN0ZXItc3RhdGU9b25dIC5sYWJlbC5vZmZ7dmlzaWJpbGl0eTpoaWRkZW59W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5zd2l0Y2hbZGF0YS1tb25zdGVyLXN0YXRlPW9mZl0gLmxhYmVsLm9mZixbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gLnN3aXRjaFtkYXRhLW1vbnN0ZXItc3RhdGU9b25dIC5sYWJlbC5vbnt2aXNpYmlsaXR5OnZpc2libGV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5zd2l0Y2hbZGF0YS1tb25zdGVyLXN0YXRlPW9mZl0gLmxhYmVsLm9ue3Zpc2liaWxpdHk6aGlkZGVufVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSAuc3dpdGNoW2RhdGEtbW9uc3Rlci1zdGF0ZT1vbl0gLnN3aXRjaC1zbGlkZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMTAwJSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5zd2l0Y2hbZGF0YS1tb25zdGVyLXN0YXRlPW9mZl0gLnN3aXRjaC1zbGlkZXJ7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoMCl9Omhvc3R7Y3Vyc29yOnBvaW50ZXJ9Omhvc3QoW2Rpc2FibGVkXSl7Y3Vyc29yOm5vdC1hbGxvd2VkfSBcbn1gLFxuXHRcdDAsXG5cdCk7XG59IGNhdGNoIChlKSB7XG5cdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdGRvY3VtZW50LmdldFJvb3ROb2RlKCkucXVlcnlTZWxlY3RvcihcImh0bWxcIiksXG5cdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRlICsgXCJcIixcblx0KTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCwgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQ3VzdG9tQ29udHJvbCB9IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tY29udHJvbC5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi8uLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuXG5pbXBvcnQgeyBhZGRBdHRyaWJ1dGVUb2tlbiB9IGZyb20gXCIuLi8uLi9kb20vYXR0cmlidXRlcy5tanNcIjtcbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG5cdHVwZGF0ZXJUcmFuc2Zvcm1lck1ldGhvZHNTeW1ib2wsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgVG9nZ2xlU3dpdGNoU3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvdG9nZ2xlLXN3aXRjaC5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9ST0xFLFxufSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IGZpcmVFdmVudCB9IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBUb2dnbGVTd2l0Y2ggfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3dpdGNoRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcInN3aXRjaEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuZXhwb3J0IGNvbnN0IFNUQVRFX09OID0gXCJvblwiO1xuXG4vKipcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBjb25zdCBTVEFURV9PRkYgPSBcIm9mZlwiO1xuXG4vKipcbiAqIEEgc2ltcGxlIHRvZ2dsZSBzd2l0Y2hcbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL3RvZ2dsZS1zd2l0Y2hcbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3RvZ2dsZS1zd2l0Y2gtc2ltcGxlIFNpbXBsZSBleGFtcGxlXG4gKlxuICogQHNpbmNlIDMuNTcuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYmVhdXRpZnVsIHN3aXRjaCBlbGVtZW50XG4gKiBAZmlyZXMgbW9uc3Rlci1vcHRpb25zLXNldFxuICogQGZpcmVzIG1vbnN0ZXItc2VsZWN0ZWRcbiAqIEBmaXJlcyBtb25zdGVyLWNoYW5nZVxuICogQGZpcmVzIG1vbnN0ZXItY2hhbmdlZFxuICovXG5jbGFzcyBUb2dnbGVTd2l0Y2ggZXh0ZW5kcyBDdXN0b21Db250cm9sIHtcblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlPWN1cnJlbnQgdmFsdWUgb2YgdGhlIGVsZW1lbnRcblx0ICogQHByb3BlcnR5IHtCb29sZWFufSBkaXNhYmxlZD1kaXNhYmxlZD1mYWxzZSBEaXNhYmxlZCBzdGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY2xhc3Nlc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2xhc3Nlcy5vbj1zcGVjaWZpZXMgdGhlIGNsYXNzIGZvciB0aGUgb24gc3RhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzc2VzLm9mZj1zcGVjaWZpZXMgdGhlIGNsYXNzIGZvciB0aGUgb2ZmIHN0YXRlLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdmFsdWVzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZXMub2ZmPXNwZWNpZmllcyB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQgaWYgaXQgaXMgbm90IHNlbGVjdGVkXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsYWJlbHNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGxhYmVscy5vbj1zcGVjaWZpZXMgdGhlIGxhYmVsIGZvciB0aGUgb24gc3RhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYWJlbHMub2ZmPXNwZWNpZmllcyB0aGUgbGFiZWwgZm9yIHRoZSBvZmYgc3RhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb25zLm9uPXNwZWNpZmllcyB0aGUgYWN0aW9uIGZvciB0aGUgb24gc3RhdGUuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhY3Rpb25zLm9mZj1zcGVjaWZpZXMgdGhlIGFjdGlvbiBmb3IgdGhlIG9mZiBzdGF0ZS5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gdGhlIG1haW4gdGVtcGxhdGUgdXNlZCBieSB0aGUgY29udHJvbC5cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHZhbHVlOiBudWxsLFxuXHRcdFx0ZGlzYWJsZWQ6IGZhbHNlLFxuXHRcdFx0Y2xhc3Nlczoge1xuXHRcdFx0XHRvbjogXCJtb25zdGVyLXRoZW1lLW9uXCIsXG5cdFx0XHRcdG9mZjogXCJtb25zdGVyLXRoZW1lLW9mZlwiLFxuXHRcdFx0XHRoYW5kbGU6IFwibW9uc3Rlci10aGVtZS1wcmltYXJ5LTFcIixcblx0XHRcdFx0ZXJyb3I6IFwibW9uc3Rlci10aGVtZS1lcnJvci0xXCIsXG5cdFx0XHR9LFxuXHRcdFx0dmFsdWVzOiB7XG5cdFx0XHRcdG9uOiBcIm9uXCIsXG5cdFx0XHRcdG9mZjogXCJvZmZcIixcblx0XHRcdH0sXG5cdFx0XHRsYWJlbHM6IHtcblx0XHRcdFx0dG9nZ2xlU3dpdGNoT246IFwiXHUyNzE0XCIsXG5cdFx0XHRcdHRvZ2dsZVN3aXRjaE9mZjogXCJcdTI3MTZcIixcblx0XHRcdH0sXG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRhY3Rpb25zOiB7XG5cdFx0XHRcdG9uOiAoKSA9PiB7fSxcblx0XHRcdFx0b2ZmOiAoKSA9PiB7fSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cblx0XHRpbml0Q29udHJvbFJlZmVyZW5jZXMuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cblx0XHRnZXRXaW5kb3coKS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBpbml0IHZhbHVlIHRvIG9mZlxuXHRcdFx0ICogaWYgdGhlIHZhbHVlIHdhcyBub3QgZGVmaW5lZCBiZWZvcmUgaW5zZXJ0aW5nIGl0IGludG8gdGhlIEhUTUxcblx0XHRcdCAqL1xuXHRcdFx0aWYgKHNlbGYuZ2V0T3B0aW9uKFwidmFsdWVcIikgPT09IG51bGwpIHtcblx0XHRcdFx0c2VsZi5zZXRPcHRpb24oXCJ2YWx1ZVwiLCBzZWxmLmdldE9wdGlvbihcInZhbHVlcy5vZmZcIikpO1xuXHRcdFx0fVxuXG5cdFx0XHQvKipcblx0XHRcdCAqIHZhbHVlIGZyb20gYXR0cmlidXRlXG5cdFx0XHQgKi9cblx0XHRcdGlmIChzZWxmLmhhc0F0dHJpYnV0ZShcInZhbHVlXCIpKSB7XG5cdFx0XHRcdHNlbGYuc2V0T3B0aW9uKFwidmFsdWVcIiwgc2VsZi5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKSk7XG5cdFx0XHR9XG5cblx0XHRcdC8qKlxuXHRcdFx0ICogdmFsaWRhdGUgdmFsdWVcblx0XHRcdCAqL1xuXHRcdFx0dmFsaWRhdGVBbmRTZXRWYWx1ZS5jYWxsKHNlbGYpO1xuXG5cdFx0XHQvLyB0aGlzIHN0YXRlIGlzIGEgZ2V0dGVyXG5cdFx0XHRpZiAodGhpcy5zdGF0ZSA9PT0gU1RBVEVfT04pIHtcblx0XHRcdFx0dG9nZ2xlT24uY2FsbChzZWxmKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRvZ2dsZU9mZi5jYWxsKHNlbGYpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIHVwZGF0ZXIgdHJhbnNmb3JtZXIgbWV0aG9kcyBmb3IgcGlwZVxuXHQgKlxuXHQgKiBAcmV0dXJuIHtmdW5jdGlvbn1cblx0ICovXG5cdFt1cGRhdGVyVHJhbnNmb3JtZXJNZXRob2RzU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0XCJzdGF0ZS1jYWxsYmFja1wiOiAoV2VydCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5zdGF0ZTtcblx0XHRcdH0sXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIFtDU1NTdHlsZVNoZWV0XVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtUb2dnbGVTd2l0Y2hTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKiB0b2dnbGUgc3dpdGNoXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignbW9uc3Rlci10b2dnbGUtc3dpdGNoJyk7XG5cdCAqIGUuY2xpY2soKVxuXHQgKiBgYGBcblx0ICovXG5cdGNsaWNrKCkge1xuXHRcdHRoaXMudG9nZ2xlKCk7XG5cdH1cblxuXHQvKipcblx0ICogdG9nZ2xlIHN3aXRjaCBvbi9vZmZcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogZS50b2dnbGUoKVxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7VG9nZ2xlU3dpdGNofVxuXHQgKi9cblx0dG9nZ2xlKCkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpID09PSB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vblwiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMudG9nZ2xlT2ZmKCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnRvZ2dsZU9uKCk7XG5cdH1cblxuXHQvKipcblx0ICogdG9nZ2xlIHN3aXRjaCBvblxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXHQgKiBlLnRvZ2dsZU9uKClcblx0ICogYGBgXG5cdCAqXG5cdCAqIEByZXR1cm4ge1RvZ2dsZVN3aXRjaH1cblx0ICovXG5cdHRvZ2dsZU9uKCkge1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwidmFsdWVcIiwgdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIikpO1xuXHRcdGZpcmVFdmVudCh0aGlzLCBcImNoYW5nZVwiKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiB0b2dnbGUgc3dpdGNoIG9mZlxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXHQgKiBlLnRvZ2dsZU9mZigpXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtUb2dnbGVTd2l0Y2h9XG5cdCAqL1xuXHR0b2dnbGVPZmYoKSB7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJ2YWx1ZVwiLCB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vZmZcIikpO1xuXHRcdGZpcmVFdmVudCh0aGlzLCBcImNoYW5nZVwiKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiByZXR1cm5zIHRoZSBzdGF0dXMgb2YgdGhlIGVsZW1lbnRcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogY29uc29sZS5sb2coZS5zdGF0ZSlcblx0ICogLy8gXHUyMUE2IG9mZlxuXHQgKiBgYGBcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0Z2V0IHN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihcInZhbHVlXCIpID09PSB0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vblwiKVxuXHRcdFx0PyBTVEFURV9PTlxuXHRcdFx0OiBTVEFURV9PRkY7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFN3aXRjaFxuXHQgKlxuXHQgKiBgYGBcblx0ICogZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXHQgKiBjb25zb2xlLmxvZyhlLnZhbHVlKVxuXHQgKiAvLyBcdTIxQTYgb25cblx0ICogYGBgXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldCB2YWx1ZSgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdmFsdWVcblx0ICpcblx0ICogYGBgXG5cdCAqIGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblx0ICogZS52YWx1ZT1cIm9uXCJcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuXHQgKi9cblx0c2V0IHZhbHVlKHZhbHVlKSB7XG5cdFx0aWYgKFxuXHRcdFx0dmFsdWUgPT09IHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVzLm9uXCIpIHx8XG5cdFx0XHR2YWx1ZSA9PT0gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub2ZmXCIpXG5cdFx0KSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdHRoaXMuc3RhdGUgIT09XG5cdFx0XHRcdCh2YWx1ZSA9PT0gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIikgPyBTVEFURV9PTiA6IFNUQVRFX09GRilcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLnNldE9wdGlvbihcInZhbHVlXCIsIHZhbHVlKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdHRoaXMsXG5cdFx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdFx0J1RoZSB2YWx1ZSBcIicgK1xuXHRcdFx0XHR2YWx1ZSArXG5cdFx0XHRcdCdcIiBtdXN0IGJlIFwiJyArXG5cdFx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVzLm9uXCIpICtcblx0XHRcdFx0J1wiIG9yIFwiJyArXG5cdFx0XHRcdHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVzLm9mZlwiKSxcblx0XHQpO1xuXG5cdFx0c2hvd0Vycm9yLmNhbGwodGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcblx0XHRcdFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vdG9nZ2xlLXN3aXRjaEBAaW5zdGFuY2VcIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItdG9nZ2xlLXN3aXRjaFwiO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1zd2l0Y2hdYCxcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB0b2dnbGVPbigpIHtcblx0aWYgKCF0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5vZmZcIikpOyAvLyBjaGFuZ2UgY29sb3Jcblx0dGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5vblwiKSk7IC8vIGNoYW5nZSBjb2xvclxuXG5cdGNvbnN0IGNhbGxiYWNrID0gdGhpcy5nZXRPcHRpb24oXCJhY3Rpb25zLm9uXCIpO1xuXHRpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRjYWxsYmFjay5jYWxsKHRoaXMpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiB0aGlzLnNldEZvcm1WYWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0dGhpcy5zZXRGb3JtVmFsdWUodGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIikpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlT2ZmKCkge1xuXHRpZiAoIXRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLm9uXCIpKTsgLy8gY2hhbmdlIGNvbG9yXG5cdHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZCh0aGlzLmdldE9wdGlvbihcImNsYXNzZXMub2ZmXCIpKTsgLy8gY2hhbmdlIGNvbG9yXG5cblx0Y29uc3QgY2FsbGJhY2sgPSB0aGlzLmdldE9wdGlvbihcImFjdGlvbnMub2ZmXCIpO1xuXHRpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRjYWxsYmFjay5jYWxsKHRoaXMpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiB0aGlzLnNldEZvcm1WYWx1ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0dGhpcy5zZXRGb3JtVmFsdWUodGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub2ZmXCIpKTtcblx0fVxufVxuXG5mdW5jdGlvbiBzaG93RXJyb3IoKSB7XG5cdGlmICghdGhpc1tzd2l0Y2hFbGVtZW50U3ltYm9sXSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZSh0aGlzLmdldE9wdGlvbihcImNsYXNzZXMub25cIikpO1xuXHR0aGlzW3N3aXRjaEVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5yZW1vdmUodGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLm9mZlwiKSk7XG5cdHRoaXNbc3dpdGNoRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZCh0aGlzLmdldE9wdGlvbihcImNsYXNzZXMuZXJyb3JcIikpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQW5kU2V0VmFsdWUoKSB7XG5cdGNvbnN0IHZhbHVlID0gdGhpcy5nZXRPcHRpb24oXCJ2YWx1ZVwiKTtcblxuXHRjb25zdCB2YWxpZGF0ZWRWYWx1ZXMgPSBbXTtcblx0dmFsaWRhdGVkVmFsdWVzLnB1c2godGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIikpO1xuXHR2YWxpZGF0ZWRWYWx1ZXMucHVzaCh0aGlzLmdldE9wdGlvbihcInZhbHVlcy5vZmZcIikpO1xuXG5cdGlmICh2YWxpZGF0ZWRWYWx1ZXMuaW5jbHVkZXModmFsdWUpID09PSBmYWxzZSkge1xuXHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0dGhpcyxcblx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHQnVGhlIHZhbHVlIFwiJyArXG5cdFx0XHRcdHZhbHVlICtcblx0XHRcdFx0J1wiIG11c3QgYmUgXCInICtcblx0XHRcdFx0dGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub25cIikgK1xuXHRcdFx0XHQnXCIgb3IgXCInICtcblx0XHRcdFx0dGhpcy5nZXRPcHRpb24oXCJ2YWx1ZXMub2ZmXCIpLFxuXHRcdCk7XG5cdFx0dGhpcy5zZXRPcHRpb24oXCJkaXNhYmxlZFwiLCB0cnVlKTtcblx0XHR0aGlzLmZvcm1EaXNhYmxlZENhbGxiYWNrKHRydWUpO1xuXHRcdHNob3dFcnJvci5jYWxsKHRoaXMpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMuc2V0T3B0aW9uKFwiZGlzYWJsZWRcIiwgZmFsc2UpO1xuXHR0aGlzLmZvcm1EaXNhYmxlZENhbGxiYWNrKGZhbHNlKTtcblxuXHRpZiAodmFsdWUgPT09IHRoaXMuZ2V0T3B0aW9uKFwidmFsdWVzLm9uXCIpKSB7XG5cdFx0dG9nZ2xlT24uY2FsbCh0aGlzKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0b2dnbGVPZmYuY2FsbCh0aGlzKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7aW5pdEV2ZW50SGFuZGxlcn1cbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cblx0bGV0IGxhc3RWYWx1ZSA9IHNlbGYudmFsdWU7XG5cdHNlbGZbaW50ZXJuYWxTeW1ib2xdLmF0dGFjaE9ic2VydmVyKFxuXHRcdG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAoaXNPYmplY3QodGhpcykgJiYgdGhpcyBpbnN0YW5jZW9mIFByb3h5T2JzZXJ2ZXIpIHtcblx0XHRcdFx0Y29uc3QgbiA9IHRoaXMuZ2V0U3ViamVjdCgpPy5vcHRpb25zPy52YWx1ZTtcblx0XHRcdFx0aWYgKGxhc3RWYWx1ZSAhPT0gbikge1xuXHRcdFx0XHRcdGxhc3RWYWx1ZSA9IG47XG5cdFx0XHRcdFx0dmFsaWRhdGVBbmRTZXRWYWx1ZS5jYWxsKHNlbGYpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSksXG5cdCk7XG5cblx0c2VsZi5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgKGV2ZW50KSA9PiB7XG5cdFx0aWYgKGV2ZW50LmtleUNvZGUgPT09IDMyKSB7XG5cdFx0XHRzZWxmLnRvZ2dsZSgpO1xuXHRcdH1cblx0fSk7XG5cblx0c2VsZi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XG5cdFx0c2VsZi50b2dnbGUoKTtcblx0fSk7XG5cblx0c2VsZi5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hcIiwgKGV2ZW50KSA9PiB7XG5cdFx0c2VsZi50b2dnbGUoKTtcblx0fSk7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN3aXRjaFwiIGRhdGEtbW9uc3Rlci1yb2xlPVwic3dpdGNoXCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJkYXRhLW1vbnN0ZXItc3RhdGUgcGF0aDp2YWx1ZSB8IGNhbGw6c3RhdGUtY2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwgb25cIiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bGFiZWxzLnRvZ2dsZVN3aXRjaE9uXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsIG9mZlwiIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMudG9nZ2xlU3dpdGNoT2ZmXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNsYXNzIHBhdGg6Y2xhc3Nlcy5oYW5kbGUgfCBzdWZmaXg6XFxcXCBzd2l0Y2gtc2xpZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KFRvZ2dsZVN3aXRjaCk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRBVFRSSUJVVEVfUk9MRSxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge1xuXHRhc3NlbWJsZU1ldGhvZFN5bWJvbCxcblx0YXR0cmlidXRlT2JzZXJ2ZXJTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdGluaXRNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRk9STV9SRUxPQUQsIEFUVFJJQlVURV9GT1JNX1VSTCB9IGZyb20gXCIuL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGxvYWRBbmRBc3NpZ25Db250ZW50IH0gZnJvbSBcIi4vdXRpbC9mZXRjaC5tanNcIjtcblxuZXhwb3J0IHsgVGVtcGxhdGUgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZCA9IFN5bWJvbChcIndhc0luaXRpYWxpemVkXCIpO1xuXG4vKipcbiAqIEEgVGVtcGxhdGUgY29udHJvbCBpcyBhIGNvbnRyb2wgdGhhdCBjYW4gYmUgdXNlZCB0byBsb2FkIGNvbnRlbnQgZnJvbSBhIFVSTCBhbmQgZGlzcGxheSBpdCBpbiB0aGUgU2hhZG93Um9vdC5cbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9mb3JtL3RlbXBsYXRlXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvZm9ybS90ZW1wbGF0ZS1zaW1wbGVcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2Zvcm0vdGVtcGxhdGUtd2l0aC1kZWZhdWx0XG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3RlbXBsYXRlLXdpdGgtcHJvY2Vzc29yXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9mb3JtL3RlbXBsYXRlLW9uc2hvd1xuICpcbiAqIEBzaW5jZSAxLjExLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIHRlbXBsYXRlIGNvbnRyb2xcbiAqIEBmaXJlcyBtb25zdGVyLWZldGNoZWRcbiAqL1xuY2xhc3MgVGVtcGxhdGUgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb21wb25lbnRzL2Zvcm0vdGVtcGxhdGVcIik7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmw9dW5kZWZpbmVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWxvYWQ9dW5kZWZpbmVkICBjdXJyZW50bHkgdGhlIG9ubHkgdmFsdWUgZGVmaW5lZCBpcyBgb25zaG93YC4gQ3VycmVudGx5IHRoZSBvbmx5IHZhbHVlIGRlZmluZWQgaXMgb25zaG93LiB0aGlzIHJlbW92ZXMgdGhlIEludGVyc2VjdGlvbk9ic2VydmVyLiB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvbnRlbnQgaXMgb25seSBsb2FkZWQgb25jZS4gcmVsb2FkaW5nIG9mIHRoZSBjb250ZW50IGRvZXMgbm90IG9jY3VyLlxuXHQgKiBAcHJvcGVydHkge09iamVjdFtdfSBwcm9jZXNzb3JzXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaCBGZXRjaCBbc2VlIFVzaW5nIEZldGNoIG1vemlsbGEub3JnXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJL1VzaW5nX0ZldGNoKVxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gZmV0Y2gucmVkaXJlY3Q9ZXJyb3Jcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1ldGhvZD1HRVRcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLm1vZGU9c2FtZS1vcmlnaW5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLmNyZWRlbnRpYWxzPXNhbWUtb3JpZ2luXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZXRjaC5oZWFkZXJzPXtcImFjY2VwdFwiOlwidGV4dC9odG1sXCJ9fVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHtcblx0XHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdFx0fSxcblx0XHRcdFx0dXJsOiBudWxsLFxuXHRcdFx0XHRyZWxvYWQ6IG51bGwsXG5cdFx0XHRcdHByb2Nlc3NvcnM6IFtdLFxuXHRcdFx0XHRmZXRjaDoge1xuXHRcdFx0XHRcdHJlZGlyZWN0OiBcImVycm9yXCIsXG5cdFx0XHRcdFx0bWV0aG9kOiBcIkdFVFwiLFxuXHRcdFx0XHRcdG1vZGU6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdFx0XHRjcmVkZW50aWFsczogXCJzYW1lLW9yaWdpblwiLFxuXHRcdFx0XHRcdGhlYWRlcnM6IHtcblx0XHRcdFx0XHRcdGFjY2VwdDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdGluaXRPcHRpb25zRnJvbUFyZ3VtZW50cy5jYWxsKHRoaXMpLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGljaCBhdHRyaWJ1dGVzIGFyZSB0byBiZSBtb25pdG9yZWQgYnkgYGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpYC5cblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nW119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcblx0XHRjb25zdCBsaXN0ID0gc3VwZXIub2JzZXJ2ZWRBdHRyaWJ1dGVzO1xuXHRcdGxpc3QucHVzaChBVFRSSUJVVEVfRk9STV9VUkwpO1xuXHRcdHJldHVybiBsaXN0O1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRbaW5pdE1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbaW5pdE1ldGhvZFN5bWJvbF0oKTtcblxuXHRcdC8vIGRhdGEtbW9uc3Rlci1vcHRpb25zXG5cdFx0dGhpc1thdHRyaWJ1dGVPYnNlcnZlclN5bWJvbF1bQVRUUklCVVRFX0ZPUk1fVVJMXSA9ICh1cmwpID0+IHtcblx0XHRcdGlmICh0aGlzLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9VUkwpKSB7XG5cdFx0XHRcdHRoaXMuc2V0T3B0aW9uKFwidXJsXCIsIG5ldyBVUkwodXJsLCBkb2N1bWVudC5sb2NhdGlvbikudG9TdHJpbmcoKSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWlzc2luZyBkZWZhdWx0IHNsb3Rcblx0ICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcblx0ICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB3ZSB3b24ndCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGFcblx0ICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcblx0ICogQHRocm93cyB7RXJyb3J9IHVuZGVmaW5lZCBzdGF0dXMgb3IgdHlwZVxuXHQgKiBAZmlyZXMgbW9uc3Rlci1mZXRjaGVkXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXHRcdGluaXRJbnRlcnNlY3Rpb25PYnNlcnZlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbnRlcm5hbCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEByZXR1cm4ge0NTU1N0eWxlU2hlZXRbXX1cblx0ICovXG5cdHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItdGVtcGxhdGVcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBsb2FkIGNvbnRlbnQgZnJvbSB1cmxcblx0ICpcblx0ICogSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgdGhhdCB3aXRoIHRoaXMgZnVuY3Rpb24gdGhlIGxvYWRpbmcgaXMgZXhlY3V0ZWRcblx0ICogZGlyZWN0bHkuIGl0IGlzIGxvYWRlZCBhcyB3ZWxsIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IHZpc2libGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gdXJsXG5cdCAqL1xuXHRmZXRjaCh1cmwpIHtcblx0XHRpZiAoaXNTdHJpbmcodXJsKSB8fCB1cmwgaW5zdGFuY2VvZiBVUkwpIHtcblx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9GT1JNX1VSTCwgYCR7dXJsfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsb2FkQ29udGVudC5jYWxsKHRoaXMpO1xuXHR9XG59XG5cbi8qKlxuICogVGhpcyBhdHRyaWJ1dGUgY2FuIGJlIHVzZWQgdG8gcGFzcyBhIFVSTCB0byB0aGlzIHNlbGVjdC5cbiAqXG4gKiBgYGBcbiAqIDxtb25zdGVyLXNlbGVjdCBkYXRhLW1vbnN0ZXItdXJsPVwiaHR0cHM6Ly9leGFtcGxlLmNvbS9cIj48L21vbnN0ZXItc2VsZWN0PlxuICogYGBgXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzKCkge1xuXHRjb25zdCBvcHRpb25zID0ge307XG5cblx0Y29uc3QgdXJsID0gdGhpcy5nZXRBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fVVJMKTtcblxuXHRpZiAoaXNTdHJpbmcodXJsKSkge1xuXHRcdG9wdGlvbnNbXCJ1cmxcIl0gPSBuZXcgVVJMKHVybCwgZG9jdW1lbnQubG9jYXRpb24pLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0ZPUk1fUkVMT0FEKSkge1xuXHRcdG9wdGlvbnNbXCJyZWxvYWRcIl0gPSB0aGlzLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfRk9STV9SRUxPQUQpLnRvTG93ZXJDYXNlKCk7XG5cdH1cblxuXHRyZXR1cm4gb3B0aW9ucztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgZGVmYXVsdCBzbG90XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICogQHRocm93cyB7RXJyb3J9IG1pc3NpbmcgdXJsXG4gKiBAdGhyb3dzIHtFcnJvcn0gd2Ugd29uJ3QgYmUgYWJsZSB0byByZWFkIHRoZSBkYXRhXG4gKiBAdGhyb3dzIHtFcnJvcn0gcmVxdWVzdCBmYWlsZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBub3QgZm91bmRcbiAqIEB0aHJvd3Mge0Vycm9yfSB1bmRlZmluZWQgc3RhdHVzIG9yIHR5cGVcbiAqIEBmaXJlcyBtb25zdGVyLWZldGNoZWRcbiAqL1xuZnVuY3Rpb24gaW5pdEludGVyc2VjdGlvbk9ic2VydmVyKCkge1xuXHRpZiAodGhpc1tpbnRlcnNlY3Rpb25PYnNlcnZlcldhc0luaXRpYWxpemVkXSA9PT0gdHJ1ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXNbaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZF0gPSB0cnVlO1xuXG5cdGNvbnN0IG9wdGlvbnMgPSB7XG5cdFx0dGhyZXNob2xkOiBbMC41XSxcblx0fTtcblxuXHRjb25zdCBjYWxsYmFjayA9IChlbnRyaWVzLCBvYnNlcnZlcikgPT4ge1xuXHRcdGZvciAoY29uc3QgWywgZW50cnldIG9mIGVudHJpZXMuZW50cmllcygpKSB7XG5cdFx0XHRpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcgPT09IHRydWUpIHtcblx0XHRcdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwicmVsb2FkXCIpID09PSBcIm9uc2hvd1wiKSB7XG5cdFx0XHRcdFx0b2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRsb2FkQ29udGVudC5jYWxsKHRoaXMpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0YWRkQXR0cmlidXRlVG9rZW4odGhpcywgQVRUUklCVVRFX0VSUk9STUVTU0FHRSwgZS50b1N0cmluZygpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihjYWxsYmFjaywgb3B0aW9ucyk7XG5cdG9ic2VydmVyLm9ic2VydmUodGhpcyk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIGRlZmF1bHQgc2xvdFxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqIEB0aHJvd3Mge0Vycm9yfSBtaXNzaW5nIHVybFxuICogQHRocm93cyB7RXJyb3J9IHdlIHdvbid0IGJlIGFibGUgdG8gcmVhZCB0aGUgZGF0YVxuICogQHRocm93cyB7RXJyb3J9IHJlcXVlc3QgZmFpbGVkXG4gKiBAdGhyb3dzIHtFcnJvcn0gbm90IGZvdW5kXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtFcnJvcn0gY2xpZW50IGVycm9yXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5kZWZpbmVkIHN0YXR1cyBvciB0eXBlXG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhbiBpbnN0YW5jZSBvZlxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqIEBmaXJlcyBtb25zdGVyLWZldGNoZWRcbiAqL1xuZnVuY3Rpb24gbG9hZENvbnRlbnQoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdGxldCB1cmwgPSB0aGlzLmdldE9wdGlvbihcInVybFwiLCB1bmRlZmluZWQpO1xuXG5cdGlmICh1cmwgaW5zdGFuY2VvZiBVUkwpIHtcblx0XHR1cmwgPSB1cmwudG9TdHJpbmcoKTtcblx0fVxuXG5cdGlmICghaXNTdHJpbmcodXJsKSB8fCB1cmwgPT09IFwiXCIpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtaXNzaW5nIHVybFwiKTtcblx0fVxuXG5cdGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbihcImZldGNoXCIsIHt9KTtcblxuXHRjb25zdCBkZWZhdWx0U2xvdCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFwic2xvdFtuYW1lPWRlZmF1bHRdXCIpO1xuXHRpZiAoIShkZWZhdWx0U2xvdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3NpbmcgZGVmYXVsdCBzbG90XCIpO1xuXHR9XG5cblx0ZGVmYXVsdFNsb3Quc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblxuXHRsZXQgY29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0YFske0FUVFJJQlVURV9ST0xFfT1jb250YWluZXJdYCxcblx0KTtcblx0aWYgKCEoY29udGFpbmVyIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0Y29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0XHRjb250YWluZXIuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRcdGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoQVRUUklCVVRFX1JPTEUsIFwiY29udGFpbmVyXCIpO1xuXHRcdHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuXHR9XG5cblx0bG9hZEFuZEFzc2lnbkNvbnRlbnQoY29udGFpbmVyLCB1cmwsIG9wdGlvbnMpXG5cdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0ZGVmYXVsdFNsb3Quc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuXHRcdFx0Y29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cdFx0XHRydW5Qcm9jZXNzb3JzLmNhbGwodGhpcyk7XG5cdFx0fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdHRocm93IGU7XG5cdFx0fSk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3J1blByb2Nlc3NvcnN9XG4gKi9cbmZ1bmN0aW9uIHJ1blByb2Nlc3NvcnMoKSB7XG5cdGNvbnN0IHByb2Nlc3NvcnMgPSB0aGlzLmdldE9wdGlvbihcInByb2Nlc3NvcnNcIik7XG5cdGlmICghaXNBcnJheShwcm9jZXNzb3JzKSkgcmV0dXJuIHRoaXM7XG5cblx0Zm9yIChjb25zdCBbLCBwcm9jZXNzb3JdIG9mIHByb2Nlc3NvcnMuZW50cmllcygpKSB7XG5cdFx0Y29uc3Qgc291cmNlID0gcHJvY2Vzc29yPy5zb3VyY2U7XG5cdFx0bGV0IGRlc3RpbmF0aW9uID0gcHJvY2Vzc29yPy5kZXN0aW5hdGlvbjtcblxuXHRcdGlmIChzb3VyY2UgPT09IG51bGwpIHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIFwibWlzc2luZyBzb3VyY2VcIik7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRkZXN0aW5hdGlvbiA9PT0gbnVsbCB8fFxuXHRcdFx0ZGVzdGluYXRpb24gPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0ZGVzdGluYXRpb24gPT09IFwiXCJcblx0XHQpIHtcblx0XHRcdGRlc3RpbmF0aW9uID0gXCJbXCIgKyBBVFRSSUJVVEVfUk9MRSArIFwiPWNvbnRhaW5lcl1cIjtcblx0XHR9XG5cblx0XHRpZiAoaXNTdHJpbmcoc291cmNlKSAmJiBpc1N0cmluZyhkZXN0aW5hdGlvbikpIHtcblx0XHRcdGNvbnN0IHNvdXJjZU5vZGUgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihzb3VyY2UpO1xuXHRcdFx0bGV0IGRlc3RpbmF0aW9uTm9kZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZGVzdGluYXRpb24pO1xuXG5cdFx0XHRpZiAoZGVzdGluYXRpb25Ob2RlID09PSBudWxsKSB7XG5cdFx0XHRcdGRlc3RpbmF0aW9uTm9kZSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGRlc3RpbmF0aW9uKTtcblx0XHRcdFx0aWYgKGRlc3RpbmF0aW9uTm9kZSA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKFxuXHRcdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0XHRcdFx0XHRcImRlc3RpbmF0aW9uIG5vdCBmb3VuZFwiLFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRzb3VyY2VOb2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcblx0XHRcdFx0ZGVzdGluYXRpb25Ob2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnRcblx0XHRcdCkge1xuXHRcdFx0XHRkZXN0aW5hdGlvbk5vZGUuaW5uZXJIVE1MID0gc291cmNlTm9kZS5jbG9uZU5vZGUodHJ1ZSkuaW5uZXJIVE1MO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRcdFx0dGhpcyxcblx0XHRcdFx0QVRUUklCVVRFX0VSUk9STUVTU0FHRSxcblx0XHRcdFx0XCJpbnZhbGlkIHNvdXJjZSBvciBkZXN0aW5hdGlvblwiLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8c2xvdCBuYW1lPVwiZGVmYXVsdFwiPjwvc2xvdD5cbiAgICBgO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVtcGxhdGUpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IEhvc3RTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBIb3N0U3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdEhvc3RTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIGhvc3QgeyBcbi5ibG9ja3tkaXNwbGF5OmJsb2NrfS5pbmxpbmV7ZGlzcGxheTppbmxpbmV9LmlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZ3JpZHtkaXNwbGF5OmdyaWR9LmlubGluZS1ncmlke2Rpc3BsYXk6aW5saW5lLWdyaWR9LmZsZXh7ZGlzcGxheTpmbGV4fS5pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4fS5oaWRkZW4sLmhpZGUsLm5vbmV7ZGlzcGxheTpub25lfS52aXNpYmxle3Zpc2liaWxpdHk6dmlzaWJsZX0uaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVufTp3aGVyZShodG1sKXtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlOy1tb3otdGV4dC1zaXplLWFkanVzdDoxMDAlO3RleHQtc2l6ZS1hZGp1c3Q6MTAwJX06d2hlcmUoaDEpe2ZvbnQtc2l6ZToyZW07bWFyZ2luLWJsb2NrLWVuZDouNjdlbTttYXJnaW4tYmxvY2stc3RhcnQ6LjY3ZW19OndoZXJlKGRsLG9sLHVsKSA6d2hlcmUoZGwsb2wsdWwpe21hcmdpbi1ibG9jay1lbmQ6MDttYXJnaW4tYmxvY2stc3RhcnQ6MH06d2hlcmUoaHIpe2JveC1zaXppbmc6Y29udGVudC1ib3g7Y29sb3I6aW5oZXJpdDtoZWlnaHQ6MH06d2hlcmUoYWJiclt0aXRsZV0pe3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7LXdlYmtpdC10ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZDt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lIGRvdHRlZH06d2hlcmUoYixzdHJvbmcpe2ZvbnQtd2VpZ2h0OmJvbGRlcn06d2hlcmUoY29kZSxrYmQscHJlLHNhbXApe2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX06d2hlcmUoc21hbGwpe2ZvbnQtc2l6ZTo4MCV9OndoZXJlKHRhYmxlKXtib3JkZXItY29sb3I6Y3VycmVudENvbG9yO3RleHQtaW5kZW50OjB9OndoZXJlKGJ1dHRvbixpbnB1dCxzZWxlY3Qpe21hcmdpbjowfTp3aGVyZShidXR0b24pe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSl7LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn06d2hlcmUocHJvZ3Jlc3Mpe3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfTp3aGVyZShzZWxlY3Qpe3RleHQtdHJhbnNmb3JtOm5vbmV9OndoZXJlKHRleHRhcmVhKXttYXJnaW46MH06d2hlcmUoaW5wdXRbdHlwZT1zZWFyY2ggaV0pey13ZWJraXQtYXBwZWFyYW5jZTp0ZXh0ZmllbGQ7b3V0bGluZS1vZmZzZXQ6LTJweH06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjppbmhlcml0O29wYWNpdHk6LjU0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPWNvbG9yIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9OndoZXJlKDotbW96LXVpLWludmFsaWQpe2JveC1zaGFkb3c6bm9uZX06d2hlcmUoZGlhbG9nKXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyOnNvbGlkO2NvbG9yOiMwMDA7aGVpZ2h0Oi1tb3otZml0LWNvbnRlbnQ7aGVpZ2h0OmZpdC1jb250ZW50O2xlZnQ6MDttYXJnaW46YXV0bztwYWRkaW5nOjFlbTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3dpZHRoOi1tb3otZml0LWNvbnRlbnQ7d2lkdGg6Zml0LWNvbnRlbnR9OndoZXJlKGRpYWxvZzpub3QoW29wZW5dKSl7ZGlzcGxheTpub25lfTp3aGVyZShzdW1tYXJ5KXtkaXNwbGF5Omxpc3QtaXRlbX1odG1se2hlaWdodDoxMDAlfWJvZHksaHRtbHttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSA0MHB4KX1ib2R5e2JveC1zaXppbmc6Ym9yZGVyLWJveDttYXJnaW46MDtwYWRkaW5nOjA7d29yZC1icmVhazpicmVhay13b3JkfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMiwubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0zLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItMHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXN0eWxlOm5vbmU7Ym9yZGVyLXdpZHRoOjB9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMSwubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0zLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTMsLm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMXtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zKX0ubW9uc3Rlci1ib3JkZXItdGVydGlhcnktNHtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KX1pbnB1dCxtZXRlcixwcm9ncmVzcyxzZWxlY3QsdGV4dGFyZWF7YWNjZW50LWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGgpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6MTAwJTttYXJnaW46MDtvdXRsaW5lOm5vbmV9aW5wdXQsc2VsZWN0LHRleHRhcmVhe2hlaWdodDotbW96LWZpdC1jb250ZW50O2hlaWdodDpmaXQtY29udGVudDtwYWRkaW5nOi40cmVtIC42cmVtfXRleHRhcmVhe21pbi1oZWlnaHQ6NnJlbTtyZXNpemU6dmVydGljYWx9aW5wdXRbdHlwZT1jb2xvcl17aGVpZ2h0OjJyZW07bWFyZ2luOjA7cGFkZGluZzouMXJlbTt3aWR0aDoycmVtfWlucHV0OmhvdmVyOm5vdChbdHlwZT1yYWRpb10pOm5vdChbdHlwZT1jaGVja2JveF0pOm5vdChbdHlwZT1yYW5nZV0pLHNlbGVjdDpob3Zlcix0ZXh0YXJlYTpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfWlucHV0OmZvY3VzLHNlbGVjdDpmb2N1cyx0ZXh0YXJlYTpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6M3B4fUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UmFsZXdheTtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDozMDA7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmMjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxkMDlHTWdBQkFBQUFBRko0QUJJQUFBQUF0M0FBQUZJUUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR29FOEcrNDZISVU4Qm1BL1UxUkJWRVFBaFFnSWdRb0pueFFSQ0FxQnVneUJtbkFMaENJQUFUWUNKQU9JUUFRZ0JZVVVCeUFNZ3h3YmZhUVhhSmVmbU56MFpvbDN2NjBjUGVaTXBHNEhKU2prNXFJSU5nNkNHTWdsWmYvL24zRjBqT0dHRFJBMXJYZUluY0pJVWtOSEduNjlxTVJEVThaYWpqczlVYnNtdG5xbkUzdjN2cWlRbWZSUXBMa0tXNlFad2FsNnM1SVVpSk5VU1VHL093b0RZNkI2NzVPalNqa0RTU011MnBlZHB1OXZKSUxVbEpkNzA3RCtlTEhwallESTRlMXVEbkxqSEh2eHBEWEdNeWR1TExuMXF0MEZDUU95RnNKWkUxK2tKcTNUK0llN0JKRklOT0FOYmk5dlRVemhJN1c0R21VTDBsV2pUL0ZRUWkvbSsreHVQUDAyb21SSGU1cG40RGdmTlpmbitSOXo5Nzl0bUVlTmFxMVJ4UnFIVGpUUE5BMkpGRWdySGRvL250L1cvNXpiZ0dDeGlhNkVrVmlBMkZoWUdJdFJtRTFadlZVdnF0U3RiN012cmQzVzcrdDIrMFhkb1RuenpqWWJwN21TSExBQ2toTVdnQ1RMNnMwV3YwQVVvaEpmRXFFM29wUGQ1OGlrSm5LbG8rM3VhZVNIWUo2ZmNJY1hqZCtyS1VFc2FFbFRxbFVsVlJtL04rZS84aVAwTDVBS296TmxKMy85aUJ3c2hNNnY1SklVSnlrZ1QzZmRyT21xNkxjcytaK3EvWHNBWEZ4RUVpUUlVYUtvc0ZuN2N0VCs3QkJTNWRxRG9sSlh1bmJsN3J0dHpEL3YzODRMZnRKYWdGRkFMWVBFNUE3Z25NclpCaHQ0bFhxc2JaS21iZHEwVHRPbXBtZ05pdWdNMlBZQmM3M01yanE3R0xzb1hIY1RwdDl1UHZGRHo4ZU4zZytzeHJQUUF3NkRURk5wL09aSTlpaW5OaXRaaFJtcFFPQ2tkb0JkQU5qVldsYXZNaXR3RE5KWC9wWUlBa1Z3bk9QL3ZXNXh6b013N1NBRkFLVStaei9rblAvWjlqK09kZnJMOEtlMnZkS2JtcGh1eEpTdUw4RVVBZ2dISWlCSFArNDQ0RUR6djFQVFEzWWtPY09TbFRIbWo2VXNkZm8yTCsvanBZZTdJSFdjUVVnY2drcExGUjFZVFc4Q0dLUVg5YjhHRkFBQUg5dG80UkhRNkdMdkZScmk0RGl3VHpBQURETUtEUHIvZlozVi9xZGdQbWtHektURW1XRVhiN1EzdHRnVFlxbzJuUDYvKzk3WGYrRi85SkhBVnNJSWNBQ0Jad1J5a0dUN2dDUjhWb2hKY1VPT1NEamlTYkFwaE1vem0ySlJwdEJ0VVc2OVhiTkZHM0lWeTJLTG9rNDgvTGZzbTUyN0lhcUJMTXVCYk9GSXdlRlVkMDF2ZUwrWTh4V2h0emNxVG0yQ0lUYzVlTEp3U0k0ZllsTFlGSVZIQXMvL1Q1M040L1l4MWhLR1UrSFNxRXJkcFBQbnM2ZnFxV0pzTmJaYUNsUXRqbE9MVU1zaGNkb0E1VFFzczRKTGM5MFN4Q09NTVVLNEtQOU5zaHB6cFg0dnd4S0NoQ0FTUkVSRS9MS3NXUmxKd05LQWNUblhBaEV5M3IxS0hjWmEvWWRYNTg0MjAvaWFYbXRHaG9DQWlJaUFSMjN2L1A5K0tUQUNBTjVoZGtDM3hVQzRFTHNnZ3ZrUjJrckVqWVNFdjBCS1NtSENoSXZZT0NBSmtLUWd5WU1NMlFvVU16Q28xNkJKODVxQVdDQ2RIZWszQUIwT0RMMUxxMFBnVGUzaFN3MmZoaTRYaFB1ZXVRV0VINnh0SUVRQWJHMk5tNW9WNTRRRlAreUtnTzJENFQ1dC93ejJYVzkyL3JwcXBMVFNJUDhxVjl2THZPZHMwTkxXeVg1MUs2b2ZidlBaRTFwYWY3dzMxOEM5WnRocTdmMzJiZnVMNjRWWkh3NTE0WXNtNWxnZk5iZkc3Vzlsc1VBNEVHejcyM3Z4d0d6cDRmUlIrbVA4THM1QjdLQjJlREpYYzZ4d2xHNjkwMnVnN0F6TEE4TlkyMUIyZEIvUDVxZk9WOHQxb255TDVqWkREZlFJNVJnOEQ5OEZ2SHN2Y2xIdUpzcmR2c0pycGMvVHIvZ3UvRWZaSnpYVXpwV2FEajdNNytVUDgvOEVrQUFWYUFTL0NSK1hzL0pONFlhSWNPMXhIWmNVYU1NYmtscnBLeTdOZlFKS1FjVVJhZ29HbUNXK0hBNkVOdmJnMzNzbDJwSVlSbUU5YklIYjBtQTZrazZsTjVHZHlNTjVFYm1RaHhIS2x3TWdUNThjZ3c3cGRVUno3bmZNY1FmY1UzdkljelZrZHJoWDhYSHE0MDEydEZPZDdrVC9hN3A3bTgzV0E3MUY3YU85TStkanZkZDZqN2Z4bStEMVB1M3ozdWlydm11eXphNTN0cnY5M2xUYjgyUlQyS2FGVlVLTU5QMzZCdlFNQ28wR3NFZGtMOHMrekxnMUV4Yk0wTmdDV0F4Z3pmODJERzFLWE1mYzRyak5jUWZIS3hTQ3VSdUJJNUFvZERERGtHZFY4Q25WVkVtRU1haW40U2EwQVhUSTBSQk5wT1lBTFZxMWFWOXZ4SmlVekhLV0NpczZtcDBCdWt4MDY5R3I3NHNuVk5ic29DbWtWTW9wNStwREdhV3oyc0xEcjJpTnQrb1pPMGIzNllTSWpXY3h2bmxOMHgwVmhsWW9XNFVSalhYS3lMRzNZM3FvTGRFYXpIQUVFb1Z1TWwzRERlRVJWcEcvamVURVIwQ1VaRVUxbW90cUZvaXdKRktVYURGaWFjU2xCSnJFalNRS0ovQ1NGU21TS2sxNjFRbGtkS2V5U1hZenNkWEtpNkk5aWtOSk10Q1VLbE91UXFVcTFWSFQxenE2K2x6ZlFOQUlhNUpwUm92V2FFUDdaeHVObVRqTUxCWXVxM1hVVGdOZFJEZDZVcTlBMzNjYnhBenhERE9OMEl4YU5WYXhkLy9zL2FqeEFFNkpuUGJGR1prdUMzdWFOVThFc0RTTFpWbXhPajFQZDhIUXhYU3BlZGtYYXdiVzZ3Wm84KzZEcml1UUZGdzVJcHZuSmg2L1pnRkpLOTMwYUVNMlhKM3lKQjBESG9waGJxZzB1cmt2TUlnWWx0YkdSUGNka2Q3VmovTlY0cGJBYmErL0U0QmpDZzlwNVplcmkvcGRNMENHLzd0WFpOeFZFKzZiWWF2UW42dW1Xd3kzRlhmNmdnK1huQXRIRGdqa1BOaVVicXBvd3ZEVXZiUmxjajVYWkhZelY4Smk0TmwxdmpzT2hyTWF4T0h4ZUR3ZWp6L1ZJSEpYbjZIMHdoZzZxRk9FVXFRbzBXTEUwb2hMQ1RLSjB5UTVMVTl5UlFwU3BVbGZabkFTQmtXcGxDbFhvVktWNnFpYlRCdE1tUUtZWVdIVlVVZnRHSXQ2Mmxkbk1IM0VwaVUwcVZRcUhiQ0x4T1UrRTQvMVhMZkJFaHpLaGdVY2dVU2hmeHdtRHo5RzVFUkFBSEw3RkhSS1F5cm53dXhRZjVyaEhCRUJSSW9TTFVZc3pVYmM0cnRNZHBsMjZGZ2Q1NXRnUUc4eC9mQVoySnpJdkdibWxyY1hBbTN3WEthN0VsZlBjUzJ0eGZxK2VnZmlIR29ETXh5QlJLSHZ5M1NKMzBRNlY4KzZtZGZac2FGVjNlT1VLc1dNeW5raHlMMXU0VkkwTDFTSkxJeFh5WXpwTHlOcWlXejBYVHBrYVR5bjFaRHRpOTBtWTAydjB0VXF0elNDbCtxcks3ckl1djF2OVJEMHNneHFHYkpvR0dmRWtsRTFZenIyOE8xbDJLZXdYOU40QURhTjFiN0wwSWFSVFhPdXk5eWl1ODJwT3dIUUJDK3BsZENyT21LME1nL3IxdlJZRW0zREJFY2dVZWdtVXgwM0c0K3dpdFFnT2ZFUkVDVlpVWTNtNHRtRUl2d1VLVXEwR0xFMDRsSUNUdUkweVRxdEZjbEVDbEtsU2E4NldFWjNKSnZzRldpN0l4S0pPQndPaDhQaGNFVHJSTjN0RHBsTUpwTmhSSWFpcUFpR1lSZ21jYmtzeTROb3ovcm9mUUw3S2NhbE5EMEZPVzNSR1p1T0JSMnhtVk14a1Vna0RsMFg3dUppdXRTOGJOR2FFK3YvWlFPd3FlODZHSUllRXNDdW92V1lmQ3EydHZwTU9CTjdNek82OEdXWExodG1nVzJmZmVIcDFNdTdxd1g1TkR3VGtwQ1NjZWZCa3hkdmZpbkFSSVJJVWFMRmlLVVJseElBaVpFMHJWcTY1SW9VU1pVbXZlcVVNcnBzL3oxWldFWjVZQmdHQUFBQUFBQ0EwV1pzZDFDcCtIdytuMi9jT2xrNHJEcFNsMUszSHIzNmpnMUNUdHd6T2NOdUNYWU5naURZaG90SDFvZ09MUlN1eDhuaWw0cjJpWWF2MG5vcnpYdloyblpqWkxmYUtEK1ZSZ0gvZmdObXBrRmJoZ2lHaVVhY0dmWE5tSzQ5RlB2WTl0dmJjVG03NSszZmRhbVc2WVN0d2tkemFDSFpjdnEwQ1M0aVU1Wm1OeExYR0JlL3JRb0hqTVAxL1FFR1ZNWkZKZ2JEREovNVQzZXlCY3ZHUFNxVGltSmNDK1lRVWpxR3YybkM3cTNuQjBET3F2MkczVnZsSWhLSVc4TVJTQlM2eVpUaU5HRlgrUkdDREhzOFBZSWRUamRBVUF5dlFrd1NDcHBoTmQyMG1wdU1qUVhLQlFrV0lqUXBtSlJVS1l4S1hjTERjNmtJZkhhVEthT01TYzRNc1ZSWVEwZXpVNkZMcFZ1UDN0TEh1d3ByWWZ0aGl3aUhGQVdrU3BtV1J0KzZuSjZVMThDdXlKODVqMngwYjBkN045cGlicTBsYjROblUrcE83dEVVTGloZFVPMmhycHRnWVhDc3hCRkEzbFEybm1GYzNGYlJqR0JnQ2Q2QlVIN3FuWEJiYWNqc0s5OVJmSURNQUZrQnNvTytuWmc4UDBCQmdNSUF0UUVhbjlXUUVzOU1BSE5HODU1NHdhK0FybnF2VFRqcEdTN2UvaWxQbWpBUlBtbnN4V2tkQUFSeU9MOXlBaHlteDdTR0tsazdHaDQ4dkR2TmZkZytJVEJacEQ5Z3pnTUlCd3dCazV0bWtFWElxcU1NYUVUZy9IVWUyNm9MVFRwNHc0ZzlVa1o1YmdieEVIdEN5VExZUEhtSlVxM3VKcHF6dlNOY3VtYkJkWFlRc2t1MUM5Mk44alR2REZFVTBydjgxN2dtcXNHalBmUnVOanZlclREbUhDRTRxK3Fiek9qdUlJdlJhRGh6WjEvVkpVcGhoaU9RS0hRd3NaNVRqZ3VBQjhDdUtyK1lJTUtld0lvTU81eHg5ZTRBRUJURFNZcG0yT1R5OG9Jb3lZb2FqZWpVUWI4SndEL1hCNWlTc3dVaWdoQXNSR2hTMENnekp6WE1DVFUxWEVaSGFUQVhUQ1FTaWNYYlk0VkNvUmdMRXhzdGxkQ3R4WjFhVW5sdXRHaHRPUXQxOC9SVWRWcGtEQnZiUzRuRW9ORm9OQnFORmlkWG4wV0pMSkNyVThDVWJxcU1oWkdwbStGOEViQklVYUxGaUtVUmx4S0VFaVZWTFZOeVJncFNwVW12dWdBWmhBR2x5cFNyVUtsS3RicG1BNndyUUxjZXZmcWFFN0RUV3M2WUhtMEUyZGNsaVdXc1dFM25tUzdHNWI2dUdWblBuTnV5eVdiSHd4RGpwV2s2TStqMjBlWU1MUS8wM1ZNbUttNFpuZ2xKU01tNDgrREppemUvS3JkQ2tWTWxLc3lJbW1lWmYwR1F5d0pCRUZ4Qy9yZ2dDSUlnQ0lJejkwYkRFd01UajhmakFVQXhkUzZWc0RjczFnOHdmWUNYck5kOThTSDhnYWprNXZ1VVBxZzRYRFA5Sm03b0dXdkdYeFNkRUxMZnJzRVNFc21XWFRjTTNjTHRIRlNHYlNIQkFqY0NpVUlYSnFIbk1sT0xSQkxhc25VSzJTdXgxenFuTUIvWk1HT3gvelB1OG9oREFEQUFPQUFDQUFtQUFrQURZSGdsQ2tDdUxWQWlTSUtGQ1Awa2hXTktQRlV3YmR5TCtzREJ5ZWdrYUoyV0VNdFdyRTYvNHZwVzdHNmU0bUR3MEJmeFpoRnQ5R3ZmaFBFQW15ZDRjTXRVcXNQbDRheTdHdWFrNXQwTjUyT093SmFCZ1NOSHNrMk5oN3FFV1pZVnE4ZStrc3hqajNFS1NYZzhMTmlsUXFGUXpFMWZ2NXR2cFFRRnRGSW15THRpdlRlV2tRQ2s1WlJlMlFpSjJackxZRFY4Nk1CWVdYNXhBUHVuazF5bnRaMng2YWJOcmlYQXNoV3JjZmtVNjN5L2ovbStnbnpOOEkzWXR4emZDZU9pQVBpN1loMXdCQktGenM3MldybGlmV2IzbitzT21rU2l6WEhUWHBtdkFuT2dlYSs3UzhGMUVIUDhuVTRJbkZZNFE1bVdwM0JBTGxlc2E3Qno0RnVPYkU0RVhSbml5azhodENPaWs4dmxjc1dZSUtyNC9jSE0zWFhJY2N5T0RzQlhIOVIzTklCalVzZDFmaWRqMGlpbkg1cmlaZlVPRFRpRlF1bHplYXg3K2pIWlZ5eGYzOFUzeExkcitVN3U0M0g1OUtlZ0s5NUp2d3Z5cW4zSWd4THlVRzJZNFFna0N2MUJURCtJdkNNUE1nMGxWWVJCblNJUWthSkVpeEZMSXk0bENDVDJobTBzRUFnRUpURHJxYjRnSjJKWW96U1VLVmVoVXBYcWJOclorWmhlamIrNXJIckd6Y2NMUWhKU011NDhlUExpemEvS3pRbk1DRUt3RUtGSllZR3lOeUsxbHRKVS9KNldtRnhVcUxzSW5YU3MzNHM0QUpuVE5QOUpWODFaVzA4YndveHdqTW9HZysxZ1BQeHdBTWVaa0JFRStWc3Vwc3hvOWNXUzVpdm5hU1VwRkpRMVRFYnRleUtqTUFMbFNRaDZSSzNnQ0NRSzNlUVU0amJFQzd1cS9BeUNESHVDQlFUc2NNYlZ1d01VQkJURFE5eVFGTTJ3eVJueUVTeEtzcUpHVTNSaUVEUFhMOURaNUY0SXBBdVNZQ0ZDazhJR1pWTUZDZE9rTHVFMUlLVkZsR2d4WW1uRU5lTkJDVlNKa25KRWorU01GRW1WSnIzcW1ES0l6R2xrU2JiZDlITGsxZngrM2UrVkNwbUtvaGdseVVCVnFreTVDcFdxVktjYVVHM1VsZnBva01iYXhOQXNMVnExYVU5R0lsT2Z2SmxNcHBqSlpESmJSanRhTldrL3J6V29NSUlhTldlc2F1dDAzeU1PMlB4SUk2TUJFOTFxZm9EeXhDU3dnQ09RS0hTVDZRVnVEaDVoRlhscHRyZ01qeUJLc3FJYUwxN0djZGtBNThBOGdDWS8zMlBMYndrbkNRQkFObXRDdzZOb0JyVklxemJ0T1VzV1U0MDVsQ3daMXREeDVwMW83VEVkSkJnU0dMNzc3QkVqbzk0YW85b2p0SzlidjUvaEFNOFJhNDZTamdtZGVMek5ETWhpVUhudTdRbUREQlorSVVGaVRjSm9IY2xJa1NwTittWkdjVGNINUljQnBjcVVSMFdvVktVNjZxWjN1c2VnRjNtbitiRmxyaXE5Qm1tblY3UGI3RzBSdENhc093S1FaRWdoNDg2REp5L2UvSjZKcnoycnZ6MTE4UGs4UHAvUDV5LzlOUEppcjlnSnd5bEtyVXk1Q3BXcVZFZmRWRk50aHJXZ1ZadjJaSVNZZXJlQm9KZEhLZWFlZzBKN1VCZXFSOFNPMWFuM3BGQU1LTHdJdFZTSisrRm1uaUhFc0ZFUVcrcGVrb001SHFmNTBseEJMTHY5ekNNQVpUUFExN245WDVrSEZYN2M2UTJKdmIrS1NJc1NMVVlzamJobXZKRUVXeExISkRYTVNLNUlrVlJwMHF1T0lLT0x6R2xrU2JiZDlITGt5VmVnTUJXNVVLd2tHV3dwVmFaY2hVcFZxcU9tajlwNXFsTlQzLy8xeHNpQVJDS1JTQUJBQlFEQWdFQWdFRjRrY0hQQTR5L2YybTdZR281QW90Q1ZTU0lhVGVWR0ZBQWx4MVJJWlJ2R2M1ajBKSWVvY3h6enBLdGNheWN4STFoU3lWKzYxL0dDd3V6QU1mUU13NkxUS2Q4b3NGQWNyTlZEUEllRnM2TEhGeGxOeXRpZURqYjhHT1FRYmhTSXRqMDJnSWc4T1ZiVWZnRi9HdGthQ3NNTVJ5QlI2RDU1bWNQakxiWWtJOEowd0p3WGYvTTFubzlkalRWZFdocGlENE1qa0NqMEdZWTZrWTFONVE0RUtnVWhXSWpRcE5DamJLb1NDTk9pWG9aYlZGOS96c0xkR1lHZ1ZiTXp3Snd6OCttcVUyc2pZMUJyY2psM2ZHL3NmejZxN29nMlkzNHZmcGRVaGUvQ1oySEg4eUFBL3hROEQzbXlBSUROQVZzQ0FKYlpueGkyY0g1czJjUkp3VmFPbTJXV3N0UEdaeFlaQTFLSVI3bXQzQXpBbXRrRlVJNWlsRGNBbTJRd29qRlhCNnIzSXNCeVZxNWwrdE5hYmN0ckYrUXJBUStsa2lVV3ppSEdLV2M1dTFGVWRNS01obnhpeG5BVTRsa2FBbm8vbmh1U2NFbkhyUTZRRWRvUjJGSVE0R0ZuWUhrZkJnSlR3Tmw0MnJRSDdkVjZJQkt4NEdESVBUU1BBdFlIY3VhL1V6ZVAxZXBaSk5hdE9BU3FGRVFrWUNXU2pLb21jdko0US9sWW1SNmJXaUVXV1ZJRkFOYUlUT1Z3MlpWSHpyNU16Qy8waS9EMWt3RVdWRC96VDliNkRHNjMyaUs0VXFDN1RQMlVOYm5rRVk4NjRYWWlLbFcrQlMzRlVLeEhEUVlvKzhCOXl6MXc0aDA3QmE0UWtrekwwTEdKR0lyclorY05YdUIzUHc2Y2VkcEFNVTZHelJRcURXN250QitjV2lzRnlvM1dDbVFqTDBNbVhvQnFOV1JGSVpJN2dEWGh0U2N0OExwQmZrSHNSUTZYcFZmSVJ2WkJVOHA4NUY0aEg4RUtueG1FWW11K0s2Y1lZM2dRZTErL1R6SkFJUkYxY0t2Tm1uMlEwTThhT1dzWGpUOWp2QkNyNTIxeHF0V1ZJNmFwTHBlaEtjeFp1VzlCV0xKM1FHcWY5SlRpdXZ2VTB3ZGdody84SUJSSVgxVnVOUXlzQnFTdFZOUFhaRHRMK05pdmN3aTFQZ0QvNU8wb3ltMkorNzhvbjByeGdBOU9DbGEwZ04wSkVQSFkvWVA0bmhJYXdiRUoySGxVblI5RGJ6ZldNUEF2eGtydEExNHg2anJBbVlVY2dSZlJsWm5uWXhzMnkrb3dMRHdrUzJWazNkZmpBQVVWSUpld0QwNnR6K0F1dzZwSXF4VGw0ZG1qb0dsWVFYRE1iMzFGSlBzKzY3ajlSTmdzSFlnd3dPY1l0dWZLNlZoQ0xNdWM0TkZUYnY5cEVRakZOak5yMExXQUpCM1hHSG00eDduQlJmWG1IUWhRMGJ6cW1PdFZUbnllUzZ4MUhiQy9hcmovWGUvN3FNT2w3TTBlVW5EUGdoeWlzRjhxSW9GYmhmRWdxeUQ0bzNvMks1UkxyTUpZQ2FDNWdySHd1cEROc1ZvWEZJMys5V1lQYTFsd3ZPcDkxZnZhbkdob21KaXA5N3VwTkhtT0greWIxK2hMSXBkZHIyMVJpQTEzSmliNzlrNnBUQjNkRkFvNzE0cFExeVJaYlRYTXlkQTdtUUU5UkZHaEwvT3hySGpkUm5vMFhkZjl5RWUwblhGZk9lcnpZK0RPM2ZpQldCRk1BbXFGYk9lZ2tBcVhUVm81ZlM2NnlPSVZsTENTZGNwNjh1ZTR5SmVsaFVQdFU2Vm0yam5OQVBxd1dhTm5udjF3N0pQNnhRWmF3U0lQbE9GTUVVR3V6UENCYjJkSlV5Z1k2UTl3cjZKVWpKcjZOWmNiRVl3TC9jeFpmZWM4MkxPc01LNDl4WDYyOFA4TnEzVERFY0lBUFp3d2hMdzU4aFBLazVKU29EQkpnaVRMRVN0UEE1MG03U3FZbU5TeDZGTnYwaVNqVTA0em1UYk5ZczRDcXpmSmZsbUMvWVpKZ05Cd0RBYUJpOGVCSFQ1SEFrNElRa0t1UkVSMmNlSENqU3RYWWhKZU1ONjhFZno0d2Zqekp4RWdnSlNjbkV5Z1VBd2xKWGRoMUp5RUMrY2hnZ1lwVGh4S3ZIaDJFaVJ5bGlTSnAyVHBLRG82VzJUSXNGV21URjZ5NUVEeTVFTUtGUEJXcUJCZmtSSUNCbFZvMWFwUmF0U3lVNmZPVnZYcStXalF3RmVUSm42YXRlTXdNZkZuMGNGZXAwNEJ1blRab2xzM3BFY1B2bDY5a0Q1OStDWk4ydWFVVTRST080MXIyalN1T2ZOMldyQkE2RTB5Wk1rTTRidzVod3NXbkM1YWNyaGt4ZW15Tlpzck50eXUydks0WnNkdHpaN0hPc3dHRXd1aGtSaU03VGc0RUM0ZW5CMW5pSkFRYm91ZEVCR1JIVnlJSVJMZWNENThJWDc4NFB6NVF3SUUyRWxPVHFRUlhIQVExNlU0aEM3Z2dDRUFnMFlBQndvS0RydUVsNitHcWJGTlBMV0dBeERBMisybVVTTk9pQmc3dDBTa1MzMW94ZU1ranJGbjJJSWpKempNU1VoT3Vra29FSlNpanlHZ3gySWEvOVpjMDNiK244K2dxa2dTMjhzNzU2Y2pVcDN6d1RyK1JQZTZTZXJsVWRUNWFldWdlL0FIZ0J6OUY0aW53RThxK0g0T3ZJVzM5RmJlV3J5L0JxTXZ2L0tTdXBpOUhrclZlZkc1WjRJYXZmanlXeStwNHNWWHloZVZUNW54SXEvemJ2YmpvcVhYMVplMGhqMEFZRk1RWnMyQmtBZ0ZJR0Z3eEhZTkI5WGRhbXdyM3M3L0NJZmdZWmlmaFQ5Z2ExMHl3dHpkWlkvaGNuZVRZYS9raXo4S0NCb3JoRlo0ZzFsWEJHR1dLQTc1MkVsSWQ5YUxLNFNGTmRWMzI5Ykc3UklJS1U0R0V2aGpyOExVMXdqQTIzczlCbWdiR2pROTdvVUt3cWlPdnlQWkVSSUNLSXpBNldUcFdRd1Y2b0psZTNWVGxqNVR5UEtPam00TmJ2T2cvVDlHVmZ4TkE5aEZoUURTdy9mUmpwQ0YyVzhPQTY4aUN5VCtmMkgvREc4QzZlK20xeC9JSTg3OU5BMzVyd0FBNjhRV0FZZ2xUVEFzWUFDRXFlTis2bXkzd1lvQTRGK2pOb1djTlM4T2lhalFRUDd5TUZhd0lqUVJnU1VNTEkwUTduMVJBWDZSRjhZS0lJSlVvWjN5Z0MrUTJRb3NDa3RPNWx1TUhHVWFFM2VMZThWajBocXBXQXBJRWFsT2FwRzZyZFcrN3FSQUZjQ2VZaWtBNEJQVHNMaC93VVdmT2J4OVI2VThxZkE0U0tuNWc3WUNYQVNRQ1FCWU4za0EvLzFOMWYvazZTLzBZLzFvQnI3NEdYeHgrMk5mMHUrLzdndnFDL0x6ejBFZjlPUkJxam4xUGdMb1pROGIrMVowYzhnTi9sLzJEV2ZObWZLcFgxMDM3ejJMeG4zbHRCWFRiRTVaOElQdmZHL0dKb1NEeTQ2QU14WTJEZ0VoRVRFSkdTVU1Ub1dncGtjeE1ESjcyNFIzL2VIMThTQ0NTNElreVhReVpNcVNyMENoSXNVTWF0U3AxNkJKTXlNVE00dE9iL25OVzM3eXZ2LzUyT2MrOFlYZi9Uc3UzTExNZVQ5YmRYdDJjTmV2WHZMeWFQakZEVStOZ1JjTnVPQjFyM25ETEJJR1J5TlFHRHhPeWptb1ZJT0xoNitVR0F3QWtvUDh3Sk9PaGhiSkJOVXZocFVOTFpxRFU2SjBLVktseWJPYlhnNnRFaFZLbGFsUzdsdVYyclZvMWNhcVZnZHZuYU1RQ2N1V1hISFY1Y2k0V1VRbVVtVTBNTUFtdGdRc0JTenRGM1JiQkJld0ZJQXc1bDQxaWpjYkJtUXA2eTNBRU50ODJkQWt3anhuejdQNzhWVVVEQi9WbXVBZCt4NTZjUCsrdlh2R1JrZUdoMVlzWDdaMHllakk4T0tiRnkxY01EUTRNSC9lM0RteisvdDZlN3E3T2p2YTIzS3RMZGxNT3BWc2JtcmNnV0EwN1BjZWZlVGhoN3FkZHF2WnVQK3VkRzIxbHNUQVArZno2ZHIxbW9wKzBMSjFURWdnUzZDdXZDNW95QWl1YjAxM1lQTUxiWXpUYk9EQVRYNVlFaVl5Y3BVNUlWY1BmSkRsSitvT3Vkc3ZMT1V5Q0hBMGVwU2hSZDRkdUg0S2dFcE1FT1daR2I1RUZjTWpWSmtCVUJVQlJaa0EyWktOUnNBTjErMTB4Szh0aTVMdnU5Q1FPY1p3eG9idFZKWVNOWVNGSTMvZXp3aUxKZFFFbFZBVnFiRmZWajdHRllLVXdpTDJNOWNTZGdObThMSGNzQUlsdjN0K3BUemlrZ2pTOExobnBSQTR5RHBiTzdCY2VraExJUnR5cnNvM2hPRmJpVTI5RmdtS1k1SjgyeFJkOHF5bHNGV2tFSC9iYW44bG5EdjNaeTVlNERWR2laM09RUkRCRDQ2NFhuV1Rtb0ZEUjUydVhKa3psZnlDUk4wakZVTGVxWlZMTlFFWG1WRWxEb3RaTk9maXpRNFJMYmkwSzNWZlFpdU9LT0VTTUZUdjEzVHZpNkNWeVU3V3hNbUtXM1VidERtbkkxN3lYM0hjbndqZ29mb1U0bWFTVWxMbklQb2Qwdzh5djY2b1dJTWRTaUdQVXYydGdtQTRFZGExMEZybnRRbS9lbHRoZnd1aEFIV0tzK0pzLzN6cXRUeFNmY1pkV3ZNQmtFa28yT1dkNWg4VnhrbDF3UTB0V3FmWHhqbmJYVHdEdzVvbVdaNXFkdkhJRGJLWXh5Zzk3MHBKdnpBejhuMzVPTFJrZlNiZERUcFpnTk05bFFKbTJpVTMvSDBuZ3h2SDI5ZEFlWTJRRFF2eFo0elNocFFiaEFqQm13VmJJN0Y3SXZKN2tpTjFGSkdXTnVBbjB6TUV5UmwwaDJOMTdKQ0tpZ0NQS2Z5OW5ITk90enduSXp3bWd1dlpaL1RNQmNRbEhBZnc1RXhIRHNYR3VGdVNlbzN5Q0puWlJiM1c3VWYzYU5aNzNFWUs3a09TbFZKc3dZWXlKQ3RjR00xR3JqOThjbkhoa0ZtdTdQZE93bjFXelIwaHhUblJVOGFCSm14cUg5d1FJSWMvZlVXQkhqOHFySVNqYk8yaFBXN2xSSWFvREpwS3A2V3JWSGIwb2w1TG5LTHlGajJUSGdteTk2QXBaNi9scTFpTlBZOHZ3REt6NWdzK0UvQ1pJQ1B3Y2FjcWNuUmlyMVJ6UHNuQ2dRVmFnNVVNcktHSjZ5NCt5UFlaSTd5aktUSktTVU40b1VUN0dUZGl4TzBEa2ZjVFVkbWthQnpxUGJpNVNpS2ZKYUpEREtZMVpsMTJ1MVJBT2t3U3A3ekhuNlFrYWlwTkxyNkUwcEhnbUlRME8zeEJuV1N5WTIwY3VIMnpXWXhOUTN3Mm1Gd1A4eGs1Y0tlRHNkVWFrS2xMSE5KRzhzNXh6eWhOdHRFQmlSRE5Rc2NDbDJ2MlpBbjFDaXR4TUVqTE13RzlwMWREdGRxaXdKVE5DZkxTcVJTMEF0VnVxUVBJc1FDUlpJbTh4NjZJTndwVENNSkMydllIck5NV013NVR4SjRWaTRIZ1JSb2tpZ0ZLUFRwbjQ1SllneHFoMGJvcWd1SFA2SWdrUVRLVlBwOUJtQ3R5U09KZDZieUUwbFExZG5rdGxjaUdVbXBRTzl0Qm42QUJSQnZZYmgvb1hhcG5DQzc1R0dJeGw4VytaWk9qb0hVaHU3TkMyNVVKb0xkb3ZDMVZvQWkyRkFYcCtNNE4xRHlBelVVamVTdjV3RzdaYmY5RWNUNmpNYnNKMUJwWS9KdG9sN04wanBRaGdMaGNZZlllVVoyQlhxR1VIODVROFJSdHoyZlFkbnpubGxCMThkQ0RNM0JNMFJWbUxYR1BGVlJqRWRRaExQOURpSnZwTnpvVUF2ZWc5WkFMZklqVFZiNGV0NXZQTTlBVVZDMTFKWUJNeUVwSm9MYXdIVnMzQTBDTkQwY2cyL3huWEpOK0lKVzRBS2YxR1NVYTNWQmN1TXJYbFVZVHVnWm9PelBmV0tSdWM4cVlNbWxPTUt3bDd4MGtLdHN3bGYyWlJzcmoxaGcyeXpxQmFQbEFhTWxrUkM3ekc0V2FIYzhBQnJseTBtRFZnUGhLZzYwS0lHc2xuMUZGUUdvQkhZMVRHdjlLZ0pwM1ZvbzNPQkl1QTQ4NW9yaDBjME5HMkxYNnlTQTlzR2NCYW4yUWhvYmduaUo2RmV0dUtTSFhMcDVlY04xRmkxbzNNZ01tS2R3MElyRmhqODFLaVVMRHZSSkRJNUtTVWxLQUZJS3hWekN1Z1V4WHBHZ1pmQWdQRUU5ME5lekt6cHh2SGJQVFZxMmRPYXE4NDJFTjl1eVR6SzJGWXQrV2RRWkRlNFViZUIxOHN3dmxRVUNpRnJiTCt5QzdXcWx6Wk9VYjJWcFlRWnUxbVBVa1QyWHk3MjZOajBncFVtb0VXSWVyL0ZKa2drZ2JBQUw0RGgvMGxvNUpEQk1DN2tnMER0elBvZ0YwSzdMV0xYUjA2UEVOMG9vSEgxbHVlSmtRRFBJV1U2TVpPNkxhMnNndW5GNTA4QzJsWUdaUGxjeDJYSjF0dVhGYnJlNTFDSVVXU2hiNGZvajZMZ0djbWxnK1VDaVNpeGNIOXJKNlRUSmRBQzI0QXBHYnNhNWhhL05JcitoOUllYVhJQ2ladThDNEpMeldUN2dLWVQ3NjM5K0FBakxscHBkWEFMYm10L3pjZFo4bmZJL3N3WE5iWmR3OW1SMVNPN0lmZ1pLQy80TUN3cEN3NXNEMWo0MHdJdWJkdHBCTmNzVkhtdVVQdmhha3N4TTlGOEJMa3NRMzZNL0JPSkFRdDhUQkJTVWJTb2p3SzMyRVliZVFyenVZR2E5bldGaE9LVGxRQnc5Q0ZqOWpURzRKM05nRHZldUFnMVVPaGI0S0FwOXBIZ2FNSktiMFNsb0w3RG9kSHNManB0WGhrdk9hYW9lMENIakRVNnRrS0NCNDJnWkp6UkRjUG8yeE5lSnJaRHhjWGVWM1YyOEp3azBISmhVMDhMdEdEUU1xS09QM1RHb0FJNlluYkVrUndEUmszTzRraTYxSW5xVDgxMnhLYmlpb0JNR0U1RExwTUtyaU9wb3ZGTHRiSWU5eHFNcS9TVFlzeTBaUUY1eWFaYXZwL2ErSDd1YkRucFNzaUJ3SkZhZ0JNaTd3VldjN1VIcWxtdzNmY0x2dm1uVlJTRllSUUVuZ3huSHZ1eDhRMUNWN0FJQXVBSURkQUgxQStMd2crZ0hnUDRDOVFMZ0JBTmFldk9Ud29xTUhVb05nbVZtRXlESTdMcnhMSERYWEVrN1pBTUk5ek9iR3lDR0RiazZHNVVnblRwUGMzK2paUU1qWUdVeXVOWGcrTS9UaWJJMmNCeGdKd2tiMGJnaTRmWmY1QUJDV1Q3QkRTTThZZVMvSjhubzRJc3hRWWs1MXdaS200NENqdzZwVGZRalhqVUx2OWVqUE9WS0ozUGhTMmlJZnVsQUs2c01MdXpZNU9uL2JIemhaRE4yR2FQaDQ2NlpMVVVaRW1XSjNYUkcrOEErdjVZT09sRklNUkZCNCtMald5dVN1U09lcDNxclBXck5Cb1J2R0RXYmdxY3U5NzE1a1h6MkJFTUZVWlhmaHZMOVVEL091bTY0d3o4MUlrc1NYdlp1SU9xY1lSQ3B0K0RVaWdzdUUzUTdidmc4ejlxRXpmOG1mZUhGbjU1c0pSVXVMWXhRM2ZNSFp1Tzd2aGs4TTA5MVF4TEJaMVNlMmlRTlYwZGpFdUNGVGJueWplYXFOV3REVU9icUplSnNCdW5JUTdQS1dxdkhQUEZ4RVhUTUtSamZBRGMrTTliNzVXaXRLZU4yVFR3UE1iMFBBOXEyRlVVR1NhTGhzbGpEQVVBTU1MZEtZUUhWamN3cGdZS293YVVRQzE2cnJoeEJEUlUvYVpnYkVvVXMrQTEwVHhrc25rU0xqWmF5eVJhK1BoS0tOakJUOExvU3FycUJHaXFHU1JpRjVUQkM3aDUzQ2lvZUY0V0ZNVjF6SzVqRFBvYmpIZ1A1YTlzQkREMWlPODRXY0w5NENvNUVkY0lrSGxOZkp0Zm1tQUV0K0FwMUphdHc3djVMeGJTVTNtZUtDV3MxM2NvZFFVWWxKVnYrOHRtdXJBR29FMW5wTWhaZXhUTG9QTDBrZzdVZXkyTUxFdXZNMHk0NUtsd0dsV3hBaG5IZk5qWmFXTmNNNnJKYk1pbWkwK3N6djlCQnFPdXRmUFZFakhqSWJOZDVwYWFObWJIM0ZMSnZpMXRsT3hOc290ZGlPd1Q5bmVQTzcrZVNHRkZUejBUYWQ5WWRtQS9wSjhxRmE1Z3NmYW9pc3c2MUFudDhPdmorMjQyV0szUlZyK2N5T0NHVFhUWjdacTN5SEpRTFIrcWZ1U2JnUGw0VW9Vbm5GTXFsdUg5QVA4UmlPMWthbHN4ZWVIWG5rdU5JZTkrNjA2emloMXM4T0s4NmVrTXI2cXNCczhydVVxNnhGSDBnVWZWc09ZYW4zV1N0QVJmN0Y1MHY2d2R1S2IwWXYyYnNwMnZDd1NxRmFNQXJySUx2WVYwcXgvVHM2Y0Q5L1Iwdm1iN3ErVWo0UUpESGZMd3FhMUwyWVNhS2U2b2NXWFQ2RWgrVnd1YVJ5SHNwTHRpVU1lZnBKUlVZSXZkT3A1WUYrL01oZ0JCMnBmd0dqa0tjY2Yrd1NJK0JWek9YTEdnMWN4VzREVmY5SE9hYUhpU3MwL1IzZGZTaThoZEZ4WWg3TXdsRi9qeWh3RGFnRi9DZTJ6MGh3d0Y0WDVKYkRzRkp1QXdNME5xdGpzR01EQ1Y2R0sxOWhqVUFEYlJON3lHZGhPaDh1d0hMMzBHenF5bG1jdjdhSWc3UW9selBuTHdyYmpjTnYzNlhLYUZaejRpOFBWSGhlUTNvUXBhcUxKREkzU0RrRVhMSE1DSlRaYVBLeWZRVFVXcjg2cUhjVzZaVGU1b003dmF0TkRYa0ZsY2tVUDZHU1VRaFZXaXRGMlc3MTlmUE9aSGU3ZzhXcjdGbTI0eThoSGtUbVJnVjd2alBSWFBxNGREODBhMGFaZzQzZkJWNXRXdnZJNkFCWU9nZkd1dGk4aS9rcXhRdUxFR29HMW81ZlRtbTZuc1dacmRsdUUyYnIwTGdrZFNoN0YxTVM1cEQwRFpEdzhVaXRXS0ZtdXN4MkgyMXhEL2JtN3h4czhPSDFsaVlKU1Z3NFl1andoeFMzMEJ3MjVCN2FDYkd0Z0haVUxJbTZ1ZWF0eGV5cHJWa3ErbEZuQm1SVkFkMm9VVDVDVjZQTGtYWDRrYUtiZGdUbUZoamVzby9LakM4SW1sZ2JMeXJHSzM4UzdKanF0MUU1YUNNaVhvd2ErVVBneTNiSjU2ZG9ISWd4UFBnYndKcmRXdGxPR0o3TUNOKzA1aTZWN1VtamlqaFNtSS9lb2RYakkyV3hRSGphbWZWT1NQeW5XRHQ1OGJveTh5dkxONHE5M0pocEw1cFdCblJHNmxhYTFwRVY1bS91SUFwUk43UlhuVGpJcm1uQTJzSGtacEdjRzZ5czZaZVdYejZkOG5UVGZ0WmhRT2JhQlhtTFZNVnFaa2dOREZnRGk2WGxUWW05Y1UyV1lqcHpTU0ZBU0J0cXFzU29saVVQS1VmYkFEMStwaWJXWjV5YVl6aS9mbVdzSFJYaWNqLzlOcDBaemZpWnRKMzExMWVkZ2ZBdFg4VyttbXYyNTFkZkV3RkF0cUc4dHoyeUR6TGlEdHZhYmVyVytKcU5iaEN4dFNnck02cTRzbFRKUzQxeGFDcEJHaHBwRHJyaVFRV1Y3TmdkajRGNmhTVWptb0xTQnN0WlRkdmRmaEFZbnJCalVpem0rZ3dWdTh6cWhzV2IzeC9GKzVYRVVEVVRRWFFDeHdkSHh5NXZpNllIbnMyOFVpSmgwbjd4SVdDMzVsMnNHVlFxU0xIZjFDTjdnQ1FLa2VHZ1I4YVRXcVcvQmxmNUtDQVFnVG11TEN4TXpSampMSXNSNFFnM1ZqbzYrYXZYdG1zQ0pvWk1Pa2NiekYxS09IR0Q3Wkd5a2xjV014c2VpRHNTbVV3Q1NSYnhNK09NVllneEtnd3ZSNVpOTUNSNDFPUXVIc3p1UTErYTcrdWYzZ01lUDNHUkdYSE0wR09kYkdoZmY3eklhUkVCK094dlRoMDk4QnMzZi9EQVkzcG9EeXJRVXU2VEVIeVVoNWR0Y2ljK09DaFFGamVGK1JEejR0dnFkRDlGdE9DaUEya2ZJSHZlazJQTFJmdEFPOGR4WXU0ZTBMaXo3V0J5eSt3RHhYNlpHdXJaYWJydXpHeldvTyttQytaRmtuR3NLVHVMek5IQ0pDNUg4Z1V6RnM1M1dyQlZNZ0szSWxPQkZML0JFUVdtOWpUbWNSOFVFazBMSi9RRU1EZmdQSFRaQ3FxV0Yvb0tlZXY0VVI0cUdWVVM1enhCME5meXJRZG5UOHdmZEVhTHRwY2ozSmg0RmEvR1Q2WWM1WnVBaTJEanV3YytJYituT0k3dzZNYXFPK0N2S2EwanphZWY0RHFRb2VVSUFrZGttNXU1blBPN1ptd1R6QUE1VlVmeG91UzJHRkFJTUFoQTFTK2ZZWVZJcFBjWGlGTEZDam1nZU9Fd0FVZERJSHc2MFBncEpORDJPRlJGYndJTUVheGhwS1dXNzJYN2xtdzhPWVdPRncyZFpzbjJkTnY4SnArZkZJNFpobVQ5d1pjWmE5Z1N1QUJUcnU4aHc1azBtZUNqN1NzZTlkS2dnSlBSUmdVc2VVVkhhayt4eDhNUTFGR0RoTXFhdWxtblBMbkF0RFlBQ1M5T1c2SmV4ZTFGKzR3OXZKa3o1VXgrcWdXODVqa3h3enc1d1dBVzVtSFp5ZnpPUmJOTXpDT2M1amRWcGhac1Vwc2UrcEdnUnB4bVo0K1o4OWk5cE8zeHhoZzVSaCsvNGJVQ2pFcGg2ME9QMS9HV1pyV29yaTdhWld1UWkrTFpKd1lwMGJOTWVmWmh3eDQ5OWluNkZKY0FLNERtQUdUSWlGV0p4RFR6d2xIZnpmemF2UVlkNHlZTXlEU1lQQ0xObUpDenVGRmJwbzVFdWlpUVpKbVFsckl6a0V4QkdtS3AyTFRqaWtpUHNLZlB2RjJKZEQ0djFFL3MyZTI2c3hnQ3J1Q0I2TXlaTGJzSVAyVGQ5dW5NN3Jzc3RQMkg2RkJnVWxPQjYwQy96WTRxM1F5MHBybmNBUzdKWk04MTJ5WWRKWkw0NGdJRE51NDYyWVJhVHp5NUhLcTdManhqRk9jYnhhWFpwQjByYlpiVVBUT2IvN3F4a2ZUUE9nWi9kS0tSZ0d6N2JmSXNvUTBEeHYzejk4M0xONFlvdm9hYm1OWjJuak9LSG5aOXNSZFRHakpxeElPWU1pZG5Kd1JaRHBrVDIycHBrZElVTlhGU0JoWEtIR3VCaCtobDMrajViU3IyWE1PN1NCM1ZLYVgyQmpyT01tMTRxK1JzT0dCSHN3WUZOcitrWUx6cUFNMDNuakI5OUdqcWprYUR4TWZPYU5yVzZFOVZNbEJpbFRWeGNXUmlBSmV2L1ArVDRhNE5iWXFFc2tkc1M0YTRyVktMS1FKTkJKUUZiU3JmanRCbU1vRVVLU3ZqZkFsQWxZVGpTMFJoMU5IVXRNV0hXNEZuMzBZVTBJNEk5QVBVOXJ3dHVOK2JlbmxTY3RpRVRSWW00ZzRqN3Q0QUpKR29jZW9rT1JnUU04ejBmSDlOTExhU1FSRThXY0M0RmZrYXNDYlpoWDZrNHNTYkdYTk5MZEl2bVFIT0JHb0dWNHRnTkswczkzeGZBdnJpN2VtTUFoYVVnY0dJeXlmZmVYU3BiSGc5L2Q4bTk1dTgvdCtUdTcvdCs3YTRUeC9zby9lNU5Qd3pzcHZLUnJOVGoxenAvay9iL3pYMm9FLy8vMlNXZStOcXZnbVJkVTBhS2p3Ukl2MTZwRTVGVWVuemIzbzc1QWpnSEVPa0lGOStHWEk5ZkVOWUtIOWNSa1B5cVExR2hQWFMrTExHbm1YMmVHNTlrNVRadXlyRlhNOURtVDdLbDRMbW1SellZTGk1UjJmRGtzS0liZkM1cmt4Z0FEYjZSMnVUZmVvMS9KYUpQNFoydFFidjc1aWJ1Rzl2UWErb00rWGF1aUthSFpzOTFySXlRVytyQm1Jb2d2NFlFemgzMTlmZHQ2ZWdyODY1ZFdWNTY0ckorSlNLK0c3aVUrSWViai9lTHhmSTloRlhPdkV4Y1ZkTkM5NVN4eDBwOUkvYVV6MmFWWXhYdmFxNWE5amltNzJtU2Nic0F6MkxhME9PYnIwdkNROVlIZGhBcExsWGEvV011b3crYy8rcVZ2MER5cU1wWExKbWZFTFg4RWFEYnUxeHYrRVd0SkJ2b29UMGEra1cyT2xtNDJZM0FrUm1EUVlYNlByalpXdjkycEprVUJOaVg2Z28yZExoZThZakVRTzF3eXFjdi9QMmoydWk1SDJQeXl0T2QzSk9BTTd1MUUyMi9GcW5mVVJyZHZiMDRpN29YNE5EcnlmSkxSb3VESTdhbXJ2VnE5dys3YXAwMTRqRkZ4cXhOL2VxVjdyODJhbWFjNzEyNVVDd3VVZFg2K2lsQWlsa3ZzV3VHQWhWcW8yTytWT0srZFdDZlFjWjdTcUMrT3E5L3JyTVBJTXp1TVNhN0tHMkZqTmdpTGNrMy8rbzVWdEROMUZ4RGpScHNpeE0zalp3eXdTa0NzSXJ4QkdsbWV4S091eVhTcXdYMUl3V2pLblVhTlNyeHY3bXpxTnVUbFVVVlpxMDNjbGErdy9MZEJPNlc4NXNVYnRJS0lZVktMNkg3SGhXVXJPcjRDRnFaUER4bSsvV2g1UlBIcVg0TFJOeUlnalBGMGVVbERJVHRIT2VxcmJ1bi9WVGlmVUt3V2lobUlwQW8xNE4vcC9nU3F6ZzdsdWowcjdXS0tONk9DUHhsNFhMQjFCYndLRUd2WXdxeXpVYk83bk5xdnJIbTd0b2ZxQk0wZExuZHF1dmRFTEI4bUI1bjF6UFdPamE1SkFxU0VRclhkQ0gzUERld24yaCt3b0phL1dTd3NZaEs5TWpXc2wwNjdvdDNBRkRzbFhuODdkU2hpUm52dm1hNkJPdjhuUU9tSFVRVFJ3dlhXOS9ENnJRY1MwMlhqMzNEYkkvdnorZlhJYnVTcFZ2VnF2SDFYZk52WHV1bWhnM1ZteStyUWh5alY5eVhuUmEyYjJsTGRhL2pIOGJiYVV0N042YTRQaWxUWmMzbWJsakpib3l6b3Zjb3U4dXovdVBJTkR6ODg0Uk9qNndXMjEwdHlPMG9yRlVvUFhYTlFiazlaSlhHVmtyb0c2Wk15OVhVUExhMHo2clNncWxnWEtsYlZCYnE0MHFjWDkzL3QwUGNadnNrVkpsdE0xT3liaHZLa3l0S09ZTS91VjBzVmdUVWVJQkZXRmcydVVPMERmekY5YldCWHRqRGp2U0lIbFYyODJrbkJsTC9iLzlOanE0d00rTUJndG5FUmVENWx6V1lEUzJHcTB2LzBDYm02UmExM3dINUEvcmt0eWZMZTNZMnM4cTlyeGIvS3VyR0lqbUhIcFEvc2E5RiszRzFqUmxObVlvUXc1WDA4WDJmdnJUUG1LU1pEeGRqTXZVcExKSHBEa2RCYmN4d1JUNkJ4R0NCc1F4MUtydFNUbXNlQUNaQngyd2tWM2pmTFRZMElKNmdraTdLZVFjWHVnTCt1YlFqNVhQYnREb3pCbXpvY3RSYSt6TjJreVF1d1liS1gzbmNvTzBXbGtRc0kvT0NYcmNmYjdQR0hKZnlmNFRQdjhPVmkydHNKeWJZemNiTXJnckJPWEdKUHUvT2htQkVKVWZqZ25pR0M2Sjd3Z0N1R0M4eHlWUkZOa1VuZDVBVnFIM0xIQXk4MXdrMHVSeUpXR2RiOGo3MklDMGxjN05iMnNnZk0yNmVVTzJZZmJ3KzFtS1NtWDBKbFBXWkd3MVVZYjZER2t5WlNsRGVzTnQxYlVYbDBaNW82RWZlNTBBV214c1FkMUJwTU1ZZEE0djlQdURRd0hYaUg5NkNiNXNNZWZTQm9NaFo4U2FNL3EvOUM2YkxDNU5HWTBwS2doWk8vMzJxVDBWVUFZcUhXREdxVmFKaDhUVkg5N04wUm5pa2FwZHlsMm5CSklaVkJxancxQ3JqZ0xhNldBelpuQjNlWUVob3NyTDVBWUlaMmEyY3hybmJML1dSaVVSZmRpMDRNeHMyNlRzRzFPbFl2L1BINGNBaFRvZ0orbWF1RUlsaWUwSUFySkxKTkRtYkhNb0UwcXIvNmlMbkNTajE0ZDhOSDVxYVZXOVFSQXRJb3UweTdOa3R1eEVYT0xVR2M2azIyRDkvVGMycy9qZm5SQWhKSVNoakF1KzZXMjE0RDFRTWZFQmU4bmdJK1FrZWNPbU5ILzcrU21kTVBHZGJpRTB5YXRndjdOdkdyOEtCYkN5SUFsMDJsb2NkRWU2MnV2Y2E3dXMyZGN1eWZLNXlDTDFzdkplZDYyekxyd1M4blI3bmRpaDJSV05CdmhTdDdvcFc0czNLR3Y5SjRJNG44ZlNLQ1B1WHFOQWVhTlJVQ1F2Tm1hVlRCQnVOeGpoTm5jd2l4b01HZFJ6cm04ekd1RDJ6U256WjBZYnVqSldreWxyTS9UWWQ5WWRFb3ltak4zWWJiM3JWcmJ3WEJ6cG9QV0p2QjNVZWM4NzE1KzVzYlhDS1pOcGtDSzQyRGZrYzQyRXdxN1JSWDZmUG8yNW91ZjVpZEdXZXQ4OHAydGtXcUt3aEZnSldITXRSck01WjV5MS82N1QzQ1JSNjFzeFg0elV1Nk1wRkRkbnJJYnVXZ2ZWemFuZjJGdEpLY3NuLzZyTXJTbkthRXphMCtjK0hDcG0rcnovZWNnVFJOKy8vYlZXWXdwM2hhR2MzbTlkTWp0UWh4TisyQ0dJb1NwSmZIc1F3Z1hqdmFSbFAzdEhDQUswK2RPODJwaFFHamVZYzlaOXVPNHVuYXcwVSt1d3BOU09xTFJOYmRYME5EdXNtQThPVlQwbmtEVjlKVkFGNEFGUm5NOHROalRodFNGWlRtOUEybDJCTkthMzVxbjJFeWRJVDJKMExvNzdvVG5Ra3phZC8yc3hFVVNLL3hwQXJicnVsQjFnSmozNWZWR1cyME1XYVZZOVd1Um0zVkl4cmViZjR0cCs1WktPeDVzaFBWTm5KSUV1UDhjVzhZc2NTaDNwYXBKUzlyUjg4UERPTExFR09qY1hFYis1YS8rbFpzbC9oRzlPZ3Z1YnZDZC9jWDJkVGhWS0tBMlY2Z3I1Snh3SThaeEFDRm9wOVd1dWF2TnQybFF6YWFMcUZHcXZHaFRTZ2t1UjhvYitzQllPZS9WZG91OUZGTTk1NnJoUThNT1llRk5BR1hpR2ZHWlVPYnBNbU9WTHZpVDUvbU00Q2JmVHJTNDhqdGk5Zi9uSkNkY3g2UzJ6TlBuSi9MeEh0TmpycWF0ZktES1M1TTF2WjFDdmZmNzY1MlNJVnArZVFib0F2cUFNR1Y2UHI1MzRkUGFOcHM5VTNpYzlUeEtWdG4rOFNBTXpIdGxZdnZ6aHJ5M3ZGNzVYWUhub3EyWExIdjdLL0c3QmU0VTFnNGYvV1ZXL1JpSHhDNzAvejZDT2Z2N2E1enJoL3B6L0pMMUs4d2FyYU9idDFsZjY1QTlDYzErWkkzK1U3d0dtVllUSm9oNlNrajFnMTVjYzJTNTVkOC9Md3VMWVBPQWVFSUFJQk00Z0w3b1dxMkwveVRjT3JQTGU1WUxVOE03Tzd0cytmQnNtVnZKOWNOVlVFWG5xNkNuU2dEc3JFUFdSUnNEWk1Kc24rK2FGVzZLWWhyR1U1Mm9TNVJnYTV2bVZGUXVWQzhzaGVZVlpGakFaMUZ2ajlRbkhIOUxYZUt5KzlpY1RFeXk2aTVXemVodWgrK3E3MXh4N0ZsSHRYTVNFSjZaaGhlU1E1RDV6L1VVVmk1U0xYSWxkdU95K3hFZk1DNUQwc1F6cHJpWFU5UmFuL1RPSnFrRXRXSGUyektOeWVpSis1bzdpMFZWWTI2enBYd0NseGNmU1pEOUM3NTEvcGN5WU12QzE0ekxKVmV4VVJoL1g0blZxVXBVSVhMZHJzQXVwVnRWdGZ1d1pyOWdMTVBJaVJNc1ZqcTlnYUp6R3JWSkNTY2Vtd1lqZlB4QUJubFRxUUZRZGpJNUhOb2UxQzVPMDFaS2lnWVdCTFlCZExOWWsvWmRleFJvVjRTQjJmTHcxYzBYQ0l2bXpxMHFyeUZLQlNqaVRrZm9ZWnZUbzd3c3JBTUhaZnpSQTU5WWpCWlc2UDEwK3ZzcGVqK0VlQlpyWjh1ZWQwODU2eXNDNUJEZncrMWN1RW9wb3JhWlVsOVlWR25Mc2pSQlpFeFBOSmdLQjFzWm1IbDZUYUF6WThHMWVHV0ZORzZLQ2MrUDFJbzB0cTlMSEtZWFVmWncvZjhXUk5ONzNCZmg1a2tnZXFmOFpXUzJZdmtzM0VqN3BmcWk3MW01b0pNZ0dJNlZOMU9GNk1vMi9yNGx1YmxBVFJ0NnBCa0JOOTVudFhZekgyVC9Qek1WK1llaTU4NXh1VFQxWVMvODJWN2VuTlZacmEzVlM2T0dCZ0MreXNJVitZM2VLWHIzQUUvQU8wczc1bDlZWTBwU0xHcWxVQmtpb0RSL3hWRHF0NTcvQTNhaysxVGR1THVHOWFXZlNBeHFYYjQ3UmxqV3E4WUNiREFtM1lCQUdPNitIT1FwNW1ITWRwakVZdTFONEQ2TlhCUGdJdG9saEErb21oY21uUmRCUk53c2dtdVVtZis4eUZJMklFSGxZYkcxWk1RekIwTERrTndIa0U3VFc0Znp1M0MweGh6VjNiMmw2MVpBbjZCbVNLZUZhS1NNSUdLbGtlQTl4NjRxOStYTmR2bjVvbVkyV3J3ejE5ZGN5L3RtTWZ3NjAzT0tVcndqMXpxNVY5M0FrODZ5WlJxUEZsclJZY3FJNXBQRzhqejNUYkRUVldDMnR2KzhxRnFzSUk3R2haeXMrK1QxTFhUUDN5NC96eUxjYWJUN043ZEFFM2RUdGliak1venlrVm9LZUFHWTJ4cUc2czJLSWU3UkphZzNrVE9vTVpjRDhiblZFSnFZRjRWckhhNkw3aVRKcGtiTVhjMFRxT0d6S25WR2FEVTJJMW9XcHpVd2Y1QU5WWU0rZ215RTA3Z1JNTWgwV0lzWnlVVW1oaHVuWFdaTW01ZisvSGJ2czA4bURLck9yY2E1YXNHNWlEajdhSmJZNDBYbk9zRVpjVXF3YkR2L2xmckRiVWRXcHlYcUhhdGN4YlhUVFRnYmVKNzhlWEY1bjN6eUxaUEZ2ck9EZ25oT0JwL3ZIVGFXTFdoSDZUZG44M2ZSN3N0RXkvWDV2N3NyUUsxWFh2RjJOYVlQUk5xUnFEQmk0MGYvbjZ4UWwrTDVRN1laKzQzcGtFTjlUekFDWW1vR3VjVHhTaU9jdFlvQTNKaEJaeUtYVndqdWN2Qm81R0hScTFjaUtPTC9zdWdUNENHaG0rZ3c3SzhFS3h6dlN2UDR4QjlZSm1XVTdKeTgrSXBVNkRFQTEvNjRSUGMwSU5UNjNTeU1aR3dQdjM4ZVBzNjRDN0ZjTGF4dTBxYzZxNnQwUTZWRUNjRUxKY0tWYzJndUNJSTJxbFo5K3Uvbloxd2NsR0NOb2t3REh4cjRlUnFTSHZYenUxT3lmcEgvL3o3OWhCc3l6VDI5OWJWVTRkaGwxaVljUjVFbXZCTk5FbE5JMUFsb3ExekVVSmxGNlJOTE4wd0Q4OExmdjdwMCtDYjRPYkplcTJYTld3MXU5b0FvTklwL21KWHdwSy96bWg5MzVQZ1FQWlJhTlJOSk5QcFVmdk9mZU9ObGRoRkFvMmdxQVc4VkNRZGxXRjI3M0RaRDZhWk55Vm02TzdGbGZEYXJ5aXJ2RThtZlEzeTVMcEhmUkhBQzRlSmRFOHV2TXJUWGFHcVpESk9yVTgyc2FGd2pFWGZEcGp6Z2xVNGcvZFFNNEo2YTA0anovMVVMY2orVGYvTkZUaU5XWHl1djlIVUF3M0F2ZUJTTUgvQ0R1eXpTSFI5TUxmUStCVzhzRVF0RTJFRmdtRkFxSnBkWGZoL1N5ODNXT2V5ZTVMRmlIZ0tFcEozaGwvN1dCYjRGMXJsNU9Xd1hJUGpLWkJ4MXhvWEMxODl3ZHZ4L2l6dUZkWGpxQ1BJMVBWRjhDT0s5Nmo0ZE1kamtCZEtyaXRTSFU3bmdKM2QvM2Y3ei9KMWs4RXpUM3p4U05CYXBoK2I2eTFUVzByRnFNS29kYysxUzFGSDB5THFEQ0F2RHB2TGcvYlVFcXRmRmZwNnB4cHRsTCtLQ0RUc0IxMXgySmw0bzRMMXl2S2NtOVV1TVZZTWN2NlpRY2t1OVdPdXVPc2t1cmIrNGNQcFZQbnQvMTRac2JTQ2RPQmVVWTVnTzNBVWU2MFNMdncrQlNzYXBheXJlRUowcHNaZi8zV2hPZkZIem83b04renp6di8zbDhqTVZwcnN5OHdFbFdaU3FPNklSTWR1WGtUNDlJcFdvS3FDNitxMEd2Y1FrMUhzYWxrVHd4ZHNONzZ2aEhySXZBUDJZUlhaTGlOTDhySHNYZkxKbFMzTVd3dHpIY3ZEY2czK2ZtYm05VDl2NWJIMzljM0RqK3pMamwyZkVTMTZWdXZMdW9vSkRYMDhQajlDem1jVy91NWZCNnU0dGNoeHV4UnZSenl4VnQ4YkpvVmJPdW1SVXRZeHJ4eG5ETXcyRXp2TngzNTNUbnlPOTZkRDNzVy84bCs1eldiSjNzS1YzODJYTHl5dzNLVzNSZjRQb3ZQazIzTXFSY292dHl2WHluNWlOYys5R25pOERDeVdzQzlpa2pITlRlU3pNZmZGTmY3Y3djQ3ZFZWZOWkxlOGdsaG1GRzRQaWI0anROQ1JFS3VibnpKVjQxdW1tRC84Rk1XeitGdnRHQmQzQzBwdkpkMDRjelJUV2ErNWh4RVpkQTh4ZkZjNXJqSXV4ZEEreDR6N0xjeTgvMkNBNnBEZ0dIOEVQbG5wckRxc096dkljYjhVWkZYcTVtTjF3ZDVTTGpuNCtiUHhzdmNhcUlOVVJSby96VzJUYTlwWGpkdjlmM0ZrdU5XS3pvendxZ3FyeFNVWGFtZVFhWHBTeU1ZV1c2bDdCWW9aTEZuZUg3cjB3aG02b0NLbTdNaUdGR2FmSDZmMjdzS1dhWHBlVWwzUmoxQW9XVk5HT0dGd3hZZDBsSlFMSW4vcnF4dFRPbVNzSmQzQjUxaEJtenBSb1AyVmJJVmhSOW1yUkxWOWhYM050b1RURmpFVFduQituQ2s3bE9VMnZzOVNMWFplSWlrVHFmYUphZXZ3SkZ4YmxEcXZkM3ZyOURkVzcvKzZKRkFQci92MDdyMlE2alFmVFFlNkx6V1BQQmpnK3VkLzRRaEh3ZE52VWZkS1BzdG14WnRpcXJ5N0t5Z2E4WXh5c29iVjlHcXR0ajRDdGd0Yk9Hdml2cnFNN29NNnlPc2x0NVpaaC9rc3FxaHdmQUJyVTlKRXRyM0tiRmZSRlA0YzJTbTRQNTdmU3VxV1ZSN04vWFJTNXVjR25wcng1VHZRQ2UvOFVvUmVUcUhNakxEOFlyL3VhRzVIc251eDZSQVk5MmVieFBlTDNUelJLSldlNzNEdnM5SFk4Q3dPNE9yM3ZZNjJtbnBlYnBiczhkbXM4VXNYRVlub0NjY2dWRWo4UFFWNUNyQktyVUxJSUtsdTQ2ZTJjQnlJT1c2eVpiQ3JaaC9UOTFRNzY2UWRUcWNKV2JPaW82WDBKKzFGOWQzSUdvTzNRa0IxVWhJckxOdEpUMS9kZi82dGQ5UC9uOTA2K1hGY2twQndQbU9vVE82SFUrWEdjSWpId095TFJESHFXbkVDMHcrdWZKMUpLZ2dwRXdjalVSanVFYWZkYjB5ZjlMSWxvVVhNQ0R3TDhWTG5GWUM4VFU3cVZWK2lyUnJ5L3hXUytOTGQwMVJ5QkNVVEd2OTJiNVhWMUpaUDUvTlR2Z0hVZDFSN2ZEMjRXZkRpQ3BNMjNtMTNOeEptS3g5dWtycmxoRjd6QzZacnQ4KzFyZnRlMjRWZTRpOUhhMGFOVUoreFhMQi9XZlpmRXJ5cGN0WDdIaUh6OWw1TkxtQko3QVRIRThmdkl3ZGp2R2QzK0NZQWphVGtrbDMvejN3QlZqOHZNbXp2REFWYmFzQWdLRzFPZkFqSW1KMldFUFpzRk0ySVpiNUxkc1NMKzdCTXo1d3J2TjZScXhTRlRELytXN0FpRC9Udk9JV0pyOWs4dDU1WGgrMWFYMlU2cW5seE16RzJhUWNMdnpHWGFmdDBvT2NGV3ZFVjJacVFyQnREVU80RExLdkQ4ZkppVXZQK2Z0aEFma2lnR1FpbE5BanRCVVlxWDQvNmVGa3MrdUMwWEh6cWRLVzA3eU5rSlR6bnUyKy9SRzZESGdlbGFibTN6OWJVZDVYenE0MnRqWlk5cFNYeGtzZC83bWxzdG1IdkcrTzZYVWUySUJNemxTejhWeFQ4VUZraDJlUXlKKzN0Zi9HMkpDbGVIc2J6UDkwQmJSbkNhdTlBbXVjNlpQR0NSWHBIUERsTmM5U21ZejFQS1FuMXllYmgyaHZNcFF0ZmJJd3JwcU5MVEcxTmxsMmh4dnNHM3FhVjlMYmF3NStkYkdhdlFwTjFzSE95dTJ3SkxmNVZLK1VPbnBIVDJvb3h2NHFNb2RWV2dKSDdCTmdaSGVPdnRmZC9zdEtJTnJjblZTek54Q3VwUFFrQVAzNHlzVG5RTm10N1ZiWmErM1VOcFlnajVaSGpCc2tLSzBRUXR0enhkWFhweDhkY09EcnRKdkIzWXRYMzlHNmYxVFpZL2JWZlpFL29pSjdzVURMbHQ5dC9LWkRjMTVyL2RrZXVNYjR1Q3VWNDlaRVF5a24yUllNdG05UlFOL2wzV0dBQlhrRkw2SW9IZjhuNmR2QWtoR0x5aDdiZWd2aGM0VVNDb0ljUG5lcWFlWFh2Z2d3QWVkd3Qyd0k2NDVEWG5LMTIxSGhZQnlqVkswNk5LNC80OGFMdm9YVXkydDRTcGUva1Yyei9UWVdxcWozYkEyR2pHczdXamJvN0hZT21yV29DVVNQYk4ydUNWUnNXK0VTRFhyUnZ4K2NpU1pHdFg0ZmI1UktxVWQ5bm50VkJwKzlJeDBZbkVKYlVVYUtXVk5IY1hVSzh5MW5aUjdpbzlETFB5ZlBTeVhUQ1Z4MTc0bnFsbDQ5b2tiM2F3SUxLaHVQYUxXUFhYTnV6dTkydUhFT2FKNCtlajV2YStOcUY1RHhtUTBLSHR5eGpuajA2cDVCOWE5NGYzYXA2by9NVlVhdmYweldQSkE3aEo4S1llYzVlV1RBdmhNNmtWSjhzVXppSURNdktYVWI1QitKSlc1dDlKUm1mUW9UaCt0Wm4xNG9vcDF0TEd0ZUdaN1U5TzBtYzVseWRXYkF6WVhiZHgycCtwTy9DOHpTUVZHak8vQjN0bEQ3Tzg4M0ZrMk5xVldIcHBwV3BuRWsxbi9tcFpvVjZhSmRKSG1PN085UVZKU3YwaHRhN0NVNEp0eWNiZ3QvbWxEcmY0VVo4RVBnS1VnL0NjSS9nR0RKZldON0VrZSt3U2I5VHVYTjFrbTNDQmVDN0k1bnQ0Q29EQWxtaTRRMUROOFFYZHZBVmc0MjA3eDlmZkJJcmlvL3JzL0sxeGFWNlJzOXhzN1h6a29TQzNqUXltQm9BbmMwZk1HcEJoaHByUGV0dng5cnJkWHN6bWU0UUtnc0o4WVByMGFhYnVucWdBeE1RVFFEditOUGN3eGoyT3lNNmR1LzNmbm1qL0d2MTFrUFFJQmZOQmNDd0tUdzNVZ1M1d0ZyQUFkUnhWd1JnVzhxUUl1aDF0SEtsT2tyOXJZeTE4ZmFvd2lXMnNnNjdZR0wxakpaTUpVd29jcTRUdVZ5QjIvN1FLSzdYUWJvUEd3QnFMV1FEN1dRTDdYUUg2ellRMElJMzdvNisyZ2FBSDcxMjNkMzdjL1BEZGNLMElBaC91YkVYSzNDV3dIcDJFeVBPeWJIOXJZbWYwQjJQc2hBUE1zU0habWNldjRGc2Z1eGYzOXhmMnpWLy83RDRzWGtiZ1podGw4cXdZT3FJRUgxR0NmKzhFZkw5TnFNNStHelZmMm4yLytNRWUwbVVldFpjQmUvU0hvY2tZY2NKNzRCcng2ZFJnQW9EMDRCMDcwcWNob3pZTGtXb2I2NWE1djhtZVdKbW9tQUdwd21QSWZRQmdXNU84V2FqQUh2bzFkdi95aTQ4YjdiZndUUFozc3hBR3YvYWVvWVFBZ3ZsOUtFd0RzNlI2NDBmdjF3Ykh4UzlIK1Q5ODlyU3JOYnEzbk5MMWZIbHdBK0VSRE9JQWZoMXprd1JWSFdndVBUbUVmV0svLzNYdE43MGNlenFYYlJILy9zNkQzYjMrUXN6enNsTkprNzdkOUd4bHNUQ0hweHpJOHUrL1Q3Nzg0UXRXOHNvSDNRK2pKQkhDUjhrcjRSeUErZjZ1RE16NE1jallQOTdTaHY5SENucDhLZjNpR1VndmJnL2REdU5EeFNhSUFLTVQvMjFjWjhLRDhETDN4dVRoRmNXMmk0cDlWN2hYTFcwQlZIMXlIbDR0N1BMMi9sUXVvdXpoWDc0cndodjBha2JLbnA4OTdQTk83Rkh6am9pdVdsRk5lcytQL3NCYlAvMktuSGR6OHVtdnJQWlN4RmJMaXdWeHlEVW94cFJrM2wrLzh6TWVQaDVSMUdBY0E3c3JWKzQvcEFtSlgyNVZzaTRndkF3cXhXRFRhRUZKdXlEUTJFY25XWHFsS29wS3B1YW5SQURUQWhaTzA3WFpiS2prYmxuV3A3UjNZYUFOVFBiNHBHVGR6dVVPcWRZMVdpZThtRDNqb2NUMDZVeXdRQVVsQTIwWUJvS0psWFJBSkRNbE5rTVo3eVNvdFpFUWpRSS9FVWNsV2xkV09YVlJtQ2xlT2dyWVdWSTFCTDdtYis3MmUwZE5yc0wwQzRkWnMzb0VLaGF4dU5zbkJFYkZ4TWtTRVIrK1pqTFpIWWhKVlYzbXhveVZSYVVUMHFqb3ZyZWdjVmRSc1hqa21hRkZ0RWVKbGplUUZWUXBtVTA0UWNiQ0hqQXoxaVVJYXd2bE9Ya082TFI2a1hlb21YTW9qWlJOVjNmcXF4MzdIaDdmVWVnRFZDMStacUV3bHE2NjN6Y3k5M3E1NzQrcXVBcjB0dEJVcWYrSnRqRmlwYzBCYSt5bDVhOGNtN1l6TnJLTkErSVFGTzNwZjFmclZiZTFEU3BoTldSdG9IZUpOaGZzWFJlZXhxdnNGcVNmVTc1NkUxaXlyc25CWld4cFlhR1ltSVJLdldTN3o3T2cvN2k0Z2RtNEpEYVJjbWhqcksxTTZOL1JhY21PSmhHaGw5WTA0SEt4a2paL2NHdktDbkFydGR1d0lkSzFJUmloV3Rzdm9iNUhZV1ZhaENMNTdpWlpTOVNVcStEVEg4OTF1QUlqeWxWZW5OYTF0U2lHYkhTbjJ6WGxucDh1cWQ3bnFtUG1uQ3dYbXgyMVg4dVBIeHpnZkVJdEV5NTl0dDkrdXY3TFhkbFBveTVsNjcxbDRNQUoxbzVXb0tJRjJGKzZYWjFUdDYyTE41Z3V4V1dXbEV0TWt4UGZkdk54RnJZZ1IxMjFSbDJ2YXNvRDhlZzYzc0Y0dFE3bFFlR3hiUGVMTUNUaXFyMXdETCt2U0pmVjIrNk1YZlc5Y0VNUEswTC84N2tFaThZMnJiOVZEdCtQOUd5THY1Y0JXSjFvdTdjS2RFeFdlcjhqUDR3dkRTcyt6NkJ1UGFHS09ML0NtbGlTYTRieWlMdWcrbVJCUlJmQkFON0dTWjAyQzRYSDhlcGRXci9DQjhnYlVaVXBlU3M1eE5RRElPWVZBMUVtSWVpS1hXS1pSQTFWR1RDVHhvbU9vZ09qUURjZlgrejFybE95aG5Vd3RFUFppUURTbFNRMFhIT1Y1c2k5ZTZaM3E2OUJudEMyKzZ2UG9QdkMrNCswVmJUdDQvMS84d1hJeEc0Nm1FNHduMEhpMy9YQVFwaUxnQUZaZzBMajVLSCsxWEJySFFucGhUWjB2KzNPaklwKzZiMGdzNnVvU0U3cVZ3anUzdGVoOUo5Qk9YYy9Dd0R5Ly9hVW1GcWxGTE1tSDVsVTFSOWhSVXc0U2FJMzBxRkhXQW5tbVNscW8rYXR1RzRYc3NTMTV6ZjFTc3lsNWJaM2I0cEZYODdheUFjZG1jWit6b2VoenpvWEVkYVFTWmtvb0x2bVY0TG16dXg2dkV3VzdSVkNFdFd0M2RBVUszZkZpWjFhZGk2Vk9RWGNoNm16R3p6Mmh6amZNS1FxVGppajJ1MmFwamlUUHJhUkdKNzdhTmpUcGNkNmdQSkJXQVA5WHRhcGNXUDl4K2pMOGpkUFB6YS93cWlOdWZEQXc2M2JYS2tscm1zQWUrUVU4SmZ5ZkEydnFGK1JQM1luMTNlaGg1K3U1SHJiTVJJWXc5UEx0b1g4d09ZRzFrWGVDNGVhOVowMk0zYU1hdW56OWNueWF2WHI3TEVRUEhxK3FwaGlKSHkwSmdKZ0F5c3pvbXozVGxsWUJDZGJJdlJPY1VlTGdOWkx0TE9wRnByWDA0V0tPZ1Y1QWxpdzlleDJiTTJ3Zm5ZK25Odk1WL2l2dS9oT3p4RkhWYmxKRFdhTko2U1JsdVZHOXNWcTB4clZFWFRmVUtCdU1xNmdQUVhkVXMxSXlWdFN3Sld4dmhkK2luWFE5SUM1S2h4SExNdDRmbkpvc3V0WU10cVhBTEJ2blFGUUJtSE9XZGxWcitEVFB4bElnZDJHTXE4bGhQNDhSRFhPdUVRTVppODkrWWljU2t0Z0pJTG5tTGg0T2gwTzBlTXF6ZG85YnlvZndtTzM3dWhQckpJZGNMNzJzRTV4OHpxaW9WWW1reFZGRmE1L2JsYW8zQUtnaC9rRU9BbVB1eDViRE5PUXExYklLd1VtSmhpWUhDM0NjbVpMdmtXRlZrUTVaZWpuRTljQi9zQ0lpNGxVMGtZNmV0UlVOYVh1b1FMeXRKME5veTJvTUNnckxpSkNkUVIzREJPZit5eFVDanZMZlFGYkVlYS9UbDcyU3VOT3VwbFQrbkJ0YVdncmx5ek5jUk94c2JYL1RGZEp5LzJneFBhM29VMkdwWWJDaEwydjVIMmF5SU5XTlFML3ptS3pZcVVDc3JWMmFzcmVYUkw3L2NsNGFUNjdTTVRBeEVmSkx3aE9oTmhYT0p1L3Awd04vdkNWTXFDenhPamZONWVMUkxPQ0tJYytNcjF4ZTZmQXdiRnNXNEw0YzI3bSthdG9BZEFUYnBsL04zUkpnYkIwbmZNMjZMZnVLa1BSc0RTRUEwVk1UamREWFk3SjRmNzgrWUYvUDQrc2hWK2hjbFpUR2Z5UFRtOTB1VktQUmNCaHV0SzVDS1dZZTlwZ2E4Y3VDcVJqaGNNbzV4Tmg0UWNZNkpSM2FrNVk0MW01U1JCNFdGRlV0c2lxQVVqVVNNQlo2N1BjTUlkQk1hMmljRko3VTdqMVdzZjFPYXlHY3F6RXpDM2lBV1VhNUNqV2FjM2l2MDdDU0pSSW1HRlBiaWQzT3I1V0N3TGYyKzRKMkxzYlUyVUZoVlN3VHJGcUR6SWM0Q21CTmpKRFdsVmJUYURRYTRtWWtYcGRza3lKM2RUVWVUMXhHdGxUSUp1Rk1PR25oT2xIS2toTkVHaEp6OUJsK2pBbERNQ29EUW1xWnpCV3lVVlNJUEhWYzYyUURaZzlQSE53RlpUREVrSWtsbWdRaVlMQlFrRDRIWTlWb3JLdGFBb1NMS0FGcE5jWlVTaG13SU8yc2xSV1ROaldtVmxCOGY0UlJ2dUZleHdvcVExWmtCYXZqaHVKaTNnb2R5ZkRKS3dMekFGRHZvaGFXaERSaUo5MmpUb3duOTM2dHV3VGkzSmxZbE10d09DeXQxNXZGMWFCbEFtWkE4Mm90T2RJR0N4MFdRSm9PeDYvM1kxblpvZmZubERsbzNiL0g5cjBTSURMbXdZT3VKYzlkYWYydFdSS0FMYTNEVjlwQkdMdG1idmEzcEM0YUo2MFI2WHFiR2E3UisvZVQvZDVRcW4rbzhvZFk5V0MrcHV5VjAxaGlDSHdjbzI0VXBWRjFIUjBTbXYxNEljcVVzTkJqcFlyYVhvcEJGNUphaDZjcU9rL0phRlhtcDhsazBKYU1naENrRkJ2UURQenJGcFF1QU9Jc2FZMnY5Mll3cDEwZ05GRXBjcmRoN3RhZU1MUnRUTWt4R3lVeFNWVmdGU21YWmFOUHN4c1krSVpwOEpHa3hwT2JBRjlOZDBhVzBQUHducnI4SGpDYkJDdDdwY3JkTnkrSDI4bTZRK3BYajQ4K1VNSEtDMkZOajJRM2VmKzNhUnFIdVJEK21iLzVTZWZ3OTRNYU1MQ2ZHVlpaQ1NmNlM0K0plL1BoQitTbUsxSmZPRFU2RTFaVXE1TXQ2dldjOXphT1U5VmxrZ3ZxNUl6aGVYcUxoWTNwOWRNUDc1by8vY1hoTEdlZkhlemFLODh6SlYxZjgvNTVpNnI2OWVRZlpYRDMxbDc0cE9iamVyUFpmUmszYzRmeC9MVXhlWWd0Yk03dXcvMXFvZTl6YllucCtUeU1CN2RXMDkvQmR5ekticXRlS0hrc0dseVFVRmJLeGQ3Tk5keGRFa1pBQUJBOGlsTVBHenZSU2dHQkVEellNWG5uVUZ6UlRIVVNnTlo3VlVUNmtlQWUyNXBxZjlRWDFmODRzV0RpSTlQSEViVTRaV3RMWUxQRVQ2VjBRTm05ZWw5aTBMUTlIZTk0UXZDbHVuSUVHaVJjUm1wUG1aUXBEUW5tRjZraEFBUHh2eDkvMzMvLzk4TEgvMXRTTktJZkFNQmErdzhaNUFGOFBHLzlzNkluK2U1c0RnR2dZQUFBRU1DL0g4Z2p0NnZyLzBhOVU3N1hYMEJvS0JWQ2VvN2czWVNOdDZ2VlE2V2Q0bi93bGVxOVFsWk5abTFJenkvMnl1Y0wvQW9JUnk0RHBmdU1RMzJ3Sk1yUDZDTFBVRGZoNnVlQmxscmhSZkFiOElONVc1ZVNWY2FwTytyYVBpK3hienJmWGF6bzdPZDgvN0xZMVE2Zy81NmwwcGVaQkFxby9yNHQ0Rjh5MytoaUNHZTRua0FqMCtYV1Vna3UvbXljZlYydnhFMFpEdnE3VCthVXRoT1V6VmY5T0pBVldBbUFyeTV2d0Q0bnpTT2ZlWTJkcFV0dDIrYUFmWjZxZDBObExzYzQrNGs0SldGdmY5UVRxdnRHTGVSalpoT0M5eFo1MWNMM3NJRDlRNVVqWmR1eDJ3V3FrS3B0RkdVSUxabEhMd3JaSVQ3RlVKY2lwQkQ4ZktFOXUrOC80aTBYOHR2YnZPWUUzQkNQamJIbEhqdG1JdGt4dmlzaTJvRXVmSnkwSVFZTnpEMjZvOCtLMGJGc2w0dlkvdUlKUUhZb2VOOCtXUVE2ZHdKUFMxaUp3ayt6MkZTMnB5ZTZyYzB0YlQzQjgxTGZoMlM3aGhmVW1yRnlMcTBFb21pSWI1MytZS1ZlNzVMTWRBd0RrSnNDYy8wU0NzVHN4VStZV20vS2V1ZksrV2pjc0Y3WlpGemJoVEVqM3BuNXl4VXRENVZXRHNzdWVDdGljL0MyTWRmSTU3ekk5cjJRSHVOU2ZMMjhKeWx6NWRrN0VuSVJQMHZ0WHd4dk8yRHJNdmFyeEdKRXE1WFhMTCtMRjlSeHdlbElkaE54MGJUSHRKb1JQUktVVGlueWxaSUU0RTlYbmFVVFFEZ294QjJNQXBBblNrTks1Sjd1NFN2QnRuTy9zbWUvM3QwMEF1YkovTUhmUitrOFpFY0Z5Z01BQk5DUWZyUTJGSXdEdFRzQitoOGNnOE1CQ0l6RG9TWUhBSmJCdHdiRTNYc2M2OTIvTk9EVXJqWWxHa2c3RjlKQWtVN1hJS0JZVzRNRDNwN2R6OUhNTXJzQ0FyQXI3MEkrZm9hYzNWZVE4TFg1UklKMlJqM01HdFZyWUNWRzB0QTZLTld3b2RyZU9wVmEvbmpYVTZ5SFdKeFp1eWJKNnU2Z1U0ZDR3MTdhekVKTW9WOHI0d0QreWtya29FWjkxRlpxNUhMeDlpWG9BdzgrSERBSU0ycHFXWER3em9mWFBOd2JzZzJmUis5azZ5S0ZnTHNISmtYOFFwZm1qVmNkWW1GU2dOeGVyMk9aWWdvRURaS0I5WDFtc21SS0VubHJJRFFOUVBsQVVEWXVsU2ZHV01jeGVJZWZlcU1JNnZCQzFheHc0OTV2SWJmd0JXSHd4VlV2VUl5V2p0VHdXMVRnK2NaVERiMTlqYXJwK2ZWVkVncDVmWDdzNDBLOE5qbnFyam4wdFkyMUZkTWI3WW9waVUxeFZXS1ZQeWF4eUtjazVsUk5pRzJFYlJ2Z1Vpa29UZzkxU1hTZ2JCSmNiUzB3YTZRQnBpUnFtVTFJcGFva0tpNVdNWkdOaXJwR1N1R1VSQ1pRcFRXcWhLK0tlYXFJcXdvNThRS2FQNVhoMGRGV2thbHhjRnZZL1BXM1FycjZ3OWRjMTNhbEptMjdyaXZ0Mmx3VmhWNUZJbHBrcGFvQkVWWjVZVmF4RUZYYUJOYS90cGpmeGRaZXp1dHcrRGMrSVAvSi80eXk0TnpncmdiSXdYMEVHYlZDWmFXd2xyU1NjajZPL0UwK0lCRmgwZDBpKzQ1djM3ZG1OWlhLOVRYd0d2OE1mUGJldEN4NlhMK0FwQ2xEVy9Iak5pSys3dnJxMVNzNDIxMjhiYkcvTXZpTWM1R281SmMzS21kZFoyOG83RVU3VnJDR0JQWjROdEw4OS90bFhGMGJJWW1OSXdCQkFRPT0pIGZvcm1hdChcXFwid29mZjJcXFwiKTt1bmljb2RlLXJhbmdlOnUrMDA/Pyx1KzAxMzEsdSswMTUyLTAxNTMsdSswMmJiLTAyYmMsdSswMmM2LHUrMDJkYSx1KzAyZGMsdSsyMDAwLTIwNmYsdSsyMDc0LHUrMjBhYyx1KzIxMjIsdSsyMTkxLHUrMjE5Myx1KzIyMTIsdSsyMjE1LHUrZmVmZix1K2ZmZmR9QGZvbnQtZmFjZXtmb250LWRpc3BsYXk6c3dhcDtmb250LWZhbWlseTpRdWlja3NhbmQ7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQURJMEFCQUFBQUFBZFhBQUFESFRBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdsd2JuRlljaHpBR1lEOVRWRUZVSEFDRkFCRUlDb0dxSUlHR1ZndUVLQUFCTmdJa0E0aE1CQ0FGaFVJSElBd0hHMnBnUlFkaTJEZ0FhUEFaRmtXd2NRQUZtKzhUUmRrbW5VajIveWxCbXpHaGRlaGJaU0YwUjd1bzdoa1pDWkdUNmhucG9iWlRXeHk2Y09EaDBFZy85bzBGUitIQThzM0oxYjN0dzU5WG96Z2NDTndqWm10dHdDVnhYNGhMb3BFa1RhUlh0MFpJWTJJdDRqZjkyWHNDdk1STFV3ajJRbzBJa2hjeEtrWXE1aVF0Y2ZuaW1ycFowanFIdEduZ0pibC90RHF6aWlxZHF3QXpvUTBUTHg4Nk16cFg1dEk1VC96djk2OTc1cjRBb29zUkJESmZCYm1rV2dzSXRvcU5iRzJYSjlDa2VvYkhiZjN6QkJtb0dBMUk1YWd4R08xR1Rhb05FRlRNNjdJdW9uOUZYdnpmK2l1aXdRRUsvVy9haG1pYnorVmRFYlZWUjRZTitQZC9qY3pDVE83TG53V2dJcUZsNVFBbDIxWUIycDVLSkZsTDZKZjdaZUJ6ZnU0Y0ZKM3ErQU9DOFFWNjZ6b2JXd1loV3dEL1Y1c212RVhvekVtRVRXdnRLRzJUUEczaFdjcFFtOW5RT3ZSOEpGSVZnWkJkMm1iRmMrSTFmWVh2d05Ra1ppdnF5UDBlOTM4NnkxYmE5ZDN6QnFHTHF3QVgzWHB6YlRINit0Ylh6R2drQTJ1SmZReWVsZldlSlN2Z0MwSkZVRjFheE5kVFUySFRwU2o3bEpsL25lbXE3Kzl2U01rLzZKYWRHc3NxcmdHZWV0bmFOVlBMNHorZDdxeC9zZ3huRjJUNWVnSFNVV3lYN0FERFZNS3hveHowQmNodVh4aTJBc0NhdFRQeXZnT09OVE9ick9TY2NHdUNRbHpoRWJLQi92cnR6MWlySDhoc1puYTc5bkluaHkweVJFTENKeUxnV2Y4Ni8zQWdUREFBQUxwak5FZzNKTk5RWkxoc1pMb3lwRncxcGs0ZGN0aGg1S2lqeUFrbkVNSUJRcCt1Si9pbGtoaXB1Q1BIZWcrRzlscEZvUS9hK3hPS2M2SEZBeEIyenJwM296QVhhaUJ1eFZNOFZtQ2tXbVY3dHQ4M1VxbDZpNnh3eWFzd0NwVjkrY3pVNU9manJNckgvQjFiZHNTWks3bVNXL2EvdENtdktvSkVpaFlqVmlLUFByeW1LVkRrUC85ck1NTXNjeTJ3MEZMTHJMUFJEbnRkY3gwekt6TS9FNmlBcENqNkwvay9hS0EzQTI4T3lWeGFDNE9sVDVhZHVQTVBXZlpCMHZCa1J0bmNZQUdkaFN1V2JsbzI1MXJUOWVDT0NLTGdmYllHa3FCSjZWUXlhNEtUR0lIVWc1ZmhxUlNZRWpNSFJ4SUhJK2xKM0ZUenROMHBXaDdERERGUHB0b3B1TjQ0Si9BSWtnMVNlT3BjaTloUDBSVFFFaVdPd3p4TjAwWkhVK1VwUzFHRjhCWVBFRDNBQkxGMW5xTEZmQXRTSWRzNHRaUXJFSkN6OVRLdFoyVE1VVmhheEhPTFczaVlTdDBwb0VjWWdvU3g0N1ZEcWN5aGtna0ZQWUhkdk1TeDlWOSt0NzZOTFpxREIybTlZWWhtdG12NHowbDcxYURYL2hjek93UXV4cTZrMWxVQzdubW50Ry9QM1N6ektHUS9md1JVRC9jT01RaURJcFRnanh2dmIvUGJ3RTlzbEE2aWpMSVR4YmtHbHAybVhoZlUxTzVBL3lIZWFiUldJeklkV2pXWjJXMDk4UzNOSm14SVV4RDBKUzJJUXFoNy9ETE9WRlVZOUkvMDcxZHFKRnk0Z045U055UHNBcWtsSkdYUGFmZU0reGJGNXFJWWMvSUFCeG1sbTRCY0Irb1BPUnoxOUNNMm91aDJvR3RFTk4yQUpGckNWek80Tm9EM2V4V1NFS0c0c2pNRHRPVkpTZ1lMVjNvU2FMWWVlNk9yRTU5Sld0STdYcTZGTU5CNnBCYUR6bVNHN3g5UC9uY29BUUMwWU82NUFWLzhWcVI1cEM3TzBLSlJTVGlYTUhlYWp6dnE4ZkQ2VEVhdGRTZUVkQ3lKeU9QN0hTMEhOc2NqbjRFVUg3SVZ2NUI5TmNIdDZRK1F4cjVOZ0psRVlwQmJsN2lXRlRnMlN2c3ROTHBrMXdkMEVPQi9IS09QNTFvQWtLSGJrMGN4Z2FVU21FZHp2dlJFWGZYblVFcXhxR2dkeC8xcFVCbjZ5U1ViaUw4YmtJbENwT0MySEYvWTB4NXFweFRMNkxtbFVQYkZPSk1qWVFEZVlKSWNZQWh0S1ZxZnJGS0luZ21qT0k1ZXgrV2JTVUFyQ0dOd2hJRGlhS1BRVjEyZXphZEEwNENIRzg1TFltaDJnaU1Fb2hndUZDRTdXdDJSbnBaT1AwTEFtempKTkpNbDFGcVEyd2ZiVUJKYjgrZ2RmaVNHU1cxZ0MxdFowejdRVlFkZG9UU3lzalNlYnpvbGZ5b2hTdGdnQmVlTENIT0RmTXlvMkJPUzhhMTJoaWRyM1lVaFJEVlhUQUl4RTZ4d21zMERFZzFNUkZIQUd0R1pKTEU2Q3RCWmw1SjJBN3VsVFAyME1qUVh1K0ZHY1JoakNvVlh0b3daaXRoZUFpZ2Jsbk9aSVJnRENnWUtlampCUW9RNmhSaDJMSWFyR1dCN3orWWl0S0F1cUVNQWw5UURJZ0hjOVJzWWlVekFOZ01zWkdMTG9VYXhha2tWcmZEb3pLMjEwWmJLMDRacGk2Q0VCVm9zTU9BQVVWZ1Fpd1YySE1qQkR1S1VnSk9JZ3lYaEVNbnNVQ2xTYWFTeHc2VHJpT21NUlYyNFdTRy9BcjFvYjhMTjlNRmFmYkZvcU5yY2NDTnk0a2lqcUl3QkpsTndCQzhtV1ZnbEcrdE1aK3Y1NU9NVjRFaUYyS0NJYlZTc2xGb1pOcG1GdzgyWFdzd29DNTZLRCtxVXJvSXpLbW51NEdBWmVKWi9FQUJNNFFXUVJwRnFob1ZZQ1FmUGRwT2hIR2FXdXg0ZXVGaUhudTQwMHBvMU43Q1hWTW5mS2pSMllkRmlzY1dxRnF1QmROdkFhOWR5OHRFVFArNzEzTHdjRFB4dkRkMGF3KzluZXlmZ2QvWTM4Q0VMNXNKaVdBbnIrMzMvd1pLY1Fud0tqclhpTUFCcER1Q29hVWlrR0lTaENBRUZ5RUVWNUplbEZjSEJwOUxuZS9lL2E3Yk1FdzhLcFA2WlpWbVZSOFM1b2JBbVZaSldPTTV5MGo4QkFCUVlRVFVtUXlhWkdFVDF4OUhEQ1VrTUcyTTJIRU9odVg1SGpUdUJwU3BBS3dpWE9tc3FCcURBWHpRVUl3WitmT0JIdmdaaFloUEczL2pWeUl2Sk9EZEJJQzBqSzVzS25ONzZxVXhzSTVSanRBcGl2d2NtZUFRSzlGWUtHc0VTdENRUW9nNzZHNFplbXFUSlRBUlcxRDh5QlZJUUJWTUloYVp1L1ZIN2hTT0JSRktSbWpRa1Nia2dRSG9pcll6aEtGWFg3TElKb0xDNWFhbmkweGdXTGdSZ1RnbGtyT2ExV01Kd25ROVh6bGNmbUFEc2hRNEg5RW9lbnk1U29ySHJXZzl0czBwSTd2LzNzRWV3QWF6cnVDK0dDUENmeHJrVDlDWUE5QzliQTVCeFNLSzNkeDBBWUkvZXlpcW10QnVBbzB0Y051YnI4MHdsNCttNE1QajltS2FXUC9GSjF0bHRQZFV6TzRHL2hMOVdqcFROc2xWdUl5Zkk2WEpYdVZpZUV3cXQ0ZGJtZmo4QUNDSnpTZmRuNHBNbzQzS3NrWFd5c1FWcGpEOVN3bTBGOUFQQXZ3T0FOeDJ1dmNiMkM5dUFDOStFQzg5NHp6cWZHYVA3S09iaHJuTTd6MjBCQVlCRVFIOG5nTjdLOTNaMWV1VnpOUHFuN1RQSEl2TWNkZFYxaTYyejNuOU9tV1dUK1phYWFZa0x6amx2Z1d1SWhpUlFzR2EwbW90Z1lHUmlaaEVsV3F3NGRnNU9pWklrUzVGbWpmK3Q5UUFIb2tKNmIvM2diakwxMWtkZk9iUTNnQmg2Nm11OXN2NjNUdWRUb0ZDUlltVld1V2UxUy9hYjY3RGpqampodnBzUmNVdU5MUzdiN0hiVXVPdWkzLzBSRGxmYzBCQWV2Nm0xMVQvKzlxK0ZCQXhIaFNkU0N4QXVSS2d3a1ZyUTBRc2lhODJxcGJaYU9hT05CQzd4RktsaVROTmVCcmVPMnVtZ2s2NTY2YTZIbm9ZWVlLQkJQRWFiWUt4eEpobnZySW55NWNpVnA4UlVwV3dtUjAyRWpUYllhWmNkQ0EyL0VBQm9EUUJzUDlCeVFMOEZNUDhBOEo4RE53Y0FBRFoyRmJ5RWhPTVVMQ1dxb3BoSWlGRkdQNi9KU2Jibm5KZ1V4VjFEekxRQWhDSkl1RWJCbzNneWFTVUpSU05kRUxIU0h0SU0zSEhHc1NOeGZld0VuY2ZyNmNDZ01XbDdqYWFKMDBleFF0UVI5aWlHNENVdzhnU2lKbm53U2IycnNBaXBSRWxueENZTXM2Y1N5SStlMlJ4NkVxYitDckdFSG1Pb05BT0ZwSlN5TmxBVGhIVE5Qb0I5SFFPcng0ajVYa3pPZzRRT0NXbWNQalJ4VEMzVThZUG91VVU3WDd6TXZya2lXbzdkSnNablFRQUU3bm4xL3Q1ZloyUkVRbW8wd2VpdXZKa0xsZyt3Uk9rczV4UzhNOFdMbFRvRXhLUkp1TjVabHVjOVZ4bUdwM1hvaFNGWmc2MDJoMFBwZlFqZ0hITGRVOWRZR1pHVWpGOHhHUGFmcENpTkJxOVY2aTA2VDA0WVlwNG9LMTRvYzNlbHJDaVZFWURjL2oveVFTblBPdGFKbnpIQmFhaGNBMENmQUNxOFM3NVp0QWswcFRuS05BdXVNUVdRYkZpdnRuUFV4bk1MUU91MmZFbU5iMVpxNTVJTWM1UVp0bXA4VnlsUitGQllveWxYcFg3VkJEQW1kbUl0SFYyRlJ3eHEzZjR6Sm94NHQzS1pmcHNqeTh1L1ZXYlVnN1oxUjlNZ3Biako0dG00V0FETVFrNDV3RFNrVVJndHlFbXcyTUtSVFdERlpkTi9GR2FSZlpIYmE3T0xZTy91VDRpSEI0cU1jcXRIN0tWdjBicXdPWkYvdGVZK0RRNG9IVVFZaFE0T1ZRb2JUV04xUzdEQjhQWGMrenV4Nk9RM3hPMUZkbUVxQS92eWlLM3R1YUhTUmFXNDBPWTA4WlZBUFRXTVh3SzRaRU94QmhDOGZUd2FzR2h4S1N0N3lRbEJvVDUwb3J4K2tOcW9tRytxSU0xNFR5WFZoU0lEMTB1RUkyQ2N1Rk9xNTRDY1F2Tnp4L3BjZjhHb2ROWS9TM3htYVYrekpac3c3OWlsZTlGL1U4cmhQVkM0bVFsY01EcmJvRFlTNkNOYjRBS3d4cCtSRUZWUzFUSTZVTVp3NHdZV1FOUFFXNXROVG5GUGROZ3cwRk0rZHFnSGc4MjZKOHNpVmkzdW5RNFRsc2k5Z2I3RzQ1bVdMbmQvRHorL1JuYThSTEVlNTltcXByN1Nob3F0VndTSXZmbUdkVjJ2OHlwcWpVN3Y1ajZuclAxMTFwZ3NpTHhOamUxV0hCOGJNanBXSjgxZHRTMnBhbndUZ3duTjIzM1dxdzRiREpTWkdsQkpUU0RsSGVNWVpYWnRPOWZ1bFdNL2UwRE4zWnpORmJ6Zi9kczJ1WElMS2d4ZGt3TjlXRVRadTdsczVya3d3Ukt3eVZ1VjJGTTJlYWxmR1ZhaDNMVTByNTF0V2ZNNVdGSENKL1dNWVlVamhXeStjRW84ZXlXQk1YRXpXQ1ZMa3liWWpqMXZyVkpkbk9SWGV4c3JnVURMcWJhaDJvaUQ4NTdFU0dMYXZ0a1RMSlJmbU5XRThlYUcyOTBXbTVJc1hpNVRoN1d3bE84YzNMU24zZXVpN1dSNUg4eERZMTJMQ2JDeUV4Vis2eDRmM3RRd1VER3IzaHRsT2ZBRzYzMTh4a3J6bXNqYnF3WXRFVlNXOHZSOUtMZWhaN29KM29rYTVqV0xWbjlwV3Fjcm1EMlZ2R09hSjhlbitLaU9kVWJrUFhKUWZXNXhaYjdXMlJlRHRPSlRhME5iTnp3dFJKUEFaOVJ0cVNheDBxR2xMazkyZ3YxRFg1T1VRKyszWTZ1MFVLM1BQeURSYzhlSWxta1NjRVpwMHdTMnc2d2NLMytLcW5KMzR5ZU5hYnZGNS9SeURSMGo3OEh3ODVIbXpHVk9TMFdJZzlKQWVsZ080OXdOa3RJN2hBMFc5a3dKdWo5Q0VsMkdhQkw1cWtKWEptZ3NzUzZhZ05Wdjdvb0dpQWd4YWwrM3F3VFhmVGlsckNtbFZsbzhZMExNMkQvQU5oZnVpU0pyTlhWc0J4MFd0UGJrVmt2TmFIbGt3Z0ExY09RdEl5eUVVZzBPSEhsemQ5MVFXM3JsM1cwL3MzZHduZllLMGdDT1d6d1B0SUNIVm5OWDdlQmdSblJjR1FTcmppdWMxd253cVdVbDE2dlJaOVZoWFNlTUlTMGtmSkM3MjhrUGsvcjJERWRUUEk5MEdLQUptdHVSZzBwakhhRTVTL2xteTdIUUNZM2dCcWtiYmtwRGl0N0tNUHA5TGtRUVNaL1A1SXFEd1JDZVBSejdkMzYwT2dhRlRqc2VONS9ETzhtYTRsQ3hsNTFXY3BPOFRueWR1RmxtZmhmelZtdDZlY2g4TGVtOG4rZ1FLS0toZ3cyRVgrcC9EZXNpOUdBUlZnSzlrVGxPTFRrUUlhclhNYkpadGFFRDA2YjViZEk0YUorRVRYK0FpUTVKZHR1Y1ExWGFEenZERnExc0xhSmMzdHhLUTN0UUxleVVxeUtXVlEzRi9xMGRGajhZRDhrNnlkZFZGYTUrVnMrRFNHNnVDL25OOWNlbnVFTnFsakovNGNvdC9uN2YrcGlZZVlVcG8rRlpPbEZHeFJ2VjFXeTRWRVBHS0xKcFg3QUIzdUN0TEYyYm1XYUlCaU5GNmhCOTIzRy9UMm11ZHRJRTFmejY2VFV3M0FiclFyYWx3RUZoTzNaTExaSkd6V3p3endMakRzK3o4b1prODRnT3dvSFVBSEFnTHc4WGgyYUZNcjY2anM1U294a3RKWUJlVHJSalg1em5Ca2RtSTlNKy8xaHJjWWpZdGRacmdiclZUUjZjMDZvM211YUNrTlpjanJmUHNYbGlwYWpOTHdhdWZMNUVWU0tFQUhnem83RU14WUpXMC9vaUp4dU50a28wV21VL080NE5kVVd6SXVzTmtkWmZqZGZTVm8yeDhPREhINkx6VEh1ejJwd09UL09jQkVqSjFSVWpSOGI4NzVOSUVCQnVtM0J0dDZ6RW9kYjFoTWRvTWhyR0dxWFU0MkIwbTcza3lMdVJvYTU4UnhuR2lLeG1JSHd0Z05TdXZrQXF1dlIwS05Kd3YzNFllNFk5K3B2VzM1RTB0c0ZGMWd1dWpUTFUzNWZwVThEd2xBZlBuRzdIMDN6VzhYMGRKbm12Snp5WTQ1eDhsaEQ2ZzJKQVRFUjVteC9yRXQzbU56cTNPa2FVd0p2SWZHdStmcTVYZkJPSGphZnZRRDZJb3doaGI5blFheFQ2SkRmU2I4Vmt4cm1WVm5xdTVyWEk1UnE3Ukh5TUpSaU5Kbk9IdDhrbXZiZ2d6WWpnblRuNGR5ZXhjU3pPM3ZReURvSjlsV0lqdUlzUktSOGZiQUFYbXp2c2x2TXViYm92VGFtYzdLMmJSVWYySDB5UmpMdEpxZVR1eUFqZThZUWNKSkExZGNkdHp1VkNlMC9FcmhZTkl3dTBZT3pFdGViK1NsTUtPVVFzRTl1dVp1dnVRWFdiWHBYbENidXZKQVJYUHlBbXpGR2hJK3VPR01CSDdEUE8wb0RVdzFNNzhBTjNoSjZFQitxbzBZUmhJNThiQlhDSVVMSW15Z2hXVnNheXNJU1FCNTZocUIySElwWHpPek85RWxGc2R4dUJPWDBpUGhTeE5QOWVWaHlTU0lwMkV6WGthYlI3ZmZReGtlaVRENEwwRllDR0dpTnpNRGRJalhoaGR6WFB6ZVE2c0hVd0R5Z2RVc3d4K3VtS2lxNDlvNVFyeTRFSlBjaHZYMzJtSjFFWlB2THJKNnBjYVZ1bUMzcFFxWHpqMmV2WDRvcFU3dk51MmErT1YrZXJ4dklqMlVibDZBM25Sc2t4a1d3OWZOQWVqVndNSUU1UkhFU281eHIxeE5LczdjY044TnczMU1mLzl0UkFLTkRMSEQ3Y0w2NW1tZXBhb2hrblBlTFluY2IrWkdBVnMzUW1lczV5Qkd2NHhiSlI3UnVXaktJV3dRNmxmQ3RGdEhBZTBXQ29vMURDK1NCNkpzZG5wRW1QZ0IyZ1NRNkpVaThWRm9JQmhWM2toQ2hmMDJZeGo5SnZlZy9US3FUd2czZUhQTzVzVmtXRFl2R0NTYUJ1cUk3bmFBOW9OQjg3Mk5nb3VJUWJrRXJIYjg4SjJkTmpTNkpwRHJUZlY3cmg4V3J4a3I4Y0IzWmgxMktuTW1LcUhvMXBPZW5odEY0NmF6RTlMYTg3dWNSdjNKUjJ5eVE3bUlObGZkbkdqblVKZXQvRjF1amUrcU82U3c2dllTcDZEUnNpR2dKNUJjeFhWbzNSNUxWK1lWMXV1emh2aVhEK2FiMVpHTkR4MlB4NG5yYW1hY2J0cUhLb2N5djMwZXpCMjhHcmtqWGUwK3hBa0J3YVRNekxkWW1GTzlPL2cyR0llSEFTVk5yVHo0VXhySThUeEtqalZKcXJ0MVhyZEk3RE0rM0RlK0NRMWZXNS9WM1RYSGRmeG9yRXdNUFRieHJzUmFZcG5sS0hNeHhaSHMrSmNmTWI3WEdwUEJXbUxmdUNRL2ZTemV2MlBSYXVDejZBbGwvQjRFQ0V2dEZvOUJyR0VkWnBuSU9JK0xnZ241QmJxT3dTYmppLzFocUJhMzRuOWZKOUFEM1U4aWJ1YW1HR2QzVzFMdVJsTm9oem5Ma3VpUGVEMWozQ0REcDVUVk5HQStGaGRYb2FZRXlNVDBxVHgyUm53cHM4SXRCOWZISjN5YTVGZWdDbGZQMHJSbGw5ZDdDWjMzM2ovaGczRzJNdGF2TTFmQlVOQnJOMVRlRldGMG9jN2l3Q29RdkttZVNwaEJSZUh0eXcweWl3OTBuNnhwZ0NZeWttb05LR2htaDBJVlpZOEtCa08wVzFwcVlJaTlNaVRWRzk0SjJqaCtjdk9TMFJzZVFLNWdVRDhFQXFQMkNhcjlJalZodFYzc3dQVk56VEIzdndZQ2tpV0JVN3I3M040MkJBbjZOMUc5Zmw5TlgvRDVBK0ozazlSNk5VVy9OeWJxVHJWc3p3NXpmT0Q4Tm8xb3RZdlgyU2dZTlgxMERjNVlvUHVKTFVqNjZkVHRjT2wvUEViWVpQaHJpMytPKy9FOStOOWpiZWFRck9RNWdKMTd4MENKMm1Eb1lZb05CbFROV05IdXp4YS9EdWZqcnd2ckcwb2crWVliRkNiMFRCRC8zbzdpdHpON2R6WEdvZHo3ZkozNnhzRE9reU9TQTQ0TjhySFB2LytUTWFERnBKbjQzNE44NU0vbWNxK0NLb2lnaHl3ZGprbFZ6Uzk4SGc2UUdCR1Yra1NhYTFLMGx5UjVUa0RjRE4vWUpUcFIvemZielNrazVldkY3UnVkRllLSnFtSWhFaVJFaXIwN0ZFQk5hejRFS3o3ODBCTjNxSzlyT2IrNFlvMTh6NzU4bmNrZ1M2TytQZ0xIWmsrdlhlcjdJYnU4QnF0cmJzMWYzM214NTJIZXlaSngzb2lHODBYemRiQTVTLytFSjdMeEVmczJkUHo0WWdhc2Vod1JSYUxLTFRrWWdRSlhrUFJiQWgxanFYbVNyZHp2Z21mRSsyVFovZm00anR5K2RqKy9mRzgwaVIyNm4vNjUxaitiT2RFZVYzZVpMNzRRVWlzSWJScjNTSkY1VG9uV3hqZmlJR2VkM3hhY3VYWUkvWEM5WHRoWUFZa0RVWTN0MUVnVE5PUmtnRThRNFVEU2dVUWNPSEVBdWdQSjZGOXZVWlFKNG5MZFFyLys5VitHZ2E0dnNReENETlg3NTk1eU5YcE0vZld4QW5wOXcrQzZqTkluMjVVNW9zcVFHckdIWHBCTzROamJjdTZ5NWZjdkpvZHJId25wV2FGWFdEVkdGcVhmM1pXdU56N0Y5ZXZ0cnlqRzVoYVRvSFA3WHZ4Yld6YTJpRmdObFhwdUtjSHlLNnRITDVKa2l4UysxanV1bnV3bHFEMzcvVzBGM1FUY2RJTFVXMEdOZzNGYzJrcDZOS2k1bEFUbWVtb0FrSVQ1clp4WHozZmRtcCtRTm1HNlJGeHgzRzZ5ZVhpb3Baa1Z6ZmxkWXJUZlRaenhZOWdvMitnWVhtWUloUzNja3Q2RUVQZXpZMjNaSGhqRzB3UHVIdDF6c3o3WXNkR2VQdVpZbGVNTUlzS2EwbWJURnJ1bE1HeTNzbUplUkNzcGY4UHV6UTRISVJxZGFJWExoRTg2N1lnWUJkbnRYa2MzNmJVL1A0dy9rcFpUOFU5RjBNMEIwaG9Gbm9OYTB1Y1d3eEZpNTBzN1QxNXdOMHdxVFpmQjdyTFY4eW1oYnFiY09GL2phZGF2VWZOMnNoWjBHUTFwYjRONDJrZEduMGNWVEQ5MS9XTXljbjVlcUlSVC8xK2RGa2IwdlQxZ09KdVZ2ckNJZjIyVXVLcHA5MzZTRlcwcWxzcUZ1bUpQV09UQ3p3VTc0WHNLQStXQnhucUROVmtBZkFxSTNqV3FzaHluOUhNYTk5U3ZaQm1Hdy9LY0IxZWpReW9QRlk1c3UvT0VQRDcwVHlXb1EvaWZWUjNsOHFUU0F1dlRVWDRGNFNlWTBhTkZ6UUFpVlFGZzNaRDdHLzMwRUtOL3BjRXNBQlNqQlhZOWRpNzRybFhwSmM0ZFY0OGphSUJyQXk0d3pMd0lEVlp1KzNXZ2ZzdTBOcE9jWXd3M3ZYSFpRY3JSQzNOdFFzTFBHbUVNWDFBOHNIMzBZWnVnQll1anhDTHc3ZSs1TkRUZGRROGViR0IrWWc1YVgwS3Bxd0l1cFNMcjN5RDVKbkZ4VHZmYW5wNk9HMCsxK2RtRjM2SWdHc3c5QkJjUDUzbmZIUDdObjNRWlhwc3hNK0tweERObjErQXFXQjRrZGpiaWFZdnZQcVA3V1E0Sy9EakRVWjcxMy9EYkY3QkdLU0tKMDhYK0wxVFJSeXgrVlc3Mm9PdkExM0FRdXJYdTA0OXQzTjlGS1lFNFczYzZFOTZhMDF5WWR2aTc3K0RCUlh3OW1SQy83TFBHSmxrQSs3UjcyMjFjR1FmY1dveTZVS2NyZnhBdkFmQnlENmNOYWN0ZXFIQ2FlK3BDbG1MR3RHQmdtQ1NQN2pCSFIxdGQwWDk0dTM2MWJEK1lsMmdZczk5dGtvQTF1Yzg2NFBmQlRpY2FwcWV2aHFYQmZlMmJQbGkrUDFIak1aRmF1NEJHdVZNR2wyNklhS0RsSjR6NjlYUjlHeHhYSHM1MFdiTGJpOEExOFJUZUVyaDUxV1paVDFoVFRGZ3B4OFdqN1NQaXFUNnNrMk9LSDg1cjRDNjRVc0RLenFuQkdYZlVVb2FGODk2blVKbmtTdittSHZSSWlLTUJoVVFPbnp6R3ZIMHE5K2FzbVk5YXBxWnF3V2M4YUdET01FTWxnZVFxQlNoMFVhUUQyMkk3c2VmVGFya0ZnTE5uT3BBMGVIK3F3ZDZnL29kWCtWeVd3MEIxYTFtL3lMUGM1VlFaOXoxWkpPOExYYjRZb3JiZDEvV0xtZTdVRUI3QnIxMkZjRmcvWlZvMjZYSXNBOUp0aUJLZGF6bG94RlAwUVF3T0pwUVVvRWpndzkzVnNRM3B0MHJDS05vaDZuSnlYVkdjT3d3Zk1hZGNYUStVUnZILzUzNSswMGVZNEVnNS9aTCt3ZlV5MXBHSlVrblpPam5iakVtSEVZaHV3WTBwK3htNHhaTTFLMDJ3MURXY2M4YnNpbk10bWlaV055dUNCWi90bmhIWWp6L2daT3FMdXNnd0J6UVZkdFBGUVhlWUR2SGxSeGN3dHNSMkkxalI5U0tpZHZPYjJwazdEMC9raUt1T1h4M3BtRHc1RkFIUmJtWFZsWithbFN4ZSs0SFN1ZGl4ZmEvUEpZWTZFZW1vMGt0SnI2OGg1MlljR0t2c0g5RDd4OUZWN0w5Uzd3ZEt3S0J1WG1CVzdmYk10WjBCSVJ6RmxQY2IxbVk4bnRwc1gyWWdBdXMwY00wcXhSTFBXdDExS3h2ZmNqcXJnQzlhckUzbThKN2ZlSlJjUVZKQWVzODRyNnUvbWdiVW5xZHovZzBDMnVKb1Y3a2s5L0tXQ1ZMb3dXNU9SUzdsdloyai82cUNPa2V3K2Y1Mkkycnlxang0K3EyNS8vMXlUOXREby9teStTbFpsejlscjhPZGRqdUNIR2xkckRCbkVHRXduSlhCWG1kSjdYcStKS3RCUG1QUmVwZXdtVzk0Uk9HVkVZOUs0OCtyOGlFaEF6blR4Z1ZHZEU5T0swRVhuU0NGZHh2RjhhNEtUQzFOeThacTI3N0JOTGlGY0NITUQ1SGVoWXRjaEQraFo3OEZXQm9CQU4ra2hMeW15eUFJR1djbGE3TFc4MWxnaWNDUWR0ZGlhOE1QQUhka0h5SHFHM3BJdWh1ZXZNL2JpeGdQeXNaZTRSd3I0czRMY3ZIM1c1QkU4Z1YvNncxK1J3ZWpNekNSK0p2OC9HOUVXOFF6K1F3ZUl4WktDakErblg0YzZ0bjlZYWZVTmZsOFUrYzFXTWR3dlhBOGRhNlozUlJ1RHNYYWdBVnZUMFp4OVE2cGsvcXNDS1NBejgxelh0ZnRGZkVETlR3L25NYmg2UVdSWlRZNEtuNS9PRlhmZlNBai83NmJCQWRpWW9SRnA3YzJNcndYQlRadDVwRDFzbTJHSVZjRWZ3dHAyMGFkZjJpWlVYSTN3RFdsQ0FWWkk1VkxmNjZtTXdHWUF4ekN2bGlHbys3dmlMMTlZajRJS3owN1pvc01QVy9QcWYwL3JJenArbVAvTzdKeHhIMEx6VFo4ekd0R3NPM0VJVDV4NlZUclhXK0w5bGdlOVVNTFA1WmJmQ3ZPWWxHbk9pZUJwRW5SU0J4TisvZUJOZjBqYnR3RUU2QmFvelZ4VjRxV09MUTcrNmlrZmRHK0JLd3V4Q3lJK3IyYitnMk5NdGtYN1I3Y2ZWREtXaS9nQ0VrRDFjMUt5OHNMWGh2Z2VPUHZoNHFKWjZFOEdyN05UYkVGUGMydkRzVzJXOG1sanRGcDZjQ1pXb3NyeVJISzNROUR2Ujg4bTI5TmtWblh1cmlRSU9pU3NhRHArdjIxTTRmbFVjTHpZZXZCQUM5citNVnFOdm9EUkNnVkZqY3lnTlhLN0N4WUZqYi9sbzA3VnZaUXRsMG16bi9PdHYrZEoxMWR0cndIazFVQTZ0ZEN3ZXMzazBuVTJMU3hzeDdOTVNQWmV0c21hTXVrSkhvUFhkQ1I5SDZvem94R21yMldZeUpaTE9aRkFkZ3cyazlCQ3ozWDY5M09MeUdUc3kzcStlZUpKc2U5MnlhSWc2NzEvZjhlZ240UEFNeFFLMlh3MEx2ZmRKOUI3YytRZFNUUFN2bENyWjRMaC8yaHFtN3RiYVhEYnpBbGh1ZFNFbzdBZXVXbXFwenkxWEtWMXkxVkJycEtSTHFWUzVsWnFlTjlxOUJzVG1OVW9RTVdSTklJR0dJMFhreXNFU2NnVlpvN0hoWXJBMGFBbFNvd284RlZmdXkrWEZtb3JoT0VFb244dTV4c0Y1WUl3NWNpb25vTUlGaDIxWFIwc0hpdXVtRHRKZncrbm41aFNWRldMK1Y5UlUzRll5SUZKdlNHdzJwTlV5aWdYOEt1Y0RtamFPTzNCdm4wNlhzUWhiZk9hVWRQYm51U0RXbWpJa2s1MlRZVjFhTkkzaGxraFdyS0VaUGl3REdyeVBjUGI3L0l4bHo3YXBIa1RoL1lXdmZtc3NGNlM0a2hidkQzcUprUVVXWEJYbmZpQ1VVa2lKalFKbDhMWHRFOHFkSTZqRmJkRjJKN211Mjd5WGw0M3o5N0M5ZzFTTjJXd0VvK0REa09iUGVscEVIWGtkMG0zRE5Ja3VqVk5LTkY5VEllemYxcXhwcGRDSW1oZjhOd25hcnY0UC9WT01NLzN3UWN3NjRESUp1M0JuanhEd0lEVWpOM25hTW1vamV6bTZQRERjRngrT2w4TzVRdXcxOEdRbTRDOGE1aC9SU3o2UGNGVzZnQlRGMlRHVnhWUXFPbkdaSWFLR1l5YWRPQlV3V2h3cEZNNFkxTXBZQWdIWHEvQnRlTythS2JjR0lVV2dNS0t5TlNSNk5oOXV1Z1lzN0NDcUhDejB3cWdwM1lmWWJIbkVsRVpoZ1dmSlA1NDNmZCtPUzQxSU1xc3pHak02SkdtVXZ2Zzl0SHlFZ3ZDSVpUSzNXRUhBUkNMbWNpZGlSOFRCM2lRQnF6MUJxUnFXSi9EQVJFOFMxSi9VNEl4TDBFV0JnYjZJK1FMeDV4ZVB4cmRWNVNmclorRjJHRWpzVVpYVk5IZ2FETWROV2tzUU5aL0hBS2NOR21VMG52RUVCSSt6T21FMWl4eFhQbTRtMWJCSkhUK2tWSGt3bzhwWEVBa2FzWndUV0MyQUZmUlZZdzAvVVk0dExxMVlxTFNqWnl1YVI2ajV3SmI0QW0reVQzR1dWWHVjM1lnTlU4M2diYmxjOEpLc2ZValEwTDVqM3BVRmNYSUdjb0FWMEM3dytiNXFSaUpXeEJFcmtuOFp1WGV5V0FvV2ZlbWxBeGRwdkxkdy9yaHFYYnZhc0VYWThzQzFoZnlLY3BCOGI3bGJ5UDFYQWU0V3NjTHp4VU5iZDNYMjFOWTNQRUZ6d1h1THR0NVJmNWlLUFNXUUlqc0l2ci9Wcllidy9PQzdDTDh2TS9CVEhIWjU1WWFKTXBET3Q3UnRhdHBaT2R3Mm4xNURoK3RMalM4QWZ1WGpQUnpldWI5UUJ6VnZkcllKaFFFVUgybWt2MHk0OThCR3duZnZpanRvRmJVM1NkcTJYL2QwUzN0THl6U0w5MU56ODJPZ0JQZ3NhdSt5Z1QrdE9BZzUxSENmWGRHZnluR3FFUlR2YThBMnFQTDdQYTJOM0xzL25aZEFLOTl5NkNrMjU2NURMVzNVeExKUlkrMnQ5L3h1dnJQWjB0cFNXYjZ0MHJmVjByU1AwOUhXdXE2MWRieTFUUXVpRXJ4TXBKZmNwcmRERlRVUFZiTkZOenRZYWoxbCtkVzhuNXBiWHVRMHExdWFENE1ub0ZDaTM5MG51aGpmOXlEWXZ4eXlJM1NhRjEwWHgwcmxKaXc2M2Eza1U2cDFLMmR3a3Z5eFd4eXIxYzhUT2tGT1hXS0txajNiaXZJRVgySEdiYnBBWXVYRGpxcEQxc0UrbjFadG5jUkpybW1nY25pVkRPdXd2UFdTQ3V5d25uOWFZN1V2MDFETjZ4RFR0MXFsUTllN2hVdGJoTUtXcGNKRUJTRmI5ZVVZWEFKSDVucTBrdnNoRG0xRnJXVzM4bzdCMjlCbHo4NTlXeVBQQTErYmp3YXArUHhraHRkMUlLSXc5ZnpseWs3VjJrNU1ubXVWWHNtdHRVTnpySDN4dHRZSDZKcWpPS0syUStlbXYxNzVQcVEzOFQrOW02Uzd5ZlU4cThEK0J4aFRSZUhDdmpUbldrQU05MUpZMlFrYjVBR1BRcVdKcUE3Nm5sdyt3L2U5T1lCaXBpNGQya3RJZU9ST3YxQkZjVythZ0NoQTNlc2xFWFVHYmNJR0FSVGM0bmhUMTFCWjY2WFh6VEZMRk55WklUNU1MVytyeUJtb2RXMlZyRVhEUk1acVJELzJxeU1MNzJYZ1FwR0VMZk5vejcwZ3ZvN0JrQnp4V3A2ZWhBVmFjbnBldFhrTjZ4SkdkZ2lKeWhwSmg3YUNNSWdETWNwUlQ4cWlhTHZMN0dhTlUrWm40dWlscmdhM1lvTStpS3NISHFqOUd1NG5ncnBGSG9XcnZsRlFQc1BjcHhsanFPTHN2ZG1tamJyZW1zSHJhOSt1U3NHRCtvVnVwYnNPYjdGeFpZVTZzcXhSYmR4MG5XT3hra2tpdXM0dm53L0swV0NKUjV1STc1WFhUMzE0QnMrOURUbkJ4YnlSbU5HNXd3NUJnV1BVSmhuWnNsMldXM041KzNVcmRpVTBMaXF4SUM5ZkpodWZObCtXVEpxdTBMY1Nra3hYNHpGQWU1UldSTFZjUGo1VE0xTkZSdFA1YmJma2MvWWJOTlVJaUxucFRCTFRzcnNwZ0NNWngybkZha012SnVjb2lqd2FVTWFLZUw3UVF1ZWo2S08yM0pGbFFJdFV1all6Ty9TWXVFMDdmYnZJUk5HOE1uY3BvNWQzbDVsSzBqSWptZHU0OVk5Ylg2bzI2WWxaYzdQZkhmOTB2TWRtSGx3WlFUeUhETlgxR2w1azFqN2NQNC81TU5FcDQwUUp6VE0zR0xpdjBKcmZCUjR1QWZmMHFCQk1XMEtVNFZtcTJPTXFjTE1kVERldmFQaUNtYlk0d1l5VkwxZ1pOblZSc2o0SExwYUF1ZWFucTRMY0NwbFhwUktpa3ltVTZZYWM0ZXUrRUlvKzEvTjUrczlGd2k5MFFQMk5yZ0NLR3BURExES1dMYVJXNmtiUGFtTjNFWm1LUklRUXlkVWViRVMwK1hHcWRxaGJnTVNtNHVIOWhiN3dBYXFPSVYyQzRLUFV2bUlFTDFBUGZBMzRLNWxtaXhWMzZHODBLTHNiVW8xQ251ckN5QlJGN2tjRlMrOUVzWVgvelFmZjhCL2JmZFBreXpzcE1JNHFqcG5zWHJyQW83LzFxZGZuUzBUTTNBYVMyVVR2UjhlTFZ1TGVqdXdMbEhkYnduVVdYWkZWbW94aG5hTExqakNiTmZpWjJRSkpMZ2lLMjhxT3VreWx5eFp5ZXVKUDNDL3BJYlE2VEYydWhYZ2FjS1pXRmJ2Z3ozR3Z3aDVnYUdkdElDSFpkQVB3UGFDekl1amFlMWZNZE9GOTJkNFF3V0h2T1gyTEtESmxqMmk2Tmpmb2hxc2doRnV1RzloS3JhWE4wb2hWMEVPa0dhTExMek9NdnVoWEU4dlU1ZGJvY3Nab0RNbE1JVE55K1RXaTBKS0lMNURVKzAvcGQwZjBRNG02Q1hXcDhNSFFJK1Y5bmhuY3dTREtNY29RL2NoelY3OWJLYysvdnZnNS9TRndPNzkwN1BENXUvZFV5dmV2OUQyalgwWlpkQWVTUmkvdmY2cTgzV096SnhpWVdoaktIOXA2RG1LVWR0dzM1ZjRTeHF0Ykg3b2pTY1dIRnJuVytEN2xZbTFOaytIbWF5cndkUFJDdmZZbThNc2xqeG9mRWMyTXVEWDMydy9NTStpbHV2enJEWndUY2VsdHVwOXVodDBHbDQ4ZCtRbkhXMDVVc2p6WGEvbm4yYk5zODNUOUVIWm91OG50NDhzRk9QczE3ODkzQ2JYYjJzTkxXVEdOanBVNEFNT1RyTGhXeTQ1UFhxdVZScXhPVlFUV1NHTldoeXI4eUI1NDhvSldZQVBaWGNEaHpjS085Mys4QitPNVI4eEtxTjVjbW95a0ZDbzFyaFlGWUsyb2hHZXpSdFFWakc2cDhqbkFPbFVwaitQcWJjUy9ubElDTldRNEM3QkVjUDFPYjkvWW5jNnRhNEkzTG5KSVZrYjdObUhkV0tqMndyOVp6S1RpNzVzWEsxTkRlNXhkWTRvcHo4ckUvUWVuSC9jc1dYWXFGZG1iY1FqWDJBZml0cEJFR3BHN2ZQSXV2ZkNyS3hWYXY5WVFZbVdramc0M3FBTFRmSmR0ektvVXhueEUvM2ZST20vUmpLaTd1ekFuT2FnZ1NGblhucGJySUhDMkxOZVdvdkZsMnBacXJnbi81S0xrc2pFaUlNTmkvSWhFby9SRlpaZy9heFlES1MvWUpVenJVN3RnaDl1RG03anRwQ0ZJV2I4OTJ4MkkyeXF5TVNyZWJyOUlxMlBXc0oyTVhyd3JOU0loM1FBNUEyL1pVSUswMWZid3ZtWUVGOHFHcXBCaUxHWHFYUzhldXdaaUxJN1Y5cWFQTGhqMjBVSlA5MnFWRjZWNHZVUWRZczM4bDlCVmdTbmNZT0c3WlZrdGl0cmZmdnRCMmI3UUorS0dtbk5ldkpValdldmhpQkN2VWlHTlBkeUdlQVhMdDBKNGZwQ2MyR2tGOTlYVFVrRzRWL3RxcEtYSDllbXBCeFZudjJ1RFhYcGZFOG1zbW1OV2xPTVkyRit3eVZETUdTZENZZVBtWW02VG9kT3lDem5UNW5ESU5GSFFJaVg0WW5VNm9WM3E5VWd3bmN5bE9HYVNabytYU2FRbVZqdXpCazNHYUtRWFJ4Wnh1ZzFKdnMvMHcyRDRmMXZ4eVVRZUdCWjV2VElEKzRkYzhzZDRUKzNRdmxmQVhCK2FJNytVemM3ekZBK0xPWnhmNUtDOFFtMXZmOHhJQWRCb1V6bDFOS1ArUkhkRjRmaXA1bGNhbW5ZM2QxUzF2MWIvdFdQSVlpOFJoTDJrNVE1bmFVR2c4VG9hMTJpVG1GbWJVQTBVVFdoMENUT21TK3BpZ0hjbHBEaHg4R2FvdlNXakxYUXIwVklFb2gvejFLVVR0bjNYZU9nNzlEQys1Q1NVNlJyZFBlbVRYLzFzaWR2NkQ1Z1ZhVlpzSlRQblV6c2xWNnZGVXZYVkV1blZISWxFYzdWWFpwTkxiYkt2TWJCc2I2L2tzMytMb2VYVFY5SVFzZ01OOWwwYjJnSlpuUE5wT003dXZaNHVXYllkNTlSVE9UdzNKR1hwbnZxcWhiWCtHMERLVkN0Z0VsMVVMUlBmM2VyZ2tOOVBGNjRFRUhXWlJ0M0UyNjIxZlBTSGFqK3hTTDJIaGx6d2RUMnpxdmgvd1pkc0NFak5vNG91SUxkN0ljZTFiUkh3ZnBWV0JaaGpmWmlaVEF0Rk5WTUxnNmdXTWhocW1XaEswUjNFcG9LdHh5dVd6UzFxNW1ycE93cThlVnkzQy9GUmVSTUlIS2VaS0VJK2VZaXVvbWwyQ1BvTUZqWDZxOEJsdjBjRTNWdW9RazhLNXllTXBkTkhJSWtzM3hoTENTWGxmRThxdjN4K2p3OVFZcGhTNHpMSE5mM3p0ckVtTUowNEcwMTJVc1BYNSt0cXVrWGJWMmhLYlVrUlRJNmMrRHhEZmxNaHhvc0NJYy96Z0poSEZVdGRqeWx2V0NrcHVMNDJkV0RmcE9sdWFxbFoxaE5CdE5zTGZCR1JxVUptSVN2OVo0RkVla3Znald0c2JHcjhRZTUySTdpOUpmZ1JYZ09RdlY3YkpOYXQrT3R0WS9Rd3lrdU53SDRqQzFiNVpVdlpwNyt1cTJGa3VyczRtZ09oZHJXL2Q5amdUUTY3cGdLRHI4aG0vazdvOW83czUwNnkyQ2VlWTNQdU84Rm1uYnp2YnRZUExhMy9XL3JaRkpaN0dnSU0zNjdYd1BZamdNcHIvRU1nNFhvRG01R3VsMWdIczcvQ0lTYWIzenVnazA0TWFBMElWRVV2cm0zdXBXRFI4RGNLaGx0UU1GeU5naUVUSS9nbmU2MmtUZDZjMmRiazVXSERyeDdaSklzcWNLWXZTdUpSbElhaW9CdEZ3VHNvQ3Y2VW9nVEFkY2dKTGNnSnp5SW5QSUtjOEtHVW9pOTB3ZlNhUnV3QW9vK29xYnFSMnVjUnBnNC9jajNCVEpqOUtlWng0R2ZqbW1BWDVUbVdZQ2xUTU55bXp3UWx4V21EUjlWKy9pT2NKUFpmbUI2SGwrQUdqWTBvNHRSdDF2Y0h1NGJGYW4yeXorQWJSak5iOG8xU1RqZEdHcU5PeFg0U0lUVnB5Q1BYSTh5aGlUM0JBaVllM3pJVitLaGs1aVJDUG1qVCszU2xlcCt1QnZuZzVER0xRZkVYQThFQTluYnJuWG9Bc1h3eGU3K3VJdEFJZm8zNjhVZzNRbUJxK3dqb2JmUXgrZ1I5aWo1RG42TXZ3SmZnUGVrclV2d2FxU0srVmQ3RDcrRDN6QThlMnZoMkl6RDl0ZW54VkQ2SkM0NTEyeHQ4bGo1SGZUOVBmeHArb3M0SHRBVmR3WXpLbktxK1FzenhleG8zckd3TGNyZDJWZFFRTjFtWHgxUGN3QzF1NHNQYnpCTkVMdjJMYUxEZFV0UDJvYlF4SzhhekhvTzRXM2lEM1Q0OWZXZVUyZWZSM2Y3L3lMRllabURRWHZjOUs5bGFnVVVBTWVMZWZ4YXNBakNIZlZnQVpCNklkWXM1MFh1MTNicUxGOWIyNEk5WkQyc0RiaTE0L3o4Z3kxaXhsdGpndk9VQjVMb0FnQlhZemFsSmdzYU1yUjF0WFlkUlJsR0g5UlFkc0UrNnhtUmc4eUllbzhveFJ1TVFCU29QdU1PTVlNTGRzNHhHQ0orSDJTTWk1YWJ1cy93Q1ZZNXROQTBYbTB5OXhHTTBKdEFPcTFwZ0swQmRLQWY3REtHdjBNZm95OUYvWkdsYWxOdmx3bmxDY2hndFJMOWxXNkFyNEtOK29TZGdJeFhwSUp5RjI3Z08yTy9OQWxoMVZYZU5PeVBkOS8zU0lLQS9WQ2szOVk0RVBZaXVIZU1CSEpwV2ttM1FlSkVMUEVZTDBXOWdnWkthOXpHSHp2OGJJN0RIZS80WWJoZmUyRTlpb085Sk0zMjNidWJzU2tRdmlNdytuM1FOSlVlOHRPdHJ6eTV2MkVhNjdBMnhWWlRzNHU4eTFqam51NTNOQzNrRWJpRS9aanNpdWxPajIwUTY4VTZZRWltdHhrdXVDM3ZMOFlaTG8yc0ZFYWRReHV2RzlsRTBldDYrbGsrN01RSG9OMFBZbHNhWGIrdmFOM3RyMXk0MmRWbWtmU2JWNXhpM0JiVjF1MTFNOXdEMGxPekxYbllDUjkwdDR3dCtyaXVvS0ExOXl1d0QycExBSndRN1ozeStjSW5pOGtnNjE4blVTQVQyTzZWSy8zV0JJYTFoVDJldzdFb0ZTcmFNSWorVFdFMCs5NHJhSEFKd0VUOStaN3BsWEVqcTN4REgzUURnNUlHTys1TDhMMitKLytpd3p4UE14Z0VpQmdBSS9peVpvSEFtTVAwL2VFNWs5eTZpTmUxazZ3N1d6NHVjcnFUcHh5WjNCZVVKdjJSeXAzWEZUUFlkeUw3Skl3UjRSa2p6TjdhelhpMkNJTUUwcFRYb2RaYzdJU2pkK3JMNEZIeEdFeTNBUkhVQXgxVi9MWnZpamw4d1dWMm0xZlNDZitzd2MwVzA2T3FhNW02U0t6eXRSbmhRVmFnTTZNY2hSZ2tKTVhZRThZaEI5dW1Lb29UcEdScU5rSzRmeDRPVyt1KzRDcmNHWXJnVFo1dm1HOVRVanRmbmlxWVpVV1Q2VWcwZUUzaGtpVUc1bkJwZ2pGMTREWGJvK0RRUmJmcFYxM3pNcGxJSkN1YytWTEp4R2dhenhGd1dJM1pMbmo2NVg1MDB4QjAzb1owTUw0YVNQNkd2UVhLYnVQTXJVcXZtYVFoM1VHWnJSVVpOaVlvOXRYVFJVN3hHbGRTeXBZNDViQXJMVUxNenRBYjY1aW1kSU9hUkRZcElVRjVCc0lvN0tRNi9VelN3dEkyU2VkUzFrN1FvSVhQU2MwR1RGNHV6V2h4THh2d054RjdoOXIxMkxMWVhJZDlGRDVzck8vUzMyYktlV3paUEpxWC9BTTNRaDFwdWZTdDc2amlRdllFbDFtTTBlTTdUTWt3QUEzdDlTRG03NlphWEtMWjU2NXZwTzBpeHZmUXlDSTJqNUJPaFYvazJQaVYzc1J0NEtxRmwvbUR1RG5VejZtN1Z2NzhSUGIzSTFqUE1YVkNxVllpZitFVEZIblczcmNoTWI1MWUxdXVWcHpMMGxnR1RJQVVNYVJVRmNLQURzSUVFMFFJWm1LZnlEVWxGWlljbzJhNi80M1FEQ2FYc2tjTUdPSzJzNUtGenFQeWk3c2pmSjlTOE5Wb2pqOG9YMU1qdXlmRUVRSUNQY1dpbUFXZ2pMQndrSnEwT0pqaWRIWnoyaVkzT1p6c0VrZG5yRU5seW5TTllZbDV5aERLWFlnOGoxYnFUQ0Foc25DN3k1S3RRS0p0WGxtSXloVXU4TkxMQkJaaXl1UU9VeURiSmRFVW15RFdackw5Q2VhYVpZaElIN1VTMHVKWG1lYlRJaWpaQmNyRjgwMjg2SnlldjdFeTF4RVFPcXNtVHc3bkt0ZEFVWmV6eVRlRGxreTNYQkdVWjQzTEtwaDdRSEs3eHFlQVFldnRvY1dSbEV0SmxBMDFSWk1wUktUVkZYZXJweFZ4RnhiNjhuRjdqc3E3R2JkVTIwQnVlSVZKT3dzZkZxNFRQQklVU09MaTRKTXJRVno5OWRaTWhhUEM0V1RzWXlnRW5acXM0bXJ3WUtkeGV1UGxZS1RMSnFEUy9WNG80aENvK0R2TlFiL1FJK3ZIb3JlZmdNVFBNbTRZNXUwNzVQNkpJWGhIL2UxL3lud0VBKSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfWJvZHksaHRtbHtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS40fWh0bWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfS5tb25zdGVyLXBhcmFncmFwaCxwe2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjY7dGV4dC1hbGlnbjpqdXN0aWZ5fS5tb25zdGVyLWgxLGgxe2ZvbnQtc2l6ZTozcmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjE1O21hcmdpbjo0cmVtIDAgMS41cmVtfS5tb25zdGVyLWgyLGgye2ZvbnQtc2l6ZToyLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMyxoM3tmb250LXNpemU6MnJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4yNTttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDQsaDR7Zm9udC1zaXplOjEuNXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNSxoNXtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OmJvbGRlcjtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg2LGg2e2ZvbnQtc2l6ZToxLjNyZW07Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19cCtoMXttYXJnaW4tdG9wOjMuNzVyZW19cCtoMnttYXJnaW4tdG9wOjNyZW19cCtoM3ttYXJnaW4tdG9wOjIuMjVyZW19cCtoNHttYXJnaW4tdG9wOjEuNXJlbX1wK2g1e21hcmdpbi10b3A6Ljc1cmVtfWRpditoMSxkaXYraDIsZGl2K2gzLGRpditoNCxkaXYraDUsZGl2K2g2LHAraDZ7bWFyZ2luLXRvcDowfS5kZWNve2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMSkgMCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTIpIDUwJSx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTMpIDEwMCUpOy13ZWJraXQtYmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1jbGlwOnRleHQ7YmFja2dyb3VuZC1zaXplOmNvdmVyO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTEpO3RleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudDstd2Via2l0LXRleHQtZmlsbC1jb2xvcjp0cmFuc3BhcmVudH06Oi1tb3otc2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9OjpzZWxlY3Rpb257YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xKX1rYmR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLXJhZGl1czouMjVyZW07Ym9yZGVyLXJhZGl1czoxMHJlbTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjc1JTtmb250LXdlaWdodDo3MDA7bGluZS1oZWlnaHQ6MTtwYWRkaW5nOi4yNWVtIC42ZW07dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7d2hpdGUtc3BhY2U6bm93cmFwfWRldGFpbHN7bWFyZ2luLWJvdHRvbToxcmVtfXN1bW1hcnl7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mZWF0dXJlLXNldHRpbmdzOlxcXCJ0bnVtXFxcIjtmb250LXdlaWdodDo3MDA7bGV0dGVyLXNwYWNpbmc6LjFlbTtwYWRkaW5nOi42cmVtIDFyZW19ZGV0YWlsc1tvcGVuXXtwYWRkaW5nOi42cmVtIDFyZW0gLjc1cmVtfWRldGFpbHNbb3Blbl0gc3VtbWFyeXttYXJnaW4tYm90dG9tOi41cmVtO3BhZGRpbmc6MH0ubW9uc3Rlci1uby11c2VyLXNlbGVjdHstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9QGtleWZyYW1lcyBkZXRhaWxzLXNob3d7MCV7b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0uNWVtKX19ZGV0YWlsc1tvcGVuXT46bm90KHN1bW1hcnkpe2FuaW1hdGlvbjpkZXRhaWxzLXNob3cgLjE1cyBlYXNlLWluLW91dH1kZXRhaWxzW29wZW5dPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0ubW9ub3NwYWNle2ZvbnQtZmFtaWx5OnZhcigtLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlKX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3V0bGluZTpub25lO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdLmZsZXh7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9Omhvc3R7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6YmxvY2t9OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWZvbnQtZmFtaWx5Oi1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LFxcXCJRdWlja3NhbmRcXFwiLFxcXCJTZWdvZSBVSVxcXCIsXFxcIlJvYm90b1xcXCIsXFxcIk94eWdlblxcXCIsXFxcIlVidW50dVxcXCIsXFxcIkNhbnRhcmVsbFxcXCIsXFxcIkZpcmEgU2Fuc1xcXCIsXFxcIkRyb2lkIFNhbnNcXFwiLFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsQXJpYWwsc2Fucy1zZXJpZixcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCI7LS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZTpcXFwiQ29uc29sYXNcXFwiLFxcXCJDb3VyaWVyIE5ld1xcXCIsXFxcIlJvYm90byBNb25vXFxcIixcXFwiU291cmNlIENvZGUgUHJvXFxcIixcXFwiRmlyYSBNb25vXFxcIixtb25vc3BhY2U7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi02KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTYpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTIpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS00KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xOiM4MzNhYjQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTI6I2ZkMWQxZDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMzojZmNiMDQ1Oy0tbW9uc3Rlci1ib3gtc2hhZG93LTE6bm9uZTstLW1vbnN0ZXItYm94LXNoYWRvdy0yOi0xcHggMXB4IDEwcHggMXB4IGhzbGEoMCwwJSw3NiUsLjYxKTstLW1vbnN0ZXItdGV4dC1zaGFkb3c6bm9uZTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTIpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci13aWR0aDoycHg7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1vZmYtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTUpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItYm9yZGVyLXN0eWxlOnNvbGlkOy0tbW9uc3Rlci1ib3JkZXItd2lkdGg6M3B4Oy0tbW9uc3Rlci1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXBvcHBlci13aXRoYXJycm93LWRpc3RhbmNlOi00cHg7LS1tb25zdGVyLXotaW5kZXgtZGVmYXVsdDowOy0tbW9uc3Rlci16LWluZGV4LW91dGxpbmU6MTA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd246MjAwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duLW92ZXJsYXk6MjEwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreTozMDA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5LW92ZXJsYXk6MzEwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkOjQwMDstLW1vbnN0ZXItei1pbmRleC1maXhlZC1vdmVybGF5OjQxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcDo1MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3Atb3ZlcmxheTo1MTA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzOjYwMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXMtb3ZlcmxheTo2MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWw6NzAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLW92ZXJsYXk6NzEwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXI6ODAwOy0tbW9uc3Rlci16LWluZGV4LXBvcG92ZXItb3ZlcmxheTo4MTA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcDo4MDA7LS1tb25zdGVyLXotaW5kZXgtdG9vbHRpcC1vdmVybGF5OjkxMDstLW1vbnN0ZXItc3BhY2UtMDowOy0tbW9uc3Rlci1zcGFjZS0xOjJweDstLW1vbnN0ZXItc3BhY2UtMjo0cHg7LS1tb25zdGVyLXNwYWNlLTM6NnB4Oy0tbW9uc3Rlci1zcGFjZS00OjEwcHg7LS1tb25zdGVyLXNwYWNlLTU6MTZweDstLW1vbnN0ZXItc3BhY2UtNjoyNnB4Oy0tbW9uc3Rlci1zcGFjZS03OjQycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC00OjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTc6NzY4cHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtOTo5OTJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0xMjoxMjAwcHg7LS1tb25zdGVyLWRyYWdnZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS13aWR0aDo0cHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLWhlaWdodDo1MHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXthbGlnbi1jb250ZW50OnN0cmV0Y2g7Ym9yZGVyOjA7Ym94LXNpemluZzpib3JkZXItYm94O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC13cmFwOm5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydDttYXJnaW46MDttaW4taGVpZ2h0OjEwMHZoO3BhZGRpbmc6MH1bZGF0YS1tb25zdGVyLXJvbGU9aGVhZGVyXXtoZWlnaHQ6NjRweDttYXJnaW46MCAwIDAgNjBweH1bZGF0YS1tb25zdGVyLXJvbGU9Y29udGVudF0sW2RhdGEtbW9uc3Rlci1yb2xlPWZvb3Rlcl0sW2RhdGEtbW9uc3Rlci1yb2xlPWhlYWRlcl17YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uLy4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0LCB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuLi8uLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IHBhcnNlTG9jYWxlIH0gZnJvbSBcIi4uL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IFByb3ZpZGVyIH0gZnJvbSBcIi4uL3Byb3ZpZGVyLm1qc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRpb25zIH0gZnJvbSBcIi4uL3RyYW5zbGF0aW9ucy5tanNcIjtcblxuZXhwb3J0IHsgRW1iZWQgfTtcblxuLyoqXG4gKiBUaGUgRW1iZWQgcHJvdmlkZXIgcmV0cmlldmVzIGEgSlNPTiBmaWxlIGZyb20gdGhlIGdpdmVuIFNjcmlwdCBUYWcuXG4gKlxuICogQGV4dGVybmFsRXhhbXBsZSAuLi8uLi8uLi9leGFtcGxlL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMzMDY2fVxuICovXG5jbGFzcyBFbWJlZCBleHRlbmRzIFByb3ZpZGVyIHtcblx0LyoqXG5cdCAqIGBgYGh0bWxcblx0ICogPHNjcmlwdCBpZD1cInRyYW5zbGF0aW9uc1wiIHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCI+XG5cdCAqIHtcblx0ICogICAgIFwiaGVsbG9cIjogXCJIYWxsb1wiXG5cdCAqIH1cblx0ICogPC9zY3JpcHQ+XG5cdCAqIGBgYFxuXHQgKlxuXHQgKlxuXHQgKiBgYGBqYXZhc2NyaXB0XG5cdCAqIG5ldyBFbWJlZCgndHJhbnNsYXRpb25zJylcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR8c3RyaW5nfSBlbGVtZW50T3JJZFxuXHQgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuXHQgKi9cblx0Y29uc3RydWN0b3IoZWxlbWVudE9ySWQsIG9wdGlvbnMpIHtcblx0XHRzdXBlcihvcHRpb25zKTtcblxuXHRcdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbnMgPSB7fTtcblx0XHR9XG5cblx0XHRpZiAoZWxlbWVudE9ySWQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBAcHJvcGVydHkge0hUTUxFbGVtZW50fHN0cmluZ31cblx0XHRcdCAqL1xuXHRcdFx0dGhpcy50cmFuc2xhdGVFbGVtZW50ID0gZWxlbWVudE9ySWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogQHByb3BlcnR5IHtIVE1MRWxlbWVudHxzdHJpbmd9XG5cdFx0XHQgKi9cblx0XHRcdHRoaXMudHJhbnNsYXRlRWxlbWVudCA9IGdldERvY3VtZW50KCkuZ2V0RWxlbWVudEJ5SWQoXG5cdFx0XHRcdHZhbGlkYXRlU3RyaW5nKGVsZW1lbnRPcklkKSxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogQHByaXZhdGVcblx0XHQgKiBAcHJvcGVydHkge09iamVjdH0gb3B0aW9uc1xuXHRcdCAqL1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gZXh0ZW5kKFxuXHRcdFx0e30sXG5cdFx0XHRzdXBlci5kZWZhdWx0cyxcblx0XHRcdHRoaXMuZGVmYXVsdHMsXG5cdFx0XHR2YWxpZGF0ZU9iamVjdChvcHRpb25zKSxcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmF1bHRzXG5cdCAqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEl9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7TG9jYWxlfHN0cmluZ30gbG9jYWxlXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRnZXRUcmFuc2xhdGlvbnMobG9jYWxlKSB7XG5cdFx0aWYgKGlzU3RyaW5nKGxvY2FsZSkpIHtcblx0XHRcdGxvY2FsZSA9IHBhcnNlTG9jYWxlKGxvY2FsZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGlmICh0aGlzLnRyYW5zbGF0ZUVsZW1lbnQgPT09IG51bGwpIHtcblx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIlRleHQgbm90IGZvdW5kXCIpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoISh0aGlzLnRyYW5zbGF0ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MU2NyaXB0RWxlbWVudCkpIHtcblx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIkVsZW1lbnQgaXMgbm90IGEgc2NyaXB0IHRhZ1wiKSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMudHJhbnNsYXRlRWxlbWVudC50eXBlICE9PSBcImFwcGxpY2F0aW9uL2pzb25cIikge1xuXHRcdFx0XHRyZWplY3QoXG5cdFx0XHRcdFx0bmV3IEVycm9yKFwiRWxlbWVudCBpcyBub3QgYSBzY3JpcHQgdGFnIHdpdGggdHlwZSBhcHBsaWNhdGlvbi9qc29uXCIpLFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGxldCB0cmFuc2xhdGlvbnMgPSBudWxsO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dHJhbnNsYXRpb25zID0gSlNPTi5wYXJzZSh0aGlzLnRyYW5zbGF0ZUVsZW1lbnQuaW5uZXJIVE1MLnRyaW0oKSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodHJhbnNsYXRpb25zID09PSBudWxsKSB7XG5cdFx0XHRcdHJlamVjdChuZXcgRXJyb3IoXCJUcmFuc2xhdGlvbnMgbm90IGZvdW5kIG9yIGludmFsaWRcIikpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHQgPSBuZXcgVHJhbnNsYXRpb25zKGxvY2FsZSk7XG5cdFx0XHR0LmFzc2lnblRyYW5zbGF0aW9ucyh0cmFuc2xhdGlvbnMpO1xuXG5cdFx0XHRyZXNvbHZlKHQpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSB0cmFuc2xhdGlvbnMgZm9yIHRoZSBjdXJyZW50IGRvY3VtZW50LlxuXHQgKlxuXHQgKiBgc2NyaXB0W2RhdGEtbW9uc3Rlci1yb2xlPXRyYW5zbGF0aW9uc11gIGlzIHNlYXJjaGVkIGZvciBhbmQgdGhlIHRyYW5zbGF0aW9ucyBhcmUgYXNzaWduZWQgdG8gdGhlIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbGVtZW50XG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPEF3YWl0ZWQ8KltdPj58UHJvbWlzZTxBd2FpdGVkPHVua25vd24+W10+fVxuXHQgKi9cblx0c3RhdGljIGFzc2lnblRyYW5zbGF0aW9uc1RvRWxlbWVudChlbGVtZW50KSB7XG5cdFx0Y29uc3QgZCA9IGdldERvY3VtZW50KCk7XG5cblx0XHRpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHRlbGVtZW50ID0gZC5xdWVyeVNlbGVjdG9yKFwiYm9keVwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBsaXN0ID0gZC5xdWVyeVNlbGVjdG9yQWxsKFwic2NyaXB0W2RhdGEtbW9uc3Rlci1yb2xlPXRyYW5zbGF0aW9uc11cIik7XG5cdFx0aWYgKGxpc3QgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHRcdH1cblxuXHRcdGNvbnN0IHByb21pc2VzID0gW107XG5cblx0XHRsaXN0LmZvckVhY2goKHRyYW5zbGF0aW9uRWxlbWVudCkgPT4ge1xuXHRcdFx0Y29uc3QgcCA9IG5ldyBFbWJlZCh0cmFuc2xhdGlvbkVsZW1lbnQsIHt9KTtcblx0XHRcdHByb21pc2VzLnB1c2gocC5hc3NpZ25Ub0VsZW1lbnQodW5kZWZpbmVkLCBlbGVtZW50KSk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZ2V0RG9jdW1lbnQsIGdldFdpbmRvdyB9IGZyb20gXCIuL3V0aWwubWpzXCI7XG5cbmV4cG9ydCB7IGRvbVJlYWR5LCB3aW5kb3dSZWFkeSB9O1xuXG4vKipcbiAqIFRoaXMgdmFyaWFibGUgaXMgYSBwcm9taXNlIGZ1bGZpbGxlZCBhcyBzb29uIGFzIHRoZSBkb20gaXMgYXZhaWxhYmxlLlxuICpcbiAqIFRoZSBET01Db250ZW50TG9hZGVkIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIG9yaWdpbmFsIEhUTUwgZG9jdW1lbnQgaXMgZnVsbHkgbG9hZGVkIGFuZCBwYXJzZWRcbiAqIHdpdGhvdXQgd2FpdGluZyBmb3Igc3R5bGVzaGVldHMsIGltYWdlcywgYW5kIHN1YmZyYW1lcyB0byBmaW5pc2ggbG9hZGluZy5cbiAqXG4gKiBkb2N1bWVudC5yZWFkeVN0YXRlIGNoYW5nZXMgdG8gaW50ZXJhY3RpdmVcbiAqIHdpbmRvdydzIERPTUNvbnRlbnRMb2FkZWQgZXZlbnQgZ2V0cyBmaXJlZFxuICogZG9jdW1lbnQucmVhZHlTdGF0ZSBjaGFuZ2VzIHRvIGNvbXBsZXRlXG4gKiB3aW5kb3cncyBsb2FkIGV2ZW50IGdldHMgZmlyZWQgbG9hZFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMzEuMFxuICogQHN1bW1hcnkgdmFyaWFibGUgdG8gY2hlY2sgaWYgZG9tIGlzIHJlYWR5XG4gKiBAdHlwZSB7UHJvbWlzZX1cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L0RPTUNvbnRlbnRMb2FkZWRfZXZlbnRcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L3JlYWR5U3RhdGVcbiAqL1xuY29uc3QgZG9tUmVhZHkgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cblx0aWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwibG9hZGluZ1wiKSB7XG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgcmVzb2x2ZSk7XG5cdH0gZWxzZSB7XG5cdFx0cmVzb2x2ZSgpO1xuXHR9XG59KTtcblxuLyoqXG4gKiBUaGlzIHZhcmlhYmxlIGlzIGEgcHJvbWlzZSBpcyBmdWxmaWxsZWQgYXMgc29vbiBhcyB0aGUgd2luZG93cyBpcyBhdmFpbGFibGUuXG4gKlxuICogVGhlIGxvYWQgZXZlbnQgZmlyZXMgd2hlbiB0aGUgZW50aXJlIHBhZ2UgaXMgbG9hZGVkLCBpbmNsdWRpbmcgYWxsIGRlcGVuZGVudCByZXNvdXJjZXMgc3VjaCBhcyBzdHlsZXNoZWV0cyxcbiAqIGFzc2V0cywgYW5kIGltYWdlcy4gVW5saWtlIERPTUNvbnRlbnRMb2FkZWQsIHdoaWNoIGZpcmVzIGFzIHNvb24gYXMgdGhlIERPTSBvZiB0aGUgcGFnZSBpcyBsb2FkZWQsXG4gKiB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSByZXNvdXJjZXMgdG8gZmluaXNoIGxvYWRpbmcuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zMS4wXG4gKiBAc3VtbWFyeSB2YXJpYWJsZSB0byBjaGVjayBpZiB3aW5kb3cgaXMgcmVhZHlcbiAqIEB0eXBlIHtQcm9taXNlfVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93L2xvYWRfZXZlbnRcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50L3JlYWR5U3RhdGVcbiAqL1xuY29uc3Qgd2luZG93UmVhZHkgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cdGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuXG5cdGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcblx0XHRyZXNvbHZlKCk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIHJlc29sdmUpO1xuXHR9XG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBCYXNlV2l0aE9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZXdpdGhvcHRpb25zLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBTdGFjayB9IGZyb20gXCIuLi90eXBlcy9zdGFjay5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgRm9jdXNNYW5hZ2VyIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEtFWV9ET0NVTUVOVCA9IFwiZG9jdW1lbnRcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgS0VZX0NPTlRFWFQgPSBcImNvbnRleHRcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3Qgc3RhY2tTeW1ib2wgPSBTeW1ib2woXCJzdGFja1wiKTtcblxuLyoqXG4gKiBXaXRoIHRoZSBmb2N1cyBtYW5hZ2VyIHRoZSBmb2N1cyBjYW4gYmUgc3RvcmVkIGluIGEgZG9jdW1lbnQsIHJlY2FsbGVkIGFuZCBtb3ZlZC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWQgbG9jYWxlXG4gKiBAc3VtbWFyeSBIYW5kbGUgdGhlIGZvY3VzXG4gKi9cbmNsYXNzIEZvY3VzTWFuYWdlciBleHRlbmRzIEJhc2VXaXRoT3B0aW9ucyB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdHx1bmRlZmluZWR9IG9wdGlvbnNcblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRzdXBlcihvcHRpb25zKTtcblx0XHR2YWxpZGF0ZUluc3RhbmNlKHRoaXMuZ2V0T3B0aW9uKEtFWV9ET0NVTUVOVCksIEhUTUxEb2N1bWVudCk7XG5cblx0XHR0aGlzW3N0YWNrU3ltYm9sXSA9IG5ldyBTdGFjaygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vZm9jdXNtYW5hZ2VyXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7SFRNTERvY3VtZW50fSBkb2N1bWVudCB0aGUgZG9jdW1lbnQgb2JqZWN0IGludG8gd2hpY2ggdGhlIG5vZGUgaXMgdG8gYmUgYXBwZW5kZWRcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0W0tFWV9ET0NVTUVOVF06IGdldEdsb2JhbE9iamVjdChcImRvY3VtZW50XCIpLFxuXHRcdFx0W0tFWV9DT05URVhUXTogdW5kZWZpbmVkLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbWVtYmVycyB0aGUgY3VycmVudCBmb2N1cyBvbiBhIHN0YWNrLlxuXHQgKiBTZXZlcmFsIGZvY3VzIGNhbiBiZSBzdG9yZWQuXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlcn1cblx0ICovXG5cdHN0b3JlRm9jdXMoKSB7XG5cdFx0Y29uc3QgYWN0aXZlID0gdGhpcy5nZXRBY3RpdmUoKTtcblx0XHRpZiAoYWN0aXZlIGluc3RhbmNlb2YgTm9kZSkge1xuXHRcdFx0dGhpc1tzdGFja1N5bWJvbF0ucHVzaChhY3RpdmUpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbGFzdCBmb2N1cyBvbiB0aGUgc3RhY2sgaXMgc2V0IGFnYWluXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLkZvY3VzTWFuYWdlcn1cblx0ICovXG5cdHJlc3RvcmVGb2N1cygpIHtcblx0XHRjb25zdCBsYXN0ID0gdGhpc1tzdGFja1N5bWJvbF0ucG9wKCk7XG5cdFx0aWYgKGxhc3QgaW5zdGFuY2VvZiBOb2RlKSB7XG5cdFx0XHR0aGlzLmZvY3VzKGxhc3QpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7Tm9kZX0gZWxlbWVudFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IHByZXZlbnRTY3JvbGxcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2Zcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uRm9jdXNNYW5hZ2VyfVxuXHQgKi9cblx0Zm9jdXMoZWxlbWVudCwgcHJldmVudFNjcm9sbCkge1xuXHRcdHZhbGlkYXRlSW5zdGFuY2UoZWxlbWVudCwgTm9kZSk7XG5cblx0XHRlbGVtZW50LmZvY3VzKHtcblx0XHRcdHByZXZlbnRTY3JvbGw6IHByZXZlbnRTY3JvbGwgPz8gZmFsc2UsXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtFbGVtZW50fVxuXHQgKi9cblx0Z2V0QWN0aXZlKCkge1xuXHRcdHJldHVybiB0aGlzLmdldE9wdGlvbihLRVlfRE9DVU1FTlQpLmFjdGl2ZUVsZW1lbnQ7XG5cdH1cblxuXHQvKipcblx0ICogU2VsZWN0IGFsbCBlbGVtZW50cyB0aGF0IGNhbiBiZSBmb2N1c2VkXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gcXVlcnlcblx0ICogQHJldHVybiB7YXJyYXl9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mXG5cdCAqL1xuXHRnZXRGb2N1c2FibGUocXVlcnkpIHtcblx0XHRsZXQgY29udGV4dEVsZW1lbnQgPSB0aGlzLmdldE9wdGlvbihLRVlfQ09OVEVYVCk7XG5cdFx0aWYgKGNvbnRleHRFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnRleHRFbGVtZW50ID0gdGhpcy5nZXRPcHRpb24oS0VZX0RPQ1VNRU5UKTtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZUluc3RhbmNlKGNvbnRleHRFbGVtZW50LCBOb2RlKTtcblxuXHRcdGlmIChxdWVyeSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YWxpZGF0ZVN0cmluZyhxdWVyeSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFtcblx0XHRcdC4uLmNvbnRleHRFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG5cdFx0XHRcdCdkZXRhaWxzLCBidXR0b24sIGlucHV0LCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSksIHNlbGVjdCwgdGV4dGFyZWEsIGFbaHJlZl0sIGJvZHknLFxuXHRcdFx0KSxcblx0XHRdLmZpbHRlcigoZWxlbWVudCkgPT4ge1xuXHRcdFx0aWYgKHF1ZXJ5ICE9PSB1bmRlZmluZWQgJiYgIWVsZW1lbnQubWF0Y2hlcyhxdWVyeSkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0aWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIikgPT09IFwidHJ1ZVwiKSByZXR1cm4gZmFsc2U7XG5cblx0XHRcdGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdFx0aWYgKHJlY3Qud2lkdGggPT09IDApIHJldHVybiBmYWxzZTtcblx0XHRcdGlmIChyZWN0LmhlaWdodCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnlcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uRm9jdXNNYW5hZ2VyfVxuXHQgKi9cblx0Zm9jdXNOZXh0KHF1ZXJ5KSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHRoaXMuZ2V0QWN0aXZlKCk7XG5cdFx0Y29uc3QgZm9jdXNhYmxlID0gdGhpcy5nZXRGb2N1c2FibGUocXVlcnkpO1xuXG5cdFx0aWYgKCFpc0FycmF5KGZvY3VzYWJsZSkgfHwgZm9jdXNhYmxlLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKGN1cnJlbnQgaW5zdGFuY2VvZiBOb2RlKSB7XG5cdFx0XHRjb25zdCBpbmRleCA9IGZvY3VzYWJsZS5pbmRleE9mKGN1cnJlbnQpO1xuXG5cdFx0XHRpZiAoaW5kZXggPiAtMSkge1xuXHRcdFx0XHR0aGlzLmZvY3VzKGZvY3VzYWJsZVtpbmRleCArIDFdIHx8IGZvY3VzYWJsZVswXSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmZvY3VzKGZvY3VzYWJsZVswXSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZm9jdXMoZm9jdXNhYmxlWzBdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcXVlcnlcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uRm9jdXNNYW5hZ2VyfVxuXHQgKi9cblx0Zm9jdXNQcmV2KHF1ZXJ5KSB7XG5cdFx0Y29uc3QgY3VycmVudCA9IHRoaXMuZ2V0QWN0aXZlKCk7XG5cdFx0Y29uc3QgZm9jdXNhYmxlID0gdGhpcy5nZXRGb2N1c2FibGUocXVlcnkpO1xuXG5cdFx0aWYgKCFpc0FycmF5KGZvY3VzYWJsZSkgfHwgZm9jdXNhYmxlLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0aWYgKGN1cnJlbnQgaW5zdGFuY2VvZiBOb2RlKSB7XG5cdFx0XHRjb25zdCBpbmRleCA9IGZvY3VzYWJsZS5pbmRleE9mKGN1cnJlbnQpO1xuXG5cdFx0XHRpZiAoaW5kZXggPiAtMSkge1xuXHRcdFx0XHR0aGlzLmZvY3VzKGZvY3VzYWJsZVtpbmRleCAtIDFdIHx8IGZvY3VzYWJsZVtmb2N1c2FibGUubGVuZ3RoIC0gMV0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5mb2N1cyhmb2N1c2FibGVbZm9jdXNhYmxlLmxlbmd0aCAtIDFdKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5mb2N1cyhmb2N1c2FibGVbZm9jdXNhYmxlLmxlbmd0aCAtIDFdKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi4vZGF0YS9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgcGFyc2VEYXRhVVJMIH0gZnJvbSBcIi4vZGF0YXVybC5tanNcIjtcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcIi4vaXMubWpzXCI7XG5pbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gXCIuL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tIFwiLi9pcy5tanNcIjtcblxuZXhwb3J0IHsgZXF1aXBXaXRoSW50ZXJuYWwgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgcHJvcGVydHlOYW1lID0gXCJpbnRlcm5hbERlZmF1bHRzXCI7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBleHRlbmRzIHRoZSBnaXZlbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIG1ldGhvZHM6XG4gKlxuICogLSBhdHRhY2hJbnRlcm5hbE9ic2VydmVyXG4gKiAtIGRldGFjaEludGVybmFsT2JzZXJ2ZXJcbiAqIC0gY29udGFpbnNJbnRlcm5hbE9ic2VydmVyXG4gKiAtIHNldEludGVybmFsXG4gKiAtIHNldEludGVybmFsc1xuICogLSBnZXRJbnRlcm5hbFxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuMTUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuZnVuY3Rpb24gZXF1aXBXaXRoSW50ZXJuYWwoKSB7XG5cdHZhbGlkYXRlT2JqZWN0KHRoaXMpO1xuXG5cdGlmICghaGFzR2V0dGVyKHRoaXMsIHByb3BlcnR5TmFtZSkpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgcHJvcGVydHlOYW1lLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdGNvbnN0IGRlZmF1bHRzID0gZXh0ZW5kKHt9LCB0aGlzW3Byb3BlcnR5TmFtZV0gfHwge30pO1xuXHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IG5ldyBQcm94eU9ic2VydmVyKGRlZmF1bHRzKTtcblxuXHQvKipcblx0ICogQXR0YWNoIGEgbmV3IG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHR0aGlzW1wiYXR0YWNoSW50ZXJuYWxPYnNlcnZlclwiXSA9IChvYnNlcnZlcikgPT4ge1xuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmF0dGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogRGV0YWNoIGEgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdHRoaXNbXCJkZXRhY2hJbnRlcm5hbE9ic2VydmVyXCJdID0gKG9ic2VydmVyKSA9PiB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiBhIG9ic2VydmVyIGlzIGF0dGFjaGVkXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHR0aGlzW1wiY29udGFpbnNJbnRlcm5hbE9ic2VydmVyXCJdID0gKG9ic2VydmVyKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLmNvbnRhaW5zT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBTZXQgYW4gaW50ZXJuYWwgdmFsdWUsIG5lc3RlZCBpbnRlcm5hbHMgY2FuIGJlIHNwZWNpZmllZCBieSBwYXRoIGBhLmIuY2Bcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKi9cblx0dGhpc1tcInNldEludGVybmFsXCJdID0gKHBhdGgsIHZhbHVlKSA9PiB7XG5cdFx0bmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpKS5zZXRWaWEocGF0aCwgdmFsdWUpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBzZXQgbXVsdGlwbGUgaW50ZXJuYWxzIGF0IG9uY2Vcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge0RhdGFzb3VyY2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uXG5cdCAqL1xuXHR0aGlzW1wic2V0SW50ZXJuYWxzXCJdID0gKG9wdGlvbnMpID0+IHtcblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSBwYXJzZU9wdGlvbnNKU09OKG9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdGV4dGVuZCh0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KCksIGRlZmF1bHRzLCBvcHRpb25zKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogbmVzdGVkIGludGVybmFscyBjYW4gYmUgc3BlY2lmaWVkIGJ5IHBhdGggYGEuYi5jYFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuXHQgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZVxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0dGhpc1tcImdldEludGVybmFsXCJdID0gKHBhdGgsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuXHRcdGxldCB2YWx1ZTtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YWx1ZSA9IG5ldyBQYXRoZmluZGVyKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KCkpLmdldFZpYShcblx0XHRcdFx0cGF0aCxcblx0XHRcdCk7XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG9ialxuICogQHBhcmFtIHByb3BcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc0dldHRlcihvYmosIHByb3ApIHtcblx0d2hpbGUgKGlzT2JqZWN0KG9iaikpIHtcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHByb3ApPy5bXCJnZXRcIl0pIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRvYmogPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKTtcblx0fVxuXG5cdHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gcGFyc2VPcHRpb25zSlNPTihkYXRhKSB7XG5cdGxldCBvYmogPSB7fTtcblxuXHRpZiAoIWlzU3RyaW5nKGRhdGEpKSB7XG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdC8vIHRoZSBjb25maWd1cmF0aW9uIGNhbiBiZSBzcGVjaWZpZWQgYXMgYSBkYXRhIHVybC5cblx0dHJ5IHtcblx0XHRjb25zdCBkYXRhVXJsID0gcGFyc2VEYXRhVVJMKGRhdGEpO1xuXHRcdGRhdGEgPSBkYXRhVXJsLmNvbnRlbnQ7XG5cdH0gY2F0Y2ggKGUpIHt9XG5cblx0dHJ5IHtcblx0XHRvYmogPSBKU09OLnBhcnNlKGRhdGEpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0dGhyb3cgZTtcblx0fVxuXG5cdHJldHVybiB2YWxpZGF0ZU9iamVjdChvYmopO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3RhdGVTeW1ib2wsIGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IEJhc2VXaXRoT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlcy9iYXNld2l0aG9wdGlvbnMubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgSUQgfSBmcm9tIFwiLi4vdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHsgUHJveHlPYnNlcnZlciB9IGZyb20gXCIuLi90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0NMQVNTLFxuXHRBVFRSSUJVVEVfSUQsXG5cdEFUVFJJQlVURV9USVRMRSxcbn0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBSZXNvdXJjZSwgS0VZX0RPQ1VNRU5ULCBLRVlfUVVFUlksIHJlZmVyZW5jZVN5bWJvbCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBLRVlfRE9DVU1FTlQgPSBcImRvY3VtZW50XCI7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzdHJpbmd9XG4gKi9cbmNvbnN0IEtFWV9RVUVSWSA9IFwicXVlcnlcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgS0VZX1RJTUVPVVQgPSBcInRpbWVvdXRcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVmZXJlbmNlU3ltYm9sID0gU3ltYm9sKFwicmVmZXJlbmNlXCIpO1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdGhlIGJhc2UgY2xhc3MgZm9yIGFsbCByZXNvdXJjZXMgdG8gYmUgbG9hZGVkLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgUmVzb3VyY2UgY2xhc3NcbiAqL1xuY2xhc3MgUmVzb3VyY2UgZXh0ZW5kcyBCYXNlV2l0aE9wdGlvbnMge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R8dW5kZWZpbmVkfSBvcHRpb25zXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cblx0XHRsZXQgdXJpID0gdGhpcy5nZXRPcHRpb24odGhpcy5jb25zdHJ1Y3Rvci5nZXRVUkxBdHRyaWJ1dGUoKSk7XG5cblx0XHRpZiAodXJpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1pc3Npbmcgc291cmNlXCIpO1xuXHRcdH0gZWxzZSBpZiAodXJpIGluc3RhbmNlb2YgVVJMKSB7XG5cdFx0XHR1cmkgPSB1cmkudG9TdHJpbmcoKTtcblx0XHR9IGVsc2UgaWYgKCFpc1N0cmluZyh1cmkpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ1bnN1cHBvcnRlZCB1cmwgdHlwZVwiKTtcblx0XHR9XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVt0aGlzLmNvbnN0cnVjdG9yLmdldFVSTEF0dHJpYnV0ZSgpXSA9IHVyaTtcblx0XHR0aGlzW2ludGVybmFsU3RhdGVTeW1ib2xdID0gbmV3IFByb3h5T2JzZXJ2ZXIoe1xuXHRcdFx0bG9hZGVkOiBmYWxzZSxcblx0XHRcdGVycm9yOiB1bmRlZmluZWQsXG5cdFx0fSk7XG5cblx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0gPSB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzQ29ubmVjdGVkKCkge1xuXHRcdGlmICh0aGlzW3JlZmVyZW5jZVN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIHRoaXNbcmVmZXJlbmNlU3ltYm9sXS5pc0Nvbm5lY3RlZDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgb3ZlcnJpZGRlbiBieSB0aGUgc3BlY2lhbCBjbGFzc2VzIGFuZCBjcmVhdGVzIHRoZSBET00gb2JqZWN0LlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBhbHNvIGNhbGxlZCBpbXBsaWNpdGx5LCBpZiBub3QgeWV0IGRvbmUgZXhwbGljaXRseSwgYnkgY2FsbGluZyBgY29ubmVjdCgpYC5cblx0ICpcblx0ICogQHRocm93cyB7RXJyb3J9IHRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlfVxuXHQgKi9cblx0Y3JlYXRlKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgdGhlIEhUTUxFbGVtZW50IHRvIHRoZSBzcGVjaWZpZWQgZG9jdW1lbnQuXG5cdCAqIElmIHRoZSBlbGVtZW50IGhhcyBub3QgeWV0IGJlZW4gY3JlYXRlZCwgYGNyZWF0ZSgpYCBpcyBjYWxsZWQgaW1wbGljaXRseS5cblx0ICpcblx0ICogdGhyb3dzIHtFcnJvcn0gdGFyZ2V0IG5vdCBmb3VuZFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZX1cblx0ICovXG5cdGNvbm5lY3QoKSB7XG5cdFx0aWYgKCEodGhpc1tyZWZlcmVuY2VTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHR0aGlzLmNyZWF0ZSgpO1xuXHRcdH1cblxuXHRcdGFwcGVuZFRvRG9jdW1lbnQuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge0RvY3VtZW50fSBkb2N1bWVudCB0aGUgZG9jdW1lbnQgb2JqZWN0IGludG8gd2hpY2ggdGhlIG5vZGUgaXMgdG8gYmUgYXBwZW5kZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHNyYy9ocmVmIHVybCB0byB0aGUgY29ycmVzcG9uZGluZyByZXNvdXJjZVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcXVlcnkgZGVmaW5lcyB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIHJlc291cmNlIGlzIHRvIGJlIGhvb2tlZCBpbnRvIHRoZSBkb20uXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCBlbGVtZW50IGF0dHJpYnV0ZSBpZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGl0bGUgZWxlbWVudCBhdHRyaWJ1dGUgdGl0bGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNsYXNzIGVsZW1lbnQgYXR0cmlidXRlIGNsYXNzXG5cdCAqIEBwcm9wZXJ0eSB7aW50fSB0aW1lb3V0IHRpbWVvdXRcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gZXh0ZW5kKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0W3RoaXMuY29uc3RydWN0b3IuZ2V0VVJMQXR0cmlidXRlKCldOiB1bmRlZmluZWQsXG5cdFx0XHRbS0VZX0RPQ1VNRU5UXTogZ2V0R2xvYmFsT2JqZWN0KFwiZG9jdW1lbnRcIiksXG5cdFx0XHRbS0VZX1FVRVJZXTogXCJoZWFkXCIsXG5cdFx0XHRbS0VZX1RJTUVPVVRdOiAxMDAwMCxcblx0XHRcdFtBVFRSSUJVVEVfSURdOiBuZXcgSUQoXCJyZXNvdXJjZVwiKS50b1N0cmluZygpLFxuXHRcdFx0W0FUVFJJQlVURV9DTEFTU106IHVuZGVmaW5lZCxcblx0XHRcdFtBVFRSSUJVVEVfVElUTEVdOiB1bmRlZmluZWQsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogV2l0aCBgYXZhaWxhYmxlKClgIHlvdSBjYW4gY2hlY2sgaWYgYSByZXNvdXJjZSBpcyBhdmFpbGFibGUuXG5cdCAqIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiB0aGUgdGFnIGlzIGluY2x1ZGVkIGFuZCB0aGUgcmVzb3VyY2UgaXMgbG9hZGVkLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0YXZhaWxhYmxlKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXHRcdGlmICghKHNlbGZbcmVmZXJlbmNlU3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwibm8gZWxlbWVudFwiKTtcblx0XHR9XG5cblx0XHRpZiAoIXNlbGYuaXNDb25uZWN0ZWQoKSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KFwiZWxlbWVudCBub3QgY29ubmVjdGVkXCIpO1xuXHRcdH1cblxuXHRcdGlmIChzZWxmW2ludGVybmFsU3RhdGVTeW1ib2xdLmdldFN1YmplY3QoKVtcImxvYWRlZFwiXSA9PT0gdHJ1ZSkge1xuXHRcdFx0aWYgKHNlbGZbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uZ2V0U3ViamVjdCgpW1wiZXJyb3JcIl0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3Qoc2VsZltpbnRlcm5hbFN0YXRlU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJlcnJvclwiXSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0Y29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRyZWplY3QoXCJ0aW1lb3V0XCIpO1xuXHRcdFx0fSwgc2VsZi5nZXRPcHRpb24oXCJ0aW1lb3V0XCIpKTtcblxuXHRcdFx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuXHRcdFx0XHRjbGVhclRpbWVvdXQodGltZW91dCk7XG5cdFx0XHRcdHNlbGZbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHR9KTtcblxuXHRcdFx0c2VsZltpbnRlcm5hbFN0YXRlU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFVSTEF0dHJpYnV0ZSgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlc1wiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9yZXNvdXJjZVwiKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogdGhyb3dzIHtFcnJvcn0gdGFyZ2V0IG5vdCBmb3VuZFxuICovXG5mdW5jdGlvbiBhcHBlbmRUb0RvY3VtZW50KCkge1xuXHRjb25zdCB0YXJnZXROb2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmdldE9wdGlvbihLRVlfUVVFUlksIFwiaGVhZFwiKSk7XG5cdGlmICghKHRhcmdldE5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0YXJnZXQgbm90IGZvdW5kXCIpO1xuXHR9XG5cblx0YWRkRXZlbnRzLmNhbGwodGhpcyk7XG5cdHRhcmdldE5vZGUuYXBwZW5kQ2hpbGQodGhpc1tyZWZlcmVuY2VTeW1ib2xdKTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7YWRkRXZlbnRzfVxuICovXG5mdW5jdGlvbiBhZGRFdmVudHMoKSB7XG5cdGNvbnN0IG9uRXJyb3IgPSAoKSA9PiB7XG5cdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvbkVycm9yKTtcblx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgb25Mb2FkKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uc2V0U3ViamVjdCh7XG5cdFx0XHRsb2FkZWQ6IHRydWUsXG5cdFx0XHRlcnJvcjogYCR7XG5cdFx0XHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXVt0aGlzLmNvbnN0cnVjdG9yLmdldFVSTEF0dHJpYnV0ZSgpXVxuXHRcdFx0fSBpcyBub3QgYXZhaWxhYmxlYCxcblx0XHR9KTtcblxuXHRcdHJldHVybjtcblx0fTtcblxuXHRjb25zdCBvbkxvYWQgPSAoKSA9PiB7XG5cdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvbkVycm9yKTtcblx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgb25Mb2FkKTtcblx0XHR0aGlzW2ludGVybmFsU3RhdGVTeW1ib2xdLmdldFN1YmplY3QoKVtcImxvYWRlZFwiXSA9IHRydWU7XG5cdH07XG5cblx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIG9uTG9hZCwgZmFsc2UpO1xuXHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG9uRXJyb3IsIGZhbHNlKTtcblxuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN0YXRlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1xuXHRBVFRSSUJVVEVfQ0xBU1MsXG5cdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdEFUVFJJQlVURV9JRCxcblx0QVRUUklCVVRFX1NSQyxcblx0QVRUUklCVVRFX1RJVExFLFxuXHRBVFRSSUJVVEVfVFlQRSxcblx0VEFHX1NDUklQVCxcbn0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdEtFWV9ET0NVTUVOVCxcblx0S0VZX1FVRVJZLFxuXHRyZWZlcmVuY2VTeW1ib2wsXG5cdFJlc291cmNlLFxufSBmcm9tIFwiLi4vcmVzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IERhdGEgfTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gZW1iZWQgZGF0YS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIERhdGEgUmVzb3VyY2UgY2xhc3NcbiAqL1xuY2xhc3MgRGF0YSBleHRlbmRzIFJlc291cmNlIHtcblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtb2RlPWNvcnMgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL2ZldGNoXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjcmVkZW50aWFscz1zYW1lLW9yaWdpbiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvZmV0Y2hcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGU9YXBwbGljYXRpb24vanNvbiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLXR5cGV9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdG1vZGU6IFwiY29yc1wiLFxuXHRcdFx0Y3JlZGVudGlhbHM6IFwic2FtZS1vcmlnaW5cIixcblx0XHRcdHR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlLkRhdGF9XG5cdCAqL1xuXHRjcmVhdGUoKSB7XG5cdFx0Y3JlYXRlRWxlbWVudC5jYWxsKHRoaXMpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGFwcGVuZHMgdGhlIEhUTUxFbGVtZW50IHRvIHRoZSBzcGVjaWZpZWQgZG9jdW1lbnRcblx0ICpcblx0ICogdGhyb3dzIHtFcnJvcn0gdGFyZ2V0IG5vdCBmb3VuZFxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZX1cblx0ICovXG5cdGNvbm5lY3QoKSB7XG5cdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XG5cdFx0aWYgKCEodGhpc1tyZWZlcmVuY2VTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpKSB7XG5cdFx0XHR0aGlzLmNyZWF0ZSgpO1xuXHRcdH1cblxuXHRcdGFwcGVuZFRvRG9jdW1lbnQuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3Jlc291cmNlL2RhdGFcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFVSTEF0dHJpYnV0ZSgpIHtcblx0XHRyZXR1cm4gQVRUUklCVVRFX1NSQztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZS5EYXRhfVxuICovXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KCkge1xuXHRjb25zdCBkb2N1bWVudCA9IHRoaXMuZ2V0T3B0aW9uKEtFWV9ET0NVTUVOVCk7XG5cdHRoaXNbcmVmZXJlbmNlU3ltYm9sXSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoVEFHX1NDUklQVCk7XG5cblx0Zm9yIChjb25zdCBrZXkgb2YgW1xuXHRcdEFUVFJJQlVURV9UWVBFLFxuXHRcdEFUVFJJQlVURV9JRCxcblx0XHRBVFRSSUJVVEVfQ0xBU1MsXG5cdFx0QVRUUklCVVRFX1RJVExFLFxuXHRdKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKGtleSkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpc1tyZWZlcmVuY2VTeW1ib2xdW2tleV0gPSB0aGlzLmdldE9wdGlvbihrZXkpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICogdGhyb3dzIHtFcnJvcn0gdGFyZ2V0IG5vdCBmb3VuZFxuICovXG5mdW5jdGlvbiBhcHBlbmRUb0RvY3VtZW50KCkge1xuXHRjb25zdCB0YXJnZXROb2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmdldE9wdGlvbihLRVlfUVVFUlksIFwiaGVhZFwiKSk7XG5cdGlmICghKHRhcmdldE5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0YXJnZXQgbm90IGZvdW5kXCIpO1xuXHR9XG5cblx0dGFyZ2V0Tm9kZS5hcHBlbmRDaGlsZCh0aGlzW3JlZmVyZW5jZVN5bWJvbF0pO1xuXG5cdGdldEdsb2JhbEZ1bmN0aW9uKFwiZmV0Y2hcIikodGhpcy5nZXRPcHRpb24oQVRUUklCVVRFX1NSQyksIHtcblx0XHRtZXRob2Q6IFwiR0VUXCIsIC8vICpHRVQsIFBPU1QsIFBVVCwgREVMRVRFLCBldGMuXG5cdFx0bW9kZTogdGhpcy5nZXRPcHRpb24oXCJtb2RlXCIsIFwiY29yc1wiKSwgLy8gbm8tY29ycywgKmNvcnMsIHNhbWUtb3JpZ2luXG5cdFx0Y2FjaGU6IFwibm8tY2FjaGVcIiwgLy8gKmRlZmF1bHQsIG5vLWNhY2hlLCByZWxvYWQsIGZvcmNlLWNhY2hlLCBvbmx5LWlmLWNhY2hlZFxuXHRcdGNyZWRlbnRpYWxzOiB0aGlzLmdldE9wdGlvbihcImNyZWRlbnRpYWxzXCIsIFwic2FtZS1vcmlnaW5cIiksIC8vIGluY2x1ZGUsICpzYW1lLW9yaWdpbiwgb21pdFxuXHRcdGhlYWRlcnM6IHtcblx0XHRcdEFjY2VwdDogdGhpcy5nZXRPcHRpb24oXCJ0eXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKSxcblx0XHR9LFxuXHRcdHJlZGlyZWN0OiBcImZvbGxvd1wiLCAvLyBtYW51YWwsICpmb2xsb3csIGVycm9yXG5cdFx0cmVmZXJyZXJQb2xpY3k6IFwibm8tcmVmZXJyZXJcIiwgLy8gbm8tcmVmZXJyZXIsXG5cdH0pXG5cdFx0LnRoZW4oKHJlc3BvbnNlKSA9PiB7XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2UudGV4dCgpO1xuXHRcdH0pXG5cdFx0LnRoZW4oKHRleHQpID0+IHtcblx0XHRcdGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG5cdFx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0uYXBwZW5kQ2hpbGQodGV4dE5vZGUpO1xuXG5cdFx0XHR0aGlzW2ludGVybmFsU3RhdGVTeW1ib2xdLmdldFN1YmplY3QoKVtcImxvYWRlZFwiXSA9IHRydWU7XG5cdFx0fSlcblx0XHQuY2F0Y2goKGUpID0+IHtcblx0XHRcdHRoaXNbaW50ZXJuYWxTdGF0ZVN5bWJvbF0uc2V0U3ViamVjdCh7XG5cdFx0XHRcdGxvYWRlZDogdHJ1ZSxcblx0XHRcdFx0ZXJyb3I6IGUudG9TdHJpbmcoKSxcblx0XHRcdH0pO1xuXG5cdFx0XHR0YXJnZXROb2RlLnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBlLnRvU3RyaW5nKCkpO1xuXHRcdH0pO1xuXG5cdHJldHVybiB0aGlzO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7XG5cdEFUVFJJQlVURV9DTEFTUyxcblx0QVRUUklCVVRFX0hSRUYsXG5cdEFUVFJJQlVURV9JRCxcblx0QVRUUklCVVRFX05PTkNFLFxuXHRBVFRSSUJVVEVfU1JDLFxuXHRBVFRSSUJVVEVfVElUTEUsXG5cdEFUVFJJQlVURV9UWVBFLFxuXHRUQUdfTElOSyxcbn0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEtFWV9ET0NVTUVOVCwgcmVmZXJlbmNlU3ltYm9sLCBSZXNvdXJjZSB9IGZyb20gXCIuLi9yZXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IExpbmsgfTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHVzZWQgYnkgdGhlIHJlc291cmNlIG1hbmFnZXIgdG8gZW1iZWQgZXh0ZXJuYWwgcmVzb3VyY2VzLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgUmVzb3VyY2UgY2xhc3NcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmtcbiAqL1xuY2xhc3MgTGluayBleHRlbmRzIFJlc291cmNlIHtcblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhcyB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1hc31cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNyb3NzT3JpZ2luPWFub255bW91cyB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLWNyb3Nzb3JpZ2lufVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGRpc2FibGVkXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBocmVmIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLWhyZWZ9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBocmVmbGFuZyB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1ocmVmbGFuZ31cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGltYWdlc2l6ZXMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItaW1hZ2VzaXplc31cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGltYWdlc3Jjc2V0IHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLWltYWdlc3Jjc2V0fVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaW50ZWdyaXR5IHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLWludGVncml0eX1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG1lZGlhIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLW1lZGlhfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcHJlZmV0Y2gge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItcHJlZmV0Y2h9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWZlcnJlcnBvbGljeSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1yZWZlcnJlcnBvbGljeX1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlbCB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1yZWx9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvbGluayNhdHRyLXR5cGV9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzaXplcyB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2xpbmsjYXR0ci1zaXplc31cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IG5vbmNlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItbm9uY2V9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZCh7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdGFzOiB1bmRlZmluZWQsXG5cdFx0XHRjcm9zc09yaWdpbjogXCJhbm9ueW1vdXNcIixcblx0XHRcdGRpc2FibGVkOiB1bmRlZmluZWQsXG5cdFx0XHRocmVmOiB1bmRlZmluZWQsXG5cdFx0XHRocmVmbGFuZzogdW5kZWZpbmVkLFxuXHRcdFx0aW1hZ2VzaXplczogdW5kZWZpbmVkLFxuXHRcdFx0aW1hZ2VzcmNzZXQ6IHVuZGVmaW5lZCxcblx0XHRcdGludGVncml0eTogdW5kZWZpbmVkLFxuXHRcdFx0bWVkaWE6IHVuZGVmaW5lZCxcblx0XHRcdHByZWZldGNoOiB1bmRlZmluZWQsXG5cdFx0XHRyZWZlcnJlcnBvbGljeTogdW5kZWZpbmVkLFxuXHRcdFx0cmVsOiB1bmRlZmluZWQsXG5cdFx0XHRzaXplczogdW5kZWZpbmVkLFxuXHRcdFx0dHlwZTogdW5kZWZpbmVkLFxuXHRcdFx0bm9uY2U6IHVuZGVmaW5lZCxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZG9tL3Jlc291cmNlL2xpbmtcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2UuTGlua31cblx0ICovXG5cdGNyZWF0ZSgpIHtcblx0XHRjcmVhdGVFbGVtZW50LmNhbGwodGhpcyk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFVSTEF0dHJpYnV0ZSgpIHtcblx0XHRyZXR1cm4gQVRUUklCVVRFX0hSRUY7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2UuTGlua31cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSB0aGlzLmdldE9wdGlvbihLRVlfRE9DVU1FTlQpO1xuXHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFRBR19MSU5LKTtcblxuXHRmb3IgKGNvbnN0IGtleSBvZiBbXG5cdFx0XCJhc1wiLFxuXHRcdFwiY3Jvc3NPcmlnaW5cIixcblx0XHRcImRpc2FibGVkXCIsXG5cdFx0XCJocmVmXCIsXG5cdFx0XCJocmVmbGFuZ1wiLFxuXHRcdFwiaW1hZ2VzaXplc1wiLFxuXHRcdFwiaW1hZ2VzcmNzZXRcIixcblx0XHRcImludGVncml0eVwiLFxuXHRcdFwibWVkaWFcIixcblx0XHRcInByZWZldGNoXCIsXG5cdFx0XCJyZWZlcnJlcnBvbGljeVwiLFxuXHRcdFwic2l6ZXNcIixcblx0XHRcInJlbFwiLFxuXHRcdFwidHlwZVwiLFxuXHRcdEFUVFJJQlVURV9IUkVGLFxuXHRcdEFUVFJJQlVURV9JRCxcblx0XHRBVFRSSUJVVEVfQ0xBU1MsXG5cdFx0QVRUUklCVVRFX1RJVExFLFxuXHRcdEFUVFJJQlVURV9OT05DRSxcblx0XSkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihrZXkpICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXNbcmVmZXJlbmNlU3ltYm9sXVtrZXldID0gdGhpcy5nZXRPcHRpb24oa2V5KTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vLi4vLi4vZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQgeyBMaW5rIH0gZnJvbSBcIi4uL2xpbmsubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBTdHlsZXNoZWV0IH07XG5cbi8qKlxuICogVGhpcyBjbGFzcyBpcyB1c2VkIGJ5IHRoZSByZXNvdXJjZSBtYW5hZ2VyIHRvIGVtYmVkIGV4dGVybmFsIHJlc291cmNlcy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIFJlc291cmNlIGNsYXNzXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rXG4gKi9cbmNsYXNzIFN0eWxlc2hlZXQgZXh0ZW5kcyBMaW5rIHtcblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSByZWwge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9saW5rI2F0dHItcmVsfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRyZWw6IFwic3R5bGVzaGVldFwiLFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kb20vcmVzb3VyY2UvbGluay9zdHlsZXNoZWV0XCIpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uLy4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHtcblx0QVRUUklCVVRFX0NMQVNTLFxuXHRBVFRSSUJVVEVfSUQsXG5cdEFUVFJJQlVURV9OT05DRSxcblx0QVRUUklCVVRFX1NSQyxcblx0QVRUUklCVVRFX1RJVExFLFxuXHRBVFRSSUJVVEVfVFlQRSxcblx0VEFHX1NDUklQVCxcbn0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEtFWV9ET0NVTUVOVCwgcmVmZXJlbmNlU3ltYm9sLCBSZXNvdXJjZSB9IGZyb20gXCIuLi9yZXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IFNjcmlwdCB9O1xuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdXNlZCBieSB0aGUgcmVzb3VyY2UgbWFuYWdlciB0byBlbWJlZCBzY3JpcHRzLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgUmVzb3VyY2UgY2xhc3NcbiAqL1xuY2xhc3MgU2NyaXB0IGV4dGVuZHMgUmVzb3VyY2Uge1xuXHQvKipcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBhc3luYz10cnVlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItYXN5bmN9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjcm9zc09yaWdpbj1hbm9ueW1vdXMge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1jcm9zc29yaWdpbn1cblx0ICogQHByb3BlcnR5IHtib29sZWFufSBkZWZlcj1mYWxzZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLWRlZmVyfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gaW50ZWdyaXR5IHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItaW50ZWdyaXR5fVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IG5vbW9kdWxlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvc2NyaXB0I2F0dHItbm9tb2R1bGV9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBub25jZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L3NjcmlwdCNhdHRyLW5vbmNlfVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gcmVmZXJyZXJwb2xpY3kge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci1yZWZlcnJlcnBvbGljeX1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9zY3JpcHQjYXR0ci10eXBlfVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdGNyb3NzT3JpZ2luOiBcImFub255bW91c1wiLFxuXHRcdFx0ZGVmZXI6IGZhbHNlLFxuXHRcdFx0aW50ZWdyaXR5OiB1bmRlZmluZWQsXG5cdFx0XHRub21vZHVsZTogZmFsc2UsXG5cdFx0XHRub25jZTogdW5kZWZpbmVkLFxuXHRcdFx0cmVmZXJyZXJwb2xpY3k6IHVuZGVmaW5lZCxcblx0XHRcdHR5cGU6IFwidGV4dC9qYXZhc2NyaXB0XCIsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RvbS9yZXNvdXJjZS9zY3JpcHRcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2UuU2NyaXB0fVxuXHQgKi9cblx0Y3JlYXRlKCkge1xuXHRcdGNyZWF0ZUVsZW1lbnQuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VVJMQXR0cmlidXRlKCkge1xuXHRcdHJldHVybiBBVFRSSUJVVEVfU1JDO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlLlNjcmlwdH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCgpIHtcblx0Y29uc3QgZG9jdW1lbnQgPSB0aGlzLmdldE9wdGlvbihLRVlfRE9DVU1FTlQpO1xuXHR0aGlzW3JlZmVyZW5jZVN5bWJvbF0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFRBR19TQ1JJUFQpO1xuXG5cdGZvciAoY29uc3Qga2V5IG9mIFtcblx0XHRcImNyb3NzT3JpZ2luXCIsXG5cdFx0XCJkZWZlclwiLFxuXHRcdFwiYXN5bmNcIixcblx0XHRcImludGVncml0eVwiLFxuXHRcdFwibm9tb2R1bGVcIixcblx0XHRBVFRSSUJVVEVfTk9OQ0UsXG5cdFx0XCJyZWZlcnJlcnBvbGljeVwiLFxuXHRcdEFUVFJJQlVURV9UWVBFLFxuXHRcdEFUVFJJQlVURV9TUkMsXG5cdFx0QVRUUklCVVRFX0lELFxuXHRcdEFUVFJJQlVURV9DTEFTUyxcblx0XHRBVFRSSUJVVEVfVElUTEUsXG5cdF0pIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oa2V5KSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzW3JlZmVyZW5jZVN5bWJvbF1ba2V5XSA9IHRoaXMuZ2V0T3B0aW9uKGtleSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSBcIi4uL2RhdGEvZXh0ZW5kLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGVxdWlwV2l0aEludGVybmFsIH0gZnJvbSBcIi4uL3R5cGVzL2ludGVybmFsLm1qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gXCIuLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IEFUVFJJQlVURV9IUkVGLCBBVFRSSUJVVEVfU1JDIH0gZnJvbSBcIi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgUmVzb3VyY2UgfSBmcm9tIFwiLi9yZXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IERhdGEgfSBmcm9tIFwiLi9yZXNvdXJjZS9kYXRhLm1qc1wiO1xuaW1wb3J0IHsgU3R5bGVzaGVldCB9IGZyb20gXCIuL3Jlc291cmNlL2xpbmsvc3R5bGVzaGVldC5tanNcIjtcbmltcG9ydCB7IFNjcmlwdCB9IGZyb20gXCIuL3Jlc291cmNlL3NjcmlwdC5tanNcIjtcblxuZXhwb3J0IHsgUmVzb3VyY2VNYW5hZ2VyIH07XG5cbi8qKlxuICogVGhlIFJlc291cmNlTWFuYWdlciBpcyBhIHNpbmdsZXRvbiB0aGF0IG1hbmFnZXMgYWxsIHJlc291cmNlcy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIFJlc291cmNlIGNsYXNzXG4gKi9cbmNsYXNzIFJlc291cmNlTWFuYWdlciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcblx0ICogdGhyb3cge0Vycm9yfSB1bnN1cHBvcnRlZCBkb2N1bWVudCB0eXBlXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cdFx0ZXF1aXBXaXRoSW50ZXJuYWwuY2FsbCh0aGlzKTtcblxuXHRcdGlmICghKHRoaXMuZ2V0T3B0aW9uKFwiZG9jdW1lbnRcIikgaW5zdGFuY2VvZiBEb2N1bWVudCkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIGRvY3VtZW50IHR5cGVcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEBkZXByZWNhdGVkIHNpbmNlIDMuMTUuMCB1c2UgZ2V0SW50ZXJuYWwgaW5zdGVhZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYmFzZXVybFxuXHQgKi9cblx0Z2V0T3B0aW9uKGtleSkge1xuXHRcdHJldHVybiB0aGlzLmdldEludGVybmFsKGtleSk7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGJhc2V1cmxcblx0ICovXG5cdGdldEJhc2VVUkwoKSB7XG5cdFx0dGhpcy5nZXRPcHRpb24oXCJkb2N1bWVudFwiKT8uYmFzZVVSTDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYmFzZXVybFxuXHQgKiBAZGVwcmVjYXRlZCBzaW5jZSAzLjE1LjAgdXNlIGludGVybmFsRGVmYXVsdHMgaW5zdGVhZFxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiB0aGlzLmludGVybmFsRGVmYXVsdHM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHByb3BlcnR5IHtIVE1MRG9jdW1lbnR9IGRvY3VtZW50PWRvY3VtZW50IERvY3VtZW50XG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSByZXNvdXJjZXNcblx0ICogQHByb3BlcnR5IHtBcnJheX0gcmVzb3VyY2VzLnNjcmlwdHM9W10gYXJyYXkgd2l0aCB7QGxpbmsgTW9uc3Rlci5ET00uUmVzb3VyY2UuU2NyaXB0fSBvYmplY3RzXG5cdCAqIEBwcm9wZXJ0eSB7QXJyYXl9IHJlc291cmNlcy5zdHlsZXNoZWV0cz1bXSBhcnJheSB3aXRoIHtAbGluayBNb25zdGVyLkRPTS5SZXNvdXJjZS5MaW5rLlN0eWxlc2hlZXR9IG9iamVjdHNcblx0ICogQHByb3BlcnR5IHtBcnJheX0gcmVzb3VyY2VzLmRhdGE9W10gYXJyYXkgd2l0aCB7QGxpbmsgTW9uc3Rlci5ET00uUmVzb3VyY2UuRGF0YX0gb2JqZWN0c1xuXHQgKi9cblx0Z2V0IGludGVybmFsRGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7fSxcblx0XHRcdHtcblx0XHRcdFx0ZG9jdW1lbnQ6IGdldEdsb2JhbE9iamVjdChcImRvY3VtZW50XCIpLFxuXHRcdFx0XHRyZXNvdXJjZXM6IHtcblx0XHRcdFx0XHRzY3JpcHRzOiBbXSxcblx0XHRcdFx0XHRzdHlsZXNoZWV0czogW10sXG5cdFx0XHRcdFx0ZGF0YTogW10sXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQXBwZW5kIFRhZ3MgdG8gRE9NXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlcn1cblx0ICogQHRocm93cyB7RXJyb3J9IHVuc3VwcG9ydGVkIHJlc291cmNlIGRlZmluaXRpb25cblx0ICovXG5cdGNvbm5lY3QoKSB7XG5cdFx0cnVuUmVzb3VyY2VNZXRob2QuY2FsbCh0aGlzLCBcImNvbm5lY3RcIik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgYXZhaWxhYmxlXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB1bnN1cHBvcnRlZCByZXNvdXJjZSBkZWZpbml0aW9uXG5cdCAqL1xuXHRhdmFpbGFibGUoKSB7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKHJ1blJlc291cmNlTWV0aG9kLmNhbGwodGhpcywgXCJhdmFpbGFibGVcIikpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIHNjcmlwdFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuXHQgKiBAcGFyYW0gW09iamVjdHx1bmRlZmluZWR9IG9wdGlvbnNcblx0ICogQHJldHVybiB7TW9uc3Rlci5ET00uUmVzb3VyY2VNYW5hZ2VyfVxuXHQgKiBAc2VlIE1vbnN0ZXIuRE9NLlJlc291cmNlLlNjcmlwdFxuXHQgKi9cblx0YWRkU2NyaXB0KHVybCwgb3B0aW9ucykge1xuXHRcdHJldHVybiBhZGRSZXNvdXJjZS5jYWxsKHRoaXMsIFwic2NyaXB0c1wiLCB1cmwsIG9wdGlvbnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBTdHlsZXNoZWV0XG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG5cdCAqIEBwYXJhbSBbT2JqZWN0fHVuZGVmaW5lZH0gb3B0aW9uc1xuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXJ9XG5cdCAqIEBzZWUgTW9uc3Rlci5ET00uUmVzb3VyY2UuTGluay5TdHlsZXNoZWV0XG5cdCAqL1xuXHRhZGRTdHlsZXNoZWV0KHVybCwgb3B0aW9ucykge1xuXHRcdHJldHVybiBhZGRSZXNvdXJjZS5jYWxsKHRoaXMsIFwic3R5bGVzaGVldHNcIiwgdXJsLCBvcHRpb25zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgRGF0YSBUYWdcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcblx0ICogQHBhcmFtIFtPYmplY3R8dW5kZWZpbmVkfSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlcn1cblx0ICogQHNlZSBNb25zdGVyLkRPTS5SZXNvdXJjZS5EYXRhXG5cdCAqL1xuXHRhZGREYXRhKHVybCwgb3B0aW9ucykge1xuXHRcdHJldHVybiBhZGRSZXNvdXJjZS5jYWxsKHRoaXMsIFwiZGF0YVwiLCB1cmwsIG9wdGlvbnMpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5mdW5jdGlvbiBydW5SZXNvdXJjZU1ldGhvZChtZXRob2QpIHtcblx0Y29uc3QgcmVzdWx0ID0gW107XG5cblx0Zm9yIChjb25zdCB0eXBlIG9mIFtcInNjcmlwdHNcIiwgXCJzdHlsZXNoZWV0c1wiLCBcImRhdGFcIl0pIHtcblx0XHRjb25zdCByZXNvdXJjZXMgPSB0aGlzLmdldE9wdGlvbihgcmVzb3VyY2VzLiR7dHlwZX1gKTtcblx0XHRpZiAoIWlzQXJyYXkocmVzb3VyY2VzKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcblx0XHRcdGlmICghKHJlc291cmNlIGluc3RhbmNlb2YgUmVzb3VyY2UpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIHJlc291cmNlIGRlZmluaXRpb25cIik7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3VsdC5wdXNoKHJlc291cmNlW21ldGhvZF0oKSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gKiBAcGFyYW0gW09iamVjdHx1bmRlZmluZWR9IG9wdGlvbnNcbiAqIEByZXR1cm4ge01vbnN0ZXIuRE9NLlJlc291cmNlTWFuYWdlcn1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGFkZFJlc291cmNlKHR5cGUsIHVybCwgb3B0aW9ucykge1xuXHRpZiAodXJsIGluc3RhbmNlb2YgVVJMKSB7XG5cdFx0dXJsID0gdXJsLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRsZXQgcmVzb3VyY2U7XG5cdHN3aXRjaCAodHlwZSkge1xuXHRcdGNhc2UgXCJzY3JpcHRzXCI6XG5cdFx0XHRyZXNvdXJjZSA9IG5ldyBTY3JpcHQoZXh0ZW5kKHt9LCBvcHRpb25zLCB7IFtBVFRSSUJVVEVfU1JDXTogdXJsIH0pKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJzdHlsZXNoZWV0c1wiOlxuXHRcdFx0cmVzb3VyY2UgPSBuZXcgU3R5bGVzaGVldChleHRlbmQoe30sIG9wdGlvbnMsIHsgW0FUVFJJQlVURV9IUkVGXTogdXJsIH0pKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJkYXRhXCI6XG5cdFx0XHRyZXNvdXJjZSA9IG5ldyBEYXRhKGV4dGVuZCh7fSwgb3B0aW9ucywgeyBbQVRUUklCVVRFX1NSQ106IHVybCB9KSk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCB0eXBlICR7dHlwZX1gKTtcblx0fVxuXG5cdHRoaXMuZ2V0T3B0aW9uKFwicmVzb3VyY2VzXCIpPy5bdHlwZV0ucHVzaChyZXNvdXJjZSk7XG5cdHJldHVybiB0aGlzO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IENvbmZpZ01hbmFnZXJTdHlsZVNoZWV0IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtDU1NTdHlsZVNoZWV0fVxuICovXG5jb25zdCBDb25maWdNYW5hZ2VyU3R5bGVTaGVldCA9IG5ldyBDU1NTdHlsZVNoZWV0KCk7XG5cbnRyeSB7XG5cdENvbmZpZ01hbmFnZXJTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIGNvbmZpZ21hbmFnZXIgeyBcbltkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtkaXNwbGF5Om5vbmV9IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCB7IENvbmZpZ01hbmFnZXJTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9jb25maWctbWFuYWdlci5tanNcIjtcbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgQ29uZmlnTWFuYWdlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbmRleERCSW5zdGFuY2VTeW1ib2wgPSBTeW1ib2woXCJpbmRleERCSW5zdGFuY2VcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGluaXRpYWxpemVkUHJvbWlzZVN5bWJvbCA9IFN5bWJvbChcImluaXRpYWxpemVkUHJvbWlzZVN5bWJvbFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgTU9ERV9SRUFET05MWSA9IFwicmVhZG9ubHlcIjtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgTU9ERV9SRUFEX1dSSVRFID0gXCJyZWFkd3JpdGVcIjtcblxuLyoqXG4gKiBUaGUgQ29uZmlnIE1hbmFnZXIgY29tcG9uZW50IGlzIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGNvbmZpZyBtYW5hZ2VyIGNvbXBvbmVudFxuICovXG5jbGFzcyBDb25maWdNYW5hZ2VyIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvY29tcG9uZW50LWhvc3QvY29uZmlnLW1hbmFnZXJAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdC8qKlxuXHRcdCAqIEBwcml2YXRlXG5cdFx0ICogQHR5cGUge3N5bWJvbH1cblx0XHQgKi9cblx0XHR0aGlzW2luaXRpYWxpemVkUHJvbWlzZVN5bWJvbF0gPSBbXTtcblx0XHR0aGlzW2luZGV4REJJbnN0YW5jZVN5bWJvbF0gPSBudWxsO1xuXHRcdHRoaXNbaW5pdGlhbGl6ZWRQcm9taXNlU3ltYm9sXS5wdXNoKG9wZW5EYXRhYmFzZS5jYWxsKHRoaXMpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0cmVhZHkoKSB7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKHRoaXNbaW5pdGlhbGl6ZWRQcm9taXNlU3ltYm9sXSk7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRpbmRleERCOiB7XG5cdFx0XHRcdG5hbWU6IFwibW9uc3RlclwiLFxuXHRcdFx0XHR2ZXJzaW9uOiAyLFxuXHRcdFx0XHRvYmplY3RTdG9yZToge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29uZmlnXCIsXG5cdFx0XHRcdFx0a2V5UGF0aDogXCJrZXlcIixcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlPHVua25vd24+fVxuXHQgKi9cblx0Z2V0Q29uZmlnKGtleSkge1xuXHRcdHJldHVybiB0aGlzLnJlYWR5KCkudGhlbigoKSA9PiB7XG5cdFx0XHRyZXR1cm4gZ2V0QmxvYi5jYWxsKHRoaXMsIGtleSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlPGJvb2xlYW4+fVxuXHQgKi9cblx0aGFzQ29uZmlnKGtleSkge1xuXHRcdHJldHVybiB0aGlzLnJlYWR5KClcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGdldEJsb2IuY2FsbCh0aGlzLCBrZXkpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1Byb21pc2U8dW5rbm93bj59XG5cdCAqL1xuXHRzZXRDb25maWcoa2V5LCB2YWx1ZSkge1xuXHRcdHJldHVybiB0aGlzLnJlYWR5KCkudGhlbigoKSA9PiB7XG5cdFx0XHRyZXR1cm4gc2V0QmxvYi5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuXHRcdH0pO1xuXHR9XG5cblx0ZGVsZXRlQ29uZmlnKGtleSkge1xuXHRcdHJldHVybiB0aGlzLnJlYWR5KCkudGhlbigoKSA9PiB7XG5cdFx0XHRyZXR1cm4gZGVsZXRlQmxvYi5jYWxsKHRoaXMsIGtleSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWNvbmZpZy1tYW5hZ2VyXCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtDb25maWdNYW5hZ2VyU3R5bGVTaGVldF07XG5cdH1cblxuXHQvKipcblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gb3BlbkRhdGFiYXNlKCkge1xuXHRjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuXHRjb25zdCBuYW1lID0gdGhpcy5nZXRPcHRpb24oXCJpbmRleERCLm5hbWVcIik7XG5cdGNvbnN0IHZlcnNpb24gPSB0aGlzLmdldE9wdGlvbihcImluZGV4REIudmVyc2lvblwiKTtcblx0Y29uc3Qgc3RvcmFnZU5hbWUgPSB0aGlzLmdldE9wdGlvbihcImluZGV4REIub2JqZWN0U3RvcmUubmFtZVwiKTtcblx0Y29uc3QgS2V5UGF0aCA9IHRoaXMuZ2V0T3B0aW9uKFwiaW5kZXhEQi5vYmplY3RTdG9yZS5rZXlQYXRoXCIpO1xuXG5cdGlmICghbmFtZSB8fCAhdmVyc2lvbikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBkYXRhYmFzZSBuYW1lIGFuZCB2ZXJzaW9uIG11c3QgYmUgc2V0LlwiKTtcblx0fVxuXG5cdGNvbnN0IHJlcXVlc3QgPSB3aW5kb3cuaW5kZXhlZERCLm9wZW4obmFtZSwgdmVyc2lvbik7XG5cblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRyZXF1ZXN0Lm9uZXJyb3IgPSAoZXZlbnQpID0+IHtcblx0XHRcdGNvbnNvbGUuZXJyb3IoXCJFcnJvciBvcGVuaW5nIGRhdGFiYXNlXCIsIGV2ZW50KTtcblx0XHRcdHJlamVjdChyZXF1ZXN0LmVycm9yKTtcblx0XHR9O1xuXG5cdFx0cmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZXZlbnQpID0+IHtcblx0XHRcdHRoaXNbaW5kZXhEQkluc3RhbmNlU3ltYm9sXSA9IGV2ZW50Py50YXJnZXQ/LnJlc3VsdDtcblx0XHRcdHJlc29sdmUocmVxdWVzdC5yZXN1bHQpO1xuXHRcdH07XG5cblx0XHRyZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IChldmVudCkgPT4ge1xuXHRcdFx0Y29uc3QgZGIgPSBldmVudC50YXJnZXQucmVzdWx0O1xuXG5cdFx0XHRsZXQgb2JqZWN0U3RvcmU7XG5cdFx0XHRpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoc3RvcmFnZU5hbWUpKSB7XG5cdFx0XHRcdG9iamVjdFN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoc3RvcmFnZU5hbWUsIHsga2V5UGF0aDogS2V5UGF0aCB9KTtcblx0XHRcdH1cblxuXHRcdFx0b2JqZWN0U3RvcmUudHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IChldmVudCkgPT4ge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhcIkRhdGFiYXNlIHVwZ3JhZGUgY29tcGxldGVcIik7XG5cdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdH07XG5cdFx0fTtcblx0fSk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZGUgZWl0aGVyIFwicmVhZG9ubHlcIiBvciBcInJlYWR3cml0ZVwiXG4gKi9cbmZ1bmN0aW9uIGdldE9iamVjdFN0b3JlKG1vZGUpIHtcblx0Y29uc3Qgc3RvcmFnZU5hbWUgPSB0aGlzLmdldE9wdGlvbihcImluZGV4REIub2JqZWN0U3RvcmUubmFtZVwiKTtcblxuXHRpZiAoIXRoaXNbaW5kZXhEQkluc3RhbmNlU3ltYm9sXSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoZSBkYXRhYmFzZSBpcyBub3Qgb3Blbi5cIik7XG5cdH1cblxuXHQvLyBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9JREJEYXRhYmFzZS90cmFuc2FjdGlvblxuXHQvLyB0cmFuc2FjdGlvbihzdG9yZU5hbWVzLCBtb2RlLCBvcHRpb25zKVxuXHRjb25zdCB0eCA9IHRoaXNbaW5kZXhEQkluc3RhbmNlU3ltYm9sXS50cmFuc2FjdGlvbihzdG9yYWdlTmFtZSwgbW9kZSk7XG5cdHJldHVybiB0eC5vYmplY3RTdG9yZShzdG9yYWdlTmFtZSk7XG59XG5cbi8qKlxuICogQHJldHVybiB7UHJvbWlzZTx1bmtub3duPn1cbiAqL1xuZnVuY3Rpb24gY2xlYXJPYmplY3RTdG9yZSgpIHtcblx0Y29uc3Qgc3RvcmUgPSBnZXRPYmplY3RTdG9yZS5jYWxsKHRoaXMsIFwicmVhZHdyaXRlXCIpO1xuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0Y29uc3QgcmVxID0gc3RvcmUuY2xlYXIoKTtcblx0XHRyZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGV2dCkge1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH07XG5cdFx0cmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRyZWplY3QoZXZ0LnRhcmdldD8uZXJyb3JDb2RlKTtcblx0XHR9O1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0QmxvYihrZXkpIHtcblx0Y29uc3Qgc3RvcmUgPSBnZXRPYmplY3RTdG9yZS5jYWxsKHRoaXMsIE1PREVfUkVBRE9OTFkpO1xuXG5cdGNvbnN0IHJlcSA9IHN0b3JlLmdldChrZXkpO1xuXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0cmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gZXZ0LnRhcmdldC5yZXN1bHQ7XG5cdFx0XHRpZiAodmFsdWUpIHtcblx0XHRcdFx0cmVzb2x2ZSh2YWx1ZS5ibG9iKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIlRoZSB2YWx1ZSBvZiB0aGUga2V5ICdcIiArIGtleSArIFwiJyBpcyBub3QgZGVmaW5lZC5cIikpO1xuXHRcdH07XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBkZWxldGVCbG9iKGtleSkge1xuXHRjb25zdCBzdG9yZSA9IGdldE9iamVjdFN0b3JlLmNhbGwodGhpcywgTU9ERV9SRUFEX1dSSVRFKTtcblxuXHRjb25zdCByZXEgPSBzdG9yZS5kZWxldGUoa2V5KTtcblxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fTtcblxuXHRcdHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGV2dCkge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcImRlbGV0ZUJsb2I6XCIsIGV2dC50YXJnZXQuZXJyb3JDb2RlKTtcblx0XHRcdHJlamVjdChldnQudGFyZ2V0LmVycm9yQ29kZSk7XG5cdFx0fTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIHNldEJsb2Ioa2V5LCBibG9iKSB7XG5cdGNvbnN0IHN0b3JlID0gZ2V0T2JqZWN0U3RvcmUuY2FsbCh0aGlzLCBNT0RFX1JFQURfV1JJVEUpO1xuXG5cdGNvbnN0IEtleVBhdGggPSB0aGlzLmdldE9wdGlvbihcImluZGV4REIub2JqZWN0U3RvcmUua2V5UGF0aFwiKTtcblx0Y29uc3Qgb2JqID0ge307XG5cdG9ialtLZXlQYXRoXSA9IGtleTtcblx0b2JqLmJsb2IgPSBibG9iO1xuXHRjb25zdCByZXEgPSBzdG9yZS5wdXQob2JqKTtcblxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fTtcblxuXHRcdHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGV2dCkge1xuXHRcdFx0Y29uc29sZS5lcnJvcihcInNldEJsb2I6XCIsIGV2dC50YXJnZXQuZXJyb3JDb2RlKTtcblx0XHRcdHJlamVjdChldnQudGFyZ2V0LmVycm9yQ29kZSk7XG5cdFx0fTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250cm9sXCIgcGFydD1cImNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgICAgPC9kaXY+YDtcbn1cblxucmVnaXN0ZXJDdXN0b21FbGVtZW50KENvbmZpZ01hbmFnZXIpO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7XG5cdGFzc2VtYmxlTWV0aG9kU3ltYm9sLFxuXHRDdXN0b21FbGVtZW50LFxuXHRyZWdpc3RlckN1c3RvbUVsZW1lbnQsXG59IGZyb20gXCIuLi8uLi9kb20vY3VzdG9tZWxlbWVudC5tanNcIjtcbmltcG9ydCBcIi4uL25vdGlmeS9ub3RpZnkubWpzXCI7XG5pbXBvcnQgeyBIb3N0U3R5bGVTaGVldCB9IGZyb20gXCIuL3N0eWxlc2hlZXQvaG9zdC5tanNcIjtcbmltcG9ydCB7IGdldExvY2FsZU9mRG9jdW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7IEVtYmVkIH0gZnJvbSBcIi4uLy4uL2kxOG4vcHJvdmlkZXJzL2VtYmVkLm1qc1wiO1xuaW1wb3J0IHsgZ2V0RG9jdW1lbnRUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi4vLi4vaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQgeyB3aW5kb3dSZWFkeSB9IGZyb20gXCIuLi8uLi9kb20vcmVhZHkubWpzXCI7XG5pbXBvcnQgeyBGb2N1c01hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZG9tL2ZvY3VzbWFuYWdlci5tanNcIjtcbmltcG9ydCB7IFJlc291cmNlTWFuYWdlciB9IGZyb20gXCIuLi8uLi9kb20vcmVzb3VyY2VtYW5hZ2VyLm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBpc0l0ZXJhYmxlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IFwiLi9jb25maWctbWFuYWdlci5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgSG9zdCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBwcm9taXNlc1N5bWJvbCA9IFN5bWJvbChcInByb21pc2VzU3ltYm9sXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBub3RpZnlFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwibm90aWZ5RWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgb3ZlcmxheUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJvdmVybGF5RWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb25maWdNYW5hZ2VyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZm9jdXNNYW5hZ2VyU3ltYm9sID0gU3ltYm9sKFwiZm9jdXNNYW5hZ2VyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZXNvdXJjZU1hbmFnZXJTeW1ib2wgPSBTeW1ib2woXCJyZXNvdXJjZU1hbmFnZXJcIik7XG5cbi8qKlxuICogVGhlIEhvc3QgY29tcG9uZW50IGlzIHVzZWQgdG8gZW5jYXBzdWxhdGUgdGhlIGNvbnRlbnQgb2YgYSB3ZWIgYXBwLlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvaG9zdC5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnlcbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLWhvc3QgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItaG9zdCcpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLWhvc3Q+PC9tb25zdGVyLWhvc3Q+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0ICdAc2NodWthaS9jb21wb25lbnQtc3RhdGUvc291cmNlL2hvc3QubWpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItaG9zdCcpO1xuICogYGBgXG4gKlxuICogVGhlIEJvZHkgc2hvdWxkIGhhdmUgYSBjbGFzcyBcImhpZGRlblwiIHRvIGVuc3VyZSB0aGF0IHRoZSBzdHlsZXMgYXJlIGFwcGxpZWQgY29ycmVjdGx5LlxuICpcbiAqIGBgYGNzc1xuICogYm9keS5oaWRkZW4ge1xuICogICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICogfVxuICogYGBgXG4gKlxuICogQHN0YXJ0dW1sIGhvc3QucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBIb3N0XG4gKiBAZW5kdW1sXG4gKlxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgc2ltcGxlIGhvc3QgY29tcG9uZW50XG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuSG9zdCNtb25zdGVyLWhvc3QtY29ubmVjdGVkXG4gKiBAZmlyZXMgTW9uc3Rlci5Db21wb25lbnRzLkhvc3QuSG9zdCNtb25zdGVyLWhvc3QtZGlzY29ubmVjdGVkXG4gKi9cbmNsYXNzIEhvc3QgZXh0ZW5kcyBDdXN0b21FbGVtZW50IHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9jb21wb25lbnQtaG9zdC9Ib3N0QEBpbnN0YW5jZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIHRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzIEZlYXR1cmUgZGVmaW5pdGlvbnNcblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHRlbXBsYXRlczoge1xuXHRcdFx0XHRtYWluOiBnZXRUZW1wbGF0ZSgpLFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ga2V5XG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRnZXRDb25maWcoa2V5KSB7XG5cdFx0aWYgKHRoaXNbY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBjb25maWcgbWFuYWdlciBlbGVtZW50XCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0uZ2V0Q29uZmlnKGtleSk7XG5cdH1cblxuXHRoYXNDb25maWcoa2V5KSB7XG5cdFx0aWYgKHRoaXNbY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBjb25maWcgbWFuYWdlciBlbGVtZW50XCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0uaGFzQ29uZmlnKGtleSk7XG5cdH1cblxuXHRkZWxldGVDb25maWcoa2V5KSB7XG5cdFx0aWYgKHRoaXNbY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2xdIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPT09IGZhbHNlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBjb25maWcgbWFuYWdlciBlbGVtZW50XCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0uZGVsZXRlQ29uZmlnKGtleSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleVxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRzZXRDb25maWcoa2V5LCB2YWx1ZSkge1xuXHRcdGlmICh0aGlzW2NvbmZpZ01hbmFnZXJFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gY29uZmlnIG1hbmFnZXIgZWxlbWVudFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpc1tjb25maWdNYW5hZ2VyRWxlbWVudFN5bWJvbF0uc2V0Q29uZmlnKGtleSwgdmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0I21vbnN0ZXItaG9zdC1jb25uZWN0ZWRcblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cblx0XHQvKipcblx0XHQgKiBzaG93IHRoZSBzY3JvbGwgYmFyIGFsd2F5c1xuXHRcdCAqIEB0eXBlIHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93WSA9IFwic2Nyb2xsXCI7XG5cblx0XHRjb25zdCBjbGFzc05hbWVzID0gdGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLmJvZHlcIik7XG5cblx0XHRpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lcykpIHtcblx0XHRcdGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWVzKTtcblx0XHR9XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLWhvc3QtY29ubmVjdGVkXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBmaXJlcyBNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5Ib3N0I21vbnN0ZXItaG9zdC1kaXNjb25uZWN0ZWRcblx0ICovXG5cdGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93WSA9IFwiXCI7XG5cblx0XHRjb25zdCBjbGFzc05hbWVzID0gdGhpcy5nZXRPcHRpb24oXCJjbGFzc2VzLmJvZHlcIik7XG5cdFx0aWYgKCFkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWVzKSkge1xuXHRcdFx0ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZXMpO1xuXHRcdH1cblxuXHRcdGlmIChpc0l0ZXJhYmxlKHRoaXNbcHJvbWlzZXNTeW1ib2xdKSA9PT0gZmFsc2UpIHtcblx0XHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdID0gW107XG5cdFx0fVxuXG5cdFx0dGhpc1twcm9taXNlc1N5bWJvbF0ucHVzaChcblx0XHRcdG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKFxuXHRcdFx0XHRcdFwibW9uc3Rlci1ob3N0LWNvbm5lY3RlZFwiLFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHJlc29sdmUoKTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHsgb25jZTogdHJ1ZSB9LFxuXHRcdFx0XHQpO1xuXHRcdFx0fSksXG5cdFx0KTtcblxuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItaG9zdC1kaXNjb25uZWN0ZWRcIik7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuSG9zdH1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0dGhpc1twcm9taXNlc1N5bWJvbF0gPSBbXTtcblx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXS5wdXNoKHdpbmRvd1JlYWR5KTtcblxuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHRcdGluaXRUcmFuc2xhdGlvbnMuY2FsbCh0aGlzKTtcblxuXHRcdHRoaXNbZm9jdXNNYW5hZ2VyU3ltYm9sXSA9IG5ldyBGb2N1c01hbmFnZXIodGhpcyk7XG5cdFx0dGhpc1tyZXNvdXJjZU1hbmFnZXJTeW1ib2xdID0gbmV3IFJlc291cmNlTWFuYWdlcih0aGlzKTtcblxuXHRcdHRyeSB7XG5cdFx0XHR0aGlzW3Byb21pc2VzU3ltYm9sXS5wdXNoKHRoaXNbcmVzb3VyY2VNYW5hZ2VyU3ltYm9sXS5hdmFpbGFibGUoKSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmlzQ29ubmVjdGVkID09PSBmYWxzZSkge1xuXHRcdFx0dGhpc1twcm9taXNlc1N5bWJvbF0ucHVzaChcblx0XHRcdFx0bmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdFx0XHRcdFwibW9uc3Rlci1ob3N0LWNvbm5lY3RlZFwiLFxuXHRcdFx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0eyBvbmNlOiB0cnVlIH0sXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSksXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgUHJvbWlzZSBpcyByZXNvbHZlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGNvbm5lY3RlZCB0byB0aGUgRE9NIGFuZCBhbGwgcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUuXG5cdCAqIElmIHRoZSBlbGVtZW50IGlzIG5vdCBjb25uZWN0ZWQgdG8gdGhlIERPTSwgdGhlIFByb21pc2UgaXMgcmVqZWN0ZWQuXG5cdCAqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRvblJlYWR5KCkge1xuXHRcdGlmIChpc0l0ZXJhYmxlKHRoaXNbcHJvbWlzZXNTeW1ib2xdKSA9PT0gZmFsc2UpIHtcblx0XHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdID0gW107XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKHRoaXNbcHJvbWlzZXNTeW1ib2xdKS50aGVuKCgpID0+IHtcblx0XHRcdHRoaXNbcHJvbWlzZXNTeW1ib2xdID0gW107XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jL21vbnN0ZXIvTW9uc3Rlci5ET00uRm9jdXNNYW5hZ2VyLmh0bWx8TW9uc3Rlci5ET00uRm9jdXNNYW5hZ2VyfVxuXHQgKiBAcmV0dXJuIHsqfVxuXHQgKi9cblx0Z2V0IGZvY3VzTWFuYWdlcigpIHtcblx0XHRyZXR1cm4gdGhpc1tmb2N1c01hbmFnZXJTeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvbW9uc3Rlci9Nb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXIuaHRtbHxNb25zdGVyLkRPTS5SZXNvdXJjZU1hbmFnZXJ9XG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRnZXQgcmVzb3VyY2VNYW5hZ2VyKCkge1xuXHRcdHJldHVybiB0aGlzW3Jlc291cmNlTWFuYWdlclN5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7TW9uc3Rlci5Db21wb25lbnRzLkhvc3QuSG9zdH1cblx0ICogQHRocm93cyB7RXJyb3J9IFRoZXJlIGlzIG5vIG92ZXJsYXkgZWxlbWVudCBkZWZpbmVkLlxuXHQgKi9cblx0dG9nZ2xlT3ZlcmxheSgpIHtcblx0XHRpZiAodGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIG92ZXJsYXkgZWxlbWVudCBkZWZpbmVkLlwiKTtcblx0XHR9XG5cblx0XHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXS50b2dnbGUoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtIb3N0fVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhlcmUgaXMgbm8gb3ZlcmxheSBlbGVtZW50IGRlZmluZWQuXG5cdCAqL1xuXHRvcGVuT3ZlcmxheSgpIHtcblx0XHRpZiAodGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIG92ZXJsYXkgZWxlbWVudCBkZWZpbmVkLlwiKTtcblx0XHR9XG5cblx0XHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXS5vcGVuKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7SG9zdH1cblx0ICogQHRocm93cyB7RXJyb3J9IFRoZXJlIGlzIG5vIG92ZXJsYXkgZWxlbWVudCBkZWZpbmVkLlxuXHQgKi9cblx0Y2xvc2VPdmVybGF5KCkge1xuXHRcdGlmICh0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID09PSBmYWxzZSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgbm8gb3ZlcmxheSBlbGVtZW50IGRlZmluZWQuXCIpO1xuXHRcdH1cblxuXHRcdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLmNsb3NlKCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKi9cblx0c3RhdGljIGdldFRhZygpIHtcblx0XHRyZXR1cm4gXCJtb25zdGVyLWhvc3RcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtDU1NTdHlsZVNoZWV0W119XG5cdCAqL1xuXHRzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcblx0XHRyZXR1cm4gW0hvc3RTdHlsZVNoZWV0XTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkkxOG4uTG9jYWxlfVxuXHQgKi9cblx0Z2V0IGxvY2FsZSgpIHtcblx0XHRyZXR1cm4gZ2V0TG9jYWxlT2ZEb2N1bWVudCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge1RyYW5zbGF0aW9uc31cblx0ICovXG5cdGdldCB0cmFuc2xhdGlvbnMoKSB7XG5cdFx0cmV0dXJuIGdldERvY3VtZW50VHJhbnNsYXRpb25zKCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8TWVzc2FnZX0gbWVzc2FnZVxuXHQgKi9cblx0cHVzaE5vdGlmaWNhdGlvbihtZXNzYWdlKSB7XG5cdFx0aWYgKHRoaXNbbm90aWZ5RWxlbWVudFN5bWJvbF0gaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA9PT0gZmFsc2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIG5vdGlmeSBlbGVtZW50IGRlZmluZWQuXCIpO1xuXHRcdH1cblxuXHRcdHRoaXNbbm90aWZ5RWxlbWVudFN5bWJvbF0ucHVzaChtZXNzYWdlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtTZWxlY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gbm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFxuICovXG5mdW5jdGlvbiBpbml0Q29udHJvbFJlZmVyZW5jZXMoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwibW9uc3Rlci1vdmVybGF5XCIpO1xuXHR0aGlzW25vdGlmeUVsZW1lbnRTeW1ib2xdID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwibW9uc3Rlci1ub3RpZnlcIik7XG5cdHRoaXNbY29uZmlnTWFuYWdlckVsZW1lbnRTeW1ib2xdID0gdGhpcy5xdWVyeVNlbGVjdG9yKFxuXHRcdFwibW9uc3Rlci1jb25maWctbWFuYWdlclwiLFxuXHQpO1xufVxuXG5mdW5jdGlvbiBpbml0VHJhbnNsYXRpb25zKCkge1xuXHRpZiAoaXNJdGVyYWJsZSh0aGlzW3Byb21pc2VzU3ltYm9sXSkgPT09IGZhbHNlKSB7XG5cdFx0dGhpc1twcm9taXNlc1N5bWJvbF0gPSBbXTtcblx0fVxuXG5cdHRoaXNbcHJvbWlzZXNTeW1ib2xdLnB1c2goRW1iZWQuYXNzaWduVHJhbnNsYXRpb25zVG9FbGVtZW50KCkpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldFRlbXBsYXRlKCkge1xuXHQvLyBsYW5ndWFnZT1IVE1MXG5cdHJldHVybiBgXG4gICAgICAgIDx0ZW1wbGF0ZSBpZD1cImhvc3QtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpob3N0LWNvbnRhaW5lci5jb250ZW50XCJcbiAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJwYXJ0IHBhdGg6aG9zdC1jb250YWluZXIubmFtZSwgZGF0YS1tb25zdGVyLXJvbGUgcGF0aDpob3N0LWNvbnRhaW5lci5uYW1lXCI+PC9kaXY+XG4gICAgICAgIDwvdGVtcGxhdGU+XG5cbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImhvc3QtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChIb3N0KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBPdmVybGF5U3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgT3ZlcmxheVN0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHRPdmVybGF5U3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBvdmVybGF5IHsgXG46d2hlcmUoaHRtbCl7bGluZS1oZWlnaHQ6MS4xNTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstbW96LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTt0ZXh0LXNpemUtYWRqdXN0OjEwMCV9OndoZXJlKGgxKXtmb250LXNpemU6MmVtO21hcmdpbi1ibG9jay1lbmQ6LjY3ZW07bWFyZ2luLWJsb2NrLXN0YXJ0Oi42N2VtfTp3aGVyZShkbCxvbCx1bCkgOndoZXJlKGRsLG9sLHVsKXttYXJnaW4tYmxvY2stZW5kOjA7bWFyZ2luLWJsb2NrLXN0YXJ0OjB9OndoZXJlKGhyKXtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2NvbG9yOmluaGVyaXQ7aGVpZ2h0OjB9OndoZXJlKGFiYnJbdGl0bGVdKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9OndoZXJlKGIsc3Ryb25nKXtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKGNvZGUsa2JkLHByZSxzYW1wKXtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19OndoZXJlKHNtYWxsKXtmb250LXNpemU6ODAlfTp3aGVyZSh0YWJsZSl7Ym9yZGVyLWNvbG9yOmN1cnJlbnRDb2xvcjt0ZXh0LWluZGVudDowfTp3aGVyZShidXR0b24saW5wdXQsc2VsZWN0KXttYXJnaW46MH06d2hlcmUoYnV0dG9uKXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259OndoZXJlKHByb2dyZXNzKXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX06d2hlcmUoc2VsZWN0KXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZSh0ZXh0YXJlYSl7bWFyZ2luOjB9OndoZXJlKGlucHV0W3R5cGU9c2VhcmNoIGldKXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi41NH06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2ZvbnQ6aW5oZXJpdH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1cy1pbm5lcntib3JkZXItc3R5bGU6bm9uZTtwYWRkaW5nOjB9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6MXB4IGRvdHRlZCBCdXR0b25UZXh0fTp3aGVyZSg6LW1vei11aS1pbnZhbGlkKXtib3gtc2hhZG93Om5vbmV9OndoZXJlKGRpYWxvZyl7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjpzb2xpZDtjb2xvcjojMDAwO2hlaWdodDotbW96LWZpdC1jb250ZW50O2hlaWdodDpmaXQtY29udGVudDtsZWZ0OjA7bWFyZ2luOmF1dG87cGFkZGluZzoxZW07cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt3aWR0aDotbW96LWZpdC1jb250ZW50O3dpZHRoOmZpdC1jb250ZW50fTp3aGVyZShkaWFsb2c6bm90KFtvcGVuXSkpe2Rpc3BsYXk6bm9uZX06d2hlcmUoc3VtbWFyeSl7ZGlzcGxheTpsaXN0LWl0ZW19aHRtbHtoZWlnaHQ6MTAwJX1ib2R5LGh0bWx7bWluLWhlaWdodDpjYWxjKDEwMHZoIC0gNDBweCl9Ym9keXtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7cGFkZGluZzowO3dvcmQtYnJlYWs6YnJlYWstd29yZH0uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0xLC5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTIsLm1vbnN0ZXItYm9yZGVyLXByaW1hcnktMywubW9uc3Rlci1ib3JkZXItcHJpbWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLTB7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1zdHlsZTpub25lO2JvcmRlci13aWR0aDowfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1ib3JkZXItcHJpbWFyeS0ye2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMil9Lm1vbnN0ZXItYm9yZGVyLXByaW1hcnktM3tib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTMpfS5tb25zdGVyLWJvcmRlci1wcmltYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTEsLm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0yLC5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMywubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTEpfS5tb25zdGVyLWJvcmRlci1zZWNvbmRhcnktMntib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXNlY29uZGFyeS0ze2JvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zKX0ubW9uc3Rlci1ib3JkZXItc2Vjb25kYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0xLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0yLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS0zLC5tb25zdGVyLWJvcmRlci10ZXJ0aWFyeS00e2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTF7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMSl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTJ7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMil9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTN7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMyl9Lm1vbnN0ZXItYm9yZGVyLXRlcnRpYXJ5LTR7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNCl9aW5wdXQsbWV0ZXIscHJvZ3Jlc3Msc2VsZWN0LHRleHRhcmVhe2FjY2VudC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xKTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXdpZHRoKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOjEwMCU7bWFyZ2luOjA7b3V0bGluZTpub25lfWlucHV0LHNlbGVjdCx0ZXh0YXJlYXtoZWlnaHQ6LW1vei1maXQtY29udGVudDtoZWlnaHQ6Zml0LWNvbnRlbnQ7cGFkZGluZzouNHJlbSAuNnJlbX10ZXh0YXJlYXttaW4taGVpZ2h0OjZyZW07cmVzaXplOnZlcnRpY2FsfWlucHV0W3R5cGU9Y29sb3Jde2hlaWdodDoycmVtO21hcmdpbjowO3BhZGRpbmc6LjFyZW07d2lkdGg6MnJlbX1pbnB1dDpob3Zlcjpub3QoW3R5cGU9cmFkaW9dKTpub3QoW3R5cGU9Y2hlY2tib3hdKTpub3QoW3R5cGU9cmFuZ2VdKSxzZWxlY3Q6aG92ZXIsdGV4dGFyZWE6aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31pbnB1dDpmb2N1cyxzZWxlY3Q6Zm9jdXMsdGV4dGFyZWE6Zm9jdXN7b3V0bGluZToxcHggZGFzaGVkIHZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTMpO291dGxpbmUtb2Zmc2V0OjNweH1AZm9udC1mYWNle2ZvbnQtZGlzcGxheTpzd2FwO2ZvbnQtZmFtaWx5OlJhbGV3YXk7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6MzAwO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi94LWZvbnQtd29mZjI7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R01nQUJBQUFBQUZKNEFCSUFBQUFBdDNBQUFGSVFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUdvRThHKzQ2SElVOEJtQS9VMVJCVkVRQWhRZ0lnUW9KbnhRUkNBcUJ1Z3lCbW5BTGhDSUFBVFlDSkFPSVFBUWdCWVVVQnlBTWd4d2JmYVFYYUplZm1OejBab2wzdjYwY1BlWk1wRzRISlNqazVxSUlOZzZDR01nbFpmLy9uM0Ywak9HR0RSQTFyWGVJbmNKSVVrTkhHbjY5cU1SRFU4WmFqanM5VWJzbXRucW5FM3YzdnFpUW1mUlFwTGtLVzZRWndhbDZzNUlVaUpOVVNVRy9Pd29EWTZCNjc1T2pTamtEU1NNdTJwZWRwdTl2SklMVWxKZDcwN0QrZUxIcGpZREk0ZTF1RG5MakhIdnhwRFhHTXlkdUxMbjFxdDBGQ1FPeUZzSlpFMStrSnEzVCtJZTdCSkZJTk9BTmJpOXZUVXpoSTdXNEdtVUwwbFdqVC9GUVFpL20rK3h1UFAwMm9tUkhlNXBuNERnZk5aZm4rUjl6OTc5dG1FZU5hcTFSeFJxSFRqVFBOQTJKRkVnckhkby9udC9XLzV6YmdHQ3hpYTZFa1ZpQTJGaFlHSXRSbUUxWnZWVXZxdFN0YjdNdnJkM1c3K3QyKzBYZG9Ubnp6allicDdtU0hMQUNraE1XZ0NUTDZzMFd2MEFVb2hKZkVxRTNvcFBkNThpa0puS2xvKzN1YWVTSFlKNmZjSWNYamQrcktVRXNhRWxUcWxVbFZSbS9OK2UvOGlQMEw1QUtvek5sSjMvOWlCd3NoTTZ2NUpJVUp5a2dUM2Zkck9tcTZMY3MrWitxL1hzQVhGeEVFaVFJVWFLb3NGbjdjdFQrN0JCUzVkcURvbEpYdW5ibDdydHR6RC92Mzg0TGZ0SmFnRkZBTFlQRTVBN2duTXJaQmh0NGxYcXNiWkttYmRxMFR0T21wbWdOaXVnTTJQWUJjNzNNcmpxN0dMc29YSGNUcHQ5dVB2RkR6OGVOM2crc3hyUFFBdzZEVEZOcC9PWkk5aWluTml0WmhSbXBRT0NrZG9CZEFOalZXbGF2TWl0d0ROSlgvcFlJQWtWd25PUC92VzV4em9NdzdTQUZBS1UrWnova25QL1o5aitPZGZyTDhLZTJ2ZEtibXBodXhKU3VMOEVVQWdnSElpQkhQKzQ0NEVEenYxUFRRM1lrT2NPU2xUSG1qNlVzZGZvMkwrL2pwWWU3SUhXY1FVZ2Nna3BMRlIxWVRXOENHS1FYOWI4R0ZBQUFIOXRvNFJIUTZHTHZGUnJpNERpd1R6QUFERE1LRFByL2ZaM1YvcWRnUG1rR3pLVEVtV0VYYjdRM3R0Z1RZcW8yblA2Lys5N1hmK0YvOUpIQVZzSUljQUNCWndSeWtHVDdnQ1I4Vm9oSmNVT09TRGppU2JBcGhNb3ptMkpScHRCdFVXNjlYYk5GRzNJVnkyS0xvazQ4L0xmc201MjdJYXFCTE11QmJPRkl3ZUZVZDAxdmVMK1k4eFdodHpjcVRtMkNJVGM1ZUxKd1NJNGZZbExZRklWSEFzLy9UNTNONC9ZeDFoS0dVK0hTcUVyZHBQUG5zNmZxcVdKc05iWmFDbFF0amxPTFVNc2hjZG9BNVRRc3M0SkxjOTBTeENPTU1VSzRLUDlOc2hwenBYNHZ3eEtDaENBU1JFUkUvTEtzV1JsSndOS0FjVG5YQWhFeTNyMUtIY1phL1lkWDU4NDIwL2lhWG10R2hvQ0FpSWlBUjIzdi9QOStLVEFDQU41aGRrQzN4VUM0RUxzZ2d2a1Iya3JFallTRXYwQktTbUhDaEl2WU9DQUprS1FneVlNTTJRb1VNekNvMTZCSjg1cUFXQ0NkSGVrM0FCME9ETDFMcTBQZ1RlM2hTdzJmaGk0WGhQdWV1UVdFSDZ4dElFUUFiRzJObTVvVjU0UUZQK3lLZ08yRDRUNXQvd3oyWFc5Mi9ycHFwTFRTSVA4cVY5dkx2T2RzME5MV3lYNTFLNm9mYnZQWkUxcGFmN3czMThDOVp0aHE3ZjMyYmZ1TDY0VlpIdzUxNFlzbTVsZ2ZOYmZHN1c5bHNVQTRFR3o3MjN2eHdHenA0ZlJSK21QOExzNUI3S0IyZURKWGM2eHdsRzY5MDJ1ZzdBekxBOE5ZMjFCMmRCL1A1cWZPVjh0MW9ueUw1alpERGZRSTVSZzhEOThGdkhzdmNsSHVKc3JkdnNKcnBjL1RyL2d1L0VmWkp6WFV6cFdhRGo3TTcrVVA4LzhFa0FBVmFBUy9DUitYcy9KTjRZYUljTzF4SFpjVWFNTWJrbHJwS3k3TmZRSktRY1VSYWdvR21DVytIQTZFTnZiZzMzc2wycElZUm1FOWJJSGIwbUE2a2s2bE41R2R5TU41RWJtUWh4SEtsd01nVDU4Y2d3N3BkVVJ6N25mTWNRZmNVM3ZJY3pWa2RyaFg4WEhxNDAxMnRGT2Q3a1QvYTdwN204M1dBNzFGN2FPOU0rZGp2ZGQ2ajdmeG0rRDFQdTN6M3VpcnZtdXl6YTUzdHJ2OTNsVGI4MlJUMkthRlZVS01OUDM2QnZRTUNvMEdzRWRrTDhzK3pMZzFFeGJNME5nQ1dBeGd6ZjgyREcxS1hNZmM0cmpOY1FmSEt4U0N1UnVCSTVBb2RERERrR2RWOENuVlZFbUVNYWluNFNhMEFYVEkwUkJOcE9ZQUxWcTFhVjl2eEppVXpIS1dDaXM2bXAwQnVreDA2OUdyNzRzblZOYnNvQ21rVk1vcDUrcERHYVd6MnNMRHIyaU50K29aTzBiMzZZU0lqV2N4dm5sTjB4MFZobFlvVzRVUmpYWEt5TEczWTNxb0xkRWF6SEFFRW9WdU1sM0REZUVSVnBHL2plVEVSMENVWkVVMW1vdHFGb2l3SkZLVWFERmlhY1NsQkpyRWpTUUtKL0NTRlNtU0trMTYxUWxrZEtleVNYWXpzZFhLaTZJOWlrTkpNdENVS2xPdVFxVXExVkhUMXpxNitsemZRTkFJYTVKcFJvdldhRVA3Wnh1Tm1Uak1MQll1cTNYVVRnTmRSRGQ2VXE5QTMzY2J4QXp4RERPTjBJeGFOVmF4ZC8vcy9hanhBRTZKblBiRkdaa3VDM3VhTlU4RXNEU0xaVm14T2oxUGQ4SFF4WFNwZWRrWGF3Ylc2d1pvOCs2RHJpdVFGRnc1SXB2bkpoNi9aZ0ZKSzkzMGFFTTJYSjN5SkIwREhvcGhicWcwdXJrdk1JZ1lsdGJHUlBjZGtkN1ZqL05WNHBiQWJhKy9FNEJqQ2c5cDVaZXJpL3BkTTBDRy83dFhaTnhWRSs2YllhdlFuNnVtV3d5M0ZYZjZnZytYbkF0SERnamtQTmlVYnFwb3d2RFV2YlJsY2o1WFpIWXpWOEppNE5sMXZqc09ock1heE9IeGVEd2Vqei9WSUhKWG42SDB3aGc2cUZPRVVxUW8wV0xFMG9oTENUS0oweVE1TFU5eVJRcFNwVWxmWm5BU0JrV3BsQ2xYb1ZLVjZxaWJUQnRNbVFLWVlXSFZVVWZ0R0l0NjJsZG5NSDNFcGlVMHFWUXFIYkNMeE9VK0U0LzFYTGZCRWh6S2hnVWNnVVNoZnh3bUR6OUc1RVJBQUhMN0ZIUktReXJud3V4UWY1cmhIQkVCUklvU0xVWXN6VWJjNHJ0TWRwbDI2RmdkNTV0Z1FHOHgvZkFaMkp6SXZHYm1scmNYQW0zd1hLYTdFbGZQY1MydHhmcStlZ2ZpSEdvRE14eUJSS0h2eTNTSjMwUTZWOCs2bWRmWnNhRlYzZU9VS3NXTXlua2h5TDF1NFZJMEwxU0pMSXhYeVl6cEx5TnFpV3owWFRwa2FUeW4xWkR0aTkwbVkwMnYwdFVxdHpTQ2wrcXJLN3JJdXYxdjlSRDBzZ3hxR2JKb0dHZkVrbEUxWXpyMjhPMWwyS2V3WDlONEFEYU4xYjdMMElhUlRYT3V5OXlpdTgycE93SFFCQytwbGRDck9tSzBNZy9yMXZSWUVtM0RCRWNnVWVnbVV4MDNHNCt3aXRRZ09mRVJFQ1ZaVVkzbTR0bUVJdndVS1VxMEdMRTA0bElDVHVJMHlUcXRGY2xFQ2xLbFNhODZXRVozSkp2c0ZXaTdJeEtKT0J3T2g4UGhjRVRyUk4zdERwbE1KcE5oUklhaXFBaUdZUmdtY2Jrc3k0Tm96L3JvZlFMN0tjYWxORDBGT1czUkdadU9CUjJ4bVZNeGtVZ2tEbDBYN3VKaXV0UzhiTkdhRSt2L1pRT3dxZTg2R0lJZUVzQ3VvdldZZkNxMnR2cE1PQk43TXpPNjhHV1hMaHRtZ1cyZmZlSHAxTXU3cXdYNU5Ed1RrcENTY2VmQmt4ZHZmaW5BUklSSVVhTEZpS1VSbHhJQWlaRTByVnE2NUlvVVNaVW12ZXFVTXJwcy96MVpXRVo1WUJnR0FBQUFBQUNBMFdac2QxQ3ArSHcrbjIvY09sazRyRHBTbDFLM0hyMzZqZzFDVHR3ek9jTnVDWFlOZ2lEWWhvdEgxb2dPTFJTdXg4bmlsNHIyaVlhdjBub3J6WHZaMm5aalpMZmFLRCtWUmdIL2ZnTm1wa0ZiaGdpR2lVYWNHZlhObUs0OUZQdlk5dHZiY1RtNzUrM2ZkYW1XNllTdHdrZHphQ0haY3ZxMENTNGlVNVptTnhMWEdCZS9yUW9Iak1QMS9RRUdWTVpGSmdiRERKLzVUM2V5QmN2R1BTcVRpbUpjQytZUVVqcUd2Mm5DN3EzbkIwRE9xdjJHM1Z2bEloS0lXOE1SU0JTNnlaVGlOR0ZYK1JHQ0RIczhQWUlkVGpkQVVBeXZRa3dTQ3BwaE5kMjBtcHVNalFYS0JRa1dJalFwbUpSVUtZeEtYY0xEYzZrSWZIYVRLYU9NU2M0TXNWUllRMGV6VTZGTHBWdVAzdExIdXdwcllmdGhpd2lIRkFXa1NwbVdSdCs2bko2VTE4Q3V5Sjg1ajJ4MGIwZDdOOXBpYnEwbGI0Tm5VK3BPN3RFVUxpaGRVTzJocnB0Z1lYQ3N4QkZBM2xRMm5tRmMzRmJSakdCZ0NkNkJVSDdxblhCYmFjanNLOTlSZklETUFGa0Jzb08rblpnOFAwQkJnTUlBdFFFYW45V1FFczlNQUhORzg1NTR3YStBcm5xdlRUanBHUzdlL2lsUG1qQVJQbW5zeFdrZEFBUnlPTDl5QWh5bXg3U0dLbGs3R2g0OHZEdk5mZGcrSVRCWnBEOWd6Z01JQnd3Qms1dG1rRVhJcXFNTWFFVGcvSFVlMjZvTFRUcDR3NGc5VWtaNWJnYnhFSHRDeVRMWVBIbUpVcTN1SnBxenZTTmN1bWJCZFhZUXNrdTFDOTJOOGpUdkRGRVUwcnY4MTdnbXFzR2pQZlJ1Tmp2ZXJURG1IQ0U0cStxYnpPanVJSXZSYURoeloxL1ZKVXBoaGlPUUtIUXdzWjVUamd1QUI4Q3VLcitZSU1LZXdJb01PNXh4OWU0QUVCVERTWXBtMk9UeThvSW95WW9hamVqVVFiOEp3RC9YQjVpU3N3VWlnaEFzUkdoUzBDZ3pKelhNQ1RVMVhFWkhhVEFYVENRU2ljWGJZNFZDb1JnTEV4c3RsZEN0eFoxYVVubHV0R2h0T1F0MTgvUlVkVnBrREJ2YlM0bkVvTkZvTkJxTkZpZFhuMFdKTEpDclU4Q1VicXFNaFpHcG0rRjhFYkJJVWFMRmlLVVJseEtFRWlWVkxWTnlSZ3BTcFVtdnVnQVpoQUdseXBTclVLbEt0YnBtQTZ3clFMY2V2ZnFhRTdEVFdzNllIbTBFMmRjbGlXV3NXRTNubVM3RzViNnVHVm5Qbk51eXlXYkh3eERqcFdrNk0rajIwZVlNTFEvMDNWTW1LbTRabmdsSlNNbTQ4K0RKaXplL0tyZENrVk1sS3N5SW1tZVpmMEdReXdKQkVGeEMvcmdnQ0lJZ0NJSXo5MGJERXdNVGo4ZmpBVUF4ZFM2VnNEY3MxZzh3ZllDWHJOZDk4U0g4Z2FqazV2dVVQcWc0WERQOUptN29HV3ZHWHhTZEVMTGZyc0VTRXNtV1hUY00zY0x0SEZTR2JTSEJBamNDaVVJWEpxSG5NbE9MUkJMYXNuVUsyU3V4MXpxbk1CL1pNR094L3pQdThvaERBREFBT0FBQ0FBbUFBa0FEWUhnbENrQ3VMVkFpU0lLRkNQMGtoV05LUEZVd2JkeUwrc0RCeWVna2FKMldFTXRXckU2LzR2cFc3RzZlNG1EdzBCZnhaaEZ0OUd2ZmhQRUFteWQ0Y010VXFzUGw0YXk3R3VhazV0ME41Mk9Pd0phQmdTTkhzazJOaDdxRVdaWVZxOGUra3N4amozRUtTWGc4TE5pbFFxRlF6RTFmdjV0dnBRUUZ0RklteUx0aXZUZVdrUUNrNVpSZTJRaUoyWnJMWURWODZNQllXWDV4QVB1bmsxeW50WjJ4NmFiTnJpWEFzaFdyY2ZrVTYzeS9qL20rZ256TjhJM1l0eHpmQ2VPaUFQaTdZaDF3QkJLRnpzNzJXcmxpZldiM24rc09ta1NpelhIVFhwbXZBbk9nZWErN1M4RjFFSFA4blU0SW5GWTRRNW1XcDNCQUxsZXNhN0J6NEZ1T2JFNEVYUm5peWs4aHRDT2lrOHZsY3NXWUlLcjQvY0hNM1hYSWNjeU9Ec0JYSDlSM05JQmpVc2QxZmlkajBpaW5INXJpWmZVT0RUaUZRdWx6ZWF4NytqSFpWeXhmMzhVM3hMZHIrVTd1NDNINTlLZWdLOTVKdnd2eXFuM0lneEx5VUcyWTRRZ2tDdjFCVEQrSXZDTVBNZzBsVllSQm5TSVFrYUpFaXhGTEl5NGxDQ1QyaG0wc0VBZ0VKVERycWI0Z0oySllvelNVS1ZlaFVwWHFiTnJaK1poZWpiKzVySHJHemNjTFFoSlNNdTQ4ZVBMaXphL0t6UW5NQ0VLd0VLRkpZWUd5TnlLMWx0SlUvSjZXbUZ4VXFMc0luWFNzMzRzNEFKblROUDlKVjgxWlcwOGJ3b3h3ak1vR2crMWdQUHh3QU1lWmtCRUUrVnN1cHN4bzljV1M1aXZuYVNVcEZKUTFURWJ0ZXlLak1BTGxTUWg2UkszZ0NDUUszZVFVNGpiRUM3dXEvQXlDREh1Q0JRVHNjTWJWdXdNVUJCVERROXlRRk0yd3lSbnlFU3hLc3FKR1UzUmlFRFBYTDlEWjVGNElwQXVTWUNGQ2s4SUdaVk1GQ2RPa0x1RTFJS1ZGbEdneFltbkVOZU5CQ1ZTSmtuSkVqK1NNRkVtVkpyM3FtREtJekdsa1NiYmQ5SExrMWZ4KzNlK1ZDcG1Lb2hnbHlVQlZxa3k1Q3BXcVZLY2FVRzNVbGZwb2tNYmF4TkFzTFZxMWFVOUdJbE9mdkpsTXBwakpaREpiUmp0YU5Xay9yeldvTUlJYU5XZXNhdXQwM3lNTzJQeElJNk1CRTkxcWZvRHl4Q1N3Z0NPUUtIU1Q2UVZ1RGg1aEZYbHB0cmdNanlCS3NxSWFMMTdHY2RrQTU4QThnQ1kvMzJQTGJ3a25DUUJBTm10Q3c2Tm9CclZJcXpidE9Vc1dVNDA1bEN3WjF0RHg1cDFvN1RFZEpCZ1NHTDc3N0JFam85NGFvOW9qdEs5YnY1L2hBTThSYTQ2U2pnbWRlTHpORE1oaVVIbnU3UW1EREJaK0lVRmlUY0pvSGNsSWtTcE4rbVpHY1RjSDVJY0JwY3FVUjBXb1ZLVTY2cVozdXNlZ0YzbW4rYkZscmlxOUJtbW5WN1BiN0cwUnRDYXNPd0tRWkVnaDQ4NkRKeS9lL0o2SnJ6MnJ2ejExOFBrOFBwL1A1eS85TlBKaXI5Z0p3eWxLclV5NUNwV3FWRWZkVkZOdGhyV2dWWnYyWklTWWVyZUJvSmRIS2VhZWcwSjdVQmVxUjhTTzFhbjNwRkFNS0x3SXRWU0orK0ZtbmlIRXNGRVFXK3Bla29NNUhxZjUwbHhCTEx2OXpDTUFaVFBRMTduOVg1a0hGWDdjNlEySnZiK0tTSXNTTFVZc2piaG12SkVFV3hMSEpEWE1TSzVJa1ZScDBxdU9JS09Mekdsa1NiYmQ5SExreVZlZ01CVzVVS3drR1d3cFZhWmNoVXBWcXFPbWo5cDVxbE5UMy8vMXhzaUFSQ0tSU0FCQUJRREFnRUFnRUY0a2NIUEE0eS9mMm03WUdvNUFvdENWU1NJYVRlVkdGQUFseDFSSVpSdkdjNWowSkllb2N4enpwS3RjYXljeEkxaFN5Vis2MS9HQ3d1ekFNZlFNdzZMVEtkOG9zRkFjck5WRFBJZUZzNkxIRnhsTnl0aWVEamI4R09RUWJoU0l0ajAyZ0lnOE9WYlVmZ0YvR3RrYUNzTU1SeUJSNkQ1NW1jUGpMYllrSThKMHdKd1hmL00xbm85ZGpUVmRXaHBpRDRNamtDajBHWVk2a1kxTjVRNEVLZ1VoV0lqUXBOQ2piS29TQ05PaVhvWmJWRjkvenNMZEdZR2dWYk16d0p3ejgrbXFVMnNqWTFCcmNqbDNmRy9zZno2cTdvZzJZMzR2ZnBkVWhlL0NaMkhIOHlBQS94UThEM215QUlETkFWc0NBSmJabnhpMmNINXMyY1JKd1ZhT20yV1dzdFBHWnhZWkExS0lSN210M0F6QW10a0ZVSTVpbERjQW0yUXdvakZYQjZyM0lzQnlWcTVsK3ROYWJjdHJGK1FyQVErbGtpVVd6aUhHS1djNXUxRlVkTUtNaG54aXhuQVU0bGthQW5vL25odVNjRW5IclE2UUVkb1IyRklRNEdGbllIa2ZCZ0pUd05sNDJyUUg3ZFY2SUJLeDRHRElQVFNQQXRZSGN1YS9VemVQMWVwWkpOYXRPQVNxRkVRa1lDV1NqS29tY3ZKNFEvbFltUjZiV2lFV1dWSUZBTmFJVE9WdzJaVkh6cjVNekMvMGkvRDFrd0VXVkQvelQ5YjZERzYzMmlLNFVxQzdUUDJVTmJua0VZODY0WFlpS2xXK0JTM0ZVS3hIRFFZbys4Qjl5ejF3NGgwN0JhNFFra3pMMExHSkdJcnJaK2NOWHVCM1B3NmNlZHBBTVU2R3pSUXFEVzdudEIrY1dpc0Z5bzNXQ21RakwwTW1Yb0JxTldSRklaSTdnRFhodFNjdDhMcEJma0hzUlE2WHBWZklSdlpCVThwODVGNGhIOEVLbnhtRVltdStLNmNZWTNnUWUxKy9UekpBSVJGMWNLdk5tbjJRME04YU9Xc1hqVDlqdkJDcjUyMXhxdFdWSTZhcExwZWhLY3hadVc5QldMSjNRR3FmOUpUaXV2dlUwd2RnaHcvOElCUklYMVZ1TlF5c0JxU3RWTlBYWkR0TCtOaXZjd2kxUGdELzVPMG95bTJKKzc4b24wcnhnQTlPQ2xhMGdOMEpFUEhZL1lQNG5oSWF3YkVKMkhsVW5SOURiemZXTVBBdnhrcnRBMTR4NmpyQW1ZVWNnUmZSbFpubll4czJ5K293TER3a1MyVmszZGZqQUFVVklKZXdEMDZ0eitBdXc2cElxeFRsNGRtam9HbFlRWERNYjMxRkpQcys2N2o5Uk5nc0hZZ3d3T2NZdHVmSzZWaENMTXVjNE5GVGJ2OXBFUWpGTmpOcjBMV0FKQjNYR0htNHg3bkJSZlhtSFFoUTBienFtT3RWVG55ZVM2eDFIYkMvYXJqL1hlLzdxTU9sN00wZVVuRFBnaHlpc0Y4cUlvRmJoZkVncXlENG8zbzJLNVJMck1KWUNhQzVnckh3dXBETnNWb1hGSTMrOVdZUGExbHd2T3A5MWZ2YW5HaG9tSmlwOTd1cE5IbU9IK3liMStoTElwZGRyMjFSaUExM0ppYjc5azZwVEIzZEZBbzcxNHBRMXlSWmJUWE15ZEE3bVFFOVJGR2hML094ckhqZFJubzBYZGY5eUVlMG5YRmZPZXJ6WStETzNmaUJXQkZNQW1xRmJPZWdrQXFYVFZvNWZTNjZ5T0lWbExDU2RjcDY4dWU0eUplbGhVUHRVNlZtMmpuTkFQcXdXYU5ubnYxdzdKUDZ4UVphd1NJUGxPRk1FVUd1elBDQmIyZEpVeWdZNlE5d3I2SlVqSnI2TlpjYkVZd0wvY3haZmVjODJMT3NNSzQ5eFg2MjhQOE5xM1RERWNJQVBad3doTHc1OGhQS2s1SlNvREJKZ2lUTEVTdFBBNTBtN1NxWW1OU3g2Rk52MGlTalUwNHptVGJOWXM0Q3F6ZkpmbG1DL1laSmdOQndEQWFCaThlQkhUNUhBazRJUWtLdVJFUjJjZUhDalN0WFloSmVNTjY4RWZ6NHdmanpKeEVnZ0pTY25FeWdVQXdsSlhkaDFKeUVDK2NoZ2dZcFRoeEt2SGgyRWlSeWxpU0pwMlRwS0RvNlcyVElzRldtVEY2eTVFRHk1RU1LRlBCV3FCQmZrUklDQmxWbzFhcFJhdFN5VTZmT1Z2WHErV2pRd0ZlVEpuNmF0ZU13TWZGbjBjRmVwMDRCdW5UWm9sczNwRWNQdmw2OWtENTkrQ1pOMnVhVVU0Uk9PNDFyMmpTdU9mTjJXckJBNkUweVpNa000Ync1aHdzV25DNWFjcmhreGVteU5ac3JOdHl1MnZLNFpzZHR6WjdIT3N3R0V3dWhrUmlNN1RnNEVDNGVuQjFuaUpBUWJvdWRFQkdSSFZ5SUlSTGVjRDU4SVg3ODRQejVRd0lFMkVsT1RxUVJYSEFRMTZVNGhDN2dnQ0VBZzBZQUJ3b0tEcnVFbDYrR3FiRk5QTFdHQXhEQTIrMm1VU05PaUJnN3QwU2tTMzFveGVNa2pyRm4ySUlqSnpqTVNVaE91a2tvRUpTaWp5R2d4MklhLzlaYzAzYituOCtncWtnUzI4czc1NmNqVXAzendUcitSUGU2U2VybFVkVDVhZXVnZS9BSGdCejlGNGlud0U4cStINE92SVczOUZiZVdyeS9CcU12di9LU3VwaTlIa3JWZWZHNVo0SWF2Zmp5V3krcDRzVlh5aGVWVDVueElxL3pidmJqb3FYWDFaZTBoajBBWUZNUVpzMkJrQWdGSUdGd3hIWU5COVhkYW13cjNzNy9DSWZnWVppZmhUOWdhMTB5d3R6ZFpZL2hjbmVUWWEva2l6OEtDQm9yaEZaNGcxbFhCR0dXS0E3NTJFbElkOWFMSzRTRk5kVjMyOWJHN1JJSUtVNEdFdmhqcjhMVTF3akEyM3M5Qm1nYkdqUTk3b1VLd3FpT3Z5UFpFUklDS0l6QTZXVHBXUXdWNm9KbGUzVlRsajVUeVBLT2ptNE5idk9nL1Q5R1ZmeE5BOWhGaFFEU3cvZlJqcENGMlc4T0E2OGlDeVQrZjJIL0RHOEM2ZSttMXgvSUk4NzlOQTM1cndBQTY4UVdBWWdsVFRBc1lBQ0VxZU4rNm15M3dZb0E0RitqTm9XY05TOE9pYWpRUVA3eU1GYXdJalFSZ1NVTUxJMFE3bjFSQVg2UkY4WUtJSUpVb1ozeWdDK1EyUW9zQ2t0TzVsdU1IR1VhRTNlTGU4VmowaHFwV0FwSUVhbE9hcEc2cmRXKzdxUkFGY0NlWWlrQTRCUFRzTGgvd1VXZk9ieDlSNlU4cWZBNFNLbjVnN1lDWEFTUUNRQllOM2tBLy8xTjFmL2s2Uy8wWS8xb0JyNzRHWHh4KzJOZjB1Ky83Z3ZxQy9MenowRWY5T1JCcWpuMVBnTG9aUThiKzFaMGM4Z04vbC8yRFdmTm1mS3BYMTAzN3oyTHhuM2x0QlhUYkU1WjhJUHZmRy9HSm9TRHk0NkFNeFkyRGdFaEVURUpHU1VNVG9XZ3BrY3hNREo3MjRSMy9lSDE4U0NDUzRJa3lYUXlaTXFTcjBDaElzVU1hdFNwMTZCSk15TVRNNHRPYi9uTlczN3l2di81Mk9jKzhZWGYvVHN1M0xMTWVUOWJkWHQyY05ldlh2THlhUGpGRFUrTmdSY051T0IxcjNuRExCSUdSeU5RR0R4T3lqbW9WSU9MaDYrVUdBd0Frb1A4d0pPT2hoYkpCTlV2aHBVTkxacURVNkowS1ZLbHliT2JYZzZ0RWhWS2xhbFM3bHVWMnJWbzFjYXFWZ2R2bmFNUUNjdVdYSEhWNWNpNFdVUW1VbVUwTU1BbXRnUXNCU3p0RjNSYkJCZXdGSUF3NWw0MWlqY2JCbVFwNnkzQUVOdDgyZEFrd2p4bno3UDc4VlVVREIvVm11QWQreDU2Y1ArK3ZYdkdSa2VHaDFZc1g3WjB5ZWpJOE9LYkZ5MWNNRFE0TUgvZTNEbXorL3Q2ZTdxN09qdmEyM0t0TGRsTU9wVnNibXJjZ1dBMDdQY2VmZVRoaDdxZGRxdlp1UCt1ZEcyMWxzVEFQK2Z6NmRyMW1vcCswTEoxVEVnZ1M2Q3V2QzVveUFpdWIwMTNZUE1MYll6VGJPREFUWDVZRWlZeWNwVTVJVmNQZkpEbEorb091ZHN2TE9VeUNIQTBlcFNoUmQ0ZHVINEtnRXBNRU9XWkdiNUVGY01qVkprQlVCVUJSWmtBMlpLTlJzQU4xKzEweEs4dGk1THZ1OUNRT2Nad3hvYnRWSllTTllTRkkzL2V6d2lMSmRRRWxWQVZxYkZmVmo3R0ZZS1V3aUwyTTljU2RnTm04TEhjc0FJbHYzdCtwVHppa2dqUzhMaG5wUkE0eURwYk83QmNla2hMSVJ0eXJzbzNoT0ZiaVUyOUZnbUtZNUo4MnhSZDhxeWxzRldrRUgvYmFuOGxuRHYzWnk1ZTREVkdpWjNPUVJEQkQ0NjRYbldUbW9GRFI1MnVYSmt6bGZ5Q1JOMGpGVUxlcVpWTE5RRVhtVkVsRG90Wk5PZml6UTRSTGJpMEszVmZRaXVPS09FU01GVHYxM1R2aTZDVnlVN1d4TW1LVzNVYnREbW5JMTd5WDNIY253amdvZm9VNG1hU1VsTG5JUG9kMHc4eXY2Nm9XSU1kU2lHUFV2MnRnbUE0RWRhMTBGcm50UW0vZWx0aGZ3dWhBSFdLcytKcy8zenF0VHhTZmNaZFd2TUJrRWtvMk9XZDVoOFZ4a2wxd1EwdFdxZlh4am5iWFR3RHc1b21XWjVxZHZISURiS1l4eWc5NzBwSnZ6QXo4bjM1T0xSa2ZTYmREVHBaZ05NOWxRSm0yaVUzL0gwbmd4dkgyOWRBZVkyUURRdnhaNHpTaHBRYmhBakJtd1ZiSTdGN0l2SjdraU4xRkpHV051QW4wek1FeVJsMGgyTjE3SkNLaWdDUEtmeTluSE5PdHp3bkl6d21ndXZaWi9UTUJjUWxIQWZ3NUV4SERzWEd1RnVTZW8zeUNKblpSYjNXN1VmM2FOWjczRVlLN2tPU2xWSnN3WVl5SkN0Y0dNMUdyajk4Y25IaGtGbXU3UGRPd24xV3pSMGh4VG5SVThhQkpteHFIOXdRSUljL2ZVV0JIajhxcklTamJPMmhQVzdsUklhb0RKcEtwNldyVkhiMG9sNUxuS0x5RmoyVEhnbXk5NkFwWjYvbHExaU5QWTh2d0RLejVncytFL0NaSUNQd2NhY3FjblJpcjFSelBzbkNnUVZhZzVVTXJLR0o2eTQreVBZWkk3eWpLVEpLU1VONG9VVDdHVGRpeE8wRGtmY1RVZG1rYUJ6cVBiaTVTaUtmSmFKRERLWTFabDEydTFSQU9rd1NwN3pIbjZRa2FpcE5McjZFMHBIZ21JUTBPM3hCbldTeVkyMGN1SDJ6V1l4TlEzdzJtRndQOHhrNWNLZURzZFVha0tsTEhOSkc4czV4enloTnR0RUJpUkROUXNjQ2wydjJaQW4xQ2l0eE1FakxNd0c5cDFkRHRkcWl3SlROQ2ZMU3FSUzBBdFZ1cVFQSXNRQ1JaSW04eDY2SU53cFRDTUpDMnZZSHJOTVdNdzVUeEo0Vmk0SGdSUm9raWdGS1BUcG40NUpZZ3hxaDBib3FndUhQNklna1FUS1ZQcDlCbUN0eVNPSmQ2YnlFMGxRMWRua3RsY2lHVW1wUU85dEJuNkFCUkJ2WWJoL29YYXBuQ0M3NUdHSXhsOFcrWlpPam9IVWh1N05DMjVVSm9MZG92QzFWb0FpMkZBWHArTTROMUR5QXpVVWplU3Y1d0c3WmJmOUVjVDZqTWJzSjFCcFkvSnRvbDdOMGpwUWhnTGhjWWZZZVVaMkJYcUdVSDg1UThSUnR6MmZRZG56bmxsQjE4ZENETTNCTTBSVm1MWEdQRlZSakVkUWhMUDlEaUp2cE56b1VBdmVnOVpBTGZJalRWYjRldDV2UE05QVVWQzExSllCTXlFcEpvTGF3SFZzM0EwQ05EMGNnMi94blhKTitJSlc0QUtmMUdTVWEzVkJjdU1yWGxVWVR1Z1pvT3pQZldLUnVjOHFZTW1sT01Ld2w3eDBrS3Rzd2xmMlpSc3JqMWhnMnl6cUJhUGxBYU1sa1JDN3pHNFdhSGM4QUJybHkwbURWZ1BoS2c2MEtJR3NsbjFGRlFHb0JIWTFUR3Y5S2dKcDNWb28zT0JJdUE0ODVvcmgwYzBORzJMWDZ5U0E5c0djQmFuMlFob2JnbmlKNkZldHVLU0hYTHA1ZWNOMUZpMW8zTWdNbUtkdzBJckZoajgxS2lVTER2UkpESTVLU1VsS0FGSUt4VnpDdWdVeFhwR2daZkFnUEVFOTBOZXpLenB4dkhiUFRWcTJkT2FxODQyRU45dXlUeksyRll0K1dkUVpEZTRVYmVCMThzd3ZsUVVDaUZyYkwreUM3V3FselpPVWIyVnBZUVp1MW1QVWtUMlh5NzI2TmowZ3BVbW9FV0llci9GSmtna2diQUFMNERoLzBsbzVKREJNQzdrZzBEdHpQb2dGMEs3TFdMWFIwNlBFTjBvb0hIMWx1ZUprUURQSVdVNk1aTzZMYTJzZ3VuRjUwOEMybFlHWlBsY3gyWEoxdHVYRmJyZTUxQ0lVV1NoYjRmb2o2TGdHY21sZytVQ2lTaXhjSDlySjZUVEpkQUMyNEFwR2JzYTVoYS9OSXIraDlJZWFYSUNpWnU4QzRKTHpXVDdnS1lUNzYzOStBQWpMbHBwZFhBTGJtdC96Y2RaOG5mSS9zd1hOYlpkdzltUjFTTzdJZmdaS0MvNE1Dd3BDdzVzRDFqNDB3SXViZHRwQk5jc1ZIbXVVUHZoYWtzeE05RjhCTGtzUTM2TS9CT0pBUXQ4VEJCU1ViU29qd0szMkVZYmVRcnp1WUdhOW5XRmhPS1RsUUJ3OUNGajlqVEc0SjNOZ0R2ZXVBZzFVT2hiNEtBcDlwSGdhTUpLYjBTbG9MN0RvZEhzTGpwdFhoa3ZPYWFvZTBDSGpEVTZ0a0tDQjQyZ1pKelJEY1BvMnhOZUpyWkR4Y1hlVjNWMjhKd2swSEpoVTA4THRHRFFNcUtPUDNUR29BSTZZbmJFa1J3RFJrM080a2k2MUlucVQ4MTJ4S2JpaW9CTUdFNURMcE1LcmlPcG92Rkx0YkllOXhxTXEvU1RZc3kwWlFGNXlhWmF2cC9hK0g3dWJEbnBTc2lCd0pGYWdCTWk3d1ZXYzdVSHFsbXczZmNMdnZtblZSU0ZZUlFFbmd4bkh2dXg4UTFDVjdBSUF1QUlEZEFIMUErTHdnK2dIZ1A0QzlRTGdCQU5hZXZPVHdvcU1IVW9OZ21WbUV5REk3THJ4TEhEWFhFazdaQU1JOXpPYkd5Q0dEYms2RzVVZ25UcFBjMytqWlFNallHVXl1TlhnK00vVGliSTJjQnhnSndrYjBiZ2k0ZlpmNUFCQ1dUN0JEU004WWVTL0o4bm80SXN4UVlrNTF3WkttNDRDanc2cFRmUWpYalVMdjllalBPVktKM1BoUzJpSWZ1bEFLNnNNTHV6WTVPbi9iSHpoWkROMkdhUGg0NjZaTFVVWkVtV0ozWFJHKzhBK3Y1WU9PbEZJTVJGQjQrTGpXeXVTdVNPZXAzcXJQV3JOQm9SdkdEV2JncWN1OTcxNWtYejJCRU1GVVpYZmh2TDlVRC9PdW02NHd6ODFJa3NTWHZadUlPcWNZUkNwdCtEVWlnc3VFM1E3YnZnOHo5cUV6ZjhtZmVIRm41NXNKUlV1TFl4UTNmTUhadU83dmhrOE0wOTFReExCWjFTZTJpUU5WMGRqRXVDRlRibnlqZWFxTld0RFVPYnFKZUpzQnVuSVE3UEtXcXZIUFBGeEVYVE1LUmpmQURjK005Yjc1V2l0S2VOMlRUd1BNYjBQQTlxMkZVVUdTYUxoc2xqREFVQU1NTGRLWVFIVmpjd3BnWUtvd2FVUUMxNnJyaHhCRFJVL2FaZ2JFb1VzK0ExMFR4a3Nua1NMalpheXlSYStQaEtLTmpCVDhMb1NxcnFCR2lxR1NSaUY1VEJDN2g1M0Npb2VGNFdGTVYxeks1akRQb2JqSGdQNWE5c0JERDFpTzg0V2NMOTRDbzVFZGNJa0hsTmZKdGZtbUFFdCtBcDFKYXR3N3Y1THhiU1UzbWVLQ1dzMTNjb2RRVVlsSlZ2Kzh0bXVyQUdvRTFucE1oWmV4VExvUEwwa2c3VWV5Mk1MRXV2TTB5NDVLbHdHbFd4QWhuSGZOalphV05jTTZySmJNaW1pMCtzenY5QkJxT3V0ZlBWRWpIakliTmQ1cGFhTm1iSDNGTEp2aTF0bE94TnNvdGRpT3dUOW5lUE83K2VTR0ZGVHowVGFkOVlkbUEvcEo4cUZhNWdzZmFvaXN3NjFBbnQ4T3ZqKzI0MldLM1JWcitjeU9DR1RYVFo3WnEzeUhKUUxSK3FmdVNiZ1BsNFVvVW5uRk1xbHVIOUFQOFJpTzFrYWxzeGVlSFhua3VOSWU5KzYwNnppaDFzOE9LODZla01yNnFzQnM4cnVVcTZ4RkgwZ1VmVnNPWWFuM1dTdEFSZjdGNTB2NndkdUtiMFl2MmJzcDJ2Q3dTcUZhTUFycklMdllWMHF4L1RzNmNEOS9SMHZtYjdxK1VqNFFKREhmTHdxYTFMMllTYUtlNm9jV1hUNkVoK1Z3dWFSeUhzcEx0aVVNZWZwSlJVWUl2ZE9wNVlGKy9NaGdCQjJwZndHamtLY2NmK3dTSStCVnpPWExHZzFjeFc0RFZmOUhPYWFIaVNzMC9SM2RmU2k4aGRGeFloN013bEYvanlod0RhZ0YvQ2UyejBod3dGNFg1SmJEc0ZKdUF3TTBOcXRqc0dNRENWNkdLMTloalVBRGJSTjd5R2RoT2g4dXdITDMwR3pxeWxtY3Y3YUlnN1FvbHpQbkx3cmJqY052MzZYS2FGWno0aThQVkhoZVEzb1FwYXFMSkRJM1NEa0VYTEhNQ0pUWmFQS3lmUVRVV3I4NnFIY1c2WlRlNW9NN3ZhdE5EWGtGbGNrVVA2R1NVUWhWV2l0RjJXNzE5ZlBPWkhlN2c4V3I3Rm0yNHk4aEhrVG1SZ1Y3dmpQUlhQcTRkRDgwYTBhWmc0M2ZCVjV0V3Z2STZBQllPZ2ZHdXRpOGkva3F4UXVMRUdvRzFvNWZUbW02bnNXWnJkbHVFMmJyMExna2RTaDdGMU1TNXBEMERaRHc4VWl0V0tGbXVzeDJIMjF4RC9ibTd4eHM4T0gxbGlZSlNWdzRZdWp3aHhTMzBCdzI1QjdhQ2JHdGdIWlVMSW02dWVhdHhleXByVmtxK2xGbkJtUlZBZDJvVVQ1Q1Y2UExrWFg0a2FLYmRnVG1GaGplc28vS2pDOEltbGdiTHlyR0szOFM3SmpxdDFFNWFDTWlYb3dhK1VQZ3kzYko1NmRvSElneFBQZ2J3SnJkV3RsT0dKN01DTiswNWk2VjdVbWppamhTbUkvZW9kWGpJMld4UUhqYW1mVk9TUHluV0R0NThib3k4eXZMTjRxOTNKaHBMNXBXQm5SRzZsYWExcEVWNW0vdUlBcFJON1JYblRqSXJtbkEyc0hrWnBHY0c2eXM2WmVXWHo2ZDhuVFRmdFpoUU9iYUJYbUxWTVZxWmtnTkRGZ0RpNlhsVFltOWNVMldZanB6U1NGQVNCdHFxc1NvbGlVUEtVZmJBRDErcGliV1o1eWFZemkvZm1Xc0hSWGljai85TnAwWnpmaVp0SjMxMTFlZGdmQXRYOFcrbW12MjUxZGZFd0ZBdHFHOHR6MnlEekxpRHR2YWJlclcrSnFOYmhDeHRTZ3JNNnE0c2xUSlM0MXhhQ3BCR2hwcERycmlRUVdWN05nZGo0RjZoU1VqbW9MU0JzdFpUZHZkZmhBWW5yQmpVaXptK2d3VnU4enFoc1diM3gvRis1WEVVRFVUUVhRQ3h3ZEh4eTV2aTZZSG5zMjhVaUpoMG43eElXQzM1bDJzR1ZRcVNMSGYxQ043Z0NRS2tlR2dSOGFUV3FXL0JsZjVLQ0FRZ1RtdUxDeE16UmpqTElzUjRRZzNWam82K2F2WHRtc0NKb1pNT2tjYnpGMUtPSEdEN1pHeWtsY1dNeHNlaURzU21Vd0NTUmJ4TStPTVZZZ3hLZ3d2UjVaTk1DUjQxT1F1SHN6dVExK2E3K3VmM2dNZVAzR1JHWEhNMEdPZGJHaGZmN3pJYVJFQitPeHZUaDA5OEJzM2YvREFZM3BvRHlyUVV1NlRFSHlVaDVkdGNpYytPQ2hRRmplRitSRHo0dHZxZEQ5RnRPQ2lBMmtmSUh2ZWsyUExSZnRBTzhkeFl1NGUwTGl6N1dCeXkrd0R4WDZaR3VyWmFicnV6R3pXb08rbUMrWkZrbkdzS1R1THpOSENKQzVIOGdVekZzNTNXckJWTWdLM0lsT0JGTC9CRVFXbTlqVG1jUjhVRWswTEovUUVNRGZnUEhUWkNxcVdGL29LZWV2NFVSNHFHVlVTNXp4QjBOZnlyUWRuVDh3ZmRFYUx0cGNqM0poNEZhL0dUNlljNVp1QWkyRGp1d2MrSWIrbk9JN3c2TWFxTytDdkthMGp6YWVmNERxUW9lVUlBa2RrbTV1NW5QTzdabXdUekFBNVZVZnhvdVMyR0ZBSU1BaEExUytmWVlWSXBQY1hpRkxGQ2ptZ2VPRXdBVWRESUh3NjBQZ3BKTkQyT0ZSRmJ3SU1FYXhocEtXVzcyWDdsbXc4T1lXT0Z3MmRac24yZE52OEpwK2ZGSTRaaG1UOXdaY1phOWdTdUFCVHJ1OGh3NWswbWVDajdTc2U5ZEtnZ0pQUlJnVXNlVVZIYWsreHg4TVExRkdEaE1xYXVsbW5QTG5BdERZQUNTOU9XNkpleGUxRis0dzl2Smt6NVV4K3FnVzg1amt4d3p3NXdXQVc1bUhaeWZ6T1JiTk16Q09jNWpkVnBoWnNVcHNlK3BHZ1JweG1aNCtaODlpOXBPM3h4aGc1UmgrLzRiVUNqRXBoNjBPUDEvR1dacldvcmk3YVpXdVFpK0xaSndZcDBiTk1lZlpod3g0OTlpbjZGSmNBSzREbUFHVElpRldKeERUendsSGZ6ZnphdlFZZDR5WU15RFNZUENMTm1KQ3p1RkZicG81RXVpaVFaSm1RbHJJemtFeEJHbUtwMkxUamlraVBzS2ZQdkYySmRENHYxRS9zMmUyNnN4Z0NydUNCNk15Wkxic0lQMlRkOXVuTTdyc3N0UDJINkZCZ1VsT0I2MEMvelk0cTNReTBwcm5jQVM3SlpNODEyeVlkSlpMNDRnSUROdTQ2MllSYVR6eTVIS3E3TGp4akZPY2J4YVhacEIwcmJaYlVQVE9iLzdxeGtmVFBPZ1ovZEtLUmdHejdiZklzb1EwRHh2M3o5ODNMTjRZb3ZvYWJtTloybmpPS0huWjlzUmRUR2pKcXhJT1lNaWRuSndSWkRwa1QyMnBwa2RJVU5YRlNCaFhLSEd1QmgraGwzK2o1YlNyMlhNTzdTQjNWS2FYMkJqck9NbTE0cStSc09HQkhzd1lGTnIra1lMenFBTTAzbmpCOTlHanFqa2FEeE1mT2FOclc2RTlWTWxCaWxUVnhjV1JpQUpldi9QK1Q0YTROYllxRXNrZHNTNGE0clZLTEtRSk5CSlFGYlNyZmp0Qm1Nb0VVS1N2amZBbEFsWVRqUzBSaDFOSFV0TVdIVzRGbjMwWVUwSTRJOUFQVTlyd3R1TitiZW5sU2N0aUVUUlltNGc0ajd0NEFKSkdvY2Vva09SZ1FNOHowZkg5TkxMYVNRUkU4V2NDNEZma2FzQ2JaaFg2azRzU2JHWE5OTGRJdm1RSE9CR29HVjR0Z05LMHM5M3hmQXZyaTdlbU1BaGFVZ2NHSXl5ZmZlWFNwYkhnOS9kOG05NXU4L3QrVHU3L3QrN2E0VHgvc28vZTVOUHd6c3B2S1JyTlRqMXpwL2svYi96WDJvRS8vLzJTV2UrTnF2Z21SZFUwYUtqd1JJdjE2cEU1RlVlbnpiM283NUFqZ0hFT2tJRjkrR1hJOWZFTllLSDljUmtQeXFRMUdoUFhTK0xMR25tWDJlRzU5azVUWnV5ckZYTTlEbVQ3S2w0TG1tUnpZWUxpNVIyZkRrc0tJYmZDNXJreGdBRGI2UjJ1VGZlbzEvSmFKUDRaMnRRYnY3NWlidUc5dlFhK29NK1hhdWlLYUhaczkxckl5UVcrckJtSW9ndjRZRXpoMzE5ZmR0NmVncjg2NWRXVjU2NHJKK0pTSytHN2lVK0llYmovZUx4Zkk5aEZYT3ZFeGNWZE5DOTVTeHgwcDlJL2FVejJhVll4WHZhcTVhOWppbTcybVNjYnNBejJMYTBPT2JyMHZDUTlZSGRoQXBMbFhhL1dNdW93K2MvK3FWdjBEeXFNcFhMSm1mRUxYOEVhRGJ1MXh2K0VXdEpCdm9vVDBhK2tXMk9sbTQyWTNBa1JtRFFZWDZQcmpaV3Y5MnBKa1VCTmlYNmdvMmRMaGU4WWpFUU8xd3lxY3YvUDJqMnVpNUgyUHl5dE9kM0pPQU03dTFFMjIvRnFuZlVScmR2YjA0aTdvWDRORHJ5ZkpMUm91REk3YW1ydlZxOXcrN2FwMDE0akZGeHF4Ti9lcVY3cjgyYW1hYzcxMjVVQ3d1VWRYNitpbEFpbGt2c1d1R0FoVnFvMk8rVk9LK2RXQ2ZRY1o3U3FDK09xOS9yck1QSU16dU1TYTdLRzJGak5naUxjazMvK281VnRETjFGeERqUnBzaXhNM2pad3l3U2tDc0lyeEJHbG1leEtPdXlYU3F3WDFJd1dqS25VYU5Tcnh2N216cU51VGxVVVZacTAzY2xhK3cvTGRCTzZXODVzVWJ0SUtJWVZLTDZIN0hoV1VyT3I0Q0ZxWlBEeG0rL1doNVJQSHFYNExSTnlJZ2pQRjBlVWxESVR0SE9lcXJidW4vVlRpZlVLd1dpaG1JcEFvMTROL3AvZ1Nxemc3bHVqMHI3V0tLTjZPQ1B4bDRYTEIxQmJ3S0VHdll3cXl6VWJPN25OcXZySG03dG9mcUJNMGRMbmRxdXZkRUxCOG1CNW4xelBXT2phNUpBcVNFUXJYZENIM1BEZXduMmgrd29KYS9XU3dzWWhLOU1qV3NsMDY3b3QzQUZEc2xYbjg3ZFNoaVJudnZtYTZCT3Y4blFPbUhVUVRSd3ZYVzkvRDZyUWNTMDJYajMzRGJJL3Z6K2ZYSWJ1U3BWdlZxdkgxWGZOdlh1dW1oZzNWbXkrclFoeWpWOXlYblJhMmIybExkYS9qSDhiYmFVdDdONmE0UGlsVFpjM21ibGpKYm95em92Y291OHV6L3VQSU5Eejg4NFJPajZ3VzIxMHR5TzBvckZVb1BYWE5RYms5WkpYR1Zrcm9HNlpNeTlYVVBMYTB6NnJTZ3FsZ1hLbGJWQmJxNDBxY1g5My90MFBjWnZza1ZKbHRNMU95Ymh2S2t5dEtPWU0vdVYwc1ZnVFVlSUJGV0ZnMnVVTzBEZnpGOWJXQlh0akRqdlNJSGxWMjgya25CbEwvYi85TmpxNHdNK01CZ3RuRVJlRDVseldZRFMyR3Ewdi8wQ2JtNlJhMTN3SDVBL3JrdHlmTGUzWTJzOHE5cnhiL0t1ckdJam1ISHBRL3NhOUYrM0cxalJsTm1Zb1F3NVgwOFgyZnZyVFBtS1NaRHhkak12VXBMSkhwRGtkQmJjeHdSVDZCeEdDQnNReDFLcnRTVG1zZUFDWkJ4MndrVjNqZkxUWTBJSjZna2k3S2VRY1h1Z0wrdWJRajVYUGJ0RG96Qm16b2N0UmErek4ya3lRdXdZYktYM25jb08wV2xrUXNJL09DWHJjZmI3UEdISmZ5ZjRUUHY4T1ZpMnRzSnliWXpjYk1yZ3JCT1hHSlB1L09obUJFSlVmamduaUdDNko3d2dDdUdDOHh5VlJGTmtVbmQ1QVZxSDNMSEF5ODF3azB1UnlKV0dkYjhqNzJJQzBsYzdOYjJzZ2ZNMjZlVU8yWWZidysxbUtTbVgwSmxQV1pHdzFVWWI2REdreVpTbERlc050MWJVWGwwWjVvNkVmZTUwQVdteHNRZDFCcE1NWWRBNHY5UHVEUXdIWGlIOTZDYjVzTWVmU0JvTWhaOFNhTS9xLzlDNmJMQzVOR1kwcEtnaFpPLzMycVQwVlVBWXFIV0RHcVZhSmg4VFZIOTdOMFJuaWthcGR5bDJuQkpJWlZCcWp3MUNyamdMYTZXQXpabkIzZVlFaG9zckw1QVlJWjJhMmN4cm5iTC9XUmlVUmZkaTA0TXhzMjZUc0cxT2xZdi9QSDRjQWhUb2dKK21hdUVJbGllMElBckpMSk5EbWJITW9FMHFyLzZpTG5DU2oxNGQ4Tkg1cWFWVzlRUkF0SW91MHk3Tmt0dXhFWE9MVUdjNmsyMkQ5L1RjMnMvamZuUkFoSklTaGpBdSs2VzIxNEQxUU1mRUJlOG5nSStRa2VjT21OSC83K1NtZE1QR2RiaUUweWF0Z3Y3TnZHcjhLQmJDeUlBbDAybG9jZEVlNjJ1dmNhN3VzMmRjdXlmSzV5Q0wxc3ZKZWQ2MnpMcndTOG5SN25kaWgyUldOQnZoU3Q3b3BXNHMzS0d2OUo0STRuOGZTS0NQdVhxTkFlYU5SVUNRdk5tYVZUQkJ1TnhqaE5uY3dpeG9NR2RSenJtOHpHdUQyelNuelowWWJ1akpXa3lsck0vVFlkOVlkRW95bWpOM1liYjNyVnJid1hCenBvUFdKdkIzVWVjODcxNSs1c2JYQ0taTnBrQ0s0MkRma2M0MkV3cTdSUlg2ZlBvMjVvdWY1aWRHV2V0ODhwMnRrV3FLd2hGZ0pXSE10UnJNNVo1eTEvNjdUM0NSUjYxc3hYNHpVdTZNcEZEZG5ySWJ1V2dmVnphbmYyRnRKS2Nzbi82ck1yU25LYUV6YTArYytIQ3BtK3J6L2VjZ1RSTisvL2JWV1l3cDNoYUdjM205ZE1qdFFoeE4rMkNHSW9TcEpmSHNRd2dYanZhUmxQM3RIQ0FLMCtkTzgycGhRR2plWWM5Wjl1TzR1bmF3MFUrdXdwTlNPcUxSTmJkWDBORHVzbUE4T1ZUMG5rRFY5SlZBRjRBRlJuTTh0TmpUaHRTRlpUbTlBMmwyQk5LYTM1cW4yRXlkSVQySjBMbzc3b1RuUWt6YWQvMnN4RVVTSy94cEFyYnJ1bEIxZ0pqMzVmVkdXMjBNV2FWWTlXdVJtM1ZJeHJlYmY0dHArNVpLT3g1c2hQVk5uSklFdVA4Y1c4WXNjU2gzcGFwSlM5clI4OFBET0xMRUdPamNYRWIrNWEvK2xac2wvaEc5T2d2dWJ2Q2QvY1gyZFRoVktLQTJWNmdyNUp4d0k4WnhBQ0ZvcDlXdXVhdk50MmxRemFhTHFGR3F2R2hUU2drdVI4b2Irc0JZT2UvVmRvdTlGRk05NTZyaFE4TU9ZZUZOQUdYaUdmR1pVT2JwTW1PVkx2aVQ1L21NNENiZlRyUzQ4anRpOWYvbkpDZGN4NlMyek5QbkovTHhIdE5qcnFhdGZLREtTNU0xdloxQ3ZmZjc2NTJTSVZwK2VRYm9BdnFBTUdWNlByNTM0ZFBhTnBzOVUzaWM5VHhLVnRuKzhTQU16SHRsWXZ2emhyeTN2Rjc1WFlIbm9xMlhMSHY3Sy9HN0JlNFUxZzRmL1dWVy9SaUh4QzcwL3o2Q09mdjdhNXpyaC9wei9KTDFLOHdhcmFPYnQxbGY2NUE5Q2MxK1pJMytVN3dHbVZZVEpvaDZTa2oxZzE1Y2MyUzU1ZDgvTHd1TFlQT0FlRUlBSUJNNGdMN29XcTJML3lUY09yUExlNVlMVThNN083dHMrZkJzbVZ2SjljTlZVRVhucTZDblNnRHNyRVBXUlJzRFpNSnNuKythRlc2S1lockdVNTJvUzVSZ2E1dm1WRlF1VkM4c2hlWVZaRmpBWjFGdmo5UW5ISDlMWGVLeSs5aWNURXl5Nmk1V3plaHVoKytxNzF4eDdGbEh0WE1TRUo2WmhoZVNRNUQ1ei9VVVZpNVNMWElsZHVPeSt4RWZNQzVEMHNRenByaVhVOVJhbi9UT0pxa0V0V0hlMnpLTnllaUorNW83aTBWVlkyNnpwWHdDbHhjZlNaRDlDNzUxL3BjeVlNdkMxNHpMSlZleFVSaC9YNG5WcVVwVUlYTGRyc0F1cFZ0VnRmdXdacjlnTE1QSWlSTXNWanE5Z2FKekdyVkpDU2NlbXdZamZQeEFCbmxUcVFGUWRqSTVITm9lMUM1TzAxWktpZ1lXQkxZQmRMTllrL1pkZXhSb1Y0U0IyZkx3MWMwWENJdm16cTBxcnlGS0JTamlUa2ZvWVp2VG83d3NyQU1IWmZ6UkE1OVlqQlpXNlAxMCt2c3BlaitFZUJaclo4dWVkMDg1NnlzQzVCRGZ3KzFjdUVvcG9yYVpVbDlZVkduTHNqUkJaRXhQTkpnS0Ixc1ptSGw2VGFBelk4RzFlR1dGTkc2S0NjK1AxSW8wdHE5TEhLWVhVZlp3L2Y4V1JOTjczQmZoNWtrZ2VxZjhaV1MyWXZrczNFajdwZnFpNzFtNW9KTWdHSTZWTjFPRjZNbzIvcjRsdWJsQVRSdDZwQmtCTjk1bnRYWXpIMlQvUHpNVitZZWk1ODV4dVRUMVlTLzgyVjdlbk5WWnJhM1ZTNk9HQmdDK3lzSVYrWTNlS1hyM0FFL0FPMHM3NWw5WVkwcFNMR3FsVUJraW9EUi94VkRxdDU3L0EzYWsrMVRkdUx1RzlhV2ZTQXhxWGI0N1JsaldxOFlDYkRBbTNZQkFHTzYrSE9RcDVtSE1kcGpFWXUxTjRENk5YQlBnSXRvbGhBK29taGNtblJkQlJOd3NnbXVVbWYrOHlGSTJJRUhsWWJHMVpNUXpCMExEa053SGtFN1RXNGZ6dTNDMHhoelYzYjJsNjFaQW42Qm1TS2VGYUtTTUlHS2xrZUE5eDY0cTkrWE5kdm41b21ZMldyd3oxOWRjeS90bU1mdzYwM09LVXJ3ajF6cTVWOTNBazg2eVpScVBGbHJSWWNxSTVwUEc4anozVGJEVFZXQzJ0dis4cUZxc0lJN0doWnlzKytUMUxYVFAzeTQvenlMY2FiVDdON2RBRTNkVHRpYmpNb3p5a1ZvS2VBR1kyeHFHNnMyS0llN1JKYWcza1RPb01aY0Q4Ym5WRUpxWUY0VnJIYTZMN2lUSnBrYk1YYzBUcU9HektuVkdhRFUySTFvV3B6VXdmNUFOVllNK2dteUUwN2dSTU1oMFdJc1p5VVVtaGh1blhXWk1tNWYrL0hidnMwOG1ES3JPcmNhNWFzRzVpRGo3YUpiWTQwWG5Pc0VaY1Vxd2JEdi9sZnJEYlVkV3B5WHFIYXRjeGJYVFRUZ2JlSjc4ZVhGNW4zenlMWlBGdnJPRGduaE9CcC92SFRhV0xXaEg2VGRuODNmUjdzdEV5L1g1djdzclFLMVhYdkYyTmFZUFJOcVJxREJpNDBmL242eFFsK0w1UTdZWis0M3BrRU45VHpBQ1ltb0d1Y1R4U2lPY3RZb0EzSmhCWnlLWFZ3anVjdkJvNUdIUnExY2lLT0wvc3VnVDRDR2htK2d3N0s4RUt4enZTdlA0eEI5WUptV1U3Snk4K0lwVTZERUExLzY0UlBjMElOVDYzU3lNWkd3UHYzOGVQczY0QzdGY0xheHUwcWM2cTZ0MFE2VkVDY0VMSmNLVmMyZ3VDSUkycWxaOSt1L25aMXdjbEdDTm9rd0RIeHI0ZVJxU0h2WHp1MU95ZnBILy96NzloQnN5elQyOTliVlU0ZGhsMWlZY1I1RW12Qk5ORWxOSTFBbG9xMXpFVUpsRjZSTkxOMHdEODhMZnY3cDArQ2I0T2JKZXEyWE5XdzF1OW9Bb05JcC9tSlh3cEsvem1oOTM1UGdRUFpSYU5STkpOUHBVZnZPZmVPTmxkaEZBbzJncUFXOFZDUWRsV0YyNzNEWkQ2YVpOeVZtNk83RmxmRGFyeWlydkU4bWZRM3k1THBIZlJIQUM0ZUpkRTh1dk1yVFhhR3FaREpPclU4MnNhRndqRVhmRHBqemdsVTRnL2RRTTRKNmEwNGp6LzFVTGNqK1RmL05GVGlOV1h5dXY5SFVBdzNBdmVCU01IL0NEdXl6U0hSOU1MZlErQlc4c0VRdEUyRUZnbUZBcUpwZFhmaC9TeTgzV09leWU1TEZpSGdLRXBKM2hsLzdXQmI0RjFybDVPV3dYSVBqS1pCeDF4b1hDMTg5d2R2eC9penVGZFhqcUNQSTFQVkY4Q09LOTZqNGRNZGprQmRLcml0U0hVN25nSjNkLzNmN3ovSjFrOEV6VDN6eFNOQmFwaCtiNnkxVFcwckZxTUtvZGMrMVMxRkgweUxxRENBdkRwdkxnL2JVRXF0ZkZmcDZweHB0bEwrS0NEVHNCMTF4MkpsNG80TDF5dktjbTlVdU1WWU1jdjZaUWNrdTlXT3V1T3NrdXJiKzRjUHBWUG50LzE0WnNiU0NkT0JlVVk1Z08zQVVlNjBTTHZ3K0JTc2FwYXlyZUVKMHBzWmYvM1doT2ZGSHpvN29OK3p6enYvM2w4ak1WcHJzeTh3RWxXWlNxTzZJUk1kdVhrVDQ5SXBXb0txQzYrcTBHdmNRazFIc2Fsa1R3eGRzTjc2dmhIckl2QVAyWVJYWkxpTkw4ckhzWGZMSmxTM01Xd3R6SGN2RGNnMytmbWJtOVQ5djViSDM5YzNEait6TGpsMmZFUzE2VnV2THVvb0pEWDA4UGo5Q3ptY1cvdTVmQjZ1NHRjaHh1eFJ2Unp5eFZ0OGJKb1ZiT3VtUlV0WXhyeHhuRE13MkV6dk54MzUzVG55Tzk2ZEQzc1cvOGwrNXpXYkozc0tWMzgyWEx5eXczS1czUmY0UG92UGsyM01xUmNvdnR5dlh5bjVpTmMrOUduaThEQ3lXc0M5aWtqSE5UZVN6TWZmRk5mN2N3Y0N2RWVmTlpMZThnbGhtRkc0UGliNGp0TkNSRUt1Ym56SlY0MXVtbUQvOEZNV3orRnZ0R0JkM0MwcHZKZDA0Y3pSVFdhKzVoeEVaZEE4eGZGYzVyakl1eGRBK3g0ejdMY3k4LzJDQTZwRGdHSDhFUGxucHJEcXNPenZJY2I4VVpGWHE1bU4xd2Q1U0xqbjQrYlB4c3ZjYXFJTlVSUm8velcyVGE5cFhqZHY5ZjNGa3VOV0t6b3p3cWdxcnhTVVhhbWVRYVhwU3lNWVdXNmw3QllvWkxGbmVIN3Iwd2htNm9DS203TWlHRkdhZkg2ZjI3c0tXYVhwZVVsM1JqMUFvV1ZOR09HRnd4WWQwbEpRTEluL3JxeHRUT21Tc0pkM0I1MWhCbXpwUm9QMlZiSVZoUjltclJMVjloWDNOdG9UVEZqRVRXbkIrbkNrN2xPVTJ2czlTTFhaZUlpa1RxZmFKYWV2d0pGeGJsRHF2ZDN2cjlEZFc3Lys2SkZBUHIvdjA3cjJRNmpRZlRRZTZMeldQUEJqZyt1ZC80UWhId2ROdlVmZEtQc3RteFp0aXFyeTdLeWdhOFl4eXNvYlY5R3F0dGo0Q3RndGJPR3ZpdnJxTTdvTTZ5T3NsdDVaWmgva3NxcWh3ZkFCclU5SkV0cjNLYkZmUkZQNGMyU200UDU3ZlN1cVdWUjdOL1hSUzV1Y0ducHJ4NVR2UUNlLzhVb1JlVHFITWpMRDhZci91YUc1SHNudXg2UkFZOTJlYnhQZUwzVHpSS0pXZTczRHZzOUhZOEN3TzRPcjN2WTYybW5wZWJwYnM4ZG1zOFVzWEVZbm9DY2NnVkVqOFBRVjVDckJLclVMSUlLbHU0NmUyY0J5SU9XNnlaYkNyWmgvVDkxUTc2NlFkVHFjSldiT2lvNlgwSisxRjlkM0lHb08zUWtCMVVoSXJMTnRKVDEvZGYvNnRkOVAvbjkwNitYRmNrcEJ3UG1Pb1RPNkhVK1hHY0lqSHdPeUxSREhxV25FQzB3K3VmSjFKS2dncEV3Y2pVUmp1RWFmZGIweWY5TElsb1VYTUNEd0w4VkxuRllDOFRVN3FWVitpclJyeS94V1MrTkxkMDFSeUJDVVRHdjkyYjVYVjFKWlA1L05UdmdIVWQxUjdmRDI0V2ZEaUNwTTIzbTEzTnhKbUt4OXVrcnJsaEY3ekM2WnJ0OCsxcmZ0ZTI0VmU0aTlIYTBhTlVKK3hYTEIvV2ZaZkVyeXBjdFg3SGlIejlsNU5MbUJKN0FUSEU4ZnZJd2RqdkdkMytDWUFqYVRra2wzL3ozd0JWajh2TW16dkRBVmJhc0FnS0cxT2ZBakltSjJXRVBac0ZNMklaYjVMZHNTTCs3Qk16NXdydk42UnF4U0ZURC8rVzdBaUQvVHZPSVdKcjlrOHQ1NVhoKzFhWDJVNnFubHhNekcyYVFjTHZ6R1hhZnQwb09jRld2RVYyWnFRckJ0RFVPNERMS3ZEOGZKaVV2UCtmdGhBZmtpZ0dRaWxOQWp0QlVZcVg0LzZlRmtzK3VDMFhIenFkS1cwN3lOa0pUem51MisvUkc2REhnZWxhYm0zejliVWQ1WHpxNDJ0alpZOXBTWHhrc2QvN21sc3RtSHZHK082WFVlMklCTXpsU3o4VnhUOFVGa2gyZVF5SiszdGYvRzJKQ2xlSHNielA5MEJiUm5DYXU5QW11YzZaUEdDUlhwSFBEbE5jOVNtWXoxUEtRbjF5ZWJoMmh2TXBRdGZiSXdycHFOTFRHMU5sbDJoeHZzRzNxYVY5TGJhdzUrZGJHYXZRcE4xc0hPeXUyd0pMZjVWSytVT25wSFQyb294djRxTW9kVldnSkg3Qk5nWkhlT3Z0ZmQvc3RLSU5yY25WU3pOeEN1cFBRa0FQMzR5c1RuUU5tdDdWYlphKzNVTnBZZ2o1WkhqQnNrS0swUVF0dHp4ZFhYcHg4ZGNPRHJ0SnZCM1l0WDM5RzZmMVRaWS9iVmZaRS9vaUo3c1VETGx0OXQvS1pEYzE1ci9ka2V1TWI0dUN1VjQ5WkVReWtuMlJZTXRtOVJRTi9sM1dHQUJYa0ZMNklvSGY4bjZkdkFraEdMeWg3YmVndmhjNFVTQ29JY1BuZXFhZVhYdmdnd0FlZHd0MndJNjQ1RFhuSzEyMUhoWUJ5alZLMDZOSzQvNDhhTHZvWFV5MnQ0U3BlL2tWMnovVFlXcXFqM2JBMkdqR3M3V2pibzdIWU9tcldvQ1VTUGJOMnVDVlJzVytFU0RYclJ2eCtjaVNaR3RYNGZiNVJLcVVkOW5udFZCcCs5SXgwWW5FSmJVVWFLV1ZOSGNYVUs4eTFuWlI3aW85RExQeWZQU3lYVENWeDE3NG5xbGw0OW9rYjNhd0lMS2h1UGFMV1BYWE51enU5MnVIRU9hSjQrZWo1dmErTnFGNUR4bVEwS0h0eXhqbmowNnA1QjlhOTRmM2FwNm8vTVZVYXZmMHpXUEpBN2hKOEtZZWM1ZVdUQXZoTTZrVko4c1V6aUlETXZLWFViNUIrSkpXNXQ5SlJtZlFvVGgrdFpuMTRvb3AxdExHdGVHWjdVOU8wbWM1bHlkV2JBellYYmR4MnArcE8vQzh6U1FWR2pPL0IzdGxEN084ODNGazJOcVZXSHBwcFdwbkVrMW4vbXBab1Y2YUpkSkhtTzdPOVFWSlN2MGh0YTdDVTRKdHljYmd0L21sRHJmNFVaOEVQZ0tVZy9DY0kvZ0dESmZXTjdFa2Urd1NiOVR1WE4xa20zQ0JlQzdJNW50NENvREFsbWk0UTFETjhRWGR2QVZnNDIwN3g5ZmZCSXJpby9ycy9LMXhhVjZSczl4czdYemtvU0MzalF5bUJvQW5jMGZNR3BCaGhwclBldHZ4OXJyZFhzem1lNFFLZ3NKOFlQcjBhYWJ1bnFnQXhNUVRRRHYrTlBjd3hqMk95TTZkdS8zZm5tai9HdjExa1BRSUJmTkJjQ3dLVHczVWdTNXdGckFBZFJ4VndSZ1c4cVFJdWgxdEhLbE9rcjlyWXkxOGZhb3dpVzJzZzY3WUdMMWpKWk1KVXdvY3E0VHVWeUIyLzdRS0s3WFFib1BHd0JxTFdRRDdXUUw3WFFINnpZUTBJSTM3bzYrMmdhQUg3MTIzZDM3Yy9QRGRjSzBJQWgvdWJFWEszQ1d3SHAyRXlQT3liSDlyWW1mMEIyUHNoQVBNc1NIWm1jZXY0RnNmdXhmMzl4ZjJ6Vi8vN0Q0c1hrYmdaaHRsOHF3WU9xSUVIMUdDZis4RWZMOU5xTTUrR3pWZjJuMi8rTUVlMG1VZXRaY0JlL1NIb2NrWWNjSjc0QnJ4NmRSZ0FvRDA0QjA3MHFjaG96WUxrV29iNjVhNXY4bWVXSm1vbUFHcHdtUElmUUJnVzVPOFdhakFIdm8xZHYveWk0OGI3YmZ3VFBaM3N4QUd2L2Flb1lRQWd2bDlLRXdEczZSNjQwZnYxd2JIeFM5SCtUOTg5clNyTmJxM25OTDFmSGx3QStFUkRPSUFmaDF6a3dSVkhXZ3VQVG1FZldLLy8zWHRONzBjZXpxWGJSSC8vczZEM2IzK1FzenpzbE5Kazc3ZDlHeGxzVENIcHh6STh1Ky9UNzc4NFF0Vzhzb0gzUStqSkJIQ1I4a3I0UnlBK2Y2dURNejRNY2pZUDk3U2h2OUhDbnA4S2YzaUdVZ3ZiZy9kRHVORHhTYUlBS01ULzIxY1o4S0Q4REwzeHVUaEZjVzJpNHA5VjdoWExXMEJWSDF5SGw0dDdQTDIvbFF1b3V6aFg3NHJ3aHYwYWtiS25wODk3UE5PN0ZIempvaXVXbEZOZXMrUC9zQmJQLzJLbkhkejh1bXZyUFpTeEZiTGl3Vnh5RFVveHBSazNsKy84ek1lUGg1UjFHQWNBN3NyVis0L3BBbUpYMjVWc2k0Z3ZBd3F4V0RUYUVGSnV5RFEyRWNuV1hxbEtvcEtwdWFuUkFEVEFoWk8wN1haYktqa2JsbldwN1IzWWFBTlRQYjRwR1RkenVVT3FkWTFXaWU4bUQzam9jVDA2VXl3UUFVbEEyMFlCb0tKbFhSQUpETWxOa01aN3lTb3RaRVFqUUkvRVVjbFdsZFdPWFZSbUNsZU9ncllXVkkxQkw3bWIrNzJlMGROcnNMMEM0ZFpzM29FS2hheHVOc25CRWJGeE1rU0VSKytaakxaSFloSlZWM214b3lWUmFVVDBxam92cmVnY1ZkUnNYamttYUZGdEVlSmxqZVFGVlFwbVUwNFFjYkNIakF6MWlVSWF3dmxPWGtPNkxSNmtYZW9tWE1valpSTlYzZnFxeDM3SGg3ZlVlZ0RWQzErWnFFd2xxNjYzemN5OTNxNTc0K3F1QXIwdHRCVXFmK0p0akZpcGMwQmEreWw1YThjbTdZek5yS05BK0lRRk8zcGYxZnJWYmUxRFNwaE5XUnRvSGVKTmhmc1hSZWV4cXZzRnFTZlU3NTZFMWl5cnNuQlpXeHBZYUdZbUlSS3ZXUzd6N09nLzdpNGdkbTRKRGFSY21oanJLMU02Ti9SYWNtT0poR2hsOVkwNEhLeGtqWi9jR3ZLQ25BcnRkdXdJZEsxSVJpaFd0c3ZvYjVIWVdWYWhDTDU3aVpaUzlTVXErRFRIODkxdUFJanlsVmVuTmExdFNpR2JIU24yelhsbnA4dXFkN25xbVBtbkN3WG14MjFYOHVQSHh6Z2ZFSXRFeTU5dHQ5K3V2N0xYZGxQb3k1bDY3MWw0TUFKMW81V29LSUYyRis2WFoxVHQ2MkxONWd1eFdXV2xFdE1reFBmZHZOeEZyWWdSMTIxUmwydmFzb0Q4ZWc2M3NGNHRRN2xRZUd4YlBlTE1DVGlxcjF3REwrdlNKZlYyKzZNWGZXOWNFTVBLMEwvODdrRWk4WTJyYjlWRHQrUDlHeUx2NWNCV0oxb3U3Y0tkRXhXZXI4alA0d3ZEU3MrejZCdVBhR0tPTC9DbWxpU2E0YnlpTHVnK21SQlJSZkJBTjdHU1owMkM0WEg4ZXBkV3IvQ0I4Z2JVWlVwZVNzNXhOUURJT1lWQTFFbUllaUtYV0taUkExVkdUQ1R4b21Pb2dPalFEY2ZYK3oxcmxPeWhuVXd0RVBaaVFEU2xTUTBYSE9WNXNpOWU2WjNxNjlCbnRDMis2dlBvUHZDKzQrMFZiVHQ0LzEvOHdYSXhHNDZtRTR3bjBIaTMvWEFRcGlMZ0FGWmcwTGo1S0grMVhCckhRbnBoVFowdiszT2pJcCs2YjBnczZ1b1NFN3FWd2p1M3RlaDlKOUJPWGMvQ3dEeS8vYVVtRnFsRkxNbUg1bFUxUjloUlV3NFNhSTMwcUZIV0FubW1TbHFvK2F0dUc0WHNzUzE1emYxU3N5bDViWjNiNHBGWDg3YXlBY2RtY1orem9laHp6b1hFZGFRU1prb29Mdm1WNExtenV4NnZFd1c3UlZDRXRXdDNkQVVLM2ZGaVoxYWRpNlZPUVhjaDZtekd6ejJoempmTUtRcVRqaWoydTJhcGppVFByYVJHSjc3YU5qVHBjZDZnUEpCV0FQOVh0YXBjV1A5eCtqTDhqZFBQemEvd3FpTnVmREF3NjNiWEtrbHJtc0FlK1FVOEpmeWZBMnZxRitSUDNZbjEzZWhoNSt1NUhyYk1SSVl3OVBMdG9YOHdPWUcxa1hlQzRlYTlaMDJNM2FNYXVuejljbnlhdlhyN0xFUVBIcStxcGhpSkh5MEpnSmdBeXN6b216M1RsbFlCQ2RiSXZST2NVZUxnTlpMdExPcEZwclgwNFdLT2dWNUFsaXc5ZXgyYk0yd2ZuWStuTnZNVi9pdnUvaE96eEZIVmJsSkRXYU5KNlNSbHVWRzlzVnEweHJWRVhUZlVLQnVNcTZnUFFYZFVzMUl5VnRTd0pXeHZoZCtpblhROUlDNUtoeEhMTXQ0Zm5Kb3N1dFlNdHFYQUxCdm5RRlFCbUhPV2RsVnIrRFRQeGxJZ2QyR01xOGxoUDQ4UkRYT3VFUU1aaTg5K1lpY1NrdGdKSUxubUxoNE9oME8wZU1xemRvOWJ5b2Z3bU8zN3VoUHJKSWRjTDcyc0U1eDh6cWlvVllta3hWRkZhNS9ibGFvM0FLZ2gva0VPQW1QdXg1YkROT1FxMWJJS3dVbUpoaVlIQzNDY21aTHZrV0ZWa1E1WmVqbkU5Y0Ivc0NJaTRsVTBrWTZldFJVTmFYdW9RTHl0SjBOb3kyb01DZ3JMaUpDZFFSM0RCT2YreXhVQ2p2TGZRRmJFZWEvVGw3MlN1Tk91cGxUK25CdGFXZ3JseXpOY1JPeHNiWC9URmRKeS8yZ3hQYTNvVTJHcFliQ2hMMnY1SDJheUlOV05RTC96bUt6WXFVQ3NyVjJhc3JlWFJMNy9jbDRhVDY3U01UQXhFZkpMd2hPaE5oWE9KdS9wMHdOL3ZDVk1xQ3p4T2pmTjVlTFJMT0NLSWMrTXIxeGU2ZkF3YkZzVzRMNGMyN20rYXRvQWRBVGJwbC9OM1JKZ2JCMG5mTTI2TGZ1S2tQUnNEU0VBMFZNVGpkRFhZN0o0Zjc4K1lGL1A0K3NoVitoY2xaVEdmeVBUbTkwdVZLUFJjQmh1dEs1Q0tXWWU5cGdhOGN1Q3FSamhjTW81eE5oNFFjWTZKUjNhazVZNDFtNVNSQjRXRkZVdHNpcUFValVTTUJaNjdQY01JZEJNYTJpY0ZKN1U3ajFXc2YxT2F5R2NxekV6QzNpQVdVYTVDaldhYzNpdjA3Q1NKUkltR0ZQYmlkM09yNVdDd0xmMis0SjJMc2JVMlVGaFZTd1RyRnFEekljNENtQk5qSkRXbFZiVGFEUWE0bVlrWHBkc2t5SjNkVFVlVDF4R3RsVElKdUZNT0duaE9sSEtraE5FR2hKejlCbCtqQWxETUNvRFFtcVp6Qld5VVZTSVBIVmM2MlFEWmc5UEhOd0ZaVERFa0lrbG1nUWlZTEJRa0Q0SFk5Vm9yS3RhQW9TTEtBRnBOY1pVU2htd0lPMnNsUldUTmpXbVZsQjhmNFJSdnVGZXh3b3FRMVprQmF2amh1SmkzZ29keWZESkt3THpBRkR2b2hhV2hEUmlKOTJqVG93bjkzNnR1d1RpM0psWWxNdHdPQ3l0MTV2RjFhQmxBbVpBODJvdE9kSUdDeDBXUUpvT3g2LzNZMW5ab2ZmbmxEbG8zYi9IOXIwU0lETG13WU91SmM5ZGFmMnRXUktBTGEzRFY5cEJHTHRtYnZhM3BDNGFKNjBSNlhxYkdhN1IrL2VUL2Q1UXFuK284b2RZOVdDK3B1eVYwMWhpQ0h3Y28yNFVwVkYxSFIwU212MTRJY3FVc05CanBZcmFYb3BCRjVKYWg2Y3FPay9KYUZYbXA4bGswSmFNZ2hDa0ZCdlFEUHpyRnBRdUFPSXNhWTJ2OTJZd3AxMGdORkVwY3JkaDd0YWVNTFJ0VE1reEd5VXhTVlZnRlNtWFphTlBzeHNZK0lacDhKR2t4cE9iQUY5TmQwYVcwUFB3bnJyOEhqQ2JCQ3Q3cGNyZE55K0gyOG02UStwWGo0OCtVTUhLQzJGTmoyUTNlZiszYVJxSHVSRCttYi81U2Vmdzk0TWFNTENmR1ZaWkNTZjZTNCtKZS9QaEIrU21LMUpmT0RVNkUxWlVxNU10NnZXYzl6YU9VOVZsa2d2cTVJemhlWHFMaFkzcDlkTVA3NW8vL2NYaExHZWZIZXphSzg4ekpWMWY4LzU1aTZyNjllUWZaWEQzMWw3NHBPYmplclBaZlJrM2M0ZngvTFV4ZVlndGJNN3V3LzFxb2U5emJZbnArVHlNQjdkVzA5L0JkeXpLYnF0ZUtIa3NHbHlRVUZiS3hkN05OZHhkRWtaQUFCQThpbE1QR3p2UlNnR0JFRHpZTVhublVGelJUSFVTZ05aN1ZVVDZrZUFlMjVwcWY5UVgxZjg0c1dEaUk5UEhFYlU0Wld0TFlMUEVUNlYwUU5tOWVsOWkwTFE5SGU5NFF2Q2x1bklFR2lSY1JtcFBtWlFwRFFubUY2a2hBQVB4dng5LzMzLy85OExILzF0U05LSWZBTUJhK3c4WjVBRjhQRy85czZJbitlNXNEZ0dnWUFBQUVNQy9IOGdqdDZ2ci8wYTlVNzdYWDBCb0tCVkNlbzdnM1lTTnQ2dlZRNldkNG4vd2xlcTlRbFpOWm0xSXp5LzJ5dWNML0FvSVJ5NERwZnVNUTMyd0pNclA2Q0xQVURmaDZ1ZUJsbHJoUmZBYjhJTjVXNWVTVmNhcE8rcmFQaSt4YnpyZlhhem83T2Q4LzdMWTFRNmcvNTZsMHBlWkJBcW8vcjR0NEY4eTMraGlDR2U0bmtBajArWFdVZ2t1L215Y2ZWMnZ4RTBaRHZxN1QrYVV0aE9VelZmOU9KQVZXQW1Bcnk1dndENG56U09mZVkyZHBVdHQyK2FBZlo2cWQwTmxMc2M0KzRrNEpXRnZmOVFUcXZ0R0xlUmpaaE9DOXhaNTFjTDNzSUQ5UTVValpkdXgyd1dxa0twdEZHVUlMWmxITHdyWklUN0ZVSmNpcEJEOGZLRTl1KzgvNGkwWDh0dmJ2T1lFM0JDUGpiSGxIanRtSXRreHZpc2kyb0V1Zkp5MElRWU56RDI2bzgrSzBiRnNsNHZZL3VJSlFIWW9lTjgrV1FRNmR3SlBTMWlKd2srejJGUzJweWU2cmMwdGJUM0I4MUxmaDJTN2hoZlVtckZ5THEwRW9taUliNTMrWUtWZTc1TE1kQXdEa0pzQ2MvMFNDc1RzeFUrWVdtL0tldWZLK1dqY3NGN1paRnpiaFRFajNwbjV5eFV0RDVWV0Rzc3VlQ3RpYy9DMk1kZkk1N3pJOXIyUUh1TlNmTDI4SnlsejVkazdFbklSUDB2dFh3eHZPMkRyTXZhcnhHSkVxNVhYTEwrTEY5Unh3ZWxJZGhOeDBiVEh0Sm9SUFJLVVRpbnlsWklFNEU5WG5hVVRRRGdveEIyTUFwQW5Ta05LNUo3dTRTdkJ0bk8vc21lLzN0MDBBdWJKL01IZlIrazhaRWNGeWdNQUJOQ1FmclEyRkl3RHRUc0IraDhjZzhNQkNJekRvU1lIQUpiQnR3YkUzWHNjNjkyL05PRFVyallsR2tnN0Y5SkFrVTdYSUtCWVc0TUQzcDdkejlITU1yc0NBckFyNzBJK2ZvYWMzVmVROExYNVJJSjJSajNNR3RWcllDVkcwdEE2S05Xd29kcmVPcFZhL25qWFU2eUhXSnhadXliSjZ1NmdVNGQ0dzE3YXpFSk1vVjhyNHdEK3lrcmtvRVo5MUZacTVITHg5aVhvQXc4K0hEQUlNMnBxV1hEd3pvZlhQTndic2cyZlIrOWs2eUtGZ0xzSEprWDhRcGZtalZjZFltRlNnTnhlcjJPWllnb0VEWktCOVgxbXNtUktFbmxySURRTlFQbEFVRFl1bFNmR1dNY3hlSWVmZXFNSTZ2QkMxYXh3NDk1dkliZndCV0h3eFZVdlVJeVdqdFR3VzFUZytjWlREYjE5amFycCtmVlZFZ3A1Zlg3czQwSzhOam5xcmpuMHRZMjFGZE1iN1lvcGlVMXhWV0tWUHlheHlLY2s1bFJOaUcyRWJSdmdVaWtvVGc5MVNYU2diQkpjYlMwd2E2UUJwaVJxbVUxSXBhb2tLaTVXTVpHTmlycEdTdUdVUkNaUXBUV3FoSytLZWFxSXF3bzU4UUthUDVYaDBkRldrYWx4Y0Z2WS9QVzNRcnI2dzlkYzEzYWxKbTI3cml2dDJsd1ZoVjVGSWxwa3Bhb0JFVlo1WVZheEVGWGFCTmEvdHBqZnhkWmV6dXR3K0RjK0lQL0ovNHl5NE56Z3JnYkl3WDBFR2JWQ1phV3dsclNTY2o2Ty9FMCtJQkZoMGQwaSs0NXYzN2RtTlpYSzlUWHdHdjhNZlBiZXRDeDZYTCtBcENsRFcvSGpOaUsrN3ZycTFTczQyMTI4YmJHL012aU1jNUdvNUpjM0ttZGRaMjhvN0VVN1ZyQ0dCUFo0TnRMODkvdGxYRjBiSVltTkl3QkJBUT09KSBmb3JtYXQoXFxcIndvZmYyXFxcIik7dW5pY29kZS1yYW5nZTp1KzAwPz8sdSswMTMxLHUrMDE1Mi0wMTUzLHUrMDJiYi0wMmJjLHUrMDJjNix1KzAyZGEsdSswMmRjLHUrMjAwMC0yMDZmLHUrMjA3NCx1KzIwYWMsdSsyMTIyLHUrMjE5MSx1KzIxOTMsdSsyMjEyLHUrMjIxNSx1K2ZlZmYsdStmZmZkfUBmb250LWZhY2V7Zm9udC1kaXNwbGF5OnN3YXA7Zm9udC1mYW1pbHk6UXVpY2tzYW5kO2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0OjMwMDtzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmYyO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdNZ0FCQUFBQUFESTBBQkFBQUFBQWRYQUFBREhUQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHbHdibkZZY2h6QUdZRDlUVkVGVUhBQ0ZBQkVJQ29HcUlJR0dWZ3VFS0FBQk5nSWtBNGhNQkNBRmhVSUhJQXdIRzJwZ1JRZGkyRGdBYVBBWkZrV3djUUFGbSs4VFJka21uVWoyL3lsQm16R2hkZWhiWlNGMFI3dW83aGtaQ1pHVDZobnBvYlpUV3h5NmNPRGgwRWcvOW8wRlIrSEE4czNKMWIzdHc1OVhvemdjQ053alptdHR3Q1Z4WDRoTG9wRWtUYVJYdDBaSVkySXQ0amY5MlhzQ3ZNUkxVd2oyUW8wSWtoY3hLa1lxNWlRdGNmbmltcnBaMGpxSHRHbmdKYmwvdERxemlpcWRxd0F6b1EwVEx4ODZNenBYNXRJNVQvenY5Njk3NXI0QW9vc1JCREpmQmJta1dnc0l0b3FOYkcyWEo5Q2tlb2JIYmYzekJCbW9HQTFJNWFneEdPMUdUYW9ORUZUTTY3SXVvbjlGWHZ6ZitpdWl3UUVLL1cvYWhtaWJ6K1ZkRWJWVlI0WU4rUGQvamN6Q1RPN0xud1dnSXFGbDVRQWwyMVlCMnA1S0pGbEw2SmY3WmVCemZ1NGNGSjNxK0FPQzhRVjY2em9iV3dZaFd3RC9WNXNtdkVYb3pFbUVUV3Z0S0cyVFBHM2hXY3BRbTluUU92UjhKRklWZ1pCZDJtYkZjK0kxZllYdndOUWtaaXZxeVAwZTkzODZ5MWJhOWQzekJxR0xxd0FYM1hwemJUSDYrdGJYekdna0EydUpmUXllbGZXZUpTdmdDMEpGVUYxYXhOZFRVMkhUcFNqN2xKbC9uZW1xNys5dlNNay82SmFkR3NzcXJnR2VldG5hTlZQTDR6K2Q3cXgvc2d4bkYyVDVlZ0hTVVd5WDdBRERWTUt4b3h6MEJjaHVYeGkyQXNDYXRUUHl2Z09PTlRPYnJPU2NjR3VDUWx6aEViS0IvdnJ0ejFpckg4aHNabmE3OW5Jbmh5MHlSRUxDSnlMZ1dmODYvM0FnVERBQUFMcGpORWczSk5OUVpMaHNaTG95cEZ3MXBrNGRjdGhoNUtpanlBa25FTUlCUXArdUovaWxraGlwdUNQSGVnK0c5bHBGb1EvYSt4T0tjNkhGQXhCMnpycDNvekFYYWlCdXhWTThWbUNrV21WN3R0ODNVcWw2aTZ4d3lhc3dDcFY5K2N6VTVPZmpyTXJIL0IxYmRzU1pLN21TVy9hL3RDbXZLb0pFaWhZalZpS1BQcnltS1ZEa1AvOXJNTU1zY3kydzBGTExyTFBSRG50ZGN4MHpLek0vRTZpQXBDajZML2svYUtBM0EyOE95VnhhQzRPbFQ1YWR1UE1QV2ZaQjB2QmtSdG5jWUFHZGhTdVdibG8yNTFyVDllQ09DS0xnZmJZR2txQko2VlF5YTRLVEdJSFVnNWZocVJTWUVqTUhSeElISStsSjNGVHp0TjBwV2g3RERERlBwdG9wdU40NEovQUlrZzFTZU9wY2k5aFAwUlRRRWlXT3d6eE4wMFpIVStVcFMxR0Y4QllQRUQzQUJMRjFucUxGZkF0U0lkczR0WlFyRUpDejlUS3RaMlRNVVZoYXhIT0xXM2lZU3QwcG9FY1lnb1N4NDdWRHFjeWhrZ2tGUFlIZHZNU3g5VjkrdDc2TkxacURCMm05WVlobXRtdjR6MGw3MWFEWC9oY3pPd1F1eHE2azFsVUM3bm1udEcvUDNTenpLR1EvZndSVUQvY09NUWlESXBUZ2p4dnZiL1Bid0U5c2xBNmlqTElUeGJrR2xwMm1YaGZVMU81QS95SGVhYlJXSXpJZFdqV1oyVzA5OFMzTkpteElVeEQwSlMySVFxaDcvRExPVkZVWTlJLzA3MWRxSkZ5NGdOOVNOeVBzQXFrbEpHWFBhZmVNK3hiRjVxSVljL0lBQnhtbG00QmNCK29QT1J6MTlDTTJvdWgyb0d0RU5OMkFKRnJDVnpPNE5vRDNleFdTRUtHNHNqTUR0T1ZKU2dZTFYzb1NhTFllZTZPckU1OUpXdEk3WHE2Rk1OQjZwQmFEem1TRzd4OVAvbmNvQVFDMFlPNjVBVi84VnFSNXBDN08wS0pSU1RpWE1IZWFqenZxOGZENlRFYXRkU2VFZEN5SnlPUDdIUzBITnNjam40RVVIN0lWdjVCOU5jSHQ2UStReHI1TmdKbEVZcEJibDdpV0ZUZzJTdnN0TkxwazF3ZDBFT0IvSEtPUDUxb0FrS0hiazBjeGdhVVNtRWR6dnZSRVhmWG5VRXF4cUdnZHgvMXBVQm42eVNVYmlMOGJrSWxDcE9DMkhGL1kweDVxcHhUTDZMbWxVUGJGT0pNallRRGVZSkljWUFodEtWcWZyRktJbmdtak9JNWV4K1diU1VBckNHTndoSURpYUtQUVYxMmV6YWRBMDRDSEc4NUxZbWgyZ2lNRW9oZ3VGQ0U3V3QyUm5wWk9QMExBbXpqSk5KTWwxRnFRMndmYlVCSmI4K2dkZmlTR1NXMWdDMXRaMHo3UVZRZGRvVFN5c2pTZWJ6b2xmeW9oU3RnZ0JlZUxDSE9EZk15bzJCT1M4YTEyaGlkcjNZVWhSRFZYVEFJeEU2eHdtczBERWcxTVJGSEFHdEdaSkxFNkN0QlpsNUoyQTd1bFRQMjBNalFYdStGR2NSaGpDb1ZYdG93Wml0aGVBaWdibG5PWklSZ0RDZ1lLZWpqQlFvUTZoUmgyTElhckdXQjd6K1lpdEtBdXFFTUFsOVFESWdIYzlSc1lpVXpBTmdNc1pHTExvVWF4YWtrVnJmRG96SzIxMFpiSzA0WnBpNkNFQlZvc01PQUFVVmdRaXdWMkhNakJEdUtVZ0pPSWd5WGhFTW5zVUNsU2FhU3h3NlRyaU9tTVJWMjRXU0cvQXIxb2I4TE45TUZhZmJGb3FOcmNjQ055NGtpanFJd0JKbE53QkM4bVdWZ2xHK3RNWit2NTVPTVY0RWlGMktDSWJWU3NsRm9aTnBtRnc4MlhXc3dvQzU2S0QrcVVyb0l6S21udTRHQVplSlovRUFCTTRRV1FScEZxaG9WWUNRZlBkcE9oSEdhV3V4NGV1RmlIbnU0MDBwbzFON0NYVk1uZktqUjJZZEZpc2NXcUZxdUJkTnZBYTlkeTh0RVRQKzcxM0x3Y0RQeHZEZDBhdys5bmV5ZmdkL1kzOENFTDVzSmlXQW5yKzMzL3daS2NRbndLanJYaU1BQnBEdUNvYVVpa0dJU2hDQUVGeUVFVjVKZWxGY0hCcDlMbmUvZS9hN2JNRXc4S3BQNlpaVm1WUjhTNW9iQW1WWkpXT001eTBqOEJBQlFZUVRVbVF5YVpHRVQxeDlIRENVa01HMk0ySEVPaHVYNUhqVHVCcFNwQUt3aVhPbXNxQnFEQVh6UVVJd1orZk9CSHZnWmhZaFBHMy9qVnlJdkpPRGRCSUMwaks1c0tuTjc2cVV4c0k1Ump0QXBpdndjbWVBUUs5RllLR3NFU3RDUVFvZzc2RzRaZW1xVEpUQVJXMUQ4eUJWSVFCVk1JaGFadS9WSDdoU09CUkZLUm1qUWtTYmtnUUhvaXJZemhLRlhYN0xJSm9MQzVhYW5pMHhnV0xnUmdUZ2xrck9hMVdNSnduUTlYemxjZm1BRHNoUTRIOUVvZW55NVNvckhyV2c5dHMwcEk3di8zc0Vld0FhenJ1QytHQ1BDZnhya1Q5Q1lBOUM5YkE1QnhTS0szZHgwQVlJL2V5aXFtdEJ1QW8wdGNOdWJyODB3bDQrbTRNUGo5bUthV1AvRkoxdGx0UGRVek80Ry9oTDlXanBUTnNsVnVJeWZJNlhKWHVWaWVFd3F0NGRibWZqOEFDQ0p6U2ZkbjRwTW80M0tza1hXeXNRVnBqRDlTd20wRjlBUEF2d09BTngydXZjYjJDOXVBQzkrRUM4OTR6enFmR2FQN0tPYmhybk03ejIwQkFZQkVRSDhuZ043SzkzWjFldVZ6TlBxbjdUUEhJdk1jZGRWMWk2MnozbjlPbVdXVCtaYWFhWWtMempsdmdXdUloaVJRc0dhMG1vdGdZR1JpWmhFbFdxdzRkZzVPaVpJa1M1Rm1qZit0OVFBSG9rSjZiLzNnYmpMMTFrZGZPYlEzZ0JoNjZtdTlzdjYzVHVkVG9GQ1JZbVZXdVdlMVMvYWI2N0RqampqaHZwc1JjVXVOTFM3YjdIYlV1T3VpMy8wUkRsZmMwQkFldjZtMTFULys5cStGQkF4SGhTZFNDeEF1Uktnd2tWclEwUXNpYTgycXBiWmFPYU9OQkM3eEZLbGlUTk5lQnJlTzJ1bWdrNjU2NmE2SG5vWVlZS0JCUEVhYllLeHhKaG52cklueTVjaVZwOFJVcFd3bVIwMkVqVGJZYVpjZENBMi9FQUJvRFFCc1A5QnlRTDhGTVA4QThKOEROd2NBQURaMkZieUVoT01VTENXcW9waElpRkZHUDYvSlNiYm5uSmdVeFYxRHpMUUFoQ0pJdUViQm8zZ3lhU1VKUlNOZEVMSFNIdElNM0hIR3NTTnhmZXdFbmNmcjZjQ2dNV2w3amFhSjAwZXhRdFFSOWlpRzRDVXc4Z1NpSm5ud1NiMnJzQWlwUkVsbnhDWU1zNmNTeUkrZTJSeDZFcWIrQ3JHRUhtT29OQU9GcEpTeU5sQVRoSFROUG9COUhRT3J4NGo1WGt6T2c0UU9DV21jUGpSeFRDM1U4WVBvdVVVN1g3ek12cmtpV283ZEpzWm5RUUFFN25uMS90NWZaMlJFUW1vMHdlaXV2SmtMbGcrd1JPa3M1eFM4TThXTGxUb0V4S1JKdU41Wmx1YzlWeG1HcDNYb2hTRlpnNjAyaDBQcGZRamdISExkVTlkWUdaR1VqRjh4R1BhZnBDaU5CcTlWNmkwNlQwNFlZcDRvSzE0b2MzZWxyQ2lWRVlEYy9qL3lRU25QT3RhSm56SEJhYWhjQTBDZkFDcThTNzVadEFrMHBUbktOQXV1TVFXUWJGaXZ0blBVeG5NTFFPdTJmRW1OYjFacTU1SU1jNVFadG1wOFZ5bFIrRkJZb3lsWHBYN1ZCREFtZG1JdEhWMkZSd3hxM2Y0ekpveDR0M0taZnBzank4dS9WV2JVZzdaMVI5TWdwYmpKNHRtNFdBRE1RazQ1d0RTa1VSZ3R5RW13Mk1LUlRXREZaZE4vRkdhUmZaSGJhN09MWU8vdVQ0aUhCNHFNY3F0SDdLVnYwYnF3T1pGL3RlWStEUTRvSFVRWWhRNE9WUW9iVFdOMVM3REI4UFhjK3p1eDZPUTN4TzFGZG1FcUEvdnlpSzN0dWFIU1JhVzQwT1kwOFpWQVBUV01Yd0s0WkVPeEJoQzhmVHdhc0doeEtTdDd5UWxCb1Q1MG9yeCtrTnFvbUcrcUlNMTRUeVhWaFNJRDEwdUVJMkNjdUZPcTU0Q2NRdk56eC9wY2Y4R29kTlkvUzN4bWFWK3pKWnN3NzlpbGU5Ri9VOHJoUFZDNG1RbGNNRHJib0RZUzZDTmI0QUt3eHArUkVGVlMxVEk2VU1adzR3WVdRTlBRVzV0TlRuRlBkTmd3MEZNK2RxZ0hnODI2SjhzaVZpM3VuUTRUbHNpOWdiN0c0NW1XTG5kL0R6Ky9SbmE4UkxFZTU5bXFwcjdTaG9xdFZ3U0l2Zm1HZFYydjh5cHFqVTd2NWo2bnJQMTExcGdzaUx4TmplMVdIQjhiTWpwV0o4MWR0UzJwYW53VGd3bk4yMzNXcXc0YkRKU1pHbEJKVFNEbEhlTVlaWFp0TzlmdWxXTS9lMEROM1p6TkZiemYvZHMydVhJTEtneGRrd045V0VUWnU3bHM1cmt3d1JLd3lWdVYyRk0yZWFsZkdWYWgzTFUwcjUxdFdmTTVXRkhDSi9XTVlZVWpoV3krY0VvOGV5V0JNWEV6V0NWTGt5YllqajF2clZKZG5PUlhleHNyZ1VETHFiYWgyb2lEODU3RVNHTGF2dGtUTEpSZm1OV0U4ZWFHMjkwV201SXNYaTVUaDdXd2xPOGMzTFNuM2V1aTdXUjVIOHhEWTEyTENiQ3lFeFYrNng0ZjN0UXdVREdyM2h0bE9mQUc2MzE4eGtyem1zamJxd1l0RVZTVzh2UjlLTGVoWjdvSjNva2E1aldMVm45cFdxY3JtRDJWdkdPYUo4ZW4rS2lPZFVia1BYSlFmVzV4WmI3VzJSZUR0T0pUYTBOYk56d3RSSlBBWjlSdHFTYXgwcUdsTGs5Mmd2MURYNU9VUSsrM1k2dTBVSzNQUHlEUmM4ZUlsbWtTY0VacDB3UzJ3NndjSzMrS3FuSjM0eWVOYWJ2RjUvUnlEUjBqNzhIdzg1SG16R1ZPUzBXSWc5SkFlbGdPNDl3Tmt0STdoQTBXOWt3SnVqOUNFbDJHYUJMNXFrSlhKbWdzc1M2YWdOVnY3b29HaUFneGFsKzNxd1RYZlRpbHJDbWxWbG84WTBMTTJEL0FOaGZ1aVNKck5YVnNCeDBXdFBia1Zrdk5hSGxrd2dBMWNPUXRJeXlFVWcwT0hIbHpkOTFRVzNybDNXMC9zM2R3bmZZSzBnQ09XendQdElDSFZuTlg3ZUJnUm5SY0dRU3JqaXVjMXdud3FXVWwxNnZSWjlWaFhTZU1JUzBrZkpDNzI4a1BrL3IyREVkVFBJOTBHS0FKbXR1UmcwcGpIYUU1Uy9sbXk3SFFDWTNnQnFrYmJrcERpdDdLTVBwOUxrUVFTWi9QNUlxRHdSQ2VQUno3ZDM2ME9nYUZUanNlTjUvRE84bWE0bEN4bDUxV2NwTzhUbnlkdUZsbWZoZnpWbXQ2ZWNoOExlbThuK2dRS0tLaGd3MkVYK3AvRGVzaTlHQVJWZ0s5a1RsT0xUa1FJYXJYTWJKWnRhRUQwNmI1YmRJNGFKK0VUWCtBaVE1SmR0dWNRMVhhRHp2REZxMXNMYUpjM3R4S1EzdFFMZXlVcXlLV1ZRM0YvcTBkRmo4WUQ4azZ5ZGRWRmE1K1ZzK0RTRzZ1Qy9uTjljZW51RU5xbGpKLzRjb3QvbjdmK3BpWWVZVXBvK0ZaT2xGR3hSdlYxV3k0VkVQR0tMSnBYN0FCM3VDdExGMmJtV2FJQmlORjZoQjkyM0cvVDJtdWR0SUUxZno2NlRVdzNBYnJRcmFsd0VGaE8zWkxMWkpHeld6d3p3TGpEcyt6OG9aazg0Z093b0hVQUhBZ0x3OFhoMmFGTXI2NmpzNVNveGt0SllCZVRyUmpYNXpuQmtkbUk5TSsvMWhyY1lqWXRkWnJnYnJWVFI2YzA2bzNtdWFDa05aY2pyZlBzWGxpcGFqTkx3YXVmTDVFVlNLRUFIZ3pvN0VNeFlKVzAvb2lKeHVOdGtvMFdtVS9PNDROZFVXekl1c05rZFpmamRmU1ZvMng4T0RISDZMelRIdXoycHdPVC9PY0JFakoxUlVqUjhiODc1TklFQkJ1bTNCdHQ2ekVvZGIxaE1kb01ockdHcVhVNDJCMG03M2t5THVSb2E1OFJ4bkdpS3htSUh3dGdOU3V2a0FxdXZSMEtOSnd2MzRZZTRZOStwdlczNUUwdHNGRjFndXVqVExVMzVmcFU4RHdsQWZQbkc3SDAzelc4WDBkSm5tdkp6eVk0NXg4bGhENmcySkFURVI1bXgvckV0M21OenEzT2thVXdKdklmR3UrZnE1WGZCT0hqYWZ2UUQ2SW93aGhiOW5RYXhUNkpEZlNiOFZreHJtVlZucXU1clhJNVJxN1JIeU1KUmlOSm5PSHQ4a212YmdnellqZ25UbjRkeWV4Y1N6TzN2UXlEb0o5bFdJanVJc1JLUjhmYkFBWG16dnNsdk11YmJvdlRhbWM3SzJiUlVmMkgweVJqTHRKcWVUdXlBamU4WVFjSkpBMWRjZHR6dVZDZTAvRXJoWU5Jd3UwWU96RXRlYitTbE1LT1VRc0U5dXVadXZ1UVhXYlhwWGxDYnV2SkFSWFB5QW16RkdoSSt1T0dNQkg3RFBPMG9EVXcxTTc4QU4zaEo2RUIrcW8wWVJoSTU4YkJYQ0lVTElteWdoV1ZzYXlzSVNRQjU2aHFCMkhJcFh6T3pPOUVsRnNkeHVCT1gwaVBoU3hOUDllVmh5U1NJcDJFelhrYWJSN2ZmUXhrZWlURDRMMEZZQ0dHaU56TURkSWpYaGhkelhQemVRNnNIVXdEeWdkVXN3eCt1bUtpcTQ5bzVRcnk0RUpQY2h2WDMybUoxRVpQdkxySjZwY2FWdW1DM3BRcVh6ajJldlg0b3BVN3ZOdTJhK09WK2VyeHZJajJVYmw2QTNuUnNreGtXdzlmTkFlalZ3TUlFNVJIRVNvNXhyMXhOS3M3Y2NOOE53MzFNZi85dFJBS05ETEhEN2NMNjVtbWVwYW9oa25QZUxZbmNiK1pHQVZzM1FtZXM1eUJHdjR4YkpSN1J1V2pLSVd3UTZsZkN0RnRIQWUwV0NvbzFEQytTQjZKc2RucEVtUGdCMmdTUTZKVWk4VkZvSUJoVjNraENoZjAyWXhqOUp2ZWcvVEtxVHdnM2VIUE81c1ZrV0RZdkdDU2FCdXFJN25hQTlvTkI4NzJOZ291SVFia0VySGI4OEoyZE5qUzZKcERyVGZWN3JoOFdyeGtyOGNCM1poMTJLbk1tS3FIbzFwT2VuaHRGNDZhekU5TGE4N3VjUnYzSlIyeXlRN21JTmxmZG5Ham5VSmV0L0YxdWplK3FPNlN3NnZZU3A2RFJzaUdnSjVCY3hYVm8zUjVMVitZVjF1dXpodmlYRCthYjFaR05EeDJQeDRucmFtYWNidHFIS29jeXYzMGV6QjI4R3JralhlMCt4QWtCd2FUTXpMZFltRk85Ty9nMkdJZUhBU1ZOclR6NFV4ckk4VHhLampWSnFydDFYcmRJN0RNKzNEZStDUTFmVzUvVjNUWEhkZnhvckV3TVBUYnhyc1JhWXBubEtITXh4WkhzK0pjZk1iN1hHcFBCV21MZnVDUS9mU3pldjJQUmF1Q3o2QWxsL0I0RUNFdnRGbzlCckdFZFpwbklPSStMZ2duNUJicU93U2JqaS8xaHFCYTM0bjlmSjlBRDNVOGlidWFtR0dkM1cxTHVSbE5vaHpuTGt1aVBlRDFqM0NERHA1VFZOR0ErRmhkWG9hWUV5TVQwcVR4MlJud3BzOEl0QjlmSEozeWE1RmVnQ2xmUDByUmxsOWQ3Q1ozMzNqL2hnM0cyTXRhdk0xZkJVTkJyTjFUZUZXRjBvYzdpd0NvUXZLbWVTcGhCUmVIdHl3MHlpdzkwbjZ4cGdDWXlrbW9OS0dobWgwSVZaWThLQmtPMFcxcHFZSWk5TWlUVkc5NEoyamgrY3ZPUzBSc2VRSzVnVUQ4RUFxUDJDYXI5SWpWaHRWM3N3UFZOelRCM3Z3WUNraVdCVTdyNzNONDJCQW42TjFHOWZsOU5YL0Q1QStKM2s5UjZOVVcvTnlicVRyVnN6dzV6Zk9EOE5vMW90WXZYMlNnWU5YMTBEYzVZb1B1SkxVajY2ZFR0Y09sL1BFYllaUGhyaTMrTysvRTkrTjlqYmVhUXJPUTVnSjE3eDBDSjJtRG9ZWW9OQmxUTldOSHV6eGEvRHVmanJ3dnJHMG9nK1lZYkZDYjBUQkQvM283aXR6TjdkelhHb2R6N2ZKMzZ4c0RPa3lPU0E0NE44ckhQdi8rVE1hREZwSm40MzROODVNL21jcStDS29pZ2h5d2Rqa2xWelM5OEhnNlFHQkdWK2tTYWExSzBseVI1VGtEY0ROL1lKVHBSL3pmYnpTa2s1ZXZGN1J1ZEZZS0pxbUloRWlSRWlyMDdGRUJOYXo0RUt6NzgwQk4zcUs5ck9iKzRZbzE4ejc1OG5ja2dTNk8rUGdMSFprK3ZYZXI3SWJ1OEJxdHJiczFmMzNteDUySGV5Wkp4M29pRzgwWHpkYkE1Uy8rRUo3THhFZnMyZFB6NFlnYXNlaHdSUmFMS0xUa1lnUUpYa1BSYkFoMWpxWG1TcmR6dmdtZkUrMlRaL2ZtNGp0eStkaisvZkc4MGlSMjZuLzY1MWorYk9kRWVWM2VaTDc0UVVpc0liUnIzU0pGNVRvbld4amZpSUdlZDN4YWN1WFlJL1hDOVh0aFlBWWtEVVkzdDFFZ1ROT1JrZ0U4UTRVRFNnVVFjT0hFQXVnUEo2Rjl2VVpRSjRuTGRRci8rOVYrR2dhNHZzUXhDRE5YNzU5NXlOWHBNL2ZXeEFucDl3K0M2ak5JbjI1VTVvc3FRR3JHSFhwQk80TmpiY3U2eTVmY3ZKb2RySHducFdhRlhXRFZHRnFYZjNaV3VOejdGOWV2dHJ5akc1aGFUb0hQN1h2eGJXemEyaUZnTmxYcHVLY0h5SzZ0SEw1SmtpeFMrMWp1dW51d2xxRDM3L1cwRjNRVGNkSUxVVzBHTmczRmMya3A2TktpNWxBVG1lbW9Ba0lUNXJaeFh6M2ZkbXArUU5tRzZSRnh4M0c2eWVYaW9wWmtWemZsZFlyVGZUWnp4WTlnbzIrZ1lYbVlJaFMzY2t0NkVFUGV6WTIzWkhoakcwd1B1SHQxenN6N1lzZEdlUHVaWWxlTU1Jc0thMG1iVEZydWxNR3kzc21KZVJDc3BmOFB1elE0SElScWRhSVhMaEU4NjdZZ1lCZG50WGtjMzZiVS9QNHcva3BaVDhVOUYwTTBCMGhvRm5vTmEwdWNXd3hGaTUwczdUMTV3TjB3cVRaZkI3ckxWOHltaGJxYmNPRi9qYWRhdlVmTjJzaFowR1ExcGI0TjQya2RHbjBjVlREOTEvV015Y241ZXFJUlQvMStkRmtiMHZUMWdPSnVWdnJDSWYyMlV1S3BwOTM2U0ZXMHFsc3FGdW1KUFdPVEN6d1U3NFhzS0ErV0J4bnFETlZrQWZBcUkzaldxc2h5bjlITWE5OVN2WkJtR3cvS2NCMWVqUXlvUEZZNXN1L09FUEQ3MFR5V29RL2lmVlIzbDhxVFNBdXZUVVg0RjRTZVkwYU5GelFBaVZRRmczWkQ3Ry8zMEVLTi9wY0VzQUJTakJYWTlkaTc0cmxYcEpjNGRWNDhqYUlCckF5NHd6THdJRFZadSszV2dmc3UwTnBPY1l3dzN2WEhaUWNyUkMzTnRRc0xQR21FTVgxQThzSDMwWVp1Z0JZdWp4Q0x3N2UrNU5EVGRkUThlYkdCK1lnNWFYMEtwcXdJdXBTTHIzeUQ1Sm5GeFR2ZmFucDZPRzArMStkbUYzNklnR3N3OUJCY1A1M25mSFA3Tm4zUVpYcHN4TStLcHhETm4xK0FxV0I0a2RqYmlhWXZ2UHFQN1dRNEsvRGpEVVo3MTMvRGJGN0JHS1NLSjA4WCtMMVRSUnl4K1ZXNzJvT3ZBMTNBUXVyWHUwNDl0M045RktZRTRXM2M2RTk2YTAxeVlkdmk3NytEQlJYdzltUkMvN0xQR0psa0ErN1I3MjIxY0dRZmNXb3k2VUtjcmZ4QXZBZkJ5RDZjTmFjdGVxSENhZStwQ2xtTEd0R0JnbUNTUDdqQkhSMXRkMFg5NHUzNjFiRCtZbDJnWXM5OXRrb0ExdWM4NjRQZkJUaWNhcHFldmhxWEJmZTJiUGxpK1AxSGpNWkZhdTRCR3VWTUdsMjZJYUtEbEo0ejY5WFI5R3h4WEhzNTBXYkxiaThBMThSVGVFcmg1MVdaWlQxaFRURmdweDhXajdTUGlxVDZzazJPS0g4NXI0QzY0VXNES3pxbkJHWGZVVW9hRjg5Nm5VSm5rU3YrbUh2UklpS01CaFVRT256ekd2SDBxOSthc21ZOWFwcVpxd1djOGFHRE9NRU1sZ2VRcUJTaDBVYVFEMjJJN3NlZlRhcmtGZ0xObk9wQTBlSCtxd2Q2Zy9vZFgrVnlXdzBCMWExbS95TFBjNVZRWjl6MVpKTzhMWGI0WW9yYmQxL1dMbWU3VUVCN0JyMTJGY0ZnL1pWbzI2WElzQTlKdGlCS2RhemxveEZQMFFRd09KcFFVb0VqZ3c5M1ZzUTNwdDByQ0tOb2g2bkp5WFZHY093d2ZNYWRjWFErVVJ2SC81MzUrMDBlWTRFZzUvWkwrd2ZVeTFwR0pVa25aT2puYmpFbUhFWWh1d1kwcCt4bTR4Wk0xSzAydzFEV2NjOGJzaW5NdG1pWldOeXVDQlovdG5oSFlqei9nWk9xTHVzZ3dCelFWZHRQRlFYZVlEdkhsUnhjd3RzUjJJMWpSOVNLaWR2T2IycGs3RDAva2lLdU9YeDNwbUR3NUZBSFJibVhWbForYWxTeGUrNEhTdWRpeGZhL1BKWVk2RWVtbzBrdEpyNjhoNTJZY0dLdnNIOUQ3eDlGVjdMOVM3d2RLd0tCdVhtQlc3ZmJNdFowQklSekZsUGNiMW1ZOG50cHNYMllnQXVzMGNNMHF4UkxQV3QxMUt4dmZjanFyZ0M5YXJFM204SjdmZUpSY1FWSkFlczg0cjZ1L21nYlVucWR6L2cwQzJ1Sm9WN2trOS9LV0NWTG93VzVPUlM3bHZaMmovNnFDT2tldytmNTJJMnJ5cWp4NCtxMjUvLzF5VDl0RG8vbXkrU2xabHo5bHI4T2RkanVDSEdsZHJEQm5FR0V3bkpYQlhtZEo3WHErSkt0QlBtUFJlcGV3bVc5NFJPR1ZFWTlLNDgrcjhpRWhBem5UeGdWR2RFOU9LMEVYblNDRmR4dkY4YTRLVEMxTnk4WnEyNzdCTkxpRmNDSE1ENUhlaFl0Y2hEK2haNzhGV0JvQkFOK2toTHlteXlBSUdXY2xhN0xXODFsZ2ljQ1FkdGRpYThNUEFIZGtIeUhxRzNwSXVodWV2TS9iaXhnUHlzWmU0UndyNHM0TGN2SDNXNUJFOGdWLzZ3MStSd2VqTXpDUitKdjgvRzlFVzhReitRd2VJeFpLQ2pBK25YNGM2dG45WWFmVU5mbDhVK2MxV01kd3ZYQThkYTZaM1JSdURzWGFnQVZ2VDBaeDlRNnBrL3FzQ0tTQXo4MXpYdGZ0RmZFRE5Udy9uTWJoNlFXUlpUWTRLbjUvT0ZYZmZTQWovNzZiQkFkaVlvUkZwN2MyTXJ3WEJUWnQ1cEQxc20yR0lWY0Vmd3RwMjBhZGYyaVpVWEkzd0RXbENBVlpJNVZMZjY2bU13R1lBeHpDdmxpR28rN3ZpTDE5WWo0SUt6MDdab3NNUFcvUHFmMC9ySXpwK21QL083Snh4SDBMelRaOHpHdEdzTzNFSVQ1eDZWVHJYVytMOWxnZTlVTUxQNVpiZkN2T1lsR25PaWVCcEVuUlNCeE4rL2VCTmYwamJ0d0VFNkJhb3pWeFY0cVdPTFE3KzZpa2ZkRytCS3d1eEN5SStyMmIrZzJOTXRrWDdSN2NmVkRLV2kvZ0NFa0QxYzFLeThzTFhodmdlT1B2aDRxSlo2RThHcjdOVGJFRlBjMnZEc1cyVzhtbGp0RnA2Y0NaV29zcnlSSEszUTlEdlI4OG0yOU5rVm5YdXJpUUlPaVNzYURwK3YyMU00ZmxVY0x6WWV2QkFDOXIrTVZxTnZvRFJDZ1ZGamN5Z05YSzdDeFlGamIvbG8wN1Z2WlF0bDBtem4vT3R2K2RKMTFkdHJ3SGsxVUE2dGRDd2VzM2swblUyTFN4c3g3Tk1TUFpldHNtYU11a0pIb1BYZENSOUg2b3pveEdtcjJXWXlKWkxPWkZBZGd3Mms5QkN6M1g2OTNPTHlHVHN5M3ErZWVKSnNlOTJ5YUlnNjcxL2Y4ZWduNFBBTXhRSzJYdzBMdmZkSjlCN2MrUWRTVFBTdmxDclo0TGgvMmhxbTd0YmFYRGJ6QWxodWRTRW83QWV1V21xcHp5MVhLVjF5MVZCcnBLUkxxVlM1bFpxZU45cTlCc1RtTlVvUU1XUk5JSUdHSTBYa3lzRVNjZ1ZabzdIaFlyQTBhQWxTb3dvOEZWZnV5K1hGbW9yaE9FRW9uOHU1eHNGNVlJdzVjaW9ub01JRmgyMVhSMHNIaXV1bUR0SmZ3K25uNWhTVkZXTCtWOVJVM0ZZeUlGSnZTR3cycE5VeWlnWDhLdWNEbWphT08zQnZuMDZYc1FoYmZPYVVkUGJudVNEV21qSWtrNTJUWVYxYU5JM2hsa2hXcktFWlBpd0RHcnlQY1BiNy9JeGx6N2FwSGtUaC9ZV3ZmbXNzRjZTNGtoYnZEM3FKa1FVV1hCWG5maUNVVWtpSmpRSmw4TFh0RThxZEk2akZiZEYySjdtdTI3eVhsNDN6OTdDOWcxU04yV3dFbytERGtPYlBlbHBFSFhrZDBtM0ROSWt1alZOS05GOVRJZXpmMXF4cHBkQ0ltaGY4TnduYXJ2NFAvVk9NTS8zd1FjdzY0RElKdTNCbmp4RHdJRFVqTjNuYU1tb2plem02UEREY0Z4K09sOE81UXV3MThHUW00QzhhNWgvUlN6NlBjRlc2Z0JURjJUR1Z4VlFxT25HWklhS0dZeWFkT0JVd1dod3BGTTRZMU1wWUFnSFhxL0J0ZU8rYUtiY0dJVVdnTUtLeU5TUjZOaDl1dWdZczdDQ3FIQ3owd3FncDNZZlliSG5FbEVaaGdXZkpQNTQzZmQrT1M0MUlNcXN6R2pNNkpHbVV2dmc5dEh5RWd2Q0laVEszV0VIQVJDTG1jaWRpUjhUQjNpUUJxejFCcVJxV0ovREFSRThTMUovVTRJeEwwRVdCZ2I2SStRTHg1eGVQeHJkVjVTZnJaK0YyR0Vqc1VaWFZOSGdhRE1kTldrc1FOWi9IQUtjTkdtVTBudkVFQkkrek9tRTFpeHhYUG00bTFiQkpIVCtrVkhrd284cFhFQWthc1p3VFdDMkFGZlJWWXcwL1VZNHRMcTFZcUxTalp5dWFSNmo1d0piNEFtK3lUM0dXVlh1YzNZZ05VODNnYmJsYzhKS3NmVWpRMEw1ajNwVUZjWElHY29BVjBDN3crYjVxUmlKV3hCRXJrbjhadVhleVdBb1dmZW1sQXhkcHZMZHcvcmhxWGJ2YXNFWFk4c0MxaGZ5S2NwQjhiN2xieVAxWEFlNFdzY0x6eFVOYmQzWDIxTlkzUEVGendYdUx0dDVSZjVpS1BTV1FJanNJdnIvVnJZYncvT0M3Q0w4dk0vQlRISFo1NVlhSk1wRE90N1J0YXRwWk9kdzJuMTVEaCt0TGpTOEFmdVhqUFJ6ZXViOVFCelZ2ZHJZSmhRRVVIMm1rdjB5NDk4Qkd3bmZ2aWp0b0ZiVTNTZHEyWC9kMFMzdEx5elNMOTFOejgyT2dCUGdzYXUreWdUK3RPQWc1MUhDZlhkR2Z5bkdxRVJUdmE4QTJxUEw3UGEyTjNMcy9uWmRBSzk5eTZDazI1NjVETFczVXhMSlJZKzJ0OS94dXZyUFowdHBTV2I2dDByZlYwclNQMDlIV3VxNjFkYnkxVFF1aUVyeE1wSmZjcHJkREZUVVBWYk5GTnp0WWFqMWwrZFc4bjVwYlh1UTBxMXVhRDRNbm9GQ2kzOTBudWhqZjl5RFl2eHl5STNTYUYxMFh4MHJsSml3NjNhM2tVNnAxSzJkd2t2eXhXeHlyMWM4VE9rRk9YV0tLcWozYml2SUVYMkhHYmJwQVl1WERqcXBEMXNFK24xWnRuY1JKcm1tZ2NuaVZET3V3dlBXU0N1eXdubjlhWTdVdjAxRE42eERUdDFxbFE5ZTdoVXRiaE1LV3BjSkVCU0ZiOWVVWVhBSkg1bnEwa3ZzaERtMUZyV1czOG83QjI5Qmx6ODU5V3lQUEExK2Jqd2FwK1B4a2h0ZDFJS0l3OWZ6bHlrN1YyazVNbm11VlhzbXR0VU56ckgzeHR0WUg2SnFqT0tLMlErZW12MTc1UHFRMzhUKzltNlM3eWZVOHE4RCtCeGhUUmVIQ3ZqVG5Xa0FNOTFKWTJRa2I1QUdQUXFXSnFBNzZubHcrdy9lOU9ZQmlwaTRkMmt0SWVPUk92MUJGY1crYWdDaEEzZXNsRVhVR2JjSUdBUlRjNG5oVDExQlo2NlhYelRGTEZOeVpJVDVNTFcrcnlCbW9kVzJWckVYRFJNWnFSRC8ycXlNTDcyWGdRcEdFTGZOb3o3MGd2bzdCa0J6eFdwNmVoQVZhY25wZXRYa042eEpHZGdpSnlocEpoN2FDTUlnRE1jcFJUOHFpYUx2TDdHYU5VK1puNHVpbHJnYTNZb00raUtzSEhxajlHdTRuZ3JwRkhvV3J2bEZRUHNQY3B4bGpxT0xzdmRtbWpicmVtc0hyYTkrdVNzR0Qrb1Z1cGJzT2I3RnhaWVU2c3F4UmJkeDBuV094a2traXVzNHZudy9LMFdDSlI1dUk3NVhYVDMxNEJzKzlEVG5CeGJ5Um1ORzV3dzVCZ1dQVUpoblpzbDJXVzNONSszVXJkaVUwTGlxeElDOWZKaHVmTmwrV1RKcXUwTGNTa2t4WDR6RkFlNVJXUkxWY1BqNVRNMU5GUnRQNWJiZmtjL1liTk5VSWlMbnBUQkxUc3JzcGdDTVp4Mm5GYWtNdkp1Y29pandhVU1hS2VMN1FRdWVqNktPMjNKRmxRSXRVdWpZek8vU1l1RTA3ZmJ2SVJORzhNbmNwbzVkM2w1bEswaklqbWR1NDlZOWJYNm8yNllsWmM3UGZIZjkwdk1kbUhsd1pRVHlIRE5YMUdsNWsxajdjUDQvNU1ORXA0MFFKelRNM0dMaXYwSnJmQlI0dUFmZjBxQkJNVzBLVTRWbXEyT01xY0xNZFREZXZhUGlDbWJZNHdZeVZMMWdaTm5WUnNqNEhMcGFBdWVhbnE0TGNDcGxYcFJLaWt5bVU2WWFjNGV1K0VJbysxL041K3M5RndpOTBRUDJOcmdDS0dwVERMREtXTGFSVzZrYlBhbU4zRVptS1JJUVF5ZFVlYkVTMCtYR3FkcWhiZ01TbTR1SDloYjd3QWFxT0lWMkM0S1BVdm1JRUwxQVBmQTM0SzVsbWl4VjM2RzgwS0xzYlVvMUNudXJDeUJSRjdrY0ZTKzlFc1lYL3pRZmY4Qi9iZmRQa3l6c3BNSTRxanBuc1hyckFvNy8xcWRmblMwVE0zQWFTMlVUdlI4ZUxWdUxlanV3TGxIZGJ3blVXWFpGVm1veGhuYUxMampDYk5maVoyUUpKTGdpSzI4cU91a3lseXhaeWV1SlAzQy9wSWJRNlRGMnVoWGdhY0taV0Zidmd6M0d2d2g1Z2FHZHRJQ0haZEFQd1BhQ3pJdWphZTFmTWRPRjkyZDRRd1dIdk9YMkxLREpsajJpNk5qZm9ocXNnaEZ1dUc5aEtyYVhOMG9oVjBFT2tHYUxMTHpPTXZ1aFhFOHZVNWRib2NzWm9ETWxNSVROeStUV2kwSktJTDVEVSswL3BkMGYwUTRtNkNYV3A4TUhRSStWOW5obmN3U0RLTWNvUS9jaHpWNzliS2MrL3Z2ZzUvU0Z3Tzc5MDdQRDV1L2RVeXZldjlEMmpYMFpaZEFlU1JpL3ZmNnE4M1dPekp4aVlXaGpLSDlwNkRtS1VkdHczNWY0U3hxdGJIN29qU2NXSEZyblcrRDdsWW0xTmsrSG1heXJ3ZFBSQ3ZmWW04TXNsanhvZkVjMk11RFgzMncvTU0raWx1dnpyRFp3VGNlbHR1cDl1aHQwR2w0OGQrUW5IVzA1VXNqelhhL25uMmJOczgzVDlFSFpvdThudDQ4c0ZPUHMxNzg5M0NiWGIyc05MV1RHTmpwVTRBTU9UckxoV3k0NVBYcXVWUnF4T1ZRVFdTR05XaHlyOHlCNTQ4b0pXWUFQWlhjRGh6Y0tPOTMrOEIrTzVSOHhLcU41Y21veWtGQ28xcmhZRllLMm9oR2V6UnRRVmpHNnA4am5BT2xVcGorUHFiY1MvbmxJQ05XUTRDN0JFY1AxT2I5L1luYzZ0YTRJM0xuSklWa2I3Tm1IZFdLajJ3cjlaektUaTc1c1hLMU5EZTV4ZFk0b3B6OHJFL1FlbkgvY3NXWFlxRmRtYmNRalgyQWZpdHBCRUdwRzdmUEl1dmZDckt4VmF2OVlRWW1Xa2pnNDNxQUxUZkpkdHpLb1V4bnhFLzNmUk9tL1JqS2k3dXpBbk9hZ2dTRm5YbnBicklIQzJMTmVXb3ZGbDJwWnFyZ24vNUtMa3NqRWlJTU5pL0loRW8vUkZaWmcvYXhZREtTL1lKVXpyVTd0Z2g5dURtN2p0cENGSVdiODkyeDJJMnlxeU1TcmVicjlJcTJQV3NKMk1YcndyTlNJaDNRQTVBMi9aVUlLMDFmYnd2bVlFRjhxR3FwQmlMR1hxWFM4ZXV3WmlMSTdWOXFhUExoajIwVUpQOTJxVkY2VjR2VVFkWXMzOGw5QlZnU25jWU9HN1pWa3RpdHJmZnZ0QjJiN1FKK0tHbW5OZXZKVWpXZXZoaUJDdlVpR05QZHlHZUFYTHQwSjRmcENjMkdrRjk5WFRVa0c0Vi90cXBLWEg5ZW1wQnhWbnYydURYWHBmRThtc21tTldsT01ZMkYrd3lWRE1HU2RDWWVQbVltNlRvZE95Q3puVDVuRElORkhRSWlYNFluVTZvVjNxOVVnd25jeWxPR2FTWm8rWFNhUW1WanV6QmszR2FLUVhSeFp4dWcxSnZzLzB3MkQ0ZjF2eHlVUWVHQlo1dlRJRCs0ZGM4c2Q0VCszUXZsZkFYQithSTcrVXpjN3pGQStMT1p4ZjVLQzhRbTF2Zjh4SUFkQm9VemwxTktQK1JIZEY0ZmlwNWxjYW1uWTNkMVMxdjFiL3RXUElZaThSaEwyazVRNW5hVUdnOFRvYTEyaVRtRm1iVUEwVVRXaDBDVE9tUytwaWdIY2xwRGh4OEdhb3ZTV2pMWFFyMFZJRW9oL3oxS1VUdG4zWGVPZzc5REMrNUNTVTZScmRQZW1UWC8xc2lkdjZENWdWYVZac0pUUG5VenNsVjZ2RlV2WFZFdW5WSElsRWM3VlhacE5MYmJLdk1iQnNiNi9rczMrTG9lWFRWOUlRc2dNTjlsMGIyZ0pablBOcE9NN3V2WjR1V2JZZDU5UlRPVHczSkdYcG52cXFoYlgrRzBES1ZDdGdFbDFVTFJQZjNlcmdrTjlQRjY0RUVIV1pSdDNFMjYyMWZQU0hhait4U0wySGhsendkVDJ6cXZoL3daZHNDRWpObzRvdUlMZDdJY2UxYlJId2ZwVldCWmhqZlppWlRBdEZOVk1MZzZnV01oaHFtV2hLMFIzRXBvS3R4eXVXelMxcTVtcnBPd3E4ZVZ5M0MvRlJlUk1JSEtlWktFSStlWWl1b21sMkNQb01Galg2cThCbHYwY0UzVnVvUWs4SzV5ZU1wZE5ISUlrczN4aExDU1hsZkU4cXYzeCtqdzlRWXBoUzR6TEhOZjN6dHJFbU1KMDRHMDEyVXNQWDUrdHF1a1hiVjJoS2JVa1JUSTZjK0R4RGZsTWh4b3NDSWMvemdKaEhGVXRkanlsdldDa3B1TDQyZFdEZnBPbHVhcWxaMWhOQnROc0xmQkdScVVKbUlTdjlaNEZFZWt2Z2pXdHNiR3I4UWU1Mkk3aTlKZmdSWGdPUXZWN2JKTmF0K090dFkvUXd5a3VOd0g0akMxYjVaVXZacDcrdXEyRmt1cnM0bWdPaGRyVy9kOWpnVFE2N3BnS0RyOGhtL2s3bzlvN3M1MDZ5MkNlZVkzUHVPOEZtbmJ6dmJ0WVBMYTMvVy9yWkZKWjdHZ0lNMzY3WHdQWWpnTXByL0VNZzRYb0RtNUd1bDFnSHM3L0NJU2FiM3p1Z2swNE1hQTBJVkVVdnJtM3VwV0RSOERjS2hsdFFNRnlOZ2lFVEkvZ25lNjJrVGQ2YzJkYms1V0hEcng3WkpJc3FjS1l2U3VKUmxJYWlvQnRGd1Rzb0N2NlVvZ1RBZGNnSkxjZ0p6eUluUElLYzhLR1VvaTkwd2ZTYVJ1d0FvbytvcWJxUjJ1Y1JwZzQvY2ozQlRKajlLZVp4NEdmam1tQVg1VG1XWUNsVE1OeW16d1FseFdtRFI5VisvaU9jSlBaZm1CNkhsK0FHalkwbzR0UnQxdmNIdTRiRmFuMnl6K0FiUmpOYjhvMVNUamRHR3FOT3hYNFNJVFZweUNQWEk4eWhpVDNCQWlZZTN6SVYrS2hrNWlSQ1BtalQrM1NsZXArdUJ2bmc1REdMUWZFWEE4RUE5bmJyblhvQXNYd3hlNyt1SXRBSWZvMzY4VWczUW1CcSt3am9iZlF4K2dSOWlqNURuNk12d0pmZ1Bla3JVdndhcVNLK1ZkN0Q3K0QzekE4ZTJ2aDJJekQ5dGVueFZENkpDNDUxMnh0OGxqNUhmVDlQZnhwK29zNEh0QVZkd1l6S25LcStRc3p4ZXhvM3JHd0xjcmQyVmRRUU4xbVh4MVBjd0MxdTRzUGJ6Qk5FTHYyTGFMRGRVdFAyb2JReEs4YXpIb080VzNpRDNUNDlmV2VVMmVmUjNmNy95TEZZWm1EUVh2YzlLOWxhZ1VVQU1lTGVmeGFzQWpDSGZWZ0FaQjZJZFlzNTBYdTEzYnFMRjliMjRJOVpEMnNEYmkxNC96OGd5MWl4bHRqZ3ZPVUI1TG9BZ0JYWXphbEpnc2FNclIxdFhZZFJSbEdIOVJRZHNFKzZ4bVJnOHlJZW84b3hSdU1RQlNvUHVNT01ZTUxkczR4R0NKK0gyU01pNWFidXMvd0NWWTV0TkEwWG0weTl4R00wSnRBT3ExcGdLMEJkS0FmN0RLR3YwTWZveTlGL1pHbGFsTnZsd25sQ2NoZ3RSTDlsVzZBcjRLTitvU2RnSXhYcElKeUYyN2dPMk8vTkFsaDFWWGVOT3lQZDkvM1NJS0EvVkNrMzlZNEVQWWl1SGVNQkhKcFdrbTNRZUpFTFBFWUwwVzlnZ1pLYTl6R0h6djhiSTdESGUvNFliaGZlMkU5aW9POUpNMzIzYnVic1NrUXZpTXcrbjNRTkpVZTh0T3Ryenk1djJFYTY3QTJ4VlpUczR1OHkxampudTUzTkMza0ViaUUvWmpzaXVsT2oyMFE2OFU2WUVpbXR4a3V1QzN2TDhZWkxvMnNGRWFkUXh1dkc5bEUwZXQ2K2xrKzdNUUhvTjBQWWxzYVhiK3ZhTjN0cjF5NDJkVm1rZlNiVjV4aTNCYlYxdTExTTl3RDBsT3pMWG5ZQ1I5MHQ0d3Qrcml1b0tBMTl5dXdEMnBMQUp3UTdaM3krY0luaThrZzYxOG5VU0FUMk82VksvM1dCSWExaFQyZXc3RW9GU3JhTUlqK1RXRTArOTRyYUhBSndFVDkrWjdwbFhFanEzeERIM1FEZzVJR08rNUw4TDIrSi8raXd6eFBNeGdFaUJnQUkvaXlab0hBbU1QMC9lRTVrOXk2aU5lMWs2dzdXejR1Y3JxVHB4eVozQmVVSnYyUnlwM1hGVFBZZHlMN0pJd1I0Umtqek43YXpYaTJDSU1FMHBUWG9kWmM3SVNqZCtyTDRGSHhHRXkzQVJIVUF4MVYvTFp2aWpsOHdXVjJtMWZTQ2Yrc3djMFcwNk9xYTVtNlNLenl0Um5oUVZhZ002TWNoUmdrSk1YWUU4WWhCOXVtS29vVHBHUnFOa0s0Zng0T1crdSs0Q3JjR1lyZ1RaNXZtRzlUVWp0Zm5pcVlaVVdUNlVnMGVFM2hraVVHNW5CcGdqRjE0RFhibytEUVJiZnBWMTN6TXBsSUpDdWMrVkxKeEdnYXp4RndXSTNaTG5qNjVYNTAweEIwM29aME1MNGFTUDZHdlFYS2J1UE1yVXF2bWFRaDNVR1pyUlVaTmlZbzl0WFRSVTd4R2xkU3lwWTQ1YkFyTFVMTXp0QWI2NWltZElPYVJEWXBJVUY1QnNJbzdLUTYvVXpTd3RJMlNlZFMxazdRb0lYUFNjMEdURjR1eldoeEx4dndOeEY3aDlyMTJMTFlYSWQ5RkQ1c3JPL1MzMmJLZVd6WlBKcVgvQU0zUWgxcHVmU3Q3NmppUXZZRWwxbU0wZU03VE1rd0FBM3Q5U0RtNzZaYVhLTFo1NjV2cE8waXh2ZlF5Q0kyajVCT2hWL2syUGlWM3NSdDRLcUZsL21EdURuVXo2bTdWdjc4UlBiM0kxalBNWFZDcVZZaWYrRVRGSG5XM3JjaE1iNTFlMXV1VnB6TDBsZ0dUSUFVTWFSVUZjS0FEc0lFRTBRSVptS2Z5RFVsRlpZY28yYTYvNDNRRENhWHNrY01HT0syczVLRnpxUHlpN3NqZko5UzhOVm9qajhvWDFNanV5ZkVFUUlDUGNXaW1BV2dqTEJ3a0pxME9KamlkSFp6MmlZM09aenNFa2RuckVObHluU05ZWWw1eWhES1hZZzhqMWJxVENBaHNuQzd5NUt0UUtKdFhsbUl5aFV1OE5MTEJCWml5dVFPVXlEYkpkRVVteURXWnJMOUNlYWFaWWhJSDdVUzB1SlhtZWJUSWlqWkJjckY4MDI4Nkp5ZXY3RXkxeEVRT3FzbVR3N25LdGRBVVplenlUZURsa3kzWEJHVVo0M0xLcGg3UUhLN3hxZUFRZXZ0b2NXUmxFdEpsQTAxUlpNcFJLVFZGWGVycHhWeEZ4YjY4bkY3anNxN0diZFUyMEJ1ZUlWSk93c2ZGcTRUUEJJVVNPTGk0Sk1yUVZ6OTlkWk1oYVBDNFdUc1l5Z0VuWnFzNG1yd1lLZHhldVBsWUtUTEpxRFMvVjRvNGhDbytEdk5RYi9RSSt2SG9yZWZnTVRQTW00WTV1MDc1UDZKSVhoSC9lMS95bndFQSkgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpO3VuaWNvZGUtcmFuZ2U6dSswMD8/LHUrMDEzMSx1KzAxNTItMDE1Myx1KzAyYmItMDJiYyx1KzAyYzYsdSswMmRhLHUrMDJkYyx1KzIwMDAtMjA2Zix1KzIwNzQsdSsyMGFjLHUrMjEyMix1KzIxOTEsdSsyMTkzLHUrMjIxMix1KzIyMTUsdStmZWZmLHUrZmZmZH1ib2R5LGh0bWx7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNH1odG1se2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX0ubW9uc3Rlci1wYXJhZ3JhcGgscHtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42O3RleHQtYWxpZ246anVzdGlmeX0ubW9uc3Rlci1oMSxoMXtmb250LXNpemU6M3JlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS4xNTttYXJnaW46NHJlbSAwIDEuNXJlbX0ubW9uc3Rlci1oMixoMntmb250LXNpemU6Mi41cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjI7bWFyZ2luOjRyZW0gMCAxLjVyZW19Lm1vbnN0ZXItaDMsaDN7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMjU7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfS5tb25zdGVyLWg0LGg0e2ZvbnQtc2l6ZToxLjVyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuMzttYXJnaW46NHJlbSAwIDEuMjVyZW19Lm1vbnN0ZXItaDUsaDV7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDpib2xkZXI7bGluZS1oZWlnaHQ6MS4zO21hcmdpbjo0cmVtIDAgMS4yNXJlbX0ubW9uc3Rlci1oNixoNntmb250LXNpemU6MS4zcmVtO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxLjM7bWFyZ2luOjRyZW0gMCAxLjI1cmVtfXAraDF7bWFyZ2luLXRvcDozLjc1cmVtfXAraDJ7bWFyZ2luLXRvcDozcmVtfXAraDN7bWFyZ2luLXRvcDoyLjI1cmVtfXAraDR7bWFyZ2luLXRvcDoxLjVyZW19cCtoNXttYXJnaW4tdG9wOi43NXJlbX1kaXYraDEsZGl2K2gyLGRpditoMyxkaXYraDQsZGl2K2g1LGRpditoNixwK2g2e21hcmdpbi10b3A6MH0uZGVjb3tiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byByaWdodCx2YXIoLS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTEpIDAsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yKSA1MCUsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zKSAxMDAlKTstd2Via2l0LWJhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtY2xpcDp0ZXh0O2JhY2tncm91bmQtc2l6ZTpjb3Zlcjtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xKTt0ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6dHJhbnNwYXJlbnR9OjotbW96LXNlbGVjdGlvbntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTEpfTo6c2VsZWN0aW9ue2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMSl9a2Jke2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2JvcmRlci1yYWRpdXM6LjI1cmVtO2JvcmRlci1yYWRpdXM6MTByZW07Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTQpO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTo3NSU7Zm9udC13ZWlnaHQ6NzAwO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbSAuNmVtO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lO3doaXRlLXNwYWNlOm5vd3JhcH1kZXRhaWxze21hcmdpbi1ib3R0b206MXJlbX1zdW1tYXJ5e2N1cnNvcjpwb2ludGVyO2ZvbnQtZmVhdHVyZS1zZXR0aW5nczpcXFwidG51bVxcXCI7Zm9udC13ZWlnaHQ6NzAwO2xldHRlci1zcGFjaW5nOi4xZW07cGFkZGluZzouNnJlbSAxcmVtfWRldGFpbHNbb3Blbl17cGFkZGluZzouNnJlbSAxcmVtIC43NXJlbX1kZXRhaWxzW29wZW5dIHN1bW1hcnl7bWFyZ2luLWJvdHRvbTouNXJlbTtwYWRkaW5nOjB9Lm1vbnN0ZXItbm8tdXNlci1zZWxlY3R7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfUBrZXlmcmFtZXMgZGV0YWlscy1zaG93ezAle29wYWNpdHk6MDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtLjVlbSl9fWRldGFpbHNbb3Blbl0+Om5vdChzdW1tYXJ5KXthbmltYXRpb246ZGV0YWlscy1zaG93IC4xNXMgZWFzZS1pbi1vdXR9ZGV0YWlsc1tvcGVuXT46bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9Lm1vbm9zcGFjZXtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5LW1vbm9zcGFjZSl9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xde2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOm5vbmU7d2lkdGg6MTAwJX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0uZmxleHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvd306aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3g7ZGlzcGxheTpibG9ja306YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItZm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsXFxcIlF1aWNrc2FuZFxcXCIsXFxcIlNlZ29lIFVJXFxcIixcXFwiUm9ib3RvXFxcIixcXFwiT3h5Z2VuXFxcIixcXFwiVWJ1bnR1XFxcIixcXFwiQ2FudGFyZWxsXFxcIixcXFwiRmlyYSBTYW5zXFxcIixcXFwiRHJvaWQgU2Fuc1xcXCIsXFxcIkhlbHZldGljYSBOZXVlXFxcIixBcmlhbCxzYW5zLXNlcmlmLFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsXFxcIlNlZ29lIFVJIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIjstLW1vbnN0ZXItZm9udC1mYW1pbHktbW9ub3NwYWNlOlxcXCJDb25zb2xhc1xcXCIsXFxcIkNvdXJpZXIgTmV3XFxcIixcXFwiUm9ib3RvIE1vbm9cXFwiLFxcXCJTb3VyY2UgQ29kZSBQcm9cXFwiLFxcXCJGaXJhIE1vbm9cXFwiLG1vbm9zcGFjZTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWNpbm5hbW9uLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTYpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0yKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMTp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWRlc3RydWN0aXZlLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTYpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMyk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTQpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNik7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMik7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTQpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS01KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0zOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZXJyb3ItNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMzp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktZGlzYWJsZWQtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTE6IzgzM2FiNDstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMjojZmQxZDFkOy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0zOiNmY2IwNDU7LS1tb25zdGVyLWJveC1zaGFkb3ctMTpub25lOy0tbW9uc3Rlci1ib3gtc2hhZG93LTI6LTFweCAxcHggMTBweCAxcHggaHNsYSgwLDAlLDc2JSwuNjEpOy0tbW9uc3Rlci10ZXh0LXNoYWRvdzpub25lOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC02KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtMik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXdpZHRoOjJweDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMyk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLXRoZW1lLW9uLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNSk7LS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci10aGVtZS1vbi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLW9mZi1iZy1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1ib3JkZXItc3R5bGU6c29saWQ7LS1tb25zdGVyLWJvcmRlci13aWR0aDozcHg7LS1tb25zdGVyLWJvcmRlci1yYWRpdXM6MDstLW1vbnN0ZXItcG9wcGVyLXdpdGhhcnJyb3ctZGlzdGFuY2U6LTRweDstLW1vbnN0ZXItei1pbmRleC1kZWZhdWx0OjA7LS1tb25zdGVyLXotaW5kZXgtb3V0bGluZToxMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bjoyMDA7LS1tb25zdGVyLXotaW5kZXgtZHJvcGRvd24tb3ZlcmxheToyMTA7LS1tb25zdGVyLXotaW5kZXgtc3RpY2t5OjMwMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3ktb3ZlcmxheTozMTA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQ6NDAwOy0tbW9uc3Rlci16LWluZGV4LWZpeGVkLW92ZXJsYXk6NDEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wOjUwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1iYWNrZHJvcC1vdmVybGF5OjUxMDstLW1vbnN0ZXItei1pbmRleC1vZmZjYW52YXM6NjAwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhcy1vdmVybGF5OjYxMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbDo3MDA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtb3ZlcmxheTo3MTA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlcjo4MDA7LS1tb25zdGVyLXotaW5kZXgtcG9wb3Zlci1vdmVybGF5OjgxMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwOjgwMDstLW1vbnN0ZXItei1pbmRleC10b29sdGlwLW92ZXJsYXk6OTEwOy0tbW9uc3Rlci1zcGFjZS0wOjA7LS1tb25zdGVyLXNwYWNlLTE6MnB4Oy0tbW9uc3Rlci1zcGFjZS0yOjRweDstLW1vbnN0ZXItc3BhY2UtMzo2cHg7LS1tb25zdGVyLXNwYWNlLTQ6MTBweDstLW1vbnN0ZXItc3BhY2UtNToxNnB4Oy0tbW9uc3Rlci1zcGFjZS02OjI2cHg7LS1tb25zdGVyLXNwYWNlLTc6NDJweDstLW1vbnN0ZXItYnJlYWtwb2ludC0wOjQ4MHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTQ6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNzo3NjhweDstLW1vbnN0ZXItYnJlYWtwb2ludC05Ojk5MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTEyOjEyMDBweDstLW1vbnN0ZXItZHJhZ2dlci13aWR0aDoycHg7LS1tb25zdGVyLWRyYWdnZXItaGFuZGxlLXdpZHRoOjRweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtaGVpZ2h0OjUwcHh9W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXldLmhpZGUtZW1wdHl7ZGlzcGxheTpub25lfVtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5XXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMik7aGVpZ2h0OjEwMCU7bGVmdDowO292ZXJmbG93LXg6aGlkZGVuO3Bvc2l0aW9uOmZpeGVkO3RvcDowO3RyYW5zaXRpb246LjVzO3dpZHRoOjA7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzKX1bZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheV0gW2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXktY2xvc2Vde2N1cnNvcjpwb2ludGVyO2hlaWdodDo0MHB4O2xlZnQ6MTBweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTBweDt3aWR0aDo0MHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5XSBbZGF0YS1tb25zdGVyLXJvbGU9b3ZlcmxheS1jbG9zZV06YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbnRlbnQ6XFxcIlxcXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTAwJTstd2Via2l0LW1hc2staW1hZ2U6dXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIGZpbGw9J2N1cnJlbnRDb2xvcicgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTIuMTQ2IDIuODU0YS41LjUgMCAxIDEgLjcwOC0uNzA4TDggNy4yOTNsNS4xNDYtNS4xNDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDUuMTQ3IDUuMTQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtNS4xNDYgNS4xNDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOHonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J00yLjE0NiAyLjg1NGEuNS41IDAgMSAxIC43MDgtLjcwOEw4IDcuMjkzbDUuMTQ2LTUuMTQ3YS41LjUgMCAwIDEgLjcwOC43MDhMOC43MDcgOGw1LjE0NyA1LjE0NmEuNS41IDAgMCAxLS43MDguNzA4TDggOC43MDdsLTUuMTQ2IDUuMTQ3YS41LjUgMCAwIDEtLjcwOC0uNzA4TDcuMjkzIDh6Jy8lM0UlM0Mvc3ZnJTNFXFxcIik7LXdlYmtpdC1tYXNrLXBvc2l0aW9uOmNlbnRlcjttYXNrLXBvc2l0aW9uOmNlbnRlcjstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXNpemU6Y29udGFpbjttYXNrLXNpemU6Y29udGFpbjt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5LW9wZW5de2N1cnNvcjpwb2ludGVyO2hlaWdodDo0MHB4O2xlZnQ6MTBweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTBweDt3aWR0aDo0MHB4fVtkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5LW9wZW5dOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb250ZW50OlxcXCJcXFwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7LXdlYmtpdC1tYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J00xIDJhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg3YTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAxLTEtMXpNMSA3YTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIN2ExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxaC0yYTEgMSAwIDAgMS0xLTF6TTEgMTJhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg3YTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAxLTEtMXonLyUzRSUzQy9zdmclM0VcXFwiKTttYXNrLWltYWdlOnVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyBmaWxsPSdjdXJyZW50Q29sb3InIHZpZXdCb3g9JzAgMCAxNiAxNiclM0UlM0NwYXRoIGQ9J00xIDJhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg3YTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAxLTEtMXpNMSA3YTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUgyYTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFIN2ExIDEgMCAwIDEtMS0xem01IDBhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxaC0yYTEgMSAwIDAgMS0xLTF6TTEgMTJhMSAxIDAgMCAxIDEtMWgyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDJhMSAxIDAgMCAxLTEtMXptNSAwYTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUg3YTEgMSAwIDAgMS0xLTF6bTUgMGExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAxLTEtMXonLyUzRSUzQy9zdmclM0VcXFwiKTstd2Via2l0LW1hc2stcG9zaXRpb246Y2VudGVyO21hc2stcG9zaXRpb246Y2VudGVyOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJlcGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb250YWluO21hc2stc2l6ZTpjb250YWluO3dpZHRoOjEwMCV9W2RhdGEtbW9uc3Rlci1yb2xlPW92ZXJsYXldLm9wZW57d2lkdGg6MTAwJX0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IFwiLi4vbm90aWZ5L25vdGlmeS5tanNcIjtcbmltcG9ydCB7IE92ZXJsYXlTdHlsZVNoZWV0IH0gZnJvbSBcIi4vc3R5bGVzaGVldC9vdmVybGF5Lm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX1JPTEUgfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7XG5cdGZpbmRUYXJnZXRFbGVtZW50RnJvbUV2ZW50LFxuXHRmaXJlQ3VzdG9tRXZlbnQsXG59IGZyb20gXCIuLi8uLi9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBPdmVybGF5IH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG92ZXJsYXlFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwib3ZlcmxheUVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IG92ZXJsYXlDbG9zZUVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJvdmVybGF5Q2xvc2VyRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgb3ZlcmxheU9wZW5FbGVtZW50U3ltYm9sID0gU3ltYm9sKFwib3ZlcmxheU9wZW5FbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBjbG9zZUV2ZW50SGFuZGxlclN5bWJvbCA9IFN5bWJvbChcImNsb3NlRXZlbnRIYW5kbGVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBvcGVuRXZlbnRIYW5kbGVyU3ltYm9sID0gU3ltYm9sKFwib3BlbkV2ZW50SGFuZGxlclwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX1ZBTFVFX09WRVJMQVlfT1BFTiA9IFwib3ZlcmxheS1vcGVuXCI7XG5cbi8qKlxuICogVGhlIE92ZXJsYXkgY29tcG9uZW50IGlzIHVzZWQgdG8gc2hvdyBhbiBvdmVybGF5IGFuZCBhIGJ1dHRvbiB0byBvcGVuIHRoZSBvdmVybGF5LlxuICpcbiAqIDxpbWcgc3JjPVwiLi9pbWFnZXMvb3ZlcmxheS5wbmdcIj5cbiAqXG4gKiBEZXBlbmRlbmNpZXM6IHRoZSBzeXN0ZW0gdXNlcyBmdW5jdGlvbnMgb2YgdGhlIFttb25zdGVyanNdKGh0dHBzOi8vbW9uc3RlcmpzLm9yZy8pIGxpYnJhcnlcbiAqXG4gKiBZb3UgY2FuIGNyZWF0ZSB0aGlzIGNvbnRyb2wgZWl0aGVyIGJ5IHNwZWNpZnlpbmcgdGhlIEhUTUwgdGFnIDxtb25zdGVyLW92ZXJsYXkgLz5gIGRpcmVjdGx5IGluIHRoZSBIVE1MIG9yIHVzaW5nXG4gKiBKYXZhc2NyaXB0IHZpYSB0aGUgYGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItb3ZlcmxheScpO2AgbWV0aG9kLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxtb25zdGVyLW92ZXJsYXk+PC9tb25zdGVyLW92ZXJsYXk+XG4gKiBgYGBcbiAqXG4gKiBPciB5b3UgY2FuIGNyZWF0ZSB0aGlzIEN1c3RvbUNvbnRyb2wgZGlyZWN0bHkgaW4gSmF2YXNjcmlwdDpcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0ICdAc2NodWthaS9jb21wb25lbnQtc3RhdGUvc291cmNlL292ZXJsYXkubWpzJztcbiAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItb3ZlcmxheScpO1xuICogYGBgXG4gKlxuICogVGhlIEJvZHkgc2hvdWxkIGhhdmUgYSBjbGFzcyBcImhpZGRlblwiIHRvIGVuc3VyZSB0aGF0IHRoZSBzdHlsZXMgYXJlIGFwcGxpZWQgY29ycmVjdGx5LlxuICpcbiAqIGBgYGNzc1xuICogYm9keS5oaWRkZW4ge1xuICogICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICogfVxuICogYGBgXG4gKlxuICogQHN0YXJ0dW1sIG92ZXJsYXkucG5nXG4gKiBza2lucGFyYW0gbW9ub2Nocm9tZSB0cnVlXG4gKiBza2lucGFyYW0gc2hhZG93aW5nIGZhbHNlXG4gKiBIVE1MRWxlbWVudCA8fC0tIEN1c3RvbUVsZW1lbnRcbiAqIEN1c3RvbUVsZW1lbnQgPHwtLSBDdXN0b21Db250cm9sXG4gKiBDdXN0b21Db250cm9sIDx8LS0gT3ZlcmxheVxuICogQGVuZHVtbFxuICpcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIHNpbXBsZSBvdmVybGF5IGNvbXBvbmVudFxuICogQGZpcmVzIG1vbnN0ZXItb3ZlcmxheS1iZWZvcmUtb3BlblxuICogQGZpcmVzIG1vbnN0ZXItb3ZlcmxheS1vcGVuXG4gKiBAZmlyZXMgbW9uc3Rlci1vdmVybGF5LWJlZm9yZS1jbG9zZVxuICogQGZpcmVzIG1vbnN0ZXItb3ZlcmxheS1jbG9zZWRcbiAqL1xuY2xhc3MgT3ZlcmxheSBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9ob3N0L292ZXJsYXlAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRvIHNldCB0aGUgb3B0aW9ucyB2aWEgdGhlIEhUTUwgdGFnLCB0aGUgYXR0cmlidXRlIGBkYXRhLW1vbnN0ZXItb3B0aW9uc2AgbXVzdCBiZSB1c2VkLlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL21vbnN0ZXJqcy5vcmcvZW4vZG9jLyNjb25maWd1cmF0ZS1hLW1vbnN0ZXItY29udHJvbH1cblx0ICpcblx0ICogVGhlIGluZGl2aWR1YWwgY29uZmlndXJhdGlvbiB2YWx1ZXMgY2FuIGJlIGZvdW5kIGluIHRoZSB0YWJsZS5cblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHRlbXBsYXRlcyBUZW1wbGF0ZSBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gdGVtcGxhdGVzLm1haW4gTWFpbiB0ZW1wbGF0ZVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gY29udGFpbmVyIENvbnRhaW5lciBkZWZpbml0aW9uc1xuXHQgKiBAcHJvcGVydHkge2FycmF5fSBjb250YWluZXIgQ29udGFpbmVyIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjb250YWluZXJbXS5uYW1lIE5hbWUgb2YgdGhlIGNvbnRhaW5lclxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY29udGFpbmVyW10uY29udGVudCBDb250ZW50IG9mIHRoZSBjb250YWluZXJcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbnRhaW5lcltdLmNsYXNzIENzcyBjbGFzcyBvZiB0aGUgY29udGFpbmVyXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjbGFzc2VzIENzcyBjbGFzc2VzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzc2VzLmJvZHkgQ3NzIGNsYXNzIHRvIGhpZGUgdGhlIGJvZHkuIFRoaXMgY2xhc3MgaXMgcmVtb3ZlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgcmVhZHkuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzc2VzLm92ZXJsYXkgQ3NzIGNsYXNzIHRvIGhpZGUgdGhlIG92ZXJsYXkuIFRoaXMgY2xhc3MgaXMgcmVtb3ZlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgcmVhZHkuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBmZWF0dXJlcyBGZWF0dXJlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMuZXNjYXBlS2V5IElmIHRydWUgdGhlIG92ZXJsYXkgY2FuIGJlIGNsb3NlZCB3aXRoIHRoZSBlc2NhcGUga2V5XG5cdCAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZmVhdHVyZXMub3BlbkJ1dHRvbiBJZiB0cnVlIHRoZSBvdmVybGF5IGNhbiBiZSBvcGVuZWQgd2l0aCBhIGJ1dHRvblxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0b3ZlcmxheTogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250ZW50XCIsXG5cdFx0XHRcdFx0Y29udGVudDogXCI8c2xvdD48L3Nsb3Q+XCIsXG5cdFx0XHRcdFx0Y2xhc3M6IFwiXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRdLFxuXHRcdFx0Y2xhc3Nlczoge1xuXHRcdFx0XHRib2R5OiBcImhpZGRlblwiLFxuXHRcdFx0XHRvdmVybGF5OiBcImhpZGUtZW1wdHlcIixcblx0XHRcdH0sXG5cdFx0XHRmZWF0dXJlczoge1xuXHRcdFx0XHRlc2NhcGVLZXk6IHRydWUsXG5cdFx0XHRcdG9wZW5CdXR0b246IHRydWUsXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0LyoqXG5cdFx0ICogc2hvdyB0aGUgc2Nyb2xsIGJhciBhbHdheXNcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqL1xuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSBcInNjcm9sbFwiO1xuXG5cdFx0Y29uc3QgY2xhc3NOYW1lcyA9IHRoaXMuZ2V0T3B0aW9uKFwiY2xhc3Nlcy5ib2R5XCIpO1xuXG5cdFx0aWYgKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZXMpKSB7XG5cdFx0XHRkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lk92ZXJsYXl9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lk92ZXJsYXl9XG5cdCAqL1xuXHR0b2dnbGUoKSB7XG5cdFx0aWYgKHRoaXNbb3ZlcmxheUVsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5jb250YWlucyhcIm9wZW5cIikpIHtcblx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5vcGVuKCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge01vbnN0ZXIuQ29tcG9uZW50cy5Ib3N0Lk92ZXJsYXl9XG5cdCAqIEBmaXJlcyBtb25zdGVyLW92ZXJsYXktYmVmb3JlLW9wZW5cblx0ICogQGZpcmVzIG1vbnN0ZXItb3ZlcmxheS1vcGVuXG5cdCAqIEBmaXJlcyBtb25zdGVyLW92ZXJsYXktYmVmb3JlLWNsb3NlXG5cdCAqIEBmaXJlcyBtb25zdGVyLW92ZXJsYXktY2xvc2VkXG5cdCAqL1xuXHRvcGVuKCkge1xuXHRcdGZpcmVDdXN0b21FdmVudCh0aGlzLCBcIm1vbnN0ZXItb3ZlcmxheS1iZWZvcmUtb3BlblwiLCB7fSk7XG5cblx0XHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZS1lbXB0eVwiKTtcblxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpc1tvdmVybGF5RWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcIm9wZW5cIik7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1vdmVybGF5LW9wZW5cIiwge30pO1xuXHRcdFx0fSwgMCk7XG5cdFx0fSwgMCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkNvbXBvbmVudHMuSG9zdC5PdmVybGF5fVxuXHQgKi9cblx0Y2xvc2UoKSB7XG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1vdmVybGF5LWJlZm9yZS1jbG9zZVwiLCB7fSk7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QucmVtb3ZlKFwib3BlblwiKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLW92ZXJsYXktY2xvc2VkXCIsIHt9KTtcblx0XHRcdH0sIDApO1xuXHRcdH0sIDApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1vdmVybGF5XCI7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Q1NTU3R5bGVTaGVldFtdfVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtPdmVybGF5U3R5bGVTaGVldF07XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW292ZXJsYXlFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5nZXRFbGVtZW50QnlJZChcIm92ZXJsYXlcIik7XG5cdHRoaXNbb3ZlcmxheUNsb3NlRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5LWNsb3NlXVwiLFxuXHQpO1xuXHR0aGlzW292ZXJsYXlPcGVuRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1vdmVybGF5LW9wZW5dXCIsXG5cdCk7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaW5pdEV2ZW50SGFuZGxlcigpIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50XG5cdCAqL1xuXHR0aGlzW2Nsb3NlRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdHRoaXMuY2xvc2UoKTtcblx0fTtcblxuXHR0aGlzW292ZXJsYXlDbG9zZUVsZW1lbnRTeW1ib2xdLmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XCJjbGlja1wiLFxuXHRcdHRoaXNbY2xvc2VFdmVudEhhbmRsZXJTeW1ib2xdLFxuXHQpO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuXHQgKi9cblx0dGhpc1tvcGVuRXZlbnRIYW5kbGVyU3ltYm9sXSA9IChldmVudCkgPT4ge1xuXHRcdGNvbnN0IGVsZW1lbnQgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChcblx0XHRcdGV2ZW50LFxuXHRcdFx0QVRUUklCVVRFX1JPTEUsXG5cdFx0XHRBVFRSSUJVVEVfVkFMVUVfT1ZFUkxBWV9PUEVOLFxuXHRcdCk7XG5cdFx0aWYgKGVsZW1lbnQpIHtcblx0XHRcdHRoaXMub3BlbigpO1xuXHRcdH1cblx0fTtcblxuXHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzW29wZW5FdmVudEhhbmRsZXJTeW1ib2xdKTtcblxuXHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5lc2NhcGVLZXlcIikgPT09IHRydWUpIHtcblx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChldmVudCkgPT4ge1xuXHRcdFx0aWYgKGV2ZW50LmtleSA9PT0gXCJFc2NhcGVcIikge1xuXHRcdFx0XHRjb25zdCBpc05vdENvbWJpbmVkS2V5ID0gIShcblx0XHRcdFx0XHRldmVudC5jdHJsS2V5IHx8XG5cdFx0XHRcdFx0ZXZlbnQuYWx0S2V5IHx8XG5cdFx0XHRcdFx0ZXZlbnQuc2hpZnRLZXlcblx0XHRcdFx0KTtcblx0XHRcdFx0aWYgKGlzTm90Q29tYmluZWRLZXkpIHtcblx0XHRcdFx0XHR0aGlzLnRvZ2dsZU92ZXJsYXkoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPHRlbXBsYXRlIGlkPVwiaG9zdC1vdmVybGF5XCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpob3N0LW92ZXJsYXkuY29udGVudFwiXG4gICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwicGFydCBwYXRoOmhvc3Qtb3ZlcmxheS5uYW1lLCBkYXRhLW1vbnN0ZXItcm9sZSBwYXRoOmhvc3QtY29udGFpbmVyLm92ZXJsYXlcIj48L2Rpdj5cbiAgICAgICAgPC90ZW1wbGF0ZT5cblxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwib3ZlcmxheS1vcGVuXCIgcGFydD1cIm9wZW5cIlxuXHRcdFx0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpmZWF0dXJlcy5vcGVuQnV0dG9uIHwgaWY6dmlzaWJsZTpoaWRkZW5cIj48L2Rpdj5cblxuICAgICAgICA8ZGl2IGlkPVwib3ZlcmxheVwiIGRhdGEtbW9uc3Rlci1yb2xlPVwib3ZlcmxheVwiIHBhcnQ9XCJvdmVybGF5XCIgZGF0YS1tb25zdGVyLWluc2VydD1cImhvc3Qtb3ZlcmxheSBwYXRoOm92ZXJsYXlcIlxuICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjbGFzc2VzLm92ZXJsYXlcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJvdmVybGF5LWNsb3NlXCIgcGFydD1cImNsb3NlXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChPdmVybGF5KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBnZXRXaW5kb3cgfSBmcm9tIFwiLi4vLi4vZG9tL3V0aWwubWpzXCI7XG5cbmV4cG9ydCB7IGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5IH07XG5cbi8qKlxuICogR2VuZXJhdGUgYSB1bmlxdWUgY29uZmlndXJhdGlvbiBrZXkgYmFzZWQgb24gdGhlIGN1cnJlbnQgYnJvd3NlciBsb2NhdGlvbixcbiAqIGNvbXBvbmVudCBuYW1lLCBpZCwgYW5kIGEgcHJlZml4LlxuICpcbiAqIEBzaW5jZSAzLjU1LjAgdGhlIGZ1bmN0aW9uIHJlbW92ZSB0aGUgaGFzaCBmcm9tIHRoZSBrZXlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBjb21wb25lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gaWQgLSBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgY29tcG9uZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCAtIEEgcHJlZml4IHRvIHVzZSBpbiB0aGUgdW5pcXVlIGtleS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGdlbmVyYXRlZCB1bmlxdWUgY29uZmlndXJhdGlvbiBrZXkuXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5KGNvbXBvbmVudE5hbWUsIGlkLCBwcmVmaXgpIHtcblx0Ly8gR2V0IHRoZSBicm93c2VyIGxvY2F0aW9uIHdpdGhvdXQgcGFyYW1ldGVyc1xuXHRjb25zdCB1cmxXaXRob3V0UGFyYW1zID0gZ2V0V2luZG93KCkubG9jYXRpb24uaHJlZi5zcGxpdChcIj9cIilbMF07XG5cblx0Ly8gV2l0aG91dCBoYXNoIChzaW5jZSAzLjU1LjApXG5cdGNvbnN0IHVybFdpdGhvdXRQYXJhbXNBbmRIYXNoID0gdXJsV2l0aG91dFBhcmFtcy5zcGxpdChcIiNcIilbMF07XG5cblx0Ly8gQ29tYmluZSB0aGUgcGFydHMgdG8gY3JlYXRlIGEgdW5pcXVlIGtleVxuXHRjb25zdCB1bmlxdWVLZXkgPSBgJHtwcmVmaXh9XyR7dXJsV2l0aG91dFBhcmFtc0FuZEhhc2h9XyR7Y29tcG9uZW50TmFtZX1fJHtpZH1gO1xuXG5cdC8vIFJlcGxhY2UgYW55IHNwZWNpYWwgY2hhcmFjdGVycyBhbmQgc3BhY2VzIHdpdGggdW5kZXJzY29yZXNcblx0cmV0dXJuIHVuaXF1ZUtleS5yZXBsYWNlKC9bXlxcd1xcc10vZ2ksIFwiX1wiKS5yZXBsYWNlKC9cXHMrL2csIFwiX1wiKTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIDIwMjQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICovXG5cbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBEZXRhaWxzU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgRGV0YWlsc1N0eWxlU2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXG50cnkge1xuXHREZXRhaWxzU3R5bGVTaGVldC5pbnNlcnRSdWxlKFxuXHRcdGBcbkBsYXllciBkZXRhaWxzIHsgXG46d2hlcmUoaHRtbCl7bGluZS1oZWlnaHQ6MS4xNTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstbW96LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTt0ZXh0LXNpemUtYWRqdXN0OjEwMCV9OndoZXJlKGgxKXtmb250LXNpemU6MmVtO21hcmdpbi1ibG9jay1lbmQ6LjY3ZW07bWFyZ2luLWJsb2NrLXN0YXJ0Oi42N2VtfTp3aGVyZShkbCxvbCx1bCkgOndoZXJlKGRsLG9sLHVsKXttYXJnaW4tYmxvY2stZW5kOjA7bWFyZ2luLWJsb2NrLXN0YXJ0OjB9OndoZXJlKGhyKXtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2NvbG9yOmluaGVyaXQ7aGVpZ2h0OjB9OndoZXJlKGFiYnJbdGl0bGVdKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9OndoZXJlKGIsc3Ryb25nKXtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKGNvZGUsa2JkLHByZSxzYW1wKXtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19OndoZXJlKHNtYWxsKXtmb250LXNpemU6ODAlfTp3aGVyZSh0YWJsZSl7Ym9yZGVyLWNvbG9yOmN1cnJlbnRDb2xvcjt0ZXh0LWluZGVudDowfTp3aGVyZShidXR0b24saW5wdXQsc2VsZWN0KXttYXJnaW46MH06d2hlcmUoYnV0dG9uKXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259OndoZXJlKHByb2dyZXNzKXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX06d2hlcmUoc2VsZWN0KXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZSh0ZXh0YXJlYSl7bWFyZ2luOjB9OndoZXJlKGlucHV0W3R5cGU9c2VhcmNoIGldKXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi41NH06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2ZvbnQ6aW5oZXJpdH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1cy1pbm5lcntib3JkZXItc3R5bGU6bm9uZTtwYWRkaW5nOjB9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6MXB4IGRvdHRlZCBCdXR0b25UZXh0fTp3aGVyZSg6LW1vei11aS1pbnZhbGlkKXtib3gtc2hhZG93Om5vbmV9OndoZXJlKGRpYWxvZyl7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjpzb2xpZDtjb2xvcjojMDAwO2hlaWdodDotbW96LWZpdC1jb250ZW50O2hlaWdodDpmaXQtY29udGVudDtsZWZ0OjA7bWFyZ2luOmF1dG87cGFkZGluZzoxZW07cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt3aWR0aDotbW96LWZpdC1jb250ZW50O3dpZHRoOmZpdC1jb250ZW50fTp3aGVyZShkaWFsb2c6bm90KFtvcGVuXSkpe2Rpc3BsYXk6bm9uZX06d2hlcmUoc3VtbWFyeSl7ZGlzcGxheTpsaXN0LWl0ZW19aHRtbHtoZWlnaHQ6MTAwJX1ib2R5LGh0bWx7bWluLWhlaWdodDpjYWxjKDEwMHZoIC0gNDBweCl9Ym9keXtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7cGFkZGluZzowO3dvcmQtYnJlYWs6YnJlYWstd29yZH0uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1idXR0b24tcHJpbWFyeSxidXR0b257YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnksLm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeSwubW9uc3Rlci1idXR0b24tb3V0bGluZS1zZWNvbmRhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH1idXR0b246YWN0aXZlLGJ1dHRvbjpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfWJ1dHRvbjphY3RpdmV7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9Lm1vbnN0ZXItYnV0dG9uLWJhciwubW9uc3Rlci1idXR0b24tZ3JvdXB7YWxpZ24tY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6c3RyZXRjaDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2JveC1zaXppbmc6Ym9yZGVyLWJveDtnYXA6MDttYXJnaW46MXJlbSAwfS5tb25zdGVyLWJ1dHRvbi1ncm91cD46bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6Y2FsYyh2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkqLTEpfS5tb25zdGVyLWJ1dHRvbi1ncm91cCA6aG92ZXJ7Ym94LXNoYWRvdzpub25lfWJ1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpe2J1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1mb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxcXFwiUXVpY2tzYW5kXFxcIixcXFwiU2Vnb2UgVUlcXFwiLFxcXCJSb2JvdG9cXFwiLFxcXCJPeHlnZW5cXFwiLFxcXCJVYnVudHVcXFwiLFxcXCJDYW50YXJlbGxcXFwiLFxcXCJGaXJhIFNhbnNcXFwiLFxcXCJEcm9pZCBTYW5zXFxcIixcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLEFyaWFsLHNhbnMtc2VyaWYsXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiOy0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2U6XFxcIkNvbnNvbGFzXFxcIixcXFwiQ291cmllciBOZXdcXFwiLFxcXCJSb2JvdG8gTW9ub1xcXCIsXFxcIlNvdXJjZSBDb2RlIFByb1xcXCIsXFxcIkZpcmEgTW9ub1xcXCIsbW9ub3NwYWNlOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS02KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMTojODMzYWI0Oy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yOiNmZDFkMWQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTM6I2ZjYjA0NTstLW1vbnN0ZXItYm94LXNoYWRvdy0xOm5vbmU7LS1tb25zdGVyLWJveC1zaGFkb3ctMjotMXB4IDFweCAxMHB4IDFweCBoc2xhKDAsMCUsNzYlLC42MSk7LS1tb25zdGVyLXRleHQtc2hhZG93Om5vbmU7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0yKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItYm9yZGVyLXdpZHRoOjNweDstLW1vbnN0ZXItYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZTotNHB4Oy0tbW9uc3Rlci16LWluZGV4LWRlZmF1bHQ6MDstLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lOjEwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duOjIwMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bi1vdmVybGF5OjIxMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3k6MzAwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreS1vdmVybGF5OjMxMDstLW1vbnN0ZXItei1pbmRleC1maXhlZDo0MDA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQtb3ZlcmxheTo0MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3A6NTAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wLW92ZXJsYXk6NTEwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhczo2MDA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzLW92ZXJsYXk6NjEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsOjcwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1vdmVybGF5OjcxMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyOjgwMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyLW92ZXJsYXk6ODEwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXA6ODAwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXAtb3ZlcmxheTo5MTA7LS1tb25zdGVyLXNwYWNlLTA6MDstLW1vbnN0ZXItc3BhY2UtMToycHg7LS1tb25zdGVyLXNwYWNlLTI6NHB4Oy0tbW9uc3Rlci1zcGFjZS0zOjZweDstLW1vbnN0ZXItc3BhY2UtNDoxMHB4Oy0tbW9uc3Rlci1zcGFjZS01OjE2cHg7LS1tb25zdGVyLXNwYWNlLTY6MjZweDstLW1vbnN0ZXItc3BhY2UtNzo0MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTA6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC03Ojc2OHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTk6OTkycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMTI6MTIwMHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoOjJweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGg6NHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQ6NTBweH1zcGFuLm1vbnN0ZXItZngtcmlwcGxle2FuaW1hdGlvbjptb25zdGVyLWZ4LXJpcHBsZSAuNnMgbGluZWFyO2JhY2tncm91bmQtY29sb3I6aHNsYSgwLDAlLDEwMCUsLjcpO2JvcmRlci1yYWRpdXM6NTAlO3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTpzY2FsZSgwKX1Aa2V5ZnJhbWVzIG1vbnN0ZXItZngtcmlwcGxle3Rve29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoNCl9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW59IFxufWAsXG5cdFx0MCxcblx0KTtcbn0gY2F0Y2ggKGUpIHtcblx0YWRkQXR0cmlidXRlVG9rZW4oXG5cdFx0ZG9jdW1lbnQuZ2V0Um9vdE5vZGUoKS5xdWVyeVNlbGVjdG9yKFwiaHRtbFwiKSxcblx0XHRBVFRSSUJVVEVfRVJST1JNRVNTQUdFLFxuXHRcdGUgKyBcIlwiLFxuXHQpO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEFUVFJJQlVURV9QUkVGSVggfSBmcm9tIFwiLi4vLi4vZG9tL2NvbnN0YW50cy5tanNcIjtcblxuLyoqXG4gKiBUaGlzIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbGAgY2FuIGJlIHVzZWQgdG8gcGFzcyBsYWJlbHMuXG4gKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgQVRUUklCVVRFX0JVVFRPTl9MQUJFTCA9IGAke0FUVFJJQlVURV9QUkVGSVh9YnV0dG9uLWxhYmVsYDtcblxuZXhwb3J0IHsgQVRUUklCVVRFX0JVVFRPTl9MQUJFTCB9O1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywgMjAyNC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKi9cblxuaW1wb3J0IHsgYWRkQXR0cmlidXRlVG9rZW4gfSBmcm9tIFwiLi4vLi4vLi4vZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfRVJST1JNRVNTQUdFIH0gZnJvbSBcIi4uLy4uLy4uL2RvbS9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IENvbGxhcHNlU3R5bGVTaGVldCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7Q1NTU3R5bGVTaGVldH1cbiAqL1xuY29uc3QgQ29sbGFwc2VTdHlsZVNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblxudHJ5IHtcblx0Q29sbGFwc2VTdHlsZVNoZWV0Lmluc2VydFJ1bGUoXG5cdFx0YFxuQGxheWVyIGNvbGxhcHNlIHsgXG46d2hlcmUoaHRtbCl7bGluZS1oZWlnaHQ6MS4xNTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstbW96LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTt0ZXh0LXNpemUtYWRqdXN0OjEwMCV9OndoZXJlKGgxKXtmb250LXNpemU6MmVtO21hcmdpbi1ibG9jay1lbmQ6LjY3ZW07bWFyZ2luLWJsb2NrLXN0YXJ0Oi42N2VtfTp3aGVyZShkbCxvbCx1bCkgOndoZXJlKGRsLG9sLHVsKXttYXJnaW4tYmxvY2stZW5kOjA7bWFyZ2luLWJsb2NrLXN0YXJ0OjB9OndoZXJlKGhyKXtib3gtc2l6aW5nOmNvbnRlbnQtYm94O2NvbG9yOmluaGVyaXQ7aGVpZ2h0OjB9OndoZXJlKGFiYnJbdGl0bGVdKXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lOy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSBkb3R0ZWR9OndoZXJlKGIsc3Ryb25nKXtmb250LXdlaWdodDpib2xkZXJ9OndoZXJlKGNvZGUsa2JkLHByZSxzYW1wKXtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19OndoZXJlKHNtYWxsKXtmb250LXNpemU6ODAlfTp3aGVyZSh0YWJsZSl7Ym9yZGVyLWNvbG9yOmN1cnJlbnRDb2xvcjt0ZXh0LWluZGVudDowfTp3aGVyZShidXR0b24saW5wdXQsc2VsZWN0KXttYXJnaW46MH06d2hlcmUoYnV0dG9uKXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZShidXR0b24saW5wdXQ6aXMoW3R5cGU9YnV0dG9uIGldLFt0eXBlPXJlc2V0IGldLFt0eXBlPXN1Ym1pdCBpXSkpey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b259OndoZXJlKHByb2dyZXNzKXt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX06d2hlcmUoc2VsZWN0KXt0ZXh0LXRyYW5zZm9ybTpub25lfTp3aGVyZSh0ZXh0YXJlYSl7bWFyZ2luOjB9OndoZXJlKGlucHV0W3R5cGU9c2VhcmNoIGldKXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b306Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXJ7Y29sb3I6aW5oZXJpdDtvcGFjaXR5Oi41NH06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2ZvbnQ6aW5oZXJpdH06d2hlcmUoYnV0dG9uLGlucHV0OmlzKFt0eXBlPWJ1dHRvbiBpXSxbdHlwZT1jb2xvciBpXSxbdHlwZT1yZXNldCBpXSxbdHlwZT1zdWJtaXQgaV0pKTo6LW1vei1mb2N1cy1pbm5lcntib3JkZXItc3R5bGU6bm9uZTtwYWRkaW5nOjB9OndoZXJlKGJ1dHRvbixpbnB1dDppcyhbdHlwZT1idXR0b24gaV0sW3R5cGU9Y29sb3IgaV0sW3R5cGU9cmVzZXQgaV0sW3R5cGU9c3VibWl0IGldKSk6Oi1tb3otZm9jdXNyaW5ne291dGxpbmU6MXB4IGRvdHRlZCBCdXR0b25UZXh0fTp3aGVyZSg6LW1vei11aS1pbnZhbGlkKXtib3gtc2hhZG93Om5vbmV9OndoZXJlKGRpYWxvZyl7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjpzb2xpZDtjb2xvcjojMDAwO2hlaWdodDotbW96LWZpdC1jb250ZW50O2hlaWdodDpmaXQtY29udGVudDtsZWZ0OjA7bWFyZ2luOmF1dG87cGFkZGluZzoxZW07cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt3aWR0aDotbW96LWZpdC1jb250ZW50O3dpZHRoOmZpdC1jb250ZW50fTp3aGVyZShkaWFsb2c6bm90KFtvcGVuXSkpe2Rpc3BsYXk6bm9uZX06d2hlcmUoc3VtbWFyeSl7ZGlzcGxheTpsaXN0LWl0ZW19aHRtbHtoZWlnaHQ6MTAwJX1ib2R5LGh0bWx7bWluLWhlaWdodDpjYWxjKDEwMHZoIC0gNDBweCl9Ym9keXtib3gtc2l6aW5nOmJvcmRlci1ib3g7bWFyZ2luOjA7cGFkZGluZzowO3dvcmQtYnJlYWs6YnJlYWstd29yZH0uYmxvY2t7ZGlzcGxheTpibG9ja30uaW5saW5le2Rpc3BsYXk6aW5saW5lfS5pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmdyaWR7ZGlzcGxheTpncmlkfS5pbmxpbmUtZ3JpZHtkaXNwbGF5OmlubGluZS1ncmlkfS5mbGV4e2Rpc3BsYXk6ZmxleH0uaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleH0uaGlkZGVuLC5oaWRlLC5ub25le2Rpc3BsYXk6bm9uZX0udmlzaWJsZXt2aXNpYmlsaXR5OnZpc2libGV9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbn0ubW9uc3Rlci1idXR0b24tcHJpbWFyeSxidXR0b257YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tcHJpbWFyeXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTQpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00KX0ubW9uc3Rlci1idXR0b24tc2Vjb25kYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQpO2JvcmRlci1yYWRpdXM6dmFyKC0tbW9uc3Rlci1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6dmFyKC0tbW9uc3Rlci1ib3JkZXItc3R5bGUpO2JvcmRlci13aWR0aDp2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCk7Y29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1zZWNvbmRhcnksLm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0xKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Zm9udC1mYW1pbHk6dmFyKC0tbW9uc3Rlci1mb250LWZhbWlseSk7Zm9udC1zaXplOjFyZW07Zm9udC13ZWlnaHQ6NDAwO2dhcDouNHJlbTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNTtvdXRsaW5lOm5vbmU7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6LjM3NXJlbSAuNzVyZW07cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tb3otdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO3dpZHRoOi1tb3otYXZhaWxhYmxlO3dpZHRoOnN0cmV0Y2h9Lm1vbnN0ZXItYnV0dG9uLXRlcnRpYXJ5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQpfS5tb25zdGVyLWJ1dHRvbi1vdXRsaW5lLXByaW1hcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktNCk7Ym9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtcHJpbWFyeSwubW9uc3Rlci1idXR0b24tb3V0bGluZS1zZWNvbmRhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtcG9zaXRpb246NTAlO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH0ubW9uc3Rlci1idXR0b24tb3V0bGluZS1zZWNvbmRhcnl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMSk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00KTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1tb25zdGVyLWJvcmRlci1yYWRpdXMpO2JvcmRlci1zdHlsZTp2YXIoLS1tb25zdGVyLWJvcmRlci1zdHlsZSk7Ym9yZGVyLXdpZHRoOnZhcigtLW1vbnN0ZXItYm9yZGVyLXdpZHRoKTtjb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXByaW1hcnktMSk7Y29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNCl9Lm1vbnN0ZXItYnV0dG9uLW91dGxpbmUtdGVydGlhcnl7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LTEpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00KTtiYWNrZ3JvdW5kLXBvc2l0aW9uOjUwJTtib3JkZXItY29sb3I6dmFyKC0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00KTtib3JkZXItcmFkaXVzOnZhcigtLW1vbnN0ZXItYm9yZGVyLXJhZGl1cyk7Ym9yZGVyLXN0eWxlOnZhcigtLW1vbnN0ZXItYm9yZGVyLXN0eWxlKTtib3JkZXItd2lkdGg6dmFyKC0tbW9uc3Rlci1ib3JkZXItd2lkdGgpO2JveC1zaGFkb3c6dmFyKC0tbW9uc3Rlci1ib3gtc2hhZG93LTEpO2NvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKTtjb2xvcjp2YXIoLS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTQpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtmb250LWZhbWlseTp2YXIoLS1tb25zdGVyLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7Z2FwOi40cmVtO2p1c3RpZnktY29udGVudDpjZW50ZXI7bGluZS1oZWlnaHQ6MS41O291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzouMzc1cmVtIC43NXJlbTtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LWRlY29yYXRpb246bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7dmVydGljYWwtYWxpZ246bWlkZGxlO3dpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7d2lkdGg6LW1vei1hdmFpbGFibGU7d2lkdGg6c3RyZXRjaH1idXR0b246YWN0aXZlLGJ1dHRvbjpob3Zlcntib3gtc2hhZG93OnZhcigtLW1vbnN0ZXItYm94LXNoYWRvdy0yKTt0cmFuc2l0aW9uOmJhY2tncm91bmQgLjhzLGNvbG9yIC4yNXMgLjA4MzMzMzMzMzNzfWJ1dHRvbjphY3RpdmV7ei1pbmRleDp2YXIoLS1tb25zdGVyLXotaW5kZXgtb3V0bGluZSl9Lm1vbnN0ZXItYnV0dG9uLWJhciwubW9uc3Rlci1idXR0b24tZ3JvdXB7YWxpZ24tY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6c3RyZXRjaDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDpub3dyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lm1vbnN0ZXItYnV0dG9uLWdyb3Vwe2JveC1zaXppbmc6Ym9yZGVyLWJveDtnYXA6MDttYXJnaW46MXJlbSAwfS5tb25zdGVyLWJ1dHRvbi1ncm91cD46bm90KDpsYXN0LWNoaWxkKXttYXJnaW4tcmlnaHQ6Y2FsYyh2YXIoLS1tb25zdGVyLWJvcmRlci13aWR0aCkqLTEpfS5tb25zdGVyLWJ1dHRvbi1ncm91cCA6aG92ZXJ7Ym94LXNoYWRvdzpub25lfWJ1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNCk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6bGlnaHQpe2J1dHRvbjpmb2N1c3tvdXRsaW5lOjFweCBkYXNoZWQgdmFyKC0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMyk7b3V0bGluZS1vZmZzZXQ6MnB4O3otaW5kZXg6dmFyKC0tbW9uc3Rlci16LWluZGV4LW91dGxpbmUpfX1bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17Ym94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTt3aWR0aDoxMDAlfVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXS5mbGV4e2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fTpob3N0e2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmJsb2NrfTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1mb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxcXFwiUXVpY2tzYW5kXFxcIixcXFwiU2Vnb2UgVUlcXFwiLFxcXCJSb2JvdG9cXFwiLFxcXCJPeHlnZW5cXFwiLFxcXCJVYnVudHVcXFwiLFxcXCJDYW50YXJlbGxcXFwiLFxcXCJGaXJhIFNhbnNcXFwiLFxcXCJEcm9pZCBTYW5zXFxcIixcXFwiSGVsdmV0aWNhIE5ldWVcXFwiLEFyaWFsLHNhbnMtc2VyaWYsXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIixcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiOy0tbW9uc3Rlci1mb250LWZhbWlseS1tb25vc3BhY2U6XFxcIkNvbnNvbGFzXFxcIixcXFwiQ291cmllciBOZXdcXFwiLFxcXCJSb2JvdG8gTW9ub1xcXCIsXFxcIlNvdXJjZSBDb2RlIFByb1xcXCIsXFxcIkZpcmEgTW9ub1xcXCIsbW9ub3NwYWNlOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1jaW5uYW1vbi0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItY2lubmFtb24tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXByaW1hcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNCl9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0zKTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNil9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLXNlY29uZGFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1zZWNvbmRhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC02KTstLW1vbnN0ZXItY29sb3Itc2Vjb25kYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc2Vjb25kYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXNlY29uZGFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWNvbmRhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTE6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0yOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMzp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTEpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS0xOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItY29sb3ItdGVydGlhcnktMjp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtNik7LS1tb25zdGVyLWNvbG9yLXRlcnRpYXJ5LTM6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTQpOy0tbW9uc3Rlci1jb2xvci10ZXJ0aWFyeS00OnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS00KTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWJnLWNvbG9yLXRlcnRpYXJ5LTI6dmFyKC0tbW9uc3Rlci1jb2xvci1tYWdlbnRhLTIpOy0tbW9uc3Rlci1iZy1jb2xvci10ZXJ0aWFyeS0zOnZhcigtLW1vbnN0ZXItY29sb3ItbWFnZW50YS0xKTstLW1vbnN0ZXItYmctY29sb3ItdGVydGlhcnktNDp2YXIoLS1tb25zdGVyLWNvbG9yLW1hZ2VudGEtMSl9fTphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTYpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0yKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC01KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTMpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpOy0tbW9uc3Rlci1jb2xvci1kZXN0cnVjdGl2ZS00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0xOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpOy0tbW9uc3Rlci1iZy1jb2xvci1kZXN0cnVjdGl2ZS0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtMzp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC0xKTstLW1vbnN0ZXItYmctY29sb3ItZGVzdHJ1Y3RpdmUtNDp2YXIoLS1tb25zdGVyLWNvbG9yLXJlZC00KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi00KTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNik7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0zKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMik7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1jb2xvci1zdWNjZXNzLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0yKTstLW1vbnN0ZXItY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tNCk7LS1tb25zdGVyLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zdWNjZXNzLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItYmctY29sb3Itc3VjY2Vzcy0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JlZW4tMSk7LS1tb25zdGVyLWJnLWNvbG9yLXN1Y2Nlc3MtNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyZWVuLTMpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS02KTstLW1vbnN0ZXItY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTEpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMyk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctMzp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0yKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy00OnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctMTp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItY29sb3Itd2FybmluZy0yOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTMpOy0tbW9uc3Rlci1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtNCk7LS1tb25zdGVyLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0xKTstLW1vbnN0ZXItYmctY29sb3Itd2FybmluZy0xOnZhcigtLW1vbnN0ZXItY29sb3Itb3JhbmdlLTUpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci13YXJuaW5nLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1vcmFuZ2UtMSk7LS1tb25zdGVyLWJnLWNvbG9yLXdhcm5pbmctNDp2YXIoLS1tb25zdGVyLWNvbG9yLW9yYW5nZS0zKX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNik7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTIpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTUpfUBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6ZGFyayl7OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMyk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNCk7LS1tb25zdGVyLWNvbG9yLWVycm9yLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtMSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1yZWQtNSk7LS1tb25zdGVyLWJnLWNvbG9yLWVycm9yLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci0zOnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTEpOy0tbW9uc3Rlci1iZy1jb2xvci1lcnJvci00OnZhcigtLW1vbnN0ZXItY29sb3ItcmVkLTQpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0yKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTI6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0zOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tMTp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLWNvbG9yLXNlbGVjdGlvbi0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KTstLW1vbnN0ZXItY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1jb2xvci1zZWxlY3Rpb24tNDp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi0xOnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1zZWxlY3Rpb24tMjp2YXIoLS1tb25zdGVyLWNvbG9yLXllbGxvdy0xKTstLW1vbnN0ZXItYmctY29sb3Itc2VsZWN0aW9uLTM6dmFyKC0tbW9uc3Rlci1jb2xvci15ZWxsb3ctMik7LS1tb25zdGVyLWJnLWNvbG9yLXNlbGVjdGlvbi00OnZhcigtLW1vbnN0ZXItY29sb3IteWVsbG93LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0xOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0yKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC0zOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItYmctY29sb3ItcHJpbWFyeS1kaXNhYmxlZC00OnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS02KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTQpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTE6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTI6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTMpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTM6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTIpOy0tbW9uc3Rlci1iZy1jb2xvci1wcmltYXJ5LWRpc2FibGVkLTQ6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTEpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMTojODMzYWI0Oy0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0yOiNmZDFkMWQ7LS1tb25zdGVyLWNvbG9yLWdyYWRpZW50LTM6I2ZjYjA0NTstLW1vbnN0ZXItYm94LXNoYWRvdy0xOm5vbmU7LS1tb25zdGVyLWJveC1zaGFkb3ctMjotMXB4IDFweCAxMHB4IDFweCBoc2xhKDAsMCUsNzYlLC42MSk7LS1tb25zdGVyLXRleHQtc2hhZG93Om5vbmU7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0xKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLXNlYXNoZWxsLTYpOy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWhvdmVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3Itc2Vhc2hlbGwtNik7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1zZWFzaGVsbC0yKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItd2lkdGg6MnB4Oy0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ib3JkZXItcmFkaXVzOjA7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItcHJpbWFyeS0xKX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1jb250cm9sLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtYm9yZGVyLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0zKTstLW1vbnN0ZXItdGhlbWUtY29udHJvbC1ob3Zlci1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktMSk7LS1tb25zdGVyLXRoZW1lLWNvbnRyb2wtaG92ZXItYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmF5LTYpfX06YWZ0ZXIsOmJlZm9yZSw6cm9vdHstLW1vbnN0ZXItdGhlbWUtb24tY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi0xKTstLW1vbnN0ZXItdGhlbWUtb24tYmctY29sb3I6dmFyKC0tbW9uc3Rlci1jb2xvci1ncmVlbi01KTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS00KX1AbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOmRhcmspezphZnRlciw6YmVmb3JlLDpyb290ey0tbW9uc3Rlci10aGVtZS1vbi1jb2xvcjp2YXIoLS1tb25zdGVyLWNvbG9yLWdyYXktNik7LS1tb25zdGVyLXRoZW1lLW9uLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS0xKTstLW1vbnN0ZXItdGhlbWUtb2ZmLWJnLWNvbG9yOnZhcigtLW1vbnN0ZXItY29sb3ItZ3JheS01KX19OmFmdGVyLDpiZWZvcmUsOnJvb3R7LS1tb25zdGVyLWJvcmRlci1zdHlsZTpzb2xpZDstLW1vbnN0ZXItYm9yZGVyLXdpZHRoOjNweDstLW1vbnN0ZXItYm9yZGVyLXJhZGl1czowOy0tbW9uc3Rlci1wb3BwZXItd2l0aGFycnJvdy1kaXN0YW5jZTotNHB4Oy0tbW9uc3Rlci16LWluZGV4LWRlZmF1bHQ6MDstLW1vbnN0ZXItei1pbmRleC1vdXRsaW5lOjEwOy0tbW9uc3Rlci16LWluZGV4LWRyb3Bkb3duOjIwMDstLW1vbnN0ZXItei1pbmRleC1kcm9wZG93bi1vdmVybGF5OjIxMDstLW1vbnN0ZXItei1pbmRleC1zdGlja3k6MzAwOy0tbW9uc3Rlci16LWluZGV4LXN0aWNreS1vdmVybGF5OjMxMDstLW1vbnN0ZXItei1pbmRleC1maXhlZDo0MDA7LS1tb25zdGVyLXotaW5kZXgtZml4ZWQtb3ZlcmxheTo0MTA7LS1tb25zdGVyLXotaW5kZXgtbW9kYWwtYmFja2Ryb3A6NTAwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsLWJhY2tkcm9wLW92ZXJsYXk6NTEwOy0tbW9uc3Rlci16LWluZGV4LW9mZmNhbnZhczo2MDA7LS1tb25zdGVyLXotaW5kZXgtb2ZmY2FudmFzLW92ZXJsYXk6NjEwOy0tbW9uc3Rlci16LWluZGV4LW1vZGFsOjcwMDstLW1vbnN0ZXItei1pbmRleC1tb2RhbC1vdmVybGF5OjcxMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyOjgwMDstLW1vbnN0ZXItei1pbmRleC1wb3BvdmVyLW92ZXJsYXk6ODEwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXA6ODAwOy0tbW9uc3Rlci16LWluZGV4LXRvb2x0aXAtb3ZlcmxheTo5MTA7LS1tb25zdGVyLXNwYWNlLTA6MDstLW1vbnN0ZXItc3BhY2UtMToycHg7LS1tb25zdGVyLXNwYWNlLTI6NHB4Oy0tbW9uc3Rlci1zcGFjZS0zOjZweDstLW1vbnN0ZXItc3BhY2UtNDoxMHB4Oy0tbW9uc3Rlci1zcGFjZS01OjE2cHg7LS1tb25zdGVyLXNwYWNlLTY6MjZweDstLW1vbnN0ZXItc3BhY2UtNzo0MnB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTA6NDgwcHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtNDo0ODBweDstLW1vbnN0ZXItYnJlYWtwb2ludC03Ojc2OHB4Oy0tbW9uc3Rlci1icmVha3BvaW50LTk6OTkycHg7LS1tb25zdGVyLWJyZWFrcG9pbnQtMTI6MTIwMHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLXdpZHRoOjJweDstLW1vbnN0ZXItZHJhZ2dlci1oYW5kbGUtd2lkdGg6NHB4Oy0tbW9uc3Rlci1kcmFnZ2VyLWhhbmRsZS1oZWlnaHQ6NTBweH1zcGFuLm1vbnN0ZXItZngtcmlwcGxle2FuaW1hdGlvbjptb25zdGVyLWZ4LXJpcHBsZSAuNnMgbGluZWFyO2JhY2tncm91bmQtY29sb3I6aHNsYSgwLDAlLDEwMCUsLjcpO2JvcmRlci1yYWRpdXM6NTAlO3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTpzY2FsZSgwKX1Aa2V5ZnJhbWVzIG1vbnN0ZXItZngtcmlwcGxle3Rve29wYWNpdHk6MDt0cmFuc2Zvcm06c2NhbGUoNCl9fVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXXtmb250LXNpemU6MXJlbTtmb250LXdlaWdodDo0MDA7bGluZS1oZWlnaHQ6MS42fS5vdmVyZmxvdy1oaWRkZW5bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF17b3ZlcmZsb3c6aGlkZGVufVtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBidXR0b257Ym9yZGVyLWxlZnQ6MDtib3JkZXItcmlnaHQ6MDtib3JkZXItdG9wOjB9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5idXR0b246aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1tb25zdGVyLWJveC1zaGFkb3ctMik7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kIC44cyxjb2xvciAuMjVzIC4wODMzMzMzMzMzc31bZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWRldGFpbF17Ym94LXNpemluZzpib3JkZXItYm94O2ZvbnQtc2l6ZToxcmVtO2ZvbnQtd2VpZ2h0OjQwMDtoZWlnaHQ6MDtsaW5lLWhlaWdodDoxLjY7dHJhbnNpdGlvbjpoZWlnaHQgLjRzIGVhc2UtaW4tb3V0O3dpZHRoOjEwMCV9OmlzKFtkYXRhLW1vbnN0ZXItcm9sZT1jb250cm9sXSBbZGF0YS1tb25zdGVyLXJvbGU9ZGV0YWlsXSkgLnBhZGRpbmd7cGFkZGluZzoxcmVtfTppcyhbZGF0YS1tb25zdGVyLXJvbGU9Y29udHJvbF0gW2RhdGEtbW9uc3Rlci1yb2xlPWRldGFpbF0pIC5kZWNvLWxpbmV7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsdmFyKC0tbW9uc3Rlci1jb2xvci1ncmFkaWVudC0xKSAwLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMikgNTAlLHZhcigtLW1vbnN0ZXItY29sb3ItZ3JhZGllbnQtMykgMTAwJSk7Ym9yZGVyOjA7aGVpZ2h0OjJweDttYXJnaW46MDtwYWRkaW5nOjB9QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTpkYXJrKXs6aXMoW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1kZXRhaWxdKSAuZGVjby1saW5le2JhY2tncm91bmQ6dmFyKC0tbW9uc3Rlci1jb2xvci1wcmltYXJ5LTEpfX06aXMoW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIFtkYXRhLW1vbnN0ZXItcm9sZT1kZXRhaWxdKSAuZGVjby1saW5le3RyYW5zaXRpb246YmFja2dyb3VuZCAuNHMgZWFzZS1pbi1vdXR9W2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdIC5hY3RpdmVbZGF0YS1tb25zdGVyLXJvbGU9ZGV0YWlsXXtoZWlnaHQ6dmFyKC0tbW9uc3Rlci1oZWlnaHQpO3RyYW5zaXRpb246aGVpZ2h0IC40cyBlYXNlLWluLW91dH0gXG59YCxcblx0XHQwLFxuXHQpO1xufSBjYXRjaCAoZSkge1xuXHRhZGRBdHRyaWJ1dGVUb2tlbihcblx0XHRkb2N1bWVudC5nZXRSb290Tm9kZSgpLnF1ZXJ5U2VsZWN0b3IoXCJodG1sXCIpLFxuXHRcdEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsXG5cdFx0ZSArIFwiXCIsXG5cdCk7XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdEN1c3RvbUVsZW1lbnQsXG5cdGdldFNsb3R0ZWRFbGVtZW50cyxcblx0cmVnaXN0ZXJDdXN0b21FbGVtZW50LFxufSBmcm9tIFwiLi4vLi4vZG9tL2N1c3RvbWVsZW1lbnQubWpzXCI7XG5pbXBvcnQgeyBDb2xsYXBzZVN0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2NvbGxhcHNlLm1qc1wiO1xuaW1wb3J0IHsgZmlyZUN1c3RvbUV2ZW50IH0gZnJvbSBcIi4uLy4uL2RvbS9ldmVudHMubWpzXCI7XG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gXCIuLi8uLi9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7IGFkZEF0dHJpYnV0ZVRva2VuIH0gZnJvbSBcIi4uLy4uL2RvbS9hdHRyaWJ1dGVzLm1qc1wiO1xuaW1wb3J0IHsgQVRUUklCVVRFX0VSUk9STUVTU0FHRSB9IGZyb20gXCIuLi8uLi9kb20vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgSG9zdCB9IGZyb20gXCIuLi9ob3N0L2hvc3QubWpzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleSB9IGZyb20gXCIuLi9ob3N0L3V0aWwubWpzXCI7XG5pbXBvcnQgeyBEZWFkTWFuc1N3aXRjaCB9IGZyb20gXCIuLi8uLi91dGlsL2RlYWRtYW5zc3dpdGNoLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBDb2xsYXBzZSwgbmFtZVN5bWJvbCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCB0aW1lckNhbGxiYWNrU3ltYm9sID0gU3ltYm9sKFwidGltZXJDYWxsYmFja1wiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgZGV0YWlsc0VsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJkZXRhaWxzRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgY29udHJvbEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJjb250cm9sRWxlbWVudFwiKTtcblxuLyoqXG4gKiBsb2NhbCBzeW1ib2xcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCByZXNpemVPYnNlcnZlclN5bWJvbCA9IFN5bWJvbChcInJlc2l6ZU9ic2VydmVyXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBkZXRhaWxzU2xvdEVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJkZXRhaWxzU2xvdEVsZW1lbnRcIik7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRldGFpbHNDb250YWluZXJFbGVtZW50U3ltYm9sID0gU3ltYm9sKFwiZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRcIik7XG4vKipcblxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGRldGFpbHNEZWNvRWxlbWVudFN5bWJvbCA9IFN5bWJvbChcImRldGFpbHNEZWNvRWxlbWVudFwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbmFtZVN5bWJvbCA9IFN5bWJvbChcIm5hbWVcIik7XG5cbi8qKlxuICogQSBDb2xsYXBzZSBjb21wb25lbnRcbiAqXG4gKiBAZnJhZ21lbnRzIC9mcmFnbWVudHMvY29tcG9uZW50cy9sYXlvdXQvY29sbGFwc2UvXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbGF5b3V0L2NvbGxhcHNlLXNpbXBsZVxuICpcbiAqIEBzaW5jZSAzLjc0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSAgQSBzaW1wbGUgY29sbGFwc2UgY29tcG9uZW50LlxuICovXG5jbGFzcyBDb2xsYXBzZSBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29tcG9uZW50cy9sYXlvdXQvY29sbGFwc2VAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdC8vIHRoZSBuYW1lIGlzIG9ubHkgdXNlZCBmb3IgdGhlIGhvc3QgY29uZmlnIGFuZCB0aGUgZXZlbnQgbmFtZVxuXHRcdHRoaXNbbmFtZVN5bWJvbF0gPSBcImNvbGxhcHNlXCI7XG5cdH1cblxuXHQvKipcblx0ICogVG8gc2V0IHRoZSBvcHRpb25zIHZpYSB0aGUgSFRNTCB0YWcsIHRoZSBhdHRyaWJ1dGUgYGRhdGEtbW9uc3Rlci1vcHRpb25zYCBtdXN0IGJlIHVzZWQuXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vbW9uc3RlcmpzLm9yZy9lbi9kb2MvI2NvbmZpZ3VyYXRlLWEtbW9uc3Rlci1jb250cm9sfVxuXHQgKlxuXHQgKiBUaGUgaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgZm91bmQgaW4gdGhlIHRhYmxlLlxuXHQgKlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gdGVtcGxhdGVzIFRlbXBsYXRlIGRlZmluaXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0ZW1wbGF0ZXMubWFpbiBNYWluIHRlbXBsYXRlXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjbGFzc2VzIENTUyBjbGFzc2VzXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjbGFzc2VzLmNvbnRhaW5lciBDU1MgY2xhc3MgZm9yIHRoZSBjb250YWluZXJcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZlYXR1cmVzIEZlYXR1cmUgY29uZmlndXJhdGlvblxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLmFjY29yZGlvbiBFbmFibGUgYWNjb3JkaW9uIG1vZGVcblx0ICogQHByb3BlcnR5IHtib29sZWFufSBmZWF0dXJlcy5wZXJzaXN0U3RhdGUgRW5hYmxlIHBlcnNpc3Qgc3RhdGUgKEhvc3QgYW5kIENvbmZpZy1NYW5hZ2VyIHJlcXVpcmVkKVxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IGZlYXR1cmVzLnVzZVNjcm9sbFZhbHVlcyBVc2Ugc2Nyb2xsIHZhbHVlcyAoc2Nyb2xsSGVpZ2h0KSBpbnN0ZWFkIG9mIGNsaWVudEhlaWdodCBmb3IgdGhlIGhlaWdodCBjYWxjdWxhdGlvblxuXHQgKiBAcHJvcGVydHkge2Jvb2xlYW59IG9wZW5CeURlZmF1bHQgT3BlbiB0aGUgZGV0YWlscyBieSBkZWZhdWx0XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHR0ZW1wbGF0ZXM6IHtcblx0XHRcdFx0bWFpbjogZ2V0VGVtcGxhdGUoKSxcblx0XHRcdH0sXG5cdFx0XHRjbGFzc2VzOiB7XG5cdFx0XHRcdGNvbnRhaW5lcjogXCJwYWRkaW5nXCIsXG5cdFx0XHR9LFxuXHRcdFx0ZmVhdHVyZXM6IHtcblx0XHRcdFx0YWNjb3JkaW9uOiB0cnVlLFxuXHRcdFx0XHRwZXJzaXN0U3RhdGU6IHRydWUsXG5cdFx0XHRcdHVzZVNjcm9sbFZhbHVlczogZmFsc2UsXG5cdFx0XHR9LFxuXHRcdFx0b3BlbkJ5RGVmYXVsdDogZmFsc2UsXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdFthc3NlbWJsZU1ldGhvZFN5bWJvbF0oKSB7XG5cdFx0c3VwZXJbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdFN0YXRlRnJvbUhvc3RDb25maWcuY2FsbCh0aGlzKTtcblx0XHRpbml0UmVzaXplT2JzZXJ2ZXIuY2FsbCh0aGlzKTtcblx0XHRpbml0RXZlbnRIYW5kbGVyLmNhbGwodGhpcyk7XG5cblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJvcGVuQnlEZWZhdWx0XCIpKSB7XG5cdFx0XHR0aGlzLm9wZW4oKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7dm9pZH1cblx0ICovXG5cdGNvbm5lY3RlZENhbGxiYWNrKCkge1xuXHRcdHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG5cdFx0dXBkYXRlUmVzaXplT2JzZXJ2ZXJPYnNlcnZhdGlvbi5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0NvbGxhcHNlfVxuXHQgKi9cblx0dG9nZ2xlKCkge1xuXHRcdGlmICh0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpIHtcblx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5vcGVuKCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRpc0Nsb3NlZCgpIHtcblx0XHRyZXR1cm4gIXRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5jb250YWlucyhcImFjdGl2ZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0aXNPcGVuKCkge1xuXHRcdHJldHVybiAhdGhpcy5pc0Nsb3NlZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE9wZW4gdGhlIGNvbGxhcHNlXG5cdCAqIEByZXR1cm4ge0NvbGxhcHNlfVxuXHQgKiBAZmlyZXMgbW9uc3Rlci1jb2xsYXBzZS1iZWZvcmUtb3BlbiBUaGlzIGV2ZW50IGlzIGZpcmVkIGJlZm9yZSB0aGUgY29sbGFwc2UgaXMgb3BlbmVkLlxuXHQgKiBAZmlyZXMgbW9uc3Rlci1jb2xsYXBzZS1vcGVuIFRoaXMgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgdGhlIGNvbGxhcHNlIGlzIG9wZW5lZC5cblx0ICovXG5cdG9wZW4oKSB7XG5cdFx0bGV0IG5vZGU7XG5cdFx0aWYgKHRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdLmNsYXNzTGlzdC5jb250YWlucyhcImFjdGl2ZVwiKSkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1cIiArIHRoaXNbbmFtZVN5bWJvbF0gKyBcIi1iZWZvcmUtb3BlblwiLCB7fSk7XG5cblx0XHRhZGp1c3RIZWlnaHQuY2FsbCh0aGlzKTtcblx0XHR0aGlzW2RldGFpbHNFbGVtZW50U3ltYm9sXS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuXG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMuYWNjb3JkaW9uXCIpID09PSB0cnVlKSB7XG5cdFx0XHRub2RlID0gdGhpcztcblx0XHRcdHdoaWxlIChub2RlLm5leHRFbGVtZW50U2libGluZyBpbnN0YW5jZW9mIENvbGxhcHNlKSB7XG5cdFx0XHRcdG5vZGUgPSBub2RlLm5leHRFbGVtZW50U2libGluZztcblx0XHRcdFx0bm9kZS5jbG9zZSgpO1xuXHRcdFx0fVxuXG5cdFx0XHRub2RlID0gdGhpcztcblx0XHRcdHdoaWxlIChub2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgaW5zdGFuY2VvZiBDb2xsYXBzZSkge1xuXHRcdFx0XHRub2RlID0gbm9kZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuXHRcdFx0XHRub2RlLmNsb3NlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dXBkYXRlU3RhdGVDb25maWcuY2FsbCh0aGlzKTtcblx0XHRcdFx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1cIiArIHRoaXNbbmFtZVN5bWJvbF0gKyBcIi1vcGVuXCIsIHt9KTtcblx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcIm92ZXJmbG93LWhpZGRlblwiKTtcblx0XHRcdFx0fSwgNTAwKTtcblx0XHRcdH0sIDApO1xuXHRcdH0sIDApO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQ2xvc2UgdGhlIGNvbGxhcHNlXG5cdCAqIEByZXR1cm4ge0NvbGxhcHNlfVxuXHQgKiBAZmlyZXMgbW9uc3Rlci1jb2xsYXBzZS1iZWZvcmUtY2xvc2UgVGhpcyBldmVudCBpcyBmaXJlZCBiZWZvcmUgdGhlIGNvbGxhcHNlIGlzIGNsb3NlZC5cblx0ICogQGZpcmVzIG1vbnN0ZXItY29sbGFwc2UtY2xvc2VkIFRoaXMgZXZlbnQgaXMgZmlyZWQgYWZ0ZXIgdGhlIGNvbGxhcHNlIGlzIGNsb3NlZC5cblx0ICovXG5cdGNsb3NlKCkge1xuXHRcdGlmICghdGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLVwiICsgdGhpc1tuYW1lU3ltYm9sXSArIFwiLWJlZm9yZS1jbG9zZVwiLCB7fSk7XG5cdFx0dGhpc1tjb250cm9sRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LmFkZChcIm92ZXJmbG93LWhpZGRlblwiKTtcblxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0dGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR1cGRhdGVTdGF0ZUNvbmZpZy5jYWxsKHRoaXMpO1xuXHRcdFx0XHRmaXJlQ3VzdG9tRXZlbnQodGhpcywgXCJtb25zdGVyLVwiICsgdGhpc1tuYW1lU3ltYm9sXSArIFwiLWNsb3NlZFwiLCB7fSk7XG5cdFx0XHR9LCAwKTtcblx0XHR9LCAwKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHN0YXRpYyBnZXRUYWcoKSB7XG5cdFx0cmV0dXJuIFwibW9uc3Rlci1jb2xsYXBzZVwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0FycmF5PENTU1N0eWxlU2hlZXQ+fVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0cmV0dXJuIFtDb2xsYXBzZVN0eWxlU2hlZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBlbGVtZW50IGlzIGluc2VydGVkIGludG8gYSBkb2N1bWVudCwgaW5jbHVkaW5nIGludG8gYSBzaGFkb3cgdHJlZS5cblx0ICogQHJldHVybiB7Q29sbGFwc2V9XG5cdCAqIEBmaXJlcyBtb25zdGVyLWNvbGxhcHNlLWFkanVzdC1oZWlnaHQgVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSBoZWlnaHQgaXMgYWRqdXN0ZWQuIEFzIGEgZGV0YWlsLCB0aGUgaGVpZ2h0IGlzIHBhc3NlZC5cblx0ICovXG5cdGFkanVzdEhlaWdodCgpIHtcblx0XHRhZGp1c3RIZWlnaHQuY2FsbCh0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHt2b2lkfVxuICovXG5mdW5jdGlvbiBhZGp1c3RIZWlnaHQoKSB7XG5cdGxldCBoZWlnaHQgPSAwO1xuXG5cdGlmICh0aGlzW2RldGFpbHNDb250YWluZXJFbGVtZW50U3ltYm9sXSkge1xuXHRcdGlmICh0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnVzZVNjcm9sbFZhbHVlc1wiKSkge1xuXHRcdFx0aGVpZ2h0ICs9IHRoaXNbZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRTeW1ib2xdLnNjcm9sbEhlaWdodDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aGVpZ2h0ICs9IHRoaXNbZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRTeW1ib2xdLmNsaWVudEhlaWdodDtcblx0XHR9XG5cdH1cblxuXHRpZiAodGhpc1tkZXRhaWxzRGVjb0VsZW1lbnRTeW1ib2xdKSB7XG5cdFx0aWYgKHRoaXMuZ2V0T3B0aW9uKFwiZmVhdHVyZXMudXNlU2Nyb2xsVmFsdWVzXCIpKSB7XG5cdFx0XHRoZWlnaHQgKz0gdGhpc1tkZXRhaWxzRGVjb0VsZW1lbnRTeW1ib2xdLnNjcm9sbEhlaWdodDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aGVpZ2h0ICs9IHRoaXNbZGV0YWlsc0RlY29FbGVtZW50U3ltYm9sXS5jbGllbnRIZWlnaHQgKyAxO1xuXHRcdH1cblx0fVxuXG5cdGlmIChoZWlnaHQgPT09IDApIHtcblx0XHRpZiAodGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy51c2VTY3JvbGxWYWx1ZXNcIikpIHtcblx0XHRcdGhlaWdodCA9IHRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdLnNjcm9sbEhlaWdodDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aGVpZ2h0ID0gdGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uY2xpZW50SGVpZ2h0O1xuXHRcdH1cblxuXHRcdGlmIChoZWlnaHQgPT09IDApIHtcblx0XHRcdGhlaWdodCA9IFwiYXV0b1wiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRoZWlnaHQgKz0gXCJweFwiO1xuXHR9XG5cblx0dGhpc1tkZXRhaWxzRWxlbWVudFN5bWJvbF0uc3R5bGUuc2V0UHJvcGVydHkoXG5cdFx0XCItLW1vbnN0ZXItaGVpZ2h0XCIsXG5cdFx0aGVpZ2h0LFxuXHRcdFwiaW1wb3J0YW50XCIsXG5cdCk7XG5cblx0ZmlyZUN1c3RvbUV2ZW50KHRoaXMsIFwibW9uc3Rlci1cIiArIHRoaXNbbmFtZVN5bWJvbF0gKyBcIi1hZGp1c3QtaGVpZ2h0XCIsIHtcblx0XHRoZWlnaHQsXG5cdH0pO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVSZXNpemVPYnNlcnZlck9ic2VydmF0aW9uKCkge1xuXHR0aGlzW3Jlc2l6ZU9ic2VydmVyU3ltYm9sXS5kaXNjb25uZWN0KCk7XG5cblx0Y29uc3Qgc2xvdHRlZE5vZGVzID0gZ2V0U2xvdHRlZEVsZW1lbnRzLmNhbGwodGhpcyk7XG5cdHNsb3R0ZWROb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZShub2RlKTtcblx0fSk7XG5cblx0aWYgKHRoaXNbZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRTeW1ib2xdKSB7XG5cdFx0dGhpc1tyZXNpemVPYnNlcnZlclN5bWJvbF0ub2JzZXJ2ZSh0aGlzW2RldGFpbHNDb250YWluZXJFbGVtZW50U3ltYm9sXSk7XG5cdH1cblxuXHR0aGlzLmFkanVzdEhlaWdodCgpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRFdmVudEhhbmRsZXIoKSB7XG5cdGlmICghdGhpcy5zaGFkb3dSb290KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwibm8gc2hhZG93LXJvb3QgaXMgZGVmaW5lZFwiKTtcblx0fVxuXG5cdGluaXRTbG90Q2hhbmdlZEhhbmRsZXIuY2FsbCh0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIGluaXRTbG90Q2hhbmdlZEhhbmRsZXIoKSB7XG5cdHRoaXNbZGV0YWlsc1Nsb3RFbGVtZW50U3ltYm9sXS5hZGRFdmVudExpc3RlbmVyKFwic2xvdGNoYW5nZVwiLCAoKSA9PiB7XG5cdFx0dXBkYXRlUmVzaXplT2JzZXJ2ZXJPYnNlcnZhdGlvbi5jYWxsKHRoaXMpO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7U2VsZWN0fVxuICogQHRocm93cyB7RXJyb3J9IG5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcbiAqL1xuZnVuY3Rpb24gaW5pdENvbnRyb2xSZWZlcmVuY2VzKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW2NvbnRyb2xFbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWNvbnRyb2xdXCIsXG5cdCk7XG5cdHRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9ZGV0YWlsXVwiLFxuXHQpO1xuXHR0aGlzW2RldGFpbHNTbG90RWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihcInNsb3RcIik7XG5cdHRoaXNbZGV0YWlsc0NvbnRhaW5lckVsZW1lbnRTeW1ib2xdID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXG5cdFx0XCJbZGF0YS1tb25zdGVyLXJvbGU9Y29udGFpbmVyXVwiLFxuXHQpO1xuXHR0aGlzW2RldGFpbHNEZWNvRWxlbWVudFN5bWJvbF0gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcihcblx0XHRcIltkYXRhLW1vbnN0ZXItcm9sZT1kZWNvXVwiLFxuXHQpO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldENvbmZpZ0tleSgpIHtcblx0cmV0dXJuIGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5KHRoaXNbbmFtZVN5bWJvbF0sIHRoaXMuaWQsIFwic3RhdGVcIik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gdXBkYXRlU3RhdGVDb25maWcoKSB7XG5cdGlmICghdGhpcy5nZXRPcHRpb24oXCJmZWF0dXJlcy5wZXJzaXN0U3RhdGVcIikpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoIXRoaXNbZGV0YWlsc0VsZW1lbnRTeW1ib2xdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXHRjb25zdCBob3N0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm1vbnN0ZXItaG9zdFwiKTtcblx0aWYgKCEoaG9zdCAmJiB0aGlzLmlkKSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IGNvbmZpZ0tleSA9IGdldENvbmZpZ0tleS5jYWxsKHRoaXMpO1xuXG5cdHRyeSB7XG5cdFx0aG9zdC5zZXRDb25maWcoY29uZmlnS2V5LCB0aGlzLmlzT3BlbigpKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRhZGRBdHRyaWJ1dGVUb2tlbih0aGlzLCBBVFRSSUJVVEVfRVJST1JNRVNTQUdFLCBTdHJpbmcoZXJyb3IpKTtcblx0fVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICovXG5mdW5jdGlvbiBpbml0U3RhdGVGcm9tSG9zdENvbmZpZygpIHtcblx0aWYgKCF0aGlzLmdldE9wdGlvbihcImZlYXR1cmVzLnBlcnNpc3RTdGF0ZVwiKSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuXHR9XG5cblx0Y29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXHRjb25zdCBob3N0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIm1vbnN0ZXItaG9zdFwiKTtcblxuXHRpZiAoIShob3N0ICYmIHRoaXMuaWQpKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG5cdH1cblxuXHRjb25zdCBjb25maWdLZXkgPSBnZXRDb25maWdLZXkuY2FsbCh0aGlzKTtcblx0cmV0dXJuIGhvc3Rcblx0XHQuZ2V0Q29uZmlnKGNvbmZpZ0tleSlcblx0XHQudGhlbigoc3RhdGUpID0+IHtcblx0XHRcdGlmIChzdGF0ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHR0aGlzLm9wZW4oKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHRcdH1cblx0XHR9KVxuXHRcdC5jYXRjaCgoZXJyb3IpID0+IHtcblx0XHRcdGFkZEF0dHJpYnV0ZVRva2VuKHRoaXMsIEFUVFJJQlVURV9FUlJPUk1FU1NBR0UsIGVycm9yLnRvU3RyaW5nKCkpO1xuXHRcdH0pO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGluaXRSZXNpemVPYnNlcnZlcigpIHtcblx0Ly8gYWdhaW5zdCBmbGlja2VyaW5nXG5cdHRoaXNbcmVzaXplT2JzZXJ2ZXJTeW1ib2xdID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG5cdFx0aWYgKHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gaW5zdGFuY2VvZiBEZWFkTWFuc1N3aXRjaCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dGhpc1t0aW1lckNhbGxiYWNrU3ltYm9sXS50b3VjaCgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzW3RpbWVyQ2FsbGJhY2tTeW1ib2xdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXNbdGltZXJDYWxsYmFja1N5bWJvbF0gPSBuZXcgRGVhZE1hbnNTd2l0Y2goMjAwLCAoKSA9PiB7XG5cdFx0XHRjaGVja0FuZFJlYXJyYW5nZUNvbnRlbnQuY2FsbCh0aGlzKTtcblx0XHR9KTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQW5kUmVhcnJhbmdlQ29udGVudCgpIHtcblx0dGhpcy5hZGp1c3RIZWlnaHQoKTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZSgpIHtcblx0Ly8gbGFuZ3VhZ2U9SFRNTFxuXHRyZXR1cm4gYFxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwiY29udHJvbFwiIHBhcnQ9XCJjb250cm9sXCIgY2xhc3M9XCJvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJkZXRhaWxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjbGFzc2VzLmNvbnRhaW5lclwiIHBhcnQ9XCJjb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZWNvLWxpbmVcIiBkYXRhLW1vbnN0ZXItcm9sZT1cImRlY29cIiBwYXJ0PVwiZGVjb1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PmA7XG59XG5cbnJlZ2lzdGVyQ3VzdG9tRWxlbWVudChDb2xsYXBzZSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHtcblx0YXNzZW1ibGVNZXRob2RTeW1ib2wsXG5cdHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCxcbn0gZnJvbSBcIi4uLy4uL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiO1xuaW1wb3J0IHsgRGV0YWlsc1N0eWxlU2hlZXQgfSBmcm9tIFwiLi9zdHlsZXNoZWV0L2RldGFpbHMubWpzXCI7XG5pbXBvcnQgeyBBVFRSSUJVVEVfQlVUVE9OX0xBQkVMIH0gZnJvbSBcIi4uL2hvc3QvY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleSB9IGZyb20gXCIuLi9ob3N0L3V0aWwubWpzXCI7XG5pbXBvcnQgeyBDb2xsYXBzZSwgbmFtZVN5bWJvbCB9IGZyb20gXCIuL2NvbGxhcHNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBEZXRhaWxzIH07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEB0eXBlIHtzeW1ib2x9XG4gKi9cbmNvbnN0IGJ1dHRvbkVsZW1lbnRTeW1ib2wgPSBTeW1ib2woXCJidXR0b25FbGVtZW50XCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBidXR0b25FdmVudEhhbmRsZXJTeW1ib2wgPSBTeW1ib2woXCJidXR0b25FdmVudEhhbmRsZXJcIik7XG5cbi8qKlxuICogQSBEZXRhaWxzIGNvbXBvbmVudFxuICpcbiAqIEBmcmFnbWVudHMgL2ZyYWdtZW50cy9jb21wb25lbnRzL2xheW91dC9kZXRhaWxzL1xuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9jb21wb25lbnRzL2xheW91dC9kZXRhaWxzLXNpbXBsZVxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbGF5b3V0L2RldGFpbHMtd2l0aC1sYWJlbFxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2NvbXBvbmVudHMvbGF5b3V0L2RldGFpbHMtYXMtYWNjb3JkaW9uXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvY29tcG9uZW50cy9sYXlvdXQvZGV0YWlscy13aXRoLXlvdXItb3duLWRlc2lnblxuICpcbiAqIEBzaW5jZSAzLjc0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIHNpbXBsZSBidXQgY29vbCBkZXRhaWwgY29tcG9uZW50LiBUaGlzIGlzIGJhc2VkIG9uIHRoZSBjb2xsYXBzZSBjb21wb25lbnQgYW5kIGV4dGVuZHMgaXQgd2l0aCBhIGJ1dHRvbi5cbiAqIEBzdW1tYXJ5IFlvdSBjYW4gYWxzbyBlYXNpbHkgYnVpbGQgYW4gYWNjb3JkaW9uIGZyb20gdGhlIGNvbXBvbmVudC5cbiAqL1xuY2xhc3MgRGV0YWlscyBleHRlbmRzIENvbGxhcHNlIHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbXBvbmVudHMvbGF5b3V0L2RldGFpbHNAQGluc3RhbmNlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdC8vIHRoZSBuYW1lIGlzIG9ubHkgdXNlZCBmb3IgdGhlIGhvc3QgY29uZmlnIGFuZCB0aGUgZXZlbnQgbmFtZVxuXHRcdHRoaXNbbmFtZVN5bWJvbF0gPSBcImRldGFpbHNcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUbyBzZXQgdGhlIG9wdGlvbnMgdmlhIHRoZSBIVE1MIFRhZywgdGhlIGF0dHJpYnV0ZSBgZGF0YS1tb25zdGVyLW9wdGlvbnNgIG11c3QgYmUgdXNlZC5cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tb25zdGVyanMub3JnL2VuL2RvYy8jY29uZmlndXJhdGUtYS1tb25zdGVyLWNvbnRyb2x9XG5cdCAqXG5cdCAqIFRoZSBpbmRpdmlkdWFsIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0ZW1wbGF0ZXMgVGVtcGxhdGUgZGVmaW5pdGlvbnNcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHRlbXBsYXRlcy5tYWluIE1haW4gdGVtcGxhdGVcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGJ1dHRvbiBCdXR0b24gY29uZmlndXJhdGlvblxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gYnV0dG9uLmxhYmVsIEJ1dHRvbiBsYWJlbFxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuXHRcdFx0dGVtcGxhdGVzOiB7XG5cdFx0XHRcdG1haW46IGdldFRlbXBsYXRlKCksXG5cdFx0XHR9LFxuXHRcdFx0bGFiZWxzOiB7XG5cdFx0XHRcdGJ1dHRvbjogXCJEZXRhaWxzXCIsXG5cdFx0XHR9LFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRbYXNzZW1ibGVNZXRob2RTeW1ib2xdKCkge1xuXHRcdHN1cGVyW2Fzc2VtYmxlTWV0aG9kU3ltYm9sXSgpO1xuXG5cdFx0aW5pdEJ1dHRvbkxhYmVsLmNhbGwodGhpcyk7XG5cdFx0aW5pdENvbnRyb2xSZWZlcmVuY2VzLmNhbGwodGhpcyk7XG5cdFx0aW5pdEV2ZW50SGFuZGxlci5jYWxsKHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge3ZvaWR9XG5cdCAqL1xuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHRzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG5cdFx0Y29uc3QgY29udGFpbkRvY3VtZW50ID0gdGhpcy5zaGFkb3dSb290O1xuXG5cdFx0aWYgKGNvbnRhaW5Eb2N1bWVudCAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc3QgcHJldmlvdXNFbGVtZW50ID0gdGhpcy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuXHRcdFx0aWYgKHByZXZpb3VzRWxlbWVudCAmJiBwcmV2aW91c0VsZW1lbnQudGFnTmFtZSA9PT0gXCJNT05TVEVSLURFVEFJTFNcIikge1xuXHRcdFx0XHR0aGlzW2J1dHRvbkVsZW1lbnRTeW1ib2xdLnN0eWxlLmJvcmRlclRvcCA9IFwiMFwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0VGFnKCkge1xuXHRcdHJldHVybiBcIm1vbnN0ZXItZGV0YWlsc1wiO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge0FycmF5PENTU1N0eWxlU2hlZXQ+fVxuXHQgKi9cblx0c3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cdFx0Y29uc3QgY3NzID0gc3VwZXIuZ2V0Q1NTU3R5bGVTaGVldCgpO1xuXHRcdGNzcy5wdXNoKERldGFpbHNTdHlsZVNoZWV0KTtcblx0XHRyZXR1cm4gY3NzO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge1NlbGVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXG4gKi9cbmZ1bmN0aW9uIGluaXRDb250cm9sUmVmZXJlbmNlcygpIHtcblx0aWYgKCF0aGlzLnNoYWRvd1Jvb3QpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJubyBzaGFkb3ctcm9vdCBpcyBkZWZpbmVkXCIpO1xuXHR9XG5cblx0dGhpc1tidXR0b25FbGVtZW50U3ltYm9sXSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKFxuXHRcdFwiW2RhdGEtbW9uc3Rlci1yb2xlPWJ1dHRvbl1cIixcblx0KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBpbml0RXZlbnRIYW5kbGVyKCkge1xuXHRpZiAoIXRoaXMuc2hhZG93Um9vdCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIm5vIHNoYWRvdy1yb290IGlzIGRlZmluZWRcIik7XG5cdH1cblxuXHR0aGlzW2J1dHRvbkV2ZW50SGFuZGxlclN5bWJvbF0gPSAoZXZlbnQpID0+IHtcblx0XHR0aGlzLnRvZ2dsZSgpO1xuXHR9O1xuXG5cdHRoaXNbYnV0dG9uRWxlbWVudFN5bWJvbF0uYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcImNsaWNrXCIsXG5cdFx0dGhpc1tidXR0b25FdmVudEhhbmRsZXJTeW1ib2xdLFxuXHQpO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGluaXRCdXR0b25MYWJlbCgpIHtcblx0bGV0IGxhYmVsO1xuXHRjb25zdCBzZXRMYWJlbCA9IGZhbHNlO1xuXHRpZiAodGhpcy5oYXNBdHRyaWJ1dGUoQVRUUklCVVRFX0JVVFRPTl9MQUJFTCkpIHtcblx0XHRsYWJlbCA9IHRoaXMuZ2V0QXR0cmlidXRlKEFUVFJJQlVURV9CVVRUT05fTEFCRUwpO1xuXHR9IGVsc2Uge1xuXHRcdGxhYmVsID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMuYnV0dG9uXCIsIFwiRGV0YWlsc1wiKTtcblx0fVxuXG5cdGlmICghaXNTdHJpbmcobGFiZWwpKSB7XG5cdFx0bGFiZWwgPSBcIlwiO1xuXHR9XG5cblx0aWYgKGxhYmVsID09PSBcIlwiKSB7XG5cdFx0bGFiZWwgPSB0aGlzLmlubmVyVGV4dDtcblx0fVxuXG5cdGxhYmVsID0gbGFiZWwudHJpbSgpO1xuXG5cdGlmIChsYWJlbCA9PT0gXCJcIikge1xuXHRcdGxhYmVsID0gdGhpcy5nZXRPcHRpb24oXCJsYWJlbHMuYnV0dG9uXCIsIFwiRGV0YWlsc1wiKTtcblx0fVxuXG5cdGlmIChsYWJlbC5sZW5ndGggPiAxMDApIHtcblx0XHRsYWJlbCA9IGAke2xhYmVsLnN1YnN0cmluZygwLCA5OSl9XHUyMDI2YDtcblx0fVxuXG5cdHRoaXMuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9CVVRUT05fTEFCRUwsIGxhYmVsKTtcblx0dGhpcy5zZXRPcHRpb24oXCJsYWJlbHMuYnV0dG9uXCIsIGxhYmVsKTtcblxuXHRyZXR1cm4gbGFiZWw7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0Q29uZmlnS2V5KCkge1xuXHRyZXR1cm4gZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkoXCJkZXRhaWxzXCIsIHRoaXMuaWQsIFwic3RhdGVcIik7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZ2V0VGVtcGxhdGUoKSB7XG5cdC8vIGxhbmd1YWdlPUhUTUxcblx0cmV0dXJuIGBcbiAgICAgICAgPGRpdiBkYXRhLW1vbnN0ZXItcm9sZT1cImNvbnRyb2xcIiBwYXJ0PVwiY29udHJvbFwiIGNsYXNzPVwib3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3VtbWFyeVwiIHBhcnQ9XCJzdW1tYXJ5XCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBwYXJ0PVwiYnV0dG9uXCIgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmNsYXNzZXMuYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpsYWJlbHMuYnV0dG9uIHwgZGVmYXVsdDpjbGljayBtZVwiPmNsaWNrIG1lXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJkZXRhaWxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDpjbGFzc2VzLmNvbnRhaW5lclwiIHBhcnQ9XCJjb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJvbGU9XCJjb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNsb3QgcGFydD1cInNsb3RcIj48L3Nsb3Q+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBwYXJ0PVwiZGVjby1saW5lXCIgY2xhc3M9XCJkZWNvLWxpbmVcIiBkYXRhLW1vbnN0ZXItcm9sZT1cImRlY29cIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5gO1xufVxuXG5yZWdpc3RlckN1c3RvbUVsZW1lbnQoRGV0YWlscyk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgRGV0YWlscyBhcyBOZXdEZXRhaWxzIH0gZnJvbSBcIi4uL2xheW91dC9kZXRhaWxzLm1qc1wiO1xuZXhwb3J0IHsgRGV0YWlscyB9O1xuXG4vKipcbiAqIEBzaW5jZSAxLjEwLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSAzLjY0LjAgdXNlIHtAbGluayBNb25zdGVyLkNvbXBvbmVudHMuTGF5b3V0LkRldGFpbHN9XG4gKi9cbmNsYXNzIERldGFpbHMgZXh0ZW5kcyBOZXdEZXRhaWxzIHt9XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgcmFuZG9tIH0gZnJvbSBcIi4uL21hdGgvcmFuZG9tLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsIH0gZnJvbSBcIi4vZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHsgSUQgfSBmcm9tIFwiLi9pZC5tanNcIjtcblxuZXhwb3J0IHsgUmFuZG9tSUQgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge251bWJlcn1cbiAqL1xubGV0IGludGVybmFsQ291bnRlciA9IDA7XG5cbi8qKlxuICogVGhlIGBSYW5kb21JRGAgY2xhc3MgcHJvdmlkZXMgYSB1bmlxdWUgSUQgZm9yIGFuIGl0ZW0uXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS42LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBjbGFzcyB0byBnZW5lcmF0ZSByYW5kb20gbnVtYmVyc1xuICovXG5jbGFzcyBSYW5kb21JRCBleHRlbmRzIElEIHtcblx0LyoqXG5cdCAqIGNyZWF0ZSBuZXcgb2JqZWN0XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aW50ZXJuYWxDb3VudGVyICs9IDE7XG5cblx0XHR0aGlzLmlkID1cblx0XHRcdGdldEdsb2JhbCgpXG5cdFx0XHRcdC5idG9hKHJhbmRvbSgxLCAxMDAwMCkpXG5cdFx0XHRcdC5yZXBsYWNlKC89L2csIFwiXCIpXG5cdFx0XHRcdC8qKiBObyBudW1iZXJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIElELCBiZWNhdXNlIG9mIHBvc3NpYmxlIHByb2JsZW1zIHdpdGggRE9NICovXG5cdFx0XHRcdC5yZXBsYWNlKC9eWzAtOV0rLywgXCJYXCIpICsgaW50ZXJuYWxDb3VudGVyO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgcmFuZG9tIH0gZnJvbSBcIi4uL21hdGgvcmFuZG9tLm1qc1wiO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tIFwiLi9pcy5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4vZ2xvYmFsLm1qc1wiO1xuXG5leHBvcnQgeyBVVUlEIH07XG5cbi8qKlxuICogVGhlIFVVSUQgY2xhc3MgbWFrZXMgaXQgcG9zc2libGUgdG8gZ2V0IGEgdW5pcXVlIFVVSUQgZm9yIGFuIG9iamVjdC5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI1LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAdGhyb3dzIHtFcnJvcn0gdW5zdXBwb3J0ZWRcbiAqL1xuY2xhc3MgVVVJRCBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRsZXQgdXVpZCA9IGNyZWF0ZVdpdGhDcnlwdG8oKTtcblxuXHRcdGlmICh1dWlkID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHV1aWQgPSBjcmVhdGVXaXRoUmFuZG9tKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHV1aWQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWRcIik7XG5cdFx0fVxuXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHR2YWx1ZTogdXVpZCxcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXVtcInZhbHVlXCJdO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge3N0cmluZ3x1bmRlZmluZWR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVdpdGhSYW5kb20oKSB7XG5cdHJldHVybiBcInh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eFwiLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcblx0XHRjb25zdCByID0gKHJhbmRvbSgwLCA2NTAwMCkgKiAxNikgfCAwO1xuXHRcdGNvbnN0IHYgPSBjID09PSBcInhcIiA/IHIgOiAociAmIDB4MykgfCAweDg7XG5cdFx0cmV0dXJuIHYudG9TdHJpbmcoMTYpWzBdO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHJldHVybiB7c3RyaW5nfHVuZGVmaW5lZH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlV2l0aENyeXB0bygpIHtcblx0Y29uc3QgY3J5cHQgPSBnZXRHbG9iYWxPYmplY3QoXCJjcnlwdG9cIik7XG5cdGlmICghaXNPYmplY3QoY3J5cHQpKSByZXR1cm47XG5cdGlmICh0eXBlb2YgY3J5cHQ/LltcInJhbmRvbVVVSURcIl0pIHJldHVybjtcblx0cmV0dXJuIGNyeXB0LnJhbmRvbVVVSUQoKTtcbn1cbiIsICJpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHtcblxuICAgIChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IHNheXN3aG8gPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudCwgdGVtLFxuICAgICAgICAgICAgICAgIE0gPSB1YS5tYXRjaCgvKG9wZXJhfGNocm9tZXxzYWZhcml8ZmlyZWZveHxtc2llfHRyaWRlbnQoPz1cXC8pKVxcLz9cXHMqKFxcZCspL2kpIHx8IFtdO1xuICAgICAgICAgICAgaWYgKC90cmlkZW50L2kudGVzdChNWzFdKSkge1xuICAgICAgICAgICAgICAgIHRlbSA9IC9cXGJydlsgOl0rKFxcZCspL2cuZXhlYyh1YSkgfHwgW107XG4gICAgICAgICAgICAgICAgcmV0dXJuICdJRSAnICsgKHRlbVsxXSB8fCAnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoTVsxXSA9PT0gJ0Nocm9tZScpIHtcbiAgICAgICAgICAgICAgICB0ZW0gPSB1YS5tYXRjaCgvXFxiKE9QUnxFZGdlKVxcLyhcXGQrKS8pO1xuICAgICAgICAgICAgICAgIGlmICh0ZW0gIT0gbnVsbCkgcmV0dXJuIHRlbS5zbGljZSgxKS5qb2luKCcgJykucmVwbGFjZSgnT1BSJywgJ09wZXJhJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBNID0gTVsyXSA/IFtNWzFdLCBNWzJdXSA6IFtuYXZpZ2F0b3IuYXBwTmFtZSwgbmF2aWdhdG9yLmFwcFZlcnNpb24sICctPyddO1xuICAgICAgICAgICAgaWYgKCh0ZW0gPSB1YS5tYXRjaCgvdmVyc2lvblxcLyhcXGQrKS9pKSkgIT0gbnVsbCkgTS5zcGxpY2UoMSwgMSwgdGVtWzFdKTtcbiAgICAgICAgICAgIHJldHVybiBNLmpvaW4oJyAnKTtcbiAgICAgICAgfSkoKTtcblxuXG4gICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaDEnKVxuICAgICAgICBlbGVtZW50LmlubmVySFRNTCArPSBcIiBcIiArIHNheXN3aG87XG5cbiAgICB9KSgpO1xuXG5cbn1cbiIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5cbi8vIGxhbmd1YWdlPWh0bWxcbmxldCBodG1sMSA9IGBcbiAgICA8bW9uc3Rlci10YWJzIGlkPVwibXl0YWJzXCI+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbD1cIlRBQjFcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgRGFzIGlzdCB0YWIgMVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLWJ1dHRvbi1sYWJlbD1cIlRBQjJcIj5cbiAgICAgICAgICAgIERhcyBpc3QgdGFiIDJcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICBEYXMgaXN0IHRhYiAzIG9obmUgYnV0dG9uXG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PjwvZGl2PlxuICAgIDwvbW9uc3Rlci10YWJzPlxuYDtcblxubGV0IFRhYnM7XG5cbmRlc2NyaWJlKCdUYWJzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuXG4gICAgICAgICAgICBpZiAoIWdsb2JhbFsnY3J5cHRvJ10pIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBDcnlwdG8gPSBtWydDcnlwdG8nXTtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsWydjcnlwdG8nXSA9IG5ldyBDcnlwdG8oKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbGF5b3V0L3RhYnMubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBUYWJzID0gbVsnVGFicyddO1xuICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpPT57XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIGJ1dHRvbnMgYW5kIHRhYnMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215dGFicycpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0YWJzKS5pcy5pbnN0YW5jZW9mKFRhYnMpO1xuXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5hdiA9IHRhYnMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCduYXYnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1dHRvbnMgPSB0YWJzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uW3BhcnQ9YnV0dG9uXScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGJ1dHRvbnNbMF0pLmlzLmluc3RhbmNlb2YoSFRNTEJ1dHRvbkVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG5hdi5oYXNDaGlsZE5vZGVzKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoYnV0dG9ucy5sZW5ndGgpLnRvLmJlLmVxdWFsKDQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LCAxMDApXG5cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX25hbWUgPSAodGFyZ2V0LCB2YWx1ZSkgPT4gX19kZWZQcm9wKHRhcmdldCwgXCJuYW1lXCIsIHsgdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbnZhciBfX2NvbW1vbkpTID0gKGNiLCBtb2QpID0+IGZ1bmN0aW9uIF9fcmVxdWlyZSgpIHtcbiAgcmV0dXJuIG1vZCB8fCAoMCwgY2JbX19nZXRPd25Qcm9wTmFtZXMoY2IpWzBdXSkoKG1vZCA9IHsgZXhwb3J0czoge30gfSkuZXhwb3J0cywgbW9kKSwgbW9kLmV4cG9ydHM7XG59O1xudmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7XG4gIGZvciAodmFyIG5hbWUgaW4gYWxsKVxuICAgIF9fZGVmUHJvcCh0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGxbbmFtZV0sIGVudW1lcmFibGU6IHRydWUgfSk7XG59O1xuXG4vLyAoZGlzYWJsZWQpOnV0aWxcbnZhciByZXF1aXJlX3V0aWwgPSBfX2NvbW1vbkpTKHtcbiAgXCIoZGlzYWJsZWQpOnV0aWxcIigpIHtcbiAgfVxufSk7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2luZGV4LmpzXG52YXIgdXRpbHNfZXhwb3J0cyA9IHt9O1xuX19leHBvcnQodXRpbHNfZXhwb3J0cywge1xuICBhZGRDaGFpbmFibGVNZXRob2Q6ICgpID0+IGFkZENoYWluYWJsZU1ldGhvZCxcbiAgYWRkTGVuZ3RoR3VhcmQ6ICgpID0+IGFkZExlbmd0aEd1YXJkLFxuICBhZGRNZXRob2Q6ICgpID0+IGFkZE1ldGhvZCxcbiAgYWRkUHJvcGVydHk6ICgpID0+IGFkZFByb3BlcnR5LFxuICBjaGVja0Vycm9yOiAoKSA9PiBjaGVja19lcnJvcl9leHBvcnRzLFxuICBjb21wYXJlQnlJbnNwZWN0OiAoKSA9PiBjb21wYXJlQnlJbnNwZWN0LFxuICBlcWw6ICgpID0+IGRlZXBfZXFsX2RlZmF1bHQsXG4gIGV4cGVjdFR5cGVzOiAoKSA9PiBleHBlY3RUeXBlcyxcbiAgZmxhZzogKCkgPT4gZmxhZyxcbiAgZ2V0QWN0dWFsOiAoKSA9PiBnZXRBY3R1YWwsXG4gIGdldE1lc3NhZ2U6ICgpID0+IGdldE1lc3NhZ2UyLFxuICBnZXROYW1lOiAoKSA9PiBnZXROYW1lLFxuICBnZXRPcGVyYXRvcjogKCkgPT4gZ2V0T3BlcmF0b3IsXG4gIGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzOiAoKSA9PiBnZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcyxcbiAgZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9sczogKCkgPT4gZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scyxcbiAgZ2V0UGF0aEluZm86ICgpID0+IGdldFBhdGhJbmZvLFxuICBoYXNQcm9wZXJ0eTogKCkgPT4gaGFzUHJvcGVydHksXG4gIGluc3BlY3Q6ICgpID0+IGluc3BlY3QyLFxuICBpc05hTjogKCkgPT4gaXNOYU4yLFxuICBpc051bWVyaWM6ICgpID0+IGlzTnVtZXJpYyxcbiAgaXNQcm94eUVuYWJsZWQ6ICgpID0+IGlzUHJveHlFbmFibGVkLFxuICBpc1JlZ0V4cDogKCkgPT4gaXNSZWdFeHAyLFxuICBvYmpEaXNwbGF5OiAoKSA9PiBvYmpEaXNwbGF5LFxuICBvdmVyd3JpdGVDaGFpbmFibGVNZXRob2Q6ICgpID0+IG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZCxcbiAgb3ZlcndyaXRlTWV0aG9kOiAoKSA9PiBvdmVyd3JpdGVNZXRob2QsXG4gIG92ZXJ3cml0ZVByb3BlcnR5OiAoKSA9PiBvdmVyd3JpdGVQcm9wZXJ0eSxcbiAgcHJveGlmeTogKCkgPT4gcHJveGlmeSxcbiAgdGVzdDogKCkgPT4gdGVzdCxcbiAgdHJhbnNmZXJGbGFnczogKCkgPT4gdHJhbnNmZXJGbGFncyxcbiAgdHlwZTogKCkgPT4gdHlwZVxufSk7XG5cbi8vIG5vZGVfbW9kdWxlcy9jaGVjay1lcnJvci9pbmRleC5qc1xudmFyIGNoZWNrX2Vycm9yX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KGNoZWNrX2Vycm9yX2V4cG9ydHMsIHtcbiAgY29tcGF0aWJsZUNvbnN0cnVjdG9yOiAoKSA9PiBjb21wYXRpYmxlQ29uc3RydWN0b3IsXG4gIGNvbXBhdGlibGVJbnN0YW5jZTogKCkgPT4gY29tcGF0aWJsZUluc3RhbmNlLFxuICBjb21wYXRpYmxlTWVzc2FnZTogKCkgPT4gY29tcGF0aWJsZU1lc3NhZ2UsXG4gIGdldENvbnN0cnVjdG9yTmFtZTogKCkgPT4gZ2V0Q29uc3RydWN0b3JOYW1lLFxuICBnZXRNZXNzYWdlOiAoKSA9PiBnZXRNZXNzYWdlXG59KTtcbmZ1bmN0aW9uIGlzRXJyb3JJbnN0YW5jZShvYmopIHtcbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEVycm9yIHx8IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSBcIltvYmplY3QgRXJyb3JdXCI7XG59XG5fX25hbWUoaXNFcnJvckluc3RhbmNlLCBcImlzRXJyb3JJbnN0YW5jZVwiKTtcbmZ1bmN0aW9uIGlzUmVnRXhwKG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09IFwiW29iamVjdCBSZWdFeHBdXCI7XG59XG5fX25hbWUoaXNSZWdFeHAsIFwiaXNSZWdFeHBcIik7XG5mdW5jdGlvbiBjb21wYXRpYmxlSW5zdGFuY2UodGhyb3duLCBlcnJvckxpa2UpIHtcbiAgcmV0dXJuIGlzRXJyb3JJbnN0YW5jZShlcnJvckxpa2UpICYmIHRocm93biA9PT0gZXJyb3JMaWtlO1xufVxuX19uYW1lKGNvbXBhdGlibGVJbnN0YW5jZSwgXCJjb21wYXRpYmxlSW5zdGFuY2VcIik7XG5mdW5jdGlvbiBjb21wYXRpYmxlQ29uc3RydWN0b3IodGhyb3duLCBlcnJvckxpa2UpIHtcbiAgaWYgKGlzRXJyb3JJbnN0YW5jZShlcnJvckxpa2UpKSB7XG4gICAgcmV0dXJuIHRocm93bi5jb25zdHJ1Y3RvciA9PT0gZXJyb3JMaWtlLmNvbnN0cnVjdG9yIHx8IHRocm93biBpbnN0YW5jZW9mIGVycm9yTGlrZS5jb25zdHJ1Y3RvcjtcbiAgfSBlbHNlIGlmICgodHlwZW9mIGVycm9yTGlrZSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgZXJyb3JMaWtlID09PSBcImZ1bmN0aW9uXCIpICYmIGVycm9yTGlrZS5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gdGhyb3duLmNvbnN0cnVjdG9yID09PSBlcnJvckxpa2UgfHwgdGhyb3duIGluc3RhbmNlb2YgZXJyb3JMaWtlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbl9fbmFtZShjb21wYXRpYmxlQ29uc3RydWN0b3IsIFwiY29tcGF0aWJsZUNvbnN0cnVjdG9yXCIpO1xuZnVuY3Rpb24gY29tcGF0aWJsZU1lc3NhZ2UodGhyb3duLCBlcnJNYXRjaGVyKSB7XG4gIGNvbnN0IGNvbXBhcmlzb25TdHJpbmcgPSB0eXBlb2YgdGhyb3duID09PSBcInN0cmluZ1wiID8gdGhyb3duIDogdGhyb3duLm1lc3NhZ2U7XG4gIGlmIChpc1JlZ0V4cChlcnJNYXRjaGVyKSkge1xuICAgIHJldHVybiBlcnJNYXRjaGVyLnRlc3QoY29tcGFyaXNvblN0cmluZyk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVyck1hdGNoZXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gY29tcGFyaXNvblN0cmluZy5pbmRleE9mKGVyck1hdGNoZXIpICE9PSAtMTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5fX25hbWUoY29tcGF0aWJsZU1lc3NhZ2UsIFwiY29tcGF0aWJsZU1lc3NhZ2VcIik7XG5mdW5jdGlvbiBnZXRDb25zdHJ1Y3Rvck5hbWUoZXJyb3JMaWtlKSB7XG4gIGxldCBjb25zdHJ1Y3Rvck5hbWUgPSBlcnJvckxpa2U7XG4gIGlmIChpc0Vycm9ySW5zdGFuY2UoZXJyb3JMaWtlKSkge1xuICAgIGNvbnN0cnVjdG9yTmFtZSA9IGVycm9yTGlrZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlcnJvckxpa2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNvbnN0cnVjdG9yTmFtZSA9IGVycm9yTGlrZS5uYW1lO1xuICAgIGlmIChjb25zdHJ1Y3Rvck5hbWUgPT09IFwiXCIpIHtcbiAgICAgIGNvbnN0IG5ld0NvbnN0cnVjdG9yTmFtZSA9IG5ldyBlcnJvckxpa2UoKS5uYW1lO1xuICAgICAgY29uc3RydWN0b3JOYW1lID0gbmV3Q29uc3RydWN0b3JOYW1lIHx8IGNvbnN0cnVjdG9yTmFtZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbnN0cnVjdG9yTmFtZTtcbn1cbl9fbmFtZShnZXRDb25zdHJ1Y3Rvck5hbWUsIFwiZ2V0Q29uc3RydWN0b3JOYW1lXCIpO1xuZnVuY3Rpb24gZ2V0TWVzc2FnZShlcnJvckxpa2UpIHtcbiAgbGV0IG1zZyA9IFwiXCI7XG4gIGlmIChlcnJvckxpa2UgJiYgZXJyb3JMaWtlLm1lc3NhZ2UpIHtcbiAgICBtc2cgPSBlcnJvckxpa2UubWVzc2FnZTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3JMaWtlID09PSBcInN0cmluZ1wiKSB7XG4gICAgbXNnID0gZXJyb3JMaWtlO1xuICB9XG4gIHJldHVybiBtc2c7XG59XG5fX25hbWUoZ2V0TWVzc2FnZSwgXCJnZXRNZXNzYWdlXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9mbGFnLmpzXG5mdW5jdGlvbiBmbGFnKG9iaiwga2V5LCB2YWx1ZSkge1xuICB2YXIgZmxhZ3MgPSBvYmouX19mbGFncyB8fCAob2JqLl9fZmxhZ3MgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZmxhZ3Nba2V5XSA9IHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmbGFnc1trZXldO1xuICB9XG59XG5fX25hbWUoZmxhZywgXCJmbGFnXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy90ZXN0LmpzXG5mdW5jdGlvbiB0ZXN0KG9iaiwgYXJncykge1xuICB2YXIgbmVnYXRlID0gZmxhZyhvYmosIFwibmVnYXRlXCIpLCBleHByID0gYXJnc1swXTtcbiAgcmV0dXJuIG5lZ2F0ZSA/ICFleHByIDogZXhwcjtcbn1cbl9fbmFtZSh0ZXN0LCBcInRlc3RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL3R5cGUtZGV0ZWN0LmpzXG5mdW5jdGlvbiB0eXBlKG9iaikge1xuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBcInVuZGVmaW5lZFwiO1xuICB9XG4gIGlmIChvYmogPT09IG51bGwpIHtcbiAgICByZXR1cm4gXCJudWxsXCI7XG4gIH1cbiAgY29uc3Qgc3RyaW5nVGFnID0gb2JqW1N5bWJvbC50b1N0cmluZ1RhZ107XG4gIGlmICh0eXBlb2Ygc3RyaW5nVGFnID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHN0cmluZ1RhZztcbiAgfVxuICBjb25zdCB0eXBlMyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopLnNsaWNlKDgsIC0xKTtcbiAgcmV0dXJuIHR5cGUzO1xufVxuX19uYW1lKHR5cGUsIFwidHlwZVwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2Fzc2VydGlvbi1lcnJvci9pbmRleC5qc1xudmFyIGNhbkVsaWRlRnJhbWVzID0gXCJjYXB0dXJlU3RhY2tUcmFjZVwiIGluIEVycm9yO1xudmFyIEFzc2VydGlvbkVycm9yID0gY2xhc3MgX0Fzc2VydGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBzdGF0aWMge1xuICAgIF9fbmFtZSh0aGlzLCBcIkFzc2VydGlvbkVycm9yXCIpO1xuICB9XG4gIG1lc3NhZ2U7XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBcIkFzc2VydGlvbkVycm9yXCI7XG4gIH1cbiAgZ2V0IG9rKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdHJ1Y3RvcihtZXNzYWdlID0gXCJVbnNwZWNpZmllZCBBc3NlcnRpb25FcnJvclwiLCBwcm9wcywgc3NmKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICBpZiAoY2FuRWxpZGVGcmFtZXMpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHNzZiB8fCBfQXNzZXJ0aW9uRXJyb3IpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wcykge1xuICAgICAgaWYgKCEoa2V5IGluIHRoaXMpKSB7XG4gICAgICAgIHRoaXNba2V5XSA9IHByb3BzW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHRvSlNPTihzdGFjaykge1xuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLFxuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgb2s6IGZhbHNlLFxuICAgICAgc3RhY2s6IHN0YWNrICE9PSBmYWxzZSA/IHRoaXMuc3RhY2sgOiB2b2lkIDBcbiAgICB9O1xuICB9XG59O1xuXG4vLyBsaWIvY2hhaS91dGlscy9leHBlY3RUeXBlcy5qc1xuZnVuY3Rpb24gZXhwZWN0VHlwZXMob2JqLCB0eXBlcykge1xuICB2YXIgZmxhZ01zZyA9IGZsYWcob2JqLCBcIm1lc3NhZ2VcIik7XG4gIHZhciBzc2ZpID0gZmxhZyhvYmosIFwic3NmaVwiKTtcbiAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgb2JqID0gZmxhZyhvYmosIFwib2JqZWN0XCIpO1xuICB0eXBlcyA9IHR5cGVzLm1hcChmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIHQudG9Mb3dlckNhc2UoKTtcbiAgfSk7XG4gIHR5cGVzLnNvcnQoKTtcbiAgdmFyIHN0ciA9IHR5cGVzLm1hcChmdW5jdGlvbih0LCBpbmRleCkge1xuICAgIHZhciBhcnQgPSB+W1wiYVwiLCBcImVcIiwgXCJpXCIsIFwib1wiLCBcInVcIl0uaW5kZXhPZih0LmNoYXJBdCgwKSkgPyBcImFuXCIgOiBcImFcIjtcbiAgICB2YXIgb3IgPSB0eXBlcy5sZW5ndGggPiAxICYmIGluZGV4ID09PSB0eXBlcy5sZW5ndGggLSAxID8gXCJvciBcIiA6IFwiXCI7XG4gICAgcmV0dXJuIG9yICsgYXJ0ICsgXCIgXCIgKyB0O1xuICB9KS5qb2luKFwiLCBcIik7XG4gIHZhciBvYmpUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCk7XG4gIGlmICghdHlwZXMuc29tZShmdW5jdGlvbihleHBlY3RlZCkge1xuICAgIHJldHVybiBvYmpUeXBlID09PSBleHBlY3RlZDtcbiAgfSkpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBmbGFnTXNnICsgXCJvYmplY3QgdGVzdGVkIG11c3QgYmUgXCIgKyBzdHIgKyBcIiwgYnV0IFwiICsgb2JqVHlwZSArIFwiIGdpdmVuXCIsXG4gICAgICB2b2lkIDAsXG4gICAgICBzc2ZpXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGV4cGVjdFR5cGVzLCBcImV4cGVjdFR5cGVzXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9nZXRBY3R1YWwuanNcbmZ1bmN0aW9uIGdldEFjdHVhbChvYmosIGFyZ3MpIHtcbiAgcmV0dXJuIGFyZ3MubGVuZ3RoID4gNCA/IGFyZ3NbNF0gOiBvYmouX29iajtcbn1cbl9fbmFtZShnZXRBY3R1YWwsIFwiZ2V0QWN0dWFsXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2hlbHBlcnMuanNcbnZhciBhbnNpQ29sb3JzID0ge1xuICBib2xkOiBbXCIxXCIsIFwiMjJcIl0sXG4gIGRpbTogW1wiMlwiLCBcIjIyXCJdLFxuICBpdGFsaWM6IFtcIjNcIiwgXCIyM1wiXSxcbiAgdW5kZXJsaW5lOiBbXCI0XCIsIFwiMjRcIl0sXG4gIC8vIDUgJiA2IGFyZSBibGlua2luZ1xuICBpbnZlcnNlOiBbXCI3XCIsIFwiMjdcIl0sXG4gIGhpZGRlbjogW1wiOFwiLCBcIjI4XCJdLFxuICBzdHJpa2U6IFtcIjlcIiwgXCIyOVwiXSxcbiAgLy8gMTAtMjAgYXJlIGZvbnRzXG4gIC8vIDIxLTI5IGFyZSByZXNldHMgZm9yIDEtOVxuICBibGFjazogW1wiMzBcIiwgXCIzOVwiXSxcbiAgcmVkOiBbXCIzMVwiLCBcIjM5XCJdLFxuICBncmVlbjogW1wiMzJcIiwgXCIzOVwiXSxcbiAgeWVsbG93OiBbXCIzM1wiLCBcIjM5XCJdLFxuICBibHVlOiBbXCIzNFwiLCBcIjM5XCJdLFxuICBtYWdlbnRhOiBbXCIzNVwiLCBcIjM5XCJdLFxuICBjeWFuOiBbXCIzNlwiLCBcIjM5XCJdLFxuICB3aGl0ZTogW1wiMzdcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0YmxhY2s6IFtcIjMwOzFcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0cmVkOiBbXCIzMTsxXCIsIFwiMzlcIl0sXG4gIGJyaWdodGdyZWVuOiBbXCIzMjsxXCIsIFwiMzlcIl0sXG4gIGJyaWdodHllbGxvdzogW1wiMzM7MVwiLCBcIjM5XCJdLFxuICBicmlnaHRibHVlOiBbXCIzNDsxXCIsIFwiMzlcIl0sXG4gIGJyaWdodG1hZ2VudGE6IFtcIjM1OzFcIiwgXCIzOVwiXSxcbiAgYnJpZ2h0Y3lhbjogW1wiMzY7MVwiLCBcIjM5XCJdLFxuICBicmlnaHR3aGl0ZTogW1wiMzc7MVwiLCBcIjM5XCJdLFxuICBncmV5OiBbXCI5MFwiLCBcIjM5XCJdXG59O1xudmFyIHN0eWxlcyA9IHtcbiAgc3BlY2lhbDogXCJjeWFuXCIsXG4gIG51bWJlcjogXCJ5ZWxsb3dcIixcbiAgYmlnaW50OiBcInllbGxvd1wiLFxuICBib29sZWFuOiBcInllbGxvd1wiLFxuICB1bmRlZmluZWQ6IFwiZ3JleVwiLFxuICBudWxsOiBcImJvbGRcIixcbiAgc3RyaW5nOiBcImdyZWVuXCIsXG4gIHN5bWJvbDogXCJncmVlblwiLFxuICBkYXRlOiBcIm1hZ2VudGFcIixcbiAgcmVnZXhwOiBcInJlZFwiXG59O1xudmFyIHRydW5jYXRvciA9IFwiXFx1MjAyNlwiO1xuZnVuY3Rpb24gY29sb3Jpc2UodmFsdWUsIHN0eWxlVHlwZSkge1xuICBjb25zdCBjb2xvciA9IGFuc2lDb2xvcnNbc3R5bGVzW3N0eWxlVHlwZV1dIHx8IGFuc2lDb2xvcnNbc3R5bGVUeXBlXSB8fCBcIlwiO1xuICBpZiAoIWNvbG9yKSB7XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGBcXHgxQlske2NvbG9yWzBdfW0ke1N0cmluZyh2YWx1ZSl9XFx4MUJbJHtjb2xvclsxXX1tYDtcbn1cbl9fbmFtZShjb2xvcmlzZSwgXCJjb2xvcmlzZVwiKTtcbmZ1bmN0aW9uIG5vcm1hbGlzZU9wdGlvbnMoe1xuICBzaG93SGlkZGVuID0gZmFsc2UsXG4gIGRlcHRoID0gMixcbiAgY29sb3JzID0gZmFsc2UsXG4gIGN1c3RvbUluc3BlY3QgPSB0cnVlLFxuICBzaG93UHJveHkgPSBmYWxzZSxcbiAgbWF4QXJyYXlMZW5ndGggPSBJbmZpbml0eSxcbiAgYnJlYWtMZW5ndGggPSBJbmZpbml0eSxcbiAgc2VlbiA9IFtdLFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG4gIHRydW5jYXRlOiB0cnVuY2F0ZTIgPSBJbmZpbml0eSxcbiAgc3R5bGl6ZSA9IFN0cmluZ1xufSA9IHt9LCBpbnNwZWN0Mykge1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgIHNob3dIaWRkZW46IEJvb2xlYW4oc2hvd0hpZGRlbiksXG4gICAgZGVwdGg6IE51bWJlcihkZXB0aCksXG4gICAgY29sb3JzOiBCb29sZWFuKGNvbG9ycyksXG4gICAgY3VzdG9tSW5zcGVjdDogQm9vbGVhbihjdXN0b21JbnNwZWN0KSxcbiAgICBzaG93UHJveHk6IEJvb2xlYW4oc2hvd1Byb3h5KSxcbiAgICBtYXhBcnJheUxlbmd0aDogTnVtYmVyKG1heEFycmF5TGVuZ3RoKSxcbiAgICBicmVha0xlbmd0aDogTnVtYmVyKGJyZWFrTGVuZ3RoKSxcbiAgICB0cnVuY2F0ZTogTnVtYmVyKHRydW5jYXRlMiksXG4gICAgc2VlbixcbiAgICBpbnNwZWN0OiBpbnNwZWN0MyxcbiAgICBzdHlsaXplXG4gIH07XG4gIGlmIChvcHRpb25zLmNvbG9ycykge1xuICAgIG9wdGlvbnMuc3R5bGl6ZSA9IGNvbG9yaXNlO1xuICB9XG4gIHJldHVybiBvcHRpb25zO1xufVxuX19uYW1lKG5vcm1hbGlzZU9wdGlvbnMsIFwibm9ybWFsaXNlT3B0aW9uc1wiKTtcbmZ1bmN0aW9uIGlzSGlnaFN1cnJvZ2F0ZShjaGFyKSB7XG4gIHJldHVybiBjaGFyID49IFwiXFx1RDgwMFwiICYmIGNoYXIgPD0gXCJcXHVEQkZGXCI7XG59XG5fX25hbWUoaXNIaWdoU3Vycm9nYXRlLCBcImlzSGlnaFN1cnJvZ2F0ZVwiKTtcbmZ1bmN0aW9uIHRydW5jYXRlKHN0cmluZywgbGVuZ3RoLCB0YWlsID0gdHJ1bmNhdG9yKSB7XG4gIHN0cmluZyA9IFN0cmluZyhzdHJpbmcpO1xuICBjb25zdCB0YWlsTGVuZ3RoID0gdGFpbC5sZW5ndGg7XG4gIGNvbnN0IHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIGlmICh0YWlsTGVuZ3RoID4gbGVuZ3RoICYmIHN0cmluZ0xlbmd0aCA+IHRhaWxMZW5ndGgpIHtcbiAgICByZXR1cm4gdGFpbDtcbiAgfVxuICBpZiAoc3RyaW5nTGVuZ3RoID4gbGVuZ3RoICYmIHN0cmluZ0xlbmd0aCA+IHRhaWxMZW5ndGgpIHtcbiAgICBsZXQgZW5kID0gbGVuZ3RoIC0gdGFpbExlbmd0aDtcbiAgICBpZiAoZW5kID4gMCAmJiBpc0hpZ2hTdXJyb2dhdGUoc3RyaW5nW2VuZCAtIDFdKSkge1xuICAgICAgZW5kID0gZW5kIC0gMTtcbiAgICB9XG4gICAgcmV0dXJuIGAke3N0cmluZy5zbGljZSgwLCBlbmQpfSR7dGFpbH1gO1xuICB9XG4gIHJldHVybiBzdHJpbmc7XG59XG5fX25hbWUodHJ1bmNhdGUsIFwidHJ1bmNhdGVcIik7XG5mdW5jdGlvbiBpbnNwZWN0TGlzdChsaXN0LCBvcHRpb25zLCBpbnNwZWN0SXRlbSwgc2VwYXJhdG9yID0gXCIsIFwiKSB7XG4gIGluc3BlY3RJdGVtID0gaW5zcGVjdEl0ZW0gfHwgb3B0aW9ucy5pbnNwZWN0O1xuICBjb25zdCBzaXplID0gbGlzdC5sZW5ndGg7XG4gIGlmIChzaXplID09PSAwKVxuICAgIHJldHVybiBcIlwiO1xuICBjb25zdCBvcmlnaW5hbExlbmd0aCA9IG9wdGlvbnMudHJ1bmNhdGU7XG4gIGxldCBvdXRwdXQgPSBcIlwiO1xuICBsZXQgcGVlayA9IFwiXCI7XG4gIGxldCB0cnVuY2F0ZWQgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7IGkgKz0gMSkge1xuICAgIGNvbnN0IGxhc3QgPSBpICsgMSA9PT0gbGlzdC5sZW5ndGg7XG4gICAgY29uc3Qgc2Vjb25kVG9MYXN0ID0gaSArIDIgPT09IGxpc3QubGVuZ3RoO1xuICAgIHRydW5jYXRlZCA9IGAke3RydW5jYXRvcn0oJHtsaXN0Lmxlbmd0aCAtIGl9KWA7XG4gICAgY29uc3QgdmFsdWUgPSBsaXN0W2ldO1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgPSBvcmlnaW5hbExlbmd0aCAtIG91dHB1dC5sZW5ndGggLSAobGFzdCA/IDAgOiBzZXBhcmF0b3IubGVuZ3RoKTtcbiAgICBjb25zdCBzdHJpbmcgPSBwZWVrIHx8IGluc3BlY3RJdGVtKHZhbHVlLCBvcHRpb25zKSArIChsYXN0ID8gXCJcIiA6IHNlcGFyYXRvcik7XG4gICAgY29uc3QgbmV4dExlbmd0aCA9IG91dHB1dC5sZW5ndGggKyBzdHJpbmcubGVuZ3RoO1xuICAgIGNvbnN0IHRydW5jYXRlZExlbmd0aCA9IG5leHRMZW5ndGggKyB0cnVuY2F0ZWQubGVuZ3RoO1xuICAgIGlmIChsYXN0ICYmIG5leHRMZW5ndGggPiBvcmlnaW5hbExlbmd0aCAmJiBvdXRwdXQubGVuZ3RoICsgdHJ1bmNhdGVkLmxlbmd0aCA8PSBvcmlnaW5hbExlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmICghbGFzdCAmJiAhc2Vjb25kVG9MYXN0ICYmIHRydW5jYXRlZExlbmd0aCA+IG9yaWdpbmFsTGVuZ3RoKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcGVlayA9IGxhc3QgPyBcIlwiIDogaW5zcGVjdEl0ZW0obGlzdFtpICsgMV0sIG9wdGlvbnMpICsgKHNlY29uZFRvTGFzdCA/IFwiXCIgOiBzZXBhcmF0b3IpO1xuICAgIGlmICghbGFzdCAmJiBzZWNvbmRUb0xhc3QgJiYgdHJ1bmNhdGVkTGVuZ3RoID4gb3JpZ2luYWxMZW5ndGggJiYgbmV4dExlbmd0aCArIHBlZWsubGVuZ3RoID4gb3JpZ2luYWxMZW5ndGgpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBvdXRwdXQgKz0gc3RyaW5nO1xuICAgIGlmICghbGFzdCAmJiAhc2Vjb25kVG9MYXN0ICYmIG5leHRMZW5ndGggKyBwZWVrLmxlbmd0aCA+PSBvcmlnaW5hbExlbmd0aCkge1xuICAgICAgdHJ1bmNhdGVkID0gYCR7dHJ1bmNhdG9yfSgke2xpc3QubGVuZ3RoIC0gaSAtIDF9KWA7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgdHJ1bmNhdGVkID0gXCJcIjtcbiAgfVxuICByZXR1cm4gYCR7b3V0cHV0fSR7dHJ1bmNhdGVkfWA7XG59XG5fX25hbWUoaW5zcGVjdExpc3QsIFwiaW5zcGVjdExpc3RcIik7XG5mdW5jdGlvbiBxdW90ZUNvbXBsZXhLZXkoa2V5KSB7XG4gIGlmIChrZXkubWF0Y2goL15bYS16QS1aX11bYS16QS1aXzAtOV0qJC8pKSB7XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoa2V5KS5yZXBsYWNlKC8nL2csIFwiXFxcXCdcIikucmVwbGFjZSgvXFxcXFwiL2csICdcIicpLnJlcGxhY2UoLyheXCJ8XCIkKS9nLCBcIidcIik7XG59XG5fX25hbWUocXVvdGVDb21wbGV4S2V5LCBcInF1b3RlQ29tcGxleEtleVwiKTtcbmZ1bmN0aW9uIGluc3BlY3RQcm9wZXJ0eShba2V5LCB2YWx1ZV0sIG9wdGlvbnMpIHtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSAyO1xuICBpZiAodHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGtleSA9IHF1b3RlQ29tcGxleEtleShrZXkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBrZXkgIT09IFwibnVtYmVyXCIpIHtcbiAgICBrZXkgPSBgWyR7b3B0aW9ucy5pbnNwZWN0KGtleSwgb3B0aW9ucyl9XWA7XG4gIH1cbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBrZXkubGVuZ3RoO1xuICB2YWx1ZSA9IG9wdGlvbnMuaW5zcGVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gIHJldHVybiBgJHtrZXl9OiAke3ZhbHVlfWA7XG59XG5fX25hbWUoaW5zcGVjdFByb3BlcnR5LCBcImluc3BlY3RQcm9wZXJ0eVwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9hcnJheS5qc1xuZnVuY3Rpb24gaW5zcGVjdEFycmF5KGFycmF5LCBvcHRpb25zKSB7XG4gIGNvbnN0IG5vbkluZGV4UHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGFycmF5KS5zbGljZShhcnJheS5sZW5ndGgpO1xuICBpZiAoIWFycmF5Lmxlbmd0aCAmJiAhbm9uSW5kZXhQcm9wZXJ0aWVzLmxlbmd0aClcbiAgICByZXR1cm4gXCJbXVwiO1xuICBvcHRpb25zLnRydW5jYXRlIC09IDQ7XG4gIGNvbnN0IGxpc3RDb250ZW50cyA9IGluc3BlY3RMaXN0KGFycmF5LCBvcHRpb25zKTtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBsaXN0Q29udGVudHMubGVuZ3RoO1xuICBsZXQgcHJvcGVydHlDb250ZW50cyA9IFwiXCI7XG4gIGlmIChub25JbmRleFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgcHJvcGVydHlDb250ZW50cyA9IGluc3BlY3RMaXN0KG5vbkluZGV4UHJvcGVydGllcy5tYXAoKGtleSkgPT4gW2tleSwgYXJyYXlba2V5XV0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICB9XG4gIHJldHVybiBgWyAke2xpc3RDb250ZW50c30ke3Byb3BlcnR5Q29udGVudHMgPyBgLCAke3Byb3BlcnR5Q29udGVudHN9YCA6IFwiXCJ9IF1gO1xufVxuX19uYW1lKGluc3BlY3RBcnJheSwgXCJpbnNwZWN0QXJyYXlcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvdHlwZWRhcnJheS5qc1xudmFyIGdldEFycmF5TmFtZSA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoKGFycmF5KSA9PiB7XG4gIGlmICh0eXBlb2YgQnVmZmVyID09PSBcImZ1bmN0aW9uXCIgJiYgYXJyYXkgaW5zdGFuY2VvZiBCdWZmZXIpIHtcbiAgICByZXR1cm4gXCJCdWZmZXJcIjtcbiAgfVxuICBpZiAoYXJyYXlbU3ltYm9sLnRvU3RyaW5nVGFnXSkge1xuICAgIHJldHVybiBhcnJheVtTeW1ib2wudG9TdHJpbmdUYWddO1xuICB9XG4gIHJldHVybiBhcnJheS5jb25zdHJ1Y3Rvci5uYW1lO1xufSwgXCJnZXRBcnJheU5hbWVcIik7XG5mdW5jdGlvbiBpbnNwZWN0VHlwZWRBcnJheShhcnJheSwgb3B0aW9ucykge1xuICBjb25zdCBuYW1lID0gZ2V0QXJyYXlOYW1lKGFycmF5KTtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBuYW1lLmxlbmd0aCArIDQ7XG4gIGNvbnN0IG5vbkluZGV4UHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGFycmF5KS5zbGljZShhcnJheS5sZW5ndGgpO1xuICBpZiAoIWFycmF5Lmxlbmd0aCAmJiAhbm9uSW5kZXhQcm9wZXJ0aWVzLmxlbmd0aClcbiAgICByZXR1cm4gYCR7bmFtZX1bXWA7XG4gIGxldCBvdXRwdXQgPSBcIlwiO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgc3RyaW5nID0gYCR7b3B0aW9ucy5zdHlsaXplKHRydW5jYXRlKGFycmF5W2ldLCBvcHRpb25zLnRydW5jYXRlKSwgXCJudW1iZXJcIil9JHtpID09PSBhcnJheS5sZW5ndGggLSAxID8gXCJcIiA6IFwiLCBcIn1gO1xuICAgIG9wdGlvbnMudHJ1bmNhdGUgLT0gc3RyaW5nLmxlbmd0aDtcbiAgICBpZiAoYXJyYXlbaV0gIT09IGFycmF5Lmxlbmd0aCAmJiBvcHRpb25zLnRydW5jYXRlIDw9IDMpIHtcbiAgICAgIG91dHB1dCArPSBgJHt0cnVuY2F0b3J9KCR7YXJyYXkubGVuZ3RoIC0gYXJyYXlbaV0gKyAxfSlgO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIG91dHB1dCArPSBzdHJpbmc7XG4gIH1cbiAgbGV0IHByb3BlcnR5Q29udGVudHMgPSBcIlwiO1xuICBpZiAobm9uSW5kZXhQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgIHByb3BlcnR5Q29udGVudHMgPSBpbnNwZWN0TGlzdChub25JbmRleFByb3BlcnRpZXMubWFwKChrZXkpID0+IFtrZXksIGFycmF5W2tleV1dKSwgb3B0aW9ucywgaW5zcGVjdFByb3BlcnR5KTtcbiAgfVxuICByZXR1cm4gYCR7bmFtZX1bICR7b3V0cHV0fSR7cHJvcGVydHlDb250ZW50cyA/IGAsICR7cHJvcGVydHlDb250ZW50c31gIDogXCJcIn0gXWA7XG59XG5fX25hbWUoaW5zcGVjdFR5cGVkQXJyYXksIFwiaW5zcGVjdFR5cGVkQXJyYXlcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvZGF0ZS5qc1xuZnVuY3Rpb24gaW5zcGVjdERhdGUoZGF0ZU9iamVjdCwgb3B0aW9ucykge1xuICBjb25zdCBzdHJpbmdSZXByZXNlbnRhdGlvbiA9IGRhdGVPYmplY3QudG9KU09OKCk7XG4gIGlmIChzdHJpbmdSZXByZXNlbnRhdGlvbiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBcIkludmFsaWQgRGF0ZVwiO1xuICB9XG4gIGNvbnN0IHNwbGl0ID0gc3RyaW5nUmVwcmVzZW50YXRpb24uc3BsaXQoXCJUXCIpO1xuICBjb25zdCBkYXRlID0gc3BsaXRbMF07XG4gIHJldHVybiBvcHRpb25zLnN0eWxpemUoYCR7ZGF0ZX1UJHt0cnVuY2F0ZShzcGxpdFsxXSwgb3B0aW9ucy50cnVuY2F0ZSAtIGRhdGUubGVuZ3RoIC0gMSl9YCwgXCJkYXRlXCIpO1xufVxuX19uYW1lKGluc3BlY3REYXRlLCBcImluc3BlY3REYXRlXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2Z1bmN0aW9uLmpzXG5mdW5jdGlvbiBpbnNwZWN0RnVuY3Rpb24oZnVuYywgb3B0aW9ucykge1xuICBjb25zdCBmdW5jdGlvblR5cGUgPSBmdW5jW1N5bWJvbC50b1N0cmluZ1RhZ10gfHwgXCJGdW5jdGlvblwiO1xuICBjb25zdCBuYW1lID0gZnVuYy5uYW1lO1xuICBpZiAoIW5hbWUpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKGBbJHtmdW5jdGlvblR5cGV9XWAsIFwic3BlY2lhbFwiKTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKGBbJHtmdW5jdGlvblR5cGV9ICR7dHJ1bmNhdGUobmFtZSwgb3B0aW9ucy50cnVuY2F0ZSAtIDExKX1dYCwgXCJzcGVjaWFsXCIpO1xufVxuX19uYW1lKGluc3BlY3RGdW5jdGlvbiwgXCJpbnNwZWN0RnVuY3Rpb25cIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvbWFwLmpzXG5mdW5jdGlvbiBpbnNwZWN0TWFwRW50cnkoW2tleSwgdmFsdWVdLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gNDtcbiAga2V5ID0gb3B0aW9ucy5pbnNwZWN0KGtleSwgb3B0aW9ucyk7XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0ga2V5Lmxlbmd0aDtcbiAgdmFsdWUgPSBvcHRpb25zLmluc3BlY3QodmFsdWUsIG9wdGlvbnMpO1xuICByZXR1cm4gYCR7a2V5fSA9PiAke3ZhbHVlfWA7XG59XG5fX25hbWUoaW5zcGVjdE1hcEVudHJ5LCBcImluc3BlY3RNYXBFbnRyeVwiKTtcbmZ1bmN0aW9uIG1hcFRvRW50cmllcyhtYXApIHtcbiAgY29uc3QgZW50cmllcyA9IFtdO1xuICBtYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgIGVudHJpZXMucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9KTtcbiAgcmV0dXJuIGVudHJpZXM7XG59XG5fX25hbWUobWFwVG9FbnRyaWVzLCBcIm1hcFRvRW50cmllc1wiKTtcbmZ1bmN0aW9uIGluc3BlY3RNYXAobWFwLCBvcHRpb25zKSB7XG4gIGNvbnN0IHNpemUgPSBtYXAuc2l6ZSAtIDE7XG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gXCJNYXB7fVwiO1xuICB9XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gNztcbiAgcmV0dXJuIGBNYXB7ICR7aW5zcGVjdExpc3QobWFwVG9FbnRyaWVzKG1hcCksIG9wdGlvbnMsIGluc3BlY3RNYXBFbnRyeSl9IH1gO1xufVxuX19uYW1lKGluc3BlY3RNYXAsIFwiaW5zcGVjdE1hcFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9udW1iZXIuanNcbnZhciBpc05hTiA9IE51bWJlci5pc05hTiB8fCAoKGkpID0+IGkgIT09IGkpO1xuZnVuY3Rpb24gaW5zcGVjdE51bWJlcihudW1iZXIsIG9wdGlvbnMpIHtcbiAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKFwiTmFOXCIsIFwibnVtYmVyXCIpO1xuICB9XG4gIGlmIChudW1iZXIgPT09IEluZmluaXR5KSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShcIkluZmluaXR5XCIsIFwibnVtYmVyXCIpO1xuICB9XG4gIGlmIChudW1iZXIgPT09IC1JbmZpbml0eSkge1xuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoXCItSW5maW5pdHlcIiwgXCJudW1iZXJcIik7XG4gIH1cbiAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgIHJldHVybiBvcHRpb25zLnN0eWxpemUoMSAvIG51bWJlciA9PT0gSW5maW5pdHkgPyBcIiswXCIgOiBcIi0wXCIsIFwibnVtYmVyXCIpO1xuICB9XG4gIHJldHVybiBvcHRpb25zLnN0eWxpemUodHJ1bmNhdGUoU3RyaW5nKG51bWJlciksIG9wdGlvbnMudHJ1bmNhdGUpLCBcIm51bWJlclwiKTtcbn1cbl9fbmFtZShpbnNwZWN0TnVtYmVyLCBcImluc3BlY3ROdW1iZXJcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvYmlnaW50LmpzXG5mdW5jdGlvbiBpbnNwZWN0QmlnSW50KG51bWJlciwgb3B0aW9ucykge1xuICBsZXQgbnVtcyA9IHRydW5jYXRlKG51bWJlci50b1N0cmluZygpLCBvcHRpb25zLnRydW5jYXRlIC0gMSk7XG4gIGlmIChudW1zICE9PSB0cnVuY2F0b3IpXG4gICAgbnVtcyArPSBcIm5cIjtcbiAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShudW1zLCBcImJpZ2ludFwiKTtcbn1cbl9fbmFtZShpbnNwZWN0QmlnSW50LCBcImluc3BlY3RCaWdJbnRcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvcmVnZXhwLmpzXG5mdW5jdGlvbiBpbnNwZWN0UmVnRXhwKHZhbHVlLCBvcHRpb25zKSB7XG4gIGNvbnN0IGZsYWdzID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdChcIi9cIilbMl07XG4gIGNvbnN0IHNvdXJjZUxlbmd0aCA9IG9wdGlvbnMudHJ1bmNhdGUgLSAoMiArIGZsYWdzLmxlbmd0aCk7XG4gIGNvbnN0IHNvdXJjZSA9IHZhbHVlLnNvdXJjZTtcbiAgcmV0dXJuIG9wdGlvbnMuc3R5bGl6ZShgLyR7dHJ1bmNhdGUoc291cmNlLCBzb3VyY2VMZW5ndGgpfS8ke2ZsYWdzfWAsIFwicmVnZXhwXCIpO1xufVxuX19uYW1lKGluc3BlY3RSZWdFeHAsIFwiaW5zcGVjdFJlZ0V4cFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9zZXQuanNcbmZ1bmN0aW9uIGFycmF5RnJvbVNldChzZXQyKSB7XG4gIGNvbnN0IHZhbHVlcyA9IFtdO1xuICBzZXQyLmZvckVhY2goKHZhbHVlKSA9PiB7XG4gICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICB9KTtcbiAgcmV0dXJuIHZhbHVlcztcbn1cbl9fbmFtZShhcnJheUZyb21TZXQsIFwiYXJyYXlGcm9tU2V0XCIpO1xuZnVuY3Rpb24gaW5zcGVjdFNldChzZXQyLCBvcHRpb25zKSB7XG4gIGlmIChzZXQyLnNpemUgPT09IDApXG4gICAgcmV0dXJuIFwiU2V0e31cIjtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSA3O1xuICByZXR1cm4gYFNldHsgJHtpbnNwZWN0TGlzdChhcnJheUZyb21TZXQoc2V0MiksIG9wdGlvbnMpfSB9YDtcbn1cbl9fbmFtZShpbnNwZWN0U2V0LCBcImluc3BlY3RTZXRcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvc3RyaW5nLmpzXG52YXIgc3RyaW5nRXNjYXBlQ2hhcnMgPSBuZXcgUmVnRXhwKFwiWydcXFxcdTAwMDAtXFxcXHUwMDFmXFxcXHUwMDdmLVxcXFx1MDA5ZlxcXFx1MDBhZFxcXFx1MDYwMC1cXFxcdTA2MDRcXFxcdTA3MGZcXFxcdTE3YjRcXFxcdTE3YjVcXFxcdTIwMGMtXFxcXHUyMDBmXFxcXHUyMDI4LVxcXFx1MjAyZlxcXFx1MjA2MC1cXFxcdTIwNmZcXFxcdWZlZmZcXFxcdWZmZjAtXFxcXHVmZmZmXVwiLCBcImdcIik7XG52YXIgZXNjYXBlQ2hhcmFjdGVycyA9IHtcbiAgXCJcXGJcIjogXCJcXFxcYlwiLFxuICBcIlx0XCI6IFwiXFxcXHRcIixcbiAgXCJcXG5cIjogXCJcXFxcblwiLFxuICBcIlxcZlwiOiBcIlxcXFxmXCIsXG4gIFwiXFxyXCI6IFwiXFxcXHJcIixcbiAgXCInXCI6IFwiXFxcXCdcIixcbiAgXCJcXFxcXCI6IFwiXFxcXFxcXFxcIlxufTtcbnZhciBoZXggPSAxNjtcbnZhciB1bmljb2RlTGVuZ3RoID0gNDtcbmZ1bmN0aW9uIGVzY2FwZShjaGFyKSB7XG4gIHJldHVybiBlc2NhcGVDaGFyYWN0ZXJzW2NoYXJdIHx8IGBcXFxcdSR7YDAwMDAke2NoYXIuY2hhckNvZGVBdCgwKS50b1N0cmluZyhoZXgpfWAuc2xpY2UoLXVuaWNvZGVMZW5ndGgpfWA7XG59XG5fX25hbWUoZXNjYXBlLCBcImVzY2FwZVwiKTtcbmZ1bmN0aW9uIGluc3BlY3RTdHJpbmcoc3RyaW5nLCBvcHRpb25zKSB7XG4gIGlmIChzdHJpbmdFc2NhcGVDaGFycy50ZXN0KHN0cmluZykpIHtcbiAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShzdHJpbmdFc2NhcGVDaGFycywgZXNjYXBlKTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucy5zdHlsaXplKGAnJHt0cnVuY2F0ZShzdHJpbmcsIG9wdGlvbnMudHJ1bmNhdGUgLSAyKX0nYCwgXCJzdHJpbmdcIik7XG59XG5fX25hbWUoaW5zcGVjdFN0cmluZywgXCJpbnNwZWN0U3RyaW5nXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL3N5bWJvbC5qc1xuZnVuY3Rpb24gaW5zcGVjdFN5bWJvbCh2YWx1ZSkge1xuICBpZiAoXCJkZXNjcmlwdGlvblwiIGluIFN5bWJvbC5wcm90b3R5cGUpIHtcbiAgICByZXR1cm4gdmFsdWUuZGVzY3JpcHRpb24gPyBgU3ltYm9sKCR7dmFsdWUuZGVzY3JpcHRpb259KWAgOiBcIlN5bWJvbCgpXCI7XG4gIH1cbiAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG59XG5fX25hbWUoaW5zcGVjdFN5bWJvbCwgXCJpbnNwZWN0U3ltYm9sXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL3Byb21pc2UuanNcbnZhciBnZXRQcm9taXNlVmFsdWUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCgpID0+IFwiUHJvbWlzZXtcXHUyMDI2fVwiLCBcImdldFByb21pc2VWYWx1ZVwiKTtcbnRyeSB7XG4gIGNvbnN0IHsgZ2V0UHJvbWlzZURldGFpbHMsIGtQZW5kaW5nLCBrUmVqZWN0ZWQgfSA9IHByb2Nlc3MuYmluZGluZyhcInV0aWxcIik7XG4gIGlmIChBcnJheS5pc0FycmF5KGdldFByb21pc2VEZXRhaWxzKFByb21pc2UucmVzb2x2ZSgpKSkpIHtcbiAgICBnZXRQcm9taXNlVmFsdWUgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh2YWx1ZSwgb3B0aW9ucykgPT4ge1xuICAgICAgY29uc3QgW3N0YXRlLCBpbm5lclZhbHVlXSA9IGdldFByb21pc2VEZXRhaWxzKHZhbHVlKTtcbiAgICAgIGlmIChzdGF0ZSA9PT0ga1BlbmRpbmcpIHtcbiAgICAgICAgcmV0dXJuIFwiUHJvbWlzZXs8cGVuZGluZz59XCI7XG4gICAgICB9XG4gICAgICByZXR1cm4gYFByb21pc2Uke3N0YXRlID09PSBrUmVqZWN0ZWQgPyBcIiFcIiA6IFwiXCJ9eyR7b3B0aW9ucy5pbnNwZWN0KGlubmVyVmFsdWUsIG9wdGlvbnMpfX1gO1xuICAgIH0sIFwiZ2V0UHJvbWlzZVZhbHVlXCIpO1xuICB9XG59IGNhdGNoIChub3ROb2RlKSB7XG59XG52YXIgcHJvbWlzZV9kZWZhdWx0ID0gZ2V0UHJvbWlzZVZhbHVlO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL29iamVjdC5qc1xuZnVuY3Rpb24gaW5zcGVjdE9iamVjdChvYmplY3QsIG9wdGlvbnMpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7XG4gIGNvbnN0IHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpIDogW107XG4gIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCAmJiBzeW1ib2xzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBcInt9XCI7XG4gIH1cbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSA0O1xuICBvcHRpb25zLnNlZW4gPSBvcHRpb25zLnNlZW4gfHwgW107XG4gIGlmIChvcHRpb25zLnNlZW4uaW5jbHVkZXMob2JqZWN0KSkge1xuICAgIHJldHVybiBcIltDaXJjdWxhcl1cIjtcbiAgfVxuICBvcHRpb25zLnNlZW4ucHVzaChvYmplY3QpO1xuICBjb25zdCBwcm9wZXJ0eUNvbnRlbnRzID0gaW5zcGVjdExpc3QocHJvcGVydGllcy5tYXAoKGtleSkgPT4gW2tleSwgb2JqZWN0W2tleV1dKSwgb3B0aW9ucywgaW5zcGVjdFByb3BlcnR5KTtcbiAgY29uc3Qgc3ltYm9sQ29udGVudHMgPSBpbnNwZWN0TGlzdChzeW1ib2xzLm1hcCgoa2V5KSA9PiBba2V5LCBvYmplY3Rba2V5XV0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICBvcHRpb25zLnNlZW4ucG9wKCk7XG4gIGxldCBzZXAgPSBcIlwiO1xuICBpZiAocHJvcGVydHlDb250ZW50cyAmJiBzeW1ib2xDb250ZW50cykge1xuICAgIHNlcCA9IFwiLCBcIjtcbiAgfVxuICByZXR1cm4gYHsgJHtwcm9wZXJ0eUNvbnRlbnRzfSR7c2VwfSR7c3ltYm9sQ29udGVudHN9IH1gO1xufVxuX19uYW1lKGluc3BlY3RPYmplY3QsIFwiaW5zcGVjdE9iamVjdFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9jbGFzcy5qc1xudmFyIHRvU3RyaW5nVGFnID0gdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wudG9TdHJpbmdUYWcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBmYWxzZTtcbmZ1bmN0aW9uIGluc3BlY3RDbGFzcyh2YWx1ZSwgb3B0aW9ucykge1xuICBsZXQgbmFtZSA9IFwiXCI7XG4gIGlmICh0b1N0cmluZ1RhZyAmJiB0b1N0cmluZ1RhZyBpbiB2YWx1ZSkge1xuICAgIG5hbWUgPSB2YWx1ZVt0b1N0cmluZ1RhZ107XG4gIH1cbiAgbmFtZSA9IG5hbWUgfHwgdmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKCFuYW1lIHx8IG5hbWUgPT09IFwiX2NsYXNzXCIpIHtcbiAgICBuYW1lID0gXCI8QW5vbnltb3VzIENsYXNzPlwiO1xuICB9XG4gIG9wdGlvbnMudHJ1bmNhdGUgLT0gbmFtZS5sZW5ndGg7XG4gIHJldHVybiBgJHtuYW1lfSR7aW5zcGVjdE9iamVjdCh2YWx1ZSwgb3B0aW9ucyl9YDtcbn1cbl9fbmFtZShpbnNwZWN0Q2xhc3MsIFwiaW5zcGVjdENsYXNzXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2FyZ3VtZW50cy5qc1xuZnVuY3Rpb24gaW5zcGVjdEFyZ3VtZW50cyhhcmdzLCBvcHRpb25zKSB7XG4gIGlmIChhcmdzLmxlbmd0aCA9PT0gMClcbiAgICByZXR1cm4gXCJBcmd1bWVudHNbXVwiO1xuICBvcHRpb25zLnRydW5jYXRlIC09IDEzO1xuICByZXR1cm4gYEFyZ3VtZW50c1sgJHtpbnNwZWN0TGlzdChhcmdzLCBvcHRpb25zKX0gXWA7XG59XG5fX25hbWUoaW5zcGVjdEFyZ3VtZW50cywgXCJpbnNwZWN0QXJndW1lbnRzXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvbG91cGUvbGliL2Vycm9yLmpzXG52YXIgZXJyb3JLZXlzID0gW1xuICBcInN0YWNrXCIsXG4gIFwibGluZVwiLFxuICBcImNvbHVtblwiLFxuICBcIm5hbWVcIixcbiAgXCJtZXNzYWdlXCIsXG4gIFwiZmlsZU5hbWVcIixcbiAgXCJsaW5lTnVtYmVyXCIsXG4gIFwiY29sdW1uTnVtYmVyXCIsXG4gIFwibnVtYmVyXCIsXG4gIFwiZGVzY3JpcHRpb25cIixcbiAgXCJjYXVzZVwiXG5dO1xuZnVuY3Rpb24gaW5zcGVjdE9iamVjdDIoZXJyb3IsIG9wdGlvbnMpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9yKS5maWx0ZXIoKGtleSkgPT4gZXJyb3JLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEpO1xuICBjb25zdCBuYW1lID0gZXJyb3IubmFtZTtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBuYW1lLmxlbmd0aDtcbiAgbGV0IG1lc3NhZ2UgPSBcIlwiO1xuICBpZiAodHlwZW9mIGVycm9yLm1lc3NhZ2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICBtZXNzYWdlID0gdHJ1bmNhdGUoZXJyb3IubWVzc2FnZSwgb3B0aW9ucy50cnVuY2F0ZSk7XG4gIH0gZWxzZSB7XG4gICAgcHJvcGVydGllcy51bnNoaWZ0KFwibWVzc2FnZVwiKTtcbiAgfVxuICBtZXNzYWdlID0gbWVzc2FnZSA/IGA6ICR7bWVzc2FnZX1gIDogXCJcIjtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBtZXNzYWdlLmxlbmd0aCArIDU7XG4gIG9wdGlvbnMuc2VlbiA9IG9wdGlvbnMuc2VlbiB8fCBbXTtcbiAgaWYgKG9wdGlvbnMuc2Vlbi5pbmNsdWRlcyhlcnJvcikpIHtcbiAgICByZXR1cm4gXCJbQ2lyY3VsYXJdXCI7XG4gIH1cbiAgb3B0aW9ucy5zZWVuLnB1c2goZXJyb3IpO1xuICBjb25zdCBwcm9wZXJ0eUNvbnRlbnRzID0gaW5zcGVjdExpc3QocHJvcGVydGllcy5tYXAoKGtleSkgPT4gW2tleSwgZXJyb3Jba2V5XV0pLCBvcHRpb25zLCBpbnNwZWN0UHJvcGVydHkpO1xuICByZXR1cm4gYCR7bmFtZX0ke21lc3NhZ2V9JHtwcm9wZXJ0eUNvbnRlbnRzID8gYCB7ICR7cHJvcGVydHlDb250ZW50c30gfWAgOiBcIlwifWA7XG59XG5fX25hbWUoaW5zcGVjdE9iamVjdDIsIFwiaW5zcGVjdE9iamVjdFwiKTtcblxuLy8gbm9kZV9tb2R1bGVzL2xvdXBlL2xpYi9odG1sLmpzXG5mdW5jdGlvbiBpbnNwZWN0QXR0cmlidXRlKFtrZXksIHZhbHVlXSwgb3B0aW9ucykge1xuICBvcHRpb25zLnRydW5jYXRlIC09IDM7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gYCR7b3B0aW9ucy5zdHlsaXplKFN0cmluZyhrZXkpLCBcInllbGxvd1wiKX1gO1xuICB9XG4gIHJldHVybiBgJHtvcHRpb25zLnN0eWxpemUoU3RyaW5nKGtleSksIFwieWVsbG93XCIpfT0ke29wdGlvbnMuc3R5bGl6ZShgXCIke3ZhbHVlfVwiYCwgXCJzdHJpbmdcIil9YDtcbn1cbl9fbmFtZShpbnNwZWN0QXR0cmlidXRlLCBcImluc3BlY3RBdHRyaWJ1dGVcIik7XG5mdW5jdGlvbiBpbnNwZWN0SFRNTENvbGxlY3Rpb24oY29sbGVjdGlvbiwgb3B0aW9ucykge1xuICByZXR1cm4gaW5zcGVjdExpc3QoY29sbGVjdGlvbiwgb3B0aW9ucywgaW5zcGVjdEhUTUwsIFwiXFxuXCIpO1xufVxuX19uYW1lKGluc3BlY3RIVE1MQ29sbGVjdGlvbiwgXCJpbnNwZWN0SFRNTENvbGxlY3Rpb25cIik7XG5mdW5jdGlvbiBpbnNwZWN0SFRNTChlbGVtZW50LCBvcHRpb25zKSB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZU5hbWVzKCk7XG4gIGNvbnN0IG5hbWUgPSBlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgaGVhZCA9IG9wdGlvbnMuc3R5bGl6ZShgPCR7bmFtZX1gLCBcInNwZWNpYWxcIik7XG4gIGNvbnN0IGhlYWRDbG9zZSA9IG9wdGlvbnMuc3R5bGl6ZShgPmAsIFwic3BlY2lhbFwiKTtcbiAgY29uc3QgdGFpbCA9IG9wdGlvbnMuc3R5bGl6ZShgPC8ke25hbWV9PmAsIFwic3BlY2lhbFwiKTtcbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBuYW1lLmxlbmd0aCAqIDIgKyA1O1xuICBsZXQgcHJvcGVydHlDb250ZW50cyA9IFwiXCI7XG4gIGlmIChwcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcbiAgICBwcm9wZXJ0eUNvbnRlbnRzICs9IFwiIFwiO1xuICAgIHByb3BlcnR5Q29udGVudHMgKz0gaW5zcGVjdExpc3QocHJvcGVydGllcy5tYXAoKGtleSkgPT4gW2tleSwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoa2V5KV0pLCBvcHRpb25zLCBpbnNwZWN0QXR0cmlidXRlLCBcIiBcIik7XG4gIH1cbiAgb3B0aW9ucy50cnVuY2F0ZSAtPSBwcm9wZXJ0eUNvbnRlbnRzLmxlbmd0aDtcbiAgY29uc3QgdHJ1bmNhdGUyID0gb3B0aW9ucy50cnVuY2F0ZTtcbiAgbGV0IGNoaWxkcmVuID0gaW5zcGVjdEhUTUxDb2xsZWN0aW9uKGVsZW1lbnQuY2hpbGRyZW4sIG9wdGlvbnMpO1xuICBpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoID4gdHJ1bmNhdGUyKSB7XG4gICAgY2hpbGRyZW4gPSBgJHt0cnVuY2F0b3J9KCR7ZWxlbWVudC5jaGlsZHJlbi5sZW5ndGh9KWA7XG4gIH1cbiAgcmV0dXJuIGAke2hlYWR9JHtwcm9wZXJ0eUNvbnRlbnRzfSR7aGVhZENsb3NlfSR7Y2hpbGRyZW59JHt0YWlsfWA7XG59XG5fX25hbWUoaW5zcGVjdEhUTUwsIFwiaW5zcGVjdEhUTUxcIik7XG5cbi8vIG5vZGVfbW9kdWxlcy9sb3VwZS9saWIvaW5kZXguanNcbnZhciBzeW1ib2xzU3VwcG9ydGVkID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuZm9yID09PSBcImZ1bmN0aW9uXCI7XG52YXIgY2hhaUluc3BlY3QgPSBzeW1ib2xzU3VwcG9ydGVkID8gU3ltYm9sLmZvcihcImNoYWkvaW5zcGVjdFwiKSA6IFwiQEBjaGFpL2luc3BlY3RcIjtcbnZhciBub2RlSW5zcGVjdCA9IGZhbHNlO1xudHJ5IHtcbiAgY29uc3Qgbm9kZVV0aWwgPSByZXF1aXJlX3V0aWwoKTtcbiAgbm9kZUluc3BlY3QgPSBub2RlVXRpbC5pbnNwZWN0ID8gbm9kZVV0aWwuaW5zcGVjdC5jdXN0b20gOiBmYWxzZTtcbn0gY2F0Y2ggKG5vTm9kZUluc3BlY3QpIHtcbiAgbm9kZUluc3BlY3QgPSBmYWxzZTtcbn1cbnZhciBjb25zdHJ1Y3Rvck1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIHN0cmluZ1RhZ01hcCA9IHt9O1xudmFyIGJhc2VUeXBlc01hcCA9IHtcbiAgdW5kZWZpbmVkOiAodmFsdWUsIG9wdGlvbnMpID0+IG9wdGlvbnMuc3R5bGl6ZShcInVuZGVmaW5lZFwiLCBcInVuZGVmaW5lZFwiKSxcbiAgbnVsbDogKHZhbHVlLCBvcHRpb25zKSA9PiBvcHRpb25zLnN0eWxpemUoXCJudWxsXCIsIFwibnVsbFwiKSxcbiAgYm9vbGVhbjogKHZhbHVlLCBvcHRpb25zKSA9PiBvcHRpb25zLnN0eWxpemUoU3RyaW5nKHZhbHVlKSwgXCJib29sZWFuXCIpLFxuICBCb29sZWFuOiAodmFsdWUsIG9wdGlvbnMpID0+IG9wdGlvbnMuc3R5bGl6ZShTdHJpbmcodmFsdWUpLCBcImJvb2xlYW5cIiksXG4gIG51bWJlcjogaW5zcGVjdE51bWJlcixcbiAgTnVtYmVyOiBpbnNwZWN0TnVtYmVyLFxuICBiaWdpbnQ6IGluc3BlY3RCaWdJbnQsXG4gIEJpZ0ludDogaW5zcGVjdEJpZ0ludCxcbiAgc3RyaW5nOiBpbnNwZWN0U3RyaW5nLFxuICBTdHJpbmc6IGluc3BlY3RTdHJpbmcsXG4gIGZ1bmN0aW9uOiBpbnNwZWN0RnVuY3Rpb24sXG4gIEZ1bmN0aW9uOiBpbnNwZWN0RnVuY3Rpb24sXG4gIHN5bWJvbDogaW5zcGVjdFN5bWJvbCxcbiAgLy8gQSBTeW1ib2wgcG9seWZpbGwgd2lsbCByZXR1cm4gYFN5bWJvbGAgbm90IGBzeW1ib2xgIGZyb20gdHlwZWRldGVjdFxuICBTeW1ib2w6IGluc3BlY3RTeW1ib2wsXG4gIEFycmF5OiBpbnNwZWN0QXJyYXksXG4gIERhdGU6IGluc3BlY3REYXRlLFxuICBNYXA6IGluc3BlY3RNYXAsXG4gIFNldDogaW5zcGVjdFNldCxcbiAgUmVnRXhwOiBpbnNwZWN0UmVnRXhwLFxuICBQcm9taXNlOiBwcm9taXNlX2RlZmF1bHQsXG4gIC8vIFdlYWtTZXQsIFdlYWtNYXAgYXJlIHRvdGFsbHkgb3BhcXVlIHRvIHVzXG4gIFdlYWtTZXQ6ICh2YWx1ZSwgb3B0aW9ucykgPT4gb3B0aW9ucy5zdHlsaXplKFwiV2Vha1NldHtcXHUyMDI2fVwiLCBcInNwZWNpYWxcIiksXG4gIFdlYWtNYXA6ICh2YWx1ZSwgb3B0aW9ucykgPT4gb3B0aW9ucy5zdHlsaXplKFwiV2Vha01hcHtcXHUyMDI2fVwiLCBcInNwZWNpYWxcIiksXG4gIEFyZ3VtZW50czogaW5zcGVjdEFyZ3VtZW50cyxcbiAgSW50OEFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgVWludDhBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gIFVpbnQ4Q2xhbXBlZEFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgSW50MTZBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gIFVpbnQxNkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgSW50MzJBcnJheTogaW5zcGVjdFR5cGVkQXJyYXksXG4gIFVpbnQzMkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgRmxvYXQzMkFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgRmxvYXQ2NEFycmF5OiBpbnNwZWN0VHlwZWRBcnJheSxcbiAgR2VuZXJhdG9yOiAoKSA9PiBcIlwiLFxuICBEYXRhVmlldzogKCkgPT4gXCJcIixcbiAgQXJyYXlCdWZmZXI6ICgpID0+IFwiXCIsXG4gIEVycm9yOiBpbnNwZWN0T2JqZWN0MixcbiAgSFRNTENvbGxlY3Rpb246IGluc3BlY3RIVE1MQ29sbGVjdGlvbixcbiAgTm9kZUxpc3Q6IGluc3BlY3RIVE1MQ29sbGVjdGlvblxufTtcbnZhciBpbnNwZWN0Q3VzdG9tID0gLyogQF9fUFVSRV9fICovIF9fbmFtZSgodmFsdWUsIG9wdGlvbnMsIHR5cGUzKSA9PiB7XG4gIGlmIChjaGFpSW5zcGVjdCBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWVbY2hhaUluc3BlY3RdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdmFsdWVbY2hhaUluc3BlY3RdKG9wdGlvbnMpO1xuICB9XG4gIGlmIChub2RlSW5zcGVjdCAmJiBub2RlSW5zcGVjdCBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWVbbm9kZUluc3BlY3RdID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gdmFsdWVbbm9kZUluc3BlY3RdKG9wdGlvbnMuZGVwdGgsIG9wdGlvbnMpO1xuICB9XG4gIGlmIChcImluc3BlY3RcIiBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUuaW5zcGVjdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgcmV0dXJuIHZhbHVlLmluc3BlY3Qob3B0aW9ucy5kZXB0aCwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKFwiY29uc3RydWN0b3JcIiBpbiB2YWx1ZSAmJiBjb25zdHJ1Y3Rvck1hcC5oYXModmFsdWUuY29uc3RydWN0b3IpKSB7XG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yTWFwLmdldCh2YWx1ZS5jb25zdHJ1Y3RvcikodmFsdWUsIG9wdGlvbnMpO1xuICB9XG4gIGlmIChzdHJpbmdUYWdNYXBbdHlwZTNdKSB7XG4gICAgcmV0dXJuIHN0cmluZ1RhZ01hcFt0eXBlM10odmFsdWUsIG9wdGlvbnMpO1xuICB9XG4gIHJldHVybiBcIlwiO1xufSwgXCJpbnNwZWN0Q3VzdG9tXCIpO1xudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbmZ1bmN0aW9uIGluc3BlY3QodmFsdWUsIG9wdHMgPSB7fSkge1xuICBjb25zdCBvcHRpb25zID0gbm9ybWFsaXNlT3B0aW9ucyhvcHRzLCBpbnNwZWN0KTtcbiAgY29uc3QgeyBjdXN0b21JbnNwZWN0IH0gPSBvcHRpb25zO1xuICBsZXQgdHlwZTMgPSB2YWx1ZSA9PT0gbnVsbCA/IFwibnVsbFwiIDogdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZTMgPT09IFwib2JqZWN0XCIpIHtcbiAgICB0eXBlMyA9IHRvU3RyaW5nLmNhbGwodmFsdWUpLnNsaWNlKDgsIC0xKTtcbiAgfVxuICBpZiAodHlwZTMgaW4gYmFzZVR5cGVzTWFwKSB7XG4gICAgcmV0dXJuIGJhc2VUeXBlc01hcFt0eXBlM10odmFsdWUsIG9wdGlvbnMpO1xuICB9XG4gIGlmIChjdXN0b21JbnNwZWN0ICYmIHZhbHVlKSB7XG4gICAgY29uc3Qgb3V0cHV0ID0gaW5zcGVjdEN1c3RvbSh2YWx1ZSwgb3B0aW9ucywgdHlwZTMpO1xuICAgIGlmIChvdXRwdXQpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3V0cHV0ID09PSBcInN0cmluZ1wiKVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgcmV0dXJuIGluc3BlY3Qob3V0cHV0LCBvcHRpb25zKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcHJvdG8gPSB2YWx1ZSA/IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgOiBmYWxzZTtcbiAgaWYgKHByb3RvID09PSBPYmplY3QucHJvdG90eXBlIHx8IHByb3RvID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGluc3BlY3RPYmplY3QodmFsdWUsIG9wdGlvbnMpO1xuICB9XG4gIGlmICh2YWx1ZSAmJiB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwiZnVuY3Rpb25cIiAmJiB2YWx1ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgcmV0dXJuIGluc3BlY3RIVE1MKHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuICBpZiAoXCJjb25zdHJ1Y3RvclwiIGluIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlLmNvbnN0cnVjdG9yICE9PSBPYmplY3QpIHtcbiAgICAgIHJldHVybiBpbnNwZWN0Q2xhc3ModmFsdWUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gaW5zcGVjdE9iamVjdCh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cbiAgaWYgKHZhbHVlID09PSBPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGluc3BlY3RPYmplY3QodmFsdWUsIG9wdGlvbnMpO1xuICB9XG4gIHJldHVybiBvcHRpb25zLnN0eWxpemUoU3RyaW5nKHZhbHVlKSwgdHlwZTMpO1xufVxuX19uYW1lKGluc3BlY3QsIFwiaW5zcGVjdFwiKTtcblxuLy8gbGliL2NoYWkvY29uZmlnLmpzXG52YXIgY29uZmlnID0ge1xuICAvKipcbiAgICogIyMjIGNvbmZpZy5pbmNsdWRlU3RhY2tcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGluZmx1ZW5jZXMgd2hldGhlciBzdGFjayB0cmFjZVxuICAgKiBpcyBpbmNsdWRlZCBpbiBBc3NlcnRpb24gZXJyb3IgbWVzc2FnZS4gRGVmYXVsdCBvZiBmYWxzZVxuICAgKiBzdXBwcmVzc2VzIHN0YWNrIHRyYWNlIGluIHRoZSBlcnJvciBtZXNzYWdlLlxuICAgKlxuICAgKiAgICAgY2hhaS5jb25maWcuaW5jbHVkZVN0YWNrID0gdHJ1ZTsgIC8vIGVuYWJsZSBzdGFjayBvbiBlcnJvclxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59XG4gICAqIEBwdWJsaWNcbiAgICovXG4gIGluY2x1ZGVTdGFjazogZmFsc2UsXG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLnNob3dEaWZmXG4gICAqXG4gICAqIFVzZXIgY29uZmlndXJhYmxlIHByb3BlcnR5LCBpbmZsdWVuY2VzIHdoZXRoZXIgb3Igbm90XG4gICAqIHRoZSBgc2hvd0RpZmZgIGZsYWcgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSB0aHJvd25cbiAgICogQXNzZXJ0aW9uRXJyb3JzLiBgZmFsc2VgIHdpbGwgYWx3YXlzIGJlIGBmYWxzZWA7IGB0cnVlYFxuICAgKiB3aWxsIGJlIHRydWUgd2hlbiB0aGUgYXNzZXJ0aW9uIGhhcyByZXF1ZXN0ZWQgYSBkaWZmXG4gICAqIGJlIHNob3duLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59XG4gICAqIEBwdWJsaWNcbiAgICovXG4gIHNob3dEaWZmOiB0cnVlLFxuICAvKipcbiAgICogIyMjIGNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZFxuICAgKlxuICAgKiBVc2VyIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0eSwgc2V0cyBsZW5ndGggdGhyZXNob2xkIGZvciBhY3R1YWwgYW5kXG4gICAqIGV4cGVjdGVkIHZhbHVlcyBpbiBhc3NlcnRpb24gZXJyb3JzLiBJZiB0aGlzIHRocmVzaG9sZCBpcyBleGNlZWRlZCwgZm9yXG4gICAqIGV4YW1wbGUgZm9yIGxhcmdlIGRhdGEgc3RydWN0dXJlcywgdGhlIHZhbHVlIGlzIHJlcGxhY2VkIHdpdGggc29tZXRoaW5nXG4gICAqIGxpa2UgYFsgQXJyYXkoMykgXWAgb3IgYHsgT2JqZWN0IChwcm9wMSwgcHJvcDIpIH1gLlxuICAgKlxuICAgKiBTZXQgaXQgdG8gemVybyBpZiB5b3Ugd2FudCB0byBkaXNhYmxlIHRydW5jYXRpbmcgYWx0b2dldGhlci5cbiAgICpcbiAgICogVGhpcyBpcyBlc3BlY2lhbGx5IHVzZXJmdWwgd2hlbiBkb2luZyBhc3NlcnRpb25zIG9uIGFycmF5czogaGF2aW5nIHRoaXNcbiAgICogc2V0IHRvIGEgcmVhc29uYWJsZSBsYXJnZSB2YWx1ZSBtYWtlcyB0aGUgZmFpbHVyZSBtZXNzYWdlcyByZWFkaWx5XG4gICAqIGluc3BlY3RhYmxlLlxuICAgKlxuICAgKiAgICAgY2hhaS5jb25maWcudHJ1bmNhdGVUaHJlc2hvbGQgPSAwOyAgLy8gZGlzYWJsZSB0cnVuY2F0aW5nXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfVxuICAgKiBAcHVibGljXG4gICAqL1xuICB0cnVuY2F0ZVRocmVzaG9sZDogNDAsXG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLnVzZVByb3h5XG4gICAqXG4gICAqIFVzZXIgY29uZmlndXJhYmxlIHByb3BlcnR5LCBkZWZpbmVzIGlmIGNoYWkgd2lsbCB1c2UgYSBQcm94eSB0byB0aHJvd1xuICAgKiBhbiBlcnJvciB3aGVuIGEgbm9uLWV4aXN0ZW50IHByb3BlcnR5IGlzIHJlYWQsIHdoaWNoIHByb3RlY3RzIHVzZXJzXG4gICAqIGZyb20gdHlwb3Mgd2hlbiB1c2luZyBwcm9wZXJ0eS1iYXNlZCBhc3NlcnRpb25zLlxuICAgKlxuICAgKiBTZXQgaXQgdG8gZmFsc2UgaWYgeW91IHdhbnQgdG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUuXG4gICAqXG4gICAqICAgICBjaGFpLmNvbmZpZy51c2VQcm94eSA9IGZhbHNlOyAgLy8gZGlzYWJsZSB1c2Ugb2YgUHJveHlcbiAgICpcbiAgICogVGhpcyBmZWF0dXJlIGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgcmVnYXJkbGVzcyBvZiB0aGlzIGNvbmZpZyB2YWx1ZVxuICAgKiBpbiBlbnZpcm9ubWVudHMgdGhhdCBkb24ndCBzdXBwb3J0IHByb3hpZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn1cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgdXNlUHJveHk6IHRydWUsXG4gIC8qKlxuICAgKiAjIyMgY29uZmlnLnByb3h5RXhjbHVkZWRLZXlzXG4gICAqXG4gICAqIFVzZXIgY29uZmlndXJhYmxlIHByb3BlcnR5LCBkZWZpbmVzIHdoaWNoIHByb3BlcnRpZXMgc2hvdWxkIGJlIGlnbm9yZWRcbiAgICogaW5zdGVhZCBvZiB0aHJvd2luZyBhbiBlcnJvciBpZiB0aGV5IGRvIG5vdCBleGlzdCBvbiB0aGUgYXNzZXJ0aW9uLlxuICAgKiBUaGlzIGlzIG9ubHkgYXBwbGllZCBpZiB0aGUgZW52aXJvbm1lbnQgQ2hhaSBpcyBydW5uaW5nIGluIHN1cHBvcnRzIHByb3hpZXMgYW5kXG4gICAqIGlmIHRoZSBgdXNlUHJveHlgIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBpcyBlbmFibGVkLlxuICAgKiBCeSBkZWZhdWx0LCBgdGhlbmAgYW5kIGBpbnNwZWN0YCB3aWxsIG5vdCB0aHJvdyBhbiBlcnJvciBpZiB0aGV5IGRvIG5vdCBleGlzdCBvbiB0aGVcbiAgICogYXNzZXJ0aW9uIG9iamVjdCBiZWNhdXNlIHRoZSBgLmluc3BlY3RgIHByb3BlcnR5IGlzIHJlYWQgYnkgYHV0aWwuaW5zcGVjdGAgKGZvciBleGFtcGxlLCB3aGVuXG4gICAqIHVzaW5nIGBjb25zb2xlLmxvZ2Agb24gdGhlIGFzc2VydGlvbiBvYmplY3QpIGFuZCBgLnRoZW5gIGlzIG5lY2Vzc2FyeSBmb3IgcHJvbWlzZSB0eXBlLWNoZWNraW5nLlxuICAgKlxuICAgKiAgICAgLy8gQnkgZGVmYXVsdCB0aGVzZSBrZXlzIHdpbGwgbm90IHRocm93IGFuIGVycm9yIGlmIHRoZXkgZG8gbm90IGV4aXN0IG9uIHRoZSBhc3NlcnRpb24gb2JqZWN0XG4gICAqICAgICBjaGFpLmNvbmZpZy5wcm94eUV4Y2x1ZGVkS2V5cyA9IFsndGhlbicsICdpbnNwZWN0J107XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9XG4gICAqIEBwdWJsaWNcbiAgICovXG4gIHByb3h5RXhjbHVkZWRLZXlzOiBbXCJ0aGVuXCIsIFwiY2F0Y2hcIiwgXCJpbnNwZWN0XCIsIFwidG9KU09OXCJdLFxuICAvKipcbiAgICogIyMjIGNvbmZpZy5kZWVwRXF1YWxcbiAgICpcbiAgICogVXNlciBjb25maWd1cmFibGUgcHJvcGVydHksIGRlZmluZXMgd2hpY2ggYSBjdXN0b20gZnVuY3Rpb24gdG8gdXNlIGZvciBkZWVwRXF1YWxcbiAgICogY29tcGFyaXNvbnMuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBmdW5jdGlvbiB1c2VkIGlzIHRoZSBvbmUgZnJvbSB0aGUgYGRlZXAtZXFsYCBwYWNrYWdlIHdpdGhvdXQgY3VzdG9tIGNvbXBhcmF0b3IuXG4gICAqXG4gICAqICAgICAvLyB1c2UgYSBjdXN0b20gY29tcGFyYXRvclxuICAgKiAgICAgY2hhaS5jb25maWcuZGVlcEVxdWFsID0gKGV4cGVjdGVkLCBhY3R1YWwpID0+IHtcbiAgICogICAgICAgICByZXR1cm4gY2hhaS51dGlsLmVxbChleHBlY3RlZCwgYWN0dWFsLCB7XG4gICAqICAgICAgICAgICAgIGNvbXBhcmF0b3I6IChleHBlY3RlZCwgYWN0dWFsKSA9PiB7XG4gICAqICAgICAgICAgICAgICAgICAvLyBmb3Igbm9uIG51bWJlciBjb21wYXJpc29uLCB1c2UgdGhlIGRlZmF1bHQgYmVoYXZpb3JcbiAgICogICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBleHBlY3RlZCAhPT0gJ251bWJlcicpIHJldHVybiBudWxsO1xuICAgKiAgICAgICAgICAgICAgICAgLy8gYWxsb3cgYSBkaWZmZXJlbmNlIG9mIDEwIGJldHdlZW4gY29tcGFyZWQgbnVtYmVyc1xuICAgKiAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhY3R1YWwgPT09ICdudW1iZXInICYmIE1hdGguYWJzKGFjdHVhbCAtIGV4cGVjdGVkKSA8IDEwXG4gICAqICAgICAgICAgICAgIH1cbiAgICogICAgICAgICB9KVxuICAgKiAgICAgfTtcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn1cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgZGVlcEVxdWFsOiBudWxsXG59O1xuXG4vLyBsaWIvY2hhaS91dGlscy9pbnNwZWN0LmpzXG5mdW5jdGlvbiBpbnNwZWN0MihvYmosIHNob3dIaWRkZW4sIGRlcHRoLCBjb2xvcnMpIHtcbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgY29sb3JzLFxuICAgIGRlcHRoOiB0eXBlb2YgZGVwdGggPT09IFwidW5kZWZpbmVkXCIgPyAyIDogZGVwdGgsXG4gICAgc2hvd0hpZGRlbixcbiAgICB0cnVuY2F0ZTogY29uZmlnLnRydW5jYXRlVGhyZXNob2xkID8gY29uZmlnLnRydW5jYXRlVGhyZXNob2xkIDogSW5maW5pdHlcbiAgfTtcbiAgcmV0dXJuIGluc3BlY3Qob2JqLCBvcHRpb25zKTtcbn1cbl9fbmFtZShpbnNwZWN0MiwgXCJpbnNwZWN0XCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9vYmpEaXNwbGF5LmpzXG5mdW5jdGlvbiBvYmpEaXNwbGF5KG9iaikge1xuICB2YXIgc3RyID0gaW5zcGVjdDIob2JqKSwgdHlwZTMgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKTtcbiAgaWYgKGNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZCAmJiBzdHIubGVuZ3RoID49IGNvbmZpZy50cnVuY2F0ZVRocmVzaG9sZCkge1xuICAgIGlmICh0eXBlMyA9PT0gXCJbb2JqZWN0IEZ1bmN0aW9uXVwiKSB7XG4gICAgICByZXR1cm4gIW9iai5uYW1lIHx8IG9iai5uYW1lID09PSBcIlwiID8gXCJbRnVuY3Rpb25dXCIgOiBcIltGdW5jdGlvbjogXCIgKyBvYmoubmFtZSArIFwiXVwiO1xuICAgIH0gZWxzZSBpZiAodHlwZTMgPT09IFwiW29iamVjdCBBcnJheV1cIikge1xuICAgICAgcmV0dXJuIFwiWyBBcnJheShcIiArIG9iai5sZW5ndGggKyBcIikgXVwiO1xuICAgIH0gZWxzZSBpZiAodHlwZTMgPT09IFwiW29iamVjdCBPYmplY3RdXCIpIHtcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKSwga3N0ciA9IGtleXMubGVuZ3RoID4gMiA/IGtleXMuc3BsaWNlKDAsIDIpLmpvaW4oXCIsIFwiKSArIFwiLCAuLi5cIiA6IGtleXMuam9pbihcIiwgXCIpO1xuICAgICAgcmV0dXJuIFwieyBPYmplY3QgKFwiICsga3N0ciArIFwiKSB9XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzdHI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbn1cbl9fbmFtZShvYmpEaXNwbGF5LCBcIm9iakRpc3BsYXlcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2dldE1lc3NhZ2UuanNcbmZ1bmN0aW9uIGdldE1lc3NhZ2UyKG9iaiwgYXJncykge1xuICB2YXIgbmVnYXRlID0gZmxhZyhvYmosIFwibmVnYXRlXCIpLCB2YWwgPSBmbGFnKG9iaiwgXCJvYmplY3RcIiksIGV4cGVjdGVkID0gYXJnc1szXSwgYWN0dWFsID0gZ2V0QWN0dWFsKG9iaiwgYXJncyksIG1zZyA9IG5lZ2F0ZSA/IGFyZ3NbMl0gOiBhcmdzWzFdLCBmbGFnTXNnID0gZmxhZyhvYmosIFwibWVzc2FnZVwiKTtcbiAgaWYgKHR5cGVvZiBtc2cgPT09IFwiZnVuY3Rpb25cIilcbiAgICBtc2cgPSBtc2coKTtcbiAgbXNnID0gbXNnIHx8IFwiXCI7XG4gIG1zZyA9IG1zZy5yZXBsYWNlKC8jXFx7dGhpc1xcfS9nLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gb2JqRGlzcGxheSh2YWwpO1xuICB9KS5yZXBsYWNlKC8jXFx7YWN0XFx9L2csIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBvYmpEaXNwbGF5KGFjdHVhbCk7XG4gIH0pLnJlcGxhY2UoLyNcXHtleHBcXH0vZywgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG9iakRpc3BsYXkoZXhwZWN0ZWQpO1xuICB9KTtcbiAgcmV0dXJuIGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiICsgbXNnIDogbXNnO1xufVxuX19uYW1lKGdldE1lc3NhZ2UyLCBcImdldE1lc3NhZ2VcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL3RyYW5zZmVyRmxhZ3MuanNcbmZ1bmN0aW9uIHRyYW5zZmVyRmxhZ3MoYXNzZXJ0aW9uLCBvYmplY3QsIGluY2x1ZGVBbGwpIHtcbiAgdmFyIGZsYWdzID0gYXNzZXJ0aW9uLl9fZmxhZ3MgfHwgKGFzc2VydGlvbi5fX2ZsYWdzID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCkpO1xuICBpZiAoIW9iamVjdC5fX2ZsYWdzKSB7XG4gICAgb2JqZWN0Ll9fZmxhZ3MgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgfVxuICBpbmNsdWRlQWxsID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMyA/IGluY2x1ZGVBbGwgOiB0cnVlO1xuICBmb3IgKHZhciBmbGFnMyBpbiBmbGFncykge1xuICAgIGlmIChpbmNsdWRlQWxsIHx8IGZsYWczICE9PSBcIm9iamVjdFwiICYmIGZsYWczICE9PSBcInNzZmlcIiAmJiBmbGFnMyAhPT0gXCJsb2NrU3NmaVwiICYmIGZsYWczICE9IFwibWVzc2FnZVwiKSB7XG4gICAgICBvYmplY3QuX19mbGFnc1tmbGFnM10gPSBmbGFnc1tmbGFnM107XG4gICAgfVxuICB9XG59XG5fX25hbWUodHJhbnNmZXJGbGFncywgXCJ0cmFuc2ZlckZsYWdzXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvZGVlcC1lcWwvaW5kZXguanNcbmZ1bmN0aW9uIHR5cGUyKG9iaikge1xuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBcInVuZGVmaW5lZFwiO1xuICB9XG4gIGlmIChvYmogPT09IG51bGwpIHtcbiAgICByZXR1cm4gXCJudWxsXCI7XG4gIH1cbiAgY29uc3Qgc3RyaW5nVGFnID0gb2JqW1N5bWJvbC50b1N0cmluZ1RhZ107XG4gIGlmICh0eXBlb2Ygc3RyaW5nVGFnID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHN0cmluZ1RhZztcbiAgfVxuICBjb25zdCBzbGljZVN0YXJ0ID0gODtcbiAgY29uc3Qgc2xpY2VFbmQgPSAtMTtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopLnNsaWNlKHNsaWNlU3RhcnQsIHNsaWNlRW5kKTtcbn1cbl9fbmFtZSh0eXBlMiwgXCJ0eXBlXCIpO1xuZnVuY3Rpb24gRmFrZU1hcCgpIHtcbiAgdGhpcy5fa2V5ID0gXCJjaGFpL2RlZXAtZXFsX19cIiArIE1hdGgucmFuZG9tKCkgKyBEYXRlLm5vdygpO1xufVxuX19uYW1lKEZha2VNYXAsIFwiRmFrZU1hcFwiKTtcbkZha2VNYXAucHJvdG90eXBlID0ge1xuICBnZXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIHJldHVybiBrZXlbdGhpcy5fa2V5XTtcbiAgfSwgXCJnZXRcIiksXG4gIHNldDogLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChPYmplY3QuaXNFeHRlbnNpYmxlKGtleSkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShrZXksIHRoaXMuX2tleSwge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFwic2V0XCIpXG59O1xudmFyIE1lbW9pemVNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gXCJmdW5jdGlvblwiID8gV2Vha01hcCA6IEZha2VNYXA7XG5mdW5jdGlvbiBtZW1vaXplQ29tcGFyZShsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG1lbW9pemVNYXApIHtcbiAgaWYgKCFtZW1vaXplTWFwIHx8IGlzUHJpbWl0aXZlKGxlZnRIYW5kT3BlcmFuZCkgfHwgaXNQcmltaXRpdmUocmlnaHRIYW5kT3BlcmFuZCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICB2YXIgbGVmdEhhbmRNYXAgPSBtZW1vaXplTWFwLmdldChsZWZ0SGFuZE9wZXJhbmQpO1xuICBpZiAobGVmdEhhbmRNYXApIHtcbiAgICB2YXIgcmVzdWx0ID0gbGVmdEhhbmRNYXAuZ2V0KHJpZ2h0SGFuZE9wZXJhbmQpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSBcImJvb2xlYW5cIikge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5fX25hbWUobWVtb2l6ZUNvbXBhcmUsIFwibWVtb2l6ZUNvbXBhcmVcIik7XG5mdW5jdGlvbiBtZW1vaXplU2V0KGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgbWVtb2l6ZU1hcCwgcmVzdWx0KSB7XG4gIGlmICghbWVtb2l6ZU1hcCB8fCBpc1ByaW1pdGl2ZShsZWZ0SGFuZE9wZXJhbmQpIHx8IGlzUHJpbWl0aXZlKHJpZ2h0SGFuZE9wZXJhbmQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBsZWZ0SGFuZE1hcCA9IG1lbW9pemVNYXAuZ2V0KGxlZnRIYW5kT3BlcmFuZCk7XG4gIGlmIChsZWZ0SGFuZE1hcCkge1xuICAgIGxlZnRIYW5kTWFwLnNldChyaWdodEhhbmRPcGVyYW5kLCByZXN1bHQpO1xuICB9IGVsc2Uge1xuICAgIGxlZnRIYW5kTWFwID0gbmV3IE1lbW9pemVNYXAoKTtcbiAgICBsZWZ0SGFuZE1hcC5zZXQocmlnaHRIYW5kT3BlcmFuZCwgcmVzdWx0KTtcbiAgICBtZW1vaXplTWFwLnNldChsZWZ0SGFuZE9wZXJhbmQsIGxlZnRIYW5kTWFwKTtcbiAgfVxufVxuX19uYW1lKG1lbW9pemVTZXQsIFwibWVtb2l6ZVNldFwiKTtcbnZhciBkZWVwX2VxbF9kZWZhdWx0ID0gZGVlcEVxdWFsO1xuZnVuY3Rpb24gZGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmNvbXBhcmF0b3IpIHtcbiAgICByZXR1cm4gZXh0ZW5zaXZlRGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gIH1cbiAgdmFyIHNpbXBsZVJlc3VsdCA9IHNpbXBsZUVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCk7XG4gIGlmIChzaW1wbGVSZXN1bHQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gc2ltcGxlUmVzdWx0O1xuICB9XG4gIHJldHVybiBleHRlbnNpdmVEZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKTtcbn1cbl9fbmFtZShkZWVwRXF1YWwsIFwiZGVlcEVxdWFsXCIpO1xuZnVuY3Rpb24gc2ltcGxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKSB7XG4gIGlmIChsZWZ0SGFuZE9wZXJhbmQgPT09IHJpZ2h0SGFuZE9wZXJhbmQpIHtcbiAgICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kICE9PSAwIHx8IDEgLyBsZWZ0SGFuZE9wZXJhbmQgPT09IDEgLyByaWdodEhhbmRPcGVyYW5kO1xuICB9XG4gIGlmIChsZWZ0SGFuZE9wZXJhbmQgIT09IGxlZnRIYW5kT3BlcmFuZCAmJiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByaWdodEhhbmRPcGVyYW5kICE9PSByaWdodEhhbmRPcGVyYW5kKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGlzUHJpbWl0aXZlKGxlZnRIYW5kT3BlcmFuZCkgfHwgaXNQcmltaXRpdmUocmlnaHRIYW5kT3BlcmFuZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5fX25hbWUoc2ltcGxlRXF1YWwsIFwic2ltcGxlRXF1YWxcIik7XG5mdW5jdGlvbiBleHRlbnNpdmVEZWVwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBvcHRpb25zLm1lbW9pemUgPSBvcHRpb25zLm1lbW9pemUgPT09IGZhbHNlID8gZmFsc2UgOiBvcHRpb25zLm1lbW9pemUgfHwgbmV3IE1lbW9pemVNYXAoKTtcbiAgdmFyIGNvbXBhcmF0b3IgPSBvcHRpb25zICYmIG9wdGlvbnMuY29tcGFyYXRvcjtcbiAgdmFyIG1lbW9pemVSZXN1bHRMZWZ0ID0gbWVtb2l6ZUNvbXBhcmUobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUpO1xuICBpZiAobWVtb2l6ZVJlc3VsdExlZnQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gbWVtb2l6ZVJlc3VsdExlZnQ7XG4gIH1cbiAgdmFyIG1lbW9pemVSZXN1bHRSaWdodCA9IG1lbW9pemVDb21wYXJlKHJpZ2h0SGFuZE9wZXJhbmQsIGxlZnRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplKTtcbiAgaWYgKG1lbW9pemVSZXN1bHRSaWdodCAhPT0gbnVsbCkge1xuICAgIHJldHVybiBtZW1vaXplUmVzdWx0UmlnaHQ7XG4gIH1cbiAgaWYgKGNvbXBhcmF0b3IpIHtcbiAgICB2YXIgY29tcGFyYXRvclJlc3VsdCA9IGNvbXBhcmF0b3IobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKTtcbiAgICBpZiAoY29tcGFyYXRvclJlc3VsdCA9PT0gZmFsc2UgfHwgY29tcGFyYXRvclJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgbWVtb2l6ZVNldChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSwgY29tcGFyYXRvclJlc3VsdCk7XG4gICAgICByZXR1cm4gY29tcGFyYXRvclJlc3VsdDtcbiAgICB9XG4gICAgdmFyIHNpbXBsZVJlc3VsdCA9IHNpbXBsZUVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCk7XG4gICAgaWYgKHNpbXBsZVJlc3VsdCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHNpbXBsZVJlc3VsdDtcbiAgICB9XG4gIH1cbiAgdmFyIGxlZnRIYW5kVHlwZSA9IHR5cGUyKGxlZnRIYW5kT3BlcmFuZCk7XG4gIGlmIChsZWZ0SGFuZFR5cGUgIT09IHR5cGUyKHJpZ2h0SGFuZE9wZXJhbmQpKSB7XG4gICAgbWVtb2l6ZVNldChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMubWVtb2l6ZSwgZmFsc2UpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBtZW1vaXplU2V0KGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucy5tZW1vaXplLCB0cnVlKTtcbiAgdmFyIHJlc3VsdCA9IGV4dGVuc2l2ZURlZXBFcXVhbEJ5VHlwZShsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIGxlZnRIYW5kVHlwZSwgb3B0aW9ucyk7XG4gIG1lbW9pemVTZXQobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zLm1lbW9pemUsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5fX25hbWUoZXh0ZW5zaXZlRGVlcEVxdWFsLCBcImV4dGVuc2l2ZURlZXBFcXVhbFwiKTtcbmZ1bmN0aW9uIGV4dGVuc2l2ZURlZXBFcXVhbEJ5VHlwZShsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIGxlZnRIYW5kVHlwZSwgb3B0aW9ucykge1xuICBzd2l0Y2ggKGxlZnRIYW5kVHlwZSkge1xuICAgIGNhc2UgXCJTdHJpbmdcIjpcbiAgICBjYXNlIFwiTnVtYmVyXCI6XG4gICAgY2FzZSBcIkJvb2xlYW5cIjpcbiAgICBjYXNlIFwiRGF0ZVwiOlxuICAgICAgcmV0dXJuIGRlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmQudmFsdWVPZigpLCByaWdodEhhbmRPcGVyYW5kLnZhbHVlT2YoKSk7XG4gICAgY2FzZSBcIlByb21pc2VcIjpcbiAgICBjYXNlIFwiU3ltYm9sXCI6XG4gICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgY2FzZSBcIldlYWtNYXBcIjpcbiAgICBjYXNlIFwiV2Vha1NldFwiOlxuICAgICAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZCA9PT0gcmlnaHRIYW5kT3BlcmFuZDtcbiAgICBjYXNlIFwiRXJyb3JcIjpcbiAgICAgIHJldHVybiBrZXlzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBbXCJuYW1lXCIsIFwibWVzc2FnZVwiLCBcImNvZGVcIl0sIG9wdGlvbnMpO1xuICAgIGNhc2UgXCJBcmd1bWVudHNcIjpcbiAgICBjYXNlIFwiSW50OEFycmF5XCI6XG4gICAgY2FzZSBcIlVpbnQ4QXJyYXlcIjpcbiAgICBjYXNlIFwiVWludDhDbGFtcGVkQXJyYXlcIjpcbiAgICBjYXNlIFwiSW50MTZBcnJheVwiOlxuICAgIGNhc2UgXCJVaW50MTZBcnJheVwiOlxuICAgIGNhc2UgXCJJbnQzMkFycmF5XCI6XG4gICAgY2FzZSBcIlVpbnQzMkFycmF5XCI6XG4gICAgY2FzZSBcIkZsb2F0MzJBcnJheVwiOlxuICAgIGNhc2UgXCJGbG9hdDY0QXJyYXlcIjpcbiAgICBjYXNlIFwiQXJyYXlcIjpcbiAgICAgIHJldHVybiBpdGVyYWJsZUVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gICAgY2FzZSBcIlJlZ0V4cFwiOlxuICAgICAgcmV0dXJuIHJlZ2V4cEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCk7XG4gICAgY2FzZSBcIkdlbmVyYXRvclwiOlxuICAgICAgcmV0dXJuIGdlbmVyYXRvckVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gICAgY2FzZSBcIkRhdGFWaWV3XCI6XG4gICAgICByZXR1cm4gaXRlcmFibGVFcXVhbChuZXcgVWludDhBcnJheShsZWZ0SGFuZE9wZXJhbmQuYnVmZmVyKSwgbmV3IFVpbnQ4QXJyYXkocmlnaHRIYW5kT3BlcmFuZC5idWZmZXIpLCBvcHRpb25zKTtcbiAgICBjYXNlIFwiQXJyYXlCdWZmZXJcIjpcbiAgICAgIHJldHVybiBpdGVyYWJsZUVxdWFsKG5ldyBVaW50OEFycmF5KGxlZnRIYW5kT3BlcmFuZCksIG5ldyBVaW50OEFycmF5KHJpZ2h0SGFuZE9wZXJhbmQpLCBvcHRpb25zKTtcbiAgICBjYXNlIFwiU2V0XCI6XG4gICAgICByZXR1cm4gZW50cmllc0VxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gICAgY2FzZSBcIk1hcFwiOlxuICAgICAgcmV0dXJuIGVudHJpZXNFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpO1xuICAgIGNhc2UgXCJUZW1wb3JhbC5QbGFpbkRhdGVcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuUGxhaW5UaW1lXCI6XG4gICAgY2FzZSBcIlRlbXBvcmFsLlBsYWluRGF0ZVRpbWVcIjpcbiAgICBjYXNlIFwiVGVtcG9yYWwuSW5zdGFudFwiOlxuICAgIGNhc2UgXCJUZW1wb3JhbC5ab25lZERhdGVUaW1lXCI6XG4gICAgY2FzZSBcIlRlbXBvcmFsLlBsYWluWWVhck1vbnRoXCI6XG4gICAgY2FzZSBcIlRlbXBvcmFsLlBsYWluTW9udGhEYXlcIjpcbiAgICAgIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQuZXF1YWxzKHJpZ2h0SGFuZE9wZXJhbmQpO1xuICAgIGNhc2UgXCJUZW1wb3JhbC5EdXJhdGlvblwiOlxuICAgICAgcmV0dXJuIGxlZnRIYW5kT3BlcmFuZC50b3RhbChcIm5hbm9zZWNvbmRzXCIpID09PSByaWdodEhhbmRPcGVyYW5kLnRvdGFsKFwibmFub3NlY29uZHNcIik7XG4gICAgY2FzZSBcIlRlbXBvcmFsLlRpbWVab25lXCI6XG4gICAgY2FzZSBcIlRlbXBvcmFsLkNhbGVuZGFyXCI6XG4gICAgICByZXR1cm4gbGVmdEhhbmRPcGVyYW5kLnRvU3RyaW5nKCkgPT09IHJpZ2h0SGFuZE9wZXJhbmQudG9TdHJpbmcoKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG9iamVjdEVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucyk7XG4gIH1cbn1cbl9fbmFtZShleHRlbnNpdmVEZWVwRXF1YWxCeVR5cGUsIFwiZXh0ZW5zaXZlRGVlcEVxdWFsQnlUeXBlXCIpO1xuZnVuY3Rpb24gcmVnZXhwRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kKSB7XG4gIHJldHVybiBsZWZ0SGFuZE9wZXJhbmQudG9TdHJpbmcoKSA9PT0gcmlnaHRIYW5kT3BlcmFuZC50b1N0cmluZygpO1xufVxuX19uYW1lKHJlZ2V4cEVxdWFsLCBcInJlZ2V4cEVxdWFsXCIpO1xuZnVuY3Rpb24gZW50cmllc0VxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucykge1xuICB0cnkge1xuICAgIGlmIChsZWZ0SGFuZE9wZXJhbmQuc2l6ZSAhPT0gcmlnaHRIYW5kT3BlcmFuZC5zaXplKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChsZWZ0SGFuZE9wZXJhbmQuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChzaXplRXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxlZnRIYW5kSXRlbXMgPSBbXTtcbiAgdmFyIHJpZ2h0SGFuZEl0ZW1zID0gW107XG4gIGxlZnRIYW5kT3BlcmFuZC5mb3JFYWNoKC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gZ2F0aGVyRW50cmllcyhrZXksIHZhbHVlKSB7XG4gICAgbGVmdEhhbmRJdGVtcy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sIFwiZ2F0aGVyRW50cmllc1wiKSk7XG4gIHJpZ2h0SGFuZE9wZXJhbmQuZm9yRWFjaCgvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGdhdGhlckVudHJpZXMoa2V5LCB2YWx1ZSkge1xuICAgIHJpZ2h0SGFuZEl0ZW1zLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSwgXCJnYXRoZXJFbnRyaWVzXCIpKTtcbiAgcmV0dXJuIGl0ZXJhYmxlRXF1YWwobGVmdEhhbmRJdGVtcy5zb3J0KCksIHJpZ2h0SGFuZEl0ZW1zLnNvcnQoKSwgb3B0aW9ucyk7XG59XG5fX25hbWUoZW50cmllc0VxdWFsLCBcImVudHJpZXNFcXVhbFwiKTtcbmZ1bmN0aW9uIGl0ZXJhYmxlRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBvcHRpb25zKSB7XG4gIHZhciBsZW5ndGggPSBsZWZ0SGFuZE9wZXJhbmQubGVuZ3RoO1xuICBpZiAobGVuZ3RoICE9PSByaWdodEhhbmRPcGVyYW5kLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTE7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGRlZXBFcXVhbChsZWZ0SGFuZE9wZXJhbmRbaW5kZXhdLCByaWdodEhhbmRPcGVyYW5kW2luZGV4XSwgb3B0aW9ucykgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuX19uYW1lKGl0ZXJhYmxlRXF1YWwsIFwiaXRlcmFibGVFcXVhbFwiKTtcbmZ1bmN0aW9uIGdlbmVyYXRvckVxdWFsKGxlZnRIYW5kT3BlcmFuZCwgcmlnaHRIYW5kT3BlcmFuZCwgb3B0aW9ucykge1xuICByZXR1cm4gaXRlcmFibGVFcXVhbChnZXRHZW5lcmF0b3JFbnRyaWVzKGxlZnRIYW5kT3BlcmFuZCksIGdldEdlbmVyYXRvckVudHJpZXMocmlnaHRIYW5kT3BlcmFuZCksIG9wdGlvbnMpO1xufVxuX19uYW1lKGdlbmVyYXRvckVxdWFsLCBcImdlbmVyYXRvckVxdWFsXCIpO1xuZnVuY3Rpb24gaGFzSXRlcmF0b3JGdW5jdGlvbih0YXJnZXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHRhcmdldCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB0YXJnZXRbU3ltYm9sLml0ZXJhdG9yXSA9PT0gXCJmdW5jdGlvblwiO1xufVxuX19uYW1lKGhhc0l0ZXJhdG9yRnVuY3Rpb24sIFwiaGFzSXRlcmF0b3JGdW5jdGlvblwiKTtcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRW50cmllcyh0YXJnZXQpIHtcbiAgaWYgKGhhc0l0ZXJhdG9yRnVuY3Rpb24odGFyZ2V0KSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZ2V0R2VuZXJhdG9yRW50cmllcyh0YXJnZXRbU3ltYm9sLml0ZXJhdG9yXSgpKTtcbiAgICB9IGNhdGNoIChpdGVyYXRvckVycm9yKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG4gIHJldHVybiBbXTtcbn1cbl9fbmFtZShnZXRJdGVyYXRvckVudHJpZXMsIFwiZ2V0SXRlcmF0b3JFbnRyaWVzXCIpO1xuZnVuY3Rpb24gZ2V0R2VuZXJhdG9yRW50cmllcyhnZW5lcmF0b3IpIHtcbiAgdmFyIGdlbmVyYXRvclJlc3VsdCA9IGdlbmVyYXRvci5uZXh0KCk7XG4gIHZhciBhY2N1bXVsYXRvciA9IFtnZW5lcmF0b3JSZXN1bHQudmFsdWVdO1xuICB3aGlsZSAoZ2VuZXJhdG9yUmVzdWx0LmRvbmUgPT09IGZhbHNlKSB7XG4gICAgZ2VuZXJhdG9yUmVzdWx0ID0gZ2VuZXJhdG9yLm5leHQoKTtcbiAgICBhY2N1bXVsYXRvci5wdXNoKGdlbmVyYXRvclJlc3VsdC52YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGFjY3VtdWxhdG9yO1xufVxuX19uYW1lKGdldEdlbmVyYXRvckVudHJpZXMsIFwiZ2V0R2VuZXJhdG9yRW50cmllc1wiKTtcbmZ1bmN0aW9uIGdldEVudW1lcmFibGVLZXlzKHRhcmdldCkge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gdGFyZ2V0KSB7XG4gICAga2V5cy5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59XG5fX25hbWUoZ2V0RW51bWVyYWJsZUtleXMsIFwiZ2V0RW51bWVyYWJsZUtleXNcIik7XG5mdW5jdGlvbiBnZXRFbnVtZXJhYmxlU3ltYm9scyh0YXJnZXQpIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgdmFyIGFsbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsS2V5cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciBrZXkgPSBhbGxLZXlzW2ldO1xuICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KS5lbnVtZXJhYmxlKSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGtleXM7XG59XG5fX25hbWUoZ2V0RW51bWVyYWJsZVN5bWJvbHMsIFwiZ2V0RW51bWVyYWJsZVN5bWJvbHNcIik7XG5mdW5jdGlvbiBrZXlzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBrZXlzLCBvcHRpb25zKSB7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoZGVlcEVxdWFsKGxlZnRIYW5kT3BlcmFuZFtrZXlzW2ldXSwgcmlnaHRIYW5kT3BlcmFuZFtrZXlzW2ldXSwgb3B0aW9ucykgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuX19uYW1lKGtleXNFcXVhbCwgXCJrZXlzRXF1YWxcIik7XG5mdW5jdGlvbiBvYmplY3RFcXVhbChsZWZ0SGFuZE9wZXJhbmQsIHJpZ2h0SGFuZE9wZXJhbmQsIG9wdGlvbnMpIHtcbiAgdmFyIGxlZnRIYW5kS2V5cyA9IGdldEVudW1lcmFibGVLZXlzKGxlZnRIYW5kT3BlcmFuZCk7XG4gIHZhciByaWdodEhhbmRLZXlzID0gZ2V0RW51bWVyYWJsZUtleXMocmlnaHRIYW5kT3BlcmFuZCk7XG4gIHZhciBsZWZ0SGFuZFN5bWJvbHMgPSBnZXRFbnVtZXJhYmxlU3ltYm9scyhsZWZ0SGFuZE9wZXJhbmQpO1xuICB2YXIgcmlnaHRIYW5kU3ltYm9scyA9IGdldEVudW1lcmFibGVTeW1ib2xzKHJpZ2h0SGFuZE9wZXJhbmQpO1xuICBsZWZ0SGFuZEtleXMgPSBsZWZ0SGFuZEtleXMuY29uY2F0KGxlZnRIYW5kU3ltYm9scyk7XG4gIHJpZ2h0SGFuZEtleXMgPSByaWdodEhhbmRLZXlzLmNvbmNhdChyaWdodEhhbmRTeW1ib2xzKTtcbiAgaWYgKGxlZnRIYW5kS2V5cy5sZW5ndGggJiYgbGVmdEhhbmRLZXlzLmxlbmd0aCA9PT0gcmlnaHRIYW5kS2V5cy5sZW5ndGgpIHtcbiAgICBpZiAoaXRlcmFibGVFcXVhbChtYXBTeW1ib2xzKGxlZnRIYW5kS2V5cykuc29ydCgpLCBtYXBTeW1ib2xzKHJpZ2h0SGFuZEtleXMpLnNvcnQoKSkgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBrZXlzRXF1YWwobGVmdEhhbmRPcGVyYW5kLCByaWdodEhhbmRPcGVyYW5kLCBsZWZ0SGFuZEtleXMsIG9wdGlvbnMpO1xuICB9XG4gIHZhciBsZWZ0SGFuZEVudHJpZXMgPSBnZXRJdGVyYXRvckVudHJpZXMobGVmdEhhbmRPcGVyYW5kKTtcbiAgdmFyIHJpZ2h0SGFuZEVudHJpZXMgPSBnZXRJdGVyYXRvckVudHJpZXMocmlnaHRIYW5kT3BlcmFuZCk7XG4gIGlmIChsZWZ0SGFuZEVudHJpZXMubGVuZ3RoICYmIGxlZnRIYW5kRW50cmllcy5sZW5ndGggPT09IHJpZ2h0SGFuZEVudHJpZXMubGVuZ3RoKSB7XG4gICAgbGVmdEhhbmRFbnRyaWVzLnNvcnQoKTtcbiAgICByaWdodEhhbmRFbnRyaWVzLnNvcnQoKTtcbiAgICByZXR1cm4gaXRlcmFibGVFcXVhbChsZWZ0SGFuZEVudHJpZXMsIHJpZ2h0SGFuZEVudHJpZXMsIG9wdGlvbnMpO1xuICB9XG4gIGlmIChsZWZ0SGFuZEtleXMubGVuZ3RoID09PSAwICYmIGxlZnRIYW5kRW50cmllcy5sZW5ndGggPT09IDAgJiYgcmlnaHRIYW5kS2V5cy5sZW5ndGggPT09IDAgJiYgcmlnaHRIYW5kRW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5fX25hbWUob2JqZWN0RXF1YWwsIFwib2JqZWN0RXF1YWxcIik7XG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiO1xufVxuX19uYW1lKGlzUHJpbWl0aXZlLCBcImlzUHJpbWl0aXZlXCIpO1xuZnVuY3Rpb24gbWFwU3ltYm9scyhhcnIpIHtcbiAgcmV0dXJuIGFyci5tYXAoLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBtYXBTeW1ib2woZW50cnkpIHtcbiAgICBpZiAodHlwZW9mIGVudHJ5ID09PSBcInN5bWJvbFwiKSB7XG4gICAgICByZXR1cm4gZW50cnkudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIGVudHJ5O1xuICB9LCBcIm1hcFN5bWJvbFwiKSk7XG59XG5fX25hbWUobWFwU3ltYm9scywgXCJtYXBTeW1ib2xzXCIpO1xuXG4vLyBub2RlX21vZHVsZXMvcGF0aHZhbC9pbmRleC5qc1xuZnVuY3Rpb24gaGFzUHJvcGVydHkob2JqLCBuYW1lKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSBcInVuZGVmaW5lZFwiIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gbmFtZSBpbiBPYmplY3Qob2JqKTtcbn1cbl9fbmFtZShoYXNQcm9wZXJ0eSwgXCJoYXNQcm9wZXJ0eVwiKTtcbmZ1bmN0aW9uIHBhcnNlUGF0aChwYXRoKSB7XG4gIGNvbnN0IHN0ciA9IHBhdGgucmVwbGFjZSgvKFteXFxcXF0pXFxbL2csIFwiJDEuW1wiKTtcbiAgY29uc3QgcGFydHMgPSBzdHIubWF0Y2goLyhcXFxcXFwufFteLl0rPykrL2cpO1xuICByZXR1cm4gcGFydHMubWFwKCh2YWx1ZSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gXCJjb25zdHJ1Y3RvclwiIHx8IHZhbHVlID09PSBcIl9fcHJvdG9fX1wiIHx8IHZhbHVlID09PSBcInByb3RvdHlwZVwiKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHJlZ2V4cCA9IC9eXFxbKFxcZCspXFxdJC87XG4gICAgY29uc3QgbUFyciA9IHJlZ2V4cC5leGVjKHZhbHVlKTtcbiAgICBsZXQgcGFyc2VkID0gbnVsbDtcbiAgICBpZiAobUFycikge1xuICAgICAgcGFyc2VkID0geyBpOiBwYXJzZUZsb2F0KG1BcnJbMV0pIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZCA9IHsgcDogdmFsdWUucmVwbGFjZSgvXFxcXChbLltcXF1dKS9nLCBcIiQxXCIpIH07XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH0pO1xufVxuX19uYW1lKHBhcnNlUGF0aCwgXCJwYXJzZVBhdGhcIik7XG5mdW5jdGlvbiBpbnRlcm5hbEdldFBhdGhWYWx1ZShvYmosIHBhcnNlZCwgcGF0aERlcHRoKSB7XG4gIGxldCB0ZW1wb3JhcnlWYWx1ZSA9IG9iajtcbiAgbGV0IHJlcyA9IG51bGw7XG4gIHBhdGhEZXB0aCA9IHR5cGVvZiBwYXRoRGVwdGggPT09IFwidW5kZWZpbmVkXCIgPyBwYXJzZWQubGVuZ3RoIDogcGF0aERlcHRoO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGhEZXB0aDsgaSsrKSB7XG4gICAgY29uc3QgcGFydCA9IHBhcnNlZFtpXTtcbiAgICBpZiAodGVtcG9yYXJ5VmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydC5wID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHRlbXBvcmFyeVZhbHVlID0gdGVtcG9yYXJ5VmFsdWVbcGFydC5pXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRlbXBvcmFyeVZhbHVlID0gdGVtcG9yYXJ5VmFsdWVbcGFydC5wXTtcbiAgICAgIH1cbiAgICAgIGlmIChpID09PSBwYXRoRGVwdGggLSAxKSB7XG4gICAgICAgIHJlcyA9IHRlbXBvcmFyeVZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzO1xufVxuX19uYW1lKGludGVybmFsR2V0UGF0aFZhbHVlLCBcImludGVybmFsR2V0UGF0aFZhbHVlXCIpO1xuZnVuY3Rpb24gZ2V0UGF0aEluZm8ob2JqLCBwYXRoKSB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlUGF0aChwYXRoKTtcbiAgY29uc3QgbGFzdCA9IHBhcnNlZFtwYXJzZWQubGVuZ3RoIC0gMV07XG4gIGNvbnN0IGluZm8gPSB7XG4gICAgcGFyZW50OiBwYXJzZWQubGVuZ3RoID4gMSA/IGludGVybmFsR2V0UGF0aFZhbHVlKG9iaiwgcGFyc2VkLCBwYXJzZWQubGVuZ3RoIC0gMSkgOiBvYmosXG4gICAgbmFtZTogbGFzdC5wIHx8IGxhc3QuaSxcbiAgICB2YWx1ZTogaW50ZXJuYWxHZXRQYXRoVmFsdWUob2JqLCBwYXJzZWQpXG4gIH07XG4gIGluZm8uZXhpc3RzID0gaGFzUHJvcGVydHkoaW5mby5wYXJlbnQsIGluZm8ubmFtZSk7XG4gIHJldHVybiBpbmZvO1xufVxuX19uYW1lKGdldFBhdGhJbmZvLCBcImdldFBhdGhJbmZvXCIpO1xuXG4vLyBsaWIvY2hhaS9hc3NlcnRpb24uanNcbmZ1bmN0aW9uIEFzc2VydGlvbihvYmosIG1zZywgc3NmaSwgbG9ja1NzZmkpIHtcbiAgZmxhZyh0aGlzLCBcInNzZmlcIiwgc3NmaSB8fCBBc3NlcnRpb24pO1xuICBmbGFnKHRoaXMsIFwibG9ja1NzZmlcIiwgbG9ja1NzZmkpO1xuICBmbGFnKHRoaXMsIFwib2JqZWN0XCIsIG9iaik7XG4gIGZsYWcodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIGZsYWcodGhpcywgXCJlcWxcIiwgY29uZmlnLmRlZXBFcXVhbCB8fCBkZWVwX2VxbF9kZWZhdWx0KTtcbiAgcmV0dXJuIHByb3hpZnkodGhpcyk7XG59XG5fX25hbWUoQXNzZXJ0aW9uLCBcIkFzc2VydGlvblwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBc3NlcnRpb24sIFwiaW5jbHVkZVN0YWNrXCIsIHtcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICBjb25zb2xlLndhcm4oXCJBc3NlcnRpb24uaW5jbHVkZVN0YWNrIGlzIGRlcHJlY2F0ZWQsIHVzZSBjaGFpLmNvbmZpZy5pbmNsdWRlU3RhY2sgaW5zdGVhZC5cIik7XG4gICAgcmV0dXJuIGNvbmZpZy5pbmNsdWRlU3RhY2s7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICBjb25zb2xlLndhcm4oXCJBc3NlcnRpb24uaW5jbHVkZVN0YWNrIGlzIGRlcHJlY2F0ZWQsIHVzZSBjaGFpLmNvbmZpZy5pbmNsdWRlU3RhY2sgaW5zdGVhZC5cIik7XG4gICAgY29uZmlnLmluY2x1ZGVTdGFjayA9IHZhbHVlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBc3NlcnRpb24sIFwic2hvd0RpZmZcIiwge1xuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIGNvbnNvbGUud2FybihcIkFzc2VydGlvbi5zaG93RGlmZiBpcyBkZXByZWNhdGVkLCB1c2UgY2hhaS5jb25maWcuc2hvd0RpZmYgaW5zdGVhZC5cIik7XG4gICAgcmV0dXJuIGNvbmZpZy5zaG93RGlmZjtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIGNvbnNvbGUud2FybihcIkFzc2VydGlvbi5zaG93RGlmZiBpcyBkZXByZWNhdGVkLCB1c2UgY2hhaS5jb25maWcuc2hvd0RpZmYgaW5zdGVhZC5cIik7XG4gICAgY29uZmlnLnNob3dEaWZmID0gdmFsdWU7XG4gIH1cbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5ID0gZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgYWRkUHJvcGVydHkodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuKTtcbn07XG5Bc3NlcnRpb24uYWRkTWV0aG9kID0gZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgYWRkTWV0aG9kKHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbik7XG59O1xuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZCA9IGZ1bmN0aW9uKG5hbWUsIGZuLCBjaGFpbmluZ0JlaGF2aW9yKSB7XG4gIGFkZENoYWluYWJsZU1ldGhvZCh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4sIGNoYWluaW5nQmVoYXZpb3IpO1xufTtcbkFzc2VydGlvbi5vdmVyd3JpdGVQcm9wZXJ0eSA9IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gIG92ZXJ3cml0ZVByb3BlcnR5KHRoaXMucHJvdG90eXBlLCBuYW1lLCBmbik7XG59O1xuQXNzZXJ0aW9uLm92ZXJ3cml0ZU1ldGhvZCA9IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gIG92ZXJ3cml0ZU1ldGhvZCh0aGlzLnByb3RvdHlwZSwgbmFtZSwgZm4pO1xufTtcbkFzc2VydGlvbi5vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QgPSBmdW5jdGlvbihuYW1lLCBmbiwgY2hhaW5pbmdCZWhhdmlvcikge1xuICBvdmVyd3JpdGVDaGFpbmFibGVNZXRob2QodGhpcy5wcm90b3R5cGUsIG5hbWUsIGZuLCBjaGFpbmluZ0JlaGF2aW9yKTtcbn07XG5Bc3NlcnRpb24ucHJvdG90eXBlLmFzc2VydCA9IGZ1bmN0aW9uKGV4cHIsIG1zZywgbmVnYXRlTXNnLCBleHBlY3RlZCwgX2FjdHVhbCwgc2hvd0RpZmYpIHtcbiAgdmFyIG9rID0gdGVzdCh0aGlzLCBhcmd1bWVudHMpO1xuICBpZiAoZmFsc2UgIT09IHNob3dEaWZmKVxuICAgIHNob3dEaWZmID0gdHJ1ZTtcbiAgaWYgKHZvaWQgMCA9PT0gZXhwZWN0ZWQgJiYgdm9pZCAwID09PSBfYWN0dWFsKVxuICAgIHNob3dEaWZmID0gZmFsc2U7XG4gIGlmICh0cnVlICE9PSBjb25maWcuc2hvd0RpZmYpXG4gICAgc2hvd0RpZmYgPSBmYWxzZTtcbiAgaWYgKCFvaykge1xuICAgIG1zZyA9IGdldE1lc3NhZ2UyKHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgdmFyIGFjdHVhbCA9IGdldEFjdHVhbCh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHZhciBhc3NlcnRpb25FcnJvck9iamVjdFByb3BlcnRpZXMgPSB7XG4gICAgICBhY3R1YWwsXG4gICAgICBleHBlY3RlZCxcbiAgICAgIHNob3dEaWZmXG4gICAgfTtcbiAgICB2YXIgb3BlcmF0b3IgPSBnZXRPcGVyYXRvcih0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChvcGVyYXRvcikge1xuICAgICAgYXNzZXJ0aW9uRXJyb3JPYmplY3RQcm9wZXJ0aWVzLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgfVxuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgIG1zZyxcbiAgICAgIGFzc2VydGlvbkVycm9yT2JqZWN0UHJvcGVydGllcyxcbiAgICAgIGNvbmZpZy5pbmNsdWRlU3RhY2sgPyB0aGlzLmFzc2VydCA6IGZsYWcodGhpcywgXCJzc2ZpXCIpXG4gICAgKTtcbiAgfVxufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgQXNzZXJ0aW9uLnByb3RvdHlwZSxcbiAgXCJfb2JqXCIsXG4gIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZsYWcodGhpcywgXCJvYmplY3RcIik7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgZmxhZyh0aGlzLCBcIm9iamVjdFwiLCB2YWwpO1xuICAgIH1cbiAgfVxuKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvaXNQcm94eUVuYWJsZWQuanNcbmZ1bmN0aW9uIGlzUHJveHlFbmFibGVkKCkge1xuICByZXR1cm4gY29uZmlnLnVzZVByb3h5ICYmIHR5cGVvZiBQcm94eSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIjtcbn1cbl9fbmFtZShpc1Byb3h5RW5hYmxlZCwgXCJpc1Byb3h5RW5hYmxlZFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvYWRkUHJvcGVydHkuanNcbmZ1bmN0aW9uIGFkZFByb3BlcnR5KGN0eCwgbmFtZSwgZ2V0dGVyKSB7XG4gIGdldHRlciA9IGdldHRlciA9PT0gdm9pZCAwID8gZnVuY3Rpb24oKSB7XG4gIH0gOiBnZXR0ZXI7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICBjdHgsXG4gICAgbmFtZSxcbiAgICB7XG4gICAgICBnZXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHJvcGVydHlHZXR0ZXIoKSB7XG4gICAgICAgIGlmICghaXNQcm94eUVuYWJsZWQoKSAmJiAhZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIpKSB7XG4gICAgICAgICAgZmxhZyh0aGlzLCBcInNzZmlcIiwgcHJvcGVydHlHZXR0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciByZXN1bHQgPSBnZXR0ZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKVxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKCk7XG4gICAgICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICAgICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgICAgIH0sIFwicHJvcGVydHlHZXR0ZXJcIiksXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gICk7XG59XG5fX25hbWUoYWRkUHJvcGVydHksIFwiYWRkUHJvcGVydHlcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2FkZExlbmd0aEd1YXJkLmpzXG52YXIgZm5MZW5ndGhEZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihmdW5jdGlvbigpIHtcbn0sIFwibGVuZ3RoXCIpO1xuZnVuY3Rpb24gYWRkTGVuZ3RoR3VhcmQoZm4sIGFzc2VydGlvbk5hbWUsIGlzQ2hhaW5hYmxlKSB7XG4gIGlmICghZm5MZW5ndGhEZXNjLmNvbmZpZ3VyYWJsZSlcbiAgICByZXR1cm4gZm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgXCJsZW5ndGhcIiwge1xuICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoaXNDaGFpbmFibGUpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIENoYWkgcHJvcGVydHk6IFwiICsgYXNzZXJ0aW9uTmFtZSArICcubGVuZ3RoLiBEdWUgdG8gYSBjb21wYXRpYmlsaXR5IGlzc3VlLCBcImxlbmd0aFwiIGNhbm5vdCBkaXJlY3RseSBmb2xsb3cgXCInICsgYXNzZXJ0aW9uTmFtZSArICdcIi4gVXNlIFwiJyArIGFzc2VydGlvbk5hbWUgKyAnLmxlbmd0aE9mXCIgaW5zdGVhZC4nKTtcbiAgICAgIH1cbiAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBDaGFpIHByb3BlcnR5OiBcIiArIGFzc2VydGlvbk5hbWUgKyAnLmxlbmd0aC4gU2VlIGRvY3MgZm9yIHByb3BlciB1c2FnZSBvZiBcIicgKyBhc3NlcnRpb25OYW1lICsgJ1wiLicpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmbjtcbn1cbl9fbmFtZShhZGRMZW5ndGhHdWFyZCwgXCJhZGRMZW5ndGhHdWFyZFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvZ2V0UHJvcGVydGllcy5qc1xuZnVuY3Rpb24gZ2V0UHJvcGVydGllcyhvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCk7XG4gIGZ1bmN0aW9uIGFkZFByb3BlcnR5Mihwcm9wZXJ0eSkge1xuICAgIGlmIChyZXN1bHQuaW5kZXhPZihwcm9wZXJ0eSkgPT09IC0xKSB7XG4gICAgICByZXN1bHQucHVzaChwcm9wZXJ0eSk7XG4gICAgfVxuICB9XG4gIF9fbmFtZShhZGRQcm9wZXJ0eTIsIFwiYWRkUHJvcGVydHlcIik7XG4gIHZhciBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpO1xuICB3aGlsZSAocHJvdG8gIT09IG51bGwpIHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm90bykuZm9yRWFjaChhZGRQcm9wZXJ0eTIpO1xuICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuX19uYW1lKGdldFByb3BlcnRpZXMsIFwiZ2V0UHJvcGVydGllc1wiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvcHJveGlmeS5qc1xudmFyIGJ1aWx0aW5zID0gW1wiX19mbGFnc1wiLCBcIl9fbWV0aG9kc1wiLCBcIl9vYmpcIiwgXCJhc3NlcnRcIl07XG5mdW5jdGlvbiBwcm94aWZ5KG9iaiwgbm9uQ2hhaW5hYmxlTWV0aG9kTmFtZSkge1xuICBpZiAoIWlzUHJveHlFbmFibGVkKCkpXG4gICAgcmV0dXJuIG9iajtcbiAgcmV0dXJuIG5ldyBQcm94eShvYmosIHtcbiAgICBnZXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gcHJveHlHZXR0ZXIodGFyZ2V0LCBwcm9wZXJ0eSkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gXCJzdHJpbmdcIiAmJiBjb25maWcucHJveHlFeGNsdWRlZEtleXMuaW5kZXhPZihwcm9wZXJ0eSkgPT09IC0xICYmICFSZWZsZWN0Lmhhcyh0YXJnZXQsIHByb3BlcnR5KSkge1xuICAgICAgICBpZiAobm9uQ2hhaW5hYmxlTWV0aG9kTmFtZSkge1xuICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBDaGFpIHByb3BlcnR5OiBcIiArIG5vbkNoYWluYWJsZU1ldGhvZE5hbWUgKyBcIi5cIiArIHByb3BlcnR5ICsgJy4gU2VlIGRvY3MgZm9yIHByb3BlciB1c2FnZSBvZiBcIicgKyBub25DaGFpbmFibGVNZXRob2ROYW1lICsgJ1wiLicpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzdWdnZXN0aW9uID0gbnVsbDtcbiAgICAgICAgdmFyIHN1Z2dlc3Rpb25EaXN0YW5jZSA9IDQ7XG4gICAgICAgIGdldFByb3BlcnRpZXModGFyZ2V0KS5mb3JFYWNoKGZ1bmN0aW9uKHByb3ApIHtcbiAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkocHJvcCkgJiYgYnVpbHRpbnMuaW5kZXhPZihwcm9wKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHZhciBkaXN0ID0gc3RyaW5nRGlzdGFuY2VDYXBwZWQoXG4gICAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uRGlzdGFuY2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoZGlzdCA8IHN1Z2dlc3Rpb25EaXN0YW5jZSkge1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uID0gcHJvcDtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbkRpc3RhbmNlID0gZGlzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoc3VnZ2VzdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IEVycm9yKFwiSW52YWxpZCBDaGFpIHByb3BlcnR5OiBcIiArIHByb3BlcnR5ICsgJy4gRGlkIHlvdSBtZWFuIFwiJyArIHN1Z2dlc3Rpb24gKyAnXCI/Jyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJJbnZhbGlkIENoYWkgcHJvcGVydHk6IFwiICsgcHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYnVpbHRpbnMuaW5kZXhPZihwcm9wZXJ0eSkgPT09IC0xICYmICFmbGFnKHRhcmdldCwgXCJsb2NrU3NmaVwiKSkge1xuICAgICAgICBmbGFnKHRhcmdldCwgXCJzc2ZpXCIsIHByb3h5R2V0dGVyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5KTtcbiAgICB9LCBcInByb3h5R2V0dGVyXCIpXG4gIH0pO1xufVxuX19uYW1lKHByb3hpZnksIFwicHJveGlmeVwiKTtcbmZ1bmN0aW9uIHN0cmluZ0Rpc3RhbmNlQ2FwcGVkKHN0ckEsIHN0ckIsIGNhcCkge1xuICBpZiAoTWF0aC5hYnMoc3RyQS5sZW5ndGggLSBzdHJCLmxlbmd0aCkgPj0gY2FwKSB7XG4gICAgcmV0dXJuIGNhcDtcbiAgfVxuICB2YXIgbWVtbyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8PSBzdHJBLmxlbmd0aDsgaSsrKSB7XG4gICAgbWVtb1tpXSA9IEFycmF5KHN0ckIubGVuZ3RoICsgMSkuZmlsbCgwKTtcbiAgICBtZW1vW2ldWzBdID0gaTtcbiAgfVxuICBmb3IgKHZhciBqID0gMDsgaiA8IHN0ckIubGVuZ3RoOyBqKyspIHtcbiAgICBtZW1vWzBdW2pdID0gajtcbiAgfVxuICBmb3IgKHZhciBpID0gMTsgaSA8PSBzdHJBLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGNoID0gc3RyQS5jaGFyQ29kZUF0KGkgLSAxKTtcbiAgICBmb3IgKHZhciBqID0gMTsgaiA8PSBzdHJCLmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAoTWF0aC5hYnMoaSAtIGopID49IGNhcCkge1xuICAgICAgICBtZW1vW2ldW2pdID0gY2FwO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIG1lbW9baV1bal0gPSBNYXRoLm1pbihcbiAgICAgICAgbWVtb1tpIC0gMV1bal0gKyAxLFxuICAgICAgICBtZW1vW2ldW2ogLSAxXSArIDEsXG4gICAgICAgIG1lbW9baSAtIDFdW2ogLSAxXSArIChjaCA9PT0gc3RyQi5jaGFyQ29kZUF0KGogLSAxKSA/IDAgOiAxKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1lbW9bc3RyQS5sZW5ndGhdW3N0ckIubGVuZ3RoXTtcbn1cbl9fbmFtZShzdHJpbmdEaXN0YW5jZUNhcHBlZCwgXCJzdHJpbmdEaXN0YW5jZUNhcHBlZFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvYWRkTWV0aG9kLmpzXG5mdW5jdGlvbiBhZGRNZXRob2QoY3R4LCBuYW1lLCBtZXRob2QpIHtcbiAgdmFyIG1ldGhvZFdyYXBwZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgIGlmICghZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIpKSB7XG4gICAgICBmbGFnKHRoaXMsIFwic3NmaVwiLCBtZXRob2RXcmFwcGVyKTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IG1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMClcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgdmFyIG5ld0Fzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24oKTtcbiAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgcmV0dXJuIG5ld0Fzc2VydGlvbjtcbiAgfSwgXCJtZXRob2RXcmFwcGVyXCIpO1xuICBhZGRMZW5ndGhHdWFyZChtZXRob2RXcmFwcGVyLCBuYW1lLCBmYWxzZSk7XG4gIGN0eFtuYW1lXSA9IHByb3hpZnkobWV0aG9kV3JhcHBlciwgbmFtZSk7XG59XG5fX25hbWUoYWRkTWV0aG9kLCBcImFkZE1ldGhvZFwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvb3ZlcndyaXRlUHJvcGVydHkuanNcbmZ1bmN0aW9uIG92ZXJ3cml0ZVByb3BlcnR5KGN0eCwgbmFtZSwgZ2V0dGVyKSB7XG4gIHZhciBfZ2V0ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjdHgsIG5hbWUpLCBfc3VwZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICB9LCBcIl9zdXBlclwiKTtcbiAgaWYgKF9nZXQgJiYgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgX2dldC5nZXQpXG4gICAgX3N1cGVyID0gX2dldC5nZXQ7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICBjdHgsXG4gICAgbmFtZSxcbiAgICB7XG4gICAgICBnZXQ6IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gb3ZlcndyaXRpbmdQcm9wZXJ0eUdldHRlcigpIHtcbiAgICAgICAgaWYgKCFpc1Byb3h5RW5hYmxlZCgpICYmICFmbGFnKHRoaXMsIFwibG9ja1NzZmlcIikpIHtcbiAgICAgICAgICBmbGFnKHRoaXMsIFwic3NmaVwiLCBvdmVyd3JpdGluZ1Byb3BlcnR5R2V0dGVyKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3JpZ0xvY2tTc2ZpID0gZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIpO1xuICAgICAgICBmbGFnKHRoaXMsIFwibG9ja1NzZmlcIiwgdHJ1ZSk7XG4gICAgICAgIHZhciByZXN1bHQgPSBnZXR0ZXIoX3N1cGVyKS5jYWxsKHRoaXMpO1xuICAgICAgICBmbGFnKHRoaXMsIFwibG9ja1NzZmlcIiwgb3JpZ0xvY2tTc2ZpKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbigpO1xuICAgICAgICB0cmFuc2ZlckZsYWdzKHRoaXMsIG5ld0Fzc2VydGlvbik7XG4gICAgICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gICAgICB9LCBcIm92ZXJ3cml0aW5nUHJvcGVydHlHZXR0ZXJcIiksXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gICk7XG59XG5fX25hbWUob3ZlcndyaXRlUHJvcGVydHksIFwib3ZlcndyaXRlUHJvcGVydHlcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL292ZXJ3cml0ZU1ldGhvZC5qc1xuZnVuY3Rpb24gb3ZlcndyaXRlTWV0aG9kKGN0eCwgbmFtZSwgbWV0aG9kKSB7XG4gIHZhciBfbWV0aG9kID0gY3R4W25hbWVdLCBfc3VwZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihuYW1lICsgXCIgaXMgbm90IGEgZnVuY3Rpb25cIik7XG4gIH0sIFwiX3N1cGVyXCIpO1xuICBpZiAoX21ldGhvZCAmJiBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBfbWV0aG9kKVxuICAgIF9zdXBlciA9IF9tZXRob2Q7XG4gIHZhciBvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXIgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xuICAgIGlmICghZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIpKSB7XG4gICAgICBmbGFnKHRoaXMsIFwic3NmaVwiLCBvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXIpO1xuICAgIH1cbiAgICB2YXIgb3JpZ0xvY2tTc2ZpID0gZmxhZyh0aGlzLCBcImxvY2tTc2ZpXCIpO1xuICAgIGZsYWcodGhpcywgXCJsb2NrU3NmaVwiLCB0cnVlKTtcbiAgICB2YXIgcmVzdWx0ID0gbWV0aG9kKF9zdXBlcikuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBmbGFnKHRoaXMsIFwibG9ja1NzZmlcIiwgb3JpZ0xvY2tTc2ZpKTtcbiAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKCk7XG4gICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gIH0sIFwib3ZlcndyaXRpbmdNZXRob2RXcmFwcGVyXCIpO1xuICBhZGRMZW5ndGhHdWFyZChvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXIsIG5hbWUsIGZhbHNlKTtcbiAgY3R4W25hbWVdID0gcHJveGlmeShvdmVyd3JpdGluZ01ldGhvZFdyYXBwZXIsIG5hbWUpO1xufVxuX19uYW1lKG92ZXJ3cml0ZU1ldGhvZCwgXCJvdmVyd3JpdGVNZXRob2RcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2FkZENoYWluYWJsZU1ldGhvZC5qc1xudmFyIGNhblNldFByb3RvdHlwZSA9IHR5cGVvZiBPYmplY3Quc2V0UHJvdG90eXBlT2YgPT09IFwiZnVuY3Rpb25cIjtcbnZhciB0ZXN0Rm4gPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uKCkge1xufSwgXCJ0ZXN0Rm5cIik7XG52YXIgZXhjbHVkZU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdEZuKS5maWx0ZXIoZnVuY3Rpb24obmFtZSkge1xuICB2YXIgcHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRlc3RGbiwgbmFtZSk7XG4gIGlmICh0eXBlb2YgcHJvcERlc2MgIT09IFwib2JqZWN0XCIpXG4gICAgcmV0dXJuIHRydWU7XG4gIHJldHVybiAhcHJvcERlc2MuY29uZmlndXJhYmxlO1xufSk7XG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xudmFyIGFwcGx5ID0gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O1xuZnVuY3Rpb24gYWRkQ2hhaW5hYmxlTWV0aG9kKGN0eCwgbmFtZSwgbWV0aG9kLCBjaGFpbmluZ0JlaGF2aW9yKSB7XG4gIGlmICh0eXBlb2YgY2hhaW5pbmdCZWhhdmlvciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY2hhaW5pbmdCZWhhdmlvciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgfSwgXCJjaGFpbmluZ0JlaGF2aW9yXCIpO1xuICB9XG4gIHZhciBjaGFpbmFibGVCZWhhdmlvciA9IHtcbiAgICBtZXRob2QsXG4gICAgY2hhaW5pbmdCZWhhdmlvclxuICB9O1xuICBpZiAoIWN0eC5fX21ldGhvZHMpIHtcbiAgICBjdHguX19tZXRob2RzID0ge307XG4gIH1cbiAgY3R4Ll9fbWV0aG9kc1tuYW1lXSA9IGNoYWluYWJsZUJlaGF2aW9yO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgY3R4LFxuICAgIG5hbWUsXG4gICAge1xuICAgICAgZ2V0OiAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIGNoYWluYWJsZU1ldGhvZEdldHRlcigpIHtcbiAgICAgICAgY2hhaW5hYmxlQmVoYXZpb3IuY2hhaW5pbmdCZWhhdmlvci5jYWxsKHRoaXMpO1xuICAgICAgICB2YXIgY2hhaW5hYmxlTWV0aG9kV3JhcHBlciA9IC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCFmbGFnKHRoaXMsIFwibG9ja1NzZmlcIikpIHtcbiAgICAgICAgICAgIGZsYWcodGhpcywgXCJzc2ZpXCIsIGNoYWluYWJsZU1ldGhvZFdyYXBwZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgcmVzdWx0ID0gY2hhaW5hYmxlQmVoYXZpb3IubWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbigpO1xuICAgICAgICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICAgICAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICAgICAgICB9LCBcImNoYWluYWJsZU1ldGhvZFdyYXBwZXJcIik7XG4gICAgICAgIGFkZExlbmd0aEd1YXJkKGNoYWluYWJsZU1ldGhvZFdyYXBwZXIsIG5hbWUsIHRydWUpO1xuICAgICAgICBpZiAoY2FuU2V0UHJvdG90eXBlKSB7XG4gICAgICAgICAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgICAgICAgcHJvdG90eXBlLmNhbGwgPSBjYWxsO1xuICAgICAgICAgIHByb3RvdHlwZS5hcHBseSA9IGFwcGx5O1xuICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihjaGFpbmFibGVNZXRob2RXcmFwcGVyLCBwcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBhc3NlcnRlck5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3R4KTtcbiAgICAgICAgICBhc3NlcnRlck5hbWVzLmZvckVhY2goZnVuY3Rpb24oYXNzZXJ0ZXJOYW1lKSB7XG4gICAgICAgICAgICBpZiAoZXhjbHVkZU5hbWVzLmluZGV4T2YoYXNzZXJ0ZXJOYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHBkID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjdHgsIGFzc2VydGVyTmFtZSk7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2hhaW5hYmxlTWV0aG9kV3JhcHBlciwgYXNzZXJ0ZXJOYW1lLCBwZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdHJhbnNmZXJGbGFncyh0aGlzLCBjaGFpbmFibGVNZXRob2RXcmFwcGVyKTtcbiAgICAgICAgcmV0dXJuIHByb3hpZnkoY2hhaW5hYmxlTWV0aG9kV3JhcHBlcik7XG4gICAgICB9LCBcImNoYWluYWJsZU1ldGhvZEdldHRlclwiKSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgKTtcbn1cbl9fbmFtZShhZGRDaGFpbmFibGVNZXRob2QsIFwiYWRkQ2hhaW5hYmxlTWV0aG9kXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QuanNcbmZ1bmN0aW9uIG92ZXJ3cml0ZUNoYWluYWJsZU1ldGhvZChjdHgsIG5hbWUsIG1ldGhvZCwgY2hhaW5pbmdCZWhhdmlvcikge1xuICB2YXIgY2hhaW5hYmxlQmVoYXZpb3IgPSBjdHguX19tZXRob2RzW25hbWVdO1xuICB2YXIgX2NoYWluaW5nQmVoYXZpb3IgPSBjaGFpbmFibGVCZWhhdmlvci5jaGFpbmluZ0JlaGF2aW9yO1xuICBjaGFpbmFibGVCZWhhdmlvci5jaGFpbmluZ0JlaGF2aW9yID0gLyogQF9fUFVSRV9fICovIF9fbmFtZShmdW5jdGlvbiBvdmVyd3JpdGluZ0NoYWluYWJsZU1ldGhvZEdldHRlcigpIHtcbiAgICB2YXIgcmVzdWx0ID0gY2hhaW5pbmdCZWhhdmlvcihfY2hhaW5pbmdCZWhhdmlvcikuY2FsbCh0aGlzKTtcbiAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIHZhciBuZXdBc3NlcnRpb24gPSBuZXcgQXNzZXJ0aW9uKCk7XG4gICAgdHJhbnNmZXJGbGFncyh0aGlzLCBuZXdBc3NlcnRpb24pO1xuICAgIHJldHVybiBuZXdBc3NlcnRpb247XG4gIH0sIFwib3ZlcndyaXRpbmdDaGFpbmFibGVNZXRob2RHZXR0ZXJcIik7XG4gIHZhciBfbWV0aG9kID0gY2hhaW5hYmxlQmVoYXZpb3IubWV0aG9kO1xuICBjaGFpbmFibGVCZWhhdmlvci5tZXRob2QgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKGZ1bmN0aW9uIG92ZXJ3cml0aW5nQ2hhaW5hYmxlTWV0aG9kV3JhcHBlcigpIHtcbiAgICB2YXIgcmVzdWx0ID0gbWV0aG9kKF9tZXRob2QpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICB2YXIgbmV3QXNzZXJ0aW9uID0gbmV3IEFzc2VydGlvbigpO1xuICAgIHRyYW5zZmVyRmxhZ3ModGhpcywgbmV3QXNzZXJ0aW9uKTtcbiAgICByZXR1cm4gbmV3QXNzZXJ0aW9uO1xuICB9LCBcIm92ZXJ3cml0aW5nQ2hhaW5hYmxlTWV0aG9kV3JhcHBlclwiKTtcbn1cbl9fbmFtZShvdmVyd3JpdGVDaGFpbmFibGVNZXRob2QsIFwib3ZlcndyaXRlQ2hhaW5hYmxlTWV0aG9kXCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9jb21wYXJlQnlJbnNwZWN0LmpzXG5mdW5jdGlvbiBjb21wYXJlQnlJbnNwZWN0KGEsIGIpIHtcbiAgcmV0dXJuIGluc3BlY3QyKGEpIDwgaW5zcGVjdDIoYikgPyAtMSA6IDE7XG59XG5fX25hbWUoY29tcGFyZUJ5SW5zcGVjdCwgXCJjb21wYXJlQnlJbnNwZWN0XCIpO1xuXG4vLyBsaWIvY2hhaS91dGlscy9nZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzLmpzXG5mdW5jdGlvbiBnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzKG9iaikge1xuICBpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgIT09IFwiZnVuY3Rpb25cIilcbiAgICByZXR1cm4gW107XG4gIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaikuZmlsdGVyKGZ1bmN0aW9uKHN5bSkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKS5lbnVtZXJhYmxlO1xuICB9KTtcbn1cbl9fbmFtZShnZXRPd25FbnVtZXJhYmxlUHJvcGVydHlTeW1ib2xzLCBcImdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHNcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2dldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzLmpzXG5mdW5jdGlvbiBnZXRPd25FbnVtZXJhYmxlUHJvcGVydGllcyhvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikuY29uY2F0KGdldE93bkVudW1lcmFibGVQcm9wZXJ0eVN5bWJvbHMob2JqKSk7XG59XG5fX25hbWUoZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXMsIFwiZ2V0T3duRW51bWVyYWJsZVByb3BlcnRpZXNcIik7XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2lzTmFOLmpzXG5mdW5jdGlvbiBfaXNOYU4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn1cbl9fbmFtZShfaXNOYU4sIFwiX2lzTmFOXCIpO1xudmFyIGlzTmFOMiA9IE51bWJlci5pc05hTiB8fCBfaXNOYU47XG5cbi8vIGxpYi9jaGFpL3V0aWxzL2dldE9wZXJhdG9yLmpzXG5mdW5jdGlvbiBpc09iamVjdFR5cGUob2JqKSB7XG4gIHZhciBvYmplY3RUeXBlID0gdHlwZShvYmopO1xuICB2YXIgb2JqZWN0VHlwZXMgPSBbXCJBcnJheVwiLCBcIk9iamVjdFwiLCBcIkZ1bmN0aW9uXCJdO1xuICByZXR1cm4gb2JqZWN0VHlwZXMuaW5kZXhPZihvYmplY3RUeXBlKSAhPT0gLTE7XG59XG5fX25hbWUoaXNPYmplY3RUeXBlLCBcImlzT2JqZWN0VHlwZVwiKTtcbmZ1bmN0aW9uIGdldE9wZXJhdG9yKG9iaiwgYXJncykge1xuICB2YXIgb3BlcmF0b3IgPSBmbGFnKG9iaiwgXCJvcGVyYXRvclwiKTtcbiAgdmFyIG5lZ2F0ZSA9IGZsYWcob2JqLCBcIm5lZ2F0ZVwiKTtcbiAgdmFyIGV4cGVjdGVkID0gYXJnc1szXTtcbiAgdmFyIG1zZyA9IG5lZ2F0ZSA/IGFyZ3NbMl0gOiBhcmdzWzFdO1xuICBpZiAob3BlcmF0b3IpIHtcbiAgICByZXR1cm4gb3BlcmF0b3I7XG4gIH1cbiAgaWYgKHR5cGVvZiBtc2cgPT09IFwiZnVuY3Rpb25cIilcbiAgICBtc2cgPSBtc2coKTtcbiAgbXNnID0gbXNnIHx8IFwiXCI7XG4gIGlmICghbXNnKSB7XG4gICAgcmV0dXJuIHZvaWQgMDtcbiAgfVxuICBpZiAoL1xcc2hhdmVcXHMvLnRlc3QobXNnKSkge1xuICAgIHJldHVybiB2b2lkIDA7XG4gIH1cbiAgdmFyIGlzT2JqZWN0ID0gaXNPYmplY3RUeXBlKGV4cGVjdGVkKTtcbiAgaWYgKC9cXHNub3RcXHMvLnRlc3QobXNnKSkge1xuICAgIHJldHVybiBpc09iamVjdCA/IFwibm90RGVlcFN0cmljdEVxdWFsXCIgOiBcIm5vdFN0cmljdEVxdWFsXCI7XG4gIH1cbiAgcmV0dXJuIGlzT2JqZWN0ID8gXCJkZWVwU3RyaWN0RXF1YWxcIiA6IFwic3RyaWN0RXF1YWxcIjtcbn1cbl9fbmFtZShnZXRPcGVyYXRvciwgXCJnZXRPcGVyYXRvclwiKTtcblxuLy8gbGliL2NoYWkvdXRpbHMvaW5kZXguanNcbmZ1bmN0aW9uIGdldE5hbWUoZm4pIHtcbiAgcmV0dXJuIGZuLm5hbWU7XG59XG5fX25hbWUoZ2V0TmFtZSwgXCJnZXROYW1lXCIpO1xuZnVuY3Rpb24gaXNSZWdFeHAyKG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09IFwiW29iamVjdCBSZWdFeHBdXCI7XG59XG5fX25hbWUoaXNSZWdFeHAyLCBcImlzUmVnRXhwXCIpO1xuZnVuY3Rpb24gaXNOdW1lcmljKG9iaikge1xuICByZXR1cm4gW1wiTnVtYmVyXCIsIFwiQmlnSW50XCJdLmluY2x1ZGVzKHR5cGUob2JqKSk7XG59XG5fX25hbWUoaXNOdW1lcmljLCBcImlzTnVtZXJpY1wiKTtcblxuLy8gbGliL2NoYWkvY29yZS9hc3NlcnRpb25zLmpzXG52YXIgeyBmbGFnOiBmbGFnMiB9ID0gdXRpbHNfZXhwb3J0cztcbltcbiAgXCJ0b1wiLFxuICBcImJlXCIsXG4gIFwiYmVlblwiLFxuICBcImlzXCIsXG4gIFwiYW5kXCIsXG4gIFwiaGFzXCIsXG4gIFwiaGF2ZVwiLFxuICBcIndpdGhcIixcbiAgXCJ0aGF0XCIsXG4gIFwid2hpY2hcIixcbiAgXCJhdFwiLFxuICBcIm9mXCIsXG4gIFwic2FtZVwiLFxuICBcImJ1dFwiLFxuICBcImRvZXNcIixcbiAgXCJzdGlsbFwiLFxuICBcImFsc29cIlxuXS5mb3JFYWNoKGZ1bmN0aW9uKGNoYWluKSB7XG4gIEFzc2VydGlvbi5hZGRQcm9wZXJ0eShjaGFpbik7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIm5vdFwiLCBmdW5jdGlvbigpIHtcbiAgZmxhZzIodGhpcywgXCJuZWdhdGVcIiwgdHJ1ZSk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImRlZXBcIiwgZnVuY3Rpb24oKSB7XG4gIGZsYWcyKHRoaXMsIFwiZGVlcFwiLCB0cnVlKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwibmVzdGVkXCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcIm5lc3RlZFwiLCB0cnVlKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwib3duXCIsIGZ1bmN0aW9uKCkge1xuICBmbGFnMih0aGlzLCBcIm93blwiLCB0cnVlKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwib3JkZXJlZFwiLCBmdW5jdGlvbigpIHtcbiAgZmxhZzIodGhpcywgXCJvcmRlcmVkXCIsIHRydWUpO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJhbnlcIiwgZnVuY3Rpb24oKSB7XG4gIGZsYWcyKHRoaXMsIFwiYW55XCIsIHRydWUpO1xuICBmbGFnMih0aGlzLCBcImFsbFwiLCBmYWxzZSk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImFsbFwiLCBmdW5jdGlvbigpIHtcbiAgZmxhZzIodGhpcywgXCJhbGxcIiwgdHJ1ZSk7XG4gIGZsYWcyKHRoaXMsIFwiYW55XCIsIGZhbHNlKTtcbn0pO1xudmFyIGZ1bmN0aW9uVHlwZXMgPSB7XG4gIFwiZnVuY3Rpb25cIjogW1wiZnVuY3Rpb25cIiwgXCJhc3luY2Z1bmN0aW9uXCIsIFwiZ2VuZXJhdG9yZnVuY3Rpb25cIiwgXCJhc3luY2dlbmVyYXRvcmZ1bmN0aW9uXCJdLFxuICBcImFzeW5jZnVuY3Rpb25cIjogW1wiYXN5bmNmdW5jdGlvblwiLCBcImFzeW5jZ2VuZXJhdG9yZnVuY3Rpb25cIl0sXG4gIFwiZ2VuZXJhdG9yZnVuY3Rpb25cIjogW1wiZ2VuZXJhdG9yZnVuY3Rpb25cIiwgXCJhc3luY2dlbmVyYXRvcmZ1bmN0aW9uXCJdLFxuICBcImFzeW5jZ2VuZXJhdG9yZnVuY3Rpb25cIjogW1wiYXN5bmNnZW5lcmF0b3JmdW5jdGlvblwiXVxufTtcbmZ1bmN0aW9uIGFuKHR5cGUzLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdHlwZTMgPSB0eXBlMy50b0xvd2VyQ2FzZSgpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGFydGljbGUgPSB+W1wiYVwiLCBcImVcIiwgXCJpXCIsIFwib1wiLCBcInVcIl0uaW5kZXhPZih0eXBlMy5jaGFyQXQoMCkpID8gXCJhbiBcIiA6IFwiYSBcIjtcbiAgY29uc3QgZGV0ZWN0ZWRUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChmdW5jdGlvblR5cGVzW1wiZnVuY3Rpb25cIl0uaW5jbHVkZXModHlwZTMpKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBmdW5jdGlvblR5cGVzW3R5cGUzXS5pbmNsdWRlcyhkZXRlY3RlZFR5cGUpLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIFwiICsgYXJ0aWNsZSArIHR5cGUzLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBcIiArIGFydGljbGUgKyB0eXBlM1xuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICB0eXBlMyA9PT0gZGV0ZWN0ZWRUeXBlLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIFwiICsgYXJ0aWNsZSArIHR5cGUzLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBcIiArIGFydGljbGUgKyB0eXBlM1xuICAgICk7XG4gIH1cbn1cbl9fbmFtZShhbiwgXCJhblwiKTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoXCJhblwiLCBhbik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwiYVwiLCBhbik7XG5mdW5jdGlvbiBTYW1lVmFsdWVaZXJvKGEsIGIpIHtcbiAgcmV0dXJuIGlzTmFOMihhKSAmJiBpc05hTjIoYikgfHwgYSA9PT0gYjtcbn1cbl9fbmFtZShTYW1lVmFsdWVaZXJvLCBcIlNhbWVWYWx1ZVplcm9cIik7XG5mdW5jdGlvbiBpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvcigpIHtcbiAgZmxhZzIodGhpcywgXCJjb250YWluc1wiLCB0cnVlKTtcbn1cbl9fbmFtZShpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvciwgXCJpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvclwiKTtcbmZ1bmN0aW9uIGluY2x1ZGUodmFsLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBvYmpUeXBlID0gdHlwZShvYmopLnRvTG93ZXJDYXNlKCksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG5lZ2F0ZSA9IGZsYWcyKHRoaXMsIFwibmVnYXRlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBpc0RlZXAgPSBmbGFnMih0aGlzLCBcImRlZXBcIiksIGRlc2NyaXB0b3IgPSBpc0RlZXAgPyBcImRlZXAgXCIgOiBcIlwiLCBpc0VxbCA9IGlzRGVlcCA/IGZsYWcyKHRoaXMsIFwiZXFsXCIpIDogU2FtZVZhbHVlWmVybztcbiAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgdmFyIGluY2x1ZGVkID0gZmFsc2U7XG4gIHN3aXRjaCAob2JqVHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIGluY2x1ZGVkID0gb2JqLmluZGV4T2YodmFsKSAhPT0gLTE7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwid2Vha3NldFwiOlxuICAgICAgaWYgKGlzRGVlcCkge1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgZmxhZ01zZyArIFwidW5hYmxlIHRvIHVzZSAuZGVlcC5pbmNsdWRlIHdpdGggV2Vha1NldFwiLFxuICAgICAgICAgIHZvaWQgMCxcbiAgICAgICAgICBzc2ZpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpbmNsdWRlZCA9IG9iai5oYXModmFsKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJtYXBcIjpcbiAgICAgIG9iai5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgaW5jbHVkZWQgPSBpbmNsdWRlZCB8fCBpc0VxbChpdGVtLCB2YWwpO1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwic2V0XCI6XG4gICAgICBpZiAoaXNEZWVwKSB7XG4gICAgICAgIG9iai5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICBpbmNsdWRlZCA9IGluY2x1ZGVkIHx8IGlzRXFsKGl0ZW0sIHZhbCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5jbHVkZWQgPSBvYmouaGFzKHZhbCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgIGlmIChpc0RlZXApIHtcbiAgICAgICAgaW5jbHVkZWQgPSBvYmouc29tZShmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGlzRXFsKGl0ZW0sIHZhbCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5jbHVkZWQgPSBvYmouaW5kZXhPZih2YWwpICE9PSAtMTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodmFsICE9PSBPYmplY3QodmFsKSkge1xuICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICAgICAgZmxhZ01zZyArIFwidGhlIGdpdmVuIGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyAoXCIgKyBvYmpUeXBlICsgXCIgYW5kIFwiICsgdHlwZSh2YWwpLnRvTG93ZXJDYXNlKCkgKyBcIikgaXMgaW52YWxpZCBmb3IgdGhpcyBhc3NlcnRpb24uIFlvdSBjYW4gdXNlIGFuIGFycmF5LCBhIG1hcCwgYW4gb2JqZWN0LCBhIHNldCwgYSBzdHJpbmcsIG9yIGEgd2Vha3NldCBpbnN0ZWFkIG9mIGEgXCIgKyB0eXBlKHZhbCkudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgc3NmaVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BzID0gT2JqZWN0LmtleXModmFsKSwgZmlyc3RFcnIgPSBudWxsLCBudW1FcnJzID0gMDtcbiAgICAgIHByb3BzLmZvckVhY2goZnVuY3Rpb24ocHJvcCkge1xuICAgICAgICB2YXIgcHJvcEFzc2VydGlvbiA9IG5ldyBBc3NlcnRpb24ob2JqKTtcbiAgICAgICAgdHJhbnNmZXJGbGFncyh0aGlzLCBwcm9wQXNzZXJ0aW9uLCB0cnVlKTtcbiAgICAgICAgZmxhZzIocHJvcEFzc2VydGlvbiwgXCJsb2NrU3NmaVwiLCB0cnVlKTtcbiAgICAgICAgaWYgKCFuZWdhdGUgfHwgcHJvcHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgcHJvcEFzc2VydGlvbi5wcm9wZXJ0eShwcm9wLCB2YWxbcHJvcF0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHByb3BBc3NlcnRpb24ucHJvcGVydHkocHJvcCwgdmFsW3Byb3BdKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgaWYgKCFjaGVja19lcnJvcl9leHBvcnRzLmNvbXBhdGlibGVDb25zdHJ1Y3RvcihlcnIsIEFzc2VydGlvbkVycm9yKSkge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZmlyc3RFcnIgPT09IG51bGwpXG4gICAgICAgICAgICBmaXJzdEVyciA9IGVycjtcbiAgICAgICAgICBudW1FcnJzKys7XG4gICAgICAgIH1cbiAgICAgIH0sIHRoaXMpO1xuICAgICAgaWYgKG5lZ2F0ZSAmJiBwcm9wcy5sZW5ndGggPiAxICYmIG51bUVycnMgPT09IHByb3BzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBmaXJzdEVycjtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgfVxuICB0aGlzLmFzc2VydChcbiAgICBpbmNsdWRlZCxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gXCIgKyBkZXNjcmlwdG9yICsgXCJpbmNsdWRlIFwiICsgaW5zcGVjdDIodmFsKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IFwiICsgZGVzY3JpcHRvciArIFwiaW5jbHVkZSBcIiArIGluc3BlY3QyKHZhbClcbiAgKTtcbn1cbl9fbmFtZShpbmNsdWRlLCBcImluY2x1ZGVcIik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwiaW5jbHVkZVwiLCBpbmNsdWRlLCBpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvcik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwiY29udGFpblwiLCBpbmNsdWRlLCBpbmNsdWRlQ2hhaW5pbmdCZWhhdmlvcik7XG5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKFwiY29udGFpbnNcIiwgaW5jbHVkZSwgaW5jbHVkZUNoYWluaW5nQmVoYXZpb3IpO1xuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZChcImluY2x1ZGVzXCIsIGluY2x1ZGUsIGluY2x1ZGVDaGFpbmluZ0JlaGF2aW9yKTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIm9rXCIsIGZ1bmN0aW9uKCkge1xuICB0aGlzLmFzc2VydChcbiAgICBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgdHJ1dGh5XCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGZhbHN5XCJcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwidHJ1ZVwiLCBmdW5jdGlvbigpIHtcbiAgdGhpcy5hc3NlcnQoXG4gICAgdHJ1ZSA9PT0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIHRydWVcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgZmFsc2VcIixcbiAgICBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiKSA/IGZhbHNlIDogdHJ1ZVxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJudW1lcmljXCIsIGZ1bmN0aW9uKCkge1xuICBjb25zdCBvYmplY3QgPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgW1wiTnVtYmVyXCIsIFwiQmlnSW50XCJdLmluY2x1ZGVzKHR5cGUob2JqZWN0KSksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIG51bWVyaWNcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIG51bWVyaWNcIixcbiAgICBmbGFnMih0aGlzLCBcIm5lZ2F0ZVwiKSA/IGZhbHNlIDogdHJ1ZVxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJjYWxsYWJsZVwiLCBmdW5jdGlvbigpIHtcbiAgY29uc3QgdmFsID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIGNvbnN0IHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIik7XG4gIGNvbnN0IG1lc3NhZ2UgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIik7XG4gIGNvbnN0IG1zZyA9IG1lc3NhZ2UgPyBgJHttZXNzYWdlfTogYCA6IFwiXCI7XG4gIGNvbnN0IG5lZ2F0ZSA9IGZsYWcyKHRoaXMsIFwibmVnYXRlXCIpO1xuICBjb25zdCBhc3NlcnRpb25NZXNzYWdlID0gbmVnYXRlID8gYCR7bXNnfWV4cGVjdGVkICR7aW5zcGVjdDIodmFsKX0gbm90IHRvIGJlIGEgY2FsbGFibGUgZnVuY3Rpb25gIDogYCR7bXNnfWV4cGVjdGVkICR7aW5zcGVjdDIodmFsKX0gdG8gYmUgYSBjYWxsYWJsZSBmdW5jdGlvbmA7XG4gIGNvbnN0IGlzQ2FsbGFibGUgPSBbXCJGdW5jdGlvblwiLCBcIkFzeW5jRnVuY3Rpb25cIiwgXCJHZW5lcmF0b3JGdW5jdGlvblwiLCBcIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb25cIl0uaW5jbHVkZXModHlwZSh2YWwpKTtcbiAgaWYgKGlzQ2FsbGFibGUgJiYgbmVnYXRlIHx8ICFpc0NhbGxhYmxlICYmICFuZWdhdGUpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBhc3NlcnRpb25NZXNzYWdlLFxuICAgICAgdm9pZCAwLFxuICAgICAgc3NmaVxuICAgICk7XG4gIH1cbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiZmFsc2VcIiwgZnVuY3Rpb24oKSB7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGZhbHNlID09PSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgZmFsc2VcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgdHJ1ZVwiLFxuICAgIGZsYWcyKHRoaXMsIFwibmVnYXRlXCIpID8gdHJ1ZSA6IGZhbHNlXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIm51bGxcIiwgZnVuY3Rpb24oKSB7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIG51bGwgPT09IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBudWxsXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBudWxsXCJcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwidW5kZWZpbmVkXCIsIGZ1bmN0aW9uKCkge1xuICB0aGlzLmFzc2VydChcbiAgICB2b2lkIDAgPT09IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSB1bmRlZmluZWRcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gbm90IHRvIGJlIHVuZGVmaW5lZFwiXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIk5hTlwiLCBmdW5jdGlvbigpIHtcbiAgdGhpcy5hc3NlcnQoXG4gICAgaXNOYU4yKGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgTmFOXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBOYU5cIlxuICApO1xufSk7XG5mdW5jdGlvbiBhc3NlcnRFeGlzdCgpIHtcbiAgdmFyIHZhbCA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB0aGlzLmFzc2VydChcbiAgICB2YWwgIT09IG51bGwgJiYgdmFsICE9PSB2b2lkIDAsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGV4aXN0XCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBleGlzdFwiXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0RXhpc3QsIFwiYXNzZXJ0RXhpc3RcIik7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJleGlzdFwiLCBhc3NlcnRFeGlzdCk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJleGlzdHNcIiwgYXNzZXJ0RXhpc3QpO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiZW1wdHlcIiwgZnVuY3Rpb24oKSB7XG4gIHZhciB2YWwgPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgaXRlbXNDb3VudDtcbiAgZmxhZ01zZyA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIjtcbiAgc3dpdGNoICh0eXBlKHZhbCkudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgXCJhcnJheVwiOlxuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIGl0ZW1zQ291bnQgPSB2YWwubGVuZ3RoO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIm1hcFwiOlxuICAgIGNhc2UgXCJzZXRcIjpcbiAgICAgIGl0ZW1zQ291bnQgPSB2YWwuc2l6ZTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJ3ZWFrbWFwXCI6XG4gICAgY2FzZSBcIndlYWtzZXRcIjpcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgZmxhZ01zZyArIFwiLmVtcHR5IHdhcyBwYXNzZWQgYSB3ZWFrIGNvbGxlY3Rpb25cIixcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICBzc2ZpXG4gICAgICApO1xuICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgdmFyIG1zZyA9IGZsYWdNc2cgKyBcIi5lbXB0eSB3YXMgcGFzc2VkIGEgZnVuY3Rpb24gXCIgKyBnZXROYW1lKHZhbCk7XG4gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobXNnLnRyaW0oKSwgdm9pZCAwLCBzc2ZpKTtcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHZhbCAhPT0gT2JqZWN0KHZhbCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICAgIGZsYWdNc2cgKyBcIi5lbXB0eSB3YXMgcGFzc2VkIG5vbi1zdHJpbmcgcHJpbWl0aXZlIFwiICsgaW5zcGVjdDIodmFsKSxcbiAgICAgICAgICB2b2lkIDAsXG4gICAgICAgICAgc3NmaVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaXRlbXNDb3VudCA9IE9iamVjdC5rZXlzKHZhbCkubGVuZ3RoO1xuICB9XG4gIHRoaXMuYXNzZXJ0KFxuICAgIDAgPT09IGl0ZW1zQ291bnQsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGVtcHR5XCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBlbXB0eVwiXG4gICk7XG59KTtcbmZ1bmN0aW9uIGNoZWNrQXJndW1lbnRzKCkge1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIHR5cGUzID0gdHlwZShvYmopO1xuICB0aGlzLmFzc2VydChcbiAgICBcIkFyZ3VtZW50c1wiID09PSB0eXBlMyxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYXJndW1lbnRzIGJ1dCBnb3QgXCIgKyB0eXBlMyxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIGFyZ3VtZW50c1wiXG4gICk7XG59XG5fX25hbWUoY2hlY2tBcmd1bWVudHMsIFwiY2hlY2tBcmd1bWVudHNcIik7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJhcmd1bWVudHNcIiwgY2hlY2tBcmd1bWVudHMpO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwiQXJndW1lbnRzXCIsIGNoZWNrQXJndW1lbnRzKTtcbmZ1bmN0aW9uIGFzc2VydEVxdWFsKHZhbCwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgaWYgKGZsYWcyKHRoaXMsIFwiZGVlcFwiKSkge1xuICAgIHZhciBwcmV2TG9ja1NzZmkgPSBmbGFnMih0aGlzLCBcImxvY2tTc2ZpXCIpO1xuICAgIGZsYWcyKHRoaXMsIFwibG9ja1NzZmlcIiwgdHJ1ZSk7XG4gICAgdGhpcy5lcWwodmFsKTtcbiAgICBmbGFnMih0aGlzLCBcImxvY2tTc2ZpXCIsIHByZXZMb2NrU3NmaSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICB2YWwgPT09IG9iaixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBlcXVhbCAje2V4cH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgZXF1YWwgI3tleHB9XCIsXG4gICAgICB2YWwsXG4gICAgICB0aGlzLl9vYmosXG4gICAgICB0cnVlXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGFzc2VydEVxdWFsLCBcImFzc2VydEVxdWFsXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImVxdWFsXCIsIGFzc2VydEVxdWFsKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJlcXVhbHNcIiwgYXNzZXJ0RXF1YWwpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImVxXCIsIGFzc2VydEVxdWFsKTtcbmZ1bmN0aW9uIGFzc2VydEVxbChvYmosIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgZXFsID0gZmxhZzIodGhpcywgXCJlcWxcIik7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGVxbChvYmosIGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gZGVlcGx5IGVxdWFsICN7ZXhwfVwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgZGVlcGx5IGVxdWFsICN7ZXhwfVwiLFxuICAgIG9iaixcbiAgICB0aGlzLl9vYmosXG4gICAgdHJ1ZVxuICApO1xufVxuX19uYW1lKGFzc2VydEVxbCwgXCJhc3NlcnRFcWxcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZXFsXCIsIGFzc2VydEVxbCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZXFsc1wiLCBhc3NlcnRFcWwpO1xuZnVuY3Rpb24gYXNzZXJ0QWJvdmUobiwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZG9MZW5ndGggPSBmbGFnMih0aGlzLCBcImRvTGVuZ3RoXCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBtc2dQcmVmaXggPSBmbGFnTXNnID8gZmxhZ01zZyArIFwiOiBcIiA6IFwiXCIsIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIG9ialR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKSwgblR5cGUgPSB0eXBlKG4pLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcIm1hcFwiICYmIG9ialR5cGUgIT09IFwic2V0XCIpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShcImxlbmd0aFwiKTtcbiAgfVxuICBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlID09PSBcImRhdGVcIiAmJiBuVHlwZSAhPT0gXCJkYXRlXCIpKSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50IHRvIGFib3ZlIG11c3QgYmUgYSBkYXRlXCIsIHZvaWQgMCwgc3NmaSk7XG4gIH0gZWxzZSBpZiAoIWlzTnVtZXJpYyhuKSAmJiAoZG9MZW5ndGggfHwgaXNOdW1lcmljKG9iaikpKSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50IHRvIGFib3ZlIG11c3QgYmUgYSBudW1iZXJcIiwgdm9pZCAwLCBzc2ZpKTtcbiAgfSBlbHNlIGlmICghZG9MZW5ndGggJiYgKG9ialR5cGUgIT09IFwiZGF0ZVwiICYmICFpc051bWVyaWMob2JqKSkpIHtcbiAgICB2YXIgcHJpbnRPYmogPSBvYmpUeXBlID09PSBcInN0cmluZ1wiID8gXCInXCIgKyBvYmogKyBcIidcIiA6IG9iajtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobXNnUHJlZml4ICsgXCJleHBlY3RlZCBcIiArIHByaW50T2JqICsgXCIgdG8gYmUgYSBudW1iZXIgb3IgYSBkYXRlXCIsIHZvaWQgMCwgc3NmaSk7XG4gIH1cbiAgaWYgKGRvTGVuZ3RoKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBcImxlbmd0aFwiLCBpdGVtc0NvdW50O1xuICAgIGlmIChvYmpUeXBlID09PSBcIm1hcFwiIHx8IG9ialR5cGUgPT09IFwic2V0XCIpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBcInNpemVcIjtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmouc2l6ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5sZW5ndGg7XG4gICAgfVxuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgaXRlbXNDb3VudCA+IG4sXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIGFib3ZlICN7ZXhwfSBidXQgZ290ICN7YWN0fVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgYWJvdmUgI3tleHB9XCIsXG4gICAgICBuLFxuICAgICAgaXRlbXNDb3VudFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBvYmogPiBuLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGFib3ZlICN7ZXhwfVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGF0IG1vc3QgI3tleHB9XCIsXG4gICAgICBuXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGFzc2VydEFib3ZlLCBcImFzc2VydEFib3ZlXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImFib3ZlXCIsIGFzc2VydEFib3ZlKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJndFwiLCBhc3NlcnRBYm92ZSk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZ3JlYXRlclRoYW5cIiwgYXNzZXJ0QWJvdmUpO1xuZnVuY3Rpb24gYXNzZXJ0TGVhc3QobiwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZG9MZW5ndGggPSBmbGFnMih0aGlzLCBcImRvTGVuZ3RoXCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBtc2dQcmVmaXggPSBmbGFnTXNnID8gZmxhZ01zZyArIFwiOiBcIiA6IFwiXCIsIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIG9ialR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKSwgblR5cGUgPSB0eXBlKG4pLnRvTG93ZXJDYXNlKCksIGVycm9yTWVzc2FnZSwgc2hvdWxkVGhyb3cgPSB0cnVlO1xuICBpZiAoZG9MZW5ndGggJiYgb2JqVHlwZSAhPT0gXCJtYXBcIiAmJiBvYmpUeXBlICE9PSBcInNldFwiKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkoXCJsZW5ndGhcIik7XG4gIH1cbiAgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSA9PT0gXCJkYXRlXCIgJiYgblR5cGUgIT09IFwiZGF0ZVwiKSkge1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50IHRvIGxlYXN0IG11c3QgYmUgYSBkYXRlXCI7XG4gIH0gZWxzZSBpZiAoIWlzTnVtZXJpYyhuKSAmJiAoZG9MZW5ndGggfHwgaXNOdW1lcmljKG9iaikpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gbGVhc3QgbXVzdCBiZSBhIG51bWJlclwiO1xuICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSAhPT0gXCJkYXRlXCIgJiYgIWlzTnVtZXJpYyhvYmopKSkge1xuICAgIHZhciBwcmludE9iaiA9IG9ialR5cGUgPT09IFwic3RyaW5nXCIgPyBcIidcIiArIG9iaiArIFwiJ1wiIDogb2JqO1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwiZXhwZWN0ZWQgXCIgKyBwcmludE9iaiArIFwiIHRvIGJlIGEgbnVtYmVyIG9yIGEgZGF0ZVwiO1xuICB9IGVsc2Uge1xuICAgIHNob3VsZFRocm93ID0gZmFsc2U7XG4gIH1cbiAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGVycm9yTWVzc2FnZSwgdm9pZCAwLCBzc2ZpKTtcbiAgfVxuICBpZiAoZG9MZW5ndGgpIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IFwibGVuZ3RoXCIsIGl0ZW1zQ291bnQ7XG4gICAgaWYgKG9ialR5cGUgPT09IFwibWFwXCIgfHwgb2JqVHlwZSA9PT0gXCJzZXRcIikge1xuICAgICAgZGVzY3JpcHRvciA9IFwic2l6ZVwiO1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5zaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpdGVtc0NvdW50ID49IG4sXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIGF0IGxlYXN0ICN7ZXhwfSBidXQgZ290ICN7YWN0fVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBiZWxvdyAje2V4cH1cIixcbiAgICAgIG4sXG4gICAgICBpdGVtc0NvdW50XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIG9iaiA+PSBuLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGF0IGxlYXN0ICN7ZXhwfVwiLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGJlbG93ICN7ZXhwfVwiLFxuICAgICAgblxuICAgICk7XG4gIH1cbn1cbl9fbmFtZShhc3NlcnRMZWFzdCwgXCJhc3NlcnRMZWFzdFwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJsZWFzdFwiLCBhc3NlcnRMZWFzdCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZ3RlXCIsIGFzc2VydExlYXN0KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJncmVhdGVyVGhhbk9yRXF1YWxcIiwgYXNzZXJ0TGVhc3QpO1xuZnVuY3Rpb24gYXNzZXJ0QmVsb3cobiwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZG9MZW5ndGggPSBmbGFnMih0aGlzLCBcImRvTGVuZ3RoXCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBtc2dQcmVmaXggPSBmbGFnTXNnID8gZmxhZ01zZyArIFwiOiBcIiA6IFwiXCIsIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIG9ialR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKSwgblR5cGUgPSB0eXBlKG4pLnRvTG93ZXJDYXNlKCksIGVycm9yTWVzc2FnZSwgc2hvdWxkVGhyb3cgPSB0cnVlO1xuICBpZiAoZG9MZW5ndGggJiYgb2JqVHlwZSAhPT0gXCJtYXBcIiAmJiBvYmpUeXBlICE9PSBcInNldFwiKSB7XG4gICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkoXCJsZW5ndGhcIik7XG4gIH1cbiAgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSA9PT0gXCJkYXRlXCIgJiYgblR5cGUgIT09IFwiZGF0ZVwiKSkge1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50IHRvIGJlbG93IG11c3QgYmUgYSBkYXRlXCI7XG4gIH0gZWxzZSBpZiAoIWlzTnVtZXJpYyhuKSAmJiAoZG9MZW5ndGggfHwgaXNOdW1lcmljKG9iaikpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gYmVsb3cgbXVzdCBiZSBhIG51bWJlclwiO1xuICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSAhPT0gXCJkYXRlXCIgJiYgIWlzTnVtZXJpYyhvYmopKSkge1xuICAgIHZhciBwcmludE9iaiA9IG9ialR5cGUgPT09IFwic3RyaW5nXCIgPyBcIidcIiArIG9iaiArIFwiJ1wiIDogb2JqO1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwiZXhwZWN0ZWQgXCIgKyBwcmludE9iaiArIFwiIHRvIGJlIGEgbnVtYmVyIG9yIGEgZGF0ZVwiO1xuICB9IGVsc2Uge1xuICAgIHNob3VsZFRocm93ID0gZmFsc2U7XG4gIH1cbiAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGVycm9yTWVzc2FnZSwgdm9pZCAwLCBzc2ZpKTtcbiAgfVxuICBpZiAoZG9MZW5ndGgpIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IFwibGVuZ3RoXCIsIGl0ZW1zQ291bnQ7XG4gICAgaWYgKG9ialR5cGUgPT09IFwibWFwXCIgfHwgb2JqVHlwZSA9PT0gXCJzZXRcIikge1xuICAgICAgZGVzY3JpcHRvciA9IFwic2l6ZVwiO1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5zaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpdGVtc0NvdW50IDwgbixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgYmVsb3cgI3tleHB9IGJ1dCBnb3QgI3thY3R9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBiZWxvdyAje2V4cH1cIixcbiAgICAgIG4sXG4gICAgICBpdGVtc0NvdW50XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIG9iaiA8IG4sXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYmVsb3cgI3tleHB9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYXQgbGVhc3QgI3tleHB9XCIsXG4gICAgICBuXG4gICAgKTtcbiAgfVxufVxuX19uYW1lKGFzc2VydEJlbG93LCBcImFzc2VydEJlbG93XCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImJlbG93XCIsIGFzc2VydEJlbG93KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJsdFwiLCBhc3NlcnRCZWxvdyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibGVzc1RoYW5cIiwgYXNzZXJ0QmVsb3cpO1xuZnVuY3Rpb24gYXNzZXJ0TW9zdChuLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBkb0xlbmd0aCA9IGZsYWcyKHRoaXMsIFwiZG9MZW5ndGhcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG1zZ1ByZWZpeCA9IGZsYWdNc2cgPyBmbGFnTXNnICsgXCI6IFwiIDogXCJcIiwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgb2JqVHlwZSA9IHR5cGUob2JqKS50b0xvd2VyQ2FzZSgpLCBuVHlwZSA9IHR5cGUobikudG9Mb3dlckNhc2UoKSwgZXJyb3JNZXNzYWdlLCBzaG91bGRUaHJvdyA9IHRydWU7XG4gIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcIm1hcFwiICYmIG9ialR5cGUgIT09IFwic2V0XCIpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShcImxlbmd0aFwiKTtcbiAgfVxuICBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlID09PSBcImRhdGVcIiAmJiBuVHlwZSAhPT0gXCJkYXRlXCIpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnQgdG8gbW9zdCBtdXN0IGJlIGEgZGF0ZVwiO1xuICB9IGVsc2UgaWYgKCFpc051bWVyaWMobikgJiYgKGRvTGVuZ3RoIHx8IGlzTnVtZXJpYyhvYmopKSkge1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50IHRvIG1vc3QgbXVzdCBiZSBhIG51bWJlclwiO1xuICB9IGVsc2UgaWYgKCFkb0xlbmd0aCAmJiAob2JqVHlwZSAhPT0gXCJkYXRlXCIgJiYgIWlzTnVtZXJpYyhvYmopKSkge1xuICAgIHZhciBwcmludE9iaiA9IG9ialR5cGUgPT09IFwic3RyaW5nXCIgPyBcIidcIiArIG9iaiArIFwiJ1wiIDogb2JqO1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwiZXhwZWN0ZWQgXCIgKyBwcmludE9iaiArIFwiIHRvIGJlIGEgbnVtYmVyIG9yIGEgZGF0ZVwiO1xuICB9IGVsc2Uge1xuICAgIHNob3VsZFRocm93ID0gZmFsc2U7XG4gIH1cbiAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGVycm9yTWVzc2FnZSwgdm9pZCAwLCBzc2ZpKTtcbiAgfVxuICBpZiAoZG9MZW5ndGgpIHtcbiAgICB2YXIgZGVzY3JpcHRvciA9IFwibGVuZ3RoXCIsIGl0ZW1zQ291bnQ7XG4gICAgaWYgKG9ialR5cGUgPT09IFwibWFwXCIgfHwgb2JqVHlwZSA9PT0gXCJzZXRcIikge1xuICAgICAgZGVzY3JpcHRvciA9IFwic2l6ZVwiO1xuICAgICAgaXRlbXNDb3VudCA9IG9iai5zaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBpdGVtc0NvdW50IDw9IG4sXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIGF0IG1vc3QgI3tleHB9IGJ1dCBnb3QgI3thY3R9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIGFib3ZlICN7ZXhwfVwiLFxuICAgICAgbixcbiAgICAgIGl0ZW1zQ291bnRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgb2JqIDw9IG4sXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgYXQgbW9zdCAje2V4cH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhYm92ZSAje2V4cH1cIixcbiAgICAgIG5cbiAgICApO1xuICB9XG59XG5fX25hbWUoYXNzZXJ0TW9zdCwgXCJhc3NlcnRNb3N0XCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcIm1vc3RcIiwgYXNzZXJ0TW9zdCk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibHRlXCIsIGFzc2VydE1vc3QpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImxlc3NUaGFuT3JFcXVhbFwiLCBhc3NlcnRNb3N0KTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJ3aXRoaW5cIiwgZnVuY3Rpb24oc3RhcnQsIGZpbmlzaCwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZG9MZW5ndGggPSBmbGFnMih0aGlzLCBcImRvTGVuZ3RoXCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBtc2dQcmVmaXggPSBmbGFnTXNnID8gZmxhZ01zZyArIFwiOiBcIiA6IFwiXCIsIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIG9ialR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKSwgc3RhcnRUeXBlID0gdHlwZShzdGFydCkudG9Mb3dlckNhc2UoKSwgZmluaXNoVHlwZSA9IHR5cGUoZmluaXNoKS50b0xvd2VyQ2FzZSgpLCBlcnJvck1lc3NhZ2UsIHNob3VsZFRocm93ID0gdHJ1ZSwgcmFuZ2UgPSBzdGFydFR5cGUgPT09IFwiZGF0ZVwiICYmIGZpbmlzaFR5cGUgPT09IFwiZGF0ZVwiID8gc3RhcnQudG9JU09TdHJpbmcoKSArIFwiLi5cIiArIGZpbmlzaC50b0lTT1N0cmluZygpIDogc3RhcnQgKyBcIi4uXCIgKyBmaW5pc2g7XG4gIGlmIChkb0xlbmd0aCAmJiBvYmpUeXBlICE9PSBcIm1hcFwiICYmIG9ialR5cGUgIT09IFwic2V0XCIpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uaGF2ZS5wcm9wZXJ0eShcImxlbmd0aFwiKTtcbiAgfVxuICBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlID09PSBcImRhdGVcIiAmJiAoc3RhcnRUeXBlICE9PSBcImRhdGVcIiB8fCBmaW5pc2hUeXBlICE9PSBcImRhdGVcIikpKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJ0aGUgYXJndW1lbnRzIHRvIHdpdGhpbiBtdXN0IGJlIGRhdGVzXCI7XG4gIH0gZWxzZSBpZiAoKCFpc051bWVyaWMoc3RhcnQpIHx8ICFpc051bWVyaWMoZmluaXNoKSkgJiYgKGRvTGVuZ3RoIHx8IGlzTnVtZXJpYyhvYmopKSkge1xuICAgIGVycm9yTWVzc2FnZSA9IG1zZ1ByZWZpeCArIFwidGhlIGFyZ3VtZW50cyB0byB3aXRoaW4gbXVzdCBiZSBudW1iZXJzXCI7XG4gIH0gZWxzZSBpZiAoIWRvTGVuZ3RoICYmIChvYmpUeXBlICE9PSBcImRhdGVcIiAmJiAhaXNOdW1lcmljKG9iaikpKSB7XG4gICAgdmFyIHByaW50T2JqID0gb2JqVHlwZSA9PT0gXCJzdHJpbmdcIiA/IFwiJ1wiICsgb2JqICsgXCInXCIgOiBvYmo7XG4gICAgZXJyb3JNZXNzYWdlID0gbXNnUHJlZml4ICsgXCJleHBlY3RlZCBcIiArIHByaW50T2JqICsgXCIgdG8gYmUgYSBudW1iZXIgb3IgYSBkYXRlXCI7XG4gIH0gZWxzZSB7XG4gICAgc2hvdWxkVGhyb3cgPSBmYWxzZTtcbiAgfVxuICBpZiAoc2hvdWxkVGhyb3cpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZXJyb3JNZXNzYWdlLCB2b2lkIDAsIHNzZmkpO1xuICB9XG4gIGlmIChkb0xlbmd0aCkge1xuICAgIHZhciBkZXNjcmlwdG9yID0gXCJsZW5ndGhcIiwgaXRlbXNDb3VudDtcbiAgICBpZiAob2JqVHlwZSA9PT0gXCJtYXBcIiB8fCBvYmpUeXBlID09PSBcInNldFwiKSB7XG4gICAgICBkZXNjcmlwdG9yID0gXCJzaXplXCI7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGl0ZW1zQ291bnQgPSBvYmoubGVuZ3RoO1xuICAgIH1cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGl0ZW1zQ291bnQgPj0gc3RhcnQgJiYgaXRlbXNDb3VudCA8PSBmaW5pc2gsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSBhIFwiICsgZGVzY3JpcHRvciArIFwiIHdpdGhpbiBcIiArIHJhbmdlLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIGEgXCIgKyBkZXNjcmlwdG9yICsgXCIgd2l0aGluIFwiICsgcmFuZ2VcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgb2JqID49IHN0YXJ0ICYmIG9iaiA8PSBmaW5pc2gsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgd2l0aGluIFwiICsgcmFuZ2UsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIHdpdGhpbiBcIiArIHJhbmdlXG4gICAgKTtcbiAgfVxufSk7XG5mdW5jdGlvbiBhc3NlcnRJbnN0YW5jZU9mKGNvbnN0cnVjdG9yLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIHRhcmdldCA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB2YXIgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKTtcbiAgdmFyIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIik7XG4gIHRyeSB7XG4gICAgdmFyIGlzSW5zdGFuY2VPZiA9IHRhcmdldCBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgVHlwZUVycm9yKSB7XG4gICAgICBmbGFnTXNnID0gZmxhZ01zZyA/IGZsYWdNc2cgKyBcIjogXCIgOiBcIlwiO1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICBmbGFnTXNnICsgXCJUaGUgaW5zdGFuY2VvZiBhc3NlcnRpb24gbmVlZHMgYSBjb25zdHJ1Y3RvciBidXQgXCIgKyB0eXBlKGNvbnN0cnVjdG9yKSArIFwiIHdhcyBnaXZlbi5cIixcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICBzc2ZpXG4gICAgICApO1xuICAgIH1cbiAgICB0aHJvdyBlcnI7XG4gIH1cbiAgdmFyIG5hbWUgPSBnZXROYW1lKGNvbnN0cnVjdG9yKTtcbiAgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgIG5hbWUgPSBcImFuIHVubmFtZWQgY29uc3RydWN0b3JcIjtcbiAgfVxuICB0aGlzLmFzc2VydChcbiAgICBpc0luc3RhbmNlT2YsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIGFuIGluc3RhbmNlIG9mIFwiICsgbmFtZSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIGFuIGluc3RhbmNlIG9mIFwiICsgbmFtZVxuICApO1xufVxuX19uYW1lKGFzc2VydEluc3RhbmNlT2YsIFwiYXNzZXJ0SW5zdGFuY2VPZlwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJpbnN0YW5jZW9mXCIsIGFzc2VydEluc3RhbmNlT2YpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImluc3RhbmNlT2ZcIiwgYXNzZXJ0SW5zdGFuY2VPZik7XG5mdW5jdGlvbiBhc3NlcnRQcm9wZXJ0eShuYW1lLCB2YWwsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgaXNOZXN0ZWQgPSBmbGFnMih0aGlzLCBcIm5lc3RlZFwiKSwgaXNPd24gPSBmbGFnMih0aGlzLCBcIm93blwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIG5hbWVUeXBlID0gdHlwZW9mIG5hbWU7XG4gIGZsYWdNc2cgPSBmbGFnTXNnID8gZmxhZ01zZyArIFwiOiBcIiA6IFwiXCI7XG4gIGlmIChpc05lc3RlZCkge1xuICAgIGlmIChuYW1lVHlwZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgICBmbGFnTXNnICsgXCJ0aGUgYXJndW1lbnQgdG8gcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZyB3aGVuIHVzaW5nIG5lc3RlZCBzeW50YXhcIixcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICBzc2ZpXG4gICAgICApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAobmFtZVR5cGUgIT09IFwic3RyaW5nXCIgJiYgbmFtZVR5cGUgIT09IFwibnVtYmVyXCIgJiYgbmFtZVR5cGUgIT09IFwic3ltYm9sXCIpIHtcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgZmxhZ01zZyArIFwidGhlIGFyZ3VtZW50IHRvIHByb3BlcnR5IG11c3QgYmUgYSBzdHJpbmcsIG51bWJlciwgb3Igc3ltYm9sXCIsXG4gICAgICAgIHZvaWQgMCxcbiAgICAgICAgc3NmaVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzTmVzdGVkICYmIGlzT3duKSB7XG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKFxuICAgICAgZmxhZ01zZyArICdUaGUgXCJuZXN0ZWRcIiBhbmQgXCJvd25cIiBmbGFncyBjYW5ub3QgYmUgY29tYmluZWQuJyxcbiAgICAgIHZvaWQgMCxcbiAgICAgIHNzZmlcbiAgICApO1xuICB9XG4gIGlmIChvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoXG4gICAgICBmbGFnTXNnICsgXCJUYXJnZXQgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLlwiLFxuICAgICAgdm9pZCAwLFxuICAgICAgc3NmaVxuICAgICk7XG4gIH1cbiAgdmFyIGlzRGVlcCA9IGZsYWcyKHRoaXMsIFwiZGVlcFwiKSwgbmVnYXRlID0gZmxhZzIodGhpcywgXCJuZWdhdGVcIiksIHBhdGhJbmZvID0gaXNOZXN0ZWQgPyBnZXRQYXRoSW5mbyhvYmosIG5hbWUpIDogbnVsbCwgdmFsdWUgPSBpc05lc3RlZCA/IHBhdGhJbmZvLnZhbHVlIDogb2JqW25hbWVdLCBpc0VxbCA9IGlzRGVlcCA/IGZsYWcyKHRoaXMsIFwiZXFsXCIpIDogKHZhbDEsIHZhbDIpID0+IHZhbDEgPT09IHZhbDI7XG4gIHZhciBkZXNjcmlwdG9yID0gXCJcIjtcbiAgaWYgKGlzRGVlcClcbiAgICBkZXNjcmlwdG9yICs9IFwiZGVlcCBcIjtcbiAgaWYgKGlzT3duKVxuICAgIGRlc2NyaXB0b3IgKz0gXCJvd24gXCI7XG4gIGlmIChpc05lc3RlZClcbiAgICBkZXNjcmlwdG9yICs9IFwibmVzdGVkIFwiO1xuICBkZXNjcmlwdG9yICs9IFwicHJvcGVydHkgXCI7XG4gIHZhciBoYXNQcm9wZXJ0eTI7XG4gIGlmIChpc093bilcbiAgICBoYXNQcm9wZXJ0eTIgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBuYW1lKTtcbiAgZWxzZSBpZiAoaXNOZXN0ZWQpXG4gICAgaGFzUHJvcGVydHkyID0gcGF0aEluZm8uZXhpc3RzO1xuICBlbHNlXG4gICAgaGFzUHJvcGVydHkyID0gaGFzUHJvcGVydHkob2JqLCBuYW1lKTtcbiAgaWYgKCFuZWdhdGUgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgaGFzUHJvcGVydHkyLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgXCIgKyBkZXNjcmlwdG9yICsgaW5zcGVjdDIobmFtZSksXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgXCIgKyBkZXNjcmlwdG9yICsgaW5zcGVjdDIobmFtZSlcbiAgICApO1xuICB9XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgaGFzUHJvcGVydHkyICYmIGlzRXFsKHZhbCwgdmFsdWUpLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgXCIgKyBkZXNjcmlwdG9yICsgaW5zcGVjdDIobmFtZSkgKyBcIiBvZiAje2V4cH0sIGJ1dCBnb3QgI3thY3R9XCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgXCIgKyBkZXNjcmlwdG9yICsgaW5zcGVjdDIobmFtZSkgKyBcIiBvZiAje2FjdH1cIixcbiAgICAgIHZhbCxcbiAgICAgIHZhbHVlXG4gICAgKTtcbiAgfVxuICBmbGFnMih0aGlzLCBcIm9iamVjdFwiLCB2YWx1ZSk7XG59XG5fX25hbWUoYXNzZXJ0UHJvcGVydHksIFwiYXNzZXJ0UHJvcGVydHlcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwicHJvcGVydHlcIiwgYXNzZXJ0UHJvcGVydHkpO1xuZnVuY3Rpb24gYXNzZXJ0T3duUHJvcGVydHkobmFtZSwgdmFsdWUsIG1zZykge1xuICBmbGFnMih0aGlzLCBcIm93blwiLCB0cnVlKTtcbiAgYXNzZXJ0UHJvcGVydHkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cbl9fbmFtZShhc3NlcnRPd25Qcm9wZXJ0eSwgXCJhc3NlcnRPd25Qcm9wZXJ0eVwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJvd25Qcm9wZXJ0eVwiLCBhc3NlcnRPd25Qcm9wZXJ0eSk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiaGF2ZU93blByb3BlcnR5XCIsIGFzc2VydE93blByb3BlcnR5KTtcbmZ1bmN0aW9uIGFzc2VydE93blByb3BlcnR5RGVzY3JpcHRvcihuYW1lLCBkZXNjcmlwdG9yLCBtc2cpIHtcbiAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgbXNnID0gZGVzY3JpcHRvcjtcbiAgICBkZXNjcmlwdG9yID0gbnVsbDtcbiAgfVxuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHZhciBhY3R1YWxEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3Qob2JqKSwgbmFtZSk7XG4gIHZhciBlcWwgPSBmbGFnMih0aGlzLCBcImVxbFwiKTtcbiAgaWYgKGFjdHVhbERlc2NyaXB0b3IgJiYgZGVzY3JpcHRvcikge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgZXFsKGRlc2NyaXB0b3IsIGFjdHVhbERlc2NyaXB0b3IpLFxuICAgICAgXCJleHBlY3RlZCB0aGUgb3duIHByb3BlcnR5IGRlc2NyaXB0b3IgZm9yIFwiICsgaW5zcGVjdDIobmFtZSkgKyBcIiBvbiAje3RoaXN9IHRvIG1hdGNoIFwiICsgaW5zcGVjdDIoZGVzY3JpcHRvcikgKyBcIiwgZ290IFwiICsgaW5zcGVjdDIoYWN0dWFsRGVzY3JpcHRvciksXG4gICAgICBcImV4cGVjdGVkIHRoZSBvd24gcHJvcGVydHkgZGVzY3JpcHRvciBmb3IgXCIgKyBpbnNwZWN0MihuYW1lKSArIFwiIG9uICN7dGhpc30gdG8gbm90IG1hdGNoIFwiICsgaW5zcGVjdDIoZGVzY3JpcHRvciksXG4gICAgICBkZXNjcmlwdG9yLFxuICAgICAgYWN0dWFsRGVzY3JpcHRvcixcbiAgICAgIHRydWVcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgYWN0dWFsRGVzY3JpcHRvcixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBoYXZlIGFuIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciBcIiArIGluc3BlY3QyKG5hbWUpLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIGFuIG93biBwcm9wZXJ0eSBkZXNjcmlwdG9yIGZvciBcIiArIGluc3BlY3QyKG5hbWUpXG4gICAgKTtcbiAgfVxuICBmbGFnMih0aGlzLCBcIm9iamVjdFwiLCBhY3R1YWxEZXNjcmlwdG9yKTtcbn1cbl9fbmFtZShhc3NlcnRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsIFwiYXNzZXJ0T3duUHJvcGVydHlEZXNjcmlwdG9yXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcIm93blByb3BlcnR5RGVzY3JpcHRvclwiLCBhc3NlcnRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImhhdmVPd25Qcm9wZXJ0eURlc2NyaXB0b3JcIiwgYXNzZXJ0T3duUHJvcGVydHlEZXNjcmlwdG9yKTtcbmZ1bmN0aW9uIGFzc2VydExlbmd0aENoYWluKCkge1xuICBmbGFnMih0aGlzLCBcImRvTGVuZ3RoXCIsIHRydWUpO1xufVxuX19uYW1lKGFzc2VydExlbmd0aENoYWluLCBcImFzc2VydExlbmd0aENoYWluXCIpO1xuZnVuY3Rpb24gYXNzZXJ0TGVuZ3RoKG4sIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIG9ialR5cGUgPSB0eXBlKG9iaikudG9Mb3dlckNhc2UoKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKSwgZGVzY3JpcHRvciA9IFwibGVuZ3RoXCIsIGl0ZW1zQ291bnQ7XG4gIHN3aXRjaCAob2JqVHlwZSkge1xuICAgIGNhc2UgXCJtYXBcIjpcbiAgICBjYXNlIFwic2V0XCI6XG4gICAgICBkZXNjcmlwdG9yID0gXCJzaXplXCI7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLnNpemU7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgbmV3IEFzc2VydGlvbihvYmosIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkoXCJsZW5ndGhcIik7XG4gICAgICBpdGVtc0NvdW50ID0gb2JqLmxlbmd0aDtcbiAgfVxuICB0aGlzLmFzc2VydChcbiAgICBpdGVtc0NvdW50ID09IG4sXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBvZiAje2V4cH0gYnV0IGdvdCAje2FjdH1cIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGhhdmUgYSBcIiArIGRlc2NyaXB0b3IgKyBcIiBvZiAje2FjdH1cIixcbiAgICBuLFxuICAgIGl0ZW1zQ291bnRcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnRMZW5ndGgsIFwiYXNzZXJ0TGVuZ3RoXCIpO1xuQXNzZXJ0aW9uLmFkZENoYWluYWJsZU1ldGhvZChcImxlbmd0aFwiLCBhc3NlcnRMZW5ndGgsIGFzc2VydExlbmd0aENoYWluKTtcbkFzc2VydGlvbi5hZGRDaGFpbmFibGVNZXRob2QoXCJsZW5ndGhPZlwiLCBhc3NlcnRMZW5ndGgsIGFzc2VydExlbmd0aENoYWluKTtcbmZ1bmN0aW9uIGFzc2VydE1hdGNoKHJlLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB0aGlzLmFzc2VydChcbiAgICByZS5leGVjKG9iaiksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG1hdGNoIFwiICsgcmUsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IG5vdCB0byBtYXRjaCBcIiArIHJlXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0TWF0Y2gsIFwiYXNzZXJ0TWF0Y2hcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibWF0Y2hcIiwgYXNzZXJ0TWF0Y2gpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcIm1hdGNoZXNcIiwgYXNzZXJ0TWF0Y2gpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcInN0cmluZ1wiLCBmdW5jdGlvbihzdHIsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIik7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwic3RyaW5nXCIpO1xuICB0aGlzLmFzc2VydChcbiAgICB+b2JqLmluZGV4T2Yoc3RyKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gY29udGFpbiBcIiArIGluc3BlY3QyKHN0ciksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBjb250YWluIFwiICsgaW5zcGVjdDIoc3RyKVxuICApO1xufSk7XG5mdW5jdGlvbiBhc3NlcnRLZXlzKGtleXMpIHtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBvYmpUeXBlID0gdHlwZShvYmopLCBrZXlzVHlwZSA9IHR5cGUoa2V5cyksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIGlzRGVlcCA9IGZsYWcyKHRoaXMsIFwiZGVlcFwiKSwgc3RyLCBkZWVwU3RyID0gXCJcIiwgYWN0dWFsLCBvayA9IHRydWUsIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIik7XG4gIGZsYWdNc2cgPSBmbGFnTXNnID8gZmxhZ01zZyArIFwiOiBcIiA6IFwiXCI7XG4gIHZhciBtaXhlZEFyZ3NNc2cgPSBmbGFnTXNnICsgXCJ3aGVuIHRlc3Rpbmcga2V5cyBhZ2FpbnN0IGFuIG9iamVjdCBvciBhbiBhcnJheSB5b3UgbXVzdCBnaXZlIGEgc2luZ2xlIEFycmF5fE9iamVjdHxTdHJpbmcgYXJndW1lbnQgb3IgbXVsdGlwbGUgU3RyaW5nIGFyZ3VtZW50c1wiO1xuICBpZiAob2JqVHlwZSA9PT0gXCJNYXBcIiB8fCBvYmpUeXBlID09PSBcIlNldFwiKSB7XG4gICAgZGVlcFN0ciA9IGlzRGVlcCA/IFwiZGVlcGx5IFwiIDogXCJcIjtcbiAgICBhY3R1YWwgPSBbXTtcbiAgICBvYmouZm9yRWFjaChmdW5jdGlvbih2YWwsIGtleSkge1xuICAgICAgYWN0dWFsLnB1c2goa2V5KTtcbiAgICB9KTtcbiAgICBpZiAoa2V5c1R5cGUgIT09IFwiQXJyYXlcIikge1xuICAgICAga2V5cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFjdHVhbCA9IGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzKG9iaik7XG4gICAgc3dpdGNoIChrZXlzVHlwZSkge1xuICAgICAgY2FzZSBcIkFycmF5XCI6XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtaXhlZEFyZ3NNc2csIHZvaWQgMCwgc3NmaSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiT2JqZWN0XCI6XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtaXhlZEFyZ3NNc2csIHZvaWQgMCwgc3NmaSk7XG4gICAgICAgIH1cbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKGtleXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGtleXMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIH1cbiAgICBrZXlzID0ga2V5cy5tYXAoZnVuY3Rpb24odmFsKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJzeW1ib2xcIiA/IHZhbCA6IFN0cmluZyh2YWwpO1xuICAgIH0pO1xuICB9XG4gIGlmICgha2V5cy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZmxhZ01zZyArIFwia2V5cyByZXF1aXJlZFwiLCB2b2lkIDAsIHNzZmkpO1xuICB9XG4gIHZhciBsZW4gPSBrZXlzLmxlbmd0aCwgYW55ID0gZmxhZzIodGhpcywgXCJhbnlcIiksIGFsbCA9IGZsYWcyKHRoaXMsIFwiYWxsXCIpLCBleHBlY3RlZCA9IGtleXMsIGlzRXFsID0gaXNEZWVwID8gZmxhZzIodGhpcywgXCJlcWxcIikgOiAodmFsMSwgdmFsMikgPT4gdmFsMSA9PT0gdmFsMjtcbiAgaWYgKCFhbnkgJiYgIWFsbCkge1xuICAgIGFsbCA9IHRydWU7XG4gIH1cbiAgaWYgKGFueSkge1xuICAgIG9rID0gZXhwZWN0ZWQuc29tZShmdW5jdGlvbihleHBlY3RlZEtleSkge1xuICAgICAgcmV0dXJuIGFjdHVhbC5zb21lKGZ1bmN0aW9uKGFjdHVhbEtleSkge1xuICAgICAgICByZXR1cm4gaXNFcWwoZXhwZWN0ZWRLZXksIGFjdHVhbEtleSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuICBpZiAoYWxsKSB7XG4gICAgb2sgPSBleHBlY3RlZC5ldmVyeShmdW5jdGlvbihleHBlY3RlZEtleSkge1xuICAgICAgcmV0dXJuIGFjdHVhbC5zb21lKGZ1bmN0aW9uKGFjdHVhbEtleSkge1xuICAgICAgICByZXR1cm4gaXNFcWwoZXhwZWN0ZWRLZXksIGFjdHVhbEtleSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAoIWZsYWcyKHRoaXMsIFwiY29udGFpbnNcIikpIHtcbiAgICAgIG9rID0gb2sgJiYga2V5cy5sZW5ndGggPT0gYWN0dWFsLmxlbmd0aDtcbiAgICB9XG4gIH1cbiAgaWYgKGxlbiA+IDEpIHtcbiAgICBrZXlzID0ga2V5cy5tYXAoZnVuY3Rpb24oa2V5KSB7XG4gICAgICByZXR1cm4gaW5zcGVjdDIoa2V5KTtcbiAgICB9KTtcbiAgICB2YXIgbGFzdCA9IGtleXMucG9wKCk7XG4gICAgaWYgKGFsbCkge1xuICAgICAgc3RyID0ga2V5cy5qb2luKFwiLCBcIikgKyBcIiwgYW5kIFwiICsgbGFzdDtcbiAgICB9XG4gICAgaWYgKGFueSkge1xuICAgICAgc3RyID0ga2V5cy5qb2luKFwiLCBcIikgKyBcIiwgb3IgXCIgKyBsYXN0O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzdHIgPSBpbnNwZWN0MihrZXlzWzBdKTtcbiAgfVxuICBzdHIgPSAobGVuID4gMSA/IFwia2V5cyBcIiA6IFwia2V5IFwiKSArIHN0cjtcbiAgc3RyID0gKGZsYWcyKHRoaXMsIFwiY29udGFpbnNcIikgPyBcImNvbnRhaW4gXCIgOiBcImhhdmUgXCIpICsgc3RyO1xuICB0aGlzLmFzc2VydChcbiAgICBvayxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gXCIgKyBkZWVwU3RyICsgc3RyLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgXCIgKyBkZWVwU3RyICsgc3RyLFxuICAgIGV4cGVjdGVkLnNsaWNlKDApLnNvcnQoY29tcGFyZUJ5SW5zcGVjdCksXG4gICAgYWN0dWFsLnNvcnQoY29tcGFyZUJ5SW5zcGVjdCksXG4gICAgdHJ1ZVxuICApO1xufVxuX19uYW1lKGFzc2VydEtleXMsIFwiYXNzZXJ0S2V5c1wiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJrZXlzXCIsIGFzc2VydEtleXMpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImtleVwiLCBhc3NlcnRLZXlzKTtcbmZ1bmN0aW9uIGFzc2VydFRocm93cyhlcnJvckxpa2UsIGVyck1zZ01hdGNoZXIsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIG5lZ2F0ZSA9IGZsYWcyKHRoaXMsIFwibmVnYXRlXCIpIHx8IGZhbHNlO1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYShcImZ1bmN0aW9uXCIpO1xuICBpZiAoaXNSZWdFeHAyKGVycm9yTGlrZSkgfHwgdHlwZW9mIGVycm9yTGlrZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIGVyck1zZ01hdGNoZXIgPSBlcnJvckxpa2U7XG4gICAgZXJyb3JMaWtlID0gbnVsbDtcbiAgfVxuICBsZXQgY2F1Z2h0RXJyO1xuICBsZXQgZXJyb3JXYXNUaHJvd24gPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICBvYmooKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyb3JXYXNUaHJvd24gPSB0cnVlO1xuICAgIGNhdWdodEVyciA9IGVycjtcbiAgfVxuICB2YXIgZXZlcnlBcmdJc1VuZGVmaW5lZCA9IGVycm9yTGlrZSA9PT0gdm9pZCAwICYmIGVyck1zZ01hdGNoZXIgPT09IHZvaWQgMDtcbiAgdmFyIGV2ZXJ5QXJnSXNEZWZpbmVkID0gQm9vbGVhbihlcnJvckxpa2UgJiYgZXJyTXNnTWF0Y2hlcik7XG4gIHZhciBlcnJvckxpa2VGYWlsID0gZmFsc2U7XG4gIHZhciBlcnJNc2dNYXRjaGVyRmFpbCA9IGZhbHNlO1xuICBpZiAoZXZlcnlBcmdJc1VuZGVmaW5lZCB8fCAhZXZlcnlBcmdJc1VuZGVmaW5lZCAmJiAhbmVnYXRlKSB7XG4gICAgdmFyIGVycm9yTGlrZVN0cmluZyA9IFwiYW4gZXJyb3JcIjtcbiAgICBpZiAoZXJyb3JMaWtlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGVycm9yTGlrZVN0cmluZyA9IFwiI3tleHB9XCI7XG4gICAgfSBlbHNlIGlmIChlcnJvckxpa2UpIHtcbiAgICAgIGVycm9yTGlrZVN0cmluZyA9IGNoZWNrX2Vycm9yX2V4cG9ydHMuZ2V0Q29uc3RydWN0b3JOYW1lKGVycm9yTGlrZSk7XG4gICAgfVxuICAgIGxldCBhY3R1YWwgPSBjYXVnaHRFcnI7XG4gICAgaWYgKGNhdWdodEVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBhY3R1YWwgPSBjYXVnaHRFcnIudG9TdHJpbmcoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjYXVnaHRFcnIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGFjdHVhbCA9IGNhdWdodEVycjtcbiAgICB9IGVsc2UgaWYgKGNhdWdodEVyciAmJiAodHlwZW9mIGNhdWdodEVyciA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2F1Z2h0RXJyID09PSBcImZ1bmN0aW9uXCIpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhY3R1YWwgPSBjaGVja19lcnJvcl9leHBvcnRzLmdldENvbnN0cnVjdG9yTmFtZShjYXVnaHRFcnIpO1xuICAgICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmFzc2VydChcbiAgICAgIGVycm9yV2FzVGhyb3duLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIHRocm93IFwiICsgZXJyb3JMaWtlU3RyaW5nLFxuICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCB0aHJvdyBhbiBlcnJvciBidXQgI3thY3R9IHdhcyB0aHJvd25cIixcbiAgICAgIGVycm9yTGlrZSAmJiBlcnJvckxpa2UudG9TdHJpbmcoKSxcbiAgICAgIGFjdHVhbFxuICAgICk7XG4gIH1cbiAgaWYgKGVycm9yTGlrZSAmJiBjYXVnaHRFcnIpIHtcbiAgICBpZiAoZXJyb3JMaWtlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIHZhciBpc0NvbXBhdGlibGVJbnN0YW5jZSA9IGNoZWNrX2Vycm9yX2V4cG9ydHMuY29tcGF0aWJsZUluc3RhbmNlKGNhdWdodEVyciwgZXJyb3JMaWtlKTtcbiAgICAgIGlmIChpc0NvbXBhdGlibGVJbnN0YW5jZSA9PT0gbmVnYXRlKSB7XG4gICAgICAgIGlmIChldmVyeUFyZ0lzRGVmaW5lZCAmJiBuZWdhdGUpIHtcbiAgICAgICAgICBlcnJvckxpa2VGYWlsID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgIG5lZ2F0ZSxcbiAgICAgICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyAje2V4cH0gYnV0ICN7YWN0fSB3YXMgdGhyb3duXCIsXG4gICAgICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IHRocm93ICN7ZXhwfVwiICsgKGNhdWdodEVyciAmJiAhbmVnYXRlID8gXCIgYnV0ICN7YWN0fSB3YXMgdGhyb3duXCIgOiBcIlwiKSxcbiAgICAgICAgICAgIGVycm9yTGlrZS50b1N0cmluZygpLFxuICAgICAgICAgICAgY2F1Z2h0RXJyLnRvU3RyaW5nKClcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBpc0NvbXBhdGlibGVDb25zdHJ1Y3RvciA9IGNoZWNrX2Vycm9yX2V4cG9ydHMuY29tcGF0aWJsZUNvbnN0cnVjdG9yKGNhdWdodEVyciwgZXJyb3JMaWtlKTtcbiAgICBpZiAoaXNDb21wYXRpYmxlQ29uc3RydWN0b3IgPT09IG5lZ2F0ZSkge1xuICAgICAgaWYgKGV2ZXJ5QXJnSXNEZWZpbmVkICYmIG5lZ2F0ZSkge1xuICAgICAgICBlcnJvckxpa2VGYWlsID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIG5lZ2F0ZSxcbiAgICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgI3tleHB9IGJ1dCAje2FjdH0gd2FzIHRocm93blwiLFxuICAgICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgdGhyb3cgI3tleHB9XCIgKyAoY2F1Z2h0RXJyID8gXCIgYnV0ICN7YWN0fSB3YXMgdGhyb3duXCIgOiBcIlwiKSxcbiAgICAgICAgICBlcnJvckxpa2UgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yTGlrZS50b1N0cmluZygpIDogZXJyb3JMaWtlICYmIGNoZWNrX2Vycm9yX2V4cG9ydHMuZ2V0Q29uc3RydWN0b3JOYW1lKGVycm9yTGlrZSksXG4gICAgICAgICAgY2F1Z2h0RXJyIGluc3RhbmNlb2YgRXJyb3IgPyBjYXVnaHRFcnIudG9TdHJpbmcoKSA6IGNhdWdodEVyciAmJiBjaGVja19lcnJvcl9leHBvcnRzLmdldENvbnN0cnVjdG9yTmFtZShjYXVnaHRFcnIpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChjYXVnaHRFcnIgJiYgZXJyTXNnTWF0Y2hlciAhPT0gdm9pZCAwICYmIGVyck1zZ01hdGNoZXIgIT09IG51bGwpIHtcbiAgICB2YXIgcGxhY2Vob2xkZXIgPSBcImluY2x1ZGluZ1wiO1xuICAgIGlmIChpc1JlZ0V4cDIoZXJyTXNnTWF0Y2hlcikpIHtcbiAgICAgIHBsYWNlaG9sZGVyID0gXCJtYXRjaGluZ1wiO1xuICAgIH1cbiAgICB2YXIgaXNDb21wYXRpYmxlTWVzc2FnZSA9IGNoZWNrX2Vycm9yX2V4cG9ydHMuY29tcGF0aWJsZU1lc3NhZ2UoY2F1Z2h0RXJyLCBlcnJNc2dNYXRjaGVyKTtcbiAgICBpZiAoaXNDb21wYXRpYmxlTWVzc2FnZSA9PT0gbmVnYXRlKSB7XG4gICAgICBpZiAoZXZlcnlBcmdJc0RlZmluZWQgJiYgbmVnYXRlKSB7XG4gICAgICAgIGVyck1zZ01hdGNoZXJGYWlsID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgIG5lZ2F0ZSxcbiAgICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gdGhyb3cgZXJyb3IgXCIgKyBwbGFjZWhvbGRlciArIFwiICN7ZXhwfSBidXQgZ290ICN7YWN0fVwiLFxuICAgICAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyBlcnJvciBub3QgXCIgKyBwbGFjZWhvbGRlciArIFwiICN7ZXhwfVwiLFxuICAgICAgICAgIGVyck1zZ01hdGNoZXIsXG4gICAgICAgICAgY2hlY2tfZXJyb3JfZXhwb3J0cy5nZXRNZXNzYWdlKGNhdWdodEVycilcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGVycm9yTGlrZUZhaWwgJiYgZXJyTXNnTWF0Y2hlckZhaWwpIHtcbiAgICB0aGlzLmFzc2VydChcbiAgICAgIG5lZ2F0ZSxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byB0aHJvdyAje2V4cH0gYnV0ICN7YWN0fSB3YXMgdGhyb3duXCIsXG4gICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IHRocm93ICN7ZXhwfVwiICsgKGNhdWdodEVyciA/IFwiIGJ1dCAje2FjdH0gd2FzIHRocm93blwiIDogXCJcIiksXG4gICAgICBlcnJvckxpa2UgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yTGlrZS50b1N0cmluZygpIDogZXJyb3JMaWtlICYmIGNoZWNrX2Vycm9yX2V4cG9ydHMuZ2V0Q29uc3RydWN0b3JOYW1lKGVycm9yTGlrZSksXG4gICAgICBjYXVnaHRFcnIgaW5zdGFuY2VvZiBFcnJvciA/IGNhdWdodEVyci50b1N0cmluZygpIDogY2F1Z2h0RXJyICYmIGNoZWNrX2Vycm9yX2V4cG9ydHMuZ2V0Q29uc3RydWN0b3JOYW1lKGNhdWdodEVycilcbiAgICApO1xuICB9XG4gIGZsYWcyKHRoaXMsIFwib2JqZWN0XCIsIGNhdWdodEVycik7XG59XG5fX25hbWUoYXNzZXJ0VGhyb3dzLCBcImFzc2VydFRocm93c1wiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJ0aHJvd1wiLCBhc3NlcnRUaHJvd3MpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcInRocm93c1wiLCBhc3NlcnRUaHJvd3MpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcIlRocm93XCIsIGFzc2VydFRocm93cyk7XG5mdW5jdGlvbiByZXNwb25kVG8obWV0aG9kLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBpdHNlbGYgPSBmbGFnMih0aGlzLCBcIml0c2VsZlwiKSwgY29udGV4dCA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIG9iaiAmJiAhaXRzZWxmID8gb2JqLnByb3RvdHlwZVttZXRob2RdIDogb2JqW21ldGhvZF07XG4gIHRoaXMuYXNzZXJ0KFxuICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGNvbnRleHQsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIHJlc3BvbmQgdG8gXCIgKyBpbnNwZWN0MihtZXRob2QpLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgcmVzcG9uZCB0byBcIiArIGluc3BlY3QyKG1ldGhvZClcbiAgKTtcbn1cbl9fbmFtZShyZXNwb25kVG8sIFwicmVzcG9uZFRvXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcInJlc3BvbmRUb1wiLCByZXNwb25kVG8pO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcInJlc3BvbmRzVG9cIiwgcmVzcG9uZFRvKTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcIml0c2VsZlwiLCBmdW5jdGlvbigpIHtcbiAgZmxhZzIodGhpcywgXCJpdHNlbGZcIiwgdHJ1ZSk7XG59KTtcbmZ1bmN0aW9uIHNhdGlzZnkobWF0Y2hlciwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdmFyIHJlc3VsdCA9IG1hdGNoZXIob2JqKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgcmVzdWx0LFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBzYXRpc2Z5IFwiICsgb2JqRGlzcGxheShtYXRjaGVyKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IHNhdGlzZnlcIiArIG9iakRpc3BsYXkobWF0Y2hlciksXG4gICAgZmxhZzIodGhpcywgXCJuZWdhdGVcIikgPyBmYWxzZSA6IHRydWUsXG4gICAgcmVzdWx0XG4gICk7XG59XG5fX25hbWUoc2F0aXNmeSwgXCJzYXRpc2Z5XCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcInNhdGlzZnlcIiwgc2F0aXNmeSk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwic2F0aXNmaWVzXCIsIHNhdGlzZnkpO1xuZnVuY3Rpb24gY2xvc2VUbyhleHBlY3RlZCwgZGVsdGEsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIik7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5udW1lcmljO1xuICBsZXQgbWVzc2FnZSA9IFwiQSBgZGVsdGFgIHZhbHVlIGlzIHJlcXVpcmVkIGZvciBgY2xvc2VUb2BcIjtcbiAgaWYgKGRlbHRhID09IHZvaWQgMClcbiAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZmxhZ01zZyA/IGAke2ZsYWdNc2d9OiAke21lc3NhZ2V9YCA6IG1lc3NhZ2UsIHZvaWQgMCwgc3NmaSk7XG4gIG5ldyBBc3NlcnRpb24oZGVsdGEsIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLm51bWVyaWM7XG4gIG1lc3NhZ2UgPSBcIkEgYGV4cGVjdGVkYCB2YWx1ZSBpcyByZXF1aXJlZCBmb3IgYGNsb3NlVG9gXCI7XG4gIGlmIChleHBlY3RlZCA9PSB2b2lkIDApXG4gICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGZsYWdNc2cgPyBgJHtmbGFnTXNnfTogJHttZXNzYWdlfWAgOiBtZXNzYWdlLCB2b2lkIDAsIHNzZmkpO1xuICBuZXcgQXNzZXJ0aW9uKGV4cGVjdGVkLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5udW1lcmljO1xuICBjb25zdCBhYnMgPSAvKiBAX19QVVJFX18gKi8gX19uYW1lKCh4KSA9PiB4IDwgMG4gPyAteCA6IHgsIFwiYWJzXCIpO1xuICB0aGlzLmFzc2VydChcbiAgICBhYnMob2JqIC0gZXhwZWN0ZWQpIDw9IGRlbHRhLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBjbG9zZSB0byBcIiArIGV4cGVjdGVkICsgXCIgKy8tIFwiICsgZGVsdGEsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IG5vdCB0byBiZSBjbG9zZSB0byBcIiArIGV4cGVjdGVkICsgXCIgKy8tIFwiICsgZGVsdGFcbiAgKTtcbn1cbl9fbmFtZShjbG9zZVRvLCBcImNsb3NlVG9cIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiY2xvc2VUb1wiLCBjbG9zZVRvKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJhcHByb3hpbWF0ZWx5XCIsIGNsb3NlVG8pO1xuZnVuY3Rpb24gaXNTdWJzZXRPZihfc3Vic2V0LCBfc3VwZXJzZXQsIGNtcCwgY29udGFpbnMsIG9yZGVyZWQpIHtcbiAgbGV0IHN1cGVyc2V0ID0gQXJyYXkuZnJvbShfc3VwZXJzZXQpO1xuICBsZXQgc3Vic2V0ID0gQXJyYXkuZnJvbShfc3Vic2V0KTtcbiAgaWYgKCFjb250YWlucykge1xuICAgIGlmIChzdWJzZXQubGVuZ3RoICE9PSBzdXBlcnNldC5sZW5ndGgpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgc3VwZXJzZXQgPSBzdXBlcnNldC5zbGljZSgpO1xuICB9XG4gIHJldHVybiBzdWJzZXQuZXZlcnkoZnVuY3Rpb24oZWxlbSwgaWR4KSB7XG4gICAgaWYgKG9yZGVyZWQpXG4gICAgICByZXR1cm4gY21wID8gY21wKGVsZW0sIHN1cGVyc2V0W2lkeF0pIDogZWxlbSA9PT0gc3VwZXJzZXRbaWR4XTtcbiAgICBpZiAoIWNtcCkge1xuICAgICAgdmFyIG1hdGNoSWR4ID0gc3VwZXJzZXQuaW5kZXhPZihlbGVtKTtcbiAgICAgIGlmIChtYXRjaElkeCA9PT0gLTEpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIGlmICghY29udGFpbnMpXG4gICAgICAgIHN1cGVyc2V0LnNwbGljZShtYXRjaElkeCwgMSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyc2V0LnNvbWUoZnVuY3Rpb24oZWxlbTIsIG1hdGNoSWR4Mikge1xuICAgICAgaWYgKCFjbXAoZWxlbSwgZWxlbTIpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoIWNvbnRhaW5zKVxuICAgICAgICBzdXBlcnNldC5zcGxpY2UobWF0Y2hJZHgyLCAxKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9KTtcbn1cbl9fbmFtZShpc1N1YnNldE9mLCBcImlzU3Vic2V0T2ZcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwibWVtYmVyc1wiLCBmdW5jdGlvbihzdWJzZXQsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIik7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5iZS5pdGVyYWJsZTtcbiAgbmV3IEFzc2VydGlvbihzdWJzZXQsIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmJlLml0ZXJhYmxlO1xuICB2YXIgY29udGFpbnMgPSBmbGFnMih0aGlzLCBcImNvbnRhaW5zXCIpO1xuICB2YXIgb3JkZXJlZCA9IGZsYWcyKHRoaXMsIFwib3JkZXJlZFwiKTtcbiAgdmFyIHN1YmplY3QsIGZhaWxNc2csIGZhaWxOZWdhdGVNc2c7XG4gIGlmIChjb250YWlucykge1xuICAgIHN1YmplY3QgPSBvcmRlcmVkID8gXCJhbiBvcmRlcmVkIHN1cGVyc2V0XCIgOiBcImEgc3VwZXJzZXRcIjtcbiAgICBmYWlsTXNnID0gXCJleHBlY3RlZCAje3RoaXN9IHRvIGJlIFwiICsgc3ViamVjdCArIFwiIG9mICN7ZXhwfVwiO1xuICAgIGZhaWxOZWdhdGVNc2cgPSBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIFwiICsgc3ViamVjdCArIFwiIG9mICN7ZXhwfVwiO1xuICB9IGVsc2Uge1xuICAgIHN1YmplY3QgPSBvcmRlcmVkID8gXCJvcmRlcmVkIG1lbWJlcnNcIiA6IFwibWVtYmVyc1wiO1xuICAgIGZhaWxNc2cgPSBcImV4cGVjdGVkICN7dGhpc30gdG8gaGF2ZSB0aGUgc2FtZSBcIiArIHN1YmplY3QgKyBcIiBhcyAje2V4cH1cIjtcbiAgICBmYWlsTmVnYXRlTXNnID0gXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBoYXZlIHRoZSBzYW1lIFwiICsgc3ViamVjdCArIFwiIGFzICN7ZXhwfVwiO1xuICB9XG4gIHZhciBjbXAgPSBmbGFnMih0aGlzLCBcImRlZXBcIikgPyBmbGFnMih0aGlzLCBcImVxbFwiKSA6IHZvaWQgMDtcbiAgdGhpcy5hc3NlcnQoXG4gICAgaXNTdWJzZXRPZihzdWJzZXQsIG9iaiwgY21wLCBjb250YWlucywgb3JkZXJlZCksXG4gICAgZmFpbE1zZyxcbiAgICBmYWlsTmVnYXRlTXNnLFxuICAgIHN1YnNldCxcbiAgICBvYmosXG4gICAgdHJ1ZVxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJpdGVyYWJsZVwiLCBmdW5jdGlvbihtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB0aGlzLmFzc2VydChcbiAgICBvYmogIT0gdm9pZCAwICYmIG9ialtTeW1ib2wuaXRlcmF0b3JdLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhbiBpdGVyYWJsZVwiLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgYmUgYW4gaXRlcmFibGVcIixcbiAgICBvYmpcbiAgKTtcbn0pO1xuZnVuY3Rpb24gb25lT2YobGlzdCwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBleHBlY3RlZCA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpLCBmbGFnTXNnID0gZmxhZzIodGhpcywgXCJtZXNzYWdlXCIpLCBzc2ZpID0gZmxhZzIodGhpcywgXCJzc2ZpXCIpLCBjb250YWlucyA9IGZsYWcyKHRoaXMsIFwiY29udGFpbnNcIiksIGlzRGVlcCA9IGZsYWcyKHRoaXMsIFwiZGVlcFwiKSwgZXFsID0gZmxhZzIodGhpcywgXCJlcWxcIik7XG4gIG5ldyBBc3NlcnRpb24obGlzdCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkudG8uYmUuYW4oXCJhcnJheVwiKTtcbiAgaWYgKGNvbnRhaW5zKSB7XG4gICAgdGhpcy5hc3NlcnQoXG4gICAgICBsaXN0LnNvbWUoZnVuY3Rpb24ocG9zc2liaWxpdHkpIHtcbiAgICAgICAgcmV0dXJuIGV4cGVjdGVkLmluZGV4T2YocG9zc2liaWxpdHkpID4gLTE7XG4gICAgICB9KSxcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBjb250YWluIG9uZSBvZiAje2V4cH1cIixcbiAgICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBub3QgY29udGFpbiBvbmUgb2YgI3tleHB9XCIsXG4gICAgICBsaXN0LFxuICAgICAgZXhwZWN0ZWRcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGlmIChpc0RlZXApIHtcbiAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICBsaXN0LnNvbWUoZnVuY3Rpb24ocG9zc2liaWxpdHkpIHtcbiAgICAgICAgICByZXR1cm4gZXFsKGV4cGVjdGVkLCBwb3NzaWJpbGl0eSk7XG4gICAgICAgIH0pLFxuICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gZGVlcGx5IGVxdWFsIG9uZSBvZiAje2V4cH1cIixcbiAgICAgICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIGRlZXBseSBlcXVhbCBvbmUgb2YgI3tleHB9XCIsXG4gICAgICAgIGxpc3QsXG4gICAgICAgIGV4cGVjdGVkXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgbGlzdC5pbmRleE9mKGV4cGVjdGVkKSA+IC0xLFxuICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgb25lIG9mICN7ZXhwfVwiLFxuICAgICAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIG9uZSBvZiAje2V4cH1cIixcbiAgICAgICAgbGlzdCxcbiAgICAgICAgZXhwZWN0ZWRcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5fX25hbWUob25lT2YsIFwib25lT2ZcIik7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwib25lT2ZcIiwgb25lT2YpO1xuZnVuY3Rpb24gYXNzZXJ0Q2hhbmdlcyhzdWJqZWN0LCBwcm9wLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIGZuID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIik7XG4gIG5ldyBBc3NlcnRpb24oZm4sIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJmdW5jdGlvblwiKTtcbiAgdmFyIGluaXRpYWw7XG4gIGlmICghcHJvcCkge1xuICAgIG5ldyBBc3NlcnRpb24oc3ViamVjdCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYShcImZ1bmN0aW9uXCIpO1xuICAgIGluaXRpYWwgPSBzdWJqZWN0KCk7XG4gIH0gZWxzZSB7XG4gICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KHByb3ApO1xuICAgIGluaXRpYWwgPSBzdWJqZWN0W3Byb3BdO1xuICB9XG4gIGZuKCk7XG4gIHZhciBmaW5hbCA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gc3ViamVjdCgpIDogc3ViamVjdFtwcm9wXTtcbiAgdmFyIG1zZ09iaiA9IHByb3AgPT09IHZvaWQgMCB8fCBwcm9wID09PSBudWxsID8gaW5pdGlhbCA6IFwiLlwiICsgcHJvcDtcbiAgZmxhZzIodGhpcywgXCJkZWx0YU1zZ09ialwiLCBtc2dPYmopO1xuICBmbGFnMih0aGlzLCBcImluaXRpYWxEZWx0YVZhbHVlXCIsIGluaXRpYWwpO1xuICBmbGFnMih0aGlzLCBcImZpbmFsRGVsdGFWYWx1ZVwiLCBmaW5hbCk7XG4gIGZsYWcyKHRoaXMsIFwiZGVsdGFCZWhhdmlvclwiLCBcImNoYW5nZVwiKTtcbiAgZmxhZzIodGhpcywgXCJyZWFsRGVsdGFcIiwgZmluYWwgIT09IGluaXRpYWwpO1xuICB0aGlzLmFzc2VydChcbiAgICBpbml0aWFsICE9PSBmaW5hbCxcbiAgICBcImV4cGVjdGVkIFwiICsgbXNnT2JqICsgXCIgdG8gY2hhbmdlXCIsXG4gICAgXCJleHBlY3RlZCBcIiArIG1zZ09iaiArIFwiIHRvIG5vdCBjaGFuZ2VcIlxuICApO1xufVxuX19uYW1lKGFzc2VydENoYW5nZXMsIFwiYXNzZXJ0Q2hhbmdlc1wiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJjaGFuZ2VcIiwgYXNzZXJ0Q2hhbmdlcyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiY2hhbmdlc1wiLCBhc3NlcnRDaGFuZ2VzKTtcbmZ1bmN0aW9uIGFzc2VydEluY3JlYXNlcyhzdWJqZWN0LCBwcm9wLCBtc2cpIHtcbiAgaWYgKG1zZylcbiAgICBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiwgbXNnKTtcbiAgdmFyIGZuID0gZmxhZzIodGhpcywgXCJvYmplY3RcIiksIGZsYWdNc2cgPSBmbGFnMih0aGlzLCBcIm1lc3NhZ2VcIiksIHNzZmkgPSBmbGFnMih0aGlzLCBcInNzZmlcIik7XG4gIG5ldyBBc3NlcnRpb24oZm4sIGZsYWdNc2csIHNzZmksIHRydWUpLmlzLmEoXCJmdW5jdGlvblwiKTtcbiAgdmFyIGluaXRpYWw7XG4gIGlmICghcHJvcCkge1xuICAgIG5ldyBBc3NlcnRpb24oc3ViamVjdCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYShcImZ1bmN0aW9uXCIpO1xuICAgIGluaXRpYWwgPSBzdWJqZWN0KCk7XG4gIH0gZWxzZSB7XG4gICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS50by5oYXZlLnByb3BlcnR5KHByb3ApO1xuICAgIGluaXRpYWwgPSBzdWJqZWN0W3Byb3BdO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oaW5pdGlhbCwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYShcIm51bWJlclwiKTtcbiAgZm4oKTtcbiAgdmFyIGZpbmFsID0gcHJvcCA9PT0gdm9pZCAwIHx8IHByb3AgPT09IG51bGwgPyBzdWJqZWN0KCkgOiBzdWJqZWN0W3Byb3BdO1xuICB2YXIgbXNnT2JqID0gcHJvcCA9PT0gdm9pZCAwIHx8IHByb3AgPT09IG51bGwgPyBpbml0aWFsIDogXCIuXCIgKyBwcm9wO1xuICBmbGFnMih0aGlzLCBcImRlbHRhTXNnT2JqXCIsIG1zZ09iaik7XG4gIGZsYWcyKHRoaXMsIFwiaW5pdGlhbERlbHRhVmFsdWVcIiwgaW5pdGlhbCk7XG4gIGZsYWcyKHRoaXMsIFwiZmluYWxEZWx0YVZhbHVlXCIsIGZpbmFsKTtcbiAgZmxhZzIodGhpcywgXCJkZWx0YUJlaGF2aW9yXCIsIFwiaW5jcmVhc2VcIik7XG4gIGZsYWcyKHRoaXMsIFwicmVhbERlbHRhXCIsIGZpbmFsIC0gaW5pdGlhbCk7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGZpbmFsIC0gaW5pdGlhbCA+IDAsXG4gICAgXCJleHBlY3RlZCBcIiArIG1zZ09iaiArIFwiIHRvIGluY3JlYXNlXCIsXG4gICAgXCJleHBlY3RlZCBcIiArIG1zZ09iaiArIFwiIHRvIG5vdCBpbmNyZWFzZVwiXG4gICk7XG59XG5fX25hbWUoYXNzZXJ0SW5jcmVhc2VzLCBcImFzc2VydEluY3JlYXNlc1wiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJpbmNyZWFzZVwiLCBhc3NlcnRJbmNyZWFzZXMpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImluY3JlYXNlc1wiLCBhc3NlcnRJbmNyZWFzZXMpO1xuZnVuY3Rpb24gYXNzZXJ0RGVjcmVhc2VzKHN1YmplY3QsIHByb3AsIG1zZykge1xuICBpZiAobXNnKVxuICAgIGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiLCBtc2cpO1xuICB2YXIgZm4gPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKSwgZmxhZ01zZyA9IGZsYWcyKHRoaXMsIFwibWVzc2FnZVwiKSwgc3NmaSA9IGZsYWcyKHRoaXMsIFwic3NmaVwiKTtcbiAgbmV3IEFzc2VydGlvbihmbiwgZmxhZ01zZywgc3NmaSwgdHJ1ZSkuaXMuYShcImZ1bmN0aW9uXCIpO1xuICB2YXIgaW5pdGlhbDtcbiAgaWYgKCFwcm9wKSB7XG4gICAgbmV3IEFzc2VydGlvbihzdWJqZWN0LCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwiZnVuY3Rpb25cIik7XG4gICAgaW5pdGlhbCA9IHN1YmplY3QoKTtcbiAgfSBlbHNlIHtcbiAgICBuZXcgQXNzZXJ0aW9uKHN1YmplY3QsIGZsYWdNc2csIHNzZmksIHRydWUpLnRvLmhhdmUucHJvcGVydHkocHJvcCk7XG4gICAgaW5pdGlhbCA9IHN1YmplY3RbcHJvcF07XG4gIH1cbiAgbmV3IEFzc2VydGlvbihpbml0aWFsLCBmbGFnTXNnLCBzc2ZpLCB0cnVlKS5pcy5hKFwibnVtYmVyXCIpO1xuICBmbigpO1xuICB2YXIgZmluYWwgPSBwcm9wID09PSB2b2lkIDAgfHwgcHJvcCA9PT0gbnVsbCA/IHN1YmplY3QoKSA6IHN1YmplY3RbcHJvcF07XG4gIHZhciBtc2dPYmogPSBwcm9wID09PSB2b2lkIDAgfHwgcHJvcCA9PT0gbnVsbCA/IGluaXRpYWwgOiBcIi5cIiArIHByb3A7XG4gIGZsYWcyKHRoaXMsIFwiZGVsdGFNc2dPYmpcIiwgbXNnT2JqKTtcbiAgZmxhZzIodGhpcywgXCJpbml0aWFsRGVsdGFWYWx1ZVwiLCBpbml0aWFsKTtcbiAgZmxhZzIodGhpcywgXCJmaW5hbERlbHRhVmFsdWVcIiwgZmluYWwpO1xuICBmbGFnMih0aGlzLCBcImRlbHRhQmVoYXZpb3JcIiwgXCJkZWNyZWFzZVwiKTtcbiAgZmxhZzIodGhpcywgXCJyZWFsRGVsdGFcIiwgaW5pdGlhbCAtIGZpbmFsKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgZmluYWwgLSBpbml0aWFsIDwgMCxcbiAgICBcImV4cGVjdGVkIFwiICsgbXNnT2JqICsgXCIgdG8gZGVjcmVhc2VcIixcbiAgICBcImV4cGVjdGVkIFwiICsgbXNnT2JqICsgXCIgdG8gbm90IGRlY3JlYXNlXCJcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnREZWNyZWFzZXMsIFwiYXNzZXJ0RGVjcmVhc2VzXCIpO1xuQXNzZXJ0aW9uLmFkZE1ldGhvZChcImRlY3JlYXNlXCIsIGFzc2VydERlY3JlYXNlcyk7XG5Bc3NlcnRpb24uYWRkTWV0aG9kKFwiZGVjcmVhc2VzXCIsIGFzc2VydERlY3JlYXNlcyk7XG5mdW5jdGlvbiBhc3NlcnREZWx0YShkZWx0YSwgbXNnKSB7XG4gIGlmIChtc2cpXG4gICAgZmxhZzIodGhpcywgXCJtZXNzYWdlXCIsIG1zZyk7XG4gIHZhciBtc2dPYmogPSBmbGFnMih0aGlzLCBcImRlbHRhTXNnT2JqXCIpO1xuICB2YXIgaW5pdGlhbCA9IGZsYWcyKHRoaXMsIFwiaW5pdGlhbERlbHRhVmFsdWVcIik7XG4gIHZhciBmaW5hbCA9IGZsYWcyKHRoaXMsIFwiZmluYWxEZWx0YVZhbHVlXCIpO1xuICB2YXIgYmVoYXZpb3IgPSBmbGFnMih0aGlzLCBcImRlbHRhQmVoYXZpb3JcIik7XG4gIHZhciByZWFsRGVsdGEgPSBmbGFnMih0aGlzLCBcInJlYWxEZWx0YVwiKTtcbiAgdmFyIGV4cHJlc3Npb247XG4gIGlmIChiZWhhdmlvciA9PT0gXCJjaGFuZ2VcIikge1xuICAgIGV4cHJlc3Npb24gPSBNYXRoLmFicyhmaW5hbCAtIGluaXRpYWwpID09PSBNYXRoLmFicyhkZWx0YSk7XG4gIH0gZWxzZSB7XG4gICAgZXhwcmVzc2lvbiA9IHJlYWxEZWx0YSA9PT0gTWF0aC5hYnMoZGVsdGEpO1xuICB9XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGV4cHJlc3Npb24sXG4gICAgXCJleHBlY3RlZCBcIiArIG1zZ09iaiArIFwiIHRvIFwiICsgYmVoYXZpb3IgKyBcIiBieSBcIiArIGRlbHRhLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBtc2dPYmogKyBcIiB0byBub3QgXCIgKyBiZWhhdmlvciArIFwiIGJ5IFwiICsgZGVsdGFcbiAgKTtcbn1cbl9fbmFtZShhc3NlcnREZWx0YSwgXCJhc3NlcnREZWx0YVwiKTtcbkFzc2VydGlvbi5hZGRNZXRob2QoXCJieVwiLCBhc3NlcnREZWx0YSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJleHRlbnNpYmxlXCIsIGZ1bmN0aW9uKCkge1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHZhciBpc0V4dGVuc2libGUgPSBvYmogPT09IE9iamVjdChvYmopICYmIE9iamVjdC5pc0V4dGVuc2libGUob2JqKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgaXNFeHRlbnNpYmxlLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBleHRlbnNpYmxlXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBleHRlbnNpYmxlXCJcbiAgKTtcbn0pO1xuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KFwic2VhbGVkXCIsIGZ1bmN0aW9uKCkge1xuICB2YXIgb2JqID0gZmxhZzIodGhpcywgXCJvYmplY3RcIik7XG4gIHZhciBpc1NlYWxlZCA9IG9iaiA9PT0gT2JqZWN0KG9iaikgPyBPYmplY3QuaXNTZWFsZWQob2JqKSA6IHRydWU7XG4gIHRoaXMuYXNzZXJ0KFxuICAgIGlzU2VhbGVkLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBzZWFsZWRcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIHNlYWxlZFwiXG4gICk7XG59KTtcbkFzc2VydGlvbi5hZGRQcm9wZXJ0eShcImZyb3plblwiLCBmdW5jdGlvbigpIHtcbiAgdmFyIG9iaiA9IGZsYWcyKHRoaXMsIFwib2JqZWN0XCIpO1xuICB2YXIgaXNGcm96ZW4gPSBvYmogPT09IE9iamVjdChvYmopID8gT2JqZWN0LmlzRnJvemVuKG9iaikgOiB0cnVlO1xuICB0aGlzLmFzc2VydChcbiAgICBpc0Zyb3plbixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gYmUgZnJvemVuXCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBiZSBmcm96ZW5cIlxuICApO1xufSk7XG5Bc3NlcnRpb24uYWRkUHJvcGVydHkoXCJmaW5pdGVcIiwgZnVuY3Rpb24obXNnKSB7XG4gIHZhciBvYmogPSBmbGFnMih0aGlzLCBcIm9iamVjdFwiKTtcbiAgdGhpcy5hc3NlcnQoXG4gICAgdHlwZW9mIG9iaiA9PT0gXCJudW1iZXJcIiAmJiBpc0Zpbml0ZShvYmopLFxuICAgIFwiZXhwZWN0ZWQgI3t0aGlzfSB0byBiZSBhIGZpbml0ZSBudW1iZXJcIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gbm90IGJlIGEgZmluaXRlIG51bWJlclwiXG4gICk7XG59KTtcblxuLy8gbGliL2NoYWkvaW50ZXJmYWNlL2V4cGVjdC5qc1xuZnVuY3Rpb24gZXhwZWN0KHZhbCwgbWVzc2FnZSkge1xuICByZXR1cm4gbmV3IEFzc2VydGlvbih2YWwsIG1lc3NhZ2UpO1xufVxuX19uYW1lKGV4cGVjdCwgXCJleHBlY3RcIik7XG5leHBlY3QuZmFpbCA9IGZ1bmN0aW9uKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wZXJhdG9yKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIG1lc3NhZ2UgPSBhY3R1YWw7XG4gICAgYWN0dWFsID0gdm9pZCAwO1xuICB9XG4gIG1lc3NhZ2UgPSBtZXNzYWdlIHx8IFwiZXhwZWN0LmZhaWwoKVwiO1xuICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobWVzc2FnZSwge1xuICAgIGFjdHVhbCxcbiAgICBleHBlY3RlZCxcbiAgICBvcGVyYXRvclxuICB9LCBleHBlY3QuZmFpbCk7XG59O1xuXG4vLyBsaWIvY2hhaS9pbnRlcmZhY2Uvc2hvdWxkLmpzXG52YXIgc2hvdWxkX2V4cG9ydHMgPSB7fTtcbl9fZXhwb3J0KHNob3VsZF9leHBvcnRzLCB7XG4gIFNob3VsZDogKCkgPT4gU2hvdWxkLFxuICBzaG91bGQ6ICgpID0+IHNob3VsZFxufSk7XG5mdW5jdGlvbiBsb2FkU2hvdWxkKCkge1xuICBmdW5jdGlvbiBzaG91bGRHZXR0ZXIoKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBTdHJpbmcgfHwgdGhpcyBpbnN0YW5jZW9mIE51bWJlciB8fCB0aGlzIGluc3RhbmNlb2YgQm9vbGVhbiB8fCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdGhpcyBpbnN0YW5jZW9mIFN5bWJvbCB8fCB0eXBlb2YgQmlnSW50ID09PSBcImZ1bmN0aW9uXCIgJiYgdGhpcyBpbnN0YW5jZW9mIEJpZ0ludCkge1xuICAgICAgcmV0dXJuIG5ldyBBc3NlcnRpb24odGhpcy52YWx1ZU9mKCksIG51bGwsIHNob3VsZEdldHRlcik7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQXNzZXJ0aW9uKHRoaXMsIG51bGwsIHNob3VsZEdldHRlcik7XG4gIH1cbiAgX19uYW1lKHNob3VsZEdldHRlciwgXCJzaG91bGRHZXR0ZXJcIik7XG4gIGZ1bmN0aW9uIHNob3VsZFNldHRlcih2YWx1ZSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInNob3VsZFwiLCB7XG4gICAgICB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIF9fbmFtZShzaG91bGRTZXR0ZXIsIFwic2hvdWxkU2V0dGVyXCIpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LnByb3RvdHlwZSwgXCJzaG91bGRcIiwge1xuICAgIHNldDogc2hvdWxkU2V0dGVyLFxuICAgIGdldDogc2hvdWxkR2V0dGVyLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbiAgdmFyIHNob3VsZDIgPSB7fTtcbiAgc2hvdWxkMi5mYWlsID0gZnVuY3Rpb24oYWN0dWFsLCBleHBlY3RlZCwgbWVzc2FnZSwgb3BlcmF0b3IpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIG1lc3NhZ2UgPSBhY3R1YWw7XG4gICAgICBhY3R1YWwgPSB2b2lkIDA7XG4gICAgfVxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlIHx8IFwic2hvdWxkLmZhaWwoKVwiO1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtZXNzYWdlLCB7XG4gICAgICBhY3R1YWwsXG4gICAgICBleHBlY3RlZCxcbiAgICAgIG9wZXJhdG9yXG4gICAgfSwgc2hvdWxkMi5mYWlsKTtcbiAgfTtcbiAgc2hvdWxkMi5lcXVhbCA9IGZ1bmN0aW9uKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UpIHtcbiAgICBuZXcgQXNzZXJ0aW9uKGFjdHVhbCwgbWVzc2FnZSkudG8uZXF1YWwoZXhwZWN0ZWQpO1xuICB9O1xuICBzaG91bGQyLlRocm93ID0gZnVuY3Rpb24oZm4sIGVycnQsIGVycnMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZykudG8uVGhyb3coZXJydCwgZXJycyk7XG4gIH07XG4gIHNob3VsZDIuZXhpc3QgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24odmFsLCBtc2cpLnRvLmV4aXN0O1xuICB9O1xuICBzaG91bGQyLm5vdCA9IHt9O1xuICBzaG91bGQyLm5vdC5lcXVhbCA9IGZ1bmN0aW9uKGFjdHVhbCwgZXhwZWN0ZWQsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oYWN0dWFsLCBtc2cpLnRvLm5vdC5lcXVhbChleHBlY3RlZCk7XG4gIH07XG4gIHNob3VsZDIubm90LlRocm93ID0gZnVuY3Rpb24oZm4sIGVycnQsIGVycnMsIG1zZykge1xuICAgIG5ldyBBc3NlcnRpb24oZm4sIG1zZykudG8ubm90LlRocm93KGVycnQsIGVycnMpO1xuICB9O1xuICBzaG91bGQyLm5vdC5leGlzdCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gICAgbmV3IEFzc2VydGlvbih2YWwsIG1zZykudG8ubm90LmV4aXN0O1xuICB9O1xuICBzaG91bGQyW1widGhyb3dcIl0gPSBzaG91bGQyW1wiVGhyb3dcIl07XG4gIHNob3VsZDIubm90W1widGhyb3dcIl0gPSBzaG91bGQyLm5vdFtcIlRocm93XCJdO1xuICByZXR1cm4gc2hvdWxkMjtcbn1cbl9fbmFtZShsb2FkU2hvdWxkLCBcImxvYWRTaG91bGRcIik7XG52YXIgc2hvdWxkID0gbG9hZFNob3VsZDtcbnZhciBTaG91bGQgPSBsb2FkU2hvdWxkO1xuXG4vLyBsaWIvY2hhaS9pbnRlcmZhY2UvYXNzZXJ0LmpzXG5mdW5jdGlvbiBhc3NlcnQoZXhwcmVzcywgZXJybXNnKSB7XG4gIHZhciB0ZXN0MiA9IG5ldyBBc3NlcnRpb24obnVsbCwgbnVsbCwgYXNzZXJ0LCB0cnVlKTtcbiAgdGVzdDIuYXNzZXJ0KFxuICAgIGV4cHJlc3MsXG4gICAgZXJybXNnLFxuICAgIFwiWyBuZWdhdGlvbiBtZXNzYWdlIHVuYXZhaWxhYmxlIF1cIlxuICApO1xufVxuX19uYW1lKGFzc2VydCwgXCJhc3NlcnRcIik7XG5hc3NlcnQuZmFpbCA9IGZ1bmN0aW9uKGFjdHVhbCwgZXhwZWN0ZWQsIG1lc3NhZ2UsIG9wZXJhdG9yKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIG1lc3NhZ2UgPSBhY3R1YWw7XG4gICAgYWN0dWFsID0gdm9pZCAwO1xuICB9XG4gIG1lc3NhZ2UgPSBtZXNzYWdlIHx8IFwiYXNzZXJ0LmZhaWwoKVwiO1xuICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobWVzc2FnZSwge1xuICAgIGFjdHVhbCxcbiAgICBleHBlY3RlZCxcbiAgICBvcGVyYXRvclxuICB9LCBhc3NlcnQuZmFpbCk7XG59O1xuYXNzZXJ0LmlzT2sgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNPaywgdHJ1ZSkuaXMub2s7XG59O1xuYXNzZXJ0LmlzTm90T2sgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RPaywgdHJ1ZSkuaXMubm90Lm9rO1xufTtcbmFzc2VydC5lcXVhbCA9IGZ1bmN0aW9uKGFjdCwgZXhwLCBtc2cpIHtcbiAgdmFyIHRlc3QyID0gbmV3IEFzc2VydGlvbihhY3QsIG1zZywgYXNzZXJ0LmVxdWFsLCB0cnVlKTtcbiAgdGVzdDIuYXNzZXJ0KFxuICAgIGV4cCA9PSBmbGFnKHRlc3QyLCBcIm9iamVjdFwiKSxcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gZXF1YWwgI3tleHB9XCIsXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBlcXVhbCAje2FjdH1cIixcbiAgICBleHAsXG4gICAgYWN0LFxuICAgIHRydWVcbiAgKTtcbn07XG5hc3NlcnQubm90RXF1YWwgPSBmdW5jdGlvbihhY3QsIGV4cCwgbXNnKSB7XG4gIHZhciB0ZXN0MiA9IG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5ub3RFcXVhbCwgdHJ1ZSk7XG4gIHRlc3QyLmFzc2VydChcbiAgICBleHAgIT0gZmxhZyh0ZXN0MiwgXCJvYmplY3RcIiksXG4gICAgXCJleHBlY3RlZCAje3RoaXN9IHRvIG5vdCBlcXVhbCAje2V4cH1cIixcbiAgICBcImV4cGVjdGVkICN7dGhpc30gdG8gZXF1YWwgI3thY3R9XCIsXG4gICAgZXhwLFxuICAgIGFjdCxcbiAgICB0cnVlXG4gICk7XG59O1xuYXNzZXJ0LnN0cmljdEVxdWFsID0gZnVuY3Rpb24oYWN0LCBleHAsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQuc3RyaWN0RXF1YWwsIHRydWUpLnRvLmVxdWFsKGV4cCk7XG59O1xuYXNzZXJ0Lm5vdFN0cmljdEVxdWFsID0gZnVuY3Rpb24oYWN0LCBleHAsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQubm90U3RyaWN0RXF1YWwsIHRydWUpLnRvLm5vdC5lcXVhbChleHApO1xufTtcbmFzc2VydC5kZWVwRXF1YWwgPSBhc3NlcnQuZGVlcFN0cmljdEVxdWFsID0gZnVuY3Rpb24oYWN0LCBleHAsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQuZGVlcEVxdWFsLCB0cnVlKS50by5lcWwoZXhwKTtcbn07XG5hc3NlcnQubm90RGVlcEVxdWFsID0gZnVuY3Rpb24oYWN0LCBleHAsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQubm90RGVlcEVxdWFsLCB0cnVlKS50by5ub3QuZXFsKGV4cCk7XG59O1xuYXNzZXJ0LmlzQWJvdmUgPSBmdW5jdGlvbih2YWwsIGFidiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0Fib3ZlLCB0cnVlKS50by5iZS5hYm92ZShhYnYpO1xufTtcbmFzc2VydC5pc0F0TGVhc3QgPSBmdW5jdGlvbih2YWwsIGF0bHN0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzQXRMZWFzdCwgdHJ1ZSkudG8uYmUubGVhc3QoYXRsc3QpO1xufTtcbmFzc2VydC5pc0JlbG93ID0gZnVuY3Rpb24odmFsLCBibHcsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNCZWxvdywgdHJ1ZSkudG8uYmUuYmVsb3coYmx3KTtcbn07XG5hc3NlcnQuaXNBdE1vc3QgPSBmdW5jdGlvbih2YWwsIGF0bXN0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzQXRNb3N0LCB0cnVlKS50by5iZS5tb3N0KGF0bXN0KTtcbn07XG5hc3NlcnQuaXNUcnVlID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzVHJ1ZSwgdHJ1ZSkuaXNbXCJ0cnVlXCJdO1xufTtcbmFzc2VydC5pc05vdFRydWUgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RUcnVlLCB0cnVlKS50by5ub3QuZXF1YWwodHJ1ZSk7XG59O1xuYXNzZXJ0LmlzRmFsc2UgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNGYWxzZSwgdHJ1ZSkuaXNbXCJmYWxzZVwiXTtcbn07XG5hc3NlcnQuaXNOb3RGYWxzZSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdEZhbHNlLCB0cnVlKS50by5ub3QuZXF1YWwoZmFsc2UpO1xufTtcbmFzc2VydC5pc051bGwgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOdWxsLCB0cnVlKS50by5lcXVhbChudWxsKTtcbn07XG5hc3NlcnQuaXNOb3ROdWxsID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90TnVsbCwgdHJ1ZSkudG8ubm90LmVxdWFsKG51bGwpO1xufTtcbmFzc2VydC5pc05hTiA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05hTiwgdHJ1ZSkudG8uYmUuTmFOO1xufTtcbmFzc2VydC5pc05vdE5hTiA9IGZ1bmN0aW9uKHZhbHVlLCBtZXNzYWdlKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsdWUsIG1lc3NhZ2UsIGFzc2VydC5pc05vdE5hTiwgdHJ1ZSkubm90LnRvLmJlLk5hTjtcbn07XG5hc3NlcnQuZXhpc3RzID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmV4aXN0cywgdHJ1ZSkudG8uZXhpc3Q7XG59O1xuYXNzZXJ0Lm5vdEV4aXN0cyA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5ub3RFeGlzdHMsIHRydWUpLnRvLm5vdC5leGlzdDtcbn07XG5hc3NlcnQuaXNVbmRlZmluZWQgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNVbmRlZmluZWQsIHRydWUpLnRvLmVxdWFsKHZvaWQgMCk7XG59O1xuYXNzZXJ0LmlzRGVmaW5lZCA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0RlZmluZWQsIHRydWUpLnRvLm5vdC5lcXVhbCh2b2lkIDApO1xufTtcbmFzc2VydC5pc0NhbGxhYmxlID0gZnVuY3Rpb24odmFsdWUsIG1lc3NhZ2UpIHtcbiAgbmV3IEFzc2VydGlvbih2YWx1ZSwgbWVzc2FnZSwgYXNzZXJ0LmlzQ2FsbGFibGUsIHRydWUpLmlzLmNhbGxhYmxlO1xufTtcbmFzc2VydC5pc05vdENhbGxhYmxlID0gZnVuY3Rpb24odmFsdWUsIG1lc3NhZ2UpIHtcbiAgbmV3IEFzc2VydGlvbih2YWx1ZSwgbWVzc2FnZSwgYXNzZXJ0LmlzTm90Q2FsbGFibGUsIHRydWUpLmlzLm5vdC5jYWxsYWJsZTtcbn07XG5hc3NlcnQuaXNPYmplY3QgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNPYmplY3QsIHRydWUpLnRvLmJlLmEoXCJvYmplY3RcIik7XG59O1xuYXNzZXJ0LmlzTm90T2JqZWN0ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90T2JqZWN0LCB0cnVlKS50by5ub3QuYmUuYShcIm9iamVjdFwiKTtcbn07XG5hc3NlcnQuaXNBcnJheSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0FycmF5LCB0cnVlKS50by5iZS5hbihcImFycmF5XCIpO1xufTtcbmFzc2VydC5pc05vdEFycmF5ID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzTm90QXJyYXksIHRydWUpLnRvLm5vdC5iZS5hbihcImFycmF5XCIpO1xufTtcbmFzc2VydC5pc1N0cmluZyA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc1N0cmluZywgdHJ1ZSkudG8uYmUuYShcInN0cmluZ1wiKTtcbn07XG5hc3NlcnQuaXNOb3RTdHJpbmcgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3RTdHJpbmcsIHRydWUpLnRvLm5vdC5iZS5hKFwic3RyaW5nXCIpO1xufTtcbmFzc2VydC5pc051bWJlciA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc051bWJlciwgdHJ1ZSkudG8uYmUuYShcIm51bWJlclwiKTtcbn07XG5hc3NlcnQuaXNOb3ROdW1iZXIgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3ROdW1iZXIsIHRydWUpLnRvLm5vdC5iZS5hKFwibnVtYmVyXCIpO1xufTtcbmFzc2VydC5pc051bWVyaWMgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOdW1lcmljLCB0cnVlKS5pcy5udW1lcmljO1xufTtcbmFzc2VydC5pc05vdE51bWVyaWMgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNOb3ROdW1lcmljLCB0cnVlKS5pcy5ub3QubnVtZXJpYztcbn07XG5hc3NlcnQuaXNGaW5pdGUgPSBmdW5jdGlvbih2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQuaXNGaW5pdGUsIHRydWUpLnRvLmJlLmZpbml0ZTtcbn07XG5hc3NlcnQuaXNCb29sZWFuID0gZnVuY3Rpb24odmFsLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbih2YWwsIG1zZywgYXNzZXJ0LmlzQm9vbGVhbiwgdHJ1ZSkudG8uYmUuYShcImJvb2xlYW5cIik7XG59O1xuYXNzZXJ0LmlzTm90Qm9vbGVhbiA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdEJvb2xlYW4sIHRydWUpLnRvLm5vdC5iZS5hKFwiYm9vbGVhblwiKTtcbn07XG5hc3NlcnQudHlwZU9mID0gZnVuY3Rpb24odmFsLCB0eXBlMywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC50eXBlT2YsIHRydWUpLnRvLmJlLmEodHlwZTMpO1xufTtcbmFzc2VydC5ub3RUeXBlT2YgPSBmdW5jdGlvbih2YWx1ZSwgdHlwZTMsIG1lc3NhZ2UpIHtcbiAgbmV3IEFzc2VydGlvbih2YWx1ZSwgbWVzc2FnZSwgYXNzZXJ0Lm5vdFR5cGVPZiwgdHJ1ZSkudG8ubm90LmJlLmEodHlwZTMpO1xufTtcbmFzc2VydC5pbnN0YW5jZU9mID0gZnVuY3Rpb24odmFsLCB0eXBlMywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pbnN0YW5jZU9mLCB0cnVlKS50by5iZS5pbnN0YW5jZU9mKHR5cGUzKTtcbn07XG5hc3NlcnQubm90SW5zdGFuY2VPZiA9IGZ1bmN0aW9uKHZhbCwgdHlwZTMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHZhbCwgbXNnLCBhc3NlcnQubm90SW5zdGFuY2VPZiwgdHJ1ZSkudG8ubm90LmJlLmluc3RhbmNlT2YodHlwZTMpO1xufTtcbmFzc2VydC5pbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQuaW5jbHVkZSwgdHJ1ZSkuaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5ub3RJbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90SW5jbHVkZSwgdHJ1ZSkubm90LmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQuZGVlcEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5kZWVwSW5jbHVkZSwgdHJ1ZSkuZGVlcC5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm5vdERlZXBJbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90RGVlcEluY2x1ZGUsIHRydWUpLm5vdC5kZWVwLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQubmVzdGVkSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5lc3RlZEluY2x1ZGUsIHRydWUpLm5lc3RlZC5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm5vdE5lc3RlZEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5ub3ROZXN0ZWRJbmNsdWRlLCB0cnVlKS5ub3QubmVzdGVkLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQuZGVlcE5lc3RlZEluY2x1ZGUgPSBmdW5jdGlvbihleHAsIGluYywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5kZWVwTmVzdGVkSW5jbHVkZSwgdHJ1ZSkuZGVlcC5uZXN0ZWQuaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5ub3REZWVwTmVzdGVkSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5vdERlZXBOZXN0ZWRJbmNsdWRlLCB0cnVlKS5ub3QuZGVlcC5uZXN0ZWQuaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5vd25JbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQub3duSW5jbHVkZSwgdHJ1ZSkub3duLmluY2x1ZGUoaW5jKTtcbn07XG5hc3NlcnQubm90T3duSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lm5vdE93bkluY2x1ZGUsIHRydWUpLm5vdC5vd24uaW5jbHVkZShpbmMpO1xufTtcbmFzc2VydC5kZWVwT3duSW5jbHVkZSA9IGZ1bmN0aW9uKGV4cCwgaW5jLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0LmRlZXBPd25JbmNsdWRlLCB0cnVlKS5kZWVwLm93bi5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm5vdERlZXBPd25JbmNsdWRlID0gZnVuY3Rpb24oZXhwLCBpbmMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90RGVlcE93bkluY2x1ZGUsIHRydWUpLm5vdC5kZWVwLm93bi5pbmNsdWRlKGluYyk7XG59O1xuYXNzZXJ0Lm1hdGNoID0gZnVuY3Rpb24oZXhwLCByZSwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oZXhwLCBtc2csIGFzc2VydC5tYXRjaCwgdHJ1ZSkudG8ubWF0Y2gocmUpO1xufTtcbmFzc2VydC5ub3RNYXRjaCA9IGZ1bmN0aW9uKGV4cCwgcmUsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGV4cCwgbXNnLCBhc3NlcnQubm90TWF0Y2gsIHRydWUpLnRvLm5vdC5tYXRjaChyZSk7XG59O1xuYXNzZXJ0LnByb3BlcnR5ID0gZnVuY3Rpb24ob2JqLCBwcm9wLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LnByb3BlcnR5LCB0cnVlKS50by5oYXZlLnByb3BlcnR5KHByb3ApO1xufTtcbmFzc2VydC5ub3RQcm9wZXJ0eSA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3RQcm9wZXJ0eSwgdHJ1ZSkudG8ubm90LmhhdmUucHJvcGVydHkocHJvcCk7XG59O1xuYXNzZXJ0LnByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQucHJvcGVydHlWYWwsIHRydWUpLnRvLmhhdmUucHJvcGVydHkocHJvcCwgdmFsKTtcbn07XG5hc3NlcnQubm90UHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3RQcm9wZXJ0eVZhbCwgdHJ1ZSkudG8ubm90LmhhdmUucHJvcGVydHkocHJvcCwgdmFsKTtcbn07XG5hc3NlcnQuZGVlcFByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuZGVlcFByb3BlcnR5VmFsLCB0cnVlKS50by5oYXZlLmRlZXAucHJvcGVydHkocHJvcCwgdmFsKTtcbn07XG5hc3NlcnQubm90RGVlcFByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90RGVlcFByb3BlcnR5VmFsLCB0cnVlKS50by5ub3QuaGF2ZS5kZWVwLnByb3BlcnR5KHByb3AsIHZhbCk7XG59O1xuYXNzZXJ0Lm93blByb3BlcnR5ID0gZnVuY3Rpb24ob2JqLCBwcm9wLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm93blByb3BlcnR5LCB0cnVlKS50by5oYXZlLm93bi5wcm9wZXJ0eShwcm9wKTtcbn07XG5hc3NlcnQubm90T3duUHJvcGVydHkgPSBmdW5jdGlvbihvYmosIHByb3AsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90T3duUHJvcGVydHksIHRydWUpLnRvLm5vdC5oYXZlLm93bi5wcm9wZXJ0eShwcm9wKTtcbn07XG5hc3NlcnQub3duUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbHVlLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm93blByb3BlcnR5VmFsLCB0cnVlKS50by5oYXZlLm93bi5wcm9wZXJ0eShwcm9wLCB2YWx1ZSk7XG59O1xuYXNzZXJ0Lm5vdE93blByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWx1ZSwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5ub3RPd25Qcm9wZXJ0eVZhbCwgdHJ1ZSkudG8ubm90LmhhdmUub3duLnByb3BlcnR5KHByb3AsIHZhbHVlKTtcbn07XG5hc3NlcnQuZGVlcE93blByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWx1ZSwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kZWVwT3duUHJvcGVydHlWYWwsIHRydWUpLnRvLmhhdmUuZGVlcC5vd24ucHJvcGVydHkocHJvcCwgdmFsdWUpO1xufTtcbmFzc2VydC5ub3REZWVwT3duUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbHVlLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdERlZXBPd25Qcm9wZXJ0eVZhbCwgdHJ1ZSkudG8ubm90LmhhdmUuZGVlcC5vd24ucHJvcGVydHkocHJvcCwgdmFsdWUpO1xufTtcbmFzc2VydC5uZXN0ZWRQcm9wZXJ0eSA9IGZ1bmN0aW9uKG9iaiwgcHJvcCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5uZXN0ZWRQcm9wZXJ0eSwgdHJ1ZSkudG8uaGF2ZS5uZXN0ZWQucHJvcGVydHkocHJvcCk7XG59O1xuYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5ID0gZnVuY3Rpb24ob2JqLCBwcm9wLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5LCB0cnVlKS50by5ub3QuaGF2ZS5uZXN0ZWQucHJvcGVydHkocHJvcCk7XG59O1xuYXNzZXJ0Lm5lc3RlZFByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubmVzdGVkUHJvcGVydHlWYWwsIHRydWUpLnRvLmhhdmUubmVzdGVkLnByb3BlcnR5KHByb3AsIHZhbCk7XG59O1xuYXNzZXJ0Lm5vdE5lc3RlZFByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90TmVzdGVkUHJvcGVydHlWYWwsIHRydWUpLnRvLm5vdC5oYXZlLm5lc3RlZC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xufTtcbmFzc2VydC5kZWVwTmVzdGVkUHJvcGVydHlWYWwgPSBmdW5jdGlvbihvYmosIHByb3AsIHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5kZWVwTmVzdGVkUHJvcGVydHlWYWwsIHRydWUpLnRvLmhhdmUuZGVlcC5uZXN0ZWQucHJvcGVydHkocHJvcCwgdmFsKTtcbn07XG5hc3NlcnQubm90RGVlcE5lc3RlZFByb3BlcnR5VmFsID0gZnVuY3Rpb24ob2JqLCBwcm9wLCB2YWwsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQubm90RGVlcE5lc3RlZFByb3BlcnR5VmFsLCB0cnVlKS50by5ub3QuaGF2ZS5kZWVwLm5lc3RlZC5wcm9wZXJ0eShwcm9wLCB2YWwpO1xufTtcbmFzc2VydC5sZW5ndGhPZiA9IGZ1bmN0aW9uKGV4cCwgbGVuLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihleHAsIG1zZywgYXNzZXJ0Lmxlbmd0aE9mLCB0cnVlKS50by5oYXZlLmxlbmd0aE9mKGxlbik7XG59O1xuYXNzZXJ0Lmhhc0FueUtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuaGFzQW55S2V5cywgdHJ1ZSkudG8uaGF2ZS5hbnkua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQuaGFzQWxsS2V5cyA9IGZ1bmN0aW9uKG9iaiwga2V5cywgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5oYXNBbGxLZXlzLCB0cnVlKS50by5oYXZlLmFsbC5rZXlzKGtleXMpO1xufTtcbmFzc2VydC5jb250YWluc0FsbEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuY29udGFpbnNBbGxLZXlzLCB0cnVlKS50by5jb250YWluLmFsbC5rZXlzKGtleXMpO1xufTtcbmFzc2VydC5kb2VzTm90SGF2ZUFueUtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuZG9lc05vdEhhdmVBbnlLZXlzLCB0cnVlKS50by5ub3QuaGF2ZS5hbnkua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQuZG9lc05vdEhhdmVBbGxLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRvZXNOb3RIYXZlQWxsS2V5cywgdHJ1ZSkudG8ubm90LmhhdmUuYWxsLmtleXMoa2V5cyk7XG59O1xuYXNzZXJ0Lmhhc0FueURlZXBLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lmhhc0FueURlZXBLZXlzLCB0cnVlKS50by5oYXZlLmFueS5kZWVwLmtleXMoa2V5cyk7XG59O1xuYXNzZXJ0Lmhhc0FsbERlZXBLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0Lmhhc0FsbERlZXBLZXlzLCB0cnVlKS50by5oYXZlLmFsbC5kZWVwLmtleXMoa2V5cyk7XG59O1xuYXNzZXJ0LmNvbnRhaW5zQWxsRGVlcEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuY29udGFpbnNBbGxEZWVwS2V5cywgdHJ1ZSkudG8uY29udGFpbi5hbGwuZGVlcC5rZXlzKGtleXMpO1xufTtcbmFzc2VydC5kb2VzTm90SGF2ZUFueURlZXBLZXlzID0gZnVuY3Rpb24ob2JqLCBrZXlzLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmRvZXNOb3RIYXZlQW55RGVlcEtleXMsIHRydWUpLnRvLm5vdC5oYXZlLmFueS5kZWVwLmtleXMoa2V5cyk7XG59O1xuYXNzZXJ0LmRvZXNOb3RIYXZlQWxsRGVlcEtleXMgPSBmdW5jdGlvbihvYmosIGtleXMsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKG9iaiwgbXNnLCBhc3NlcnQuZG9lc05vdEhhdmVBbGxEZWVwS2V5cywgdHJ1ZSkudG8ubm90LmhhdmUuYWxsLmRlZXAua2V5cyhrZXlzKTtcbn07XG5hc3NlcnQudGhyb3dzID0gZnVuY3Rpb24oZm4sIGVycm9yTGlrZSwgZXJyTXNnTWF0Y2hlciwgbXNnKSB7XG4gIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgZXJyb3JMaWtlIHx8IGVycm9yTGlrZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIGVyck1zZ01hdGNoZXIgPSBlcnJvckxpa2U7XG4gICAgZXJyb3JMaWtlID0gbnVsbDtcbiAgfVxuICB2YXIgYXNzZXJ0RXJyID0gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQudGhyb3dzLCB0cnVlKS50by50aHJvdyhlcnJvckxpa2UsIGVyck1zZ01hdGNoZXIpO1xuICByZXR1cm4gZmxhZyhhc3NlcnRFcnIsIFwib2JqZWN0XCIpO1xufTtcbmFzc2VydC5kb2VzTm90VGhyb3cgPSBmdW5jdGlvbihmbiwgZXJyb3JMaWtlLCBlcnJNc2dNYXRjaGVyLCBtZXNzYWdlKSB7XG4gIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgZXJyb3JMaWtlIHx8IGVycm9yTGlrZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIGVyck1zZ01hdGNoZXIgPSBlcnJvckxpa2U7XG4gICAgZXJyb3JMaWtlID0gbnVsbDtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGZuLCBtZXNzYWdlLCBhc3NlcnQuZG9lc05vdFRocm93LCB0cnVlKS50by5ub3QudGhyb3coZXJyb3JMaWtlLCBlcnJNc2dNYXRjaGVyKTtcbn07XG5hc3NlcnQub3BlcmF0b3IgPSBmdW5jdGlvbih2YWwsIG9wZXJhdG9yLCB2YWwyLCBtc2cpIHtcbiAgdmFyIG9rO1xuICBzd2l0Y2ggKG9wZXJhdG9yKSB7XG4gICAgY2FzZSBcIj09XCI6XG4gICAgICBvayA9IHZhbCA9PSB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIj09PVwiOlxuICAgICAgb2sgPSB2YWwgPT09IHZhbDI7XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiPlwiOlxuICAgICAgb2sgPSB2YWwgPiB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIj49XCI6XG4gICAgICBvayA9IHZhbCA+PSB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIjxcIjpcbiAgICAgIG9rID0gdmFsIDwgdmFsMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCI8PVwiOlxuICAgICAgb2sgPSB2YWwgPD0gdmFsMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCIhPVwiOlxuICAgICAgb2sgPSB2YWwgIT0gdmFsMjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCIhPT1cIjpcbiAgICAgIG9rID0gdmFsICE9PSB2YWwyO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIG1zZyA9IG1zZyA/IG1zZyArIFwiOiBcIiA6IG1zZztcbiAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgICAgbXNnICsgJ0ludmFsaWQgb3BlcmF0b3IgXCInICsgb3BlcmF0b3IgKyAnXCInLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIGFzc2VydC5vcGVyYXRvclxuICAgICAgKTtcbiAgfVxuICB2YXIgdGVzdDIgPSBuZXcgQXNzZXJ0aW9uKG9rLCBtc2csIGFzc2VydC5vcGVyYXRvciwgdHJ1ZSk7XG4gIHRlc3QyLmFzc2VydChcbiAgICB0cnVlID09PSBmbGFnKHRlc3QyLCBcIm9iamVjdFwiKSxcbiAgICBcImV4cGVjdGVkIFwiICsgaW5zcGVjdDIodmFsKSArIFwiIHRvIGJlIFwiICsgb3BlcmF0b3IgKyBcIiBcIiArIGluc3BlY3QyKHZhbDIpLFxuICAgIFwiZXhwZWN0ZWQgXCIgKyBpbnNwZWN0Mih2YWwpICsgXCIgdG8gbm90IGJlIFwiICsgb3BlcmF0b3IgKyBcIiBcIiArIGluc3BlY3QyKHZhbDIpXG4gICk7XG59O1xuYXNzZXJ0LmNsb3NlVG8gPSBmdW5jdGlvbihhY3QsIGV4cCwgZGVsdGEsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKGFjdCwgbXNnLCBhc3NlcnQuY2xvc2VUbywgdHJ1ZSkudG8uYmUuY2xvc2VUbyhleHAsIGRlbHRhKTtcbn07XG5hc3NlcnQuYXBwcm94aW1hdGVseSA9IGZ1bmN0aW9uKGFjdCwgZXhwLCBkZWx0YSwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oYWN0LCBtc2csIGFzc2VydC5hcHByb3hpbWF0ZWx5LCB0cnVlKS50by5iZS5hcHByb3hpbWF0ZWx5KGV4cCwgZGVsdGEpO1xufTtcbmFzc2VydC5zYW1lTWVtYmVycyA9IGZ1bmN0aW9uKHNldDEsIHNldDIsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0LnNhbWVNZW1iZXJzLCB0cnVlKS50by5oYXZlLnNhbWUubWVtYmVycyhzZXQyKTtcbn07XG5hc3NlcnQubm90U2FtZU1lbWJlcnMgPSBmdW5jdGlvbihzZXQxLCBzZXQyLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5ub3RTYW1lTWVtYmVycywgdHJ1ZSkudG8ubm90LmhhdmUuc2FtZS5tZW1iZXJzKHNldDIpO1xufTtcbmFzc2VydC5zYW1lRGVlcE1lbWJlcnMgPSBmdW5jdGlvbihzZXQxLCBzZXQyLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzZXQxLCBtc2csIGFzc2VydC5zYW1lRGVlcE1lbWJlcnMsIHRydWUpLnRvLmhhdmUuc2FtZS5kZWVwLm1lbWJlcnMoc2V0Mik7XG59O1xuYXNzZXJ0Lm5vdFNhbWVEZWVwTWVtYmVycyA9IGZ1bmN0aW9uKHNldDEsIHNldDIsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0Lm5vdFNhbWVEZWVwTWVtYmVycywgdHJ1ZSkudG8ubm90LmhhdmUuc2FtZS5kZWVwLm1lbWJlcnMoc2V0Mik7XG59O1xuYXNzZXJ0LnNhbWVPcmRlcmVkTWVtYmVycyA9IGZ1bmN0aW9uKHNldDEsIHNldDIsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0LnNhbWVPcmRlcmVkTWVtYmVycywgdHJ1ZSkudG8uaGF2ZS5zYW1lLm9yZGVyZWQubWVtYmVycyhzZXQyKTtcbn07XG5hc3NlcnQubm90U2FtZU9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc2V0MSwgc2V0MiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc2V0MSwgbXNnLCBhc3NlcnQubm90U2FtZU9yZGVyZWRNZW1iZXJzLCB0cnVlKS50by5ub3QuaGF2ZS5zYW1lLm9yZGVyZWQubWVtYmVycyhzZXQyKTtcbn07XG5hc3NlcnQuc2FtZURlZXBPcmRlcmVkTWVtYmVycyA9IGZ1bmN0aW9uKHNldDEsIHNldDIsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0LnNhbWVEZWVwT3JkZXJlZE1lbWJlcnMsIHRydWUpLnRvLmhhdmUuc2FtZS5kZWVwLm9yZGVyZWQubWVtYmVycyhzZXQyKTtcbn07XG5hc3NlcnQubm90U2FtZURlZXBPcmRlcmVkTWVtYmVycyA9IGZ1bmN0aW9uKHNldDEsIHNldDIsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHNldDEsIG1zZywgYXNzZXJ0Lm5vdFNhbWVEZWVwT3JkZXJlZE1lbWJlcnMsIHRydWUpLnRvLm5vdC5oYXZlLnNhbWUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoc2V0Mik7XG59O1xuYXNzZXJ0LmluY2x1ZGVNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0LmluY2x1ZGVNZW1iZXJzLCB0cnVlKS50by5pbmNsdWRlLm1lbWJlcnMoc3Vic2V0KTtcbn07XG5hc3NlcnQubm90SW5jbHVkZU1lbWJlcnMgPSBmdW5jdGlvbihzdXBlcnNldCwgc3Vic2V0LCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihzdXBlcnNldCwgbXNnLCBhc3NlcnQubm90SW5jbHVkZU1lbWJlcnMsIHRydWUpLnRvLm5vdC5pbmNsdWRlLm1lbWJlcnMoc3Vic2V0KTtcbn07XG5hc3NlcnQuaW5jbHVkZURlZXBNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0LmluY2x1ZGVEZWVwTWVtYmVycywgdHJ1ZSkudG8uaW5jbHVkZS5kZWVwLm1lbWJlcnMoc3Vic2V0KTtcbn07XG5hc3NlcnQubm90SW5jbHVkZURlZXBNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0Lm5vdEluY2x1ZGVEZWVwTWVtYmVycywgdHJ1ZSkudG8ubm90LmluY2x1ZGUuZGVlcC5tZW1iZXJzKHN1YnNldCk7XG59O1xuYXNzZXJ0LmluY2x1ZGVPcmRlcmVkTWVtYmVycyA9IGZ1bmN0aW9uKHN1cGVyc2V0LCBzdWJzZXQsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5pbmNsdWRlT3JkZXJlZE1lbWJlcnMsIHRydWUpLnRvLmluY2x1ZGUub3JkZXJlZC5tZW1iZXJzKHN1YnNldCk7XG59O1xuYXNzZXJ0Lm5vdEluY2x1ZGVPcmRlcmVkTWVtYmVycyA9IGZ1bmN0aW9uKHN1cGVyc2V0LCBzdWJzZXQsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5ub3RJbmNsdWRlT3JkZXJlZE1lbWJlcnMsIHRydWUpLnRvLm5vdC5pbmNsdWRlLm9yZGVyZWQubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5pbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzID0gZnVuY3Rpb24oc3VwZXJzZXQsIHN1YnNldCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oc3VwZXJzZXQsIG1zZywgYXNzZXJ0LmluY2x1ZGVEZWVwT3JkZXJlZE1lbWJlcnMsIHRydWUpLnRvLmluY2x1ZGUuZGVlcC5vcmRlcmVkLm1lbWJlcnMoc3Vic2V0KTtcbn07XG5hc3NlcnQubm90SW5jbHVkZURlZXBPcmRlcmVkTWVtYmVycyA9IGZ1bmN0aW9uKHN1cGVyc2V0LCBzdWJzZXQsIG1zZykge1xuICBuZXcgQXNzZXJ0aW9uKHN1cGVyc2V0LCBtc2csIGFzc2VydC5ub3RJbmNsdWRlRGVlcE9yZGVyZWRNZW1iZXJzLCB0cnVlKS50by5ub3QuaW5jbHVkZS5kZWVwLm9yZGVyZWQubWVtYmVycyhzdWJzZXQpO1xufTtcbmFzc2VydC5vbmVPZiA9IGZ1bmN0aW9uKGluTGlzdCwgbGlzdCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24oaW5MaXN0LCBtc2csIGFzc2VydC5vbmVPZiwgdHJ1ZSkudG8uYmUub25lT2YobGlzdCk7XG59O1xuYXNzZXJ0LmlzSXRlcmFibGUgPSBmdW5jdGlvbihvYmosIG1zZykge1xuICBpZiAob2JqID09IHZvaWQgMCB8fCAhb2JqW1N5bWJvbC5pdGVyYXRvcl0pIHtcbiAgICBtc2cgPSBtc2cgPyBgJHttc2d9IGV4cGVjdGVkICR7aW5zcGVjdDIob2JqKX0gdG8gYmUgYW4gaXRlcmFibGVgIDogYGV4cGVjdGVkICR7aW5zcGVjdDIob2JqKX0gdG8gYmUgYW4gaXRlcmFibGVgO1xuICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihcbiAgICAgIG1zZyxcbiAgICAgIHZvaWQgMCxcbiAgICAgIGFzc2VydC5pc0l0ZXJhYmxlXG4gICAgKTtcbiAgfVxufTtcbmFzc2VydC5jaGFuZ2VzID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1zZyA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuY2hhbmdlcywgdHJ1ZSkudG8uY2hhbmdlKG9iaiwgcHJvcCk7XG59O1xuYXNzZXJ0LmNoYW5nZXNCeSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIHRtcE1zZyA9IGRlbHRhO1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBtc2cgPSB0bXBNc2c7XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5jaGFuZ2VzQnksIHRydWUpLnRvLmNoYW5nZShvYmosIHByb3ApLmJ5KGRlbHRhKTtcbn07XG5hc3NlcnQuZG9lc05vdENoYW5nZSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBtc2cgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kb2VzTm90Q2hhbmdlLCB0cnVlKS50by5ub3QuY2hhbmdlKG9iaiwgcHJvcCk7XG59O1xuYXNzZXJ0LmNoYW5nZXNCdXROb3RCeSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIHRtcE1zZyA9IGRlbHRhO1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBtc2cgPSB0bXBNc2c7XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5jaGFuZ2VzQnV0Tm90QnksIHRydWUpLnRvLmNoYW5nZShvYmosIHByb3ApLmJ1dC5ub3QuYnkoZGVsdGEpO1xufTtcbmFzc2VydC5pbmNyZWFzZXMgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbXNnID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuaW5jcmVhc2VzLCB0cnVlKS50by5pbmNyZWFzZShvYmosIHByb3ApO1xufTtcbmFzc2VydC5pbmNyZWFzZXNCeSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIHRtcE1zZyA9IGRlbHRhO1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBtc2cgPSB0bXBNc2c7XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5pbmNyZWFzZXNCeSwgdHJ1ZSkudG8uaW5jcmVhc2Uob2JqLCBwcm9wKS5ieShkZWx0YSk7XG59O1xuYXNzZXJ0LmRvZXNOb3RJbmNyZWFzZSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBtc2cgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIHJldHVybiBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5kb2VzTm90SW5jcmVhc2UsIHRydWUpLnRvLm5vdC5pbmNyZWFzZShvYmosIHByb3ApO1xufTtcbmFzc2VydC5pbmNyZWFzZXNCdXROb3RCeSA9IGZ1bmN0aW9uKGZuLCBvYmosIHByb3AsIGRlbHRhLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDQgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIHRtcE1zZyA9IGRlbHRhO1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBtc2cgPSB0bXBNc2c7XG4gIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMykge1xuICAgIGRlbHRhID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICBuZXcgQXNzZXJ0aW9uKGZuLCBtc2csIGFzc2VydC5pbmNyZWFzZXNCdXROb3RCeSwgdHJ1ZSkudG8uaW5jcmVhc2Uob2JqLCBwcm9wKS5idXQubm90LmJ5KGRlbHRhKTtcbn07XG5hc3NlcnQuZGVjcmVhc2VzID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1zZyA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRlY3JlYXNlcywgdHJ1ZSkudG8uZGVjcmVhc2Uob2JqLCBwcm9wKTtcbn07XG5hc3NlcnQuZGVjcmVhc2VzQnkgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciB0bXBNc2cgPSBkZWx0YTtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgbXNnID0gdG1wTXNnO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZGVjcmVhc2VzQnksIHRydWUpLnRvLmRlY3JlYXNlKG9iaiwgcHJvcCkuYnkoZGVsdGEpO1xufTtcbmFzc2VydC5kb2VzTm90RGVjcmVhc2UgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBtc2cpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbXNnID0gcHJvcDtcbiAgICBwcm9wID0gbnVsbDtcbiAgfVxuICByZXR1cm4gbmV3IEFzc2VydGlvbihmbiwgbXNnLCBhc3NlcnQuZG9lc05vdERlY3JlYXNlLCB0cnVlKS50by5ub3QuZGVjcmVhc2Uob2JqLCBwcm9wKTtcbn07XG5hc3NlcnQuZG9lc05vdERlY3JlYXNlQnkgPSBmdW5jdGlvbihmbiwgb2JqLCBwcm9wLCBkZWx0YSwgbXNnKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciB0bXBNc2cgPSBkZWx0YTtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgbXNnID0gdG1wTXNnO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICBkZWx0YSA9IHByb3A7XG4gICAgcHJvcCA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRvZXNOb3REZWNyZWFzZUJ5LCB0cnVlKS50by5ub3QuZGVjcmVhc2Uob2JqLCBwcm9wKS5ieShkZWx0YSk7XG59O1xuYXNzZXJ0LmRlY3JlYXNlc0J1dE5vdEJ5ID0gZnVuY3Rpb24oZm4sIG9iaiwgcHJvcCwgZGVsdGEsIG1zZykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gNCAmJiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB2YXIgdG1wTXNnID0gZGVsdGE7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIG1zZyA9IHRtcE1zZztcbiAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKSB7XG4gICAgZGVsdGEgPSBwcm9wO1xuICAgIHByb3AgPSBudWxsO1xuICB9XG4gIG5ldyBBc3NlcnRpb24oZm4sIG1zZywgYXNzZXJ0LmRlY3JlYXNlc0J1dE5vdEJ5LCB0cnVlKS50by5kZWNyZWFzZShvYmosIHByb3ApLmJ1dC5ub3QuYnkoZGVsdGEpO1xufTtcbmFzc2VydC5pZkVycm9yID0gZnVuY3Rpb24odmFsKSB7XG4gIGlmICh2YWwpIHtcbiAgICB0aHJvdyB2YWw7XG4gIH1cbn07XG5hc3NlcnQuaXNFeHRlbnNpYmxlID0gZnVuY3Rpb24ob2JqLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzRXh0ZW5zaWJsZSwgdHJ1ZSkudG8uYmUuZXh0ZW5zaWJsZTtcbn07XG5hc3NlcnQuaXNOb3RFeHRlbnNpYmxlID0gZnVuY3Rpb24ob2JqLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzTm90RXh0ZW5zaWJsZSwgdHJ1ZSkudG8ubm90LmJlLmV4dGVuc2libGU7XG59O1xuYXNzZXJ0LmlzU2VhbGVkID0gZnVuY3Rpb24ob2JqLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzU2VhbGVkLCB0cnVlKS50by5iZS5zZWFsZWQ7XG59O1xuYXNzZXJ0LmlzTm90U2VhbGVkID0gZnVuY3Rpb24ob2JqLCBtc2cpIHtcbiAgbmV3IEFzc2VydGlvbihvYmosIG1zZywgYXNzZXJ0LmlzTm90U2VhbGVkLCB0cnVlKS50by5ub3QuYmUuc2VhbGVkO1xufTtcbmFzc2VydC5pc0Zyb3plbiA9IGZ1bmN0aW9uKG9iaiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc0Zyb3plbiwgdHJ1ZSkudG8uYmUuZnJvemVuO1xufTtcbmFzc2VydC5pc05vdEZyb3plbiA9IGZ1bmN0aW9uKG9iaiwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24ob2JqLCBtc2csIGFzc2VydC5pc05vdEZyb3plbiwgdHJ1ZSkudG8ubm90LmJlLmZyb3plbjtcbn07XG5hc3NlcnQuaXNFbXB0eSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc0VtcHR5LCB0cnVlKS50by5iZS5lbXB0eTtcbn07XG5hc3NlcnQuaXNOb3RFbXB0eSA9IGZ1bmN0aW9uKHZhbCwgbXNnKSB7XG4gIG5ldyBBc3NlcnRpb24odmFsLCBtc2csIGFzc2VydC5pc05vdEVtcHR5LCB0cnVlKS50by5ub3QuYmUuZW1wdHk7XG59O1xuKC8qIEBfX1BVUkVfXyAqLyBfX25hbWUoZnVuY3Rpb24gYWxpYXMobmFtZSwgYXMpIHtcbiAgYXNzZXJ0W2FzXSA9IGFzc2VydFtuYW1lXTtcbiAgcmV0dXJuIGFsaWFzO1xufSwgXCJhbGlhc1wiKSkoXCJpc09rXCIsIFwib2tcIikoXCJpc05vdE9rXCIsIFwibm90T2tcIikoXCJ0aHJvd3NcIiwgXCJ0aHJvd1wiKShcInRocm93c1wiLCBcIlRocm93XCIpKFwiaXNFeHRlbnNpYmxlXCIsIFwiZXh0ZW5zaWJsZVwiKShcImlzTm90RXh0ZW5zaWJsZVwiLCBcIm5vdEV4dGVuc2libGVcIikoXCJpc1NlYWxlZFwiLCBcInNlYWxlZFwiKShcImlzTm90U2VhbGVkXCIsIFwibm90U2VhbGVkXCIpKFwiaXNGcm96ZW5cIiwgXCJmcm96ZW5cIikoXCJpc05vdEZyb3plblwiLCBcIm5vdEZyb3plblwiKShcImlzRW1wdHlcIiwgXCJlbXB0eVwiKShcImlzTm90RW1wdHlcIiwgXCJub3RFbXB0eVwiKShcImlzQ2FsbGFibGVcIiwgXCJpc0Z1bmN0aW9uXCIpKFwiaXNOb3RDYWxsYWJsZVwiLCBcImlzTm90RnVuY3Rpb25cIik7XG5cbi8vIGxpYi9jaGFpLmpzXG52YXIgdXNlZCA9IFtdO1xuZnVuY3Rpb24gdXNlKGZuKSB7XG4gIGNvbnN0IGV4cG9ydHMgPSB7XG4gICAgQXNzZXJ0aW9uRXJyb3IsXG4gICAgdXRpbDogdXRpbHNfZXhwb3J0cyxcbiAgICBjb25maWcsXG4gICAgZXhwZWN0LFxuICAgIGFzc2VydCxcbiAgICBBc3NlcnRpb24sXG4gICAgLi4uc2hvdWxkX2V4cG9ydHNcbiAgfTtcbiAgaWYgKCF+dXNlZC5pbmRleE9mKGZuKSkge1xuICAgIGZuKGV4cG9ydHMsIHV0aWxzX2V4cG9ydHMpO1xuICAgIHVzZWQucHVzaChmbik7XG4gIH1cbiAgcmV0dXJuIGV4cG9ydHM7XG59XG5fX25hbWUodXNlLCBcInVzZVwiKTtcbmV4cG9ydCB7XG4gIEFzc2VydGlvbixcbiAgQXNzZXJ0aW9uRXJyb3IsXG4gIFNob3VsZCxcbiAgYXNzZXJ0LFxuICBjb25maWcsXG4gIGV4cGVjdCxcbiAgc2hvdWxkLFxuICB1c2UsXG4gIHV0aWxzX2V4cG9ydHMgYXMgdXRpbFxufTtcbi8qIVxuICogQ2hhaSAtIGZsYWcgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSB0ZXN0IHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gZXhwZWN0VHlwZXMgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBnZXRBY3R1YWwgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBtZXNzYWdlIGNvbXBvc2l0aW9uIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gdHJhbnNmZXJGbGFncyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogY2hhaVxuICogaHR0cDovL2NoYWlqcy5jb21cbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gaXNQcm94eUVuYWJsZWQgaGVscGVyXG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIGFkZFByb3BlcnR5IHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gYWRkTGVuZ3RoR3VhcmQgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBnZXRQcm9wZXJ0aWVzIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gcHJveGlmeSB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIGFkZE1ldGhvZCB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMi0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIG92ZXJ3cml0ZVByb3BlcnR5IHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gb3ZlcndyaXRlTWV0aG9kIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDEyLTIwMTQgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gYWRkQ2hhaW5pbmdNZXRob2QgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBvdmVyd3JpdGVDaGFpbmFibGVNZXRob2QgdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBKYWtlIEx1ZXIgPGpha2VAYWxvZ2ljYWxwYXJhZG94LmNvbT5cbiAqIE1JVCBMaWNlbnNlZFxuICovXG4vKiFcbiAqIENoYWkgLSBjb21wYXJlQnlJbnNwZWN0IHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gZ2V0T3duRW51bWVyYWJsZVByb3BlcnR5U3ltYm9scyB1dGlsaXR5XG4gKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE2IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogQ2hhaSAtIGdldE93bkVudW1lcmFibGVQcm9wZXJ0aWVzIHV0aWxpdHlcbiAqIENvcHlyaWdodChjKSAyMDExLTIwMTYgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBDaGFpIC0gaXNOYU4gdXRpbGl0eVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNSBTYWt0aGlwcml5YW4gVmFpcmFtYW5pIDx0aGVjaGFyZ2luZ3ZvbGNhbm9AZ21haWwuY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qIVxuICogY2hhaVxuICogQ29weXJpZ2h0KGMpIDIwMTEgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuLyohXG4gKiBjaGFpXG4gKiBDb3B5cmlnaHQoYykgMjAxMS0yMDE0IEpha2UgTHVlciA8amFrZUBhbG9naWNhbHBhcmFkb3guY29tPlxuICogTUlUIExpY2Vuc2VkXG4gKi9cbi8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246XG5cbmRlZXAtZXFsL2luZGV4LmpzOlxuICAoKiFcbiAgICogZGVlcC1lcWxcbiAgICogQ29weXJpZ2h0KGMpIDIwMTMgSmFrZSBMdWVyIDxqYWtlQGFsb2dpY2FscGFyYWRveC5jb20+XG4gICAqIE1JVCBMaWNlbnNlZFxuICAgKilcbiAgKCohXG4gICAqIENoZWNrIHRvIHNlZSBpZiB0aGUgTWVtb2l6ZU1hcCBoYXMgcmVjb3JkZWQgYSByZXN1bHQgb2YgdGhlIHR3byBvcGVyYW5kc1xuICAgKlxuICAgKiBAcGFyYW0ge01peGVkfSBsZWZ0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtNaXhlZH0gcmlnaHRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge01lbW9pemVNYXB9IG1lbW9pemVNYXBcbiAgICogQHJldHVybnMge0Jvb2xlYW58bnVsbH0gcmVzdWx0XG4gICopXG4gICgqIVxuICAgKiBTZXQgdGhlIHJlc3VsdCBvZiB0aGUgZXF1YWxpdHkgaW50byB0aGUgTWVtb2l6ZU1hcFxuICAgKlxuICAgKiBAcGFyYW0ge01peGVkfSBsZWZ0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtNaXhlZH0gcmlnaHRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge01lbW9pemVNYXB9IG1lbW9pemVNYXBcbiAgICogQHBhcmFtIHtCb29sZWFufSByZXN1bHRcbiAgKilcbiAgKCohXG4gICAqIFByaW1hcnkgRXhwb3J0XG4gICAqKVxuICAoKiFcbiAgICogVGhlIG1haW4gbG9naWMgb2YgdGhlIGBkZWVwRXF1YWxgIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge01peGVkfSBsZWZ0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtNaXhlZH0gcmlnaHRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIChvcHRpb25hbCkgQWRkaXRpb25hbCBvcHRpb25zXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtvcHRpb25zLmNvbXBhcmF0b3JdIChvcHRpb25hbCkgT3ZlcnJpZGUgZGVmYXVsdCBhbGdvcml0aG0sIGRldGVybWluaW5nIGN1c3RvbSBlcXVhbGl0eS5cbiAgICogQHBhcmFtIHtBcnJheX0gW29wdGlvbnMubWVtb2l6ZV0gKG9wdGlvbmFsKSBQcm92aWRlIGEgY3VzdG9tIG1lbW9pemF0aW9uIG9iamVjdCB3aGljaCB3aWxsIGNhY2hlIHRoZSByZXN1bHRzIG9mXG4gICAgICBjb21wbGV4IG9iamVjdHMgZm9yIGEgc3BlZWQgYm9vc3QuIEJ5IHBhc3NpbmcgYGZhbHNlYCB5b3UgY2FuIGRpc2FibGUgbWVtb2l6YXRpb24sIGJ1dCB0aGlzIHdpbGwgY2F1c2UgY2lyY3VsYXJcbiAgICAgIHJlZmVyZW5jZXMgdG8gYmxvdyB0aGUgc3RhY2suXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IGVxdWFsIG1hdGNoXG4gICopXG4gICgqIVxuICAgKiBDb21wYXJlIHR3byBSZWd1bGFyIEV4cHJlc3Npb25zIGZvciBlcXVhbGl0eS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWdFeHB9IGxlZnRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge1JlZ0V4cH0gcmlnaHRIYW5kT3BlcmFuZFxuICAgKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAgICopXG4gICgqIVxuICAgKiBDb21wYXJlIHR3byBTZXRzL01hcHMgZm9yIGVxdWFsaXR5LiBGYXN0ZXIgdGhhbiBvdGhlciBlcXVhbGl0eSBmdW5jdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7U2V0fSBsZWZ0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtTZXR9IHJpZ2h0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAoT3B0aW9uYWwpXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICAgKilcbiAgKCohXG4gICAqIFNpbXBsZSBlcXVhbGl0eSBmb3IgZmxhdCBpdGVyYWJsZSBvYmplY3RzIHN1Y2ggYXMgQXJyYXlzLCBUeXBlZEFycmF5cyBvciBOb2RlLmpzIGJ1ZmZlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7SXRlcmFibGV9IGxlZnRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge0l0ZXJhYmxlfSByaWdodEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gKE9wdGlvbmFsKVxuICAgKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAgICopXG4gICgqIVxuICAgKiBTaW1wbGUgZXF1YWxpdHkgZm9yIGdlbmVyYXRvciBvYmplY3RzIHN1Y2ggYXMgdGhvc2UgcmV0dXJuZWQgYnkgZ2VuZXJhdG9yIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtJdGVyYWJsZX0gbGVmdEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7SXRlcmFibGV9IHJpZ2h0SGFuZE9wZXJhbmRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAoT3B0aW9uYWwpXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICAgKilcbiAgKCohXG4gICAqIERldGVybWluZSBpZiB0aGUgZ2l2ZW4gb2JqZWN0IGhhcyBhbiBAQGl0ZXJhdG9yIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgb2JqZWN0IGhhcyBhbiBAQGl0ZXJhdG9yIGZ1bmN0aW9uLlxuICAgKilcbiAgKCohXG4gICAqIEdldHMgYWxsIGl0ZXJhdG9yIGVudHJpZXMgZnJvbSB0aGUgZ2l2ZW4gT2JqZWN0LiBJZiB0aGUgT2JqZWN0IGhhcyBubyBAQGl0ZXJhdG9yIGZ1bmN0aW9uLCByZXR1cm5zIGFuIGVtcHR5IGFycmF5LlxuICAgKiBUaGlzIHdpbGwgY29uc3VtZSB0aGUgaXRlcmF0b3IgLSB3aGljaCBjb3VsZCBoYXZlIHNpZGUgZWZmZWN0cyBkZXBlbmRpbmcgb24gdGhlIEBAaXRlcmF0b3IgaW1wbGVtZW50YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB0YXJnZXRcbiAgICogQHJldHVybnMge0FycmF5fSBhbiBhcnJheSBvZiBlbnRyaWVzIGZyb20gdGhlIEBAaXRlcmF0b3IgZnVuY3Rpb25cbiAgICopXG4gICgqIVxuICAgKiBHZXRzIGFsbCBlbnRyaWVzIGZyb20gYSBHZW5lcmF0b3IuIFRoaXMgd2lsbCBjb25zdW1lIHRoZSBnZW5lcmF0b3IgLSB3aGljaCBjb3VsZCBoYXZlIHNpZGUgZWZmZWN0cy5cbiAgICpcbiAgICogQHBhcmFtIHtHZW5lcmF0b3J9IHRhcmdldFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFuIGFycmF5IG9mIGVudHJpZXMgZnJvbSB0aGUgR2VuZXJhdG9yLlxuICAgKilcbiAgKCohXG4gICAqIEdldHMgYWxsIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUga2V5cyBmcm9tIGEgdGFyZ2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYW4gYXJyYXkgb2Ygb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBrZXlzIGZyb20gdGhlIHRhcmdldC5cbiAgICopXG4gICgqIVxuICAgKiBEZXRlcm1pbmVzIGlmIHR3byBvYmplY3RzIGhhdmUgbWF0Y2hpbmcgdmFsdWVzLCBnaXZlbiBhIHNldCBvZiBrZXlzLiBEZWZlcnMgdG8gZGVlcEVxdWFsIGZvciB0aGUgZXF1YWxpdHkgY2hlY2sgb2ZcbiAgICogZWFjaCBrZXkuIElmIGFueSB2YWx1ZSBvZiB0aGUgZ2l2ZW4ga2V5IGlzIG5vdCBlcXVhbCwgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGZhbHNlIChlYXJseSkuXG4gICAqXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGxlZnRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7QXJyYXl9IGtleXMgQW4gYXJyYXkgb2Yga2V5cyB0byBjb21wYXJlIHRoZSB2YWx1ZXMgb2YgbGVmdEhhbmRPcGVyYW5kIGFuZCByaWdodEhhbmRPcGVyYW5kIGFnYWluc3RcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAoT3B0aW9uYWwpXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICAgKilcbiAgKCohXG4gICAqIFJlY3Vyc2l2ZWx5IGNoZWNrIHRoZSBlcXVhbGl0eSBvZiB0d28gT2JqZWN0cy4gT25jZSBiYXNpYyBzYW1lbmVzcyBoYXMgYmVlbiBlc3RhYmxpc2hlZCBpdCB3aWxsIGRlZmVyIHRvIGBkZWVwRXF1YWxgXG4gICAqIGZvciBlYWNoIGVudW1lcmFibGUga2V5IGluIHRoZSBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7TWl4ZWR9IGxlZnRIYW5kT3BlcmFuZFxuICAgKiBAcGFyYW0ge01peGVkfSByaWdodEhhbmRPcGVyYW5kXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gKE9wdGlvbmFsKVxuICAgKiBAcmV0dXJuIHtCb29sZWFufSByZXN1bHRcbiAgICopXG4gICgqIVxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGFyZ3VtZW50IGlzIGEgcHJpbWl0aXZlLlxuICAgKlxuICAgKiBUaGlzIGludGVudGlvbmFsbHkgcmV0dXJucyB0cnVlIGZvciBhbGwgb2JqZWN0cyB0aGF0IGNhbiBiZSBjb21wYXJlZCBieSByZWZlcmVuY2UsXG4gICAqIGluY2x1ZGluZyBmdW5jdGlvbnMgYW5kIHN5bWJvbHMuXG4gICAqXG4gICAqIEBwYXJhbSB7TWl4ZWR9IHZhbHVlXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59IHJlc3VsdFxuICAgKilcbiovXG4iLCAiLyoqKioqKioqXG5cbiBDb252ZXJ0IGNoYWktZG9tIDEuOC4xIHRvIGVzIG1vZHVsZSwgd2l0aG91dCBhbnkgb3RoZXIgbW9kaWZpY2F0aW9uLlxuIEZyb20gaHR0cHM6Ly9naXRodWIuY29tL25hdGhhbmJva3RhZS9jaGFpLWRvbS9ibG9iLzg2YzM0MjMvY2hhaS1kb20uanNcbiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25hdGhhbmJva3RhZS9jaGFpLWRvbS9pc3N1ZXMvMzhcblxuIFVzYWdlOlxuIGltcG9ydCB7IGNoYWlEb20gfSBmcm9tICc8cGF0aC10bz4vY2hhaS1kb20nO1xuIGNoYWkudXNlKGNoYWlEb20pO1xuXG4gQ29weXJpZ2h0IChjKSAyMDE1IE5hdGhhbiBCbGFjayBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG5cbiBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBNSVQgbGljZW5zZS4gRm9yIGEgY29weSwgc2VlIDxodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVD4uXG5cbiAqKioqKioqKioqL1xuXG5leHBvcnQgZnVuY3Rpb24gY2hhaURvbShjaGFpLCB1dGlscykge1xuICAgIHZhciBmbGFnID0gdXRpbHMuZmxhZyxcblxuICAgICAgICBlbFRvU3RyaW5nID0gZnVuY3Rpb24oZWwpIHtcbiAgICAgICAgICAgIGxldCBkZXNjXG4gICAgICAgICAgICBpZiAoaXNOb2RlTGlzdChlbCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZWwubGVuZ3RoID09PSAwKSByZXR1cm4gJ2VtcHR5IE5vZGVMaXN0J1xuICAgICAgICAgICAgICAgIGRlc2MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlbCwgMCwgNSkubWFwKGVsVG9TdHJpbmcpLmpvaW4oJywgJylcbiAgICAgICAgICAgICAgICByZXR1cm4gZWwubGVuZ3RoID4gNSA/IGRlc2MgKyAnLi4uICgrJyArIChlbC5sZW5ndGggLSA1KSArICcgbW9yZSknIDogZGVzY1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZWwpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlc2MgPSBlbC50YWdOYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgIGlmIChlbC5pZCkge1xuICAgICAgICAgICAgICAgIGRlc2MgKz0gJyMnICsgZWwuaWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbC5jbGFzc05hbWUpIHtcbiAgICAgICAgICAgICAgICBkZXNjICs9ICcuJyArIFN0cmluZyhlbC5jbGFzc05hbWUpLnJlcGxhY2UoL1xccysvZywgJy4nKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChlbC5hdHRyaWJ1dGVzLCBmdW5jdGlvbihhdHRyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGF0dHIubmFtZSAhPT0gJ2NsYXNzJyAmJiBhdHRyLm5hbWUgIT09ICdpZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzYyArPSAnWycgKyBhdHRyLm5hbWUgKyAoYXR0ci52YWx1ZSA/ICc9XCInICsgYXR0ci52YWx1ZSArICdcIl0nIDogJ10nKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICByZXR1cm4gZGVzY1xuICAgICAgICB9LFxuXG4gICAgICAgIGF0dHJBc3NlcnQgPSBmdW5jdGlvbihuYW1lLCB2YWwpIHtcbiAgICAgICAgICAgIGxldCBlbCA9IGZsYWcodGhpcywgJ29iamVjdCcpLCBhY3R1YWwgPSBlbC5nZXRBdHRyaWJ1dGUobmFtZSlcblxuICAgICAgICAgICAgaWYgKCFmbGFnKHRoaXMsICduZWdhdGUnKSB8fCB1bmRlZmluZWQgPT09IHZhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICAhIWVsLmF0dHJpYnV0ZXNbbmFtZV1cbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBoYXZlIGFuIGF0dHJpYnV0ZSAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgbm90IHRvIGhhdmUgYW4gYXR0cmlidXRlICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAgICAgLCBuYW1lXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodW5kZWZpbmVkICE9PSB2YWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgdmFsID09PSBhY3R1YWxcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBoYXZlIGFuIGF0dHJpYnV0ZSAnICsgdXRpbHMuaW5zcGVjdChuYW1lKSArICcgd2l0aCB0aGUgdmFsdWUgI3tleHB9LCBidXQgdGhlIHZhbHVlIHdhcyAje2FjdH0nXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgbm90IHRvIGhhdmUgYW4gYXR0cmlidXRlICcgKyB1dGlscy5pbnNwZWN0KG5hbWUpICsgJyB3aXRoIHRoZSB2YWx1ZSAje2FjdH0nXG4gICAgICAgICAgICAgICAgICAgICwgdmFsXG4gICAgICAgICAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmbGFnKHRoaXMsICdvYmplY3QnLCBhY3R1YWwpXG4gICAgICAgIH0sXG5cbiAgICAgICAgaXNIVE1MRWxlbWVudCA9IGZ1bmN0aW9uKGVsKSB7XG4gICAgICAgICAgICByZXR1cm4gZWwubm9kZVR5cGUgPT09IDEgLy8gd2luZG93Lk5vZGUuRUxFTUVOVF9OT0RFXG4gICAgICAgIH0sXG5cbiAgICAgICAgaXNOb2RlTGlzdCA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBOb2RlTGlzdF0nXG4gICAgICAgIH1cblxuICAgIHV0aWxzLmVsVG9TdHJpbmcgPSBlbFRvU3RyaW5nXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCdhdHRyJywgYXR0ckFzc2VydClcbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ2F0dHJpYnV0ZScsIGF0dHJBc3NlcnQpXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ2NsYXNzJywgZnVuY3Rpb24oY2xhc3NOYW1lKSB7XG4gICAgICAgIHZhciBlbCA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSlcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gaGF2ZSBjbGFzcyAje2V4cH0nXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIG5vdCB0byBoYXZlIGNsYXNzICN7ZXhwfSdcbiAgICAgICAgICAgICwgY2xhc3NOYW1lXG4gICAgICAgIClcbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCdpZCcsIGZ1bmN0aW9uKGlkKSB7XG4gICAgICAgIHZhciBlbCA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgZWwuaWQgPT0gaWRcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gaGF2ZSBpZCAje2V4cH0nXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIG5vdCB0byBoYXZlIGlkICN7ZXhwfSdcbiAgICAgICAgICAgICwgaWRcbiAgICAgICAgKVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5hZGRNZXRob2QoJ2h0bWwnLCBmdW5jdGlvbihodG1sKSB7XG4gICAgICAgIHZhciBlbCA9IGZsYWcodGhpcywgJ29iamVjdCcpLCBhY3R1YWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKS5pbm5lckhUTUxcblxuICAgICAgICBpZiAoZmxhZyh0aGlzLCAnY29udGFpbnMnKSkge1xuICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgYWN0dWFsLmluZGV4T2YoaHRtbCkgPj0gMFxuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICN7YWN0fSB0byBjb250YWluIEhUTUwgI3tleHB9J1xuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICN7YWN0fSBub3QgdG8gY29udGFpbiBIVE1MICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAsIGh0bWxcbiAgICAgICAgICAgICAgICAsIGFjdHVhbFxuICAgICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgYWN0dWFsID09PSBodG1sXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcoZWwpICsgJyB0byBoYXZlIEhUTUwgI3tleHB9LCBidXQgdGhlIEhUTUwgd2FzICN7YWN0fSdcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIG5vdCB0byBoYXZlIEhUTUwgI3tleHB9J1xuICAgICAgICAgICAgICAgICwgaHRtbFxuICAgICAgICAgICAgICAgICwgYWN0dWFsXG4gICAgICAgICAgICApXG4gICAgICAgIH1cbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkQ2hhaW5hYmxlTWV0aG9kKCd0cmltbWVkJywgbnVsbCwgZnVuY3Rpb24oKSB7XG4gICAgICAgIGZsYWcodGhpcywgJ3RyaW0tdGV4dCcsIHRydWUpXG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgndGV4dCcsIGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpLCBjb250YWlucyA9IGZsYWcodGhpcywgJ2NvbnRhaW5zJyksXG4gICAgICAgICAgICB0cmltID0gZmxhZyh0aGlzLCAndHJpbS10ZXh0JyksIGFjdHVhbCwgcmVzdWx0XG5cbiAgICAgICAgaWYgKGlzTm9kZUxpc3Qob2JqKSkge1xuICAgICAgICAgICAgYWN0dWFsID0gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKG9iaiwgZnVuY3Rpb24oZWwpIHsgcmV0dXJuIHRyaW0gPyBlbC50ZXh0Q29udGVudC50cmltKCkgOiBlbC50ZXh0Q29udGVudCB9KVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGV4dCkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBjb250YWlucyA/XG4gICAgICAgICAgICAgICAgICAgIHRleHRbZmxhZyh0aGlzLCAnbmVnYXRlJykgPyAnc29tZScgOiAnZXZlcnknXShmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNvbWUuY2FsbChvYmosIGZ1bmN0aW9uKGVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0cmltID8gZWwudGV4dENvbnRlbnQudHJpbSgpIDogZWwudGV4dENvbnRlbnQpID09PSB0XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgIHV0aWxzLmVxbChhY3R1YWwsIHRleHQpXG5cbiAgICAgICAgICAgICAgICBhY3R1YWwgPSBhY3R1YWwuam9pbigpXG4gICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuam9pbigpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFjdHVhbCA9IGFjdHVhbC5qb2luKCcnKVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbnRhaW5zID8gYWN0dWFsLmluZGV4T2YodGV4dCkgPj0gMCA6IGFjdHVhbCA9PT0gdGV4dFxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWN0dWFsID0gdHJpbSA/IG9iai50ZXh0Q29udGVudC50cmltKCkgOiBvYmoudGV4dENvbnRlbnRcbiAgICAgICAgICAgIHJlc3VsdCA9IGNvbnRhaW5zID8gYWN0dWFsLmluZGV4T2YodGV4dCkgPj0gMCA6IGFjdHVhbCA9PT0gdGV4dFxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG9iakRlc2MgPSBlbFRvU3RyaW5nKG9iaiksIHRleHRNc2cgPSB0cmltID8gJ3RyaW1tZWQgdGV4dCcgOiAndGV4dCdcbiAgICAgICAgaWYgKGNvbnRhaW5zKSB7XG4gICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICByZXN1bHRcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgb2JqRGVzYyArICcgdG8gY29udGFpbiAje2V4cH0sIGJ1dCB0aGUgJyArIHRleHRNc2cgKyAnIHdhcyAje2FjdH0nXG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIG9iakRlc2MgKyAnIG5vdCB0byBjb250YWluICN7ZXhwfSwgYnV0IHRoZSAnICsgdGV4dE1zZyArICcgd2FzICN7YWN0fSdcbiAgICAgICAgICAgICAgICAsIHRleHRcbiAgICAgICAgICAgICAgICAsIGFjdHVhbFxuICAgICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgcmVzdWx0XG4gICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIG9iakRlc2MgKyAnIHRvIGhhdmUgJyArIHRleHRNc2cgKyAnICN7ZXhwfSwgYnV0IHRoZSAnICsgdGV4dE1zZyArICcgd2FzICN7YWN0fSdcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgb2JqRGVzYyArICcgbm90IHRvIGhhdmUgJyArIHRleHRNc2cgKyAnICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAsIHRleHRcbiAgICAgICAgICAgICAgICAsIGFjdHVhbFxuICAgICAgICAgICAgKVxuICAgICAgICB9XG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZE1ldGhvZCgndmFsdWUnLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICB2YXIgZWwgPSBmbGFnKHRoaXMsICdvYmplY3QnKSwgYWN0dWFsID0gZmxhZyh0aGlzLCAnb2JqZWN0JykudmFsdWVcbiAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICBmbGFnKHRoaXMsICdvYmplY3QnKS52YWx1ZSA9PT0gdmFsdWVcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gaGF2ZSB2YWx1ZSAje2V4cH0sIGJ1dCB0aGUgdmFsdWUgd2FzICN7YWN0fSdcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgbm90IHRvIGhhdmUgdmFsdWUgI3tleHB9J1xuICAgICAgICAgICAgLCB2YWx1ZVxuICAgICAgICAgICAgLCBhY3R1YWxcbiAgICAgICAgKVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5vdmVyd3JpdGVQcm9wZXJ0eSgnZXhpc3QnLCBmdW5jdGlvbihfc3VwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAgICAgICBpZiAoaXNOb2RlTGlzdChvYmopKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgIG9iai5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkIGFuIGVtcHR5IE5vZGVMaXN0IHRvIGhhdmUgbm9kZXMnXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBleGlzdCcpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24ub3ZlcndyaXRlUHJvcGVydHkoJ2VtcHR5JywgZnVuY3Rpb24oX3N1cGVyKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICAgICAgaWYgKGlzSFRNTEVsZW1lbnQob2JqKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICBvYmouY2hpbGRyZW4ubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGJlIGVtcHR5J1xuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgYmUgZW1wdHknKVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc05vZGVMaXN0KG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgb2JqLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBiZSBlbXB0eSdcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGJlIGVtcHR5JylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QoJ2xlbmd0aCcsXG4gICAgICAgIGZ1bmN0aW9uKF9zdXBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKVxuICAgICAgICAgICAgICAgIGlmIChpc05vZGVMaXN0KG9iaikgfHwgaXNIVE1MRWxlbWVudChvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhY3R1YWxMZW5ndGggPSBvYmouY2hpbGRyZW4gPyBvYmouY2hpbGRyZW4ubGVuZ3RoIDogb2JqLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbExlbmd0aCA9PT0gbGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBoYXZlICN7ZXhwfSBjaGlsZHJlbiBidXQgaXQgaGFkICN7YWN0fSBjaGlsZHJlbidcbiAgICAgICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBoYXZlICN7ZXhwfSBjaGlsZHJlbidcbiAgICAgICAgICAgICAgICAgICAgICAgICwgbGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAsIGFjdHVhbExlbmd0aFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZ1bmN0aW9uKF9zdXBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIF9zdXBlci5jYWxsKHRoaXMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApXG5cblxuICAgIGNoYWkuQXNzZXJ0aW9uLm92ZXJ3cml0ZU1ldGhvZCgnbWF0Y2gnLCBmdW5jdGlvbihfc3VwZXIpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gICAgICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JylcbiAgICAgICAgICAgIGlmIChpc0hUTUxFbGVtZW50KG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgb2JqLm1hdGNoZXMoc2VsZWN0b3IpXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG1hdGNoICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IG1hdGNoICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAgICAgLCBzZWxlY3RvclxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOb2RlTGlzdChvYmopKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgICAgICghIW9iai5sZW5ndGggJiYgQXJyYXkucHJvdG90eXBlLmV2ZXJ5LmNhbGwob2JqLCBmdW5jdGlvbihlbCkgeyByZXR1cm4gZWwubWF0Y2hlcyhzZWxlY3RvcikgfSkpXG4gICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG1hdGNoICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IG1hdGNoICN7ZXhwfSdcbiAgICAgICAgICAgICAgICAgICAgLCBzZWxlY3RvclxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pXG5cbiAgICBjaGFpLkFzc2VydGlvbi5vdmVyd3JpdGVDaGFpbmFibGVNZXRob2QoJ2NvbnRhaW4nLFxuICAgICAgICBmdW5jdGlvbihfc3VwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzdWJpdGVtKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9iaiA9IGZsYWcodGhpcywgJ29iamVjdCcpXG4gICAgICAgICAgICAgICAgaWYgKGlzSFRNTEVsZW1lbnQob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHN1Yml0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIW9iai5xdWVyeVNlbGVjdG9yKHN1Yml0ZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gY29udGFpbiAje2V4cH0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gbm90IGNvbnRhaW4gI3tleHB9J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgc3ViaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5jb250YWlucyhzdWJpdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGNvbnRhaW4gJyArIGVsVG9TdHJpbmcoc3ViaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgY29udGFpbiAnICsgZWxUb1N0cmluZyhzdWJpdGVtKSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmdW5jdGlvbihfc3VwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBfc3VwZXIuY2FsbCh0aGlzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCdkZXNjZW5kYW50JywgZnVuY3Rpb24oc3ViaXRlbSkge1xuICAgICAgICB2YXIgb2JqID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksIGFjdHVhbCA9IHN1Yml0ZW1cblxuICAgICAgICBpZiAodHlwZW9mIHN1Yml0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBhY3R1YWwgPSBvYmoucXVlcnlTZWxlY3RvcihzdWJpdGVtKVxuICAgICAgICAgICAgdGhpcy5hc3NlcnQoXG4gICAgICAgICAgICAgICAgISFhY3R1YWxcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBoYXZlIGRlc2NlbmRhbnQgI3tleHB9J1xuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIG5vdCBoYXZlIGRlc2NlbmRhbnQgI3tleHB9J1xuICAgICAgICAgICAgICAgICwgc3ViaXRlbSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgICAgIG9iai5jb250YWlucyhzdWJpdGVtKVxuICAgICAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKG9iaikgKyAnIHRvIGNvbnRhaW4gJyArIGVsVG9TdHJpbmcoc3ViaXRlbSlcbiAgICAgICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgY29udGFpbiAnICsgZWxUb1N0cmluZyhzdWJpdGVtKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGZsYWcodGhpcywgJ29iamVjdCcsIGFjdHVhbClcbiAgICB9KVxuXG4gICAgY2hhaS5Bc3NlcnRpb24uYWRkTWV0aG9kKCdkZXNjZW5kYW50cycsIGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gICAgICAgIHZhciBvYmogPSBmbGFnKHRoaXMsICdvYmplY3QnKSxcbiAgICAgICAgICAgIGFjdHVhbCA9IG9iai5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKVxuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgICEhYWN0dWFsLmxlbmd0aFxuICAgICAgICAgICAgLCAnZXhwZWN0ZWQgJyArIGVsVG9TdHJpbmcob2JqKSArICcgdG8gaGF2ZSBkZXNjZW5kYW50cyAje2V4cH0nXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhvYmopICsgJyB0byBub3QgaGF2ZSBkZXNjZW5kYW50cyAje2V4cH0nXG4gICAgICAgICAgICAsIHNlbGVjdG9yKVxuICAgICAgICBmbGFnKHRoaXMsICdvYmplY3QnLCBhY3R1YWwpXG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCdkaXNwbGF5ZWQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGVsID0gZmxhZyh0aGlzLCAnb2JqZWN0JyksXG4gICAgICAgICAgICBhY3R1YWwgPSBkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGVsKSA/IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKS5kaXNwbGF5IDogZWwuc3R5bGUuZGlzcGxheVxuXG4gICAgICAgIHRoaXMuYXNzZXJ0KFxuICAgICAgICAgICAgYWN0dWFsICE9PSAnbm9uZSdcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gYmUgZGlzcGxheWVkLCBidXQgaXQgd2FzIG5vdCdcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gbm90IGJlIGRpc3BsYXllZCwgYnV0IGl0IHdhcyBhcyAnICsgYWN0dWFsXG4gICAgICAgICAgICAsIGFjdHVhbFxuICAgICAgICApXG4gICAgfSlcblxuICAgIGNoYWkuQXNzZXJ0aW9uLmFkZFByb3BlcnR5KCd2aXNpYmxlJywgZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlbCA9IGZsYWcodGhpcywgJ29iamVjdCcpLFxuICAgICAgICAgICAgYWN0dWFsID0gZG9jdW1lbnQuYm9keS5jb250YWlucyhlbCkgPyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCkudmlzaWJpbGl0eSA6IGVsLnN0eWxlLnZpc2liaWxpdHlcblxuICAgICAgICB0aGlzLmFzc2VydChcbiAgICAgICAgICAgIGFjdHVhbCAhPT0gJ2hpZGRlbicgJiYgYWN0dWFsICE9PSAnY29sbGFwc2UnXG4gICAgICAgICAgICAsICdleHBlY3RlZCAnICsgZWxUb1N0cmluZyhlbCkgKyAnIHRvIGJlIHZpc2libGUsIGJ1dCBpdCB3YXMgJyArIChhY3R1YWwgPT09ICdoaWRkZW4nID8gJ2hpZGRlbicgOiAnY29sbGFwc2VkJylcbiAgICAgICAgICAgICwgJ2V4cGVjdGVkICcgKyBlbFRvU3RyaW5nKGVsKSArICcgdG8gbm90IGJlIHZpc2libGUsIGJ1dCBpdCB3YXMnXG4gICAgICAgICAgICAsIGFjdHVhbFxuICAgICAgICApXG4gICAgfSlcbn0iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4dGVuZH0gZnJvbSBcIi4uLy4uL3NvdXJjZS9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuZXhwb3J0IGNvbnN0IGlzQnJvd3NlciA9IG5ldyBGdW5jdGlvbihcInRyeSB7cmV0dXJuIHRoaXM9PT13aW5kb3c7fWNhdGNoKGUpeyByZXR1cm4gZmFsc2U7fVwiKTtcbmV4cG9ydCBjb25zdCBpc05vZGUgPSBuZXcgRnVuY3Rpb24oXCJ0cnkge3JldHVybiB0aGlzPT09Z2xvYmFsO31jYXRjaChlKXtyZXR1cm4gZmFsc2U7fVwiKTtcblxubGV0IEpTRE9NRXhwb3J0ID0gbnVsbDtcblxuLyoqXG4gKiB0aGlzIGhlbHBlciBmdW5jdGlvbiBjcmVhdGVzIHRoZSBkb20gc3RhY2sgaW4gdGhlIG5vZGUgZW52aXJvbm1lbnRcbiAqXG4gKiBAcmV0dXJuIHtQcm9taXNlPHVua25vd24+fFByb21pc2U8dm9pZD59XG4gKi9cbmZ1bmN0aW9uIGluaXRKU0RPTShvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgJiYgd2luZG93WydET01QYXJzZXInXSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgY29uc3QgZyA9IGdldEdsb2JhbCgpO1xuXG4gICAgb3B0aW9ucyA9IGV4dGVuZCh7fSwge1xuICAgICAgICBwcmV0ZW5kVG9CZVZpc3VhbDogdHJ1ZSxcbiAgICAgICAgY29udGVudFR5cGU6IFwidGV4dC9odG1sXCIsXG4gICAgICAgIGluY2x1ZGVOb2RlTG9jYXRpb25zOiB0cnVlLFxuICAgICAgICBzdG9yYWdlUXVvdGE6IDEwMDAwMDAwLFxuICAgICAgICBydW5TY3JpcHRzOiBcImRhbmdlcm91c2x5XCIsXG4gICAgICAgIHJlc291cmNlczogXCJ1c2FibGVcIlxuICAgIH0sIG9wdGlvbnMgfHwge30pXG5cbiAgICByZXR1cm4gaW1wb3J0KFwianNkb21cIikudGhlbigoe0pTRE9NfSkgPT4ge1xuICAgICAgICBKU0RPTUV4cG9ydCA9IEpTRE9NO1xuICAgICAgICBjb25zdCB7d2luZG93fSA9IG5ldyBKU0RPTShgPCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz1cImVuXCI+PGhlYWQ+PHRpdGxlPlRlc3Q8L3RpdGxlPjwvaGVhZD48Ym9keT48ZGl2IGlkPVwibW9ja3NcIj48L2Rpdj48L2JvZHk+PC9odG1sPmAsIG9wdGlvbnMpO1xuXG4gICAgICAgIGdbJ3dpbmRvdyddID0gd2luZG93O1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAnQmxvYicsXG4gICAgICAgICAgICAgICAgICAgICdDU1NTdHlsZVNoZWV0JyxcbiAgICAgICAgICAgICAgICAgICAgJ2N1c3RvbUVsZW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ0N1c3RvbUV2ZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2RvY3VtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0RPTUV4Y2VwdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdET01JbXBsZW1lbnRhdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdEb2N1bWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdEb2N1bWVudEZyYWdtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0RPTVBhcnNlcicsXG4gICAgICAgICAgICAgICAgICAgICdFbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0VsZW1lbnRJbnRlcm5hbHMnLFxuICAgICAgICAgICAgICAgICAgICAnRXZlbnQnLFxuICAgICAgICAgICAgICAgICAgICAnRXZlbnRUYXJnZXQnLFxuICAgICAgICAgICAgICAgICAgICAnZ2V0Q29tcHV0ZWRTdHlsZScsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MQnV0dG9uRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MQ29sbGVjdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MRGl2RWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdIVE1MRG9jdW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTEVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTEZvcm1FbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxJbnB1dEVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTFNjcmlwdEVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAncmVxdWVzdEFuaW1hdGlvbkZyYW1lJyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxTZWxlY3RFbGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0hUTUxUZW1wbGF0ZUVsZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnSFRNTFRleHRBcmVhRWxlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdJbnB1dEV2ZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ0tleWJvYXJkRXZlbnQnLFxuICAgICAgICAgICAgICAgICAgICAnTXV0YXRpb25PYnNlcnZlcicsXG4gICAgICAgICAgICAgICAgICAgICduYXZpZ2F0b3InLFxuICAgICAgICAgICAgICAgICAgICAnTm9kZScsXG4gICAgICAgICAgICAgICAgICAgICdOb2RlRmlsdGVyJyxcbiAgICAgICAgICAgICAgICAgICAgJ05vZGVMaXN0JyxcbiAgICAgICAgICAgICAgICAgICAgJ3NlbGYnLFxuICAgICAgICAgICAgICAgICAgICAnU2hhZG93Um9vdCcsXG4gICAgICAgICAgICAgICAgICAgICdYTUxTZXJpYWxpemVyJyxcbiAgICAgICAgICAgICAgICBdLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdba2V5XSA9IHdpbmRvd1trZXldICAgIFxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBzZXR0aW5nIGtleVwiLCBrZXksIGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpbXBvcnQoXCJkb20tc3RvcmFnZVwiKS50aGVuKCh7ZGVmYXVsdDogU3RvcmFnZX0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGcubG9jYWxTdG9yYWdlID0gbmV3IFN0b3JhZ2UobnVsbCwge3N0cmljdDogdHJ1ZX0pO1xuICAgICAgICAgICAgICAgICAgICBnLnNlc3Npb25TdG9yYWdlID0gbmV3IFN0b3JhZ2UobnVsbCwge3N0cmljdDogdHJ1ZX0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvd1snbG9jYWxTdG9yYWdlJ10gPSBnLmxvY2FsU3RvcmFnZTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93WydzZXNzaW9uU3RvcmFnZSddID0gZy5zZXNzaW9uU3RvcmFnZTtcblxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGcpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGxvYWRpbmcgZG9tLXN0b3JhZ2VcIiwgZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuXG4gICAgfSk7XG59XG5cbmV4cG9ydCB7aW5pdEpTRE9NLCBKU0RPTUV4cG9ydH0gXG5cbiIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5cbi8vIGxhbmd1YWdlPWh0bWxcbmxldCBodG1sMSA9IGBcbiAgICA8bW9uc3Rlci1zcGxpdC1wYW5lbCBpZD1cIm15LXNwbGl0LXBhbmVsXCI+XG4gICAgICAgXG4gICAgPC9tb25zdGVyLXNwbGl0LXBhbmVsPlxuYDtcblxubGV0IFNwbGl0U2NyZWVuO1xuXG5kZXNjcmliZSgnU3BsaXRTY3JlZW4nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG5cbiAgICAgICAgICAgIGlmICghZ2xvYmFsWydjcnlwdG8nXSkge1xuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IENyeXB0byA9IG1bJ0NyeXB0byddO1xuICAgICAgICAgICAgICAgICAgICBnbG9iYWxbJ2NyeXB0byddID0gbmV3IENyeXB0bygpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9sYXlvdXQvc3BsaXQtcGFuZWwubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBTcGxpdFNjcmVlbiA9IG1bJ1NwbGl0UGFuZWwnXTtcbiAgICAgICAgICAgIH0pKVxuXG4gICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKT0+e1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBidXR0b25zIGFuZCBTcGxpdFNjcmVlbicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFNwbGl0U2NyZWVuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ215LXNwbGl0LXBhbmVsJylcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KFNwbGl0U2NyZWVuKS5pcy5pbnN0YW5jZW9mKEhUTUxFbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkaXYgPSBTcGxpdFNjcmVlbi5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRpdi5oYXNDaGlsZE5vZGVzKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMClcblxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxuXG4vLyBsYW5ndWFnZT1odG1sXG5sZXQgaHRtbDEgPSBgXG4gICAgPG1vbnN0ZXItcGFuZWwgaWQ9XCJteS1wYW5lbFwiPlxuICAgICAgIFxuICAgIDwvbW9uc3Rlci1wYW5lbD5cbmA7XG5cbmxldCBTcGxpdFNjcmVlbjtcblxuZGVzY3JpYmUoJ1NwbGl0U2NyZWVuJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuXG4gICAgICAgICAgICBpZiAoIWdsb2JhbFsnY3J5cHRvJ10pIHtcbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBDcnlwdG8gPSBtWydDcnlwdG8nXTtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsWydjcnlwdG8nXSA9IG5ldyBDcnlwdG8oKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbGF5b3V0L3BhbmVsLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgU3BsaXRTY3JlZW4gPSBtWydQYW5lbCddO1xuICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpPT57XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIGJ1dHRvbnMgYW5kIFNwbGl0U2NyZWVuJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgU3BsaXRTY3JlZW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbXktcGFuZWwnKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoU3BsaXRTY3JlZW4pLmlzLmluc3RhbmNlb2YoSFRNTEVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRpdiA9IFNwbGl0U2NyZWVuLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZGl2Lmhhc0NoaWxkTm9kZXMoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKVxuXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7c2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlck1vY2t9IGZyb20gXCIuLi8uLi8uLi91dGlsL2ludGVyc2VjdGlvbi1tb2NrLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5sZXQgbW9ja2ludGVyc2VjdGlvbm9ic2VydmVyO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5kZXNjcmliZSgnUmVsb2FkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgLy8ganNkb20tdGVzdGluZy1tb2NrcyBuZWVkIGplc3RcbiAgICBsZXQgUmVsb2FkLCB2aWV3cG9ydCwgbW9ja1ZpZXdwb3J0O1xuXG4gICAgYWZ0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIucmVzdG9yZSgpO1xuICAgIH0pXG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIgPSBzZXR1cEludGVyc2VjdGlvbk9ic2VydmVyTW9jaygpO1xuXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3JlbG9hZC5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFJlbG9hZCA9IG1bJ1JlbG9hZCddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCduZXcgUmVsb2FkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICAvLyBsYW5ndWFnZT1IVE1MXG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtb25zdGVyLXJlbG9hZD48L21vbnN0ZXItcmVsb2FkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci1yZWxvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDInKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci1yZWxvYWQnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiByZWxvYWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItcmVsb2FkJykpLmlzLmluc3RhbmNlb2YoUmVsb2FkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbW9ja3M7XG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlbG9hZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItcmVsb2FkJyk7XG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChyZWxvYWQpO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci1yZWxvYWQnKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ2xvYWQgY29udGVudCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbW9ja3MsIGZldGNoUmVmZXJlbmNlLCBpbnRlcnNlY3Rpb25PYnNlcnZlcjtcbiAgICAgICAgYmVmb3JlRWFjaCgoZG9uZSkgPT4ge1xuICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIC8vIGxhbmd1YWdlPUhUTUxcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwidGhpcy1jb250ZW50XCI+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIGA7XG5cbiAgICAgICAgICAgIGZldGNoUmVmZXJlbmNlID0gZ2xvYmFsWydmZXRjaCddO1xuXG4gICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBNYXA7XG4gICAgICAgICAgICAgICAgaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICd0ZXh0L2h0bWwnKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgb2s6dHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czoyMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdDIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTIoJ2hlbGxvIHdvcmxkIScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgbG9hZCBjb250ZW50IGZyb20gdXJsJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgcmVsb2FkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1yZWxvYWQnKTtcbiAgICAgICAgICAgIHJlbG9hZC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci11cmwnLCAnaHR0cDovL2xvY2FsaG9zdC8nKVxuXG4gICAgICAgICAgICByZWxvYWQuYWRkRXZlbnRMaXN0ZW5lcignbW9uc3Rlci1mZXRjaGVkJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItcmVsb2FkJyk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJ2hlbGxvIHdvcmxkJyk7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQocmVsb2FkKTtcbiAgICAgICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlci5nZXRJbnN0YW5jZSgpLmVudGVyTm9kZSgpO1xuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlck1vY2soXG4gICAge1xuICAgICAgICByb290ID0gbnVsbCxcbiAgICAgICAgcm9vdE1hcmdpbiA9ICcnLFxuICAgICAgICB0aHJlc2hvbGRzID0gW10sXG4gICAgICAgIGRpc2Nvbm5lY3QgPSAoKSA9PiBudWxsLFxuICAgICAgICBvYnNlcnZlID0gKCkgPT4gbnVsbCxcbiAgICAgICAgdGFrZVJlY29yZHMgPSAoKSA9PiBbXSxcbiAgICAgICAgdW5vYnNlcnZlID0gKCkgPT4gbnVsbCxcbiAgICB9ID0ge30pIHtcblxuICAgIGNvbnN0IHNhdmVkSW1wbGVtZW50YXRpb24gPSB3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG5cbiAgICBsZXQgbGFzdE9iamVjdDtcblxuICAgIGNsYXNzIE1vY2tJbnRlcnNlY3Rpb25PYnNlcnZlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnJvb3QgPSByb290O1xuICAgICAgICAgICAgdGhpcy5yb290TWFyZ2luID0gcm9vdE1hcmdpbjtcbiAgICAgICAgICAgIHRoaXMudGhyZXNob2xkcyA9IHRocmVzaG9sZHM7XG4gICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QgPSBkaXNjb25uZWN0O1xuICAgICAgICAgICAgdGhpcy5vYnNlcnZlID0gb2JzZXJ2ZTtcbiAgICAgICAgICAgIHRoaXMudGFrZVJlY29yZHMgPSB0YWtlUmVjb3JkcztcbiAgICAgICAgICAgIHRoaXMudW5vYnNlcnZlID0gdW5vYnNlcnZlO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcblxuICAgICAgICAgICAgbGFzdE9iamVjdCA9IHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBlbnRlck5vZGUoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBbXTtcbiAgICAgICAgICAgIGVudHJpZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgaXNJbnRlcnNlY3Rpbmc6IHRydWVcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHRoaXNbJ2NhbGxiYWNrJ10oZW50cmllcywgdGhpcyk7XG4gICAgICAgIH1cblxuXG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywgJ0ludGVyc2VjdGlvbk9ic2VydmVyJywge1xuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogTW9ja0ludGVyc2VjdGlvbk9ic2VydmVyXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsLCAnSW50ZXJzZWN0aW9uT2JzZXJ2ZXInLCB7XG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBNb2NrSW50ZXJzZWN0aW9uT2JzZXJ2ZXJcbiAgICB9KTtcblxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdG9yZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyID0gc2F2ZWRJbXBsZW1lbnRhdGlvbjtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0SW5zdGFuY2U6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0T2JqZWN0O1xuICAgICAgICB9XG4gICAgfVxufSIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7UmVzaXplT2JzZXJ2ZXJNb2NrfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9yZXNpemUtb2JzZXJ2ZXIubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxubGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxubGV0IGh0bWwyID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgIDxtb25zdGVyLXN0YXRlLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDp2YWx1ZXMuY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLW9wdGlvbnM9J3tcbiAgXCJ1cmxcIjogXCJtb2NrLWRhdGEuanNvblwiLFxuICBcIm1hcHBpbmdcIjoge1xuICAgIFwidmFsdWVQYXRoXCI6IFwiXFwke2ZpcnN0X25hbWV9IFxcJHtsYXN0X25hbWV9XCIsXG4gICAgXCJrZXlQYXRoXCI6IFwiaWRcIlxuICB9LFxuICAgICAgXCJ0eXBlXCI6XCJjaGVja2JveFwiXG5cbn0nPjwvbW9uc3Rlci1zdGF0ZS1idXR0b24+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgU3RhdGVCdXR0b247XG5cbmRlc2NyaWJlKCdTdGF0ZUJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGFmdGVyKGZ1bmN0aW9uICgpIHtcbiAgICB9KVxuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgICAgICBpZighZ2xvYmFsLlJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsLlJlc2l6ZU9ic2VydmVyID0gUmVzaXplT2JzZXJ2ZXJNb2NrO1xuICAgICAgICAgICAgfSAgICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9mb3JtL3N0YXRlLWJ1dHRvbi5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFN0YXRlQnV0dG9uID0gbVsnU3RhdGVCdXR0b24nXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbmV3IFN0YXRlQnV0dG9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci1zdGF0ZS1idXR0b24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDInKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci1zdGF0ZS1idXR0b24nKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBzdGF0ZS1idXR0b24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItc3RhdGUtYnV0dG9uJykpLmlzLmluc3RhbmNlb2YoU3RhdGVCdXR0b24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIG5vIG9wdGlvbnMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItc3RhdGUtYnV0dG9uJyk7XG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChidXR0b24pO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gYnV0dG9uLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignYnV0dG9uJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMpLmlzLmluc3RhbmNlb2YoSFRNTEJ1dHRvbkVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucy5oYXNDaGlsZE5vZGVzKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgIlxuXG5cbmV4cG9ydCB7UmVzaXplT2JzZXJ2ZXJNb2NrfVxuXG5cbmNsYXNzIFJlc2l6ZU9ic2VydmVyTW9jayB7XG4gICAgY29uc3RydWN0b3IoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0gW107XG4gICAgfVxuXG4gICAgb2JzZXJ2ZShlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgICB9XG5cbiAgICB1bm9ic2VydmUoZWxlbWVudCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0gdGhpcy5lbGVtZW50cy5maWx0ZXIoKGVsKSA9PiBlbCAhPT0gZWxlbWVudCk7XG4gICAgfVxuXG4gICAgZGlzY29ubmVjdCgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50cyA9IFtdO1xuICAgIH1cblxuICAgIHRyaWdnZXJSZXNpemUoZW50cmllcykge1xuICAgICAgICB0aGlzLmNhbGxiYWNrKGVudHJpZXMsIHRoaXMpO1xuICAgIH1cbn1cblxuIiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtSZXNpemVPYnNlcnZlck1vY2t9IGZyb20gXCIuLi8uLi8uLi91dGlsL3Jlc2l6ZS1vYnNlcnZlci5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuXG5sZXQgaHRtbDEgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPC9kaXY+XG5gO1xuXG5sZXQgaHRtbDIgPSBgXG4gICAgPGRpdiBpZD1cInRlc3QyXCI+XG4gICAgPG1vbnN0ZXItc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnZhbHVlcy5jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItb3B0aW9ucz0ne1xuICBcInVybFwiOiBcIm1vY2stZGF0YS5qc29uXCIsXG4gIFwibWFwcGluZ1wiOiB7XG4gICAgXCJzZWxlY3RvclwiOiBcIipcIixcbiAgICBcInZhbHVlVGVtcGxhdGVcIjogXCJcXCR7Zmlyc3RfbmFtZX0gXFwke2xhc3RfbmFtZX1cIixcbiAgICBcImxhYmVsVGVtcGxhdGVcIjogXCJpZFwiXG4gIH0sXG4gICAgICBcInR5cGVcIjpcImNoZWNrYm94XCJcblxufSc+PC9tb25zdGVyLXNlbGVjdD5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBTZWxlY3QsIGZldGNoUmVmZXJlbmNlO1xuXG5kZXNjcmliZSgnU2VsZWN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgICAgICBmZXRjaFJlZmVyZW5jZSA9IGdsb2JhbFsnZmV0Y2gnXTtcblxuICAgICAgICAgICAgaWYgKCFnbG9iYWwuUmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICBnbG9iYWwuUmVzaXplT2JzZXJ2ZXIgPSBSZXNpemVPYnNlcnZlck1vY2s7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vc2VsZWN0Lm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgU2VsZWN0ID0gbVsnU2VsZWN0J107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cblxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ1dpdGggZmV0Y2gnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgaGVhZGVycyA9IG5ldyBNYXA7XG4gICAgICAgICAgICAgICAgaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0MikgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqc29uID0gSlNPTi5wYXJzZShgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIkFsZXhpYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3RfbmFtZVwiOiBcIk91Z2h0cmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbWFpbFwiOiBcImFvdWdodHJpZ2h0MEBleGJsb2cuanBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnZW5kZXJcIjogXCJBZ2VuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY291bnRyeVwiOiBcIm1uXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIkJldGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYXN0X25hbWVcIjogXCJCb2RkaW5ndG9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJiYm9kZGluZ3RvbjFAc3RhdGNvdW50ZXIuY29tXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiTm9uLWJpbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJzeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIlNoZWxsaVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3RfbmFtZVwiOiBcIkEnQmFycm93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJzYWJhcnJvdzJAZ29vZ2xlLmNvLnVrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiUG9seWdlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJub1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF1gKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlMihKU09OLnN0cmluZ2lmeShqc29uKSlcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIH07XG5cblxuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZmV0Y2hSZWZlcmVuY2U7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb250YWlucyBtb25zdGVyLXNlbGVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXNlbGVjdCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIHNlbGVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXNlbGVjdCcpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzZWxlY3QpLmlzLmluc3RhbmNlb2YoU2VsZWN0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGhhdmUgb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXNlbGVjdCcpO1xuICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRPcHRpb24oJ3VybCcsICdodHRwczovL2V4YW1wbGUuY29tJylcbiAgICAgICAgICAgICAgICBzZWxlY3Quc2V0T3B0aW9uKCdtYXBwaW5nLnNlbGVjdG9yJywgJyonKVxuICAgICAgICAgICAgICAgIHNlbGVjdC5zZXRPcHRpb24oJ21hcHBpbmcubGFiZWxUZW1wbGF0ZScsICcke2lkfScpXG4gICAgICAgICAgICAgICAgc2VsZWN0LnNldE9wdGlvbignbWFwcGluZy52YWx1ZVRlbXBsYXRlJywgJyR7aWR9JylcblxuICAgICAgICAgICAgICAgIHNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdtb25zdGVyLW9wdGlvbnMtc2V0JywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHNlbGVjdC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25dJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMubGVuZ3RoKS5pcy5lcXVhbCgzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkh0bWwgPSBzZWxlY3Quc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uc10nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtMFwiJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTFcIicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25IdG1sKS5jb250YWluLmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0yXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5ub3QuaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTNcIicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIH0sIDEwMClcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHNlbGVjdCk7XG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1zZWxlY3QnKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHNlbGVjdCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBzZWxlY3Quc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdbZGF0YS1tb25zdGVyLXJvbGU9b3B0aW9uc10nKTtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucykuaXMuaW5zdGFuY2VvZihIVE1MRGl2RWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IG9wdGlvbnMucGFyZW50Tm9kZS5vdXRlckhUTUw7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGIgPSBvcHRpb25zLmNoaWxkTm9kZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucy5oYXNDaGlsZE5vZGVzKCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSwgMClcblxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7RGF0YVVybH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuXG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7UmVzaXplT2JzZXJ2ZXJNb2NrfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9yZXNpemUtb2JzZXJ2ZXIubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxubGV0IGh0bWwxLCBvcHRpb25zLCBodG1sMiwgQ29uZmlybUJ1dHRvbjtcblxuZGVzY3JpYmUoJ0NvbmZpcm1CdXR0b24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpOyAgICBcbiAgICAgICAgXG4gICAgICAgIGlmKCFnbG9iYWwuUmVzaXplT2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIGdsb2JhbC5SZXNpemVPYnNlcnZlciA9IFJlc2l6ZU9ic2VydmVyTW9jaztcbiAgICAgICAgfVxuXG4gICAgICAgIG9wdGlvbnMgPSBuZXcgRGF0YVVybChidG9hKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHBvcHBlcjoge1xuICAgICAgICAgICAgICAgIHBsYWNlbWVudDogXCJ0b3BcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSkpLCAnYXBwbGljYXRpb24vanNvbicsIHRydWUpLnRvU3RyaW5nKClcblxuICAgICAgICBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICA8bW9uc3Rlci1jb25maXJtLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDp2YWx1ZXMuY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLW9wdGlvbnM9XCJgICsgb3B0aW9ucyArIGBcIj48L21vbnN0ZXItY29uZmlybS1idXR0b24+XG4gICAgPC9kaXY+XG5gO1xuXG4gICAgICAgIGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYFxuXG5cbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vY29uZmlybS1idXR0b24ubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBDb25maXJtQnV0dG9uID0gbVsnQ29uZmlybUJ1dHRvbiddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCduZXcgQ29uZmlybUJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItY29uZmlybS1idXR0b24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDInKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci1jb25maXJtLWJ1dHRvbicpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIGJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jb25maXJtLWJ1dHRvbicpKS5pcy5pbnN0YW5jZW9mKENvbmZpcm1CdXR0b24pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBoYXZlIGNoaWxkcycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jb25maXJtLWJ1dHRvbicpO1xuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoYnV0dG9uKTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGJ1dHRvbi5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItYnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChjb250ZW50Lmhhc0NoaWxkTm9kZXMoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge0RhdGFzb3VyY2V9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlLm1qc1wiO1xuaW1wb3J0IHtQcm9jZXNzaW5nfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3V0aWwvcHJvY2Vzc2luZy5tanNcIjtcblxuaW1wb3J0IHtzdG9yYWdlT2JqZWN0U3ltYm9sfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcbi8vXG4vLyBsZXQgaHRtbDEgPSBgXG4vLyAgICAgPGRpdiBpZD1cInRlc3QxXCI+XG4vLyAgICAgPG1vbnN0ZXItZm9ybSBpZD1cImZvcm0xXCI+PC9tb25zdGVyLWZvcm0+XG4vLyAgICAgPC9kaXY+XG4vLyBgO1xuLy9cbi8vIGxldCBodG1sMiA9IGA8ZGl2IGlkPVwidGVzdDJcIj5cbi8vXG4vLyAgICAgPG1vbnN0ZXItZGF0YXNvdXJjZS1kb20gaWQ9XCJkYXRhc291cmNlWGRyZnJcIj5cbi8vICAgICAgICAgPHNjcmlwdCB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiPlxuLy8gICAgICAgICAgICAgW1xuLy8gICAgICAgICAgICAgICAgIHtcbi8vICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxLFxuLy8gICAgICAgICAgICAgICAgICAgICBcInVzZXJuYW1lXCI6IFwibWFydGluODlcIixcbi8vICAgICAgICAgICAgICAgICAgICAgXCJlbWFpbFwiOiBcImVsZW5hLnJpY2hhcmRzQGRvbWFpbi5jb21cIixcbi8vICAgICAgICAgICAgICAgICAgICAgXCJmdWxsX25hbWVcIjogXCJFbGVuYSBSaWNoYXJkc1wiLFxuLy8gICAgICAgICAgICAgICAgICAgICBcImFnZVwiOiAyOSxcbi8vICAgICAgICAgICAgICAgICAgICAgXCJjb3VudHJ5XCI6IFwiR3JlZWNlXCIsXG4vLyAgICAgICAgICAgICAgICAgICAgIFwicmVnaXN0ZXJlZF9kYXRlXCI6IFwiMjAxOS0xMS0yM1wiLFxuLy8gICAgICAgICAgICAgICAgICAgICBcInN0YXR1c1wiOiBcImFjdGl2ZVwiXG4vLyAgICAgICAgICAgICAgICAgfVxuLy8gICAgICAgICAgICAgXVxuLy8gICAgICAgICA8L3NjcmlwdD5cbi8vICAgICA8L21vbnN0ZXItZGF0YXNvdXJjZS1kb20+XG4vL1xuLy9cbi8vICAgICA8bW9uc3Rlci1mb3JtIGlkPVwiZm9ybTJEcmZhMlwiXG4vLyAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItb3B0aW9uLW1hcHBpbmctZGF0YT1cIlwiXG4vLyAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItb3B0aW9uLWRhdGFzb3VyY2Utc2VsZWN0b3I9XCIjZGF0YXNvdXJjZVhkcmZyXCI+XG4vLyAgICAgICAgIDxkaXY+XG4vLyAgICAgICAgICAgICA8ZGl2PlxuLy8gICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiY29udHJvbDFcIlxuLy8gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvbnRyb2wxXCJcbi8vICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOmRhdGEuZnVsbF9uYW1lXCI+XG4vLyAgICAgICAgICAgICA8L2Rpdj5cbi8vICAgICAgICAgPC9kaXY+XG4vLyAgICAgICAgIDxkaXY+XG4vLyAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImNvbnRyb2wyXCJcbi8vICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6ZGF0YS5zdGF0dXNcIj5cbi8vICAgICAgICAgPC9kaXY+XG4vL1xuLy8gICAgIDwvbW9uc3Rlci1mb3JtPlxuLy8gPC9kaXY+XG4vLyBgO1xuLy9cbi8vIGRlc2NyaWJlKCdGb3JtJywgZnVuY3Rpb24gKCkge1xuLy9cbi8vICAgICBsZXQgZm9ybTtcbi8vICAgICBsZXQgdGVzdE1vY2tcbi8vXG4vLyAgICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4vL1xuLy8gICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuLy9cbi8vICAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoeCkgPT4ge1xuLy8gICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9mb3JtLm1qc1wiKS50aGVuKChtKSA9PiB7XG4vLyAgICAgICAgICAgICAgICAgZm9ybSA9IG1bJ0Zvcm0nXTtcbi8vICAgICAgICAgICAgICAgICBkb25lKClcbi8vICAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcbi8vICAgICAgICAgfSk7XG4vL1xuLy8gICAgIH0pXG4vL1xuLy8gICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuLy8gICAgICAgICAvLyBhZGQgbW9jayB2b250YWluZXIgdG8gYm9keVxuLy8gICAgICAgICB0ZXN0TW9jayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuLy8gICAgICAgICB0ZXN0TW9jay5pZCA9ICdtb2Nrc1I1MjMnO1xuLy8gICAgICAgICB0ZXN0TW9jay5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4vLyAgICAgICAgIHRlc3RNb2NrLnN0eWxlLnRvcCA9ICctMTAwMDBweCc7XG4vLyAgICAgICAgIHRlc3RNb2NrLnN0eWxlLmxlZnQgPSAnLTEwMDAwcHgnO1xuLy8gICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlc3RNb2NrKTtcbi8vICAgICB9KVxuLy9cbi8vICAgICBhZnRlckVhY2goKCkgPT4ge1xuLy8gICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbi8vICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbi8vICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3Rlc3Qta2V5Jylcbi8vICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXN0TW9jayk7XG4vL1xuLy8gICAgIH0pXG4vL1xuLy8gICAgIGRlc2NyaWJlKCdIVE1MLVRlbXBsYXRlcycsIGZ1bmN0aW9uICgpIHtcbi8vXG4vLyAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZSBodG1sMScsIGZ1bmN0aW9uICgpIHtcbi8vICAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuLy8gICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuLy8gICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuLy8gICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0ZXN0LWtleScsICd7fScpXG4vLyAgICAgICAgICAgICB9KTtcbi8vXG4vLyAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItZm9ybScsIGZ1bmN0aW9uICgpIHtcbi8vICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItZm9ybScpO1xuLy8gICAgICAgICAgICAgfSk7XG4vL1xuLy9cbi8vICAgICAgICAgfSk7XG4vL1xuLy8gICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUgaHRtbDInLCBmdW5jdGlvbiAoKSB7XG4vL1xuLy8gICAgICAgICAgICAgYmVmb3JlRWFjaCgoZG9uZSkgPT4ge1xuLy8gICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0ZXN0LWtleScsIEpTT04uc3RyaW5naWZ5KHtcbi8vICAgICAgICAgICAgICAgICAgICAgYTogdHJ1ZSxcbi8vICAgICAgICAgICAgICAgICAgICAgYjogNyxcbi8vICAgICAgICAgICAgICAgICAgICAgYzogWzEsIDUsIDZdLFxuLy8gICAgICAgICAgICAgICAgICAgICBkOiB7XG4vLyAgICAgICAgICAgICAgICAgICAgICAgICBlOiB0cnVlXG4vLyAgICAgICAgICAgICAgICAgICAgIH1cbi8vICAgICAgICAgICAgICAgICB9KSlcbi8vICAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbi8vXG4vLyAgICAgICAgICAgICAgICAgdHJ5IHtcbi8vICAgICAgICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG4vLyAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbi8vICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4vLyAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4vLyAgICAgICAgICAgICAgICAgfVxuLy9cbi8vICAgICAgICAgICAgIH0pO1xuLy9cbi8vICAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci1mb3JtJywgZnVuY3Rpb24gKCkge1xuLy9cbi8vICAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbi8vICAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbi8vXG4vLyAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWZvcm0nKTtcbi8vICAgICAgICAgICAgIH0pO1xuLy9cbi8vICAgICAgICAgICAgIGl0KCdzaG91bGQgY2xpY2snLCBmdW5jdGlvbiAoZG9uZSkge1xuLy9cbi8vICAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbi8vICAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbi8vXG4vLyAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLWZvcm0nKTtcbi8vXG4vLyAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykuaW5uZXJIVE1MKVxuLy9cbi8vICAgICAgICAgICAgICAgICBjb25zdCBmb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0yRHJmYTInKTtcbi8vXG4vL1xuLy8gICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuLy9cbi8vICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JtLnNoYWRvd1Jvb3QpIHtcbi8vICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKG5ldyBFcnJvcignbm8gc2hhZG93Um9vdCcpKVxuLy8gICAgICAgICAgICAgICAgICAgICB9XG4vL1xuLy8gICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sMSA9IGZvcm0uc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdzbG90JykuYXNzaWduZWRFbGVtZW50cygpWzBdLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jylcbi8vICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250cm9sMSkge1xuLy8gICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUobmV3IEVycm9yKCdubyBjb250cm9sMScpKVxuLy8gICAgICAgICAgICAgICAgICAgICB9XG4vL1xuLy8gICAgICAgICAgICAgICAgICAgICBjb250cm9sMS5jbGljaygpO1xuLy9cbi8vXG4vLyAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbi8vICAgICAgICAgICAgICAgICB9LCAyKVxuLy9cbi8vICAgICAgICAgICAgIH0pO1xuLy9cbi8vXG4vLyAgICAgICAgIH0pO1xuLy9cbi8vXG4vLyAgICAgfSlcbi8vXG4vLyB9KVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHBhcnNlRGF0YVVSTCB9IGZyb20gXCIuLi90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBQcm94eU9ic2VydmVyIH0gZnJvbSBcIi4uL3R5cGVzL3Byb3h5b2JzZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IFBhdGhmaW5kZXIgfSBmcm9tIFwiLi9wYXRoZmluZGVyLm1qc1wiO1xuXG5leHBvcnQgeyBEYXRhc291cmNlIH07XG5cbi8qKlxuICogVGhpcyBjYWxsYmFjayBjYW4gYmUgcGFzc2VkIHRvIGEgZGF0YXNvdXJjZSBhbmQgaXMgdXNlZCB0byBhZGFwdCBkYXRhIHN0cnVjdHVyZXMuXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlfmV4YW1wbGVDYWxsYmFja1xuICogQHBhcmFtIHsqfSB2YWx1ZSBWYWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAgS2V5XG4gKiBAc2VlIE1vbnN0ZXIuRGF0YS5EYXRhc291cmNlXG4gKi9cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjQuMFxuICovXG5jb25zdCBpbnRlcm5hbERhdGFTeW1ib2wgPSBTeW1ib2wuZm9yKFxuXHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL0BAZGF0YVwiLFxuKTtcblxuLyoqXG4gKiBUaGUgZGF0YXNvdXJjZSBjbGFzcyBpcyB0aGUgYmFzaXMgZm9yIGRlYWxpbmcgd2l0aCBkaWZmZXJlbnQgZGF0YSBzb3VyY2VzLlxuICogSXQgcHJvdmlkZXMgYSB1bmlmaWVkIGludGVyZmFjZSBmb3IgYWNjZXNzaW5nIGRhdGFcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS9kYXRhL2RhdGFzb3VyY2UubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIyLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgZGF0YXNvdXJjZSBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlIGFjY2VzcyB0byBkYXRhIG9iamVjdHMuXG4gKi9cbmNsYXNzIERhdGFzb3VyY2UgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIGNyZWF0ZXMgYSBuZXcgZGF0YXNvdXJjZVxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdID0gbmV3IFByb3h5T2JzZXJ2ZXIoe1xuXHRcdFx0b3B0aW9uczogZXh0ZW5kKHt9LCB0aGlzLmRlZmF1bHRzKSxcblx0XHR9KTtcblxuXHRcdHRoaXNbaW50ZXJuYWxEYXRhU3ltYm9sXSA9IG5ldyBQcm94eU9ic2VydmVyKHt9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBhdHRhY2ggYSBuZXcgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7RGF0YXNvdXJjZX1cblx0ICovXG5cdGF0dGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpc1tpbnRlcm5hbERhdGFTeW1ib2xdLmF0dGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBkZXRhY2ggYSBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKi9cblx0ZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpIHtcblx0XHR0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uZGV0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRjb250YWluc09ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxEYXRhU3ltYm9sXS5jb250YWluc09ic2VydmVyKG9ic2VydmVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXJpdmVkIGNsYXNzZXMgY2FuIG92ZXJyaWRlIGFuZCBleHRlbmQgdGhpcyBtZXRob2QgYXMgZm9sbG93cy5cblx0ICpcblx0ICogYGBgXG5cdCAqIGdldCBkZWZhdWx0cygpIHtcblx0ICogICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdCAqICAgICAgICBteVZhbHVlOnRydWVcblx0ICogICAgfSk7XG5cdCAqIH1cblx0ICogYGBgXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBvcHRpb25cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKi9cblx0c2V0T3B0aW9uKHBhdGgsIHZhbHVlKSB7XG5cdFx0bmV3IFBhdGhmaW5kZXIodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0U3ViamVjdCgpW1wib3B0aW9uc1wiXSkuc2V0VmlhKFxuXHRcdFx0cGF0aCxcblx0XHRcdHZhbHVlLFxuXHRcdCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSBvcHRpb25zXG5cdCAqIEByZXR1cm4ge0RhdGFzb3VyY2V9XG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uXG5cdCAqL1xuXHRzZXRPcHRpb25zKG9wdGlvbnMpIHtcblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSBwYXJzZU9wdGlvbnNKU09OKG9wdGlvbnMpO1xuXHRcdH1cblx0XHRleHRlbmQoXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRTdWJqZWN0KClbXCJvcHRpb25zXCJdLFxuXHRcdFx0dGhpcy5kZWZhdWx0cyxcblx0XHRcdG9wdGlvbnMsXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIG5lc3RlZCBvcHRpb25zIGNhbiBiZSBzcGVjaWZpZWQgYnkgcGF0aCBgYS5iLmNgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG5cdCAqIEBwYXJhbSB7Kn0gZGVmYXVsdFZhbHVlXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHRnZXRPcHRpb24ocGF0aCwgZGVmYXVsdFZhbHVlKSB7XG5cdFx0bGV0IHZhbHVlO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhbHVlID0gbmV3IFBhdGhmaW5kZXIoXG5cdFx0XHRcdHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLFxuXHRcdFx0KS5nZXRWaWEocGF0aCk7XG5cdFx0fSBjYXRjaCAoZSkge31cblxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXMuXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRyZWFkKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlcy5cblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcInRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgcmVhbCBvYmplY3Rcblx0ICpcblx0ICogQHJldHVybiB7T2JqZWN0fEFycmF5fVxuXHQgKi9cblx0Z2V0KCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdHxBcnJheX0gZGF0YVxuXHQgKiBAcmV0dXJuIHtEYXRhc291cmNlfVxuXHQgKi9cblx0c2V0KGRhdGEpIHtcblx0XHR0aGlzW2ludGVybmFsRGF0YVN5bWJvbF0uc2V0U3ViamVjdChkYXRhKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlXCIpO1xuXHR9XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBkYXRhXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9wdGlvbnMgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvblxuICovXG5mdW5jdGlvbiBwYXJzZU9wdGlvbnNKU09OKGRhdGEpIHtcblx0aWYgKGlzU3RyaW5nKGRhdGEpKSB7XG5cdFx0Ly8gdGhlIGNvbmZpZ3VyYXRpb24gY2FuIGJlIHNwZWNpZmllZCBhcyBhIGRhdGEgdXJsLlxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBkYXRhVXJsID0gcGFyc2VEYXRhVVJMKGRhdGEpO1xuXHRcdFx0ZGF0YSA9IGRhdGFVcmwuY29udGVudDtcblx0XHR9IGNhdGNoIChlKSB7fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZGF0YSk7XG5cdFx0XHR2YWxpZGF0ZU9iamVjdChvYmopO1xuXHRcdFx0cmV0dXJuIG9iajtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdGB0aGUgb3B0aW9ucyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQganNvbiBkZWZpbml0aW9uIChhY3R1YWw6ICR7ZGF0YX0pLmAsXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7fTtcbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBEYXRhc291cmNlIH0gZnJvbSBcIi4uL2RhdGFzb3VyY2UubWpzXCI7XG5cbmV4cG9ydCB7IFN0b3JhZ2UsIHN0b3JhZ2VPYmplY3RTeW1ib2wgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc3RvcmFnZU9iamVjdFN5bWJvbCA9IFN5bWJvbC5mb3IoXG5cdFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZS9AQHN0b3JhZ2VPYmplY3RcIixcbik7XG5cbi8qKlxuICogVGhlIGNsYXNzIHJlcHJlc2VudHMgYSByZWNvcmQuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yMi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIFN0b3JhZ2UgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBhY2Nlc3MgdG8gZGF0YSBvYmplY3RzIG92ZXIgV2ViU3RvcmFnZUFQSS5cbiAqL1xuY2xhc3MgU3RvcmFnZSBleHRlbmRzIERhdGFzb3VyY2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGtleSBMb2NhbFN0b3JhZ2UgS2V5XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihrZXkpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuc2V0T3B0aW9uKFwia2V5XCIsIHZhbGlkYXRlU3RyaW5nKGtleSkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc3RvcmFnZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30ga2V5PXVuZGVmaW5lZCBMb2NhbFN0b3JhZ2UgS2V5XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRrZXk6IHVuZGVmaW5lZCxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXMuXG5cdCAqIEByZXR1cm4ge2V4dGVybmFsOlN0b3JhZ2V9XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRbc3RvcmFnZU9iamVjdFN5bWJvbF0oKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwidGhpcyBtZXRob2QgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBkZXJpdmVkIGNsYXNzZXNcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBvcHRpb25zIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBqc29uIGRlZmluaXRpb25cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3Rcblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBkYXRhIGNhbm5vdCBiZSByZWFkXG5cdCAqL1xuXHRyZWFkKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0Y29uc3Qgc3RvcmFnZSA9IHNlbGZbc3RvcmFnZU9iamVjdFN5bWJvbF0oKTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0Y29uc3QgZGF0YSA9IEpTT04ucGFyc2Uoc3RvcmFnZS5nZXRJdGVtKHNlbGYuZ2V0T3B0aW9uKFwia2V5XCIpKSk7XG5cdFx0XHRzZWxmLnNldChkYXRhID8/IHt9KTtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtTdG9yYWdlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGRhdGEgY2Fubm90IGJlIHdyaXR0ZW5cblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdFx0Y29uc3Qgc3RvcmFnZSA9IHNlbGZbc3RvcmFnZU9iamVjdFN5bWJvbF0oKTtcblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuXHRcdFx0Y29uc3QgZGF0YSA9IHNlbGYuZ2V0KCk7XG5cdFx0XHRpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHN0b3JhZ2UucmVtb3ZlSXRlbShzZWxmLmdldE9wdGlvbihcImtleVwiKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdG9yYWdlLnNldEl0ZW0oc2VsZi5nZXRPcHRpb24oXCJrZXlcIiksIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1N0b3JhZ2V9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFN0b3JhZ2UodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0ua2V5KTtcblx0fVxufVxuIiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICA8bW9uc3Rlci10cmVlLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDp2YWx1ZXMuY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1tb25zdGVyLW9wdGlvbnM9J3tcbiAgXCJ1cmxcIjogXCJtb2NrLWRhdGEuanNvblwiLFxuICBcIm1hcHBpbmdcIjoge1xuICAgIFwidmFsdWVUZW1wbGF0ZVwiOiBcIlxcJHtmaXJzdF9uYW1lfSBcXCR7bGFzdF9uYW1lfVwiLFxuICAgIFwibGFiZWxUZW1wbGF0ZVwiOiBcImlkXCIsXG4gICAgXCJzZWxlY3RvclwiOiBcIipcIlxuICB9LFxuICAgICAgXCJ0eXBlXCI6XCJjaGVja2JveFwiXG5cbn0nPjwvbW9uc3Rlci10cmVlLXNlbGVjdD5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBUcmVlU2VsZWN0LCBmZXRjaFJlZmVyZW5jZTtcblxuZGVzY3JpYmUoJ1RyZWVzZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpbXBvcnQoXCJlbGVtZW50LWludGVybmFscy1wb2x5ZmlsbFwiKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxbJ2ZldGNoJ107XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdHJlZS1zZWxlY3QubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBUcmVlU2VsZWN0ID0gbVsnVHJlZVNlbGVjdCddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdXaXRoIGZldGNoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuXG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgTWFwO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdDIpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQganNvbiA9IEpTT04ucGFyc2UoYFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZpcnN0X25hbWVcIjogXCJBbGV4aWFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYXN0X25hbWVcIjogXCJPdWdodHJpZ2h0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJhb3VnaHRyaWdodDBAZXhibG9nLmpwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiQWdlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJtblwiICxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJwYXJlbnRcIjogXCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmaXJzdF9uYW1lXCI6IFwiQmV0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3RfbmFtZVwiOiBcIkJvZGRpbmd0b25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJlbWFpbFwiOiBcImJib2RkaW5ndG9uMUBzdGF0Y291bnRlci5jb21cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJnZW5kZXJcIjogXCJOb24tYmluYXJ5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY291bnRyeVwiOiBcInN5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicGFyZW50XCI6IFwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZmlyc3RfbmFtZVwiOiBcIlNoZWxsaVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhc3RfbmFtZVwiOiBcIkEnQmFycm93XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJzYWJhcnJvdzJAZ29vZ2xlLmNvLnVrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZ2VuZGVyXCI6IFwiUG9seWdlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNvdW50cnlcIjogXCJub1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInBhcmVudFwiOiBcIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdYCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTIoSlNPTi5zdHJpbmdpZnkoanNvbikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItdHJlZS1zZWxlY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDInKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci10cmVlLXNlbGVjdCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIHNlbGVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10cmVlLXNlbGVjdCcpKS5pcy5pbnN0YW5jZW9mKFRyZWVTZWxlY3QpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgaGF2ZSBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRyZWUtc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgdHJlZXNlbGVjdC5zZXRPcHRpb24oJ3VybCcsICdodHRwczovL2V4YW1wbGUuY29tJylcblxuICAgICAgICAgICAgICAgIHRyZWVzZWxlY3Quc2V0T3B0aW9uKCdtYXBwaW5nLnNlbGVjdG9yJywgJyonKTtcbiAgICAgICAgICAgICAgICB0cmVlc2VsZWN0LnNldE9wdGlvbignbWFwcGluZy5sYWJlbFRlbXBsYXRlJywgJyR7bGFzdF9uYW1lfScpO1xuICAgICAgICAgICAgICAgIHRyZWVzZWxlY3Quc2V0T3B0aW9uKCdtYXBwaW5nLnZhbHVlVGVtcGxhdGUnLCAnJHtpZCB8IHRvc3RyaW5nIH0nKTtcblxuICAgICAgICAgICAgICAgIHRyZWVzZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignbW9uc3Rlci1vcHRpb25zLXNldCcsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0cmVlc2VsZWN0LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbl0nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDMgb3B0aW9ucyAoc2VlIGZldGNoIGFib3ZlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zLmxlbmd0aCkuaXMuZXF1YWwoMyk7XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkh0bWwgPSB0cmVlc2VsZWN0LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignW2RhdGEtbW9uc3Rlci1yb2xlPW9wdGlvbnNdJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4uaHRtbCgnZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJvcHRpb25zLTBcIicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25IdG1sKS5jb250YWluLmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0xXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9uSHRtbCkuY29udGFpbi5odG1sKCdkYXRhLW1vbnN0ZXItaW5zZXJ0LXJlZmVyZW5jZT1cIm9wdGlvbnMtMlwiJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbkh0bWwpLmNvbnRhaW4ubm90Lmh0bWwoJ2RhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwib3B0aW9ucy0zXCInKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgICAgICAgICAgICB9LCAxMDApXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZCh0cmVlc2VsZWN0KTtcblxuICAgICAgICAgICAgXG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10cmVlLXNlbGVjdCcpO1xuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoc2VsZWN0KTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHNlbGVjdC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLW1vbnN0ZXItcm9sZT1vcHRpb25zXScpO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChvcHRpb25zKS5pcy5pbnN0YW5jZW9mKEhUTUxEaXZFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMuaGFzQ2hpbGROb2RlcygpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0sIDApXG5cblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5cbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMiA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICA8bW9uc3Rlci1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6dmFsdWVzLmNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtbW9uc3Rlci1vcHRpb25zPSd7XG4gIFwidXJsXCI6IFwibW9jay1kYXRhLmpzb25cIixcbiAgXCJtYXBwaW5nXCI6IHtcbiAgICBcInZhbHVlUGF0aFwiOiBcIlxcJHtmaXJzdF9uYW1lfSBcXCR7bGFzdF9uYW1lfVwiLFxuICAgIFwia2V5UGF0aFwiOiBcImlkXCJcbiAgfSxcbiAgICAgIFwidHlwZVwiOlwiY2hlY2tib3hcIlxuXG59Jz48L21vbnN0ZXItYnV0dG9uPlxuICAgIDwvZGl2PlxuYDtcblxubGV0IEJ1dHRvbjtcblxuZGVzY3JpYmUoJ0J1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS9idXR0b24ubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBCdXR0b24gPSBtWydCdXR0b24nXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbmV3IEJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItYnV0dG9uJyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgYnV0dG9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWJ1dHRvbicpKS5pcy5pbnN0YW5jZW9mKEJ1dHRvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkb2N1bWVudC5jcmVhdGVFbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbm8gb3B0aW9ucycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1idXR0b24nKTtcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKGJ1dHRvbik7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gYnV0dG9uLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignYnV0dG9uJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG9wdGlvbnMpLmlzLmluc3RhbmNlb2YoSFRNTEJ1dHRvbkVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3Qob3B0aW9ucy5oYXNDaGlsZE5vZGVzKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAxMDApXG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxubGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxubGV0IGh0bWwyID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuICAgICAgICAgPG1vbnN0ZXItdG9nZ2xlLXN3aXRjaD48L21vbnN0ZXItdG9nZ2xlLXN3aXRjaD5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBUb2dnbGVTd2l0Y2g7XG5cbmRlc2NyaWJlKCdUb2dnbGVTd2l0Y2gnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2Zvcm0vdG9nZ2xlLXN3aXRjaC5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFRvZ2dsZVN3aXRjaCA9IG1bJ1RvZ2dsZVN3aXRjaCddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCduZXcgVG9nZ2xlU3dpdGNoJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwyO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZSBmcm9tIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0KCdzaG91bGQgY29udGFpbnMgbW9uc3Rlci10b2dnbGUtc3dpdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QyJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIG1vbnN0ZXItdG9nZ2xlLXN3aXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10b2dnbGUtc3dpdGNoJykpLmlzLmluc3RhbmNlb2YoVG9nZ2xlU3dpdGNoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3RvZ2dsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICB9KTtcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCd0b2dnbGUgdG8gb24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZVN3aXRjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnNldE9wdGlvbigndmFsdWVzLm9uJywgJ3RydWUnKTtcbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC5zZXRPcHRpb24oJ3ZhbHVlcy5vZmYnLCAnZmFsc2UnKTtcblxuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnZhbHVlID0gXCJ0cnVlXCI7XG5cbiAgICAgICAgICAgIGV4cGVjdChcInRydWVcIikuaXMuZXF1YWwodG9nZ2xlU3dpdGNoLnZhbHVlKTtcbiAgICAgICAgICAgIGV4cGVjdChcIm9uXCIpLmlzLmVxdWFsKHRvZ2dsZVN3aXRjaC5zdGF0ZSk7XG5cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC50b2dnbGUoKTtcblxuICAgICAgICAgICAgZXhwZWN0KFwiZmFsc2VcIikuaXMuZXF1YWwodG9nZ2xlU3dpdGNoLnZhbHVlKTtcbiAgICAgICAgICAgIGV4cGVjdChcIm9mZlwiKS5pcy5lcXVhbCh0b2dnbGVTd2l0Y2guc3RhdGUpO1xuXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2gudG9nZ2xlKCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChcInRydWVcIikuaXMuZXF1YWwodG9nZ2xlU3dpdGNoLnZhbHVlKTtcbiAgICAgICAgICAgIGV4cGVjdChcIm9uXCIpLmlzLmVxdWFsKHRvZ2dsZVN3aXRjaC5zdGF0ZSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3RvZ2dsZSBvbiB0byBvZmYnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZVN3aXRjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2gudG9nZ2xlT24oKTtcblxuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC52YWx1ZSkuaXMuZXF1YWwoJ29uJyk7XG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnN0YXRlKS5pcy5lcXVhbCgnb24nKTtcblxuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnRvZ2dsZU9mZigpO1xuXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnZhbHVlKS5pcy5lcXVhbCgnb2ZmJyk7XG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnN0YXRlKS5pcy5lcXVhbCgnb2ZmJyk7XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2Rlc2NyaWJlIGNzcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2NzcyB0b2dnbGUnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIG5ldyBDb250cm9sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZVN3aXRjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHNldCBpbml0IHZhbHVlIHRvIG9uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC52YWx1ZSA9IFwib25cIjtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBpbnNlcnQgRE9NXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpLmFwcGVuZENoaWxkKHRvZ2dsZVN3aXRjaCk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVXBkYXRlciBwcm96ZXNzIHJ1bnMgaW4gc2V0VGltZW91dFxuICAgICAgICAgICAgICogc2VsZltpbnRlcm5hbFN5bWJvbF0uYXR0YWNoT2JzZXJ2ZXIoKTtcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogZXhwZWN0IHRoYXQgY2xhc3Nlcy5vbiBpcyBzZXQgdG8gRWxlbWVudCBTd2l0Y2hcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGxldCBoYXNDbGFzc0EgPSB0b2dnbGVTd2l0Y2guc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tb25zdGVyLXJvbGU9XCJzd2l0Y2hcIl0nKVswXS5jbGFzc0xpc3QuY29udGFpbnModG9nZ2xlU3dpdGNoLmdldE9wdGlvbignY2xhc3Nlcy5vbicpKTtcblxuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChoYXNDbGFzc0EpLmlzLnRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIHN3aXRjaCBvZmZcbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC52YWx1ZSA9IFwib2ZmXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIGV4cGVjdCB0aGF0IGNsYXNzZXMub24gaXMgcmVtb3ZlZCBmcm9tIEVsZW1lbnQgU3dpdGNoXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoYXNDbGFzc0IgPSB0b2dnbGVTd2l0Y2guc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1tb25zdGVyLXJvbGU9XCJzd2l0Y2hcIl0nKVswXS5jbGFzc0xpc3QuY29udGFpbnModG9nZ2xlU3dpdGNoLmdldE9wdGlvbignY2xhc3Nlcy5vbicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChoYXNDbGFzc0IpLmlzLmZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIGV4cGVjdCB0aGF0IGNsYXNzZXMub2ZmIGlzIHNldCB0byBFbGVtZW50IFN3aXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGFzQ2xhc3NDID0gdG9nZ2xlU3dpdGNoLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtbW9uc3Rlci1yb2xlPVwic3dpdGNoXCJdJylbMF0uY2xhc3NMaXN0LmNvbnRhaW5zKHRvZ2dsZVN3aXRjaC5nZXRPcHRpb24oJ2NsYXNzZXMub2ZmJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGhhc0NsYXNzQykuaXMudHJ1ZTtcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0sIDApO1xuXG4gICAgICAgIH0pXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkZXNjcmliZSB2YWx1ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICAgICAgfSlcblxuICAgICAgICBpdCgndGhlIGRlZmF1bHQgdmFsdWUgaXMgb2ZmJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIG5ldyBDb250cm9sXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGxldCB0b2dnbGVTd2l0Y2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcbiAgICAgICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogdGhlIHN3aXRjaCBpcyBvZmYgYW5kIHByb3ZpZGVzIHRoZSB2YWx1ZSBmb3Igb2ZmXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgZXhwZWN0KG51bGwpLmlzLmVxdWFsKHRvZ2dsZVN3aXRjaC52YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiB0aGUgc3dpdGNoIGlzIG9mZlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guc3RhdGUpLmlzLmVxdWFsKCdvZmYnKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdpbmNvcnJlY3QgdmFsdWVzIGFyZSBub3QgYWNjZXB0ZWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCB0b2dnbGVTd2l0Y2ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRvZ2dsZS1zd2l0Y2gnKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBkZWZpbmUgdGhlIHZhbHVlcyBmb3Igb24gYW5kIG9mZlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2guc2V0T3B0aW9uKCd2YWx1ZXMub24nLCAndHJ1ZScpO1xuICAgICAgICAgICAgdG9nZ2xlU3dpdGNoLnNldE9wdGlvbigndmFsdWVzLm9mZicsICdmYWxzZScpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoaXMgdmFsdWUgaXMgbm90IFwidHJ1ZVwiIGFuZCBub3QgXCJmYWxzZVwiXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC52YWx1ZSA9IFwidGVzdFwiO1xuXG4gICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIHRoZSBzd2l0Y2ggaXMgb2ZmIGFuZCBwcm92aWRlcyB0aGUgdmFsdWUgZm9yIG9mZlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGV4cGVjdChudWxsKS5pcy5lcXVhbCh0b2dnbGVTd2l0Y2gudmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogdGhlIHN3aXRjaCBpcyBvZmZcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLnN0YXRlKS5pcy5lcXVhbCgnb2ZmJyk7XG5cbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBkaXNhYmxlZCBhdHRyaWJ1dGUgaXMgb25seSBzZXQgd2hlbiB0aGUgZWxlbWVudCBoYXMgYmVlbiBtb3VudGVkIGluIHRoZSBET01cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkuaXMuZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBpbnNlcnQgRE9NXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykuYXBwZW5kQ2hpbGQodG9nZ2xlU3dpdGNoKTtcblxuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIG5vdyB0aGUgZWxlbWVudCBpcyBkaXNhYmxlZFxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKS5pcy5mYWxzZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdjb3JyZWN0IHZhbHVlcyBhcmUgYWNjZXB0ZWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRvZ2dsZVN3aXRjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdG9nZ2xlLXN3aXRjaCcpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGRlZmluZSB0aGUgdmFsdWVzIGZvciBvbiBhbmQgb2ZmXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC5zZXRPcHRpb24oJ3ZhbHVlcy5vbicsICd0cnVlJyk7XG4gICAgICAgICAgICB0b2dnbGVTd2l0Y2guc2V0T3B0aW9uKCd2YWx1ZXMub2ZmJywgJ2ZhbHNlJyk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVGhpcyB2YWx1ZSBpcyBjb3JyZWN0XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRvZ2dsZVN3aXRjaC52YWx1ZSA9IFwidHJ1ZVwiO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIHRoZSBzd2l0Y2ggaXMgb24gYW5kIHByb3ZpZGVzIHRoZSB2YWx1ZSBmb3Igb25cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZXhwZWN0KHRvZ2dsZVN3aXRjaC52YWx1ZSkuaXMuZXF1YWwoJ3RydWUnKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiB0aGUgc3dpdGNoIGlzIG9uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGV4cGVjdCh0b2dnbGVTd2l0Y2guc3RhdGUpLmlzLmVxdWFsKCdvbicpO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIGluc2VydCBET01cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykuYXBwZW5kQ2hpbGQodG9nZ2xlU3dpdGNoKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBkaXNhYmxlZCBhdHRyaWJ1dGUgaXMgbm90IHNldFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBleHBlY3QodG9nZ2xlU3dpdGNoLmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkuaXMuZmFsc2U7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge3NldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXJNb2NrfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9pbnRlcnNlY3Rpb24tbW9jay5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xubGV0IG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlcjtcblxubGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxuZGVzY3JpYmUoJ1RlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgLy8ganNkb20tdGVzdGluZy1tb2NrcyBuZWVkIGplc3RcbiAgICBsZXQgVGVtcGxhdGUsIHZpZXdwb3J0LCBtb2NrVmlld3BvcnQ7XG5cbiAgICBhZnRlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlci5yZXN0b3JlKCk7XG4gICAgfSlcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiZWxlbWVudC1pbnRlcm5hbHMtcG9seWZpbGxcIikuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICAgICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlciA9IHNldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXJNb2NrKCk7XG5cbiAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvZm9ybS90ZW1wbGF0ZS5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFRlbXBsYXRlID0gbVsnVGVtcGxhdGUnXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbmV3IFRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIGZyb20gdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICAvLyBsYW5ndWFnZT1IVE1MXG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtb25zdGVyLXRlbXBsYXRlPjwvbW9uc3Rlci10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRlc2NyaWJlKCdjcmVhdGUgZnJvbSB0ZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW5zIG1vbnN0ZXItdGVtcGxhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDInKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci10ZW1wbGF0ZScpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIGluc3RhbmNlIG9mIHRlbXBsYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlbXBsYXRlJykpLmlzLmluc3RhbmNlb2YoVGVtcGxhdGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBtb2NrcztcbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGF2ZSBubyBvcHRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLXRlbXBsYXRlJyk7XG4gICAgICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZCh0ZW1wbGF0ZSk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXRlbXBsYXRlJyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAwKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdsb2FkIGNvbnRlbnQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG1vY2tzLCBmZXRjaFJlZmVyZW5jZSwgaW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4gICAgICAgIGJlZm9yZUVhY2goKGRvbmUpID0+IHtcbiAgICAgICAgICAgIG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAvLyBsYW5ndWFnZT1IVE1MXG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cInRoaXMtY29udGVudFwiPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICBmZXRjaFJlZmVyZW5jZSA9IGdsb2JhbFsnZmV0Y2gnXTtcblxuICAgICAgICAgICAgZ2xvYmFsWydmZXRjaCddID0gZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xuXG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSBuZXcgTWFwO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAndGV4dC9odG1sJyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9rOnRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6MjAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUyKCdoZWxsbyB3b3JsZCEnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBnbG9iYWxbJ2ZldGNoJ10gPSBmZXRjaFJlZmVyZW5jZTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGxvYWQgY29udGVudCBmcm9tIHVybCcsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZW1wbGF0ZScpO1xuICAgICAgICAgICAgdGVtcGxhdGUuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItdXJsJywgJ2h0dHA6Ly9sb2NhbGhvc3QvJylcbiAgICAgICAgICAgIG1vY2tzLmFwcGVuZENoaWxkKHRlbXBsYXRlKTtcblxuICAgICAgICAgICAgdGVtcGxhdGUuYWRkRXZlbnRMaXN0ZW5lcignbW9uc3Rlci1mZXRjaGVkJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ21vbnN0ZXItdGVtcGxhdGUnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGVsZW1lbnQuc2hhZG93Um9vdDtcblxuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChzaGFkb3dSb290KS5jb250YWluLmh0bWwoJ2hlbGxvIHdvcmxkJyk7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIG1vY2tpbnRlcnNlY3Rpb25vYnNlcnZlci5nZXRJbnN0YW5jZSgpLmVudGVyTm9kZSgpO1xuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pOyIsICJcbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuXG5cbmxldCBNZXNzYWdlO1xuXG5kZXNjcmliZSgnTWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbm90aWZ5L21lc3NhZ2UubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBNZXNzYWdlID0gbVsnTWVzc2FnZSddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgTWVzc2FnZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5LW1lc3NhZ2UnKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wpLmlzLmluc3RhbmNlb2YoTWVzc2FnZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pXG4iLCAiLy9pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbi8vIGNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbCgpO1xuLy9cbi8vIGxldCBodG1sMSA9IGBcbi8vICAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbi8vICAgICA8L2Rpdj5cbi8vIGA7XG4vL1xuLy8gLy8gbGFuZ3VhZ2U9SFRNTFxuLy8gbGV0IGh0bWwyID0gYFxuLy8gICAgIDxkaXYgaWQ9XCJ0ZXN0MlwiPlxuLy8gICAgICAgICA8bW9uc3Rlci1ub3RpZnkgZGF0YS1tb25zdGVyLW9wdGlvbnM9J3t9Jz48L21vbnN0ZXItbm90aXRmeT5cbi8vICAgICA8L2Rpdj5cbi8vIGA7XG5cbmxldCBOb3RpZnksIGZldGNoUmVmZXJlbmNlO1xuXG5kZXNjcmliZSgnTm90aWZ5JywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vLi4vc291cmNlL2NvbXBvbmVudHMvbm90aWZ5L25vdGlmeS5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIE5vdGlmeSA9IG1bJ05vdGlmeSddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2Ygbm90aWZ5JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1ub3RpZnknKSkuaXMuaW5zdGFuY2VvZihOb3RpZnkpO1xuICAgICAgICAgICAgXG5cblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGhhdmUgbWVzc2FnZXMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIGNvbnN0IG5vdGlmeSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItbm90aWZ5Jyk7XG4gICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICBub3RpZnkucHVzaChcInRoaXMgaXMgbWVzc2FnZSBcIiArIGkrKyk7XG4gICAgICAgICAgICBub3RpZnkucHVzaChcInRoaXMgaXMgbWVzc2FnZSBcIiArIGkrKyk7XG4gICAgICAgICAgICBub3RpZnkucHVzaChcInRoaXMgaXMgbWVzc2FnZSBcIiArIGkrKyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG11dGF0aW9ub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zKSB7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFssIG11dGF0aW9uXSBvZiBtdXRhdGlvbnMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtdXRhdGlvbi5hZGRlZE5vZGVzWzBdLnRhZ05hbWUgPT09ICdNT05TVEVSLU5PVElGWScpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0YXRpb25vYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlcyA9IG5vdGlmeS5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ21vbnN0ZXItbm90aWZ5LW1lc3NhZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMyBvcHRpb25zIChzZWUgZmV0Y2ggYWJvdmUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChtZXNzYWdlcy5sZW5ndGgpLmlzLmVxdWFsKDMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIG11dGF0aW9ub2JzZXJ2ZXIub2JzZXJ2ZShtb2Nrcywge2NoaWxkTGlzdDogdHJ1ZX0pO1xuICAgICAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQobm90aWZ5KTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pXG4iLCAiaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5cbmxldCBleHBlY3QgPSBjaGFpLmV4cGVjdDtcbmNoYWkudXNlKGNoYWlEb20pO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxuXG5kZXNjcmliZSgnSG9zdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBob3N0O1xuICAgIGxldCBodG1sMSA9IGBcbiAgICAgICAgPG1vbnN0ZXItaG9zdCBpZD1cImhvc3QxXCI+PC9tb25zdGVyLWhvc3Q+XG4gICAgYDtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9jb21wb25lbnRzL2hvc3QvaG9zdC5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIGhvc3QgPSBtWydIb3N0J107XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpXG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgLy8gcmVnaXN0ZXIgb3duIGRhdGFzb3VyY2UsIGFmdGVyIHRoZSBmb3JtIGlzIGxvYWRlZFxuICAgICAgICAvLyBiZWNhdXNlIGluIHRoZSB3aWxkLCB0aGUgZm9ybSBpcyBwYXJzZWQgYmVmb3JlIHRoZSBkYXRhc291cmNlIGlzIHJlZ2lzdGVyZWRcbiAgICAgICAgLy9mb3JtLnJlZ2lzdGVyRGF0YXNvdXJjZSgndGVzdDMnLCB0ZXN0M0RhdGFzb3VyY2UpO1xuXG5cbiAgICB9KTsgICAgXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ3Rlc3Qta2V5JylcbiAgICB9KVxuICAgIFxuICAgIFxuICAgIGl0KCdzaG91bGQgcnVuJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWhvc3QnKTtcbiAgICAgICAgbW9ja3MuYXBwZW5kQ2hpbGQoZm9ybUNvbnRyb2wpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykpLmNvbnRhaW4uaHRtbCgnPG1vbnN0ZXItaG9zdCBkYXRhLW1vbnN0ZXItb2JqZWN0bGluaz1cIlN5bWJvbChAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAb3B0aW9ucy11cGRhdGVyLWxpbmspXCI+PC9tb25zdGVyLWhvc3Q+JylcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9LCAwKVxuXG5cblxuXG5cbiAgICB9KTtcblxuXG59KTtcbiIsICJpbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcblxuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cblxuZGVzY3JpYmUoJ092ZXJsYXknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgaG9zdDtcbiAgICBsZXQgaHRtbDEgPSBgXG4gICAgICAgIDxtb25zdGVyLW92ZXJsYXkgaWQ9XCJkZXRhaWxzMVwiPjwvbW9uc3Rlci1vdmVybGF5PlxuICAgIGA7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L292ZXJsYXkubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBob3N0ID0gbVsnRGV0YWlscyddO1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgIH0pOyAgICBcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgIH0pXG4gICAgXG4gICAgXG4gICAgaXQoJ3Nob3VsZCBydW4nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItb3ZlcmxheScpO1xuICAgICAgICBtb2Nrcy5hcHBlbmRDaGlsZChmb3JtQ29udHJvbCk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKSkuY29udGFpbi5odG1sKFxuICAgICAgICAgICAgICAgICAgICAnIDxtb25zdGVyLW92ZXJsYXkgZGF0YS1tb25zdGVyLW9iamVjdGxpbms9XCJTeW1ib2woQHNjaHVrYWkvbW9uc3Rlci9kb20vY3VzdG9tLWVsZW1lbnRAQG9wdGlvbnMtdXBkYXRlci1saW5rKVwiPjwvbW9uc3Rlci1vdmVybGF5PicpXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSwgMClcblxuICAgIH0pO1xuXG59KTtcbiIsICIvLyBJbXBvcnQgdGhlIHJlcXVpcmVkIGxpYnJhcmllc1xuaW1wb3J0IHsgZXhwZWN0IH0gZnJvbSAnY2hhaSc7XG4vL2ltcG9ydCB7IEpTRE9NIH0gZnJvbSAnanNkb20nO1xuaW1wb3J0IHsgZ2VuZXJhdGVVbmlxdWVDb25maWdLZXkgfSBmcm9tICcuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L3V0aWwubWpzJztcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuLy8gQ3JlYXRlIGEgSlNET00gaW5zdGFuY2UgdG8gc2ltdWxhdGUgdGhlIGJyb3dzZXIgZW52aXJvbm1lbnRcbi8vY29uc3QgZG9tID0gbmV3IEpTRE9NKCk7XG5cblxuLy8gVGVzdCBzdWl0ZSBmb3IgdGhlIGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5IGZ1bmN0aW9uXG5kZXNjcmliZSgnZ2VuZXJhdGVVbmlxdWVDb25maWdLZXknLCAoKSA9PiB7XG5cbiAgICAvL2xldCBvcmlnaW5hbFdpbmRvdztcblxuICAgIC8vIGJlZm9yZSgoKSA9PiB7XG4gICAgLy8gICAgIC8vIFN0b3JlIHRoZSBvcmlnaW5hbCB3aW5kb3cgb2JqZWN0XG4gICAgLy8gICAgIG9yaWdpbmFsV2luZG93ID0gZ2xvYmFsVGhpcy53aW5kb3c7XG4gICAgLy9cbiAgICAvLyAgICAgLy8gQ3JlYXRlIGEgSlNET00gaW5zdGFuY2UgdG8gc2ltdWxhdGUgdGhlIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAgICAvLyAgICAgY29uc3QgZG9tID0gbmV3IEpTRE9NKCk7XG4gICAgLy8gICAgIGdsb2JhbFRoaXMud2luZG93ID0gZG9tLndpbmRvdztcbiAgICAvLyB9KTtcblxuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcbiAgICB9KSAgICBcblxuICAgIC8vIC4uLiAoc2FtZSB0ZXN0IGNhc2VzIGFzIGJlZm9yZSlcblxuICAgIGFmdGVyKCgpID0+IHtcbiAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgd2luZG93IG9iamVjdFxuICAgICAgIC8vIGdsb2JhbFRoaXMud2luZG93ID0gb3JpZ2luYWxXaW5kb3c7XG4gICAgfSk7ICAgIFxuICAgIFxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSB1bmlxdWUga2V5IHdpdGggdGhlIGdpdmVuIHBhcmFtZXRlcnMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSAnTXlDb21wb25lbnQnO1xuICAgICAgICBjb25zdCBpZCA9ICcxMjMnO1xuICAgICAgICBjb25zdCBwcmVmaXggPSAnbXlQcmVmaXgnO1xuXG4gICAgICAgIGNvbnN0IHVuaXF1ZUtleSA9IGdlbmVyYXRlVW5pcXVlQ29uZmlnS2V5KGNvbXBvbmVudE5hbWUsIGlkLCBwcmVmaXgpO1xuXG4gICAgICAgIC8vIEVuc3VyZSB0aGUgdW5pcXVlIGtleSBjb250YWlucyB0aGUgZ2l2ZW4gcGFyYW1ldGVycyBhbmQgZm9sbG93cyB0aGUgZXhwZWN0ZWQgZm9ybWF0XG4gICAgICAgIGV4cGVjdCh1bmlxdWVLZXkpLnRvLmluY2x1ZGUocHJlZml4KTtcbiAgICAgICAgZXhwZWN0KHVuaXF1ZUtleSkudG8uaW5jbHVkZShjb21wb25lbnROYW1lKTtcbiAgICAgICAgZXhwZWN0KHVuaXF1ZUtleSkudG8uaW5jbHVkZShpZCk7XG4gICAgICAgIGV4cGVjdCh1bmlxdWVLZXkpLnRvLm1hdGNoKC9eW2EtekEtWjAtOV9dKyQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVwbGFjZSBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIHNwYWNlcyB3aXRoIHVuZGVyc2NvcmVzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjb21wb25lbnROYW1lID0gJ015JENvbXBvbmVudCc7XG4gICAgICAgIGNvbnN0IGlkID0gJzEyIzMnO1xuICAgICAgICBjb25zdCBwcmVmaXggPSAnbXkgUHJlZml4JztcblxuICAgICAgICBjb25zdCB1bmlxdWVLZXkgPSBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleShjb21wb25lbnROYW1lLCBpZCwgcHJlZml4KTtcblxuICAgICAgICAvLyBFbnN1cmUgdGhlIHVuaXF1ZSBrZXkgZG9lcyBub3QgY29udGFpbiBhbnkgc3BlY2lhbCBjaGFyYWN0ZXJzIG9yIHNwYWNlc1xuICAgICAgICBleHBlY3QodW5pcXVlS2V5KS50by5tYXRjaCgvXlthLXpBLVowLTlfXSskLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGluY2x1ZGUgdGhlIGJyb3dzZXIgbG9jYXRpb24gd2l0aG91dCBwYXJhbWV0ZXJzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjb21wb25lbnROYW1lID0gJ015Q29tcG9uZW50JztcbiAgICAgICAgY29uc3QgaWQgPSAnMTIzJztcbiAgICAgICAgY29uc3QgcHJlZml4ID0gJ215UHJlZml4JztcblxuICAgICAgICBjb25zdCB1bmlxdWVLZXkgPSBnZW5lcmF0ZVVuaXF1ZUNvbmZpZ0tleShjb21wb25lbnROYW1lLCBpZCwgcHJlZml4KTtcblxuICAgICAgICAvLyBFbnN1cmUgdGhlIHVuaXF1ZSBrZXkgY29udGFpbnMgdGhlIGJyb3dzZXIgbG9jYXRpb24gd2l0aG91dCBwYXJhbWV0ZXJzXG4gICAgICAgIGNvbnN0IHVybFdpdGhvdXRQYXJhbXMgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdCgnPycpWzBdO1xuICAgICAgICBjb25zdCBzYW5pdGl6ZWRVcmwgPSB1cmxXaXRob3V0UGFyYW1zLnJlcGxhY2UoL1teXFx3XFxzXS9naSwgJ18nKS5yZXBsYWNlKC9cXHMrL2csICdfJyk7XG4gICAgICAgIGV4cGVjdCh1bmlxdWVLZXkpLnRvLmluY2x1ZGUoc2FuaXRpemVkVXJsKTtcbiAgICB9KTtcblxuICAgIFxuICAgIFxufSkiLCAiaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtnZXRHbG9iYWx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge1Jlc2l6ZU9ic2VydmVyTW9ja30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvcmVzaXplLW9ic2VydmVyLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxuY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsKCk7XG5cblxuZGVzY3JpYmUoJ0RldGFpbHMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgaG9zdDtcbiAgICBsZXQgaHRtbDEgPSBgXG4gICAgICAgIDxtb25zdGVyLWRldGFpbHMgaWQ9XCJkZXRhaWxzMVwiPjwvbW9uc3Rlci1kZXRhaWxzPlxuICAgIGA7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi8uLi9zb3VyY2UvY29tcG9uZW50cy9ob3N0L2RldGFpbHMubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBob3N0ID0gbVsnRGV0YWlscyddO1xuXG4gICAgICAgICAgICAgICAgaWYoIWdsb2JhbC5SZXNpemVPYnNlcnZlcikge1xuICAgICAgICAgICAgICAgICAgICBnbG9iYWwuUmVzaXplT2JzZXJ2ZXIgPSBSZXNpemVPYnNlcnZlck1vY2s7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKVxuXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIFxuICAgIH0pXG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgIH0pOyAgICBcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgIH0pXG4gICAgXG4gICAgXG4gICAgaXQoJ3Nob3VsZCBydW4nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBjb25zdCBmb3JtQ29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItZGV0YWlscycpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJykpLmNvbnRhaW4uaHRtbChcbiAgICAgICAgICAgICAgICAgICAgJzxtb25zdGVyLWRldGFpbHMgaWQ9XCJkZXRhaWxzMVwiIGRhdGEtbW9uc3Rlci1vYmplY3RsaW5rPVwiU3ltYm9sKEBzY2h1a2FpL21vbnN0ZXIvZG9tL2N1c3RvbS1lbGVtZW50QEBvcHRpb25zLXVwZGF0ZXItbGluaylcIiBkYXRhLW1vbnN0ZXItYnV0dG9uLWxhYmVsPVwiRGV0YWlsc1wiPjwvbW9uc3Rlci1kZXRhaWxzPicpXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSwgMClcblxuICAgIH0pO1xuXG59KTtcbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtGb3JtYXR0ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdGV4dC9mb3JtYXR0ZXIubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0Zvcm1hdHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIC8vIGh0dHBzOi8vZ2l0bGFiLnNjaHVrYWkuY29tL29zcy9saWJyYXJpZXMvamF2YXNjcmlwdC9tb25zdGVyLy0vaXNzdWVzLzI3NVxuICAgIGRlc2NyaWJlKCdjaGFuZ2UgZW1wdHkgaGFuZGxpbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ21vZGlmaWNhdGlvbiAxJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCAgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcih7XG5cbiAgICAgICAgICAgICAgICBhOiBudWxsLFxuICAgICAgICAgICAgICAgIGI6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBjIDogMFxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGV4cGVjdChmb3JtYXR0ZXIuZm9ybWF0KFwiJHthIHwgdG9zdHJpbmd9XCIpKS50by5iZS5lcXVhbCgnbnVsbCcpO1xuICAgICAgICAgICAgZXhwZWN0KGZvcm1hdHRlci5mb3JtYXQoXCIke2IgfCB0b3N0cmluZ31cIikpLnRvLmJlLmVxdWFsKCd1bmRlZmluZWQnKTtcbiAgICAgICAgICAgIGV4cGVjdChmb3JtYXR0ZXIuZm9ybWF0KFwiJHtjIHwgdG9zdHJpbmd9XCIpKS50by5iZS5lcXVhbCgnMCcpO1xuICAgICAgICB9KVxuICAgIH0pXG5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vb3NzL2xpYnJhcmllcy9qYXZhc2NyaXB0L21vbnN0ZXIvLS9pc3N1ZXMvNDdcbiAgICBkZXNjcmliZSgnZXhhbXBsZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3JmYyBleGFtcGxlIHNob3VsZCBydW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEZvcm1hdHRlcih7XG5cbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiSGVsbG9cIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkOiBcIldvcmxkXCIsXG4gICAgICAgICAgICAgICAgICAgIGU6IDFcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pLmZvcm1hdChcIiR7YS5iLmN9ICR7YS5kIHwgdG91cHBlcn0hXCIpKS50by5iZS5lcXVhbCgnSGVsbG8gV09STEQhJyk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2RvYyBleGFtcGxlIHNob3VsZCBydW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEZvcm1hdHRlcih7XG5cbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiSGVsbG9cIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkOiBcIndvcmxkXCIsXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9KS5mb3JtYXQoXCIke2EuYi5jfSAke2EuZCB8IHVjZmlyc3R9IVwiKSkudG8uYmUuZXF1YWwoJ0hlbGxvIFdvcmxkIScpO1xuICAgICAgICB9KVxuXG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ3NldCBtYXJrZXIoKScsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnI2EjJywgJyMnLCB1bmRlZmluZWQsICd0ZXN0J10sXG4gICAgICAgICAgICBbJ3thfScsICd7JywgJ30nLCAndGVzdCddLFxuICAgICAgICAgICAgWydpMThue2F9JywgJ2kxOG57JywgJ30nLCAndGVzdCddLFxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZCA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnZm9ybWF0ICcgKyBhICsgJyB3aXRoIG1hcmtlciAnICsgYiArICcgYW5kICcgKyBjICsgJyBzaG91bGQgcmV0dXJuICAnICsgYiwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KFxuICAgICAgICAgICAgICAgICAgICBuZXcgRm9ybWF0dGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGE6IFwidGVzdFwiXG4gICAgICAgICAgICAgICAgICAgIH0pLnNldE1hcmtlcihiLCBjKS5mb3JtYXQoYSlcbiAgICAgICAgICAgICAgICApLnRvLmVxdWFsKGQpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZXhhbXBsZXMoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJyR7YSB8IHRvanNvbn0nLCBcIntcXFwiYlxcXCI6e1xcXCJjXFxcIjpcXFwiSGVsbG9cXFwifSxcXFwiZFxcXCI6XFxcIldvcmxkXFxcIixcXFwiZVxcXCI6MX1cIl0sXG4gICAgICAgICAgICBbJ2NsaWNrICR7YS5kfSB0aW1lcycsIFwiY2xpY2sgV29ybGQgdGltZXNcIl0sXG4gICAgICAgICAgICBbJyAke2EuYi5jfSAnLCAnIEhlbGxvICddLFxuICAgICAgICAgICAgWycgJHthLmIuY30nLCAnIEhlbGxvJ10sXG4gICAgICAgICAgICBbJyR7YS5iLmN9ICcsICdIZWxsbyAnXSxcbiAgICAgICAgICAgIFsnJHthLmIuY30nLCAnSGVsbG8nXSxcbiAgICAgICAgICAgIFsnJHthLmIuY30ke2EuYi5jfScsICdIZWxsb0hlbGxvJ10sXG4gICAgICAgICAgICBbJyR7YS5iLmN9ICR7YS5iLmN9JywgJ0hlbGxvIEhlbGxvJ10sXG4gICAgICAgICAgICBbJyR7YS5iLmN9ICR7YS5iLmN9ICcsICdIZWxsbyBIZWxsbyAnXSxcbiAgICAgICAgICAgIFsnICR7YS5iLmN9ICR7YS5iLmN9ICcsICcgSGVsbG8gSGVsbG8gJ10sXG4gICAgICAgICAgICBbJyAke2EuYi5jfSAke2EuZH0gJywgJyBIZWxsbyBXb3JsZCAnXSxcbiAgICAgICAgICAgIFsnICR7YS5iLmN9ICR7YS5iLmMgfCB0b3VwcGVyIHwgbGVuZ3RoIHwgdG9zdHJpbmd9ICcsICcgSGVsbG8gNSAnXSxcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdmb3JtYXQgJyArIGEgKyAnIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBcIkhlbGxvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkOiBcIldvcmxkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBlOiAxXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgRm9ybWF0dGVyKG9iaikuZm9ybWF0KGEpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnTWFya2VyIGluIG1hcmtlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgdGV4dCA9ICcke215a2V5JHtzdWJrZXl9fSc7XG4gICAgICAgIGxldCBleHBlY3RlZCA9ICcxJztcblxuICAgICAgICBpdCgnZm9ybWF0ICcgKyB0ZXh0ICsgJyBzaG91bGQgJyArIGV4cGVjdGVkLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgbXlrZXkyOiBcIjFcIixcbiAgICAgICAgICAgICAgICBzdWJrZXk6IFwiMlwiXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBleHBlY3QobmV3IEZvcm1hdHRlcihvYmopLmZvcm1hdCh0ZXh0KSkuaXMuZXF1YWwoZXhwZWN0ZWQpXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3NldFBhcmFtZXRlckNoYXJzKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3NldFBhcmFtZXRlckNoYXJzKCkgc2hvdWxkIHJldHVybiBJbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9ybWF0dGVyKHt9KS5zZXRQYXJhbWV0ZXJDaGFycygnYScsICdiJykpLmlzLmluc3RhbmNlb2YoRm9ybWF0dGVyKTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCd3aXRoIGNhbGxiYWNrcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnYWRkIGNhbGxiYWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcih7XG4gICAgICAgICAgICAgICAgeDogJzEnXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgIG15OiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIiFcIiArIHZhbHVlICsgXCIhXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBleHBlY3QoZm9ybWF0dGVyLmZvcm1hdCgnJHt4IHwgY2FsbDpteX0nKSkuaXMuZXF1YWwoJyExIScpO1xuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdNYXJrZXIgaW4gbWFya2VyIHdpdGggcGFyYW1ldGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCB0ZXh0ID0gJyR7bXlrZXk6Om15a2V5PSR7c3Via2V5fX0nO1xuICAgICAgICBsZXQgZXhwZWN0ZWQgPSAnMic7XG5cbiAgICAgICAgaXQoJ2Zvcm1hdCAnICsgdGV4dCArICcgc2hvdWxkICcgKyBleHBlY3RlZCwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgb2JqID0ge1xuICAgICAgICAgICAgICAgIHN1YmtleTogXCIyXCJcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGV4cGVjdChuZXcgRm9ybWF0dGVyKG9iaikuZm9ybWF0KHRleHQpKS5pcy5lcXVhbChleHBlY3RlZClcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdleGNlcHRpb25zJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnJHthLmIueH0nLCBUeXBlRXJyb3JdLFxuICAgICAgICAgICAgWycke2EuYi5kIHwgdG91cHBlciB8IGxlbmd0aH0nLCBUeXBlRXJyb3JdLFxuICAgICAgICAgICAgWycke2EuYi5kfScsIFR5cGVFcnJvcl0sICAvLyBhLmIuZCByZXR1cm4gdW5kZWZpbmVkIGJ5IHBhdGhmaW5kZXIgXG4gICAgICAgICAgICBbJyR7YS5iLmQgfCB0b2xvd2VyfScsIFR5cGVFcnJvcl0sICAvLyBhLmIuZCByZXR1cm4gdW5kZWZpbmVkIGJ5IHBhdGhmaW5kZXIgXG4gICAgICAgICAgICBbJyR7YSB8IH0nLCBFcnJvcl0sXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnZm9ybWF0ICcgKyBhICsgJyBzaG91bGQgdGhyb3cgJyArIHR5cGVvZiBiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZvcm1hdHRlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBcInRlc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ6IDRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmZvcm1hdChhKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKS50by50aHJvdyhiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cblxuXG4gICAgZGVzY3JpYmUoJ0Zvcm1hdHRlcicsICgpID0+IHtcbiAgICAgICAgaXQoJ3Nob3VsZCBmb3JtYXQgYSBiYXNpYyBzdHJpbmcgd2l0aCBvYmplY3QgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcih7bmFtZTogJ0pvaG4nLCBhZ2U6IDMwfSk7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmb3JtYXR0ZXIuZm9ybWF0KCdNeSBuYW1lIGlzICR7bmFtZX0gYW5kIEkgYW0gJHthZ2UgfCB0b3N0cmluZ30geWVhcnMgb2xkLicpO1xuXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgnTXkgbmFtZSBpcyBKb2huIGFuZCBJIGFtIDMwIHllYXJzIG9sZC4nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmb3JtYXQgYSBzdHJpbmcgd2l0aCBuZXN0ZWQgbWFya2VycycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSAnJHtteWtleSR7c3Via2V5fX0nO1xuICAgICAgICAgICAgY29uc3Qgb2JqID0ge215a2V5MjogJzEnLCBzdWJrZXk6ICcyJ307XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKG9iaik7XG5cbiAgICAgICAgICAgIGV4cGVjdChmb3JtYXR0ZXIuZm9ybWF0KHRleHQpKS50by5lcXVhbCgnMScpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBhIHN0cmluZyB3aXRoIGN1c3RvbSBtYXJrZXJzJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcih7bmFtZTogJ0pvaG4nLCBhZ2U6IDMwfSk7XG4gICAgICAgICAgICBmb3JtYXR0ZXIuc2V0TWFya2VyKCdbJywgJ10nKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGZvcm1hdHRlci5mb3JtYXQoJ015IG5hbWUgaXMgW25hbWVdIGFuZCBJIGFtIFthZ2UgfCB0b3N0cmluZ10geWVhcnMgb2xkLicpO1xuXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgnTXkgbmFtZSBpcyBKb2huIGFuZCBJIGFtIDMwIHllYXJzIG9sZC4nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmb3JtYXQgYSBzdHJpbmcgdXNpbmcgY2FsbGJhY2snLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHt4OiAnMSd9LCB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgIHF1b3RlOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnXCInICsgdmFsdWUgKyAnXCInO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZXhwZWN0KGZvcm1hdHRlci5mb3JtYXQoJyR7eCB8IGNhbGw6cXVvdGV9JykpLnRvLmVxdWFsKCdcIjFcIicpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZvcm1hdCBhIHN0cmluZyB3aXRoIHBhcmFtZXRlcnMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjOiAnSGVsbG8nLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkOiAnd29ybGQnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcihvYmopO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0dGVyLmZvcm1hdCgnJHthLmIuY30gJHthLmQgfCB1Y2ZpcnN0fSEnKTtcblxuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoJ0hlbGxvIFdvcmxkIScpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgYSB0b28gZGVlcCBuZXN0aW5nIGVycm9yJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEZvcm1hdHRlcih7bmFtZTogJ0pvaG4nfSk7XG4gICAgICAgICAgICBjb25zdCBuZXN0ZWRUZXh0ID0gJyR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZSR7bmFtZX19fX19fX19fX19fX19fX19fSc7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZm9ybWF0dGVyLmZvcm1hdChuZXN0ZWRUZXh0KSkudG8udGhyb3coJ3N5bnRheCBlcnJvciBpbiBmb3JtYXR0ZXIgdGVtcGxhdGUnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBhIHRvbyBkZWVwIG5lc3RpbmcgZXJyb3InLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dE9iaiA9IHtcbiAgICAgICAgICAgICAgICBteWtleTogJyR7bXlrZXl9JyxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIoaW5wdXRPYmopO1xuXG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gJyR7bXlrZXl9JztcbiAgICAgICAgICAgIGxldCBmb3JtYXR0ZWRUZXh0ID0gdGV4dDtcblxuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgc3RyaW5nIHdpdGggMjEgbGV2ZWxzIG9mIG5lc3RpbmdcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjE7IGkrKykge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlZFRleHQgPSAnJHsnICsgZm9ybWF0dGVkVGV4dCArICd9JztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGZvcm1hdHRlci5mb3JtYXQoZm9ybWF0dGVkVGV4dCkpLnRvLnRocm93KCd0b28gZGVlcCBuZXN0aW5nJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICB9KTtcblxuXG59KTsiLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuZXhwb3J0IHsgZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uIH07XG5cbi8qKlxuICogVGhlIGBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oKWAgZnVuY3Rpb24gaXMgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAqIG9mIGEgY29tcGFyaXNvbiBleHByZXNzaW9uIGJhc2VkIG9uIGEgcmFuZ2Ugb2YgdmFsdWVzLiBJdCB0YWtlcyB0aHJlZSBhcmd1bWVudHM6XG4gKlxuICogLSBleHByZXNzaW9uIChyZXF1aXJlZCk6IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgcmFuZ2Ugb2YgdmFsdWVzIGluIHRoZSBmb3JtYXQgb2Ygc3RhcnQxLWVuZDEsc3RhcnQyLWVuZDIsdmFsdWUzLi4uLlxuICogLSB2YWx1ZU5hbWUgKHJlcXVpcmVkKTogYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSB2YWx1ZSB0aGF0IGlzIGJlaW5nIGNvbXBhcmVkIHRvIHRoZSByYW5nZSBvZiB2YWx1ZXMuXG4gKiAtIG9wdGlvbnMgKG9wdGlvbmFsKTogYW4gb2JqZWN0IGNvbnRhaW5pbmcgYWRkaXRpb25hbCBvcHRpb25zIHRvIGN1c3RvbWl6ZSB0aGUgY29tcGFyaXNvbiBleHByZXNzaW9uLlxuICpcbiAqIFRoZSBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oKSBmdW5jdGlvbiByZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21wYXJpc29uIGV4cHJlc3Npb24uXG4gKlxuICogIyMgT3B0aW9uc1xuICogVGhlIG9wdGlvbiBwYXJhbWV0ZXIgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqIHVybEVuY29kZSAoYm9vbGVhbiwgZGVmYXVsdDogZmFsc2UpOiBpZiBzZXQgdG8gdHJ1ZSwgVVJMIGVuY29kZXMgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzLlxuICogYW5kT3AgKHN0cmluZywgZGVmYXVsdDogJyYmJyk6IHRoZSBsb2dpY2FsIEFORCBvcGVyYXRvciB0byB1c2UgaW4gdGhlIGV4cHJlc3Npb24uXG4gKiBvck9wIChzdHJpbmcsIGRlZmF1bHQ6ICd8fCcpOiB0aGUgbG9naWNhbCBPUiBvcGVyYXRvciB0byB1c2UgaW4gdGhlIGV4cHJlc3Npb24uXG4gKiBlcU9wIChzdHJpbmcsIGRlZmF1bHQ6ICc9PScpOiB0aGUgZXF1YWxpdHkgb3BlcmF0b3IgdG8gdXNlIGluIHRoZSBleHByZXNzaW9uLlxuICogZ2VPcCAoc3RyaW5nLCBkZWZhdWx0OiAnPj0nKTogdGhlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBvcGVyYXRvciB0byB1c2UgaW4gdGhlIGV4cHJlc3Npb24uXG4gKiBsZU9wIChzdHJpbmcsIGRlZmF1bHQ6ICc8PScpOiB0aGUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIG9wZXJhdG9yIHRvIHVzZSBpbiB0aGUgZXhwcmVzc2lvbi5cbiAqXG4gKiBFeGFtcGxlc1xuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGNvbnN0IGV4cHJlc3Npb24gPSAnMC0xMCwyMC0zMCc7XG4gKiBjb25zdCB2YWx1ZU5hbWUgPSAnYWdlJztcbiAqIGNvbnN0IG9wdGlvbnMgPSB7IHVybEVuY29kZTogdHJ1ZSwgYW5kT3A6ICdhbmQnLCBvck9wOiAnb3InLCBlcU9wOiAnPScsIGdlT3A6ICc+PScsIGxlT3A6ICc8PScgfTtcbiAqIGNvbnN0IGNvbXBhcmlzb25FeHByZXNzaW9uID0gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb24sIHZhbHVlTmFtZSwgb3B0aW9ucyk7XG4gKlxuICogY29uc29sZS5sb2coY29tcGFyaXNvbkV4cHJlc3Npb24pOyAvLyBhZ2UlM0UlM0QwJTIwYW5kJTIwYWdlJTNDJTNEMTAlMjBvciUyMGFnZSUzRSUzRDIwJTIwYW5kJTIwYWdlJTNDJTNEMzBcbiAqIGBgYFxuICpcbiAqIEluIHRoaXMgZXhhbXBsZSwgdGhlIGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbigpIGZ1bmN0aW9uIGdlbmVyYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tcGFyaXNvblxuICogZXhwcmVzc2lvbiBmb3IgdGhlIGV4cHJlc3Npb24gYW5kIHZhbHVlTmFtZSBwYXJhbWV0ZXJzIHdpdGggdGhlIHNwZWNpZmllZCBvcHRpb25zLiBUaGUgcmVzdWx0aW5nIGNvbXBhcmlzb25cbiAqIGV4cHJlc3Npb24gaXMgJ2FnZT49MCBhbmQgYWdlPD0xMCBvciBhZ2U+PTIwIGFuZCBhZ2U8PTMwJywgVVJMIGVuY29kZWQgYWNjb3JkaW5nIHRvIHRoZSB1cmxFbmNvZGUgb3B0aW9uLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIC0gVGhlIHN0cmluZyBleHByZXNzaW9uIHRvIGdlbmVyYXRlIHRoZSBjb21wYXJpc29uIGZvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdmFsdWUgdG8gY29tcGFyZSBhZ2FpbnN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSAtIFRoZSBvcHRpb25hbCBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy51cmxFbmNvZGU9ZmFsc2VdIC0gV2hldGhlciB0byBlbmNvZGUgY29tcGFyaXNvbiBvcGVyYXRvcnMgZm9yIHVzZSBpbiBhIFVSTC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5hbmRPcD0nJiYnXSAtIFRoZSBsb2dpY2FsIEFORCBvcGVyYXRvciB0byB1c2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMub3JPcD0nfHwnXSAtIFRoZSBsb2dpY2FsIE9SIG9wZXJhdG9yIHRvIHVzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5lcU9wPSc9PSddIC0gVGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgZm9yIGVxdWFsaXR5IHRvIHVzZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5nZU9wPSc+PSddIC0gVGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgZm9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0byB1c2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubGVPcD0nPD0nXSAtIFRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGZvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdG8gdXNlLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZ2VuZXJhdGVkIGNvbXBhcmlzb24gZXhwcmVzc2lvbi5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgaW5wdXQgaXMgaW52YWxpZC5cbiAqIEBzdW1tYXJ5IEdlbmVyYXRlcyBhIGNvbXBhcmlzb24gZXhwcmVzc2lvbiBiYXNlZCBvbiBhIHJhbmdlIG9mIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKFxuXHRleHByZXNzaW9uLFxuXHR2YWx1ZU5hbWUsXG5cdG9wdGlvbnMgPSB7fSxcbikge1xuXHRjb25zdCB7XG5cdFx0dXJsRW5jb2RlID0gZmFsc2UsXG5cdFx0YW5kT3AgPSBcIiYmXCIsXG5cdFx0b3JPcCA9IFwifHxcIixcblx0XHRlcU9wID0gXCI9PVwiLFxuXHRcdGdlT3AgPSBcIj49XCIsXG5cdFx0bGVPcCA9IFwiPD1cIixcblx0fSA9IG9wdGlvbnM7XG5cdGNvbnN0IHJhbmdlcyA9IGV4cHJlc3Npb24uc3BsaXQoXCIsXCIpO1xuXHRsZXQgY29tcGFyaXNvbiA9IFwiXCI7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgcmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgcmFuZ2UgPSByYW5nZXNbaV0udHJpbSgpO1xuXHRcdGlmIChyYW5nZSA9PT0gXCJcIikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHJhbmdlICcke3JhbmdlfSdgKTtcblx0XHR9IGVsc2UgaWYgKHJhbmdlLmluY2x1ZGVzKFwiLVwiKSkge1xuXHRcdFx0Y29uc3QgW3N0YXJ0LCBlbmRdID0gcmFuZ2Vcblx0XHRcdFx0LnNwbGl0KFwiLVwiKVxuXHRcdFx0XHQubWFwKChzKSA9PiAocyA9PT0gXCJcIiA/IG51bGwgOiBwYXJzZUZsb2F0KHMpKSk7XG5cdFx0XHRpZiAoKHN0YXJ0ICE9PSBudWxsICYmIGlzTmFOKHN0YXJ0KSkgfHwgKGVuZCAhPT0gbnVsbCAmJiBpc05hTihlbmQpKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWUgaW4gcmFuZ2UgJyR7cmFuZ2V9J2ApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHN0YXJ0ICE9PSBudWxsICYmIGVuZCAhPT0gbnVsbCAmJiBzdGFydCA+IGVuZCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcmFuZ2UgJyR7cmFuZ2V9J2ApO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY29tcFN0YXJ0ID1cblx0XHRcdFx0c3RhcnQgIT09IG51bGxcblx0XHRcdFx0XHQ/IGAke3ZhbHVlTmFtZX0ke3VybEVuY29kZSA/IGVuY29kZVVSSUNvbXBvbmVudChnZU9wKSA6IGdlT3B9JHtzdGFydH1gXG5cdFx0XHRcdFx0OiBcIlwiO1xuXHRcdFx0Y29uc3QgY29tcEVuZCA9XG5cdFx0XHRcdGVuZCAhPT0gbnVsbFxuXHRcdFx0XHRcdD8gYCR7dmFsdWVOYW1lfSR7dXJsRW5jb2RlID8gZW5jb2RlVVJJQ29tcG9uZW50KGxlT3ApIDogbGVPcH0ke2VuZH1gXG5cdFx0XHRcdFx0OiBcIlwiO1xuXHRcdFx0Y29uc3QgY29tcFJhbmdlID0gYCR7Y29tcFN0YXJ0fSR7XG5cdFx0XHRcdGNvbXBTdGFydCAmJiBjb21wRW5kID8gYCAke2FuZE9wfSBgIDogXCJcIlxuXHRcdFx0fSR7Y29tcEVuZH1gO1xuXHRcdFx0Y29tcGFyaXNvbiArPSByYW5nZXMubGVuZ3RoID4gMSA/IGAoJHtjb21wUmFuZ2V9KWAgOiBjb21wUmFuZ2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHZhbHVlID0gcGFyc2VGbG9hdChyYW5nZSk7XG5cdFx0XHRpZiAoaXNOYU4odmFsdWUpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWx1ZSAnJHtyYW5nZX0nYCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBjb21wVmFsdWUgPSBgJHt2YWx1ZU5hbWV9JHtcblx0XHRcdFx0dXJsRW5jb2RlID8gZW5jb2RlVVJJQ29tcG9uZW50KGVxT3ApIDogZXFPcFxuXHRcdFx0fSR7dmFsdWV9YDtcblx0XHRcdGNvbXBhcmlzb24gKz0gcmFuZ2VzLmxlbmd0aCA+IDEgPyBgKCR7Y29tcFZhbHVlfSlgIDogY29tcFZhbHVlO1xuXHRcdH1cblx0XHRpZiAoaSA8IHJhbmdlcy5sZW5ndGggLSAxKSB7XG5cdFx0XHRjb21wYXJpc29uICs9IGAgJHtvck9wfSBgO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gY29tcGFyaXNvbjtcbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb259IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdGV4dC91dGlsLm1qc1wiO1xuXG5kZXNjcmliZSgnZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgY29ycmVjdCBjb21wYXJpc29uIGV4cHJlc3Npb24gZm9yIHNpbmdsZSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnMSwzLDUnO1xuICAgICAgICBjb25zdCB2YWx1ZU5hbWUgPSAneCc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgnKHg9PTEpIHx8ICh4PT0zKSB8fCAoeD09NSknKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgY29ycmVjdCBjb21wYXJpc29uIGV4cHJlc3Npb24gZm9yIHJhbmdlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9ICcxLTMsNi04JztcbiAgICAgICAgY29uc3QgdmFsdWVOYW1lID0gJ3gnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoJyh4Pj0xICYmIHg8PTMpIHx8ICh4Pj02ICYmIHg8PTgpJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGNvcnJlY3QgY29tcGFyaXNvbiBleHByZXNzaW9uIGZvciBtaXhlZCByYW5nZXMgYW5kIHNpbmdsZSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnMS0zLDUsNy05JztcbiAgICAgICAgY29uc3QgdmFsdWVOYW1lID0gJ3gnO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoJyh4Pj0xICYmIHg8PTMpIHx8ICh4PT01KSB8fCAoeD49NyAmJiB4PD05KScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBmb3IgaW52YWxpZCByYW5nZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgZXhwcmVzc2lvbiA9ICcxLTMsNS00JztcbiAgICAgICAgY29uc3QgdmFsdWVOYW1lID0gJ3gnO1xuICAgICAgICBleHBlY3QoKCkgPT4gZ2VuZXJhdGVSYW5nZUNvbXBhcmlzb25FeHByZXNzaW9uKGV4cHJlc3Npb24sIHZhbHVlTmFtZSkpLnRvLnRocm93KGBJbnZhbGlkIHJhbmdlICc1LTQnYCk7XG4gICAgfSk7XG5cblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIGludmFsaWQgdmFsdWUnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSAnMS0zLGEnO1xuICAgICAgICBjb25zdCB2YWx1ZU5hbWUgPSAneCc7XG4gICAgICAgIGV4cGVjdCgoKSA9PiBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lKSkudG8udGhyb3coJ0ludmFsaWQgdmFsdWUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgY29ycmVjdCBjb21wYXJpc29uIGV4cHJlc3Npb24gd2l0aCBjdXN0b20gb3BlcmF0b3JzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gJzEtMyw1JztcbiAgICAgICAgY29uc3QgdmFsdWVOYW1lID0gJ3gnO1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgYW5kT3A6ICdBTkQnLFxuICAgICAgICAgICAgb3JPcDogJ09SJyxcbiAgICAgICAgICAgIGVxT3A6ICc9PT0nLFxuICAgICAgICAgICAgZ2VPcDogJz49JyxcbiAgICAgICAgICAgIGxlT3A6ICc8PScsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUsIG9wdGlvbnMpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbCgnKHg+PTEgQU5EIHg8PTMpIE9SICh4PT09NSknKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgY29ycmVjdCBjb21wYXJpc29uIGV4cHJlc3Npb24gd2l0aCB1cmxFbmNvZGUgb3B0aW9uJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXN0Q2FzZXMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogJzEsMyw1JyxcbiAgICAgICAgICAgICAgICB2YWx1ZU5hbWU6ICd4JyxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogJyh4JTNEJTNEMSkgfHwgKHglM0QlM0QzKSB8fCAoeCUzRCUzRDUpJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogJy0xMCcsXG4gICAgICAgICAgICAgICAgdmFsdWVOYW1lOiAneCcsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICd4JTNDJTNEMTAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAnMTAtJyxcbiAgICAgICAgICAgICAgICB2YWx1ZU5hbWU6ICd4JyxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogJ3glM0UlM0QxMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICcxLTMsNi04JyxcbiAgICAgICAgICAgICAgICB2YWx1ZU5hbWU6ICd5JyxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogJyh5JTNFJTNEMSAmJiB5JTNDJTNEMykgfHwgKHklM0UlM0Q2ICYmIHklM0MlM0Q4KScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGV4cHJlc3Npb246ICcxLTMsNSw3LTknLFxuICAgICAgICAgICAgICAgIHZhbHVlTmFtZTogJ3onLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiAnKHolM0UlM0QxICYmIHolM0MlM0QzKSB8fCAoeiUzRCUzRDUpIHx8ICh6JTNFJTNENyAmJiB6JTNDJTNEOSknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICB0ZXN0Q2FzZXMuZm9yRWFjaCgoe2V4cHJlc3Npb24sIHZhbHVlTmFtZSwgZXhwZWN0ZWR9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBnZW5lcmF0ZVJhbmdlQ29tcGFyaXNvbkV4cHJlc3Npb24oZXhwcmVzc2lvbiwgdmFsdWVOYW1lLCB7dXJsRW5jb2RlOiB0cnVlfSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5lcXVhbChleHBlY3RlZCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBnZW5lcmF0ZSBjb3JyZWN0IGNvbXBhcmlzb24gZXhwcmVzc2lvbiBmb3Igb3Blbi1lbmRlZCByYW5nZXMgd2l0aCB1cmxFbmNvZGUgb3B0aW9uJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0ZXN0Q2FzZXMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogJzEwLScsXG4gICAgICAgICAgICAgICAgdmFsdWVOYW1lOiAneCcsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6ICd4JTNFJTNEMTAnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBleHByZXNzaW9uOiAnLTEwJyxcbiAgICAgICAgICAgICAgICB2YWx1ZU5hbWU6ICd5JyxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogJ3klM0MlM0QxMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdO1xuXG4gICAgICAgIHRlc3RDYXNlcy5mb3JFYWNoKCh7ZXhwcmVzc2lvbiwgdmFsdWVOYW1lLCBleHBlY3RlZH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGdlbmVyYXRlUmFuZ2VDb21wYXJpc29uRXhwcmVzc2lvbihleHByZXNzaW9uLCB2YWx1ZU5hbWUsIHt1cmxFbmNvZGU6IHRydWV9KTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKGV4cGVjdGVkKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuZXhwb3J0IHsgcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2gsIGNyZWF0ZUJyYWNrZXRlZEtleVZhbHVlSGFzaCB9O1xuXG4vKipcbiAqIFBhcnNlcyBhIHN0cmluZyBjb250YWluaW5nIGJyYWNrZXRlZCBrZXktdmFsdWUgcGFpcnMgYW5kIHJldHVybnMgYW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcGFyc2VkIHJlc3VsdC5cbiAqXG4gKiAtIFRoZSBzdHJpbmcgc3RhcnRzIHdpdGggYSBoYXNoIHN5bWJvbCAjLlxuICogLSBBZnRlciB0aGUgaGFzaCBzeW1ib2wsIHRoZXJlIGFyZSBvbmUgb3IgbW9yZSBzZWxlY3RvciBzdHJpbmdzLCBzZXBhcmF0ZWQgYnkgYSBzZW1pY29sb24gOy5cbiAqIC0gRWFjaCBzZWxlY3RvciBzdHJpbmcgaGFzIHRoZSBmb3JtYXQgc2VsZWN0b3JOYW1lKGtleTE9dmFsdWUxLGtleTI9dmFsdWUyLC4uLikuXG4gKiAtIFRoZSBzZWxlY3RvciBuYW1lIGlzIGEgc3RyaW5nIG9mIG9uZSBvciBtb3JlIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzLlxuICogLSBUaGUga2V5LXZhbHVlIHBhaXJzIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzICwgYW5kIGFyZSBvZiB0aGUgZm9ybSBrZXk9dmFsdWUuXG4gKiAtIFRoZSBrZXkgaXMgYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMuXG4gKiAtIFRoZSB2YWx1ZSBjYW4gYmUgYW4gZW1wdHkgc3RyaW5nIG9yIGEgc3RyaW5nIG9mIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMuXG4gKiAtIElmIHRoZSB2YWx1ZSBjb250YWlucyBjb21tYXMsIGl0IG11c3QgYmUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlcyBcIi5cbiAqIC0gVGhlIGVudGlyZSBrZXktdmFsdWUgcGFpciBtdXN0IGJlIFVSTC1lbmNvZGVkLlxuICogLSBUaGUgY2xvc2luZyBwYXJlbnRoZXNpcyApIGZvciBlYWNoIHNlbGVjdG9yIG11c3QgYmUgcHJlc2VudCwgZXZlbiBpZiB0aGVyZSBhcmUgbm8ga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogLy8gRXhhbXBsZSAxOlxuICogY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3IxKGtleTE9dmFsdWUxLGtleTI9dmFsdWUyKTtzZWxlY3RvcjIoa2V5Mz12YWx1ZTMpJztcbiAqIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICogLy8gcmVzdWx0ID0+IHsgc2VsZWN0b3IxOiB7IGtleTE6IFwidmFsdWUxXCIsIGtleTI6IFwidmFsdWUyXCIgfSwgc2VsZWN0b3IyOiB7IGtleTM6IFwidmFsdWUzXCIgfSB9XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIC8vIEV4YW1wbGUgMjpcbiAqIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yMShrZXkxPXZhbHVlMSxrZXkyPXZhbHVlMik7c2VsZWN0b3IyKCc7XG4gKiBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAqIC8vIHJlc3VsdCA9PiB7fVxuICogYGBgXG4gKlxuICogQHNpbmNlIDMuMzcuMFxuICogQHBhcmFtIHtzdHJpbmd9IGhhc2hTdHJpbmcgLSBUaGUgc3RyaW5nIHRvIHBhcnNlLCBjb250YWluaW5nIGJyYWNrZXRlZCBrZXktdmFsdWUgcGFpcnMuXG4gKiBAcmV0dXJuIHtPYmplY3R9IC0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcGFyc2VkIHJlc3VsdCwgd2l0aCBrZXlzIHJlcHJlc2VudGluZyB0aGUgc2VsZWN0b3JzIGFuZCB2YWx1ZXMgcmVwcmVzZW50aW5nIHRoZSBrZXktdmFsdWUgcGFpcnMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggc2VsZWN0b3IuXG4gKiAgICAgICAgICAgICAgICAgICAgLSBSZXR1cm5zIGFuIGVtcHR5IG9iamVjdCBpZiB0aGVyZSB3YXMgYW4gZXJyb3IgZHVyaW5nIHBhcnNpbmcuICovXG5mdW5jdGlvbiBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKSB7XG5cdGNvbnN0IHNlbGVjdG9ycyA9IHt9O1xuXHQvL2NvbnN0IHNlbGVjdG9yU3RhY2sgPSBbXTtcblx0Ly9jb25zdCBrZXlWYWx1ZVN0YWNrID0gW107XG5cblx0Y29uc3QgdHJpbW1lZEhhc2hTdHJpbmcgPSBoYXNoU3RyaW5nLnRyaW0oKTtcblx0Y29uc3QgY2xlYW5lZEhhc2hTdHJpbmcgPVxuXHRcdHRyaW1tZWRIYXNoU3RyaW5nLmNoYXJBdCgwKSA9PT0gXCIjXCJcblx0XHRcdD8gdHJpbW1lZEhhc2hTdHJpbmcuc2xpY2UoMSlcblx0XHRcdDogdHJpbW1lZEhhc2hTdHJpbmc7XG5cblx0Ly9jb25zdCBzZWxlY3RvcnMgPSAoa2V5VmFsdWVTdGFjay5sZW5ndGggPiAwKSA/IHJlc3VsdFtzZWxlY3RvclN0YWNrW3NlbGVjdG9yU3RhY2subGVuZ3RoIC0gMV1dIDogcmVzdWx0O1xuXHRsZXQgY3VycmVudFNlbGVjdG9yID0gXCJcIjtcblxuXHRmdW5jdGlvbiBhZGRUb1Jlc3VsdChrZXksIHZhbHVlKSB7XG5cdFx0aWYgKGN1cnJlbnRTZWxlY3RvciAmJiBrZXkpIHtcblx0XHRcdGlmICghc2VsZWN0b3JzW2N1cnJlbnRTZWxlY3Rvcl0pIHtcblx0XHRcdFx0c2VsZWN0b3JzW2N1cnJlbnRTZWxlY3Rvcl0gPSB7fTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZWN0b3JzW2N1cnJlbnRTZWxlY3Rvcl1ba2V5XSA9IHZhbHVlO1xuXHRcdH1cblx0fVxuXG5cdGxldCBjdXJyZW50S2V5ID0gXCJcIjtcblx0bGV0IGN1cnJlbnRWYWx1ZSA9IFwiXCI7XG5cdGxldCBpbktleSA9IHRydWU7XG5cdGxldCBpblZhbHVlID0gZmFsc2U7XG5cdGxldCBpblF1b3RlZFZhbHVlID0gZmFsc2U7XG5cdGxldCBpblNlbGVjdG9yID0gdHJ1ZTtcblx0bGV0IGVzY2FwZWQgPSBmYWxzZTtcblx0bGV0IHF1b3RlZFZhbHVlU3RhcnRDaGFyID0gXCJcIjtcblxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGNsZWFuZWRIYXNoU3RyaW5nLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgYyA9IGNsZWFuZWRIYXNoU3RyaW5nW2ldO1xuXHRcdGNvbnN0IG5leHRDaGFyID0gY2xlYW5lZEhhc2hTdHJpbmc/LltpICsgMV07XG5cblx0XHRpZiAoYyA9PT0gXCJcXFxcXCIgJiYgIWVzY2FwZWQpIHtcblx0XHRcdGVzY2FwZWQgPSB0cnVlO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGVzY2FwZWQpIHtcblx0XHRcdGlmIChpblNlbGVjdG9yKSB7XG5cdFx0XHRcdGN1cnJlbnRTZWxlY3RvciArPSBjO1xuXHRcdFx0fSBlbHNlIGlmIChpbktleSkge1xuXHRcdFx0XHRjdXJyZW50S2V5ICs9IGM7XG5cdFx0XHR9IGVsc2UgaWYgKGluVmFsdWUpIHtcblx0XHRcdFx0Y3VycmVudFZhbHVlICs9IGM7XG5cdFx0XHR9XG5cdFx0XHRlc2NhcGVkID0gZmFsc2U7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoaW5RdW90ZWRWYWx1ZSAmJiBxdW90ZWRWYWx1ZVN0YXJ0Q2hhciAhPT0gYykge1xuXHRcdFx0aWYgKGluU2VsZWN0b3IpIHtcblx0XHRcdFx0Y3VycmVudFNlbGVjdG9yICs9IGM7XG5cdFx0XHR9IGVsc2UgaWYgKGluS2V5KSB7XG5cdFx0XHRcdGN1cnJlbnRLZXkgKz0gYztcblx0XHRcdH0gZWxzZSBpZiAoaW5WYWx1ZSkge1xuXHRcdFx0XHRjdXJyZW50VmFsdWUgKz0gYztcblx0XHRcdH1cblxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGMgPT09IFwiO1wiICYmIGluU2VsZWN0b3IpIHtcblx0XHRcdGluU2VsZWN0b3IgPSB0cnVlO1xuXHRcdFx0Y3VycmVudFNlbGVjdG9yID0gXCJcIjtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChpblNlbGVjdG9yID09PSB0cnVlICYmIGMgIT09IFwiKFwiKSB7XG5cdFx0XHRjdXJyZW50U2VsZWN0b3IgKz0gYztcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChjID09PSBcIihcIiAmJiBpblNlbGVjdG9yKSB7XG5cdFx0XHRpblNlbGVjdG9yID0gZmFsc2U7XG5cdFx0XHRpbktleSA9IHRydWU7XG5cblx0XHRcdGN1cnJlbnRLZXkgPSBcIlwiO1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0aWYgKGluS2V5ID09PSB0cnVlICYmIGMgIT09IFwiPVwiKSB7XG5cdFx0XHRjdXJyZW50S2V5ICs9IGM7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAoYyA9PT0gXCI9XCIgJiYgaW5LZXkpIHtcblx0XHRcdGluS2V5ID0gZmFsc2U7XG5cdFx0XHRpblZhbHVlID0gdHJ1ZTtcblxuXHRcdFx0aWYgKG5leHRDaGFyID09PSAnXCInIHx8IG5leHRDaGFyID09PSBcIidcIikge1xuXHRcdFx0XHRpblF1b3RlZFZhbHVlID0gdHJ1ZTtcblx0XHRcdFx0cXVvdGVkVmFsdWVTdGFydENoYXIgPSBuZXh0Q2hhcjtcblx0XHRcdFx0aSsrO1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Y3VycmVudFZhbHVlID0gXCJcIjtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGlmIChpblZhbHVlID09PSB0cnVlKSB7XG5cdFx0XHRpZiAoaW5RdW90ZWRWYWx1ZSkge1xuXHRcdFx0XHRpZiAoYyA9PT0gcXVvdGVkVmFsdWVTdGFydENoYXIpIHtcblx0XHRcdFx0XHRpblF1b3RlZFZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjdXJyZW50VmFsdWUgKz0gYztcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjID09PSBcIixcIikge1xuXHRcdFx0XHRpblZhbHVlID0gZmFsc2U7XG5cdFx0XHRcdGluS2V5ID0gdHJ1ZTtcblx0XHRcdFx0Y29uc3QgZGVjb2RlZEN1cnJlbnRWYWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChjdXJyZW50VmFsdWUpO1xuXHRcdFx0XHRhZGRUb1Jlc3VsdChjdXJyZW50S2V5LCBkZWNvZGVkQ3VycmVudFZhbHVlKTtcblx0XHRcdFx0Y3VycmVudEtleSA9IFwiXCI7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IFwiXCI7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYyA9PT0gXCIpXCIpIHtcblx0XHRcdFx0aW5WYWx1ZSA9IGZhbHNlO1xuXHRcdFx0XHQvL2luS2V5ID0gdHJ1ZTtcblx0XHRcdFx0aW5TZWxlY3RvciA9IHRydWU7XG5cblx0XHRcdFx0Y29uc3QgZGVjb2RlZEN1cnJlbnRWYWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChjdXJyZW50VmFsdWUpO1xuXHRcdFx0XHRhZGRUb1Jlc3VsdChjdXJyZW50S2V5LCBkZWNvZGVkQ3VycmVudFZhbHVlKTtcblx0XHRcdFx0Y3VycmVudEtleSA9IFwiXCI7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IFwiXCI7XG5cdFx0XHRcdGN1cnJlbnRTZWxlY3RvciA9IFwiXCI7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRjdXJyZW50VmFsdWUgKz0gYztcblxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHR9XG5cblx0aWYgKGluU2VsZWN0b3IpIHtcblx0XHRyZXR1cm4gc2VsZWN0b3JzO1xuXHR9XG5cblx0cmV0dXJuIHt9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIHNlbGVjdG9yIHN0cmluZyBmcm9tIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IC0gVGhlIG9iamVjdCBjb250YWluaW5nIHNlbGVjdG9ycyBhbmQga2V5LXZhbHVlIHBhaXJzLlxuICogQHBhcmFtIHtib29sZWFufSBhZGRIYXNoUHJlZml4IC0gV2hldGhlciB0byBhZGQgdGhlIGhhc2ggcHJlZml4ICMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaGFzaCBzZWxlY3RvciBzdHJpbmcuXG4gKiBAc2luY2UgMy4zNy4wXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJyYWNrZXRlZEtleVZhbHVlSGFzaChvYmplY3QsIGFkZEhhc2hQcmVmaXggPSB0cnVlKSB7XG5cdGlmICghb2JqZWN0KSB7XG5cdFx0cmV0dXJuIGFkZEhhc2hQcmVmaXggPyBcIiNcIiA6IFwiXCI7XG5cdH1cblxuXHRsZXQgaGFzaFN0cmluZyA9IFwiXCI7XG5cblx0ZnVuY3Rpb24gZW5jb2RlS2V5VmFsdWUoa2V5LCB2YWx1ZSkge1xuXHRcdHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoa2V5KSArIFwiPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblx0fVxuXG5cdGZvciAoY29uc3Qgc2VsZWN0b3IgaW4gb2JqZWN0KSB7XG5cdFx0aWYgKG9iamVjdC5oYXNPd25Qcm9wZXJ0eShzZWxlY3RvcikpIHtcblx0XHRcdGNvbnN0IGtleVZhbHVlUGFpcnMgPSBvYmplY3Rbc2VsZWN0b3JdO1xuXHRcdFx0bGV0IHNlbGVjdG9yU3RyaW5nID0gc2VsZWN0b3I7XG5cdFx0XHRsZXQga2V5VmFsdWVTdHJpbmcgPSBcIlwiO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBrZXlWYWx1ZVBhaXJzKSB7XG5cdFx0XHRcdGlmIChrZXlWYWx1ZVBhaXJzLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IGtleVZhbHVlUGFpcnNba2V5XTtcblx0XHRcdFx0XHRrZXlWYWx1ZVN0cmluZyArPSBrZXlWYWx1ZVN0cmluZy5sZW5ndGggPT09IDAgPyBcIlwiIDogXCIsXCI7XG5cdFx0XHRcdFx0a2V5VmFsdWVTdHJpbmcgKz0gZW5jb2RlS2V5VmFsdWUoa2V5LCB2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKGtleVZhbHVlU3RyaW5nLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0c2VsZWN0b3JTdHJpbmcgKz0gXCIoXCIgKyBrZXlWYWx1ZVN0cmluZyArIFwiKVwiO1xuXHRcdFx0XHRoYXNoU3RyaW5nICs9IGhhc2hTdHJpbmcubGVuZ3RoID09PSAwID8gXCJcIiA6IFwiO1wiO1xuXHRcdFx0XHRoYXNoU3RyaW5nICs9IHNlbGVjdG9yU3RyaW5nO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhZGRIYXNoUHJlZml4ID8gXCIjXCIgKyBoYXNoU3RyaW5nIDogaGFzaFN0cmluZztcbn1cbiIsICIvLyB0ZXN0LmpzXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIjtcbmltcG9ydCB7XG4gICAgcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2gsXG4gICAgY3JlYXRlQnJhY2tldGVkS2V5VmFsdWVIYXNoXG59IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdGV4dC9icmFja2V0ZWQta2V5LXZhbHVlLWhhc2gubWpzXCI7XG5cbmRlc2NyaWJlKFwicGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2hcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgZm9yIGFuIGVtcHR5IHN0cmluZ1wiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gXCJcIjtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRSZXN1bHQgPSB7fTtcbiAgICAgICAgZXhwZWN0KHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0KSkudG8uZGVlcC5lcXVhbChleHBlY3RlZFJlc3VsdCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBwYXJzZSBhIHNpbmdsZSBzZWxlY3RvciB3aXRoIG9uZSBrZXktdmFsdWUgcGFpclwiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gXCIjc2VsZWN0b3IxKGtleTE9dmFsdWUxKVwiO1xuICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHtcbiAgICAgICAgICAgIHNlbGVjdG9yMToge1xuICAgICAgICAgICAgICAgIGtleTE6IFwidmFsdWUxXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBleHBlY3QocGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQpKS50by5kZWVwLmVxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHBhcnNlIG11bHRpcGxlIHNlbGVjdG9ycyB3aXRoIG11bHRpcGxlIGtleS12YWx1ZSBwYWlyc1wiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gXCIjc2VsZWN0b3IxKGtleTE9dmFsdWUxLGtleTI9dmFsdWUyKTtzZWxlY3RvcjIoa2V5Mz12YWx1ZTMsa2V5ND12YWx1ZTQpXCI7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge1xuICAgICAgICAgICAgc2VsZWN0b3IxOiB7XG4gICAgICAgICAgICAgICAga2V5MTogXCJ2YWx1ZTFcIixcbiAgICAgICAgICAgICAgICBrZXkyOiBcInZhbHVlMlwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNlbGVjdG9yMjoge1xuICAgICAgICAgICAgICAgIGtleTM6IFwidmFsdWUzXCIsXG4gICAgICAgICAgICAgICAga2V5NDogXCJ2YWx1ZTRcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGV4cGVjdChwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCkpLnRvLmRlZXAuZXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgZGVjb2RlIFVSTC1lbmNvZGVkIHZhbHVlc1wiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gXCIjc2VsZWN0b3IxKGtleTE9dmFsdWUxJTJDd2l0aCUyMGNvbW1hKVwiO1xuICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHtcbiAgICAgICAgICAgIHNlbGVjdG9yMToge1xuICAgICAgICAgICAgICAgIGtleTE6IFwidmFsdWUxLHdpdGggY29tbWFcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0KTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5zZWxlY3RvcjEua2V5MSkudG8uZXF1YWwoZXhwZWN0ZWRSZXN1bHQuc2VsZWN0b3IxLmtleTEpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIGlucHV0IHdpdGhvdXQgYSBsZWFkaW5nIGhhc2hcIiwgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IFwic2VsZWN0b3IxKGtleTE9dmFsdWUxKVwiO1xuICAgICAgICBjb25zdCBleHBlY3RlZFJlc3VsdCA9IHtcbiAgICAgICAgICAgIHNlbGVjdG9yMToge1xuICAgICAgICAgICAgICAgIGtleTE6IFwidmFsdWUxXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBleHBlY3QocGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQpKS50by5kZWVwLmVxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgZm9yIGludmFsaWQgaW5wdXRcIiwgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IFwiI3NlbGVjdG9yMShrZXkxPXZhbHVlMSxrZXkyXCI7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0ge307XG4gICAgICAgIGV4cGVjdChwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChpbnB1dCkpLnRvLmRlZXAuZXF1YWwoZXhwZWN0ZWRSZXN1bHQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGZvciBhbiBlbXB0eSBpbnB1dCBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGZvciBhbiBpbnZhbGlkIGlucHV0IHN0cmluZycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjaW52YWxpZCc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgYSBzaW1wbGUgaW5wdXQgc3RyaW5nIHdpdGggb25lIHNlbGVjdG9yIGFuZCBvbmUga2V5LXZhbHVlIHBhaXInLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yKGtleT12YWx1ZSknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7c2VsZWN0b3I6IHtrZXk6ICd2YWx1ZSd9fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhcnNlIGFuIGlucHV0IHN0cmluZyB3aXRoIG11bHRpcGxlIHNlbGVjdG9ycyBhbmQga2V5LXZhbHVlIHBhaXJzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyNzZWxlY3RvcjEoa2V5MT12YWx1ZTEpO3NlbGVjdG9yMihrZXkyPXZhbHVlMiknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7c2VsZWN0b3IxOiB7a2V5MTogJ3ZhbHVlMSd9LCBzZWxlY3RvcjI6IHtrZXkyOiAndmFsdWUyJ319KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGVtcHR5IHZhbHVlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3Ioa2V5MT0sa2V5Mj0pJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe3NlbGVjdG9yOiB7a2V5MTogJycsIGtleTI6ICcnfX0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgcGVyY2VudC1lbmNvZGVkIHZhbHVlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3Ioa2V5MT12YWx1ZSUyMDEsa2V5Mj12YWx1ZSUyQzIpJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe3NlbGVjdG9yOiB7a2V5MTogJ3ZhbHVlIDEnLCBrZXkyOiAndmFsdWUsMid9fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBkb3VibGUtcXVvdGVkIHZhbHVlcyB3aXRoIGNvbW1hcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3Ioa2V5MT1cInZhbHVlLDFcIixrZXkyPVwidmFsdWUsMlwiKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtzZWxlY3Rvcjoge2tleTE6ICd2YWx1ZSwxJywga2V5MjogJ3ZhbHVlLDInfX0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpZ25vcmUgbGVhZGluZyBoYXNoIHN5bWJvbCAoIyknLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnc2VsZWN0b3Ioa2V5PXZhbHVlKSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtzZWxlY3Rvcjoge2tleTogJ3ZhbHVlJ319KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaWdub3JlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlIHNwYWNlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBoYXNoU3RyaW5nID0gJyAgI3NlbGVjdG9yKGtleT12YWx1ZSkgICc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHtzZWxlY3Rvcjoge2tleTogJ3ZhbHVlJ319KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZiB0aGUgaW5wdXQgc3RyaW5nIGVuZHMgcHJlbWF0dXJlbHknLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yKGtleT12YWx1ZSc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZiBhIHNlbGVjdG9yIGlzIG1pc3NpbmcnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnIyhrZXk9dmFsdWUpJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe30pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IGlmIGEga2V5IGlzIG1pc3NpbmcnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yKD12YWx1ZSknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWZhIHZhbHVlIGlzIG1pc3NpbmcnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc2hTdHJpbmcgPSAnI3NlbGVjdG9yKGtleT0pJztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaGFzaFN0cmluZyk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoe1xuICAgICAgICAgICAgc2VsZWN0b3I6IHtcbiAgICAgICAgICAgICAgICBrZXk6ICcnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBvYmplY3QgaWYgdGhlcmUgaXMgbm8gY2xvc2luZyBwYXJlbnRoZXNpcyBmb3IgYSBzZWxlY3RvcicsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3Ioa2V5PXZhbHVlOyc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGhhc2hTdHJpbmcpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHt9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IG9iamVjdCBpZiB0aGVyZSBpcyBubyBzZW1pY29sb24gYWZ0ZXIgYSBzZWxlY3RvcicsICgpID0+IHtcbiAgICAgICAgY29uc3QgaGFzaFN0cmluZyA9ICcjc2VsZWN0b3Ioa2V5PXZhbHVlKXNlbGVjdG9yMihrZXkyPXZhbHVlMiknO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUJyYWNrZXRlZEtleVZhbHVlSGFzaChoYXNoU3RyaW5nKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7XG4gICAgICAgICAgICBzZWxlY3Rvcjoge1xuICAgICAgICAgICAgICAgIGtleTogJ3ZhbHVlJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZWxlY3RvcjI6IHtcbiAgICAgICAgICAgICAgICBrZXkyOiAndmFsdWUyJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NyZWF0ZUJyYWNrZXRlZEtleVZhbHVlSGFzaCcsICgpID0+IHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYW4gaGFzaCBzdHJpbmcgZm9yIGEgc2ltcGxlIG9iamVjdCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0ge1xuICAgICAgICAgICAgICAgICcuZXhhbXBsZSc6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2NvbG9yJzogJ3JlZCcsXG4gICAgICAgICAgICAgICAgICAgICdmb250LXNpemUnOiAnMTRweCdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICcub3RoZXInOiB7XG4gICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kJzogJ2JsdWUnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY3JlYXRlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0KTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoXCIjLmV4YW1wbGUoY29sb3I9cmVkLGZvbnQtc2l6ZT0xNHB4KTsub3RoZXIoYmFja2dyb3VuZD1ibHVlKVwiKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIHVybC1lbmNvZGVkIGhhc2ggc3RyaW5nIGZvciBhIHNpbXBsZSBvYmplY3QnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHtcbiAgICAgICAgICAgICAgICAnLmV4YW1wbGUnOiB7XG4gICAgICAgICAgICAgICAgICAgICdjb2xvcic6ICdyXCJlZCcsXG4gICAgICAgICAgICAgICAgICAgICdmb250LXNpemUnOiAnMTRweCdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICcub3RoZXInOiB7XG4gICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kJzogJ2JsdWUnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY3JlYXRlQnJhY2tldGVkS2V5VmFsdWVIYXNoKGlucHV0LCB0cnVlKTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoXCIjLmV4YW1wbGUoY29sb3I9ciUyMmVkLGZvbnQtc2l6ZT0xNHB4KTsub3RoZXIoYmFja2dyb3VuZD1ibHVlKVwiKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBzdHJpbmcgZm9yIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0ge307XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGVCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQsZmFsc2UpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChcIlwiKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhbiBlbXB0eSBzdHJpbmcgZm9yIGFuIGVtcHR5IG9iamVjdCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0ID0ge307XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjcmVhdGVCcmFja2V0ZWRLZXlWYWx1ZUhhc2goaW5wdXQsZmFsc2UpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChcIlwiKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgIH0pO1xuXG5cbn0pO1xuIiwgIi8qKiBub2RlanMgZG9lc250IHN1cHBvcnQgd2luZG93LmNyeXB0ICovXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnTWF0aCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCByYW5kb20gPSAoKSA9PiB7fVxuICAgIFxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG4gICAgICAgIGlmICghZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuXG4gICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL21hdGgvcmFuZG9tLm1qc1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgcmFuZG9tID0gbS5yYW5kb207XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSkpXG5cblxuICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcucmFuZG9tKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2EgZ3JlYXRlciBiIHNob3VsZCB0aHJvdyBlcnJvciAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gcmFuZG9tKDEwLCAyKSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnIHNob3VsZCByZXR1cm4gYSBudW1iZXIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHIgPSByYW5kb20oKTtcbiAgICAgICAgICAgIGV4cGVjdChyKS50aGF0LmlzLmEoJ251bWJlcicpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnIHNob3VsZCByZXR1cm4gYSBudW1iZXIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHJhbmRvbSg1LCA2KSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnIHNob3VsZCB0aHJvdyBFcnJvciB3ZSBjYW5ub3QgZ2VuZXJhdGUgbnVtYmVycyBsYXJnZXIgdGhhbiA1MyBiaXRzLicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiByYW5kb20oLTk5OTk5OTk5OSwgOTk5OTk5OTk5OTk5OTk5OTk5OTkpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcgc2hvdWxkIHRocm93IEVycm9yIHdlIGNhbm5vdCBnZW5lcmF0ZSBudW1iZXJzIGxhcmdlciB0aGFuIDUzIGJpdHMuJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWzEsIDEwMF0sXG4gICAgICAgICAgICAgICAgWzUwMCwgNjAwXSxcbiAgICAgICAgICAgICAgICBbMTAwLCAxMDAwXVxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgICBsZXQgciA9IHJhbmRvbShhLCBiKTtcblxuICAgICAgICAgICAgICAgIGl0KHIgKyAnIHNob3VsZCByZXR1cm4gdmFsdWUgYmV0d2VlbiAnICsgYSArICcgJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHIgPj0gYSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHIgPD0gYikudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWzEsIDEwMF0sXG4gICAgICAgICAgICAgICAgWzUwMCwgNjAwXSxcbiAgICAgICAgICAgICAgICBbMTAwLCAxMDAwXVxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgICAgICAgICBjb25zdCByb3VuZHMgPSA1MDBcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBtYXggPSByb3VuZHM7IGkgPCBtYXg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBzdW0gKz0gcmFuZG9tKGEsIGIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBhdmcgPSBzdW0gLyByb3VuZHM7XG5cbiAgICAgICAgICAgICAgICBpdChhdmcgKyAnIHNob3VsZCBiZXR3ZWVuICcgKyBhICsgJyAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoYXZnID4gYSkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoYXZnIDwgYikudG8uYmUudHJ1ZVxuICAgICAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgfSlcblxuICAgICAgICB9KVxuXG5cbiAgICB9KVxuXG5cbn0pIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge3RyaW1TcGFjZXN9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdXRpbC90cmltc3BhY2VzLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCd0cmltU3BhY2VzJywgZnVuY3Rpb24gKCkge1xuICAgIFtcbiAgICAgICAgLy8gb25lIHN0cm9rZSBpcyBlc2NwZWQgYnkgdGhlIGphdmFzY3JpcHQgaW50ZXJwcmV0ZXIsIHRoZSBzZWNvbmQgc3Ryb2tlIGVzY2FwZXMgdGhlIHN0cm9rZVxuICAgICAgICBbJyB2YWx1ZSAnLCAndmFsdWUnXSxcbiAgICAgICAgWycgdmFsdWVcXFxcICcsICd2YWx1ZVxcXFwgJ10sXG4gICAgICAgIFsnXFxcXCB2YWx1ZVxcXFwgJywgJ1xcXFwgdmFsdWVcXFxcICddLFxuICAgICAgICBbJ1xcIHZhbHVlXFwgJywgJ3ZhbHVlJ10sICAgXG4gICAgICAgIFtcIiAgIHZhbHVlIFxcIFwiLCAndmFsdWUnXSwgXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgIGl0KCd0cmltU3BhY2VzKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcpIHNob3VsZCByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGIpLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QodHJpbVNwYWNlcyhhKSkudG8uYmUuZXF1YWwoYik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufSk7XG4gICAgIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1Byb2Nlc3Npbmd9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdXRpbC9wcm9jZXNzaW5nLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdQcm9jZXNzaW5nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ3J1biBpbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJ1biBtYW55IGZ1bmN0aW9uJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgbGV0IHQgPSArbmV3IERhdGUoKTtcblxuICAgICAgICAgICAgY29uc3QgZGVzaXJlZERlbGF5ID0gMjAwO1xuICAgICAgICAgICAgdGhpcy50aW1lb3V0KGRlc2lyZWREZWxheSsxMDApO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBkZWxheSAxMiBcbiAgICAgICAgICAgIG5ldyBQcm9jZXNzaW5nKCh2KSA9PiB7XG4gICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICAgICAgfSwgKHYpID0+IHtcbiAgICAgICAgICAgICAgICBjb3VudGVyKytcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgY291bnRlcisrXG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9LCBkZXNpcmVkRGVsYXksZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBjb3VudGVyKytcbiAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgIH0pLnJ1bigndGVzdCcpLnRoZW4oKHYpID0+IHtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChjb3VudGVyKS50by5iZS5lcXVhbCg0KTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHYgPT09ICd0ZXN0JykudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgZGVsYXlcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCtuZXcgRGF0ZSgpID4gdCArIGRlc2lyZWREZWxheSsxKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIG9uZSBmdW5jdGlvbicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBjb3VudGVyID0gMDtcblxuICAgICAgICAgICAgbmV3IFByb2Nlc3NpbmcoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgY291bnRlcisrXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSkucnVuKCd0ZXN0JykudGhlbigodikgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2ID09PSAndGVzdCcpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJ1biBubyBmdW5jdGlvbicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGxldCBjb3VudGVyID0gMDtcblxuICAgICAgICAgICAgbmV3IFByb2Nlc3NpbmcoKS5ydW4oJ3Rlc3QnKS50aGVuKCh2KSA9PiB7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodiA9PT0gJ3Rlc3QnKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NyZWF0ZSBuZXcgaW5zdGFuY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBQcm9jZXNzaW5nIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgUHJvY2Vzc2luZygpKS50by5iZS5hKCdvYmplY3QnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBQcm9jZXNzaW5nIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgUHJvY2Vzc2luZyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB9KSkudG8uYmUuYSgnb2JqZWN0Jyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgVHlwZUVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBQcm9jZXNzaW5nKHRydWUpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IFR5cGVFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgUHJvY2Vzc2luZyhcInRlc3RcIikpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxufSk7IiwgImltcG9ydCB7RGVhZE1hbnNTd2l0Y2h9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdXRpbC9kZWFkbWFuc3N3aXRjaC5tanNcIjtcblxuXG5kZXNjcmliZSgnRGVhZE1hbnNTd2l0Y2gnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgncnVuIGluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgbXMxID0gIERhdGUubm93KCk7XG5cbiAgICAgICAgICAgIG5ldyBEZWFkTWFuc1N3aXRjaCgxMDAsICgpID0+IHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG1zMiA9ICBEYXRlLm5vdygpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZGlmZiA9IG1zMiAtIG1zMTtcbiAgICAgICAgICAgICAgICBpZiAoZGlmZiA8IDEwMCkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKCd0byBzaG9ydCAnICsgZGlmZik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3J1biBpbnN0YW5jZSBhbmQgdG91Y2gnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4nLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBjb25zdCBtczEgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgICAgICBjb25zdCBkZWFkbWFuc3N3aXRjaCA9IG5ldyBEZWFkTWFuc1N3aXRjaCgxMDAsICgpID0+IHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IG1zMiA9IERhdGUubm93KCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkaWZmID0gbXMyIC0gbXMxO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1zMSA+IG1zMikge1xuICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcigndGltaW5nIGVycm9yJykpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGRpZmYgPCA2MDApIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoJ3RvIHNob3J0ICcgKyBkaWZmKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgLy8gICAwIG1zOiBpbml0KCkgLT4gd2FpdCAxMDAgbXMgXG4gICAgICAgICAgICAvLyAgNTAgbXM6IHRvdWNoKCkgLT4gd2FpdCAxMDAgbXNcbiAgICAgICAgICAgIC8vICAgICAgICAgIC0+IHdhaXQgMTAwXG4gICAgICAgICAgICAvLyAxMDAgbXM6IHRvdWNoKDUwMCkgLT4gd2FpdCA1MDAgbXNcbiAgICAgICAgICAgIC8vICAgICAgICAgIC0+IHdhaXQgNTAwXG4gICAgICAgICAgICAvLyA2MDAgbXM6IGV4ZWN1dGUgY2FsbGJhY2tcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRlYWRtYW5zc3dpdGNoLnRvdWNoKClcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWFkbWFuc3N3aXRjaC50b3VjaCg1MDApXG4gICAgICAgICAgICAgICAgfSwgNTApXG5cbiAgICAgICAgICAgIH0sIDUwKVxuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uL3R5cGVzL2lzLm1qc1wiO1xuXG5leHBvcnQgeyBDb21wYXJhdG9yIH07XG5cbi8qKlxuICogVGhlIGNvbXBhcmF0b3IgYWxsb3dzIGEgY29tcGFyaXNvbiBmdW5jdGlvbiB0byBiZSBhYnN0cmFjdGVkLlxuICpcbiAqIFRoZSBmb2xsb3dpbmcgYXJlIHNvbWUgZXhhbXBsZXMgb2YgdGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBjbGFzcy5cbiAqXG4gKiBgYGBcbiAqIG5ldyBDb21wYXJhdG9yKCkubGVzc1RoYW5PckVxdWFsKDIsIDUpIC8vIFx1MjFBNiB0cnVlXG4gKiBuZXcgQ29tcGFyYXRvcigpLmdyZWF0ZXJUaGFuKDQsIDIpIC8vIFx1MjFBNiB0cnVlXG4gKiBuZXcgQ29tcGFyYXRvcigpLmVxdWFsKDQsIDQpIC8vIFx1MjFBNiB0cnVlXG4gKiBuZXcgQ29tcGFyYXRvcigpLmVxdWFsKDQsIDUpIC8vIFx1MjFBNiBmYWxzZVxuICogYGBgXG4gKlxuICogWW91IGNhbiBhbHNvIHBhc3MgeW91ciBvd24gY29tcGFyaXNvbiBmdW5jdGlvbiwgYW5kIHRodXMgZGVmaW5lIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uLlxuICpcbiAqIGBgYFxuICogbmV3IENvbXBhcmF0b3IoZnVuY3Rpb24gKGEsIGIpIHtcbiAqICAgICAgaWYgKGEudiA9PT0gYi52KSByZXR1cm4gMDtcbiAqICAgICAgICAgcmV0dXJuIGEudiA8IGIudiA/IC0xIDogMTtcbiAqICAgICAgfSkuZXF1YWwoe3Y6IDJ9LCB7djogMn0pOyAgLy8gXHUyMUE2IHRydWVcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlL2NvbXBhcmF0b3Ivc2ltcGxlLyBTaW1wbGUgZXhhbXBsZVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqL1xuY2xhc3MgQ29tcGFyYXRvciBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogY3JlYXRlIG5ldyBjb21wYXJhdG9yXG5cdCAqXG5cdCAqIEBwYXJhbSB7TW9uc3Rlci5VdGlsfmV4YW1wbGVDYWxsYmFja30gW2NhbGxiYWNrXSBDb21wYXJhdG9yIGNhbGxiYWNrXG5cdCAqIEB0aHJvdyB7VHlwZUVycm9yfSB1bnN1cHBvcnRlZCB0eXBlXG5cdCAqIEB0aHJvdyB7VHlwZUVycm9yfSBpbXByYWN0aWNhbCBjb21wYXJpc29uXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihjYWxsYmFjaykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcblx0XHRcdHRoaXMuY29tcGFyZSA9IGNhbGxiYWNrO1xuXHRcdH0gZWxzZSBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcInVuc3VwcG9ydGVkIHR5cGVcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGRlZmF1bHQgY29tcGFyZSBmdW5jdGlvblxuXG5cdFx0XHQvKipcblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0geyp9IGFcblx0XHRcdCAqIEBwYXJhbSB7Kn0gYlxuXHRcdFx0ICogQHJldHVybiB7aW50ZWdlcn0gLTEsIDAgb3IgMVxuXHRcdFx0ICovXG5cdFx0XHR0aGlzLmNvbXBhcmUgPSBmdW5jdGlvbiAoYSwgYikge1xuXHRcdFx0XHRpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcImltcHJhY3RpY2FsIGNvbXBhcmlzb25cIiwgXCJ0eXBlcy9jb21wYXJhdG9yLm1qc1wiKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChhID09PSBiKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGEgPCBiID8gLTEgOiAxO1xuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogY2hhbmdlcyB0aGUgb3JkZXIgb2YgdGhlIG9wZXJhdG9yc1xuXHQgKlxuXHQgKiBAcmV0dXJuIHtDb21wYXJhdG9yfVxuXHQgKi9cblx0cmV2ZXJzZSgpIHtcblx0XHRjb25zdCBvcmlnaW5hbCA9IHRoaXMuY29tcGFyZTtcblx0XHR0aGlzLmNvbXBhcmUgPSAoYSwgYikgPT4gb3JpZ2luYWwoYiwgYSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHR3byB2YXJpYWJsZXMgYXJlIGVxdWFsLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFcblx0ICogQHBhcmFtIHsqfSBiXG5cdCAqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRlcXVhbChhLCBiKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29tcGFyZShhLCBiKSA9PT0gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdmFyaWFibGUgYGFgIGlzIGdyZWF0ZXIgdGhhbiBgYmBcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhXG5cdCAqIEBwYXJhbSB7Kn0gYlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0Z3JlYXRlclRoYW4oYSwgYikge1xuXHRcdHJldHVybiB0aGlzLmNvbXBhcmUoYSwgYikgPiAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB2YXJpYWJsZSBgYWAgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBiYFxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFcblx0ICogQHBhcmFtIHsqfSBiXG5cdCAqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRncmVhdGVyVGhhbk9yRXF1YWwoYSwgYikge1xuXHRcdHJldHVybiB0aGlzLmdyZWF0ZXJUaGFuKGEsIGIpIHx8IHRoaXMuZXF1YWwoYSwgYik7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHZhcmlhYmxlIGBhYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYGJgXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYVxuXHQgKiBAcGFyYW0geyp9IGJcblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGxlc3NUaGFuT3JFcXVhbChhLCBiKSB7XG5cdFx0cmV0dXJuIHRoaXMubGVzc1RoYW4oYSwgYikgfHwgdGhpcy5lcXVhbChhLCBiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdmFyaWFibGUgYSBpcyBsZXNzIHRoYW4gYlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IGFcblx0ICogQHBhcmFtIHsqfSBiXG5cdCAqXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRsZXNzVGhhbihhLCBiKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29tcGFyZShhLCBiKSA8IDA7XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgYnkgdGhlIG9wZXJhdG9yXG4gKlxuICogYGBgXG4gKiBuZXcgQ29tcGFyYXRvcihmdW5jdGlvbiAoYSwgYikge1xuICogICAgICBpZiAoYS52ID09PSBiLnYpIHJldHVybiAwO1xuICogICAgICAgICByZXR1cm4gYS52IDwgYi52ID8gLTEgOiAxO1xuICogICAgICB9KS5lcXVhbCh7djogMn0sIHt2OiAyfSk7ICAvLyBcdTIxQTYgdHJ1ZVxuICogYGBgXG4gKlxuICogQGNhbGxiYWNrIE1vbnN0ZXIuVXRpbH5leGFtcGxlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gYVxuICogQHBhcmFtIHsqfSBiXG4gKiBAcmV0dXJuIHtpbnRlZ2VyfSAtMSwgMCBvciAxXG4gKiBAc2VlIE1vbnN0ZXIuVXRpbC5Db21wYXJhdG9yXG4gKi9cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtDb21wYXJhdG9yfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3V0aWwvY29tcGFyYXRvci5tanNcIjtcblxuXG5kZXNjcmliZSgnQ29tcGFyYXRvcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdjcmVhdGUgbmV3IGluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgY29tcGFyYXRvciBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKSkudG8uYmUuYSgnb2JqZWN0Jyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgY29tcGFyYXRvciBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgfSkpLnRvLmJlLmEoJ29iamVjdCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IFR5cGVFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgQ29tcGFyYXRvcih0cnVlKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBUeXBlRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IENvbXBhcmF0b3IoXCJ0ZXN0XCIpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZXF1YWwoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgXCJ0ZXN0XCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFs1LjEsIDUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs1LjEsIDUuMSwgdHJ1ZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgWy00LCAtNCwgdHJ1ZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgY29tcGFyZSAnICsgYSArICcgYW5kICcgKyBiICsgJyByZXR1cm4gJyArIGMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKS5lcXVhbChhLCBiKSkuaXMuZXF1YWwoYylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2VxdWFsKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgWyd0ZXN0MScsIDVdLFxuICAgICAgICAgICAgWyd0ZXN0MScsIG51bGxdLFxuICAgICAgICAgICAgWyd0ZXN0MScsIHBhcnNlSW50KFwiYVwiKV0sXG4gICAgICAgICAgICBbZmFsc2UsIDVdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgbnVsbF0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb21wYXJlICcgKyBhICsgJyBhbmQgJyArIGIgKyAnIHRocm93IFR5cGVFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IENvbXBhcmF0b3IoKS5lcXVhbChhLCBiKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dyZWF0ZXJUaGFuKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIFwidGVzdFwiLCB0cnVlXSxcbiAgICAgICAgICAgIFs1LjEsIDUsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNS4xLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbLTQsIC00LCBmYWxzZV0sXG4gICAgICAgICAgICBbLTQsIDQsIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb21wYXJlICcgKyBhICsgJyBhbmQgJyArIGIgKyAnIHJldHVybiAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmdyZWF0ZXJUaGFuKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncmV2ZXJzZSgpLmdyZWF0ZXJUaGFuKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIFwidGVzdFwiLCB0cnVlXSxcbiAgICAgICAgICAgIFs1LjEsIDUsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNS4xLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbLTQsIC00LCBmYWxzZV0sXG4gICAgICAgICAgICBbLTQsIDQsIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb21wYXJlICcgKyBhICsgJyBhbmQgJyArIGIgKyAnIHJldHVybiAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLnJldmVyc2UoKS5ncmVhdGVyVGhhbihhLCBiKSkuaXMuZXF1YWwoYylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dyZWF0ZXJUaGFuT3JFcXVhbCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBcInRlc3RcIiwgdHJ1ZV0sXG4gICAgICAgICAgICBbNS4xLCA1LCB0cnVlXSxcbiAgICAgICAgICAgIFs1LjEsIDUuMSwgdHJ1ZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgWy00LCAtNCwgdHJ1ZV0sXG4gICAgICAgICAgICBbLTQsIDQsIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb21wYXJlICcgKyBhICsgJyBhbmQgJyArIGIgKyAnIHJldHVybiAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmdyZWF0ZXJUaGFuT3JFcXVhbChhLCBiKSkuaXMuZXF1YWwoYylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2xlc3NUaGFuKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIFwidGVzdFwiLCB0cnVlXSxcbiAgICAgICAgICAgIFs1LjEsIDUsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNS4xLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbLTQsIC00LCBmYWxzZV0sXG4gICAgICAgICAgICBbLTQsIDQsIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBjb21wYXJlICcgKyBhICsgJyBhbmQgJyArIGIgKyAnIHJldHVybiAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmxlc3NUaGFuKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZG9jdW1lbnRhdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgICAgICBpdCgnc2hvdWxkIHJ1biAuLi4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKS5sZXNzVGhhbk9yRXF1YWwoMiwgNSkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbXBhcmF0b3IoKS5ncmVhdGVyVGhhbig0LCAyKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcigpLmVxdWFsKDQsIDQpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkuZXF1YWwoNCwgNSkpLnRvLmJlLmZhbHNlO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIHdpdGggb3duIGZ1bmN0aW9uIC4uLicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQ29tcGFyYXRvcihmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgIGlmIChhLnYgPT09IGIudikgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEudiA8IGIudiA/IC0xIDogMTtcbiAgICAgICAgICAgIH0pLmVxdWFsKHt2OiAyfSwge3Y6IDJ9KSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnbGVzc1RoYW5PckVxdWFsKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIFwidGVzdFwiLCB0cnVlXSxcbiAgICAgICAgICAgIFs1LjEsIDUsIHRydWVdLFxuICAgICAgICAgICAgWzUuMSwgNS4xLCB0cnVlXSxcbiAgICAgICAgICAgIFt0cnVlLCB0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbLTQsIC00LCB0cnVlXSxcbiAgICAgICAgICAgIFstNCwgNCwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGNvbXBhcmUgJyArIGEgKyAnIGFuZCAnICsgYiArICcgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBDb21wYXJhdG9yKCkubGVzc1RoYW5PckVxdWFsKGEsIGIpKS5pcy5lcXVhbChjKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IHZhbGlkYXRlT2JqZWN0IH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBkZWVwRnJlZXplIH07XG5cbi8qKlxuICogRGVlcCBmcmVlemUgYSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0IG9iamVjdCB0byBiZSBmcmVlemVcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMC4wXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gZGVlcEZyZWV6ZShvYmplY3QpIHtcblx0dmFsaWRhdGVPYmplY3Qob2JqZWN0KTtcblxuXHQvLyBSZXRyaWV2ZSB0aGUgZGVmaW5lZCBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgb2JqZWN0XG5cdGxldCBwcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QpO1xuXG5cdC8vIEZyZWV6ZSBwcm9wZXJ0aWVzIGJlZm9yZSBmcmVlemluZyB5b3Vyc2VsZlxuXHRmb3IgKGNvbnN0IG5hbWUgb2YgcHJvcE5hbWVzKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBvYmplY3RbbmFtZV07XG5cblx0XHRvYmplY3RbbmFtZV0gPVxuXHRcdFx0dmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiID8gZGVlcEZyZWV6ZSh2YWx1ZSkgOiB2YWx1ZTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QuZnJlZXplKG9iamVjdCk7XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7ZGVlcEZyZWV6ZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS91dGlsL2ZyZWV6ZS5tanNcIjtcblxuXG5kZXNjcmliZSgnZGVlcEZyZWV6ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCdkZWVwRnJlZXplIGFuIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGZyZWV6ZSBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBvYmoxID0ge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzoxXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBsZXQgb2JqMiA9IHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGM6MlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZXhwZWN0KG9iajIpLnRvLm5vdC5lcWwob2JqMSlcbiAgICAgICAgICAgIG9iajEuYS5iLmMgPSAyO1xuICAgICAgICAgICAgZXhwZWN0KG9iajIpLnRvLmVxbChvYmoxKTtcblxuICAgICAgICAgICAgY29uc3Qgb2JqMUZyZWV6ZWQgPSBkZWVwRnJlZXplKG9iajEpO1xuXG4gICAgICAgICAgICBleHBlY3Qob2JqMikudG8uZXFsKG9iajFGcmVlemVkKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kZS9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvZnJlZXplXG4gICAgICAgICAgICAgICAgLy8gbm8gY2hhbmdlIHRvIHRoZSBvYmplY3QsIGV4Y2VwdGlvbiBkZXBlbmRzIG9uIG1vZGUgKHN0cmljdCBFUyAyMDE1LCBldGMpXG4gICAgICAgICAgICAgICAgb2JqMUZyZWV6ZWQuYS5iLmMgPSAzICAgIFxuICAgICAgICAgICAgfSBjYXRjaCAoXykge1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV4cGVjdChvYmoyKS50by5lcWwob2JqMUZyZWV6ZWQpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtjbG9uZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS91dGlsL2Nsb25lLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ0Nsb25lJywgZnVuY3Rpb24gKCkge1xuXG4gICAgY2xhc3MgQSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGIpIHtcbiAgICAgICAgICAgIHRoaXMuYiA9IGJcbiAgICAgICAgfVxuXG4gICAgICAgIGEoKSB7XG5cbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBjbGFzcyBCIHtcbiAgICAgICAgY29uc3RydWN0b3IoYikge1xuICAgICAgICAgICAgdGhpcy5iID0gYlxuICAgICAgICB9XG5cbiAgICAgICAgYSgpIHtcblxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBnZXRDbG9uZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBcIkRPTkVcIlxuICAgICAgICB9XG4gICAgICAgIFxuICAgIH1cblxuICAgIGRlc2NyaWJlKCcuY2xvbmUoQikgd2l0aCBnZXRDbG9uZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJy5jbG9uZShCKSBzaG91bGQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGIgPSBuZXcgQih7XG4gICAgICAgICAgICAgICAgeDoge1xuICAgICAgICAgICAgICAgICAgICB5OiAxLCBkOiBuZXcgQSgxKSwgejogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgciA9IGNsb25lKGIpO1xuICAgICAgICAgICAgZXhwZWN0KGIpLnRvLmJlLmluc3RhbmNlT2YoQilcbiAgICAgICAgICAgIGV4cGVjdChyKS5ub3QuZXF1YWwoYik7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkocikpLmVxdWFsKEpTT04uc3RyaW5naWZ5KCdET05FJykpO1xuXG4gICAgICAgIH0pO1xuICAgIH0pXG4gICAgXG4gICAgZGVzY3JpYmUoJy5jbG9uZShBKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJy5jbG9uZShBKSBzaG91bGQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSBuZXcgQSh7XG4gICAgICAgICAgICAgICAgeDoge1xuICAgICAgICAgICAgICAgICAgICB5OiAxLCBkOiBuZXcgQSgxKSwgejogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgYiA9IGNsb25lKGEpO1xuICAgICAgICAgICAgZXhwZWN0KGEpLnRvLmJlLmluc3RhbmNlT2YoQSlcbiAgICAgICAgICAgIGV4cGVjdChiKS50by5iZS5pbnN0YW5jZU9mKEEpXG4gICAgICAgICAgICBleHBlY3QoYikubm90LmVxdWFsKGEpO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGEpKS5lcXVhbChKU09OLnN0cmluZ2lmeShiKSk7XG5cbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIC8vIG5vZGVqcyBkb2VzIG5vdCBoYXZlIGEgRE9NXG4gICAgaWYgKHR5cGVvZiBEb2N1bWVudEZyYWdtZW50ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGRlc2NyaWJlKCcuY2xvbmUoRG9jdW1lbnRGcmFnbWVudCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnLmNsb25lKERvY3VtZW50RnJhZ21lbnQpIHNob3VsZCBzYW1lIERvY3VtZW50RnJhZ21lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgICAgICAgICAgbGV0IGIgPSBjbG9uZShhKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoYikuZXF1YWwoYSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBkZXNjcmliZSgnLmNsb25lKG51bGwpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyB0eXBlb2YgbnVsbCByZXN1bHRzIGluICdvYmplY3QnLiAgaHR0cHM6Ly8yYWxpdHkuY29tLzIwMTMvMTAvdHlwZW9mLW51bGwuaHRtbFxuICAgICAgICBpdCgnLmNsb25lKG51bGwpIHNob3VsZCAgbnVsbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBhID0gbnVsbFxuICAgICAgICAgICAgbGV0IGIgPSBjbG9uZShhKTtcbiAgICAgICAgICAgIGV4cGVjdChiKS5lcXVhbChhKTtcbiAgICAgICAgICAgIGV4cGVjdChiKS50by5iZS5udWxsO1xuICAgICAgICAgICAgZXhwZWN0KGEpLnRvLmJlLm51bGw7XG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnLmNsb25lKHVuZGVmaW5lZCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCcuY2xvbmUodW5kZWZpbmVkKSBzaG91bGQgIHVuZGVmaW5lZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBhID0gdW5kZWZpbmVkXG4gICAgICAgICAgICBsZXQgYiA9IGNsb25lKGEpO1xuICAgICAgICAgICAgZXhwZWN0KGEgPT09IGIpLnRvLmJlLnRydWVcbiAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgYiA9PT0gJ3VuZGVmaW5lZCcpLnRvLmJlLnRydWVcbiAgICAgICAgICAgIGV4cGVjdChhID09PSB1bmRlZmluZWQpLnRvLmJlLnRydWVcbiAgICAgICAgICAgIGV4cGVjdChiID09PSB1bmRlZmluZWQpLnRvLmJlLnRydWVcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCcuY2xvbmUob2JqZWN0KScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnLmNsb25lKHt9KSBzaG91bGQgIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBhID0ge31cbiAgICAgICAgICAgIGxldCBiID0gY2xvbmUoYSk7XG4gICAgICAgICAgICBleHBlY3QodHlwZW9mIGIgPT09ICdvYmplY3QnKS50by5iZS50cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuY2xvbmUoe3g6MX0pIHNob3VsZCAgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGEgPSB7eDogMX1cbiAgICAgICAgICAgIGxldCBiID0gY2xvbmUoYSk7XG4gICAgICAgICAgICBleHBlY3QoYS54KS5pcy5lcXVhbChiLngpXG4gICAgICAgIH0pO1xuICAgIH0pXG4gICAgZGVzY3JpYmUoJy5jbG9uZShmdW5jdGlvbiknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJy5jbG9uZShmdW5jdGlvbikgc2hvdWxkICBmdW5jdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBhID0gKCkgPT4ge1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGIgPSBjbG9uZShhKTtcbiAgICAgICAgICAgIGV4cGVjdCh0eXBlb2YgYiA9PT0gJ2Z1bmN0aW9uJykudG8uYmUudHJ1ZVxuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnLmNsb25lKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsICdzdHJpbmcnXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsICd1bmRlZmluZWQnXSxcbiAgICAgICAgICAgIFtudWxsLCAnb2JqZWN0J10sIC8vIHR5cGVvZiBudWxsIHJlc3VsdHMgaW4gJ29iamVjdCcuICBodHRwczovLzJhbGl0eS5jb20vMjAxMy8xMC90eXBlb2YtbnVsbC5odG1sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgJ2Z1bmN0aW9uJ10sXG4gICAgICAgICAgICBbMiwgJ251bWJlciddLFxuICAgICAgICAgICAgW2ZhbHNlLCAnYm9vbGVhbiddLFxuICAgICAgICAgICAgW3RydWUsICdib29sZWFuJ10sXG4gICAgICAgICAgICBbNC41LCAnbnVtYmVyJ10sXG4gICAgICAgICAgICBbe30sICdvYmplY3QnXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sICdvYmplY3QnXSwgLy8gYXJyYXkgaXN0IGF1Y2ggdHlwZSBvYmplY3RcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksICdzeW1ib2wnXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgICAgIGl0KCcuY2xvbmUoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykgc2hvdWxkICAnICsgYiArICcgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBjID0gY2xvbmUoYSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBjKS5pcy5lcXVhbChiKTtcbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG59KTtcblxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBIYW5kbGVyIH0gZnJvbSBcIi4uL2hhbmRsZXIubWpzXCI7XG5pbXBvcnQgeyBMb2dFbnRyeSB9IGZyb20gXCIuLi9sb2dlbnRyeS5tanNcIjtcbmltcG9ydCB7IFRSQUNFLCBXQVJOLCBERUJVRywgRVJST1IsIEZBVEFMLCBJTkZPIH0gZnJvbSBcIi4uL2xvZ2dlci5tanNcIjtcblxuZXhwb3J0IHsgQ29uc29sZUhhbmRsZXIgfTtcblxuLyoqXG4gKiBZb3UgY2FuIGNyZWF0ZSBhbiBvYmplY3Qgb2YgdGhlIGNsYXNzIHNpbXBseSBieSB1c2luZyB0aGUgbmFtZXNwYWNlIGBuZXcgTW9uc3Rlci5Mb2dnaW5nLkhhbmRsZXIuQ29uc29sZUhhbmRsZXIoKWAuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIENvbnNvbGVIYW5kbGVyIGV4dGVuZHMgSGFuZGxlciB7XG5cdC8qKlxuXHQgKiBUaGlzIGlzIHRoZSBjZW50cmFsIGxvZyBmdW5jdGlvbi4gdGhpcyBtZXRob2QgbXVzdCBiZVxuXHQgKiBvdmVyd3JpdHRlbiBieSBkZXJpdmVkIGhhbmRsZXJzIHdpdGggdGhlaXIgb3duIGxvZ2ljLlxuXHQgKlxuXHQgKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGICAoQUxMID0gMHhmZjtPRkYgPSAweDAwO1xuXHQgKlxuXHQgKiBAcGFyYW0ge0xvZ0VudHJ5fSBlbnRyeVxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0bG9nKGVudHJ5KSB7XG5cdFx0aWYgKHN1cGVyLmxvZyhlbnRyeSkpIHtcblx0XHRcdGNvbnN0IGNvbnNvbGUgPSBnZXRHbG9iYWxPYmplY3QoXCJjb25zb2xlXCIpO1xuXHRcdFx0aWYgKCFjb25zb2xlKSByZXR1cm4gZmFsc2U7XG5cblx0XHRcdGlmICghY29uc29sZS5lcnJvcikgY29uc29sZS5lcnJvciA9IGNvbnNvbGUubG9nO1xuXHRcdFx0aWYgKCFjb25zb2xlLndhcm4pIGNvbnNvbGUud2FybiA9IGNvbnNvbGUubG9nO1xuXG5cdFx0XHRzd2l0Y2ggKGVudHJ5LmdldExvZ0xldmVsKCkpIHtcblx0XHRcdFx0Y2FzZSBUUkFDRTpcblx0XHRcdFx0Y2FzZSBERUJVRzpcblx0XHRcdFx0Y2FzZSBJTkZPOlxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKGVudHJ5LnRvU3RyaW5nKCkpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIEZBVEFMOlxuXHRcdFx0XHRjYXNlIEVSUk9SOlxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZW50cnkudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgV0FSTjpcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oZW50cnkudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coZW50cnkudG9TdHJpbmcoKSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlSW50ZWdlciB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcbmltcG9ydCB7IExvZ0VudHJ5IH0gZnJvbSBcIi4vbG9nZW50cnkubWpzXCI7XG5pbXBvcnQgeyBBTEwsIERFQlVHLCBFUlJPUiwgRkFUQUwsIElORk8sIE9GRiwgVFJBQ0UsIFdBUk4gfSBmcm9tIFwiLi9sb2dnZXIubWpzXCI7XG5cbmV4cG9ydCB7IEhhbmRsZXIgfTtcblxuLyoqXG4gKiBUaGUgbG9nIGhhbmRsZXIgaXMgdGhlIGludGVyZmFjZSBiZXR3ZWVuIHRoZSBsb2cgZW50cmllcyBhbmQgdGhlIGxvZyBsaXN0ZW5lcnMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS41LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKi9cbmNsYXNzIEhhbmRsZXIgZXh0ZW5kcyBCYXNlIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblxuXHRcdC8qKlxuXHRcdCAqIExvZ2xldmVsXG5cdFx0ICpcblx0XHQgKiBAdHlwZSB7aW50ZWdlcn1cblx0XHQgKi9cblx0XHR0aGlzLmxvZ2xldmVsID0gT0ZGO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgbG9nIGZ1bmN0aW9uLiB0aGlzIG1ldGhvZCBtdXN0IGJlXG5cdCAqIG92ZXJ3cml0dGVuIGJ5IGRlcml2ZWQgaGFuZGxlcnMgd2l0aCB0aGVpciBvd24gbG9naWMuXG5cdCAqXG5cdCAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkYgIChBTEwgPSAweGZmO09GRiA9IDB4MDA7XG5cdCAqXG5cdCAqIEBwYXJhbSB7TG9nRW50cnl9IGVudHJ5XG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRsb2coZW50cnkpIHtcblx0XHR2YWxpZGF0ZUluc3RhbmNlKGVudHJ5LCBMb2dFbnRyeSk7XG5cblx0XHRpZiAodGhpcy5sb2dsZXZlbCA8IGVudHJ5LmdldExvZ0xldmVsKCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBzZXQgbG9nbGV2ZWxcblx0ICpcblx0ICogQHBhcmFtIHtpbnRlZ2VyfSBsb2dsZXZlbFxuXHQgKiBAcmV0dXJuIHtIYW5kbGVyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdHNldExvZ0xldmVsKGxvZ2xldmVsKSB7XG5cdFx0dmFsaWRhdGVJbnRlZ2VyKGxvZ2xldmVsKTtcblx0XHR0aGlzLmxvZ2xldmVsID0gbG9nbGV2ZWw7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogZ2V0IGxvZ2xldmVsXG5cdCAqXG5cdCAqIEByZXR1cm4ge2ludGVnZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0Z2V0TG9nTGV2ZWwoKSB7XG5cdFx0cmV0dXJuIHRoaXMubG9nbGV2ZWw7XG5cdH1cblxuXHQvKipcblx0ICogIFNldCBsb2cgbGV2ZWwgdG8gQWxsXG5cdCAqXG5cdCAqIEByZXR1cm4ge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0QWxsKCkge1xuXHRcdHRoaXMuc2V0TG9nTGV2ZWwoQUxMKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgbG9nIGxldmVsIHRvIFRyYWNlXG5cdCAqXG5cdCAqIEByZXR1cm4ge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0VHJhY2UoKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChUUkFDRSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGxvZyBsZXZlbCB0byBEZWJ1Z1xuXHQgKlxuXHQgKiBAcmV0dXJuIHtIYW5kbGVyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdHNldERlYnVnKCkge1xuXHRcdHRoaXMuc2V0TG9nTGV2ZWwoREVCVUcpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBsb2cgbGV2ZWwgdG8gSW5mb1xuXHQgKlxuXHQgKiBAcmV0dXJuIHtIYW5kbGVyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdHNldEluZm8oKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChJTkZPKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgbG9nIGxldmVsIHRvIFdhcm5cblx0ICpcblx0ICogQHJldHVybiB7dW5kZWZpbmVkfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdHNldFdhcm4oKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChXQVJOKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgbG9nIGxldmVsIHRvIEVycm9yXG5cdCAqXG5cdCAqIEByZXR1cm4ge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0RXJyb3IoKSB7XG5cdFx0dGhpcy5zZXRMb2dMZXZlbChFUlJPUik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IGxvZyBsZXZlbCB0byBGYXRhbFxuXHQgKlxuXHQgKiBAcmV0dXJuIHtIYW5kbGVyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdHNldEZhdGFsKCkge1xuXHRcdHRoaXMuc2V0TG9nTGV2ZWwoRkFUQUwpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCBsb2cgbGV2ZWwgdG8gT2ZmXG5cdCAqXG5cdCAqIEByZXR1cm4ge0hhbmRsZXJ9XG5cdCAqIEBzaW5jZSAxLjUuMFxuXHQgKi9cblx0c2V0T2ZmKCkge1xuXHRcdHRoaXMuc2V0TG9nTGV2ZWwoT0ZGKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW50ZWdlciB9IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgTG9nRW50cnkgfTtcblxuLyoqXG4gKiBBIGxvZyBlbnRyeSBmb3IgdGhlIGxvZ2dlclxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICovXG5jbGFzcyBMb2dFbnRyeSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtJbnRlZ2VyfSBsb2dsZXZlbFxuXHQgKiBAcGFyYW0gey4uLip9IGFyZ3Ncblx0ICovXG5cdGNvbnN0cnVjdG9yKGxvZ2xldmVsLCAuLi5hcmdzKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR2YWxpZGF0ZUludGVnZXIobG9nbGV2ZWwpO1xuXG5cdFx0dGhpcy5sb2dsZXZlbCA9IGxvZ2xldmVsO1xuXHRcdHRoaXMuYXJndW1lbnRzID0gYXJncztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtpbnRlZ2Vycn1cblx0ICovXG5cdGdldExvZ0xldmVsKCkge1xuXHRcdHJldHVybiB0aGlzLmxvZ2xldmVsO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm4ge2FycmF5fVxuXHQgKi9cblx0Z2V0QXJndW1lbnRzKCkge1xuXHRcdHJldHVybiB0aGlzLmFyZ3VtZW50cztcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEhhbmRsZXIgfSBmcm9tIFwiLi9oYW5kbGVyLm1qc1wiO1xuaW1wb3J0IHsgTG9nRW50cnkgfSBmcm9tIFwiLi9sb2dlbnRyeS5tanNcIjtcblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHtcblx0dmFsaWRhdGVJbnRlZ2VyLFxuXHR2YWxpZGF0ZU9iamVjdCxcblx0dmFsaWRhdGVTdHJpbmcsXG59IGZyb20gXCIuLi90eXBlcy92YWxpZGF0ZS5tanNcIjtcblxuZXhwb3J0IHsgTG9nZ2VyLCBBTEwsIFRSQUNFLCBERUJVRywgSU5GTywgV0FSTiwgRVJST1IsIEZBVEFMLCBPRkYgfTtcblxuLyoqXG4gKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBBTEwgPSAyNTU7XG4vKipcbiAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkZcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IFRSQUNFID0gNjQ7XG4vKipcbiAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkZcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IERFQlVHID0gMzI7XG4vKipcbiAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkZcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IElORk8gPSAxNjtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgV0FSTiA9IDg7XG4vKipcbiAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkZcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKi9cbmNvbnN0IEVSUk9SID0gNDtcbi8qKlxuICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRlxuICogQHR5cGUge251bWJlcn1cbiAqL1xuY29uc3QgRkFUQUwgPSAyO1xuLyoqXG4gKiBBTEwgPiBUUkFDRSA+IERFQlVHID4gSU5GTyA+IFdBUk4gPiBFUlJPUiA+IEZBVEFMID4gT0ZGXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5jb25zdCBPRkYgPSAwO1xuXG4vKipcbiAqIFRoZSBsb2dnZXIgaXMgYSBjbGFzcyB0aGF0IHRha2VzIGNhcmUgb2YgbG9nZ2luZy5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjUuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgTG9nZ2VyIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmhhbmRsZXIgPSBuZXcgU2V0KCk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtIYW5kbGVyfSBoYW5kbGVyXG5cdCAqIEByZXR1cm4ge0xvZ2dlcn1cblx0ICogQHRocm93cyB7RXJyb3J9IHRoZSBoYW5kbGVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgSGFuZGxlclxuXHQgKi9cblx0YWRkSGFuZGxlcihoYW5kbGVyKSB7XG5cdFx0dmFsaWRhdGVPYmplY3QoaGFuZGxlcik7XG5cdFx0aWYgKCEoaGFuZGxlciBpbnN0YW5jZW9mIEhhbmRsZXIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgaGFuZGxlciBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIEhhbmRsZXJcIik7XG5cdFx0fVxuXG5cdFx0dGhpcy5oYW5kbGVyLmFkZChoYW5kbGVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hhbmRsZXJ9IGhhbmRsZXJcblx0ICogQHJldHVybiB7TG9nZ2VyfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGhhbmRsZXIgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBIYW5kbGVyXG5cdCAqL1xuXHRyZW1vdmVIYW5kbGVyKGhhbmRsZXIpIHtcblx0XHR2YWxpZGF0ZU9iamVjdChoYW5kbGVyKTtcblx0XHRpZiAoIShoYW5kbGVyIGluc3RhbmNlb2YgSGFuZGxlcikpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBoYW5kbGVyIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgSGFuZGxlclwiKTtcblx0XHR9XG5cblx0XHR0aGlzLmhhbmRsZXIuZGVsZXRlKGhhbmRsZXIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGxvZyBUcmFjZSBtZXNzYWdlXG5cdCAqXG5cdCAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkYgIChBTEwgPSAweGZmO09GRiA9IDB4MDA7XG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYXJndW1lbnRzXG5cdCAqIEByZXR1cm4ge0xvZ2dlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRsb2dUcmFjZSguLi5hcmdzKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdFwiKTtcblx0XHR9XG5cblx0XHR0cmlnZ2VyTG9nLmFwcGx5KHRoaXMsIFtUUkFDRSwgLi4uYXJnc10pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGxvZyBEZWJ1ZyBtZXNzYWdlXG5cdCAqXG5cdCAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkYgIChBTEwgPSAweGZmO09GRiA9IDB4MDA7XG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYXJndW1lbnRzXG5cdCAqIEByZXR1cm4ge0xvZ2dlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRsb2dEZWJ1ZyguLi5hcmdzKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdFwiKTtcblx0XHR9XG5cblx0XHR0cmlnZ2VyTG9nLmFwcGx5KHRoaXMsIFtERUJVRywgLi4uYXJnc10pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGxvZyBJbmZvIG1lc3NhZ2Vcblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhcmd1bWVudHNcblx0ICogQHJldHVybiB7TG9nZ2VyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdGxvZ0luZm8oLi4uYXJncykge1xuXHRcdGlmICh0eXBlb2YgYXJncyAhPT0gXCJvYmplY3RcIiB8fCBhcmdzWzBdID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3RcIik7XG5cdFx0fVxuXG5cdFx0dHJpZ2dlckxvZy5hcHBseSh0aGlzLCBbSU5GTywgLi4uYXJnc10pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGxvZyBXYXJuIG1lc3NhZ2Vcblx0ICpcblx0ICogQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcblx0ICpcblx0ICogQHBhcmFtIHsqfSBhcmd1bWVudHNcblx0ICogQHJldHVybiB7TG9nZ2VyfVxuXHQgKiBAc2luY2UgMS41LjBcblx0ICovXG5cdGxvZ1dhcm4oLi4uYXJncykge1xuXHRcdGlmICh0eXBlb2YgYXJncyAhPT0gXCJvYmplY3RcIiB8fCBhcmdzWzBdID09PSBudWxsKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3RcIik7XG5cdFx0fVxuXG5cdFx0dHJpZ2dlckxvZy5hcHBseSh0aGlzLCBbV0FSTiwgLi4uYXJnc10pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGxvZyBFcnJvciBtZXNzYWdlXG5cdCAqXG5cdCAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkYgIChBTEwgPSAweGZmO09GRiA9IDB4MDA7XG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYXJndW1lbnRzXG5cdCAqIEByZXR1cm4ge0xvZ2dlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRsb2dFcnJvciguLi5hcmdzKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdFwiKTtcblx0XHR9XG5cblx0XHR0cmlnZ2VyTG9nLmFwcGx5KHRoaXMsIFtFUlJPUiwgLi4uYXJnc10pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIGxvZyBGYXRhbCBtZXNzYWdlXG5cdCAqXG5cdCAqIEFMTCA+IFRSQUNFID4gREVCVUcgPiBJTkZPID4gV0FSTiA+IEVSUk9SID4gRkFUQUwgPiBPRkYgIChBTEwgPSAweGZmO09GRiA9IDB4MDA7XG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gYXJndW1lbnRzXG5cdCAqIEByZXR1cm4ge0xvZ2dlcn1cblx0ICogQHNpbmNlIDEuNS4wXG5cdCAqL1xuXHRsb2dGYXRhbCguLi5hcmdzKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiIHx8IGFyZ3NbMF0gPT09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdFwiKTtcblx0XHR9XG5cblx0XHR0cmlnZ2VyTG9nLmFwcGx5KHRoaXMsIFtGQVRBTCwgLi4uYXJnc10pO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIExhYmVsc1xuXHQgKlxuXHQgKiBAcGFyYW0ge2ludGVnZXJ9IGxldmVsXG5cdCAqIEByZXR1cm4ge3N0cmluZ31cblx0ICovXG5cdGdldExhYmVsKGxldmVsKSB7XG5cdFx0dmFsaWRhdGVJbnRlZ2VyKGxldmVsKTtcblxuXHRcdGlmIChsZXZlbCA9PT0gQUxMKSByZXR1cm4gXCJBTExcIjtcblx0XHRpZiAobGV2ZWwgPT09IFRSQUNFKSByZXR1cm4gXCJUUkFDRVwiO1xuXHRcdGlmIChsZXZlbCA9PT0gREVCVUcpIHJldHVybiBcIkRFQlVHXCI7XG5cdFx0aWYgKGxldmVsID09PSBJTkZPKSByZXR1cm4gXCJJTkZPXCI7XG5cdFx0aWYgKGxldmVsID09PSBXQVJOKSByZXR1cm4gXCJXQVJOXCI7XG5cdFx0aWYgKGxldmVsID09PSBFUlJPUikgcmV0dXJuIFwiRVJST1JcIjtcblx0XHRpZiAobGV2ZWwgPT09IEZBVEFMKSByZXR1cm4gXCJGQVRBTFwiO1xuXHRcdGlmIChsZXZlbCA9PT0gT0ZGKSByZXR1cm4gXCJPRkZcIjtcblxuXHRcdHJldHVybiBcInVua25vd25cIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBMZXZlbFxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGFiZWxcblx0ICogQHJldHVybiB7aW50ZWdlcn1cblx0ICovXG5cdGdldExldmVsKGxhYmVsKSB7XG5cdFx0dmFsaWRhdGVTdHJpbmcobGFiZWwpO1xuXG5cdFx0aWYgKGxhYmVsID09PSBcIkFMTFwiKSByZXR1cm4gQUxMO1xuXHRcdGlmIChsYWJlbCA9PT0gXCJUUkFDRVwiKSByZXR1cm4gVFJBQ0U7XG5cdFx0aWYgKGxhYmVsID09PSBcIkRFQlVHXCIpIHJldHVybiBERUJVRztcblx0XHRpZiAobGFiZWwgPT09IFwiSU5GT1wiKSByZXR1cm4gSU5GTztcblx0XHRpZiAobGFiZWwgPT09IFwiV0FSTlwiKSByZXR1cm4gV0FSTjtcblx0XHRpZiAobGFiZWwgPT09IFwiRVJST1JcIikgcmV0dXJuIEVSUk9SO1xuXHRcdGlmIChsYWJlbCA9PT0gXCJGQVRBTFwiKSByZXR1cm4gRkFUQUw7XG5cdFx0aWYgKGxhYmVsID09PSBcIk9GRlwiKSByZXR1cm4gT0ZGO1xuXG5cdFx0cmV0dXJuIDA7XG5cdH1cbn1cblxuLyoqXG4gKiBMb2cgdHJpZ2dlcm5cbiAqXG4gKiBAcGFyYW0ge2ludGVnZXJ9IGxvZ2xldmVsXG4gKiBAcGFyYW0geyp9IGFyZ3NcbiAqIEByZXR1cm4ge0xvZ2dlcn1cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHRyaWdnZXJMb2cobG9nbGV2ZWwsIC4uLmFyZ3MpIHtcblx0Zm9yIChjb25zdCBoYW5kbGVyIG9mIHRoaXMuaGFuZGxlcikge1xuXHRcdGhhbmRsZXIubG9nKG5ldyBMb2dFbnRyeShsb2dsZXZlbCwgYXJncykpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCI7XG5pbXBvcnQge0NvbnNvbGVIYW5kbGVyfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2xvZ2dpbmcvaGFuZGxlci9jb25zb2xlLm1qc1wiO1xuaW1wb3J0IHtMb2dFbnRyeX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9sb2dnaW5nL2xvZ2VudHJ5Lm1qc1wiO1xuaW1wb3J0IHtUUkFDRSwgV0FSTiwgREVCVUcsIEVSUk9SLCBGQVRBTCwgSU5GT30gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9sb2dnaW5nL2xvZ2dlci5tanNcIjtcblxuZGVzY3JpYmUoJ0xvZ2dpbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnQ29uc29sZUhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBjcmVhdGUgQ29uc29sZUhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbnNvbGVIYW5kbGVyKCkpLnRvLmJlLmluc3RhbmNlb2YoQ29uc29sZUhhbmRsZXIpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbG9nIHRvIGNvbnNvbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbnNvbGVIYW5kbGVyKCkuc2V0QWxsKCkubG9nKG5ldyBMb2dFbnRyeShGQVRBTCwgWzEsIHRydWUsICdmYXRhbCddKSkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbG9nIHRvIGNvbnNvbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbnNvbGVIYW5kbGVyKCkuc2V0QWxsKCkubG9nKG5ldyBMb2dFbnRyeShUUkFDRSwgWzEsIHRydWUsICd0cmFjZSddKSkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgbG9nIHRvIGNvbnNvbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IENvbnNvbGVIYW5kbGVyKCkuc2V0QWxsKCkubG9nKG5ldyBMb2dFbnRyeShXQVJOLCBbMSwgdHJ1ZSwgJ3dhcm4nXSkpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGxvZyB0byBjb25zb2xlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb25zb2xlSGFuZGxlcigpLnNldEFsbCgpLmxvZyhuZXcgTG9nRW50cnkoREVCVUcsIFsxLCB0cnVlLCAnZGVidWcnXSkpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGxvZyB0byBjb25zb2xlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb25zb2xlSGFuZGxlcigpLnNldEFsbCgpLmxvZyhuZXcgTG9nRW50cnkoRVJST1IsIFsxLCB0cnVlLCAnZXJyb3InXSkpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGxvZyB0byBjb25zb2xlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBDb25zb2xlSGFuZGxlcigpLnNldEFsbCgpLmxvZyhuZXcgTG9nRW50cnkoSU5GTywgWzEsIHRydWUsICdpbmZvJ10pKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0xvZ2dlciwgT0ZGLCBBTEwsIFRSQUNFLCBERUJVRywgSU5GTywgV0FSTiwgRVJST1IsIEZBVEFMfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2xvZ2dpbmcvbG9nZ2VyLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdMb2dnaW5nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ25ldyBMb2dnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgTG9nZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2dnZXIoKSkudG8uaW5zdGFuY2VPZihMb2dnZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdMb2dnZXIubG9nVHJhY2UoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBMb2dnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpLmxvZ1RyYWNlKFwidGVzdFwiKSkudG8uaW5zdGFuY2VPZihMb2dnZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBcbiAgICBkZXNjcmliZSgnTG9nZ2VyLmxvZ0RlYnVnKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgTG9nZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2dnZXIoKS5sb2dEZWJ1ZyhcInRlc3RcIikpLnRvLmluc3RhbmNlT2YoTG9nZ2VyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgXG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5sb2dJbmZvKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgTG9nZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2dnZXIoKS5sb2dJbmZvKFwidGVzdFwiKSkudG8uaW5zdGFuY2VPZihMb2dnZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBcbiAgICBkZXNjcmliZSgnTG9nZ2VyLmxvZ1dhcm4oKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBMb2dnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpLmxvZ1dhcm4oXCJ0ZXN0XCIpKS50by5pbnN0YW5jZU9mKExvZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIFxuICAgIGRlc2NyaWJlKCdMb2dnZXIubG9nRXJyb3IoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBMb2dnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IExvZ2dlcigpLmxvZ0Vycm9yKFwidGVzdFwiKSkudG8uaW5zdGFuY2VPZihMb2dnZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBcbiAgICBkZXNjcmliZSgnTG9nZ2VyLmxvZ0ZhdGFsKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgTG9nZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2dnZXIoKS5sb2dGYXRhbChcInRlc3RcIikpLnRvLmluc3RhbmNlT2YoTG9nZ2VyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgXG4gICAgZGVzY3JpYmUoJ0xvZ2dlci5nZXRMZXZlbCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBbXG4gICAgICAgICAgICBbJ0FMTCcsIEFMTF0sXG4gICAgICAgICAgICBbJ1RSQUNFJywgVFJBQ0VdLFxuICAgICAgICAgICAgWydERUJVRycsIERFQlVHXSxcbiAgICAgICAgICAgIFsnSU5GTycsIElORk9dLFxuICAgICAgICAgICAgWydXQVJOJywgV0FSTl0sXG4gICAgICAgICAgICBbJ0VSUk9SJywgRVJST1JdLFxuICAgICAgICAgICAgWydGQVRBTCcsIEZBVEFMXSxcbiAgICAgICAgICAgIFsnT0ZGJywgT0ZGXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdChhICsgJyBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2dnZXIoKS5nZXRMZXZlbChhKSkudG8uYmUuZXF1YWxzKGIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdMb2dnZXIuZ2V0TGFiZWwoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgW1xuICAgICAgICAgICAgWydBTEwnLCBBTExdLFxuICAgICAgICAgICAgWydUUkFDRScsIFRSQUNFXSxcbiAgICAgICAgICAgIFsnREVCVUcnLCBERUJVR10sXG4gICAgICAgICAgICBbJ0lORk8nLCBJTkZPXSxcbiAgICAgICAgICAgIFsnV0FSTicsIFdBUk5dLFxuICAgICAgICAgICAgWydFUlJPUicsIEVSUk9SXSxcbiAgICAgICAgICAgIFsnRkFUQUwnLCBGQVRBTF0sXG4gICAgICAgICAgICBbJ09GRicsIE9GRl0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoYSArICcgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nZ2VyKCkuZ2V0TGFiZWwoYikpLnRvLmJlLmVxdWFscyhhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIjtcbmltcG9ydCB7QUxMLCBUUkFDRSwgREVCVUcsIElORk8sIFdBUk4sIEVSUk9SLCBGQVRBTCwgT0ZGfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2xvZ2dpbmcvbG9nZ2VyLm1qc1wiO1xuaW1wb3J0IHtIYW5kbGVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2xvZ2dpbmcvaGFuZGxlci5tanNcIjtcbmltcG9ydCB7TG9nRW50cnl9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvbG9nZ2luZy9sb2dlbnRyeS5tanNcIjtcblxuZGVzY3JpYmUoJ0xvZ2dpbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXRMb2dMZXZlbCgpLmdldExvZ0xldmVsKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW0FMTF0sIFtUUkFDRV0sIFtERUJVR10sIFtJTkZPXSwgW1dBUk5dLCBbRVJST1JdLCBbRkFUQUxdLCBbT0ZGXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCd0aGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiB0aGUgc2V0IHZhbHVlICcgKyBhLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuc2V0TG9nTGV2ZWwoYSkuZ2V0TG9nTGV2ZWwoKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdIYW5kbGVyLmxvZygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5sb2cobmV3IExvZ0VudHJ5KDAsIFwidGVzdFwiKSkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIubG9nKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IGhhbmRsZXI7XG5cbiAgICAgICAgY2xhc3MgVGVzdEhhbmRsZXIgZXh0ZW5kcyBIYW5kbGVyIHtcbiAgICAgICAgICAgIGxvZyhlbnRyeSkge1xuICAgICAgICAgICAgICAgIHN1cGVyLmxvZyhlbnRyeSk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGhhbmRsZXIgPSBuZXcgVGVzdEhhbmRsZXIoKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5sb2cobmV3IExvZ0VudHJ5KDAsIFwidGVzdFwiKSkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcubG9nKCkgd2l0aCBsb2dsZXZlbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgVGVzdEhhbmRsZXI7XG5cbiAgICAgICAgYmVmb3JlKCgpID0+IHtcbiAgICAgICAgICAgIFRlc3RIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBIYW5kbGVyIHtcbiAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxscyA9IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbG9nKGxvZ2xldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdXBlci5sb2cobG9nbGV2ZWwpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxzKytcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIFsgLy8gQUxMID4gVFJBQ0UgPiBERUJVRyA+IElORk8gPiBXQVJOID4gRVJST1IgPiBGQVRBTCA+IE9GRiAgKEFMTCA9IDB4ZmY7T0ZGID0gMHgwMDtcbiAgICAgICAgICAgIFtBTEwsIDZdLFxuICAgICAgICAgICAgW1RSQUNFLCA2XSxcbiAgICAgICAgICAgIFtERUJVRywgNV0sXG4gICAgICAgICAgICBbSU5GTywgNF0sXG4gICAgICAgICAgICBbV0FSTiwgM10sXG4gICAgICAgICAgICBbRVJST1IsIDJdLFxuICAgICAgICAgICAgW0ZBVEFMLCAxXSxcbiAgICAgICAgICAgIFtPRkYsIDBdXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmxvZygnICsgYSArICcpIHNob3VsZCBsb2cgJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgaGFuZGxlciA9IG5ldyBUZXN0SGFuZGxlcigpLnNldExvZ0xldmVsKGEpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIubG9nKG5ldyBMb2dFbnRyeShUUkFDRSkpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIubG9nKG5ldyBMb2dFbnRyeShERUJVRykpO1xuICAgICAgICAgICAgICAgIGhhbmRsZXIubG9nKG5ldyBMb2dFbnRyeShJTkZPKSk7XG4gICAgICAgICAgICAgICAgaGFuZGxlci5sb2cobmV3IExvZ0VudHJ5KFdBUk4pKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmxvZyhuZXcgTG9nRW50cnkoRVJST1IpKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmxvZyhuZXcgTG9nRW50cnkoRkFUQUwpKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChoYW5kbGVyLmNhbGxzKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0TG9nTGV2ZWwoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuc2V0TG9nTGV2ZWwoQUxMKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnSGFuZGxlci5nZXRMb2dMZXZlbCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnbmV3IGxvZ2dlciBzaG91bGQgYmUgMCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLmdldExvZ0xldmVsKCkpLnRvLmJlLmVxdWFsKE9GRik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0QWxsKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCcgc2hvdWxkIGluc3RhbmNlb2YgSGFuZGxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSGFuZGxlcigpLnNldEFsbCgpKS50by5pbnN0YW5jZU9mKEhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXRUcmFjZSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnbmV3IGxvZ2dlciBzaG91bGQgaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuc2V0VHJhY2UoKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0RGVidWcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJyBzaG91bGQgaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuc2V0RGVidWcoKSkudG8uaW5zdGFuY2VPZihIYW5kbGVyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgZGVzY3JpYmUoJ0hhbmRsZXIuc2V0SW5mbygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRJbmZvKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGRlc2NyaWJlKCdIYW5kbGVyLnNldFdhcm4oKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJyBzaG91bGQgaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuc2V0V2FybigpKS50by5pbnN0YW5jZU9mKEhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXRFcnJvcigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRFcnJvcigpKS50by5pbnN0YW5jZU9mKEhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXRGYXRhbCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIEhhbmRsZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEhhbmRsZXIoKS5zZXRGYXRhbCgpKS50by5pbnN0YW5jZU9mKEhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBkZXNjcmliZSgnSGFuZGxlci5zZXRPZmYoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBIYW5kbGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBIYW5kbGVyKCkuc2V0T2ZmKCkpLnRvLmluc3RhbmNlT2YoSGFuZGxlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0xvZ0VudHJ5fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2xvZ2dpbmcvbG9nZW50cnkubWpzXCI7XG5cblxuZGVzY3JpYmUoJ0xvZycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCduZXcgTG9nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIExvZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgTG9nRW50cnkoMSwgJ2EnLCAnYicsICdjJykpLnRvLmluc3RhbmNlT2YoTG9nRW50cnkpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdMb2cubG9nbGV2ZWwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IGxvZztcblxuICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxvZyA9IG5ldyBMb2dFbnRyeSgxLCBmYWxzZSwgJ3Rlc3QnLCA5OSwge2E6IHRydWV9KTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBsb2dsZXZlbCAxJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGxvZy5nZXRMb2dMZXZlbCgpKS50by5iZS5lcXVhbCgxKVxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhcmd1bWVudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobG9nLmdldEFyZ3VtZW50cygpKS50by5oYXZlLmRlZXAubWVtYmVycyhbZmFsc2UsICd0ZXN0JywgOTksIHthOiB0cnVlfV0pXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG59KTsiLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNJbnRlZ2VyLCBpc1N0cmluZywgaXNPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBCYXNlV2l0aE9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZXdpdGhvcHRpb25zLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZVF1ZXVlIH0gZnJvbSBcIi4uL3R5cGVzL29ic2VydmFibGVxdWV1ZS5tanNcIjtcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tIFwiLi93ZWJjb25uZWN0L21lc3NhZ2UubWpzXCI7XG5pbXBvcnQgeyBnZXRHbG9iYWxGdW5jdGlvbiB9IGZyb20gXCIuLi90eXBlcy9nbG9iYWwubWpzXCI7XG5cbmV4cG9ydCB7IFdlYkNvbm5lY3QgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgcmVjZWl2ZVF1ZXVlU3ltYm9sID0gU3ltYm9sKFwicmVjZWl2ZVF1ZXVlXCIpO1xuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc2VuZFF1ZXVlU3ltYm9sID0gU3ltYm9sKFwic2VuZFF1ZXVlXCIpO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICpcbiAqIGhpbnQ6IHRoaXMgbmFtZSBpcyB1c2VkIGluIHRoZSB0ZXN0cy4gaWYgeW91IHdhbnQgdG8gY2hhbmdlIGl0LCBwbGVhc2UgY2hhbmdlIGl0IGluIHRoZSB0ZXN0cyBhcyB3ZWxsLlxuICovXG5jb25zdCBjb25uZWN0aW9uU3ltYm9sID0gU3ltYm9sKFwiY29ubmVjdGlvblwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3QgbWFudWFsQ2xvc2VTeW1ib2wgPSBTeW1ib2woXCJtYW51YWxDbG9zZVwiKTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjQ1NS5odG1sI3NlY3Rpb24tNy40LjFcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbmNvbnN0IGNvbm5lY3Rpb25TdGF0dXNDb2RlID0ge1xuXHQxMDAwOiBcIk5vcm1hbCBjbG9zdXJlXCIsXG5cdDEwMDE6IFwiR29pbmcgYXdheVwiLFxuXHQxMDAyOiBcIlByb3RvY29sIGVycm9yXCIsXG5cdDEwMDM6IFwiVW5zdXBwb3J0ZWQgZGF0YVwiLFxuXHQxMDA0OiBcIlJlc2VydmVkXCIsXG5cdDEwMDU6IFwiTm8gc3RhdHVzIGNvZGVcIixcblx0MTAwNjogXCJDb25uZWN0aW9uIGNsb3NlZCBhYm5vcm1hbGx5XCIsXG5cdDEwMDc6IFwiSW52YWxpZCBmcmFtZSBwYXlsb2FkIGRhdGFcIixcblx0MTAwODogXCJQb2xpY3kgdmlvbGF0aW9uXCIsXG5cdDEwMDk6IFwiVGhlIE1lc3NhZ2UgaXMgdG9vIGJpZ1wiLFxuXHQxMDEwOiBcIk1hbmRhdG9yeSBleHRlbnNpb25cIixcblx0MTAxMTogXCJJbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIixcblx0MTAxNTogXCJUTFMgaGFuZHNoYWtlXCIsXG59O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdGhpcyB7V2ViQ29ubmVjdH1cbiAqIEB0aHJvd3Mge0Vycm9yfSBObyB1cmwgZGVmaW5lZCBmb3Igd2Vic29ja2V0IGRhdGFzb3VyY2UuXG4gKi9cbmZ1bmN0aW9uIGNvbm5lY3RTZXJ2ZXIocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdGNvbnN0IHNlbGYgPSB0aGlzO1xuXG5cdGNvbnN0IHVybCA9IHNlbGYuZ2V0T3B0aW9uKFwidXJsXCIpO1xuXHRpZiAoIXVybCkge1xuXHRcdHJlamVjdChcIk5vIHVybCBkZWZpbmVkIGZvciB3ZWIgY29ubmVjdC5cIik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0bGV0IHByb21pc2VBbGxyZWR5UmVzb2x2ZWQgPSBmYWxzZTtcblxuXHRsZXQgY29ubmVjdGlvblRpbWVvdXQgPSBzZWxmLmdldE9wdGlvbihcImNvbm5lY3Rpb24udGltZW91dFwiKTtcblx0aWYgKCFpc0ludGVnZXIoY29ubmVjdGlvblRpbWVvdXQpIHx8IGNvbm5lY3Rpb25UaW1lb3V0IDwgMTAwKSB7XG5cdFx0Y29ubmVjdGlvblRpbWVvdXQgPSA1MDAwO1xuXHR9XG5cblx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0aWYgKHByb21pc2VBbGxyZWR5UmVzb2x2ZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0cmVqZWN0KG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gdGltZW91dFwiKSk7XG5cdH0sIGNvbm5lY3Rpb25UaW1lb3V0KTtcblxuXHRsZXQgcmVjb25uZWN0VGltZW91dCA9IHNlbGYuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi5yZWNvbm5lY3QudGltZW91dFwiKTtcblx0aWYgKCFpc0ludGVnZXIocmVjb25uZWN0VGltZW91dCkgfHwgcmVjb25uZWN0VGltZW91dCA8IDEwMDApXG5cdFx0cmVjb25uZWN0VGltZW91dCA9IDEwMDA7XG5cdGxldCByZWNvbm5lY3RBdHRlbXB0cyA9IHNlbGYuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi5yZWNvbm5lY3QuYXR0ZW1wdHNcIik7XG5cdGlmICghaXNJbnRlZ2VyKHJlY29ubmVjdEF0dGVtcHRzKSB8fCByZWNvbm5lY3RBdHRlbXB0cyA8IDEpXG5cdFx0cmVjb25uZWN0QXR0ZW1wdHMgPSAxO1xuXHRsZXQgcmVjb25uZWN0RW5hYmxlZCA9IHNlbGYuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi5yZWNvbm5lY3QuZW5hYmxlZFwiKTtcblx0aWYgKHJlY29ubmVjdEVuYWJsZWQgIT09IHRydWUpIHJlY29ubmVjdEVuYWJsZWQgPSBmYWxzZTtcblxuXHRzZWxmW21hbnVhbENsb3NlU3ltYm9sXSA9IGZhbHNlO1xuXHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIrKztcblxuXHRpZiAoXG5cdFx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQgJiZcblx0XHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5yZWFkeVN0YXRlIDwgMlxuXHQpIHtcblx0XHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5jbG9zZSgpO1xuXHR9XG5cdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0ID0gbnVsbDtcblxuXHRjb25zdCBXZWJTb2NrZXQgPSBnZXRHbG9iYWxGdW5jdGlvbihcIldlYlNvY2tldFwiKTtcblx0aWYgKCFXZWJTb2NrZXQpIHtcblx0XHRyZWplY3QobmV3IEVycm9yKFwiV2ViU29ja2V0IGlzIG5vdCBhdmFpbGFibGVcIikpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0ID0gbmV3IFdlYlNvY2tldCh1cmwpO1xuXG5cdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldmVudCkge1xuXHRcdGlmIChldmVudC5kYXRhIGluc3RhbmNlb2YgQmxvYikge1xuXHRcdFx0Y29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblx0XHRcdHJlYWRlci5hZGRFdmVudExpc3RlbmVyKFwibG9hZGVuZFwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHNlbGZbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5hZGQobmV3IE1lc3NhZ2UocmVhZGVyLnJlc3VsdCkpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZWFkZXIucmVhZEFzVGV4dChuZXcgTWVzc2FnZShldmVudC5kYXRhKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGZbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5hZGQoTWVzc2FnZS5mcm9tSlNPTihldmVudC5kYXRhKSk7XG5cdFx0fVxuXHR9O1xuXG5cdHNlbGZbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0Lm9ub3BlbiA9IGZ1bmN0aW9uICgpIHtcblx0XHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIgPSAwO1xuXHRcdGlmICh0eXBlb2YgcmVzb2x2ZSA9PT0gXCJmdW5jdGlvblwiICYmICFwcm9taXNlQWxscmVkeVJlc29sdmVkKSB7XG5cdFx0XHRwcm9taXNlQWxscmVkeVJlc29sdmVkID0gdHJ1ZTtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9XG5cdH07XG5cblx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQuY2xvc2UgPSBmdW5jdGlvbiAoZXZlbnQpIHtcblx0XHRpZiAoc2VsZlttYW51YWxDbG9zZVN5bWJvbF0pIHtcblx0XHRcdHNlbGZbbWFudWFsQ2xvc2VTeW1ib2xdID0gZmFsc2U7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0cmVjb25uZWN0RW5hYmxlZCAmJlxuXHRcdFx0dGhpc1tjb25uZWN0aW9uU3ltYm9sXS5yZWNvbm5lY3RDb3VudGVyIDwgcmVjb25uZWN0QXR0ZW1wdHNcblx0XHQpIHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRzZWxmLmNvbm5lY3QoKTtcblx0XHRcdH0sIHJlY29ubmVjdFRpbWVvdXQgKiB0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIpO1xuXHRcdH1cblx0fTtcblxuXHRzZWxmW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5vbmVycm9yID0gKGVycm9yKSA9PiB7XG5cdFx0aWYgKFxuXHRcdFx0cmVjb25uZWN0RW5hYmxlZCAmJlxuXHRcdFx0c2VsZltjb25uZWN0aW9uU3ltYm9sXS5yZWNvbm5lY3RDb3VudGVyIDwgcmVjb25uZWN0QXR0ZW1wdHNcblx0XHQpIHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRzZWxmLmNvbm5lY3QoKTtcblx0XHRcdH0sIHJlY29ubmVjdFRpbWVvdXQgKiB0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnJlY29ubmVjdENvdW50ZXIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAodHlwZW9mIHJlamVjdCA9PT0gXCJmdW5jdGlvblwiICYmICFwcm9taXNlQWxscmVkeVJlc29sdmVkKSB7XG5cdFx0XHRcdHByb21pc2VBbGxyZWR5UmVzb2x2ZWQgPSB0cnVlO1xuXHRcdFx0XHRyZWplY3QoZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBUaGUgUmVzdEFQSSBpcyBhIGNsYXNzIHRoYXQgZW5hYmxlcyBhIFJFU1QgQVBJIHNlcnZlci5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uL2V4YW1wbGUvbmV0L3dlYmNvbm5lY3QubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjEuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBMb2NhbFN0b3JhZ2UgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBhY2Nlc3MgdG8gZGF0YSBvYmplY3RzLlxuICovXG5jbGFzcyBXZWJDb25uZWN0IGV4dGVuZHMgQmFzZVdpdGhPcHRpb25zIHtcblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gb3B0aW9ucyBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgdGhlIHdlYmNvbm5lY3QuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0aWYgKGlzU3RyaW5nKG9wdGlvbnMpKSB7XG5cdFx0XHRvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfTtcblx0XHR9XG5cblx0XHRzdXBlcihvcHRpb25zKTtcblxuXHRcdHRoaXNbcmVjZWl2ZVF1ZXVlU3ltYm9sXSA9IG5ldyBPYnNlcnZhYmxlUXVldWUoKTtcblx0XHR0aGlzW3NlbmRRdWV1ZVN5bWJvbF0gPSBuZXcgT2JzZXJ2YWJsZVF1ZXVlKCk7XG5cblx0XHR0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdID0ge307XG5cdFx0dGhpc1tjb25uZWN0aW9uU3ltYm9sXS5zb2NrZXQgPSBudWxsO1xuXHRcdHRoaXNbY29ubmVjdGlvblN5bWJvbF0ucmVjb25uZWN0Q291bnRlciA9IDA7XG5cdFx0dGhpc1ttYW51YWxDbG9zZVN5bWJvbF0gPSBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Y29ubmVjdCgpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Y29ubmVjdFNlcnZlci5jYWxsKHRoaXMsIHJlc29sdmUsIHJlamVjdCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzQ29ubmVjdGVkKCkge1xuXHRcdHJldHVybiB0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdPy5zb2NrZXQ/LnJlYWR5U3RhdGUgPT09IDE7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvbmV0L3dlYmNvbm5lY3RcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHVybD11bmRlZmluZWQgRGVmaW5lcyB0aGUgcmVzb3VyY2UgdGhhdCB5b3Ugd2lzaCB0byBmZXRjaC5cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNvbm5lY3Rpb25cblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGNvbm5lY3Rpb24udGltZW91dD01MDAwIERlZmluZXMgdGhlIHRpbWVvdXQgZm9yIHRoZSBjb25uZWN0aW9uLlxuXHQgKiBAcHJvcGVydHkge051bWJlcn0gY29ubmVjdGlvbi5yZWNvbm5lY3QudGltZW91dCBUaGUgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIHRoZSByZWNvbm5lY3QuXG5cdCAqIEBwcm9wZXJ0eSB7TnVtYmVyfSBjb25uZWN0aW9uLnJlY29ubmVjdC5hdHRlbXB0cyBUaGUgbWF4aW11bSBudW1iZXIgb2YgcmVjb25uZWN0cy5cblx0ICogQHByb3BlcnR5IHtCb29sfSBjb25uZWN0aW9uLnJlY29ubmVjdC5lbmFibGVkIElmIHRoZSByZWNvbm5lY3QgaXMgZW5hYmxlZC5cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHVybDogdW5kZWZpbmVkLFxuXHRcdFx0Y29ubmVjdGlvbjoge1xuXHRcdFx0XHR0aW1lb3V0OiA1MDAwLFxuXHRcdFx0XHRyZWNvbm5lY3Q6IHtcblx0XHRcdFx0XHR0aW1lb3V0OiAxMDAwLFxuXHRcdFx0XHRcdGF0dGVtcHRzOiAxLFxuXHRcdFx0XHRcdGVuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24uXG5cdCAqXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbY29kZT0xMDAwXSBUaGUgY2xvc2UgY29kZS5cblx0ICogQHBhcmFtIHtTdHJpbmd9IFtyZWFzb249XCJcIl0gVGhlIGNsb3NlIHJlYXNvbi5cblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjQ1NS5odG1sI3NlY3Rpb24tNy40LjFcblx0ICovXG5cdGNsb3NlKHN0YXR1c0NvZGUsIHJlYXNvbikge1xuXHRcdGlmICghaXNJbnRlZ2VyKHN0YXR1c0NvZGUpIHx8IHN0YXR1c0NvZGUgPCAxMDAwIHx8IHN0YXR1c0NvZGUgPiA0OTk5KSB7XG5cdFx0XHRzdGF0dXNDb2RlID0gMTAwMDtcblx0XHR9XG5cdFx0aWYgKCFpc1N0cmluZyhyZWFzb24pKSB7XG5cdFx0XHRyZWFzb24gPSBcIlwiO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHR0aGlzW21hbnVhbENsb3NlU3ltYm9sXSA9IHRydWU7XG5cdFx0XHRcdGlmICh0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldCkge1xuXHRcdFx0XHRcdHRoaXNbY29ubmVjdGlvblN5bWJvbF0uc29ja2V0LmNsb3NlKHN0YXR1c0NvZGUsIHJlYXNvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdHJlamVjdChlcnJvcik7XG5cdFx0XHR9XG5cdFx0XHRyZXNvbHZlKCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUG9sbHMgdGhlIHJlY2VpdmUgcXVldWUgZm9yIG5ldyBtZXNzYWdlcy5cblx0ICpcblx0ICogQHJldHVybiB7TWVzc2FnZX1cblx0ICovXG5cdHBvbGwoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5wb2xsKCk7XG5cdH1cblxuXHQvKipcblx0ICogQXJlIHRoZXJlIGFueSBtZXNzYWdlcyBpbiB0aGUgcmVjZWl2ZSBxdWV1ZT9cblx0ICpcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGRhdGFSZWNlaXZlZCgpIHtcblx0XHRyZXR1cm4gIXRoaXNbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5pc0VtcHR5KCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IE1lc3NhZ2UgZnJvbSB0aGUgcmVjZWl2ZSBxdWV1ZSwgYnV0IGRvIG5vdCByZW1vdmUgaXQuXG5cdCAqXG5cdCAqIEByZXR1cm4ge09iamVjdH1cblx0ICovXG5cdHBlZWsoKSB7XG5cdFx0cmV0dXJuIHRoaXNbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5wZWVrKCk7XG5cdH1cblxuXHQvKipcblx0ICogQXR0YWNoIGEgbmV3IG9ic2VydmVyXG5cdCAqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge1Byb3h5T2JzZXJ2ZXJ9XG5cdCAqL1xuXHRhdHRhY2hPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHRoaXNbcmVjZWl2ZVF1ZXVlU3ltYm9sXS5hdHRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogRGV0YWNoIGEgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdGRldGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpc1tyZWNlaXZlUXVldWVTeW1ib2xdLmRldGFjaE9ic2VydmVyKG9ic2VydmVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge09ic2VydmVyfSBvYnNlcnZlclxuXHQgKiBAcmV0dXJuIHtib29sZWFufVxuXHQgKi9cblx0Y29udGFpbnNPYnNlcnZlcihvYnNlcnZlcikge1xuXHRcdHJldHVybiB0aGlzW3JlY2VpdmVRdWV1ZVN5bWJvbF0uY29udGFpbnNPYnNlcnZlcihvYnNlcnZlcik7XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtNZXNzYWdlfE9iamVjdH0gbWVzc2FnZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0c2VuZChtZXNzYWdlKSB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdGlmICh0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5yZWFkeVN0YXRlICE9PSAxKSB7XG5cdFx0XHRcdHJlamVjdChcInRoZSBzb2NrZXQgaXMgbm90IHJlYWR5XCIpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzW2Nvbm5lY3Rpb25TeW1ib2xdLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpKTtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9KTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IFF1ZXVlIH0gZnJvbSBcIi4vcXVldWUubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCwgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgT2JzZXJ2ZXJMaXN0IH0gZnJvbSBcIi4vb2JzZXJ2ZXJsaXN0Lm1qc1wiO1xuXG5leHBvcnQgeyBPYnNlcnZhYmxlUXVldWUgfTtcblxuLyoqXG4gKiBBbiBvYnNlcnZhYmxlIHF1ZXVlIGlzIGEgbGlzdCBvZiBpdGVtcyB0aGF0IGFyZSBwcm9jZXNzZWQgb25lIGFmdGVyIGFub3RoZXIgKGZpcnN0IGluLCBmaXJzdCBvdXQpLlxuICpcbiAqIGBRdWV1ZS5hZGQoKWAgYW5kIGBRdWV1ZS5jbGVhcigpYCBub3RpZnkgYWxsIG9ic2VydmVycy5cbiAqXG4gKiBAc2luY2UgMy4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBbiBvYnNlcnZhYmxlIFF1ZXVlIChGaWZvKVxuICovXG5jbGFzcyBPYnNlcnZhYmxlUXVldWUgZXh0ZW5kcyBRdWV1ZSB7XG5cdC8qKlxuXHQgKlxuXHQgKi9cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdG9ic2VydmVyczogbmV3IE9ic2VydmVyTGlzdCgpLFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvb2JzZXJ2YWJsZXF1ZXVlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZCBhIG5ldyBlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhlIHF1ZXVlLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1F1ZXVlfVxuXHQgKi9cblx0YWRkKHZhbHVlKSB7XG5cdFx0c3VwZXIuYWRkKHZhbHVlKTtcblx0XHR0aGlzLm5vdGlmeU9ic2VydmVycygpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0LyoqXG5cdCAqIHJlbW92ZSBhbGwgZW50cmllc1xuXHQgKlxuXHQgKiBAcmV0dXJuIHtRdWV1ZX1cblx0ICovXG5cdGNsZWFyKCkge1xuXHRcdHN1cGVyLmNsZWFyKCk7XG5cdFx0dGhpcy5ub3RpZnlPYnNlcnZlcnMoKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKiBBdHRhY2ggYSBuZXcgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdGF0dGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ub2JzZXJ2ZXJzLmF0dGFjaChvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogRGV0YWNoIGEgb2JzZXJ2ZXJcblx0ICpcblx0ICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXJcblx0ICogQHJldHVybiB7UHJveHlPYnNlcnZlcn1cblx0ICovXG5cdGRldGFjaE9ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0ub2JzZXJ2ZXJzLmRldGFjaChvYnNlcnZlcik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvKipcblx0ICogTm90aWZ5IGFsbCBvYnNlcnZlclxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0bm90aWZ5T2JzZXJ2ZXJzKCkge1xuXHRcdHJldHVybiB0aGlzW2ludGVybmFsU3ltYm9sXS5vYnNlcnZlcnMubm90aWZ5KHRoaXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7T2JzZXJ2ZXJ9IG9ic2VydmVyXG5cdCAqIEByZXR1cm4ge2Jvb2xlYW59XG5cdCAqL1xuXHRjb250YWluc09ic2VydmVyKG9ic2VydmVyKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdLm9ic2VydmVycy5jb250YWlucyhvYnNlcnZlcik7XG5cdH1cbn1cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2Jhc2UubWpzXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZU9iamVjdCwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IE1lc3NhZ2UgfTtcblxuY29uc3QgZGF0YVN5bWJvbCA9IFN5bWJvbChcIkBAZGF0YVwiKTtcblxuLyoqXG4gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBXZWJTb2NrZXQgbWVzc2FnZS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBNZXNzYWdlIGNsYXNzIGVuY2Fwc3VsYXRlcyBhIFdlYlNvY2tldCBtZXNzYWdlLlxuICovXG5jbGFzcyBNZXNzYWdlIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuXHQgKi9cblx0Y29uc3RydWN0b3IoZGF0YSkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpc1tkYXRhU3ltYm9sXSA9IHZhbGlkYXRlT2JqZWN0KGRhdGEpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHJhdyBtZXNzYWdlLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtvYmplY3R9XG5cdCAqL1xuXHRnZXREYXRhKCkge1xuXHRcdHJldHVybiB0aGlzW2RhdGFTeW1ib2xdO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4geyp9XG5cdCAqL1xuXHR0b0pTT04oKSB7XG5cdFx0cmV0dXJuIHRoaXNbZGF0YVN5bWJvbF07XG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGpzb25cblx0ICogQHJldHVybiB7TWVzc2FnZX1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcblx0ICovXG5cdHN0YXRpYyBmcm9tSlNPTihqc29uKSB7XG5cdFx0dmFsaWRhdGVTdHJpbmcoanNvbik7XG5cdFx0cmV0dXJuIG5ldyBNZXNzYWdlKEpTT04ucGFyc2UoanNvbikpO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7V2ViQ29ubmVjdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9uZXQvd2ViY29ubmVjdC5tanNcIjtcbmltcG9ydCB7TWVzc2FnZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9uZXQvd2ViY29ubmVjdC9tZXNzYWdlLm1qc1wiO1xuaW1wb3J0IHtPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7aW5pdFdlYlNvY2tldH0gZnJvbSBcIi4uLy4uL3V0aWwvd2Vic29ja2V0Lm1qc1wiO1xuXG5jb25zdCB0ZXN0VXJsID0gXCJ3c3M6Ly93cy5wb3N0bWFuLWVjaG8uY29tL3Jhd1wiXG5cbmRlc2NyaWJlKCdXZWJzb2NrZXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgZHMgPSB1bmRlZmluZWRcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0V2ViU29ja2V0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgfSlcbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpZiAoZHMpIHtcbiAgICAgICAgICAgIGRzLmNsb3NlKClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdpdGhvdXQgdGhpcywgdGhlIG5vZGUgdGVzdCB3aWxsIGhhbmcgXG4gICAgICAgIGZvciAoY29uc3Qgc3ltIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZHMpKSB7XG4gICAgICAgICAgICBpZiAoc3ltLnRvU3RyaW5nKCkgPT09ICdTeW1ib2woY29ubmVjdGlvbiknKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkc1tzeW1dPy5zb2NrZXQ/LnRlcm1pbmF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBkc1tzeW1dPy5zb2NrZXQ/LlsndGVybWluYXRlJ10oKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRvbmUoKVxuICAgIH0pO1xuXG5cbiAgICBpdCgnc2hvdWxkIHRyYW5zZm9ybSBkYXRhJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBkcyA9IG5ldyBXZWJDb25uZWN0KCB7XG4gICAgICAgICAgICB1cmw6IHRlc3RVcmwsXG4gICAgICAgIH0pXG5cbiAgICAgICAgZHMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBkcy5hdHRhY2hPYnNlcnZlcihuZXcgT2JzZXJ2ZXIoKCk9PiB7XG4gICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBkcy5zZW5kKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgfSlcblxuXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgY29ubmVjdCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGRzID0gbmV3IFdlYkNvbm5lY3Qoe1xuICAgICAgICAgICAgdXJsOiB0ZXN0VXJsLFxuICAgICAgICAgICAgcmVjb25uZWN0OiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRzLmNvbm5lY3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuXG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBzZW5kIG1lc3NhZ2UnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBkcyA9IG5ldyBXZWJDb25uZWN0KHtcbiAgICAgICAgICAgIHVybDogdGVzdFVybCxcbiAgICAgICAgICAgIHJlY29ubmVjdDoge1xuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBkcy5jb25uZWN0KCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGRzLmF0dGFjaE9ic2VydmVyKG5ldyBPYnNlcnZlcigoKT0+IHtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBleHBlY3QoZHMuZGF0YVJlY2VpdmVkKCkpLnRvLmJlLnRydWVcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBkcy5wb2xsKClcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG1zZykudG8uYmUuaW5zdGFuY2VPZihNZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gbXNnLmdldERhdGEoKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZGF0YSkudG8uYmUuZGVlcC5lcXVhbCh7bWVzc2FnZTogXCJIZWxsbyBXb3JsZFwifSlcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgIGRzLnNlbmQoe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBcIkhlbGxvIFdvcmxkXCJcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgfSlcblxuXG4gICAgfSkudGltZW91dCgxMDAwMCk7XG5cbn0pO1xuIiwgImltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuZnVuY3Rpb24gaW5pdFdlYlNvY2tldCgpIHtcblxuLy8gICAgY29uc3QgaXNCcm93c2VyID0gdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiYgJ1tvYmplY3QgV2luZG93XScgPT09IHdpbmRvdy50b1N0cmluZy5jYWxsKHdpbmRvdylcbiAgICBjb25zdCBpc05vZGUgPSB0eXBlb2YgZ2xvYmFsID09PSAnb2JqZWN0JyAmJiAnW29iamVjdCBnbG9iYWxdJyA9PT0gZ2xvYmFsLnRvU3RyaW5nLmNhbGwoZ2xvYmFsKVxuXG5cbiAgICBpZiAoIWlzTm9kZSkge1xuICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBpbXBvcnQoXCJ3c1wiKS50aGVuKCh3cykgPT4ge1xuICAgICAgICBnZXRHbG9iYWwoKS5XZWJTb2NrZXQgPSBjbGFzcyBleHRlbmRzIHdzWydXZWJTb2NrZXQnXSB7XG4gICAgICAgICAgICBjb25zdHJ1Y3Rvcih1cmwsIHByb3RvY29scykge1xuICAgICAgICAgICAgICAgIHN1cGVyKHVybCwgcHJvdG9jb2xzLCB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRzaGFrZVRpbWVvdXQ6IDEwMDAsXG4gICAgICAgICAgICAgICAgICAgIG1heFBheWxvYWQ6IDEwMjQgKiAxMDI0ICogMTAyNCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgfSk7XG5cblxufVxuXG5leHBvcnQge2luaXRXZWJTb2NrZXR9IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge01lc3NhZ2V9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvbmV0L3dlYmNvbm5lY3QvbWVzc2FnZS5tanNcIjtcblxuZGVzY3JpYmUoJ01lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBpdCgnY29uc3RydWN0IHdpdGhvdXRoIHBhcmFtZXRlcnMgc2hvdWxkIHRocm93JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgTWVzc2FnZSgpO1xuICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoJ3Nob3VsZCB0aHJvdycpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9XG5cbiAgICB9KVxuICAgIFxuICAgIGl0KCdmcm9tIGpzb24gc2hvdWxkICcgLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICAgICAgXCJpZFwiOiBcIjEyM1wiLFxuICAgICAgICAgICAgXCJ0eXBlXCI6IFwidGVzdFwiLFxuICAgICAgICAgICAgXCJkYXRhXCI6IHtcbiAgICAgICAgICAgICAgICBcInRlc3RcIjogXCJ0ZXN0XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtZXNzYWdlID0gTWVzc2FnZS5mcm9tSlNPTihKU09OLnN0cmluZ2lmeShqc29uKSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBtZXNzYWdlLmdldERhdGEoKTtcbiAgICAgICAgZXhwZWN0KGRhdGEuaWQpLnRvLmVxdWFsKGpzb24uaWQpO1xuICAgICAgICBleHBlY3QoZGF0YS50eXBlKS50by5lcXVhbChqc29uLnR5cGUpO1xuICAgICAgICBleHBlY3QoZGF0YS5kYXRhKS50by5kZWVwLmVxdWFsKGpzb24uZGF0YSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICB9KVxuICAgIFxuICAgIGl0IChcInRvIGpzb24gc2hvdWxkXCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIFwiaWRcIjogXCIxMjNcIixcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInRlc3RcIixcbiAgICAgICAgICAgIFwiZGF0YVwiOiB7XG4gICAgICAgICAgICAgICAgXCJ0ZXN0XCI6IFwidGVzdFwiXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IG5ldyBNZXNzYWdlKG9iaik7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnN0cmluZ2lmeShtZXNzYWdlKTtcbiAgICAgICAgZXhwZWN0KGRhdGEpLnRvLmVxdWFsKCd7XCJpZFwiOlwiMTIzXCIsXCJ0eXBlXCI6XCJ0ZXN0XCIsXCJkYXRhXCI6e1widGVzdFwiOlwidGVzdFwifX0nKTtcbiAgICAgICAgZG9uZSgpO1xuICAgIH0pXG5cblxuXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBCYXNlIH0gZnJvbSBcIi4vYmFzZS5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgVmVyc2lvbiwgZ2V0TW9uc3RlclZlcnNpb24gfTtcblxuLyoqXG4gKiBUaGUgdmVyc2lvbiBvYmplY3QgY29udGFpbnMgYSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlclxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vZXhhbXBsZS90eXBlcy92ZXJzaW9uLTEubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjAuMFxuICogQGF1dGhvciBzY2h1a2FpIEdtYkhcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgdmVyc2lvbiBvYmplY3QgY29udGFpbnMgYSBzZW1hbnRpYyB2ZXJzaW9uIG51bWJlclxuICovXG5jbGFzcyBWZXJzaW9uIGV4dGVuZHMgQmFzZSB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gbWFqb3Jcblx0ICogQHBhcmFtIG1pbm9yXG5cdCAqIEBwYXJhbSBwYXRjaFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gbWFqb3IgaXMgbm90IGEgbnVtYmVyXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBtaW5vciBpcyBub3QgYSBudW1iZXJcblx0ICogQHRocm93cyB7RXJyb3J9IHBhdGNoIGlzIG5vdCBhIG51bWJlclxuXHQgKi9cblx0Y29uc3RydWN0b3IobWFqb3IsIG1pbm9yLCBwYXRjaCkge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoXG5cdFx0XHR0eXBlb2YgbWFqb3IgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdG1pbm9yID09PSB1bmRlZmluZWQgJiZcblx0XHRcdHBhdGNoID09PSB1bmRlZmluZWRcblx0XHQpIHtcblx0XHRcdGNvbnN0IHBhcnRzID0gbWFqb3IudG9TdHJpbmcoKS5zcGxpdChcIi5cIik7XG5cdFx0XHRtYWpvciA9IHBhcnNlSW50KHBhcnRzWzBdIHx8IDApO1xuXHRcdFx0bWlub3IgPSBwYXJzZUludChwYXJ0c1sxXSB8fCAwKTtcblx0XHRcdHBhdGNoID0gcGFyc2VJbnQocGFydHNbMl0gfHwgMCk7XG5cdFx0fVxuXG5cdFx0aWYgKG1ham9yID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1ham9yIHZlcnNpb24gaXMgdW5kZWZpbmVkXCIpO1xuXHRcdH1cblxuXHRcdGlmIChtaW5vciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRtaW5vciA9IDA7XG5cdFx0fVxuXG5cdFx0aWYgKHBhdGNoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhdGNoID0gMDtcblx0XHR9XG5cblx0XHR0aGlzLm1ham9yID0gcGFyc2VJbnQobWFqb3IpO1xuXHRcdHRoaXMubWlub3IgPSBwYXJzZUludChtaW5vcik7XG5cdFx0dGhpcy5wYXRjaCA9IHBhcnNlSW50KHBhdGNoKTtcblxuXHRcdGlmIChpc05hTih0aGlzLm1ham9yKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWFqb3IgaXMgbm90IGEgbnVtYmVyXCIpO1xuXHRcdH1cblxuXHRcdGlmIChpc05hTih0aGlzLm1pbm9yKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWlub3IgaXMgbm90IGEgbnVtYmVyXCIpO1xuXHRcdH1cblxuXHRcdGlmIChpc05hTih0aGlzLnBhdGNoKSkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwicGF0Y2ggaXMgbm90IGEgbnVtYmVyXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvdmVyc2lvblwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gYCR7dGhpcy5tYWpvcn0uJHt0aGlzLm1pbm9yfS4ke3RoaXMucGF0Y2h9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiByZXR1cm5zIDAgaWYgZXF1YWwsIC0xIGlmIHRoZSBvYmplY3QgdmVyc2lvbiBpcyBsZXNzIGFuZCAxIGlmIGdyZWF0ZXJcblx0ICogdGhhbiB0aGUgY29tcGFyZWQgdmVyc2lvblxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xWZXJzaW9ufSB2ZXJzaW9uIFZlcnNpb24gdG8gY29tcGFyZVxuXHQgKiBAcmV0dXJuIHtudW1iZXJ9XG5cdCAqL1xuXHRjb21wYXJlVG8odmVyc2lvbikge1xuXHRcdGlmICh2ZXJzaW9uIGluc3RhbmNlb2YgVmVyc2lvbikge1xuXHRcdFx0dmVyc2lvbiA9IHZlcnNpb24udG9TdHJpbmcoKTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHZlcnNpb24gIT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInR5cGUgZXhjZXB0aW9uXCIpO1xuXHRcdH1cblxuXHRcdGlmICh2ZXJzaW9uID09PSB0aGlzLnRvU3RyaW5nKCkpIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdGNvbnN0IGEgPSBbdGhpcy5tYWpvciwgdGhpcy5taW5vciwgdGhpcy5wYXRjaF07XG5cdFx0Y29uc3QgYiA9IHZlcnNpb24uc3BsaXQoXCIuXCIpO1xuXHRcdGNvbnN0IGxlbiA9IE1hdGgubWF4KGEubGVuZ3RoLCBiLmxlbmd0aCk7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSAxKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdChhW2ldICYmICFiW2ldICYmIHBhcnNlSW50KGFbaV0pID4gMCkgfHxcblx0XHRcdFx0cGFyc2VJbnQoYVtpXSkgPiBwYXJzZUludChiW2ldKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0KGJbaV0gJiYgIWFbaV0gJiYgcGFyc2VJbnQoYltpXSkgPiAwKSB8fFxuXHRcdFx0XHRwYXJzZUludChhW2ldKSA8IHBhcnNlSW50KGJbaV0pXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAwO1xuXHR9XG59XG5cbmxldCBtb25zdGVyVmVyc2lvbjtcblxuLyoqXG4gKiBWZXJzaW9uIG9mIG1vbnN0ZXJcbiAqXG4gKiBAcmV0dXJuIHtWZXJzaW9ufVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4wLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAYXV0aG9yIHNjaHVrYWkgR21iSFxuICovXG5mdW5jdGlvbiBnZXRNb25zdGVyVmVyc2lvbigpIHtcblx0aWYgKG1vbnN0ZXJWZXJzaW9uIGluc3RhbmNlb2YgVmVyc2lvbikge1xuXHRcdHJldHVybiBtb25zdGVyVmVyc2lvbjtcblx0fVxuXG5cdC8qKiBkb24ndCB0b3VjaCwgcmVwbGFjZWQgYnkgbWFrZSB3aXRoIHBhY2thZ2UuanNvbiB2ZXJzaW9uICovXG5cdG1vbnN0ZXJWZXJzaW9uID0gbmV3IFZlcnNpb24oXCIzLjk2LjJcIik7XG5cblx0cmV0dXJuIG1vbnN0ZXJWZXJzaW9uO1xufVxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1ZlcnNpb24sIGdldE1vbnN0ZXJWZXJzaW9ufSBmcm9tIFwiLi4vLi4vc291cmNlL3R5cGVzL3ZlcnNpb24ubWpzXCI7XG5cbmRlc2NyaWJlKCdNb25zdGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy5nZXRNb25zdGVyVmVyc2lvbigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgbW9uc3RlclZlcnNpb25cblxuICAgICAgICAvKiogZG9uXHUwMEI0dCB0b3VjaCwgcmVwbGFjZWQgYnkgbWFrZSB3aXRoIHBhY2thZ2UuanNvbiB2ZXJzaW9uICovXG4gICAgICAgIG1vbnN0ZXJWZXJzaW9uID0gbmV3IFZlcnNpb24oXCIzLjk2LjJcIilcblxuICAgICAgICBsZXQgbSA9IGdldE1vbnN0ZXJWZXJzaW9uKCk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCAnICsgbW9uc3RlclZlcnNpb24gKyAnIGlzICcgKyBtLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobS5jb21wYXJlVG8obW9uc3RlclZlcnNpb24pKS5pcy5lcXVhbCgwKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgZ2V0V2luZG93IH0gZnJvbSBcIi4vdXRpbC5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBjb252ZXJ0VG9QaXhlbHMsIGdldERldmljZURQSSB9O1xuXG4vKipcbiAqIFN0b3JlcyB0aGUgRFBJIG9mIHRoZSBkZXZpY2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqIEBzaW5jZSAzLjM0LjBcbiAqIEB0eXBlIHtudW1iZXJ8ZnVuY3Rpb259XG4gKi9cbmxldCBDVVJSRU5UX0RFVklDRV9EUEkgPSBmdW5jdGlvbiAoKSB7XG5cdGxldCBpID0gMDtcblx0Zm9yIChpID0gNTY7IGkgPCAyMDAwOyBpKyspIHtcblx0XHRpZiAoZ2V0V2luZG93KCkubWF0Y2hNZWRpYShgKG1heC1yZXNvbHV0aW9uOiAke2l9ZHBpKWApLm1hdGNoZXMgPT09IHRydWUpIHtcblx0XHRcdHJldHVybiBpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gaTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgRFBJIG9mIHRoZSBkZXZpY2UuXG4gKlxuICogQHNpbmNlIDMuMzQuMFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBnZXREZXZpY2VEUEkoKSB7XG5cdC8vIG9ubHkgY2FsbCB0aGUgZnVuY3Rpb24gb25jZVxuXHRpZiAodHlwZW9mIENVUlJFTlRfREVWSUNFX0RQSSA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0Q1VSUkVOVF9ERVZJQ0VfRFBJID0gQ1VSUkVOVF9ERVZJQ0VfRFBJKCk7XG5cdH1cblxuXHRyZXR1cm4gZ2V0V2luZG93KCkuZGV2aWNlUGl4ZWxSYXRpbyAqIENVUlJFTlRfREVWSUNFX0RQSTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIENTUyB2YWx1ZSB0byBwaXhlbHMuXG4gKlxuICogQXMgRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogY29udmVydFRvUGl4ZWxzKCcxZW0nKSAvLyByZXR1cm5zIHRoZSBjdXJyZW50IGZvbnQgc2l6ZSBpbiBwaXhlbHNcbiAqIGNvbnZlcnRUb1BpeGVscygnMXJlbScpIC8vIHJldHVybnMgdGhlIGN1cnJlbnQgcm9vdCBmb250IHNpemUgaW4gcGl4ZWxzXG4gKiBjb252ZXJ0VG9QaXhlbHMoJzFweCcpIC8vIHJldHVybnMgMVxuICogY29udmVydFRvUGl4ZWxzKCcxMDAlJykgLy8gcmV0dXJucyB0aGUgY3VycmVudCB3aWR0aCBvZiB0aGUgcGFyZW50IGVsZW1lbnQgaW4gcGl4ZWxzXG4gKiBgYGBcbiAqXG4gKiBGb2xsb3dpbmcgdW5pdHMgYXJlIHN1cHBvcnRlZDpcbiAqIC0gcHhcbiAqIC0gZW1cbiAqIC0gcmVtXG4gKiAtICVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IFtwYXJlbnRFbGVtZW50PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudF1cbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IFtmb250U2l6ZUVsZW1lbnQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XVxuICogQHJldHVybiB7bnVtYmVyfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy4zNC4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7RXJyb3J9IFVuc3VwcG9ydGVkIHVuaXRcbiAqIEB0aHJvd3Mge0Vycm9yfSBJbnZhbGlkIHZhbHVlIGZvcm1hdFxuICovXG5cbmZ1bmN0aW9uIGNvbnZlcnRUb1BpeGVscyhcblx0dmFsdWUsXG5cdHBhcmVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsXG5cdGZvbnRTaXplRWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbikge1xuXHR2YWxpZGF0ZVN0cmluZyh2YWx1ZSk7XG5cblx0Y29uc3QgcmVnZXggPSAvXigtP1tcXGQuXSspKC4qKSQvO1xuXHRjb25zdCBtYXRjaFJlc3VsdCA9IHZhbHVlLm1hdGNoKHJlZ2V4KTtcblxuXHRpZiAoIW1hdGNoUmVzdWx0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZhbHVlIGZvcm1hdDogJHt2YWx1ZX1gKTtcblx0fVxuXG5cdGNvbnN0IFssIG51bSwgdW5pdF0gPSBtYXRjaFJlc3VsdDtcblx0Y29uc3QgbnVtYmVyID0gcGFyc2VGbG9hdChudW0pO1xuXHRjb25zdCBkcGkgPSBnZXREZXZpY2VEUEkoKTtcblxuXHRpZiAodW5pdCA9PT0gXCJweFwiKSB7XG5cdFx0cmV0dXJuIG51bWJlcjtcblx0fSBlbHNlIGlmICh1bml0ID09PSBcImVtXCIpIHtcblx0XHRjb25zdCBmb250U2l6ZSA9IHBhcnNlRmxvYXQoXG5cdFx0XHR3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShmb250U2l6ZUVsZW1lbnQpLmZvbnRTaXplLFxuXHRcdCk7XG5cdFx0cmV0dXJuIG51bWJlciAqIGZvbnRTaXplO1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwicmVtXCIpIHtcblx0XHRjb25zdCByb290Rm9udFNpemUgPSBwYXJzZUZsb2F0KFxuXHRcdFx0d2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50RWxlbWVudCkuZm9udFNpemUsXG5cdFx0KTtcblx0XHRyZXR1cm4gbnVtYmVyICogcm9vdEZvbnRTaXplO1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwiJVwiKSB7XG5cdFx0Y29uc3QgcGFyZW50V2lkdGggPSBwYXJzZUZsb2F0KFxuXHRcdFx0d2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50RWxlbWVudCkud2lkdGgsXG5cdFx0KTtcblx0XHRyZXR1cm4gKG51bWJlciAqIHBhcmVudFdpZHRoKSAvIDEwMDtcblx0fSBlbHNlIGlmICh1bml0ID09PSBcImluXCIpIHtcblx0XHRyZXR1cm4gbnVtYmVyICogZHBpO1xuXHR9IGVsc2UgaWYgKHVuaXQgPT09IFwiY21cIikge1xuXHRcdHJldHVybiAobnVtYmVyICogZHBpKSAvIDIuNTQ7XG5cdH0gZWxzZSBpZiAodW5pdCA9PT0gXCJtbVwiKSB7XG5cdFx0cmV0dXJuIChudW1iZXIgKiBkcGkpIC8gMjUuNDtcblx0fSBlbHNlIGlmICh1bml0ID09PSBcInB0XCIpIHtcblx0XHRyZXR1cm4gKG51bWJlciAqIGRwaSkgLyA3Mjtcblx0fSBlbHNlIGlmICh1bml0ID09PSBcInBjXCIpIHtcblx0XHRyZXR1cm4gKG51bWJlciAqIGRwaSkgLyA2O1xuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgdW5pdDogJHt1bml0fWApO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gJ2NoYWknO1xuaW1wb3J0IHtjb252ZXJ0VG9QaXhlbHMsIGdldERldmljZURQSX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vZGltZW5zaW9uLm1qc1wiO1xuaW1wb3J0IHtnZXRXaW5kb3d9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTSwgaXNCcm93c2VyLCBKU0RPTUV4cG9ydCBhcyBKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge2dldEdsb2JhbH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQge2RldGVjdFJ1bnRpbWVFbnZpcm9ubWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS91dGlsL3J1bnRpbWUubWpzXCI7XG5cblxuZnVuY3Rpb24gZ2V0TW9ja1dpbmRvdyhkcGkpIHtcblxuICAgIGlmKGRldGVjdFJ1bnRpbWVFbnZpcm9ubWVudCgpID09PSAnYnJvd3NlcicpIHtcbiAgICAgICAgcmV0dXJuIGdldFdpbmRvdygpO1xuICAgIH1cbiAgICBcbiAgICBcbiAgICBjb25zdCBkb20gPSBuZXcgSlNET00oJycsIHtcbiAgICAgICAgcHJldGVuZFRvQmVWaXN1YWw6IHRydWUsXG4gICAgICAgIHJlc291cmNlczogJ3VzYWJsZScsXG4gICAgfSk7XG5cbiAgICBkb20ud2luZG93Lm1hdGNoTWVkaWEgPSAocXVlcnkpID0+IHtcbiAgICAgICAgY29uc3QgZHBpUmVnZXggPSAvXFwobWF4LXJlc29sdXRpb246IChcXGQrKWRwaVxcKS87XG4gICAgICAgIGNvbnN0IG1hdGNoID0gcXVlcnkubWF0Y2goZHBpUmVnZXgpO1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgY29uc3QgbWF4RHBpID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTtcbiAgICAgICAgICAgIHJldHVybiB7bWF0Y2hlczogZHBpIDw9IG1heERwaX07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge21hdGNoZXM6IGZhbHNlfTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGRvbS53aW5kb3c7XG59XG5cbmRlc2NyaWJlKCdkaW1lbnNpb24nLCAoKSA9PiB7XG4gICAgbGV0IGN1cnJlbnRFbnZpcm9ubWVudDtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIC8vY2hhaURvbShnZXREb2N1bWVudCgpKTtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgIGNvbnN0IHRlc3REcGkgPSA5NjtcbiAgICAgICAgY29uc3QgdGVzdFdpbmRvdyA9IGdldE1vY2tXaW5kb3codGVzdERwaSk7XG4gICAgICAgIGdldEdsb2JhbCgpLndpbmRvdyA9IHRlc3RXaW5kb3c7XG5cbiAgICB9KTtcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBnZXRHbG9iYWwoKS53aW5kb3c7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY29udmVydFRvUGl4ZWxzJywgKCkgPT4ge1xuICAgICAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBjb252ZXJ0IHB4IHZhbHVlcycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnZlcnRUb1BpeGVscygnMTAwcHgnKTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKDEwMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwic2hvdWxkIHRocm93IGFuIGVycm9yIHdoZW4gdGhlIGlucHV0IHZhbHVlIGhhcyBhbiBpbnZhbGlkIGZvcm1hdFwiLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnZhbGlkVmFsdWUgPSBcImludmFsaWRfdmFsdWVcIjtcblxuICAgICAgICAgICAgY29uc3QgZXJyb3JGbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb252ZXJ0VG9QaXhlbHMoaW52YWxpZFZhbHVlKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGV4cGVjdChlcnJvckZuKS50by50aHJvdyhFcnJvciwgYEludmFsaWQgdmFsdWUgZm9ybWF0OiAke2ludmFsaWRWYWx1ZX1gKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJzaG91bGQgaGFuZGxlIG5lZ2F0aXZlIHZhbHVlcyBjb3JyZWN0bHlcIiwgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmVnYXRpdmVWYWx1ZSA9IFwiLTEwcHhcIjtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkUmVzdWx0ID0gLTEwO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VG9QaXhlbHMobmVnYXRpdmVWYWx1ZSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKGV4cGVjdGVkUmVzdWx0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgY29udmVydCBlbSB2YWx1ZXMnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGVzdEVsZW1lbnQuc3R5bGUuZm9udFNpemUgPSAnMTZweCc7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlc3RFbGVtZW50KTtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udmVydFRvUGl4ZWxzKCcyZW0nLCB0ZXN0RWxlbWVudCwgdGVzdEVsZW1lbnQpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoMzIpO1xuXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRlc3RFbGVtZW50KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBjb3JyZWN0bHkgY29udmVydCByZW0gdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVzdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRlc3RFbGVtZW50LnN0eWxlLmZvbnRTaXplID0gJzE2cHgnO1xuICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKHRlc3RFbGVtZW50KTtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udmVydFRvUGl4ZWxzKCcycmVtJywgdGVzdEVsZW1lbnQpO1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoMzIpO1xuXG4gICAgICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGVzdEVsZW1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNvcnJlY3RseSBjb252ZXJ0IHBlcmNlbnRhZ2UgdmFsdWVzJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVzdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRlc3RFbGVtZW50LnN0eWxlLndpZHRoID0gJzUwMHB4JztcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVzdEVsZW1lbnQpO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjb252ZXJ0VG9QaXhlbHMoJzUwJScsIHRlc3RFbGVtZW50KTtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKDI1MCk7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGVzdEVsZW1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIGZvciB1bnN1cHBvcnRlZCB1bml0cycsICgpID0+IHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBjb252ZXJ0VG9QaXhlbHMoJzEwdW5zdXBwb3J0ZWRVbml0JykpLnRvLnRocm93KCdVbnN1cHBvcnRlZCB1bml0OiB1bnN1cHBvcnRlZFVuaXQnKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdnZXREZXZpY2VEUEknLCAoKSA9PiB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IGRldmljZSBEUEknLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0RHBpID0gOTY7XG4gICAgICAgICAgICBjb25zdCB0ZXN0V2luZG93ID0gZ2V0TW9ja1dpbmRvdyh0ZXN0RHBpKTtcbiAgICAgICAgICAgIGdldEdsb2JhbCgpLndpbmRvdyA9IHRlc3RXaW5kb3c7XG5cbiAgICAgICAgICAgIGNvbnN0IGRldmljZURwaSA9IGdldERldmljZURQSSgpO1xuICAgICAgICAgICAgZXhwZWN0KGRldmljZURwaSkudG8uZXF1YWwodGVzdERwaSAqIHRlc3RXaW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyk7XG5cbiAgICAgICAgICAgIGRlbGV0ZSBnZXRHbG9iYWwoKS53aW5kb3c7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgY2FjaGUgdGhlIHJlc3VsdCBhbmQgcmV0dXJuIHRoZSBzYW1lIHZhbHVlJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVzdERwaSA9IDk2O1xuICAgICAgICAgICAgY29uc3QgdGVzdFdpbmRvdyA9IGdldE1vY2tXaW5kb3codGVzdERwaSk7XG4gICAgICAgICAgICBnZXRHbG9iYWwoKS53aW5kb3cgPSB0ZXN0V2luZG93O1xuXG4gICAgICAgICAgICBjb25zdCBkZXZpY2VEcGkxID0gZ2V0RGV2aWNlRFBJKCk7XG4gICAgICAgICAgICBjb25zdCBkZXZpY2VEcGkyID0gZ2V0RGV2aWNlRFBJKCk7XG4gICAgICAgICAgICBleHBlY3QoZGV2aWNlRHBpMSkudG8uZXF1YWwoZGV2aWNlRHBpMik7XG5cbiAgICAgICAgICAgIGRlbGV0ZSBnZXRHbG9iYWwoKS53aW5kb3c7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG59KTsiLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuY29uc3QgRU5WX0FXU19MQU1CREEgPSBcImF3cy1sYW1iZGFcIjtcbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRU5WX0dPT0dMRV9GVU5DVElPTlMgPSBcImdvb2dsZS1mdW5jdGlvbnNcIjtcbi8qKlxuICogQHR5cGUge3N0cmluZ31cbiAqL1xuY29uc3QgRU5WX0VMRUNUUk9OID0gXCJlbGVjdHJvblwiO1xuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfTk9ERSA9IFwibm9kZVwiO1xuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfQlJPV1NFUiA9IFwiYnJvd3NlclwiO1xuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfV0VCX1dPUktFUiA9IFwid2ViLXdvcmtlclwiO1xuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfREVOTyA9IFwiZGVub1wiO1xuLyoqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBFTlZfVU5LTk9XTiA9IFwidW5rbm93blwiO1xuXG4vKipcbiAqIERldGVjdHMgYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgcnVudGltZSBlbnZpcm9ubWVudC5cbiAqXG4gKiAtICdhd3MtbGFtYmRhJzogQVdTIExhbWJkYSBlbnZpcm9ubWVudFxuICogLSAnZ29vZ2xlLWZ1bmN0aW9ucyc6IEdvb2dsZSBDbG91ZCBGdW5jdGlvbnMgZW52aXJvbm1lbnRcbiAqIC0gJ2VsZWN0cm9uJzogRWxlY3Ryb24gZW52aXJvbm1lbnRcbiAqIC0gJ25vZGUnOiBOb2RlLmpzIGVudmlyb25tZW50XG4gKiAtICdicm93c2VyJzogQnJvd3NlciBlbnZpcm9ubWVudFxuICogLSAnd2ViLXdvcmtlcic6IFdlYiBXb3JrZXIgZW52aXJvbm1lbnRcbiAqIC0gJ2Rlbm8nOiBEZW5vIGVudmlyb25tZW50XG4gKiAtICdyZWFjdC1uYXRpdmUnOiBSZWFjdCBOYXRpdmUgZW52aXJvbm1lbnRcbiAqIC0gJ3Vua25vd24nOiBVbmtub3duIGVudmlyb25tZW50XG4gKlxuICogQHNpbmNlIDMuMzQuMFxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZGV0ZWN0ZWQgcnVudGltZSBlbnZpcm9ubWVudC4gUG9zc2libGUgdmFsdWVzIGFyZTpcbiAqL1xuZnVuY3Rpb24gZGV0ZWN0UnVudGltZUVudmlyb25tZW50KCkge1xuXHQvLyBBV1MgTGFtYmRhIGVudmlyb25tZW50XG5cdGlmIChcblx0XHR0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdHByb2Nlc3MuZW52ICE9IG51bGwgJiZcblx0XHRwcm9jZXNzLmVudi5BV1NfTEFNQkRBX0ZVTkNUSU9OX05BTUVcblx0KSB7XG5cdFx0cmV0dXJuIEVOVl9BV1NfTEFNQkRBO1xuXHR9XG5cblx0Ly8gR29vZ2xlIENsb3VkIEZ1bmN0aW9ucyBlbnZpcm9ubWVudFxuXHRpZiAoXG5cdFx0dHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRwcm9jZXNzLmVudiAhPSBudWxsICYmXG5cdFx0cHJvY2Vzcy5lbnYuRlVOQ1RJT05fTkFNRVxuXHQpIHtcblx0XHRyZXR1cm4gRU5WX0dPT0dMRV9GVU5DVElPTlM7XG5cdH1cblxuXHQvLyBOb2RlLmpzIGVudmlyb25tZW50XG5cdGlmIChcblx0XHR0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdHByb2Nlc3MudmVyc2lvbnMgIT0gbnVsbCAmJlxuXHRcdHByb2Nlc3MudmVyc2lvbnMubm9kZSAhPSBudWxsXG5cdCkge1xuXHRcdC8vIEVsZWN0cm9uIGVudmlyb25tZW50XG5cdFx0aWYgKHByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb24gIT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIEVOVl9FTEVDVFJPTjtcblx0XHR9XG5cdFx0cmV0dXJuIEVOVl9OT0RFO1xuXHR9XG5cblx0Ly8gQnJvd3NlciBlbnZpcm9ubWVudFxuXHRpZiAoXG5cdFx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHR0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0dHlwZW9mIG5hdmlnYXRvci51c2VyQWdlbnQgPT09IFwic3RyaW5nXCJcblx0KSB7XG5cdFx0Ly8gV2ViIFdvcmtlciBlbnZpcm9ubWVudFxuXHRcdGlmICh0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRyZXR1cm4gRU5WX1dFQl9XT1JLRVI7XG5cdFx0fVxuXHRcdHJldHVybiBFTlZfQlJPV1NFUjtcblx0fVxuXG5cdC8vIERlbm8gZW52aXJvbm1lbnRcblx0aWYgKHR5cGVvZiBEZW5vICE9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0cmV0dXJuIEVOVl9ERU5PO1xuXHR9XG5cblx0Ly8gVW5rbm93biBlbnZpcm9ubWVudFxuXHRyZXR1cm4gRU5WX1VOS05PV047XG59XG5cbmV4cG9ydCB7XG5cdEVOVl9BV1NfTEFNQkRBLFxuXHRFTlZfR09PR0xFX0ZVTkNUSU9OUyxcblx0RU5WX0VMRUNUUk9OLFxuXHRFTlZfTk9ERSxcblx0RU5WX0JST1dTRVIsXG5cdEVOVl9XRUJfV09SS0VSLFxuXHRFTlZfREVOTyxcblx0RU5WX1VOS05PV04sXG5cdGRldGVjdFJ1bnRpbWVFbnZpcm9ubWVudCxcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtTdHlsZXNoZWV0fSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS9saW5rL3N0eWxlc2hlZXQubWpzXCI7XG5pbXBvcnQge0RhdGFVcmx9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZGF0YXVybC5tanNcIjtcbmltcG9ydCB7SUR9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtjbGVhbnVwRE9NRnJvbVRlc3RpbmcsIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZ30gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWwvY2xlYW51cGRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuXG5jaGFpLnVzZShjaGFpRG9tKTtcblxubGV0IGh0bWwxID0gYFxuXG5gO1xuXG5cbmRlc2NyaWJlKCdTdHlsZXNoZWV0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSh7XG4gICAgICAgICAgICBydW5TY3JpcHRzOiBcImRhbmdlcm91c2x5XCIsXG4gICAgICAgICAgICByZXNvdXJjZXM6IFwidXNhYmxlXCJcbiAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcbiAgICB9KTtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKVxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ1N0eWxlc2hlZXQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ2Nvbm5lY3QoKS5hdmFpbGFibGUoKScsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHN0eWxlc2hlZXQgPSBuZXcgU3R5bGVzaGVldCh7XG4gICAgICAgICAgICAgICAgaHJlZjogbmV3IERhdGFVcmwoJycsICd0ZXh0L2NzcycpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgc3R5bGVzaGVldC5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBzdHlsZXNoZWV0LmdldE9wdGlvbignaWQnKVxuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0V4dGVybmFsIFN0eWxlc2hlZXQnLCAoKSA9PiB7XG5cbiAgICAgICAgbGV0IGlkID0gbmV3IElEKCdTdHlsZXNoZWV0JykudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IHN0eWxlc2hlZXQsIHVybCA9ICdodHRwczovL2FsdmluZS5pby9tYWluLm1pbi5jc3MnO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgICAgICBzdHlsZXNoZWV0ID0gbmV3IFN0eWxlc2hlZXQoe1xuICAgICAgICAgICAgICAgIGhyZWY6IHVybCxcbiAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYXBwZW5kIGFuZCByZW1vdmUgU3R5bGVzaGVldCAnLCAoZG9uZSkgPT4ge1xuXG4gICAgICAgICAgICBleHBlY3Qoc3R5bGVzaGVldC5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgc3R5bGVzaGVldC5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHN0eWxlc2hlZXQuaXNDb25uZWN0ZWQoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2hyZWY9XCInICsgdXJsICsgJ1wiXScpKS50by5leGlzdDtcblxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc3R5bGVzaGVldC5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2hyZWY9XCInICsgdXJsICsgJ1wiXScpKS5ub3QudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICBzdHlsZXNoZWV0LmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHN0eWxlc2hlZXQuaXNDb25uZWN0ZWQoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tocmVmPVwiJyArIHVybCArICdcIl0nKSkudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2hyZWY9XCInICsgdXJsICsgJ1wiXScpKS5ub3QudG8uZXhpc3Q7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChzdHlsZXNoZWV0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG59KTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5cbmxldCBhZGRlZE5vZGVzLCBtdXRhdGlvbm9ic2VydmVyO1xuXG5mdW5jdGlvbiBpbml0KCkge1xuXG4gICAgYWRkZWROb2RlcyA9IFtdO1xuICAgIG11dGF0aW9ub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbiAobXV0YXRpb25zKSB7XG4gICAgICAgIG11dGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChtdXRhdGlvbikge1xuICAgICAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgPT09ICdjaGlsZExpc3QnICYmIG11dGF0aW9uLnJlbW92ZWROb2Rlcykge1xuXG4gICAgICAgICAgICAgICAgbXV0YXRpb24uYWRkZWROb2Rlcy5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkTm9kZXMucHVzaChuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3RpbmcoKSB7XG5cbiAgICBpZiAobXV0YXRpb25vYnNlcnZlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGluaXQoKVxuICAgIH1cblxuICAgIG11dGF0aW9ub2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoZWFkJyksIHtjaGlsZExpc3Q6IHRydWV9KTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYW51cERPTUZyb21UZXN0aW5nKCkge1xuICAgIG11dGF0aW9ub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuXG4gICAgZm9yIChjb25zdCBuIG9mIGFkZGVkTm9kZXMpIHtcbiAgICAgICAgbi5yZW1vdmUoKTtcbiAgICB9XG59IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7TGlua30gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kb20vcmVzb3VyY2UvbGluay5tanNcIjtcbmltcG9ydCB7RGF0YVVybH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9kYXRhdXJsLm1qc1wiO1xuaW1wb3J0IHtJRH0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS90eXBlcy9pZC5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2NsZWFudXBET01Gcm9tVGVzdGluZywgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9jbGVhbnVwZG9tLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmNoYWkudXNlKGNoYWlEb20pO1xuXG5cblxuZGVzY3JpYmUoJ0xpbmsnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nKClcbiAgICB9KVxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgY2xlYW51cERPTUZyb21UZXN0aW5nKCk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdMaW5rKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudGltZW91dCg1MDAwKTtcblxuICAgICAgICBpdCgnY29ubmVjdCgpLmF2YWlsYWJsZSgpJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgY29uc3QgbGluayA9IG5ldyBMaW5rKHtcbiAgICAgICAgICAgICAgICBocmVmOiBuZXcgRGF0YVVybCgnJywgJ3RleHQvY3NzJykudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICByZWw6ICdzdHlsZXNoZWV0J1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGxpbmsuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0V4dGVybmFsIExpbmsnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMudGltZW91dCg1MDAwKTtcblxuICAgICAgICBsZXQgaWQgPSBuZXcgSUQoJ2xpbmsnKS50b1N0cmluZygpO1xuICAgICAgICBsZXQgbGluaywgdXJsID0gJ2h0dHBzOi8vYWx2aW5lLmlvL21haW4ubWluLmNzcyc7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgIGxpbmsgPSBuZXcgTGluayh7XG4gICAgICAgICAgICAgICAgaHJlZjogdXJsLFxuICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAgICByZWw6ICdzdHlsZXNoZWV0J1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2FwcGVuZCBhbmQgcmVtb3ZlIExpbmsgJywgKGRvbmUpID0+IHtcblxuICAgICAgICAgICAgZXhwZWN0KGxpbmsuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG5cbiAgICAgICAgICAgIGxpbmsuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChsaW5rLmlzQ29ubmVjdGVkKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tocmVmPVwiJyArIHVybCArICdcIl0nKSkudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxpbmsuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tocmVmPVwiJyArIHVybCArICdcIl0nKSkubm90LnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgbGluay5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChsaW5rLmlzQ29ubmVjdGVkKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaHJlZj1cIicgKyB1cmwgKyAnXCJdJykpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tocmVmPVwiJyArIHVybCArICdcIl0nKSkubm90LnRvLmV4aXN0O1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QobGluay5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxufSk7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7U2NyaXB0fSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS9zY3JpcHQubWpzXCI7XG5pbXBvcnQge0RhdGFVcmx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZGF0YXVybC5tanNcIjtcbmltcG9ydCB7SUR9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtjbGVhbnVwRE9NRnJvbVRlc3RpbmcsIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZ30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2xlYW51cGRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuXG5jaGFpLnVzZShjaGFpRG9tKTtcblxubGV0IGh0bWwxID0gYFxuXG5gO1xuXG5cbmRlc2NyaWJlKCdTY3JpcHQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nKClcbiAgICB9KVxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgY2xlYW51cERPTUZyb21UZXN0aW5nKCk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdTY3JpcHQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3NldEV2ZW50VHlwZXMoKScsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHNjcmlwdCA9IG5ldyBTY3JpcHQoe1xuICAgICAgICAgICAgICAgIHNyYzogbmV3IERhdGFVcmwoJycsICd0ZXh0L2phdmFzY3JpcHQnKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIGFzeW5jOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiAnYW5vbnltb3VzJyxcbiAgICAgICAgICAgICAgICBkZWZlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgaW50ZWdyaXR5OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgbm9tb2R1bGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG5vbmNlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcmVmZXJyZXJwb2xpY3k6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dC9qYXZhc2NyaXB0J1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHNjcmlwdC5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHNjcmlwdC5nZXRPcHRpb24oJ2lkJylcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cbiAgICAgICAgfSlcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdFeHRlcm5hbCBKUycsICgpID0+IHtcblxuICAgICAgICBsZXQgaWQgPSBuZXcgSUQoJ3NjcmlwdCcpLnRvU3RyaW5nKCk7XG4gICAgICAgIGxldCBzZXJ2ZXIsIHNjcmlwdCwgdXJsID0gJ2h0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2xheXpyLmpzLzIuMi4yL2xheXpyLm1pbi5qcyc7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgIHNjcmlwdCA9IG5ldyBTY3JpcHQoe1xuICAgICAgICAgICAgICAgIHNyYzogdXJsLFxuICAgICAgICAgICAgICAgIGFzeW5jOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiAnYW5vbnltb3VzJyxcbiAgICAgICAgICAgICAgICBkZWZlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgaW50ZWdyaXR5OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgbm9tb2R1bGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG5vbmNlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcmVmZXJyZXJwb2xpY3k6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB0eXBlOiAndGV4dC9qYXZhc2NyaXB0JyxcbiAgICAgICAgICAgICAgICBpZDogaWRcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdhcHBlbmQgYW5kIHJlbW92ZSBzY3JpcHQgJywgKGRvbmUpID0+IHtcblxuICAgICAgICAgICAgZXhwZWN0KHNjcmlwdC5pc0Nvbm5lY3RlZCgpKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgc2NyaXB0LmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc2NyaXB0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tzcmM9XCInICsgdXJsICsgJ1wiXScpKS50by5leGlzdDtcblxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc2NyaXB0LmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbc3JjPVwiJyArIHVybCArICdcIl0nKSkubm90LnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgc2NyaXB0LmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHNjcmlwdC5pc0Nvbm5lY3RlZCgpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3NyYz1cIicgKyB1cmwgKyAnXCJdJykpLnRvLmV4aXN0O1xuXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tzcmM9XCInICsgdXJsICsgJ1wiXScpKS5ub3QudG8uZXhpc3Q7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChzY3JpcHQuaXNDb25uZWN0ZWQoKSkudG8uYmUuZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKGUpKTtcblxuXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbn0pOyIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCAqIGFzIGNoYWkgZnJvbSAnY2hhaSc7XG5pbXBvcnQge0RhdGF9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlL2RhdGEubWpzXCI7XG5pbXBvcnQge0RhdGFVcmx9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvZGF0YXVybC5tanNcIjtcbmltcG9ydCB7SUR9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzXCI7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtjbGVhbnVwRE9NRnJvbVRlc3RpbmcsIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZ30gZnJvbSBcIi4uLy4uLy4uL3V0aWwvY2xlYW51cGRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuXG5jaGFpLnVzZShjaGFpRG9tKTtcblxubGV0IGh0bWwxID0gYFxuXG5gO1xuXG5cbmRlc2NyaWJlKCdEYXRhJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGZldGNoUmVmZXJlbmNlLCByZXR1cm5TdGF0dXMsIG11dGF0aW9ub2JzZXJ2ZXIsIGFkZGVkTm9kZXMgPSBbXTtcblxuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nKClcblxuICAgICAgICByZXR1cm5TdGF0dXMgPSAyMDA7XG4gICAgICAgIGZldGNoUmVmZXJlbmNlID0gZ2xvYmFsVGhpc1snZmV0Y2gnXTtcbiAgICAgICAgZ2xvYmFsVGhpc1snZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgaWYgKCF1cmwpIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB1cmwnKVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IFwidGVzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHJldHVyblN0YXR1c1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICB9O1xuXG5cbiAgICB9KVxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgZ2xvYmFsVGhpc1snZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ0RhdGEoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3NldEV2ZW50VHlwZXMoKScsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgRGF0YSh7XG4gICAgICAgICAgICAgICAgc3JjOiBuZXcgRGF0YVVybCgnJywgJ3RleHQvamF2YXNjcmlwdCcpLnRvU3RyaW5nKClcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkYXRhLmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cbiAgICAgICAgfSlcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdFeHRlcm5hbCBEYXRhJywgKCkgPT4ge1xuXG4gICAgICAgIGxldCBpZCA9IG5ldyBJRCgnZGF0YScpLnRvU3RyaW5nKCk7XG4gICAgICAgIGxldCBzZXJ2ZXIsIGRhdGEsIHVybCA9ICdodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9sYXl6ci5qcy8yLjIuMi9sYXl6ci5taW4uanMnO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgICAgICBkYXRhID0gbmV3IERhdGEoe1xuICAgICAgICAgICAgICAgIHNyYzogdXJsLFxuICAgICAgICAgICAgICAgIGlkOiBpZFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2RhdGEgaXMgbm90IGNvbm5lY3RlZCcsICgpID0+IHtcbiAgICAgICAgICAgIGV4cGVjdChkYXRhLmlzQ29ubmVjdGVkKCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdjb25uZWN0IGFuZCBjaGVjayBhdmFpbGFiaWxpdHknLCAoZG9uZSkgPT4ge1xuXG4gICAgICAgICAgICBkYXRhLmNvbm5lY3QoKS5hdmFpbGFibGUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZGF0YS5pc0Nvbm5lY3RlZCgpLCAnaXNDb25uZWN0ZWQgMScpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0eXBlPVwiYXBwbGljYXRpb24vanNvblwiXScpLCAnZXhpc3RzIDEnKS50by5leGlzdDtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkucGFyZW50RWxlbWVudDtcblxuXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRhdGEuaXNDb25uZWN0ZWQoKSwgJ2lzQ29ubmVjdGVkIDInKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3R5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCJdJyksICdleGlzdHMgMicpLm5vdC50by5leGlzdDtcblxuICAgICAgICAgICAgICAgIGRhdGEuY29ubmVjdCgpLmF2YWlsYWJsZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZGF0YS5pc0Nvbm5lY3RlZCgpLCAnaXNDb25uZWN0ZWQgMycpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbdHlwZT1cImFwcGxpY2F0aW9uL2pzb25cIl0nKSwgJ2V4aXN0cyAzJykudG8uZXhpc3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW3R5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCJdJyksICdleGlzdHMgNCcpLm5vdC50by5leGlzdDtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRhdGEuaXNDb25uZWN0ZWQoKSwgJ2lzQ29ubmVjdGVkIDQnKS50by5iZS5mYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuZGVzY3JpYmUoJ2luaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgbGV0IGVsZW1lbnQ7XG4gICAgbGV0IG9wdGlvbnM7XG4gICAgbGV0IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXM7XG5cbiAgICBiZWZvcmUoIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC9pbml0LW9wdGlvbnMtZnJvbS1hdHRyaWJ1dGVzLm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyA9IG1bJ2luaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMnXTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIG9wdGlvbnMgPSB7dXJsOiBcIlwiLCBrZXk6IHtzdWJrZXk6IFwiXCIsIGNhc2VTZW5zaXRpdmU6IHRydWV9fTtcbiAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIG9wdGlvbnMgd2l0aCBtYXRjaGluZyBhdHRyaWJ1dGVzJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi11cmwnLCAnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi1rZXktc3Via2V5JywgJ3Rlc3QnKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xuICAgICAgICBleHBlY3QocmVzdWx0LmtleS5zdWJrZXkpLnRvLmVxdWFsKCd0ZXN0Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBtb2RpZnkgb3B0aW9ucyB3aXRob3V0IG1hdGNoaW5nIGF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCcnKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdC5rZXkuc3Via2V5KS50by5lcXVhbCgnJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGlnbm9yZSBhdHRyaWJ1dGVzIHdpdGhvdXQgdGhlIGNvcnJlY3QgcHJlZml4JywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1zb21lLW9wdGlvbi11cmwnLCAnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaWdub3JlIGF0dHJpYnV0ZXMgd2l0aCBpbnZhbGlkIG9wdGlvbiBwYXRocycsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24tbm9uZXhpc3RlbnQnLCAndmFsdWUnKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwob3B0aW9ucyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFwcGx5IG1hcHBpbmcgZm9yIGEgc2luZ2xlIGF0dHJpYnV0ZScsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24tdXJsJywgJ2V4YW1wbGUnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICd1cmwnOiAodmFsdWUpID0+ICdodHRwczovLycgKyB2YWx1ZSArICcuY29tJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucywgbWFwcGluZyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC51cmwpLnRvLmVxdWFsKCdodHRwczovL2V4YW1wbGUuY29tJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFwcGx5IG1hcHBpbmcgZm9yIGEgbmVzdGVkIGF0dHJpYnV0ZScsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1vcHRpb24ta2V5LXN1YmtleScsICcxMjMnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICdrZXkuc3Via2V5JzogKHZhbHVlKSA9PiBwYXJzZUludCh2YWx1ZSwgMTApICogMlxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucywgbWFwcGluZyk7XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdC5rZXkuc3Via2V5KS50by5lcXVhbChcIjI0NlwiKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYXBwbHkgbXVsdGlwbGUgbWFwcGluZ3MnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLXVybCcsICdleGFtcGxlJyk7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLWtleS1zdWJrZXknLCAnMTIzJyk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAndXJsJzogKHZhbHVlKSA9PiAnaHR0cHM6Ly8nICsgdmFsdWUgKyAnLmNvbScsXG4gICAgICAgICAgICAna2V5LnN1YmtleSc6ICh2YWx1ZSkgPT4gcGFyc2VJbnQodmFsdWUsIDEwKSAqIDJcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xuICAgICAgICBleHBlY3QocmVzdWx0LmtleS5zdWJrZXkpLnRvLmVxdWFsKFwiMjQ2XCIpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpZ25vcmUgbWFwcGluZ3MgZm9yIG5vbi1leGlzdGluZyBhdHRyaWJ1dGVzJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ3VybCc6ICh2YWx1ZSkgPT4gJ2h0dHBzOi8vJyArIHZhbHVlICsgJy5jb20nXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBpZ25vcmUgbWFwcGluZ3MgZm9yIGludmFsaWQgb3B0aW9uIHBhdGhzJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi1ub25leGlzdGVudCcsICd2YWx1ZScpO1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ25vbmV4aXN0ZW50JzogKHZhbHVlKSA9PiB2YWx1ZSArICdiYXInXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKG9wdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhcHBseSBtYXBwaW5nIG9ubHkgdG8gc3BlY2lmaWVkIGF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLXVybCcsICdleGFtcGxlJyk7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLWtleS1zdWJrZXknLCAnMTIzJyk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAndXJsJzogKHZhbHVlKSA9PiAnaHR0cHM6Ly8nICsgdmFsdWUgKyAnLmNvbSdcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMsIG1hcHBpbmcpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQudXJsKS50by5lcXVhbCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xuICAgICAgICBleHBlY3QocmVzdWx0LmtleS5zdWJrZXkpLnRvLmVxdWFsKCcxMjMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGFwcGx5IG1hcHBpbmcgaWYgbm90IGEgZnVuY3Rpb24nLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItb3B0aW9uLXVybCcsICdleGFtcGxlJyk7XG4gICAgICAgIGNvbnN0IG1hcHBpbmcgPSB7XG4gICAgICAgICAgICAndXJsJzogJ2h0dHBzOi8vZXhhbXBsZS5jb20nXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJ2V4YW1wbGUnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYXBwbHkgbWFwcGluZyB3aXRoIGN1c3RvbSBwcmVmaXgnLCAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLWN1c3RvbS1vcHRpb24tdXJsJywgJ2V4YW1wbGUnKTtcbiAgICAgICAgY29uc3QgbWFwcGluZyA9IHtcbiAgICAgICAgICAgICd1cmwnOiAodmFsdWUpID0+ICdodHRwczovLycgKyB2YWx1ZSArICcuY29tJ1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucywgbWFwcGluZywgJ2RhdGEtY3VzdG9tLW9wdGlvbi0nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJ2h0dHBzOi8vZXhhbXBsZS5jb20nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGFwcGx5IG1hcHBpbmcgd2l0aCBpbmNvcnJlY3QgY3VzdG9tIHByZWZpeCcsICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtY3VzdG9tLW9wdGlvbi11cmwnLCAnZXhhbXBsZScpO1xuICAgICAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgICAgICAgJ3VybCc6ICh2YWx1ZSkgPT4gJ2h0dHBzOi8vJyArIHZhbHVlICsgJy5jb20nXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaW5pdE9wdGlvbnNGcm9tQXR0cmlidXRlcyhlbGVtZW50LCBvcHRpb25zLCBtYXBwaW5nKTtcblxuICAgICAgICBleHBlY3QocmVzdWx0LnVybCkudG8uZXF1YWwoJycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhcHBseSBjYXNlIHNlbnNpdGl2ZSBtYXBwaW5nJywgKCkgPT4ge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9wdGlvbi1rZXktY2FzZVNlbnNpdGl2ZScsICdmYWxzZScpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0T3B0aW9uc0Zyb21BdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMpO1xuXG4gICAgICAgIGV4cGVjdChyZXN1bHQua2V5LmNhc2VTZW5zaXRpdmUpLnRvLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxufSk7XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gJ2NoYWknO1xuaW1wb3J0IHtleHRyYWN0S2V5c30gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC9leHRyYWN0LWtleXMubWpzXCI7XG5cblxuZGVzY3JpYmUoJ2V4dHJhY3RLZXlzJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZXh0cmFjdCBrZXlzIGZyb20gdGhlIGdpdmVuIG9iamVjdCcsICgpID0+IHtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgZmlyc3ROYW1lOiAnSm9obicsXG4gICAgICAgICAgICBsYXN0TmFtZTogJ0RvZScsXG4gICAgICAgICAgICBhZGRyZXNzOiB7XG4gICAgICAgICAgICAgICAgc3RyZWV0OiAnMTIzIE1haW4gU3QnLFxuICAgICAgICAgICAgICAgIGNpdHk6ICdOZXcgWW9yaycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGV4cGVjdGVkID0gbmV3IE1hcChbXG4gICAgICAgICAgICBbJ2ZpcnN0bmFtZScsICdmaXJzdE5hbWUnXSxcbiAgICAgICAgICAgIFsnbGFzdG5hbWUnLCAnbGFzdE5hbWUnXSxcbiAgICAgICAgICAgIFsnYWRkcmVzcy1zdHJlZXQnLCAnYWRkcmVzcy5zdHJlZXQnXSxcbiAgICAgICAgICAgIFsnYWRkcmVzcy1jaXR5JywgJ2FkZHJlc3MuY2l0eSddLFxuICAgICAgICBdKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBleHRyYWN0S2V5cyhvYmopO1xuXG4gICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHJlc3VsdCkpKS50by5lcXVhbChKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKGV4cGVjdGVkKSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB1c2UgY3VzdG9tIGtleSBhbmQgdmFsdWUgc2VwYXJhdG9ycycsICgpID0+IHtcbiAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgZmlyc3ROYW1lOiAnSm9obicsXG4gICAgICAgICAgICBsYXN0TmFtZTogJ0RvZScsXG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBuZXcgTWFwKFtcbiAgICAgICAgICAgIFsncHJlZml4K2ZpcnN0bmFtZScsICdwcmVmaXgrZmlyc3ROYW1lJ10sXG4gICAgICAgICAgICBbJ3ByZWZpeCtsYXN0bmFtZScsICdwcmVmaXgrbGFzdE5hbWUnXSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdEtleXMob2JqLCAncHJlZml4JywgJysnLCAnKycpO1xuXG4gICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHJlc3VsdCkpKS50by5lcXVhbChKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKGV4cGVjdGVkKSkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NoZWNrIGlmIHZhbHVlIGlzIG51bGwnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgIGZpcnN0TmFtZTogJ0pvaG4nLFxuICAgICAgICAgICAgbGFzdE5hbWU6ICdEb2UnLFxuICAgICAgICAgICAgYWRkcmVzczogbnVsbCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBleHBlY3RlZCA9IG5ldyBNYXAoW1xuICAgICAgICAgICAgWydmaXJzdG5hbWUnLCAnZmlyc3ROYW1lJ10sXG4gICAgICAgICAgICBbJ2xhc3RuYW1lJywgJ2xhc3ROYW1lJ10sXG4gICAgICAgICAgICBbJ2FkZHJlc3MnLCAnYWRkcmVzcyddLFxuICAgICAgICAgICAgXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3RLZXlzKG9iaik7XG5cbiAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20ocmVzdWx0KSkpLnRvLmVxdWFsKEpTT04uc3RyaW5naWZ5KEFycmF5LmZyb20oZXhwZWN0ZWQpKSk7XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgbW9yZSB0ZXN0IGNhc2VzIGFzIG5lZWRlZFxufSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi8uLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsLCBnZXRHbG9iYWxGdW5jdGlvbiB9IGZyb20gXCIuLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5cbmV4cG9ydCB7IEZhY3RvcnkgfTtcblxuLyoqXG4gKiBBIGZhY3RvcnkgZm9yIGNyZWF0aW5nIHdvcmtlciBpbnN0YW5jZXMuXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNS4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBzbWFsbCBmYWN0b3J5IHRvIGNyZWF0ZSB3b3JrZXJcbiAqL1xuY2xhc3MgRmFjdG9yeSBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICpcblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHR3b3JrZXI6IG5ldyBXZWFrTWFwKCksXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgd29ya2VyIGZyb20gYSBVUkxcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gbWVzc2FnZUhhbmRsZXJcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gZXJyb3JIYW5kbGVyXG5cdCAqIEByZXR1cm4ge1dvcmtlcn1cblx0ICovXG5cdGNyZWF0ZUZyb21VUkwgPSBmdW5jdGlvbiAodXJsLCBtZXNzYWdlSGFuZGxlciwgZXJyb3JIYW5kbGVyKSB7XG5cdFx0aWYgKHVybCBpbnN0YW5jZW9mIFVSTCkge1xuXHRcdFx0dXJsID0gdXJsLnRvU3RyaW5nKCk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgd29ya2VyQ2xhc3MgPSBnZXRHbG9iYWxGdW5jdGlvbihcIldvcmtlclwiKTtcblx0XHR2YXIgd29ya2VyID0gbmV3IHdvcmtlckNsYXNzKHZhbGlkYXRlU3RyaW5nKHVybCkpO1xuXG5cdFx0aWYgKGlzRnVuY3Rpb24obWVzc2FnZUhhbmRsZXIpKSB7XG5cdFx0XHR3b3JrZXIub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGVyLmNhbGwod29ya2VyLCBldmVudCk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGlmIChpc0Z1bmN0aW9uKGVycm9ySGFuZGxlcikpIHtcblx0XHRcdHdvcmtlci5vbmVycm9yID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdGVycm9ySGFuZGxlci5jYWxsKHdvcmtlciwgZXZlbnQpO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4gd29ya2VyO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgd29ya2VyIGZyb20gYSBzY3JpcHRcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnRcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gbWVzc2FnZUhhbmRsZXJcblx0ICogQHBhcmFtIHtmdW5jdGlvbn0gZXJyb3JIYW5kbGVyXG5cdCAqIEByZXR1cm4ge1dvcmtlcn1cblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kZS9kb2NzL1dlYi9BUEkvVVJML2NyZWF0ZU9iamVjdFVSTFxuXHQgKi9cblx0Y3JlYXRlRnJvbVNjcmlwdCA9IGZ1bmN0aW9uIChjb250ZW50LCBtZXNzYWdlSGFuZGxlciwgZXJyb3JIYW5kbGVyKSB7XG5cdFx0Y29uc3QgYmxvYkZ1bmN0aW9uID0gbmV3IGdldEdsb2JhbEZ1bmN0aW9uKFwiQmxvYlwiKTtcblx0XHRjb25zdCBibG9iID0gbmV3IGJsb2JGdW5jdGlvbihbdmFsaWRhdGVTdHJpbmcoY29udGVudCldLCB7XG5cdFx0XHR0eXBlOiBcInNjcmlwdC9qYXZhc2NyaXB0XCIsXG5cdFx0fSk7XG5cblx0XHRjb25zdCB1cmwgPSBnZXRHbG9iYWxGdW5jdGlvbihcIlVSTFwiKS5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cdFx0Y29uc3Qgd29ya2VyID0gdGhpcy5jcmVhdGVGcm9tVVJMKHVybCwgbWVzc2FnZUhhbmRsZXIsIGVycm9ySGFuZGxlcik7XG5cblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXVtcIndvcmtlclwiXS5zZXQod29ya2VyLCB1cmwpO1xuXG5cdFx0cmV0dXJuIHdvcmtlcjtcblx0fTtcblxuXHQvKipcblx0ICogVGVybWluYXRlIHRoZSB3b3JrZXIgYW5kIGNhbGwgcmV2b2tlT2JqZWN0VVJMIGlmIG5lY2Vzc2FyeS5cblx0ICpcblx0ICogQHBhcmFtIHdvcmtlclxuXHQgKiBAcmV0dXJuIHtNb25zdGVyLkRPTS5Xb3JrZXIuRmFjdG9yeX1cblx0ICovXG5cdHRlcm1pbmF0ZSh3b3JrZXIpIHtcblx0XHRjb25zdCB3b3JrZXJDbGFzcyA9IGdldEdsb2JhbEZ1bmN0aW9uKFwiV29ya2VyXCIpO1xuXHRcdHZhbGlkYXRlSW5zdGFuY2Uod29ya2VyLCB3b3JrZXJDbGFzcyk7XG5cblx0XHR3b3JrZXIudGVybWluYXRlKCk7XG5cblx0XHRpZiAodGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ3b3JrZXJcIl0uaGFzKHdvcmtlcikpIHtcblx0XHRcdGNvbnN0IHVybCA9IHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wid29ya2VyXCJdLmdldCh3b3JrZXIpO1xuXHRcdFx0VVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtGYWN0b3J5fSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RvbS93b3JrZXIvZmFjdG9yeS5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NLCBpc05vZGV9IGZyb20gXCIuLi8uLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxuZGVzY3JpYmUoJ1dvcmtlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGlmIChpc05vZGUoKSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFsnVVJMJ10sICdjcmVhdGVPYmplY3RVUkwnLCB7XG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiL2V4YW1wbGUubWpzXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBnbG9iYWxbJ1dvcmtlciddID0gY2xhc3Mge1xuICAgICAgICAgICAgICAgIHRlcm1pbmF0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgb25lcnJvcigpIHtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgb25tZXNzYWdlKCkge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBhID0gdHlwZW9mIGdsb2JhbFsnV29ya2VyJ107XG4gICAgICAgICAgICBsZXQgYTEgPSB0eXBlb2YgV29ya2VyO1xuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBqc2RvbSA9IGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdGYWN0b3J5JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdjcmVhdGUgd29ya2VyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCBmYWN0b3J5ID0gbmV3IEZhY3RvcnkoKTtcbiAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IGZhY3RvcnkuY3JlYXRlRnJvbVNjcmlwdCgnY29uc29sZS5sb2coXCJoZWxsbyB3b3JsZFwiKTsnKVxuICAgICAgICAgICAgZXhwZWN0KHdvcmtlcikuaXMuaW5zdGFuY2VvZihXb3JrZXIpO1xuXG4gICAgICAgICAgICBleHBlY3QoZmFjdG9yeS50ZXJtaW5hdGUod29ya2VyKSkuaXMuaW5zdGFuY2VvZihGYWN0b3J5KVxuXG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuXG5pbXBvcnQge0lEfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHtPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7UHJveHlPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuXG5jaGFpLnVzZShjaGFpRG9tKTtcblxubGV0IGh0bWwxID0gYFxuICAgIDx0ZW1wbGF0ZSBpZD1cImN1cnJlbnRcIj5cbiAgICAgICAgPGxpIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDpjdXJyZW50IHwgdG9qc29uXCI+PC9saT5cbiAgICA8L3RlbXBsYXRlPlxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgICAgICA8dWwgZGF0YS1tb25zdGVyLWluc2VydD1cImN1cnJlbnQgcGF0aDphLmJcIj5cbiAgICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGlkPVwidGVzdDJcIj5cbiAgICAgICAgPHVsIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJjdXJyZW50IHBhdGg6YS5iIHwgZG9pdFwiPlxuICAgICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgaWQ9XCJ0ZXN0M1wiPlxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2xhc3MgcGF0aDphLmJcIj5cbiAgICAgICAgICAgIDxpbnB1dCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInZhbHVlIHBhdGg6YS5jXCIgaWQ9XCJpbnB1dDFcIj5cbiAgICAgICAgICAgIDxpbnB1dCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cImNoZWNrZWQgcGF0aDphLmNoZWNrYm94XCIgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImNoZWNrYm94XCIgaWQ9XCJjaGVja2JveFwiPlxuICAgICAgICAgICAgPGlucHV0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphLnRleHRcIiB0eXBlPVwidGV4dFwiIG5hbWU9XCJ0ZXh0XCIgaWQ9XCJ0ZXh0XCI+XG4gICAgICAgICAgICA8aW5wdXQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjaGVja2VkIHBhdGg6YS5yYWRpb1wiIHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJyYWRpb1wiIHZhbHVlPVwicjFcIiBpZD1cInJhZGlvXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInJhZGlvXCIgdmFsdWU9XCJyMlwiIGlkPVwicjJcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwicmFkaW9cIiB2YWx1ZT1cInJ4XCIgaWQ9XCJyeFwiPlxuXG4gICAgICAgICAgICA8c2VsZWN0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphLnNlbGVjdFwiIG5hbWU9XCJzZWxlY3RcIiBpZD1cInNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJvdGhlci12YWx1ZVwiPnZhbHVlMTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUyPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cblxuICAgICAgICAgICAgPHNlbGVjdCBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInZhbHVlIHBhdGg6YS5tdWx0aXNlbGVjdFwiIG5hbWU9XCJtdWx0aXNlbGVjdFwiIG11bHRpcGxlIGlkPVwibXVsdGlzZWxlY3RcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUyPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlNDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJvdGhlci12YWx1ZTVcIj52YWx1ZTU8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuXG4gICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT1cInRleHRhcmVhXCIgaWQ9XCJ0ZXh0YXJlYVwiIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphLnRleHRhcmVhXCI+PC90ZXh0YXJlYT5cblxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuYDtcblxubGV0IGh0bWwyID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDp0ZXh0IHwgdG9sb3dlclwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDp0ZXh0IHwgY2FsbDpteWZvcm1hdHRlclwiPjwvZGl2PlxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwic3RhdGljOmhlbGxvXFxcXCBcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbmA7XG5cbmxldCBodG1sMyA9IGBcblxuICAgIDx0ZW1wbGF0ZSBpZD1cIm15aW5uZXJpZFwiPlxuICAgICAgICA8c3BhbiBkYXRhLW1vbnN0ZXItcmVwbGFjZT1cInBhdGg6bXlpbm5lcmlkIHwgdG9qc29uXCI+PC9zcGFuPlxuICAgIDwvdGVtcGxhdGU+XG5cbiAgICA8dGVtcGxhdGUgaWQ9XCJteWlkXCI+XG4gICAgICAgIDxwIGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJteWlubmVyaWQgcGF0aDphLmJcIj48L3A+XG4gICAgPC90ZW1wbGF0ZT5cblxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJteWlkIHBhdGg6YS5iXCI+PC9kaXY+XG4gICAgPC9kaXY+XG5cbmA7XG5cbmxldCBodG1sNCA9IGBcbiAgICA8ZGl2PlxuICAgICAgICA8Zm9ybSBpZD1cImZvcm0xXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCJjaGVja2VkXCIgbmFtZT1cImNoZWNrYm94XCIgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnN0YXRlXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwidGV4dFwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJyYWRpb1wiIHZhbHVlPVwicjFcIiBpZD1cInIxXCIgZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOnJhZGlvXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInJhZGlvXCIgdmFsdWU9XCJyMlwiIGlkPVwicjJcIiBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6cmFkaW9cIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwicmFkaW9cIiB2YWx1ZT1cInJ4XCIgaWQ9XCJyeFwiIGRhdGEtY29tbWVudD1cIm5vdCBjYWxsZWQgYmVjYXVzZSBubyBiaW5kIGF0dHJpYnV0ZVwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJidXR0b25cIiBuYW1lPVwiYnV0dG9uXCI+XG5cbiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cInNlbGVjdDFcIiBpZD1cInNlbGVjdDFcIiBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6c2VsZWN0XCI+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTE8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMjwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cInNlbGVjdDJcIiBtdWx0aXBsZSBpZD1cInNlbGVjdDJcIiBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6bXVsdGlzZWxlY3RcIj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlMTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWUyPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPG9wdGlvbj52YWx1ZTM8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8b3B0aW9uPnZhbHVlNDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIDxvcHRpb24+dmFsdWU1PC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cblxuICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9XCJ0ZXh0YXJlYVwiIGlkPVwidGV4dGFyZWFcIiBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6dGV4dGFyZWFcIj5cbiAgICAgICAgICAgIFxuICAgICAgICA8L3RleHRhcmVhPlxuXG4gICAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj5cblxuYDtcblxuXG5cbmRlc2NyaWJlKCdET00nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgVXBkYXRlciA9IG51bGw7XG4gICAgXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIH1cbiAgICAgICAgaW5pdEpTRE9NKG9wdGlvbnMpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3VwZGF0ZXIubWpzXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBVcGRhdGVyID0gbS5VcGRhdGVyO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICB9KVxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdVcGRhdGVyKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc2NyaWJlKCd0ZXN0IEdldHRlciAmJiBTZXR0ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2V0RXZlbnRUeXBlcygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IFVwZGF0ZXIoZWxlbWVudCkuc2V0RXZlbnRUeXBlcyhbJ3RvdWNoJ10pKS50by5iZS5pbnN0YW5jZW9mKFVwZGF0ZXIpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGl0KCdnZXRTdWJqZWN0KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKVxuICAgICAgICAgICAgICAgIGxldCBzdWJqZWN0ID0ge2E6IDF9O1xuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgVXBkYXRlcihlbGVtZW50LCBzdWJqZWN0KS5nZXRTdWJqZWN0KCkuYSkudG8uYmUuZXF1YWwoMSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgndGVzdCBjb250cm9sIG1ldGhvZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKVxuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgVXBkYXRlcihlbGVtZW50KS5lbmFibGVFdmVudFByb2Nlc3NpbmcoKSkudG8uYmUuaW5zdGFuY2VvZihVcGRhdGVyKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KCdkaXNhYmxlRXZlbnRQcm9jZXNzaW5nKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKVxuICAgICAgICAgICAgICAgIGV4cGVjdChuZXcgVXBkYXRlcihlbGVtZW50KS5kaXNhYmxlRXZlbnRQcm9jZXNzaW5nKCkpLnRvLmJlLmluc3RhbmNlb2YoVXBkYXRlcik7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgndGVzdCBFcnJvcnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgdGhyb3cgdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIEhUTUxFbGVtZW50IEVycm9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgVXBkYXRlcigpKS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIHRocm93IHZhbHVlIGlzIHdyb25nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKVxuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgVXBkYXRlcihlbGVtZW50LCBudWxsKSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBFcnJvcjogdGhlIHZhbHVlIGlzIG5vdCBpdGVyYWJsZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKVxuXG4gICAgICAgICAgICAgICAgbGV0IHUgPSBuZXcgVXBkYXRlcihcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IFtdXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSB1LnJ1bigpO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcInNob3VsZCBuZXZlciBjYWxsZWQhXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZSkuaXMuaW5zdGFuY2VPZihFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZSArIFwiXCIpLnRvLmJlLmVxdWFsKCdFcnJvcjogdGhlIHZhbHVlIGlzIG5vdCBpdGVyYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sIDEwMCk7XG5cbiAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnVXBkYXRlcigpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBkZXNjcmliZSgnbmV3IFVwZGF0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGRvY3VtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpXG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IG5ldyBVcGRhdGVyKFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QodHlwZW9mIGQpLmlzLmVxdWFsKCdvYmplY3QnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdVcGRhdGVyKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc2NyaWJlKCdSZXBlYXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgYnVpbGQgNiBsaSBlbGVtZW50cycsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKVxuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBuZXcgVXBkYXRlcihcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2k6ICcwJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpOiAnMSd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aTogJzInfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2k6ICczJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpOiAnNCd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aTogJzUnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgZC5ydW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QodHlwZW9mIGQpLmlzLmVxdWFsKCdvYmplY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGxpIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDphLmIuJyArIGkgKyAnIHwgdG9qc29uXCIgZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJjdXJyZW50LScgKyBpICsgJ1wiPntcImlcIjpcIicgKyBpICsgJ1wifTwvbGk+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKFxuICAgICAgICAgICAgICAgICAgICBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGUpKVxuICAgICAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1VwZGF0ZXIoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDQ7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ0V2ZW50aGFuZGxpbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCB1cGRhdGVyLCBmb3JtMSwgcHJveHlvYnNlcnZlcjtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIHByb3h5b2JzZXJ2ZXIgPSBuZXcgUHJveHlPYnNlcnZlcih7fSlcbiAgICAgICAgICAgICAgICB1cGRhdGVyID0gbmV3IFVwZGF0ZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0xJyksIHByb3h5b2JzZXJ2ZXIpO1xuICAgICAgICAgICAgICAgIGZvcm0xID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Zvcm0xJyk7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIC8vIGhlcmUgY2xpY2sgZXZlbnRzIGFyZSB0aHJvd24gb24gdGhlIGNoZWNrYm94IGFuZCB0aGUgc2V0dGluZyBvZiB0aGUgdmFsdWUgaXMgb2JzZXJ2ZWQgdmlhIHRoZSBwcm94eW9ic2VydmVyLlxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBoYW5kbGUgY2hlY2tib3ggY2xpY2sgZXZlbnRzJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIHVwZGF0ZXIuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgc3ViamVjdCA9IHVwZGF0ZXIuZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzdWJqZWN0KS5pcy5lcXVhbChwcm94eW9ic2VydmVyLmdldFN1YmplY3QoKSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZXhwZWN0ZWQgPSBbJ2NoZWNrZWQnLCB1bmRlZmluZWQsICdjaGVja2VkJ107XG4gICAgICAgICAgICAgICAgLy8gaGVyZSB0aGUgbm90YXRpb24gd2l0aCBmdW5jdGlvbiBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgdGhlIHBvaW50ZXIgaXMgc2V0LlxuICAgICAgICAgICAgICAgIHByb3h5b2JzZXJ2ZXIuYXR0YWNoT2JzZXJ2ZXIobmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgZSA9IGV4cGVjdGVkLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlID09PSB1bmRlZmluZWQgJiYgZXhwZWN0ZWQubGVuZ3RoID09PSAwKSBkb25lKG5ldyBFcnJvcigndG8gbWFueSBjYWxscycpKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRTdWJqZWN0KClbJ3N0YXRlJ10gIT09IGUpIGRvbmUobmV3IEVycm9yKHRoaXMuZ2V0U3ViamVjdCgpWydzdGF0ZSddICsgJyBzaG91bGQgJyArIGUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtMS5xdWVyeVNlbGVjdG9yKCdbbmFtZT1jaGVja2JveF0nKS5jbGljaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTApXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3JtMS5xdWVyeVNlbGVjdG9yKCdbbmFtZT1jaGVja2JveF0nKS5jbGljaygpO1xuICAgICAgICAgICAgICAgIH0sIDEwKVxuXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgaGFuZGxlIHJhZGlvIGNsaWNrIGV2ZW50cyAxJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIHVwZGF0ZXIuZW5hYmxlRXZlbnRQcm9jZXNzaW5nKCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgc3ViamVjdCA9IHVwZGF0ZXIuZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChzdWJqZWN0KS5pcy5lcXVhbChwcm94eW9ic2VydmVyLmdldFN1YmplY3QoKSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZXhwZWN0ZWQgPSBbJ3IxJywgJ3IyJywgJ3IxJ107XG4gICAgICAgICAgICAgICAgbGV0IGNsaWNrVGFyZ2V0cyA9IFsncjInLCAncjEnXVxuICAgICAgICAgICAgICAgIC8vIGhlcmUgdGhlIG5vdGF0aW9uIHdpdGggZnVuY3Rpb24gaXMgaW1wb3J0YW50LCBiZWNhdXNlIHRoZSB0aGlzIHBvaW50ZXIgaXMgc2V0LlxuICAgICAgICAgICAgICAgIHByb3h5b2JzZXJ2ZXIuYXR0YWNoT2JzZXJ2ZXIobmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgZSA9IGV4cGVjdGVkLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlID09PSB1bmRlZmluZWQgJiYgZXhwZWN0ZWQubGVuZ3RoID09PSAwKSBkb25lKG5ldyBFcnJvcigndG8gbWFueSBjYWxscycpKTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgdiA9IHRoaXMuZ2V0U3ViamVjdCgpWydyYWRpbyddO1xuICAgICAgICAgICAgICAgICAgICBpZiAodiAhPT0gZSkgZG9uZShuZXcgRXJyb3IodiArICcgc2hvdWxkICcgKyBlKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNsaWNrVGFyZ2V0cy5zaGlmdCgpKS5jbGljaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTApXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncjEnKS5jbGljaygpO1xuICAgICAgICAgICAgICAgIH0sIDEwKVxuXG4gICAgICAgICAgICAgICAgLy8gbm8gaGFuZGxlciAvLyBiaW5kXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyeCcpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfSwgMjApXG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgaGFuZGxlIHNlbGVjdCBjbGljayBldmVudHMgMicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWxlY3QxJyk7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVyLmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHN1YmplY3QgPSB1cGRhdGVyLmdldFN1YmplY3QoKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc3ViamVjdCkuaXMuZXF1YWwocHJveHlvYnNlcnZlci5nZXRTdWJqZWN0KCkpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGV4cGVjdGVkID0gWyd2YWx1ZTInLCAndmFsdWUxJywgJ3ZhbHVlMiddO1xuICAgICAgICAgICAgICAgIC8vIGhlcmUgdGhlIG5vdGF0aW9uIHdpdGggZnVuY3Rpb24gaXMgaW1wb3J0YW50LCBiZWNhdXNlIHRoZSB0aGlzIHBvaW50ZXIgaXMgc2V0LlxuICAgICAgICAgICAgICAgIHByb3h5b2JzZXJ2ZXIuYXR0YWNoT2JzZXJ2ZXIobmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgZSA9IGV4cGVjdGVkLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlID09PSB1bmRlZmluZWQgJiYgZXhwZWN0ZWQubGVuZ3RoID09PSAwKSBkb25lKG5ldyBFcnJvcigndG8gbWFueSBjYWxscycpKTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgdiA9IHRoaXMuZ2V0U3ViamVjdCgpWydzZWxlY3QnXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgIT09IGUpIGRvbmUobmV3IEVycm9yKHYgKyAnIHNob3VsZCAnICsgZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50LnNlbGVjdGVkSW5kZXggPSBzZWxlY3RFbGVtZW50LnNlbGVjdGVkSW5kZXggPT09IDEgPyAwIDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50LmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMClcblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNldCB2YWx1ZSBhbmQgc2ltdWxhdGUgY2xpY2sgZXZlbnQgZm9yIGJ1YmJsZVxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50LnNlbGVjdGVkSW5kZXggPSAxO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50LmNsaWNrKCk7XG5cbiAgICAgICAgICAgICAgICB9LCAyMClcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgaGFuZGxlIHRleHRhcmVhIGV2ZW50cycsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgdGV4dGFyZWFFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RleHRhcmVhJyk7XG5cbiAgICAgICAgICAgICAgICB1cGRhdGVyLmVuYWJsZUV2ZW50UHJvY2Vzc2luZygpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHN1YmplY3QgPSB1cGRhdGVyLmdldFN1YmplY3QoKTtcbiAgICAgICAgICAgICAgICBleHBlY3Qoc3ViamVjdCkuaXMuZXF1YWwocHJveHlvYnNlcnZlci5nZXRTdWJqZWN0KCkpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGV4cGVjdGVkID0gWyd0ZXN0WCcsICdsb3JlbSBpcHN1bScsICcnXTtcbiAgICAgICAgICAgICAgICBsZXQgdGVzdFZhbHVlcyA9IFtcImxvcmVtIGlwc3VtXCIsIFwiXCJdO1xuICAgICAgICAgICAgICAgIC8vIGhlcmUgdGhlIG5vdGF0aW9uIHdpdGggZnVuY3Rpb24gaXMgaW1wb3J0YW50LCBiZWNhdXNlIHRoZSB0aGlzIHBvaW50ZXIgaXMgc2V0LlxuICAgICAgICAgICAgICAgIHByb3h5b2JzZXJ2ZXIuYXR0YWNoT2JzZXJ2ZXIobmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgZSA9IGV4cGVjdGVkLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlID09PSB1bmRlZmluZWQgJiYgZXhwZWN0ZWQubGVuZ3RoID09PSAwKSBkb25lKG5ldyBFcnJvcigndG8gbWFueSBjYWxscycpKTtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgdiA9IHRoaXMuZ2V0U3ViamVjdCgpWyd0ZXh0YXJlYSddO1xuICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkodikgIT09IEpTT04uc3RyaW5naWZ5KGUpKSBkb25lKG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeSh2KSArICcgc2hvdWxkICcgKyBKU09OLnN0cmluZ2lmeShlKSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0YXJlYUVsZW1lbnQudmFsdWUgPSB0ZXN0VmFsdWVzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dGFyZWFFbGVtZW50LmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMClcblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHZhbHVlIGFuZCBzaW11bGF0ZSBjbGljayBldmVudCBmb3IgYnViYmxlXG4gICAgICAgICAgICAgICAgICAgIHRleHRhcmVhRWxlbWVudC52YWx1ZSA9IFwidGVzdFhcIjtcbiAgICAgICAgICAgICAgICAgICAgdGV4dGFyZWFFbGVtZW50LmNsaWNrKCk7XG5cbiAgICAgICAgICAgICAgICB9LCAyMClcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgaGFuZGxlIG11bHRpcGxlIHNlbGVjdCBldmVudHMnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2VsZWN0MicpO1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlci5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcblxuICAgICAgICAgICAgICAgIGxldCBzdWJqZWN0ID0gdXBkYXRlci5nZXRTdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHN1YmplY3QpLmlzLmVxdWFsKHByb3h5b2JzZXJ2ZXIuZ2V0U3ViamVjdCgpKTtcblxuICAgICAgICAgICAgICAgIGxldCBleHBlY3RlZCA9IFtcbiAgICAgICAgICAgICAgICAgICAgWyd2YWx1ZTEnXSxcbiAgICAgICAgICAgICAgICAgICAgWyd2YWx1ZTInLCAndmFsdWUzJywgJ3ZhbHVlNCddLFxuICAgICAgICAgICAgICAgICAgICBbJ3ZhbHVlMScsICd2YWx1ZTQnXSxcbiAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgbGV0IHRlc3RTZWxlY3Rpb25zID0gW1xuICAgICAgICAgICAgICAgICAgICBbZmFsc2UsIHRydWUsIHRydWUsIHRydWVdLFxuICAgICAgICAgICAgICAgICAgICBbdHJ1ZSwgZmFsc2UsIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgICAgICBdXG5cbiAgICAgICAgICAgICAgICAvLyBoZXJlIHRoZSBub3RhdGlvbiB3aXRoIGZ1bmN0aW9uIGlzIGltcG9ydGFudCwgYmVjYXVzZSB0aGUgdGhpcyBwb2ludGVyIGlzIHNldC5cbiAgICAgICAgICAgICAgICBwcm94eW9ic2VydmVyLmF0dGFjaE9ic2VydmVyKG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGUgPSBleHBlY3RlZC5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSA9PT0gdW5kZWZpbmVkICYmIGV4cGVjdGVkLmxlbmd0aCA9PT0gMCkgZG9uZShuZXcgRXJyb3IoJ3RvIG1hbnkgY2FsbHMnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSB0aGlzLmdldFN1YmplY3QoKVsnbXVsdGlzZWxlY3QnXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkodikgIT09IEpTT04uc3RyaW5naWZ5KGUpKSBkb25lKG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeSh2KSArICcgc2hvdWxkICcgKyBKU09OLnN0cmluZ2lmeShlKSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdiA9IHRlc3RTZWxlY3Rpb25zLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5vcHRpb25zWzBdLnNlbGVjdGVkID0gdlswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbMV0uc2VsZWN0ZWQgPSB2WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1syXS5zZWxlY3RlZCA9IHZbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5vcHRpb25zWzNdLnNlbGVjdGVkID0gdlszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50LmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAxMClcblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5vcHRpb25zWzBdLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5vcHRpb25zWzFdLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1syXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm9wdGlvbnNbM10uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5jbGljaygpO1xuXG4gICAgICAgICAgICAgICAgfSwgMjApXG5cblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuXG4gICAgZGVzY3JpYmUoJ1VwZGF0ZXIoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ1JlcGxhY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgYWRkIGxvd2VyIGhlbGxvIGFuZCBIRUxMT3llcyEnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcblxuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBuZXcgVXBkYXRlcihcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogXCJIQUxMT1wiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuXG5cbiAgICAgICAgICAgICAgICBkLnNldENhbGxiYWNrKCdteWZvcm1hdHRlcicsIGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhICsgJ3llcyEnXG4gICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICAgICAgZC5ydW4oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QodHlwZW9mIGQpLmlzLmVxdWFsKCdvYmplY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOnRleHQgfCB0b2xvd2VyXCI+aGFsbG88L2Rpdj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOnRleHQgfCBjYWxsOm15Zm9ybWF0dGVyXCI+SEFMTE95ZXMhPC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwic3RhdGljOmhlbGxvXFxcXCBcIj5oZWxsbyA8L2Rpdj4nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoKTtcblxuICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goXG4gICAgICAgICAgICAgICAgICAgIGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZSkpXG4gICAgICAgICAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnVXBkYXRlcigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMztcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnUmVwbGFjZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCAnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJylcblxuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFVwZGF0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpOiAnMCd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG5cblxuICAgICAgICAgICAgICAgIGQucnVuKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1pbnNlcnQ9XCJteWlkIHBhdGg6YS5iXCI+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8cCBkYXRhLW1vbnN0ZXItaW5zZXJ0PVwibXlpbm5lcmlkIHBhdGg6YS5iXCIgZGF0YS1tb25zdGVyLWluc2VydC1yZWZlcmVuY2U9XCJteWlkLTBcIj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxzcGFuIGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwicGF0aDphLmIuMCB8IHRvanNvblwiIGRhdGEtbW9uc3Rlci1pbnNlcnQtcmVmZXJlbmNlPVwibXlpbm5lcmlkLTBcIj57XCJpXCI6XCIwXCJ9PC9zcGFuPicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKFxuICAgICAgICAgICAgICAgICAgICBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKGUpKVxuICAgICAgICAgICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1VwZGF0ZXIoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGVzY3JpYmUoJ0F0dHJpYnV0ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgY2hhbmdlIGF0dHJpYnV0ZXMnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QzJylcblxuICAgICAgICAgICAgICAgIGxldCB0ZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RleHQnKVxuICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXh0LnZhbHVlKS50by5iZS5lcXVhbChcIlwiKTtcblxuICAgICAgICAgICAgICAgIGxldCByYWRpbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyYWRpbycpXG4gICAgICAgICAgICAgICAgZXhwZWN0KHJhZGlvLmNoZWNrZWQpLnRvLmJlLmZhbHNlO1xuXG4gICAgICAgICAgICAgICAgbGV0IGNoZWNrYm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NoZWNrYm94JylcbiAgICAgICAgICAgICAgICBleHBlY3QoY2hlY2tib3guY2hlY2tlZCkudG8uYmUuZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdCcpXG4gICAgICAgICAgICAgICAgZXhwZWN0KHNlbGVjdC5zZWxlY3RlZEluZGV4KS50by5iZS5lcXVhbCgwKTtcblxuICAgICAgICAgICAgICAgIGxldCBtdWx0aXNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtdWx0aXNlbGVjdCcpXG4gICAgICAgICAgICAgICAgZXhwZWN0KG11bHRpc2VsZWN0LnNlbGVjdGVkSW5kZXgpLnRvLmJlLmVxdWFsKC0xKTtcblxuICAgICAgICAgICAgICAgIGxldCB0ZXh0YXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXh0YXJlYScpXG4gICAgICAgICAgICAgICAgZXhwZWN0KHRleHRhcmVhLnZhbHVlKS50by5iZS5lcXVhbChcIlwiKTtcblxuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBuZXcgVXBkYXRlcihcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6IFwiZGl2LWNsYXNzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogXCJoZWxsb1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IFwiaGVsbG9cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpbzogXCJ0cnVlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dGFyZWE6IFwidGVzdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpc2VsZWN0OiBbJ3ZhbHVlMycsICd2YWx1ZTQnLCAnb3RoZXItdmFsdWU1J10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0OiBcInZhbHVlMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrYm94OiBcInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcblxuXG4gICAgICAgICAgICAgICAgZC5ydW4oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxkaXYgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJjbGFzcyBwYXRoOmEuYlwiIGNsYXNzPVwiZGl2LWNsYXNzXCI+Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8aW5wdXQgZGF0YS1tb25zdGVyLWF0dHJpYnV0ZXM9XCJ2YWx1ZSBwYXRoOmEuY1wiIGlkPVwiaW5wdXQxXCIgdmFsdWU9XCJoZWxsb1wiPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPHRleHRhcmVhIG5hbWU9XCJ0ZXh0YXJlYVwiIGlkPVwidGV4dGFyZWFcIiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInZhbHVlIHBhdGg6YS50ZXh0YXJlYVwiIHZhbHVlPVwidGVzdFwiPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQpLmNvbnRhaW4uaHRtbCgnPGlucHV0IGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwiY2hlY2tlZCBwYXRoOmEucmFkaW9cIiB0eXBlPVwicmFkaW9cIiBuYW1lPVwicmFkaW9cIiB2YWx1ZT1cInIxXCIgaWQ9XCJyYWRpb1wiIGNoZWNrZWQ9XCJ0cnVlXCI+Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0ZXh0LnZhbHVlLCAndGV4dCBjb250cm9sJykudG8uYmUuZXF1YWwoZC5nZXRTdWJqZWN0KClbJ2EnXVsnYyddKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChyYWRpby5jaGVja2VkLCAncmFkaW8gY29udHJvbCcpLnRvLmJlLmVxdWFsKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHRleHRhcmVhLnZhbHVlLCAndGV4dGFyZWEgY29udHJvbCcpLnRvLmJlLmVxdWFsKGQuZ2V0U3ViamVjdCgpWydhJ11bJ3RleHRhcmVhJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHNlbGVjdC5zZWxlY3RlZEluZGV4LCAnc2VsZWN0IGNvbnRyb2wnKS50by5iZS5lcXVhbCgxKTsgLy8gWzA9Pm90aGVyLXZhbHVlLCAxPT52YWx1ZTJdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtdWx0aXNlbGVjdFNlbGVjdGVkT3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIG9ial0gb2YgT2JqZWN0LmVudHJpZXMobXVsdGlzZWxlY3Quc2VsZWN0ZWRPcHRpb25zKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpc2VsZWN0U2VsZWN0ZWRPcHRpb25zLnB1c2gob2JqLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkobXVsdGlzZWxlY3RTZWxlY3RlZE9wdGlvbnMpLCAnbXVsdGlzZWxlY3QgY29udHJvbCcpLnRvLmJlLmVxdWFsKEpTT04uc3RyaW5naWZ5KGQuZ2V0U3ViamVjdCgpWydhJ11bJ211bHRpc2VsZWN0J10pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChjaGVja2JveC5jaGVja2VkLCAnY2hlY2tib3ggY29udHJvbCcpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgICAgICAgICAgICB9LCAxMDApO1xuXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goXG4gICAgICAgICAgICAgICAgICAgIGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZSkpXG4gICAgICAgICAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ0dldCBBdHRyaWJ1dGUgUGlwZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGlkLCBtb2NrcztcbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgaWQgPSBuZXcgSUQoJ21vbnN0ZXInKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGAgPGRpdiBpZD1cImAgKyBpZCArIGBcIlxuICAgICAgICAgICAgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmEgfCBpZjp2YWx1ZTpcXFxcIFwiPjwvZGl2PmBcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnc2hvdWxkIGluY2x1ZGUgc3BhY2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZC50b1N0cmluZygpKVxuXG4gICAgICAgICAgICBjb25zdCBwaXBlID0gZGl2LmdldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXJlcGxhY2UnKTtcbiAgICAgICAgICAgIGV4cGVjdChwaXBlLmxlbmd0aCkudG8uYmUuZXF1YWwoMjApO1xuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnbWFudWVsIHVwZGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGlkLCBtb2NrcztcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBpZCA9IG5ldyBJRCgnbW9uc3RlcicpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgPGlucHV0IGlkPVwiYCArIGlkICsgYFwiZGF0YS1tb25zdGVyLWJpbmQ9XCJwYXRoOm15dmFsdWVcIj5gXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBnZXQgdmFsdWUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS52YWx1ZSA9IFwiaGVsbG9cIjtcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZXIgPSBuZXcgVXBkYXRlcihtb2Nrcyk7XG4gICAgICAgICAgICBjb25zdCBzdWJqZWN0ID0gdXBkYXRlci5nZXRTdWJqZWN0KCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChzdWJqZWN0KS50by5ub3QuaGF2ZS5wcm9wZXJ0eSgnbXl2YWx1ZScpO1xuICAgICAgICAgICAgdXBkYXRlci5yZXRyaWV2ZSgpO1xuICAgICAgICAgICAgZXhwZWN0KHN1YmplY3QpLnRvLmhhdmUucHJvcGVydHkoJ215dmFsdWUnKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbiAgICAvKipcbiAgICAgKiBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy8xMTJcbiAgICAgKi9cbiAgICBkZXNjcmliZSgnVXBkYXRlcigpIDIwMjIwMTA3JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAvLyBsYW5ndWFnZT1IVE1MXG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBgXG5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOmNvbnRlbnRcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICBgO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdCdWdmaXggIzExMicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBhZGQgJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgY29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKTtcbiAgICAgICAgICAgICAgICBsZXQgbmV3RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MID0gJ3llYWghIDxiPlRlc3Q8L2I+ISc7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXJIVE1MID0gY29udGFpbmVyRWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3SFRNTCA9IG5ld0VsZW1lbnQuaW5uZXJIVE1MO1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBuZXcgVXBkYXRlcihcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogbmV3RWxlbWVudFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZC5ydW4oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoY29udGFpbmVyRWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2PnllYWghIDxiPlRlc3Q8L2I+ITwvZGl2PicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMClcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9LCAxMDApXG5cbiAgICAgICAgICAgICAgICAvLyBkLnNldENhbGxiYWNrKCdteWZvcm1hdHRlcicsIGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiBhICsgJ3llcyEnXG4gICAgICAgICAgICAgICAgLy8gfSlcbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vICAgICBkLnJ1bigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBleHBlY3QodHlwZW9mIGQpLmlzLmVxdWFsKCdvYmplY3QnKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOnRleHQgfCB0b2xvd2VyXCI+aGFsbG88L2Rpdj4nKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGV4cGVjdChlbGVtZW50KS5jb250YWluLmh0bWwoJzxkaXYgZGF0YS1tb25zdGVyLXJlcGxhY2U9XCJwYXRoOnRleHQgfCBjYWxsOm15Zm9ybWF0dGVyXCI+SEFMTE95ZXMhPC9kaXY+Jyk7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBleHBlY3QoZWxlbWVudCkuY29udGFpbi5odG1sKCc8ZGl2IGRhdGEtbW9uc3Rlci1yZXBsYWNlPVwic3RhdGljOmhlbGxvXFxcXCBcIj5oZWxsbyA8L2Rpdj4nKTtcbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgcmV0dXJuIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgfSkuY2F0Y2goXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBlID0+IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihlKSlcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLy8gfSwgMTAwKVxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtMb2NhbGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi9sb2NhbGUubWpzXCI7XG5pbXBvcnQge2dldExvY2FsZU9mRG9jdW1lbnR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuZGVzY3JpYmUoJ0F0dHJpYnV0ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldExvY2FsZU9mRG9jdW1lbnQnLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgICAgICBbXG4gICAgICAgICAgICBbXCJkZVwiXSxcbiAgICAgICAgICAgIFtcInNsLUlULW5lZGlzXCJdLFxuICAgICAgICAgICAgW1wiZW4tR0JcIl0sXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICAgICAgaXQoJ3JldHVybiBsYW5ndWFnZSAnICsgYSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBodG1sID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2h0bWwnKTtcbiAgICAgICAgICAgICAgICBsZXQgbm9kZSA9IGh0bWwuaXRlbSgwKTtcblxuICAgICAgICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKCdsYW5nJywgYSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGdldExvY2FsZU9mRG9jdW1lbnQoKS50b1N0cmluZygpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxuICAgIGl0KCdyZXR1cm4gbGFuZ3VhZ2UgZW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBodG1sID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2h0bWwnKTtcbiAgICAgICAgbGV0IG5vZGUgPSBodG1sLml0ZW0oMCk7XG4gICAgICAgIGxldCBsYW5nPSBub2RlLmdldEF0dHJpYnV0ZSgnbGFuZycpO1xuXG4gICAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCdsYW5nJyk7XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IGdldExvY2FsZU9mRG9jdW1lbnQoKTtcbiAgICAgICAgZXhwZWN0KGxvY2FsZSkudG8uYmUuaW5zdGFuY2VPZihMb2NhbGUpO1xuICAgICAgICBleHBlY3QobG9jYWxlLmxvY2FsZVN0cmluZykudG8uYmUuZXF1YWwobmF2aWdhdG9yLmxhbmd1YWdlKTtcblxuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgnbGFuZycsIGxhbmcpO1xuICAgICAgICBcbiAgICB9KVxuXG5cbn0pIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtnZXREb2N1bWVudEZyYWdtZW50RnJvbVN0cmluZ30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1RoZW1lLCBnZXREb2N1bWVudFRoZW1lfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS90aGVtZS5tanNcIjtcblxuZGVzY3JpYmUoJ1RoZW1lJywgZnVuY3Rpb24gKCkge1xuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCduZXcgVGhlbWUoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gVGhlbWUgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBUaGVtZSgnbXktdGhlbWUnKSkuaXMuYS5pbnN0YW5jZU9mKFRoZW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIFRoZW1lLU5hbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFRoZW1lKCdteS10aGVtZScpLmdldE5hbWUoKSkuaXMuZXF1YWwoJ215LXRoZW1lJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93IEVycm9yIGJlY2F1c2UgZW1wdHkgYXJndW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IFRoZW1lKCkpLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgfSk7XG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgRXJyb3IgYmVjYXVzZSBubyBzdHJpbmcgYXJndW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IFRoZW1lKDIpKS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2dldERvY3VtZW50VGhlbWUoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gVGhlbWUgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGdldERvY3VtZW50VGhlbWUoKSkuaXMuYS5pbnN0YW5jZU9mKFRoZW1lKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gRGVmYXVsdCBUaGVtZSBuYW1lJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGdldERvY3VtZW50VGhlbWUoKS5nZXROYW1lKCkpLmlzLmVxdWFsKCdtb25zdGVyJyk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ2V0RG9jdW1lbnRUaGVtZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXRoZW1lLW5hbWUnLCAndGVzdHRoZW1lJyk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKS5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci10aGVtZS1uYW1lJyk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdGVzdHRoZW1lIFRoZW1lIG5hbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoZ2V0RG9jdW1lbnRUaGVtZSgpLmdldE5hbWUoKSkuaXMuZXF1YWwoJ3Rlc3R0aGVtZScpO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xufSk7XG5cblxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7aW50ZXJuYWxTeW1ib2x9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHtnZXREb2N1bWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7UHJveHlPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9wcm94eW9ic2VydmVyLm1qc1wiO1xuaW1wb3J0IHtjaGFpRG9tfSBmcm9tIFwiLi4vLi4vdXRpbC9jaGFpLWRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuXG5sZXQgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5jaGFpLnVzZShjaGFpRG9tKTtcblxubGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxubGV0IGh0bWwyID0gYFxuICAgIDxpbnB1dCBkYXRhLW1vbnN0ZXItYmluZD1cInBhdGg6YVwiIGlkPVwidGVzdDJcIiBkYXRhLW1vbnN0ZXItYXR0cmlidXRlcz1cInZhbHVlIHBhdGg6YVwiPlxuYDtcblxuLy8gZGVmaW5lZCBpbiBjb25zdGFudHMubWpzXG5jb25zdCB1cGRhdGVyU3ltYm9sS2V5ID0gXCJAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAb3B0aW9ucy11cGRhdGVyLWxpbmtcIlxuY29uc3QgdXBkYXRlclN5bWJvbFN5bWJvbCA9IFN5bWJvbC5mb3IodXBkYXRlclN5bWJvbEtleSk7XG5cblxuZGVzY3JpYmUoJ0RPTScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBDdXN0b21FbGVtZW50LCByZWdpc3RlckN1c3RvbUVsZW1lbnQsIFRlc3RDb21wb25lbnQsIGRvY3VtZW50LCBUZXN0Q29tcG9uZW50MiwgYXNzaWduVXBkYXRlclRvRWxlbWVudCxcbiAgICAgICAgYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQ7XG5cbiAgICBkZXNjcmliZShcImFzc2lnblVwZGF0ZXJUb0VsZW1lbnRcIiwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuICAgICAgICAgICAgaW5pdEpTRE9NKG9wdGlvbnMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXBkYXRlci5tanNcIikudGhlbigoeXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQgPSB5eVsnYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQnXTtcbiAgICAgICAgICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUVsZW1lbnQgPSBtWydDdXN0b21FbGVtZW50J107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduVXBkYXRlclRvRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50cywgb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRPYmplY3RXaXRoVXBkYXRlclRvRWxlbWVudC5jYWxsKHRoaXMsIGVsZW1lbnRzLCB1cGRhdGVyU3ltYm9sU3ltYm9sLCBvYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiB0aGlzIHRlc3QgdHJ5IHRvIHNpbXVsYXRlIHRoZSBidWcgdGhhdCB3YXMgZm91bmQgaW4gdGhlIGFzc2lnblVwZGF0ZXJUb0VsZW1lbnQgZnVuY3Rpb24uXG4gICAgICAgICAqIFRoZSBidWcgd2FzIHRoYXQgdGhlIHVwZGF0ZXIgd2FzIG5vdCBhc3NpZ25lZCB0byB0aGUgZWxlbWVudCB3aGVuIHRoZSBlbGVtZW50IHdhcyBjcmVhdGVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiB1bmZvcnR1bmF0ZWx5LCB0aGlzIHRlc3QgZG9lcyBub3QgcmVwcm9kdWNlIHRoZSBidWcuXG4gICAgICAgICAqL1xuICAgICAgICBpdChcInNob3VsZCBhc3NpZ24gYW4gdXBkYXRlciB0byBhbiBlbGVtZW50XCIsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MicpO1xuXG4gICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtb2Nrc1wiKS5pbm5lckhUTUwpLnRvLmVxdWFsKGh0bWwyKTtcblxuICAgICAgICAgICAgY29uc3QgYSA9IHthOiAxfTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSB7YjogMn07XG5cbiAgICAgICAgICAgIGNvbnN0IGFwID0gbmV3IFByb3h5T2JzZXJ2ZXIoYSk7XG4gICAgICAgICAgICBjb25zdCBicCA9IG5ldyBQcm94eU9ic2VydmVyKGIpO1xuXG4gICAgICAgICAgICBjb25zdCB4ID0gYXAuZ2V0U3ViamVjdCgpXG4gICAgICAgICAgICBjb25zdCB5ID0gYnAuZ2V0U3ViamVjdCgpXG5cbiAgICAgICAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIHNldC5hZGQoZWxlbWVudCk7XG5cbiAgICAgICAgICAgIGFzc2lnblVwZGF0ZXJUb0VsZW1lbnQuY2FsbChlbGVtZW50LCBzZXQsIGFwKTtcbiAgICAgICAgICAgIGFzc2lnblVwZGF0ZXJUb0VsZW1lbnQuY2FsbChlbGVtZW50LCBzZXQsIGJwKTtcblxuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KHgpKS50by5lcXVhbCgne1wiYVwiOjF9Jyk7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoeSkpLnRvLmVxdWFsKCd7XCJiXCI6Mn0nKTtcblxuICAgICAgICAgICAgY29uc3Qgc3kgPSB1cGRhdGVyU3ltYm9sU3ltYm9sO1xuXG4gICAgICAgICAgICBsZXQgdiA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1tb25zdGVyLW9iamVjdGxpbmtcIik7XG4gICAgICAgICAgICBleHBlY3QodikudG8uZXF1YWwoJ1N5bWJvbCgnICsgdXBkYXRlclN5bWJvbEtleSArICcpJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZXIgPSBlbGVtZW50W3N5XTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIHVwZGF0ZXIpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHUgb2Ygdikge1xuICAgICAgICAgICAgICAgICAgICB1LnJ1bigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdS5lbmFibGVFdmVudFByb2Nlc3NpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleHBlY3QodXBkYXRlcikudG8uYmUuYW4uaW5zdGFuY2VvZihTZXQpO1xuICAgICAgICAgICAgZXhwZWN0KHVwZGF0ZXIpLnRvLmJlLmEoXCJTZXRcIik7XG5cbiAgICAgICAgICAgIHguYSA9IDM7XG4gICAgICAgICAgICBicC5nZXRTdWJqZWN0KCkuYiA9IDQ7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tIVE1MID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtb2Nrc1wiKTtcblxuICAgICAgICAgICAgICAgIC8vIGh0bWwgZXhwZXh0ZWQ6XG4gICAgICAgICAgICAgICAgLy8gPGlucHV0IGRhdGEtbW9uc3Rlci1iaW5kPVwicGF0aDphXCIgaWQ9XCJ0ZXN0MlwiIGRhdGEtbW9uc3Rlci1hdHRyaWJ1dGVzPVwidmFsdWUgcGF0aDphXCIgZGF0YS1tb25zdGVyLW9iamVjdGxpbms9XCJTeW1ib2woQHNjaHVrYWkvbW9uc3Rlci9kb20vQEBvYmplY3QtdXBkYXRlci1saW5rKVwiIHZhbHVlPVwiM1wiPlxuXG4gICAgICAgICAgICAgICAgZXhwZWN0KG1vY2tIVE1MLnF1ZXJ5U2VsZWN0b3IoXCIjdGVzdDJcIikpLnRvLmhhdmUudmFsdWUoJzMnKVxuICAgICAgICAgICAgICAgIGV4cGVjdChtb2NrSFRNTC5xdWVyeVNlbGVjdG9yKFwiI3Rlc3QyXCIpKS50by5oYXZlLmF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLW9iamVjdGxpbmsnLCAnU3ltYm9sKCcgKyB1cGRhdGVyU3ltYm9sS2V5ICsgJyknKVxuICAgICAgICAgICAgICAgIC8vZXhwZWN0KG1vY2tIVE1MKS50by5oYXZlLmh0bWwocmVzdWx0SFRNTCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudC52YWx1ZSkudG8uZXF1YWwoXCIzXCIpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGFwLmdldFJlYWxTdWJqZWN0KCkpKS50by5lcXVhbCgne1wiYVwiOjN9Jyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGJwLmdldFJlYWxTdWJqZWN0KCkpKS50by5lcXVhbCgne1wiYlwiOjR9Jyk7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9LCA1MClcblxuICAgICAgICB9KVxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdDdXN0b21FbGVtZW50KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBpbml0SlNET00oe30pLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9jdXN0b21lbGVtZW50Lm1qc1wiKS50aGVuKChtKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUVsZW1lbnQgPSBtWydDdXN0b21FbGVtZW50J107XG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQgPSBtWydyZWdpc3RlckN1c3RvbUVsZW1lbnQnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnQgPSBjbGFzcyBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm1vbnN0ZXItdGVzdGNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZXN0Q29tcG9uZW50KVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBUZXN0Q29tcG9uZW50MiA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibW9uc3Rlci10ZXN0Y2xhc3MyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgZGVmYXVsdHMoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZW1vdGVzdDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbjogJzxoMT48L2gxPjxhcnRpY2xlPjxwPnRlc3Q8L3A+PGRpdiBpZD1cImNvbnRhaW5lclwiPjwvZGl2PjwvYXJ0aWNsZT4nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudDIpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnQ3VzdG9tRWxlbWVudCgpIHdpdGggQ29uZmlnJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZWFkIGNvbmZpZyBmcm9tIHRhZycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8c2NyaXB0IGlkPVwiY29uZmlnMVwiIHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCI+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImRlbW90ZXN0XCI6MTQyNVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3NjcmlwdD5cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8bW9uc3Rlci10ZXN0Y2xhc3MyIGlkPVwidGhpc2lzYXRlc3RcIiBkYXRhLW1vbnN0ZXItb3B0aW9ucy1zZWxlY3Rvcj1cIiNjb25maWcxXCI+XG4gICAgICAgICAgICAgICAgPC9tb25zdGVyLXRlc3RjbGFzczI+XG4gICAgICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgICAgIGxldCBtb25zdGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RoaXNpc2F0ZXN0Jyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG1vbnN0ZXIuZ2V0T3B0aW9uKCdkZW1vdGVzdCcpKS5pcy5lcWwoMTQyNSk7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gY3VzdG9tLWVsZW1lbnQgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gbmV3IFRlc3RDb21wb25lbnQoKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodHlwZW9mIGQpLmlzLmVxdWFsKCdvYmplY3QnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnY29ubmVjdCBlbXB0eSBlbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXQoJ2RvY3VtZW50IHNob3VsZCBjb250YWluIG1vbnN0ZXItdGVzdGNsYXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZXN0Y2xhc3MnKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKS5hcHBlbmRDaGlsZChkKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21vbnN0ZXItdGVzdGNsYXNzJykubGVuZ3RoKS5pcy5lcXVhbCgxKTtcbiAgICAgICAgICAgICAgICAvLyBubyBkYXRhLW1vbnN0ZXItb2JqZWN0bGluaz1cIlN5bWJvbChtb25zdGVyVXBkYXRlcilcIiBiZWNhdXNlIGl0IGhhcyBub3RoaW5nIHRvIHVwZGF0ZVxuICAgICAgICAgICAgICAgIC8vIGJ1dCBkYXRhLW1vbnN0ZXItZXJyb3I9XCJFcnJvcjogaHRtbCBpcyBub3Qgc2V0LlwiXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpKS5jb250YWluLmh0bWwoJzxtb25zdGVyLXRlc3RjbGFzcyBkYXRhLW1vbnN0ZXItZXJyb3I9XCJFcnJvcjogaHRtbCBpcyBub3Qgc2V0LlwiPjwvbW9uc3Rlci10ZXN0Y2xhc3M+Jyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2Nvbm5lY3QgZWxlbWVudCB3aXRoIGh0bWwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnZG9jdW1lbnQgc2hvdWxkIGNvbnRhaW4gbW9uc3Rlci10ZXN0Y2xhc3MyJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGVzdGNsYXNzMicpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICAgICAgLy8gaW5zZXJ0IERPTSBydW4gaW4gZXh0cmEgcHJvY2VzcyB2aWEgc2V0VGltZW91dCFcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbW9uc3Rlci10ZXN0Y2xhc3MyJykubGVuZ3RoKS5pcy5lcXVhbCgxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnbW9uc3Rlci10ZXN0Y2xhc3MyJykuaXRlbSgwKS5zaGFkb3dSb290LmlubmVySFRNTCkuaXMuZXF1YWwoJzxoMT48L2gxPjxhcnRpY2xlPjxwPnRlc3Q8L3A+PGRpdiBpZD1cImNvbnRhaW5lclwiPjwvZGl2PjwvYXJ0aWNsZT4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci10ZXN0Y2xhc3MyIGRhdGEtbW9uc3Rlci1vYmplY3RsaW5rPVwiU3ltYm9sKCcgKyB1cGRhdGVyU3ltYm9sS2V5ICsgJylcIj48L21vbnN0ZXItdGVzdGNsYXNzMj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH0sIDEwKTtcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRlc2NyaWJlKCdPcHRpb25zIGNoYW5nZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgaXQoJ2RlbGVnYXRlc0ZvY3VzIHNob3VsZCBjaGFuZ2UgZnJvbSB0cnVlIHRvIGZhbHNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZXN0Y2xhc3MnKVxuXG4gICAgICAgICAgICAgICAgY29uc3QgbyA9IGVsZW1lbnRbaW50ZXJuYWxTeW1ib2xdLnJlYWxTdWJqZWN0O1xuICAgICAgICAgICAgICAgIGV4cGVjdChPYmplY3QuaXMoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3QsIG8pKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnRbaW50ZXJuYWxTeW1ib2xdLnJlYWxTdWJqZWN0Lm9wdGlvbnMuZGVsZWdhdGVzRm9jdXMpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnRbaW50ZXJuYWxTeW1ib2xdLnN1YmplY3Qub3B0aW9ucy5kZWxlZ2F0ZXNGb2N1cykudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRPcHRpb24oJ2RlbGVnYXRlc0ZvY3VzJykpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KE9iamVjdC5pcyhlbGVtZW50W2ludGVybmFsU3ltYm9sXS5yZWFsU3ViamVjdCwgbykpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgICAgICAvLyBlbGVtZW50LnNldEF0dHJpYnV0ZShBVFRSSUJVVEVfT1BUSU9OUywgSlNPTi5zdHJpbmdpZnkoe2RlbGVnYXRlc0ZvY3VzOiBmYWxzZX0pKTtcbiAgICAgICAgICAgICAgICAvLyBleHBlY3QoT2JqZWN0LmlzKGVsZW1lbnRbaW50ZXJuYWxTeW1ib2xdLnJlYWxTdWJqZWN0LCBvKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vIGV4cGVjdChlbGVtZW50LmdldE9wdGlvbignZGVsZWdhdGVzRm9jdXMnKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gZXhwZWN0KGVsZW1lbnRbaW50ZXJuYWxTeW1ib2xdLnJlYWxTdWJqZWN0Lm9wdGlvbnMuZGVsZWdhdGVzRm9jdXMpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIGV4cGVjdChPYmplY3QuaXMoZWxlbWVudFtpbnRlcm5hbFN5bWJvbF0ucmVhbFN1YmplY3QsIG8pKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnc2V0T3B0aW9ucygpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsnc2hhZG93TW9kZScsICd4MSddLFxuICAgICAgICAgICAgICAgIFsndGVtcGxhdGVzLm1haW4nLCAneDInXSwgLy8gaXMgZXhwbGljaXRseSBzZXQgdG8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgWydkZWxlZ2F0ZXNGb2N1cycsICd4NCddLFxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cblxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgbmV3VmFsdWUgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgICAgIGxldCB0ZXh0ID0ga2V5ICsgJyBzaG91bGQgcmV0dXJuICcgKyBuZXdWYWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0ga2V5ICsgJyB3YXMgbm90IHNldCwgdGhlcmVmb3JlIGRlZmF1bHQgJyArIG5ld1ZhbHVlO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICAgICAgaXQodGV4dCwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZXN0Y2xhc3MnKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGQuZ2V0T3B0aW9uKGtleSkpLnRvLmJlLm5vdC5lcXVhbChuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCB4ID0gZC5zZXRPcHRpb24oa2V5LCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChkLmdldE9wdGlvbihrZXkpKS50by5iZS5lcXVhbChuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnZ2V0T3B0aW9ucygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydzaGFkb3dNb2RlJywgJ29wZW4nXSxcbiAgICAgICAgICAgICAgICBbJ3RlbXBsYXRlcy5tYWluJywgdW5kZWZpbmVkXSwgLy8gaXMgZXhwbGljaXRseSBzZXQgdG8gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgWydkZWxlZ2F0ZXNGb2N1cycsIHRydWVdLFxuICAgICAgICAgICAgICAgIFsneC55LnonLCB0cnVlLCB0cnVlXSwgLy8geC55LnogaXNudCBzZXQsIGRlZmF1bHRWYWx1ZSBpcyB1c2VkXG4gICAgICAgICAgICAgICAgWyd4JywgdHJ1ZSwgdHJ1ZV0gLy8geCBpc250IHNldCwgZGVmYXVsdFZhbHVlIGlzIHVzZWRcbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG5cbiAgICAgICAgICAgICAgICBsZXQga2V5ID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZSA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICAgICAgbGV0IHRleHQgPSBrZXkgKyAnIHNob3VsZCByZXR1cm4gJyArIHZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0ga2V5ICsgJyB3YXMgbm90IHNldCwgdGhlcmVmb3JlIGRlZmF1bHQgJyArIGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIGl0KHRleHQsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGVzdGNsYXNzJyk7XG4gICAgICAgICAgICAgICAgICAgIGxldCB4ID0gZC5nZXRPcHRpb24oa2V5LCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoeCkudG8uYmUuZXF1YWwodmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcblxuICAgICAgICAvKipcbiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vb3NzL2xpYnJhcmllcy9qYXZhc2NyaXB0L21vbnN0ZXIvLS9pc3N1ZXMvMTEzXG4gICAgICAgICAqL1xuICAgICAgICBkZXNjcmliZSgnQXNzaWduIENTU1N0eWxlIGFzIEFycmF5IHdpdGggd3JvbmcgdHlwZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3QgaHRtbFRBRyA9ICdtb25zdGVyLXRlc3RjbGFzcy14MSc7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcywgVGVzdENvbXBvbmVudFgxO1xuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG5cbiAgICAgICAgICAgICAgICBUZXN0Q29tcG9uZW50WDEgPSBjbGFzcyBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWxUQUdcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRDU1NTdHlsZVNoZWV0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt0cnVlXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBnZXQgZGVmYXVsdHMoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluOiAnPGgxPnRlc3Q8L2gxPidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlc3RDb21wb25lbnRYMSlcblxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdChodG1sVEFHICsgXCIgc2hvdWxkIHRocm93IEV4Y2VwdGlvblwiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChodG1sVEFHKTtcblxuICAgICAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBkaXYuYXBwZW5kKGQpO1xuXG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZGl2KS5jb250YWluLmh0bWwoJ2RhdGEtbW9uc3Rlci1lcnJvcj1cIlR5cGVFcnJvcjogdmFsdWUgaXMgbm90IGFuIGluc3RhbmNlIG9mIENTU1N0eWxlU2hlZXRcIicpO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcblxuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pXG5cblxuICAgICAgICAvKipcbiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vb3NzL2xpYnJhcmllcy9qYXZhc2NyaXB0L21vbnN0ZXIvLS9pc3N1ZXMvMTEzXG4gICAgICAgICAqL1xuICAgICAgICBkZXNjcmliZSgnQXNzaWduIENTU1N0eWxlIGFzIEFycmF5IGFuZCBDU1NTdHlsZXNoZWV0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCBodG1sVEFHID0gJ21vbnN0ZXItdGVzdGNsYXNzLXgxMTMtMic7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcywgVGVzdENvbXBvbmVudFgxMTNYMjtcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnRYMTEzWDIgPSBjbGFzcyBleHRlbmRzIEN1c3RvbUVsZW1lbnQge1xuICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0VGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWxUQUdcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBnZXQgZGVmYXVsdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZXM6IHttYWluOiAnPGgxPnRlc3Q8L2gxPid9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldENTU1N0eWxlU2hlZXQoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSAobmV3IENTU1N0eWxlU2hlZXQoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHMuaW5zZXJ0UnVsZSgnYSB7IGNvbG9yIDogcmVkfScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3NdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlc3RDb21wb25lbnRYMTEzWDIpXG5cblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoaHRtbFRBRyArIFwiIHNob3VsZCB0aHJvdyBFeGNlcHRpb24gMlwiLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChodG1sVEFHKTtcblxuICAgICAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKTtcbiAgICAgICAgICAgICAgICBkaXYuYXBwZW5kKGQpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuc2hhZG93Um9vdC5pbm5lckhUTUwpLmlzLmVxKCc8aDE+dGVzdDwvaDE+Jyk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbGluayBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy8xMTNcbiAgICAgICAgICovXG4gICAgICAgIGRlc2NyaWJlKCdBc3NpZ24gQ1NTU3R5bGUgYXMgQXJyYXkgYW5kIENTUyBhcyBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGh0bWxUQUcgPSAnbW9uc3Rlci10ZXN0Y2xhc3MteDExMy0yMSc7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcywgVGVzdENvbXBvbmVudFgxMTNYMjI7XG4gICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cbiAgICAgICAgICAgICAgICBUZXN0Q29tcG9uZW50WDExM1gyMiA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbFRBR1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGdldCBkZWZhdWx0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlczoge21haW46ICc8aDE+dGVzdDwvaDE+J30sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnYSB7IGNvbG9yOnJlZCB9JztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZXN0Q29tcG9uZW50WDExM1gyMilcblxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdChodG1sVEFHICsgXCIgc2hvdWxkIGVxIDxzdHlsZT5hIHsgY29sb3I6cmVkIH08L3N0eWxlPjxoMT50ZXN0PC9oMT5cIiwgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaHRtbFRBRyk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICAgICAgZGl2LmFwcGVuZChkKTtcblxuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuc2hhZG93Um9vdC5pbm5lckhUTUwpLmlzLmVxKCc8c3R5bGU+YSB7IGNvbG9yOnJlZCB9PC9zdHlsZT48aDE+dGVzdDwvaDE+Jyk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgICAvKipcbiAgICAgICAgICogQGxpbmsgaHR0cHM6Ly9naXRsYWIuc2NodWthaS5jb20vb3NzL2xpYnJhcmllcy9qYXZhc2NyaXB0L21vbnN0ZXIvLS9pc3N1ZXMvMTEzXG4gICAgICAgICAqL1xuICAgICAgICBkZXNjcmliZSgnQXNzaWduIENTU1N0eWxlIGFzIEFycmF5IGFuZCBDU1MgYXMgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCBodG1sVEFHID0gJ21vbnN0ZXItdGVzdGNsYXNzLXgxMTMtMjInO1xuXG4gICAgICAgICAgICBsZXQgbW9ja3MsIFRlc3RDb21wb25lbnRYMTEzWDIyMztcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICAgICAgICAgIFRlc3RDb21wb25lbnRYMTEzWDIyMyA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRUYWcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbFRBR1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGdldCBkZWZhdWx0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBzdXBlci5kZWZhdWx0cywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlczoge21haW46ICc8aDE+dGVzdDwvaDE+J30sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgICAgICBzdGF0aWMgZ2V0Q1NTU3R5bGVTaGVldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbJ2EgeyBjb2xvcjpyZWQgfSddO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50KFRlc3RDb21wb25lbnRYMTEzWDIyMylcblxuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdChodG1sVEFHICsgXCIgc2hvdWxkIGVxIDxzdHlsZT5hIHsgY29sb3I6cmVkIH08L3N0eWxlPjxoMT50ZXN0PC9oMT5cIiwgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaHRtbFRBRyk7XG5cbiAgICAgICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICAgICAgZGl2LmFwcGVuZChkKTtcblxuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuc2hhZG93Um9vdC5pbm5lckhUTUwpLmlzLmVxKCc8c3R5bGU+YSB7IGNvbG9yOnJlZCB9PC9zdHlsZT48aDE+dGVzdDwvaDE+Jyk7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCdoYXNOb2RlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBtb2NrcztcbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgaXQoXCJoYXNOb2RlIG1vbnN0ZXItdGVzdGNsYXNzIHNob3VsZCByZXR1cm4gLi4uXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItdGVzdGNsYXNzJyk7XG5cbiAgICAgICAgICAgICAgICBsZXQgcDEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG4gICAgICAgICAgICAgICAgbGV0IHQxID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ3Rlc3QxJyk7XG4gICAgICAgICAgICAgICAgcDEuYXBwZW5kQ2hpbGQodDEpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCd0ZXN0Jyk7XG4gICAgICAgICAgICAgICAgcC5hcHBlbmRDaGlsZChwMSk7XG4gICAgICAgICAgICAgICAgcC5hcHBlbmRDaGlsZCh0KTtcbiAgICAgICAgICAgICAgICBkLmFwcGVuZENoaWxkKHApO1xuXG4gICAgICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgICAgIGRpdi5hcHBlbmQoZCk7XG5cblxuICAgICAgICAgICAgICAgIGxldCBuMSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3AnKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUobjEpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKHQpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUocCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZShwMSkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZSh0MSkpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGl0KFwiaGFzTm9kZSBtb25zdGVyLXRlc3RjbGFzczIgc2hvdWxkIHJldHVybiAuLi5cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci10ZXN0Y2xhc3MyJyk7XG5cbiAgICAgICAgICAgICAgICBsZXQgcDEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG4gICAgICAgICAgICAgICAgbGV0IHQxID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ3Rlc3QxJyk7XG4gICAgICAgICAgICAgICAgcDEuYXBwZW5kQ2hpbGQodDEpO1xuXG4gICAgICAgICAgICAgICAgbGV0IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCd0ZXN0Jyk7XG4gICAgICAgICAgICAgICAgcC5hcHBlbmRDaGlsZChwMSk7XG4gICAgICAgICAgICAgICAgcC5hcHBlbmRDaGlsZCh0KTtcblxuXG4gICAgICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgICAgIGRpdi5hcHBlbmQoZCk7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGQuc2hhZG93Um9vdC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJyk7XG5cbiAgICAgICAgICAgICAgICBkLnNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpLmFwcGVuZENoaWxkKHApO1xuXG4gICAgICAgICAgICAgICAgbGV0IG4xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncCcpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZShuMSkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgICAgIGV4cGVjdChkLmhhc05vZGUodCkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuaGFzTm9kZShwKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKHAxKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5oYXNOb2RlKHQxKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pXG5cbiAgICB9KTtcbn0pIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCI7XG5pbXBvcnQge0ZvY3VzTWFuYWdlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vZm9jdXNtYW5hZ2VyLm1qc1wiO1xuaW1wb3J0IHtjbGVhbnVwRE9NRnJvbVRlc3RpbmcsIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZ30gZnJvbSBcIi4uLy4uL3V0aWwvY2xlYW51cGRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuZGVzY3JpYmUoJ0ZvY3VzTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nKClcbiAgICB9KVxuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgY2xlYW51cERPTUZyb21UZXN0aW5nKCk7XG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpLmlubmVySFRNTCA9ICcnXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCduZXcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBGb2N1c01hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEZvY3VzTWFuYWdlcigpKS5pcy5pbnN0YW5jZW9mKEZvY3VzTWFuYWdlcik7XG4gICAgICAgIH0pXG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ3N0b3JlIGFuZCByZXN0b3JlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgbWFuYWdlcjtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG1hbmFnZXIgPSBuZXcgRm9jdXNNYW5hZ2VyKCk7XG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKS5pbm5lckhUTUwgPSBgXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0ZXN0aXRcIiBpZD1cInR4MVwiPlxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwidGVzdGl0XCIgaWQ9XCJ0eDJcIj5cbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInRlc3RpdFwiIGlkPVwidHgzXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJ0ZXN0aXRcIiBpZD1cInR4NFwiPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXN0aXRcIiB0YWJpbmRleD1cIjJcIiBpZD1cInR4NVwiPmhlbGxvPC9wPlxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwidGVzdGl0XCIgaWQ9XCJ0eDZcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0ZXN0aXRcIiBpZD1cInR4N1wiPjwvYnV0dG9uPlxuICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBbLCBlbGVtZW50XSBvZiBPYmplY3QuZW50cmllcyhkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudGVzdGl0JykpKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPSAoKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMjAwLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICAgICAgICByaWdodDogMjAwLFxuICAgICAgICAgICAgICAgICAgICBib3R0b206IDIwMCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdydW4gaXN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBtYW5hZ2VyLmZvY3VzKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0eDEnKSk7XG4gICAgICAgICAgICBtYW5hZ2VyLnN0b3JlRm9jdXMoKTtcblxuICAgICAgICAgICAgY29uc3QgZTEgPSBtYW5hZ2VyLmdldEFjdGl2ZSgpO1xuICAgICAgICAgICAgZXhwZWN0KGUxLmdldEF0dHJpYnV0ZSgnaWQnKSwgJ2Vycm9yMScpLnRvLmJlLmVxdWFsKCd0eDEnKTtcblxuICAgICAgICAgICAgbWFuYWdlci5mb2N1cyhkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHgyJykpO1xuXG4gICAgICAgICAgICBtYW5hZ2VyLnN0b3JlRm9jdXMoKTtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmdldEFjdGl2ZSgpLmdldEF0dHJpYnV0ZSgnaWQnKSwgJ2Vycm9yMicpLnRvLmJlLmVxdWFsKCd0eDInKTtcbiAgICAgICAgICAgIG1hbmFnZXIuZm9jdXNOZXh0KCk7XG4gICAgICAgICAgICBleHBlY3QobWFuYWdlci5nZXRBY3RpdmUoKS5nZXRBdHRyaWJ1dGUoJ2lkJyksICdlcnJvcjMnKS50by5iZS5lcXVhbCgndHg0Jyk7XG4gICAgICAgICAgICBtYW5hZ2VyLmZvY3VzTmV4dCgpO1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuZ2V0QWN0aXZlKCkuZ2V0QXR0cmlidXRlKCdpZCcpLCAnZXJyb3I0JykudG8uYmUuZXF1YWwoJ3R4NScpO1xuICAgICAgICAgICAgbWFuYWdlci5yZXN0b3JlRm9jdXMoKTtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmdldEFjdGl2ZSgpLmdldEF0dHJpYnV0ZSgnaWQnKSwgJ2Vycm9yNScpLnRvLmJlLmVxdWFsKCd0eDInKTtcbiAgICAgICAgICAgIG1hbmFnZXIucmVzdG9yZUZvY3VzKCk7XG4gICAgICAgICAgICBleHBlY3QobWFuYWdlci5nZXRBY3RpdmUoKS5nZXRBdHRyaWJ1dGUoJ2lkJyksICdlcnJvcjYnKS50by5iZS5lcXVhbCgndHgxJyk7XG4gICAgICAgICAgICBtYW5hZ2VyLnJlc3RvcmVGb2N1cygpO1xuICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuZ2V0QWN0aXZlKCkuZ2V0QXR0cmlidXRlKCdpZCcpLCAnZXJyb3I3JykudG8uYmUuZXF1YWwoJ3R4MScpO1xuICAgICAgICB9KVxuXG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ3JldHVybnR5cGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IGZvY3VzbWFuYWdlcjtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGZvY3VzbWFuYWdlciA9IG5ldyBGb2N1c01hbmFnZXIoKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnY2hlY2sgcmV0dXJucycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgZXhwZWN0KGZvY3VzbWFuYWdlci5nZXRGb2N1c2FibGUoKSkuaXMuaW5zdGFuY2VvZihBcnJheSk7XG4gICAgICAgICAgICBleHBlY3QoZm9jdXNtYW5hZ2VyLmdldEFjdGl2ZSgpKS5pcy5pbnN0YW5jZW9mKEhUTUxFbGVtZW50KTtcbiAgICAgICAgICAgIGV4cGVjdChmb2N1c21hbmFnZXIuZm9jdXNOZXh0KCkpLmlzLmluc3RhbmNlb2YoRm9jdXNNYW5hZ2VyKTtcbiAgICAgICAgICAgIGV4cGVjdChmb2N1c21hbmFnZXIuZm9jdXNQcmV2KCkpLmlzLmluc3RhbmNlb2YoRm9jdXNNYW5hZ2VyKTtcbiAgICAgICAgICAgIGV4cGVjdChmb2N1c21hbmFnZXIuc3RvcmVGb2N1cygpKS5pcy5pbnN0YW5jZW9mKEZvY3VzTWFuYWdlcik7XG4gICAgICAgICAgICBleHBlY3QoZm9jdXNtYW5hZ2VyLmZvY3VzKGRvY3VtZW50LmJvZHkpKS5pcy5pbnN0YW5jZW9mKEZvY3VzTWFuYWdlcik7XG4gICAgICAgICAgICBleHBlY3QoZm9jdXNtYW5hZ2VyLnJlc3RvcmVGb2N1cygpKS5pcy5pbnN0YW5jZW9mKEZvY3VzTWFuYWdlcik7XG5cbiAgICAgICAgfSlcblxuICAgIH0pXG5cblxufSk7IiwgImltcG9ydCB7XG4gICAgZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzXG59IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzXCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tICdjaGFpJztcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuZnVuY3Rpb24gc2V0dXBUZXN0RW52aXJvbm1lbnQoKSB7XG5cblxuICAgIGNsYXNzIFRlc3RDb21wb25lbnQgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICAgIHRoaXMuYXR0YWNoU2hhZG93KHttb2RlOiAnb3Blbid9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghY3VzdG9tRWxlbWVudHMuZ2V0KCd0ZXN0LWNvbXBvbmVudCcpKSB7XG4gICAgICAgIGN1c3RvbUVsZW1lbnRzLmRlZmluZSgndGVzdC1jb21wb25lbnQnLCBUZXN0Q29tcG9uZW50KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNsZWFudXBUZXN0RW52aXJvbm1lbnQoKSB7XG4gICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbn1cblxuZGVzY3JpYmUoJ2ZpbmRFbGVtZW50V2l0aElkVXB3YXJkcycsICgpID0+IHtcbiAgICBiZWZvcmUoKGRvbmUpID0+IHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBzZXR1cFRlc3RFbnZpcm9ubWVudCgpO1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXIoKCkgPT4ge1xuICAgICAgICBjbGVhbnVwVGVzdEVudmlyb25tZW50KCk7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgLy8gU2V0IHVwIHRoZSBET01cblxuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgPGRpdiBpZD1cImNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGlkPVwicGFyZW50XCI+XG4gICAgICAgICAgPGRpdiBpZD1cImNoaWxkXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+YDtcblxuICAgICAgICBjb25zdCBzaGFkb3dIb3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2hhZG93SG9zdCk7XG4gICAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBzaGFkb3dIb3N0LmF0dGFjaFNoYWRvdyh7bW9kZTogJ29wZW4nfSk7XG4gICAgICAgIGNvbnN0IGlubmVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBpbm5lckVsZW1lbnQuaWQgPSAnaW5uZXInO1xuICAgICAgICBzaGFkb3dSb290LmFwcGVuZENoaWxkKGlubmVyRWxlbWVudCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGZpbmQgdGhlIGVsZW1lbnQgd2l0aCB0aGUgdGFyZ2V0IElEIGluIHRoZSBub3JtYWwgRE9NJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGlsZCcpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMoY2hpbGQsICdwYXJlbnQnKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcmVudCcpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZmluZCB0aGUgZWxlbWVudCB3aXRoIHRoZSB0YXJnZXQgSUQgaW4gdGhlIHNoYWRvdyBET00nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGlubmVyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2RpdltzaGFkb3dyb290XSA+IGRpdicpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBmaW5kRWxlbWVudFdpdGhJZFVwd2FyZHMoaW5uZXJFbGVtZW50LCAnaW5uZXInKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoaW5uZXJFbGVtZW50KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgaWYgdGhlIGVsZW1lbnQgd2l0aCB0aGUgdGFyZ2V0IElEIGlzIG5vdCBmb3VuZCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2hpbGQnKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZmluZEVsZW1lbnRXaXRoSWRVcHdhcmRzKGNoaWxkLCAnbm9uZXhpc3RlbnQnKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uYmUubnVsbDtcbiAgICB9KTtcbn0pO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuXG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmxldCB3aW5kb3dSZWFkeTtcbmxldCBkb21SZWFkeTtcblxuZGVzY3JpYmUoJ1JlYWR5JywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3JlYWR5Lm1qc1wiKS50aGVuKChtKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9tUmVhZHkgPSBtWydkb21SZWFkeSddO1xuICAgICAgICAgICAgICAgIHdpbmRvd1JlYWR5ID0gbVsnd2luZG93UmVhZHknXTtcbiAgICAgICAgICAgICAgICBkb25lKClcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2RvbVJlYWR5JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdyZXNvbHZlIHByb21pc2UnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgZG9tUmVhZHkudGhlbihkb25lKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3dpbmRvd1JlYWR5JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdyZXNvbHZlIHByb21pc2UnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgd2luZG93UmVhZHkudGhlbihkb25lKS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge1xuICAgIGdldERvY3VtZW50LCBnZXRXaW5kb3csIGdldERvY3VtZW50RnJhZ21lbnRGcm9tU3RyaW5nXG59IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzXCI7XG5cbmltcG9ydCB7Z2V0Q29udGFpbmluZ0RvY3VtZW50fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS91dGlsLm1qc1wiO1xuXG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cblxuZGVzY3JpYmUoJ0RPTScsIGZ1bmN0aW9uICgpIHtcbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBpbml0SlNET00oKTtcbiAgICB9KVxuICAgIGRlc2NyaWJlKCdnZXREb2N1bWVudCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBkb2N1bWVudCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IGdldERvY3VtZW50KCk7XG4gICAgICAgICAgICBleHBlY3QodHlwZW9mIGQpLmlzLmVxdWFsKCdvYmplY3QnKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ2V0V2luZG93KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGRvY3VtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gZ2V0V2luZG93KCk7XG4gICAgICAgICAgICBleHBlY3QodHlwZW9mIGQpLmlzLmVxdWFsKCdvYmplY3QnKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZ2V0RG9jdW1lbnRGcmFnbWVudEZyb21TdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnPGRpdj48L2Rpdj4nXSxcbiAgICAgICAgICAgIFsnPGRpdj48ZGl2PjI8L2Rpdj48L2Rpdj4nXSxcbiAgICAgICAgICAgIFsnPGRpdj48ZGl2PjI8L2Rpdj4nLCAnPGRpdj48ZGl2PjI8L2Rpdj48L2Rpdj4nXSwgLy8gdGVzdCBpbnZhbGlkIGh0bWxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoIWIpIGIgPSBhO1xuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBkb2N1bWVudEZyYWdtZW50IG9iamVjdCAnICsgYSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBmcmFnbWVudCA9IGdldERvY3VtZW50RnJhZ21lbnRGcm9tU3RyaW5nKGEpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChmcmFnbWVudCkudG8uYmUuaW5zdGFuY2VPZihEb2N1bWVudEZyYWdtZW50KTtcblxuICAgICAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZnJhZ21lbnQuY2xvbmVOb2RlKHRydWUpKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZGl2LmlubmVySFRNTCkudG8uYmUuZXF1YWwoYik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnZ2V0Q29udGFpbmluZ0RvY3VtZW50JywgKCkgPT4ge1xuICAgICAgICBsZXQgIGpzRG9tRG9jdW1lbnQ7XG5cbiAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgIGpzRG9tRG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgICAgICAgfSk7XG4gICAgICAgIC8vXG4gICAgICAgIC8vIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIC8vICAgICBkb20ud2luZG93LmNsb3NlKCk7XG4gICAgICAgIC8vIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiBjYWxsZWQgd2l0aCBhbiBpbnZhbGlkIGFyZ3VtZW50JywgKCkgPT4ge1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGdldENvbnRhaW5pbmdEb2N1bWVudChudWxsKSkudG8udGhyb3coJ0ludmFsaWQgYXJndW1lbnQuIEV4cGVjdGVkIGFuIEhUTUxFbGVtZW50LicpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBjb250YWluaW5nIGRvY3VtZW50IGZvciBhbiBlbGVtZW50IGluIHRoZSBtYWluIGRvY3VtZW50JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGpzRG9tRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBjb25zdCBjb250YWluaW5nRG9jdW1lbnQgPSBnZXRDb250YWluaW5nRG9jdW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChjb250YWluaW5nRG9jdW1lbnQpLnRvLm51bGw7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBjb3JyZWN0IGNvbnRhaW5pbmcgZG9jdW1lbnQgZm9yIGFuIGVsZW1lbnQgaW5zaWRlIGEgc2hhZG93IHJvb3QnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBob3N0ID0ganNEb21Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBob3N0LmF0dGFjaFNoYWRvdyh7IG1vZGU6ICdvcGVuJyB9KTtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBqc0RvbURvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5pbmdEb2N1bWVudCA9IGdldENvbnRhaW5pbmdEb2N1bWVudChlbGVtZW50KTtcbiAgICAgICAgICAgIGV4cGVjdChjb250YWluaW5nRG9jdW1lbnQpLnRvLm5vdC5udWxsO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiB0aGUgY29ycmVjdCBjb250YWluaW5nIGRvY3VtZW50IGZvciBhbiBlbGVtZW50IGluc2lkZSBhIG5lc3RlZCBzaGFkb3cgcm9vdCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG91dGVySG9zdCA9IGpzRG9tRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBjb25zdCBvdXRlclNoYWRvd1Jvb3QgPSBvdXRlckhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogJ29wZW4nIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBpbm5lckhvc3QgPSBqc0RvbURvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgb3V0ZXJTaGFkb3dSb290LmFwcGVuZENoaWxkKGlubmVySG9zdCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGlubmVyU2hhZG93Um9vdCA9IGlubmVySG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiAnb3BlbicgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBqc0RvbURvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgIGlubmVyU2hhZG93Um9vdC5hcHBlbmRDaGlsZChlbGVtZW50KTtcblxuICAgICAgICAgICAgY29uc3QgY29udGFpbmluZ0RvY3VtZW50ID0gZ2V0Q29udGFpbmluZ0RvY3VtZW50KGVsZW1lbnQpO1xuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5pbmdEb2N1bWVudCkudG8ubm90Lm51bGw7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIG51bGwgd2hlbiB0aGUgZWxlbWVudCBpcyBub3QgYXR0YWNoZWQgdG8gYW55IGRvY3VtZW50JywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGV0YWNoZWRFbGVtZW50ID0ganNEb21Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRldGFjaGVkRWxlbWVudC5yZW1vdmUoKTtcblxuICAgICAgICAgICAgY29uc3QgY29udGFpbmluZ0RvY3VtZW50ID0gZ2V0Q29udGFpbmluZ0RvY3VtZW50KGRldGFjaGVkRWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QoY29udGFpbmluZ0RvY3VtZW50KS50by5iZS5udWxsO1xuICAgICAgICB9KTtcbiAgICB9KTsgICAgXG4gICAgXG59KTsiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgKiBhcyBjaGFpIGZyb20gJ2NoYWknO1xuaW1wb3J0IHtnZXREb2N1bWVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vdXRpbC5tanNcIjtcbmltcG9ydCB7Y2hhaURvbX0gZnJvbSBcIi4uLy4uL3V0aWwvY2hhaS1kb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbi8vIGxldCBodG1sMSA9IGBcbi8vICAgICA8ZGl2IGlkPVwic2NyaXB0aG9zdFwiPlxuLy8gICAgIDwvZGl2PlxuLy8gICAgXG4vLyAgICAgPGRpdj5cbi8vICAgICA8XG4vLyA8L2Rpdj5cbi8vIGA7XG5cblxuLy8gZGVmaW5lZCBpbiBjb25zdGFudHMubWpzXG4vLyBjb25zdCB1cGRhdGVyU3ltYm9sS2V5ID0gXCJAc2NodWthaS9tb25zdGVyL2RvbS9jdXN0b20tZWxlbWVudEBAb3B0aW9ucy11cGRhdGVyLWxpbmtcIlxuLy8gY29uc3QgdXBkYXRlclN5bWJvbFN5bWJvbCA9IFN5bWJvbC5mb3IodXBkYXRlclN5bWJvbEtleSk7XG5cblxuXG5kZXNjcmliZSgnRE9NJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IEN1c3RvbUVsZW1lbnQsIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCwgVGVzdENvbXBvbmVudCwgZG9jdW1lbnQsIFRlc3RDb21wb25lbnQyLGFzc2lnblVwZGF0ZXJUb0VsZW1lbnQ7XG5cbiAgICBkZXNjcmliZSgnaW5pdEZyb21TY3JpcHRIb3N0KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3QgcmFuZG9tVGFnTnVtYmVyID0gXCJtb25zdGVyLXRlc3RcIitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKTtcbiAgICAgICAgXG4gICAgICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBpbXBvcnQoXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2N1c3RvbWVsZW1lbnQubWpzXCIpLnRoZW4oKG0pID0+IHtcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRWxlbWVudCA9IG1bJ0N1c3RvbUVsZW1lbnQnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudCA9IG1bJ3JlZ2lzdGVyQ3VzdG9tRWxlbWVudCddO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBUZXN0Q29tcG9uZW50MiA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmRvbVRhZ051bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgZGVmYXVsdHMoKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpbjogJzxoMT48L2gxPjxhcnRpY2xlPjxwPnRlc3Q8L3A+PGRpdiBpZD1cImNvbnRhaW5lclwiPjwvZGl2PjwvYXJ0aWNsZT4nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudDIpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NhbGwgY2FsbGJhY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnc2hvdWxkIG5vdCBmb3VuZCBjYWxsYmFjayBhbmQgYWRkIGVycm9yIGF0dHJpYnV0ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGA8ZGl2IGlkPVwiY2FsbC1iYWNrLWhvc3RcIj48L2Rpdj48ZGl2IGlkPVwiY29udGFpbmVyXCI+PC9kaXY+YDtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBsZXQgY29udHJvbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocmFuZG9tVGFnTnVtYmVyKTtcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXNjcmlwdC1ob3N0JywgXCJjYWxsLWJhY2staG9zdFwiKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuYXBwZW5kQ2hpbGQoY29udHJvbCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wuZ2V0T3B0aW9uKCd0ZXN0JykpLmlzLmVxbCgwKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbC5oYXNBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1lcnJvcicpKS5pcy50cnVlO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBmb3VuZCBjYWxsYmFjayBpbml0Q3VzdG9tQ29udHJvbENhbGxiYWNrJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYDxkaXYgaWQ9XCJjYWxsLWJhY2staG9zdFwiPjwvZGl2PjxkaXYgaWQ9XCJjb250YWluZXJcIj48L2Rpdj5gO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYWxsLWJhY2staG9zdCcpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pbml0Q3VzdG9tQ29udHJvbENhbGxiYWNrID0gZnVuY3Rpb24gKGNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbC5zZXRPcHRpb24oJ3Rlc3QnLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHJhbmRvbVRhZ051bWJlcik7XG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1zY3JpcHQtaG9zdCcsIFwiY2FsbC1iYWNrLWhvc3RcIik7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcicpLmFwcGVuZENoaWxkKGNvbnRyb2wpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChjb250cm9sLmdldE9wdGlvbigndGVzdCcpKS5pcy5lcWwoMSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wuaGFzQXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItZXJyb3InKSkuaXMuZmFsc2U7XG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpdCgnc2hvdWxkIGZvdW5kIGNhbGxiYWNrIGluaXRDdXN0b21Db250cm9sQ2FsbGJhY2sgZnJvbSBzZWxmJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYDxkaXYgaWQ9XCJjYWxsLWJhY2staG9zdFwiPjwvZGl2PjxkaXYgaWQ9XCJjb250YWluZXJcIj48L2Rpdj5gO1xuXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRyb2wgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHJhbmRvbVRhZ051bWJlcik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wuZ2V0T3B0aW9uKCd0ZXN0JykpLmlzLmVxbCgwKTtcbiAgICAgICAgICAgICAgICBjb250cm9sLmluaXRDdXN0b21Db250cm9sQ2FsbGJhY2sgPSBmdW5jdGlvbiAoY29udHJvbCkge1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sLnNldE9wdGlvbigndGVzdCcsIDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb250cm9sLnNldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXNjcmlwdC1ob3N0JywgXCJjYWxsLWJhY2staG9zdFwiKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJykuYXBwZW5kQ2hpbGQoY29udHJvbCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGNvbnRyb2wuZ2V0T3B0aW9uKCd0ZXN0JykpLmlzLmVxbCgyKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udHJvbC5oYXNBdHRyaWJ1dGUoJ2RhdGEtbW9uc3Rlci1lcnJvcicpKS5pcy5mYWxzZTtcblxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICB9KTtcbn0pIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tICdjaGFpJztcbmltcG9ydCB7Z2V0U2xvdHRlZE5vZGVzfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9zbG90dGVkLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdnZXRTbG90dGVkTm9kZXMnLCAoKSA9PiB7XG5cblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGFuIGVtcHR5IFNldCBpZiB0aGVyZSBpcyBubyBTaGFkb3dSb290JywgKCkgPT4ge1xuICAgICAgICBleHBlY3QoZ2V0U2xvdHRlZE5vZGVzKS5pcy5hKCdmdW5jdGlvbicpO1xuICAgIH0pO1xuXG5cbn0pO1xuXG4iLCAiXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5pbXBvcnQge1xuICAgIGFkZEF0dHJpYnV0ZVRva2VuLFxuICAgIGFkZFRvT2JqZWN0TGluayxcbiAgICBjbGVhckF0dHJpYnV0ZVRva2VucyxcbiAgICBjb250YWluc0F0dHJpYnV0ZVRva2VuLFxuICAgIGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUsXG4gICAgZmluZENsb3Nlc3RPYmplY3RMaW5rLFxuICAgIGdldExpbmtlZE9iamVjdHMsXG4gICAgaGFzT2JqZWN0TGluayxcbiAgICByZW1vdmVBdHRyaWJ1dGVUb2tlbixcbiAgICByZW1vdmVPYmplY3RMaW5rLFxuICAgIHJlcGxhY2VBdHRyaWJ1dGVUb2tlbixcbiAgICB0b2dnbGVBdHRyaWJ1dGVUb2tlbixcbiAgICBmaW5kQ2xvc2VzdEJ5Q2xhc3Ncbn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vYXR0cmlidXRlcy5tanNcIjtcblxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5sZXQgaHRtbDEsIGh0bWwyLCBodG1sMztcblxuZGVzY3JpYmUoJ0F0dHJpYnV0ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgaHRtbDEgPSBgPGRpdiBpZD1cInRlc3QxXCI+PC9kaXY+YDtcbiAgICAgICAgaHRtbDIgPSBgPGRpdiBpZD1cInRlc3QxXCI+XG4gICAgPGRpdiBpZD1cInN1YjFcIj5cbiAgICAgICAgPGRpdiBpZD1cInN1YjJcIj5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJzdWIzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cInN1YjRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cInN1YjVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuYDtcbiAgICAgICAgXG4gICAgICAgIGh0bWwzID0gYDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJ0ZXN0MVwiPlxuICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdWIxXCIgaWQ9XCJhMVwiIGNsYXNzPVwic3ViMVwiPlxuICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3ViMlwiIGlkPVwiYTJcIiBjbGFzcz1cInN1YjJcIj5cbiAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdWIzXCIgaWQ9XCJhM1wiIGNsYXNzPVwic3ViM1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1tb25zdGVyLXJvbGU9XCJzdWI0XCIgaWQ9XCJhNFwiIGNsYXNzPVwic3ViNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtbW9uc3Rlci1yb2xlPVwic3ViNVwiIGlkPVwiYTVcIiBjbGFzcz1cInN1YjVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuYDtcblxuXG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnT2JqZWN0TGluaycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCBzeW1ib2wgPSBTeW1ib2woJ215dGVzdCcpO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgaGFuZGxlIG9iamVjdC1saW5rcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvYmogPSB7YTogMX07XG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgZXhwZWN0KGhhc09iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBhZGRUb09iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sLCBvYmopO1xuICAgICAgICAgICAgZXhwZWN0KGhhc09iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgbGV0IG8gPSBnZXRMaW5rZWRPYmplY3RzKGVsZW1lbnQsIHN5bWJvbCkubmV4dCgpO1xuICAgICAgICAgICAgZXhwZWN0KG8udmFsdWUpLnRvLmVxdWFsKG9iaik7XG5cbiAgICAgICAgICAgIHJlbW92ZU9iamVjdExpbmsoZWxlbWVudCwgc3ltYm9sKTtcbiAgICAgICAgICAgIGV4cGVjdChoYXNPYmplY3RMaW5rKGVsZW1lbnQsIHN5bWJvbCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IGdldExpbmtlZE9iamVjdHMoZWxlbWVudCwgc3ltYm9sKSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICB9KVxuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdmaW5kQ2xvc2VzdE9iamVjdExpbmsoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCBzeW1ib2wgPSBTeW1ib2woJ215dGVzdCcpO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMjtcbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIG9iamVjdGxpbmsnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBzdWI0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1YjQnKVxuICAgICAgICAgICAgbGV0IHN1YjIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ViMicpXG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7fTtcblxuICAgICAgICAgICAgZXhwZWN0KGhhc09iamVjdExpbmsoc3ViMiwgc3ltYm9sKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBhZGRUb09iamVjdExpbmsoc3ViMiwgc3ltYm9sLCBvYmopO1xuICAgICAgICAgICAgZXhwZWN0KGhhc09iamVjdExpbmsoc3ViMiwgc3ltYm9sKSkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBmaW5kQ2xvc2VzdE9iamVjdExpbmsoc3ViNCk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudCkuaXMuaW5zdGFuY2VPZihIVE1MRGl2RWxlbWVudCk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJykpLnRvLmJlLmVxdWFsKCdzdWIyJyk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdBdHRyaWJ1dGVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDM7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBkZXNjcmliZSgnZmluZCBjbG9zZXN0IEF0dHJpYnV0ZXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ2E1JywgJ2RhdGEtbW9uc3Rlci1yb2xlJywgdW5kZWZpbmVkLCAnc3ViNSddLFxuICAgICAgICAgICAgICAgIFsnYTUnLCAnZGF0YS1tb25zdGVyLXJvbGUnLCAnc3ViMycsICdzdWIzJ10sXG4gICAgICAgICAgICAgICAgWydhNScsICdkYXRhLW1vbnN0ZXItcm9sZScsICdzdWIxJywgJ3N1YjEnXSxcbiAgICAgICAgICAgICAgICBbJ2E0JywgJ2RhdGEtbW9uc3Rlci1yb2xlJywgJ3N1YjEnLCAnc3ViMSddLFxuICAgICAgICAgICAgICAgIFsnYTMnLCAnZGF0YS1tb25zdGVyLXJvbGUnLCAnc3ViMScsICdzdWIxJ10sXG4gICAgICAgICAgICAgICAgWydhMicsICdkYXRhLW1vbnN0ZXItcm9sZScsIHVuZGVmaW5lZCwgJ3N1YjInXSxcbiAgICAgICAgICAgICAgICBbJ2E1JywgJ2RhdGEtbW9uc3Rlci1yb2xlJywgJ3N1YjUnLCAnc3ViNSddXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBkID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgICBpdCgnZmluZENsb3Nlc3RCeUF0dHJpYnV0ZSgnICsgYSArICcsICcgKyBiICsgJywnICsgYyArICcpIHNob3VsZCByZXR1cm4gJyArIGQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGZpbmRDbG9zZXN0QnlBdHRyaWJ1dGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSksIGIsIGMpLmdldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyLXJvbGUnKSkudG8uYmUuZXF1YWwoZCk7XG4gICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7IFxuICAgICAgICBcbiAgICAgICAgZGVzY3JpYmUoJ2ZpbmQgY2xvc2VzdCBFbGVtZW50IHdpdGggY2xhc3MnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ2E1JywgICdzdWIzJywgJ3N1YjMnXSxcbiAgICAgICAgICAgICAgICBbJ2E1JywgICdzdWIxJywgJ3N1YjEnXSxcbiAgICAgICAgICAgICAgICBbJ2E0JywgICdzdWIxJywgJ3N1YjEnXSxcbiAgICAgICAgICAgICAgICBbJ2EzJywgICdzdWIxJywgJ3N1YjEnXSxcbiAgICAgICAgICAgICAgICBbJ2E1JywgICdzdWI1JywgJ3N1YjUnXVxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgICAgICBpdCgnZmluZENsb3Nlc3RCeUNsYXNzKCcgKyBhICsgJywgJyArIGIgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBjLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChmaW5kQ2xvc2VzdEJ5Q2xhc3MoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSksIGIpLmdldEF0dHJpYnV0ZSgnY2xhc3MnKSkudG8uYmUuZXF1YWwoYyk7XG4gICAgICAgICAgICAgICAgfSlcblxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnQXR0cmlidXRlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBhdHJpYnV0ZUtleSA9ICdkYXRhLXRlc3QnO1xuXG4gICAgICAgIGl0KCd0b2dnbGVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHZhbHVlKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5oYXNBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0cmlidXRlS2V5LCAnYXBwbGUgYmFuYW5uYScpXG4gICAgICAgICAgICB0b2dnbGVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3BpbmFwcGxlJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgnYXBwbGUgYmFuYW5uYSBwaW5hcHBsZScpO1xuICAgICAgICAgICAgdG9nZ2xlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdwaW5hcHBsZScpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJ2FwcGxlIGJhbmFubmEnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnYWRkQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB2YWx1ZSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuaGFzQXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBhZGRBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3BpbmFwcGxlJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgncGluYXBwbGUnKTtcbiAgICAgICAgICAgIGFkZEF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAnYmFuYW5uYScpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJ3BpbmFwcGxlIGJhbmFubmEnKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgncmVtb3ZlQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB2YWx1ZSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXksICdhcHBsZSBiYW5hbm5hIGxlbW1vbicpXG4gICAgICAgICAgICByZW1vdmVBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3BpbmFwcGxlJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgnYXBwbGUgYmFuYW5uYSBsZW1tb24nKTtcbiAgICAgICAgICAgIHJlbW92ZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAnYmFuYW5uYScpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJ2FwcGxlIGxlbW1vbicpO1xuXG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2NvbnRhaW5zQXR0cmlidXRlVG9rZW4oZWxlbWVudCwga2V5LCB2YWx1ZSknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5zQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdwaW5hcHBsZScpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0cmlidXRlS2V5LCAnYXBwbGUgYmFuYW5uYScpXG4gICAgICAgICAgICBleHBlY3QoY29udGFpbnNBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3BpbmFwcGxlJykpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5zQXR0cmlidXRlVG9rZW4oZWxlbWVudCwgYXRyaWJ1dGVLZXksICdiYW5hbm5hJykpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3QoY29udGFpbnNBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ2FwcGxlJykpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnIHJlcGxhY2VBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBrZXksIHZhbHVlKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSwgJ2FwcGxlIGJhbmFubmEgdG9tYXRvJylcbiAgICAgICAgICAgIHJlcGxhY2VBdHRyaWJ1dGVUb2tlbihlbGVtZW50LCBhdHJpYnV0ZUtleSwgJ3RvbWF0bycsICdsZW1tb24nKTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSkpLnRvLmJlLmVxdWFsKCdhcHBsZSBiYW5hbm5hIGxlbW1vbicpO1xuICAgICAgICAgICAgcmVwbGFjZUF0dHJpYnV0ZVRva2VuKGVsZW1lbnQsIGF0cmlidXRlS2V5LCAnYmFuYW5uYScsICdwZWFyJyk7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXRyaWJ1dGVLZXkpKS50by5iZS5lcXVhbCgnYXBwbGUgcGVhciBsZW1tb24nKTtcbiAgICAgICAgfSlcblxuICAgICAgICBpdCgnY2xlYXJBdHRyaWJ1dGVUb2tlbnMoZWxlbWVudCwga2V5KScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rlc3QxJyk7XG4gICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShhdHJpYnV0ZUtleSwgJ2FwcGxlIGJhbmFubmEnKVxuICAgICAgICAgICAgY2xlYXJBdHRyaWJ1dGVUb2tlbnMoZWxlbWVudCwgYXRyaWJ1dGVLZXkpO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0cmlidXRlS2V5KSkudG8uYmUuZXF1YWwoJycpO1xuXG4gICAgICAgIH0pXG5cblxuICAgIH0pXG59KSIsICIndXNlIHN0cmljdCc7XG5cblxuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmxldCBSZXNvdXJjZSxEZXJpdmVkUmVzb3VyY2U7XG5cblxuXG5kZXNjcmliZSgnUmVzb3VyY2UnLCBmdW5jdGlvbigpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL2RvbS9yZXNvdXJjZS5tanNcIikudGhlbigobSkgPT4ge1xuICAgICAgICAgICAgICAgIFJlc291cmNlID0gbVsnUmVzb3VyY2UnXTtcblxuXG4gICAgICAgICAgICAgICAgRGVyaXZlZFJlc291cmNlID0gY2xhc3MgIGV4dGVuZHMgUmVzb3VyY2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRhdGEtdXJsXCI6IFwiaHR0cDovL2V4YW1wbGUuY29tXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBnZXRVUkxBdHRyaWJ1dGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2RhdGEtdXJsJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdEZXJpdmVkUmVzb3VyY2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBpbnN0YW5jZW9mIFJlc291cmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBEZXJpdmVkUmVzb3VyY2UoKSkudG8uYmUuYW4uaW5zdGFuY2VvZihSZXNvdXJjZSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuaW1wb3J0IHtSZXNvdXJjZU1hbmFnZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3Jlc291cmNlbWFuYWdlci5tanNcIjtcbmltcG9ydCB7Y2xlYW51cERPTUZyb21UZXN0aW5nLCBpbml0TXV0YXRpb25PYnNlcnZlckZvclRlc3Rpbmd9IGZyb20gXCIuLi8uLi91dGlsL2NsZWFudXBkb20ubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdSZXNvdXJjZU1hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgZmV0Y2hSZWZlcmVuY2UsIHJldHVyblN0YXR1cztcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICBpbml0SlNET00oKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgZ2xvYmFsVGhpc1snZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgICAgICBjbGVhbnVwRE9NRnJvbVRlc3RpbmcoKTtcbiAgICB9KVxuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nKClcblxuICAgICAgICByZXR1cm5TdGF0dXMgPSAyMDA7XG4gICAgICAgIGZldGNoUmVmZXJlbmNlID0gZ2xvYmFsVGhpc1snZmV0Y2gnXTtcbiAgICAgICAgZ2xvYmFsVGhpc1snZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcblxuICAgICAgICAgICAgaWYgKCF1cmwpIHRocm93IG5ldyBFcnJvcignbWlzc2luZyB1cmwnKVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6IFwidGVzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHJldHVyblN0YXR1c1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICB9O1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCduZXcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCduZXcgUmVzb3VyY2VNYW5hZ2VyKCkgc2hvdWxkIHJldHVybiBSZXNvdXJjZU1hbmFnZXIgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKCk7XG4gICAgICAgICAgICBleHBlY3QoZCkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdsb2FkIHJlc291cmNlcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgbWFuYWdlcjtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG1hbmFnZXIgPSBuZXcgUmVzb3VyY2VNYW5hZ2VyKCk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2FkZCBzY3JpcHQgc2hvdWxkIGluc3RhbmNlIG9mIFJlc291cmNlTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZFNjcmlwdCgnL2V4YW1wbGUuanMnKSkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYWRkIHN0eWxlIHNob3VsZCBpbnN0YW5jZSBvZiBSZXNvdXJjZU1hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobWFuYWdlci5hZGRTdHlsZXNoZWV0KCcvc3R5bGUuanMnKSkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYWRkIGRhdGEgc2hvdWxkIGluc3RhbmNlIG9mIFJlc291cmNlTWFuYWdlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZERhdGEoJy9kYXRhLmpzb24nKSkudG8uYmUuaW5zdGFuY2VPZihSZXNvdXJjZU1hbmFnZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnY29ubmVjdCByZXNvdXJjZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnYWRkIHNjcmlwdCBhbmQgY29ubmVjdCBzaG91bGQgaW5zdGFuY2Ugb2YgUmVzb3VyY2VNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZFNjcmlwdCgnL2V4YW1wbGUuanMnKS5jb25uZWN0KCkpLnRvLmJlLmluc3RhbmNlT2YoUmVzb3VyY2VNYW5hZ2VyKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnYWRkIHN0eWxlIGFuZCBjb25uZWN0IHNob3VsZCBpbnN0YW5jZSBvZiBSZXNvdXJjZU1hbmFnZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkU3R5bGVzaGVldCgnL3N0eWxlLmpzJykuY29ubmVjdCgpKS50by5iZS5pbnN0YW5jZU9mKFJlc291cmNlTWFuYWdlcik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ2FkZCBkYXRhIGFuZCBjb25uZWN0ICBzaG91bGQgaW5zdGFuY2Ugb2YgUmVzb3VyY2VNYW5hZ2VyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChtYW5hZ2VyLmFkZERhdGEoJy9kYXRhLmpzb24nKS5jb25uZWN0KCkpLnRvLmJlLmluc3RhbmNlT2YoUmVzb3VyY2VNYW5hZ2VyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NoZWNrIGF2YWlsYWJpbGl0eSByZXNvdXJjZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnYWRkIHNjcmlwdCBhbmQgY2hlY2sgYXZhaWxhYmlsaXR5IHNob3VsZCByZXR1cm4gUHJvbWlzZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobWFuYWdlci5hZGRTY3JpcHQoJy9leGFtcGxlLmpzJykuYXZhaWxhYmxlKCkpLnRvLmJlLmluc3RhbmNlT2YoUHJvbWlzZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ2FkZCBzdHlsZSBhbmQgY2hlY2sgYXZhaWxhYmlsaXR5IHNob3VsZCBzaG91bGQgcmV0dXJuIFByb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkU3R5bGVzaGVldCgnL3N0eWxlLmpzJykuYXZhaWxhYmxlKCkpLnRvLmJlLmluc3RhbmNlT2YoUHJvbWlzZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ2FkZCBkYXRhIGFuZCBjaGVjayBhdmFpbGFiaWxpdHkgIHNob3VsZCBzaG91bGQgcmV0dXJuIFByb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG1hbmFnZXIuYWRkRGF0YSgnL2RhdGEuanNvbicpLmF2YWlsYWJsZSgpKS50by5iZS5pbnN0YW5jZU9mKFByb21pc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NoZWNrIGF2YWlsYWJpbGl0eSBleGFtcGxlLmpzb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdCgnYWRkIGRhdGEgYW5kIGNoZWNrIGNvbnRlbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgICAgIG1hbmFnZXIuYWRkRGF0YSgnaHR0cHM6Ly9leGFtcGxlLmNvbS9leGFtcGxlLmpzb24nKS5jb25uZWN0KCkuYXZhaWxhYmxlKCkudGhlbihyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKS5vdXRlckhUTUwpLmNvbnRhaW5zKCc+e1wiYVwiOlwidGVzdFwifTwvc2NyaXB0PjwvaGVhZD4nKTtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KVxuXG4gICAgfSk7XG5cblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tIFwiLi4vdHlwZXMvYmFzZS5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IFByb3h5T2JzZXJ2ZXIgfSBmcm9tIFwiLi4vdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcbmltcG9ydCB7IHZhbGlkYXRlSW5zdGFuY2UsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBBVFRSSUJVVEVQUkVGSVgsIEFzc2VtYmxlciB9O1xuXG4vKipcbiAqIGF0dHJpYnV0ZSBwcmVmaXhcbiAqXG4gKiBAdHlwZSB7c3RyaW5nfVxuICovXG5jb25zdCBBVFRSSUJVVEVQUkVGSVggPSBcImRhdGEtbW9uc3Rlci1cIjtcblxuLyoqXG4gKiBBc3NlbWJsZXIgY2xhc3NcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEFsbG93cyB5b3UgdG8gYnVpbGQgYW4gaHRtbCBmcmFnbWVudFxuICovXG5jbGFzcyBBc3NlbWJsZXIgZXh0ZW5kcyBCYXNlIHtcblx0LyoqXG5cdCAqIEBwYXJhbSB7RG9jdW1lbnRGcmFnbWVudH0gZnJhZ21lbnRcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2Zcblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBmdW5jdGlvblxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGZ1bmN0aW9uIGlzIG5vdCBkZWZpbmVkXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihmcmFnbWVudCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5hdHRyaWJ1dGVQcmVmaXggPSBBVFRSSUJVVEVQUkVGSVg7XG5cdFx0dmFsaWRhdGVJbnN0YW5jZShmcmFnbWVudCwgZ2V0R2xvYmFsRnVuY3Rpb24oXCJEb2N1bWVudEZyYWdtZW50XCIpKTtcblx0XHR0aGlzLmZyYWdtZW50ID0gZnJhZ21lbnQ7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuXHQgKiBAcmV0dXJuIHtBc3NlbWJsZXJ9XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG5cdCAqL1xuXHRzZXRBdHRyaWJ1dGVQcmVmaXgocHJlZml4KSB7XG5cdFx0dmFsaWRhdGVTdHJpbmcocHJlZml4KTtcblx0XHR0aGlzLmF0dHJpYnV0ZVByZWZpeCA9IHByZWZpeDtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXRBdHRyaWJ1dGVQcmVmaXgoKSB7XG5cdFx0cmV0dXJuIHRoaXMuYXR0cmlidXRlUHJlZml4O1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7UHJveHlPYnNlcnZlcnx1bmRlZmluZWR9IGRhdGFcblx0ICogQHJldHVybiB7RG9jdW1lbnRGcmFnbWVudH1cblx0ICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYW4gaW5zdGFuY2Ugb2Zcblx0ICovXG5cdGNyZWF0ZURvY3VtZW50RnJhZ21lbnQoZGF0YSkge1xuXHRcdGlmIChkYXRhID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGRhdGEgPSBuZXcgUHJveHlPYnNlcnZlcih7fSk7XG5cdFx0fVxuXG5cdFx0dmFsaWRhdGVJbnN0YW5jZShkYXRhLCBQcm94eU9ic2VydmVyKTtcblx0XHRjb25zdCBmcmFnbWVudCA9IHRoaXMuZnJhZ21lbnQuY2xvbmVOb2RlKHRydWUpO1xuXHRcdHJldHVybiBmcmFnbWVudDtcblx0fVxufVxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmltcG9ydCB7QVRUUklCVVRFUFJFRklYLCBBc3NlbWJsZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2Fzc2VtYmxlci5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuZGVzY3JpYmUoJ0Fzc2VtYmxlcicsIGZ1bmN0aW9uICgpIHtcbiAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBpbml0SlNET00oKTtcbiAgICB9KVxuICAgIGRlc2NyaWJlKCdjcmVhdGVEb2N1bWVudEZyYWdtZW50KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIDxkaXY+T25lPC9kaXY+PGRpdj5Ud288L2Rpdj4nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCkuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KCc8ZGl2Pk9uZTwvZGl2PjxkaXY+VHdvPC9kaXY+Jyk7XG5cbiAgICAgICAgICAgIGxldCBmID0gbmV3IEFzc2VtYmxlcihmcmFnbWVudCk7XG5cbiAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gc3RyaW5nXG4gICAgICAgICAgICBsZXQgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuY2xvbmVOb2RlKHRydWUpKTtcblxuICAgICAgICAgICAgZXhwZWN0KGNvbnRhaW5lci5pbm5lckhUTUwpLnRvLmJlLmVxdWFsKCc8ZGl2Pk9uZTwvZGl2PjxkaXY+VHdvPC9kaXY+Jyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NyZWF0ZURvY3VtZW50RnJhZ21lbnQoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gRG9jdW1lbnRGcmFnbWVudCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IG5ldyBBc3NlbWJsZXIoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAgICAgICAgICAgIGV4cGVjdChkLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkudG8uYmUuaW5zdGFuY2VPZihEb2N1bWVudEZyYWdtZW50KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbmV3JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnbmV3IFJlbmRlcmVyKCkgc2hvdWxkIHJldHVybiBBc3NlbWJsZXIgb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBuZXcgQXNzZW1ibGVyKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG4gICAgICAgICAgICBleHBlY3QoZCkudG8uYmUuaW5zdGFuY2VPZihBc3NlbWJsZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXRBdHRyaWJ1dGVQcmVmaXgoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gJyArIEFUVFJJQlVURVBSRUZJWCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBuZXcgQXNzZW1ibGVyKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG4gICAgICAgICAgICBleHBlY3QoZC5nZXRBdHRyaWJ1dGVQcmVmaXgoKSkudG8uYmUuZXF1YWwoQVRUUklCVVRFUFJFRklYKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnc2V0QXR0cmlidXRlUHJlZml4KCkuZ2V0QXR0cmlidXRlUHJlZml4KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHNhbWUgdmFsdWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IG5ldyBBc3NlbWJsZXIoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAgICAgICAgICAgIGV4cGVjdChkLnNldEF0dHJpYnV0ZVByZWZpeCgndGVzdDAxJykuZ2V0QXR0cmlidXRlUHJlZml4KCkpLnRvLmJlLmVxdWFsKCd0ZXN0MDEnKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxufSk7IiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0ICogYXMgY2hhaSBmcm9tICdjaGFpJztcbmltcG9ydCB7Z2V0RG9jdW1lbnR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3V0aWwubWpzXCI7XG5pbXBvcnQge2NoYWlEb219IGZyb20gXCIuLi8uLi91dGlsL2NoYWktZG9tLm1qc1wiO1xuaW1wb3J0IHtjbGVhbnVwRE9NRnJvbVRlc3RpbmcsIGluaXRNdXRhdGlvbk9ic2VydmVyRm9yVGVzdGluZ30gZnJvbSBcIi4uLy4uL3V0aWwvY2xlYW51cGRvbS5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxubGV0IGV4cGVjdCA9IGNoYWkuZXhwZWN0O1xuY2hhaS51c2UoY2hhaURvbSk7XG5cbmxldCBodG1sMSA9IGBcbiAgICA8ZGl2IGlkPVwidGVzdDFcIj5cbiAgICA8L2Rpdj5cbmA7XG5cbmRlc2NyaWJlKCdET00nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgQ3VzdG9tQ29udHJvbCwgcmVnaXN0ZXJDdXN0b21FbGVtZW50LCBUZXN0Q29tcG9uZW50LCBkb2N1bWVudCwganNkb21GbGFnO1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSh7fSkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgIGltcG9ydChcImVsZW1lbnQtaW50ZXJuYWxzLXBvbHlmaWxsXCIpLnRoZW4oKG0pID0+IHtcbiAgICAgICAgICAgICAgICBtLnBvbHlmaWxsKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8ganNkb20gZG9lcyBub3Qgc3VwcG9ydCBFbGVtZW50SW50ZXJuYWxzXG4gICAgICAgICAgICBqc2RvbUZsYWcgPSBuYXZpZ2F0b3IudXNlckFnZW50LmluY2x1ZGVzKFwianNkb21cIik7XG5cbiAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS9kb20vY3VzdG9tZWxlbWVudC5tanNcIikudGhlbigobSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJDdXN0b21FbGVtZW50ID0gbVsncmVnaXN0ZXJDdXN0b21FbGVtZW50J107XG5cblxuICAgICAgICAgICAgICAgIGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS9kb20vY3VzdG9tY29udHJvbC5tanNcIikudGhlbigobSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tQ29udHJvbCA9IG1bJ0N1c3RvbUNvbnRyb2wnXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgVGVzdENvbXBvbmVudCA9IGNsYXNzIGV4dGVuZHMgQ3VzdG9tQ29udHJvbCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibW9uc3Rlci1jdXN0b21jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlckN1c3RvbUVsZW1lbnQoVGVzdENvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZm9ybURpc2FibGVkQ2FsbGJhY2soKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgXG4gICAgICAgIGxldCBlbGVtZW50XG4gICAgICAgIFxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgVGVzdENvbXBvbmVudDIgPSBjbGFzcyBleHRlbmRzIEN1c3RvbUNvbnRyb2wge1xuICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IGRlc2NyaXB0aW9uIG9mIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgc3RhdGljIGdldFRhZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm1vbnN0ZXItY3VzdG9tY29udHJvbDJcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlZ2lzdGVyQ3VzdG9tRWxlbWVudChUZXN0Q29tcG9uZW50MilcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZSkudG8uYmUubm90Lm51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sMicpO1xuXG4gICAgICAgIH0pXG4gICAgICAgIFxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuXG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gdW5kZWZpbmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuZm9ybURpc2FibGVkQ2FsbGJhY2soKSkudG8uYmUudW5kZWZpbmVkO1xuICAgICAgICAgICAgZXhwZWN0KGVsZW1lbnQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmZvcm1EaXNhYmxlZENhbGxiYWNrKHRydWUpKS50by5iZS51bmRlZmluZWQ7XG4gICAgICAgICAgICBleHBlY3QoZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBjb25zdCBkID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJyk7XG4gICAgICAgICAgICBleHBlY3QoZCkudG8ubm90LmJlLm51bGw7XG4gICAgICAgICAgICBcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG5cbiAgICBkZXNjcmliZSgnQ3VzdG9tQ29udHJvbCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgaW5pdE11dGF0aW9uT2JzZXJ2ZXJGb3JUZXN0aW5nKClcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgICAgIGNsZWFudXBET01Gcm9tVGVzdGluZygpO1xuXG4gICAgICAgIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ2NyZWF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGN1c3RvbS1lbGVtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgZFxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGQgPSBuZXcgVGVzdENvbXBvbmVudCgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGUpLnRvLmJlLm51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZXhwZWN0KHR5cGVvZiBkKS5pcy5lcXVhbCgnb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJ2Nvbm5lY3QgZW1wdHkgZWxlbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdkb2N1bWVudCBzaG91bGQgY29udGFpbiBtb25zdGVyLWN1c3RvbWNvbnRyb2wnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKS5sZW5ndGgpLmlzLmVxdWFsKDEpO1xuICAgICAgICAgICAgICAgIC8vIG5vIGRhdGEtbW9uc3Rlci1vYmplY3RsaW5rPVwiU3ltYm9sKG1vbnN0ZXJVcGRhdGVyKVwiIGJlY2F1c2UgaXQgaGFzIG5vdGhpbmcgdG8gdXBkYXRlIFxuICAgICAgICAgICAgICAgIGV4cGVjdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVzdDEnKSkuY29udGFpbi5odG1sKCc8bW9uc3Rlci1jdXN0b21jb250cm9sIGRhdGEtbW9uc3Rlci1lcnJvcj1cIkVycm9yOiBodG1sIGlzIG5vdCBzZXQuXCI+PC9tb25zdGVyLWN1c3RvbWNvbnRyb2w+JylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBkZXNjcmliZSgnT3B0aW9ucyBjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICBpdCgnZGVsZWdhdGVzRm9jdXMgc2hvdWxkIGNoYW5nZSBmcm9tIHRydWUgdG8gZmFsc2UnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAvLyAgICAgICAgIGxldCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJylcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgICAgICBleHBlY3QoZWxlbWVudC5nZXRPcHRpb24oJ2RlbGVnYXRlc0ZvY3VzJykpLnRvLmJlLnRydWU7XG4gICAgICAgIC8vICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9PUFRJT05TLCBKU09OLnN0cmluZ2lmeSh7ZGVsZWdhdGVzRm9jdXM6IGZhbHNlfSkpO1xuICAgICAgICAvLyAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIGV4cGVjdChlbGVtZW50LmdldE9wdGlvbignZGVsZWdhdGVzRm9jdXMnKSkudG8uYmUuZmFsc2U7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIC8vICAgICAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgLy8gICAgICAgICB9LCAxMCk7XG4gICAgICAgIC8vXG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICB9KS50aW1lb3V0KDEwMCk7XG4gICAgICAgIC8vXG4gICAgICAgIC8vIH0pXG5cbiAgICAgICAgZGVzY3JpYmUoJ1Rlc3QgRWxlbWVudEludGVybmFscycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IGZvcm07XG5cbiAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdCgnZm9ybUFzc29jaWF0ZWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC5jb25zdHJ1Y3Rvci5mb3JtQXNzb2NpYXRlZCkudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdmb3JtJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KGQuZm9ybSkudG8uYmUuaW5zdGFuY2VvZihIVE1MRm9ybUVsZW1lbnQpXG5cbiAgICAgICAgICAgICAgICAvLyBpZiAoanNkb21GbGFnKSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGV4cGVjdCgoKSA9PiBkLmZvcm0pLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vICAgICBleHBlY3QoZC5mb3JtKS50by5iZS5pbnN0YW5jZW9mKEhUTUxGb3JtRWxlbWVudClcbiAgICAgICAgICAgICAgICAvLyB9XG5cblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCd2YWx1ZSBnZXR0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gZC52YWx1ZSkudG8udGhyb3coRXJyb3IpO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3ZhbHVlIHNldHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBkLnZhbHVlID0gNCkudG8udGhyb3coRXJyb3IpO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3NldEZvcm1WYWx1ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCduYW1lIGdldHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuICAgICAgICAgICAgICAgIGV4cGVjdChkLm5hbWUpLnRvLmJlLm51bGw7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgndHlwZSBnZXR0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QoZC50eXBlKS50by5iZS5lcXVhbCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgndmFsaWRpdHkgZ2V0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3ZhbGlkYXRpb25NZXNzYWdlIGdldHRlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaXQoJ3dpbGxWYWxpZGF0ZSBnZXR0ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21vbnN0ZXItY3VzdG9tY29udHJvbCcpO1xuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoZCk7XG5cblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpdCgnY2hlY2tWYWxpZGl0eSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtb25zdGVyLWN1c3RvbWNvbnRyb2wnKTtcbiAgICAgICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGQpO1xuXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgncmVwb3J0VmFsaWRpdHkoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcblxuXG4gICAgICAgICAgICB9KTtcblxuXG4gICAgICAgICAgICBpdCgnc2V0VmFsaWRpdHkoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGxldCBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbW9uc3Rlci1jdXN0b21jb250cm9sJyk7XG4gICAgICAgICAgICAgICAgZm9ybS5hcHBlbmRDaGlsZChkKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoZC5zZXRWYWxpZGl0eSh7J3ZhbHVlTWlzc2luZyc6IHRydWV9LCBcIm15IG1lc3NhZ2VcIikpLnRvLmJlLnVuZGVmaW5lZDtcblxuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxufSk7XG5cblxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7QVRUUklCVVRFX1RIRU1FX05BTUV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2NvbnN0YW50cy5tanNcIjtcblxuaW1wb3J0IHtmaW5kRG9jdW1lbnRUZW1wbGF0ZSwgVGVtcGxhdGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL3RlbXBsYXRlLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdUZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGluaXRKU0RPTSgpO1xuICAgIH0pXG5cbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGBcbiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD1cIm15dGVtcGxhdGVcIj48L3RlbXBsYXRlPmA7XG4gICAgfSlcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnY3JlYXRlIEhUTUxGcmFnbWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgW1xuICAgICAgICAgICAgW1wiPGRpdj5maXJzdDwvZGl2PjxkaXY+c2Vjb25kPC9kaXY+XCJdLFxuICAgICAgICAgICAgW1wiPGRpdj5maXJzdDwvZGl2PlwiXSxcbiAgICAgICAgICAgIFtcIjxkaXY+Zmlyc3Q8L2Rpdj48cD5zZWNvbmQ8L3A+XCJdXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCduZXcgVGVtcGxhdGUoKS5nZXROZXdEb2N1bWVudEZyYWdtZW50QXNTdHJpbmcoKSBzaG91bGQgcmV0dXJuIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpO1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGE7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBuZXcgVGVtcGxhdGUodGVtcGxhdGUpO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoY29udGFpbmVyLmlubmVySFRNTCkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY3JlYXRlIGluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnbmV3IFRlbXBsYXRlKCkgc2hvdWxkIHJldHVybiBkb2N1bWVudCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IG5ldyBUZW1wbGF0ZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZW1wbGF0ZScpKTtcbiAgICAgICAgICAgIGV4cGVjdChkKS50by5iZS5pbnN0YW5jZU9mKFRlbXBsYXRlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmdldFRlbXBsYXRlRWxlbWVudCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnbmV3IFRlbXBsYXRlKCkuZ2V0VGVtcGxhdGVFbGVtZW50KCkgc2hvdWxkIHJldHVybiBIVE1MVGVtcGxhdGVFbGVtZW50IG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gbmV3IFRlbXBsYXRlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJykpO1xuICAgICAgICAgICAgZXhwZWN0KGQuZ2V0VGVtcGxhdGVFbGVtZW50KCkpLnRvLmJlLmluc3RhbmNlT2YoSFRNTFRlbXBsYXRlRWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5maW5kRG9jdW1lbnRUZW1wbGF0ZSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHRocm93IFRlbXBsYXRlIG5vdCBmb3VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm5vd2F5XCIsIGRpdilcbiAgICAgICAgICAgIH0pLnRvLnRocm93cyhFcnJvcik7XG4gICAgICAgIH0pXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmZpbmREb2N1bWVudFRlbXBsYXRlKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGRlc2NyaWJlKCdUZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGl0KCdzaG91bGQgZmluZCB0ZW1wbGF0ZSBvdmVyIG93bmVyRG9jdW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgZGl2LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub3V0ZXJIVE1MO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGxldCB0ID0gZmluZERvY3VtZW50VGVtcGxhdGUoXCJteXRlbXBsYXRlXCIsIGRpdik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQpLmlzLmluc3RhbmNlb2YoVGVtcGxhdGUpO1xuXG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnVGhtZW5lZCBUZW1wbGF0ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBtZW1BdHRyaWJ1dGVWYWx1ZTtcblxuICAgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaWQ9XCJteXRlbXBsYXRlXCI+PHA+MTwvcD48L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaWQ9XCJteXRlbXBsYXRlLW1vbnN0ZXJcIj48cD4yPC9wPjwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZD1cIm15dGVtcGxhdGUtdGVzdHRoZW1lXCI+PHA+NDwvcD48L3RlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8dGVtcGxhdGUgaWQ9XCJteXByZWZpeC1teXRlbXBsYXRlLW1vbnN0ZXJcIj48cD4zPC9wPjwvdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgYDtcblxuICAgICAgICAgICAgICAgIGxldCBodG1sID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpO1xuICAgICAgICAgICAgICAgIGlmIChodG1sLmhhc0F0dHJpYnV0ZShBVFRSSUJVVEVfVEhFTUVfTkFNRSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVtQXR0cmlidXRlVmFsdWUgPSBodG1sLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfVEhFTUVfTkFNRSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcblxuICAgICAgICAgICAgICAgIGxldCBodG1sID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGh0bWwuaGFzQXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FKSkge1xuICAgICAgICAgICAgICAgICAgICBodG1sLnJlbW92ZUF0dHJpYnV0ZShBVFRSSUJVVEVfVEhFTUVfTkFNRSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1lbUF0dHJpYnV0ZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FLCBtZW1BdHRyaWJ1dGVWYWx1ZSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0pXG5cblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCBmaW5kIHRlbXBsYXRlIG92ZXIgb3duZXJEb2N1bWVudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItdGVtcGxhdGUtcHJlZml4JywgJ215cHJlZml4JylcbiAgICAgICAgICAgICAgICBkaXYucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgbGV0IHQxID0gZmluZERvY3VtZW50VGVtcGxhdGUoXCJteXRlbXBsYXRlXCIsIGRpdik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQxKS5pcy5pbnN0YW5jZW9mKFRlbXBsYXRlKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodDEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLnRleHRDb250ZW50KS5pcy5lcXVhbChcIjNcIik7XG5cbiAgICAgICAgICAgICAgICBkaXYucmVtb3ZlQXR0cmlidXRlKCdkYXRhLW1vbnN0ZXItdGVtcGxhdGUtcHJlZml4JylcbiAgICAgICAgICAgICAgICBsZXQgdDIgPSBmaW5kRG9jdW1lbnRUZW1wbGF0ZShcIm15dGVtcGxhdGVcIiwgZGl2KTtcbiAgICAgICAgICAgICAgICBleHBlY3QodDIpLmlzLmluc3RhbmNlb2YoVGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0Mi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkudGV4dENvbnRlbnQpLmlzLmVxdWFsKFwiMlwiKTtcblxuICAgICAgICAgICAgICAgIGh0bWwuc2V0QXR0cmlidXRlKEFUVFJJQlVURV9USEVNRV9OQU1FLCd0ZXN0dGhlbWUnKTtcbiAgICAgICAgICAgICAgICBsZXQgYT0gaHRtbC5vdXRlckhUTUw7XG4gICAgICAgICAgICAgICAgbGV0IHQzID0gZmluZERvY3VtZW50VGVtcGxhdGUoXCJteXRlbXBsYXRlXCIsIGRpdik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQzKS5pcy5pbnN0YW5jZW9mKFRlbXBsYXRlKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodDMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLnRleHRDb250ZW50KS5pcy5lcXVhbChcIjRcIik7XG5cblxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xufSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5pbXBvcnQge2ZpcmVFdmVudCwgZmluZFRhcmdldEVsZW1lbnRGcm9tRXZlbnQsIGZpcmVDdXN0b21FdmVudH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kb20vZXZlbnRzLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuXG5kZXNjcmliZSgnRXZlbnRzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgaW5pdEpTRE9NKCk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdmaW5kIG9iamVjdCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCdkYXRhLW1vbnN0ZXInLCAnaGVsbG8nKTtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChkaXYpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGUgPSBmaW5kVGFyZ2V0RWxlbWVudEZyb21FdmVudChldmVudCwgJ2RhdGEtbW9uc3RlcicpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChlLmdldEF0dHJpYnV0ZSgnZGF0YS1tb25zdGVyJykpLnRvLmJlLmVxdWFsKCdoZWxsbycpXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZpcmVFdmVudChkaXYsICdjbGljaycpO1xuICAgICAgICAgICAgfSwgMClcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2ZpcmVFdmVudCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIGZpcmUgYSBjbGljayBldmVudCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGZpcmVFdmVudChkaXYsICdjbGljaycpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZpcmUgYSB0b3VjaCBldmVudCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2gnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGZpcmVFdmVudChkaXYsICd0b3VjaCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZpcmUgYSB0b3VjaCBldmVudCBvbiBjb2xsZWN0aW9uJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb24gPSBkaXYucXVlcnlTZWxlY3RvckFsbCgnZGl2Jyk7XG5cblxuICAgICAgICAgICAgZmlyZUV2ZW50KGNvbGxlY3Rpb24sICd0b3VjaCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZpcmUgYSB0b3VjaCBldmVudCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2gnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbiAgICAgICAgICAgIGxldCBjb2xsZWN0aW9uID0gZGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RpdicpO1xuXG5cbiAgICAgICAgICAgIGZpcmVFdmVudChjb2xsZWN0aW9uLCAndG91Y2gnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBmaXJlRXZlbnQoe30sICd0b3VjaCcpKS50by50aHJvdyhFcnJvcik7XG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnZmlyZUN1c3RvbUV2ZW50KCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIGNsaWNrIGV2ZW50JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgZmlyZUN1c3RvbUV2ZW50KGRpdiwgJ2NsaWNrJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIHRvdWNoIGV2ZW50JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgZmlyZUN1c3RvbUV2ZW50KGRpdiwgJ3RvdWNoJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgZmlyZSBhIHRvdWNoIGV2ZW50IG9uIGNvbGxlY3Rpb24xJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGxldCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGRpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaCcsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGUuZGV0YWlsLmRldGFpbCAhPT0gJ2hlbGxvIHdvcmxkJykge1xuICAgICAgICAgICAgICAgICAgICBkb25lKCdlcnJvcicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBkaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xuICAgICAgICAgICAgbGV0IGNvbGxlY3Rpb24gPSBkaXYucXVlcnlTZWxlY3RvckFsbCgnZGl2Jyk7XG5cbiAgICAgICAgICAgIGZpcmVDdXN0b21FdmVudChjb2xsZWN0aW9uLCAndG91Y2gnLCBcImhlbGxvIHdvcmxkXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGZpcmUgYSB0b3VjaCBldmVudCBvbiBjb2xsZWN0aW9uMicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBkaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2gnLCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlLmRldGFpbC5hICE9PSAnaGVsbG8gd29ybGQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4gICAgICAgICAgICBsZXQgY29sbGVjdGlvbiA9IGRpdi5xdWVyeVNlbGVjdG9yQWxsKCdkaXYnKTtcblxuICAgICAgICAgICAgZmlyZUN1c3RvbUV2ZW50KGNvbGxlY3Rpb24sICd0b3VjaCcsIHthOiBcImhlbGxvIHdvcmxkXCJ9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBmaXJlIGEgdG91Y2ggZXZlbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSk7XG4gICAgICAgICAgICBsZXQgY29sbGVjdGlvbiA9IGRpdi5xdWVyeVNlbGVjdG9yQWxsKCdkaXYnKTtcblxuXG4gICAgICAgICAgICBmaXJlQ3VzdG9tRXZlbnQoY29sbGVjdGlvbiwgJ3RvdWNoJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZmlyZUN1c3RvbUV2ZW50KHt9LCAndG91Y2gnKSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZmluZEVsZW1lbnRXaXRoU2VsZWN0b3JVcHdhcmRzIH0gZnJvbSBcIi4uLy4uL2RvbS91dGlsLm1qc1wiO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tIFwiLi4vLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBEYXRhc291cmNlIH0gZnJvbSBcIi4uL2RhdGFzb3VyY2UubWpzXCI7XG5cbmV4cG9ydCB7IERvbVN0b3JhZ2UgfTtcblxuLyoqXG4gKiBUaGUgRG9tU3RvcmFnZSBpcyBhIGNsYXNzIHRoYXQgc3RvcmVzIGRhdGEgaW4gbWVtb3J5LlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgRG9tU3RvcmFnZSBleHRlbmRzIERhdGFzb3VyY2Uge1xuXHQvKipcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBvcHRpb25zIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciB0aGUgZGF0YXNvdXJjZS5cblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKGlzT2JqZWN0KG9wdGlvbnMpKSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL2RvbS1zdG9yYWdlXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBkZWZhdWx0c1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZGVmYXVsdHMucmVhZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gZGVmYXVsdHMucmVhZC5zZWxlY3RvclxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gZGVmYXVsdHMud3JpdGVcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IGRlZmF1bHRzLndyaXRlLnNlbGVjdG9yXG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRyZWFkOiB7XG5cdFx0XHRcdHNlbGVjdG9yOiB1bmRlZmluZWQsXG5cdFx0XHR9LFxuXHRcdFx0d3JpdGU6IHtcblx0XHRcdFx0c2VsZWN0b3I6IHVuZGVmaW5lZCxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICogQHRocm93cyB7RXJyb3J9IFRoZSByZWFkIHNlbGVjdG9yIGlzIG5vdCBkZWZpbmVkXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaGVyZSBhcmUgbm8gc3RvcmFnZSBlbGVtZW50XG5cdCAqL1xuXHRyZWFkKCkge1xuXHRcdGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRPcHRpb24oXCJyZWFkLnNlbGVjdG9yXCIsIHVuZGVmaW5lZCk7XG5cdFx0aWYgKCFzZWxlY3Rvcikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlIHJlYWQgc2VsZWN0b3IgaXMgbm90IGRlZmluZWRcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc3RvcmFnZSA9IGZpbmRFbGVtZW50V2l0aFNlbGVjdG9yVXB3YXJkcyh0aGlzLCBzZWxlY3Rvcik7XG5cdFx0aWYgKCFzdG9yYWdlKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBubyBzdG9yYWdlIGVsZW1lbnRcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHN0b3JhZ2UuaW5uZXJIVE1MKTtcblx0XHRcdFx0dGhpcy5zZXQoZGF0YSk7XG5cdFx0XHRcdHJlc29sdmUoZGF0YSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHJlamVjdChlKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gVGhlIHdyaXRlIHNlbGVjdG9yIGlzIG5vdCBkZWZpbmVkXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSBUaGVyZSBhcmUgbm8gc3RvcmFnZSBlbGVtZW50XG5cdCAqL1xuXHR3cml0ZSgpIHtcblx0XHRjb25zdCBzZWxlY3RvciA9IHRoaXMuZ2V0T3B0aW9uKFwid3JpdGUuc2VsZWN0b3JcIik7XG5cdFx0aWYgKCFzZWxlY3Rvcikge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhlIG9wdGlvbiB3cml0ZS5zZWxlY3RvciBpcyBub3QgZGVmaW5lZFwiKTtcblx0XHR9XG5cblx0XHRjb25zdCBzdG9yYWdlID0gZmluZEVsZW1lbnRXaXRoU2VsZWN0b3JVcHdhcmRzKHRoaXMsIHNlbGVjdG9yKTtcblx0XHRpZiAoIXN0b3JhZ2UpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlRoZXJlIGlzIG5vIHN0b3JhZ2UgZWxlbWVudFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0c3RvcmFnZS5pbm5lckhUTUwgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmdldCgpKTtcblx0XHRcdFx0cmVzb2x2ZShzdG9yYWdlKTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmVqZWN0KGUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7RG9tU3RvcmFnZX0gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2UvZG9tLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdTZXJ2ZURvbXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBpdCgnc2hvdWxkIGluaXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3QgZG9tID0gbmV3IERvbVN0b3JhZ2Uoe1xuICAgICAgICAgICAgXG4gICAgICAgIH0pXG5cbiAgICAgICAgZXhwZWN0KGRvbSkudG8uYmUubm90Lm51bGxcblxuXG4gICAgfSlcblxufSk7XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy9nbG9iYWwubWpzXCI7XG5pbXBvcnQgeyBEYXRhc291cmNlIH0gZnJvbSBcIi4uLy4uL2RhdGFzb3VyY2UubWpzXCI7XG5pbXBvcnQgeyBTdG9yYWdlLCBzdG9yYWdlT2JqZWN0U3ltYm9sIH0gZnJvbSBcIi4uL3N0b3JhZ2UubWpzXCI7XG5cbmV4cG9ydCB7IExvY2FsU3RvcmFnZSB9O1xuXG4vKipcbiAqIFRoZSBMb2NhbFN0b3JhZ2UgRGF0YXNvdXJjZSBwcm92aWRlcyBhIGRhdGEgc3RvcmUgaW4gdGhlIGJyb3dzZXIgbG9jYWxTdG9yYWdlLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBMb2NhbFN0b3JhZ2UgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBhY2Nlc3MgdG8gZGF0YSBvYmplY3RzLlxuICovXG5jbGFzcyBMb2NhbFN0b3JhZ2UgZXh0ZW5kcyBTdG9yYWdlIHtcblx0LyoqXG5cdCAqIEB0aHJvd3Mge0Vycm9yfSB0aGlzIG1ldGhvZCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGRlcml2ZWQgY2xhc3Nlcy5cblx0ICogQHJldHVybiB7ZXh0ZXJuYWw6bG9jYWxTdG9yYWdlfVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0W3N0b3JhZ2VPYmplY3RTeW1ib2xdKCkge1xuXHRcdHJldHVybiBnZXRHbG9iYWxPYmplY3QoXCJsb2NhbFN0b3JhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zdG9yYWdlL2xvY2Fsc3RvcmFnZVwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgY2xvbmVcblx0ICogQHJldHVybiB7TG9jYWxTdG9yYWdlfVxuXHQgKi9cblx0Z2V0Q2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBMb2NhbFN0b3JhZ2UoXG5cdFx0XHR0aGlzW2ludGVybmFsU3ltYm9sXS5nZXRSZWFsU3ViamVjdCgpW1wib3B0aW9uc1wiXS5rZXksXG5cdFx0KTtcblx0fVxufVxuIiwgImZ1bmN0aW9uIGNyZWF0ZVN0b3JhZ2UoKSB7XG4gICAgXG4gICAgbGV0IFVOU0VUID0gU3ltYm9sKCk7XG4gICAgbGV0IHMgPSB7fSxcbiAgICAgICAgbm9vcENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICB9LFxuICAgICAgICBfaXRlbUluc2VydGlvbkNhbGxiYWNrID0gbm9vcENhbGxiYWNrO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsICdzZXRJdGVtJywge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoaywgdiA9IFVOU0VUKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHYgPT09IFVOU0VUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEZhaWxlZCB0byBleGVjdXRlICdzZXRJdGVtJyBvbiAnU3RvcmFnZSc6IDIgYXJndW1lbnRzIHJlcXVpcmVkLCBidXQgb25seSAxIHByZXNlbnQuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGsgPSBrICsgJyc7XG4gICAgICAgICAgICAgICAgaWYgKCFzLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAgICAgIF9pdGVtSW5zZXJ0aW9uQ2FsbGJhY2socy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzW2tdID0gdiArICcnO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCAnZ2V0SXRlbScsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gayA9PiB7XG4gICAgICAgICAgICAgICAgayA9IGsgKyAnJztcbiAgICAgICAgICAgICAgICBpZiAocy5oYXNPd25Qcm9wZXJ0eShrKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc1trXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsICdyZW1vdmVJdGVtJywge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBrID0+IHtcbiAgICAgICAgICAgICAgICBrID0gayArICcnO1xuICAgICAgICAgICAgICAgIGlmIChzLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzW2tdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgJ2NsZWFyJywge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgayBpbiBzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzLmhhc093blByb3BlcnR5KGspKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgc1trXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocywgJ2xlbmd0aCcsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMocykubGVuZ3RoO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsIFwia2V5XCIsIHtcbiAgICAgICAgdmFsdWU6IGsgPT4ge1xuICAgICAgICAgICAgbGV0IGtleSA9IE9iamVjdC5rZXlzKHMpW2tdO1xuICAgICAgICAgICAgcmV0dXJuICgha2V5KSA/IG51bGwgOiBrZXk7XG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsICdpdGVtSW5zZXJ0aW9uQ2FsbGJhY2snLCB7XG4gICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIF9pdGVtSW5zZXJ0aW9uQ2FsbGJhY2s7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogdiA9PiB7XG4gICAgICAgICAgICBpZiAoIXYgfHwgdHlwZW9mIHYgIT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHYgPSBub29wQ2FsbGJhY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfaXRlbUluc2VydGlvbkNhbGxiYWNrID0gdjtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzO1xufVxuXG5cbmV4cG9ydCB7Y3JlYXRlU3RvcmFnZX07IiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtMb2NhbFN0b3JhZ2V9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2UvbG9jYWxzdG9yYWdlLm1qc1wiO1xuaW1wb3J0IHtjcmVhdGVTdG9yYWdlfSBmcm9tIFwiLi4vLi4vLi4vLi4vdXRpbC9sb2NhbHN0b3JhZ2UubWpzXCI7XG5cblxubGV0IGxvY2FsU3RvcmFnZVJlZmVyZW5jZTtcblxuZGVzY3JpYmUoJ0xvY2FsU3RvcmFnZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGdsb2JhbFRoaXNbJ2xvY2FsU3RvcmFnZSddID0gbG9jYWxTdG9yYWdlUmVmZXJlbmNlO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbG9jYWxTdG9yYWdlUmVmZXJlbmNlID0gZ2xvYmFsVGhpc1snbG9jYWxTdG9yYWdlJ11cbiAgICAgICAgZ2xvYmFsVGhpc1snbG9jYWxTdG9yYWdlJ10gPSBjcmVhdGVTdG9yYWdlKCk7XG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBMb2NhbFN0b3JhZ2UgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IExvY2FsU3RvcmFnZSgnbXlrZXknKSkudG8uYmUuaW5zdGFuY2VvZihMb2NhbFN0b3JhZ2UpXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncncnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3JlYWQgc2hvdWxkIHJldHVybiBvYmplY3QnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgZHMgPSBuZXcgTG9jYWxTdG9yYWdlKCdteWtleScpXG4gICAgICAgICAgICBkcy5yZWFkKCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnd3JpdGUgc2hvdWxkICcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBkcyA9IG5ldyBMb2NhbFN0b3JhZ2UoJ215a2V5JylcbiAgICAgICAgICAgIGRzLndyaXRlKCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuXG59KSIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IERhdGFzb3VyY2UgfSBmcm9tIFwiLi4vLi4vZGF0YXNvdXJjZS5tanNcIjtcbmltcG9ydCB7IFN0b3JhZ2UsIHN0b3JhZ2VPYmplY3RTeW1ib2wgfSBmcm9tIFwiLi4vc3RvcmFnZS5tanNcIjtcblxuZXhwb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfTtcblxuLyoqXG4gKiBUaGUgU2Vzc2lvblN0b3JhZ2UgY2xhc3MgcHJvdmlkZXMgYSBkYXRhIHNvdXJjZSB0aGF0IHVzZXMgdGhlIFNlc3Npb25TdG9yYWdlIEFQSSBvbiB0aGUgY2xpZW50LlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjIuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBMb2NhbFN0b3JhZ2UgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBhY2Nlc3MgdG8gZGF0YSBvYmplY3RzLlxuICovXG5jbGFzcyBTZXNzaW9uU3RvcmFnZSBleHRlbmRzIFN0b3JhZ2Uge1xuXHQvKipcblx0ICogQHRocm93cyB7RXJyb3J9IHRoaXMgbWV0aG9kIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZGVyaXZlZCBjbGFzc2VzLlxuXHQgKiBAcmV0dXJuIHtleHRlcm5hbDpzZXNzaW9uU3RvcmFnZX1cblx0ICogQHByaXZhdGVcblx0ICovXG5cdFtzdG9yYWdlT2JqZWN0U3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gZ2V0R2xvYmFsT2JqZWN0KFwic2Vzc2lvblN0b3JhZ2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXG5cdFx0XHRcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2Uvc2Vzc2lvbi1zdG9yYWdlXCIsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgQ2xvbmVcblx0ICpcblx0ICogQHJldHVybiB7U2Vzc2lvblN0b3JhZ2V9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFNlc3Npb25TdG9yYWdlKFxuXHRcdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0ua2V5LFxuXHRcdCk7XG5cdH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7U2Vzc2lvblN0b3JhZ2V9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3N0b3JhZ2Uvc2Vzc2lvbnN0b3JhZ2UubWpzXCI7XG5pbXBvcnQge2NyZWF0ZVN0b3JhZ2V9IGZyb20gXCIuLi8uLi8uLi8uLi91dGlsL2xvY2Fsc3RvcmFnZS5tanNcIjtcblxuXG5sZXQgc3RvcmFnZVJlZmVyZW5jZTtcblxuZGVzY3JpYmUoJ1Nlc3Npb25TdG9yYWdlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgZ2xvYmFsVGhpc1snc2Vzc2lvblN0b3JhZ2UnXSA9IHN0b3JhZ2VSZWZlcmVuY2U7XG4gICAgfSk7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBzdG9yYWdlUmVmZXJlbmNlID0gZ2xvYmFsVGhpc1snc2Vzc2lvblN0b3JhZ2UnXVxuICAgICAgICBnbG9iYWxUaGlzWydzZXNzaW9uU3RvcmFnZSddID0gY3JlYXRlU3RvcmFnZSgpO1xuXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgU2Vzc2lvblN0b3JhZ2UgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IFNlc3Npb25TdG9yYWdlKCdteWtleScpKS50by5iZS5pbnN0YW5jZW9mKFNlc3Npb25TdG9yYWdlKVxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3J3JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdyZWFkIHNob3VsZCByZXR1cm4gb2JqZWN0JywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IFNlc3Npb25TdG9yYWdlKCdteWtleScpXG4gICAgICAgICAgICBkcy5yZWFkKCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnd3JpdGUgc2hvdWxkICcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBkcyA9IG5ldyBTZXNzaW9uU3RvcmFnZSgnbXlrZXknKVxuICAgICAgICAgICAgZHMud3JpdGUoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG5cbn0pIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGlzQXJyYXksIGlzRnVuY3Rpb24sIGlzT2JqZWN0IH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgRGF0YXNvdXJjZSB9IGZyb20gXCIuLi9kYXRhc291cmNlLm1qc1wiO1xuaW1wb3J0IHsgZGlmZiB9IGZyb20gXCIuLi9kaWZmLm1qc1wiO1xuaW1wb3J0IHsgUGF0aGZpbmRlciB9IGZyb20gXCIuLi9wYXRoZmluZGVyLm1qc1wiO1xuaW1wb3J0IHsgUGlwZSB9IGZyb20gXCIuLi9waXBlLm1qc1wiO1xuXG5leHBvcnQgeyBTZXJ2ZXIgfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHR5cGUge3N5bWJvbH1cbiAqL1xuY29uc3Qgc2VydmVyVmVyc2lvblN5bWJvbCA9IFN5bWJvbChcInNlcnZlclZlcnNpb25cIik7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYWxsIHNlcnZlciBkYXRhIHNvdXJjZXNcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjQuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBTZXJ2ZXIgY2xhc3MgZW5jYXBzdWxhdGVzIHRoZSBhY2Nlc3MgdG8gYSBzZXJ2ZXIgZGF0YXNvdXJjZVxuICovXG5jbGFzcyBTZXJ2ZXIgZXh0ZW5kcyBEYXRhc291cmNlIHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXJcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBwcmVwYXJlcyB0aGUgZGF0YSB0aGF0IGNvbWVzIGZyb20gdGhlIHNlcnZlci5cblx0ICogU2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBwYXlsb2FkXG5cdCAqIEByZXR1cm4ge09iamVjdH1cblx0ICovXG5cdHRyYW5zZm9ybVNlcnZlclBheWxvYWQocGF5bG9hZCkge1xuXHRcdHBheWxvYWQgPSBkb1RyYW5zZm9ybS5jYWxsKHRoaXMsIFwicmVhZFwiLCBwYXlsb2FkKTtcblx0XHR0aGlzW3NlcnZlclZlcnNpb25TeW1ib2xdID0gcGF5bG9hZDtcblxuXHRcdGNvbnN0IGRhdGFQYXRoID0gdGhpcy5nZXRPcHRpb24oXCJyZWFkLnBhdGhcIik7XG5cdFx0aWYgKGRhdGFQYXRoKSB7XG5cdFx0XHRwYXlsb2FkID0gbmV3IFBhdGhmaW5kZXIocGF5bG9hZCkuZ2V0VmlhKGRhdGFQYXRoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcGF5bG9hZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIHByZXBhcmVzIHRoZSBkYXRhIGZvciB3cml0aW5nIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICpcblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtPYmplY3R9IHBheWxvYWRcblx0ICogQHJldHVybiB7T2JqZWN0fVxuXHQgKi9cblx0cHJlcGFyZVNlcnZlclBheWxvYWQocGF5bG9hZCkge1xuXHRcdHBheWxvYWQgPSBkb1RyYW5zZm9ybS5jYWxsKHRoaXMsIFwid3JpdGVcIiwgcGF5bG9hZCk7XG5cdFx0cGF5bG9hZCA9IGRvRGlmZi5jYWxsKHRoaXMsIHBheWxvYWQpO1xuXG5cdFx0Y29uc3Qgc2hlYXRoaW5nT2JqZWN0ID0gdGhpcy5nZXRPcHRpb24oXCJ3cml0ZS5zaGVhdGhpbmcub2JqZWN0XCIpO1xuXHRcdGNvbnN0IHNoZWF0aGluZ1BhdGggPSB0aGlzLmdldE9wdGlvbihcIndyaXRlLnNoZWF0aGluZy5wYXRoXCIpO1xuXG5cdFx0aWYgKHNoZWF0aGluZ09iamVjdCAmJiBzaGVhdGhpbmdQYXRoKSB7XG5cdFx0XHRjb25zdCBzdWIgPSBwYXlsb2FkO1xuXHRcdFx0cGF5bG9hZCA9IHNoZWF0aGluZ09iamVjdDtcblx0XHRcdG5ldyBQYXRoZmluZGVyKHBheWxvYWQpLnNldFZpYShzaGVhdGhpbmdQYXRoLCBzdWIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBwYXlsb2FkO1xuXHR9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBvYmpcbiAqIEByZXR1cm4geyp9XG4gKi9cbmZ1bmN0aW9uIGRvRGlmZihvYmopIHtcblx0aWYgKFxuXHRcdHRoaXNbc2VydmVyVmVyc2lvblN5bWJvbF0gPT09IG51bGwgfHxcblx0XHR0aGlzW3NlcnZlclZlcnNpb25TeW1ib2xdID09PSB1bmRlZmluZWRcblx0KSB7XG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdGNvbnN0IGNhbGxiYWNrID0gdGhpcy5nZXRPcHRpb24oXCJ3cml0ZS5wYXJ0aWFsLmNhbGxiYWNrXCIpO1xuXHRpZiAoIWlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdGNvbnN0IHJlc3VsdHMgPSBkaWZmKHRoaXNbc2VydmVyVmVyc2lvblN5bWJvbF0sIG9iaik7XG5cdGlmICghcmVzdWx0cykge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHRvYmogPSBjYWxsYmFjayhvYmosIHJlc3VsdHMpO1xuXHR0aGlzW3NlcnZlclZlcnNpb25TeW1ib2xdID0gb2JqO1xuXG5cdHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGRvVHJhbnNmb3JtKHR5cGUsIG9iaikge1xuXHRjb25zdCB0cmFuc2Zvcm1hdGlvbiA9IHRoaXMuZ2V0T3B0aW9uKGAke3R5cGV9Lm1hcHBpbmcudHJhbnNmb3JtZXJgKTtcblxuXHRpZiAodHJhbnNmb3JtYXRpb24gIT09IHVuZGVmaW5lZCAmJiB0cmFuc2Zvcm1hdGlvbiAhPT0gbnVsbCkge1xuXHRcdGNvbnN0IHBpcGUgPSBuZXcgUGlwZSh0cmFuc2Zvcm1hdGlvbik7XG5cdFx0Y29uc3QgY2FsbGJhY2tzID0gdGhpcy5nZXRPcHRpb24oYCR7dHlwZX0ubWFwcGluZy5jYWxsYmFja3NgKTtcblxuXHRcdGlmIChpc0FycmF5KGNhbGxiYWNrcykpIHtcblx0XHRcdGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHRcdHBpcGUuc2V0Q2FsbGJhY2soY2FsbGJhY2spO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzT2JqZWN0KGNhbGxiYWNrcykpIHtcblx0XHRcdGZvciAoY29uc3Qga2V5IGluIGNhbGxiYWNrcykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0Y2FsbGJhY2tzLmhhc093blByb3BlcnR5KGtleSkgJiZcblx0XHRcdFx0XHR0eXBlb2YgY2FsbGJhY2tzW2tleV0gPT09IFwiZnVuY3Rpb25cIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRwaXBlLnNldENhbGxiYWNrKGtleSwgY2FsbGJhY2tzW2tleV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0b2JqID0gcGlwZS5ydW4ob2JqKTtcblx0fVxuXG5cdHJldHVybiBvYmo7XG59XG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7U2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1NlcnZlcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGl0KCdzaG91bGQgdHJhbnNmb3JtIGRhdGEnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IHdyaXRlQ2FsbGJhY2tDYWxsZWQgPSBmYWxzZVxuICAgICAgICBsZXQgcmVhZENhbGxiYWNrQ2FsbGVkID0gZmFsc2VcblxuICAgICAgICBjb25zdCBzZXJ2ZXIgPSBuZXcgU2VydmVyKHtcbiAgICAgICAgICAgIHdyaXRlOiB7XG4gICAgICAgICAgICAgICAgbWFwcGluZzoge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lcjogXCJjYWxsOm9uV3JpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbldyaXRlOiAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlQ2FsbGJhY2tDYWxsZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2hlYXRoaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVtbzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eXo6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBcImRhdGEueHl6XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWFkOiB7XG4gICAgICAgICAgICAgICAgbWFwcGluZzoge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lcjogXCJjYWxsOm9uUmVhZFwiLFxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uUmVhZDogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2FsbGJhY2tDYWxsZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGF0aDogJ2RhdGEueHl6JyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBleHBlY3Qoc2VydmVyLnRyYW5zZm9ybVNlcnZlclBheWxvYWQoe2RlbW86IDEsIGRhdGE6IHt4eXo6IDJ9fSkpLnRvLmRlZXAuZXF1YWwoe2RlbW86IDEsIGRhdGE6IHt4eXo6IDJ9fSlcbiAgICAgICAgZXhwZWN0KHNlcnZlci5wcmVwYXJlU2VydmVyUGF5bG9hZCh7ZGVtbzogMSwgZGF0YToge3h5ejogMn19KSkudG8uZGVlcC5lcXVhbCh7ZGVtbzogMSwgZGF0YToge3h5ejogMn19KVxuXG5cbiAgICB9KVxuXG59KTtcbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyBpbnRlcm5hbFN5bWJvbCwgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vLi4vLi4vY29uc3RhbnRzLm1qc1wiO1xuaW1wb3J0IHsgaXNTdHJpbmcsIGlzT2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgV2ViQ29ubmVjdCBhcyBOZXRXZWJDb25uZWN0IH0gZnJvbSBcIi4uLy4uLy4uL25ldC93ZWJjb25uZWN0Lm1qc1wiO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gXCIuLi8uLi8uLi9uZXQvd2ViY29ubmVjdC9tZXNzYWdlLm1qc1wiO1xuaW1wb3J0IHsgU2VydmVyIH0gZnJvbSBcIi4uL3NlcnZlci5tanNcIjtcblxuZXhwb3J0IHsgV2ViQ29ubmVjdCB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICpcbiAqIGhpbnQ6IHRoaXMgbmFtZSBpcyB1c2VkIGluIHRoZSB0ZXN0cy4gaWYgeW91IHdhbnQgdG8gY2hhbmdlIGl0LCBwbGVhc2UgY2hhbmdlIGl0IGluIHRoZSB0ZXN0cyBhcyB3ZWxsLlxuICovXG5jb25zdCB3ZWJDb25uZWN0U3ltYm9sID0gU3ltYm9sKFwiY29ubmVjdGlvblwiKTtcblxuLyoqXG4gKiBUaGUgUmVzdEFQSSBpcyBhIGNsYXNzIHRoYXQgZW5hYmxlcyBhIFJFU1QgQVBJIHNlcnZlci5cbiAqXG4gKiBAZXh0ZXJuYWxFeGFtcGxlIC4uLy4uLy4uLy4uL2V4YW1wbGUvZGF0YS9kYXRhc291cmNlL3NlcnZlci93ZWJjb25uZWN0Lm1qc1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMy4xLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgTG9jYWxTdG9yYWdlIGNsYXNzIGVuY2Fwc3VsYXRlcyB0aGUgYWNjZXNzIHRvIGRhdGEgb2JqZWN0cy5cbiAqL1xuY2xhc3MgV2ViQ29ubmVjdCBleHRlbmRzIFNlcnZlciB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIG9wdGlvbnMgY29udGFpbnMgZGVmaW5pdGlvbnMgZm9yIHRoZSBkYXRhc291cmNlLlxuXHQgKi9cblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKCk7XG5cblx0XHRpZiAoaXNTdHJpbmcob3B0aW9ucykpIHtcblx0XHRcdG9wdGlvbnMgPSB7IHVybDogb3B0aW9ucyB9O1xuXHRcdH1cblxuXHRcdGlmICghaXNPYmplY3Qob3B0aW9ucykpIG9wdGlvbnMgPSB7fTtcblx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0dGhpc1t3ZWJDb25uZWN0U3ltYm9sXSA9IG5ldyBOZXRXZWJDb25uZWN0KHtcblx0XHRcdHVybDogdGhpcy5nZXRPcHRpb24oXCJ1cmxcIiksXG5cdFx0XHRjb25uZWN0aW9uOiB7XG5cdFx0XHRcdHRpbWVvdXQ6IHRoaXMuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi50aW1lb3V0XCIpLFxuXHRcdFx0XHRyZWNvbm5lY3Q6IHtcblx0XHRcdFx0XHR0aW1lb3V0OiB0aGlzLmdldE9wdGlvbihcImNvbm5lY3Rpb24ucmVjb25uZWN0LnRpbWVvdXRcIiksXG5cdFx0XHRcdFx0YXR0ZW1wdHM6IHRoaXMuZ2V0T3B0aW9uKFwiY29ubmVjdGlvbi5yZWNvbm5lY3QuYXR0ZW1wdHNcIiksXG5cdFx0XHRcdFx0ZW5hYmxlZDogdGhpcy5nZXRPcHRpb24oXCJjb25uZWN0aW9uLnJlY29ubmVjdC5lbmFibGVkXCIpLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Y29ubmVjdCgpIHtcblx0XHRyZXR1cm4gdGhpc1t3ZWJDb25uZWN0U3ltYm9sXS5jb25uZWN0KCk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7Ym9vbGVhbn1cblx0ICovXG5cdGlzQ29ubmVjdGVkKCkge1xuXHRcdHJldHVybiB0aGlzW3dlYkNvbm5lY3RTeW1ib2xdLmlzQ29ubmVjdGVkKCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvZGF0YS9kYXRhc291cmNlL3NlcnZlci93ZWJjb25uZWN0XCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmw9dW5kZWZpbmVkIERlZmluZXMgdGhlIHJlc291cmNlIHRoYXQgeW91IHdpc2ggdG8gZmV0Y2guXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjb25uZWN0aW9uXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBjb25uZWN0aW9uLnRpbWVvdXQ9NTAwMCBEZWZpbmVzIHRoZSB0aW1lb3V0IGZvciB0aGUgY29ubmVjdGlvbi5cblx0ICogQHByb3BlcnR5IHtOdW1iZXJ9IGNvbm5lY3Rpb24ucmVjb25uZWN0LnRpbWVvdXQgVGhlIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIGZvciB0aGUgcmVjb25uZWN0LlxuXHQgKiBAcHJvcGVydHkge051bWJlcn0gY29ubmVjdGlvbi5yZWNvbm5lY3QuYXR0ZW1wdHMgVGhlIG1heGltdW0gbnVtYmVyIG9mIHJlY29ubmVjdHMuXG5cdCAqIEBwcm9wZXJ0eSB7Qm9vbH0gY29ubmVjdGlvbi5yZWNvbm5lY3QuZW5hYmxlZCBJZiB0aGUgcmVjb25uZWN0IGlzIGVuYWJsZWQuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZT17fSBPcHRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5tYXBwaW5nIHRoZSBtYXBwaW5nIGlzIGFwcGxpZWQgYmVmb3JlIHdyaXRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB3cml0ZS5tYXBwaW5nLnRyYW5zZm9ybWVyIFRyYW5zZm9ybWVyIHRvIHNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgZW50cmllc1xuXHQgKiBAcHJvcGVydHkge01vbnN0ZXIuRGF0YS5EYXRhc291cmNlfmV4YW1wbGVDYWxsYmFja1tdfSB3cml0ZS5tYXBwaW5nLmNhbGxiYWNrIHdpdGggdGhlIGhlbHAgb2YgdGhlIGNhbGxiYWNrLCB0aGUgc3RydWN0dXJlcyBjYW4gYmUgYWRqdXN0ZWQgYmVmb3JlIHdyaXRpbmcuXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5zaGVhdGhpbmdcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLnNoZWF0aGluZy5vYmplY3QgT2JqZWN0IHRvIGJlIHdyYXBwZWRcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLnNoZWF0aGluZy5wYXRoIFBhdGggdG8gdGhlIGRhdGFcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHJlYWQ9e30gT3B0aW9uc1xuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gcmVhZC5wYXRoIFBhdGggdG8gZGF0YVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVhZC5tYXBwaW5nIHRoZSBtYXBwaW5nIGlzIGFwcGxpZWQgYWZ0ZXIgcmVhZGluZy5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHJlYWQubWFwcGluZy50cmFuc2Zvcm1lciBUcmFuc2Zvcm1lciB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtNb25zdGVyLkRhdGEuRGF0YXNvdXJjZX5leGFtcGxlQ2FsbGJhY2tbXX0gcmVhZC5tYXBwaW5nLmNhbGxiYWNrIHdpdGggdGhlIGhlbHAgb2YgdGhlIGNhbGxiYWNrLCB0aGUgc3RydWN0dXJlcyBjYW4gYmUgYWRqdXN0ZWQgYWZ0ZXIgcmVhZGluZy5cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHVybDogdW5kZWZpbmVkLFxuXHRcdFx0d3JpdGU6IHtcblx0XHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRcdHRyYW5zZm9ybWVyOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0Y2FsbGJhY2tzOiB7fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0c2hlYXRoaW5nOiB7XG5cdFx0XHRcdFx0b2JqZWN0OiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0cGF0aDogdW5kZWZpbmVkLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHJlYWQ6IHtcblx0XHRcdFx0bWFwcGluZzoge1xuXHRcdFx0XHRcdHRyYW5zZm9ybWVyOiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0Y2FsbGJhY2tzOiB7fSxcblx0XHRcdFx0fSxcblx0XHRcdFx0cGF0aDogdW5kZWZpbmVkLFxuXHRcdFx0fSxcblx0XHRcdGNvbm5lY3Rpb246IHtcblx0XHRcdFx0dGltZW91dDogNTAwMCxcblx0XHRcdFx0cmVjb25uZWN0OiB7XG5cdFx0XHRcdFx0dGltZW91dDogMTAwMCxcblx0XHRcdFx0XHRhdHRlbXB0czogMSxcblx0XHRcdFx0XHRlbmFibGVkOiBmYWxzZSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgY2xvc2VzIHRoZSBjb25uZWN0aW9uLlxuXHQgKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Y2xvc2UoKSB7XG5cdFx0cmV0dXJuIHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0uY2xvc2UoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0cmVhZCgpIHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0d2hpbGUgKHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0uZGF0YVJlY2VpdmVkKCkgPT09IHRydWUpIHtcblx0XHRcdFx0bGV0IG9iaiA9IHRoaXNbd2ViQ29ubmVjdFN5bWJvbF0ucG9sbCgpO1xuXHRcdFx0XHRpZiAoIWlzT2JqZWN0KG9iaikpIHtcblx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKFwiVGhlIHJlY2VpdmVkIGRhdGEgaXMgbm90IGFuIG9iamVjdC5cIikpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICghKG9iaiBpbnN0YW5jZW9mIE1lc3NhZ2UpKSB7XG5cdFx0XHRcdFx0cmVqZWN0KG5ldyBFcnJvcihcIlRoZSByZWNlaXZlZCBkYXRhIGlzIG5vdCBhIE1lc3NhZ2UuXCIpKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRvYmogPSBvYmouZ2V0RGF0YSgpO1xuXHRcdFx0XHRvYmogPSB0aGlzLnRyYW5zZm9ybVNlcnZlclBheWxvYWQuY2FsbCh0aGlzLCBvYmopO1xuXHRcdFx0XHR0aGlzLnNldChvYmopO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXNvbHZlKHRoaXMuZ2V0KCkpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHR3cml0ZSgpIHtcblx0XHRjb25zdCBvYmogPSB0aGlzLnByZXBhcmVTZXJ2ZXJQYXlsb2FkKHRoaXMuZ2V0KCkpO1xuXHRcdHJldHVybiB0aGlzW3dlYkNvbm5lY3RTeW1ib2xdLnNlbmQob2JqKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtSZXN0QVBJfVxuXHQgKi9cblx0Z2V0Q2xvbmUoKSB7XG5cdFx0cmV0dXJuIG5ldyBXZWJDb25uZWN0KHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdKTtcblx0fVxufVxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1dlYkNvbm5lY3R9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9zb3VyY2UvZGF0YS9kYXRhc291cmNlL3NlcnZlci93ZWJjb25uZWN0Lm1qc1wiO1xuaW1wb3J0IHtpbml0V2ViU29ja2V0fSBmcm9tIFwiLi4vLi4vLi4vLi4vdXRpbC93ZWJzb2NrZXQubWpzXCI7XG5cbmNvbnN0IHRlc3RVcmwgPSBcIndzczovL3dzLnBvc3RtYW4tZWNoby5jb20vcmF3XCJcblxuZGVzY3JpYmUoJ1dlYnNvY2tldCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBkcyA9IHVuZGVmaW5lZFxuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRXZWJTb2NrZXQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuICAgIH0pO1xuXG4gICAgYWZ0ZXJFYWNoKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGlmIChkcykge1xuICAgICAgICAgICAgZHMuY2xvc2UoKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gd29ya2Fyb3VuZDogd2l0aG91dCB0aGlzLCB0aGUgbm9kZSB0ZXN0IHdpbGwgbm90IGV4aXQgXG4gICAgICAgIGZvciAoY29uc3Qgc3ltIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZHMpKSB7XG4gICAgICAgICAgICBpZiAoc3ltLnRvU3RyaW5nKCkgPT09ICdTeW1ib2woY29ubmVjdGlvbiknKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvbiA9IGRzW3N5bV1cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHN5bTIgb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhjb25uZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3ltMi50b1N0cmluZygpID09PSAnU3ltYm9sKGNvbm5lY3Rpb24pJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc29ja2V0ID0gY29ubmVjdGlvbltzeW0yXT8uc29ja2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvY2tldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc29ja2V0Py50ZXJtaW5hdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0Py5bJ3Rlcm1pbmF0ZSddKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkb25lKClcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2V0IGNsb25lJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGRzID0gbmV3IFdlYkNvbm5lY3QodGVzdFVybClcbiAgICAgICAgY29uc3QgY2xvbmUgPSBkcy5nZXRDbG9uZSgpXG4gICAgICAgIGV4cGVjdChjbG9uZSkudG8uYmUuYW4uaW5zdGFuY2VvZihXZWJDb25uZWN0KVxuXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgdHJhbnNmb3JtIGRhdGEnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCB3cml0ZUNhbGxiYWNrQ2FsbGVkID0gZmFsc2VcbiAgICAgICAgbGV0IHJlYWRDYWxsYmFja0NhbGxlZCA9IGZhbHNlXG5cbiAgICAgICAgZHMgPSBuZXcgV2ViQ29ubmVjdCh7XG4gICAgICAgICAgICB1cmw6IHRlc3RVcmwsXG4gICAgICAgICAgICB3cml0ZToge1xuICAgICAgICAgICAgICAgIG1hcHBpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZXI6IFwiY2FsbDpvbldyaXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25Xcml0ZTogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUNhbGxiYWNrQ2FsbGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNoZWF0aGluZzoge1xuICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbW86IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeHl6OiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogXCJkYXRhLnh5elwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVhZDoge1xuICAgICAgICAgICAgICAgIG1hcHBpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZXI6IFwiY2FsbDpvblJlYWRcIixcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvblJlYWQ6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNrQ2FsbGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBhdGg6ICdkYXRhLnh5eicsXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgZHMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZHMuc2V0KHtcbiAgICAgICAgICAgICAgICBlbnZlbG9wOiB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRzLndyaXRlKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBkcy5zZXQoe30pXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRzLmdldCgpKS50by5iZS5kZWVwLmVxdWFsKHt9KTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG5cbiAgICAgICAgICAgICAgICAgICAgZHMucmVhZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRzLmdldCgpKS50by5iZS5kZWVwLmVxdWFsKHtlbnZlbG9wOnttZXNzYWdlOiBcIkhlbGxvIFdvcmxkXCJ9fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Qod3JpdGVDYWxsYmFja0NhbGxlZCkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHJlYWRDYWxsYmFja0NhbGxlZCkudG8uYmUudHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKGUpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfSwgMjAwKVxuXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgfSlcblxuXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgY29ubmVjdCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGRzID0gbmV3IFdlYkNvbm5lY3Qoe1xuICAgICAgICAgICAgdXJsOiB0ZXN0VXJsLFxuICAgICAgICAgICAgcmVjb25uZWN0OiB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGRzLmNvbm5lY3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgZG9uZShlKVxuICAgICAgICB9KVxuXG5cbiAgICB9KVxuXG4gICAgaXQoJ3Nob3VsZCBzZW5kIGEgbWVzc2FnZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnRpbWVvdXQoMTAwMDApXG4gICAgICAgIFxuICAgICAgICBkcyA9IG5ldyBXZWJDb25uZWN0KHtcbiAgICAgICAgICAgIHVybDogdGVzdFVybCxcbiAgICAgICAgICAgIHJlY29ubmVjdDoge1xuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgZHMuY29ubmVjdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZHMuc2V0KHtcbiAgICAgICAgICAgICAgICBlbnZlbG9wOiB7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiSGVsbG8gV29ybGRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGRzLndyaXRlKCkudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBkcy5zZXQoe30pXG4gICAgICAgICAgICAgICAgZXhwZWN0KGRzLmdldCgpKS50by5iZS5kZWVwLmVxdWFsKHt9KTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIGRzLnJlYWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KGRzLmdldCgpKS50by5iZS5kZWVwLmVxdWFsKHtlbnZlbG9wOnttZXNzYWdlOiBcIkhlbGxvIFdvcmxkXCJ9fSk7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH0sNTAwKVxuICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoZXJyKSk7XG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgIGRvbmUoZSlcbiAgICAgICAgfSlcblxuXG4gICAgfSk7XG5cbn0pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBpc09iamVjdCwgaXNGdW5jdGlvbiwgaXNBcnJheSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy9pcy5tanNcIjtcbmltcG9ydCB7IGRpZmYgfSBmcm9tIFwiLi4vLi4vZGlmZi5tanNcIjtcbmltcG9ydCB7IFNlcnZlciB9IGZyb20gXCIuLi9zZXJ2ZXIubWpzXCI7XG5pbXBvcnQgeyBXcml0ZUVycm9yIH0gZnJvbSBcIi4vcmVzdGFwaS93cml0ZWVycm9yLm1qc1wiO1xuaW1wb3J0IHsgRGF0YUZldGNoRXJyb3IgfSBmcm9tIFwiLi9yZXN0YXBpL2RhdGEtZmV0Y2gtZXJyb3IubWpzXCI7XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gXCIuLi8uLi8uLi91dGlsL2Nsb25lLm1qc1wiO1xuXG5leHBvcnQgeyBSZXN0QVBJIH07XG5cbi8qKlxuICogQHR5cGUge3N5bWJvbH1cbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDMuMTIuMFxuICovXG5jb25zdCByYXdEYXRhU3ltYm9sID0gU3ltYm9sLmZvcihcblx0XCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS9yYXdkYXRhXCIsXG4pO1xuXG4vKipcbiAqIFRoZSBSZXN0QVBJIGlzIGEgY2xhc3MgdGhhdCBlbmFibGVzIGEgUkVTVCBBUEkgc2VydmVyLlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vLi4vLi4vZXhhbXBsZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3Jlc3RhcGkubWpzXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjIyLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBUaGUgUmVzdEFQSSBpcyBhIGNsYXNzIHRoYXQgYmluZHMgYSBSRVNUIEFQSSBzZXJ2ZXIuXG4gKi9cbmNsYXNzIFJlc3RBUEkgZXh0ZW5kcyBTZXJ2ZXIge1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBvcHRpb25zIGNvbnRhaW5zIGRlZmluaXRpb25zIGZvciB0aGUgZGF0YXNvdXJjZS5cblx0ICovXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKGlzT2JqZWN0KG9wdGlvbnMpKSB7XG5cdFx0XHR0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3Jlc3RhcGlcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlPXt9IE9wdGlvbnNcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLmluaXQ9e30gQW4gb3B0aW9uIG9iamVjdCwgY29udGFpbmluZyBhbnkgY3VzdG9tIHNldHRpbmdzIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gdGhlIHJlcXVlc3QuIFRoZSBwYXJhbWV0ZXJzIGFyZSBpZGVudGljYWwgdG8gdGhvc2Ugb2YgdGhlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUmVxdWVzdC9SZXF1ZXN0fFJlcXVlc3QgY29uc3RydWN0b3J9XG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3cml0ZS5pbml0Lm1ldGhvZD1QT1NUXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5pbml0LmhlYWRlcnMgT2JqZWN0IGNvbnRhaW5pbmcgYW55IGN1c3RvbSBoZWFkZXJzIHRoYXQgeW91IHdhbnQgdG8gYXBwbHkgdG8gdGhlIHJlcXVlc3QuXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB3cml0ZS5yZXNwb25zZUNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSByZXF1ZXN0IGhhcyBiZWVuIGNvbXBsZXRlZC5cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHdyaXRlLmFjY2VwdGVkU3RhdHVzPVsyMDAsMjAxXVxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gd3JpdGUudXJsIFVSTFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUubWFwcGluZyB0aGUgbWFwcGluZyBpcyBhcHBsaWVkIGJlZm9yZSB3cml0aW5nLlxuXHQgKiBAcHJvcGVydHkge1N0cmluZ30gd3JpdGUubWFwcGluZy50cmFuc2Zvcm1lciBUcmFuc2Zvcm1lciB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtleGFtcGxlQ2FsbGJhY2tbXX0gd3JpdGUubWFwcGluZy5jYWxsYmFjayB3aXRoIHRoZSBoZWxwIG9mIHRoZSBjYWxsYmFjaywgdGhlIHN0cnVjdHVyZXMgY2FuIGJlIGFkanVzdGVkIGJlZm9yZSB3cml0aW5nLlxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUucmVwb3J0XG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSB3cml0ZS5yZXBvcnQucGF0aCBQYXRoIHRvIHZhbGlkYXRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB3cml0ZS5wYXJ0aWFsXG5cdCAqIEBwcm9wZXJ0eSB7RnVuY3Rpb259IHdyaXRlLnBhcnRpYWwuY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIHJlcXVlc3QgaGFzIGJlZW4gY29tcGxldGVkLiAob2JqLCBkaWZmUmVzdWx0KSA9PiBvYmpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IHdyaXRlLnNoZWF0aGluZ1xuXHQgKiBAcHJvcGVydHkge09iamVjdH0gd3JpdGUuc2hlYXRoaW5nLm9iamVjdCBPYmplY3QgdG8gYmUgd3JhcHBlZFxuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gd3JpdGUuc2hlYXRoaW5nLnBhdGggUGF0aCB0byB0aGUgZGF0YVxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVhZD17fSBPcHRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSByZWFkLmluaXQ9e30gQW4gb3B0aW9uIG9iamVjdCBjb250YWluaW5nIGFueSBjdXN0b20gc2V0dGluZ3MgdGhhdCB5b3Ugd2FudCB0byBhcHBseSB0byB0aGUgcmVxdWVzdC4gVGhlIHBhcmFtZXRlcnMgYXJlIGlkZW50aWNhbCB0byB0aG9zZSBvZiB0aGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9SZXF1ZXN0L1JlcXVlc3R8UmVxdWVzdCBjb25zdHJ1Y3Rvcn1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlYWQuaW5pdC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7YXJyYXl9IHJlYWQuYWNjZXB0ZWRTdGF0dXM9WzIwMF1cblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHJlYWQudXJsIFVSTFxuXHQgKiBAcHJvcGVydHkge09iamVjdH0gcmVhZC5tYXBwaW5nIHRoZSBtYXBwaW5nIGlzIGFwcGxpZWQgYWZ0ZXIgcmVhZGluZy5cblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IHJlYWQubWFwcGluZy50cmFuc2Zvcm1lciBUcmFuc2Zvcm1lciB0byBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGVudHJpZXNcblx0ICogQHByb3BlcnR5IHtleGFtcGxlQ2FsbGJhY2tbXX0gcmVhZC5tYXBwaW5nLmNhbGxiYWNrIHdpdGggdGhlIGhlbHAgb2YgdGhlIGNhbGxiYWNrLCB0aGUgc3RydWN0dXJlcyBjYW4gYmUgYWRqdXN0ZWQgYWZ0ZXIgcmVhZGluZy5cblx0ICovXG5cdGdldCBkZWZhdWx0cygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuZGVmYXVsdHMsIHtcblx0XHRcdHdyaXRlOiB7XG5cdFx0XHRcdGluaXQ6IHtcblx0XHRcdFx0XHRtZXRob2Q6IFwiUE9TVFwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRyZXNwb25zZUNhbGxiYWNrOiBudWxsLFxuXHRcdFx0XHRhY2NlcHRlZFN0YXR1czogWzIwMCwgMjAxXSxcblx0XHRcdFx0dXJsOiBudWxsLFxuXHRcdFx0XHRtYXBwaW5nOiB7XG5cdFx0XHRcdFx0dHJhbnNmb3JtZXI6IG51bGwsXG5cdFx0XHRcdFx0Y2FsbGJhY2tzOiBbXSxcblx0XHRcdFx0fSxcblx0XHRcdFx0c2hlYXRoaW5nOiB7XG5cdFx0XHRcdFx0b2JqZWN0OiBudWxsLFxuXHRcdFx0XHRcdHBhdGg6IG51bGwsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlcG9ydDoge1xuXHRcdFx0XHRcdHBhdGg6IG51bGwsXG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0cGFydGlhbDoge1xuXHRcdFx0XHRcdGNhbGxiYWNrOiBudWxsLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHJlYWQ6IHtcblx0XHRcdFx0aW5pdDoge1xuXHRcdFx0XHRcdG1ldGhvZDogXCJHRVRcIixcblx0XHRcdFx0fSxcblx0XHRcdFx0cGF0aDogbnVsbCxcblx0XHRcdFx0cmVzcG9uc2VDYWxsYmFjazogbnVsbCxcblx0XHRcdFx0YWNjZXB0ZWRTdGF0dXM6IFsyMDBdLFxuXHRcdFx0XHR1cmw6IG51bGwsXG5cdFx0XHRcdG1hcHBpbmc6IHtcblx0XHRcdFx0XHR0cmFuc2Zvcm1lcjogbnVsbCxcblx0XHRcdFx0XHRjYWxsYmFja3M6IFtdLFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIG9wdGlvbnMgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIGpzb24gZGVmaW5pdGlvblxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIG9iamVjdFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGRhdGEgY2Fubm90IGJlIHJlYWRcblx0ICovXG5cdHJlYWQoKSB7XG5cdFx0bGV0IGluaXQgPSB0aGlzLmdldE9wdGlvbihcInJlYWQuaW5pdFwiKTtcblx0XHRpZiAoIWlzT2JqZWN0KGluaXQpKSBpbml0ID0ge307XG5cdFx0aWYgKCFpbml0W1wibWV0aG9kXCJdKSBpbml0W1wibWV0aG9kXCJdID0gXCJHRVRcIjtcblxuXHRcdGxldCBjYWxsYmFjayA9IHRoaXMuZ2V0T3B0aW9uKFwicmVhZC5yZXNwb25zZUNhbGxiYWNrXCIpO1xuXHRcdGlmICghY2FsbGJhY2spIHtcblx0XHRcdGNhbGxiYWNrID0gKG9iaikgPT4ge1xuXHRcdFx0XHR0aGlzLnNldCh0aGlzLnRyYW5zZm9ybVNlcnZlclBheWxvYWQuY2FsbCh0aGlzLCBvYmopKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZldGNoRGF0YS5jYWxsKHRoaXMsIGluaXQsIFwicmVhZFwiLCBjYWxsYmFjayk7XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICogQHRocm93cyB7V3JpdGVFcnJvcn0gdGhlIGRhdGEgY2Fubm90IGJlIHdyaXR0ZW5cblx0ICovXG5cdHdyaXRlKCkge1xuXHRcdGxldCBpbml0ID0gdGhpcy5nZXRPcHRpb24oXCJ3cml0ZS5pbml0XCIpO1xuXHRcdGlmICghaXNPYmplY3QoaW5pdCkpIGluaXQgPSB7fTtcblx0XHRpZiAodHlwZW9mIGluaXRbXCJoZWFkZXJzXCJdICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRpbml0W1wiaGVhZGVyc1wiXSA9IHtcblx0XHRcdFx0XCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpZiAoIWluaXRbXCJtZXRob2RcIl0pIGluaXRbXCJtZXRob2RcIl0gPSBcIlBPU1RcIjtcblxuXHRcdGNvbnN0IG9iaiA9IHRoaXMucHJlcGFyZVNlcnZlclBheWxvYWQodGhpcy5nZXQoKSk7XG5cdFx0aW5pdFtcImJvZHlcIl0gPSBKU09OLnN0cmluZ2lmeShvYmopO1xuXG5cdFx0Y29uc3QgY2FsbGJhY2sgPSB0aGlzLmdldE9wdGlvbihcIndyaXRlLnJlc3BvbnNlQ2FsbGJhY2tcIik7XG5cdFx0cmV0dXJuIGZldGNoRGF0YS5jYWxsKHRoaXMsIGluaXQsIFwid3JpdGVcIiwgY2FsbGJhY2spO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Jlc3RBUEl9XG5cdCAqL1xuXHRnZXRDbG9uZSgpIHtcblx0XHRjb25zdCBhcGkgPSBuZXcgUmVzdEFQSSgpO1xuXG5cdFx0Y29uc3QgcmVhZCA9IGNsb25lKHRoaXNbaW50ZXJuYWxTeW1ib2xdLmdldFJlYWxTdWJqZWN0KClbXCJvcHRpb25zXCJdLnJlYWQpO1xuXHRcdGNvbnN0IHdyaXRlID0gY2xvbmUodGhpc1tpbnRlcm5hbFN5bWJvbF0uZ2V0UmVhbFN1YmplY3QoKVtcIm9wdGlvbnNcIl0ud3JpdGUpO1xuXG5cdFx0YXBpLnNldE9wdGlvbihcInJlYWRcIiwgcmVhZCk7XG5cdFx0YXBpLnNldE9wdGlvbihcIndyaXRlXCIsIHdyaXRlKTtcblxuXHRcdHJldHVybiBhcGk7XG5cdH1cbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGluaXRcbiAqIEBwYXJhbSBrZXlcbiAqIEBwYXJhbSBjYWxsYmFja1xuICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmc+fVxuICovXG5mdW5jdGlvbiBmZXRjaERhdGEoaW5pdCwga2V5LCBjYWxsYmFjaykge1xuXHRsZXQgcmVzcG9uc2U7XG5cblx0cmV0dXJuIGZldGNoKHRoaXMuZ2V0T3B0aW9uKGAke2tleX0udXJsYCksIGluaXQpXG5cdFx0LnRoZW4oKHJlc3ApID0+IHtcblx0XHRcdHJlc3BvbnNlID0gcmVzcDtcblxuXHRcdFx0Y29uc3QgYWNjZXB0ZWRTdGF0dXMgPSB0aGlzLmdldE9wdGlvbihgJHtrZXl9LmFjY2VwdGVkU3RhdHVzYCwgWzIwMF0pLm1hcChcblx0XHRcdFx0TnVtYmVyLFxuXHRcdFx0KTtcblxuXHRcdFx0aWYgKGFjY2VwdGVkU3RhdHVzLmluZGV4T2YocmVzcC5zdGF0dXMpID09PSAtMSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRGF0YUZldGNoRXJyb3IoXG5cdFx0XHRcdFx0YHRoZSByZXNwb25zZSBkb2VzIG5vdCBjb250YWluIGFuIGFjY2VwdGVkIHN0YXR1cyAoYWN0dWFsOiAke3Jlc3Auc3RhdHVzfSkuYCxcblx0XHRcdFx0XHRyZXNwb25zZSxcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc3AudGV4dCgpO1xuXHRcdH0pXG5cdFx0LnRoZW4oKGJvZHkpID0+IHtcblx0XHRcdGxldCBvYmo7XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdG9iaiA9IEpTT04ucGFyc2UoYm9keSk7XG5cblx0XHRcdFx0cmVzcG9uc2VbcmF3RGF0YVN5bWJvbF0gPSBvYmo7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGlmIChib2R5Lmxlbmd0aCA+IDEwMCkge1xuXHRcdFx0XHRcdGJvZHkgPSBgJHtib2R5LnN1YnN0cmluZygwLCA5Nyl9Li4uYDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRocm93IG5ldyBEYXRhRmV0Y2hFcnJvcihcblx0XHRcdFx0XHRgdGhlIHJlc3BvbnNlIGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBqc29uIChhY3R1YWw6ICR7Ym9keX0pLmAsXG5cdFx0XHRcdFx0cmVzcG9uc2UsXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuXHRcdFx0XHRjYWxsYmFjayhvYmopO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlO1xuXHRcdH0pXG5cdFx0LmNhdGNoKChlKSA9PiB7XG5cdFx0XHR0aHJvdyBlO1xuXHRcdH0pO1xufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sLCBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb25zdGFudHMubWpzXCI7XG5cbmV4cG9ydCB7IFdyaXRlRXJyb3IgfTtcblxuLyoqXG4gKiBFcnJvciBtZXNzYWdlIGZvciBBUEkgcmVxdWVzdHMgd2l0aCBleHRlbnNpb24gb2YgcmVxdWVzdCBhbmQgdmFsaWRhdGlvbi5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjI0LjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSB0aGUgZXJyb3IgaXMgdGhyb3duIGJ5IHRoZSByZXN0IGFwaSBpbiBjYXNlIG9mIGVycm9yXG4gKi9cbmNsYXNzIFdyaXRlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuXHQgKiBAcGFyYW0ge1Jlc3BvbnNlfSByZXNwb25zZVxuXHQgKiBAcGFyYW0ge09iamVjdH0gdmFsaWRhdGlvblxuXHQgKi9cblx0Y29uc3RydWN0b3IobWVzc2FnZSwgcmVzcG9uc2UsIHZhbGlkYXRpb24pIHtcblx0XHRzdXBlcihtZXNzYWdlKTtcblx0XHR0aGlzW2ludGVybmFsU3ltYm9sXSA9IHtcblx0XHRcdHJlc3BvbnNlOiByZXNwb25zZSxcblx0XHRcdHZhbGlkYXRpb246IHZhbGlkYXRpb24sXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcblx0XHRcdFwiQHNjaHVrYWkvbW9uc3Rlci9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3Jlc3RhcGkvd3JpdGUtZXJyb3JcIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Jlc3BvbnNlfVxuXHQgKi9cblx0Z2V0UmVzcG9uc2UoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wicmVzcG9uc2VcIl07XG5cdH1cblxuXHQvKipcblx0ICogQHJldHVybiB7T2JqZWN0fVxuXHQgKi9cblx0Z2V0VmFsaWRhdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJ2YWxpZGF0aW9uXCJdO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaW50ZXJuYWxTeW1ib2wsIGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnN0YW50cy5tanNcIjtcblxuZXhwb3J0IHsgRGF0YUZldGNoRXJyb3IgfTtcblxuLyoqXG4gKiBFcnJvciBtZXNzYWdlIGZvciBBUEkgcmVxdWVzdHNcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAzLjQzLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSB0aGUgZXJyb3IgaXMgdGhyb3duIGJ5IHRoZSByZXN0IGFwaSBpbiBjYXNlIG9mIGVycm9yXG4gKi9cbmNsYXNzIERhdGFGZXRjaEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2Vcblx0ICogQHBhcmFtIHtSZXNwb25zZX0gcmVzcG9uc2Vcblx0ICovXG5cdGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHJlc3BvbnNlKSB7XG5cdFx0c3VwZXIobWVzc2FnZSk7XG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSB7XG5cdFx0XHRyZXNwb25zZTogcmVzcG9uc2UsXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFxuXHRcdFx0XCJAc2NodWthaS9tb25zdGVyL2RhdGEvZGF0YXNvdXJjZS9zZXJ2ZXIvcmVzdGFwaS9kYXRhZmV0Y2hlcnJvckBAaW5zdGFuY2VcIixcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm4ge1Jlc3BvbnNlfVxuXHQgKi9cblx0Z2V0UmVzcG9uc2UoKSB7XG5cdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxTeW1ib2xdW1wicmVzcG9uc2VcIl07XG5cdH1cbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7UmVzdEFQSX0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL3NvdXJjZS9kYXRhL2RhdGFzb3VyY2Uvc2VydmVyL3Jlc3RhcGkubWpzXCI7XG5pbXBvcnQge3ZhbGlkYXRlT2JqZWN0fSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuXG5kZXNjcmliZSgnUmVzdEFQSScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBmZXRjaFJlZmVyZW5jZTtcbiAgICBsZXQgcmV0dXJuU3RhdHVzO1xuXG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgZ2xvYmFsVGhpc1snZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgcmV0dXJuU3RhdHVzID0gMjAwO1xuICAgICAgICBmZXRjaFJlZmVyZW5jZSA9IGdsb2JhbFRoaXNbJ2ZldGNoJ107XG4gICAgICAgIGdsb2JhbFRoaXNbJ2ZldGNoJ10gPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOiBcInRlc3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHJldHVyblN0YXR1c1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICB9O1xuXG4gICAgfSlcblxuICAgIGl0KCdzaG91bGQgaW5zdGFuY2Ugb2YgUmVzdEFQSSAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgUmVzdEFQSSgnaHR0cHM6Ly9tb25zdGVyanMub3JnL2Fzc2V0cy93b3JsZC5qc29uJykpLnRvLmJlLmluc3RhbmNlb2YoUmVzdEFQSSlcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdydycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgncmVhZCBzaG91bGQgcmV0dXJuIG9iamVjdCcsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdCBkcyA9IG5ldyBSZXN0QVBJKHt1cmw6ICdodHRwczovL21vbnN0ZXJqcy5vcmcvYXNzZXRzL3dvcmxkLmpzb24nfSlcbiAgICAgICAgICAgIGRzLnJlYWQoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlT2JqZWN0KGRhdGEpO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4gZG9uZShlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCd3cml0ZSBzaG91bGQgJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IFJlc3RBUEkoe1xuICAgICAgICAgICAgICAgICAgICByZWFkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICdodHRwczovL21vbnN0ZXJqcy5vcmcvYXNzZXRzL3dvcmxkLmpzb24nXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICdodHRwczovL21vbnN0ZXJqcy5vcmcvYXNzZXRzL3dvcmxkLmpzb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0ZWRTdGF0dXM6IFs5OV1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGRzLndyaXRlKCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKFwic2hvdWxkIG5vdCBiZSBoZXJlXCIpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKCkpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ3J3IHdpdGggZXJyb3JzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdyZWFkIHNob3VsZCB0aHJvdyBleGNlcHRpb24nLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuU3RhdHVzID0gNDAwOyAvLyBmZXRjaCByZXNwb25zZSB3aXRoIDQwMFxuXG4gICAgICAgICAgICBjb25zdCBkcyA9IG5ldyBSZXN0QVBJKHt1cmw6ICdodHRwczovL21vbnN0ZXJqcy5vcmcvYXNzZXRzL3dvcmxkLmpzb24nfSlcbiAgICAgICAgICAgIGRzLnJlYWQoKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoXCJzaG91bGQgbm90IHJ1bi5cIik7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoKSk7IC8vIHNob3VsZCB0aHJvdyBleGNlcHRpb24gYmVjYXVzZSByZXR1cm5TdGF0dXM9NDAwXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCd3cml0ZSBzaG91bGQgJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIHJldHVyblN0YXR1cyA9IDQwMDsgLy8gZmV0Y2ggcmVzcG9uc2Ugd2l0aCA0MDBcbiAgICAgICAgICAgIGNvbnN0IGRzID0gbmV3IFJlc3RBUEkoe3VybDogJ2h0dHBzOi8vbW9uc3RlcmpzLm9yZy9hc3NldHMvd29ybGQuanNvbid9LCB7dXJsOiAnaHR0cHM6Ly9tb25zdGVyanMub3JnL2Fzc2V0cy93b3JsZC5qc29uJ30pXG4gICAgICAgICAgICBkcy53cml0ZSgpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGVPYmplY3QoZGF0YSk7XG4gICAgICAgICAgICAgICAgZG9uZShcImVycm9yXCIpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZSA9PiBkb25lKCkpOyAvLyBzaG91bGQgdGhyb3cgZXhjZXB0aW9uIGJlY2F1c2UgcmV0dXJuU3RhdHVzPTQwMFxuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuXG59KVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtEYXRhc291cmNlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvZGF0YXNvdXJjZS5tanNcIjtcblxuXG5kZXNjcmliZSgnRGF0YXNvdXJjZScsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgaXQoJ3Nob3VsZCBpbnN0YW5jZSBvZiBEYXRhc291cmNlICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBEYXRhc291cmNlKCkpLnRvLmJlLmluc3RhbmNlb2YoRGF0YXNvdXJjZSlcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdPcHRpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2V0T3B0aW9uIHNob3VsZCBjaGFuZ2UgdmFsdWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhc291cmNlID0gbmV3IERhdGFzb3VyY2UoKTtcbiAgICAgICAgICAgIGV4cGVjdChkYXRhc291cmNlLmdldE9wdGlvbignZGVmYXVsdCcpKS50by5iZS51bmRlZmluZWRcbiAgICAgICAgICAgIGRhdGFzb3VyY2Uuc2V0T3B0aW9uKCdkZWZhdWx0JywgdHJ1ZSlcbiAgICAgICAgICAgIGV4cGVjdChkYXRhc291cmNlLmdldE9wdGlvbignZGVmYXVsdCcpKS50by5iZS50cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzZXRPcHRpb25zIHNob3VsZCBzZXQgYWxsIHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFzb3VyY2UgPSBuZXcgRGF0YXNvdXJjZSgpO1xuICAgICAgICAgICAgZXhwZWN0KGRhdGFzb3VyY2UuZ2V0T3B0aW9uKCdkZWZhdWx0JykpLnRvLmJlLnVuZGVmaW5lZFxuICAgICAgICAgICAgZGF0YXNvdXJjZS5zZXRPcHRpb25zKHtkZWZhdWx0OiB0cnVlfSlcbiAgICAgICAgICAgIGV4cGVjdChkYXRhc291cmNlLmdldE9wdGlvbignZGVmYXVsdCcpKS50by5iZS50cnVlXG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdydycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgZGF0YXNvdXJjZSA9IG5ldyBEYXRhc291cmNlKCk7XG4gICAgICAgIGl0KCdyZWFkIHNob3VsZCB0aHJvdyBleGVwdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBkYXRhc291cmNlLnJlYWQoKSkudG8udGhyb3coRXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCd3cml0ZSBzaG91bGQgdGhyb3cgZXhlcHRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZGF0YXNvdXJjZS5yZWFkKCkpLnRvLnRocm93KEVycm9yKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pXG4gICAgXG4gICAgZGVzY3JpYmUoJ2dldC9zZXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGRhdGFzb3VyY2UgPSBuZXcgRGF0YXNvdXJjZSgpO1xuICAgICAgICBpdCgnZ2V0IHNob3VsZCByZXR1cm4gdW5kZWZpbmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KCBkYXRhc291cmNlLmdldCgpKS50by5iZS5lcWwoe30pO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCd3cml0ZSBzaG91bGQgdGhyb3cgZXhlcHRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoIGRhdGFzb3VyY2UuZ2V0KCkpLnRvLmJlLmVxbCh7fSk7XG4gICAgICAgICAgICBleHBlY3QoIGRhdGFzb3VyY2Uuc2V0KHthOidteXZhbHVlJ30pKS50by5iZS5pbnN0YW5jZW9mKERhdGFzb3VyY2UpO1xuICAgICAgICAgICAgZXhwZWN0KCBkYXRhc291cmNlLmdldCgpKS50by5iZS5lcWwoe2E6J215dmFsdWUnfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG5cbn0pIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtidWlsZE1hcH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kYXRhL2J1aWxkbWFwLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdidWlsZE1hcCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGxldCBjb252ZXJ0TWFwUmVzdWx0ID0gZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgICAgIHIgPSBPYmplY3QuZnJvbUVudHJpZXMocik7XG4gICAgICAgICAgICBpZiAociBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICAgICAgciA9IHIubWFwKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0TWFwUmVzdWx0KGUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaywgb10gb2YgT2JqZWN0LmVudHJpZXMocikpIHtcbiAgICAgICAgICAgICAgICAgICAgcltrXSA9IGNvbnZlcnRNYXBSZXN1bHQobyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgZGVzY3JpYmUoJ2J1aWxkIE1hcCB3aXRoIGNhbGxiYWNrJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnZGVmaW5pdGlvbiBzaG91bGQgcmV0dXJuIG1hcCB3aXRoIHN1YiBhbmQgcGFyZW50IGtleXMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgXCJkYXRhXCI6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIkNhc3NhbmRyYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJlbnJpY2htZW50XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50czogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDEsIGxhYmVsOiBcIlhYU1wiLCBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMiwgbGFiZWw6IFwiWFNcIiwgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDMsIGxhYmVsOiBcIlNcIiwgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDQsIGxhYmVsOiBcIkxcIiwgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJZZXNzZXkhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVucmljaG1lbnRcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMSwgbGFiZWw6IFwiWFhTXCIsIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJ30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAyLCBsYWJlbDogXCJYU1wiLCBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMywgbGFiZWw6IFwiU1wiLCBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogNCwgbGFiZWw6IFwiTFwiLCBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQyd9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQyd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBjYWxsYmFjayA9IGZ1bmN0aW9uIChzdWJqZWN0KSB7XG4gICAgICAgICAgICAgICAgbGV0IG0gPSBuZXcgTWFwO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbaSwgYl0gb2YgT2JqZWN0LmVudHJpZXMoc3ViamVjdC5kYXRhKSkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXkxID0gaTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtqLCBjXSBvZiBPYmplY3QuZW50cmllcyhiLmVucmljaG1lbnQudmFyaWFudHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5MiA9IGo7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIGRdIG9mIE9iamVjdC5lbnRyaWVzKGMucHJpY2UpKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5MyA9IGs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLm5hbWUgPSBiLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5sYWJlbCA9IGMubGFiZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5pZCA9IFtrZXkxLCBrZXkyLCBrZXkzXS5qb2luKCcuJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLnNldChkLmlkLCBkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgbWFwID0gYnVpbGRNYXAob2JqLCBjYWxsYmFjaywgJyR7bmFtZX0gJHtsYWJlbH0nLCAnJHtpZH0nKVxuICAgICAgICAgICAgbGV0IGkgPSBjb252ZXJ0TWFwUmVzdWx0KG1hcCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShpKSkudG8uYmUuZXF1YWwoJ3tcIjAuMC4wXCI6XCJDYXNzYW5kcmEgWFhTXCIsXCIwLjAuMVwiOlwiQ2Fzc2FuZHJhIFhYU1wiLFwiMC4xLjBcIjpcIkNhc3NhbmRyYSBYU1wiLFwiMC4xLjFcIjpcIkNhc3NhbmRyYSBYU1wiLFwiMC4yLjBcIjpcIkNhc3NhbmRyYSBTXCIsXCIwLjIuMVwiOlwiQ2Fzc2FuZHJhIFNcIixcIjAuMy4wXCI6XCJDYXNzYW5kcmEgTFwiLFwiMC4zLjFcIjpcIkNhc3NhbmRyYSBMXCIsXCIxLjAuMFwiOlwiWWVzc2V5ISBYWFNcIixcIjEuMC4xXCI6XCJZZXNzZXkhIFhYU1wiLFwiMS4xLjBcIjpcIlllc3NleSEgWFNcIixcIjEuMS4xXCI6XCJZZXNzZXkhIFhTXCIsXCIxLjIuMFwiOlwiWWVzc2V5ISBTXCIsXCIxLjIuMVwiOlwiWWVzc2V5ISBTXCIsXCIxLjMuMFwiOlwiWWVzc2V5ISBMXCIsXCIxLjMuMVwiOlwiWWVzc2V5ISBMXCJ9Jyk7XG5cbiAgICAgICAgfSlcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2J1aWxkIHN1Ym1hcCB3aXRoIConLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdkZWZpbml0aW9uIHNob3VsZCByZXR1cm4ge1wiMTBcIjpcIkNhc3NhbmRyYSAxMFwiLFwiMjBcIjpcIlllc3NleSEgMjBcIn0nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgXCJkYXRhXCI6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIkNhc3NhbmRyYVwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJZZXNzZXkhXCIsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgbWFwID0gYnVpbGRNYXAob2JqLCAnZGF0YS4qJywgJyR7bmFtZX0gJHtpZH0nLCAnJHtpZH0nKVxuICAgICAgICAgICAgbGV0IGkgPSBjb252ZXJ0TWFwUmVzdWx0KG1hcCk7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoaSkpLnRvLmJlLmVxdWFsKCd7XCIxMFwiOlwiQ2Fzc2FuZHJhIDEwXCIsXCIyMFwiOlwiWWVzc2V5ISAyMFwifScpO1xuXG4gICAgICAgIH0pXG4gICAgfSlcblxuXG4gICAgZGVzY3JpYmUoJ2J1aWxkIHN1Ym1hcCB3aXRoICoqJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnZGVmaW5pdGlvbiBzaG91bGQgcmV0dXJuIE1hcCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHtcbiAgICAgICAgICAgICAgICBcImRhdGFcIjogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiQ2Fzc2FuZHJhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImVucmljaG1lbnRcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnRzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMSwgbGFiZWw6IFwiWFhTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQycsIGlkOiAxfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcxMi4xMiBcdTIwQUMnLCBpZDogMn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAyLCBsYWJlbDogXCJYU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnLCBpZDogM30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMjIuMTIgXHUyMEFDJywgaWQ6IDR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogMywgbGFiZWw6IFwiU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICczMi4xMiBcdTIwQUMnLCBpZDogNX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJywgaWQ6IDZ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrdTogNCwgbGFiZWw6IFwiTFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0Mi4xMiBcdTIwQUMnLCBpZDogN30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJywgaWQ6IDh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIlllc3NleSFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZW5yaWNobWVudFwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudHM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAxLCBsYWJlbDogXCJYWFNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMTIuMTIgXHUyMEFDJywgaWQ6IDl9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzEyLjEyIFx1MjBBQycsIGlkOiAxMH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAyLCBsYWJlbDogXCJYU1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2U6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICcyMi4xMiBcdTIwQUMnLCBpZDogMTF9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzIyLjEyIFx1MjBBQycsIGlkOiAxMn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2t1OiAzLCBsYWJlbDogXCJTXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzMyLjEyIFx1MjBBQycsIGlkOiAxM30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnMzIuMTIgXHUyMEFDJywgaWQ6IDE0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza3U6IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJMXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZTogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt2azogJzQyLjEyIFx1MjBBQycsIGlkOiAxNX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3ZrOiAnNDIuMTIgXHUyMEFDJywgaWQ6IDE2fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dms6ICc0NC4xMiBcdTIwQUMnLCBpZDogMTd9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBtYXAgPSBidWlsZE1hcChvYmosICdkYXRhLiouZW5yaWNobWVudC52YXJpYW50cy4qLnByaWNlLionLCAnJHt2a30gJHteLmxhYmVsfSAke14uXi5uYW1lfScsICcke14uXi5za3V9JylcbiAgICAgICAgICAgIGxldCBpID0gY29udmVydE1hcFJlc3VsdChtYXApO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGkpKS50by5iZS5lcXVhbCgne1wiZGF0YS4wLmVucmljaG1lbnQudmFyaWFudHMuMC5wcmljZS4wXCI6XCIxMi4xMiBcdTIwQUMgWFhTIENhc3NhbmRyYVwiLFwiZGF0YS4wLmVucmljaG1lbnQudmFyaWFudHMuMC5wcmljZS4xXCI6XCIxMi4xMiBcdTIwQUMgWFhTIENhc3NhbmRyYVwiLFwiZGF0YS4wLmVucmljaG1lbnQudmFyaWFudHMuMS5wcmljZS4wXCI6XCIyMi4xMiBcdTIwQUMgWFMgQ2Fzc2FuZHJhXCIsXCJkYXRhLjAuZW5yaWNobWVudC52YXJpYW50cy4xLnByaWNlLjFcIjpcIjIyLjEyIFx1MjBBQyBYUyBDYXNzYW5kcmFcIixcImRhdGEuMC5lbnJpY2htZW50LnZhcmlhbnRzLjIucHJpY2UuMFwiOlwiMzIuMTIgXHUyMEFDIFMgQ2Fzc2FuZHJhXCIsXCJkYXRhLjAuZW5yaWNobWVudC52YXJpYW50cy4yLnByaWNlLjFcIjpcIjMyLjEyIFx1MjBBQyBTIENhc3NhbmRyYVwiLFwiZGF0YS4wLmVucmljaG1lbnQudmFyaWFudHMuMy5wcmljZS4wXCI6XCI0Mi4xMiBcdTIwQUMgTCBDYXNzYW5kcmFcIixcImRhdGEuMC5lbnJpY2htZW50LnZhcmlhbnRzLjMucHJpY2UuMVwiOlwiNDIuMTIgXHUyMEFDIEwgQ2Fzc2FuZHJhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4wLnByaWNlLjBcIjpcIjEyLjEyIFx1MjBBQyBYWFMgWWVzc2V5IVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMC5wcmljZS4xXCI6XCIxMi4xMiBcdTIwQUMgWFhTIFllc3NleSFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjEucHJpY2UuMFwiOlwiMjIuMTIgXHUyMEFDIFhTIFllc3NleSFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjEucHJpY2UuMVwiOlwiMjIuMTIgXHUyMEFDIFhTIFllc3NleSFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjIucHJpY2UuMFwiOlwiMzIuMTIgXHUyMEFDIFMgWWVzc2V5IVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMi5wcmljZS4xXCI6XCIzMi4xMiBcdTIwQUMgUyBZZXNzZXkhXCIsXCJkYXRhLjEuZW5yaWNobWVudC52YXJpYW50cy4zLnByaWNlLjBcIjpcIjQyLjEyIFx1MjBBQyBMIFllc3NleSFcIixcImRhdGEuMS5lbnJpY2htZW50LnZhcmlhbnRzLjMucHJpY2UuMVwiOlwiNDIuMTIgXHUyMEFDIEwgWWVzc2V5IVwiLFwiZGF0YS4xLmVucmljaG1lbnQudmFyaWFudHMuMy5wcmljZS4yXCI6XCI0NC4xMiBcdTIwQUMgTCBZZXNzZXkhXCJ9Jyk7XG5cbiAgICAgICAgfSlcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2V4YW1wbGVjb2RlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgZXhlY3V0ZSBleGFtcGxlIGNvZGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAgICAgXCJkYXRhXCI6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIkNhc3NhbmRyYVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhZGRyZXNzXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInN0cmVldFwiOiBcIjQ5My00MTA1IFZ1bHB1dGF0ZSBTdHJlZXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNpdHlcIjogXCJTYXVtdXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInppcFwiOiBcIjUyNjI4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJpZFwiOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcIkhvbGx5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImFkZHJlc3NcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic3RyZWV0XCI6IFwiMTc2MiBFZ2V0IFJkLlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiY2l0eVwiOiBcIlNjaHdhbGJhY2hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInppcFwiOiBcIjk1MjM0MFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaWRcIjogMzAsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJHdXlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiYWRkcmVzc1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJzdHJlZXRcIjogXCI5NTctMzg4IFNvbGxpY2l0dWRpbiBBdmVudWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImNpdHlcIjogXCJQYW5jaGlcdTAwRTBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInppcFwiOiBcIjQyMDcyOVwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBsZXQgbWFwO1xuICAgICAgICAgICAgbWFwID0gYnVpbGRNYXAob2JqLCAnZGF0YS4qJywgJyR7bmFtZX0gKCR7YWRkcmVzcy56aXB9ICR7YWRkcmVzcy5jaXR5fSknLCAnaWQnKVxuICAgICAgICAgICAgZXhwZWN0KG1hcCkudG8uYmUuaW5zdGFuY2VPZihNYXApO1xuXG4gICAgICAgICAgICBtYXAgPSBidWlsZE1hcChvYmosICdkYXRhLionLCAnJHtuYW1lfSAoJHthZGRyZXNzLnppcH0gJHthZGRyZXNzLmNpdHl9KScpXG4gICAgICAgICAgICBleHBlY3QobWFwKS50by5iZS5pbnN0YW5jZU9mKE1hcCk7XG5cbiAgICAgICAgICAgIG1hcCA9IGJ1aWxkTWFwKG9iaiwgJ2RhdGEuKicsICcke25hbWV9ICgke2FkZHJlc3MuemlwfSAke2FkZHJlc3MuY2l0eX0pJywgJ2lkJywgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHZhbHVlWydpZCddID49IDIwKSA/IHRydWUgOiBmYWxzZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGV4cGVjdChtYXApLnRvLmJlLmluc3RhbmNlT2YoTWFwKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2J1aWxkbWFwKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IG9iajEgPSB7XG4gICAgICAgICAgICBkYXRhc2V0OiB7XG4gICAgICAgICAgICAgICAgXCIxMDA4MlwiOiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCAxXCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSAxXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiMTAwODRcIjoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgMlwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgMlwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIE1hcCBJbnN0YW5jZS4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoYnVpbGRNYXAoe30sICcnKSkudG8uYmUuaW5zdGFuY2VPZihNYXApO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtvYmoxLCAnZGF0YXNldC4qJywgJ2FkZHJlc3MnLCAne1wiZGF0YXNldC4xMDA4MlwiOlwiSGVyZSAxXCIsXCJkYXRhc2V0LjEwMDg0XCI6XCJIZXJlIDJcIn0nXSxcbiAgICAgICAgICAgIFtvYmoxLCAneCcsIHVuZGVmaW5lZCwgJ3t9J10sXG4gICAgICAgICAgICBbb2JqMSwgJ2RhdGFzZXQuKicsICduYW1lJywgJ3tcImRhdGFzZXQuMTAwODJcIjpcIlRlc3QgMVwiLFwiZGF0YXNldC4xMDA4NFwiOlwiVGVzdCAyXCJ9J10sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZCA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnYnVpbGRNYXAoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJywnICsgSlNPTi5zdHJpbmdpZnkoYikgKyAnLCcgKyBKU09OLnN0cmluZ2lmeShjKSArICcpIHNob3VsZCByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGQpICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBidWlsZE1hcChhLCBiLCBjKTtcbiAgICAgICAgICAgICAgICBsZXQgbSA9IEpTT04uc3RyaW5naWZ5KGNvbnZlcnRNYXBSZXN1bHQodCkpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChtKS50by5iZS5lcXVhbChkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xufSk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1RyYW5zZm9ybWVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvdHJhbnNmb3JtZXIubWpzXCI7XG5pbXBvcnQge2dldExvY2FsZU9mRG9jdW1lbnR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2xvY2FsZS5tanNcIjtcbmltcG9ydCB7RW1iZWR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdUcmFuc2Zvcm1lcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG4gICAgICAgIHByb21pc2VzLnB1c2goaW5pdEpTRE9NKCkpO1xuICAgICAgICBpZiAoIWdsb2JhbFRoaXNbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbihtID0+IHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzWydjcnlwdG8nXSA9IG5ldyBtLkNyeXB0bygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgIH1cblxuICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdUcmFuc2Zvcm1lci5ydW4oKSBsb2NhbGl6ZSBjb21tYW5kcycsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgICAgIGNvbnN0IGlzTm9kZSA9IHR5cGVvZiBnbG9iYWwgPT09ICdvYmplY3QnICYmICdbb2JqZWN0IGdsb2JhbF0nID09PSBnbG9iYWwudG9TdHJpbmcuY2FsbChnbG9iYWwpO1xuXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWydkYXRldGltZWZvcm1hdCcsIFwiMjAyMy0wMi0wNCAwODowMjowMVwiLCBcIkZlYiA0LCAyMDIzLCAwODowMjowMVwiLCBcIjQgRmViIDIwMjMsIDA4OjAyOjAxXCJdLFxuICAgICAgICAgICAgWydkYXRldGltZWZvcm1hdDpsb25nOnNob3J0JywgXCIyMDIzLTAyLTA0IDA4OjAyOjAxXCIsIFwiRmVicnVhcnkgNCwgMjAyMyBhdCAwODowMlwiLCBcIjQgRmVicnVhcnkgMjAyMyBhdCAwODowMlwiXSxcbiAgICAgICAgICAgIFsnZGF0ZXRpbWVmb3JtYXQ6c2hvcnQ6c2hvcnQnLCBcIjIwMjMtMDItMDQgMDg6MDI6MDFcIiwgXCIyLzQvMjMsIDA4OjAyXCIsIFwiMDQvMDIvMjAyMywgMDg6MDJcIl0sXG4gICAgICAgICAgICBbJ2N1cnJlbmN5JywgXCJFVVIwXCIsIFwiXHUyMEFDMC4wMFwiLCBcIlx1MjBBQzAuMDBcIl0sXG4vLyAgICAgICAgICAgIFsnY3VycmVuY3k6MToyJywgXCJFVVIxNC4yNVwiLCBcIlx1MjBBQzE0LjNcIiwgXCJcdTIwQUMxNC4yXCJdLFxuICAgICAgICAgICAgWydjdXJyZW5jeScsIFwiRVVSMTQuMjVcIiwgXCJcdTIwQUMxNC4yNVwiLCBcIlx1MjBBQzE0LjI1XCJdLFxuICAgICAgICAgICAgWydkYXRldGltZScsIFwiMjAyMy0wMi0xNCAxNDoxMjoxMFwiLCBcIjIvMTQvMjAyMywgMTQ6MTI6MTBcIixcIjE0LzAyLzIwMjMsIDE0OjEyOjEwXCJdLFxuICAgICAgICAgICAgWydkYXRldGltZScsIFwiMjAyMy0wMi0xNCAwODowMjowMVwiLCBcIjIvMTQvMjAyMywgMDg6MDI6MDFcIixcIjE0LzAyLzIwMjMsIDA4OjAyOjAxXCJdLFxuICAgICAgICAgICAgWydkYXRlJywgXCIyMDIzLTAyLTE0XCIsIFwiMDIvMTQvMjAyM1wiLFwiMTQvMDIvMjAyM1wiXSxcblxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAvLyBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy8xMjRcblxuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKSAvLyBjb21tYW5kXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKSAvLyB2YWx1ZVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KCkgLy8gZXhwZWN0ZWQgcmVzdWx0IG5vZGUgICAgXG4gICAgICAgICAgICBsZXQgZCA9IGRhdGEuc2hpZnQoKSAvLyBleHBlY3RlZCByZXN1bHQgYnJvd3NlciAgICBcblxuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBpc05vZGUgPyBjIDogZFxuXG4gICAgICAgICAgICBpdCgnVHJhbnNmb3JtZXIucnVuKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcpLnJ1bignICsgSlNPTi5zdHJpbmdpZnkoYikgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBKU09OLnN0cmluZ2lmeShleHBlY3RlZCksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IG5ldyBUcmFuc2Zvcm1lcihhKTtcbiAgICAgICAgICAgICAgICBjb25zdCByID0gdC5ydW4oYik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGV4cGVjdGVkKS50by5iZS5lcWwociwgXCJUcmFuc2Zvcm1lci5ydW4oXCIgKyBKU09OLnN0cmluZ2lmeShhKSArIFwiKS5ydW4oXCIgKyBKU09OLnN0cmluZ2lmeShiKSArIFwiKSBzaG91bGQgcmV0dXJuIFwiICsgSlNPTi5zdHJpbmdpZnkoYykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdUcmFuc2Zvcm1lci5ydW4oKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ2VxdWFsczphJywgXCJhXCIsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6YScsIFwiYlwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczozJywgMywgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczozJywgNiwgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6b24nLCB0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOnRydWUnLCB0cnVlLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOm9uJywgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOnRydWUnLCBmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6b2ZmJywgZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6ZmFsc2UnLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpvZmYnLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczpmYWxzZScsIHRydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOjMnLCAzLCB0cnVlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOjMnLCA2LCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2VxdWFsczp1bmRlZmluZWQnLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6dW5kZWZpbmVkJywgMywgZmFsc2VdLFxuICAgICAgICAgICAgWydlcXVhbHM6bnVsbCcsIG51bGwsIHRydWVdLFxuICAgICAgICAgICAgWydlcXVhbHM6bnVsbCcsIDMsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZXF1YWxzOjMnLCA2LCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywge30sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaGFzLWVudHJpZXMnLCB7YTogNH0sIHRydWVdLFxuICAgICAgICAgICAgWydoYXMtZW50cmllcycsIFtdLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywgXCJcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWydoYXMtZW50cmllcycsIFsxLCAyLCAzXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2hhcy1lbnRyaWVzJywgWzFdLCB0cnVlXSxcbiAgICAgICAgICAgIFsnaGFzLWVudHJpZXMnLCBbXCIxXCJdLCB0cnVlXSxcbiAgICAgICAgICAgIFsnaGFzLWVudHJpZXMnLCBbdHJ1ZV0sIHRydWVdLFxuICAgICAgICAgICAgWydjb250YWluczp4JywgXCJhc2Qgd3hkIHNkZlwiLCB0cnVlXSxcbiAgICAgICAgICAgIFsnY29udGFpbnM6eCcsIFwiYXNkIHdkIHNkZlwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2NvbnRhaW5zOmInLCBbXCJhXCIsIFwiYlwiLCBcImNcIl0sIHRydWVdLFxuICAgICAgICAgICAgWydjb250YWluczp4JywgW1wiYVwiLCBcImJcIiwgXCJjXCJdLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzdW5kZWZpbmVkJywgXCJhXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXN1bmRlZmluZWQnLCBudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzdW5kZWZpbmVkJywgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNudWxsJywgXCJhXCIsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXNudWxsJywgbnVsbCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzc2V0JywgbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc3NldCcsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgWydpc3NldCcsIFwiXCIsIHRydWVdLFxuICAgICAgICAgICAgWydpc251bWJlcicsIFwiYVwiLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzbnVtYmVyJywgNCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzbnVtYmVyJywgNC41LCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNpbnRlZ2VyJywgNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzaW50ZWdlcicsIDQsIHRydWVdLFxuICAgICAgICAgICAgWydpc2Zsb2F0JywgNS42LCB0cnVlXSxcbiAgICAgICAgICAgIFsnaXNmbG9hdCcsIDUsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnaXNvYmplY3QnLCA0LCBmYWxzZV0sXG4gICAgICAgICAgICBbJ2lzb2JqZWN0Jywge30sIHRydWVdLFxuICAgICAgICAgICAgWydpc2FycmF5JywgW3t9XSwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2lzYXJyYXknLCBcImFcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWydub3QnLCB0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ25vdCcsIGZhbHNlLCB0cnVlXSxcbiAgICAgICAgICAgIFsnbWFwOmE9NDpiPTU6Yz02JywgXCJhXCIsIFwiNFwiXSxcbiAgICAgICAgICAgIFsneWVhcicsIFwiMjAyMy0wMi0xNFwiLCAyMDIzXSxcbiAgICAgICAgICAgIFsnbW9udGgnLCBcIjIwMjMtMDItMTRcIiwgMl0sXG4gICAgICAgICAgICBbJ2RheScsIFwiMjAyMy0wMi0xNFwiLCAxNF0sXG4gICAgICAgICAgICBbJ3dlZWtkYXknLCBcIjIwMjMtMDItMTRcIiwgMl0sXG4gICAgICAgICAgICBbJ21pbnV0ZXMnLCBcIjIwMjMtMDItMTQgMDY6MTI6MjFcIiwgMTJdLFxuICAgICAgICAgICAgWydzZWNvbmRzJywgXCIyMDIzLTAyLTE0IDA2OjEyOjIxXCIsIDIxXSxcbiAgICAgICAgICAgIFsnaG91cnMnLCBcIjIwMjMtMDItMTQgMDY6MTI6MjFcIiwgNl0sXG4gICAgICAgICAgICBbJ3RpbWUnLCBcIjIwMjMtMDItMTQgMDY6MTI6MjFcIiwgXCIwNjoxMjoyMVwiXSxcbiAgICAgICAgICAgIFsndGltZXN0YW1wJywgXCIyMDIzLTAyLTE0XCIsIDE2NzYzMzI4MDAwMDBdLFxuICAgICAgICAgICAgWydjb25jYXQ6YS5iLmM6dGVzdDphLmIuZCcsIHthOiB7Yjoge2M6IDQsIGQ6IDZ9fX0sIFwiNHRlc3Q2XCJdLFxuICAgICAgICAgICAgWydjb25jYXQ6YS5iLmM6XFxcXCBcXFxcIDphLmIuZCcsIHthOiB7Yjoge2M6IDQsIGQ6IDZ9fX0sIFwiNCAgNlwiXSxcbiAgICAgICAgICAgIFsnY29uY2F0OmEuYi5jOiw6YS5iLmQnLCB7YToge2I6IHtjOiA0LCBkOiA2fX19LCBcIjQsNlwiXSxcbiAgICAgICAgICAgIFsnY29uY2F0OmEuYi5jOiw6XFxcXCA6YS5iLmQnLCB7YToge2I6IHtjOiA0LCBkOiA2fX19LCBcIjQsIDZcIl0sXG4gICAgICAgICAgICBbJz8/OmEnLCBudWxsLCAnYSddLFxuICAgICAgICAgICAgWyc/PzphJywgdW5kZWZpbmVkLCAnYSddLFxuICAgICAgICAgICAgWyc/PzphJywgJ3RydWUnLCAndHJ1ZSddLFxuICAgICAgICAgICAgWyc/PzphJywgZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnIGlmOmE6ICcsIGZhbHNlLCB1bmRlZmluZWRdLCAvLyB3aXRob3V0IFxcXFxcbiAgICAgICAgICAgIFsnIGlmOmE6XFxcXCAnLCBmYWxzZSwgXCIgXCJdLFxuICAgICAgICAgICAgWycgaWY6YTpcXFxcICcsIHRydWUsIFwiYVwiXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDp1bmRlZmluZWQ6Ym9vbCcsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgWydkZWZhdWx0OnllcycsIG51bGwsICd5ZXMnXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDp5ZXMnLCB1bmRlZmluZWQsICd5ZXMnXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDoxOmJvb2wnLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgWydkZWZhdWx0Om9uOmJvb2wnLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgWydkZWZhdWx0OnRydWU6Ym9vbCcsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6eWVzOmJvb2wnLCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgWydkZWZhdWx0OmZhbHNlOmJvb2wnLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFsnZGVmYXVsdDoxOmludCcsIHVuZGVmaW5lZCwgMV0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6MTpzdHJpbmcnLCB1bmRlZmluZWQsICcxJ10sXG4gICAgICAgICAgICBbJ2ZpcnN0LWtleScsIHthOiAxLCBjOiAzLCBiOiAyfSwgMV0sXG4gICAgICAgICAgICBbJ2xhc3Qta2V5Jywge2E6IDEsIGM6IDMsIGI6IDJ9LCAzXSxcbiAgICAgICAgICAgIFsnbnRoLWxhc3Qta2V5OjAnLCB7YTogMSwgYzogMywgYjogMn0sIDNdLFxuICAgICAgICAgICAgWydudGgtbGFzdC1rZXk6MScsIHthOiAxLCBjOiAzLCBiOiAyfSwgMl0sXG4gICAgICAgICAgICBbJ250aC1sYXN0LWtleToyJywge2E6IDEsIGM6IDMsIGI6IDJ9LCAxXSxcbiAgICAgICAgICAgIFsnbnRoLWtleToyJywge2E6IDEsIGI6IDIsIGM6IDN9LCAzXSxcbiAgICAgICAgICAgIFsnbnRoLWtleTowJywge2M6IDMsIGE6IDEsIGI6IDJ9LCAxXSxcbiAgICAgICAgICAgIFsnbnRoLWtleToyJywge2E6IDEsIGM6IDMsIGI6IDJ9LCAzXSxcbiAgICAgICAgICAgIFsncHJlZml4OkhlbGxvXFxcXCAnLCAndGVzdCcsIFwiSGVsbG8gdGVzdFwiXSxcbiAgICAgICAgICAgIFsndG9qc29uJywge2E6IDR9LCBcIntcXFwiYVxcXCI6NH1cIl0sXG4gICAgICAgICAgICBbJ3ByZWZpeDphXFxcXFxcXFw6ICcsICd0ZXN0JywgXCJhXFxcXHRlc3RcIl0sXG4gICAgICAgICAgICBbJ3ByZWZpeDphXFxcXCAnLCAndGVzdCcsIFwiYSB0ZXN0XCJdLFxuICAgICAgICAgICAgWydzdGF0aWM6YWJjOmE6Yjp4JywgXCJ0ZXN0XCIsIFwiYWJjOmE6Yjp4XCJdLFxuICAgICAgICAgICAgWyd0b2xvd2VyY2FzZScsIFwiQTpiOkNzZTRcIiwgXCJhOmI6Y3NlNFwiXSxcbiAgICAgICAgICAgIFsndG91cHBlcicsIFwiQTpiOkNzZTRcIiwgXCJBOkI6Q1NFNFwiXSxcbiAgICAgICAgICAgIFsndG9zdHJpbmcnLCA1LCBcIjVcIl0sXG4gICAgICAgICAgICBbJ3Rvc3RyaW5nJywgWzEsIDIsIDMsIHt9XSwgXCIxLDIsMyxbb2JqZWN0IE9iamVjdF1cIl0sXG4gICAgICAgICAgICBbJ3RvaW50ZWdlcicsIFwiNVwiLCA1XSxcbiAgICAgICAgICAgIFsndHJpbScsIFwiIDUgXCIsIFwiNVwiXSxcbiAgICAgICAgICAgIFsndHJpbScsIFwiIGFcIiwgXCJhXCJdLFxuICAgICAgICAgICAgWyd0cmltJywgXCIgXCIsIFwiXCJdLFxuICAgICAgICAgICAgWydyYXd1cmxlbmNvZGUnLCBcIlx1MDBGQ1x1MDBGNlx1MDBFNFwiLCBcIiVDMyVCQyVDMyVCNiVDMyVBNFwiXSxcbiAgICAgICAgICAgIFsnY2FsbDp0ZXN0Y2FsbGJhY2s6NDo1OjYnLCBcInRlc3RcIiwgXCJ0ZXN0NDU2XCJdLFxuICAgICAgICAgICAgWydwbGFpbicsICd0PGJyPmVzdCcsIFwidGVzdFwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgdHJ1ZSwgXCJhXCJdLFxuICAgICAgICAgICAgWydpZjphOmInLCAnb24nLCBcImFcIl0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsICd0cnVlJywgXCJhXCJdLFxuICAgICAgICAgICAgWydpZjphOmInLCAnZmFsc2UnLCBcImJcIl0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsIDksIFwiYVwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgJycsIFwiYlwiXSxcbiAgICAgICAgICAgIFsnaWY6YTpiJywgdW5kZWZpbmVkLCBcImJcIl0sXG4gICAgICAgICAgICBbJ2lmOmE6YicsIGZhbHNlLCBcImJcIl0sXG4gICAgICAgICAgICBbJ3VjZmlyc3QnLCAnY2FyJywgXCJDYXJcIl0sXG4gICAgICAgICAgICBbJ3VjZmlyc3QnLCAnY0FyJywgXCJDQXJcIl0sXG4gICAgICAgICAgICBbJ2RlZmF1bHQ6dGVzdCcsICdhJywgXCJhXCJdLFxuICAgICAgICAgICAgWydkZWZhdWx0OnRlc3QnLCB1bmRlZmluZWQsIFwidGVzdFwiXSxcbiAgICAgICAgICAgIFsnZnJvbWpzb24nLCAne30nLCB7fV0sXG4gICAgICAgICAgICBbJ2Zyb21qc29uJywgJ3tcImFcIjoxfScsIHthOiAxfV0sXG4gICAgICAgICAgICBbJ3Vjd29yZHMnLCAnY0FyIHJ1bnMnLCBcIkNBciBSdW5zXCJdLFxuICAgICAgICAgICAgWyd0b2ludGVnZXInLCAnNicsIDZdLFxuICAgICAgICAgICAgWydsZW5ndGgnLCAndGVzdCcsIDRdLFxuICAgICAgICAgICAgWyd0by1iYXNlNjQnLCAnSGVsbG8gV29ybGQhJywgXCJTR1ZzYkc4Z1YyOXliR1FoXCJdLFxuICAgICAgICAgICAgWydmcm9tLWJhc2U2NCcsICdTR1ZzYkc4Z1YyOXliR1FoJywgXCJIZWxsbyBXb3JsZCFcIl0sXG4gICAgICAgICAgICBbJ3RvLWJhc2U2NCcsICd0ZXN0JywgXCJkR1Z6ZEE9PVwiXSxcbiAgICAgICAgICAgIFsnZnJvbS1iYXNlNjQnLCBcImRHVnpkQT09XCIsICd0ZXN0J10sXG4gICAgICAgICAgICBbJ3ByZWZpeDphJywgJ3Rlc3QnLCBcImF0ZXN0XCJdLFxuICAgICAgICAgICAgWydzdWZmaXg6YScsICd0ZXN0JywgXCJ0ZXN0YVwiXSxcbiAgICAgICAgICAgIFsnaW5kZXg6YScsIHthOiA0fSwgNF0sXG4gICAgICAgICAgICBbJ2luZGV4OjInLCBbMiwgNCwgN10sIDddLFxuICAgICAgICAgICAgWydpbmRleDp4OnRlc3QnLCBbMiwgNCwgN10sICd0ZXN0J10sXG4gICAgICAgICAgICBbJ3BhdGg6YS5iLmMnLCB7YToge2I6IHtjOiA0fX19LCA0XSxcbiAgICAgICAgICAgIFsncGF0aDphLmIuZCcsIHthOiB7Yjoge2M6IDR9fX0sIHVuZGVmaW5lZF0sXG4gICAgICAgICAgICBbJ2luZGV4OmEnLCBuZXcgTWFwKCkuc2V0KCdhJywgNSksIDVdLFxuICAgICAgICAgICAgWydzdWJzdHJpbmc6Mjo0JywgJ2FiY2RlZmdoaWprbG1ub3AnLCAnY2RlZiddLFxuICAgICAgICAgICAgWydub3AnLCAnYWJjZGVmZ2hpamtsbW5vcCcsICdhYmNkZWZnaGlqa2xtbm9wJ10sXG4gICAgICAgICAgICBbJ3NldC10b2dnbGU6YycsICdhIGIgYycsICdhIGInXSxcbiAgICAgICAgICAgIFsnc2V0LXRvZ2dsZTpjJywgJ2EgYicsICdhIGIgYyddLFxuICAgICAgICAgICAgWydzZXQtc2V0OmMnLCAnYSBiJywgJ2EgYiBjJ10sXG4gICAgICAgICAgICBbJ3NldC1zZXQ6YycsICdhIGIgYycsICdhIGIgYyddLFxuICAgICAgICAgICAgWydzZXQtcmVtb3ZlOmMnLCAnYSBiIGMnLCAnYSBiJ10sXG4gICAgICAgICAgICBbJ3NldC10b2dnbGU6YzosJywgJ2EsYixjJywgJ2EsYiddLFxuICAgICAgICAgICAgWydzZXQtdG9nZ2xlOmM6LCcsICdhLGInLCAnYSxiLGMnXSxcbiAgICAgICAgICAgIFsnc2V0LXNldDpjOiwnLCAnYSxiJywgJ2EsYixjJ10sXG4gICAgICAgICAgICBbJ3NldC1zZXQ6YzosJywgJ2EsYixjJywgJ2EsYixjJ10sXG4gICAgICAgICAgICBbJ3NldC1yZW1vdmU6YzosJywgJ2EsYixjJywgJ2EsYiddLFxuICAgICAgICAgICAgWydzZXQtdG9nZ2xlOmMsZDosJywgJ2EsYixjJywgJ2EsYixkJ10sXG4gICAgICAgICAgICBbJ3NldC10b2dnbGU6YyxkOiwnLCAnYSxiLGMsZCcsICdhLGInXSxcbiAgICAgICAgICAgIFsnc2V0LXRvZ2dsZTpjLGQ6LCcsICdhLGInLCAnYSxiLGMsZCddLFxuICAgICAgICAgICAgWydzZXQtc2V0OmMsZDosJywgJ2EsYicsICdhLGIsYyxkJ10sXG4gICAgICAgICAgICBbJ3NldC1zZXQ6YyxkOiwnLCAnYSxiLGMnLCAnYSxiLGMsZCddLFxuICAgICAgICAgICAgWydzZXQtcmVtb3ZlOmM6LCcsICdhLGIsYycsICdhLGInXSxcblxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdUcmFuc2Zvcm1lci5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykucnVuKCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcpIHNob3VsZCByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGMpLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHQgPSBuZXcgVHJhbnNmb3JtZXIoYSk7XG5cbiAgICAgICAgICAgICAgICB0LnNldENhbGxiYWNrKCd0ZXN0Y2FsbGJhY2snLCBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSArIGIgKyBjICsgZDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSB0LnJ1bihiKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoYykudG8uYmUuZXFsKHIsIFwiVHJhbnNmb3JtZXIucnVuKFwiICsgSlNPTi5zdHJpbmdpZnkoYSkgKyBcIikucnVuKFwiICsgSlNPTi5zdHJpbmdpZnkoYikgKyBcIikgc2hvdWxkIHJldHVybiBcIiArIEpTT04uc3RyaW5naWZ5KGMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1RyYW5zZm9ybWVyLnJ1bigpIHRocm93cyBFcnJvcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3RvbG93ZXJjYXNlJywgW11dLFxuICAgICAgICAgICAgWyd0b2xvd2VyY2FzZScsIHt9XSxcbiAgICAgICAgICAgIFsndG9sb3dlcmNhc2UnLCA0LjVdLFxuICAgICAgICAgICAgWyd0b3VwcGVyJywgdHJ1ZV0sXG4gICAgICAgICAgICBbJ3RvdXBwZXInLCA1XSxcbiAgICAgICAgICAgIFsndG9pbnRlZ2VyJywgXCJhXCJdLFxuICAgICAgICAgICAgWyd0cmltJywgNV0sXG4gICAgICAgICAgICBbJ3RyaW0nLCB0cnVlXSxcbiAgICAgICAgICAgIFsndHJpbScsIHt9XSxcbiAgICAgICAgICAgIFsndHJpbScsIFtdXSxcbiAgICAgICAgICAgIFsncmF3dXJsZW5jb2RlJywgW11dLFxuICAgICAgICAgICAgWydpZjphOmInLCB7fV0sXG4gICAgICAgICAgICBbJ3Vjd29yZHMnLCB7fV0sXG4gICAgICAgICAgICBbJ3Vjd29yZHMnLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ3Vjd29yZHMnLCA0XSxcbiAgICAgICAgICAgIFsncGF0aDphLmIuYycsIFwiXCIsIDRdLFxuICAgICAgICAgICAgWyd0b2ludGVnZXInLCB7fV0sXG4gICAgICAgICAgICBbJ2Jhc2U2NCcsIHt9XSxcbiAgICAgICAgICAgIFsnZnJvbWpzb24nLCAnJ10sXG4gICAgICAgICAgICBbJ3ByZWZpeCcsIHt9XSxcbiAgICAgICAgICAgIFsnc3VmZml4Jywge31dLFxuICAgICAgICAgICAgWydpbmRleCcsIFwidGVzdFwiXSxcbiAgICAgICAgICAgIFsneHh4eHh4JywgXCJ0ZXN0XCJdLCAvLyB1bnN1cHBvcnRlZCBjb21tYW5kXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ1RyYW5zZm9ybWVyLnJ1bignICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKS5ydW4oJyArIEpTT04uc3RyaW5naWZ5KGIpICsgJykgc2hvdWxkIHRocm93IEVycm9yICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IG5ldyBUcmFuc2Zvcm1lcihhKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gdC5ydW4oYikpLnRvLnRocm93KEVycm9yKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbmV3IFRyYW5zZm9ybWVyKCkucnVuKFwidW5pcWlkXCIpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBTdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgdCA9IG5ldyBUcmFuc2Zvcm1lcigndW5pcWlkJyk7XG4gICAgICAgICAgICBleHBlY3QodC5ydW4oXCJcIikpLnRvLmJlLmEoJ3N0cmluZycpO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ25ldyBUcmFuc2Zvcm1lcigpLnJ1bihcImRlZmF1bHQ6ZXlKaUlqb3hmUT09Om9iamVjdFwiKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gT2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHQgPSBuZXcgVHJhbnNmb3JtZXIoJ2RlZmF1bHQ6ZXlKaUlqb3hmUT09Om9iamVjdCcpO1xuICAgICAgICAgICAgZXhwZWN0KHQucnVuKHVuZGVmaW5lZCkpLnRvLmVxbCh7YjogMX0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnbmV3IFRyYW5zZm9ybWVyKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgVHJhbnNmb3JtZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFRyYW5zZm9ybWVyKFwiXCIpKS50by5pbnN0YW5jZU9mKFRyYW5zZm9ybWVyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBUcmFuc2Zvcm1lcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVHJhbnNmb3JtZXIoXCJzdWZmaXg6YWJjXCIpKS50by5pbnN0YW5jZU9mKFRyYW5zZm9ybWVyKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2ZhbHNlIGFzIGFyZ3VtZW50IHNob3VsZCB0aHJvdyBUeXBlRXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIG5ldyBUcmFuc2Zvcm1lcihmYWxzZSlcbiAgICAgICAgICAgIH0pLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdvYmplY3QgYXMgYXJndW1lbnQgc2hvdWxkIHRocm93IFR5cGVFcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgbmV3IFRyYW5zZm9ybWVyKHt9KVxuICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdpMThuJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBodG1sMSA9IGBcbjxkaXYgaWQ9XCJtb2NrLXRyYW5zbGF0aW9uc1wiPjwvZGl2PlxuPHNjcmlwdCB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiIGRhdGEtbW9uc3Rlci1yb2xlPVwidHJhbnNsYXRpb25zXCI+XG4gICAge1xuICAgICAgICBcInRlc3QxXCI6IFwieHl6XCIsXG4gICAgICAgIFwidGVzdDNcIjoge1xuICAgICAgICAgICAgXCJvdGhlclwiOiBcInh5elwiXG4gICAgICAgIH1cbiAgICB9XG48L3NjcmlwdD4gIFxuYDtcblxuICAgICAgICBiZWZvcmVFYWNoKChkb25lKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuICAgICAgICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9jay10cmFuc2xhdGlvbnMnKTtcbiAgICAgICAgICAgIEVtYmVkLmFzc2lnblRyYW5zbGF0aW9uc1RvRWxlbWVudChlbGVtKS50aGVuKChvKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWydpMThuOnRlc3QxJywgXCJcIiwgXCJ4eXpcIl0sXG4gICAgICAgICAgICBbJ2kxOG46JywgXCJ0ZXN0MVwiLCBcInh5elwiXSwgLy8ga2V5IGJ5IHZhbHVlXG4gICAgICAgICAgICBbJ2kxOG46OicsIFwidGVzdDFcIiwgXCJ4eXpcIl0sIC8vIGtleSBieSB2YWx1ZSBubyBkZWZhdWx0XG4gICAgICAgICAgICBbJ2kxOG46OmVlZScsIFwidGVzdDJcIiwgXCJlZWVcIl0sIC8vIGtleSBieSB2YWx1ZSB3aXRoIGRlZmF1bHRcbiAgICAgICAgICAgIFsnaTE4bjo6ZGRkJywgXCJ0ZXN0MlwiLCBcImRkZFwiXSwgLy8ga2V5IGJ5IHZhbHVlIGFuZCBkZWZhdWx0XG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ3Nob3VsZCB0cmFuc2Zvcm0oJyArIGEgKyAnKS5ydW4oJyArIGIgKyAnKSByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGMpLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdCA9IG5ldyBUcmFuc2Zvcm1lcihhKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodC5ydW4oYikpLnRvLmJlLmVxbChjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH0pXG5cblxufSk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2RpZmZ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS9kaWZmLm1qc1wiO1xuaW1wb3J0IHtRdWV1ZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9xdWV1ZS5tanNcIjtcblxuZGVzY3JpYmUoJ0RpZmYnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgndGVzdCB0byBkYXRhc2V0cycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICB2YXIgb2JqMSwgb2JqMjtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG9iajEgPSBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEsXG4gICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcInRlc3RcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDIsXG4gICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcInRlc3QyXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG5cbiAgICAgICAgICAgIG9iajIgPSBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImlkXCI6IDEsXG4gICAgICAgICAgICAgICAgICAgIFwibmFtZVwiOiBcInRlc3RcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBcImlkXCI6IFwiM1wiLFxuICAgICAgICAgICAgICAgICAgICBcIm5hbWVcIjogXCJ0ZXN0MlwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGRhdGFzZXRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IGQgPSBkaWZmKG9iajEsIG9iajIpO1xuICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGQpKS5pcy5lcXVhbCgnW3tcIm9wZXJhdG9yXCI6XCJ1cGRhdGVcIixcInBhdGhcIjpbXCIxXCIsXCJpZFwiXSxcImZpcnN0XCI6e1widmFsdWVcIjoyLFwidHlwZVwiOlwibnVtYmVyXCJ9LFwic2Vjb25kXCI6e1widmFsdWVcIjpcIjNcIixcInR5cGVcIjpcInN0cmluZ1wifX1dJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgXG4gICAgfSlcbiAgICBcbiAgICBkZXNjcmliZSgnRGlmZiBzcGVjaWFsIGNhc2VzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIHZhciBvYmoxLCBvYmoyO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgb2JqMSA9IHtcbiAgICAgICAgICAgICAgICBcImNvdW50XCI6IDEsXG4gICAgICAgICAgICAgICAgXCJyZWFzb25cIjogbnVsbCxcbiAgICAgICAgICAgICAgICBcImluZm9cIjogXCJ0ZXN0XCIsXG4gICAgICAgICAgICAgICAgXCJleGNoYW5nZVwiOiBbXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG9iajIgPSB7XG4gICAgICAgICAgICAgICAgXCJjb3VudFwiOiAyLFxuICAgICAgICAgICAgICAgIFwicmVhc29uXCI6IG51bGwsXG4gICAgICAgICAgICAgICAgXCJpbmZvXCI6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBcImV4Y2hhbmdlXCI6IFtdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdEaWZmIHZhbHVlIHdpdGggbnVsbCAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IGRpZmYob2JqMSwgb2JqMik7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoZCkpLmlzLmVxdWFsKCdbe1wib3BlcmF0b3JcIjpcInVwZGF0ZVwiLFwicGF0aFwiOltcImNvdW50XCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOjEsXCJ0eXBlXCI6XCJudW1iZXJcIn0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOjIsXCJ0eXBlXCI6XCJudW1iZXJcIn19LHtcIm9wZXJhdG9yXCI6XCJkZWxldGVcIixcInBhdGhcIjpbXCJpbmZvXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOlwidGVzdFwiLFwidHlwZVwiOlwic3RyaW5nXCJ9fV0nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ0RpZmYgaWRlbnRpY2FsIHZhbHVlIHdpdGggbnVsbCAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgZCA9IGRpZmYob2JqMSwgb2JqMSk7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoZCkpLmlzLmVxdWFsKCdbXScpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuICAgIGNvbnN0IGRhdGUxID0gbmV3IERhdGU7XG5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kZS9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlL3BhcnNlXG4gICAgY29uc3QgZGF0ZTIgPSBEYXRlLnBhcnNlKCcwMSBKYW4gMTk3MCAwMDowMDowMCBHTVQnKTtcbiAgICBjb25zdCBkYXRlMyA9IERhdGUucGFyc2UoJzA0IERlYyAxOTk1IDAwOjEyOjAwIEdNVCcpOyAvLyBOdW1iZXJcbiAgICBjb25zdCBkYXRlNCA9IERhdGUucGFyc2UoJzA0IERlYyAxOTk1IDAwOjEyOjAxIEdNVCcpOyAvLyBOdW1iZXJcblxuICAgIGNvbnN0IGRhdGU1ID0gbmV3IERhdGUoRGF0ZS5wYXJzZSgnMDQgRGVjIDE5OTUgMDA6MTI6MDEgR01UJykpOyAvLyBEYXRlXG4gICAgY29uc3QgZGF0ZTYgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKCcwNCBEZWMgMTk5NSAwMDoxMjowMiBHTVQnKSk7IC8vIERhdGVcblxuICAgIFtcblxuICAgICAgICBbXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBuZXcgUXVldWUoKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcImFkZFwiLFwicGF0aFwiOltcImFcIl0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOntcImRhdGFcIjpbXX0sXCJ0eXBlXCI6XCJvYmplY3RcIixcImluc3RhbmNlXCI6XCJRdWV1ZVwifX1dJ1xuICAgICAgICBdLFxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IDFcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGM6IHtcbiAgICAgICAgICAgICAgICAgICAgZDogMlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBlOiAzXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBmOiB7XG4gICAgICAgICAgICAgICAgICAgIGQ6IDJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwiZGVsZXRlXCIsXCJwYXRoXCI6W1wiYVwiLFwiYlwiXSxcImZpcnN0XCI6e1widmFsdWVcIjoxLFwidHlwZVwiOlwibnVtYmVyXCJ9fSx7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wiYVwiLFwiZVwiXSxcInNlY29uZFwiOntcInZhbHVlXCI6MyxcInR5cGVcIjpcIm51bWJlclwifX0se1wib3BlcmF0b3JcIjpcImRlbGV0ZVwiLFwicGF0aFwiOltcImNcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6e1wiZFwiOjJ9LFwidHlwZVwiOlwib2JqZWN0XCIsXCJpbnN0YW5jZVwiOlwiT2JqZWN0XCJ9fSx7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wiZlwiXSxcInNlY29uZFwiOntcInZhbHVlXCI6e1wiZFwiOjJ9LFwidHlwZVwiOlwib2JqZWN0XCIsXCJpbnN0YW5jZVwiOlwiT2JqZWN0XCJ9fV0nXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IGRhdGUxLFxuICAgICAgICAgICAgICAgIGM6IGRhdGU0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IGRhdGUyLFxuICAgICAgICAgICAgICAgIGI6IGRhdGUzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwidXBkYXRlXCIsXCJwYXRoXCI6W1wiYVwiXSxcImZpcnN0XCI6e1widmFsdWVcIjpcIicgKyBkYXRlMS50b0lTT1N0cmluZygpICsgJ1wiLFwidHlwZVwiOlwib2JqZWN0XCIsXCJpbnN0YW5jZVwiOlwiRGF0ZVwifSxcInNlY29uZFwiOntcInZhbHVlXCI6MCxcInR5cGVcIjpcIm51bWJlclwifX0se1wib3BlcmF0b3JcIjpcImRlbGV0ZVwiLFwicGF0aFwiOltcImNcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6ODE4MDM1OTIxMDAwLFwidHlwZVwiOlwibnVtYmVyXCJ9fSx7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wiYlwiXSxcInNlY29uZFwiOntcInZhbHVlXCI6ODE4MDM1OTIwMDAwLFwidHlwZVwiOlwibnVtYmVyXCJ9fV0nXG4gICAgICAgIF0sXG5cbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IGRhdGU1XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGI6IGRhdGU2XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwiZGVsZXRlXCIsXCJwYXRoXCI6W1wiYVwiXSxcImZpcnN0XCI6e1widmFsdWVcIjpcIjE5OTUtMTItMDRUMDA6MTI6MDEuMDAwWlwiLFwidHlwZVwiOlwib2JqZWN0XCIsXCJpbnN0YW5jZVwiOlwiRGF0ZVwifX0se1wib3BlcmF0b3JcIjpcImFkZFwiLFwicGF0aFwiOltcImJcIl0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOlwiMTk5NS0xMi0wNFQwMDoxMjowMi4wMDBaXCIsXCJ0eXBlXCI6XCJvYmplY3RcIixcImluc3RhbmNlXCI6XCJEYXRlXCJ9fV0nXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBkYXRlMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbXSdcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAge30sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZGF0ZTNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJhZGRcIixcInBhdGhcIjpbXCJhXCJdLFwic2Vjb25kXCI6e1widmFsdWVcIjo4MTgwMzU5MjAwMDAsXCJ0eXBlXCI6XCJudW1iZXJcIn19XSdcbiAgICAgICAgXSxcblxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZGF0ZTJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZGF0ZTNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJ1cGRhdGVcIixcInBhdGhcIjpbXCJhXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOjAsXCJ0eXBlXCI6XCJudW1iZXJcIn0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOjgxODAzNTkyMDAwMCxcInR5cGVcIjpcIm51bWJlclwifX1dJ1xuICAgICAgICBdLFxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiAxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IDJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnW3tcIm9wZXJhdG9yXCI6XCJ1cGRhdGVcIixcInBhdGhcIjpbXCJhXCJdLFwiZmlyc3RcIjp7XCJ2YWx1ZVwiOjEsXCJ0eXBlXCI6XCJudW1iZXJcIn0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOjIsXCJ0eXBlXCI6XCJudW1iZXJcIn19XSdcbiAgICAgICAgXSxcblxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB4OiAxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwiZGVsZXRlXCIsXCJwYXRoXCI6W1wiYVwiXSxcImZpcnN0XCI6e1widmFsdWVcIjoxLFwidHlwZVwiOlwibnVtYmVyXCJ9fSx7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wieFwiXSxcInNlY29uZFwiOntcInZhbHVlXCI6MSxcInR5cGVcIjpcIm51bWJlclwifX1dJ1xuICAgICAgICBdLFxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiAxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IDIsXG4gICAgICAgICAgICAgICAgeDogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcInVwZGF0ZVwiLFwicGF0aFwiOltcImFcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6MSxcInR5cGVcIjpcIm51bWJlclwifSxcInNlY29uZFwiOntcInZhbHVlXCI6MixcInR5cGVcIjpcIm51bWJlclwifX0se1wib3BlcmF0b3JcIjpcImFkZFwiLFwicGF0aFwiOltcInhcIl0sXCJzZWNvbmRcIjp7XCJ2YWx1ZVwiOjEsXCJ0eXBlXCI6XCJudW1iZXJcIn19XSdcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IG51bGxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICdbe1wib3BlcmF0b3JcIjpcImRlbGV0ZVwiLFwicGF0aFwiOltcImFcIl0sXCJmaXJzdFwiOntcInZhbHVlXCI6bnVsbCxcInR5cGVcIjpcIm9iamVjdFwifX1dJ1xuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogbnVsbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1tdJ1xuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiBudWxsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wiYVwiXSxcInNlY29uZFwiOntcInZhbHVlXCI6bnVsbCxcInR5cGVcIjpcIm9iamVjdFwifX1dJ1xuICAgICAgICBdLCBbXG4gICAgICAgIHt9LFxuICAgICAgICB7YTogdW5kZWZpbmVkfSxcbiAgICAgICAgJ1t7XCJvcGVyYXRvclwiOlwiYWRkXCIsXCJwYXRoXCI6W1wiYVwiXSxcInNlY29uZFwiOntcInR5cGVcIjpcInVuZGVmaW5lZFwifX1dJ1xuICAgIF1cblxuXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgIGl0KCdEaWZmIHNob3VsZCByZXN1bHQgJyArIGMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBkID0gZGlmZihhLCBiKTtcbiAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShkKSkuaXMuZXF1YWwoYyk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxufSkiLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2J1aWxkVHJlZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kYXRhL2J1aWxkdHJlZS5tanNcIjtcbmltcG9ydCB7Tm9kZUxpc3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbm9kZWxpc3QubWpzXCI7XG5cblxuZGVzY3JpYmUoJ2J1aWxkVHJlZScsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgZGVzY3JpYmUoJ2xlZ2FjeSBuYXZpZ2F0aW9uIGV4YW1wbGUgKGlzc3VlICMyMzApJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIGV4YW1wbGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IG9iamVjdHMgPSBKU09OLnBhcnNlKGB7XG4gICAgXCJkYXRhc2V0XCI6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAxMDAwMDEsXG4gICAgICAgICAgICBcInBhcmVudF9pZFwiOiAyMDAwMDEsXG4gICAgICAgICAgICBcInRpdGxlXCI6IFwiZUJheVwiLFxuICAgICAgICAgICAgXCJ1cmxcIjogXCIvXCIsXG4gICAgICAgICAgICBcIndlaWdodFwiOiAxLFxuICAgICAgICAgICAgXCJjc3Nfc3R5bGVzXCI6IFwiXCIsXG4gICAgICAgICAgICBcImNzc19jbGFzc2VzXCI6IFwiXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgXCJpZFwiOiAyMDAwMDEsXG4gICAgICAgICAgICBcInBhcmVudF9pZFwiOiAyMDAwMDEsXG4gICAgICAgICAgICBcInRpdGxlXCI6IFwiYWx2aW5lY29uc29sZVwiLFxuICAgICAgICAgICAgXCJ1cmxcIjogXCJcIixcbiAgICAgICAgICAgIFwid2VpZ2h0XCI6IDEsXG4gICAgICAgICAgICBcImNzc19zdHlsZXNcIjogXCJcIixcbiAgICAgICAgICAgIFwiY3NzX2NsYXNzZXNcIjogXCJcIlxuICAgICAgICB9XG4gICAgXSxcbiAgICBcInN5c1wiOiB7XG4gICAgICAgIFwiY29kZVwiOiAyMDAsXG4gICAgICAgIFwicmVzdWx0XCI6IHt9LFxuICAgICAgICBcImFwaV92ZXJzaW9uXCI6IFwiMVwiXG4gICAgfVxufWApO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGJ1aWxkVHJlZShvYmplY3RzLCAnZGF0YXNldC4qJywgJ2lkJywgJ3BhcmVudF9pZCcpOyAgICBcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGVycm9yKS50by5iZS5pbnN0YW5jZU9mKEVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuXG4gICAgICAgICAgICBcblxuICAgICAgICB9KVxuICAgIH0pICAgIFxuICAgIFxuXG4gICAgZGVzY3JpYmUoJ2V4YW1wbGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gZXhhbXBsZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgY29uc3Qgb2JqZWN0cyA9IHtcbiAgICAgICAgICAgICAgICBkYXRhc2V0OiB7XG4gICAgICAgICAgICAgICAgICAgIFwiMVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCIxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInZlaGljbGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogbnVsbFxuXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiMlwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCIyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcImNhclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjFcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIjNcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiM1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJ0cnVja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjFcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIjRcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb3RvcmN5Y2xlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMVwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiNVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCI1XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNVVlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjJcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIjZcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJzcG9ydHMgY2FyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMlwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gYnVpbGRUcmVlKG9iamVjdHMsICdkYXRhc2V0LionLCAnaWQnLCAncGFyZW50Jyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChub2RlcykudG8uYmUuaW5zdGFuY2VPZihOb2RlTGlzdCk7XG4gICAgICAgICAgICBleHBlY3Qobm9kZXMubGVuZ3RoKS50by5lcXVhbCgxKTtcbiAgICAgICAgICAgIGV4cGVjdChub2Rlcy50b1N0cmluZygpKS50by5iZS5lcXVhbCgne1wiaWRcIjpcIjFcIixcIm5hbWVcIjpcInZlaGljbGVcIixcInBhcmVudFwiOm51bGx9XFxuIFx1MjUxQ3tcImlkXCI6XCIyXCIsXCJuYW1lXCI6XCJjYXJcIixcInBhcmVudFwiOlwiMVwifVxcbiB8IFx1MjUxQ3tcImlkXCI6XCI1XCIsXCJuYW1lXCI6XCJTVVZcIixcInBhcmVudFwiOlwiMlwifVxcbiB8IFx1MjUxNHtcImlkXCI6XCI2XCIsXCJuYW1lXCI6XCJzcG9ydHMgY2FyXCIsXCJwYXJlbnRcIjpcIjJcIn1cXG4gXHUyNTFDe1wiaWRcIjpcIjNcIixcIm5hbWVcIjpcInRydWNrXCIsXCJwYXJlbnRcIjpcIjFcIn1cXG4gXHUyNTE0e1wiaWRcIjpcIjRcIixcIm5hbWVcIjpcIm1vdG9yY3ljbGVcIixcInBhcmVudFwiOlwiMVwifScgKTtcblxuXG4gICAgICAgIH0pXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdidWlsZFRyZWUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgb2JqMSA9IHtcbiAgICAgICAgICAgIGRhdGFzZXQ6IHtcbiAgICAgICAgICAgICAgICBcIjFcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCIxXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCAxXCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSAxXCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogbnVsbFxuXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjJcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCIyXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCAyXCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSAyXCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIxXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiM1wiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjNcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDNcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDNcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjJcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCI0XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNFwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgNFwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgNFwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMlwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjVcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCI1XCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCA1XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSA1XCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIxXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiNlwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjZcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDZcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDZcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBOb2RlIEluc3RhbmNlLicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChidWlsZFRyZWUoe30sICcnKSkudG8uYmUuaW5zdGFuY2VPZihOb2RlTGlzdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtvYmoxLCAnZGF0YXNldC4qJywgJ3tcImlkXCI6XCIxXCIsXCJuYW1lXCI6XCJUZXN0IDFcIixcImFkZHJlc3NcIjpcIkhlcmUgMVwiLFwicGFyZW50XCI6bnVsbH1cXG4gXHUyNTFDe1wiaWRcIjpcIjJcIixcIm5hbWVcIjpcIlRlc3QgMlwiLFwiYWRkcmVzc1wiOlwiSGVyZSAyXCIsXCJwYXJlbnRcIjpcIjFcIn1cXG4gfCBcdTI1MUN7XCJpZFwiOlwiM1wiLFwibmFtZVwiOlwiVGVzdCAzXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDNcIixcInBhcmVudFwiOlwiMlwifVxcbiB8IFx1MjUxNHtcImlkXCI6XCI0XCIsXCJuYW1lXCI6XCJUZXN0IDRcIixcImFkZHJlc3NcIjpcIkhlcmUgNFwiLFwicGFyZW50XCI6XCIyXCJ9XFxuIHwgfCBcdTI1MTR7XCJpZFwiOlwiNlwiLFwibmFtZVwiOlwiVGVzdCA2XCIsXCJhZGRyZXNzXCI6XCJIZXJlIDZcIixcInBhcmVudFwiOlwiNFwifVxcbiBcdTI1MTR7XCJpZFwiOlwiNVwiLFwibmFtZVwiOlwiVGVzdCA1XCIsXCJhZGRyZXNzXCI6XCJIZXJlIDVcIixcInBhcmVudFwiOlwiMVwifSddLFxuICAgICAgICAgICAgW29iajEsICd4JywgJyddLFxuICAgICAgICAgICAgW29iajEsICdkYXRhc2V0LionLCAne1wiaWRcIjpcIjFcIixcIm5hbWVcIjpcIlRlc3QgMVwiLFwiYWRkcmVzc1wiOlwiSGVyZSAxXCIsXCJwYXJlbnRcIjpudWxsfVxcbiBcdTI1MUN7XCJpZFwiOlwiMlwiLFwibmFtZVwiOlwiVGVzdCAyXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDJcIixcInBhcmVudFwiOlwiMVwifVxcbiB8IFx1MjUxQ3tcImlkXCI6XCIzXCIsXCJuYW1lXCI6XCJUZXN0IDNcIixcImFkZHJlc3NcIjpcIkhlcmUgM1wiLFwicGFyZW50XCI6XCIyXCJ9XFxuIHwgXHUyNTE0e1wiaWRcIjpcIjRcIixcIm5hbWVcIjpcIlRlc3QgNFwiLFwiYWRkcmVzc1wiOlwiSGVyZSA0XCIsXCJwYXJlbnRcIjpcIjJcIn1cXG4gfCB8IFx1MjUxNHtcImlkXCI6XCI2XCIsXCJuYW1lXCI6XCJUZXN0IDZcIixcImFkZHJlc3NcIjpcIkhlcmUgNlwiLFwicGFyZW50XCI6XCI0XCJ9XFxuIFx1MjUxNHtcImlkXCI6XCI1XCIsXCJuYW1lXCI6XCJUZXN0IDVcIixcImFkZHJlc3NcIjpcIkhlcmUgNVwiLFwicGFyZW50XCI6XCIxXCJ9J10sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdidWlsZFRyZWUoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJywnICsgSlNPTi5zdHJpbmdpZnkoYikgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBKU09OLnN0cmluZ2lmeShjKSArICcgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCBub2RlbGlzdCA9IGJ1aWxkVHJlZShhLCBiLCAnaWQnLCAncGFyZW50Jyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5vZGVsaXN0LnRvU3RyaW5nKCkpLnRvLmJlLmVxbChjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnYnVpbGRUcmVlKCkgdGVzdCAyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiAyXG4gICAgICAgICAqICAgIDFcbiAgICAgICAgICogICAgM1xuICAgICAgICAgKiA0XG4gICAgICAgICAqICAgIDZcbiAgICAgICAgICogNVxuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgbGV0IG9iajEgPSB7XG4gICAgICAgICAgICBkYXRhc2V0OiB7XG4gICAgICAgICAgICAgICAgXCIxXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiMVwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgMVwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgMVwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMlwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjJcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCIyXCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCAyXCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSAyXCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIwXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiM1wiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjNcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDNcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDNcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjJcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCI0XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiNFwiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgNFwiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgNFwiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMFwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcIjVcIjoge1xuICAgICAgICAgICAgICAgICAgICBpZDogXCI1XCIsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVGVzdCA1XCIsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IFwiSGVyZSA1XCIsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogXCIwXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiNlwiOiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiBcIjZcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJUZXN0IDZcIixcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogXCJIZXJlIDZcIixcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBcIjRcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCI3XCI6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IFwiN1wiLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlRlc3QgN1wiLFxuICAgICAgICAgICAgICAgICAgICBhZGRyZXNzOiBcIkhlcmUgN1wiLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IFwiMVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIE5vZGUgSW5zdGFuY2UuJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KGJ1aWxkVHJlZSh7fSwgJycpKS50by5iZS5pbnN0YW5jZU9mKE5vZGVMaXN0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW29iajEsICdkYXRhc2V0LionLCAne1wiaWRcIjpcIjJcIixcIm5hbWVcIjpcIlRlc3QgMlwiLFwiYWRkcmVzc1wiOlwiSGVyZSAyXCIsXCJwYXJlbnRcIjpcIjBcIn1cXG4gXHUyNTFDe1wiaWRcIjpcIjFcIixcIm5hbWVcIjpcIlRlc3QgMVwiLFwiYWRkcmVzc1wiOlwiSGVyZSAxXCIsXCJwYXJlbnRcIjpcIjJcIn1cXG4gfCBcdTI1MTR7XCJpZFwiOlwiN1wiLFwibmFtZVwiOlwiVGVzdCA3XCIsXCJhZGRyZXNzXCI6XCJIZXJlIDdcIixcInBhcmVudFwiOlwiMVwifVxcbiBcdTI1MTR7XCJpZFwiOlwiM1wiLFwibmFtZVwiOlwiVGVzdCAzXCIsXCJhZGRyZXNzXCI6XCJIZXJlIDNcIixcInBhcmVudFwiOlwiMlwifVxcbntcImlkXCI6XCI0XCIsXCJuYW1lXCI6XCJUZXN0IDRcIixcImFkZHJlc3NcIjpcIkhlcmUgNFwiLFwicGFyZW50XCI6XCIwXCJ9XFxuIFx1MjUxNHtcImlkXCI6XCI2XCIsXCJuYW1lXCI6XCJUZXN0IDZcIixcImFkZHJlc3NcIjpcIkhlcmUgNlwiLFwicGFyZW50XCI6XCI0XCJ9XFxue1wiaWRcIjpcIjVcIixcIm5hbWVcIjpcIlRlc3QgNVwiLFwiYWRkcmVzc1wiOlwiSGVyZSA1XCIsXCJwYXJlbnRcIjpcIjBcIn0nXSxcbiAgICAgICAgICAgIFtvYmoxLCAneCcsICcnXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2J1aWxkVHJlZSgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnLCcgKyBKU09OLnN0cmluZ2lmeShiKSArICcpIHNob3VsZCByZXR1cm4gJyArIEpTT04uc3RyaW5naWZ5KGMpICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5vZGVsaXN0ID0gYnVpbGRUcmVlKGEsIGIsICdpZCcsICdwYXJlbnQnLCB7XG4gICAgICAgICAgICAgICAgICAgIHJvb3RSZWZlcmVuY2VzOiBbJzAnXVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5vZGVsaXN0LnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKGMpO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuICAgIFxuICAgIFxuICAgIFxuXG5cbn0pO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtQYXRoZmluZGVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RhdGEvcGF0aGZpbmRlci5tanNcIjtcblxuZGVzY3JpYmUoJ1BhdGhmaW5kZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBsZXQgY29udmVydE1hcFJlc3VsdCA9IGZ1bmN0aW9uIChyKSB7XG4gICAgICAgIGlmIChyIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICByID0gT2JqZWN0LmZyb21FbnRyaWVzKHIpO1xuICAgICAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgICAgIHIgPSByLm1hcCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydE1hcFJlc3VsdChlKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgciA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIG9dIG9mIE9iamVjdC5lbnRyaWVzKHIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJba10gPSBjb252ZXJ0TWFwUmVzdWx0KG8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIGRlc2NyaWJlKFwidmFsdWUgaXMgbm90IGFuIGludGVnZXIgaXNzdWUgIzI3NFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KFwic2hvdWxkIG5vdCBiZSBmYWlsIHdpdGhcIiwgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCBwZiA9IG5ldyBQYXRoZmluZGVyKHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7fVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGYuc2V0VmlhKFwiZGF0YS5hZ2VcIiwgMTApO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChlKS50by5iZS5udWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleHBlY3QocGYuZ2V0VmlhKFwiZGF0YS5hZ2VcIikpLnRvLmJlLmVxdWFsKDEwKTtcblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJ3dpdGggV2lsZGNhcmQgYW5kIEl0ZXJhdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBwZiwgb2JqO1xuXG4gICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgb2JqID0ge1xuICAgICAgICAgICAgICAgIGE6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogXCIxLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBcIjEtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ6ICchJ1xuXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGI6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiMi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogXCIyLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkOiAnPydcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBmID0gbmV3IFBhdGhmaW5kZXIob2JqKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWydhLiouYi4qJywgJ3tcIjBcIjp7XCIwXCI6e1wiY1wiOlwiMS0xXCJ9LFwiMVwiOntcImNcIjpcIjEtMlwifX0sXCIxXCI6e1wiMFwiOntcImNcIjpcIjItMVwifSxcIjFcIjp7XCJjXCI6XCIyLTJcIn19fSddLFxuICAgICAgICAgICAgWydhLiouYicsICd7XCIwXCI6W3tcImNcIjpcIjEtMVwifSx7XCJjXCI6XCIxLTJcIn1dLFwiMVwiOlt7XCJjXCI6XCIyLTFcIn0se1wiY1wiOlwiMi0yXCJ9XX0nXSxcbiAgICAgICAgICAgIFsnYS4xLmInLCAnW3tcImNcIjpcIjItMVwifSx7XCJjXCI6XCIyLTJcIn1dJ10sXG4gICAgICAgICAgICBbJ2EuMC5iJywgJ1t7XCJjXCI6XCIxLTFcIn0se1wiY1wiOlwiMS0yXCJ9XSddLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICAgICAgaXQoJy5zZXRWaWEoJyArIGEgKyAnKSBzaG91bGQgcmVzdWx0IGluICcgKyBiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgciA9IHBmLmdldFZpYShhKTtcbiAgICAgICAgICAgICAgICBsZXQgaSA9IGNvbnZlcnRNYXBSZXN1bHQocik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KGkpKS5pcy5lcXVhbChiKTtcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnYXBpIHRlc3RzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBwYXRoZmluZGVyLCBvYmplY3Q7XG5cblxuICAgICAgICBjbGFzcyBBIHtcbiAgICAgICAgICAgIGdldCBhKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAxXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgICAgICAgICAgb2JqZWN0ID0ge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIFwidGVzdDFcIiwgZmFsc2UsIHVuZGVmaW5lZCwgcGFyc2VJbnQoXCJhXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgZDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBmOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTogW1widGVzdDJcIl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgajoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICBrOiAobmV3IE1hcCkuc2V0KCdtJywge246IDN9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGw6IChuZXcgU2V0KS5hZGQoe246IDR9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBiOiBuZXcgQVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGF0aGZpbmRlciA9IG5ldyBQYXRoZmluZGVyKG9iamVjdCk7XG5cblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnY3JlYXRlIG5ldyBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbMTJdLFxuICAgICAgICAgICAgICAgIFt1bmRlZmluZWRdLFxuICAgICAgICAgICAgICAgIFtudWxsXSxcbiAgICAgICAgICAgICAgICBbXCJ0ZXN0XCJdXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGxhYmVsID0gdHlwZW9mIGE7XG4gICAgICAgICAgICAgICAgaWYgKGEgPT09IG51bGwpIGxhYmVsID0gJ251bGwnO1xuXG5cbiAgICAgICAgICAgICAgICBpdChsYWJlbCArICcgc2hvdWxkIHRocm93IGVycm9yJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgUGF0aGZpbmRlcihhKVxuICAgICAgICAgICAgICAgICAgICB9KS50by50aHJvdyhFcnJvcilcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCcuc2V0VmlhKHgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBsZXQgcGYsIG9iajtcblxuICAgICAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgb2JqID0ge31cbiAgICAgICAgICAgICAgICBwZiA9IG5ldyBQYXRoZmluZGVyKG9iaik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsnYS5iLjAuMC5jJywgdHJ1ZSwgJ3tcImFcIjp7XCJiXCI6W1t7XCJjXCI6dHJ1ZX1dXX19J10sXG4gICAgICAgICAgICAgICAgWydhLmIuMC5jJywgdHJ1ZSwgJ3tcImFcIjp7XCJiXCI6W3tcImNcIjp0cnVlfV19fSddLFxuICAgICAgICAgICAgICAgIFsnYS5iLjMuYycsIHRydWUsICd7XCJhXCI6e1wiYlwiOltudWxsLG51bGwsbnVsbCx7XCJjXCI6dHJ1ZX1dfX0nXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5jJywgdHJ1ZSwgJ3tcImFcIjp7XCJiXCI6e1wiY1wiOnRydWV9fX0nXVxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgICAgICAgICAgaXQoJy5zZXRWaWEoJyArIGEgKyAnLCAnICsgYiArICcpIHNob3VsZCByZXN1bHQgaW4gJyArIGMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcGYuc2V0VmlhKGEsIGIpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChKU09OLnN0cmluZ2lmeShvYmopKS5pcy5lcXVhbChjKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KVxuXG4gICAgICAgIGRlc2NyaWJlKCcuc2V0VmlhKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCBhO1xuICAgICAgICAgICAgbGV0IGI7XG4gICAgICAgICAgICBsZXQgYztcblxuICAgICAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgYSA9IFwiYS54XCI7XG4gICAgICAgICAgICAgICAgYiA9IFwidHJ1ZVwiO1xuICAgICAgICAgICAgICAgIGMgPSBcImEueS5kXCI7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdCgnLnNldFZpYSgnICsgYSArICcsICcgKyBiICsgJykgc2hvdWxkIHJldHVybiBQYXRoZmluZGVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChwYXRoZmluZGVyLnNldFZpYShhLCBiKSkuaXMuaW5zdGFuY2VPZihQYXRoZmluZGVyKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnLnNldFZpYSgnICsgYSArICcsICcgKyBiICsgJykgc2hvdWxkIGNoYW5nZSBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcGF0aGZpbmRlci5zZXRWaWEoYSwgYik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KG9iamVjdCkpLmlzLmVxdWFsKCd7XCJhXCI6e1wiYlwiOntcImNcIjpbNCxcInRlc3QxXCIsZmFsc2UsbnVsbCxudWxsXSxcImVcIjpmYWxzZSxcImZcIjpbe1wiZ1wiOmZhbHNlLFwiaFwiOjMsXCJpXCI6W1widGVzdDJcIl19XSxcImpcIjp7fSxcImtcIjp7fSxcImxcIjp7fX0sXCJ4XCI6XCJ0cnVlXCJ9LFwiYlwiOnt9fScpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCcuc2V0VmlhKCcgKyBjICsgJywgJyArIGIgKyAnKSBzaG91bGQgY2hhbmdlIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBwYXRoZmluZGVyLnNldFZpYShjLCBiKTtcbiAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkob2JqZWN0KSkuaXMuZXF1YWwoJ3tcImFcIjp7XCJiXCI6e1wiY1wiOls0LFwidGVzdDFcIixmYWxzZSxudWxsLG51bGxdLFwiZVwiOmZhbHNlLFwiZlwiOlt7XCJnXCI6ZmFsc2UsXCJoXCI6MyxcImlcIjpbXCJ0ZXN0MlwiXX1dLFwialwiOnt9LFwia1wiOnt9LFwibFwiOnt9fSxcInlcIjp7XCJkXCI6XCJ0cnVlXCJ9fSxcImJcIjp7fX0nKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgZGVzY3JpYmUoJy5leGlzdHMoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBbJ2EuYi5jLjEnLCB0cnVlXSxcbiAgICAgICAgICAgICAgICBbJ2IuYScsIHRydWVdLFxuICAgICAgICAgICAgICAgIFsnYS5iLngnLCBmYWxzZV0sXG4gICAgICAgICAgICAgICAgWydhLngnLCBmYWxzZV0sXG4gICAgICAgICAgICAgICAgWydhLmIucScsIGZhbHNlXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5jLjAnLCB0cnVlXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5kJywgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgWydhLmIuZi4wLmcnLCB0cnVlXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5mLjAuaS4wJywgdHJ1ZV0sXG4gICAgICAgICAgICAgICAgWydhLmIuZi4wLmkuMicsIGZhbHNlXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5lJywgdHJ1ZV0sXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgICAgICAgICAgaXQoJy5leGlzdHMoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiICsgJyAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChwYXRoZmluZGVyLmV4aXN0cyhhKSkuaXMuZXF1YWwoYik7XG4gICAgICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICB9KTtcblxuICAgICAgICBkZXNjcmliZSgnLmRlbGV0ZVZpYSgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsnYS5iLmUnLCAne1wiYVwiOntcImJcIjp7XCJjXCI6WzQsXCJ0ZXN0MVwiLGZhbHNlLG51bGwsbnVsbF0sXCJmXCI6W3tcImdcIjpmYWxzZSxcImhcIjozLFwiaVwiOltcInRlc3QyXCJdfV0sXCJqXCI6e30sXCJrXCI6e30sXCJsXCI6e319fSxcImJcIjp7fX0nXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5mJywgJ3tcImFcIjp7XCJiXCI6e1wiY1wiOls0LFwidGVzdDFcIixmYWxzZSxudWxsLG51bGxdLFwiZVwiOmZhbHNlLFwialwiOnt9LFwia1wiOnt9LFwibFwiOnt9fX0sXCJiXCI6e319J10sXG4gICAgICAgICAgICAgICAgWydhLmIuaicsICd7XCJhXCI6e1wiYlwiOntcImNcIjpbNCxcInRlc3QxXCIsZmFsc2UsbnVsbCxudWxsXSxcImVcIjpmYWxzZSxcImZcIjpbe1wiZ1wiOmZhbHNlLFwiaFwiOjMsXCJpXCI6W1widGVzdDJcIl19XSxcImtcIjp7fSxcImxcIjp7fX19LFwiYlwiOnt9fSddLFxuXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgICAgIGl0KCcuZGVsZXRlVmlhKCcgKyBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiArICcgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBwYXRoZmluZGVyLmRlbGV0ZVZpYShhKVxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkob2JqZWN0KSkuaXMuZXF1YWwoYik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGVzY3JpYmUoJy5nZXRWaWEoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRlc2NyaWJlKCcuZ2V0VmlhKCknLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgICAgICAgICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIFwidGVzdDFcIiwgZmFsc2UsIHVuZGVmaW5lZCwgcGFyc2VJbnQoXCJhXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGY6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk6IFtcInRlc3QyXCJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGo6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrOiAobmV3IE1hcCkuc2V0KCdtJywge246IDN9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogKG5ldyBTZXQpLmFkZCh7bjogNH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cDoge3E6IDEsIHI6IHRydWV9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwOiB7cTogMiwgcjogdHJ1ZX19LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3A6IHtxOiAzLCByOiB0cnVlfX0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cDoge3E6IDQsIHI6IHRydWV9fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtwOiB7cTogNSwgcjogdHJ1ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ6IHthOiAxfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU6IHthOiAyfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY6IHthOiAzfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IHthOiA0fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHBhdGhmaW5kZXIgPSBuZXcgUGF0aGZpbmRlcihvYmplY3QpO1xuXG5cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgWydhLionLCAnW1tcImJcIix7XCJjXCI6WzQsXCJ0ZXN0MVwiLGZhbHNlLG51bGwsbnVsbF0sXCJlXCI6ZmFsc2UsXCJmXCI6W3tcImdcIjpmYWxzZSxcImhcIjozLFwiaVwiOltcInRlc3QyXCJdfV0sXCJqXCI6e30sXCJrXCI6e30sXCJsXCI6e30sXCJvXCI6W3tcInBcIjp7XCJxXCI6MSxcInJcIjp0cnVlfX0se1wicFwiOntcInFcIjoyLFwiclwiOnRydWV9fSx7XCJwXCI6e1wicVwiOjMsXCJyXCI6dHJ1ZX19LHtcInBcIjp7XCJxXCI6NCxcInJcIjp0cnVlfX0se1wicFwiOntcInFcIjo1LFwiclwiOnRydWV9fV0sXCJzXCI6e1widFwiOntcImFcIjoxfSxcInVcIjp7XCJhXCI6Mn0sXCJ2XCI6e1wiYVwiOjN9LFwieFwiOntcImFcIjo0fX19XV0nXSxcbiAgICAgICAgICAgICAgICAgICAgWydhLmIucy4qLmEnLCAnW1tcInRcIiwxXSxbXCJ1XCIsMl0sW1widlwiLDNdLFtcInhcIiw0XV0nXSxcbiAgICAgICAgICAgICAgICAgICAgWydhLmIucy4qJywgJ1tbXCJ0XCIse1wiYVwiOjF9XSxbXCJ1XCIse1wiYVwiOjJ9XSxbXCJ2XCIse1wiYVwiOjN9XSxbXCJ4XCIse1wiYVwiOjR9XV0nXSxcbiAgICAgICAgICAgICAgICAgICAgWydhLmIuby4qLnAucScsICdbW1wiMFwiLDFdLFtcIjFcIiwyXSxbXCIyXCIsM10sW1wiM1wiLDRdLFtcIjRcIiw1XV0nXSxcbiAgICAgICAgICAgICAgICAgICAgWydhLmIuby4qLnAucicsICdbW1wiMFwiLHRydWVdLFtcIjFcIix0cnVlXSxbXCIyXCIsdHJ1ZV0sW1wiM1wiLHRydWVdLFtcIjRcIix0cnVlXV0nXSxcbiAgICAgICAgICAgICAgICAgICAgWydhLmIuby4qLnAnLCAnW1tcIjBcIix7XCJxXCI6MSxcInJcIjp0cnVlfV0sW1wiMVwiLHtcInFcIjoyLFwiclwiOnRydWV9XSxbXCIyXCIse1wicVwiOjMsXCJyXCI6dHJ1ZX1dLFtcIjNcIix7XCJxXCI6NCxcInJcIjp0cnVlfV0sW1wiNFwiLHtcInFcIjo1LFwiclwiOnRydWV9XV0nXVxuICAgICAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgICAgICAgICAgaXQoJy5nZXRWaWEoJyArIGEgKyAnKSBzaG91bGQgcmVzdWx0ICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgciA9IHBhdGhmaW5kZXIuZ2V0VmlhKGEpXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoQXJyYXkuZnJvbShyKSkpLmlzLmVxdWFsKGIpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBpdCgnLmdldFZpYSgpIHNob3VsZCByZXN1bHQgJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IHAgPSBuZXcgUGF0aGZpbmRlcih7XG4gICAgICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YzogMX0sIHtjOiAyfVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjOiAxLCBkOiBmYWxzZX0sIHtjOiAyfVxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGxldCByID0gcC5nZXRWaWEoXCIqLnguKi5jXCIpXG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBtYXBUb09iaihtYXApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IHt9XG4gICAgICAgICAgICAgICAgICAgIG1hcC5mb3JFYWNoKGZ1bmN0aW9uICh2LCBrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodiBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrXSA9IG1hcFRvT2JqKHYpXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrXSA9IHZcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KG1hcFRvT2JqKHIpKSkuaXMuZXF1YWwoJ3tcImFcIjp7XCIwXCI6MSxcIjFcIjoyfSxcImJcIjp7XCIwXCI6MSxcIjFcIjoyfX0nKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpdCgnLmdldFZpYShhLmIubC4wLm4pIHdpdGggbWFwIHNob3VsZCByZXR1cm4gNCAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHBhdGhmaW5kZXIuZ2V0VmlhKCdhLmIubC4wLm4nKSkuaXMuZXF1YWwoNCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIFsnYS5iLmsubS5uJywgM10sXG4gICAgICAgICAgICAgICAgWydhLmIubC4wLm4nLCA0XSxcbiAgICAgICAgICAgICAgICBbJ2EueCcsIHVuZGVmaW5lZF0sXG4gICAgICAgICAgICAgICAgWydhLmIucScsIHVuZGVmaW5lZF0sXG4gICAgICAgICAgICAgICAgWydhLmIuYy4xJywgXCJ0ZXN0MVwiXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5jLjAnLCA0XSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5kJywgdW5kZWZpbmVkXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5mLjAuZycsIGZhbHNlXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5mLjAuaS4wJywgXCJ0ZXN0MlwiXSxcbiAgICAgICAgICAgICAgICBbJ2EuYi5lJywgZmFsc2VdLFxuICAgICAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICAgICAgICAgIGl0KCcuZ2V0VmlhKCcgKyBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiArICcgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QocGF0aGZpbmRlci5nZXRWaWEoYSkpLmlzLmVxdWFsKGIpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgWydhLmIuZC5lJ10sXG4gICAgICAgICAgICAgICAgWydhLmIuZC54J10sXG4gICAgICAgICAgICAgICAgWydhLmIubC5lLm4nXSxcbiAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgICAgIGl0KCcuZ2V0VmlhKCcgKyBhICsgJykgc2hvdWxkIHRocm93IEVycm9yICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHBhdGhmaW5kZXIuZ2V0VmlhKGEpKS50by50aHJvdyhFcnJvcilcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcbn0pO1xuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1BpcGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS9waXBlLm1qc1wiO1xuaW1wb3J0IHtpbml0SlNET019IGZyb20gXCIuLi8uLi91dGlsL2pzZG9tLm1qc1wiO1xuaW1wb3J0IHtFbWJlZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanNcIjtcblxuXG5kZXNjcmliZSgnUGlwZScsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG4gICAgICAgIGlmICghZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3J1biBkaWZmZXJlbnQgcGlwZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIFtcbiAgICAgICAgICAgIFsncGF0aDpiIHwgaWY6eDpcXFxcICcsIHthOiB0cnVlfSwgJyAnXSwgICAvLyAnXFxcXCAnLmxlbmd0aCBcdTIxQTYgMlxuICAgICAgICAgICAgWydwYXRoOmEgfCBpZjp4OlxcXFwgJywge2E6IHRydWV9LCAneCddLFxuICAgICAgICAgICAgWydub3AnLCAnYWJjZGVmZ2hpamtsbW5vcCcsICdhYmNkZWZnaGlqa2xtbm9wJ10sXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ1BpcGUucnVuKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcpLnJ1bignICsgSlNPTi5zdHJpbmdpZnkoYikgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBKU09OLnN0cmluZ2lmeShjKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gbmV3IFBpcGUoYSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCByID0gdC5ydW4oYik7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHIpLnRvLmJlLmVxbChjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCduZXcgUGlwZSBzaG91bGQgY3JlYXRlIG5ldyBJbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBJbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgUGlwZSgnJykpLnRvLmJlLmluc3RhbmNlT2YoUGlwZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIEluc3RhbmNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBQaXBlKCdpbmRleDphfHRvdXBwZXIgfHByZWZpeDphJykucnVuKHthOiBcInRlc3RcIn0pKS50by5iZS5lcXVhbCgnYVRFU1QnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWydpbmRleDphfHRvdXBwZXIgfHByZWZpeDphJywge2E6IFwidGVzdFwifSwgJ2FURVNUJ10sXG4gICAgICAgICAgICBbJ3BhdGg6YS5iLmMuZCB8IHRvdXBwZXIgfCBwcmVmaXg6SGVsbG9cXFxcICcsIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkOiBcIndvcmxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sICdIZWxsbyBXT1JMRCddLFxuICAgICAgICAgICAgWydwYXRoOmEuYi5jfGluZGV4OmR8dG91cHBlciB8c3VmZml4OngnLCB7YToge2I6IHtjOiB7ZDogXCJ0ZXN0XCJ9fX19LCAnVEVTVHgnXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ25ldyBQaXBlKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcpLnJ1bignICsgSlNPTi5zdHJpbmdpZnkoYikgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBKU09OLnN0cmluZ2lmeShjKSArICcgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gbmV3IFBpcGUoYSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHQucnVuKGIpKS50by5iZS5lcXVhbChjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbmV3IFBpcGUgYW5kIGxvY2FsZScsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgICAgIGxldCBodG1sMSA9IGBcbjxkaXYgaWQ9XCJtb2NrLXRyYW5zbGF0aW9uc1wiPjwvZGl2PlxuPHNjcmlwdCB0eXBlPVwiYXBwbGljYXRpb24vanNvblwiIGRhdGEtbW9uc3Rlci1yb2xlPVwidHJhbnNsYXRpb25zXCI+XG4gICAge1xuICAgICAgICBcIjUxXCI6IFwieHl6XCIsXG4gICAgICAgIFwiNTJcIjogXCJhYmNcIixcbiAgICAgICAgXCI1M1wiOiBcImRlZlwiXG4gICAgfVxuPC9zY3JpcHQ+ICBcbmA7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoZG9uZSkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcbiAgICAgICAgICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2stdHJhbnNsYXRpb25zJyk7XG4gICAgICAgICAgICBFbWJlZC5hc3NpZ25UcmFuc2xhdGlvbnNUb0VsZW1lbnQoZWxlbSkudGhlbigobykgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKGUpXG4gICAgICAgICAgICB9KVxuXG5cbiAgICAgICAgfSlcblxuICAgICAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG1vY2tzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vY2tzJyk7XG4gICAgICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICB9KVxuXG4gICAgICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWydwYXRoOnN0YXR1cyB8IHRvc3RyaW5nIHwgaTE4bicsIHtzdGF0dXM6IDUxfSwgXCJ4eXpcIl1cblxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgcGlwZSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IG9iaiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGV4cGVjdGVkID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgdHJhbnNmb3JtKCcgKyBwaXBlICsgJykucnVuKCcgKyBKU09OLnN0cmluZ2lmeShvYmopICsgJykgcmV0dXJuICcgKyBKU09OLnN0cmluZ2lmeShleHBlY3RlZCksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IG5ldyBQaXBlKHBpcGUpO1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0LnJ1bihvYmopKS50by5iZS5lcXVhbChleHBlY3RlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcblxuXG4gICAgfSlcblxuXG59KTtcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHRlbmR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZGF0YS9leHRlbmQubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5cbmNsYXNzIE1vY2tGb3JFeHRlbmRzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICB9XG59XG5cblxuZGVzY3JpYmUoJ2V4dGVuZCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIFtcbiAgICAgICAgW1xuICAgICAgICAgICAne1widGhla2V5XCI6e319Jyx7fSx7dGhla2V5Om5ldyBNb2NrRm9yRXh0ZW5kc30gXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgICd7XCJhXCI6e1wiYlwiOltdfX0nLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjogW1xuICAgICAgICAgICAgICAgICAgICAgICAgXCIxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIjJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiM1wiXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjogW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICBdLCAgICAgICAgW1xuICAgICAgICAgICAgJ3tcImFcIjp7XCJiXCI6MSxcImRcIjoxfX0nLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjogMVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYToge1xuICAgICAgICAgICAgICAgICAgICBkOiAxXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcblxuICAgICAgICBbXG4gICAgICAgICAgICAne1wiYVwiOntcImJcIjoxLFwiZFwiOntcInhcIjpbXCJjYXJcIl0sXCJmXCI6dHJ1ZSxcImdcIjpbXX19fScsXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGI6IDEsXG4gICAgICAgICAgICAgICAgICAgIGQ6IHt4OiBbXCJjYXJcIl19XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGY6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBnOiBbXVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgXVxuXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGQgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgbGV0IGEgPSBkYXRhXG5cbiAgICAgICAgaXQoJy5leHRlbmQoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykgc2hvdWxkIHJlc3VsdCBpbiAnICsgZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHggPSBleHRlbmQuYXBwbHkodGhpcywgYSk7XG4gICAgICAgICAgICBleHBlY3QoSlNPTi5zdHJpbmdpZnkoeCkpLmlzLmVxdWFsKGQpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxuICAgIFtcblxuXG4gICAgICAgIFtcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjogMSxcbiAgICAgICAgICAgICAgICAgICAgZDogW1wiY2FyXCJdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgIGQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGY6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBnOiBbXVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IHt9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGE6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgIF1cblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YVxuXG4gICAgICAgIGl0KCcuZXh0ZW5kKCcgKyBKU09OLnN0cmluZ2lmeShhKSArICcpIHNob3VsZCB0aHJvdyBFcnJvciAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gZXh0ZW5kLmFwcGx5KHRoaXMsIGEpKS50by50aHJvdyhFcnJvcik7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxufSlcblxuXG5cbmRlc2NyaWJlKCdleHRlbmQgZnVuY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBleHRlbmQgYW4gb2JqZWN0IHdpdGggcHJvcGVydGllcyBmcm9tIGFub3RoZXIgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB7IGE6IDEgfTtcbiAgICAgICAgY29uc3Qgc291cmNlID0geyBiOiAyIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dGVuZCh0YXJnZXQsIHNvdXJjZSk7XG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoeyBhOiAxLCBiOiAyIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciBmb3Igbm9uLW9iamVjdCB0YXJnZXQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHsgYjogMiB9O1xuICAgICAgICBleHBlY3QoKCkgPT4gZXh0ZW5kKHRhcmdldCwgc291cmNlKSkudG8udGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3IgZm9yIG5vbi1vYmplY3Qgc291cmNlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB7IGE6IDEgfTtcbiAgICAgICAgY29uc3Qgc291cmNlID0gXCJub3QgYW4gb2JqZWN0XCI7XG4gICAgICAgIGV4cGVjdCgoKSA9PiBleHRlbmQodGFyZ2V0LCBzb3VyY2UpKS50by50aHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZGVlcCBvYmplY3QgZXh0ZW5zaW9uJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB7IGE6IHsgYjogMSB9IH07XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHsgYTogeyBjOiAyIH0sIGQ6IDMgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0ZW5kKHRhcmdldCwgc291cmNlKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7IGE6IHsgYjogMSwgYzogMiB9LCBkOiAzIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgYXJyYXkgZXh0ZW5zaW9uJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB7IGE6IFsxLCAyXSB9O1xuICAgICAgICBjb25zdCBzb3VyY2UgPSB7IGE6IFszLCA0XSB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBleHRlbmQodGFyZ2V0LCBzb3VyY2UpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHsgYTogWzMsIDRdIH0pO1xuICAgIH0pO1xufSk7XG5cblxuXG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gXCIuLi90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuXG5leHBvcnQgeyBBYnN0cmFjdENvbnN0cmFpbnQgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogVGhlIGFic3RyYWN0IGNvbnN0cmFpbnQgZGVmaW5lcyB0aGUgYXBpIGZvciBhbGwgY29uc3RyYWludHMuIG1haW5seSB0aGUgbWV0aG9kIGlzVmFsaWQoKSBpcyBkZWZpbmVkLlxuICpcbiAqIERlcml2ZWQgY2xhc3NlcyBtdXN0IGltcGxlbWVudCB0aGUgbWV0aG9kIGlzVmFsaWQoKS5cbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IFRoZSBhYnN0cmFjdCBjb25zdHJhaW50XG4gKi9cbmNsYXNzIEFic3RyYWN0Q29uc3RyYWludCBleHRlbmRzIEJhc2Uge1xuXHQvKipcblx0ICogdGhpcyBtZXRob2QgbXVzdCByZXR1cm4gYSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2hlY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGlzVmFsaWQodmFsdWUpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QodmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb25zdHJhaW50cy9hYnN0cmFjdC1jb25zdHJhaW50XCIpO1xuXHR9XG59XG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQWJzdHJhY3RDb25zdHJhaW50IH0gZnJvbSBcIi4vYWJzdHJhY3QubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBJbnZhbGlkIH07XG5cbi8qKlxuICogQ29uc3RyYWludHMgYXJlIHVzZWQgdG8gZGVmaW5lIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBieSB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS5cbiAqXG4gKiBUaGUgdW5pZm9ybSBBUEkgb2YgdGhlIGNvbnN0cmFpbnRzIGFsbG93cyBjaGFpbnMgdG8gYmUgZm9ybWVkLlxuICpcbiAqIFRoZSBpbnZhbGlkIGNvbnN0cmFpbnQgYWxsb3dzIGFuIGFsd2F5cyBpbnZhbGlkIHF1ZXJ5IHRvIGJlIHBlcmZvcm1lZC4gdGhpcyBjb25zdHJhaW50IGlzIG1haW5seSBpbnRlbmRlZCBmb3IgdGVzdGluZy5cbiAqXG4gKiBAZXhhbXBsZSAvZXhhbXBsZXMvbGlicmFyaWVzL2NvbnN0cmFpbnRzL2ludmFsaWQvIEEgc2ltcGxlIGV4YW1wbGVcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgY29uc3RyYWludCB0aGF0IGFsd2F5cyBpbnZhbGlkXG4gKi9cbmNsYXNzIEludmFsaWQgZXh0ZW5kcyBBYnN0cmFjdENvbnN0cmFpbnQge1xuXHQvKipcblx0ICogdGhpcyBtZXRob2QgcmV0dXJucyBhIHJlamVjdGVkIHByb21pc2Vcblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0aXNWYWxpZCh2YWx1ZSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdCh2YWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbnN0cmFpbnRzL2ludmFsaWRcIik7XG5cdH1cbn1cbiIsICJpbXBvcnQge0ludmFsaWR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaW52YWxpZC5tanNcIjtcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCdJbnZhbGlkJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy5pc1ZhbGlkKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBpc3ZhbGlkID0gbmV3IEludmFsaWQoKVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmVzb2x2ZSBwcm9taXNlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGlzdmFsaWQuaXNWYWxpZCgpLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChlKS50by5iZS51bmRlZmluZWRcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG59KTtcblxuIiwgImltcG9ydCB7QmFzZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHtBYnN0cmFjdE9wZXJhdG9yfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2Fic3RyYWN0b3BlcmF0b3IubWpzXCI7XG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5jbGFzcyBBYnN0cmFjdENvbnN0cmFpbnRNb2NrIGV4dGVuZHMgQmFzZSB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBpc1ZhbGlkKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2YWx1ZSk7XG4gICAgfVxufVxuXG5cbmRlc2NyaWJlKCdBYnN0cmFjdE9wZXJhdG9yJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiB0aGUgY29uc3RyYWludCBpcyBub3QgY2FsbCB3aXRoIHBhcmFtZXRlcicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgQWJzdHJhY3RPcGVyYXRvcigpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBub3QgYW4gZXJyb3Igd2hlbiB0aGUgY29uc3RyYWludCBpcyBub3QgY2FsbCB3aXRoIHBhcmFtZXRlcicsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBuZXcgQWJzdHJhY3RPcGVyYXRvcihuZXcgQWJzdHJhY3RDb25zdHJhaW50TW9jaygpLCBuZXcgQWJzdHJhY3RDb25zdHJhaW50TW9jaygpKSAgICBcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgIFxuXG4gICAgfSk7XG59KTtcblxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEFic3RyYWN0Q29uc3RyYWludCB9IGZyb20gXCIuL2Fic3RyYWN0Lm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgQWJzdHJhY3RPcGVyYXRvciB9O1xuXG4vKipcbiAqIENvbnN0cmFpbnRzIGFyZSB1c2VkIHRvIGRlZmluZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYnkgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuXG4gKlxuICogVGhlIHVuaWZvcm0gQVBJIG9mIHRoZSBjb25zdHJhaW50cyBhbGxvd3MgY2hhaW5zIHRvIGJlIGZvcm1lZC5cbiAqXG4gKiBPcGVyYXRvcnMgYWxsb3cgeW91IHRvIGxpbmsgY29uc3RyYWludHMgdG9nZXRoZXIuIGZvciBleGFtcGxlLCB5b3UgY2FuIGNoZWNrIHdoZXRoZXIgYSB2YWx1ZSBpc1xuICogYW4gb2JqZWN0IG9yIGFuIGFycmF5LiBlYWNoIG9wZXJhdG9yIGhhcyB0d28gb3BlcmFuZHMgdGhhdCBhcmUgbGlua2VkIHRvZ2V0aGVyLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgVGhlIGFic3RyYWN0IG9wZXJhdG9yIGNvbnN0cmFpbnRcbiAqL1xuY2xhc3MgQWJzdHJhY3RPcGVyYXRvciBleHRlbmRzIEFic3RyYWN0Q29uc3RyYWludCB7XG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0Fic3RyYWN0Q29uc3RyYWludH0gb3BlcmFudEFcblx0ICogQHBhcmFtIHtBYnN0cmFjdENvbnN0cmFpbnR9IG9wZXJhbnRCXG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gXCJwYXJhbWV0ZXJzIG11c3QgYmUgZnJvbSB0eXBlIEFic3RyYWN0Q29uc3RyYWludFwiXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvcGVyYW50QSwgb3BlcmFudEIpIHtcblx0XHRzdXBlcigpO1xuXG5cdFx0aWYgKFxuXHRcdFx0IShcblx0XHRcdFx0b3BlcmFudEEgaW5zdGFuY2VvZiBBYnN0cmFjdENvbnN0cmFpbnQgJiZcblx0XHRcdFx0b3BlcmFudEIgaW5zdGFuY2VvZiBBYnN0cmFjdENvbnN0cmFpbnRcblx0XHRcdClcblx0XHQpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoXCJwYXJhbWV0ZXJzIG11c3QgYmUgZnJvbSB0eXBlIEFic3RyYWN0Q29uc3RyYWludFwiKTtcblx0XHR9XG5cblx0XHR0aGlzLm9wZXJhbnRBID0gb3BlcmFudEE7XG5cdFx0dGhpcy5vcGVyYW50QiA9IG9wZXJhbnRCO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb25zdHJhaW50cy9hYnN0cmFjdC1vcGVyYXRvclwiKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEFic3RyYWN0Q29uc3RyYWludCB9IGZyb20gXCIuL2Fic3RyYWN0Lm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgVmFsaWQgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogVGhlIHZhbGlkIGNvbnN0cmFpbnQgYWxsb3dzIGFuIGFsd2F5cyB2YWxpZCBxdWVyeSB0byBiZSBwZXJmb3JtZWQuIHRoaXMgY29uc3RyYWludCBpcyBtYWlubHkgaW50ZW5kZWQgZm9yIHRlc3RpbmcuXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy9jb25zdHJhaW50cy92YWxpZC8gQSBzaW1wbGUgZXhhbXBsZVxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBjb25zdHJhaW50IHRoYXQgYWx3YXlzIHZhbGlkXG4gKi9cbmNsYXNzIFZhbGlkIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJhaW50IHtcblx0LyoqXG5cdCAqIHRoaXMgbWV0aG9kIHJldHVybiBhIHByb21pc2UgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSBjaGVjay5cblx0ICpcblx0ICogQHBhcmFtIHsqfSB2YWx1ZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0aXNWYWxpZCh2YWx1ZSkge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSB0aGUgYGluc3RhbmNlb2ZgIG9wZXJhdG9yLlxuXHQgKiBAcmV0dXJuIHtzeW1ib2x9XG5cdCAqIEBzaW5jZSAyLjEuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9jb25zdHJhaW50cy92YWxpZFwiKTtcblx0fVxufVxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IEFic3RyYWN0T3BlcmF0b3IgfSBmcm9tIFwiLi9hYnN0cmFjdG9wZXJhdG9yLm1qc1wiO1xuaW1wb3J0IHsgaW5zdGFuY2VTeW1ib2wgfSBmcm9tIFwiLi4vY29uc3RhbnRzLm1qc1wiO1xuZXhwb3J0IHsgT3JPcGVyYXRvciB9O1xuXG4vKipcbiAqIENvbnN0cmFpbnRzIGFyZSB1c2VkIHRvIGRlZmluZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYnkgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuXG4gKlxuICogVGhlIHVuaWZvcm0gQVBJIG9mIHRoZSBjb25zdHJhaW50cyBhbGxvd3MgY2hhaW5zIHRvIGJlIGZvcm1lZC5cbiAqXG4gKiBUaGUgT3JPcGVyYXRvciBpcyB1c2VkIHRvIGxpbmsgc2V2ZXJhbCBjb25zdHJhaW50cy4gVGhlIGNvbnN0cmFpbnQgaXMgZnVsZmlsbGVkIGlmIG9uZSBvZiB0aGUgY29uc3RyYWludHMgaXMgZnVsZmlsbGVkLlxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvY29uc3RyYWludHMvb3JvcGVyYXRvci8gQSBzaW1wbGUgZXhhbXBsZVxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMy4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHN1bW1hcnkgQSBvciBvcGVyYXRvclxuICovXG5jbGFzcyBPck9wZXJhdG9yIGV4dGVuZHMgQWJzdHJhY3RPcGVyYXRvciB7XG5cdC8qKlxuXHQgKiB0aGlzIG1ldGhvZCByZXR1cm5zIGEgcHJvbWlzZSBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRpc1ZhbGlkKHZhbHVlKSB7XG5cdFx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcblx0XHRcdGxldCBhO1xuXHRcdFx0bGV0IGI7XG5cblx0XHRcdHNlbGYub3BlcmFudEFcblx0XHRcdFx0LmlzVmFsaWQodmFsdWUpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0YSA9IGZhbHNlO1xuXHRcdFx0XHRcdC8qKiBiIGhhcyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkIGFuZCB3YXMgbm90IHRydWUgKi9cblx0XHRcdFx0XHRpZiAoYiA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdHNlbGYub3BlcmFudEJcblx0XHRcdFx0LmlzVmFsaWQodmFsdWUpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRyZXNvbHZlKCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0YiA9IGZhbHNlO1xuXHRcdFx0XHRcdC8qKiBiIGhhcyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkIGFuZCB3YXMgbm90IHRydWUgKi9cblx0XHRcdFx0XHRpZiAoYSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbnN0cmFpbnRzL29yLW9wZXJhdG9yXCIpO1xuXHR9XG59XG4iLCAiaW1wb3J0IHtWYWxpZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy92YWxpZC5tanNcIjtcbmltcG9ydCB7SW52YWxpZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy9pbnZhbGlkLm1qc1wiO1xuaW1wb3J0IHtPck9wZXJhdG9yfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL29yb3BlcmF0b3IubWpzXCI7XG5cbmRlc2NyaWJlKCdPck9wZXJhdG9yJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy5pc1ZhbGlkKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW25ldyBWYWxpZCgpLCBuZXcgVmFsaWQoKSwgdHJ1ZV0sXG4gICAgICAgICAgICBbbmV3IFZhbGlkKCksIG5ldyBJbnZhbGlkKCksIHRydWVdLFxuICAgICAgICAgICAgW25ldyBJbnZhbGlkKCksIG5ldyBWYWxpZCgpLCB0cnVlXSxcbiAgICAgICAgICAgIFtuZXcgSW52YWxpZCgpLCBuZXcgSW52YWxpZCgpLCBmYWxzZV1cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2NvbnN0cmFpbnQuaXNWYWxpZCgpIHNob3VsZCByZXR1cm4gJyArIGMsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgY29uc3RyYWludCA9IG5ldyBPck9wZXJhdG9yKGEsIGIpO1xuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQuaXNWYWxpZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjID09PSB0cnVlID8gZG9uZSgpIDogZG9uZShuZXcgRXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjID09PSB0cnVlID8gZG9uZShuZXcgRXJyb3IoKSkgOiBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcbn0pO1xuXG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnN0cmFpbnQgfSBmcm9tIFwiLi9hYnN0cmFjdC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IElzT2JqZWN0IH07XG5cbi8qKlxuICogQ29uc3RyYWludHMgYXJlIHVzZWQgdG8gZGVmaW5lIGNvbmRpdGlvbnMgdGhhdCBtdXN0IGJlIG1ldCBieSB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZS5cbiAqXG4gKiBUaGUgdW5pZm9ybSBBUEkgb2YgdGhlIGNvbnN0cmFpbnRzIGFsbG93cyBjaGFpbnMgdG8gYmUgZm9ybWVkLlxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvY29uc3RyYWludHMvaXNvYmplY3QvIEEgc2ltcGxlIGV4YW1wbGVcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgY29uc3RyYWludCB0byBjaGVjayBpZiBhIHZhbHVlIGlzIGFuIG9iamVjdFxuICovXG5jbGFzcyBJc09iamVjdCBleHRlbmRzIEFic3RyYWN0Q29uc3RyYWludCB7XG5cdC8qKlxuXHQgKiB0aGlzIG1ldGhvZCByZXR1cm5zIGEgcHJvbWlzZSBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIGNoZWNrLlxuXHQgKlxuXHQgKiBAcGFyYW0geyp9IHZhbHVlXG5cdCAqIEByZXR1cm4ge1Byb21pc2V9XG5cdCAqL1xuXHRpc1ZhbGlkKHZhbHVlKSB7XG5cdFx0aWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KHZhbHVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIGBpbnN0YW5jZW9mYCBvcGVyYXRvci5cblx0ICogQHJldHVybiB7c3ltYm9sfVxuXHQgKiBAc2luY2UgMi4xLjBcblx0ICovXG5cdHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcblx0XHRyZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvY29uc3RyYWludC9pcy1vYmplY3RcIik7XG5cdH1cbn1cbiIsICJpbXBvcnQge0lzT2JqZWN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2NvbnN0cmFpbnRzL2lzb2JqZWN0Lm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ0lzT2JqZWN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy5pc1ZhbGlkKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBjb25zdHJhaW50ID0gbmV3IElzT2JqZWN0KClcblxuICAgICAgICBpdCgnc2hvdWxkIHJlc29sdmUgcHJvbWlzZScsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50LmlzVmFsaWQoe30pLnRoZW4ociA9PiB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHIpLmlzLmEoJ29iamVjdCcpO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKFwic2hvdWxkIG5vdCByZWFjaGVkOiBcIiArIGUpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiLyoqXG4gKiBDb3B5cmlnaHQgXHUwMEE5IHNjaHVrYWkgR21iSCBhbmQgYWxsIGNvbnRyaWJ1dGluZyBhdXRob3JzLCB7e2NvcHlSaWdodFllYXJ9fS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIE5vZGUgbW9kdWxlOiBAc2NodWthaS9tb25zdGVyXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyAoQUdQTHYzKS5cbiAqIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kIGF0OiBodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwtMy4wLmVuLmh0bWxcbiAqXG4gKiBGb3IgdGhvc2Ugd2hvIGRvIG5vdCB3aXNoIHRvIGFkaGVyZSB0byB0aGUgQUdQTHYzLCBhIGNvbW1lcmNpYWwgbGljZW5zZSBpcyBhdmFpbGFibGUuXG4gKiBBY3F1aXJpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UgYWxsb3dzIHlvdSB0byB1c2UgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IGNvbXBseWluZyB3aXRoIHRoZSBBR1BMdjMgdGVybXMuXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBwdXJjaGFzaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCBzY2h1a2FpIEdtYkguXG4gKlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wXG4gKi9cblxuaW1wb3J0IHsgQWJzdHJhY3RPcGVyYXRvciB9IGZyb20gXCIuL2Fic3RyYWN0b3BlcmF0b3IubWpzXCI7XG5pbXBvcnQgeyBpbnN0YW5jZVN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5leHBvcnQgeyBBbmRPcGVyYXRvciB9O1xuXG4vKipcbiAqIENvbnN0cmFpbnRzIGFyZSB1c2VkIHRvIGRlZmluZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgYnkgdGhlIHZhbHVlIG9mIGEgdmFyaWFibGUuXG4gKlxuICogVGhlIHVuaWZvcm0gQVBJIG9mIHRoZSBjb25zdHJhaW50cyBhbGxvd3MgY2hhaW5zIHRvIGJlIGZvcm1lZC5cbiAqXG4gKiBUaGUgQW5kT3BlcmF0b3IgaXMgdXNlZCB0byBsaW5rIHNldmVyYWwgY29uc3RyYWludHMuIFRoZSBjb25zdHJhaW50IGlzIGZ1bGZpbGxlZCBpZiBhbGwgY29uc3RyYWludHMgb2YgdGhlIG9wZXJhdG9ycyBhcmUgZnVsZmlsbGVkLlxuICpcbiAqIEBleGFtcGxlIC9leGFtcGxlcy9saWJyYXJpZXMvY29uc3RyYWludHMvYW5kb3BlcmF0b3IvIEEgc2ltcGxlIGV4YW1wbGVcbiAqXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzdW1tYXJ5IEEgYW5kIG9wZXJhdG9yIGNvbnN0cmFpbnRcbiAqL1xuY2xhc3MgQW5kT3BlcmF0b3IgZXh0ZW5kcyBBYnN0cmFjdE9wZXJhdG9yIHtcblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2hlY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGlzVmFsaWQodmFsdWUpIHtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoW1xuXHRcdFx0dGhpcy5vcGVyYW50QS5pc1ZhbGlkKHZhbHVlKSxcblx0XHRcdHRoaXMub3BlcmFudEIuaXNWYWxpZCh2YWx1ZSksXG5cdFx0XSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbnN0cmFpbnRzL2FuZC1vcGVyYXRvclwiKTtcblx0fVxufVxuIiwgImltcG9ydCB7VmFsaWR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvdmFsaWQubWpzXCI7XG5pbXBvcnQge0ludmFsaWR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaW52YWxpZC5tanNcIjtcbmltcG9ydCB7QW5kT3BlcmF0b3J9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvYW5kb3BlcmF0b3IubWpzXCI7XG5cbmRlc2NyaWJlKCdBbmRPcGVyYXRvcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcuaXNWYWxpZCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtuZXcgVmFsaWQoKSwgbmV3IFZhbGlkKCksIHRydWVdLFxuICAgICAgICAgICAgW25ldyBWYWxpZCgpLCBuZXcgSW52YWxpZCgpLCBmYWxzZV0sXG4gICAgICAgICAgICBbbmV3IEludmFsaWQoKSwgbmV3IFZhbGlkKCksIGZhbHNlXSxcbiAgICAgICAgICAgIFtuZXcgSW52YWxpZCgpLCBuZXcgSW52YWxpZCgpLCBmYWxzZV1cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2NvbnN0cmFpbnQuaXNWYWxpZCgpIHNob3VsZCByZXR1cm4gJyArIGMsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgY29uc3RyYWludCA9IG5ldyBBbmRPcGVyYXRvcihhLCBiKTtcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50LmlzVmFsaWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYyA9PT0gdHJ1ZSA/IGRvbmUoKSA6IGRvbmUobmV3IEVycm9yKCkpO1xuICAgICAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYyA9PT0gdHJ1ZSA/IGRvbmUobmV3IEVycm9yKCkpIDogZG9uZSgpO1xuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG59KTtcblxuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tIFwiLi4vdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnN0cmFpbnQgfSBmcm9tIFwiLi9hYnN0cmFjdC5tanNcIjtcbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5tanNcIjtcbmV4cG9ydCB7IElzQXJyYXkgfTtcblxuLyoqXG4gKiBDb25zdHJhaW50cyBhcmUgdXNlZCB0byBkZWZpbmUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGJ5IHRoZSB2YWx1ZSBvZiBhIHZhcmlhYmxlLlxuICpcbiAqIFRoZSB1bmlmb3JtIEFQSSBvZiB0aGUgY29uc3RyYWludHMgYWxsb3dzIGNoYWlucyB0byBiZSBmb3JtZWQuXG4gKlxuICogQGV4YW1wbGUgL2V4YW1wbGVzL2xpYnJhcmllcy9jb25zdHJhaW50cy9pc2FycmF5LyBBIHNpbXBsZSBleGFtcGxlXG4gKlxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjb3B5cmlnaHQgc2NodWthaSBHbWJIXG4gKiBAc3VtbWFyeSBBIGNvbnN0cmFpbnQgdG8gY2hlY2sgaWYgYSB2YWx1ZSBpcyBhbiBhcnJheVxuICovXG5jbGFzcyBJc0FycmF5IGV4dGVuZHMgQWJzdHJhY3RDb25zdHJhaW50IHtcblx0LyoqXG5cdCAqIHRoaXMgbWV0aG9kIHJldHVybnMgYSBwcm9taXNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2hlY2suXG5cdCAqXG5cdCAqIEBwYXJhbSB7Kn0gdmFsdWVcblx0ICogQHJldHVybiB7UHJvbWlzZX1cblx0ICovXG5cdGlzVmFsaWQodmFsdWUpIHtcblx0XHRpZiAoaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpO1xuXHRcdH1cblxuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdCh2YWx1ZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDIuMS4wXG5cdCAqL1xuXHRzdGF0aWMgZ2V0IFtpbnN0YW5jZVN5bWJvbF0oKSB7XG5cdFx0cmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2NvbnN0cmFpbnQvaXMtYXJyYXlcIik7XG5cdH1cbn1cbiIsICJpbXBvcnQge0lzQXJyYXl9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvY29uc3RyYWludHMvaXNhcnJheS5tanNcIjtcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCdJc0FycmF5JywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy5pc1ZhbGlkKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBjb25zdHJhaW50ID0gbmV3IElzQXJyYXkoKVxuXG4gICAgICAgIGl0KCdzaG91bGQgcmVzb2x2ZSBwcm9taXNlJywgZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnQuaXNWYWxpZChbMSwyLDNdKS50aGVuKHIgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChyKS5pcy5hKCdhcnJheScpO1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKFwic2hvdWxkIG5vdCByZWFjaGVkOiBcIiArIGUpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtWYWxpZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdHJhaW50cy92YWxpZC5tanNcIjtcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCdWYWxpZCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcuaXNWYWxpZCgpJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBsZXQgY29uc3RyYWludCA9IG5ldyBWYWxpZCgpXG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXNvbHZlIHByb21pc2UnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3RyYWludC5pc1ZhbGlkKHt9KS50aGVuKHIgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKFwic2hvdWxkIG5vdCByZWFjaGVkOiBcIiArIGUpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbn0pO1xuXG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtOb2RlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL25vZGUubWpzXCI7XG5pbXBvcnQge05vZGVMaXN0fSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL25vZGVsaXN0Lm1qc1wiO1xuXG5kZXNjcmliZSgnTm9kZUxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgZGVzY3JpYmUoJyNjb25zdHJ1Y3RvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBjcmVhdGUgYW4gZW1wdHkgTm9kZUxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgbm9kZUxpc3QgPSBuZXcgTm9kZUxpc3QoKTtcblxuICAgICAgICAgICAgZXhwZWN0KG5vZGVMaXN0LnNpemUpLnRvLmVxdWFsKDApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIE5vZGVMaXN0IGZyb20gYW4gYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgbm9kZUxpc3QgPSBuZXcgTm9kZUxpc3QoW1xuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKSxcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JyksXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpXG4gICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgZXhwZWN0KG5vZGVMaXN0LnNpemUpLnRvLmVxdWFsKDMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIE5vZGVMaXN0IGZyb20gYSBOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBub2RlTGlzdCA9IG5ldyBOb2RlTGlzdChbXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKSxcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JylcbiAgICAgICAgICAgIF0pO1xuXG4gICAgICAgICAgICBsZXQgbm9kZUxpc3QyID0gbmV3IE5vZGVMaXN0KG5vZGVMaXN0KTtcblxuICAgICAgICAgICAgZXhwZWN0KG5vZGVMaXN0Mi5zaXplKS50by5lcXVhbCgzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgIH0pO1xuICAgIFxuICAgICBcbiAgICBpdCgnY3JlYXRlIE5vZGVMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkpLmlzLmluc3RhbmNlb2YoTm9kZUxpc3QpO1xuICAgIH0pXG5cbiAgICBpdCgnYWRkIE5vZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKS5hZGQobmV3IE5vZGUoKSkpLnRvLmJlLmluc3RhbmNlb2YoTm9kZUxpc3QpO1xuICAgIH0pXG5cbiAgICBpdCgncmVtb3ZlIE5vZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKS5yZW1vdmUobmV3IE5vZGUoKSkpLnRvLmJlLmluc3RhbmNlb2YoTm9kZUxpc3QpO1xuICAgIH0pXG5cbiAgICBpdCgnaGFzIHVua25vd24gTm9kZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLmhhcyhuZXcgTm9kZSkpLnRvLmJlLmZhbHNlO1xuICAgIH0pXG5cbiAgICBpdCgnaGFzIGFkZGVkIE5vZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG4gPSBuZXcgTm9kZTtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLmFkZChuKS5oYXMobikpLnRvLmJlLnRydWU7XG4gICAgfSlcbiAgICBcbiAgICBpdCgndG9TdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG4gPSBuZXcgTm9kZTtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpLmFkZChuZXcgTm9kZSgnYScpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCdiJykpKS50b1N0cmluZygpKS50by5iZS5lcXVhbCgnYVxcbiBcdTI1MTRiJyk7XG4gICAgfSlcblxuICAgIGl0KCd0aHJvdyBleGNlcHRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgTm9kZUxpc3QoKS5hZGQoMSkpLnRvLnRocm93KEVycm9yKTtcbiAgICB9KVxuXG5cbn0pOyIsICJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7QmFzZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9iYXNlLm1qc1wiO1xuaW1wb3J0IHtpbnN0YW5jZVN5bWJvbH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9jb25zdGFudHMubWpzXCI7XG5cblxuXG5jbGFzcyBCYXNlRGlmZmVyZW50UmVhbG0gZXh0ZW5kcyBPYmplY3Qge1xuICAgIFxuXG4gICAgc3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuICAgICAgICByZXR1cm4gU3ltYm9sLmZvcihcIkBzY2h1a2FpL21vbnN0ZXIvdHlwZXMvYmFzZVwiKTtcbiAgICB9XG5cblxufVxuXG5jbGFzcyBTdWJjbGFzcyBleHRlbmRzIEJhc2VEaWZmZXJlbnRSZWFsbSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgW2luc3RhbmNlU3ltYm9sXSgpIHtcbiAgICAgICAgcmV0dXJuIFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL3R5cGVzL3N1YmNsYXNzXCIpO1xuICAgIH1cbn1cblxuZGVzY3JpYmUoJ0Jhc2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnbmV3IEJhc2UnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2lzIGluc3RhbmNlIG9mIEJhc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEJhc2UpLnRvLmJlLmluc3RhbmNlT2YoQmFzZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdpcyBpbnN0YW5jZSBvZiBPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEJhc2UpLnRvLmJlLmluc3RhbmNlT2YoT2JqZWN0KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuICAgIFxuICAgIGRlc2NyaWJlKCdpbnN0YW5jb2YnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2lzIGluc3RhbmNlIG9mIEJhc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEJhc2UpLnRvLmJlLmluc3RhbmNlT2YoQmFzZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgaXQoJ3N1YmNsYXNzIGluc3RhbmNlb2YnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChuZXcgU3ViY2xhc3MgaW5zdGFuY2VvZiBCYXNlKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHRydWUpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICB9IGVsc2UgIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoZmFsc2UpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KVxuXG59KSIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge01lZGlhVHlwZSwgcGFyc2VNZWRpYVR5cGV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvbWVkaWF0eXBlLm1qc1wiO1xuXG5kZXNjcmliZSgnRGF0YXVybCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIFtcbiAgICAgICAgW1wiKi8qXCIsXCIqXCIsJyonXSxcbiAgICAgICAgW1widGV4dC8qXCIsXCJ0ZXh0XCIsJyonXSxcbiAgICAgICAgW1wiKi90ZXN0XCIsXCIqXCIsJ3Rlc3QnXSxcbiAgICAgICAgW1wiaW1hZ2UvcG5nXCIsIFwiaW1hZ2VcIiwgXCJwbmdcIl0sXG4gICAgICAgIFtcImF1ZGlvL21wM1wiLCBcImF1ZGlvXCIsIFwibXAzXCJdLFxuICAgICAgICBbXCJ2aWRlby9tcGVnXCIsIFwidmlkZW9cIiwgXCJtcGVnXCJdLFxuICAgICAgICBbXCJ0ZXh0L3BsYWluXCIsIFwidGV4dFwiLCBcInBsYWluXCJdLFxuICAgICAgICBbXCJ0ZXh0L2h0bWxcIiwgXCJ0ZXh0XCIsIFwiaHRtbFwiXSxcbiAgICAgICAgW1widGV4dC9odG1sO2NoYXJzZXQ9VVMtQVNDSUlcIiwgXCJ0ZXh0XCIsIFwiaHRtbFwiXSxcbiAgICAgICAgW1widGV4dC9odG1sO2NoYXJzZXQ9XFxcIlVTLUFTQ0lJXFxcIlwiLCBcInRleHRcIiwgXCJodG1sXCJdLFxuXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuXG4gICAgICAgIGl0KCdwYXJzZU1lZGlhVHlwZSgnICsgYSArICcpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCBkID0gcGFyc2VNZWRpYVR5cGUoYSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChkKS5pcy5pbnN0YW5jZW9mKE1lZGlhVHlwZSk7XG4gICAgICAgICAgICBleHBlY3QoZC50b1N0cmluZygpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgIGV4cGVjdChkLnR5cGUpLnRvLmJlLmVxdWFsKGIpO1xuICAgICAgICAgICAgZXhwZWN0KGQuc3VidHlwZSkudG8uYmUuZXF1YWwoYyk7XG4gICAgICAgICAgICBleHBlY3QoZC5wYXJhbWV0ZXIpLmlzLmluc3RhbmNlb2YoTWFwKVxuICAgICAgICB9KVxuXG4gICAgfSk7XG5cbiAgICBbXG4gICAgICAgIFtcInZpZGVvL1wiXSxcbiAgICAgICAgW1widGV4dFwiXSxcbiAgICAgICAgW1wiL21wM1wiXSxcbiAgICAgICAgW1widGV4dC9odG1sO2NoYXJzZXRVUy1BU0NJSVwiXSxcbiAgICAgICAgW1widGV4dC9odG1sO2NoYXJzZXRcXFwiVVMtQVNDSUlcXFwiXCJdLFxuXG4gICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICBpdCgnJyArIGEgKyAnIHNob3VsZCB0aHJvdyBleGNlcHRpb24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGV4cGVjdCgoKT0+e3BhcnNlTWVkaWFUeXBlKGEpfSkudGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgIFxuICAgICAgICB9KVxuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge1Rva2VuTGlzdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy90b2tlbmxpc3QubWpzXCI7XG5cblxuZGVzY3JpYmUoJ1Rva2VuTGlzdCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGRlc2NyaWJlKCcudG9TdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IHRva2VuTGlzdCA9IG5ldyBUb2tlbkxpc3QoKVxuICAgICAgICBsZXQgcmVzdWx0ID0gdG9rZW5MaXN0LnRvU3RyaW5nKCk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5iZS5hKCdzdHJpbmcnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3NldCBhbmQgcmVtb3ZlIHJldHVybiBhIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmJlLmEoJ3N0cmluZycpO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdpbml0IHdpdGggc3RyaW5nIGl0ZXJhYmxlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KCcgKyB0eXBlb2YgYSArICcpIHRocm93IFR5cGVFcnJvciAnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGxldCB0b2tlbnMgPSBbXCJhYmNcIiwgXCJkZWZcIiwgXCJnaGlcIl1cbiAgICAgICAgICAgIGxldCBsaXN0ID0gbmV3IFRva2VuTGlzdCh0b2tlbnMpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJhYmMgZGVmIGdoaVwiKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdpbml0IHdpdGggaXRlcmFibGUgd2l0aG91dCBzdHJpbmcgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KCcgKyB0eXBlb2YgYSArICcpIHRocm93IFR5cGVFcnJvciAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgdG9rZW5zID0gW1wiYWJjXCIsIDQsIFwiZ2hpXCJdXG4gICAgICAgICAgICBleHBlY3QoKCkgPT4gbmV3IFRva2VuTGlzdCh0b2tlbnMpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2luaXQgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIC8vIGN1cnJlbnQsIGV4cGVjdGVkLCB0eXBlcnJvclxuICAgICAgICAgICAgWyd0ZXN0MScsIFwidGVzdDFcIiwgZmFsc2VdLFxuICAgICAgICAgICAgWyd0ZXN0MSB0ZXN0MicsIFwidGVzdDEgdGVzdDJcIiwgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgXCJcIiwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCB1bmRlZmluZWQsIHRydWVdLCAvLyBOYU5cbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCB1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgWzIsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdW5kZWZpbmVkLCB0cnVlXSxcbiAgICAgICAgICAgIFs0LjUsIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbe30sIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbW1wiMVwiLCBcIjJcIiwgXCIzXCJdLCAnMSAyIDMnLCBmYWxzZV0sIC8vIGl0ZXJhYmxlIHN0cmluZ3NcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIHVuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZSwgdHJ1ZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmIChjID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoJyArIHR5cGVvZiBhICsgJykgdGhyb3cgVHlwZUVycm9yICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IG5ldyBUb2tlbkxpc3QoYSkpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBUb2tlbkxpc3QoYSkudG9TdHJpbmcoKSkuaXMuZXF1YWwoYilcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnaXRlcmF0b3IgcHJvdG9jb2wnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IGxpc3Q7XG4gICAgICAgIGl0KCcuYWRkKCcgKyBcInNlY29uZFwiICsgJykgc2hvdWxkIHJldHVybiBUb2tlbkxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0XCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuZ2V0SXRlcmF0b3IoKSkudG8uYmUuYW4oJ29iamVjdCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnLmFkZCgnICsgXCJzZWNvbmRcIiArICcpIHNob3VsZCByZXR1cm4gVG9rZW5MaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QoWy4uLmxpc3RdKS50by5iZS5hbignYXJyYXknKTtcbiAgICAgICAgICAgIGV4cGVjdChbLi4ubGlzdF0pLnRvLmJlLmFuKCdhcnJheScpLnRvLmluY2x1ZGUoJ3N0YXJ0JykudG8uaW5jbHVkZSgnZW5kJyk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuZW50cmllcygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBsaXN0O1xuICAgICAgICBpdCgnLmVudHJpZXMoKSBzaG91bGQgcmV0dXJuIEFycmF5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmVudHJpZXMoKSkudG8uYmUuYW4oJ2FycmF5Jyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuZW50cmllcygpIHNob3VsZCByZXR1cm4gQXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IGVuZFwiKS5lbnRyaWVzKCk7XG4gICAgICAgICAgICBleHBlY3QobGlzdCkudG8uYmUuYW4oJ2FycmF5JykudG8uaW5jbHVkZSgnc3RhcnQnKS50by5pbmNsdWRlKCdlbmQnKTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5mb3JFYWNoKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IGxpc3Q7XG4gICAgICAgIGl0KCcuZm9yRWFjaCgpIHNob3VsZCBpdGVyYXRlIG92ZXIgdG9rZW5saXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJhYWEgYmJiIGNjYyBkZGQgZWVlIGZmZlwiKTtcblxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IFwiXCJcbiAgICAgICAgICAgIGxpc3QuZm9yRWFjaCgoYSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBcIiFcIiArIGEgKyBcIiFcIjtcbiAgICAgICAgICAgICAgICBleHBlY3QoYSkudG8uYmUuYW4oJ3N0cmluZycpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS5pcy5lcXVhbChcIiFhYWEhIWJiYiEhY2NjISFkZGQhIWVlZSEhZmZmIVwiKVxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnLmVudHJpZXMoKSBzaG91bGQgcmV0dXJuIEFycmF5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBlbmRcIikuZW50cmllcygpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QpLnRvLmJlLmFuKCdhcnJheScpLnRvLmluY2x1ZGUoJ3N0YXJ0JykudG8uaW5jbHVkZSgnZW5kJyk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjb250YWlucyB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBsaXN0XG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KHN0YXJ0LCBtaWRkbGUgZW5kKSBzaG91bGQgY29udGFpbiBtaWRkbGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IG1pZGRsZSBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5jb250YWlucygnc3RhcnQnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKCdtaWRkbGUnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKCdlbmQnKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LmNvbnRhaW5zKFsnZW5kJywgJ3N0YXJ0JywgJ21pZGRsZSddKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3Qoc3RhcnQsIG1pZGRsZSBlbmQpIHNob3VsZCBub3QgY29udGFpbiB4eXonLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IG1pZGRsZSBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5jb250YWlucygneHl6JykpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnMoWydlbmQnLCAnc3RhcnQnLCAnbWlkZGxlJywgJ3h5eiddKSkudG8uYmUuZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KHN0YXJ0LCBtaWRkbGUgZW5kKSBzaG91bGQgbm90IGNvbnRhaW4gdW5kZWZpbmVkIG51bGwgTmFOJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBtaWRkbGUgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuY29udGFpbnModW5kZWZpbmVkKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5jb250YWlucyhwYXJzZUludChcImFcIikpKS50by5iZS5mYWxzZTsgLy8gTmFOXG4gICAgICAgICAgICBleHBlY3QobGlzdC5jb250YWlucyhudWxsKSkudG8uYmUuZmFsc2U7IC8vIE5hTlxuICAgICAgICB9KTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ3RvZ2dsZSB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBsaXN0XG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KHN0YXJ0IG1pZGRsZSBlbmQpLnRvZ2dsZShuZXctdmFsdWUpIHNob3VsZCBjb250YWluIG5ldy12YWx1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgbWlkZGxlIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnRvZ2dsZSgnbmV3LXZhbHVlJykudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCBtaWRkbGUgZW5kIG5ldy12YWx1ZVwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3Qoc3RhcnQgbWlkZGxlIGVuZCkudG9nZ2xlKG1pZGRsZSkgc2hvdWxkIG5vdCBjb250YWluIG1pZGRsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgbWlkZGxlIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnRvZ2dsZSgnbWlkZGxlJykudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCBlbmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KCkudG9nZ2xlKCkgc2hvdWxkIC4uLicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVG9rZW5MaXN0KFwiYWJjIGRlZiBnaGlcIikudG9nZ2xlKFwiZGVmIHh5elwiKS50b1N0cmluZygpKS50by5lcXVhbChcImFiYyBnaGkgeHl6XCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdCgpLnRvZ2dsZSgpIHNob3VsZCAuLi4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFRva2VuTGlzdChcImFiYyBkZWYgZ2hpXCIpLnRvZ2dsZShbXCJhYmNcIiwgXCJ4eXpcIl0pLnRvU3RyaW5nKCkpLnRvLmVxdWFsKFwiZGVmIGdoaSB4eXpcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KCkudG9nZ2xlKCkgc2hvdWxkIC4uLicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVG9rZW5MaXN0KFwiYWJjIGRlZiBnaGlcIikudG9nZ2xlKHVuZGVmaW5lZCkudG9TdHJpbmcoKSkudG8uZXF1YWwoXCJhYmMgZGVmIGdoaVwiKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ21hbmlwdWxhdGUgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBsaXN0XG5cbiAgICAgICAgaXQoJ3Jlc3VsdCBUb2tlbkxpc3QoXCInICsgXCJzdGFydFwiICsgJ1wiKSBzaG91bGQgYmUgXCInICsgXCJzdGFydFwiICsgJ1wiJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwic3RhcnRcIilcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5hZGQoJyArIFwic2Vjb25kXCIgKyAnKSBzaG91bGQgcmV0dXJuIFRva2VuTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5hZGQoXCJzZWNvbmRcIikpLnRvLmJlLmFuLmluc3RhbmNlb2YoVG9rZW5MaXN0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJy5hZGQoJyArIFwic2Vjb25kXCIgKyAnKS50b1N0cmluZygpIHNob3VsZCByZXR1cm4gXCJzdGFydCBzZWNvbmRcIiAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0XCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuYWRkKFwic2Vjb25kXCIpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwic3RhcnQgc2Vjb25kXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnLmFkZCgnICsgXCJzZWNvbmQgdGhpcmRcIiArICcpLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IHNlY29uZCB0aGlyZFwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5hZGQoXCJzZWNvbmQgdGhpcmRcIikudG9TdHJpbmcoKSkuaXMuZXF1YWwoXCJzdGFydCBzZWNvbmQgdGhpcmRcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCcuYWRkKCcgKyBcIltzZWNvbmQsdGhpcmRdXCIgKyAnKS50b1N0cmluZygpIHNob3VsZCByZXR1cm4gXCJzdGFydCBzZWNvbmQgdGhpcmRcIiAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0XCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuYWRkKFtcInNlY29uZFwiLCBcInRoaXJkXCJdKS50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IHNlY29uZCB0aGlyZFwiKTtcbiAgICAgICAgfSk7XG5cblxuICAgICAgICBpdCgnLmNsZWFyKCkudG9TdHJpbmcoKSBzaG91bGQgXCJcIiAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0XCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QuYWRkKFtcInNlY29uZFwiLCBcInRoaXJkXCJdKS5jbGVhcigpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwiXCIpO1xuICAgICAgICB9KTtcblxuXG4gICAgICAgIGl0KCduZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKS5yZW1vdmUoJyArIFwic2Vjb25kXCIgKyAnKSBzaG91bGQgcmV0dXJuIFRva2VuTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnJlbW92ZShcInNlY29uZFwiKSkudG8uYmUuYW4uaW5zdGFuY2VvZihUb2tlbkxpc3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIikucmVtb3ZlKCcgKyBcInNlY29uZFwiICsgJykudG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIFwic3RhcnQgdGhpcmQgZW5kXCIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QucmVtb3ZlKFwic2Vjb25kXCIpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwic3RhcnQgdGhpcmQgZW5kXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIikucmVtb3ZlKCcgKyBcInNlY29uZCB0aGlyZFwiICsgJykudG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIFwic3RhcnQgZW5kXCIgJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGlzdCA9IG5ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGxpc3QucmVtb3ZlKFwic2Vjb25kIHRoaXJkXCIpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwic3RhcnQgZW5kXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIikucmVtb3ZlKCcgKyBcIltzZWNvbmQsdGhpcmRdXCIgKyAnKS50b1N0cmluZygpIHNob3VsZCByZXR1cm4gXCJzdGFydCBlbmRcIiAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5yZW1vdmUoW1wic2Vjb25kXCIsIFwidGhpcmRcIl0pLnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwic3RhcnQgZW5kXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIikucmVwbGFjZShzZWNvbmQsIHh5eikudG9TdHJpbmcoKSBzaG91bGQgcmV0dXJuIFwic3RhcnQgeHl6IHRoaXJkIGVuZFwiICcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxpc3QgPSBuZXcgVG9rZW5MaXN0KFwic3RhcnQgc2Vjb25kIHRoaXJkIGVuZFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnJlcGxhY2UoXCJzZWNvbmRcIiwgXCJ4eXpcIikpLnRvLmJlLmluc3RhbmNlT2YoVG9rZW5MaXN0KTtcbiAgICAgICAgICAgIGV4cGVjdChsaXN0LnRvU3RyaW5nKCkpLmlzLmVxdWFsKFwic3RhcnQgeHl6IHRoaXJkIGVuZFwiKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ25ldyBUb2tlbkxpc3QoXCJzdGFydCBzZWNvbmQgdGhpcmQgZW5kXCIpLnJlcGxhY2UoZW5kLCB4eXopLnRvU3RyaW5nKCkgc2hvdWxkIHJldHVybiBcInN0YXJ0IHNlY29uZCB0aGlyZCB4eXpcIiAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsaXN0ID0gbmV3IFRva2VuTGlzdChcInN0YXJ0IHNlY29uZCB0aGlyZCBlbmRcIik7XG4gICAgICAgICAgICBleHBlY3QobGlzdC5yZXBsYWNlKFwiZW5kXCIsIFwieHl6XCIpKS50by5iZS5pbnN0YW5jZU9mKFRva2VuTGlzdCk7XG4gICAgICAgICAgICBleHBlY3QobGlzdC50b1N0cmluZygpKS5pcy5lcXVhbChcInN0YXJ0IHNlY29uZCB0aGlyZCB4eXpcIik7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG59KTtcblxuIiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2V4dGVuZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7aXNPYmplY3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvaXMubWpzXCI7XG5pbXBvcnQge09ic2VydmVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL29ic2VydmVyLm1qc1wiO1xuXG5pbXBvcnQge1Byb3h5T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvcHJveHlvYnNlcnZlci5tanNcIjtcblxuZGVzY3JpYmUoJ1Byb3h5T2JzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnY3JlYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIFByb3h5T2JzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgbyA9IG5ldyBQcm94eU9ic2VydmVyKHt9KTtcbiAgICAgICAgICAgIGV4dGVuZChvLmdldFN1YmplY3QoKSwge2E6IDR9KTtcbiAgICAgICAgICAgIGV4cGVjdChvLmdldFJlYWxTdWJqZWN0KCkpLmlzLmVxbCh7YTogNH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzZXRTdWJqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJ1biBvYnNlcnZlcicsIGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgICAgICBsZXQgbyA9IG5ldyBQcm94eU9ic2VydmVyKHthOiAxfSk7XG4gICAgICAgICAgICBleHBlY3Qoby5nZXRSZWFsU3ViamVjdCgpKS5pcy5lcWwoe2E6IDF9KTtcbiAgICAgICAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgICAgICAgIG8uYXR0YWNoT2JzZXJ2ZXIobmV3IE9ic2VydmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QodGhpcykgJiYgdGhpcyBpbnN0YW5jZW9mIFByb3h5T2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IG9uZSBjaGFuZ2UgYXMgbm90aWZ5IHJ1bnMgbGF0ZXJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkb25lKFwiY2FsbGVkIGZvciBlcnJvclwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKFwidGhpcyBpcyBub3QgUHJveHlPYnNlcnZlclwiKSlcbiAgICAgICAgICAgIH0pKVxuXG4gICAgICAgICAgICBvLmdldFN1YmplY3QoKS5jID0gNDtcbiAgICAgICAgICAgIGV4cGVjdChvLmdldFJlYWxTdWJqZWN0KCkpLmlzLmVxbCh7YTogMSwgYzogNH0pO1xuXG4gICAgICAgICAgICBvLnNldFN1YmplY3Qoe2I6IDJ9KTtcbiAgICAgICAgICAgIGV4cGVjdChvLmdldFJlYWxTdWJqZWN0KCkpLmlzLmVxbCh7YjogMn0pO1xuXG4gICAgICAgICAgICBvLmdldFN1YmplY3QoKS5kID0gNTtcbiAgICAgICAgICAgIGV4cGVjdChvLmdldFJlYWxTdWJqZWN0KCkpLmlzLmVxbCh7YjogMiwgZDogNX0pO1xuXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY3JlYXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIFByb3h5T2JzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgbyA9IG5ldyBQcm94eU9ic2VydmVyKHt9KTtcbiAgICAgICAgICAgIGV4cGVjdChvKS5pcy5pbnN0YW5jZU9mKFByb3h5T2JzZXJ2ZXIpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdwcm94eSBvYmplY3RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpdCgnUHJveHkgb2JqZWN0cyBzaG91bGQgbm90IGJlIHJlY29tbWl0dGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG8gPSBuZXcgUHJveHlPYnNlcnZlcih7YToge2I6IHRydWV9fSk7XG4gICAgICAgICAgICBvLmdldFN1YmplY3QoKS5hLmIgPSBvLmdldFN1YmplY3QoKTtcbiAgICAgICAgICAgIG8uZ2V0U3ViamVjdCgpLmEuYi5hLmIgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vZXhwZWN0KG8uZ2V0U3ViamVjdCgpPT09cC5nZXRTdWJqZWN0KCkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ25vdGlmeSBvYnNlcnZlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCBpbmZvcm0gb2JzZXJ2ZXInLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgLy8gdGhlIG1ldGhvZCBpcyBjYWxsZWQgdHdpY2UsIG9uY2UgZm9yIGRlZmluZVByb3BlcnR5IGFuZCBmb3Igc2V0IHRyYXBcbiAgICAgICAgICAgIGxldCBvID0gbmV3IE9ic2VydmVyKGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHRoaXMpICYmIHRoaXMgaW5zdGFuY2VvZiBQcm94eU9ic2VydmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJ0aGlzIGlzIG5vdCBQcm94eU9ic2VydmVyXCIpKVxuICAgICAgICAgICAgfSwgdHJ1ZSlcblxuICAgICAgICAgICAgbGV0IHJlYWxTdWJqZWN0ID0ge1xuICAgICAgICAgICAgICAgIGE6IHtcbiAgICAgICAgICAgICAgICAgICAgYjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkOiA1XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcCA9IG5ldyBQcm94eU9ic2VydmVyKHJlYWxTdWJqZWN0KTtcbiAgICAgICAgICAgIGV4cGVjdChwKS5pcy5pbnN0YW5jZU9mKFByb3h5T2JzZXJ2ZXIpO1xuICAgICAgICAgICAgZXhwZWN0KHAuYXR0YWNoT2JzZXJ2ZXIobykpLmlzLmluc3RhbmNlT2YoUHJveHlPYnNlcnZlcik7XG5cbiAgICAgICAgICAgIGxldCBzID0gcC5nZXRTdWJqZWN0KCk7XG4gICAgICAgICAgICBsZXQgciA9IHAuZ2V0UmVhbFN1YmplY3QoKTtcblxuICAgICAgICAgICAgcy5hLmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHMuYS5iLmQgPSAyO1xuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQHNlZSBodHRwczovL2dpdGxhYi5zY2h1a2FpLmNvbS9vc3MvbGlicmFyaWVzL2phdmFzY3JpcHQvbW9uc3Rlci8tL2lzc3Vlcy80M1xuICAgICAqL1xuICAgIGRlc2NyaWJlKCdSZWZsZWN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdjaGVjayBSZWZsZWN0LnNldCgpIHdpdGggU3ViamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCByO1xuXG4gICAgICAgICAgICBjb25zdCBvYmogPSAobmV3IFByb3h5T2JzZXJ2ZXIoe30pKS5nZXRTdWJqZWN0KCk7XG5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBcInllcyFcIixcbiAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgXCJub1wiXG4gICAgICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgb2JqWydkYXRhJ10gPSB2YWx1ZVxuICAgICAgICAgICAgICAgIH0pLnRvLm5vdC50aHJvdygpO1xuICAgICAgICAgICAgICAgIC8vciA9IFJlZmxlY3Quc2V0KG9iaiwgJ2RhdGEnLCB2YWx1ZSlcbiAgICAgICAgICAgICAgICAvL2V4cGVjdChyKS50by5iZS50cnVlO1xuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0aGF0Jywge3RoYXQ6ICdjaGVja2VkMSd9XSxcbiAgICAgICAgICAgIFsndGhhdCcsIG5ldyBQcm94eSh7dGhhdDogJ2NoZWNrZWQyJ30sIHt9KV0sXG4gICAgICAgICAgICBbJ3RoYXQnLCAobmV3IFByb3h5T2JzZXJ2ZXIoe3RoYXQ6ICdjaGVja2VkMyd9KSkuZ2V0UmVhbFN1YmplY3QoKV0sXG4gICAgICAgICAgICBbJ3RoYXQnLCAobmV3IFByb3h5T2JzZXJ2ZXIoe3RoYXQ6ICdjaGVja2VkNCd9KSkuZ2V0U3ViamVjdCgpXVxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGtleSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IHRhcmdldCA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnY2hlY2sgUmVmbGVjdC5zZXQoJyArIGtleSArICcsJyArIEpTT04uc3RyaW5naWZ5KHRhcmdldCkgKyAnKSBzaG91bGQgd3JpdGFibGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlO1xuXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBcIjFcIixcbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAodmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdChSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCwga2V5KVsnd3JpdGFibGUnXSwgJ3dyaXRhYmxlIGZvciAnICsgdmFsdWUgKyAnIHNob3VsZCByZXR1cm4gdHJ1ZScpLnRvLmJlLnRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KFJlZmxlY3Quc2V0KHRhcmdldCwga2V5LCB2YWx1ZSksICdzZXQgZm9yICcgKyB2YWx1ZSArICcgc2hvdWxkIHJldHVybiB0cnVlJykudG8uYmUudHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICBleHBlY3QoUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQsIGtleSlbJ3dyaXRhYmxlJ10sICd3cml0YWJsZSBmb3IgJyArIHZhbHVlICsgJyBzaG91bGQgcmV0dXJuIHRydWUnKS50by5iZS50cnVlO1xuXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICB9KVxuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdub3RpZnkgb2JzZXJ2ZXIgd2l0aCBjaGFuZ2VzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBvcmlnaW5hbCwgb2JzZXJ2ZXIsIHByb3h5O1xuXG4gICAgICAgIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBvcmlnaW5hbCA9IHt9O1xuICAgICAgICAgICAgcHJveHkgPSBuZXcgUHJveHlPYnNlcnZlcihvcmlnaW5hbCk7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWydhJywgNCwgSlNPTi5zdHJpbmdpZnkoe2E6IDR9KV0sXG4gICAgICAgICAgICBbJ2InLCA5LCBKU09OLnN0cmluZ2lmeSh7YTogNCwgYjogOX0pXVxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2V0IGtleSAnICsgYSArICcgdmFsdWUgJyArIGIgKyAnIGV4cGVjdCAnICsgYywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgICAgICAgICAgICBvYnNlcnZlciA9IG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0UmVhbFN1YmplY3QoKSkpLmlzLmVxdWFsKGMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhY2hPYnNlcnZlcihvYnNlcnZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgcHJveHkuYXR0YWNoT2JzZXJ2ZXIob2JzZXJ2ZXIpXG4gICAgICAgICAgICAgICAgbGV0IHN1YmplY3QgPSBwcm94eS5nZXRTdWJqZWN0KClcblxuICAgICAgICAgICAgICAgIHN1YmplY3RbYV0gPSBiO1xuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdub3RpZnkgb2JzZXJ2ZXIgJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIHByb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgcHJveHkgPSBuZXcgUHJveHlPYnNlcnZlcih7fSk7XG4gICAgICAgICAgICBsZXQgb2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHByb3h5LmF0dGFjaE9ic2VydmVyKG9ic2VydmVyKVxuICAgICAgICAgICAgZXhwZWN0KHByb3h5Lm5vdGlmeU9ic2VydmVycygpKS5pcy5pbnN0YW5jZU9mKFByb21pc2UpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxufSlcblxuIiwgImltcG9ydCB7XG4gICAgVmVyc2lvblxufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3ZlcnNpb24ubWpzXCJcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ1ZlcnNpb24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmNvbXBhcmVUbygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnMS4yLjMnLCAnMS4yLjMnLCAwXSxcbiAgICAgICAgICAgIFsnMS4yLjInLCAnMS4yLjMnLCAtMV0sXG4gICAgICAgICAgICBbJzInLCAnMi4wLjAnLCAwXSxcbiAgICAgICAgICAgIFsnMS4yLjQnLCAnMS4yLjMnLCAxXVxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIHJldHVybiAnICsgYyArICcgd2hlbiB0aGUgdmFsdWUgJyArIGEgKyAnIGlzICcgKyBiICsgJycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IFZlcnNpb24oYSkuY29tcGFyZVRvKGIpKS50by5iZS5lcXVhbChjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy50b1N0cmluZygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsnMS4xLjEnLCAnMi4zJywgMywgJzEuMi4zJ10sXG4gICAgICAgICAgICBbJzEuMi40JywgJzEuMi4zJywgNSwgJzEuMS41J11cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBkID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdzaG91bGQgcmV0dXJuICcgKyBkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBWZXJzaW9uKGEsIGIsIGMpLnRvU3RyaW5nKCkpLnRvLmJlLmVxdWFsKGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pXG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtnZXRHbG9iYWwsIGdldEdsb2JhbE9iamVjdCwgZ2V0R2xvYmFsRnVuY3Rpb259IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvZ2xvYmFsLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ0dsb2JhbCcsIGZ1bmN0aW9uICgpIHtcbiAgICBkZXNjcmliZSgnZ2V0R2xvYmFsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGdsb2JhbCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgdCA9IHR5cGVvZiBnZXRHbG9iYWwoKTtcbiAgICAgICAgICAgIGV4cGVjdCh0KS50by5iZS5lcXVhbCgnb2JqZWN0JylcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcbiAgICBkZXNjcmliZSgnZ2V0R2xvYmFsRnVuY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gZ2xvYmFsIGZ1bmN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHQgPSB0eXBlb2YgZ2V0R2xvYmFsRnVuY3Rpb24oJ3BhcnNlSW50Jyk7XG4gICAgICAgICAgICBleHBlY3QodCkudG8uYmUuZXF1YWwoJ2Z1bmN0aW9uJylcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcbiAgICBkZXNjcmliZSgnZ2V0R2xvYmFsT2JqZWN0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGdsb2JhbCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgdCA9IHR5cGVvZiBnZXRHbG9iYWxPYmplY3QoJ0pTT04nKTtcbiAgICAgICAgICAgIGV4cGVjdCh0KS50by5iZS5lcXVhbCgnb2JqZWN0JylcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcbn0pO1xuXG4iLCAiaW1wb3J0IHtPYnNlcnZlckxpc3R9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXJsaXN0Lm1qc1wiO1xuaW1wb3J0IHtPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlci5tanNcIjtcbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmRlc2NyaWJlKCdPYnNlcnZlckxpc3QnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnLmF0dGFjaCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgT2JzZXJ2ZXJMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVyTGlzdCA9IG5ldyBPYnNlcnZlckxpc3QoKVxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG9ic2VydmVyTGlzdC5hdHRhY2gobmV3IE9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uYmUuaW5zdGFuY2VPZihPYnNlcnZlckxpc3QpXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuZGV0YWNoKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gaW5zdGFuY2VvZiBPYnNlcnZlckxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgb2JzZXJ2ZXJMaXN0ID0gbmV3IE9ic2VydmVyTGlzdCgpXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gb2JzZXJ2ZXJMaXN0LmRldGFjaChuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS50by5iZS5pbnN0YW5jZU9mKE9ic2VydmVyTGlzdClcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5ub3RpZnkoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCByZXN1bHRWYWx1ZSA9IFwiWWVzIVwiO1xuICAgICAgICBsZXQgbztcbiAgICAgICAgbGV0IG9ic2VydmVyTGlzdDtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIG8gPSBuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRWYWx1ZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIG9ic2VydmVyTGlzdCA9IG5ldyBPYnNlcnZlckxpc3QoKVxuICAgICAgICAgICAgb2JzZXJ2ZXJMaXN0LmF0dGFjaChvKVxuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgaW5zdGFuY2VvZiBQcm9taXNlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyTGlzdC5ub3RpZnkoe30pKS50by5iZS5pbnN0YW5jZU9mKFByb21pc2UpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuICcgKyByZXN1bHRWYWx1ZSwgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IG9iaiA9IHt9XG5cbiAgICAgICAgICAgIG9ic2VydmVyTGlzdC5ub3RpZnkob2JqKS50aGVuKHIgPT4ge1xuICAgICAgICAgICAgICAgIGV4cGVjdChyKS50by5iZS5hbignYXJyYXknKS50aGF0LmluY2x1ZGVzKHJlc3VsdFZhbHVlKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5jb250YWlucygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBvMSA9IG5ldyBPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgbzIgPSBuZXcgT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIG5vdCBjb250YWluIG8xIGFuZCBvMicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvYnNlcnZlckxpc3QgPSBuZXcgT2JzZXJ2ZXJMaXN0KClcblxuICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyTGlzdC5jb250YWlucyhvMSkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyTGlzdC5jb250YWlucyhvMikpLnRvLmJlLmZhbHNlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIGNvbnRhaW4gbzIgYW5kIG5vdCBvMScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvYnNlcnZlckxpc3QgPSBuZXcgT2JzZXJ2ZXJMaXN0KClcbiAgICAgICAgICAgIG9ic2VydmVyTGlzdC5hdHRhY2gobzIpXG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8xKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8yKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBjb250YWluIG8xIGFuZCBub3QgbzInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgb2JzZXJ2ZXJMaXN0ID0gbmV3IE9ic2VydmVyTGlzdCgpXG4gICAgICAgICAgICBvYnNlcnZlckxpc3QuYXR0YWNoKG8xKVxuICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyTGlzdC5jb250YWlucyhvMSkpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBleHBlY3Qob2JzZXJ2ZXJMaXN0LmNvbnRhaW5zKG8yKSkudG8uYmUuZmFsc2U7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgaXQoJ3Nob3VsZCBjb250YWluIG8yIGFuZCBvMScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxldCBvYnNlcnZlckxpc3QgPSBuZXcgT2JzZXJ2ZXJMaXN0KClcbiAgICAgICAgICAgIG9ic2VydmVyTGlzdC5hdHRhY2gobzIpLmF0dGFjaChvMSlcbiAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlckxpc3QuY29udGFpbnMobzEpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyTGlzdC5jb250YWlucyhvMikpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG59KTtcblxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtlcXVpcFdpdGhJbnRlcm5hbH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9pbnRlcm5hbC5tanNcIjtcbmltcG9ydCB7T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5cbmNsYXNzIFNvbWVSYW5kb21DbGFzczEgZXh0ZW5kcyBPYmplY3Qge1xuXG4gICAgZG9pdCgpIHtcbiAgICAgICAgcmV0dXJuIFwiZG9uZVwiO1xuICAgIH1cbn1cblxuY2xhc3MgU29tZVJhbmRvbUNsYXNzMiBleHRlbmRzIE9iamVjdCB7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgZXF1aXBXaXRoSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICB9XG5cbiAgICBnZXQgZGVmYXVsdEludGVybmFsKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGVzdDogXCJ0ZXN0XCJcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5kZXNjcmliZSgnQmFzZSBpbmplY3Qgd2l0aCBvcHRpb25zJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ25ldyBTb21lUmFuZG9tQ2xhc3MnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ2lzIGluc3RhbmNlIG9mIFNvbWVSYW5kb21DbGFzczEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IFNvbWVSYW5kb21DbGFzczIpLm5vdC50by5iZS5pbnN0YW5jZU9mKFNvbWVSYW5kb21DbGFzczEpO1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBTb21lUmFuZG9tQ2xhc3MyKS50by5iZS5pbnN0YW5jZU9mKFNvbWVSYW5kb21DbGFzczIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgU29tZVJhbmRvbUNsYXNzMicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgU29tZVJhbmRvbUNsYXNzMSkudG8uYmUuaW5zdGFuY2VPZihTb21lUmFuZG9tQ2xhc3MxKTtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgU29tZVJhbmRvbUNsYXNzMSkubm90LnRvLmJlLmluc3RhbmNlT2YoU29tZVJhbmRvbUNsYXNzMik7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdFeHRlbmRzIFNvbWVSYW5kb21DbGFzcyB3aXRoIGludGVybmFscycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnYXR0YWNoIGFuZCBub3RpZnkgaW50ZXJuYWwgb2JzZXJ2ZXInLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgYyA9IG5ldyBTb21lUmFuZG9tQ2xhc3MyO1xuICAgICAgICAgICAgYy5hdHRhY2hJbnRlcm5hbE9ic2VydmVyKG5ldyBPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICBjLnNldEludGVybmFsKFwidGVzdFwiLCBcInRlc3RcIik7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2F0dGFjaCBhbmQgcmVtb3ZlIGludGVybmFsIG9ic2VydmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgYyA9IG5ldyBTb21lUmFuZG9tQ2xhc3MyO1xuXG5cbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE9ic2VydmVyKCgpID0+IHtcblxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChjLmNvbnRhaW5zSW50ZXJuYWxPYnNlcnZlcihvYnNlcnZlcikpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgYy5hdHRhY2hJbnRlcm5hbE9ic2VydmVyKG9ic2VydmVyKTtcbiAgICAgICAgICAgIGV4cGVjdChjLmNvbnRhaW5zSW50ZXJuYWxPYnNlcnZlcihvYnNlcnZlcikpLnRvLmJlLnRydWU7XG4gICAgICAgICAgICBjLmRldGFjaEludGVybmFsT2JzZXJ2ZXIob2JzZXJ2ZXIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuY29udGFpbnNJbnRlcm5hbE9ic2VydmVyKG9ic2VydmVyKSkudG8uYmUuZmFsc2U7XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoXCJnZXRJbnRlcm5hbCBhbmQgc2V0SW50ZXJuYWxcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgYyA9IG5ldyBTb21lUmFuZG9tQ2xhc3MyO1xuICAgICAgICAgICAgZXhwZWN0KGMuc2V0SW50ZXJuYWwoXCJ0ZXN0XCIsIFwieWVhaFwiKSkudG8uYmUuaW5zdGFuY2VPZihTb21lUmFuZG9tQ2xhc3MyKTtcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdFwiKSkudG8uYmUuZXF1YWwoXCJ5ZWFoXCIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdChcImRlYWwgd2l0aCBkZWZhdWx0IHZhbHVlc1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXN0Q2xhc3MgPSBjbGFzcyBleHRlbmRzIE9iamVjdCB7XG4gICAgICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIGVxdWlwV2l0aEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZ2V0IGludGVybmFsRGVmYXVsdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXN0OiBcInh5elwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgY29uc3QgYyA9IG5ldyB0ZXN0Q2xhc3M7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3RcIikpLnRvLmJlLmVxdWFsKFwieHl6XCIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0MlwiLCBcImFiY1wiKSkudG8uYmUuZXF1YWwoXCJhYmNcIik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KFwiZGVhbCB3aXRoIGRlZmF1bHRzIGZyb20gZGVmYXVsdHNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgdGVzdENsYXNzID0gY2xhc3MgZXh0ZW5kcyBPYmplY3Qge1xuICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgICAgICAgICBlcXVpcFdpdGhJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGdldCBpbnRlcm5hbERlZmF1bHRzKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVzdDogXCJ4eXpcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0ZXN0Q2xhc3MyID0gY2xhc3MgZXh0ZW5kcyB0ZXN0Q2xhc3Mge1xuICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgICAgICAgICAgICBlcXVpcFdpdGhJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGdldCBpbnRlcm5hbERlZmF1bHRzKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIuaW50ZXJuYWxEZWZhdWx0cywge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVzdDI6IFwiYWJjXCJcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGMgPSBuZXcgdGVzdENsYXNzMjtcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdFwiKSkudG8uYmUuZXF1YWwoXCJ4eXpcIik7XG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3QyXCIpKS50by5iZS5lcXVhbChcImFiY1wiKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdChcInNldCBtdWx0aXBsZSB2YWx1ZXNcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgYyA9IG5ldyBTb21lUmFuZG9tQ2xhc3MyO1xuICAgICAgICAgICAgZXhwZWN0KGMuc2V0SW50ZXJuYWxzKHtcbiAgICAgICAgICAgICAgICB0ZXN0OiBcInllYWhcIixcbiAgICAgICAgICAgICAgICB0ZXN0MjogXCJ5ZWFoMlwiXG4gICAgICAgICAgICB9KSkudG8uYmUuaW5zdGFuY2VPZihTb21lUmFuZG9tQ2xhc3MyKTtcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdFwiKSkudG8uYmUuZXF1YWwoXCJ5ZWFoXCIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0MlwiKSkudG8uYmUuZXF1YWwoXCJ5ZWFoMlwiKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgYy5zZXRJbnRlcm5hbHMoe1xuICAgICAgICAgICAgICAgIHRlc3QyOiBcInllYWgyLW5ld1wiLFxuICAgICAgICAgICAgICAgIHRlc3QzOiBcInllYWgzXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBleHBlY3QoYy5nZXRJbnRlcm5hbChcInRlc3RcIikpLnRvLmJlLmVxdWFsKFwieWVhaFwiKTtcbiAgICAgICAgICAgIGV4cGVjdChjLmdldEludGVybmFsKFwidGVzdDJcIikpLnRvLmJlLmVxdWFsKFwieWVhaDItbmV3XCIpO1xuICAgICAgICAgICAgZXhwZWN0KGMuZ2V0SW50ZXJuYWwoXCJ0ZXN0M1wiKSkudG8uYmUuZXF1YWwoXCJ5ZWFoM1wiKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuXG59KSIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtPYnNlcnZhYmxlUXVldWV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2YWJsZXF1ZXVlLm1qc1wiO1xuaW1wb3J0IHtPYnNlcnZlcn0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9vYnNlcnZlci5tanNcIjtcblxuZGVzY3JpYmUoJ09ic2VydmFibGVRdWV1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICBkZXNjcmliZSgnT2JzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBub3RpZnknLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IHF1ZXVlID0gbmV3IE9ic2VydmFibGVRdWV1ZTtcbiAgICAgICAgICAgIGxldCBvID0gbmV3IE9ic2VydmVyKChxKSA9PiB7XG4gICAgICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHF1ZXVlLmF0dGFjaE9ic2VydmVyKG8pO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCgnYScpKS50by5iZS5pbnN0YW5jZU9mKE9ic2VydmFibGVRdWV1ZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufSkiLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtwYXJzZURhdGFVUkx9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvZGF0YXVybC5tanNcIjtcblxuZGVzY3JpYmUoJ0RhdGF1cmwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBbXG4gICAgICAgIFtcIiBkYXRhOnRleHQvaHRtbCwlM0NoMSUzRUhlbGxvJTJDJTIwV29ybGQhJTNDJTJGaDElM0VcIl0sXG4gICAgICAgIFtcImRhdGE6dGV4dC9odG1sO2NoYXJzZXQ9VVMtQVNDSUksJTNDaDElM0VIZWxsbyElM0MlMkZoMSUzRVwiXSxcbiAgICAgICAgW1wiZGF0YTosQSUyMGJyaWVmJTIwbm90ZVwiLCAnZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9VVMtQVNDSUksQSUyMGJyaWVmJTIwbm90ZSddLFxuICAgICAgICBbXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFBUU1BQUFBbFBXMGlBQUFBQmxCTVZFVUFBQUQvLy8rbDJaL2RBQUFBTTBsRVFWUjRuR1A0LzUvaC8xK0cvNThaRHJBejNEL01jSDh5dzgzTkREZU5HZTRVZzlDOXp3ejNnVkxNREEvQTZQOS9BRkdHRnlqT1hadFFBQUFBQUVsRlRrU3VRbUNDXCJdLFxuICAgICAgICBbXCIgZGF0YTosSGVsbG8lMkMlMjBXb3JsZCFcIiwgJ2RhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PVVTLUFTQ0lJLEhlbGxvJTJDJTIwV29ybGQhJ10sXG4gICAgICAgIFtcIiAgIGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQWdBQUFBSUJBTUFBQUEySWFPNEFBQUFGVkJNVkVYazVPVG41K2Z0N2UzMTlmWDI5dmI1K2ZuLy8vKytHVW1WQUFBQUxVbEVRVlFJSFdOSUNuWUxabkFMVGdwbU1HWUlGV1lJWlRBMlpGQXpUVEZsU0RGVk13VnlRaG1Bd3NZTUFLRGFCeTBheFgvaUFBQUFBRWxGVGtTdVFtQ0MgICBcIl0sXG4gICAgICAgIFtcIiBkYXRhOixIZWxsbyBXb3JsZCFcIiwgJ2RhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PVVTLUFTQ0lJLEhlbGxvJTIwV29ybGQhJ10sXG4gICAgICAgIFtcImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQWdBQUFBSUJBTUFBQUEySWFPNEFBQUFGVkJNVkVYazVPVG41K2Z0N2UzMTlmWDI5dmI1K2ZuLy8vKytHVW1WQUFBQUxVbEVRVlFJSFdOSUNuWUxabkFMVGdwbU1HWUlGV1lJWlRBMlpGQXpUVEZsU0RGVk13VnlRaG1Bd3NZTUFLRGFCeTBheFgvaUFBQUFBRWxGVGtTdVFtQ0NcIl0sXG4gICAgICAgIFtcIiBkYXRhOnRleHQvcGxhaW47YmFzZTY0LFNHVnNiRzhzSUZkdmNteGtJUSUzRCUzRFwiXVxuXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgIGlmIChiID09PSB1bmRlZmluZWQpIGIgPSBhLnRyaW0oKTtcblxuXG4gICAgICAgIGl0KCdwYXJzZURhdGFVUkwoJyArIGEgKyAnKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgZXhwZWN0KHBhcnNlRGF0YVVSTChhKS50b1N0cmluZygpKS50by5iZS5lcXVhbChiKTtcbiAgICAgICAgfSlcblxuICAgIH0pO1xuXG4gICAgW1xuICAgICAgICBbXCJkYXRheGJhc2U2NFwiXSxcbiAgICAgICAgW1wiZGF0YTpIZWxsb1dvcmxkXCJdLFxuICAgICAgICBbXCJkYXRhOnRleHQvaHRtbDtjaGFyc2V0PSwlM0NoMSUzRUhlbGxvISUzQyUyRmgxJTNFXCJdLFxuICAgICAgICBbXCJkYXRhOnRleHQvaHRtbDtjaGFyc2V0LCUzQ2gxJTNFSGVsbG8hJTNDJTJGaDElM0VcIiwgXCJkYXRhOmJhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkFBQUFBUUFRTUFBQUFsUFcwaUFBQUFCbEJNVkVVQUFBRC8vLytsMlovZEFBQUFNMGxFUVZSNG5HUDQvNS9oLzErRy81OFpEckF6M0QvTWNIOHl3ODNORERlTkdlNFVnOUM5end6M2dWTE1EQS9BNlA5L0FGR0dGeWpPWFp0UUFBQUFBRWxGVGtTdVFtQ0NcIl0sXG4gICAgICAgIFtcIlwiXSxcbiAgICAgICAgW1wiaHR0cDovL3dpa2lwZWRpYS5vcmdcIl0sXG4gICAgICAgIFtcImJhc2U2NFwiXSxcbiAgICAgICAgW1wiaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJBQUFBQVFBUU1BQUFBbFBXMGlBQUFBQmxCTVZFVUFBQUQvLy8rbDJaL2RBQUFBTTBsRVFWUjRuR1A0LzUvaC8xK0cvNThaRHJBejNEL01jSDh5dzgzTkREZU5HZTRVZzlDOXp3ejNnVkxNREEvQTZQOS9BRkdHRnlqT1hadFFBQUFBQUVsRlRrU3VRbUNDXCJdXG5cbiAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuXG5cbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBleGNlcHRpb24gcGFyc2VEYXRhVVJMKCcgKyBhICsgJyknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGV4cGVjdCgoKSA9PiBwYXJzZURhdGFVUkwoYSkpLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgfSlcblxuICAgIH0pO1xuXG5cbn0pOyIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyB0b0JpbmFyeSwgZnJvbUJpbmFyeSB9O1xuXG4vKipcbiAqIFlvdSBjYW4gY2FsbCB0aGUgZnVuY3Rpb24gdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy50b0JpbmFyeSgpYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYmluYXJ5XG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4xOC4wXG4gKi9cbmZ1bmN0aW9uIHRvQmluYXJ5KHN0cmluZykge1xuXHRjb25zdCBjb2RlVW5pdHMgPSBuZXcgVWludDE2QXJyYXkodmFsaWRhdGVTdHJpbmcoc3RyaW5nKS5sZW5ndGgpO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGNvZGVVbml0cy5sZW5ndGg7IGkrKykge1xuXHRcdGNvZGVVbml0c1tpXSA9IHN0cmluZy5jaGFyQ29kZUF0KGkpO1xuXHR9XG5cblx0Y29uc3QgY2hhckNvZGVzID0gbmV3IFVpbnQ4QXJyYXkoY29kZVVuaXRzLmJ1ZmZlcik7XG5cdGxldCByZXN1bHQgPSBcIlwiO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgY2hhckNvZGVzLmJ5dGVMZW5ndGg7IGkrKykge1xuXHRcdHJlc3VsdCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2Rlc1tpXSk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFlvdSBjYW4gY2FsbCB0aGUgZnVuY3Rpb24gdmlhIHRoZSBtb25zdGVyIG5hbWVzcGFjZSBgTW9uc3Rlci5UeXBlcy5mcm9tQmluYXJ5KClgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBiaW5hcnlcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgc3RyaW5nXG4gKiBAbGljZW5zZSBBR1BMdjNcbiAqIEBzaW5jZSAxLjE4LjBcbiAqL1xuZnVuY3Rpb24gZnJvbUJpbmFyeShiaW5hcnkpIHtcblx0Y29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheSh2YWxpZGF0ZVN0cmluZyhiaW5hcnkpLmxlbmd0aCk7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRieXRlc1tpXSA9IGJpbmFyeS5jaGFyQ29kZUF0KGkpO1xuXHR9XG5cdGNvbnN0IGNoYXJDb2RlcyA9IG5ldyBVaW50MTZBcnJheShieXRlcy5idWZmZXIpO1xuXHRsZXQgcmVzdWx0ID0gXCJcIjtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjaGFyQ29kZXMubGVuZ3RoOyBpKyspIHtcblx0XHRyZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZXNbaV0pO1xuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtmcm9tQmluYXJ5LCB0b0JpbmFyeX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9iaW5hcnkubWpzXCI7XG5cbmRlc2NyaWJlKCdCaW5hcnknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBbXG4gICAgICAgIFsnYScsICdhXFx1MDAwMCddLFxuICAgICAgICBbJ1x1MjYzOScsICc5JiddLFxuICAgICAgICBbJ0lcdTAwRjF0XHUwMEVCcm5cdTAwRTJ0aVx1MDBGNG5cdTAwRTBsaXpcdTAwRTZ0aVx1MDBGOG4nLCAnSVxcdTAwMDBcdTAwRjFcXHUwMDAwdFxcdTAwMDBcdTAwRUJcXHUwMDAwclxcdTAwMDBuXFx1MDAwMFx1MDBFMlxcdTAwMDB0XFx1MDAwMGlcXHUwMDAwXHUwMEY0XFx1MDAwMG5cXHUwMDAwXHUwMEUwXFx1MDAwMGxcXHUwMDAwaVxcdTAwMDB6XFx1MDAwMFx1MDBFNlxcdTAwMDB0XFx1MDAwMGlcXHUwMDAwXHUwMEY4XFx1MDAwMG5cXHUwMDAwJ11cblxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgaXQoJ2Zyb21CaW5hcnkodG9CaW5hcnkoJyArIGEgKyAnKSkgc2hvdWxkIHdvcmsnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgciA9IHRvQmluYXJ5KGEpO1xuICAgICAgICAgICAgZXhwZWN0KHIpLnRvLmJlLmVxdWFsKGIpO1xuICAgICAgICAgICAgZXhwZWN0KGZyb21CaW5hcnkocikpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICB9KVxuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5cbmltcG9ydCB7T2JzZXJ2ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvb2JzZXJ2ZXIubWpzXCI7XG5cblxuZGVzY3JpYmUoJ09ic2VydmVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgbGV0IGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgIH07XG5cbiAgICBsZXQgb2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoY2FsbGJhY2spXG5cbiAgICBkZXNjcmliZSgnLmFkZFRhZygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnXSxcbiAgICAgICAgICAgIFsndGVzdDInXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdhZGRUYWcoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuIGluc3RhbmNlb2YgT2JzZXJ2ZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KG9ic2VydmVyLmFkZFRhZyhhKSkuaXMuaW5zdGFuY2VPZihPYnNlcnZlcilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5yZW1vdmVUYWcoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJ10sXG4gICAgICAgICAgICBbJ3Rlc3QyJ10sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgncmVtb3ZlVGFnKCcgKyBhICsgJykgc2hvdWxkIHJldHVybiBpbnN0YW5jZW9mIE9ic2VydmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChvYnNlcnZlci5yZW1vdmVUYWcoYSkpLmlzLmluc3RhbmNlT2YoT2JzZXJ2ZXIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuaGFzVGFnKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgWyd0ZXN0MicsIHRydWVdLFxuICAgICAgICAgICAgWyd0ZXN0MycsIGZhbHNlXSxcbiAgICAgICAgICAgIFsndGVzdDQnLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgdGVtcE9ic2VydmVyID0gbmV3IE9ic2VydmVyKGNhbGxiYWNrKVxuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ29ic2VydmVyLmhhc3RUYWcoJyArIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBpZiAoYiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0ZW1wT2JzZXJ2ZXIuYWRkVGFnKGEpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0ZW1wT2JzZXJ2ZXIuaGFzVGFnKGEpKS5pcy5iZS50cnVlXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHRlbXBPYnNlcnZlci5oYXNUYWcoYSkpLmlzLmJlLmZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnVwZGF0ZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCBvYmogPSB7fVxuICAgICAgICBpdCgnb2JzZXJ2ZXIudXBkYXRlKCcgKyBvYmogKyAnKSBpcyAnICsgMSArIDMgKyA2LCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgdGVtcE9ic2VydmVyID0gbmV3IE9ic2VydmVyKGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgKyBiICsgY1xuICAgICAgICAgICAgfSwgMSwgMywgNilcblxuXG4gICAgICAgICAgICB0ZW1wT2JzZXJ2ZXIudXBkYXRlKG9iaikudGhlbihhID0+IHtcbiAgICAgICAgICAgICAgICBleHBlY3QoYSkuaXMuZXF1YWwoMSArIDMgKyA2KVxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3J1biBmdW5jdGlvbiAudXBkYXRlKCkgc2V2ZXJhbCB0aW1lcycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgb2JqID0ge31cbiAgICAgICAgaXQoJ29ic2VydmVyLnVwZGF0ZSgnICsgb2JqICsgJykgaXMgJyArIDEgKyAzICsgNiwgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgbGV0IHRlbXBPYnNlcnZlciA9IG5ldyBPYnNlcnZlcihmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHRlbXBPYnNlcnZlci51cGRhdGUob2JqKTtcbiAgICAgICAgICAgIHRlbXBPYnNlcnZlci51cGRhdGUob2JqKTtcbiAgICAgICAgICAgIHRlbXBPYnNlcnZlci51cGRhdGUob2JqKTtcbiAgICAgICAgICAgIHRlbXBPYnNlcnZlci51cGRhdGUob2JqKTtcbiAgICAgICAgICAgIHRlbXBPYnNlcnZlci51cGRhdGUob2JqKS50aGVuKF8gPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuZ2V0VGFncygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFtbJ3Rlc3QxJywgJ3Rlc3QyJywgJ3Rlc3QzJywgJ3Rlc3Q0J10sIDRdLFxuICAgICAgICAgICAgW1sndGVzdDEnLCAndGVzdDEnLCAndGVzdDMnLCAndGVzdDQnXSwgM10sIC8vIGRvdWJsZSB0ZXN0MSAoc2V0IGlzIHVuaXF1ZXVlKVxuICAgICAgICAgICAgW1sndGVzdDEnLCAndGVzdDEnLCAndGVzdDEnLCAndGVzdDQnXSwgMl0sIC8vIG11bHRpcGxlIHRlc3QxIChzZXQgaXMgdW5pcXVldWUpXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgdGVtcE9ic2VydmVyID0gbmV3IE9ic2VydmVyKGNhbGxiYWNrKVxuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIG1heCA9IGEubGVuZ3RoOyBpIDwgbWF4OyBpKyspIHtcbiAgICAgICAgICAgICAgICB0ZW1wT2JzZXJ2ZXIuYWRkVGFnKGFbaV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpdCgnb2JzZXJ2ZXIuZ2V0VGFncygnICsgYSArICcpIGlzIGFycmF5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0ZW1wT2JzZXJ2ZXIuZ2V0VGFncygpKS50by5iZS5hbignYXJyYXknKVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGl0KCdvYnNlcnZlci5nZXRUYWdzKCcgKyBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiArIFwiIHRhZ3NcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0ZW1wT2JzZXJ2ZXIuZ2V0VGFncygpLmxlbmd0aCkuaXMuZXF1YWwoYik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICIvKipcbiAqIENvcHlyaWdodCBcdTAwQTkgc2NodWthaSBHbWJIIGFuZCBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMsIHt7Y29weVJpZ2h0WWVhcn19LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTm9kZSBtb2R1bGU6IEBzY2h1a2FpL21vbnN0ZXJcbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAzIChBR1BMdjMpLlxuICogVGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZSBjYW4gYmUgZm91bmQgYXQ6IGh0dHBzOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC0zLjAuZW4uaHRtbFxuICpcbiAqIEZvciB0aG9zZSB3aG8gZG8gbm90IHdpc2ggdG8gYWRoZXJlIHRvIHRoZSBBR1BMdjMsIGEgY29tbWVyY2lhbCBsaWNlbnNlIGlzIGF2YWlsYWJsZS5cbiAqIEFjcXVpcmluZyBhIGNvbW1lcmNpYWwgbGljZW5zZSBhbGxvd3MgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgY29tcGx5aW5nIHdpdGggdGhlIEFHUEx2MyB0ZXJtcy5cbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHB1cmNoYXNpbmcgYSBjb21tZXJjaWFsIGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHNjaHVrYWkgR21iSC5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjBcbiAqL1xuXG5pbXBvcnQgeyB2YWxpZGF0ZVN0cmluZyB9IGZyb20gXCIuL3ZhbGlkYXRlLm1qc1wiO1xuXG5leHBvcnQgeyBlc2NhcGVTdHJpbmcgfTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHByZWZpeGVzIGFsbCBzcGVjaWFsIGNoYXJhY3RlcnMgdGhhdCBtYXkgYXBwZWFyIGluIGEgcmVnZXggd2l0aCBhIHNsYXNoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICogQGxpY2Vuc2UgQUdQTHYzXG4gKiBAc2luY2UgMS4yNi4wXG4gKiBAY29weXJpZ2h0IHNjaHVrYWkgR21iSFxuICogQHRocm93cyB7VHlwZUVycm9yfSB2YWx1ZSBpcyBub3QgYSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZXNjYXBlU3RyaW5nKHZhbHVlKSB7XG5cdHJldHVybiB2YWxpZGF0ZVN0cmluZyh2YWx1ZSlcblx0XHQucmVwbGFjZSgvW3xcXFxce30oKVtcXF1eJCsqPy5dL2csIFwiXFxcXCQmXCIpXG5cdFx0LnJlcGxhY2UoLy0vZywgXCJcXFxceDJkXCIpO1xufVxuIiwgIlxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7ZXNjYXBlU3RyaW5nfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3JlZ2V4Lm1qc1wiXG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cblxuZGVzY3JpYmUoJ2VzY2FwZVN0cmluZycsIGZ1bmN0aW9uICgpIHtcblxuICAgIGJlZm9yZShmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgIGxldCBwcm9taXNlcyA9IFtdXG4gICAgICAgIHByb21pc2VzLnB1c2goaW5pdEpTRE9NKCkpO1xuICAgICAgICBpZighZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuXG5cbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG4gICAgXG4gICAgW1xuICAgICAgICBbJ3Rlc3QxJywgJ3Rlc3QxJ10sXG4gICAgICAgIFsnJHsnLCAnXFxcXCRcXFxceyddLFxuICAgICAgICBbJ2kxOG57JywgJ2kxOG5cXFxceyddLFxuICAgICAgICBbJy8vJywgJy8vJ10sXG4gICAgICAgIFsnXFxcXCcsICdcXFxcXFxcXCddLFxuICAgICAgIFxuICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgaXQoJ2VzY2FwZVN0cmluZygnICsgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChlc2NhcGVTdHJpbmcoYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG5cbn0pO1xuXG4iLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ1JhbmRvbUlEJywgZnVuY3Rpb24gKCkge1xuXG4gICAgY2xhc3MgUmFuZG9tSUQge31cbiAgICBcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBpZighZ2xvYmFsVGhpc1snY3J5cHRvJ10pIHtcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiQHBlY3VsaWFyL3dlYmNyeXB0b1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgICAgIGdsb2JhbFRoaXNbJ2NyeXB0byddID0gbmV3IG0uQ3J5cHRvKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgfVxuXG4gICAgICAgIHByb21pc2VzLnB1c2goaW1wb3J0KFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3JhbmRvbWlkLm1qc1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgUmFuZG9tSUQgPSBtLlJhbmRvbUlEO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pKVxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcblxuICAgIH0pOyAgICBcbiAgICBcbiAgICBkZXNjcmliZSgnLnRvU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBpZCA9IG5ldyBSYW5kb21JRCgpXG4gICAgICAgIGxldCByZXN1bHQgPSBpZC50b1N0cmluZygpO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkuaXMuYSgnc3RyaW5nJylcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICJpbXBvcnQge0lEfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2lkLm1qc1wiO1xuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuZGVzY3JpYmUoJ0lEJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHByb21pc2VzID0gW11cbiAgICAgICAgaWYoIWdsb2JhbFRoaXNbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbihtID0+IHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzWydjcnlwdG8nXSA9IG5ldyBtLkNyeXB0bygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgIH1cblxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcblxuICAgIH0pOyAgICBcbiAgICBcbiAgICBkZXNjcmliZSgnLnRvU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGxldCBpZCA9IG5ldyBJRCgpXG4gICAgICAgIGxldCByZXN1bHQgPSBpZC50b1N0cmluZygpO1xuXG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkuaXMuYSgnc3RyaW5nJylcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICBpdCgnc2hvdWxkIHJldHVybiBhIHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgSUQoJ3RleHQxNDI1aWQnKS50b1N0cmluZygpKS5pcy5lcXVhbCgndGV4dDE0MjVpZDEnKVxuICAgICAgICAgICAgZXhwZWN0KG5ldyBJRCgndGV4dDE0MjVpZCcpLnRvU3RyaW5nKCkpLmlzLmVxdWFsKCd0ZXh0MTQyNWlkMicpXG4gICAgICAgICAgICBleHBlY3QobmV3IElEKCd0ZXh0MTQyNWlkJykudG9TdHJpbmcoKSkuaXMuZXF1YWwoJ3RleHQxNDI1aWQzJylcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgnVVVJRCcsIGZ1bmN0aW9uICgpIHtcblxuICAgIGNsYXNzIFVVSUQge31cbiAgICBcbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICBsZXQgcHJvbWlzZXMgPSBbXVxuICAgICAgICBcbiAgICAgICAgaWYoIWdsb2JhbFRoaXNbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbihtID0+IHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzWydjcnlwdG8nXSA9IG5ldyBtLkNyeXB0bygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIFxuICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy91dWlkLm1qc1wiKS50aGVuKG0gPT4ge1xuICAgICAgICAgICAgVVVJRCA9IG0uVVVJRDtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KSlcbiAgICAgICAgXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcblxuICAgIH0pOyAgICBcbiAgICBcbiAgICBkZXNjcmliZSgnLnRvU3RyaW5nKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgcmV0dXJuIGEgc3RyaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IHV1aWQgPSBuZXcgVVVJRCgpXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gdXVpZC50b1N0cmluZygpO1xuXG4gICAgICAgICAgICBleHBlY3QocmVzdWx0KS5pcy5hKCdzdHJpbmcnKVxuICAgICAgICAgICAgZXhwZWN0KHJlc3VsdC5sZW5ndGgpLmlzLmVxdWFsKDM2KVxuICAgICAgICB9KTtcblxuICAgICAgICBpdCgndGVzdCBmb3JtYXQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgbGV0IHV1aWQgPSBuZXcgVVVJRCgpXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gdXVpZC50b1N0cmluZygpO1xuXG4gICAgICAgICAgICBjb25zdCByZWdleEV4cCA9IC9eW0EtRlxcZF17OH0tW0EtRlxcZF17NH0tNFtBLUZcXGRdezN9LVs4OUFCXVtBLUZcXGRdezN9LVtBLUZcXGRdezEyfSQvaTtcblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyMDAwOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCB1ID0gbmV3IFVVSUQoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSByZWdleEV4cC50ZXN0KHUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHIgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZSgnbm8gdXVpZCAnICsgdSArICcgPT4gJyArIHIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkb25lKCk7XG5cbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxufSk7XG5cbiIsICJpbXBvcnQge1xuICAgIGlzUHJpbWl0aXZlLFxuICAgIGlzQm9vbGVhbixcbiAgICBpc1N0cmluZyxcbiAgICBpc09iamVjdCxcbiAgICBpc0FycmF5LFxuICAgIGlzSW5zdGFuY2UsXG4gICAgaXNGdW5jdGlvbixcbiAgICBpc0l0ZXJhYmxlLFxuICAgIGlzSW50ZWdlcixcbiAgICBpc1N5bWJvbFxufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2lzLm1qc1wiO1xuXG5cbmltcG9ydCB7SUR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzXCJcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuZGVzY3JpYmUoJ0lzJywgZnVuY3Rpb24gKCkge1xuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgbGV0IHByb21pc2VzID0gW11cbiAgICAgICAgaWYoIWdsb2JhbFRoaXNbJ2NyeXB0byddKSB7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKGltcG9ydChcIkBwZWN1bGlhci93ZWJjcnlwdG9cIikudGhlbihtID0+IHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzWydjcnlwdG8nXSA9IG5ldyBtLkNyeXB0bygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgIH1cblxuXG4gICAgICAgIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICB9KTtcblxuICAgIH0pOyAgICBcbiAgICBcbiAgICBkZXNjcmliZSgnLmlzUHJpbWl0aXZlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIHRydWVdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgdHJ1ZV0sXG4gICAgICAgICAgICBbbnVsbCwgdHJ1ZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIHRydWVdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgdHJ1ZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgW3RydWUsIHRydWVdLFxuICAgICAgICAgICAgWzQuNSwgdHJ1ZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIHRydWVdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc1ByaW1pdGl2ZSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzUHJpbWl0aXZlKGEpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcbiAgICBkZXNjcmliZSgnLmlzU3ltYm9sKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgdHJ1ZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmlzU3ltYm9sKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNTeW1ib2woYSkpLmlzLmVxdWFsKGIpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5pc0ludGVnZXIoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgdHJ1ZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNJbnRlZ2VyKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNJbnRlZ2VyKGEpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuaXNJdGVyYWJsZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCB0cnVlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmlzSXRlcmFibGUoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc0l0ZXJhYmxlKGEpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuaXNCb29sZWFuKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNCb29sZWFuKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCByZXR1cm4gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNCb29sZWFuKGEpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuaXNTdHJpbmcoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnaXMuaXNTdHJpbmcoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc1N0cmluZyhhKSkuaXMuZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLmlzSW5zdGFuY2UoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbbmV3IElEKCksIElELCAgdHJ1ZV0sXG4gICAgICAgICAgICBbbmV3IElEKCksICgpPT57fSwgIGZhbHNlXSxcbiAgICAgICAgICAgIFsndGVzdDEnLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIHVuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCB1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGMgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmlzSW5zdGFuY2UoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJykgc2hvdWxkIHJldHVybiAnICsgdHlwZW9mIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNJbnN0YW5jZShhLCBiKSkuaXMuZXF1YWwoYylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcuaXNJbnN0YW5jZUV4dGVuZGVkKCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNsYXNzIEJhc2Uge31cbiAgICAgICAgY2xhc3MgRGVyaXZlZCBleHRlbmRzIEJhc2Uge31cbiAgICAgICAgZnVuY3Rpb24gQW5vdGhlckNsYXNzKCkge31cblxuICAgICAgICBsZXQgYmFzZUluc3RhbmNlID0gbmV3IEJhc2UoKTtcbiAgICAgICAgbGV0IGRlcml2ZWRJbnN0YW5jZSA9IG5ldyBEZXJpdmVkKCk7XG5cbiAgICAgICAgLy8gVGVzdCBjYXNlc1xuICAgICAgICBjb25zdCBjYXNlcyA9IFtcbiAgICAgICAgICAgIFsoKSA9PiB7fSwgdW5kZWZpbmVkLCBmYWxzZSxcImZ1bmN0aW9uIHZzIHVuZGVmaW5lZFwiXSxcbiAgICAgICAgICAgIFtuZXcgSUQoKSwgKCk9Pnt9LCBmYWxzZSwgXCJJRCBpbnN0YW5jZSB2cyBmdW5jdGlvblwiXSxcbiAgICAgICAgICAgIFtuZXcgSUQoKSwgSUQsIHRydWUsIFwiSUQgaW5zdGFuY2UgdnMgSURcIl0sXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdW5kZWZpbmVkLCBmYWxzZSwgXCJzdHJpbmcgdnMgdW5kZWZpbmVkXCJdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCBmYWxzZSwgXCJ1bmRlZmluZWQgdnMgdW5kZWZpbmVkXCJdLFxuICAgICAgICAgICAgW251bGwsIHVuZGVmaW5lZCwgZmFsc2UsIFwibnVsbCB2cyB1bmRlZmluZWRcIl0sXG4gICAgICAgICAgICBbMiwgdW5kZWZpbmVkLCBmYWxzZSwgXCJudW1iZXIgdnMgdW5kZWZpbmVkXCJdLFxuICAgICAgICAgICAgW2ZhbHNlLCB1bmRlZmluZWQsIGZhbHNlLCBcImZhbHNlIHZzIHVuZGVmaW5lZFwiXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIHVuZGVmaW5lZCwgZmFsc2UsIFwiTmFOIHZzIHVuZGVmaW5lZFwiXSxcbiAgICAgICAgICAgIFt0cnVlLCB1bmRlZmluZWQsIGZhbHNlLCBcInRydWUgdnMgdW5kZWZpbmVkXCJdLFxuICAgICAgICAgICAgWzQuNSwgdW5kZWZpbmVkLCBmYWxzZSwgXCJmbG9hdCB2cyB1bmRlZmluZWRcIl0sXG4gICAgICAgICAgICBbe30sIHVuZGVmaW5lZCwgZmFsc2UsIFwib2JqZWN0IHZzIHVuZGVmaW5lZFwiXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIHVuZGVmaW5lZCwgZmFsc2UsIFwiYXJyYXkgdnMgdW5kZWZpbmVkXCJdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgdW5kZWZpbmVkLCBmYWxzZSwgXCJzeW1ib2wgdnMgdW5kZWZpbmVkXCJdLFxuICAgICAgICAgICAgW2Jhc2VJbnN0YW5jZSwgQmFzZSwgdHJ1ZSwgXCJCYXNlIGluc3RhbmNlIHZzIEJhc2VcIl0sXG4gICAgICAgICAgICBbZGVyaXZlZEluc3RhbmNlLCBCYXNlLCB0cnVlLCBcIkRlcml2ZWQgaW5zdGFuY2UgdnMgQmFzZVwiXSxcbiAgICAgICAgICAgIFtkZXJpdmVkSW5zdGFuY2UsIERlcml2ZWQsIHRydWUsIFwiRGVyaXZlZCBpbnN0YW5jZSB2cyBEZXJpdmVkXCJdLFxuICAgICAgICAgICAgW2Jhc2VJbnN0YW5jZSwgRGVyaXZlZCwgZmFsc2UsIFwiQmFzZSBpbnN0YW5jZSB2cyBEZXJpdmVkXCJdLFxuICAgICAgICAgICAgW2Jhc2VJbnN0YW5jZSwgQW5vdGhlckNsYXNzLCBmYWxzZSwgXCJCYXNlIGluc3RhbmNlIHZzIEFub3RoZXJDbGFzc1wiXSxcbiAgICAgICAgICAgIFtkZXJpdmVkSW5zdGFuY2UsICgpPT57fSwgZmFsc2UsIFwiRGVyaXZlZCBpbnN0YW5jZSB2cyBmdW5jdGlvblwiXSxcbiAgICAgICAgICAgIFtuZXcgQW5vdGhlckNsYXNzKCksIEFub3RoZXJDbGFzcywgdHJ1ZSwgXCJBbm90aGVyQ2xhc3MgaW5zdGFuY2UgdnMgQW5vdGhlckNsYXNzXCJdLFxuICAgICAgICBdO1xuXG4gICAgICAgIC8vIEFkZGluZyBwcm90b3R5cGUgbW9kaWZpY2F0aW9uIHRlc3RcbiAgICAgICAgbGV0IHByb3RvTW9kaWZpZWRJbnN0YW5jZSA9IG5ldyBCYXNlKCk7XG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihwcm90b01vZGlmaWVkSW5zdGFuY2UsIERlcml2ZWQucHJvdG90eXBlKTtcbiAgICAgICAgY2FzZXMucHVzaChcbiAgICAgICAgICAgIFtwcm90b01vZGlmaWVkSW5zdGFuY2UsIEJhc2UsIHRydWUsIFwiUHJvdG8gbW9kaWZpZWQgQmFzZSBpbnN0YW5jZSB2cyBCYXNlXCJdLCBcbiAgICAgICAgICAgIFtwcm90b01vZGlmaWVkSW5zdGFuY2UsIERlcml2ZWQsIHRydWUsIFwiUHJvdG8gbW9kaWZpZWQgQmFzZSBpbnN0YW5jZSB2cyBEZXJpdmVkXCJdXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gUnVubmluZyB0aGUgdGVzdHNcbiAgICAgICAgY2FzZXMuZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgY29uc3QgYSA9IGRhdGEuc2hpZnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSBkYXRhLnNoaWZ0KCk7XG4gICAgICAgICAgICBjb25zdCBjID0gZGF0YS5zaGlmdCgpO1xuICAgICAgICAgICAgY29uc3QgZCA9IGRhdGEuc2hpZnQoKTtcblxuICAgICAgICAgICAgaXQoJ2lzSW5zdGFuY2UoJyArIEpTT04uc3RyaW5naWZ5KGEpICsgJywgW0Z1bmN0aW9uXSkgc2hvdWxkIHJldHVybiAnICsgYywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChpc0luc3RhbmNlKGEsIGIpIT09Yykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBleHBlY3QoaXNJbnN0YW5jZShhLCBiKSkudG8uZXF1YWwoYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgXG4gICAgZGVzY3JpYmUoJy5pc09iamVjdCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFtwYXJzZUludChcImFcIiksIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIHRydWVdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGl0KCdpcy5pc09iamVjdCgnICsgSlNPTi5zdHJpbmdpZnkoYSkgKyAnKSBzaG91bGQgcmV0dXJuICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGlzT2JqZWN0KGEpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuXG4gICAgZGVzY3JpYmUoJy5pc0FycmF5KCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3BhcnNlSW50KFwiYVwiKSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgdHJ1ZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmlzQXJyYXkoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc0FycmF5KGEpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy5pc0Z1bmN0aW9uKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgdHJ1ZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbcGFyc2VJbnQoXCJhXCIpLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaXQoJ2lzLmlzRnVuY3Rpb24oJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIHJldHVybiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdChpc0Z1bmN0aW9uKGEpKS5pcy5lcXVhbChiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG59KTtcblxuIiwgImltcG9ydCB7XG4gICAgdmFsaWRhdGVQcmltaXRpdmUsXG4gICAgdmFsaWRhdGVCb29sZWFuLFxuICAgIHZhbGlkYXRlU3RyaW5nLFxuICAgIHZhbGlkYXRlT2JqZWN0LFxuICAgIHZhbGlkYXRlQXJyYXksXG4gICAgdmFsaWRhdGVGdW5jdGlvbixcbiAgICB2YWxpZGF0ZUludGVnZXIsXG4gICAgdmFsaWRhdGVJbnN0YW5jZSxcbiAgICB2YWxpZGF0ZUl0ZXJhYmxlLFxuICAgIHZhbGlkYXRlU3ltYm9sXG59IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvdmFsaWRhdGUubWpzXCJcblxuaW1wb3J0IHtCYXNlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL2Jhc2UubWpzXCJcbmltcG9ydCB7SUR9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvaWQubWpzXCJcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcblxuZGVzY3JpYmUoJ3ZhbGlkYXRlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZVByaW1pdGl2ZSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCB0cnVlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIHRydWVdLFxuICAgICAgICAgICAgW251bGwsIHRydWVdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCB0cnVlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgdHJ1ZV0sXG4gICAgICAgICAgICBbNC41LCB0cnVlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgdHJ1ZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlUHJpbWl0aXZlKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB2YWxpZGF0ZVByaW1pdGl2ZShhKSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlUHJpbWl0aXZlKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVQcmltaXRpdmUoYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuXG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVJbnRlZ2VyKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIGZhbHNlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIHRydWVdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlSW50ZWdlcignICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gdmFsaWRhdGVJbnRlZ2VyKGEpKS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVJbnRlZ2VyKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVJbnRlZ2VyKGEpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG4gICAgXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZVN5bWJvbCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIGZhbHNlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIHRydWVdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmIChiID09PSBmYWxzZSkge1xuXG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZVN5bWJvbCgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4gdmFsaWRhdGVTeW1ib2woYSkpLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZVN5bWJvbCgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgbm90IHRocm93IFR5cGVFeGNlcHRpb24gJyArIGIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlU3ltYm9sKGEpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlSXRlcmFibGUoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgdHJ1ZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIGZhbHNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIHRydWVdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmIChiID09PSBmYWxzZSkge1xuXG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUl0ZXJhYmxlKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUl0ZXJhYmxlKGEpXG4gICAgICAgICAgICAgICAgICAgIH0pLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlSXRlcmFibGUoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIG5vdCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZUl0ZXJhYmxlKGEpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuXG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlQm9vbGVhbigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIHRydWVdLFxuICAgICAgICAgICAgW3RydWUsIHRydWVdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCBmYWxzZV0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBmYWxzZV0sXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcblxuICAgICAgICAgICAgaWYgKGIgPT09IGZhbHNlKSB7XG5cbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlQm9vbGVhbignICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVCb29sZWFuKGEpXG4gICAgICAgICAgICAgICAgICAgIH0pLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUJvb2xlYW4oJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIG5vdCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZUJvb2xlYW4oYSkpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZVN0cmluZygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCB0cnVlXSxcbiAgICAgICAgICAgIFt1bmRlZmluZWQsIGZhbHNlXSxcbiAgICAgICAgICAgIFtudWxsLCBmYWxzZV0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgZmFsc2VdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmIChiID09PSBmYWxzZSkge1xuXG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZVN0cmluZygnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVTdHJpbmcoYSlcbiAgICAgICAgICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVTdHJpbmcoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIG5vdCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZVN0cmluZyhhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZU9iamVjdCgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIGZhbHNlXSxcbiAgICAgICAgICAgIFsyLCBmYWxzZV0sXG4gICAgICAgICAgICBbZmFsc2UsIGZhbHNlXSxcbiAgICAgICAgICAgIFt0cnVlLCBmYWxzZV0sXG4gICAgICAgICAgICBbNC41LCBmYWxzZV0sXG4gICAgICAgICAgICBbe30sIHRydWVdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmIChiID09PSBmYWxzZSkge1xuXG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZU9iamVjdCgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVPYmplY3QoYSlcbiAgICAgICAgICAgICAgICAgICAgfSkudG8udGhyb3coVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVPYmplY3QoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIG5vdCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZU9iamVjdChhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZUluc3RhbmNlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWyd0ZXN0MScsIE9iamVjdF0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBPYmplY3RdLFxuICAgICAgICAgICAgW251bGwsIE9iamVjdF0sXG4gICAgICAgICAgICBbKCkgPT4ge1xuICAgICAgICAgICAgfSwgT2JqZWN0XSxcbiAgICAgICAgICAgIFsyLCBPYmplY3RdLFxuICAgICAgICAgICAgW2ZhbHNlLCBPYmplY3RdLFxuICAgICAgICAgICAgW3RydWUsIE9iamVjdF0sXG4gICAgICAgICAgICBbNC41LCBPYmplY3RdLFxuICAgICAgICAgICAgW3t9LCBCYXNlXSxcbiAgICAgICAgICAgIFtbMSwgMiwgM10sIE9iamVjdF0sXG4gICAgICAgICAgICBbU3ltYm9sKFwiZm9vXCIpLCBPYmplY3RdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cblxuICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUluc3RhbmNlKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVJbnN0YW5jZShhLCBiKVxuICAgICAgICAgICAgICAgIH0pLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJy52YWxpZGF0ZUluc3RhbmNlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgW3t9LCBPYmplY3QsIHRydWVdLFxuICAgICAgICAgICAgW25ldyBCYXNlLCBCYXNlLCB0cnVlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnLnZhbGlkYXRlSW5zdGFuY2UoJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIG5vdCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHZhbGlkYXRlSW5zdGFuY2UoYSwgYikpLnRvLmJlLmVxdWFsKGEpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG5cblxuICAgIH0pO1xuXG5cbiAgICBkZXNjcmliZSgnLnZhbGlkYXRlQXJyYXkoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbJ3Rlc3QxJywgZmFsc2VdLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgZmFsc2VdLFxuICAgICAgICAgICAgW251bGwsIGZhbHNlXSxcbiAgICAgICAgICAgIFsoKSA9PiB7XG4gICAgICAgICAgICB9LCBmYWxzZV0sXG4gICAgICAgICAgICBbMiwgZmFsc2VdLFxuICAgICAgICAgICAgW2ZhbHNlLCBmYWxzZV0sXG4gICAgICAgICAgICBbdHJ1ZSwgZmFsc2VdLFxuICAgICAgICAgICAgWzQuNSwgZmFsc2VdLFxuICAgICAgICAgICAgW3t9LCBmYWxzZV0sXG4gICAgICAgICAgICBbWzEsIDIsIDNdLCB0cnVlXSxcbiAgICAgICAgICAgIFtTeW1ib2woXCJmb29cIiksIGZhbHNlXSxcbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpZiAoYiA9PT0gZmFsc2UpIHtcblxuICAgICAgICAgICAgICAgIGl0KCcudmFsaWRhdGVBcnJheSgnICsgdHlwZW9mIGEgKyAnKSBzaG91bGQgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGVBcnJheShhKVxuICAgICAgICAgICAgICAgICAgICB9KS50by50aHJvdyhUeXBlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUFycmF5KCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCBub3QgdGhyb3cgVHlwZUV4Y2VwdGlvbiAnICsgYiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QodmFsaWRhdGVBcnJheShhKSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCcudmFsaWRhdGVGdW5jdGlvbigpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIFtcbiAgICAgICAgICAgIFsndGVzdDEnLCBmYWxzZV0sXG4gICAgICAgICAgICBbdW5kZWZpbmVkLCBmYWxzZV0sXG4gICAgICAgICAgICBbbnVsbCwgZmFsc2VdLFxuICAgICAgICAgICAgWygpID0+IHtcbiAgICAgICAgICAgIH0sIHRydWVdLFxuICAgICAgICAgICAgWzIsIGZhbHNlXSxcbiAgICAgICAgICAgIFtmYWxzZSwgZmFsc2VdLFxuICAgICAgICAgICAgW3RydWUsIGZhbHNlXSxcbiAgICAgICAgICAgIFs0LjUsIGZhbHNlXSxcbiAgICAgICAgICAgIFt7fSwgZmFsc2VdLFxuICAgICAgICAgICAgW1sxLCAyLCAzXSwgZmFsc2VdLFxuICAgICAgICAgICAgW1N5bWJvbChcImZvb1wiKSwgZmFsc2VdLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcblxuICAgICAgICAgICAgbGV0IGEgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBiID0gZGF0YS5zaGlmdCgpXG5cbiAgICAgICAgICAgIGlmIChiID09PSBmYWxzZSkge1xuXG4gICAgICAgICAgICAgICAgaXQoJy52YWxpZGF0ZUZ1bmN0aW9uKCcgKyB0eXBlb2YgYSArICcpIHNob3VsZCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uKGEpXG4gICAgICAgICAgICAgICAgICAgIH0pLnRvLnRocm93KFR5cGVFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdCgnLnZhbGlkYXRlRnVuY3Rpb24oJyArIHR5cGVvZiBhICsgJykgc2hvdWxkIG5vdCB0aHJvdyBUeXBlRXhjZXB0aW9uICcgKyBiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh2YWxpZGF0ZUZ1bmN0aW9uKGEpKS50by5iZS5lcXVhbChhKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG59KTtcblxuIiwgImltcG9ydCB7U3RhY2t9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvc3RhY2subWpzXCI7XG5pbXBvcnQge1xuICAgIHR5cGVPZlxufSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL3R5cGVvZi5tanNcIlxuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5kZXNjcmliZSgndHlwZU9mJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJy50eXBlT2YoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICBbdHJ1ZSwgJ2Jvb2xlYW4nXSxcbiAgICAgICAgICAgIFtudWxsLCAnbnVsbCddLFxuICAgICAgICAgICAgW3VuZGVmaW5lZCwgJ3VuZGVmaW5lZCddLFxuICAgICAgICAgICAgW1Byb21pc2UucmVzb2x2ZSgpLCAncHJvbWlzZSddLFxuICAgICAgICAgICAgW25ldyBXZWFrTWFwKCksICd3ZWFrbWFwJ10sXG4gICAgICAgICAgICBbbmV3IE1hcCgpLCAnbWFwJ10sXG4gICAgICAgICAgICBbTmFOLCAnbnVtYmVyJ10sXG4gICAgICAgICAgICBbZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIH0sICdnZW5lcmF0b3JmdW5jdGlvbiddLFxuICAgICAgICAgICAgWzUsICdudW1iZXInXSxcbiAgICAgICAgICAgIFtmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB9LCAnZnVuY3Rpb24nXSxcbiAgICAgICAgICAgIFsvYS8sICdyZWdleHAnXSxcbiAgICAgICAgICAgIFtuZXcgRGF0ZSgpLCAnZGF0ZSddLFxuICAgICAgICAgICAgW3t9LCAnb2JqZWN0J10sXG4gICAgICAgICAgICBbW10sICdhcnJheSddLFxuICAgICAgICAgICAgWycnLCAnc3RyaW5nJ10sXG4gICAgICAgICAgICBbbmV3IEVycm9yLCAnZXJyb3InXSxcbiAgICAgICAgICAgIFtuZXcgU3RhY2ssICdzdGFjayddXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnc2hvdWxkIHJldHVybiAnICsgYiArICcgd2hlbiB0aGUgdmFsdWUgJyArIHR5cGVPZihhKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGV4cGVjdCh0eXBlT2YoYSkpLnRvLmJlLmVxdWFsKGIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7XG5cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtVbmlxdWVRdWV1ZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy91bmlxdWVxdWV1ZS5tanNcIjtcblxuXG5kZXNjcmliZSgnVW5pcXVlUXVldWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHF1ZXVlO1xuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBxdWV1ZSA9IG5ldyBVbmlxdWVRdWV1ZTtcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2lzRW1wdHkoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnZmlyc3QgaXQgc2hvdWxkIGVtcHR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2FkZCBzZXF1ZW5jZSBwZWVrIGFuZCBwb2xsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdyZXN1bHQgYSxhLGEsYicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5hZGQoe2E6IDF9KSkudG8uYmUuaW5zdGFuY2VPZihVbmlxdWVRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5hZGQoe2E6IDJ9KSkudG8uYmUuaW5zdGFuY2VPZihVbmlxdWVRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuYWRkKHthOiAzfSkpLnRvLmJlLmluc3RhbmNlT2YoVW5pcXVlUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBlZWsoKSkudG8uZGVlcC5lcXVhbCh7YToxfSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucGVlaygpKS50by5kZWVwLmVxdWFsKHthOjF9KTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wb2xsKCkpLnRvLmRlZXAuZXF1YWwoe2E6MX0pO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBvbGwoKSkudG8uZGVlcC5lcXVhbCh7YToyfSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wZWVrKCkpLnRvLmRlZXAuZXF1YWwoe2E6M30pO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBvbGwoKSkudG8uZGVlcC5lcXVhbCh7YTozfSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYWRkIGFuZCBjbGVhcicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnc2hvdWxkIGVtcHR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5hZGQoe2E6IDF9KSkudG8uYmUuaW5zdGFuY2VPZihVbmlxdWVRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5jbGVhcigpKS50by5iZS5pbnN0YW5jZU9mKFVuaXF1ZVF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcbiAgICBcbiAgICBkZXNjcmliZSgnYWRkIG5vIG9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXQoJ3Nob3VsZCB0aHJvdyBlcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdCgoKT0+e3F1ZXVlLmFkZChbXSl9KS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgICAgICBleHBlY3QoKCk9PntxdWV1ZS5hZGQoMSl9KS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgICAgICBleHBlY3QoKCk9PntxdWV1ZS5hZGQodHJ1ZSl9KS50by50aHJvdyhUeXBlRXJyb3IpXG4gICAgICAgICAgICBleHBlY3QoKCk9PntxdWV1ZS5hZGQoKX0pLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgICAgIGV4cGVjdCgoKT0+e3F1ZXVlLmFkZChTeW1ib2woXCIxXCIpKX0pLnRvLnRocm93KFR5cGVFcnJvcilcbiAgICAgICAgICAgIGV4cGVjdCgoKT0+e3F1ZXVlLmFkZChmdW5jdGlvbigpe30pfSkudG8udGhyb3coVHlwZUVycm9yKVxuICAgICAgICB9KTtcblxuICAgIH0pXG59KSIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtTdGFja30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9zdGFjay5tanNcIjtcblxuXG5kZXNjcmliZSgnU3RhY2snLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHN0YWNrO1xuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBzdGFjayA9IG5ldyBTdGFjaztcbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2lzRW1wdHkoKScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnZmlyc3QgaXQgc2hvdWxkIGVtcHR5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ2FkZCBzZXF1ZW5jZSBwZWVrIGFuZCBwdWxsJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdyZXN1bHQgYSxhLGEsYicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5wdXNoKCdhJykpLnRvLmJlLmluc3RhbmNlT2YoU3RhY2spO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2sucHVzaCgnYicpKS50by5iZS5pbnN0YW5jZU9mKFN0YWNrKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5wdXNoKCdjJykpLnRvLmJlLmluc3RhbmNlT2YoU3RhY2spO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnBlZWsoKSkudG8uYmUuZXF1YWwoJ2MnKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5wZWVrKCkpLnRvLmJlLmVxdWFsKCdjJyk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2sucG9wKCkpLnRvLmJlLmVxdWFsKCdjJyk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2sucGVlaygpKS50by5iZS5lcXVhbCgnYicpO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdhZGQgYW5kIGNsZWFyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgZW1wdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2suaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KHN0YWNrLnB1c2goJ2EnKSkudG8uYmUuaW5zdGFuY2VPZihTdGFjayk7XG4gICAgICAgICAgICBleHBlY3Qoc3RhY2suaXNFbXB0eSgpKS50by5iZS5mYWxzZTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5jbGVhcigpKS50by5iZS5pbnN0YW5jZU9mKFN0YWNrKTtcbiAgICAgICAgICAgIGV4cGVjdChzdGFjay5pc0VtcHR5KCkpLnRvLmJlLnRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcbn0pIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtCYXNlV2l0aE9wdGlvbnN9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvYmFzZXdpdGhvcHRpb25zLm1qc1wiO1xuXG5cbmRlc2NyaWJlKCdCYXNlV2l0aE9wdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnbmV3IEJhc2VXaXRoT3B0aW9ucycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnaXMgaW5zdGFuY2Ugb2YgQmFzZVdpdGhPcHRpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KG5ldyBCYXNlV2l0aE9wdGlvbnMpLnRvLmJlLmluc3RhbmNlT2YoQmFzZVdpdGhPcHRpb25zKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2lzIGluc3RhbmNlIG9mIE9iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgQmFzZVdpdGhPcHRpb25zKS50by5iZS5pbnN0YW5jZU9mKE9iamVjdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdnZXQgb3B0aW9uIGlzIHRydWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QobmV3IEJhc2VXaXRoT3B0aW9ucyh7YTogdHJ1ZX0pLmdldE9wdGlvbignYScpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbn0pIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Tm9kZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9ub2RlLm1qc1wiO1xuaW1wb3J0IHtOb2RlTGlzdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9ub2RlbGlzdC5tanNcIjtcbmltcG9ydCB7Tm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL25vZGVyZWN1cnNpdmVpdGVyYXRvci5tanNcIjtcblxuZGVzY3JpYmUoJ05vZGVMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCcjY29uc3RydWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGl0KCdzaG91bGQgY3JlYXRlIGFuIGVtcHR5IE5vZGVMaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG5vZGVMaXN0ID0gbmV3IE5vZGVMaXN0KCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChub2RlTGlzdC5zaXplKS50by5lcXVhbCgwKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBjcmVhdGUgYSBOb2RlTGlzdCBmcm9tIGFuIGFycmF5JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0IG5vZGVMaXN0ID0gbmV3IE5vZGVMaXN0KFtcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JyksXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpLFxuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKVxuICAgICAgICAgICAgXSk7XG5cbiAgICAgICAgICAgIGV4cGVjdChub2RlTGlzdC5zaXplKS50by5lcXVhbCgzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBjcmVhdGUgYSBOb2RlTGlzdCBmcm9tIGEgTm9kZUxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgbm9kZUxpc3QgPSBuZXcgTm9kZUxpc3QoW1xuICAgICAgICAgICAgICAgIG5ldyBOb2RlKCdkaXYnKSxcbiAgICAgICAgICAgICAgICBuZXcgTm9kZSgnZGl2JyksXG4gICAgICAgICAgICAgICAgbmV3IE5vZGUoJ2RpdicpXG4gICAgICAgICAgICBdKTtcblxuICAgICAgICAgICAgbGV0IG5vZGVMaXN0MiA9IG5ldyBOb2RlTGlzdChub2RlTGlzdCk7XG5cbiAgICAgICAgICAgIGV4cGVjdChub2RlTGlzdDIuc2l6ZSkudG8uZXF1YWwoMyk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NyZWF0ZSBOb2RlTGlzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlTGlzdCgpKS5pcy5pbnN0YW5jZW9mKE5vZGVMaXN0KTtcbiAgICB9KVxuXG4gICAgaXQoJ2FkZCBOb2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkuYWRkKG5ldyBOb2RlKCkpKS50by5iZS5pbnN0YW5jZW9mKE5vZGVMaXN0KTtcbiAgICB9KVxuXG4gICAgaXQoJ3JlbW92ZSBOb2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QobmV3IE5vZGVMaXN0KCkucmVtb3ZlKG5ldyBOb2RlKCkpKS50by5iZS5pbnN0YW5jZW9mKE5vZGVMaXN0KTtcbiAgICB9KVxuXG4gICAgaXQoJ2hhcyB1bmtub3duIE5vZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKS5oYXMobmV3IE5vZGUpKS50by5iZS5mYWxzZTtcbiAgICB9KVxuXG4gICAgaXQoJ2hhcyBhZGRlZCBOb2RlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBuID0gbmV3IE5vZGU7XG4gICAgICAgIGV4cGVjdChuZXcgTm9kZUxpc3QoKS5hZGQobikuaGFzKG4pKS50by5iZS50cnVlO1xuICAgIH0pXG5cbiAgICBpdCgndGhyb3cgZXhjZXB0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBleHBlY3QoKCkgPT4gbmV3IE5vZGVMaXN0KCkuYWRkKDEpKS50by50aHJvdyhFcnJvcik7XG4gICAgfSlcblxuICAgIGl0KCdjaGVjayBsZXZlbCcsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCByb290ID0gbmV3IE5vZGUoJ3Jvb3QnKTtcblxuICAgICAgICBjb25zdCBuMSA9IG5ldyBOb2RlKCduMScpO1xuICAgICAgICBjb25zdCBuMiA9IG5ldyBOb2RlKCduMicpO1xuICAgICAgICBjb25zdCBuMyA9IG5ldyBOb2RlKCduMycpO1xuICAgICAgICBjb25zdCBuNCA9IG5ldyBOb2RlKCduNCcpO1xuXG4gICAgICAgIGNvbnN0IG4xMSA9IG5ldyBOb2RlKCduMTEnKTtcbiAgICAgICAgY29uc3QgbjEyID0gbmV3IE5vZGUoJ24xMicpO1xuICAgICAgICBjb25zdCBuMTMgPSBuZXcgTm9kZSgnbjEzJyk7XG5cbiAgICAgICAgY29uc3QgbjIxID0gbmV3IE5vZGUoJ24yMScpO1xuICAgICAgICBjb25zdCBuMjIgPSBuZXcgTm9kZSgnbjIyJyk7XG4gICAgICAgIGNvbnN0IG4yMyA9IG5ldyBOb2RlKCduMjMnKTtcblxuICAgICAgICBjb25zdCBuNDEgPSBuZXcgTm9kZSgnbjQxJyk7XG4gICAgICAgIGNvbnN0IG40MiA9IG5ldyBOb2RlKCduNDInKTtcblxuICAgICAgICBjb25zdCBuNDExID0gbmV3IE5vZGUoJ240MTEnKTtcbiAgICAgICAgY29uc3QgbjQxMiA9IG5ldyBOb2RlKCduNDEyJyk7XG4gICAgICAgIGNvbnN0IG40MTMgPSBuZXcgTm9kZSgnbjQxMycpO1xuXG4gICAgICAgIGNvbnN0IG40MTIxID0gbmV3IE5vZGUoJ240MTIxJyk7XG5cbiAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChuMSkuYXBwZW5kQ2hpbGQobjIpLmFwcGVuZENoaWxkKG4zKS5hcHBlbmRDaGlsZChuNCk7XG4gICAgICAgIG4xLmFwcGVuZENoaWxkKG4xMSkuYXBwZW5kQ2hpbGQobjEyKS5hcHBlbmRDaGlsZChuMTMpO1xuICAgICAgICBuMi5hcHBlbmRDaGlsZChuMjEpLmFwcGVuZENoaWxkKG4yMikuYXBwZW5kQ2hpbGQobjIzKTtcbiAgICAgICAgbjQuYXBwZW5kQ2hpbGQobjQxKS5hcHBlbmRDaGlsZChuNDIpO1xuICAgICAgICBuNDEuYXBwZW5kQ2hpbGQobjQxMSkuYXBwZW5kQ2hpbGQobjQxMikuYXBwZW5kQ2hpbGQobjQxMyk7XG4gICAgICAgIG40MTIuYXBwZW5kQ2hpbGQobjQxMjEpO1xuXG4gICAgICAgIGxldCBpdGVyYXRvciA9IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3Iocm9vdCk7XG5cbiAgICAgICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIGV4cGVjdChuKS50by5iZS5hbi5pbnN0YW5jZW9mKE5vZGUpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobi52YWx1ZSArIFwiOlwiICsgbi5sZXZlbCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoW1xuICAgICAgICAgICAgJ3Jvb3Q6MCcsXG4gICAgICAgICAgICAnbjE6MScsXG4gICAgICAgICAgICAnbjExOjInLFxuICAgICAgICAgICAgJ24xMjoyJyxcbiAgICAgICAgICAgICduMTM6MicsXG4gICAgICAgICAgICAnbjI6MScsXG4gICAgICAgICAgICAnbjIxOjInLFxuICAgICAgICAgICAgJ24yMjoyJyxcbiAgICAgICAgICAgICduMjM6MicsXG4gICAgICAgICAgICAnbjM6MScsXG4gICAgICAgICAgICAnbjQ6MScsXG4gICAgICAgICAgICAnbjQxOjInLFxuICAgICAgICAgICAgJ240MTE6MycsXG4gICAgICAgICAgICAnbjQxMjozJyxcbiAgICAgICAgICAgICduNDEyMTo0JyxcbiAgICAgICAgICAgICduNDEzOjMnLFxuICAgICAgICAgICAgJ240MjoyJ1xuXG4gICAgICAgIF0pO1xuXG4gICAgICAgIG40MTIxLmFwcGVuZENoaWxkKG5ldyBOb2RlKCduNDEyMTEnKSk7XG5cbiAgICAgICAgaXRlcmF0b3IgPSBuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKHJvb3QpO1xuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBuIG9mIGl0ZXJhdG9yKSB7XG4gICAgICAgICAgICBleHBlY3QobikudG8uYmUuYW4uaW5zdGFuY2VvZihOb2RlKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG4udmFsdWUgKyBcIjpcIiArIG4ubGV2ZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChbXG4gICAgICAgICAgICAncm9vdDowJyxcbiAgICAgICAgICAgICduMToxJyxcbiAgICAgICAgICAgICduMTE6MicsXG4gICAgICAgICAgICAnbjEyOjInLFxuICAgICAgICAgICAgJ24xMzoyJyxcbiAgICAgICAgICAgICduMjoxJyxcbiAgICAgICAgICAgICduMjE6MicsXG4gICAgICAgICAgICAnbjIyOjInLFxuICAgICAgICAgICAgJ24yMzoyJyxcbiAgICAgICAgICAgICduMzoxJyxcbiAgICAgICAgICAgICduNDoxJyxcbiAgICAgICAgICAgICduNDE6MicsXG4gICAgICAgICAgICAnbjQxMTozJyxcbiAgICAgICAgICAgICduNDEyOjMnLFxuICAgICAgICAgICAgJ240MTIxOjQnLFxuICAgICAgICAgICAgJ240MTIxMTo1JyxcbiAgICAgICAgICAgICduNDEzOjMnLFxuICAgICAgICAgICAgJ240MjoyJ1xuXG4gICAgICAgIF0pO1xuXG5cbiAgICAgICAgY29uc3QgYmIgPSBuZXcgTm9kZSgnYmInKSAvLyBiaWcgYmFuZ1xuXG4gICAgICAgIGJiLmFwcGVuZENoaWxkKHJvb3QpO1xuICAgICAgICBpdGVyYXRvciA9IG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3IoYmIpO1xuXG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIGV4cGVjdChuKS50by5iZS5hbi5pbnN0YW5jZW9mKE5vZGUpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobi52YWx1ZSArIFwiOlwiICsgbi5sZXZlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFtcbiAgICAgICAgICAgICdiYjowJyxcbiAgICAgICAgICAgICdyb290OjEnLFxuICAgICAgICAgICAgJ24xOjInLFxuICAgICAgICAgICAgJ24xMTozJyxcbiAgICAgICAgICAgICduMTI6MycsXG4gICAgICAgICAgICAnbjEzOjMnLFxuICAgICAgICAgICAgJ24yOjInLFxuICAgICAgICAgICAgJ24yMTozJyxcbiAgICAgICAgICAgICduMjI6MycsXG4gICAgICAgICAgICAnbjIzOjMnLFxuICAgICAgICAgICAgJ24zOjInLFxuICAgICAgICAgICAgJ240OjInLFxuICAgICAgICAgICAgJ240MTozJyxcbiAgICAgICAgICAgICduNDExOjQnLFxuICAgICAgICAgICAgJ240MTI6NCcsXG4gICAgICAgICAgICAnbjQxMjE6NScsXG4gICAgICAgICAgICAnbjQxMjExOjYnLFxuICAgICAgICAgICAgJ240MTM6NCcsXG4gICAgICAgICAgICAnbjQyOjMnXG5cbiAgICAgICAgXSk7XG5cbiAgICB9KVxuXG4gICAgZGVzY3JpYmUoJ0xldmVscycsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnbjIgc2hvdWxkIGxldmVsIDInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IG4wID0gbmV3IE5vZGUoJ2FiYycpO1xuXG4gICAgICAgICAgICBjb25zdCBuMSA9IG5ldyBOb2RlKCdkZWYnKTtcbiAgICAgICAgICAgIG4wLmFwcGVuZENoaWxkKG4xKVxuXG4gICAgICAgICAgICBjb25zdCBuMiA9IG5ldyBOb2RlKCdnaGknKTtcbiAgICAgICAgICAgIG4xLmFwcGVuZENoaWxkKG4yKTtcblxuICAgICAgICAgICAgY29uc3QgbjMgPSBuZXcgTm9kZSgnamtsJyk7XG4gICAgICAgICAgICBuMi5hcHBlbmRDaGlsZChuMyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChuMC5sZXZlbCkudG8uYmUuZXF1YWwoMCk7XG4gICAgICAgICAgICBleHBlY3QobjEubGV2ZWwpLnRvLmJlLmVxdWFsKDEpO1xuICAgICAgICAgICAgZXhwZWN0KG4yLmxldmVsKS50by5iZS5lcXVhbCgyKTtcbiAgICAgICAgICAgIGV4cGVjdChuMy5sZXZlbCkudG8uYmUuZXF1YWwoMyk7XG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCd0b1N0cmluZygpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgb3V0cHV0IGVtcHR5IHN0cmluZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgTm9kZSgpO1xuICAgICAgICAgICAgZXhwZWN0KG5vZGUudG9TdHJpbmcoKSkuaXMuZXF1YWwoJycpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnc2hvdWxkIG91dHB1dCBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zdCBuMCA9IG5ldyBOb2RlKCdhYmMnKTtcblxuICAgICAgICAgICAgY29uc3QgbjEgPSBuZXcgTm9kZSgnZGVmJyk7XG4gICAgICAgICAgICBuMC5hcHBlbmRDaGlsZChuMSlcblxuICAgICAgICAgICAgY29uc3QgbjExID0gbmV3IE5vZGUoJ2doaScpO1xuICAgICAgICAgICAgbjAuYXBwZW5kQ2hpbGQobjExKVxuXG4gICAgICAgICAgICBjb25zdCBuMiA9IG5ldyBOb2RlKCdqa2wnKTtcbiAgICAgICAgICAgIG4xLmFwcGVuZENoaWxkKG4yKTtcblxuICAgICAgICAgICAgY29uc3QgbjMgPSBuZXcgTm9kZSgnbW5vJyk7XG4gICAgICAgICAgICBuMS5hcHBlbmRDaGlsZChuMyk7XG5cbiAgICAgICAgICAgIGNvbnN0IG40ID0gbmV3IE5vZGUoJ3BxcicpO1xuICAgICAgICAgICAgbjIuYXBwZW5kQ2hpbGQobjQpO1xuXG4gICAgICAgICAgICBleHBlY3QobjIubGV2ZWwpLnRvLmJlLmVxdWFsKDIpXG5cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2cobjAudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAvLyBleHBlY3QobjAudG9TdHJpbmcoKSkuaXMuZXF1YWwoJycpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuXG59KTsiLCAiaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7UXVldWV9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvdHlwZXMvcXVldWUubWpzXCI7XG5cbmRlc2NyaWJlKCdRdWV1ZScsIGZ1bmN0aW9uICgpIHtcbiAgICBsZXQgcXVldWU7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIHF1ZXVlID0gbmV3IFF1ZXVlO1xuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnaXNFbXB0eSgpJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdmaXJzdCBpdCBzaG91bGQgZW1wdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICB9KTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnYWRkIHNlcXVlbmNlIHBlZWsgYW5kIHBvbGwnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Jlc3VsdCBhLGEsYSxiJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCgnYScpKS50by5iZS5pbnN0YW5jZU9mKFF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCgnYicpKS50by5iZS5pbnN0YW5jZU9mKFF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5hZGQoJ2MnKSkudG8uYmUuaW5zdGFuY2VPZihRdWV1ZSk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucGVlaygpKS50by5iZS5lcXVhbCgnYScpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLnBlZWsoKSkudG8uYmUuZXF1YWwoJ2EnKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5wb2xsKCkpLnRvLmJlLmVxdWFsKCdhJyk7XG4gICAgICAgICAgICBleHBlY3QocXVldWUucGVlaygpKS50by5iZS5lcXVhbCgnYicpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUuZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdhZGQgYW5kIGNsZWFyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdzaG91bGQgZW1wdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QocXVldWUuaXNFbXB0eSgpKS50by5iZS50cnVlO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmFkZCgnYScpKS50by5iZS5pbnN0YW5jZU9mKFF1ZXVlKTtcbiAgICAgICAgICAgIGV4cGVjdChxdWV1ZS5pc0VtcHR5KCkpLnRvLmJlLmZhbHNlO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmNsZWFyKCkpLnRvLmJlLmluc3RhbmNlT2YoUXVldWUpO1xuICAgICAgICAgICAgZXhwZWN0KHF1ZXVlLmlzRW1wdHkoKSkudG8uYmUudHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICB9KVxuXG5cbiAgICBcbn0pIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7Tm9kZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9ub2RlLm1qc1wiO1xuaW1wb3J0IHtOb2RlTGlzdH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS90eXBlcy9ub2RlbGlzdC5tanNcIjtcbmltcG9ydCB7Tm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL3R5cGVzL25vZGVyZWN1cnNpdmVpdGVyYXRvci5tanNcIjtcblxuZGVzY3JpYmUoJ05vZGVSZWN1cnNpdmVJdGVyYXRvcicsIGZ1bmN0aW9uICgpIHtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgZXhlcHRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdCgoKSA9PiBuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKCkpLnRvLnRocm93KEVycm9yKVxuICAgIH0pO1xuICAgIGl0KCdzaG91bGQgYmUgYSBmdW5jdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KE5vZGVSZWN1cnNpdmVJdGVyYXRvcikudG8uYmUuYSgnZnVuY3Rpb24nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYmUgYSBjb25zdHJ1Y3RvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KG5ldyBOb2RlUmVjdXJzaXZlSXRlcmF0b3IobmV3IE5vZGUpKS50by5iZS5hbi5pbnN0YW5jZW9mKE5vZGVSZWN1cnNpdmVJdGVyYXRvcik7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09wZXJhdG9ycy95aWVsZFxuICAgICAqL1xuICAgIGl0KCd1bmRlZmluZWQgc2hvdWxkIG5vdCByZXN1bHQgaW4gdW5kZWZpbmVkIG5vZGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihuZXcgTm9kZSk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBpdGVyYXRvcikge1xuICAgICAgICAgICAgZXhwZWN0KG4pLnRvLmJlLmFuLmluc3RhbmNlb2YoTm9kZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuLnZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV4cGVjdChyZXN1bHQpLnRvLmRlZXAuZXF1YWwoW3VuZGVmaW5lZF0pO1xuXG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGl0ZXJhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPVxuICAgICAgICAgICAgbmV3IE5vZGUoJzEnKVxuICAgICAgICBub2RlLmFwcGVuZENoaWxkKFxuICAgICAgICAgICAgKG5ldyBOb2RlKCcyJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCcyLjEnKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzIuMicpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMi4zJykpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMycpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnNCcpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCc0LjEnKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzQuMicpKSk7XG5cbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBuZXcgTm9kZVJlY3Vyc2l2ZUl0ZXJhdG9yKG5vZGUpO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIGV4cGVjdChuKS50by5iZS5hbi5pbnN0YW5jZW9mKE5vZGUpO1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gobi52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKFsnMScsICcyJywgJzIuMScsICcyLjInLCAnMi4zJywgJzMnLCAnNCcsICc0LjEnLCAnNC4yJ10pO1xuXG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGl0ZXJhdGUgbm9kZWxpc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG5vZGVMaXN0ID0gbmV3IE5vZGVMaXN0KCk7XG5cbiAgICAgICAgbm9kZUxpc3QuYWRkKFxuICAgICAgICAgICAgKG5ldyBOb2RlKCcyJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCcyLjEnKSkuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzIuMicpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnMi4zJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCczJykpLmFwcGVuZENoaWxkKG5ldyBOb2RlKCc0JykuYXBwZW5kQ2hpbGQobmV3IE5vZGUoJzQuMScpKS5hcHBlbmRDaGlsZChuZXcgTm9kZSgnNC4yJykpKSk7XG5cbiAgICAgICAgbm9kZUxpc3QuYWRkKG5ldyBOb2RlKCd4JykpO1xuXG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gbmV3IE5vZGVSZWN1cnNpdmVJdGVyYXRvcihub2RlTGlzdCk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiBpdGVyYXRvcikge1xuICAgICAgICAgICAgZXhwZWN0KG4pLnRvLmJlLmFuLmluc3RhbmNlb2YoTm9kZSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChuLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbChbJzInLCAnMi4xJywgJzIuMicsICcyLjMnLCAnMycsICc0JywgJzQuMScsICc0LjInLCAneCddKTtcblxuICAgIH0pO1xuXG59KTsiLCAiXG5cbmltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge2Zvcm1hdFRpbWVBZ299IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi90aW1lLWFnby5tanNcIjtcblxuZGVzY3JpYmUoJ2Zvcm1hdFRpbWVBZ28nLCAoKSA9PiB7XG4gICAgaXQoJ3JldHVybnMgXCJqdXN0IG5vd1wiIGZvciB0aW1lcyBsZXNzIHRoYW4gYSBzZWNvbmQgYWdvJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBleHBlY3QoZm9ybWF0VGltZUFnbyhub3csICdlbicpKS50by5lcXVhbCgnanVzdCBub3cnKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIFwiaW4gMSBzZWNvbmRcIiBmb3Igb25lIHNlY29uZCBpbiB0aGUgZnV0dXJlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBvbmVTZWNvbmRGdXR1cmUgPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgMTAwMCk7XG4gICAgICAgIGV4cGVjdChmb3JtYXRUaW1lQWdvKG9uZVNlY29uZEZ1dHVyZSwgJ2VuJykpLnRvLmVxdWFsKCdpbiAxIHNlY29uZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgXCIxIHNlY29uZCBhZ29cIiBmb3Igb25lIHNlY29uZCBpbiB0aGUgcGFzdCcsICgpID0+IHtcbiAgICAgICAgY29uc3Qgb25lU2Vjb25kUGFzdCA9IG5ldyBEYXRlKERhdGUubm93KCkgLSAxMDAwKTtcbiAgICAgICAgZXhwZWN0KGZvcm1hdFRpbWVBZ28ob25lU2Vjb25kUGFzdCwgJ2VuJykpLnRvLmVxdWFsKCcxIHNlY29uZCBhZ28nKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIFwiaW4gMSBtaW51dGUsIDMwIHNlY29uZHNcIiBmb3IgOTAgc2Vjb25kcyBpbiB0aGUgZnV0dXJlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBuaW5ldHlTZWNvbmRzRnV0dXJlID0gbmV3IERhdGUoRGF0ZS5ub3coKSArIDkwMDAwKTtcbiAgICAgICAgZXhwZWN0KGZvcm1hdFRpbWVBZ28obmluZXR5U2Vjb25kc0Z1dHVyZSwgJ2VuJykpLnRvLmVxdWFsKCdpbiAxIG1pbnV0ZSBhbmQgMzAgc2Vjb25kcycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgXCIxIG1pbnV0ZSwgMzAgc2Vjb25kcyBhZ29cIiBmb3IgOTAgc2Vjb25kcyBpbiB0aGUgcGFzdCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgbmluZXR5U2Vjb25kc1Bhc3QgPSBuZXcgRGF0ZShEYXRlLm5vdygpIC0gOTAwMDApO1xuICAgICAgICBleHBlY3QoZm9ybWF0VGltZUFnbyhuaW5ldHlTZWNvbmRzUGFzdCwgJ2VuJykpLnRvLmVxdWFsKCcxIG1pbnV0ZSBhbmQgMzAgc2Vjb25kcyBhZ28nKTtcbiAgICB9KTtcblxuICAgIC8vIFdlaXRlcmUgVGVzdHMga1x1MDBGNm5uZW4gaGluenVnZWZcdTAwRkNndCB3ZXJkZW5cbn0pO1xuIiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGluc3RhbmNlU3ltYm9sLCBpbnRlcm5hbFN5bWJvbCB9IGZyb20gXCIuLi9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tIFwiLi4vZGF0YS9leHRlbmQubWpzXCI7XG5cbmltcG9ydCB7IEZvcm1hdHRlciBhcyBUZXh0Rm9ybWF0dGVyIH0gZnJvbSBcIi4uL3RleHQvZm9ybWF0dGVyLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVJbnN0YW5jZSwgdmFsaWRhdGVTdHJpbmcgfSBmcm9tIFwiLi4vdHlwZXMvdmFsaWRhdGUubWpzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi90cmFuc2xhdGlvbnMubWpzXCI7XG5cbmV4cG9ydCB7IEZvcm1hdHRlciB9O1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKiBAdHlwZSB7c3ltYm9sfVxuICovXG5jb25zdCBpbnRlcm5hbFRyYW5zbGF0aW9uU3ltYm9sID0gU3ltYm9sKFwiaW50ZXJuYWxUcmFuc2xhdGlvblwiKTtcblxuLyoqXG4gKiBUaGUgRm9ybWF0dGVyIGV4dGVuZHMgdGhlIFRleHQuRm9ybWF0dGVyIHdpdGggdGhlIHBvc3NpYmlsaXR5IHRvIHJlcGxhY2UgdGhlIGtleSBieSBhIHRyYW5zbGF0aW9uLlxuICpcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMjYuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqL1xuY2xhc3MgRm9ybWF0dGVyIGV4dGVuZHMgVGV4dEZvcm1hdHRlciB7XG5cdC8qKlxuXHQgKiBEZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG1hcmtlcnMgYXJlIGAke2AgYW5kIGB9YFxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb2JqZWN0XG5cdCAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gdmFsdWUgaXMgbm90IGEgb2JqZWN0XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihvYmplY3QsIHRyYW5zbGF0aW9uLCBvcHRpb25zKSB7XG5cdFx0c3VwZXIob2JqZWN0LCBvcHRpb25zKTtcblx0XHR0aGlzW2ludGVybmFsVHJhbnNsYXRpb25TeW1ib2xdID0gdmFsaWRhdGVJbnN0YW5jZShcblx0XHRcdHRyYW5zbGF0aW9uLFxuXHRcdFx0VHJhbnNsYXRpb25zLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBgaW5zdGFuY2VvZmAgb3BlcmF0b3IuXG5cdCAqIEByZXR1cm4ge3N5bWJvbH1cblx0ICogQHNpbmNlIDMuMjcuMFxuXHQgKi9cblx0c3RhdGljIGdldCBbaW5zdGFuY2VTeW1ib2xdKCkge1xuXHRcdHJldHVybiBTeW1ib2wuZm9yKFwiQHNjaHVrYWkvbW9uc3Rlci9pMThuL2Zvcm1hdHRlckBAaW5zdGFuY2VcIik7XG5cdH1cblxuXHQvKipcblx0ICogQHByb3BlcnR5IHtvYmplY3R9IG1hcmtlclxuXHQgKiBAcHJvcGVydHkge2FycmF5fSBtYXJrZXIub3Blbj1bXCJpMThue1wiLFwiJHtcIl1cblx0ICogQHByb3BlcnR5IHthcnJheX0gbWFya2VyLmNsb3NlPVtcIiR7XCJdXG5cdCAqIEBwcm9wZXJ0eSB7b2JqZWN0fSBwYXJhbWV0ZXJcblx0ICogQHByb3BlcnR5IHtzdHJpbmd9IHBhcmFtZXRlci5kZWxpbWl0ZXI9XCI6OlwiXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwYXJhbWV0ZXIuYXNzaWdubWVudD1cIj1cIlxuXHQgKiBAcHJvcGVydHkge29iamVjdH0gY2FsbGJhY2tzXG5cdCAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IGNhbGxiYWNrcy5pMThuPSgpPT57fVxuXHQgKi9cblx0Z2V0IGRlZmF1bHRzKCkge1xuXHRcdHJldHVybiBleHRlbmQoe30sIHN1cGVyLmRlZmF1bHRzLCB7XG5cdFx0XHRjYWxsYmFja3M6IHtcblx0XHRcdFx0aTE4bjogKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXNbaW50ZXJuYWxUcmFuc2xhdGlvblN5bWJvbF0uZ2V0VGV4dCh2YWxpZGF0ZVN0cmluZyh2YWx1ZSkpO1xuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdG1hcmtlcjoge1xuXHRcdFx0XHRvcGVuOiBbXCJpMThue1wiLCBcIiR7XCJdLFxuXHRcdFx0XHRjbG9zZTogW1wifVwiXSxcblx0XHRcdH0sXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHRcblx0ICogQHJldHVybiB7c3RyaW5nfVxuXHQgKiBAdGhyb3dzIHtUeXBlRXJyb3J9IHZhbHVlIGlzIG5vdCBhIHN0cmluZ1xuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdG9vIGRlZXAgbmVzdGluZ1xuXHQgKiBAdGhyb3dzIHtFcnJvcn0ga2V5IG5vdCBmb3VuZFxuXHQgKiBAdGhyb3dzIHtFcnJvcn0gdGhlIGNsb3NpbmcgbWFya2VyIGlzIG1pc3Npbmdcblx0ICovXG5cdGZvcm1hdCh0ZXh0KSB7XG5cdFx0dmFsaWRhdGVTdHJpbmcodGV4dCk7XG5cblx0XHRjb25zdCBvcGVuTWFya2VyID0gdGhpc1tpbnRlcm5hbFN5bWJvbF1bXCJtYXJrZXJcIl1bXCJvcGVuXCJdPy5bMF07XG5cdFx0Y29uc3QgY2xvc2VNYXJrZXIgPSB0aGlzW2ludGVybmFsU3ltYm9sXVtcIm1hcmtlclwiXVtcImNsb3NlXCJdPy5bMF07XG5cblx0XHRpZiAodGV4dC5pbmRleE9mKG9wZW5NYXJrZXIpID09PSAwKSB7XG5cdFx0XHR0ZXh0ID0gdGV4dC5zdWJzdHJpbmcob3Blbk1hcmtlci5sZW5ndGgpO1xuXG5cdFx0XHRpZiAodGV4dC5pbmRleE9mKGNsb3NlTWFya2VyKSA9PT0gdGV4dC5sZW5ndGggLSBjbG9zZU1hcmtlci5sZW5ndGgpIHtcblx0XHRcdFx0dGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIHRleHQubGVuZ3RoIC0gY2xvc2VNYXJrZXIubGVuZ3RoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcInRoZSBjbG9zaW5nIG1hcmtlciBpcyBtaXNzaW5nXCIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNvbnN0IHBhcnRzID0gdmFsaWRhdGVTdHJpbmcodGV4dCkuc3BsaXQoXCI6OlwiKTtcblx0XHRjb25zdCB0cmFuc2xhdGlvbktleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpOyAvLyBrZXkgdmFsdWUgZGVsaW1pdGVyXG5cdFx0Y29uc3QgcGFyYW1ldGVyID0gcGFydHMuam9pbihcIjo6XCIpLnRyaW0oKTtcblxuXHRcdGxldCBhc3NlbWJsZWRUZXh0ID0gYCR7b3Blbk1hcmtlcn1zdGF0aWM6JHt0cmFuc2xhdGlvbktleX0gfCBjYWxsOmkxOG5gO1xuXHRcdGlmIChwYXJhbWV0ZXIubGVuZ3RoID4gMCkge1xuXHRcdFx0YXNzZW1ibGVkVGV4dCArPSBgOjoke3BhcmFtZXRlcn1gO1xuXHRcdH1cblx0XHRhc3NlbWJsZWRUZXh0ICs9IGNsb3NlTWFya2VyO1xuXHRcdHJldHVybiBzdXBlci5mb3JtYXQoYXNzZW1ibGVkVGV4dCk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuaW1wb3J0IHtGb3JtYXR0ZXJ9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi9mb3JtYXR0ZXIubWpzXCI7XG5pbXBvcnQge1RyYW5zbGF0aW9uc30gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcblxuXG5kZXNjcmliZSgnRm9ybWF0dGVyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ2V4YW1wbGUnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgaXQoJ3Nob3VsZCBydW4gd2l0aCBtYXJrZXInLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IG5ldyBUcmFuc2xhdGlvbnMoJ2VuJylcbiAgICAgICAgICAgICAgICAuYXNzaWduVHJhbnNsYXRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgdGhla2V5OiBcIiR7YW5pbWFsfSBoYXMgZWF0ZW4gdGhlICR7Zm9vZH0hXCJcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgZiA9IG5ldyBGb3JtYXR0ZXIoe30sIHRyYW5zbGF0aW9ucyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGV4cGVjdChmLmZvcm1hdChcImkxOG57dGhla2V5OjphbmltYWw9ZG9nOjpmb29kPWNha2V9XCIpKS50by5iZS5lcXVhbCgnZG9nIGhhcyBlYXRlbiB0aGUgY2FrZSEnKTtcbiAgICAgICAgICAgIC8vIFx1MjFBNiBkb2cgaGFzIGVhdGVuIHRoZSBjYWtlISAgICAgICAgICAgICAgICBcblxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIGl0KCdzaG91bGQgcnVuIHdpdGhvdXQgbWFya2VyJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBuZXcgVHJhbnNsYXRpb25zKCdlbicpXG4gICAgICAgICAgICAgICAgLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIHRoZWtleTogXCIke2FuaW1hbH0gaGFzIGVhdGVuIHRoZSAke2Zvb2R9IVwiXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIG1pc3NpbmcgbWFya2VyXG4gICAgICAgICAgICBleHBlY3QobmV3IEZvcm1hdHRlcih7fSwgdHJhbnNsYXRpb25zKS5mb3JtYXQoXCJ0aGVrZXk6OmFuaW1hbD1kb2c6OmZvb2Q9Y2FrZVwiKSkudG8uYmUuZXF1YWwoJ2RvZyBoYXMgZWF0ZW4gdGhlIGNha2UhJyk7XG4gICAgICAgICAgICAvLyBcdTIxQTYgZG9nIGhhcyBlYXRlbiB0aGUgY2FrZSEgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGRlc2NyaWJlKCdmb3JtYXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuICAgICAgICAgICAgWydpMThue3RyYW5zbGF0aW9ua2V5OjphPTM6OmI9NX0nLCAndGVzdCBpcyAzIGFuZCA1J10sXG5cbiAgICAgICAgXS5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG5cbiAgICAgICAgICAgIGxldCBhID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgYiA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnZm9ybWF0ICcgKyBhICsgJyBzaG91bGQgJyArIGIsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0aW9ucyA9IG5ldyBUcmFuc2xhdGlvbnMoJ2RlJykuYXNzaWduVHJhbnNsYXRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25rZXk6IFwidGVzdCBpcyAke2F9IGFuZCAke2J9XCJcbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgZXhwZWN0KFxuICAgICAgICAgICAgICAgICAgICBuZXcgRm9ybWF0dGVyKHt9LCB0cmFuc2xhdGlvbnMpLmZvcm1hdChhKVxuICAgICAgICAgICAgICAgICkudG8uZXF1YWwoYilcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfSlcblxuXG59KVxuOyIsICJcblxuaW1wb3J0IHtleHBlY3R9IGZyb20gXCJjaGFpXCJcbmltcG9ydCB7cGFyc2VMb2NhbGUsIExvY2FsZX0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL2xvY2FsZS5tanNcIjtcblxuXG5kZXNjcmliZSgnTG9jYWxlJywgZnVuY3Rpb24gKCkge1xuXG4gICAgZGVzY3JpYmUoJ25ldyBpbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBbXG4gICAgICAgICAgICAvLyBsYW5ndWFnZSwgcmVnaW9uLCBzY3JpcHQsIHZhcmlhbnRzLCBleHRsYW5nLCBwcml2YXRlVXNlXG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTY0Ni5odG1sXG4gICAgICAgICAgICBbJ3poJywgdW5kZWZpbmVkLCAnSGFudCcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICd6aC1IYW50J10sIC8vIHpoLUhhbnQgKENoaW5lc2Ugd3JpdHRlbiB1c2luZyB0aGUgVHJhZGl0aW9uYWwgQ2hpbmVzZSBzY3JpcHQpXG4gICAgICAgICAgICBbJ2RlJywgJ0NIJywgdW5kZWZpbmVkLCAnMTkwMScsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnZGUtQ0gtMTkwMSddLCAgLy8gZGUtQ0gtMTkwMSAoR2VybWFuIGFzIHVzZWQgaW4gU3dpdHplcmxhbmQgdXNpbmcgdGhlIDE5MDEgdmFyaWFudCBbb3J0aG9ncmFwaHldKVxuICAgICAgICAgICAgWydzbCcsICdJVCcsIHVuZGVmaW5lZCwgJ25lZGlzJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdzbC1JVC1uZWRpcyddLCAgLy8gc2wtSVQtbmVkaXMgKFNsb3ZlbmlhbiBhcyB1c2VkIGluIEl0YWx5LCBOYWRpemEgZGlhbGVjdClcbiAgICAgICAgICAgIFsnaHknLCAnSVQnLCAnTGF0bicsICdhcmV2ZWxhJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdoeS1MYXRuLUlULWFyZXZlbGEnXSwgLy8gaHktTGF0bi1JVC1hcmV2ZWxhIChFYXN0ZXJuIEFybWVuaWFuIHdyaXR0ZW4gaW4gTGF0aW4gc2NyaXB0LCBhcyB1c2VkIGluIEl0YWx5KVxuICAgICAgICAgICAgWyd6aCcsICdDTicsICdIYW5zJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ3poLUhhbnMtQ04nXSwgLy8gemgtSGFucy1DTiAoQ2hpbmVzZSB3cml0dGVuIHVzaW5nIHRoZSBTaW1wbGlmaWVkIHNjcmlwdCBhcyB1c2VkIGluICBtYWlubGFuZCBDaGluYSlcbiAgICAgICAgICAgIFsnc3InLCAnUlMnLCAnTGF0bicsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdzci1MYXRuLVJTJ10sIC8vIHNyLUxhdG4tUlMgKFNlcmJpYW4gd3JpdHRlbiB1c2luZyB0aGUgTGF0aW4gc2NyaXB0IGFzIHVzZWQgaW4gU2VyYmlhKVxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZCA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGUgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBmID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnbmV3IExvY2FsZSgnICsgYSArICcsJyArIGIgKyAnLCcgKyBjICsgJywnICsgZCArICcsJyArIGUgKyAnLCcgKyBmICsgJykgc2hvdWxkIHJldHVybiAnICsgZywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgZXhwZWN0KG5ldyBMb2NhbGUoYSwgYiwgYywgZCwgZSwgZikudG9TdHJpbmcoKSkuaXMuZXF1YWwoZylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3BhcnNlTG9jYWxlKCknLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgW1xuXG4gICAgICAgICAgICAvLyBsYW5ndWFnZSwgcmVnaW9uLCBzY3JpcHQsIHZhcmlhbnRzLCBleHRsYW5nLCBwcml2YXRlVXNlXG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTY0Ni5odG1sXG4gICAgICAgICAgICBbJ3poJywgdW5kZWZpbmVkLCAnSGFudCcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICd6aC1IYW50J10sIC8vIHpoLUhhbnQgKENoaW5lc2Ugd3JpdHRlbiB1c2luZyB0aGUgVHJhZGl0aW9uYWwgQ2hpbmVzZSBzY3JpcHQpXG4gICAgICAgICAgICBbJ2RlJywgJ0NIJywgdW5kZWZpbmVkLCAnMTkwMScsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAnZGUtQ0gtMTkwMSddLCAgLy8gZGUtQ0gtMTkwMSAoR2VybWFuIGFzIHVzZWQgaW4gU3dpdHplcmxhbmQgdXNpbmcgdGhlIDE5MDEgdmFyaWFudCBbb3J0aG9ncmFwaHldKVxuICAgICAgICAgICAgWydzbCcsICdJVCcsIHVuZGVmaW5lZCwgJ25lZGlzJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdzbC1JVC1uZWRpcyddLCAgLy8gc2wtSVQtbmVkaXMgKFNsb3ZlbmlhbiBhcyB1c2VkIGluIEl0YWx5LCBOYWRpemEgZGlhbGVjdClcbiAgICAgICAgICAgIFsnaHknLCAnSVQnLCAnTGF0bicsICdhcmV2ZWxhJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdoeS1MYXRuLUlULWFyZXZlbGEnXSwgLy8gaHktTGF0bi1JVC1hcmV2ZWxhIChFYXN0ZXJuIEFybWVuaWFuIHdyaXR0ZW4gaW4gTGF0aW4gc2NyaXB0LCBhcyB1c2VkIGluIEl0YWx5KVxuICAgICAgICAgICAgWyd6aCcsICdDTicsICdIYW5zJywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgJ3poLUhhbnMtQ04nXSwgLy8gemgtSGFucy1DTiAoQ2hpbmVzZSB3cml0dGVuIHVzaW5nIHRoZSBTaW1wbGlmaWVkIHNjcmlwdCBhcyB1c2VkIGluICBtYWlubGFuZCBDaGluYSlcbiAgICAgICAgICAgIFsnc3InLCAnUlMnLCAnTGF0bicsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICdzci1MYXRuLVJTJ10sIC8vIHNyLUxhdG4tUlMgKFNlcmJpYW4gd3JpdHRlbiB1c2luZyB0aGUgTGF0aW4gc2NyaXB0IGFzIHVzZWQgaW4gU2VyYmlhKVxuXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuXG4gICAgICAgICAgICBsZXQgYSA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGIgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBjID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZCA9IGRhdGEuc2hpZnQoKVxuICAgICAgICAgICAgbGV0IGUgPSBkYXRhLnNoaWZ0KClcbiAgICAgICAgICAgIGxldCBmID0gZGF0YS5zaGlmdCgpXG4gICAgICAgICAgICBsZXQgZyA9IGRhdGEuc2hpZnQoKVxuXG4gICAgICAgICAgICBpdCgnbmV3IExvY2FsZSgnICsgYSArICcsJyArIGIgKyAnLCcgKyBjICsgJywnICsgZCArICcsJyArIGUgKyAnLCcgKyBmICsgJykgc2hvdWxkIHJldHVybiAnICsgZywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbG9jYWxlID0gcGFyc2VMb2NhbGUoZylcbiAgICAgICAgICAgICAgICBleHBlY3QobG9jYWxlLmxvY2FsZVN0cmluZykudG8uYmUuZXF1YWwoZyk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS5sYW5ndWFnZSkudG8uYmUuZXF1YWwoYSk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KGxvY2FsZS5yZWdpb24pLnRvLmJlLmVxdWFsKGIpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChsb2NhbGUuc2NyaXB0KS50by5iZS5lcXVhbChjKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobG9jYWxlLnZhcmlhbnRzKS50by5iZS5lcXVhbChkKTtcbiAgICAgICAgICAgICAgICBleHBlY3QobG9jYWxlLmV4dGxhbmcpLnRvLmJlLmVxdWFsKGUpO1xuICAgICAgICAgICAgICAgIGV4cGVjdChsb2NhbGUucHJpdmF0ZVVzZSkudG8uYmUuZXF1YWwoZik7XG5cbiAgICAgICAgICAgICAgICBleHBlY3QobmV3IExvY2FsZShhLCBiLCBjLCBkLCBlLCBmKS50b1N0cmluZygpKS5pcy5lcXVhbChnKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge0FUVFJJQlVURV9PQkpFQ1RMSU5LfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2RvbS9jb25zdGFudHMubWpzXCI7XG5pbXBvcnQge2dldExpbmtlZE9iamVjdHN9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvZG9tL2F0dHJpYnV0ZXMubWpzXCI7XG5pbXBvcnQge1Byb3ZpZGVyfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vcHJvdmlkZXIubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5pbXBvcnQge2dldERvY3VtZW50VHJhbnNsYXRpb25zLCBUcmFuc2xhdGlvbnN9IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5cbmRlc2NyaWJlKCdQcm92aWRlcicsIGZ1bmN0aW9uICgpIHtcblxuXG4gICAgbGV0IGh0bWwxID0gYFxuICAgIDxkaXYgaWQ9XCJ0ZXN0MVwiPlxuICAgIDwvZGl2PlxuYDtcblxuICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gaHRtbDE7XG5cblxuICAgIH0pXG5cbiAgICBhZnRlckVhY2goKCkgPT4ge1xuICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICB9KVxuXG4gICAgYmVmb3JlKGZ1bmN0aW9uIChkb25lKSB7XG4gICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZG9uZSgpXG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ1Byb3ZpZGVyIGFuZCBEb20nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3QgdHJhbnNsYXRpb25zTGlua1N5bWJvbCA9IFN5bWJvbC5mb3IoXCJAc2NodWthaS9tb25zdGVyL2kxOG4vdHJhbnNsYXRpb25zQEBsaW5rXCIpO1xuXG4gICAgICAgIGl0KCdhc3NpZ25Ub0VsZW1lbnQnLCBmdW5jdGlvbiAoZG9uZSkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXN0MScpO1xuICAgICAgICAgICAgY29uc3QgcCA9IG5ldyBQcm92aWRlcigpO1xuICAgICAgICAgICAgY29uc3QgciA9IHAuYXNzaWduVG9FbGVtZW50KHVuZGVmaW5lZCwgZWxlbWVudCk7XG5cbiAgICAgICAgICAgIHIudGhlbigoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfT0JKRUNUTElOSyk7XG4gICAgICAgICAgICAgICAgaWYgKHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZShuZXcgRXJyb3IoXCJBdHRyaWJ1dGUgbm90IHNldFwiKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpID0gZ2V0TGlua2VkT2JqZWN0cyhlbGVtZW50LCB0cmFuc2xhdGlvbnNMaW5rU3ltYm9sKVxuICAgICAgICAgICAgICAgIGlmIChpID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUobmV3IEVycm9yKFwiTm8gbGlua2VkIG9iamVjdCBmb3VuZFwiKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdiBvZiBpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY291bnRlciAhPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKG5ldyBFcnJvcihcIk5vIGxpbmtlZCBvYmplY3QgZm91bmRcIikpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZG9jVHJhbnMgPSBnZXREb2N1bWVudFRyYW5zbGF0aW9ucyhlbGVtZW50KVxuICAgICAgICAgICAgICAgIGV4cGVjdChkb2NUcmFucykuaXMuaW5zdGFuY2VvZihUcmFuc2xhdGlvbnMpO1xuXG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IGRvbmUoZSkpO1xuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgIi8qKlxuICogQ29weXJpZ2h0IFx1MDBBOSBzY2h1a2FpIEdtYkggYW5kIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycywge3tjb3B5UmlnaHRZZWFyfX0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBOb2RlIG1vZHVsZTogQHNjaHVrYWkvbW9uc3RlclxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDMgKEFHUEx2MykuXG4gKiBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIGNhbiBiZSBmb3VuZCBhdDogaHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLTMuMC5lbi5odG1sXG4gKlxuICogRm9yIHRob3NlIHdobyBkbyBub3Qgd2lzaCB0byBhZGhlcmUgdG8gdGhlIEFHUEx2MywgYSBjb21tZXJjaWFsIGxpY2Vuc2UgaXMgYXZhaWxhYmxlLlxuICogQWNxdWlyaW5nIGEgY29tbWVyY2lhbCBsaWNlbnNlIGFsbG93cyB5b3UgdG8gdXNlIHRoaXMgc29mdHdhcmUgd2l0aG91dCBjb21wbHlpbmcgd2l0aCB0aGUgQUdQTHYzIHRlcm1zLlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgcHVyY2hhc2luZyBhIGNvbW1lcmNpYWwgbGljZW5zZSwgcGxlYXNlIGNvbnRhY3Qgc2NodWthaSBHbWJILlxuICpcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMFxuICovXG5cbmltcG9ydCB7IGludGVybmFsU3ltYm9sIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50cy5tanNcIjtcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gXCIuLi8uLi9kYXRhL2V4dGVuZC5tanNcIjtcbmltcG9ydCB7IEZvcm1hdHRlciB9IGZyb20gXCIuLi8uLi90ZXh0L2Zvcm1hdHRlci5tanNcIjtcbmltcG9ydCB7IGdldEdsb2JhbEZ1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7IGlzSW5zdGFuY2UsIGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL2lzLm1qc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGVPYmplY3QsIHZhbGlkYXRlU3RyaW5nIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3ZhbGlkYXRlLm1qc1wiO1xuaW1wb3J0IHsgcGFyc2VMb2NhbGUgfSBmcm9tIFwiLi4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tIFwiLi4vcHJvdmlkZXIubWpzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi4vdHJhbnNsYXRpb25zLm1qc1wiO1xuXG5leHBvcnQgeyBGZXRjaCB9O1xuXG4vKipcbiAqIFRoZSBmZXRjaCBwcm92aWRlciByZXRyaWV2ZXMgYSBKU09OIGZpbGUgZnJvbSB0aGUgZ2l2ZW4gVVJMIGFuZCByZXR1cm5zIGEgdHJhbnNsYXRpb24gb2JqZWN0LlxuICpcbiAqIEBleHRlcm5hbEV4YW1wbGUgLi4vLi4vLi4vZXhhbXBsZS9pMThuL3Byb3ZpZGVycy9mZXRjaC5tanNcbiAqIEBsaWNlbnNlIEFHUEx2M1xuICogQHNpbmNlIDEuMTMuMFxuICogQGNvcHlyaWdodCBzY2h1a2FpIEdtYkhcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMzA2Nn1cbiAqIEB0dXRvcmlhbCBpMThuLWxvY2FsZS1hbmQtZm9ybWF0dGVyXG4gKi9cbmNsYXNzIEZldGNoIGV4dGVuZHMgUHJvdmlkZXIge1xuXHQvKipcblx0ICogQXMgb3B0aW9ucyB0aGUga2V5IGBmZXRjaGAgY2FuIGJlIHBhc3NlZC4gVGhpcyBjb25maWcgb2JqZWN0IGlzIHBhc3NlZCB0byB0aGUgZmV0Y2ggbWV0aG9kIGFzIGluaXQuXG5cdCAqXG5cdCAqIFRoZSB1cmwgbWF5IGNvbnRhaW4gcGxhY2Vob2xkZXJzIChsYW5ndWFnZSwgc2NyaXB0LCByZWdpb24sIHZhcmlhbnRzLCBleHRsYW5nLCBwcml2YXRlVXNlKSwgc28geW91IGNhbiBzcGVjaWZ5IG9uZSB1cmwgZm9yIGFsbCB0cmFuc2xhdGlvbnMuXG5cdCAqXG5cdCAqIGBgYFxuXHQgKiBuZXcgRmV0Y2goJ2h0dHBzOi8vd3d3LmV4YW1wbGUuY29tL2Fzc2V0cy8ke2xhbmd1YWdlfS5qc29uJylcblx0ICogYGBgXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIHNlZSB7QGxpbmsgTW9uc3Rlci5JMThuLlByb3ZpZGVycy5GZXRjaCNkZWZhdWx0c31cblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL2ZldGNofVxuXHQgKi9cblx0Y29uc3RydWN0b3IodXJsLCBvcHRpb25zKSB7XG5cdFx0c3VwZXIob3B0aW9ucyk7XG5cblx0XHRpZiAoaXNJbnN0YW5jZSh1cmwsIFVSTCkpIHtcblx0XHRcdHVybCA9IHVybC50b1N0cmluZygpO1xuXHRcdH1cblxuXHRcdGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG9wdGlvbnMgPSB7fTtcblx0XHR9XG5cblx0XHR2YWxpZGF0ZVN0cmluZyh1cmwpO1xuXG5cdFx0LyoqXG5cdFx0ICogQHByb3BlcnR5IHtzdHJpbmd9XG5cdFx0ICovXG5cdFx0dGhpcy51cmwgPSB1cmw7XG5cblx0XHQvKipcblx0XHQgKiBAcHJpdmF0ZVxuXHRcdCAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBvcHRpb25zXG5cdFx0ICovXG5cdFx0dGhpc1tpbnRlcm5hbFN5bWJvbF0gPSBleHRlbmQoXG5cdFx0XHR7fSxcblx0XHRcdHN1cGVyLmRlZmF1bHRzLFxuXHRcdFx0dGhpcy5kZWZhdWx0cyxcblx0XHRcdHZhbGlkYXRlT2JqZWN0KG9wdGlvbnMpLFxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRGVmYXVsdHNcblx0ICpcblx0ICogQHByb3BlcnR5IHtPYmplY3R9IGZldGNoXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tZXRob2Q9R0VUXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5tb2RlPWNvcnNcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLmNhY2hlPW5vLWNhY2hlXG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5jcmVkZW50aWFscz1vbWl0XG5cdCAqIEBwcm9wZXJ0eSB7U3RyaW5nfSBmZXRjaC5yZWRpcmVjdD1mb2xsb3dcblx0ICogQHByb3BlcnR5IHtTdHJpbmd9IGZldGNoLnJlZmVycmVyUG9saWN5PW5vLXJlZmVycmVyXG5cdCAqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9GZXRjaF9BUEl9XG5cdCAqL1xuXHRnZXQgZGVmYXVsdHMoKSB7XG5cdFx0cmV0dXJuIGV4dGVuZChcblx0XHRcdHtcblx0XHRcdFx0ZmV0Y2g6IHtcblx0XHRcdFx0XHRtZXRob2Q6IFwiR0VUXCIsIC8vICpHRVQsIFBPU1QsIFBVVCwgREVMRVRFLCBldGMuXG5cdFx0XHRcdFx0bW9kZTogXCJjb3JzXCIsIC8vIG5vLWNvcnMsICpjb3JzLCBzYW1lLW9yaWdpblxuXHRcdFx0XHRcdGNhY2hlOiBcIm5vLWNhY2hlXCIsIC8vICpkZWZhdWx0LCBuby1jYWNoZSwgcmVsb2FkLCBmb3JjZS1jYWNoZSwgb25seS1pZi1jYWNoZWRcblx0XHRcdFx0XHRjcmVkZW50aWFsczogXCJvbWl0XCIsIC8vIGluY2x1ZGUsICpzYW1lLW9yaWdpbiwgb21pdFxuXHRcdFx0XHRcdHJlZGlyZWN0OiBcImZvbGxvd1wiLCAvLyBtYW51YWwsICpmb2xsb3csIGVycm9yXG5cdFx0XHRcdFx0cmVmZXJyZXJQb2xpY3k6IFwibm8tcmVmZXJyZXJcIiwgLy8gbm8tcmVmZXJyZXIsICpuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZSwgb3JpZ2luLCBvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4sIHNhbWUtb3JpZ2luLCBzdHJpY3Qtb3JpZ2luLCBzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luLCB1bnNhZmUtdXJsXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdFx0c3VwZXIuZGVmYXVsdHMsXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0ge0xvY2FsZXxzdHJpbmd9IGxvY2FsZVxuXHQgKiBAcmV0dXJuIHtQcm9taXNlfVxuXHQgKi9cblx0Z2V0VHJhbnNsYXRpb25zKGxvY2FsZSkge1xuXHRcdGlmIChpc1N0cmluZyhsb2NhbGUpKSB7XG5cdFx0XHRsb2NhbGUgPSBwYXJzZUxvY2FsZShsb2NhbGUpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIobG9jYWxlLmdldE1hcCgpKTtcblxuXHRcdHJldHVybiBnZXRHbG9iYWxGdW5jdGlvbihcImZldGNoXCIpKFxuXHRcdFx0Zm9ybWF0dGVyLmZvcm1hdCh0aGlzLnVybCksXG5cdFx0XHR0aGlzLmdldE9wdGlvbihcImZldGNoXCIsIHt9KSxcblx0XHQpXG5cdFx0XHQudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmpzb24oKSlcblx0XHRcdC50aGVuKChkYXRhKSA9PiB7XG5cdFx0XHRcdHJldHVybiBuZXcgVHJhbnNsYXRpb25zKGxvY2FsZSkuYXNzaWduVHJhbnNsYXRpb25zKGRhdGEpO1xuXHRcdFx0fSk7XG5cdH1cbn1cbiIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5cbmltcG9ydCB7RmV0Y2h9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZmV0Y2gubWpzXCI7XG5pbXBvcnQge1RyYW5zbGF0aW9uc30gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcblxuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbmxldCBmZXRjaFJlZmVyZW5jZTtcblxuXG5kZXNjcmliZSgnVHJhbnNsYXRpb24gUHJvdmlkZXIgRmV0Y2gnLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZldGNoUmVmZXJlbmNlO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICAgICAgZmV0Y2hSZWZlcmVuY2UgPSBnbG9iYWxbJ2ZldGNoJ107XG4gICAgICAgIGdsb2JhbFsnZmV0Y2gnXSA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIGpzb246IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYTogXCJ0ZXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICB9O1xuXG4gICAgfSlcblxuICAgIGRlc2NyaWJlKCdmZXRjaCBtb2NrIGRhdGEgYW5kIGNyZWF0ZSB0cmFuc2xhdGlvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBpdCgnZmV0Y2gnLCBmdW5jdGlvbiAoZG9uZSkge1xuXG4gICAgICAgICAgICBsZXQgcCA9IChuZXcgRmV0Y2gobmV3IFVSTCgnaHR0cDovL2V4YW1wbGUuY29tJykpKS5nZXRUcmFuc2xhdGlvbnMoJ2VuJyk7XG5cbiAgICAgICAgICAgIGV4cGVjdChwKS5pcy5pbnN0YW5jZW9mKFByb21pc2UpO1xuXG4gICAgICAgICAgICBwLnRoZW4ociA9PiB7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBleHBlY3QocikuaXMuaW5zdGFuY2VvZihUcmFuc2xhdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICB9KTtcblxuICAgIH0pO1xuXG5cbn0pOyIsICJpbXBvcnQge2V4cGVjdH0gZnJvbSBcImNoYWlcIlxuXG5cbmltcG9ydCB7RW1iZWR9IGZyb20gXCIuLi8uLi8uLi8uLi9zb3VyY2UvaTE4bi9wcm92aWRlcnMvZW1iZWQubWpzXCI7XG5pbXBvcnQge1RyYW5zbGF0aW9uc30gZnJvbSBcIi4uLy4uLy4uLy4uL3NvdXJjZS9pMThuL3RyYW5zbGF0aW9ucy5tanNcIjtcbmltcG9ydCB7Z2V0R2xvYmFsfSBmcm9tIFwiLi4vLi4vLi4vLi4vc291cmNlL3R5cGVzL2dsb2JhbC5tanNcIjtcbmltcG9ydCB7aW5pdEpTRE9NfSBmcm9tIFwiLi4vLi4vLi4vdXRpbC9qc2RvbS5tanNcIjtcblxuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcblxuY29uc3QgaHRtbDEgPSBgXG48c2NyaXB0IGlkPVwidGVtcGxvY2FsZVwiIHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCI+XG57XG4gICAgICAgIFwia2V5XCI6IFwidHJhbnNsYXRpb25cIlxufVxuPC9zY3JpcHQ+XG5gO1xuXG5kZXNjcmliZSgnVHJhbnNsYXRpb24gUHJvdmlkZXIgRW1iZWQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgaW5pdEpTRE9NKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBkb25lKClcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cblxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBcIlwiO1xuICAgIH0pO1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICBtb2Nrcy5pbm5lckhUTUwgPSBodG1sMTtcblxuICAgIH0pXG5cbiAgICBkZXNjcmliZSgnZ2V0IG1vY2sgZGF0YSBhbmQgY3JlYXRlIHRyYW5zbGF0aW9uJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGl0KCdlbWJlZCcsIGZ1bmN0aW9uIChkb25lKSB7XG5cbiAgICAgICAgICAgIGNvbnN0IGUgPSBuZXcgRW1iZWQoJ3RlbXBsb2NhbGUnKTtcbiAgICAgICAgICAgIGxldCBwID0gZS5nZXRUcmFuc2xhdGlvbnMoJ2VuJyk7XG4gICAgICAgICAgICBleHBlY3QocCkuaXMuaW5zdGFuY2VvZihQcm9taXNlKTtcblxuICAgICAgICAgICAgcC50aGVuKHIgPT4ge1xuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHIpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcbiBcbiAgICAgICAgICAgICAgICAgICAgbGV0IHQgPSByLmdldFRleHQoJ2tleScpXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdCh0KS5pcy5lcXVhbCgndHJhbnNsYXRpb24nKTtcblxuXG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cblxufSk7IiwgImltcG9ydCB7ZXhwZWN0fSBmcm9tIFwiY2hhaVwiXG5pbXBvcnQge3BhcnNlTG9jYWxlfSBmcm9tIFwiLi4vLi4vLi4vc291cmNlL2kxOG4vbG9jYWxlLm1qc1wiO1xuaW1wb3J0IHtFbWJlZH0gZnJvbSBcIi4uLy4uLy4uL3NvdXJjZS9pMThuL3Byb3ZpZGVycy9lbWJlZC5tanNcIjtcbmltcG9ydCB7XG4gICAgVHJhbnNsYXRpb25zLFxuICAgIGdldERvY3VtZW50VHJhbnNsYXRpb25zXG4gICAgXG59IGZyb20gXCIuLi8uLi8uLi9zb3VyY2UvaTE4bi90cmFuc2xhdGlvbnMubWpzXCI7XG5pbXBvcnQge2luaXRKU0RPTX0gZnJvbSBcIi4uLy4uL3V0aWwvanNkb20ubWpzXCI7XG5cbmRlc2NyaWJlKCdUcmFuc2xhdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICBkZXNjcmliZSgnSW5zdGFuY2UgYW5kIEluaXQnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgbGV0IHRyYW5zbGF0aW9uO1xuXG4gICAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAgICAgdHJhbnNsYXRpb24gPSBuZXcgVHJhbnNsYXRpb25zKHBhcnNlTG9jYWxlKCdlbi1HQicpKTtcblxuICAgICAgICAgICAgdHJhbnNsYXRpb24uYXNzaWduVHJhbnNsYXRpb25zKHtcbiAgICAgICAgICAgICAgICB0ZXN0MTogXCJhYmNcIixcbiAgICAgICAgICAgICAgICB0ZXN0MjogeydvdGhlcic6ICd4eXonfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pXG5cbiAgICAgICAgaXQoJ2NyZWF0ZSBpbnN0YW5jZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGV4cGVjdChuZXcgVHJhbnNsYXRpb25zKHBhcnNlTG9jYWxlKCdlbi1HQicpKSkuaXMuaW5zdGFuY2VvZihUcmFuc2xhdGlvbnMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnaW5pdCB0cmFuc2xhdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QodHJhbnNsYXRpb24uYXNzaWduVHJhbnNsYXRpb25zKHtcbiAgICAgICAgICAgICAgICB0ZXN0MTogXCJhYmNcIixcbiAgICAgICAgICAgICAgICB0ZXN0MjogeydvdGhlcic6ICd4eXonfVxuICAgICAgICAgICAgfSkpLmlzLmluc3RhbmNlb2YoVHJhbnNsYXRpb25zKTtcbiAgICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXRUZXh0JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgIGxldCB0cmFuc2xhdGlvbjtcblxuICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uID0gbmV3IFRyYW5zbGF0aW9ucyhwYXJzZUxvY2FsZSgnZW4tR0InKSk7XG5cbiAgICAgICAgICAgIHRyYW5zbGF0aW9uLmFzc2lnblRyYW5zbGF0aW9ucyh7XG4gICAgICAgICAgICAgICAgdGVzdDE6IFwiYWJjXCIsXG4gICAgICAgICAgICAgICAgdGVzdDI6IHsnb3RoZXInOiAneHl6J31cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuXG4gICAgICAgIGl0KCdjcmVhdGUsIHNldCBhbmQgZ2V0IGVuLUdCJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZXhwZWN0KHRyYW5zbGF0aW9uLmdldFRleHQoJ3Rlc3QxJykpLmlzLmVxdWFsKCdhYmMnKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaXQoJ2NyZWF0ZSwgc2V0IGFuZCBnZXQgIGVuLUdCIHdpdGggcGx1cmFscnVsZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBleHBlY3QodHJhbnNsYXRpb24uZ2V0VGV4dCgndGVzdDInKSkuaXMuZXF1YWwoJ3h5eicpXG4gICAgICAgIH0pO1xuXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBpbml0RG9jdW1lbnRUcmFuc2xhdGlvblxuICAgICAqL1xuXG4gICAgZGVzY3JpYmUoXCJ0ZXN0IGluaXREb2N1bWVudFRyYW5zbGF0aW9uIFwiLCBmdW5jdGlvbiAoKSB7XG5cblxuICAgICAgICBsZXQgaHRtbDEgPSBgPGRpdiBpZD1cIm1vY2stdHJhbnNsYXRpb25zXCI+PC9kaXY+XG4gICAgXG48c2NyaXB0IHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJ0cmFuc2xhdGlvbnNcIj5cbiAgICB7XG4gICAgICAgIFwidGVzdDFcIjogXCJhYmNcIixcbiAgICAgICAgXCJ0ZXN0MlwiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwieHl6XCJcbiAgICAgICAgfVxuICAgIH1cbjwvc2NyaXB0PlxuXG48c2NyaXB0IHR5cGU9XCJhcHBsaWNhdGlvbi9qc29uXCIgZGF0YS1tb25zdGVyLXJvbGU9XCJ0cmFuc2xhdGlvbnNcIj5cbiAgICB7XG4gICAgICAgIFwidGVzdDFcIjogXCJ4eXpcIixcbiAgICAgICAgXCJ0ZXN0M1wiOiB7XG4gICAgICAgICAgICBcIm90aGVyXCI6IFwieHl6XCJcbiAgICAgICAgfVxuICAgIH1cbjwvc2NyaXB0PiAgICBcbiAgICBcbmA7XG5cbiAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgIG1vY2tzLmlubmVySFRNTCA9IGh0bWwxO1xuXG4gICAgICAgIH0pXG5cbiAgICAgICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBtb2NrcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2NrcycpO1xuICAgICAgICAgICAgbW9ja3MuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgfSlcblxuICAgICAgICBiZWZvcmUoZnVuY3Rpb24gKGRvbmUpIHtcbiAgICAgICAgICAgIGluaXRKU0RPTSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRvbmUoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgaXQoJ0luaXQgdHJhbnNsYXRpb25zJywgZnVuY3Rpb24gKGRvbmUpIHtcblxuICAgICAgICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9jay10cmFuc2xhdGlvbnMnKTtcbiAgICAgICAgICAgIEVtYmVkLmFzc2lnblRyYW5zbGF0aW9uc1RvRWxlbWVudChlbGVtKS50aGVuKChvKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBsZXQgbW9ja3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9ja3MnKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBubyBleGNlcHRpb24gYmVjYXVzZSBvZiBkZWZhdWx0XG4gICAgICAgICAgICAgICAgZXhwZWN0KGdldERvY3VtZW50VHJhbnNsYXRpb25zKGVsZW0pLmdldFRleHQoJ25vLWtleScsJ3dpdGgtZGVmYXVsdCcpKVxuICAgICAgICAgICAgICAgICAgICAuaXMuZXF1YWwoJ3dpdGgtZGVmYXVsdCcpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGV4cGVjdChnZXREb2N1bWVudFRyYW5zbGF0aW9ucyhlbGVtKS5nZXRUZXh0KCd0ZXN0MScpKVxuICAgICAgICAgICAgICAgICAgICAuaXMuZXF1YWwoJ3h5eicpO1xuXG4gICAgICAgICAgICAgICAgZG9uZSgpO1xuXG4gICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICAgICAgfSlcblxuXG4gICAgICAgIH0pO1xuICAgIH0pXG5cblxufSk7Il0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxNQTJCTSxnQkFRQSxxQkFNQSxnQkFNQTtBQS9DTjtBQUFBO0FBMkJBLE1BQU0saUJBQWlCLE9BQU8sSUFBSSwyQkFBMkI7QUFRN0QsTUFBTSxzQkFBc0IsT0FBTyxJQUFJLHdCQUF3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Y0FBYyxDQUFDLEVBQ2hFLEdBQUcsTUFBTSxjQUFjO0FBRTVCLGlCQUFPLHdCQUF3QixJQUFJLEVBQUUsUUFBUSxPQUFPLENBQUMsRUFDaEQsR0FBRyxNQUFNLEtBQUs7QUFFbkIsZUFBSztBQUFBLFFBRVQsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNO0FBQ2QsZUFBSyxDQUFDO0FBQUEsUUFDUixDQUFDO0FBQUEsTUFHTCxDQUFDO0FBQUEsSUFDTCxDQUFDO0FBQUEsRUFHTCxDQUFDOyIsCiAgIm5hbWVzIjogWyJ0eXBlIiwgInR5cGUiLCAiYSIsICJTdG9yYWdlIiwgInNlbGYiLCAibm9kZSIsICJhZGRlZE5vZGVzIiwgIl9hIiwgImdldCIsICJhIiwgIm9wdGlvbnMiLCAiQnVmZmVyU291cmNlQ29udmVydGVyIiwgInR5cGUiLCAiYSIsICJzaXplIiwgIm9mZnNldCIsICJDb252ZXJ0IiwgImNvbWJpbmUiLCAicmV0QnVmIiwgInJldFZpZXciLCAiQm9vbGVhbiIsICJTZXQiLCAiX2EiLCAibWF4IiwgInJldFZpZXciLCAic2l6ZSIsICJ0ZW1wQnVmZmVyVmlldyIsICJvZmZzZXQiLCAiZmxhZyIsICJoZXgiLCAiQXNuVHlwZVR5cGVzIiwgIkFzblByb3BUeXBlcyIsICJpbXBvcnRfcHZ0c3V0aWxzIiwgInR5cGUiLCAiQm9vbGVhbiIsICJfYSIsICJTZXQiLCAib3B0aW9ucyIsICJkZWZhdWx0Q29udmVydGVyIiwgIl9hIiwgIlNldCIsICJTZXQiLCAiaW1wb3J0X3B2dHN1dGlscyIsICJ0eXBlIiwgImlzQ29udmVydGlibGUiLCAic2NoZW1hU3RvcmFnZSIsICJpbml0X2luZGV4X2VzIiwgIkpzb25Qcm9wVHlwZXMiLCAibWluIiwgIm1heCIsICJvcHRpb25zIiwgImltcG9ydF9wdnRzdXRpbHMiLCAiT2JqZWN0SWRlbnRpZmllciIsICJpbml0X2luZGV4X2VzIiwgIm9mZnNldCIsICJvcHRpb25zIiwgImZvcm1hdCIsICJfYSIsICJ0eXBlIiwgIkVjUHVibGljS2V5IiwgInNpemUiLCAiRWRQcml2YXRlS2V5IiwgIkVkUHVibGljS2V5IiwgIkN1cnZlUHJpdmF0ZUtleSIsICJsZW4iLCAiaSIsICJzdGFydCIsICJlbmQiLCAibGVuMiIsICJvZmZzZXQiLCAiQnVmZmVyIiwgImlzSW5zdGFuY2UiLCAic2l6ZSIsICJhIiwgImNvbmNhdCIsICJzdGFydCIsICJlbmQiLCAidG9TdHJpbmciLCAiaW5zcGVjdCIsICJtYXgiLCAicmVhZCIsICJpIiwgIm9mZnNldCIsICJ3cml0ZSIsICJieXRlTGVuZ3RoIiwgIm1pbiIsICJ0eXBlIiwgIkNyeXB0byIsICJCdWZmZXIkMSIsICJhIiwgImNyeXB0byIsICJzdGFydCIsICJlbmQiLCAicHJvY2VzcyIsICJpbXBvcnRfcHZ0c3V0aWxzIiwgIkNyeXB0b0tleSIsICJBZXNDYmNQcm92aWRlciIsICJBZXNDbWFjUHJvdmlkZXIiLCAiQWVzQ3RyUHJvdmlkZXIiLCAiQWVzR2NtUHJvdmlkZXIiLCAiQWVzS3dQcm92aWRlciIsICJBZXNFY2JQcm92aWRlciIsICJSc2FQcml2YXRlS2V5IiwgIlJzYVB1YmxpY0tleSIsICJSc2FTc2FQcm92aWRlciIsICJSc2FQc3NQcm92aWRlciIsICJSc2FPYWVwUHJvdmlkZXIiLCAiRWNQcml2YXRlS2V5IiwgIkVjUHVibGljS2V5IiwgIkVjZHNhUHJvdmlkZXIiLCAiRWNkaFByb3ZpZGVyIiwgIkVkUHJpdmF0ZUtleSIsICJFZFB1YmxpY0tleSIsICJFZERzYVByb3ZpZGVyIiwgIkVjZGhFc1Byb3ZpZGVyIiwgIkVkMjU1MTlQcm92aWRlciIsICJYMjU1MTlQcm92aWRlciIsICJQYmtkZjJQcm92aWRlciIsICJIbWFjUHJvdmlkZXIiLCAiSGtkZlByb3ZpZGVyIiwgIlNoYWtlMTI4UHJvdmlkZXIiLCAiU2hha2UyNTZQcm92aWRlciIsICJTdWJ0bGVDcnlwdG8iLCAiaW5pdF9pbmRleF9lcyIsICJmb3JtYXQiLCAib3B0aW9ucyIsICJoYXNoIiwgInR5cGUiLCAiX2EiLCAiaW5pdF9lbnVtcyIsICJuYW1lIiwgInN0eWxlIiwgImdldENvbXB1dGVkU3R5bGUiLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJ3aW5kb3ciLCAibWluIiwgIm1heCIsICJvcHRpb25zIiwgInBvcHBlck9mZnNldHMiLCAibWluIiwgIm1heCIsICJvZmZzZXQiLCAiZWZmZWN0IiwgImluaXRfZW51bXMiLCAidG9QYWRkaW5nT2JqZWN0IiwgInBvcHBlciIsICJnZXRDb21wdXRlZFN0eWxlIiwgIm9wdGlvbnMiLCAiaW5pdF9lbnVtcyIsICJlZmZlY3QiLCAib3B0aW9ucyIsICJ3aW5kb3ciLCAiaGFzaCIsICJnZXRDb21wdXRlZFN0eWxlIiwgImdldENvbXB1dGVkU3R5bGUiLCAiY2xpcHBpbmdQYXJlbnRzIiwgImdldENvbXB1dGVkU3R5bGUiLCAiaW5pdF9lbnVtcyIsICJyZWZlcmVuY2UiLCAiaW5pdF9lbnVtcyIsICJvcHRpb25zIiwgInBvcHBlck9mZnNldHMiLCAib2Zmc2V0IiwgImluaXRfZW51bXMiLCAib3B0aW9ucyIsICJwbGFjZW1lbnRzIiwgInBsYWNlbWVudCIsICJhIiwgImluaXRfZW51bXMiLCAib3B0aW9ucyIsICJwbGFjZW1lbnRzIiwgInBsYWNlbWVudCIsICJfbG9vcCIsICJfaSIsICJjaGVja3MiLCAiaW5pdF9lbnVtcyIsICJoaWRlIiwgImluaXRfZW51bXMiLCAib2Zmc2V0IiwgIm9wdGlvbnMiLCAiaW5pdF9lbnVtcyIsICJvcHRpb25zIiwgInBvcHBlck9mZnNldHMiLCAib2Zmc2V0IiwgIm1pbiIsICJtYXgiLCAiaW5pdF9lbnVtcyIsICJpbml0X2VudW1zIiwgImZuIiwgIm1lcmdlZCIsICJkZWZhdWx0TW9kaWZpZXJzIiwgImNyZWF0ZVBvcHBlciIsICJyZWZlcmVuY2UiLCAicG9wcGVyIiwgIm9wdGlvbnMiLCAiZm4iLCAic3RhdGUiLCAiZWZmZWN0IiwgIm5vb3BGbiIsICJpbml0X2VudW1zIiwgInN5bWJvbCIsICJpbml0IiwgImEiLCAiaW5pdF9jb25zdGFudHMiLCAic3ltYm9sIiwgImluaXRfY29uc3RhbnRzIiwgImRvY3VtZW50IiwgImdldFdpbmRvdyIsICJ3aW5kb3ciLCAiZG9jdW1lbnQiLCAiaW5pdF9sb2NhbGUiLCAibmF2aWdhdG9yIiwgIm9wdGlvbnMiLCAiaW5pdF9sb2NhbGUiLCAidHJhbnNsYXRpb25zIiwgImluaXRfY29uc3RhbnRzIiwgInRyYW5zbGF0aW9ucyIsICJjb25zb2xlIiwgInRyYW5zbGF0aW9ucyIsICJjb25jYXQiLCAic3RhcnQiLCAiZW5kIiwgIm9wdGlvbnMiLCAic2V0IiwgInRvZ2dsZSIsICJpbml0X2xvY2FsZSIsICJERUxJTUlURVIiLCAib3B0aW9ucyIsICJ0eXBlIiwgImEiLCAiaW50ZXJuYWwiLCAic2VsZiIsICJkb2N1bWVudCIsICJpbml0X2NvbnN0YW50cyIsICJkb2N1bWVudCIsICJIVE1MVGVtcGxhdGVFbGVtZW50IiwgIkRvY3VtZW50RnJhZ21lbnQiLCAiRG9jdW1lbnQiLCAiaW5pdF9jb25zdGFudHMiLCAiYSIsICJ0eXBlIiwgImRpZmYiLCAiZ2V0T3BlcmF0b3IiLCAidHlwZSIsICJkb2N1bWVudCIsICJvcHRpb25zIiwgInZhbHVlIiwgInR5cGUiLCAiZSIsICJpIiwgInN5bWJvbCIsICJjb25maWciLCAiaW5pdF9jb25zdGFudHMiLCAiZ2V0V2luZG93IiwgIm9wdGlvbnMiLCAib3B0aW9ucyIsICJzZWxmIiwgImZsYWciLCAib3B0aW9ucyIsICJjdXN0b21FbGVtZW50cyIsICJpbml0X2NvbnN0YW50cyIsICJ0cmFuc2xhdGlvbnMiLCAibWluIiwgIm1heCIsICJnbG9iYWxSZWZlcmVuY2UiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAib3B0aW9ucyIsICJ0IiwgImluaXRfdGhlbWUiLCAiaW5pdF9jb25zdGFudHMiLCAib3B0aW9ucyIsICJpbml0X3BvcHBlciIsICJ0eXBlIiwgInNlbGYiLCAib3B0aW9ucyIsICJzaG93IiwgInJlZmVyZW5jZSIsICJnZXRXaW5kb3ciLCAiaW5pdF90YWJzIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfdGhlbWUiLCAiaW5pdF9wb3BwZXIiLCAiZG9jdW1lbnQiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImNvbnRyb2xFbGVtZW50U3ltYm9sIiwgImluaXRFdmVudEhhbmRsZXIiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9tZXNzYWdlIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJjb250cm9sRWxlbWVudFN5bWJvbCIsICJnZXRUZW1wbGF0ZSIsICJpbml0X25vdGlmeSIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X21lc3NhZ2UiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImluaXRFdmVudEhhbmRsZXIiLCAic2VsZiIsICJtaW4iLCAibWF4IiwgImFwcGx5IiwgImdldFRlbXBsYXRlIiwgImluaXRfc3BsaXRfcGFuZWwiLCAiaW5pdF9ub3RpZnkiLCAiaW5pdF9jb25zdGFudHMiLCAiYXR0YWNoUmVzaXplT2JzZXJ2ZXIiLCAicmVzaXplT2JzZXJ2ZXJTeW1ib2wiLCAidGltZXJDYWxsYmFja1N5bWJvbCIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJnZXRUZW1wbGF0ZSIsICJpbml0X3BhbmVsIiwgIm9wdGlvbnMiLCAib2JzZXJ2ZXIiLCAibG9hZENvbnRlbnQiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJzZWxmIiwgInR5cGUiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImdldFRlbXBsYXRlIiwgImluaXRfYnV0dG9uIiwgImluaXRfY29uc3RhbnRzIiwgIm9wdGlvbnMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW50ZXJuYWxTeW1ib2wiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9zdGF0ZV9idXR0b24iLCAiaW5pdF9idXR0b24iLCAic3R5bGVzIiwgImEiLCAic3RhcnQiLCAiZW5kIiwgIm1heCIsICJtaW4iLCAiZ2V0T3Bwb3NpdGVQbGFjZW1lbnQiLCAicmVjdFRvQ2xpZW50UmVjdCIsICJwbGFjZW1lbnRzIiwgInJvdW5kIiwgInJlZmVyZW5jZSIsICJkZXRlY3RPdmVyZmxvdyIsICJvcHRpb25zIiwgInBsYXRmb3JtIiwgInJlY3RUb0NsaWVudFJlY3QiLCAiYXJyb3ciLCAiZmxpcCIsICJvZmZzZXQiLCAiY29uZmlnIiwgImZuIiwgIm1pbiIsICJtYXgiLCAicGxhY2VtZW50cyIsICJhbGlnbm1lbnQiLCAiYSIsICJnZXRPcHBvc2l0ZVBsYWNlbWVudCIsICJzaWRlcyIsICJzaWRlIiwgInBsYWNlbWVudCIsICJvdmVyZmxvdyIsICJ4IiwgInkiLCAiYXBwbHkiLCAiZ2V0Tm9kZU5hbWUiLCAiaXNOb2RlIiwgImdldFdpbmRvdyIsICJnZXREb2N1bWVudEVsZW1lbnQiLCAiaXNFbGVtZW50IiwgImlzSFRNTEVsZW1lbnQiLCAiaXNTaGFkb3dSb290IiwgImdldENvbXB1dGVkU3R5bGUiLCAiaXNUYWJsZUVsZW1lbnQiLCAiZ2V0Q29udGFpbmluZ0Jsb2NrIiwgImdldFBhcmVudE5vZGUiLCAiZ2V0Tm9kZVNjcm9sbCIsICJnZXRDb21wdXRlZFN0eWxlIiwgImlzSFRNTEVsZW1lbnQiLCAicm91bmQiLCAiaXNFbGVtZW50IiwgImdldFdpbmRvdyIsICJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCAibGVmdCIsICJ0b3AiLCAicmVjdFRvQ2xpZW50UmVjdCIsICJnZXRXaW5kb3dTY3JvbGxCYXJYIiwgImdldE5vZGVTY3JvbGwiLCAiZ2V0RG9jdW1lbnRFbGVtZW50IiwgImdldE5vZGVOYW1lIiwgImdldERvY3VtZW50UmVjdCIsICJtYXgiLCAiZ2V0Vmlld3BvcnRSZWN0IiwgImdldElubmVyQm91bmRpbmdDbGllbnRSZWN0IiwgImdldFBhcmVudE5vZGUiLCAiZ2V0Q2xpcHBpbmdSZWN0IiwgIm1pbiIsICJnZXRUcnVlT2Zmc2V0UGFyZW50IiwgImdldE9mZnNldFBhcmVudCIsICJpc1RhYmxlRWxlbWVudCIsICJnZXRDb250YWluaW5nQmxvY2siLCAib3B0aW9ucyIsICJyZWZlcmVuY2UiLCAiZGV0ZWN0T3ZlcmZsb3ciLCAib2Zmc2V0IiwgImF1dG9QbGFjZW1lbnQiLCAic2hpZnQiLCAiZmxpcCIsICJzaXplIiwgImFycm93IiwgImNvbXB1dGVQb3NpdGlvbiIsICJvcHRpb25zIiwgImNvbmZpZyIsICJmbiIsICJmbGlwIiwgInNoaWZ0IiwgImxpbmUiLCAiYXV0b1BsYWNlbWVudCIsICJkZXRlY3RPdmVyZmxvdyIsICJhcnJvdyIsICJzaXplIiwgIm9mZnNldCIsICJjb21wdXRlUG9zaXRpb24iLCAieCIsICJ5IiwgImluaXRfY29uc3RhbnRzIiwgInBvcHBlckVsZW1lbnRTeW1ib2wiLCAic2VsZiIsICJpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMiLCAib3B0aW9ucyIsICJhdHRhY2hSZXNpemVPYnNlcnZlciIsICJyZXNpemVPYnNlcnZlclN5bWJvbCIsICJ0aW1lckNhbGxiYWNrU3ltYm9sIiwgImRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlciIsICJvYnNlcnZlciIsICJydW4iLCAic2hvdyIsICJoaWRlIiwgImluaXRPcHRpb25PYnNlcnZlciIsICJ0cmFuc2xhdGlvbnMiLCAibWF4IiwgInN0eWxlcyIsICJjb250cm9sRWxlbWVudFN5bWJvbCIsICJmb2N1c0ZpbHRlciIsICJ0eXBlIiwgImEiLCAiZ2xvYmFsIiwgImluaXRFdmVudEhhbmRsZXIiLCAiY2xvc2VFdmVudEhhbmRsZXIiLCAiZWxlbWVudCIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiY29udGFpbmVyRWxlbWVudFN5bWJvbCIsICJnZXRUZW1wbGF0ZSIsICJpbml0X3NlbGVjdCIsICJpbml0X2NvbnN0YW50cyIsICJkb2N1bWVudCIsICJmbGFnIiwgImluaXRfcG9wcGVyIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRFdmVudEhhbmRsZXIiLCAiY2xvc2VFdmVudEhhbmRsZXIiLCAiaGlkZSIsICJidXR0b25FbGVtZW50U3ltYm9sIiwgImF0dGFjaFJlc2l6ZU9ic2VydmVyIiwgInJlc2l6ZU9ic2VydmVyU3ltYm9sIiwgInRpbWVyQ2FsbGJhY2tTeW1ib2wiLCAidXBkYXRlUG9wcGVyIiwgImRpc2Nvbm5lY3RSZXNpemVPYnNlcnZlciIsICJzZWxmIiwgInBvcHBlckVsZW1lbnRTeW1ib2wiLCAiY29udHJvbEVsZW1lbnRTeW1ib2wiLCAic2hvdyIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9wb3BwZXIiLCAiaW5pdF9jb25zdGFudHMiLCAiZG9jdW1lbnQiLCAidHlwZSIsICJQb3BwZXIiLCAiaW5pdF9wb3BwZXIiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJjbG9zZUV2ZW50SGFuZGxlciIsICJhdHRhY2hSZXNpemVPYnNlcnZlciIsICJyZXNpemVPYnNlcnZlclN5bWJvbCIsICJ0aW1lckNhbGxiYWNrU3ltYm9sIiwgInVwZGF0ZVBvcHBlciIsICJkaXNjb25uZWN0UmVzaXplT2JzZXJ2ZXIiLCAicG9wcGVyRWxlbWVudFN5bWJvbCIsICJjb250cm9sRWxlbWVudFN5bWJvbCIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiYnV0dG9uRWxlbWVudFN5bWJvbCIsICJhcnJvd0VsZW1lbnRTeW1ib2wiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9wb3BwZXJfYnV0dG9uIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfcG9wcGVyIiwgImluaXRfYnV0dG9uIiwgIlBvcHBlciIsICJzdHlsZXMiLCAiZG9jdW1lbnQiLCAidHlwZSIsICJvcHRpb25zIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRFdmVudEhhbmRsZXJCeU1vZGUiLCAiYnV0dG9uRWxlbWVudFN5bWJvbCIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9tZXNzYWdlX3N0YXRlX2J1dHRvbiIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X3BvcHBlciIsICJpbml0X3N0YXRlX2J1dHRvbiIsICJQb3BwZXIiLCAic3R5bGVzIiwgIm9wdGlvbnMiLCAidHlwZSIsICJzZWxmIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJnZXRUZW1wbGF0ZSIsICJpbml0X2NvbmZpcm1fYnV0dG9uIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfYnV0dG9uIiwgImluaXRfcG9wcGVyX2J1dHRvbiIsICJpbml0X21lc3NhZ2Vfc3RhdGVfYnV0dG9uIiwgInN0eWxlcyIsICJOb2RlTGlzdCIsICJOb2RlIiwgInNlbGYiLCAiTm9kZSIsICJOb2RlTGlzdCIsICJvcHRpb25zIiwgIk5vZGUiLCAiTm9kZUxpc3QiLCAiTm9kZUxpc3QiLCAiTm9kZSIsICJpbml0X2NvbnN0YW50cyIsICJoYW5kbGVPcHRpb25LZXlib2FyZEV2ZW50cyIsICJOb2RlIiwgImluaXRFdmVudEhhbmRsZXIiLCAiYSIsICJrZXlFdmVudEhhbmRsZXIiLCAiaW5pdE9wdGlvbnNGcm9tQXJndW1lbnRzIiwgIm9wdGlvbnMiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF90cmVlX3NlbGVjdCIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X3NlbGVjdCIsICJpbml0X2NvbnN0YW50cyIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAic3dpdGNoRWxlbWVudFN5bWJvbCIsICJpbml0RXZlbnRIYW5kbGVyIiwgInNlbGYiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF90b2dnbGVfc3dpdGNoIiwgImluaXRfY29uc3RhbnRzIiwgImdldFdpbmRvdyIsICJUZW1wbGF0ZSIsICJpbml0T3B0aW9uc0Zyb21Bcmd1bWVudHMiLCAib3B0aW9ucyIsICJpbml0SW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCAiaW50ZXJzZWN0aW9uT2JzZXJ2ZXJXYXNJbml0aWFsaXplZCIsICJvYnNlcnZlciIsICJsb2FkQ29udGVudCIsICJnZXRUZW1wbGF0ZSIsICJpbml0X3RlbXBsYXRlIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfY29uc3RhbnRzIiwgIm9wdGlvbnMiLCAidHJhbnNsYXRpb25zIiwgImRvY3VtZW50IiwgIndpbmRvdyIsICJnZXRXaW5kb3ciLCAib3B0aW9ucyIsICJvcHRpb25zIiwgInBhcnNlT3B0aW9uc0pTT04iLCAiS0VZX0RPQ1VNRU5UIiwgImluaXRfY29uc3RhbnRzIiwgIm9wdGlvbnMiLCAic2VsZiIsICJkb2N1bWVudCIsICJLRVlfRE9DVU1FTlQiLCAiYXBwZW5kVG9Eb2N1bWVudCIsICJpbml0X2NvbnN0YW50cyIsICJzZWxmIiwgImNyZWF0ZUVsZW1lbnQiLCAiZG9jdW1lbnQiLCAiS0VZX0RPQ1VNRU5UIiwgImluaXRfY29uc3RhbnRzIiwgImNyZWF0ZUVsZW1lbnQiLCAiZG9jdW1lbnQiLCAiS0VZX0RPQ1VNRU5UIiwgImluaXRfY29uc3RhbnRzIiwgInR5cGUiLCAib3B0aW9ucyIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2NvbnN0YW50cyIsICJ3aW5kb3ciLCAiZ2V0V2luZG93IiwgInZlcnNpb24iLCAiZXZlbnQiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9jb25maWdfbWFuYWdlciIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJnZXRUZW1wbGF0ZSIsICJpbml0X2hvc3QiLCAiaW5pdF9ub3RpZnkiLCAiaW5pdF9sb2NhbGUiLCAiaW5pdF9jb25maWdfbWFuYWdlciIsICJpbml0X2NvbnN0YW50cyIsICJpbml0Q29udHJvbFJlZmVyZW5jZXMiLCAib3ZlcmxheUVsZW1lbnRTeW1ib2wiLCAiaW5pdEV2ZW50SGFuZGxlciIsICJnZXRUZW1wbGF0ZSIsICJpbml0X292ZXJsYXkiLCAiaW5pdF9ub3RpZnkiLCAiaW5pdF9jb25zdGFudHMiLCAiZ2V0V2luZG93IiwgImluaXRfdXRpbCIsICJpbml0X2NvbnN0YW50cyIsICJBVFRSSUJVVEVfQlVUVE9OX0xBQkVMIiwgImluaXRfY29uc3RhbnRzIiwgImluaXRfY29uc3RhbnRzIiwgInJlc2l6ZU9ic2VydmVyU3ltYm9sIiwgImluaXRFdmVudEhhbmRsZXIiLCAiaW5pdENvbnRyb2xSZWZlcmVuY2VzIiwgImNvbnRyb2xFbGVtZW50U3ltYm9sIiwgImRvY3VtZW50IiwgInRpbWVyQ2FsbGJhY2tTeW1ib2wiLCAiZ2V0VGVtcGxhdGUiLCAiaW5pdF9jb2xsYXBzZSIsICJpbml0X2NvbnN0YW50cyIsICJpbml0X2hvc3QiLCAiaW5pdF91dGlsIiwgImluaXRDb250cm9sUmVmZXJlbmNlcyIsICJidXR0b25FbGVtZW50U3ltYm9sIiwgImluaXRFdmVudEhhbmRsZXIiLCAiQVRUUklCVVRFX0JVVFRPTl9MQUJFTCIsICJnZXRUZW1wbGF0ZSIsICJpbml0X2RldGFpbHMiLCAiaW5pdF9jb25zdGFudHMiLCAiaW5pdF91dGlsIiwgImluaXRfY29sbGFwc2UiLCAiRGV0YWlscyIsICJpbml0X2RldGFpbHMiLCAiaW50ZXJuYWxDb3VudGVyIiwgIl9fZGVmUHJvcCIsICJfX2dldE93blByb3BOYW1lcyIsICJfX2NvbW1vbkpTIiwgIl9fcmVxdWlyZSIsICJfX2V4cG9ydCIsICJpc05hTjIiLCAib3B0aW9ucyIsICJlbmQiLCAic2l6ZSIsICJpc05hTiIsICJlc2NhcGUiLCAiaXNQcmltaXRpdmUiLCAiZm4iLCAiYSIsICJpc09iamVjdCIsICJzdGFydCIsICJjb250YWlucyIsICJmbGFnIiwgImlzSFRNTEVsZW1lbnQiLCAiY29udGFpbnMiLCAib3B0aW9ucyIsICJ3aW5kb3ciLCAiU3RvcmFnZSIsICJleHBlY3QiLCAiZ2xvYmFsIiwgIlRhYnMiLCAiQ3J5cHRvIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiQ3J5cHRvIiwgIlNwbGl0U2NyZWVuIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiU3BsaXRTY3JlZW4iLCAiQ3J5cHRvIiwgImdsb2JhbCIsICJvcHRpb25zIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiUmVsb2FkIiwgInZpZXdwb3J0IiwgImZldGNoUmVmZXJlbmNlIiwgIm9wdGlvbnMiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJTdGF0ZUJ1dHRvbiIsICJvcHRpb25zIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiaHRtbDIiLCAiU2VsZWN0IiwgIm9wdGlvbnMiLCAiZSIsICJhIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiaHRtbDIiLCAiQ29uZmlybUJ1dHRvbiIsICJvcHRpb25zIiwgInBhcnNlT3B0aW9uc0pTT04iLCAic2VsZiIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImh0bWwyIiwgIlRyZWVTZWxlY3QiLCAiZmV0Y2hSZWZlcmVuY2UiLCAib3B0aW9ucyIsICJlIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiaHRtbDIiLCAiQnV0dG9uIiwgIm9wdGlvbnMiLCAiZXhwZWN0IiwgImdsb2JhbCIsICJodG1sMSIsICJodG1sMiIsICJUb2dnbGVTd2l0Y2giLCAiZXhwZWN0IiwgImdsb2JhbCIsICJtb2NraW50ZXJzZWN0aW9ub2JzZXJ2ZXIiLCAiaHRtbDEiLCAiVGVtcGxhdGUiLCAidmlld3BvcnQiLCAiZmV0Y2hSZWZlcmVuY2UiLCAib3B0aW9ucyIsICJleHBlY3QiLCAiTWVzc2FnZSIsICJleHBlY3QiLCAiTm90aWZ5IiwgIk5vdGlmeSIsICJleHBlY3QiLCAibXV0YXRpb25vYnNlcnZlciIsICJleHBlY3QiLCAiZ2xvYmFsIiwgImh0bWwxIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiaW5pdF91dGlsIiwgImV4cGVjdCIsICJnbG9iYWwiLCAiaHRtbDEiLCAiYSIsICJvcHRpb25zIiwgInN0YXJ0IiwgImVuZCIsICJvcHRpb25zIiwgInJhbmRvbSIsICJhIiwgIm1heCIsICJhIiwgImRpZmYiLCAiYSIsICJhIiwgImEiLCAiY29uc29sZSIsICJhIiwgImEiLCAiaGFuZGxlciIsICJNZXNzYWdlIiwgInNlbGYiLCAiTWVzc2FnZSIsICJvcHRpb25zIiwgImlzTm9kZSIsICJNZXNzYWdlIiwgIk1lc3NhZ2UiLCAidmVyc2lvbiIsICJhIiwgIm1vbnN0ZXJWZXJzaW9uIiwgImdldFdpbmRvdyIsICJnZXRXaW5kb3ciLCAiaW5pdCIsICJleHBlY3QiLCAiZXhwZWN0IiwgImV4cGVjdCIsICJleHBlY3QiLCAiZXhwZWN0IiwgImV4cGVjdCIsICJmZXRjaFJlZmVyZW5jZSIsICJtdXRhdGlvbm9ic2VydmVyIiwgImFkZGVkTm9kZXMiLCAib3B0aW9ucyIsICJleHBlY3QiLCAiZSIsICJvcHRpb25zIiwgImluaXRPcHRpb25zRnJvbUF0dHJpYnV0ZXMiLCAiZ2xvYmFsIiwgImEiLCAiZXhwZWN0IiwgImh0bWwxIiwgImh0bWwyIiwgIlVwZGF0ZXIiLCAib3B0aW9ucyIsICJ2IiwgImEiLCAiaW5pdF9sb2NhbGUiLCAiYSIsICJleHBlY3QiLCAiaHRtbDEiLCAiaHRtbDIiLCAiQ3VzdG9tRWxlbWVudCIsICJyZWdpc3RlckN1c3RvbUVsZW1lbnQiLCAiZG9jdW1lbnQiLCAiYWRkT2JqZWN0V2l0aFVwZGF0ZXJUb0VsZW1lbnQiLCAib3B0aW9ucyIsICJhIiwgInNldCIsICJ2IiwgIndpbmRvd1JlYWR5IiwgImRvbVJlYWR5IiwgImdldFdpbmRvdyIsICJhIiwgImV4cGVjdCIsICJDdXN0b21FbGVtZW50IiwgInJlZ2lzdGVyQ3VzdG9tRWxlbWVudCIsICJkb2N1bWVudCIsICJjb250cm9sIiwgImh0bWwxIiwgImh0bWwyIiwgImh0bWwzIiwgInN5bWJvbCIsICJhIiwgIlJlc291cmNlIiwgImZldGNoUmVmZXJlbmNlIiwgIm9wdGlvbnMiLCAiZXhwZWN0IiwgImh0bWwxIiwgIkN1c3RvbUNvbnRyb2wiLCAicmVnaXN0ZXJDdXN0b21FbGVtZW50IiwgImRvY3VtZW50IiwgIm0iLCAiaW5pdF9jb25zdGFudHMiLCAiYSIsICJvcHRpb25zIiwgImRvRGlmZiIsICJ0eXBlIiwgIldlYkNvbm5lY3QiLCAib3B0aW9ucyIsICJNZXNzYWdlIiwgInRlc3RVcmwiLCAiV2ViQ29ubmVjdCIsICJjbG9uZSIsICJvcHRpb25zIiwgImluaXQiLCAiZmV0Y2hEYXRhIiwgInJlYWQiLCAid3JpdGUiLCAiZmV0Y2hSZWZlcmVuY2UiLCAib3B0aW9ucyIsICJyZXNvbHZlIiwgInJlamVjdCIsICJpIiwgImEiLCAiaW5pdF9sb2NhbGUiLCAiaXNOb2RlIiwgImEiLCAiYiIsICJjIiwgImh0bWwxIiwgImEiLCAiTm9kZUxpc3QiLCAiYSIsICJhIiwgImEiLCAiaHRtbDEiLCAiYSIsICJzZWxmIiwgImEiLCAiYSIsICJhIiwgIk5vZGVMaXN0IiwgIk5vZGUiLCAiYSIsICJhIiwgImEiLCAiYSIsICJhIiwgImEiLCAiYSIsICJtYXgiLCAiYSIsICJSYW5kb21JRCIsICJVVUlEIiwgImEiLCAiQmFzZSIsICJhIiwgImEiLCAiTm9kZUxpc3QiLCAiTm9kZSIsICJOb2RlIiwgIk5vZGVMaXN0IiwgIkZvcm1hdHRlciIsICJvcHRpb25zIiwgInRyYW5zbGF0aW9ucyIsICJGb3JtYXR0ZXIiLCAiYSIsICJhIiwgImluaXRfY29uc3RhbnRzIiwgImh0bWwxIiwgInRyYW5zbGF0aW9uc0xpbmtTeW1ib2wiLCAib3B0aW9ucyIsICJnbG9iYWwiLCAiZmV0Y2hSZWZlcmVuY2UiLCAib3B0aW9ucyIsICJnbG9iYWwiLCAiaHRtbDEiLCAiZSIsICJodG1sMSJdCn0K
 } catch (e) {
 document.getElementById('mocha-errors').insertAdjacentHTML('afterbegin', e );
 document.getElementById('mocha-stats').style.backgroundColor = 'red';